From 328cc40d3836ee9302280eb5034428a36ca0fb31 Mon Sep 17 00:00:00 2001 From: Knut Ahlers Date: Sun, 5 Nov 2017 16:06:22 +0100 Subject: [PATCH] Switch to dep for dependency managment, update deps Signed-off-by: Knut Ahlers --- Godeps/Godeps.json | 83 - Godeps/Readme | 5 - Gopkg.lock | 117 + Gopkg.toml | 42 + promcertcheck | Bin 10300206 -> 10654798 bytes vendor/bitbucket.org/ww/goautoneg/Makefile | 13 - .../github.com/Luzifer/rconfig/bool_test.go | 70 + .../Luzifer/rconfig/duration_test.go | 41 + .../github.com/Luzifer/rconfig/errors_test.go | 56 + .../Luzifer/rconfig/example_test.go | 37 + .../github.com/Luzifer/rconfig/float_test.go | 44 + .../Luzifer/rconfig/general_test.go | 128 + vendor/github.com/Luzifer/rconfig/int_test.go | 54 + .../Luzifer/rconfig/os-args_test.go | 40 + .../Luzifer/rconfig/precedence_test.go | 87 + .../Luzifer/rconfig/rconfig_suite_test.go | 13 + .../github.com/Luzifer/rconfig/slice_test.go | 51 + .../Luzifer/rconfig/sub-struct_test.go | 36 + .../github.com/Luzifer/rconfig/uint_test.go | 59 + .../Luzifer/rconfig/vardefault_test.go | 122 + vendor/github.com/beorn7/perks/.gitignore | 2 + vendor/github.com/beorn7/perks/LICENSE | 20 + vendor/github.com/beorn7/perks/README.md | 31 + .../beorn7/perks/histogram/bench_test.go | 26 + .../beorn7/perks/histogram/histogram.go | 108 + .../beorn7/perks/histogram/histogram_test.go | 38 + .../beorn7/perks/quantile/stream.go | 2 +- .../beorn7/perks/quantile/stream_test.go | 27 + vendor/github.com/beorn7/perks/topk/topk.go | 90 + .../github.com/beorn7/perks/topk/topk_test.go | 57 + vendor/github.com/flosch/pongo2/.travis.yml | 4 +- vendor/github.com/flosch/pongo2/README.md | 8 +- vendor/github.com/flosch/pongo2/context.go | 5 +- vendor/github.com/flosch/pongo2/error.go | 11 +- vendor/github.com/flosch/pongo2/filters.go | 16 +- .../flosch/pongo2/filters_builtin.go | 120 +- vendor/github.com/flosch/pongo2/lexer.go | 18 +- vendor/github.com/flosch/pongo2/nodes.go | 8 +- vendor/github.com/flosch/pongo2/nodes_html.go | 8 +- .../github.com/flosch/pongo2/nodes_wrapper.go | 8 +- vendor/github.com/flosch/pongo2/parser.go | 38 +- .../flosch/pongo2/parser_expression.go | 150 +- vendor/github.com/flosch/pongo2/pongo2.go | 6 +- .../flosch/pongo2/pongo2_issues_test.go | 20 + .../flosch/pongo2/pongo2_template_test.go | 195 +- .../github.com/flosch/pongo2/pongo2_test.go | 32 +- vendor/github.com/flosch/pongo2/tags.go | 26 +- .../flosch/pongo2/tags_autoescape.go | 26 +- vendor/github.com/flosch/pongo2/tags_block.go | 33 +- .../github.com/flosch/pongo2/tags_comment.go | 10 +- vendor/github.com/flosch/pongo2/tags_cycle.go | 32 +- .../github.com/flosch/pongo2/tags_extends.go | 22 +- .../github.com/flosch/pongo2/tags_filter.go | 28 +- .../github.com/flosch/pongo2/tags_firstof.go | 14 +- vendor/github.com/flosch/pongo2/tags_for.go | 59 +- vendor/github.com/flosch/pongo2/tags_if.go | 39 +- .../flosch/pongo2/tags_ifchanged.go | 51 +- .../github.com/flosch/pongo2/tags_ifequal.go | 27 +- .../flosch/pongo2/tags_ifnotequal.go | 31 +- .../github.com/flosch/pongo2/tags_import.go | 36 +- .../github.com/flosch/pongo2/tags_include.go | 106 +- vendor/github.com/flosch/pongo2/tags_lorem.go | 51 +- vendor/github.com/flosch/pongo2/tags_macro.go | 64 +- vendor/github.com/flosch/pongo2/tags_now.go | 17 +- vendor/github.com/flosch/pongo2/tags_set.go | 4 +- .../flosch/pongo2/tags_spaceless.go | 10 +- vendor/github.com/flosch/pongo2/tags_ssi.go | 27 +- .../flosch/pongo2/tags_templatetag.go | 20 +- .../flosch/pongo2/tags_widthratio.go | 27 +- vendor/github.com/flosch/pongo2/tags_with.go | 44 +- vendor/github.com/flosch/pongo2/template.go | 119 +- .../flosch/pongo2/template_loader.go | 156 - .../github.com/flosch/pongo2/template_sets.go | 241 +- .../pongo2/template_tests/expressions.tpl | 18 +- .../pongo2/template_tests/expressions.tpl.out | 18 +- .../template_tests/filters-execution.err | 3 +- .../template_tests/filters-execution.err.out | 3 +- .../pongo2/template_tests/filters.tpl.out | 4 +- .../flosch/pongo2/template_tests/for.tpl | 20 +- .../flosch/pongo2/template_tests/for.tpl.out | 20 +- .../flosch/pongo2/template_tests/includes.tpl | 5 +- .../pongo2/template_tests/includes.tpl.out | 5 +- .../pongo2/template_tests/pongo2ctx.tpl.out | 2 +- .../flosch/pongo2/template_tests/with.tpl.out | 2 +- vendor/github.com/flosch/pongo2/value.go | 140 +- vendor/github.com/flosch/pongo2/variable.go | 242 +- vendor/github.com/golang/protobuf/.gitignore | 16 + vendor/github.com/golang/protobuf/.travis.yml | 18 + vendor/github.com/golang/protobuf/AUTHORS | 3 + .../github.com/golang/protobuf/CONTRIBUTORS | 3 + vendor/github.com/golang/protobuf/LICENSE | 31 + .../github.com/golang/protobuf/Make.protobuf | 40 + vendor/github.com/golang/protobuf/Makefile | 55 + vendor/github.com/golang/protobuf/README.md | 244 + .../golang/protobuf/_conformance/Makefile | 33 + .../protobuf/_conformance/conformance.go | 161 + .../conformance_proto/conformance.pb.go | 1885 ++++ .../conformance_proto/conformance.proto | 285 + .../golang/protobuf/descriptor/descriptor.go | 93 + .../protobuf/descriptor/descriptor_test.go | 32 + .../golang/protobuf/jsonpb/jsonpb.go | 1083 +++ .../golang/protobuf/jsonpb/jsonpb_test.go | 896 ++ .../jsonpb/jsonpb_test_proto/Makefile | 33 + .../jsonpb_test_proto/more_test_objects.pb.go | 266 + .../jsonpb_test_proto/more_test_objects.proto | 69 + .../jsonpb_test_proto/test_objects.pb.go | 852 ++ .../jsonpb_test_proto/test_objects.proto | 147 + .../github.com/golang/protobuf/proto/Makefile | 2 +- .../golang/protobuf/proto/all_test.go | 251 +- .../golang/protobuf/proto/any_test.go | 300 + .../github.com/golang/protobuf/proto/clone.go | 52 +- .../golang/protobuf/proto/clone_test.go | 73 + .../golang/protobuf/proto/decode.go | 177 +- .../golang/protobuf/proto/decode_test.go | 258 + .../golang/protobuf/proto/encode.go | 141 +- .../golang/protobuf/proto/encode_test.go | 85 + .../github.com/golang/protobuf/proto/equal.go | 72 +- .../golang/protobuf/proto/equal_test.go | 33 + .../golang/protobuf/proto/extensions.go | 231 +- .../golang/protobuf/proto/extensions_test.go | 246 +- .../github.com/golang/protobuf/proto/lib.go | 145 +- .../golang/protobuf/proto/map_test.go | 46 + .../golang/protobuf/proto/message_set.go | 84 +- .../golang/protobuf/proto/message_set_test.go | 10 +- .../golang/protobuf/proto/pointer_reflect.go | 11 +- .../golang/protobuf/proto/pointer_unsafe.go | 10 +- .../golang/protobuf/proto/properties.go | 160 +- .../protobuf/proto/proto3_proto/proto3.pb.go | 257 +- .../protobuf/proto/proto3_proto/proto3.proto | 19 + .../golang/protobuf/proto/proto3_test.go | 10 + .../golang/protobuf/proto/size_test.go | 22 + .../golang/protobuf/proto/testdata/Makefile | 50 + .../protobuf/proto/testdata/golden_test.go | 86 + .../golang/protobuf/proto/testdata/test.pb.go | 4147 +++++++++ .../golang/protobuf/proto/testdata/test.proto | 548 ++ .../github.com/golang/protobuf/proto/text.go | 270 +- .../golang/protobuf/proto/text_parser.go | 359 +- .../golang/protobuf/proto/text_parser_test.go | 170 +- .../golang/protobuf/proto/text_test.go | 39 +- .../golang/protobuf/protoc-gen-go/Makefile | 33 + .../protoc-gen-go/descriptor/Makefile | 37 + .../protoc-gen-go/descriptor/descriptor.pb.go | 2215 +++++ .../protoc-gen-go/descriptor/descriptor.proto | 849 ++ .../golang/protobuf/protoc-gen-go/doc.go | 51 + .../protobuf/protoc-gen-go/generator/Makefile | 40 + .../protoc-gen-go/generator/generator.go | 2866 ++++++ .../protoc-gen-go/generator/name_test.go | 114 + .../protobuf/protoc-gen-go/grpc/grpc.go | 463 + .../protobuf/protoc-gen-go/link_grpc.go | 34 + .../golang/protobuf/protoc-gen-go/main.go | 98 + .../protobuf/protoc-gen-go/plugin/Makefile | 45 + .../protoc-gen-go/plugin/plugin.pb.go | 293 + .../protoc-gen-go/plugin/plugin.pb.golden | 83 + .../protoc-gen-go/plugin/plugin.proto | 167 + .../protobuf/protoc-gen-go/testdata/Makefile | 73 + .../testdata/extension_base.proto | 46 + .../testdata/extension_extra.proto | 38 + .../protoc-gen-go/testdata/extension_test.go | 210 + .../testdata/extension_user.proto | 100 + .../protoc-gen-go/testdata/grpc.proto | 59 + .../protoc-gen-go/testdata/imp.pb.go.golden | 113 + .../protobuf/protoc-gen-go/testdata/imp.proto | 70 + .../protoc-gen-go/testdata/imp2.proto | 43 + .../protoc-gen-go/testdata/imp3.proto | 38 + .../protoc-gen-go/testdata/main_test.go | 46 + .../protoc-gen-go/testdata/multi/multi1.proto | 44 + .../protoc-gen-go/testdata/multi/multi2.proto | 46 + .../protoc-gen-go/testdata/multi/multi3.proto | 43 + .../protoc-gen-go/testdata/my_test/test.pb.go | 870 ++ .../testdata/my_test/test.pb.go.golden | 870 ++ .../protoc-gen-go/testdata/my_test/test.proto | 156 + .../protoc-gen-go/testdata/proto3.proto | 53 + .../github.com/golang/protobuf/ptypes/any.go | 139 + .../golang/protobuf/ptypes/any/any.pb.go | 178 + .../golang/protobuf/ptypes/any/any.proto | 149 + .../golang/protobuf/ptypes/any_test.go | 113 + .../github.com/golang/protobuf/ptypes/doc.go | 35 + .../golang/protobuf/ptypes/duration.go | 102 + .../protobuf/ptypes/duration/duration.pb.go | 144 + .../protobuf/ptypes/duration/duration.proto | 117 + .../golang/protobuf/ptypes/duration_test.go | 121 + .../golang/protobuf/ptypes/empty/empty.pb.go | 66 + .../golang/protobuf/ptypes/empty/empty.proto | 52 + .../golang/protobuf/ptypes/regen.sh | 43 + .../protobuf/ptypes/struct/struct.pb.go | 380 + .../protobuf/ptypes/struct/struct.proto | 96 + .../golang/protobuf/ptypes/timestamp.go | 134 + .../protobuf/ptypes/timestamp/timestamp.pb.go | 160 + .../protobuf/ptypes/timestamp/timestamp.proto | 133 + .../golang/protobuf/ptypes/timestamp_test.go | 153 + .../protobuf/ptypes/wrappers/wrappers.pb.go | 260 + .../protobuf/ptypes/wrappers/wrappers.proto | 118 + vendor/github.com/gorilla/context/.travis.yml | 24 +- vendor/github.com/gorilla/mux/.travis.yml | 25 +- vendor/github.com/gorilla/mux/README.md | 384 +- vendor/github.com/gorilla/mux/bench_test.go | 28 + .../github.com/gorilla/mux/context_gorilla.go | 26 + .../gorilla/mux/context_gorilla_test.go | 40 + .../github.com/gorilla/mux/context_native.go | 24 + .../gorilla/mux/context_native_test.go | 32 + vendor/github.com/gorilla/mux/doc.go | 75 +- vendor/github.com/gorilla/mux/mux.go | 282 +- vendor/github.com/gorilla/mux/mux_test.go | 1455 +++- vendor/github.com/gorilla/mux/old_test.go | 26 +- vendor/github.com/gorilla/mux/regexp.go | 126 +- vendor/github.com/gorilla/mux/route.go | 182 +- .../golang_protobuf_extensions}/.travis.yml | 1 + .../golang_protobuf_extensions/LICENSE | 201 + .../golang_protobuf_extensions/NOTICE | 1 + .../golang_protobuf_extensions/README.md | 20 + .../golang_protobuf_extensions/ext/moved.go | 2 + .../pbtest/deleted.go | 2 + .../pbutil/all_test.go | 149 +- .../pbutil/decode.go | 2 +- .../pbutil/decode_test.go | 99 + .../pbutil/encode.go | 4 +- .../pbutil/encode_test.go | 67 + .../prometheus/client_golang/.gitignore | 26 + .../prometheus/client_golang/.travis.yml | 9 + .../prometheus/client_golang/AUTHORS.md | 18 + .../prometheus/client_golang/CHANGELOG.md | 109 + .../prometheus/client_golang/CONTRIBUTING.md | 18 + .../prometheus/client_golang/LICENSE | 201 + .../prometheus/client_golang/NOTICE | 23 + .../prometheus/client_golang/README.md | 45 + .../prometheus/client_golang/VERSION | 1 + .../client_golang/api/prometheus/api.go | 345 + .../client_golang/api/prometheus/api_test.go | 453 + .../client_golang/examples/random/main.go | 103 + .../labelvalue.go => examples/simple/main.go} | 30 +- .../client_golang/model/labelname_test.go | 55 - .../client_golang/model/labelset.go | 83 - .../client_golang/model/labelvalue_test.go | 55 - .../prometheus/client_golang/model/metric.go | 192 - .../prometheus/client_golang/model/sample.go | 79 - .../client_golang/model/sample_test.go | 114 - .../client_golang/model/timestamp.go | 116 - .../client_golang/prometheus/README.md | 54 +- .../prometheus/benchmark_test.go | 24 + .../client_golang/prometheus/collector.go | 52 +- .../client_golang/prometheus/counter.go | 31 +- .../client_golang/prometheus/desc.go | 53 +- .../client_golang/prometheus/doc.go | 178 +- .../prometheus/example_clustermanager_test.go | 96 +- .../prometheus/example_memstats_test.go | 87 - .../prometheus/example_selfcollector_test.go | 69 - .../client_golang/prometheus/examples_test.go | 289 +- .../{expvar.go => expvar_collector.go} | 32 +- ...xpvar_test.go => expvar_collector_test.go} | 0 .../client_golang/prometheus/fnv.go | 29 + .../client_golang/prometheus/gauge.go | 15 +- .../client_golang/prometheus/go_collector.go | 219 +- .../prometheus/go_collector_test.go | 4 + .../client_golang/prometheus/histogram.go | 37 +- .../prometheus/histogram_test.go | 8 + .../client_golang/prometheus/http.go | 151 +- .../client_golang/prometheus/metric.go | 36 +- .../prometheus/process_collector.go | 4 +- .../prometheus/process_collector_test.go | 40 +- .../client_golang/prometheus/promhttp/http.go | 201 + .../prometheus/promhttp/http_test.go | 137 + .../client_golang/prometheus/push.go | 65 - .../prometheus/push/examples_test.go | 56 + .../client_golang/prometheus/push/push.go | 172 + .../prometheus/push/push_test.go | 176 + .../client_golang/prometheus/registry.go | 1016 +-- .../client_golang/prometheus/registry_test.go | 140 +- .../client_golang/prometheus/summary.go | 46 +- .../client_golang/prometheus/summary_test.go | 4 +- .../client_golang/prometheus/untyped.go | 15 +- .../client_golang/prometheus/value.go | 8 +- .../client_golang/prometheus/vec.go | 263 +- .../client_golang/prometheus/vec_test.go | 255 +- .../prometheus/client_golang/text/proto.go | 43 - .../prometheus/client_model/.gitignore | 1 + .../prometheus/client_model/CONTRIBUTING.md | 18 + .../prometheus/client_model/LICENSE | 201 + .../prometheus/client_model/MAINTAINERS.md | 1 + .../prometheus/client_model/Makefile | 61 + .../github.com/prometheus/client_model/NOTICE | 5 + .../prometheus/client_model/README.md | 26 + .../prometheus/client_model/cpp/metrics.pb.cc | 3380 ++++++++ .../prometheus/client_model/cpp/metrics.pb.h | 2072 +++++ .../prometheus/client_model/metrics.proto | 81 + .../prometheus/client_model/pom.xml | 130 + .../python/prometheus/__init__.py | 12 + .../python/prometheus/client/__init__.py | 12 + .../prometheus/client/model/__init__.py | 14 + .../prometheus/client/model/metrics_pb2.py | 575 ++ .../prometheus/client_model/ruby/.gitignore | 5 + .../prometheus/client_model/ruby/Gemfile | 4 + .../prometheus/client_model/ruby/LICENSE | 201 + .../prometheus/client_model/ruby/Makefile | 17 + .../prometheus/client_model/ruby/README.md | 31 + .../prometheus/client_model/ruby/Rakefile | 1 + .../ruby/lib/prometheus/client/model.rb | 2 + .../lib/prometheus/client/model/metrics.pb.rb | 111 + .../lib/prometheus/client/model/version.rb | 7 + .../ruby/prometheus-client-model.gemspec | 22 + .../prometheus/client_model/setup.py | 23 + .../java/io/prometheus/client/Metrics.java | 7683 +++++++++++++++++ .../github.com/prometheus/common/.travis.yml | 6 + .../prometheus/common/CONTRIBUTING.md | 18 + vendor/github.com/prometheus/common/LICENSE | 201 + .../prometheus/common/MAINTAINERS.md | 1 + vendor/github.com/prometheus/common/NOTICE | 5 + vendor/github.com/prometheus/common/README.md | 12 + .../prometheus/common/config/config.go | 47 + .../prometheus/common/config/http_config.go | 279 + .../common/config/http_config_test.go | 157 + ...ttp.conf.bearer-token-and-file-set.bad.yml | 5 + .../config/testdata/http.conf.empty.bad.yml | 4 + .../common/config/testdata/http.conf.good.yml | 4 + ...ttp.conf.invalid-bearer-token-file.bad.yml | 1 + .../testdata/tls_config.cert_no_key.bad.yml | 1 + .../config/testdata/tls_config.empty.good.yml | 0 .../testdata/tls_config.insecure.good.yml | 1 + .../testdata/tls_config.invalid_field.bad.yml | 1 + .../testdata/tls_config.key_no_cert.bad.yml | 1 + .../common/config/tls_config_test.go | 92 + .../text => common/expfmt}/bench_test.go | 8 +- .../prometheus/common/expfmt/decode.go | 429 + .../prometheus/common/expfmt/decode_test.go | 435 + .../prometheus/common/expfmt/encode.go | 88 + .../prometheus/common/expfmt/expfmt.go | 38 + .../samplevalue.go => common/expfmt/fuzz.go} | 41 +- .../expfmt/fuzz/corpus/from_test_parse_0 | 2 + .../expfmt/fuzz/corpus/from_test_parse_1 | 6 + .../expfmt/fuzz/corpus/from_test_parse_2 | 12 + .../expfmt/fuzz/corpus/from_test_parse_3 | 22 + .../expfmt/fuzz/corpus/from_test_parse_4 | 10 + .../fuzz/corpus/from_test_parse_error_0 | 1 + .../fuzz/corpus/from_test_parse_error_1 | 1 + .../fuzz/corpus/from_test_parse_error_10 | 1 + .../fuzz/corpus/from_test_parse_error_11 | 1 + .../fuzz/corpus/from_test_parse_error_12 | 3 + .../fuzz/corpus/from_test_parse_error_13 | 3 + .../fuzz/corpus/from_test_parse_error_14 | 3 + .../fuzz/corpus/from_test_parse_error_15 | 2 + .../fuzz/corpus/from_test_parse_error_16 | 2 + .../fuzz/corpus/from_test_parse_error_17 | 1 + .../fuzz/corpus/from_test_parse_error_18 | 1 + .../fuzz/corpus/from_test_parse_error_19 | 3 + .../fuzz/corpus/from_test_parse_error_2 | 3 + .../fuzz/corpus/from_test_parse_error_3 | 1 + .../fuzz/corpus/from_test_parse_error_4 | 1 + .../fuzz/corpus/from_test_parse_error_5 | 1 + .../fuzz/corpus/from_test_parse_error_6 | 1 + .../fuzz/corpus/from_test_parse_error_7 | 3 + .../fuzz/corpus/from_test_parse_error_8 | 1 + .../fuzz/corpus/from_test_parse_error_9 | 1 + .../common/expfmt/fuzz/corpus/minimal | 1 + .../prometheus/common/expfmt/testdata/json2 | 46 + .../common/expfmt/testdata/json2_bad | 46 + .../common/expfmt/testdata/protobuf | Bin 0 -> 8239 bytes .../common/expfmt/testdata/protobuf.gz | Bin 0 -> 2097 bytes .../prometheus/common/expfmt/testdata/text | 322 + .../prometheus/common/expfmt/testdata/text.gz | Bin 0 -> 2598 bytes .../expfmt/text_create.go} | 44 +- .../expfmt/text_create_test.go} | 38 +- .../parse.go => common/expfmt/text_parse.go} | 63 +- .../expfmt/text_parse_test.go} | 33 +- .../bitbucket.org/ww/goautoneg/README.txt | 0 .../bitbucket.org/ww/goautoneg/autoneg.go | 0 .../ww/goautoneg/autoneg_test.go | 0 .../common/log/eventlog_formatter.go | 89 + .../github.com/prometheus/common/log/log.go | 364 + .../prometheus/common/log/log_test.go | 39 + .../prometheus/common/log/syslog_formatter.go | 126 + .../common/log/syslog_formatter_test.go | 52 + .../prometheus/common/model/alert.go | 136 + .../prometheus/common/model/alert_test.go | 118 + .../model/fingerprinting.go | 29 +- .../github.com/prometheus/common/model/fnv.go | 42 + .../labelname.go => common/model/labels.go} | 109 +- .../prometheus/common/model/labels_test.go | 140 + .../prometheus/common/model/labelset.go | 169 + .../prometheus/common/model/metric.go | 103 + .../model/metric_test.go | 96 +- .../{client_golang => common}/model/model.go | 3 +- .../model/signature.go | 130 +- .../model/signature_test.go | 70 +- .../prometheus/common/model/silence.go | 106 + .../prometheus/common/model/silence_test.go | 228 + .../prometheus/common/model/time.go | 261 + .../model/time_test.go} | 69 +- .../prometheus/common/model/value.go | 416 + .../prometheus/common/model/value_test.go | 468 + .../prometheus/common/promlog/flag/flag.go | 33 + .../prometheus/common/promlog/log.go | 63 + .../prometheus/common/route/route.go | 100 + .../prometheus/common/route/route_test.go | 44 + .../prometheus/common/version/info.go | 89 + .../github.com/prometheus/procfs/.travis.yml | 6 +- .../github.com/prometheus/procfs/AUTHORS.md | 12 - .../prometheus/procfs/CONTRIBUTING.md | 6 +- .../prometheus/procfs/MAINTAINERS.md | 1 + vendor/github.com/prometheus/procfs/Makefile | 18 + vendor/github.com/prometheus/procfs/README.md | 1 + .../prometheus/procfs/bcache/bcache.go | 84 + .../prometheus/procfs/bcache/get.go | 330 + .../prometheus/procfs/bcache/get_test.go | 114 + .../github.com/prometheus/procfs/buddyinfo.go | 95 + .../prometheus/procfs/buddyinfo_test.go | 64 + .../prometheus/procfs/fixtures/26231/comm | 1 + .../prometheus/procfs/fixtures/26231/limits | 2 +- .../procfs/fixtures/26231/mountstats | 19 + .../prometheus/procfs/fixtures/26232/comm | 1 + .../procfs/fixtures/buddyinfo/short/buddyinfo | 3 + .../fixtures/buddyinfo/sizemismatch/buddyinfo | 3 + .../procfs/fixtures/buddyinfo/valid/buddyinfo | 3 + .../prometheus/procfs/fixtures/fs/xfs/stat | 23 + .../prometheus/procfs/fixtures/mdstat | 26 + .../prometheus/procfs/fixtures/net/ip_vs | 29 +- .../prometheus/procfs/fixtures/net/xfrm_stat | 28 + .../prometheus/procfs/fixtures/self | 1 + .../prometheus/procfs/fixtures/stat | 2 +- vendor/github.com/prometheus/procfs/fs.go | 20 +- .../github.com/prometheus/procfs/fs_test.go | 13 + vendor/github.com/prometheus/procfs/ipvs.go | 51 +- .../github.com/prometheus/procfs/ipvs_test.go | 105 +- vendor/github.com/prometheus/procfs/mdstat.go | 138 + .../prometheus/procfs/mdstat_test.go | 31 + .../prometheus/procfs/mountstats.go | 556 ++ .../prometheus/procfs/mountstats_test.go | 273 + vendor/github.com/prometheus/procfs/proc.go | 78 +- .../github.com/prometheus/procfs/proc_io.go | 3 +- .../prometheus/procfs/proc_io_test.go | 38 +- .../prometheus/procfs/proc_limits.go | 72 +- .../prometheus/procfs/proc_limits_test.go | 25 +- .../github.com/prometheus/procfs/proc_stat.go | 18 +- .../prometheus/procfs/proc_stat_test.go | 56 +- .../github.com/prometheus/procfs/proc_test.go | 122 +- vendor/github.com/prometheus/procfs/stat.go | 196 +- .../github.com/prometheus/procfs/stat_test.go | 54 +- .../prometheus/procfs/sysfs/.gitignore | 1 + .../github.com/prometheus/procfs/sysfs/doc.go | 16 + .../prometheus/procfs/sysfs/fixtures.ttar | 721 ++ .../github.com/prometheus/procfs/sysfs/fs.go | 108 + .../prometheus/procfs/sysfs/fs_test.go | 108 + vendor/github.com/prometheus/procfs/ttar | 264 + vendor/github.com/prometheus/procfs/xfrm.go | 187 + .../github.com/prometheus/procfs/xfrm_test.go | 66 + .../github.com/prometheus/procfs/xfs/parse.go | 359 + .../prometheus/procfs/xfs/parse_test.go | 442 + .../github.com/prometheus/procfs/xfs/xfs.go | 163 + vendor/github.com/robfig/cron/spec.go | 10 +- vendor/github.com/robfig/cron/spec_test.go | 35 +- vendor/github.com/sirupsen/logrus/.gitignore | 1 + vendor/github.com/sirupsen/logrus/.travis.yml | 15 + .../github.com/sirupsen/logrus/CHANGELOG.md | 113 + vendor/github.com/sirupsen/logrus/LICENSE | 21 + vendor/github.com/sirupsen/logrus/README.md | 505 ++ vendor/github.com/sirupsen/logrus/alt_exit.go | 64 + .../sirupsen/logrus/alt_exit_test.go | 83 + .../github.com/sirupsen/logrus/appveyor.yml | 14 + vendor/github.com/sirupsen/logrus/doc.go | 26 + vendor/github.com/sirupsen/logrus/entry.go | 276 + .../github.com/sirupsen/logrus/entry_test.go | 77 + .../sirupsen/logrus/example_basic_test.go | 69 + .../sirupsen/logrus/example_hook_test.go | 35 + vendor/github.com/sirupsen/logrus/exported.go | 193 + .../github.com/sirupsen/logrus/formatter.go | 45 + .../sirupsen/logrus/formatter_bench_test.go | 101 + .../github.com/sirupsen/logrus/hook_test.go | 122 + vendor/github.com/sirupsen/logrus/hooks.go | 34 + .../sirupsen/logrus/hooks/syslog/README.md | 39 + .../sirupsen/logrus/hooks/syslog/syslog.go | 55 + .../logrus/hooks/syslog/syslog_test.go | 27 + .../sirupsen/logrus/hooks/test/test.go | 95 + .../sirupsen/logrus/hooks/test/test_test.go | 39 + .../sirupsen/logrus/json_formatter.go | 79 + .../sirupsen/logrus/json_formatter_test.go | 199 + vendor/github.com/sirupsen/logrus/logger.go | 317 + .../sirupsen/logrus/logger_bench_test.go | 61 + vendor/github.com/sirupsen/logrus/logrus.go | 143 + .../github.com/sirupsen/logrus/logrus_test.go | 386 + .../sirupsen/logrus/terminal_bsd.go | 10 + .../sirupsen/logrus/terminal_linux.go | 14 + .../sirupsen/logrus/text_formatter.go | 191 + .../sirupsen/logrus/text_formatter_test.go | 141 + vendor/github.com/sirupsen/logrus/writer.go | 62 + vendor/github.com/spf13/pflag/.gitignore | 2 + vendor/github.com/spf13/pflag/.travis.yml | 19 +- vendor/github.com/spf13/pflag/README.md | 79 +- vendor/github.com/spf13/pflag/bool.go | 7 +- vendor/github.com/spf13/pflag/bool_slice.go | 147 + .../github.com/spf13/pflag/bool_slice_test.go | 215 + vendor/github.com/spf13/pflag/bool_test.go | 7 +- vendor/github.com/spf13/pflag/count.go | 11 +- vendor/github.com/spf13/pflag/count_test.go | 3 - vendor/github.com/spf13/pflag/example_test.go | 79 +- vendor/github.com/spf13/pflag/flag.go | 537 +- vendor/github.com/spf13/pflag/flag_test.go | 260 +- vendor/github.com/spf13/pflag/float32.go | 7 +- vendor/github.com/spf13/pflag/float64.go | 7 +- vendor/github.com/spf13/pflag/golangflag.go | 13 +- vendor/github.com/spf13/pflag/int.go | 7 +- vendor/github.com/spf13/pflag/int32.go | 7 +- vendor/github.com/spf13/pflag/int64.go | 7 +- vendor/github.com/spf13/pflag/int8.go | 7 +- .../github.com/spf13/pflag/int_slice_test.go | 3 + vendor/github.com/spf13/pflag/ip.go | 2 - vendor/github.com/spf13/pflag/ip_slice.go | 148 + .../github.com/spf13/pflag/ip_slice_test.go | 222 + vendor/github.com/spf13/pflag/ipnet.go | 2 - vendor/github.com/spf13/pflag/string.go | 4 +- vendor/github.com/spf13/pflag/string_array.go | 103 + .../spf13/pflag/string_array_test.go | 233 + vendor/github.com/spf13/pflag/string_slice.go | 40 +- .../spf13/pflag/string_slice_test.go | 112 + vendor/github.com/spf13/pflag/uint.go | 7 +- vendor/github.com/spf13/pflag/uint16.go | 9 +- vendor/github.com/spf13/pflag/uint32.go | 11 +- vendor/github.com/spf13/pflag/uint64.go | 7 +- vendor/github.com/spf13/pflag/uint8.go | 7 +- vendor/github.com/spf13/pflag/uint_slice.go | 126 + .../github.com/spf13/pflag/uint_slice_test.go | 161 + vendor/github.com/spf13/pflag/verify/all.sh | 69 + vendor/github.com/spf13/pflag/verify/gofmt.sh | 19 + .../github.com/spf13/pflag/verify/golint.sh | 15 + vendor/golang.org/x/crypto/.gitattributes | 10 + vendor/golang.org/x/crypto/.gitignore | 2 + vendor/golang.org/x/crypto/AUTHORS | 3 + vendor/golang.org/x/crypto/CONTRIBUTING.md | 31 + vendor/golang.org/x/crypto/CONTRIBUTORS | 3 + vendor/golang.org/x/crypto/LICENSE | 27 + vendor/golang.org/x/crypto/PATENTS | 22 + vendor/golang.org/x/crypto/README.md | 21 + vendor/golang.org/x/crypto/acme/acme.go | 1058 +++ vendor/golang.org/x/crypto/acme/acme_test.go | 1352 +++ .../x/crypto/acme/autocert/autocert.go | 821 ++ .../x/crypto/acme/autocert/autocert_test.go | 606 ++ .../x/crypto/acme/autocert/cache.go | 130 + .../x/crypto/acme/autocert/cache_test.go | 58 + .../x/crypto/acme/autocert/example_test.go | 35 + .../x/crypto/acme/autocert/listener.go | 160 + .../x/crypto/acme/autocert/renewal.go | 124 + .../x/crypto/acme/autocert/renewal_test.go | 191 + vendor/golang.org/x/crypto/acme/jws.go | 153 + vendor/golang.org/x/crypto/acme/jws_test.go | 319 + vendor/golang.org/x/crypto/acme/types.go | 329 + vendor/golang.org/x/crypto/acme/types_test.go | 63 + vendor/golang.org/x/crypto/bcrypt/base64.go | 35 + vendor/golang.org/x/crypto/bcrypt/bcrypt.go | 295 + .../golang.org/x/crypto/bcrypt/bcrypt_test.go | 243 + vendor/golang.org/x/crypto/blake2b/blake2b.go | 207 + .../x/crypto/blake2b/blake2bAVX2_amd64.go | 43 + .../x/crypto/blake2b/blake2bAVX2_amd64.s | 762 ++ .../x/crypto/blake2b/blake2b_amd64.go | 25 + .../x/crypto/blake2b/blake2b_amd64.s | 290 + .../x/crypto/blake2b/blake2b_generic.go | 179 + .../x/crypto/blake2b/blake2b_ref.go | 11 + .../x/crypto/blake2b/blake2b_test.go | 798 ++ vendor/golang.org/x/crypto/blake2b/blake2x.go | 177 + .../golang.org/x/crypto/blake2b/register.go | 32 + vendor/golang.org/x/crypto/blake2s/blake2s.go | 187 + .../x/crypto/blake2s/blake2s_386.go | 35 + .../golang.org/x/crypto/blake2s/blake2s_386.s | 460 + .../x/crypto/blake2s/blake2s_amd64.go | 40 + .../x/crypto/blake2s/blake2s_amd64.s | 463 + .../x/crypto/blake2s/blake2s_generic.go | 174 + .../x/crypto/blake2s/blake2s_ref.go | 17 + .../x/crypto/blake2s/blake2s_test.go | 1002 +++ vendor/golang.org/x/crypto/blake2s/blake2x.go | 178 + .../golang.org/x/crypto/blake2s/register.go | 21 + vendor/golang.org/x/crypto/blowfish/block.go | 159 + .../x/crypto/blowfish/blowfish_test.go | 274 + vendor/golang.org/x/crypto/blowfish/cipher.go | 91 + vendor/golang.org/x/crypto/blowfish/const.go | 199 + vendor/golang.org/x/crypto/bn256/bn256.go | 404 + .../golang.org/x/crypto/bn256/bn256_test.go | 304 + vendor/golang.org/x/crypto/bn256/constants.go | 44 + vendor/golang.org/x/crypto/bn256/curve.go | 278 + .../golang.org/x/crypto/bn256/example_test.go | 43 + vendor/golang.org/x/crypto/bn256/gfp12.go | 200 + vendor/golang.org/x/crypto/bn256/gfp2.go | 219 + vendor/golang.org/x/crypto/bn256/gfp6.go | 296 + vendor/golang.org/x/crypto/bn256/optate.go | 395 + vendor/golang.org/x/crypto/bn256/twist.go | 249 + vendor/golang.org/x/crypto/cast5/cast5.go | 526 ++ .../golang.org/x/crypto/cast5/cast5_test.go | 106 + .../chacha20poly1305/chacha20poly1305.go | 83 + .../chacha20poly1305_amd64.go | 127 + .../chacha20poly1305/chacha20poly1305_amd64.s | 2714 ++++++ .../chacha20poly1305_generic.go | 70 + .../chacha20poly1305_noasm.go | 15 + .../chacha20poly1305/chacha20poly1305_test.go | 182 + .../chacha20poly1305_vectors_test.go | 332 + .../internal/chacha20/chacha_generic.go | 198 + .../internal/chacha20/chacha_test.go | 33 + vendor/golang.org/x/crypto/codereview.cfg | 1 + vendor/golang.org/x/crypto/cryptobyte/asn1.go | 732 ++ .../x/crypto/cryptobyte/asn1/asn1.go | 46 + .../x/crypto/cryptobyte/asn1_test.go | 300 + .../golang.org/x/crypto/cryptobyte/builder.go | 309 + .../x/crypto/cryptobyte/cryptobyte_test.go | 428 + .../x/crypto/cryptobyte/example_test.go | 154 + .../golang.org/x/crypto/cryptobyte/string.go | 167 + .../x/crypto/curve25519/const_amd64.h | 8 + .../x/crypto/curve25519/const_amd64.s | 20 + .../x/crypto/curve25519/cswap_amd64.s | 65 + .../x/crypto/curve25519/curve25519.go | 834 ++ .../x/crypto/curve25519/curve25519_test.go | 39 + vendor/golang.org/x/crypto/curve25519/doc.go | 23 + .../x/crypto/curve25519/freeze_amd64.s | 73 + .../x/crypto/curve25519/ladderstep_amd64.s | 1377 +++ .../x/crypto/curve25519/mont25519_amd64.go | 240 + .../x/crypto/curve25519/mul_amd64.s | 169 + .../x/crypto/curve25519/square_amd64.s | 132 + vendor/golang.org/x/crypto/ed25519/ed25519.go | 181 + .../x/crypto/ed25519/ed25519_test.go | 183 + .../ed25519/internal/edwards25519/const.go | 1422 +++ .../internal/edwards25519/edwards25519.go | 1771 ++++ .../x/crypto/ed25519/testdata/sign.input.gz | Bin 0 -> 50330 bytes .../golang.org/x/crypto/hkdf/example_test.go | 61 + vendor/golang.org/x/crypto/hkdf/hkdf.go | 75 + vendor/golang.org/x/crypto/hkdf/hkdf_test.go | 370 + .../golang.org/x/crypto/md4/example_test.go | 20 + vendor/golang.org/x/crypto/md4/md4.go | 118 + vendor/golang.org/x/crypto/md4/md4_test.go | 71 + vendor/golang.org/x/crypto/md4/md4block.go | 89 + vendor/golang.org/x/crypto/nacl/auth/auth.go | 58 + .../x/crypto/nacl/auth/auth_test.go | 172 + .../x/crypto/nacl/auth/example_test.go | 36 + vendor/golang.org/x/crypto/nacl/box/box.go | 103 + .../golang.org/x/crypto/nacl/box/box_test.go | 78 + .../x/crypto/nacl/box/example_test.go | 95 + .../x/crypto/nacl/secretbox/example_test.go | 53 + .../x/crypto/nacl/secretbox/secretbox.go | 166 + .../x/crypto/nacl/secretbox/secretbox_test.go | 154 + vendor/golang.org/x/crypto/ocsp/ocsp.go | 778 ++ vendor/golang.org/x/crypto/ocsp/ocsp_test.go | 875 ++ .../x/crypto/openpgp/armor/armor.go | 219 + .../x/crypto/openpgp/armor/armor_test.go | 95 + .../x/crypto/openpgp/armor/encode.go | 160 + .../x/crypto/openpgp/canonical_text.go | 59 + .../x/crypto/openpgp/canonical_text_test.go | 52 + .../x/crypto/openpgp/clearsign/clearsign.go | 376 + .../openpgp/clearsign/clearsign_test.go | 210 + .../x/crypto/openpgp/elgamal/elgamal.go | 122 + .../x/crypto/openpgp/elgamal/elgamal_test.go | 49 + .../x/crypto/openpgp/errors/errors.go | 72 + vendor/golang.org/x/crypto/openpgp/keys.go | 637 ++ .../golang.org/x/crypto/openpgp/keys_test.go | 419 + .../x/crypto/openpgp/packet/compressed.go | 123 + .../crypto/openpgp/packet/compressed_test.go | 41 + .../x/crypto/openpgp/packet/config.go | 91 + .../x/crypto/openpgp/packet/encrypted_key.go | 199 + .../openpgp/packet/encrypted_key_test.go | 146 + .../x/crypto/openpgp/packet/literal.go | 89 + .../x/crypto/openpgp/packet/ocfb.go | 143 + .../x/crypto/openpgp/packet/ocfb_test.go | 46 + .../openpgp/packet/one_pass_signature.go | 73 + .../x/crypto/openpgp/packet/opaque.go | 162 + .../x/crypto/openpgp/packet/opaque_test.go | 67 + .../x/crypto/openpgp/packet/packet.go | 537 ++ .../x/crypto/openpgp/packet/packet_test.go | 255 + .../x/crypto/openpgp/packet/private_key.go | 380 + .../crypto/openpgp/packet/private_key_test.go | 270 + .../x/crypto/openpgp/packet/public_key.go | 748 ++ .../crypto/openpgp/packet/public_key_test.go | 202 + .../x/crypto/openpgp/packet/public_key_v3.go | 279 + .../openpgp/packet/public_key_v3_test.go | 82 + .../x/crypto/openpgp/packet/reader.go | 76 + .../x/crypto/openpgp/packet/signature.go | 731 ++ .../x/crypto/openpgp/packet/signature_test.go | 78 + .../x/crypto/openpgp/packet/signature_v3.go | 146 + .../openpgp/packet/signature_v3_test.go | 92 + .../openpgp/packet/symmetric_key_encrypted.go | 155 + .../packet/symmetric_key_encrypted_test.go | 117 + .../openpgp/packet/symmetrically_encrypted.go | 290 + .../packet/symmetrically_encrypted_test.go | 123 + .../x/crypto/openpgp/packet/userattribute.go | 91 + .../openpgp/packet/userattribute_test.go | 109 + .../x/crypto/openpgp/packet/userid.go | 160 + .../x/crypto/openpgp/packet/userid_test.go | 87 + vendor/golang.org/x/crypto/openpgp/read.go | 442 + .../golang.org/x/crypto/openpgp/read_test.go | 613 ++ vendor/golang.org/x/crypto/openpgp/s2k/s2k.go | 273 + .../x/crypto/openpgp/s2k/s2k_test.go | 137 + vendor/golang.org/x/crypto/openpgp/write.go | 378 + .../golang.org/x/crypto/openpgp/write_test.go | 273 + .../x/crypto/otr/libotr_test_helper.c | 197 + vendor/golang.org/x/crypto/otr/otr.go | 1415 +++ vendor/golang.org/x/crypto/otr/otr_test.go | 470 + vendor/golang.org/x/crypto/otr/smp.go | 572 ++ vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go | 77 + .../golang.org/x/crypto/pbkdf2/pbkdf2_test.go | 157 + .../golang.org/x/crypto/pkcs12/bmp-string.go | 50 + .../x/crypto/pkcs12/bmp-string_test.go | 63 + vendor/golang.org/x/crypto/pkcs12/crypto.go | 131 + .../golang.org/x/crypto/pkcs12/crypto_test.go | 125 + vendor/golang.org/x/crypto/pkcs12/errors.go | 23 + .../crypto/pkcs12/internal/rc2/bench_test.go | 27 + .../x/crypto/pkcs12/internal/rc2/rc2.go | 274 + .../x/crypto/pkcs12/internal/rc2/rc2_test.go | 93 + vendor/golang.org/x/crypto/pkcs12/mac.go | 45 + vendor/golang.org/x/crypto/pkcs12/mac_test.go | 42 + vendor/golang.org/x/crypto/pkcs12/pbkdf.go | 170 + .../golang.org/x/crypto/pkcs12/pbkdf_test.go | 34 + vendor/golang.org/x/crypto/pkcs12/pkcs12.go | 346 + .../golang.org/x/crypto/pkcs12/pkcs12_test.go | 138 + vendor/golang.org/x/crypto/pkcs12/safebags.go | 57 + .../golang.org/x/crypto/poly1305/poly1305.go | 33 + .../x/crypto/poly1305/poly1305_test.go | 159 + .../golang.org/x/crypto/poly1305/sum_amd64.go | 22 + .../golang.org/x/crypto/poly1305/sum_amd64.s | 125 + .../golang.org/x/crypto/poly1305/sum_arm.go | 22 + vendor/golang.org/x/crypto/poly1305/sum_arm.s | 427 + .../golang.org/x/crypto/poly1305/sum_ref.go | 141 + .../x/crypto/ripemd160/ripemd160.go | 120 + .../x/crypto/ripemd160/ripemd160_test.go | 64 + .../x/crypto/ripemd160/ripemd160block.go | 161 + .../x/crypto/salsa20/salsa/hsalsa20.go | 144 + .../x/crypto/salsa20/salsa/salsa2020_amd64.s | 889 ++ .../x/crypto/salsa20/salsa/salsa208.go | 199 + .../x/crypto/salsa20/salsa/salsa20_amd64.go | 24 + .../x/crypto/salsa20/salsa/salsa20_ref.go | 234 + .../x/crypto/salsa20/salsa/salsa_test.go | 54 + vendor/golang.org/x/crypto/salsa20/salsa20.go | 54 + .../x/crypto/salsa20/salsa20_test.go | 139 + .../x/crypto/scrypt/example_test.go | 26 + vendor/golang.org/x/crypto/scrypt/scrypt.go | 244 + .../golang.org/x/crypto/scrypt/scrypt_test.go | 162 + vendor/golang.org/x/crypto/sha3/doc.go | 66 + vendor/golang.org/x/crypto/sha3/hashes.go | 65 + vendor/golang.org/x/crypto/sha3/keccakf.go | 412 + .../golang.org/x/crypto/sha3/keccakf_amd64.go | 13 + .../golang.org/x/crypto/sha3/keccakf_amd64.s | 390 + vendor/golang.org/x/crypto/sha3/register.go | 18 + vendor/golang.org/x/crypto/sha3/sha3.go | 192 + vendor/golang.org/x/crypto/sha3/sha3_test.go | 311 + vendor/golang.org/x/crypto/sha3/shake.go | 60 + .../sha3/testdata/keccakKats.json.deflate | Bin 0 -> 521342 bytes vendor/golang.org/x/crypto/sha3/xor.go | 16 + .../golang.org/x/crypto/sha3/xor_generic.go | 28 + .../golang.org/x/crypto/sha3/xor_unaligned.go | 58 + .../golang.org/x/crypto/ssh/agent/client.go | 683 ++ .../x/crypto/ssh/agent/client_test.go | 379 + .../x/crypto/ssh/agent/example_test.go | 41 + .../golang.org/x/crypto/ssh/agent/forward.go | 103 + .../golang.org/x/crypto/ssh/agent/keyring.go | 215 + .../x/crypto/ssh/agent/keyring_test.go | 76 + .../golang.org/x/crypto/ssh/agent/server.go | 523 ++ .../x/crypto/ssh/agent/server_test.go | 259 + .../x/crypto/ssh/agent/testdata_test.go | 64 + .../golang.org/x/crypto/ssh/benchmark_test.go | 122 + vendor/golang.org/x/crypto/ssh/buffer.go | 97 + vendor/golang.org/x/crypto/ssh/buffer_test.go | 87 + vendor/golang.org/x/crypto/ssh/certs.go | 519 ++ vendor/golang.org/x/crypto/ssh/certs_test.go | 222 + vendor/golang.org/x/crypto/ssh/channel.go | 633 ++ vendor/golang.org/x/crypto/ssh/cipher.go | 629 ++ vendor/golang.org/x/crypto/ssh/cipher_test.go | 129 + vendor/golang.org/x/crypto/ssh/client.go | 257 + vendor/golang.org/x/crypto/ssh/client_auth.go | 486 ++ .../x/crypto/ssh/client_auth_test.go | 628 ++ vendor/golang.org/x/crypto/ssh/client_test.go | 81 + vendor/golang.org/x/crypto/ssh/common.go | 373 + vendor/golang.org/x/crypto/ssh/connection.go | 143 + vendor/golang.org/x/crypto/ssh/doc.go | 21 + .../golang.org/x/crypto/ssh/example_test.go | 320 + vendor/golang.org/x/crypto/ssh/handshake.go | 640 ++ .../golang.org/x/crypto/ssh/handshake_test.go | 559 ++ vendor/golang.org/x/crypto/ssh/kex.go | 540 ++ vendor/golang.org/x/crypto/ssh/kex_test.go | 50 + vendor/golang.org/x/crypto/ssh/keys.go | 1031 +++ vendor/golang.org/x/crypto/ssh/keys_test.go | 500 ++ .../x/crypto/ssh/knownhosts/knownhosts.go | 546 ++ .../crypto/ssh/knownhosts/knownhosts_test.go | 329 + vendor/golang.org/x/crypto/ssh/mac.go | 61 + .../golang.org/x/crypto/ssh/mempipe_test.go | 110 + vendor/golang.org/x/crypto/ssh/messages.go | 758 ++ .../golang.org/x/crypto/ssh/messages_test.go | 288 + vendor/golang.org/x/crypto/ssh/mux.go | 330 + vendor/golang.org/x/crypto/ssh/mux_test.go | 505 ++ vendor/golang.org/x/crypto/ssh/server.go | 563 ++ vendor/golang.org/x/crypto/ssh/session.go | 647 ++ .../golang.org/x/crypto/ssh/session_test.go | 774 ++ vendor/golang.org/x/crypto/ssh/streamlocal.go | 115 + vendor/golang.org/x/crypto/ssh/tcpip.go | 465 + vendor/golang.org/x/crypto/ssh/tcpip_test.go | 20 + .../x/crypto/ssh/terminal/terminal.go | 951 ++ .../x/crypto/ssh/terminal/terminal_test.go | 350 + .../golang.org/x/crypto/ssh/terminal/util.go | 123 + .../x/crypto/ssh/terminal/util_bsd.go | 12 + .../x/crypto/ssh/terminal/util_linux.go | 10 + .../x/crypto/ssh/terminal/util_plan9.go | 58 + .../x/crypto/ssh/terminal/util_solaris.go | 128 + .../x/crypto/ssh/terminal/util_windows.go | 102 + .../x/crypto/ssh/test/agent_unix_test.go | 59 + .../golang.org/x/crypto/ssh/test/cert_test.go | 77 + .../x/crypto/ssh/test/dial_unix_test.go | 128 + vendor/golang.org/x/crypto/ssh/test/doc.go | 7 + .../x/crypto/ssh/test/forward_unix_test.go | 194 + .../x/crypto/ssh/test/session_test.go | 413 + .../x/crypto/ssh/test/test_unix_test.go | 295 + .../x/crypto/ssh/test/testdata_test.go | 64 + .../golang.org/x/crypto/ssh/testdata/doc.go | 8 + .../golang.org/x/crypto/ssh/testdata/keys.go | 177 + .../golang.org/x/crypto/ssh/testdata_test.go | 63 + vendor/golang.org/x/crypto/ssh/transport.go | 375 + .../golang.org/x/crypto/ssh/transport_test.go | 109 + vendor/golang.org/x/crypto/tea/cipher.go | 109 + vendor/golang.org/x/crypto/tea/tea_test.go | 93 + vendor/golang.org/x/crypto/twofish/twofish.go | 342 + .../x/crypto/twofish/twofish_test.go | 129 + vendor/golang.org/x/crypto/xtea/block.go | 66 + vendor/golang.org/x/crypto/xtea/cipher.go | 82 + vendor/golang.org/x/crypto/xtea/xtea_test.go | 229 + vendor/golang.org/x/crypto/xts/xts.go | 137 + vendor/golang.org/x/crypto/xts/xts_test.go | 105 + vendor/golang.org/x/sys/.gitattributes | 10 + vendor/golang.org/x/sys/.gitignore | 2 + vendor/golang.org/x/sys/AUTHORS | 3 + vendor/golang.org/x/sys/CONTRIBUTING.md | 31 + vendor/golang.org/x/sys/CONTRIBUTORS | 3 + vendor/golang.org/x/sys/LICENSE | 27 + vendor/golang.org/x/sys/PATENTS | 22 + vendor/golang.org/x/sys/README.md | 18 + vendor/golang.org/x/sys/codereview.cfg | 1 + vendor/golang.org/x/sys/plan9/asm.s | 8 + vendor/golang.org/x/sys/plan9/asm_plan9_386.s | 30 + .../golang.org/x/sys/plan9/asm_plan9_amd64.s | 30 + vendor/golang.org/x/sys/plan9/const_plan9.go | 70 + vendor/golang.org/x/sys/plan9/dir_plan9.go | 212 + vendor/golang.org/x/sys/plan9/env_plan9.go | 27 + vendor/golang.org/x/sys/plan9/env_unset.go | 14 + vendor/golang.org/x/sys/plan9/errors_plan9.go | 50 + vendor/golang.org/x/sys/plan9/mkall.sh | 138 + vendor/golang.org/x/sys/plan9/mkerrors.sh | 246 + vendor/golang.org/x/sys/plan9/mksyscall.pl | 319 + .../golang.org/x/sys/plan9/mksysnum_plan9.sh | 23 + .../golang.org/x/sys/plan9/pwd_go15_plan9.go | 21 + vendor/golang.org/x/sys/plan9/pwd_plan9.go | 23 + vendor/golang.org/x/sys/plan9/race.go | 30 + vendor/golang.org/x/sys/plan9/race0.go | 25 + vendor/golang.org/x/sys/plan9/str.go | 22 + vendor/golang.org/x/sys/plan9/syscall.go | 74 + .../golang.org/x/sys/plan9/syscall_plan9.go | 349 + vendor/golang.org/x/sys/plan9/syscall_test.go | 33 + .../x/sys/plan9/zsyscall_plan9_386.go | 292 + .../x/sys/plan9/zsyscall_plan9_amd64.go | 292 + .../golang.org/x/sys/plan9/zsysnum_plan9.go | 49 + vendor/golang.org/x/sys/unix/.gitignore | 1 + vendor/golang.org/x/sys/unix/README.md | 173 + vendor/golang.org/x/sys/unix/asm_darwin_386.s | 29 + .../golang.org/x/sys/unix/asm_darwin_amd64.s | 29 + vendor/golang.org/x/sys/unix/asm_darwin_arm.s | 30 + .../golang.org/x/sys/unix/asm_darwin_arm64.s | 30 + .../x/sys/unix/asm_dragonfly_amd64.s | 29 + .../golang.org/x/sys/unix/asm_freebsd_386.s | 29 + .../golang.org/x/sys/unix/asm_freebsd_amd64.s | 29 + .../golang.org/x/sys/unix/asm_freebsd_arm.s | 29 + vendor/golang.org/x/sys/unix/asm_linux_386.s | 35 + .../golang.org/x/sys/unix/asm_linux_amd64.s | 29 + vendor/golang.org/x/sys/unix/asm_linux_arm.s | 29 + .../golang.org/x/sys/unix/asm_linux_arm64.s | 24 + .../golang.org/x/sys/unix/asm_linux_mips64x.s | 28 + .../golang.org/x/sys/unix/asm_linux_mipsx.s | 31 + .../golang.org/x/sys/unix/asm_linux_ppc64x.s | 28 + .../golang.org/x/sys/unix/asm_linux_s390x.s | 28 + vendor/golang.org/x/sys/unix/asm_netbsd_386.s | 29 + .../golang.org/x/sys/unix/asm_netbsd_amd64.s | 29 + vendor/golang.org/x/sys/unix/asm_netbsd_arm.s | 29 + .../golang.org/x/sys/unix/asm_openbsd_386.s | 29 + .../golang.org/x/sys/unix/asm_openbsd_amd64.s | 29 + .../golang.org/x/sys/unix/asm_openbsd_arm.s | 29 + .../golang.org/x/sys/unix/asm_solaris_amd64.s | 17 + .../golang.org/x/sys/unix/bluetooth_linux.go | 35 + vendor/golang.org/x/sys/unix/cap_freebsd.go | 195 + vendor/golang.org/x/sys/unix/constants.go | 13 + vendor/golang.org/x/sys/unix/creds_test.go | 136 + vendor/golang.org/x/sys/unix/dev_darwin.go | 24 + .../golang.org/x/sys/unix/dev_darwin_test.go | 49 + vendor/golang.org/x/sys/unix/dev_dragonfly.go | 30 + .../x/sys/unix/dev_dragonfly_test.go | 48 + vendor/golang.org/x/sys/unix/dev_freebsd.go | 30 + vendor/golang.org/x/sys/unix/dev_linux.go | 42 + .../golang.org/x/sys/unix/dev_linux_test.go | 51 + vendor/golang.org/x/sys/unix/dev_netbsd.go | 29 + .../golang.org/x/sys/unix/dev_netbsd_test.go | 50 + vendor/golang.org/x/sys/unix/dev_openbsd.go | 29 + .../golang.org/x/sys/unix/dev_openbsd_test.go | 52 + .../golang.org/x/sys/unix/dev_solaris_test.go | 49 + vendor/golang.org/x/sys/unix/dirent.go | 102 + vendor/golang.org/x/sys/unix/endian_big.go | 9 + vendor/golang.org/x/sys/unix/endian_little.go | 9 + vendor/golang.org/x/sys/unix/env_unix.go | 27 + vendor/golang.org/x/sys/unix/env_unset.go | 14 + .../x/sys/unix/errors_freebsd_386.go | 227 + .../x/sys/unix/errors_freebsd_amd64.go | 227 + .../x/sys/unix/errors_freebsd_arm.go | 226 + vendor/golang.org/x/sys/unix/export_test.go | 9 + vendor/golang.org/x/sys/unix/file_unix.go | 27 + vendor/golang.org/x/sys/unix/flock.go | 22 + .../x/sys/unix/flock_linux_32bit.go | 13 + vendor/golang.org/x/sys/unix/gccgo.go | 46 + vendor/golang.org/x/sys/unix/gccgo_c.c | 41 + .../x/sys/unix/gccgo_linux_amd64.go | 20 + vendor/golang.org/x/sys/unix/linux/Dockerfile | 51 + vendor/golang.org/x/sys/unix/linux/mkall.go | 482 ++ .../golang.org/x/sys/unix/linux/mksysnum.pl | 85 + vendor/golang.org/x/sys/unix/linux/types.go | 595 ++ vendor/golang.org/x/sys/unix/mkall.sh | 194 + vendor/golang.org/x/sys/unix/mkerrors.sh | 573 ++ vendor/golang.org/x/sys/unix/mkpost.go | 93 + vendor/golang.org/x/sys/unix/mksyscall.pl | 328 + .../x/sys/unix/mksyscall_solaris.pl | 289 + .../golang.org/x/sys/unix/mksysctl_openbsd.pl | 264 + .../golang.org/x/sys/unix/mksysnum_darwin.pl | 39 + .../x/sys/unix/mksysnum_dragonfly.pl | 50 + .../golang.org/x/sys/unix/mksysnum_freebsd.pl | 50 + .../golang.org/x/sys/unix/mksysnum_netbsd.pl | 58 + .../golang.org/x/sys/unix/mksysnum_openbsd.pl | 50 + .../golang.org/x/sys/unix/mmap_unix_test.go | 35 + .../golang.org/x/sys/unix/openbsd_pledge.go | 38 + vendor/golang.org/x/sys/unix/openbsd_test.go | 113 + vendor/golang.org/x/sys/unix/pagesize_unix.go | 15 + vendor/golang.org/x/sys/unix/race.go | 30 + vendor/golang.org/x/sys/unix/race0.go | 25 + .../golang.org/x/sys/unix/sockcmsg_linux.go | 36 + vendor/golang.org/x/sys/unix/sockcmsg_unix.go | 104 + vendor/golang.org/x/sys/unix/str.go | 26 + vendor/golang.org/x/sys/unix/syscall.go | 51 + vendor/golang.org/x/sys/unix/syscall_bsd.go | 653 ++ .../golang.org/x/sys/unix/syscall_bsd_test.go | 62 + .../golang.org/x/sys/unix/syscall_darwin.go | 566 ++ .../x/sys/unix/syscall_darwin_386.go | 68 + .../x/sys/unix/syscall_darwin_amd64.go | 68 + .../x/sys/unix/syscall_darwin_arm.go | 62 + .../x/sys/unix/syscall_darwin_arm64.go | 68 + .../x/sys/unix/syscall_dragonfly.go | 418 + .../x/sys/unix/syscall_dragonfly_amd64.go | 52 + .../golang.org/x/sys/unix/syscall_freebsd.go | 712 ++ .../x/sys/unix/syscall_freebsd_386.go | 52 + .../x/sys/unix/syscall_freebsd_amd64.go | 52 + .../x/sys/unix/syscall_freebsd_arm.go | 52 + .../x/sys/unix/syscall_freebsd_test.go | 297 + vendor/golang.org/x/sys/unix/syscall_linux.go | 1470 ++++ .../x/sys/unix/syscall_linux_386.go | 390 + .../x/sys/unix/syscall_linux_amd64.go | 143 + .../x/sys/unix/syscall_linux_amd64_gc.go | 13 + .../x/sys/unix/syscall_linux_arm.go | 254 + .../x/sys/unix/syscall_linux_arm64.go | 186 + .../x/sys/unix/syscall_linux_mips64x.go | 205 + .../x/sys/unix/syscall_linux_mipsx.go | 230 + .../x/sys/unix/syscall_linux_ppc64x.go | 126 + .../x/sys/unix/syscall_linux_s390x.go | 319 + .../x/sys/unix/syscall_linux_sparc64.go | 142 + .../x/sys/unix/syscall_linux_test.go | 230 + .../golang.org/x/sys/unix/syscall_netbsd.go | 476 + .../x/sys/unix/syscall_netbsd_386.go | 33 + .../x/sys/unix/syscall_netbsd_amd64.go | 33 + .../x/sys/unix/syscall_netbsd_arm.go | 33 + .../golang.org/x/sys/unix/syscall_no_getwd.go | 11 + .../golang.org/x/sys/unix/syscall_openbsd.go | 286 + .../x/sys/unix/syscall_openbsd_386.go | 33 + .../x/sys/unix/syscall_openbsd_amd64.go | 33 + .../x/sys/unix/syscall_openbsd_arm.go | 33 + .../golang.org/x/sys/unix/syscall_solaris.go | 728 ++ .../x/sys/unix/syscall_solaris_amd64.go | 28 + .../x/sys/unix/syscall_solaris_test.go | 34 + vendor/golang.org/x/sys/unix/syscall_test.go | 50 + vendor/golang.org/x/sys/unix/syscall_unix.go | 293 + .../golang.org/x/sys/unix/syscall_unix_gc.go | 15 + .../x/sys/unix/syscall_unix_test.go | 398 + vendor/golang.org/x/sys/unix/timestruct.go | 62 + vendor/golang.org/x/sys/unix/types_darwin.go | 272 + .../golang.org/x/sys/unix/types_dragonfly.go | 267 + vendor/golang.org/x/sys/unix/types_freebsd.go | 391 + vendor/golang.org/x/sys/unix/types_netbsd.go | 257 + vendor/golang.org/x/sys/unix/types_openbsd.go | 269 + vendor/golang.org/x/sys/unix/types_solaris.go | 283 + .../x/sys/unix/zerrors_darwin_386.go | 1758 ++++ .../x/sys/unix/zerrors_darwin_amd64.go | 1758 ++++ .../x/sys/unix/zerrors_darwin_arm.go | 1758 ++++ .../x/sys/unix/zerrors_darwin_arm64.go | 1758 ++++ .../x/sys/unix/zerrors_dragonfly_amd64.go | 1568 ++++ .../x/sys/unix/zerrors_freebsd_386.go | 1749 ++++ .../x/sys/unix/zerrors_freebsd_amd64.go | 1750 ++++ .../x/sys/unix/zerrors_freebsd_arm.go | 1758 ++++ .../x/sys/unix/zerrors_linux_386.go | 2244 +++++ .../x/sys/unix/zerrors_linux_amd64.go | 2245 +++++ .../x/sys/unix/zerrors_linux_arm.go | 2249 +++++ .../x/sys/unix/zerrors_linux_arm64.go | 2235 +++++ .../x/sys/unix/zerrors_linux_mips.go | 2254 +++++ .../x/sys/unix/zerrors_linux_mips64.go | 2254 +++++ .../x/sys/unix/zerrors_linux_mips64le.go | 2254 +++++ .../x/sys/unix/zerrors_linux_mipsle.go | 2254 +++++ .../x/sys/unix/zerrors_linux_ppc64.go | 2307 +++++ .../x/sys/unix/zerrors_linux_ppc64le.go | 2307 +++++ .../x/sys/unix/zerrors_linux_s390x.go | 2306 +++++ .../x/sys/unix/zerrors_linux_sparc64.go | 2142 +++++ .../x/sys/unix/zerrors_netbsd_386.go | 1712 ++++ .../x/sys/unix/zerrors_netbsd_amd64.go | 1702 ++++ .../x/sys/unix/zerrors_netbsd_arm.go | 1691 ++++ .../x/sys/unix/zerrors_openbsd_386.go | 1584 ++++ .../x/sys/unix/zerrors_openbsd_amd64.go | 1583 ++++ .../x/sys/unix/zerrors_openbsd_arm.go | 1586 ++++ .../x/sys/unix/zerrors_solaris_amd64.go | 1489 ++++ .../golang.org/x/sys/unix/zptrace386_linux.go | 80 + .../golang.org/x/sys/unix/zptracearm_linux.go | 41 + .../x/sys/unix/zptracemips_linux.go | 50 + .../x/sys/unix/zptracemipsle_linux.go | 50 + .../x/sys/unix/zsyscall_darwin_386.go | 1620 ++++ .../x/sys/unix/zsyscall_darwin_amd64.go | 1620 ++++ .../x/sys/unix/zsyscall_darwin_arm.go | 1620 ++++ .../x/sys/unix/zsyscall_darwin_arm64.go | 1620 ++++ .../x/sys/unix/zsyscall_dragonfly_amd64.go | 1451 ++++ .../x/sys/unix/zsyscall_freebsd_386.go | 1888 ++++ .../x/sys/unix/zsyscall_freebsd_amd64.go | 1888 ++++ .../x/sys/unix/zsyscall_freebsd_arm.go | 1888 ++++ .../x/sys/unix/zsyscall_linux_386.go | 1964 +++++ .../x/sys/unix/zsyscall_linux_amd64.go | 2157 +++++ .../x/sys/unix/zsyscall_linux_arm.go | 2066 +++++ .../x/sys/unix/zsyscall_linux_arm64.go | 2029 +++++ .../x/sys/unix/zsyscall_linux_mips.go | 2122 +++++ .../x/sys/unix/zsyscall_linux_mips64.go | 2105 +++++ .../x/sys/unix/zsyscall_linux_mips64le.go | 2105 +++++ .../x/sys/unix/zsyscall_linux_mipsle.go | 2122 +++++ .../x/sys/unix/zsyscall_linux_ppc64.go | 2168 +++++ .../x/sys/unix/zsyscall_linux_ppc64le.go | 2168 +++++ .../x/sys/unix/zsyscall_linux_s390x.go | 1948 +++++ .../x/sys/unix/zsyscall_linux_sparc64.go | 1833 ++++ .../x/sys/unix/zsyscall_netbsd_386.go | 1357 +++ .../x/sys/unix/zsyscall_netbsd_amd64.go | 1357 +++ .../x/sys/unix/zsyscall_netbsd_arm.go | 1357 +++ .../x/sys/unix/zsyscall_openbsd_386.go | 1415 +++ .../x/sys/unix/zsyscall_openbsd_amd64.go | 1415 +++ .../x/sys/unix/zsyscall_openbsd_arm.go | 1415 +++ .../x/sys/unix/zsyscall_solaris_amd64.go | 1642 ++++ .../x/sys/unix/zsysctl_openbsd_386.go | 270 + .../x/sys/unix/zsysctl_openbsd_amd64.go | 270 + .../x/sys/unix/zsysctl_openbsd_arm.go | 270 + .../x/sys/unix/zsysnum_darwin_386.go | 398 + .../x/sys/unix/zsysnum_darwin_amd64.go | 398 + .../x/sys/unix/zsysnum_darwin_arm.go | 426 + .../x/sys/unix/zsysnum_darwin_arm64.go | 426 + .../x/sys/unix/zsysnum_dragonfly_amd64.go | 315 + .../x/sys/unix/zsysnum_freebsd_386.go | 353 + .../x/sys/unix/zsysnum_freebsd_amd64.go | 353 + .../x/sys/unix/zsysnum_freebsd_arm.go | 353 + .../x/sys/unix/zsysnum_linux_386.go | 390 + .../x/sys/unix/zsysnum_linux_amd64.go | 342 + .../x/sys/unix/zsysnum_linux_arm.go | 362 + .../x/sys/unix/zsysnum_linux_arm64.go | 286 + .../x/sys/unix/zsysnum_linux_mips.go | 375 + .../x/sys/unix/zsysnum_linux_mips64.go | 335 + .../x/sys/unix/zsysnum_linux_mips64le.go | 335 + .../x/sys/unix/zsysnum_linux_mipsle.go | 375 + .../x/sys/unix/zsysnum_linux_ppc64.go | 370 + .../x/sys/unix/zsysnum_linux_ppc64le.go | 370 + .../x/sys/unix/zsysnum_linux_s390x.go | 333 + .../x/sys/unix/zsysnum_linux_sparc64.go | 348 + .../x/sys/unix/zsysnum_netbsd_386.go | 274 + .../x/sys/unix/zsysnum_netbsd_amd64.go | 274 + .../x/sys/unix/zsysnum_netbsd_arm.go | 274 + .../x/sys/unix/zsysnum_openbsd_386.go | 207 + .../x/sys/unix/zsysnum_openbsd_amd64.go | 207 + .../x/sys/unix/zsysnum_openbsd_arm.go | 213 + .../x/sys/unix/zsysnum_solaris_amd64.go | 13 + .../x/sys/unix/ztypes_darwin_386.go | 481 ++ .../x/sys/unix/ztypes_darwin_amd64.go | 491 ++ .../x/sys/unix/ztypes_darwin_arm.go | 482 ++ .../x/sys/unix/ztypes_darwin_arm64.go | 491 ++ .../x/sys/unix/ztypes_dragonfly_amd64.go | 467 + .../x/sys/unix/ztypes_freebsd_386.go | 541 ++ .../x/sys/unix/ztypes_freebsd_amd64.go | 544 ++ .../x/sys/unix/ztypes_freebsd_arm.go | 544 ++ .../golang.org/x/sys/unix/ztypes_linux_386.go | 793 ++ .../x/sys/unix/ztypes_linux_amd64.go | 811 ++ .../golang.org/x/sys/unix/ztypes_linux_arm.go | 782 ++ .../x/sys/unix/ztypes_linux_arm64.go | 790 ++ .../x/sys/unix/ztypes_linux_mips.go | 787 ++ .../x/sys/unix/ztypes_linux_mips64.go | 792 ++ .../x/sys/unix/ztypes_linux_mips64le.go | 792 ++ .../x/sys/unix/ztypes_linux_mipsle.go | 787 ++ .../x/sys/unix/ztypes_linux_ppc64.go | 800 ++ .../x/sys/unix/ztypes_linux_ppc64le.go | 800 ++ .../x/sys/unix/ztypes_linux_s390x.go | 817 ++ .../x/sys/unix/ztypes_linux_sparc64.go | 664 ++ .../x/sys/unix/ztypes_netbsd_386.go | 420 + .../x/sys/unix/ztypes_netbsd_amd64.go | 427 + .../x/sys/unix/ztypes_netbsd_arm.go | 425 + .../x/sys/unix/ztypes_openbsd_386.go | 465 + .../x/sys/unix/ztypes_openbsd_amd64.go | 472 + .../x/sys/unix/ztypes_openbsd_arm.go | 458 + .../x/sys/unix/ztypes_solaris_amd64.go | 459 + .../x/sys/windows/asm_windows_386.s | 13 + .../x/sys/windows/asm_windows_amd64.s | 13 + .../golang.org/x/sys/windows/dll_windows.go | 378 + vendor/golang.org/x/sys/windows/env_unset.go | 15 + .../golang.org/x/sys/windows/env_windows.go | 25 + vendor/golang.org/x/sys/windows/eventlog.go | 20 + .../golang.org/x/sys/windows/exec_windows.go | 97 + .../x/sys/windows/memory_windows.go | 26 + vendor/golang.org/x/sys/windows/mksyscall.go | 7 + vendor/golang.org/x/sys/windows/race.go | 30 + vendor/golang.org/x/sys/windows/race0.go | 25 + .../x/sys/windows/registry/export_test.go | 11 + .../golang.org/x/sys/windows/registry/key.go | 200 + .../x/sys/windows/registry/mksyscall.go | 7 + .../x/sys/windows/registry/registry_test.go | 756 ++ .../x/sys/windows/registry/syscall.go | 32 + .../x/sys/windows/registry/value.go | 384 + .../sys/windows/registry/zsyscall_windows.go | 120 + .../x/sys/windows/security_windows.go | 435 + vendor/golang.org/x/sys/windows/service.go | 164 + vendor/golang.org/x/sys/windows/str.go | 22 + .../golang.org/x/sys/windows/svc/debug/log.go | 56 + .../x/sys/windows/svc/debug/service.go | 45 + vendor/golang.org/x/sys/windows/svc/event.go | 48 + .../x/sys/windows/svc/eventlog/install.go | 80 + .../x/sys/windows/svc/eventlog/log.go | 70 + .../x/sys/windows/svc/eventlog/log_test.go | 51 + .../x/sys/windows/svc/example/beep.go | 22 + .../x/sys/windows/svc/example/install.go | 92 + .../x/sys/windows/svc/example/main.go | 76 + .../x/sys/windows/svc/example/manage.go | 62 + .../x/sys/windows/svc/example/service.go | 82 + vendor/golang.org/x/sys/windows/svc/go12.c | 24 + vendor/golang.org/x/sys/windows/svc/go12.go | 11 + vendor/golang.org/x/sys/windows/svc/go13.go | 31 + .../x/sys/windows/svc/mgr/config.go | 139 + .../golang.org/x/sys/windows/svc/mgr/mgr.go | 162 + .../x/sys/windows/svc/mgr/mgr_test.go | 169 + .../x/sys/windows/svc/mgr/service.go | 72 + .../golang.org/x/sys/windows/svc/security.go | 62 + .../golang.org/x/sys/windows/svc/service.go | 363 + .../golang.org/x/sys/windows/svc/svc_test.go | 118 + vendor/golang.org/x/sys/windows/svc/sys_386.s | 68 + .../golang.org/x/sys/windows/svc/sys_amd64.s | 42 + vendor/golang.org/x/sys/windows/syscall.go | 71 + .../golang.org/x/sys/windows/syscall_test.go | 53 + .../x/sys/windows/syscall_windows.go | 1024 +++ .../x/sys/windows/syscall_windows_test.go | 107 + .../golang.org/x/sys/windows/types_windows.go | 1282 +++ .../x/sys/windows/types_windows_386.go | 22 + .../x/sys/windows/types_windows_amd64.go | 22 + .../x/sys/windows/zsyscall_windows.go | 2428 ++++++ .../validator.v2/examplevalidate_test.go | 145 + vendor/gopkg.in/validator.v2/validator.go | 19 +- .../gopkg.in/validator.v2/validator_test.go | 517 ++ vendor/gopkg.in/yaml.v2/LICENSE | 208 +- vendor/gopkg.in/yaml.v2/README.md | 2 + vendor/gopkg.in/yaml.v2/decode.go | 10 +- vendor/gopkg.in/yaml.v2/decode_test.go | 1017 +++ vendor/gopkg.in/yaml.v2/emitterc.go | 9 +- vendor/gopkg.in/yaml.v2/encode_test.go | 501 ++ .../gopkg.in/yaml.v2/example_embedded_test.go | 41 + vendor/gopkg.in/yaml.v2/parserc.go | 1 - vendor/gopkg.in/yaml.v2/resolve.go | 11 +- vendor/gopkg.in/yaml.v2/scannerc.go | 11 +- vendor/gopkg.in/yaml.v2/suite_test.go | 12 + vendor/gopkg.in/yaml.v2/yaml.go | 13 +- vendor/gopkg.in/yaml.v2/yamlh.go | 2 +- 1158 files changed, 299365 insertions(+), 5465 deletions(-) delete mode 100644 Godeps/Godeps.json delete mode 100644 Godeps/Readme create mode 100644 Gopkg.lock create mode 100644 Gopkg.toml delete mode 100644 vendor/bitbucket.org/ww/goautoneg/Makefile create mode 100644 vendor/github.com/Luzifer/rconfig/bool_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/duration_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/errors_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/example_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/float_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/general_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/int_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/os-args_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/precedence_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/rconfig_suite_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/slice_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/sub-struct_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/uint_test.go create mode 100644 vendor/github.com/Luzifer/rconfig/vardefault_test.go create mode 100644 vendor/github.com/beorn7/perks/.gitignore create mode 100644 vendor/github.com/beorn7/perks/LICENSE create mode 100644 vendor/github.com/beorn7/perks/README.md create mode 100644 vendor/github.com/beorn7/perks/histogram/bench_test.go create mode 100644 vendor/github.com/beorn7/perks/histogram/histogram.go create mode 100644 vendor/github.com/beorn7/perks/histogram/histogram_test.go create mode 100644 vendor/github.com/beorn7/perks/topk/topk.go create mode 100644 vendor/github.com/beorn7/perks/topk/topk_test.go create mode 100644 vendor/github.com/flosch/pongo2/pongo2_issues_test.go delete mode 100644 vendor/github.com/flosch/pongo2/template_loader.go create mode 100644 vendor/github.com/golang/protobuf/.gitignore create mode 100644 vendor/github.com/golang/protobuf/.travis.yml create mode 100644 vendor/github.com/golang/protobuf/AUTHORS create mode 100644 vendor/github.com/golang/protobuf/CONTRIBUTORS create mode 100644 vendor/github.com/golang/protobuf/LICENSE create mode 100644 vendor/github.com/golang/protobuf/Make.protobuf create mode 100644 vendor/github.com/golang/protobuf/Makefile create mode 100644 vendor/github.com/golang/protobuf/README.md create mode 100644 vendor/github.com/golang/protobuf/_conformance/Makefile create mode 100644 vendor/github.com/golang/protobuf/_conformance/conformance.go create mode 100644 vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go create mode 100644 vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.proto create mode 100644 vendor/github.com/golang/protobuf/descriptor/descriptor.go create mode 100644 vendor/github.com/golang/protobuf/descriptor/descriptor_test.go create mode 100644 vendor/github.com/golang/protobuf/jsonpb/jsonpb.go create mode 100644 vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go create mode 100644 vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/Makefile create mode 100644 vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go create mode 100644 vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto create mode 100644 vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go create mode 100644 vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto create mode 100644 vendor/github.com/golang/protobuf/proto/any_test.go create mode 100644 vendor/github.com/golang/protobuf/proto/decode_test.go create mode 100644 vendor/github.com/golang/protobuf/proto/encode_test.go create mode 100644 vendor/github.com/golang/protobuf/proto/map_test.go create mode 100644 vendor/github.com/golang/protobuf/proto/testdata/Makefile create mode 100644 vendor/github.com/golang/protobuf/proto/testdata/golden_test.go create mode 100644 vendor/github.com/golang/protobuf/proto/testdata/test.pb.go create mode 100644 vendor/github.com/golang/protobuf/proto/testdata/test.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/Makefile create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/doc.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/generator/Makefile create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/link_grpc.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/main.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/grpc.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.pb.go.golden create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp2.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp3.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto create mode 100644 vendor/github.com/golang/protobuf/protoc-gen-go/testdata/proto3.proto create mode 100644 vendor/github.com/golang/protobuf/ptypes/any.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/any/any.pb.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/any/any.proto create mode 100644 vendor/github.com/golang/protobuf/ptypes/any_test.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/doc.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/duration.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/duration/duration.proto create mode 100644 vendor/github.com/golang/protobuf/ptypes/duration_test.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/empty/empty.proto create mode 100755 vendor/github.com/golang/protobuf/ptypes/regen.sh create mode 100644 vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/struct/struct.proto create mode 100644 vendor/github.com/golang/protobuf/ptypes/timestamp.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto create mode 100644 vendor/github.com/golang/protobuf/ptypes/timestamp_test.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go create mode 100644 vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto create mode 100644 vendor/github.com/gorilla/mux/context_gorilla.go create mode 100644 vendor/github.com/gorilla/mux/context_gorilla_test.go create mode 100644 vendor/github.com/gorilla/mux/context_native.go create mode 100644 vendor/github.com/gorilla/mux/context_native_test.go rename vendor/github.com/{robfig/cron => matttproud/golang_protobuf_extensions}/.travis.yml (92%) create mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE create mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE create mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/README.md create mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/ext/moved.go create mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbtest/deleted.go create mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode_test.go create mode 100644 vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode_test.go create mode 100644 vendor/github.com/prometheus/client_golang/.gitignore create mode 100644 vendor/github.com/prometheus/client_golang/.travis.yml create mode 100644 vendor/github.com/prometheus/client_golang/AUTHORS.md create mode 100644 vendor/github.com/prometheus/client_golang/CHANGELOG.md create mode 100644 vendor/github.com/prometheus/client_golang/CONTRIBUTING.md create mode 100644 vendor/github.com/prometheus/client_golang/LICENSE create mode 100644 vendor/github.com/prometheus/client_golang/NOTICE create mode 100644 vendor/github.com/prometheus/client_golang/README.md create mode 100644 vendor/github.com/prometheus/client_golang/VERSION create mode 100644 vendor/github.com/prometheus/client_golang/api/prometheus/api.go create mode 100644 vendor/github.com/prometheus/client_golang/api/prometheus/api_test.go create mode 100644 vendor/github.com/prometheus/client_golang/examples/random/main.go rename vendor/github.com/prometheus/client_golang/{model/labelvalue.go => examples/simple/main.go} (54%) delete mode 100644 vendor/github.com/prometheus/client_golang/model/labelname_test.go delete mode 100644 vendor/github.com/prometheus/client_golang/model/labelset.go delete mode 100644 vendor/github.com/prometheus/client_golang/model/labelvalue_test.go delete mode 100644 vendor/github.com/prometheus/client_golang/model/metric.go delete mode 100644 vendor/github.com/prometheus/client_golang/model/sample.go delete mode 100644 vendor/github.com/prometheus/client_golang/model/sample_test.go delete mode 100644 vendor/github.com/prometheus/client_golang/model/timestamp.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/example_memstats_test.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/example_selfcollector_test.go rename vendor/github.com/prometheus/client_golang/prometheus/{expvar.go => expvar_collector.go} (81%) rename vendor/github.com/prometheus/client_golang/prometheus/{expvar_test.go => expvar_collector_test.go} (100%) create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/fnv.go create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/promhttp/http_test.go delete mode 100644 vendor/github.com/prometheus/client_golang/prometheus/push.go create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/push/examples_test.go create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/push/push.go create mode 100644 vendor/github.com/prometheus/client_golang/prometheus/push/push_test.go delete mode 100644 vendor/github.com/prometheus/client_golang/text/proto.go create mode 100644 vendor/github.com/prometheus/client_model/.gitignore create mode 100644 vendor/github.com/prometheus/client_model/CONTRIBUTING.md create mode 100644 vendor/github.com/prometheus/client_model/LICENSE create mode 100644 vendor/github.com/prometheus/client_model/MAINTAINERS.md create mode 100644 vendor/github.com/prometheus/client_model/Makefile create mode 100644 vendor/github.com/prometheus/client_model/NOTICE create mode 100644 vendor/github.com/prometheus/client_model/README.md create mode 100644 vendor/github.com/prometheus/client_model/cpp/metrics.pb.cc create mode 100644 vendor/github.com/prometheus/client_model/cpp/metrics.pb.h create mode 100644 vendor/github.com/prometheus/client_model/metrics.proto create mode 100644 vendor/github.com/prometheus/client_model/pom.xml create mode 100644 vendor/github.com/prometheus/client_model/python/prometheus/__init__.py create mode 100644 vendor/github.com/prometheus/client_model/python/prometheus/client/__init__.py create mode 100644 vendor/github.com/prometheus/client_model/python/prometheus/client/model/__init__.py create mode 100644 vendor/github.com/prometheus/client_model/python/prometheus/client/model/metrics_pb2.py create mode 100644 vendor/github.com/prometheus/client_model/ruby/.gitignore create mode 100644 vendor/github.com/prometheus/client_model/ruby/Gemfile create mode 100644 vendor/github.com/prometheus/client_model/ruby/LICENSE create mode 100644 vendor/github.com/prometheus/client_model/ruby/Makefile create mode 100644 vendor/github.com/prometheus/client_model/ruby/README.md create mode 100644 vendor/github.com/prometheus/client_model/ruby/Rakefile create mode 100644 vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model.rb create mode 100644 vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model/metrics.pb.rb create mode 100644 vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model/version.rb create mode 100644 vendor/github.com/prometheus/client_model/ruby/prometheus-client-model.gemspec create mode 100644 vendor/github.com/prometheus/client_model/setup.py create mode 100644 vendor/github.com/prometheus/client_model/src/main/java/io/prometheus/client/Metrics.java create mode 100644 vendor/github.com/prometheus/common/.travis.yml create mode 100644 vendor/github.com/prometheus/common/CONTRIBUTING.md create mode 100644 vendor/github.com/prometheus/common/LICENSE create mode 100644 vendor/github.com/prometheus/common/MAINTAINERS.md create mode 100644 vendor/github.com/prometheus/common/NOTICE create mode 100644 vendor/github.com/prometheus/common/README.md create mode 100644 vendor/github.com/prometheus/common/config/config.go create mode 100644 vendor/github.com/prometheus/common/config/http_config.go create mode 100644 vendor/github.com/prometheus/common/config/http_config_test.go create mode 100644 vendor/github.com/prometheus/common/config/testdata/http.conf.bearer-token-and-file-set.bad.yml create mode 100644 vendor/github.com/prometheus/common/config/testdata/http.conf.empty.bad.yml create mode 100644 vendor/github.com/prometheus/common/config/testdata/http.conf.good.yml create mode 100644 vendor/github.com/prometheus/common/config/testdata/http.conf.invalid-bearer-token-file.bad.yml create mode 100644 vendor/github.com/prometheus/common/config/testdata/tls_config.cert_no_key.bad.yml create mode 100644 vendor/github.com/prometheus/common/config/testdata/tls_config.empty.good.yml create mode 100644 vendor/github.com/prometheus/common/config/testdata/tls_config.insecure.good.yml create mode 100644 vendor/github.com/prometheus/common/config/testdata/tls_config.invalid_field.bad.yml create mode 100644 vendor/github.com/prometheus/common/config/testdata/tls_config.key_no_cert.bad.yml create mode 100644 vendor/github.com/prometheus/common/config/tls_config_test.go rename vendor/github.com/prometheus/{client_golang/text => common/expfmt}/bench_test.go (95%) create mode 100644 vendor/github.com/prometheus/common/expfmt/decode.go create mode 100644 vendor/github.com/prometheus/common/expfmt/decode_test.go create mode 100644 vendor/github.com/prometheus/common/expfmt/encode.go create mode 100644 vendor/github.com/prometheus/common/expfmt/expfmt.go rename vendor/github.com/prometheus/{client_golang/model/samplevalue.go => common/expfmt/fuzz.go} (51%) create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_0 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_1 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_2 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_3 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_4 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_0 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_1 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_10 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_11 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_12 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_13 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_14 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_15 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_16 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_17 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_18 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_19 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_2 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_3 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_4 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_5 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_6 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_7 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_8 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_9 create mode 100644 vendor/github.com/prometheus/common/expfmt/fuzz/corpus/minimal create mode 100644 vendor/github.com/prometheus/common/expfmt/testdata/json2 create mode 100644 vendor/github.com/prometheus/common/expfmt/testdata/json2_bad create mode 100644 vendor/github.com/prometheus/common/expfmt/testdata/protobuf create mode 100644 vendor/github.com/prometheus/common/expfmt/testdata/protobuf.gz create mode 100644 vendor/github.com/prometheus/common/expfmt/testdata/text create mode 100644 vendor/github.com/prometheus/common/expfmt/testdata/text.gz rename vendor/github.com/prometheus/{client_golang/text/create.go => common/expfmt/text_create.go} (86%) rename vendor/github.com/prometheus/{client_golang/text/create_test.go => common/expfmt/text_create_test.go} (98%) rename vendor/github.com/prometheus/{client_golang/text/parse.go => common/expfmt/text_parse.go} (93%) rename vendor/github.com/prometheus/{client_golang/text/parse_test.go => common/expfmt/text_parse_test.go} (96%) rename vendor/{ => github.com/prometheus/common/internal}/bitbucket.org/ww/goautoneg/README.txt (100%) rename vendor/{ => github.com/prometheus/common/internal}/bitbucket.org/ww/goautoneg/autoneg.go (100%) rename vendor/{ => github.com/prometheus/common/internal}/bitbucket.org/ww/goautoneg/autoneg_test.go (100%) create mode 100644 vendor/github.com/prometheus/common/log/eventlog_formatter.go create mode 100644 vendor/github.com/prometheus/common/log/log.go create mode 100644 vendor/github.com/prometheus/common/log/log_test.go create mode 100644 vendor/github.com/prometheus/common/log/syslog_formatter.go create mode 100644 vendor/github.com/prometheus/common/log/syslog_formatter_test.go create mode 100644 vendor/github.com/prometheus/common/model/alert.go create mode 100644 vendor/github.com/prometheus/common/model/alert_test.go rename vendor/github.com/prometheus/{client_golang => common}/model/fingerprinting.go (85%) create mode 100644 vendor/github.com/prometheus/common/model/fnv.go rename vendor/github.com/prometheus/{client_golang/model/labelname.go => common/model/labels.go} (55%) create mode 100644 vendor/github.com/prometheus/common/model/labels_test.go create mode 100644 vendor/github.com/prometheus/common/model/labelset.go create mode 100644 vendor/github.com/prometheus/common/model/metric.go rename vendor/github.com/prometheus/{client_golang => common}/model/metric_test.go (59%) rename vendor/github.com/prometheus/{client_golang => common}/model/model.go (84%) rename vendor/github.com/prometheus/{client_golang => common}/model/signature.go (57%) rename vendor/github.com/prometheus/{client_golang => common}/model/signature_test.go (68%) create mode 100644 vendor/github.com/prometheus/common/model/silence.go create mode 100644 vendor/github.com/prometheus/common/model/silence_test.go create mode 100644 vendor/github.com/prometheus/common/model/time.go rename vendor/github.com/prometheus/{client_golang/model/timestamp_test.go => common/model/time_test.go} (59%) create mode 100644 vendor/github.com/prometheus/common/model/value.go create mode 100644 vendor/github.com/prometheus/common/model/value_test.go create mode 100644 vendor/github.com/prometheus/common/promlog/flag/flag.go create mode 100644 vendor/github.com/prometheus/common/promlog/log.go create mode 100644 vendor/github.com/prometheus/common/route/route.go create mode 100644 vendor/github.com/prometheus/common/route/route_test.go create mode 100644 vendor/github.com/prometheus/common/version/info.go delete mode 100644 vendor/github.com/prometheus/procfs/AUTHORS.md create mode 100644 vendor/github.com/prometheus/procfs/MAINTAINERS.md create mode 100644 vendor/github.com/prometheus/procfs/Makefile create mode 100644 vendor/github.com/prometheus/procfs/bcache/bcache.go create mode 100644 vendor/github.com/prometheus/procfs/bcache/get.go create mode 100644 vendor/github.com/prometheus/procfs/bcache/get_test.go create mode 100644 vendor/github.com/prometheus/procfs/buddyinfo.go create mode 100644 vendor/github.com/prometheus/procfs/buddyinfo_test.go create mode 100644 vendor/github.com/prometheus/procfs/fixtures/26231/comm create mode 100644 vendor/github.com/prometheus/procfs/fixtures/26231/mountstats create mode 100644 vendor/github.com/prometheus/procfs/fixtures/26232/comm create mode 100644 vendor/github.com/prometheus/procfs/fixtures/buddyinfo/short/buddyinfo create mode 100644 vendor/github.com/prometheus/procfs/fixtures/buddyinfo/sizemismatch/buddyinfo create mode 100644 vendor/github.com/prometheus/procfs/fixtures/buddyinfo/valid/buddyinfo create mode 100644 vendor/github.com/prometheus/procfs/fixtures/fs/xfs/stat create mode 100644 vendor/github.com/prometheus/procfs/fixtures/mdstat create mode 100644 vendor/github.com/prometheus/procfs/fixtures/net/xfrm_stat create mode 120000 vendor/github.com/prometheus/procfs/fixtures/self create mode 100644 vendor/github.com/prometheus/procfs/mdstat.go create mode 100644 vendor/github.com/prometheus/procfs/mdstat_test.go create mode 100644 vendor/github.com/prometheus/procfs/mountstats.go create mode 100644 vendor/github.com/prometheus/procfs/mountstats_test.go create mode 100644 vendor/github.com/prometheus/procfs/sysfs/.gitignore create mode 100644 vendor/github.com/prometheus/procfs/sysfs/doc.go create mode 100644 vendor/github.com/prometheus/procfs/sysfs/fixtures.ttar create mode 100644 vendor/github.com/prometheus/procfs/sysfs/fs.go create mode 100644 vendor/github.com/prometheus/procfs/sysfs/fs_test.go create mode 100755 vendor/github.com/prometheus/procfs/ttar create mode 100644 vendor/github.com/prometheus/procfs/xfrm.go create mode 100644 vendor/github.com/prometheus/procfs/xfrm_test.go create mode 100644 vendor/github.com/prometheus/procfs/xfs/parse.go create mode 100644 vendor/github.com/prometheus/procfs/xfs/parse_test.go create mode 100644 vendor/github.com/prometheus/procfs/xfs/xfs.go create mode 100644 vendor/github.com/sirupsen/logrus/.gitignore create mode 100644 vendor/github.com/sirupsen/logrus/.travis.yml create mode 100644 vendor/github.com/sirupsen/logrus/CHANGELOG.md create mode 100644 vendor/github.com/sirupsen/logrus/LICENSE create mode 100644 vendor/github.com/sirupsen/logrus/README.md create mode 100644 vendor/github.com/sirupsen/logrus/alt_exit.go create mode 100644 vendor/github.com/sirupsen/logrus/alt_exit_test.go create mode 100644 vendor/github.com/sirupsen/logrus/appveyor.yml create mode 100644 vendor/github.com/sirupsen/logrus/doc.go create mode 100644 vendor/github.com/sirupsen/logrus/entry.go create mode 100644 vendor/github.com/sirupsen/logrus/entry_test.go create mode 100644 vendor/github.com/sirupsen/logrus/example_basic_test.go create mode 100644 vendor/github.com/sirupsen/logrus/example_hook_test.go create mode 100644 vendor/github.com/sirupsen/logrus/exported.go create mode 100644 vendor/github.com/sirupsen/logrus/formatter.go create mode 100644 vendor/github.com/sirupsen/logrus/formatter_bench_test.go create mode 100644 vendor/github.com/sirupsen/logrus/hook_test.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/README.md create mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/test/test.go create mode 100644 vendor/github.com/sirupsen/logrus/hooks/test/test_test.go create mode 100644 vendor/github.com/sirupsen/logrus/json_formatter.go create mode 100644 vendor/github.com/sirupsen/logrus/json_formatter_test.go create mode 100644 vendor/github.com/sirupsen/logrus/logger.go create mode 100644 vendor/github.com/sirupsen/logrus/logger_bench_test.go create mode 100644 vendor/github.com/sirupsen/logrus/logrus.go create mode 100644 vendor/github.com/sirupsen/logrus/logrus_test.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_bsd.go create mode 100644 vendor/github.com/sirupsen/logrus/terminal_linux.go create mode 100644 vendor/github.com/sirupsen/logrus/text_formatter.go create mode 100644 vendor/github.com/sirupsen/logrus/text_formatter_test.go create mode 100644 vendor/github.com/sirupsen/logrus/writer.go create mode 100644 vendor/github.com/spf13/pflag/.gitignore create mode 100644 vendor/github.com/spf13/pflag/bool_slice.go create mode 100644 vendor/github.com/spf13/pflag/bool_slice_test.go create mode 100644 vendor/github.com/spf13/pflag/ip_slice.go create mode 100644 vendor/github.com/spf13/pflag/ip_slice_test.go create mode 100644 vendor/github.com/spf13/pflag/string_array.go create mode 100644 vendor/github.com/spf13/pflag/string_array_test.go create mode 100644 vendor/github.com/spf13/pflag/uint_slice.go create mode 100644 vendor/github.com/spf13/pflag/uint_slice_test.go create mode 100755 vendor/github.com/spf13/pflag/verify/all.sh create mode 100755 vendor/github.com/spf13/pflag/verify/gofmt.sh create mode 100755 vendor/github.com/spf13/pflag/verify/golint.sh create mode 100644 vendor/golang.org/x/crypto/.gitattributes create mode 100644 vendor/golang.org/x/crypto/.gitignore create mode 100644 vendor/golang.org/x/crypto/AUTHORS create mode 100644 vendor/golang.org/x/crypto/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/crypto/CONTRIBUTORS create mode 100644 vendor/golang.org/x/crypto/LICENSE create mode 100644 vendor/golang.org/x/crypto/PATENTS create mode 100644 vendor/golang.org/x/crypto/README.md create mode 100644 vendor/golang.org/x/crypto/acme/acme.go create mode 100644 vendor/golang.org/x/crypto/acme/acme_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/autocert.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/autocert_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/cache.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/cache_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/example_test.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/listener.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/renewal.go create mode 100644 vendor/golang.org/x/crypto/acme/autocert/renewal_test.go create mode 100644 vendor/golang.org/x/crypto/acme/jws.go create mode 100644 vendor/golang.org/x/crypto/acme/jws_test.go create mode 100644 vendor/golang.org/x/crypto/acme/types.go create mode 100644 vendor/golang.org/x/crypto/acme/types_test.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/base64.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/bcrypt.go create mode 100644 vendor/golang.org/x/crypto/bcrypt/bcrypt_test.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_generic.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_ref.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2b_test.go create mode 100644 vendor/golang.org/x/crypto/blake2b/blake2x.go create mode 100644 vendor/golang.org/x/crypto/blake2b/register.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_386.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_386.s create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_amd64.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_amd64.s create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_generic.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_ref.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2s_test.go create mode 100644 vendor/golang.org/x/crypto/blake2s/blake2x.go create mode 100644 vendor/golang.org/x/crypto/blake2s/register.go create mode 100644 vendor/golang.org/x/crypto/blowfish/block.go create mode 100644 vendor/golang.org/x/crypto/blowfish/blowfish_test.go create mode 100644 vendor/golang.org/x/crypto/blowfish/cipher.go create mode 100644 vendor/golang.org/x/crypto/blowfish/const.go create mode 100644 vendor/golang.org/x/crypto/bn256/bn256.go create mode 100644 vendor/golang.org/x/crypto/bn256/bn256_test.go create mode 100644 vendor/golang.org/x/crypto/bn256/constants.go create mode 100644 vendor/golang.org/x/crypto/bn256/curve.go create mode 100644 vendor/golang.org/x/crypto/bn256/example_test.go create mode 100644 vendor/golang.org/x/crypto/bn256/gfp12.go create mode 100644 vendor/golang.org/x/crypto/bn256/gfp2.go create mode 100644 vendor/golang.org/x/crypto/bn256/gfp6.go create mode 100644 vendor/golang.org/x/crypto/bn256/optate.go create mode 100644 vendor/golang.org/x/crypto/bn256/twist.go create mode 100644 vendor/golang.org/x/crypto/cast5/cast5.go create mode 100644 vendor/golang.org/x/crypto/cast5/cast5_test.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.s create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_test.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_vectors_test.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_generic.go create mode 100644 vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_test.go create mode 100644 vendor/golang.org/x/crypto/codereview.cfg create mode 100644 vendor/golang.org/x/crypto/cryptobyte/asn1.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/asn1_test.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/builder.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/cryptobyte_test.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/example_test.go create mode 100644 vendor/golang.org/x/crypto/cryptobyte/string.go create mode 100644 vendor/golang.org/x/crypto/curve25519/const_amd64.h create mode 100644 vendor/golang.org/x/crypto/curve25519/const_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/cswap_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/curve25519.go create mode 100644 vendor/golang.org/x/crypto/curve25519/curve25519_test.go create mode 100644 vendor/golang.org/x/crypto/curve25519/doc.go create mode 100644 vendor/golang.org/x/crypto/curve25519/freeze_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go create mode 100644 vendor/golang.org/x/crypto/curve25519/mul_amd64.s create mode 100644 vendor/golang.org/x/crypto/curve25519/square_amd64.s create mode 100644 vendor/golang.org/x/crypto/ed25519/ed25519.go create mode 100644 vendor/golang.org/x/crypto/ed25519/ed25519_test.go create mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go create mode 100644 vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go create mode 100644 vendor/golang.org/x/crypto/ed25519/testdata/sign.input.gz create mode 100644 vendor/golang.org/x/crypto/hkdf/example_test.go create mode 100644 vendor/golang.org/x/crypto/hkdf/hkdf.go create mode 100644 vendor/golang.org/x/crypto/hkdf/hkdf_test.go create mode 100644 vendor/golang.org/x/crypto/md4/example_test.go create mode 100644 vendor/golang.org/x/crypto/md4/md4.go create mode 100644 vendor/golang.org/x/crypto/md4/md4_test.go create mode 100644 vendor/golang.org/x/crypto/md4/md4block.go create mode 100644 vendor/golang.org/x/crypto/nacl/auth/auth.go create mode 100644 vendor/golang.org/x/crypto/nacl/auth/auth_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/auth/example_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/box/box.go create mode 100644 vendor/golang.org/x/crypto/nacl/box/box_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/box/example_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/example_test.go create mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/secretbox.go create mode 100644 vendor/golang.org/x/crypto/nacl/secretbox/secretbox_test.go create mode 100644 vendor/golang.org/x/crypto/ocsp/ocsp.go create mode 100644 vendor/golang.org/x/crypto/ocsp/ocsp_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/armor/armor.go create mode 100644 vendor/golang.org/x/crypto/openpgp/armor/armor_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/armor/encode.go create mode 100644 vendor/golang.org/x/crypto/openpgp/canonical_text.go create mode 100644 vendor/golang.org/x/crypto/openpgp/canonical_text_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go create mode 100644 vendor/golang.org/x/crypto/openpgp/clearsign/clearsign_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go create mode 100644 vendor/golang.org/x/crypto/openpgp/elgamal/elgamal_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/errors/errors.go create mode 100644 vendor/golang.org/x/crypto/openpgp/keys.go create mode 100644 vendor/golang.org/x/crypto/openpgp/keys_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/compressed.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/compressed_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/config.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/literal.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/ocfb.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/ocfb_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/opaque.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/opaque_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/packet.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/packet_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/private_key.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/private_key_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/public_key_v3_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/reader.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userattribute.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userid.go create mode 100644 vendor/golang.org/x/crypto/openpgp/packet/userid_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/read.go create mode 100644 vendor/golang.org/x/crypto/openpgp/read_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/s2k/s2k.go create mode 100644 vendor/golang.org/x/crypto/openpgp/s2k/s2k_test.go create mode 100644 vendor/golang.org/x/crypto/openpgp/write.go create mode 100644 vendor/golang.org/x/crypto/openpgp/write_test.go create mode 100644 vendor/golang.org/x/crypto/otr/libotr_test_helper.c create mode 100644 vendor/golang.org/x/crypto/otr/otr.go create mode 100644 vendor/golang.org/x/crypto/otr/otr_test.go create mode 100644 vendor/golang.org/x/crypto/otr/smp.go create mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go create mode 100644 vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/bmp-string.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/crypto.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/crypto_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/errors.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/mac.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/mac_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pbkdf.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pkcs12.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go create mode 100644 vendor/golang.org/x/crypto/pkcs12/safebags.go create mode 100644 vendor/golang.org/x/crypto/poly1305/poly1305.go create mode 100644 vendor/golang.org/x/crypto/poly1305/poly1305_test.go create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_amd64.go create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_amd64.s create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_arm.go create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_arm.s create mode 100644 vendor/golang.org/x/crypto/poly1305/sum_ref.go create mode 100644 vendor/golang.org/x/crypto/ripemd160/ripemd160.go create mode 100644 vendor/golang.org/x/crypto/ripemd160/ripemd160_test.go create mode 100644 vendor/golang.org/x/crypto/ripemd160/ripemd160block.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa2020_amd64.s create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa/salsa_test.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa20.go create mode 100644 vendor/golang.org/x/crypto/salsa20/salsa20_test.go create mode 100644 vendor/golang.org/x/crypto/scrypt/example_test.go create mode 100644 vendor/golang.org/x/crypto/scrypt/scrypt.go create mode 100644 vendor/golang.org/x/crypto/scrypt/scrypt_test.go create mode 100644 vendor/golang.org/x/crypto/sha3/doc.go create mode 100644 vendor/golang.org/x/crypto/sha3/hashes.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.go create mode 100644 vendor/golang.org/x/crypto/sha3/keccakf_amd64.s create mode 100644 vendor/golang.org/x/crypto/sha3/register.go create mode 100644 vendor/golang.org/x/crypto/sha3/sha3.go create mode 100644 vendor/golang.org/x/crypto/sha3/sha3_test.go create mode 100644 vendor/golang.org/x/crypto/sha3/shake.go create mode 100644 vendor/golang.org/x/crypto/sha3/testdata/keccakKats.json.deflate create mode 100644 vendor/golang.org/x/crypto/sha3/xor.go create mode 100644 vendor/golang.org/x/crypto/sha3/xor_generic.go create mode 100644 vendor/golang.org/x/crypto/sha3/xor_unaligned.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/client.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/client_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/example_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/forward.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/keyring.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/keyring_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/server.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/server_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/agent/testdata_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/benchmark_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/buffer.go create mode 100644 vendor/golang.org/x/crypto/ssh/buffer_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/certs.go create mode 100644 vendor/golang.org/x/crypto/ssh/certs_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/channel.go create mode 100644 vendor/golang.org/x/crypto/ssh/cipher.go create mode 100644 vendor/golang.org/x/crypto/ssh/cipher_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/client.go create mode 100644 vendor/golang.org/x/crypto/ssh/client_auth.go create mode 100644 vendor/golang.org/x/crypto/ssh/client_auth_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/client_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/common.go create mode 100644 vendor/golang.org/x/crypto/ssh/connection.go create mode 100644 vendor/golang.org/x/crypto/ssh/doc.go create mode 100644 vendor/golang.org/x/crypto/ssh/example_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/handshake.go create mode 100644 vendor/golang.org/x/crypto/ssh/handshake_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/kex.go create mode 100644 vendor/golang.org/x/crypto/ssh/kex_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/keys.go create mode 100644 vendor/golang.org/x/crypto/ssh/keys_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go create mode 100644 vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/mac.go create mode 100644 vendor/golang.org/x/crypto/ssh/mempipe_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/messages.go create mode 100644 vendor/golang.org/x/crypto/ssh/messages_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/mux.go create mode 100644 vendor/golang.org/x/crypto/ssh/mux_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/server.go create mode 100644 vendor/golang.org/x/crypto/ssh/session.go create mode 100644 vendor/golang.org/x/crypto/ssh/session_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/streamlocal.go create mode 100644 vendor/golang.org/x/crypto/ssh/tcpip.go create mode 100644 vendor/golang.org/x/crypto/ssh/tcpip_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/terminal.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_linux.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go create mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_windows.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/agent_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/cert_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/dial_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/doc.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/forward_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/session_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/test_unix_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/test/testdata_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/testdata/doc.go create mode 100644 vendor/golang.org/x/crypto/ssh/testdata/keys.go create mode 100644 vendor/golang.org/x/crypto/ssh/testdata_test.go create mode 100644 vendor/golang.org/x/crypto/ssh/transport.go create mode 100644 vendor/golang.org/x/crypto/ssh/transport_test.go create mode 100644 vendor/golang.org/x/crypto/tea/cipher.go create mode 100644 vendor/golang.org/x/crypto/tea/tea_test.go create mode 100644 vendor/golang.org/x/crypto/twofish/twofish.go create mode 100644 vendor/golang.org/x/crypto/twofish/twofish_test.go create mode 100644 vendor/golang.org/x/crypto/xtea/block.go create mode 100644 vendor/golang.org/x/crypto/xtea/cipher.go create mode 100644 vendor/golang.org/x/crypto/xtea/xtea_test.go create mode 100644 vendor/golang.org/x/crypto/xts/xts.go create mode 100644 vendor/golang.org/x/crypto/xts/xts_test.go create mode 100644 vendor/golang.org/x/sys/.gitattributes create mode 100644 vendor/golang.org/x/sys/.gitignore create mode 100644 vendor/golang.org/x/sys/AUTHORS create mode 100644 vendor/golang.org/x/sys/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/sys/CONTRIBUTORS create mode 100644 vendor/golang.org/x/sys/LICENSE create mode 100644 vendor/golang.org/x/sys/PATENTS create mode 100644 vendor/golang.org/x/sys/README.md create mode 100644 vendor/golang.org/x/sys/codereview.cfg create mode 100644 vendor/golang.org/x/sys/plan9/asm.s create mode 100644 vendor/golang.org/x/sys/plan9/asm_plan9_386.s create mode 100644 vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s create mode 100644 vendor/golang.org/x/sys/plan9/const_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/dir_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/env_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/env_unset.go create mode 100644 vendor/golang.org/x/sys/plan9/errors_plan9.go create mode 100755 vendor/golang.org/x/sys/plan9/mkall.sh create mode 100755 vendor/golang.org/x/sys/plan9/mkerrors.sh create mode 100755 vendor/golang.org/x/sys/plan9/mksyscall.pl create mode 100755 vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh create mode 100644 vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/pwd_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/race.go create mode 100644 vendor/golang.org/x/sys/plan9/race0.go create mode 100644 vendor/golang.org/x/sys/plan9/str.go create mode 100644 vendor/golang.org/x/sys/plan9/syscall.go create mode 100644 vendor/golang.org/x/sys/plan9/syscall_plan9.go create mode 100644 vendor/golang.org/x/sys/plan9/syscall_test.go create mode 100644 vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go create mode 100644 vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go create mode 100644 vendor/golang.org/x/sys/plan9/zsysnum_plan9.go create mode 100644 vendor/golang.org/x/sys/unix/.gitignore create mode 100644 vendor/golang.org/x/sys/unix/README.md create mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_darwin_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_freebsd_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_arm64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mips64x.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_mipsx.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s create mode 100644 vendor/golang.org/x/sys/unix/asm_linux_s390x.s create mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_netbsd_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_386.s create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/asm_openbsd_arm.s create mode 100644 vendor/golang.org/x/sys/unix/asm_solaris_amd64.s create mode 100644 vendor/golang.org/x/sys/unix/bluetooth_linux.go create mode 100644 vendor/golang.org/x/sys/unix/cap_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/constants.go create mode 100644 vendor/golang.org/x/sys/unix/creds_test.go create mode 100644 vendor/golang.org/x/sys/unix/dev_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/dev_darwin_test.go create mode 100644 vendor/golang.org/x/sys/unix/dev_dragonfly.go create mode 100644 vendor/golang.org/x/sys/unix/dev_dragonfly_test.go create mode 100644 vendor/golang.org/x/sys/unix/dev_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/dev_linux.go create mode 100644 vendor/golang.org/x/sys/unix/dev_linux_test.go create mode 100644 vendor/golang.org/x/sys/unix/dev_netbsd.go create mode 100644 vendor/golang.org/x/sys/unix/dev_netbsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/dev_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/dev_openbsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/dev_solaris_test.go create mode 100644 vendor/golang.org/x/sys/unix/dirent.go create mode 100644 vendor/golang.org/x/sys/unix/endian_big.go create mode 100644 vendor/golang.org/x/sys/unix/endian_little.go create mode 100644 vendor/golang.org/x/sys/unix/env_unix.go create mode 100644 vendor/golang.org/x/sys/unix/env_unset.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/errors_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/export_test.go create mode 100644 vendor/golang.org/x/sys/unix/file_unix.go create mode 100644 vendor/golang.org/x/sys/unix/flock.go create mode 100644 vendor/golang.org/x/sys/unix/flock_linux_32bit.go create mode 100644 vendor/golang.org/x/sys/unix/gccgo.go create mode 100644 vendor/golang.org/x/sys/unix/gccgo_c.c create mode 100644 vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/linux/Dockerfile create mode 100644 vendor/golang.org/x/sys/unix/linux/mkall.go create mode 100755 vendor/golang.org/x/sys/unix/linux/mksysnum.pl create mode 100644 vendor/golang.org/x/sys/unix/linux/types.go create mode 100755 vendor/golang.org/x/sys/unix/mkall.sh create mode 100755 vendor/golang.org/x/sys/unix/mkerrors.sh create mode 100644 vendor/golang.org/x/sys/unix/mkpost.go create mode 100755 vendor/golang.org/x/sys/unix/mksyscall.pl create mode 100755 vendor/golang.org/x/sys/unix/mksyscall_solaris.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysctl_openbsd.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_darwin.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_dragonfly.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_freebsd.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_netbsd.pl create mode 100755 vendor/golang.org/x/sys/unix/mksysnum_openbsd.pl create mode 100644 vendor/golang.org/x/sys/unix/mmap_unix_test.go create mode 100644 vendor/golang.org/x/sys/unix/openbsd_pledge.go create mode 100644 vendor/golang.org/x/sys/unix/openbsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/pagesize_unix.go create mode 100644 vendor/golang.org/x/sys/unix/race.go create mode 100644 vendor/golang.org/x/sys/unix/race0.go create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_linux.go create mode 100644 vendor/golang.org/x/sys/unix/sockcmsg_unix.go create mode 100644 vendor/golang.org/x/sys/unix/str.go create mode 100644 vendor/golang.org/x/sys/unix/syscall.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_bsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_freebsd_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_linux_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_no_getwd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_solaris_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_test.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_gc.go create mode 100644 vendor/golang.org/x/sys/unix/syscall_unix_test.go create mode 100644 vendor/golang.org/x/sys/unix/timestruct.go create mode 100644 vendor/golang.org/x/sys/unix/types_darwin.go create mode 100644 vendor/golang.org/x/sys/unix/types_dragonfly.go create mode 100644 vendor/golang.org/x/sys/unix/types_freebsd.go create mode 100644 vendor/golang.org/x/sys/unix/types_netbsd.go create mode 100644 vendor/golang.org/x/sys/unix/types_openbsd.go create mode 100644 vendor/golang.org/x/sys/unix/types_solaris.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zptrace386_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zptracearm_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zptracemips_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zptracemipsle_linux.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go create mode 100644 vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go create mode 100644 vendor/golang.org/x/sys/windows/asm_windows_386.s create mode 100644 vendor/golang.org/x/sys/windows/asm_windows_amd64.s create mode 100644 vendor/golang.org/x/sys/windows/dll_windows.go create mode 100644 vendor/golang.org/x/sys/windows/env_unset.go create mode 100644 vendor/golang.org/x/sys/windows/env_windows.go create mode 100644 vendor/golang.org/x/sys/windows/eventlog.go create mode 100644 vendor/golang.org/x/sys/windows/exec_windows.go create mode 100644 vendor/golang.org/x/sys/windows/memory_windows.go create mode 100644 vendor/golang.org/x/sys/windows/mksyscall.go create mode 100644 vendor/golang.org/x/sys/windows/race.go create mode 100644 vendor/golang.org/x/sys/windows/race0.go create mode 100644 vendor/golang.org/x/sys/windows/registry/export_test.go create mode 100644 vendor/golang.org/x/sys/windows/registry/key.go create mode 100644 vendor/golang.org/x/sys/windows/registry/mksyscall.go create mode 100644 vendor/golang.org/x/sys/windows/registry/registry_test.go create mode 100644 vendor/golang.org/x/sys/windows/registry/syscall.go create mode 100644 vendor/golang.org/x/sys/windows/registry/value.go create mode 100644 vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go create mode 100644 vendor/golang.org/x/sys/windows/security_windows.go create mode 100644 vendor/golang.org/x/sys/windows/service.go create mode 100644 vendor/golang.org/x/sys/windows/str.go create mode 100644 vendor/golang.org/x/sys/windows/svc/debug/log.go create mode 100644 vendor/golang.org/x/sys/windows/svc/debug/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/event.go create mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/install.go create mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/log.go create mode 100644 vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/beep.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/install.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/main.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/manage.go create mode 100644 vendor/golang.org/x/sys/windows/svc/example/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/go12.c create mode 100644 vendor/golang.org/x/sys/windows/svc/go12.go create mode 100644 vendor/golang.org/x/sys/windows/svc/go13.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/config.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/mgr.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go create mode 100644 vendor/golang.org/x/sys/windows/svc/mgr/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/security.go create mode 100644 vendor/golang.org/x/sys/windows/svc/service.go create mode 100644 vendor/golang.org/x/sys/windows/svc/svc_test.go create mode 100644 vendor/golang.org/x/sys/windows/svc/sys_386.s create mode 100644 vendor/golang.org/x/sys/windows/svc/sys_amd64.s create mode 100644 vendor/golang.org/x/sys/windows/syscall.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_test.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_windows.go create mode 100644 vendor/golang.org/x/sys/windows/syscall_windows_test.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows_386.go create mode 100644 vendor/golang.org/x/sys/windows/types_windows_amd64.go create mode 100644 vendor/golang.org/x/sys/windows/zsyscall_windows.go create mode 100644 vendor/gopkg.in/validator.v2/examplevalidate_test.go create mode 100644 vendor/gopkg.in/validator.v2/validator_test.go create mode 100644 vendor/gopkg.in/yaml.v2/decode_test.go create mode 100644 vendor/gopkg.in/yaml.v2/encode_test.go create mode 100644 vendor/gopkg.in/yaml.v2/example_embedded_test.go create mode 100644 vendor/gopkg.in/yaml.v2/suite_test.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json deleted file mode 100644 index 7505375..0000000 --- a/Godeps/Godeps.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "ImportPath": "github.com/Luzifer/promcertcheck", - "GoVersion": "go1.7", - "GodepVersion": "v79", - "Deps": [ - { - "ImportPath": "bitbucket.org/ww/goautoneg", - "Comment": "null-5", - "Rev": "75cd24fc2f2c2a2088577d12123ddee5f54e0675" - }, - { - "ImportPath": "github.com/Luzifer/rconfig", - "Comment": "v1.2.0", - "Rev": "7aef1d393c1e2d0758901853b59981c7adc67c7e" - }, - { - "ImportPath": "github.com/beorn7/perks/quantile", - "Rev": "b965b613227fddccbfffe13eae360ed3fa822f8d" - }, - { - "ImportPath": "github.com/flosch/pongo2", - "Comment": "v1.0-rc1-174-gf5d79aa", - "Rev": "f5d79aa0a914c08eb7f51a96cd7b2dbbe46fca46" - }, - { - "ImportPath": "github.com/golang/protobuf/proto", - "Rev": "aece6fb931241ad332956db4f62798dfbea944b3" - }, - { - "ImportPath": "github.com/gorilla/context", - "Rev": "215affda49addc4c8ef7e2534915df2c8c35c6cd" - }, - { - "ImportPath": "github.com/gorilla/mux", - "Rev": "8096f47503459bcc74d1f4c487b7e6e42e5746b5" - }, - { - "ImportPath": "github.com/matttproud/golang_protobuf_extensions/pbutil", - "Rev": "fc2b8d3a73c4867e51861bbdd5ae3c1f0869dd6a" - }, - { - "ImportPath": "github.com/prometheus/client_golang/model", - "Comment": "0.6.0-17-g3b16b46", - "Rev": "3b16b46a713f181888e5e9a1205ccc34d6917fb9" - }, - { - "ImportPath": "github.com/prometheus/client_golang/prometheus", - "Comment": "0.6.0-17-g3b16b46", - "Rev": "3b16b46a713f181888e5e9a1205ccc34d6917fb9" - }, - { - "ImportPath": "github.com/prometheus/client_golang/text", - "Comment": "0.6.0-17-g3b16b46", - "Rev": "3b16b46a713f181888e5e9a1205ccc34d6917fb9" - }, - { - "ImportPath": "github.com/prometheus/client_model/go", - "Comment": "model-0.0.2-12-gfa8ad6f", - "Rev": "fa8ad6fec33561be4280a8f0514318c79d7f6cb6" - }, - { - "ImportPath": "github.com/prometheus/procfs", - "Rev": "c91d8eefde16bd047416409eb56353ea84a186e4" - }, - { - "ImportPath": "github.com/robfig/cron", - "Comment": "v1-2-g67823cd", - "Rev": "67823cd24dece1b04cced3a0a0b3ca2bc84d875e" - }, - { - "ImportPath": "github.com/spf13/pflag", - "Rev": "8e7dc108ab3a1ab6ce6d922bbaff5657b88e8e49" - }, - { - "ImportPath": "gopkg.in/validator.v2", - "Rev": "07ffaad256c8e957050ad83d6472eb97d785013d" - }, - { - "ImportPath": "gopkg.in/yaml.v2", - "Rev": "31c299268d302dd0aa9a0dcf765a3d58971ac83f" - } - ] -} diff --git a/Godeps/Readme b/Godeps/Readme deleted file mode 100644 index 4cdaa53..0000000 --- a/Godeps/Readme +++ /dev/null @@ -1,5 +0,0 @@ -This directory tree is generated automatically by godep. - -Please do not edit. - -See https://github.com/tools/godep for more information. diff --git a/Gopkg.lock b/Gopkg.lock new file mode 100644 index 0000000..d24da23 --- /dev/null +++ b/Gopkg.lock @@ -0,0 +1,117 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/Luzifer/rconfig" + packages = ["."] + revision = "7aef1d393c1e2d0758901853b59981c7adc67c7e" + version = "v1.2.0" + +[[projects]] + branch = "master" + name = "github.com/beorn7/perks" + packages = ["quantile"] + revision = "4c0e84591b9aa9e6dcfdf3e020114cd81f89d5f9" + +[[projects]] + name = "github.com/flosch/pongo2" + packages = ["."] + revision = "5e81b817a0c48c1c57cdf1a9056cf76bdee02ca9" + version = "v3.0" + +[[projects]] + branch = "master" + name = "github.com/golang/protobuf" + packages = ["proto"] + revision = "1643683e1b54a9e88ad26d98f81400c8c9d9f4f9" + +[[projects]] + name = "github.com/gorilla/context" + packages = ["."] + revision = "1ea25387ff6f684839d82767c1733ff4d4d15d0a" + version = "v1.1" + +[[projects]] + name = "github.com/gorilla/mux" + packages = ["."] + revision = "24fca303ac6da784b9e8269f724ddeb0b2eea5e7" + version = "v1.5.0" + +[[projects]] + name = "github.com/matttproud/golang_protobuf_extensions" + packages = ["pbutil"] + revision = "3247c84500bff8d9fb6d579d800f20b3e091582c" + version = "v1.0.0" + +[[projects]] + name = "github.com/prometheus/client_golang" + packages = ["prometheus"] + revision = "c5b7fccd204277076155f10851dad72b76a49317" + version = "v0.8.0" + +[[projects]] + branch = "master" + name = "github.com/prometheus/client_model" + packages = ["go"] + revision = "6f3806018612930941127f2a7c6c453ba2c527d2" + +[[projects]] + branch = "master" + name = "github.com/prometheus/common" + packages = ["expfmt","internal/bitbucket.org/ww/goautoneg","model"] + revision = "e3fb1a1acd7605367a2b378bc2e2f893c05174b7" + +[[projects]] + branch = "master" + name = "github.com/prometheus/procfs" + packages = [".","xfs"] + revision = "a6e9df898b1336106c743392c48ee0b71f5c4efa" + +[[projects]] + name = "github.com/robfig/cron" + packages = ["."] + revision = "b024fc5ea0e34bc3f83d9941c8d60b0622bfaca4" + version = "v1" + +[[projects]] + name = "github.com/sirupsen/logrus" + packages = ["."] + revision = "f006c2ac4710855cf0f916dd6b77acf6b048dc6e" + version = "v1.0.3" + +[[projects]] + name = "github.com/spf13/pflag" + packages = ["."] + revision = "e57e3eeb33f795204c1ca35f56c44f83227c6e66" + version = "v1.0.0" + +[[projects]] + branch = "master" + name = "golang.org/x/crypto" + packages = ["ssh/terminal"] + revision = "bd6f299fb381e4c3393d1c4b1f0b94f5e77650c8" + +[[projects]] + branch = "master" + name = "golang.org/x/sys" + packages = ["unix","windows"] + revision = "8eb05f94d449fdf134ec24630ce69ada5b469c1c" + +[[projects]] + branch = "v2" + name = "gopkg.in/validator.v2" + packages = ["."] + revision = "460c83432a98c35224a6fe352acf8b23e067ad06" + +[[projects]] + branch = "v2" + name = "gopkg.in/yaml.v2" + packages = ["."] + revision = "eb3733d160e74a9c7e442f435eb3bea458e1d19f" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "d0a90698569f49d4e7ef58586b857a1c7c60e48eaca07f1585d02e7ce91ca092" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml new file mode 100644 index 0000000..d4dd19b --- /dev/null +++ b/Gopkg.toml @@ -0,0 +1,42 @@ + +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" + + +[[constraint]] + name = "github.com/Luzifer/rconfig" + version = "1.2.0" + +[[constraint]] + name = "github.com/flosch/pongo2" + +[[constraint]] + name = "github.com/gorilla/mux" + +[[constraint]] + name = "github.com/prometheus/client_golang" + +[[constraint]] + name = "github.com/robfig/cron" + +[[constraint]] + name = "github.com/sirupsen/logrus" + version = "1.0.3" diff --git a/promcertcheck b/promcertcheck index e5db544747874a2b534478c598d39d26a58b84a8..5f64e3e46334a08556b45f9d36c4c1ea69028beb 100755 GIT binary patch literal 10654798 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

MGvx#&>5ZbR2 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 z z79oLOuYY0)BhlOh%t}k+g7@GijPNujOE~v478&kayc${nssYJhRc6<&syvfIUvPh6 zIIpVYa5004-?fsw$c!qVf&Cp9Msw{L=Il2!&X=YKuF0;-`^_|!Nq%Sp^7e-F9-`%a z25)BL9J?*=<%1(7{(X6)dtjmUyf3x#&I@fYk57hiZ{;+J&0dOTIs0OiLdBMoR1ub1 z{S5kIv|(wiILWm-Y7BIEmc+EJOwUQzeg+l69v7h_D@k)ZH&QLmZm^}Pe|G);SBP(AKI*Os3di6Rjz;sO=B_&sInH;<-!uP3wkO~B$YCwl^?2?Dj?vjcDHa15vrXL?<%o z-;TintGgOo)TL{I=^&M|AHS{JO0g@zSTl2L@lBF5ikO|YVYq)|WGC+iW}BZAyE`(} zMF$-*A53p#`6~?nmg+{#H*=Tgk%|T36&#u%`8U@*Bi+|(b!dJYno@tZaQi$CkwjkL48>U)g(m-o8V^VZR`tVhIT}`@l%*W2UrIY-_^XT)y9}%V86A%pv0Lc5veU4VAnPeIxAC+^ z14cMBWK0XI83r{oyl-)I^0GS&aUclsItgJs4bMYXXuw7_m!OoN3eUK4uv*5{FOEk<7YORfnL=yhu~I>$z1{bx3V< zsu6f$=ZrR+VpG<4%IjIQTx{kM$=Orh#_(fTaV0kmL^Q^hv!>8^!FWvTg5O*i#~?&t z>1@`y3=#WtB1svLDrL5ROST^f;WbZ%o(;ndUV!X8zEv1(vaa&OzGDbSmRT8lJ@amc z4P6~<7c(4fvn+sg*_mgs>qTxrf0UDk)xI;9C(h}(4*sQ&a##}PvgYAFQR6av3s0b7 z3}OC&jeORK$TRN%c?L!Kk%4URnph(^rm1X*stjFW1jjexk2>@bi<(M(T7CkKyDVh2 zG^tbWINcOk+S*DsBuuM2n{E^D8Zl{^0v#FfB4O#9AeIpG~0z0Vy{78!Wz36I%&gfm(sl+0r zyYdlkBu;ItQmLjYQBf2XnMT7x*qqFuMyLH!&3nOHcog0`oCi39?ft&`Q`X`skKrnM zG&hE6mNlXxK}0muB=be=cT<)1TgKwh!u;ZK>Gl4o4xgyQ5OsK49bQ$3OVweiI{b1I z`o|8Z9Q|Xh{_cGi+c7_djnNo6HS&}vzH|lp(hbu_(AW)WI5^3*DmoGj(~c+$w{UAL zl4{;?P&sDQuVdyjKSCf}xZx*z&Ius%*C=l`1hW|ncnM5H@6FZoU$6ieBKIwZnqg~Z z>}`A5U1IlDQ_gGtj2#R!O&OoAq8yv?x1RL8wGFLkb|X9k8B_3+=dF#Q!|)8rC{v2- z^JUztCyzDEY{;Q@5-Scnv(~emwkOh9D3}7$sw=hlmtCMP&!eb)$_dhlk3_I=`sSs0Aco*_5oy=Y>VnOlUtGlUwD>CzQUa7^k_v#~9n=my>=^fN4DCn% z5_%34JSVp#KEwkk$PZJ1+t?5yw_(8c=Ev4Pt;?E*N8{_f2`RWEkof%NvQO(0>^RCk z$wwlwhbxR0Ozd?-K18C69Ta&aORWYI&y(9wxn}1!3O+fs+B|$c7=JX(ILJlaUldu7 zmHnW~!P2JDbkzRKiwY1$MD|}UVDAlWlBH}oNtKfTaD3e48Hj(n8+l6%;&9IWl}jF? z3E10ft@?itxKI%#nv5J#|Imrk`%&}fwzxTWg3Fsfvbe1FXk1ls8gk&rhDT>x_kDwFaAZAY8|h_6@M;7fMl0`sw}13M?-4TxVTXLUZ9tLh z*ytkrM`3ba+M*F{@i2)zs0I@VHIM>LUK%ONUGm`z@si=9H2EDxxm<2zQDUM+F+a;gm2hNccTct3Z);UQplULT4gch& ze?m_g>7Ln+l^4bHe0aV{o;H{yRD+x;;gjid0+zh+K?XJfeE@-MYOb}l8xtjH8bz=O z?i5g)ywQ!zm`XY?cC-Gv)-!Wxt2yj5xsMjKW}ttZgJsb|)@$?`qRd@|@vxi1)~s=K zQ~Iiy(g&_Qt}|P0i#j-jcA{3^y(#j9(B(}B#_-kz^W#5DOYIz#!<^9|aifjITK2t( zrL^x)11qhwpMI{%o$lFnJLZj%=A}ga1=`1N^|?Q z$~#Y$SF*ACvtWFxU}E;LdxLOOm6ps|ew?6oIUoN}cTpKZ32T(mfY;(F{7eYlaI~FK zE$PKndK!3#^TKU)jd}2o(DVjPQx|_)G`d#bi}E6CX!`yOd>)UXEcRQ<`$??6GY~)Y z0`cy{c))8E>Z)KD;XKSL!F+nDSjH{LJ@hcLw8tM;p`{EZW>IU*2}AKDJSdFGKdE3V zxG={&KnSZ{8iA`4kS<~FsS;2-t5s=?e`7^87Lhgt>MroSu!V0rVF-@7vJf_#={>e#gfQ!BOnx+-dq#3;W7Moc8^XH?rhSX(CO4L}hgZ|X zwjlxaoz2hIpxwaRZgf;fZGB%;`l1pTNJHObOmO@y9&G_!k;)D0`v95d_hYKpvJM(Dn9^@!$mPSspj_)gN3%6 zvstQ4y;L^-i*7{qYh@up=>h^3VD_k2>X(!t`b`eMi-imtzDm@N#kE;fb5hJvYEBw~ z(#!n!wXm~*Wh;*QFS-NyBSXe0;1YEs`^3=dxHb@I1AjejAS@D;TnnMR_XK0GO@(Uf zjzI#{5I~h&rsFY=qUNp4=dh80^9sqK?XbSh<~`7*dZtc>(;ok!>UTPInnInXaN3}R zQtiDj5f>T6l&NQQh2dMbg?Ctvi<^SQaZwHS6L2@OKp$SpB!A(FYNWwVcXS$1OdjBy z#FIc`r*8k*L$;n9^^j9wcz8x4n7HchelUb^D~Ni?IGV&)<{j67g?h+BRf^3XJoB4y z%Ff;&piXiT`r@4|8)n}oL9tW>N-!NAD&{@6vk&HzlN))Gwwaw`_@T+&2Ilwhc;%vd zc+Jl>6B-q!nv={dJh{ReCwe+w9|J?gah+H7HI#)T@R7Lr!#|-CLXB1I8yt$|kX;PC z7Rio~@LO@Fz)GmqiSR?8Bp0zKpV}WT&j6pv)*k6RV{pHM^y6n`Qx&IMQDco$vTQ5; z;ymVU<2z`$wIEP{eK$J{KMq(DZieUXJd6Is+JiZIC44aa!!iPi`Dmm@aHJQB@al{K z(k{Z+IXlM=yD>tl&>;-iX0#HwJ(&lD0y#z?J0Ua}{r=(hywD=VgWmvb1A)!6U~_G- z*e%5JnC~|dSpUvy%;RtrYHHGVq03UC`dlj;i@N~=UQE>L2GKS-_@NoytDG>i4&SB0RlaOK5G4Us8WuvM8}?7J4Io>k3MZArs&GqE)P)7&Yg({4 z?PE}!(34bL{3#3)Q(xRrES&}QFu$@Q6?AMuD3iiAldH$V4twnFQ6Vl=w)lZ2g`0SU z@NhK-A$X#O1~|zR33LQMjNT$jnSZ}ujNmJExMVnN;Z)cb9RA!he=h6A{=NdVa6{~& z53YGiJxqbeE9$TTD?dLLt$!^13)ZODQ8VnpU-ULluznSoipQwe8h#uwt2A$K;k^hD zybvQ=xDR%Aybyb9u97M<(sl>hfBy%#&Arn)Lg)nqFl0O%seY6UeHR{s<^?b-0hPp^ zI=w{+Do{%$z2F!LLhmc62wOPGmmD<6ucJI4#76yLiTVk7^@((8R#CwT>I)`O z?O{r1Rk(l$;xn3ywWskAxdp|r%qgOWSvCySbhE_$(e{d-;E2&TE6Fq86AxbIe!oQM zc|$G31g#@_yH_a31mC>-c>=)`ax}ntF1jkOY9H1UH}wsyYYuQNzeqntafYD>uF1`N6w*FcpEz3al$SuqS}q3T6h}? zE{B%0+n54P;JvnZ7G5uI>6&Dy1*;i{<9jK~P$;HKPzHe&LuK1DX@1R9YPPcvOyoYVopl{l+TOu%ntjljvxb* zIroc?0!`$3Jbp}@Y6J$r_AS;D=SxD`y~Uc%zN~Hg=VXo!(MejIRbX6$Vzm2Vvc1GDuCu!(OF;QVH_OCI}FVP5I0Y`in)}qBc0V$}F z+B+X0O)}rVm$6u+sS87BSnV3(bs+cw4LCl}X^7n*r#!wVfd<>U0Jdeow!F%=P~H!i z4Y;Vlk^gv3>)}6V`~R{U&mAJ$_+pRP#dIFf!w#cOga%nnB4QPcYyJ@zu?nsBsxi!g zE}N>i<7j?3L%OUBXG)CYhhd6AJ-<-IOXaE&5eJm`y1{Uno8hQcSRDBq^`Cujg6phi zL0ra676%M>Fgkx(UVOr_6yxSVE^2J+w8{7Z`Vp@M^I%yU3jY@IrI+>YAgvI+me)(J zFgoRwTMoiWSgFDOI2pZGYPi>u$N;fk#4~*!tDGhp0*V_{_8wmE;rFT6}po~Q>+oNa-b)83|F{by4_rguTF zHlV~1*A+H1sM|`^#YwW#JDkBfFW*lR6Iua#W&xmdt@>+0M`K%G4K?zrueaVgXmtG2^~Db#U97g4w<<-4DuW;^ z6HXgXYk^X$p^r7xS%~K)5f4}`O0%8r;t2aDH!fpl^QVqXuL?tyG;fK4R&_7J?Tr0eck_5hF(o$XEO^)(iB>!Nd~wm$a_I zBbf!*lQ{lLwD7S8-j$IHfLsxAiY zcu@U1tqvovf~|k4hqhw!yc>3DV2k;NS*>B?fret^3wdBks0d#gxe8J7}grk zyZBCmU&U-O=8aBj?~(W0G{z1b1h3&Jh0`XJIO}K5oTLWn$?OY*dAuKtAQ$*Dc9jdr zzIvM}ydB!EHKyC>Stvtd{}fav2;_@xIDd0l+Xm$Cigq~U1h1+Yj=eH%<>~HWz{VE3 zfemYN{9dhBiA;t^wys(`hp>BfiR4ZyeAto*J&=RF=)W=rx5^#kiD)xD1JeNrfm9&N za;NRqAG_bgHIYDz=UX$r#V~u@H0(-Iei^$JaTUzuKEf#RZy1BSpyV2ha)^} zMdt|5Yj0Vde^qm5;Eky;o&Z@)3NF3e_LCZVk(Y2C{q`6X;U2Vwf$7+vzqWV)77dEg zgt9OMI)XRfW@F$Ko?rPoC)oH>Jh74Euj)~QhgsI7IloxSEnPiPP|~ z3hRKai(};Hn1GKov!|q~aROoS^aDkC ztm#||ysYUA*0fRGktX)(RIx2X9kSHnH925zsp*i&+*0S`1E3ukG28j%mKG}Q*Zp9J z_v%hJYL6JNKB2~|NgV9W{oa%!zLBz@$Dlg)s8E|f>ToszLzi8W#;Ou%{&dO_k+e(k zl)sm966f9paB}8LG9=f{xE0yUX9?lbt!=SzaHTUio&s`(;8;)Q1}?jij?pS23ViOGWTABQ;sr}?y<1pY}f2mSJ^G%K_t@g-Irg7jp9q4N14B1XQ8 z)LS-7)u7Ce;5HJ_{~y-Q1is4Z=>G(WMkGG5g2q;B&``lOxRMq%5zy!AO~q<$T&ihZ zN~^UL5}*ngOai&RT(Q=+wzYk+o3_=~R!ecICV;FiK&rA>i%a#nUKd0wTTA}m-<;>U zOA@So|8G8UpY1GjX6DSynKS1cD-7_1;OkCiqaaw}Lm8|PgCGZVjI_wf@a0ZRmz zNIhzsgkG46A*xdq;b1PVqEd&J1}9MxMhMk7+C?fz&4wme2f+wKj(O0HVzOSXW!M2W zZBL|pI#7YszeuoAYlmHLccp^83EHzLb3iSvSjRVDGFXX1%v#9Ge?MB;nG zX5FtV{Cif&zjOj*;o#AE^!nabN3Rj$>gggHbTT8$puW9w4P{8=WzLQ#ei0&SAUgtJ z0L2qmL8P&)JyG}a(J>H7{W!vv_O9lI6+2Obdle>qF~P6iH8XDN?4JhfWfC@xWF^)N z-4Koc6zt93F_&ruzOZ^;@~Wnxi<8G|6)m>Uh97v96c=hOue2iPDhrKIZf%IKqyB{e#mpQ z6%{B@s`Rk|Lx~o$TU+YTc|$eOqyvgGtx>_jE8X6@XqV77x53M$Dk4?9=>QiD64F_y zAQ{z5jJ>!boFmlANb-ZpR*b}zAuFij!r{)H_Jtuwh6&CrcyL>A77Xn~APAC6VUJOtAhmCZ z%ho>c-Ow`4m>&`fWpijDt`Z09!>HkgG;@a(!d|+hBB`95u?h#G>ks%d*QgfbKa!a% zGeo}igb%^{nU)@UiW9Re?I)uBcp+oNk0C*A@@{%hi$@(S91yrFBYQKPe$9Rkt~iPQ z_wBshFM9b4OeYoi3mgvn7-aoQeOrU9pI9f?7}aJR0W!Bj+Kslvux_}82$6r1hQZKL zL!nsIdzf3CF;cDdar`k8qFKig!cc?Q9$cAWm>t+Bi^u(olh>1_C+h;Y57acGN><8} z;HTym3HJV~Nzw+yYI@%S@zZlWaI4zV@@Bcl16T(7fw~pG=4llEHFNMa2nAajdmc<@ z9L;rvzPeU0r%U{&OEwzbJV39j@It}rDy~Hbb|heQ%H_47-2V2C?#xT}GRvp0^3JMe zW4e1z0PYJM+&$#wUnNia*smlUf~M+AY}Bfu1F}f&D6dtEY3SXwjE&KCaDX%EY^Jv! zD5pb@o8aokX zj?*^k@#I+6YNN-Wi_5L6foq*CdpB?$!^*8Sx&8dkNe$fFkR@Qsf)B2A#srnqDEiK5 z+u>dJR#{1MXxAV_!#d(f`0C@LfGe^iYY0&fAsQG#n`=dq)g*!?KVb?b4l-#*!ZyIeSi{t`5I%=OWozcDroLePEJ+Yod7MN z)#d)tv{pi>(0>wsui+cQv)B1E7f7kK^ts<3)>yMz2fn7Wa^ZM|v}2{V>)l9ZB)4Tf ze_JGBr`t5;b}e$!?oe!Mq8&Z>FiDYq@#I+$__G8eTr?t<*cBi7yavg)41)FI$xqd_ zz3R2uc4nADRsju}Aa0pn$H_3?s?&x~cagUDNdnI>Gfv`~cmkqjSv2?ut1;AcDt8RQ zJ}W>a6d}-;Bl7eWl1lItb*hmVm+aGbAl)i`ym~}pN9LD)@^U)BtX>^J0)9^&V3MEM zH(7dBi3G!x5_&ui*0FHgn#^|upl{mG`gvJKoTXRvn@O1${N!28_d9H~fM#pq<6zfY8QAuaPbLNWijRhe>5>SFwz*b($j~^*A(Gr$ zSZi_sRCi68sqNaT+K1qcgr2q`GyX=+7$_$s6ogoEYXXd7=Y&!<11PiWW9fiq^f`8{)rRSsaOlY~{6A)^Xm0M^*8I+KwLG79- z`h<>rh+R*5i1(o%Z4;xyoQ4P*hm)7{j6$bg2o+Oshl-EFqGe%He$RR#fN@)c0YLJJ zc9R7zxU0b!W#>^aiq66?dEJ9Qek(E-@P{yg+(iD3T9+|~1Wn-OfN)2JDt*HfxhuYAF|m9S633h^GRJRZp^2kjC~4s>CuxDRT=zhM8-AlVN6S&t zzZKdN+cUq5Coe_X9f9m`y1^j$HedRz90@Pp)u*4<1ajIs zOCUkAuQKJtq>GFsz5R zlTfBLBVt+s{k)BC@u#aMlkUk074du}9UrzVjKV63;|QjyWufIAIh`@SdqoJ~n{89< zp#gm{)Dtb~db_UjS_c>~(I8K@IW_?oG(L>Dj4Xr)$QXb(Bc+ZT8@m9ZC2gBz7yqND zgAfjAlN~UsJ3Z8@C|>_hOsDG3#^HV<3Lojc`(19;JUoHUZG_cLI?$ddqJPm45z4*PxU>Oolsh6p0 zDM~`TBE0gZ#&HaVHVDf4^zT%vSv6T`A{>TZr$T6KYQ74G$gcjq93mx)@*E;?p1c}% zLY$*(dX$OJ+KQ|L&w45Lqq7*WN&Q5@z!)wu$8O|M3&VF98{aRya6xaw7m9Qp)fG$e)RpM3f6KcbXLhHSUJu&rSbOo?p zhd@QJRH?92XAsCco)pzTk@| zRQksxvZ>kIbOWr@{bZ5iU7gQhw+4cFc8zV3h|hrK(nv0gQkKE*d@Z0cbQge-J409N z6pUR7q|L(trk? z7*CBwNwm5d6}BF4{Wyiilcgg`8)Mwu`np7-qB{M0Y*oe+8@&1REl_V#gZ3(KyV)LK zJHb@v9yC8VYbxBJJRnG3x9O~t+Um9KqZHE3H}0bw#z2#G!wmb#f(Y{+a=YBpCDo%K zSqKXc$Q%0i3#FSKc?_zfna5869RU_J3`_`8i^!qIwb>_MN_|L?Ok**H7g}Pk5Aw-XHN6zY^4p!;<(kNUEo?Bb0unlVs(0{$V4qhRsD$Lu{p>MR z$I1GMbgu@M+U4QmgT}ML#WimU7h4+3nJw1T40%K0HhZaL9u|{~Pv?rRC9%Vg_gs$N zPl#d*ENec!FWYYTVT;OE2Nd`rww1Q>C6ZPulHTA%u3H`p?qVO`4F{{0~bc3!Vdkz% z)+T+ML4-tTGvL{1_g@kh6fsHCIi*v4v7|=7=7@NYQYD9uvd1V4*GUYd#Kd^=f`)kN zQe?85<;GRywZ2B4cyjpnGFRe0`K#BeQ&LB*L@%{!Gf+Qq;|Q%=NtQ1C;A-U51r-=l z7sV4}D`;|43Bo&lnK=s1m5kP+)Q(v=dtDC;@mbW1H^kJEbvXoGD-_&n_2wgJ_4|gP;rhC!071R5letxi^82aFAk(2Z4^b1=)2pEL zIJBjo8d8qW1#Pn0V)N2p2?chCL2+j|b6-42NMTghs)M=&fSWs(@!GfW`ZYrCBM2`y zBx*H@NS_Tpw>F0>6JCp~zIrGc`6Iro;fwz2Oo?2?{Cuohc9DMlKe&62)A)vTTeMFLW+~G9vlP2L(Sn-C2bd2>BT|3cbFasxV9C zAosrn=7|qk?6q8NCFA*E2jv0XHO;$An=pqtR@i*ClKjTGSuZ2CP13kg3B==j&} z!A-PYcX5VJN12)T!xl7tO{@U)9kVVbyoag@hI>OLB$?032E)M~R$F!oluW+f{pTt> zGfZ$%R_6VjcM~uh4798RGwUe(4=v!cnHehUe^~@LuSv6GL3hw}uJxha=h)>d?x|xa z%&-e788Jgo{`BT(k3jeV&ePDH{zO+Q-u}kb{l*kcEnJU2woXMaE8fV*qF{I@l}^|J z2c(LxxkX!$z$G-Kqyl6F+kWX-gDw`QizQ0u{Ow96dvARkamdK+XjPgh{uVFEes-_y zi+X1Nf@MEH%)ZWSp5k*{_B)TvtNmlD{aaynx{`SXih~!Zz4&9wj=BCV%U-&Pm(-pb zlb3y{vVXc~_8peJ>n)dEhosP=H(mBOw&Z0$UfFkXQjQogTl+@KetVdGx%xt)^eLD9 z#((BzuTu6$duIQwW&eDb{d$-Er!M;gO?lZ5RrZ-Zv&Sv_fnoNcF8diS`{0k&*K>GX zS&;f^UZ+QyaZ!9!!Iua1WxXu2RB=_ommleiPP*mGUIky8_2pCU%aaAwU!yNi$zEZf ztAa0aeQC5WrPJ+;JZI8EC+N#3+?UT5d@0wL#f)5n7x$-!kK``f!-f8ma5}C;J+d6^ z+B{1|bTcBl5yRQ1(Yi^038%!9A2ok^>{6?>SNc7b{=gHx)1yer41hu))5}+7Thy!k zvIuC)lfHL#HmTvDAU(}5OfG~}LeazDZ$v-l_R8&uVtEm4_ zUlw3cHNsHUqmUVE{?Fj)T-O&og`^QYg%nP&dM+P=UhOGFcNPul3!b-ZVS2ZpqA_d_ zgkSnXe(@2$dZtgG^rB1FySzeh1%PAs6D&vX^o0#h-?;fd)L)oBi=gxgFDYa1^7n+0 z!-RXO<1791F64nDKSIG^Eh2cH=cfM#xfn;xt&*^~m-{2=+Xp2So z86#k*iD~S65uTzeQVPW^n}{5D<~ zG=2*XS(eXb5ER%ht1N@*VMB%R(KtFxA-8>H5QzO=mfQXy#NO+G$kiY6ww((^p}7@+ ziFJm*Z|g$o<%Y!nxB}2&gpFY3G>4k^sM4SJ;P0>Z-T&z+VgJ`ysor8XURmxM{{Pec zufThpz9GN+e_v32XOHywkMITeu5@65F%2Cc2%N6%OOQ&ijCn${6oE<;+ZASEIQ*Qb%ANci{MQ2h z0vX^_0+bqE&{~jCjd!cY5kdiT7e{0si)zf(7nY6Z#>qz)3PD-KBS)R|73F;~%ByQG zzu^5aeGS_3^|h*L=&6scf7Z1ohe=u~R|a6vA;Q4*oId(p@&BDZ0&kArYK-4x&xNP} z1%d(r8cvai`lyQ9Ke|5pPx9ON9i*tLl3;0A{YSDE?j8sr|4DwU{tx4Cn&;>Pp=`{R z|99}*vGKovCpq9l;h}@k7`Z6vU}fxGx791d2DrvMuCr+` zFRAGx-VFWa{bT#_Zk0EugEzL|mE|S}Z}s+<-IN^*!I{njOWKu9FWvBWmE+A(2rH!& zf5l39r&A>+e`h7Gnfg_I8P1oj-o-2Y;0g^ zJO+DgN`7y*{V`$G$RLmKu|%F3x2JI2tO2W&RcO~Px1CE^#{=O>!IOPHTI9vT## z%pJ*!e}C`Te*Q!Glq^>5e&^%@ehIc%A<#w`X#5s}=9R4_TH#6jIozfHhb!rZ4sd*Ed~mV7gQfEtR7n0F z@_tNV_py3~5)Atj2Roj>mbP2tA~wykW3Z+B-`$zt6;@E7PrNzdd9fqJauw>L4(&n| zb{O8{a2gsGtj?vrTHXzf(w3GN< z(NuoJfmDLtwqIX>x`_d+x{tSI#UHnpz5{^Bir_+rZj%O7BwP&LPPNx~?<{s@aJQGr`n%VIKj3J){p(J&Fq<7;~%`qAGThHplw^@ z4_ni-O91j^0xgc(%r-`g9-a$!{2Sygh1Ep)0($q{-lX}knLF&C7v{9$+?^{rxH>a!E=rvvRnk4?3AKmj3uk9G*g!k=F@k@GEKh45j&)o`d?(yyp^>Qe8fOl+()$mRl zv>#I$oJk~|A&`zIj))LO^)EV6nrnwQ_vh}_@LxE{mwGMd^M;yM3Eq>#ufMv-+VG?| zM`w+z&KGzCsh^^o1V-+O{9aet!0#cI!Eq%a47^3Y0f|UC(P1RwRi(u-!!H&gWjZU5 zN45&Q4{hceAtn`9D<$+^X}1l;#P8#;B@B>VW;Q59V>Hw0e#=X+0^7QOidt8&QoTRd z4u9=t@(g|DZfnAtsVe}v1O8=msKnaL-yGfD>Q|b*cJ5Q1!ABUww#rQ?efZk^jjursiv%WA;nlUGwDIgK~a7XQs!7qkn)k9d=9kd zwZm4=!hP$4{rYV;9W=qx@!JasJ~-;8k2EOK>DTeRy9yF$C5@{}uwV`$VQXbG@~DqO z3?+ROEhxw36>?>vW*lu$@e4hjY{{=A3<|1%93Q5+dN&*x`P*U*ueU1r?E|{9W4Hgx zNc1EW&GZche*1u-k5`v>k#Y#SyR5jusxir}DV|^N6%xEJZnDY`c6P+EUkKro&883% z3M)O@y<6SX|HgU}FPS=6Z~y&Eq2Qejyy^0O&^fxZ>3}`}Eo@MgHHhCnpx-|{X%

    Jxb(Z4VuB-dC7jJv=YNqVo;g`L}!yLg;RF%0SvSM;5Rd8DgTlF^9YeS>5ILB{( zHZteCZ^}!@7OBI!i13*)oV|+tVQYyxnDKFcpVf`SuZelrcjyOccZIV;7>pNSSy}tZv|`8Q{VVYoIop$J6C3?ui=!-bCIw?vLbhvs?|Lv_R(kEv#W}~L zYV=xf_Th~aPseW9>K(P3cSHa5Gkb@Lei`OP+0bY2%74DNc({EpEB%{$k7%ne-H>HFus-!Jd}aCiSU<@`hNgwG)VVi907*B5v{{F0wq7kr6#JYPmz&(Su%(^q^OsKy~8?gdKjy6-^CtcH_vSI=1~8;CHjJ z(6X6hbUM_y)Y*^MHg7+8+JKhj6>PaPx?>yQu zT=ULj-6jRiJ7ZqkFC-BXgPn8EPYoUNm(zLHC>-BUIo#AQ*eXK{vx>D)jYsA2DEJ%! zecV6>hcIAIq7m0IFlu4b8zHUUPdL|GgSv4EK^4b7qw*0HRz6mAzu>l9`ArL)X%?17 zE27f&^gbW<#sb)}Hv0vq5=?q z7>T`HF0Yjxf_qpzqYYL3_5oS*&aZl{50k%n=k<+uq*;j5y(d})>)*zBIgzyV!F+?o zhCtUWZ>|zB#=6Xgv(&{lZE!P7A8+1uwAVHq&VB@D?q_>^(e>EsZ?%__q2RS##7A|v zkJAH>YZ_70+O2I@7gbQGpI9`4%j3$LSqY;Oq7n5rI_DZX=RVV#$XC@==_l{EENqs| zTHJvC+tpczGSOHTjbO zSv{@XpWR({B<&+iYs}+1E7!Ie^( z8C$x}@g;Q*R_UkfxeqK(KcyItlMmFTdh3k6AN~Xl&)ny; zhaywU6o&tpg00kQE7kJJ0mQlBR;nv0DthKfL6JOk>2NFfPr6iZ%ogmmoM_D&@?7Sw zrV?*qdGoH5CqKm+5awiUBdRH7W>9YR=KYu!v!=03+lq0@aPr&|;}gH@HMyzl4(`xi z2i;F=z3RN*h+L#Fn)+QYJ4f~h{;=o#0hExssC(2(mpl2HnAYI$sI|2@v96a~Ve9IK zt*uL4++8a`bZgN!*hJEk>qs7SY2z0GUkJl%w*2@%Ru>L~YA;$z58 z&~C}NKND*o19^;K4Fmqc-P#MLdRf!gT_{}lGVT3=6k|sS?n>f`&RRoA%pnAn)eT!* z$7a-Qyv6y^qF#C#tR#OOWrJ@kn?l=`X{85vNOZEBu_at=ooiL*O?f@4GHeNNL1l_| z5r;q_W0E0ZGe!vTDs5lFl^LE3IiSPXMPyD_s#Ztv3(D9blk;1)8bjg5 zk%4bcwmWXq$nqWIZ_{h7G7oI6M$3*$Z?4>mOi3I#>sZ3eb`2Aw4}DXYRQ(&WI$AzS z$=HnZ7VE$W#%i654kQb2N=vQi<2t7fF>7*!iI%J_rW9jciWSpdr0}1*!sqK!y~1mG z%oQ_O13>4!uo7|-8z2v)u?J2el%%xY<-S-Kc95xFGvx+q7)-{?`^?-oNEp36D`E4Q zmY0jfHv6mzG1$TIv?Ki|C>5E%J=zuwI@ky}z+L`TuBRLk3+;*0FFvzJ`h6jypCaz4 z?7af|y$1?M+|rYN@8;-N=FN4JkJ|^$ItnCxqQdAmSeI1&2S&exDVc)eH?MzB#ACum zkEJV8WBcJVo;u_`jRe%bV<3GvYE^;JpKTG=pzek+}j2NH+-5 z4KmWrbh&5g5|U1tXTJyO`pTSpmk&_{WnLvcNGIfVyeHB<>`2#FLBV+k8R>j?skKXv zbat21Zz=YWmQ&sKlX!|LA@-B#FjM*7%0;@S!Yd2@R@i&Q2aERB*u5O*Ww@GPRP>j+ zrESVOfpT!y#us1FPX|o=RZ0XsJrT-K;0&AI<8;C;ejsC9Xor z+$5`0twxk*a6PADM0K?`h{3X%QpIbZgclj0mISAUdouwS)2qBX38L`JlD=cLuMEgz zYi=vGwQ{pv=T!!}Cc`$*UMf^9F)WY4AMp8cpQdaC{+-`-Yxz(+EcaEGI?^KgMcadr#cF!|T{1Ro`dzo>HU0jArtbx)T8XvTHND;n?9ud>7iF8y>b`=ezw>}K zeX}l!2^Gnq3oR{8U)OXh$QU8Ixbno{?>3JdPTKgoOp9q({2Gu`yI1$J?HLWL3 z4$k|YzTVIYr>9D9TNa^Z+mCW3q(7w;d+ZbQ!gE`oD6FTQ@hTK=I*g@?m51BNrO|zKhY!bTwmY0v8}dZz);ykAP{0#g7doE! zshXE69rr{Z-Qj7{gx!JtISP1U^&gBU9@WKo;%AoDc;Z0uMARKhcf5N=zx3#AHxM76 z^+QK6L6l(wubw3TRQ~td!fx=hr4haN&im{(&qIdPsEhc};Y8?gg5^=4;YC^S8Un}Q zf#TyT4`DYZHbYbvn1FK=$Rj2=A&sabT_k*1i7MfvKdnj)qWc~~XsdTg9`}F5Ou+#! zV1Vt%3|yfCD3Jg6XXXFXPX4bE1=&x?1P1couJF2(l}`Q(WG5}k-smO&KOf5fN1gm% zAIksf*2dJMmCfAHnR}>!pA#V)sQ^MjTs^MNPzAV3h3aeH%u@mG6oYY!O*Ni>ds(Cc zPKx@WsQ{^k38tzhL`;tn6$%b*A!KcuSGiqR&~NRYy;SJXbf`SUsp9ib51IasR36iJ zC`(oc{QH3d9dO>_EYrIdNC#{nO}-9r4K*F`^zV%6pV7s1zSK%);>v>(*Y-c&*4NM z=X5|0CqwhT=j(u5IwG{ZcYCgctPXGm^z0Yyu&BEKo^?PF>VRK|I-r4WVLHGJC3L_f z(*X^8)B(jyBOUOWVR<^>)=&qK(fY%SOQQbp{vqP*NC&7t_{K|qAN^ro*dO{vYPLVr zekNp!_HXAg#i9bHc$ee{Qwq{&wTc}%hFx5gBI*2S3OCzdv+1fu>>`hKRD z5~wv(jT1OT^Q;nZrK=wd%l{rJfuB4U5xjri=d2PKEy-7d%s&++aEf6$s|1EI(`xXT z63~`>rUZyvB#V^5sZs)`q*+Bpx=8vU&&9%y0UXBdzPA(##nng55PXbDpLA(Y1(1{f z#G`w2?xHS+bXBs)qcwD}2BYSRCJuYfTSZsnOzTIPj@0{dQ+LMU74M;-j4LobY%;B2 zbyHuZOx+P_4lB!i4|^^lIGf|1O%&zFD`M)bcY~Kh)Qe`nd5_wH@>-xP%FC`Oulw~J z?OB`{99qg3Own6)QeZY3;X;!uBzb$7s#R`r&dUgbU)`(Lrf+JwVWk&@?lHI zQe$=`GnmkOQ)Ag8K5hra<5~hU7b>b(JE3zoNp~Qf4Yg&*-YN)DLwD#Jo$5jRY7FNx z63d8DG67Mpo8Tf=YYQBp(`+wU<&{=Z9lF9h3v`{mR5)1@?EP2pC&y4e{*3-7GTR6J zfkJUTDg6Mv!GY_gP4o1NYE%?&+jVW(S>(-Ir#{ZUEe3aL%5J}9_u<~$`6zo%KWf=E z$ZM;W;(zQ%KeRuN(BlZc&O9&OcEVS2yfINz(;e-7go|`9zk9i2aM(~e^(;j7TH2_I z8Gyl~$EVI`zF_A*-dybpS37#6*K#E{+A6E1MmOH?SCep6tY~GddgbKeSas*rKWHDp zyCp$Nn{-*e1S64|PkHJbqiSEQ)X?dtNRScj_;_1ZkZCN6R@Y=@vh>J%ofI=9r%F$K zFe}9jCkbiw0i+3~SffnYW?{?rU$N>mpxgXgOQHeYsUlpx%vh5SqTB*yNR=M_y3=cp zn6cmYko*9|T0E{# z8P;kMYI@yyYEftlupWJ2C264Z(8iS_gqBXIdzb1Zj9D(yRRpJW<{jtci$xF?gs+n? zdHiTn!mJ-_iI|noqhY0zWa+G5i&2{nR1P2K0~;ErN)KLxYTQeWq3j0Z1NT`Yr9(o4 zu0iLm6kqcTYwH)d(AIUbCK7AX-9(=U?+rBH(v!t@`O`B2$#L!Uh1#u3fd9Br?Q zNPz&Yj=P!TD-Oj;DD<>7&^3}lp?vWcx*7CgdWWCiPrMkNE!gr(kzdp`s=KCrM&%h2 zc?+x(jq)4iCyI7jWU#D;mIwPQXx@Y*k0BBfyXR`8nYF~R$7(u9KdTjBzTX&X+>y-Vyobh<8PK3;BV z&3sgk8KD-`(8-0IFLd$+Dj+YWxI;`PUeXgchsJTx`r&@}g#1!$_WS|E93 zSx7%!Nt!*NseXZ>>0(`M)Oo6pB>6;MFA8FhYO>R>1jE3JJNucm_IrD`2_n+_Ed4h1E-ikP{7;msZ;H~ zEV$%+b{F3_=vs+{|76eML*aTMZ_YEq(w@$PGk-pP!8Dw7qi)K%_6we10N`XZtW_m} z#^~eF<6o3C-pJ|piPh||hp{l%#op$htVINA?jz?;A6D~<7Vat8&=TrA)rZ~vmW~G zIa$7ao#)hEp)aZPnXbKKgl;iYZn?zX#Sb1dbAa||O%;FkuR2~5QGljl1_4zSY-%nr zn@o;ixuTGk(XW_uBX$^u>iWNkb1^+Z9 z0ri-;B=%l|7j1<7TfJugYXIhir~FN@dBb|p4ccLWZA9m)DY4nxb@AplDHqN0$$9BSQ*MCO9*S0?UNb@?iZ#k@ZBL zicqV|NeGM7!y*k!Vl0H4>sN2{QaTT-bpR1$4zwtC|W`Kx8 z@*x8WO!nSkst`Dq4eWm$U7ctmHuAkuZy`GSOn@4!m=|rk;9>7!#ONhhnIpQyleeg9 z+hSX10mo+VaG-pehq{rSb*Wo7BkN+@HtJvJ&NJ$Ut#Ny7&pJk7I5jdejZ%8z{EzKD zQCF1iK(VknbB0maa`RoO#TFCj&3#f0t={6@GRIonSkU4|3Op(-aH5}VH%0>GzRvbI z+VQ+LUTjugOf3l1Ic=&xa*d30=0iKTpCS7JCV&~X8|RN?BVJ>Em2GnaJ0cPbk^VWT30CafDT&qTE)ToQ1MV`$U4H2< zKXsQMxJ!k*9PBPHv*mZXl=2E3=4w@$petdi+uq9t?qB6X;by!qusF=9NBnhJhI7zd za8T0WhwbD)j$mN@^G*?V$`N>hiqKtEjn5H1+O)5~+(I^K8f`nqErSW#cBo0c<O^kW$zt)a8>ErZ8r=#cuyv!iVTj;NSUBSH^q0;qEtZjQ^ zhCp8H)Twj3b*fKZJg?vNdVJV&zxx>iD>DbhQ`c0T)ef}XOJd!f=cNw$@wutSOV-3) zTv@!jYi4y=vDfl@s-p!%2E>56>utiRV#9WYVq)^bbb`-51^8=U(J2iKnA$#=TCEm# zy&dCxc%rYe$!C^LxyWx>R&{3kNhPt=H;XdM>e|*!-8+o(C4e&Xr+C7#ZDL?$aF~sN zh18a%tWj9roMizdY4|d+JH0o3HR$@lsP?40JmD^nxy#&6Xn3a4uxEck_sfHYOre)? zZhPKR1%e=7oLMpD(?kTHAPSDsiiB6Z+d9}E1nvsE3eNJ;xwr{E<#nUet^WKD-GhI2 zJN`k4D(DOTq2S_McYm2ON@v?e`i1b(mZy|5HSlwO@{mr+Z&cG`#{QA&_@xq{C}`1z zoit`#Cn`g{h`O$Dj(m;7G}>3b?0N;8yp1U{NI<%nHl=i@{!?R4Ab3t|*(T7F2P=>+ zu_m7QdpxlYI?uQ%lH)Ckod!#TPmHy6lAyC7WG+T%VYaWw66<2Fug6n|+!kB=O5Ml} z@zfRFF~{jM_a{Cao}wHAcjJe#eUAcB+m^LhD7f2xOfW3h=|OEBQ&Ew5rR%_?sPuu9 zzB$eT5vj8&-L(JA!Bf8GQ?eDj2tm~NKv;0*H-56kFj|EAaCfKac?KfV9_?eY#pH&i zaS{YC%T(-CY4N2!Ju3%l2fm@{*W(?E(lXzM~8#o z#i#rw@uU<3rAHES{$_#JeAw@)jHhslUv4*DlxhA}5-w|8j0H93S zaI&zUS1q~H*g^SthD%uucpQ@DbU2k1bk!@QjuxK0RMqb+zp+Z6v9cO_8=&riKRTF5 zTc7zU((eP6<9)Xy^Om|-IV?bzh%BZHwiuJd?UF-C4|(4zIopf>5zlD5yTUOJoX-iA zsq@c}LP9kWn5?yPTW1dAEL=Z{t$|{H*YA2GG#f0=n9g)zH94yMUvZ2f?>xQl1EP-`31~Zw?1NNh2s)0*Pn2X6B|u&@Vbs1uLg||(TlIhnsr%%NgTnm_>KGoV?HAQF|r&=9ZPKYM{e^I zHxQ2ASXoiiKACjql)yaRd^cKq#*p3_#u3*Yye`hzqiZw2TKxS@Us2a1JN#sSnZ78d z)ED5NeGMzDHg*`?6d$%J#&KjLk+UpwSSP_+6-R}SR&Y2@Fghb6S1I)gdQ-n7#%Q~7 zt>5`_e?N5&W0os+lP#9mm_ge22NnTAQYU9o2s<-X{x+NZ z;!Ks!*AViZTVx=1zCGICW(%A2{uKmd=XRHVOn&--y#JR=e|mm;oC%$H4pjabQF<8l zHS-i!;r`-;uvKaowj*OT8`8=AQ3In@+M>6$$M%e>0O8QQ%oSRZ_&|Nl`~A~!5SK3g zv(<=eYY|5L^9)#Y%w%F?VwYdEG4B0-S*$ath!-u^lJI6;g$XPUQ*wU*Ftv1oY`?@o z&_h0aM>3#by@vw2zNGj%t@6|EFvw*K^%uDkgK~7`xPkUdpskKsPCa1J>kKa35kaS6 z%>M#rpXs^Sj-08Iy7NR!+PP~0U_y^}V^ou1AA#{9$*J4YwlY}UDli&do#F7KIgSi!gHo?RZJrBN@ z71Of)3u?>=uVto6Hsd8Vum-p1@R~2t&I@J2E@7Lj0TRfxZLl*mjHWOx65sj)!qcq= zaHhm8WLbx60;Pi`?N^dDgIYQUs?w6|6a#xMtk9c@98v>oF2=l;?=CroeMz6Y={hZ0 zIC_8H1J^m-+0_rW1rjSOkO;XY5%!WPi>)%Fk6@k0E}yf>s-K@(;unFP#WM{53>P9( zu_rl_qgaHZ-DWbk8Lm?J1Jp*rZ?s7I0pXtw$s+T`$D7P)e(LrE-1E)> z7%<4mmYrYlT5eV~8vLXV-S>2H#*8H;u|$XP5KqNVuZdxc&fLpSomrGw&Hd(Cy6@J` zK8$_NNe)>8ng-CTO|0WaGwg^h{+*knb671_H<9az9ssJvJ`igJW@*)u;2VMAX!HZ1 z<2|Q4dh}mY1O@$9*rwUAXs1f%2};RYYuQ1=eyoN`tz0U+*hWIwcT# z3_U=@I7v0hf4YDP0{YdcoQYogk1;A@2&}AOApA`J_`VSakb&)Hg(B?@G=`}mn^9Fm zjy;2!uUm`H`XepgUwWWNdw+oK4gDKr&m(s9LklNLL1=3ARf#iNJKdh*N-RwLIrP3y zw5MN(%xQQbE3BiXVf#qZ%0u#^-<6Saw1rH&Y7^`0G`ifZv;Iad8$YVU85kK>Z+4uQ z8p4q8WmMu2FLec#*Hy2Y`npykO_zi7mQ(Z!6JX>DOVaWH&+*iu&&M13otGTAWW2To zxPx~wq)uY}sCBj5wj>tUdcW@&iT5E?mb$5dZ06_kqZ`wjiz;}`3>lZ2TooroXY^U^ zjiXWGFUJ!>+q$Vo)h7O0`xkk<>b&2-8S8xOh`Pj^d(72Ir#8VTyV=e!#n7kyt zKlMAA3uPz85=%3swe4f}ilxRQH%t_7ub6pcEb&Bq;DF~neZN345gJn>vzVj~62IzL2rU7`!5*FH*SEXP-4!~RuQ{qnS7c=B*i zy@n4+X6Ufp@#L3F;>n}p)te{(Jgo!3IBlt!3mg*p#r?#Y<&t|Gn#p3iVcY$Ewut$i zS6;obT&5852~;J;i0`7&7spM)W-dqXYtXY2W}8tVLpfQG2uCF)sf5ALpyr)bjemD1 z#Oq|gW?q{tcK+Pn;5byIzXs#OHO3ShT@(?~2^rWH?o0pF*jLly%WG|NiE9NVQ)5k8 zd+mtc6$MAWYQ3t$E_j)@EefY)QpJbN8fyZfBT?<1RPZ1vFpu=PZGKJR?H$m)=uazK+g){d)H6So<0bz7HbI zb-F@EbPxQ0ps#aQ%`;X*?-YNTr;I|;mV)yhAQ^n>R zRgKS*gyF{Wu@!2RP}M$Go%B|ojDH&7pNZ_Cg`(Ooj5d{cp~Nr-F?k8d+c4{s8f`Pf z7A>=7l=`BdsPgqWf#eCpzO>$$Ku)r}t1O?<%tqJiPNA{#82j-v_BnyQnb1_4ECi|d zV8J%0m1$TQRsvgSwu7mUXe;cG``u_s;yiO&v)8-=F8JESyV|*+>!rG3ow39&<_79m zgFJGROoK`BwZF=8+ouwns#(u;{Cene|V|IlvS5_t#0I-btpsBn+61FN{XjW zyL!Ad?p3dEAK&(>*DBw3VvE%6`?2K5>KIkmRX@eV1Fy%Wd?qReAB7TLI&zs*3CpP$ z`$aqB)f=a@Nh!vpGgN=PXbblh-omkEwe4q)(20=F;^X6J0bZs>*5zoZx?xM>iK`Gt zu=WVlZNH$6s-#e=+QT3!B!uIGy2O{u<3*eEOE%|3X0KRclcsM{hdj>Ihci>+!ylq9k5&KMYk7s@Ic~RVZ2OpF_=dP!9!qdZ4Q$pHh+VIchxyrfViUv1_3`Q# zr`+uzXYQLfD{NNP0FN96%3y;uveT*&!3wJA8+d4%jv;&^8Ib-I$}0PCaQ?&K{DxZrOlIpgj!{6%{@-94S^E>-R_(p|RRjbwbQXMhL7 z5bnpRmg2u7T&M5^w=vtj*t>bTpy5M>SQinG37i>%^Kjh$-L>5-&T1bwsN0UD-KpXE zS`4d!C&Y^IVRcL)8vX!V@18ujybf<)UG?J0%hK~yUePv%92BkatCvr`R2x!hla?Cl z0f-j11yqG2v`D>r*|dL{n893XI)Xd8_Pz*|sR+@cF;#5VvV3faFehJB4pJp7r?Aw* zr(pjV3}=Jv5;V9XJ`eR)A- z0!TG;D;ze`Lu~y(gN4G|DuRiOl)$tMEU}vIrt7XMIDj6bN8i~36g4^<6oK@Dh#KUO zv^-dGM?r`Qp_9!9Q6$u&z?p}Hx%BB+Tfwtz0F~~?U61yER~dV?zrjxoG;W!w3L!}d zuWQcqs5!1)*P-zwl1+c)|Hl?u^lO1!X4`5d#vjpPWx<% z4f|Ux^+iH6{uUpmu~w~lH)36{)eUKX12Ou0^Ol3h>-B>3mlmjmBKoRi zwJAQa>8UIoQFxh4#qvL;=Gl-AF*b+KmYZig1vD9=bN13Z_>72b#U4~G^D3KFOR9Ln z@54?(Q3jE#QB%J}8qpINCI_o86SFF4hQSsLAC`g!wo;qJybrC*Q{DzQZFP`H?U0d2~`@&uVg(!#tXR#cX^%8*CyyMGW>xyDY*F$e>VdWwb z<|ptd1Wn+(T;4b4m@u?LQjbk_3rG@>D@PY^CqJ2 zns;2|wbt9s*_`xkH{-pwA>71M=N92X@w{6!p-Z&0w%ht1Z4xFN($v+Ug-Uk4joA6{ zq0Ej57rZPKo`K{@J!nA6yxk)6c1!S`wIOt1dqR7>vOf4BiyT~+#d?@1N#CHOK8)xP zZ?l!X2O>wjl^6q1kA^_WKf;3p3U7}HTTWFK0&JLUf)RqeN>m>md|H^MfBD%CKS4a> zst;<={%!O9N32Z|AS5LM;fkIuWViSEIt(hKMLRI3Qf zn#4D|C!K3a4;rY64nCF(6e!AhAo6YO3zm+m8_nH>A>b5JV@6H)El{BRMtc3iWyx;7 zjplG*$TiQy{q_NF2>Bd;mXLr*YQ(IHGr}&EMhsm(TI1vU5V)~E{WCdNTejCU9h+xI z>>q~WgJ_L&F(t;fvnuC)Mwr1q>q0-qq+eyd98X*uc{y%$u8?teV&EJ`^2jg^uUGlW z!NZAKK;2Qah7D%#Jb-C{z2g=~-|IHWz}^Y;nl9K34Epm?Vq(|cN~~;os3s`3St%1z zJM$_lP^V_D248+&vZ1xIN^dkFd3)su-MT41rXNC$oxsiis}}?yqJa8)*VP`?MQLR! z0yprTohXc(ym?Xs-oo1}%X#0t6Ky$@7tK4-mhwU7SAq>rY$HStO8({`v$8@kT8s8v ze@Rq7szDG6LmgZ##E1J8(LL>7pzowxqpMgee70r9Ja4yW$9DbH7D1$h3T4-WZNhOA zjiZy!t2~&u+~>5l)t|^}>sN@vH(LS@ouFPVJkXizgICmidTE1t=|uI?NfMHyt(tk2 zHFmwd($^K!%qTy5sTg93@Ywc>Oe9;7ML|FoqCSsm>J=ryBb#!_3^!^;-L#OqdFM5a z`!(UEf} z)%aH!>&;UqJrN;}B|M_Z9%+hjHJULB(3RR8P2H{+B9ieQI^iVg1cS#?cCSctZlh`E zQf1T2G{Mr=E5v)|qL!S0QgR*#Yq*sW(Hkg}5(4?skXLHreTn)?85i7Axm=XL%(B z>+Ge?yjud8ZA*=XqczJ2StTZ%{1%hlvYze525;VcrA(~GCW2bL9M8N%@k5yM=3P~? zI>I%uoB!pd?&eAE*jv7@oBxZ}U%o7oh368RPRm<5c3b0**It3W$$0*`?JZnl%w$wOer#zqxTTA|*69 z=oN^RR!2R0NFUVuX|^w5@(1T|Qc)qr>OT_DOu4wtk-E~CNZ;7(VEU`-#~|5hwetzt zxzjBluikhQ3m+de=$8%LZ+QE-{SeO&hR6vmXN7KcD>qPdt&fJLHk8l^ zq9XX&XWc+?gc?&Nvvf2;hW(>{5CN6Bc?|OE1G?0hYZ^<(e8p=`(C5-R9rphOxwTl{ zZnTHMFiIh*gMYBx>3@Ud;Ii8h0DI>IK(7BI^ft@1F#Y}uCkGaY0TcID-eIHK@Cs+# zuV+oBo~v|_r^7gv@Cv!FHQYvpdnZ1|V#G zyMqfWLeW%_5{U{3F0=DCv+1L-Gv`ntl7#4KOgwAZT5rx!L2H|qhRv15XVAxXd9QT|Z*AN-e)JNr^>;i8An)ec+&xY?xH}s6))vm^w{B`W+WZZ! zf1@u5=x|m*u^kK=GT7{;;yXM%`6;FtVLmLyHw`C+DQZ*Gi^h%q`xLi*bo!h0$~cu0 zEKuX!xjg+Po*Byu9sxbs^HVo4{j|%weM$OQecNOXps3Nck5ti~bTMBHXOG*XZJmk< zWSt~}9YvMb2{wAIY%u~|8T1kW)Xk($dX2s4nGNfJwihggC`=NpdcxeuOWbANt@P(p z`|Qu-D!04Ne4k33{ic(2_f|I32015nmHBZGR}N2Vy;RAd_Z>XL)OfWSZ0Q~@n!nY& zC{95v8(6}Qr{TC)VIZsRV>tGuvoBIE78cGqh9bR%`&ck=^^4y8Iuf=I1~IsOEDcc# zqm(&y5oo8H=P+xQ4Xm<(@Cv1{nBLu9>QA!ET6PzC^Y4d`&5xNGv}|A*3mOP(-HA{C zrpq1i{yr>bmK~Wdlc7wJfe`zmPR3S#u|HG~H>AC|Tdl$}@YZ zD9mBLL(l$^nw)jHMlLc5n2KQ4*}a?G(urcV4P+cNnYqAnm6!UZ%1r?a%k2_tV%Zts zSYmB#TM#c=RhL*1>)fGWuL1FqtKzA_gy+0O_>F)+P=F6Py*4!g_)iD^E#WSD&_&BI zC*nc<$qz$K48<^53n8sANRdtX8rUrlog@dK@TQe36LmK3c>^LK_kI57lTI7-{LiyM z0v*RD8K3}}-wGD01S+APkj}6Th`m+gzq;~ANUqw>^x*N=t{fCgbd4Li>b%t8ALkl( z*!a{r#3~Oy-KcYVQP@f_wI%&IY!=0_Ov2H1cGS`b?)Z?Fo^n)d-22drtne(s<%-Jj_=fSl39fDxb#)P54!5(?-#{cirUeq|3nZK{HB||# zqCfb7fIq2s9}+`-tB>-#JJlXMa(=wI&qEXW0~b(&dV{kG5hvEWL{~@GOfsa-Enu zB5<-oEi`u1ixpJ|u_lW9rXw!~SzCL_3praWf)su?aU(1#QIRJmCQ7(d4TVT)TGP*x zqF@2rSgWIv@eBJud|#-{7T=g9m2A%Aa>d)SbrVOD#G$;TiiR}vhm^WCeXW)1u*|p$ zJ}CWcVc|COA&Z3GRS~Qmn}t1B_&1B>dSxrFkXn~h_(P`F&Q>+4;$7bh`4+iu2zNa- z$6|teYF|Y=xD64jEFdtXSXfm=iS!@%7+m$ZX|=Z=v&%wk==3Pw=f%@t`-J-JU$SKO zq|e+el3cF8Q8LKvcv!JRw}<*{tvA2cKDsTYmJJ+mY}BKaVU73;>vp~kAXBx7{WaeF zM!0X;zLlQL0ZF|dQ?RsvaIN$+#bmnxkGtLx4_RX@lz2zS1Z!nVh0<`Fqvzc8NtaDvh9JnCTSw!Y&*cmY@5t2 z?lM>1E&wczu(sGW8guthK2ENeKJnd%%MBXFkOqxoM87vQhC_++2%7W*8u%raW!exw z)2uX!A1lpx&*l)+ww*P-+NSXEs1GVULIV)9CUgvkW;#V>VOb>U(6xHEH}|Ld0OEXB z-m>6m2Hln5qPgxnH?!<}xGNd5ae*?j1wlb)4lX79T@nIOU=E8g9k$f1q?gSC3n_g4 zT|u=*WmIpOc@ayfVYBCEZ5CyHX=?0*;#s#95H;6u_2;5K8ZK6hDzC?8Nvuf6O_Xb1 zKUI9(p30Lg^oKLDh}2|1#Y~T|n3Zh}>31Dn(hupHI`oC_2ts+|3&cZ?;F6kO$dw$i zpLtWEf{BM4O+|#54G9h(kwAIKp3N7ON$ay8MNW?-o zgH_|FE{2p{-u!n+hpjv*hsAJ0{OJ7@FFkL$YPW-op1bL4-Ygqfezc!pJm^HMNpJbf zsLJYOk{7p-_M0DB6dce;#puL)R3@s_xEm&2q-T6X4HopK4um%*vhhnld27^7%>kmh z6A2C1P47CbP+y2C#HA5|+Ez-W)ThUrmU}T>YuC6K?c^ust6=rmoM*)fz6^Ho`zjcm zfx+qN)sC-PtpM?r#G6A%Ayf6YQVL|6V=DMIeX{lXkib9*4OIByybdmIfqOKcDIaLg z|6%^me+XTD#Jjg_zshTQ*l?-vO}6K6x|~UvLChm)5yRTe-ollBYVi4fO9zHK5wqV@ z+S69>>&>+l^qSXYd0x0@MJJu{;z!Rwe(>62ZX#H-q0-R~B-scbZptVRyvjQubHp)W zzhG}0xtT1FJK-^1_EEDEL;G+$3otM#b5F4I&(?=7xEU<$1|N|p*j;lb8tZHAXadj!AC` z3FucNx>V37*^gpnGpm5_4$061|7Iii^2Z~Q76|#G!fKCcoPB*yo34>1sn(o}xx5C${aC@62MmCmd^RlQ^yeag-5`PECjxo&=!6ByLI20u0M z(}svt@#KfH)GSd)E(=Dp+C-=#X{3h7sh(&vH09@^Lr{RGJh!$?Xr~%WuS|xb3vtx0 zlsSRz`iCUVi=&+gLz`K!kF;vkKBNNHh79U45?msF7y?NO_8?Pk+h*MC!Ch9y~)X@NuVx z75vUhidSAi2yzJl7|7R~Kc-GUd$+4`Ou;ZdBU2X+SDB}ajC`t zbhVqQYmN%6nqb6=9~!nyWwEtF`*my&9`OHQekW>}NGrj@QD5u1Ft?x^IOzYi;Tt z)*SA&T%)w9(>`}f16c+?FVla{9F@ls*2inP$qZ$&&6vw$F38tE_yZPn#95eL{oLfE zwaEiJEVb;e^jfr-2WE!-hjx{nA&3i_!S|ya%dNE! z^bmCr!PuF;2KnK-=zc&j_;Pw)oK?4Sr$0CO40*3xZ&xk?kO3oMyCAckWihM0m-{0P zswv-y!_@IqX>AD6s2DVve1GN(0%yuO^awy1dW3;8j;b$HY*bi zhSQHTtP3u>&t%Is?6~UV!n@tRY5#inCL=J~MUWD!f{O$eDXX&9M@`m7c7;Z+gWwZi&8wSg%?#6^4NJ?%Af2!z7(Epv44``z=o4%I zD2dsYH__hLVLf5KwGH~$`!VXOhuT*(67GQ}}Ksc$u4!-)n?4D2G% zG%L$CvQQ(+03*f|EYxBCYX;^ogV}-mn#4*KZ#>;?7U(wF zqLzNa*Y9>BQ*H7VmUN^CY9QFMqs(jBE;x}`&3r<=vY`Lu?|$oabx2l6Muzh)Z~jmC zt~rS5XST=tv&YA|cx203UiQ!<2l~}JZaS>CeTeahFEM|IN@J#M&Qc^zI%T-Hv$C1D z?V2k{6`$MexLa*2kpW*ObE{m;SP?vZ?7vtZ1P_JGGDAapxk4N|!}$hR9`L?0{q%mB zW_-&kcKLHE3;Lov@BXqZl;QKe~I!`@vTt}Kn>^- z%Q_e40hFtrGCK5QMttNrBg-;iRw#0lI>6_rhie2T50!x|6Mh`1Dc9oqL-GP!4wWYU zneZ5|{ABQ~5l^eJr5#jSMbrZDvU(aoTVx8wO%ReBj77jgN$?wXof$`lGA)*aaD{-X z2`Dmh^aMHmS)?%*g1pT)eTvQk+l7JKC?2U&@uewEy6Qx_>Llj+PQG-O$RbZm0n*g5 z8UGwDq!s!|oNu(5@*)V>iz0RC0alK4xcoofz63m~>U=*583;?f0}>6EC1_M|4T~BS zBp~PwPHI%th^SE!qoPJkfGSABOdw;pf)=Z-*kWscV%18O0xH!6C<0nGt)jRfZg(71 z1Z4?I{_p#pb7$@>36bhQ&jaV&GxwhJ?dLn+*}z_zj*AVrJdmU^Ej+9()Rlp{`A>=+ zJzgdEtK^G2VNjk=7O%Sunh1Mh(w@LS;C~=pi4w}uAS*42bZNi>3luAIC(w-Gow6Y* zTY!RJj!lnYuZz1Qa&Lou1Zzj+-i}O9`$qt(WuLu1n31Exbt|VI@6?WME|_E^JwXR; z+(7XHP~3z!Lz%bE_;jj6_L#j;{3^%3=_Dnqj+${q$a7oa0#jwe58;w$xG&XBO})G+ z#>^oQ|7EmHa;O@3F-s~}ynuKm;e|(9h-Iws0>lgb7ZPvZRSufpkDSw!sWdu15PLrV z2%$d^odA?U|8jIvBS0hwMWN*OJnbRV#Qvj$Uk5O!vxG>Nlj047dQNC9+5-n6j!I0%Q+ z@?;H4FyDWF{KuwcSg$56$?K2^X@zx!kH8)FM$F^DshV_7i*?Te;w-nS0+h z+hby!$90W>o)hGexQFD;eZ&0Qu#{vXb~8^8Au&p^AVZnpl4Dt8GQcbu1ioI4Lei#u{#Su#Gc_TE3&|Dsx(-B!`qEv5YbArMU zWyI-LO@Z<7^mH0`$f#sZEU&oZoZS2Ui3CEX;V~bn@rLYzD*|IzPK~Ow-4`qo_%N;`DQwN`(%p4H!%Rwl?&wC_!D9cfXw4Yre;u8 z0^g>fIkjjIM^V9(giC~*%+Dert<1^N76xn%#at#K!lqrvyV>NBUrPpsr7ZN|A^9>P zUZ(~_mlJiWQ=SgYCzQ~H^B#DpSUhJ(Fba(=PdYnG%u_s{FqkGgOfCqLB=ZlpimWo zQ|^gqDouVxl3HQ%MLi=taBx54K5QIR16V8b57NdVn45*_qdJ(BxkWL|#WEQ{D0-m? zyJ_-Rq9<7JX!ScYh>ni+f_(Br>K3hVUkpf4xEa_X5~)F%Nwq9D^ZmWV<9qs?KkLDo9- zFj|Abea9-@jyj@Z<_-q~uVBy|4=(GUz=MN-Xbyu+g+Wn8D|oP`cgq;~_jknVc31-c z{!Uojm%>b@QBx#`mpWGcknA~{lTyvHXGXsSrV}M@9F3F}Z zjNvv;lI^68edxe%p1`QT*5mf_ zRuDbZBLZ^#Y76Py?jy`kU>~9ba~>Ue?hJ9me-7Yxy76?pe@x{4iuX+mg9Pa*7}A1h zAx;W2&x}SNeNVPM_cGpB$f2`;U%D}?uZ*c3j~)jU$9eRV?~3?0^avTTN$@;UaR5CX z4t%qw*}B3C9RgQ31wtp00P0vMMlL#m`ZW z+G9Q8Io(NF#}j4?C9!_+c`-d$F_<15ugsBU0NR6Fo!)jV;=dT{Z<&64ZKtD%s6g!i z3~5*-SVRGJyob!P+X*YkpxnS{@SN^V_*W4ah5K|po17sWg-~Q*HoTg4>;0(3J|v!JS=1X->c+UmDH&uppt1SnWU0CR8ppr>r^sEC6}t?nd>l&y#PC@ z^)NPO{5q)^u>-iGJirlS*FNM(zTzV149G%GzmwUbsSaxj7M7ybt(faBD1t_7idFbDR5SICr-Q{+$g6Dcu0Q|zLz z6oqogAIKLED8NhLu8)kx5m}TSbuECMLNGXq9~Gb2`GZM^4-e@Bc>blYer^>!<<}en z9%JT5N}l_WMu>#*KhQx@AJ?UFEcz}dtnOFFi9Z2zrDMos*vm&9Y{D0ibP0CSr|0OR ziuGcT6|a54A<2!HhQrP&Y=AdYcOg8Udhby~nhvI(A8BnqQ1u@gBIo?V~yEZb)cOw z>jLEETCLeXfU3rl&Hfb|al}6Fc4^q&rakC+APoyhv1`eHKU&AEU`PMzjsAn}CVha* zM#6bF0E^5WNFdlIYM^NQq{lAi6T9vb$w07Sz+}|u&`?ECV(;!+Q{4zArA*K3w-yRu zV$AKMP82itS;E>%r8Z>BBoko>pt)K>bIoBwQ|IZfD(G?86?}5K(Bmy6holD=@QSua zP=E+{!2w2cg9rMp4IPj{w`ZoRbXIFBO(b$v<5*+XMq&MBM$I!$hU<-&Wq^b@wal1( zI-dG%#d(VD$@kCGN3>thbypVsN8$YfILHVqrFR@@nHz^8{yNz=Y#Bb{X6DM*LHmzS z6U?_GIV9$ZK%&+^p;pi2PRKo_Y7Rev{Hu}DwYv0vTtS4BQ^PZP)7h+4I_@|n8)s$j z{m5)+f+^UCWsg;jQ!3jBcY%gW5x}Vi9la^jI|X+!2AmT53xhg!o--B5C$C5d021U5a({wM{@`rb>!lQGFYt;`yfhZC1FMfQ8&cJH z9S+t}#Te?dc%2kqZ`5E)1Ys+R(M#kpetJ%RnmFkqG&}kDs>TYQeo$!yzQLQJ;nCL- zM&s*M^7@-3($42Ge23qqomAf}F=YRvHQeX9iBlQXW4EGm-Q zkP(Acl~pyC;vQvmF14d`&qq&H(Y~tjM5E>ic6P!IOi_WW-VSzmX$o!>CWUGiLUlM& zAUw+La)nX({#bhlfZ;fl?+3=hR5&!|cY>MaD`>>Gsi~;qnR$!~_aG)(Ll}YZClcFL!}wQp^pj_fO>*Rk}b7#O4av z^zmeV5jYZ3tpCE0b1|YIY=UuPoV>w#L>1MfkAtOza3S^>HQ&RSxmObu52-?(h9&1I z!?nN?3NEO}o-xc0O)q2An~e^uO;=3~29Ym?=fd+E0;8Cz^BmJxa?^}uUde|m7tstl*=h~#=K4lQl>Iw%o~}4dKAP=STaza3fz5k zj>?=NCDAVq4F`-|%GQgpT8_6(&d`cd(!^@}25g&lIh#LCQbo zSu_9Q`QEH9a^c7M&~2|h7JPE_v8EhGUqpT|d{Z9HNqJT4|y7(G8xEZJ12THBJOjtZSxJ7ki1hI{ z{79|w+W*K@}=vUuMPKKC2MB z6C0+t#oTL$Fg!l2a^Z9-_9$|+Z1s5VDgwc!I8j3b8>+U}_HWPT#a25bP@gPm;OZKu z^=P9~?HYnw9-f2CXG5b!?b34r6B>zWz&>HPLM`WKQlI}>)UG~GMD5p1niVzYWI??n zHO`1b)Q(oQWc+WnY&uq8S;6EmVX^<}7f*mYjCu~b&Bv44V`WTOYia0o$)x7CW(Y1nb{ z4sP?|WloGZG<-Rf+xj;(`glh4pe=XxIp0{?Y1sH-xH6!fX^rlm8ir&;Om~G}W+)Z? z_9^N(XnXt&qQfwbyM2Hzy3tJYh>En>{0ZmRb*gqX{%_s*zv3DXVSF9Ab1yDlaRdib z@%uYq@oFLTLu6EbrDbmO@4sf!V5|08Xaus8yAOF5KjWsmTJ6(dI2+kiqff?%J|`AR zFeUQl5U%eq{A%e&W?c}Mm_n~XwXDgKm-8cf+{1j`83UyV>$J_fA=#40ss~@4rz`TD zmItxA!VXApjWvqnQIu^P?2AEVQBz)iJvA#ScpNzRw;hz*vBkxLr%+-nO+OE2f|M9P zX!S&_PF{!b`Z~kUJGb%UrQ-+foVbY9mzhD@O^IU>00h|8}v*aD*sZI=ns}A+U$)!|M@u3DhbwL2$ClCC>#wbv-JWuRG&-DdNR% zbwfH!9$RBTrYz)1CX7(rWD+Xf?1ryT>!{Q~qX;UM)}{M3kwBw05gI*?-|NzU3kof+ zMqDl}Wg4z!me{qTRDog@C?(@FuZ6?UnwsFK3AsVLZ2J=N3pDczS|;0FI6nr4JCS6Y z-4``PB+q{PUNJ8lRI)}T4Jx^>5LV{DXk4PMarz=>w8hL30IU2VO;DBTH-SC3%_JML zu92k2MNDG)CncAY#m^AbGEY`toWcZGm-f8tbja2)3e$M(`<%xex?rX=pMWUH*Dz!S zXv8V9+bg&?n}E9rDk^Y0|HZ-o75NqupEQ4A4aU3Mp&>`TtVhS3HGJui2^AqC_5-Z!S;u*O@=VCM5E zz^9*#bbX3df+_ZG!yX`e)ZDjhz>@n@&v585Vs0Tc9G1c29xfW|UH zz{MZ97G%)3>Y(j@YdJug#SeK~PF*oxy9?<(UL0anQOKVwhT>9@9Q=gZ3Xom}EpMps z_M>o_QAtw3%d%g(?sxvUSG@J?@D_;OTV`-D2#!Ikm^Kn8+rAe&KG^x9PJt5Oh3DeF z@Y%^;zBut^+2d_zpAU*8yC1Fj{jg{b79Tv2Az**>V)n7u?h{5qaJ0%OS+-vs+1!5E zNyB4xfmrBjkpmNyqgva^`h`jLt+nuXraD}IO*8QC$6bWU_w%+E zeyM-rxa9Evfz>wy|FwzqQB|V}m)*XZWX_X^zsVXG?66iz;Qr_V7dNR?bwQxjR32(y< ziXb`RHzD5}><7++7*2H*Q^OPs&tX9-Rp9O^6=10PoS$vT>Aj`bPZMY14QG@Mp~c z91HK2$?1#JbVxp{D~L9hH13L6oAzVuQR2SD!aQW^e~6Hq#xD#5%n!uMmofAA%HBej zC$L`p2T^EG`osES>x6&bkZCuY+>Hh1;=k@P>j;}U7_%h@Dq&a0t_QoOuE*|-5$hm- zzIC`YYhUFFgcw~(!kSV0LM#ZN8Ogyc%EKT^aSGJ|`m!pY?Br4i=h1E|fJ8D(r-c#8 z|4y$l;(Wx?>xx8r`O!A$l}sM5m^K({5d!um(1+IP_bg;7LsJe>!j8Sz{ zq5OEn5UipNMrUI?dJFPDtY}Cg1OGcd_i?3SoQ`EA;`74LX7S1RrSLIk%83*SHmrp3 z7DJ4|Y|I1WaF?l=Z+&<2&6F}zW*FX%%rHRW82;6lp5SOxWyUJta#1VnQPT6%nZ#o$ zNL(f&q}HEA<|0@wlBU#VLV&bk+2wk7&Ea3KLt98K6L_vxOX9!q_4r=U%8(fJ6m`Af*%$Jf50#w$0Qa7KjtQE`4pkag{)NX zbKuc;;z)uifhLadvGex+ubIJ{0uJ7&l`mvAf-(qGrK4OJKHH!5$ID=k%tz$V!Muo{ zLu?U2Ut`RY$HErtHA1Mp>ZR!bTDUm%#$d*$dH>f^O*67Xw> zhD^&mk}6m(YfdB*;NO3wF=HivlMaAuQT{1!j{1t*D)gRk|Ht@Ft@Sspf!(k?gY(r0 zb*{!Gv$#vluohrg544T|Qk8Zg6^EO6Iu1UKeF#Gc5DbA6Q%9vFYO8R?;0vdS?@O!f zfI(x&@k35Kt>PcikUw@0a?B4q!SVD&%*Ha%OJV_07>Vd4lRktELy9>M@Mj$s#eK=? zpjW$$x*l&Gc_a3Ur?=fWcfr7In&H#ke6lbe#?vfgw6vin9`+ zE&Jrn=v07g+y^xmvK(5aHt=ie;@Jy+liH$(c+Qq*Z4|0kEyHKHB`%<+)$|Dnc&^g* z{Vet4!2UB}+p+9QP9L@}x?L>c!hD#u0dNE2{Rv}cJ;97UpULtp{LPubQH_N%03X7- zptO_8X2yQ2M0x)?b(v3f#@K%?CK_2+(6haXArX(i3&!k-UooL;)^Br&QAAvCXb$?w zKv$?j|K}p~Kcq55ae!0C4YQCCu-tQ;14LcsT-K;`S$aXtE!y8bvQOM9-0*7zYFKfd z$E%v`EQzcnL-g(){sxh3*q#nFWayGo*W-KdjZlh#UWj*pD3C%9eKR`g^U&{M)fJ=? z9rZfIv7l1La#e6$9?p6`R|q^%g+x$yiv642N{I8r{{q~%PSM1x%iMC%fg6>X!~ngi zk0^31z2XT?L6!mc40V1Fj()g{O`t2)=Wbb1c4WYXUyFN+B`GbPNxRVZb|rrH2a$ac$f{%bf)2Y6@LQ$s3fW3tB&6tOzX za{;M`H|EO~~E;1CT842tHjc4{~qLWpl`Qq{K?PIl#qMcTjZ>a8R@SI_P7-pBE5y~M#aAh0QjTwJtJ@n=42H-|te`8x? zMlFl1^7KGkW9eP#p>`Rq|wiP-d5i zO&mS$Q}h5gCa|~Uf8dFl14X6}eir`bF~eUNS|UYEMz;HKt@BB#IF$n`gy&P3DM7q! zplRVgDD&+n%D_SPlwUFawG^)?2kL@ySXo0a zxE8Mp#i$<(PFEm65Yd5fS#{05vc@=|+znJJfD;+|8ac=aRCZg<1g%+M0?^>Rc#x4G zX@H#*Fvw;NIjDf3zIr~}=Wq|s(L$C1p**{G0PC0W9(yjr@r(y1W!u%%764&odInRC zbdRNAc+hrq3Ft0hWsa7YDa8UDpZltoo!6@0+cF#9ej_obJkLN z=XxTEgj^&wgQl}{w=oM%Gc7f4qLA;TkngkyVX3{k6-B>>*O$rb`aoaHxd|rnN!!RL zvM>>Qph|lZ3F*J2Yu8kz%`ge0BH1aBzTUp~qg0wg}rsgkr zHfl!lr9f^yK)_hRsQCaHJg;I>n2s*4hTABOrGeb#NXKKCTyZ`A#~7Q3HBihCDe{(Q z(HOEbfD4BSg6GALhRY*`f3AI8IlD8hLe;CNS>muhg7)|k>!(o7)z4HbB45HEsaFId znNH2M*W8h$>ehk$sMnbFmVl~;Xj1UB ze54EDwwEAqst$&OjtXM5e@goU*h@n3QN^$kfNP4_N9M`}2YWgz1a4wua|lWvDFPF- zxzeCUSEXPv@#at)P8GLCfD+g+nE>>5$?y|ckAPCCnSNiRXESqqBl>AUg7^-Q$W|m@kW9W z|0I~4n*N!jrn&Z?l9c{5KF`*WUY4XLyWm=Jm{r0c8j+<8(Jf_yfUaqkUBlKI2vYg0z{+dQ)0){*@_9og@zB5Lu2cx7Z= zTA{ywXVDf?>>W!biLiNUlSZqFX9TX^34h*S!a?wix^^Y-uJC^37 zG#%%1&}Fd{aLT@n{!BSjCCacsB}-{KOq$99o}`6UF`!L&zB-8o^wo8-71$`}{1pb! za_rByQPpLmuB;`54RY=~h-pC9Byrtxlh*o;K#YH+LpLNU5qTttsdp{^__z_o{eC92(#$`ez))oeFd(O(D;P(hU zhCY)(n?6Am0XMcy3%-phU}2m5W1j8uFTQO%XRPQ)Hr5{eC}hh51&n}<85V1SMC05V z=a_Ta+%tYeuzP>}=j)GC0mt?C`hpYsXOF1MoPBT{ z8XVg{V`RLz&RMqPOaBXdmRTjB*H(@2*asv3q??p>`JC$!J%f zBn?@He9Kxd0O^CMmW7{W^SS3!vyh&&qv)!95goq{aeu4CJEXgl<-){kX)kAIZIddaE$ z8lCq+W~oE8I3mN)j|F(fVXzC4tSp4HGUsGe=Cf}7Ax1CKi>#?0T(emW{n?J6_7w&j zl+}cagu1YOcmr&ogs7KvxeCVumZW+c*S2->4$AN3{5aXoFlMY{bymqf*QvVxPhg>N z^rJNjrMpAtKtcTt_IRv5PpF`iF=K|R;JcU#I_U~fx;xaUeV#*65N2}Cua#dxr11Fh zo64_9Mo;^c64CkNRnk)>N2|oElADi(AxPJTAUYnG_|Tu&M3OzyHTBa%5WJRfSkLo z!s?m4T3*5cbRbbO_j{g z0WtPM8#HWj^ymUEfS(}s1opW655$G3f$@pNR98&95HZ!xxQ=lriB#s$rrgO)k&NXT z>QjPPg=Yw2*(N23wR{8{O#oPoW8^a5Iax;wI9&rAfFYP^mu_()254T8!*GCx3HU<^ zX@Um5d+*gmxPZbSQ0nhF>F2$KZiV~^D47%b!C}|SzNXL&5jg%aPssS^f-d-a_>cDZ zUZC10QZ0^NBHKyiU!W0@g=pGx|1=sE4M3MC#+3_OFs?ZP}nqcp_RCxSqPk=eb9X@l`b3i??Qi@b%OWDySM5G0N%rI|Wo3ic? z=a_A<@Q|-LZ^Ym$=MR{ajRML>0mXGbV{)hjA|o{s59ENVj)`R>Q-+cpyZi)Fmb3>y zqpU1vgHud&TU9`iSQS7p%$4>|>_=_+JcN7WWYq%2cr3jxkBc?C;6wGAULYvx1qNqh;dF|< zwvPe@;4zAhA3@vLQ1{#25v`v`75*RF1HtVp58dAQB<BZUgA7V9*5x9e9!wTe< z(}(N3(;U+0NJOhPZ@>E8=F`|tLFMeKr`7l(=;2L4 z#_rY^PhbcX2g7jXmeX-tL21Dm=;n|nBPC_h`BdNne84~EO($=8mPjBqkXy`(EzcKk zC__}jNA&UnSoJEx33CM5#D2C8O@Ymo&qNF|7?9!O6W+8tAE9io!za}`!xU_p5U@E1 z8nz|*`1YEE8lI4V3vVSEoc88pAbYn(Ex9u26lu|Co{5^0GWqiHuN8Dk1JdRZ0ZeLU zU>9sgt%(z)@xOtUyO?Ykosoe{25|KLKFTD{>s@N50f-~&%=Dn?6~Ma2$etXm8zBHPO7Kh2oM$O(OLBk&Jk!m`TAfbZ?Fa+}V>kQxwa)YrfHZMZ49+>dG7Uy6ef6+3EVob- z;Qq!5(>h>TX6Lkmz@Eyl0&Q>^iWhyIF{=$EjS?AkI^k46_UT&!v~0d*pDLRwrK{94 zy0FrtGU_rHe=`n?J}U8qW<765vF03QOIXv!qty(1_-4Wnvmbs1eCS{V_JSD5d5yqq zmFsNOyu)!D;ct&ui@PA{SX+D~ zC;+qqNiSZ`OwDoVAL`S{7CwNH62EdyzL1zGfh5<)$THVFz!Q%9~ zLZ}!9f0b^(p$k>K=Qr%_t9NVxm)NauWQuNGrBibY60fWufW^g}Zi8S9Ea&S88Eli! z;kBdU0uc#zy#vMjv>zJ8mmr1IKyKzeMLwbnslI~BHtNk)==JE{MjZt>*F)4Q zFm$1|eCVvta&Ew$r!QogAGwf4kf>fo+;CQVK(E(wZqjiA2+rYpGL8TYzw51VTEkWl z3a*#bIc;CP-EWUt*n>(181(x)@f!c=E9_HQP;|BiYF<*H?Dx8WQ8zmMe$@VfAPW?K zfKYl0u_?`A|u`F2gXRyN`MKQ%6Gs2(2!XM&D z;Q5ekXJ}@DPZ1+QW^u|AC4>F@%Z*vs6^Pf#Y5JPVs#k5p>%uwVB;FUEAoNo&^~~2{dXYK6@IFTIlty_QSSb$b zw=t))3}3l8C%}MP1cra)908I%8e3Js0^V^S=b;tUED?|a)I)ksg z|EHP$4P?{t)*sk#Gx1gnZgnDmUl<(W?k zQgNa!e*AMC+_wVCwO-2t3`Eq3O0mKbx%dI9I5c!N>_483R`7<50{f5@W&El<+5_8H zq3v)m!XuadVfe$bu&htHE{)(eyFP_<;vZKgY(bjHv91Uh$^r#26oH%=ZT;+Q=QqJh z2`@OpnuNPvVOZzs1tN}WDB;HgY=ULfkz#(3FCQRNAQ{xV02!=+ zxwi{Nrzdfb8x>%Hqxb{< zO>r5_lK@D#){)TI_PO7*ptbfIB9RT+fdgnc0~vezIw~Q?g$DI1o?hz#ni=fOl*0Ki~qGv84CS{3Rh*i#7h6v`!4h=0u2OHSq2xbhoa`7KU9s&U5savvs) z1(nIH!_IqWIz&;zxy=f(eVYG8d<#|?%B+_v;Q=Z$UmF{_B;uH+Hx)5~B22Ob-Qk*E z2eZL%iz6D3Cd4l&B{5LUajcww_om_BAaBburO_}h09haeqwF7+&=xucpd~=2Y-0Eq ze0V6@AZ1ZwISttY`C)7a%o8DgZ|4kE3qu=N?9?G~dNSVfl%C=&l^5Nj6|>6K;1D=t z&~I{_>C}sXZ(WZb+b}HOT6rNcEjNSNTmvB1E#9>Po073(uKg>MYkbJn>Qz+$3`R}K zBdP;fcHIg>z{Z`1*;M#=b#9aFihgFT`+1!sqUhPa+o&ihg zUptkKjIY#QdA4}nvpvv=qoZarPTqO;OPr2Ew@Lu0n4wb1K!vzHq7q8%@d*@^CCjsH ziE{Bv=i2{1U(rVEr-;~~HI?hJ)dWW@t}y&Jupv~G9{|*lt0xvyu5?f55~_g@xrC~K zVp?ok2v)P##Ql7Ol|;#4OTK3GQe@D|?0gc%sS}I~dltrd?Df$-{FEei*A+){pgr>q zVhGM+56qSdB6e4viYO4VFa8-pY{$r0#KiHr6mkclQL>+=IyI44FY2y1hCe7>n`=K4 z_dPLosle5JqbdNHsRHY!KmZe%FxS35rlz^}B{9$ToB6`;H&pUa8?fDrJ~fWtj0z^} zlZMpb2g7giXWVAWttM7h!Q$&dBP^Ay8-ZOX5CBX?Vp;IJ+f=UrBSqzRY?zfba*KPu z8!NX_S7g5X6WP6nzKmZ1YJ~}nX*@6r(9(X;rr~@(tu5WG3%6>3`{DgEAq@t=i9H`v5}Pm$9IgeX#o<+?ql9Cny*AgR(M4;OV7WT9|TypMnp*r zKvbSksg4I<%f74mc(7am9~;3q?xYC+MwbgBu6S^r3KS4vpyPyWVaNEek8cZ7ct~Nx z#ETe~GKZeZmpht@k!SZlRZ%FP?19?Rbwenlf@{-C$HPk+tXAm;bVzY=Y)BD~NsiP% zPw#!u5$;HESUP!W7yWg`XOsmlB}JzxmLH-fBRISk{sTP`i7UV*Vqk%Pbd|H6{2^Mi zKm7r`m>wS;jI+1K%zv@oxb-`F6@wmXD$g~}@&M8dfm?OY>RvX&{0QrVAu=(pz)~Fu z7sO1-o6uY24R%?$qnA|xalNb}hqBcNzHXkK9?J|=J(pDj?bs&l0|$WU2@#=-${WY4 zKPkTF$V9db7)faR6}T zkpM_JiRjk8U0CrKu4)h`VZlZ*aVr*Q_a3|JlW}XGJwAfP9ojeJ#02v zeDf#MAMJ>YDEf0yWS^_sZ-M>?_Wv^NbLQH91v?vwe+%v3^9!}F@IQ3>2lh3OzcF(j zuz(E0noj@{7<>a0`V{_s9V$B-OERBdKMwn(D@Qt_0GSXgD&h$xwcpne^oh7O*;G;p ziu<^IY-z>uMB-&b6FCE0k*nPQQsj3&rQH8As*QTp9s#gJ7e&-I;xxv}?_v65d%MMm zt=Lu7Yl+E;^#@u%1sjBy%4;%7`+L8N03CzLifdvDY#J zveFi>V=`cW+T2f}kn;(U%VbKy_p*EMe^=U09#zYroK{TW!jzcYWrj=Kc{rDkMDDNN4D z;7;KoM`OuYccJz)55c0umSN zZd9e?ktAiEb;iqYj7tfHb<~;Q@h>s~g$4`YlSb*@T2fzH{(Pa>mf`?)K37R!06 z)ny3V)Ol_^hU~~3&jjpH3as5A;8+5CSc*s({bbSYoQrWmV*XctIG^<2+~% zrJ*^V9o?kjuaJcQiqfMhUqtEWs`Lw%&e87ah+H%5CxKPt(Y2L&Pq zje=I<`fZ?m|7QLM?ZmuEdhSI+7YX|kYM7vGl%&|*-6J}X3YLcl_bb$CdB#?r1VWu5 z2xOhf1OxyBX@ogn#g{=b?J%Oa02Dj3XOvU2T z^PDPO#M0V+xJ7AGxEg_0?>dO;iLf~KE8l`fAvcZUb65*lXQ zFyD(37rsYf?H6Cjp}Z(5n9CRNI$}|ff-5UegcO`E0A=Md!B3@;F0njO1O{}EqF*5G z+Bwq_MPO+}1fD-iMBoJ^;m0E)@Qf;bmZfz{1OoPJ-+%^bLW3CmCk+Fy(HNau_)7WY z^%ojo$s;qwkW4A52>mCr|HY3G?4$(tqbvJ#04WOnqcBZ+y|*Gy2uq3r0_*-;7<@PiC{ z>u(a3C~8M-T;81{DVvq|)yFDosJ=H& z-a}o4`(H8vN+2qSA_?5zb#xSWE$<(3DgZPG;o0j(?dK#_Q$M~ z{?Z!8ACR6{`d^sSD*BJ}3jJ?n(mMKIpOrxWizc;1|Bnr6VmlHS{kN*p_gNZC|3M87 z{lBo2)8ClcYWk#-8_DQ%vMhj%>FSfo=LiMnNG7eL&+x7Z^f|qxp(kf7MZl5%KrfVG$`;ca^1AxFj`L`2terASU>%RJlC~ z25Z=nQ37a#by`I;2J7FM#65F05|_bxRh8DWG-9yc`y9w-ISyZ(z9jFTuWk-sr{~JH zb9*Q?Ns90V3J#MA5RS$SV?EsBE(r(^xvLq3-|8d?{}+i1;q|I?14|65W{h~-HU|FweWA|^42JHs0_AiSb;0^%bkHiP)q zj)M66NL+~jSCzia(g@-^KLz3)9ZoA3G>+fN<-4dken*CRXZ)%KtVGCoRZ#a(r>PukcX&AK+%ZK94-61$@gC7&kL% z0pB}~1bna2%W)DMknh_IzI%|k@cl-W?qq2M-wrL|I}~;s_6r&}0d@xdXDMa1+zi4A zMP>@&&9HA;nLJ)1V;#66pbICz@NR)SCL)1=wwiXL7os8Yv}>=UuS!E^@%?DvEUn0r08QPpK`Z%2f)K4Ah%J|eHo&RrnsJQc7+ALCF|g#$n66s4%LarU~~NYUto zG|BV#h!Z$gwQ@C*@FNi?@N!jp1xsfrCvXbv4q_{dm!XqA2;$k-Zvz?sb%^o7PoZZQ zVg{E4()^R?89J&}^n9?b(DS!UT1`)@V*)+zp3o9KJE>MOk+|sDR+YA6X)Ha*Ep_PG z<)c>6Gx_+FzBMIEah$nQN|Ss1IXX+dk`s;KBpZL;<`E*@&IC1p6)nc`ZtoB!PXRy3 zu&=r`o;>b2-dE{T|JO)dJ_%rQ8(Bn|!&z?$O0p|p`A+U#K)IJ#?0h&^( zX&+4-WgFf0PUs_)!cLv9NNHY5}5iS5x@FhL~+AkxDcfJyyo;MTkBm?+=rV-`LB}iQT=X0ub5lbWe=en)H zw>f{fb^Ygw%MZW*OxLti>X3|fYteB;X&2Xj?no6xzhZL8{_~r*2^4()rWguF`_H>n z#T7_g{pW3}^mdlEw*S2OJrKB={#;XG7yPN=}uLpr?J$nbR*vdjkZDQ;`HrgMIYFr37`t-Q|`7`V!RyJL5!EI zIC4!}i82bw;*6Ja4@fKc^fY-X%utb2>@_$JgLFKE!*OTRb)@4&CZOX2)&V*$lvMA! zffAR)cuk2IuLCA?)J?}9-vJ$$ImRn7{DMfcSg;HteWV)a#mP@{d@+-GNPI8NYysa%3XI82TEKUD zS^~ZkZfFMIHmb^WViujU`tb*$!a*cae6!zf7GICj7cd|?-ih|qGGIANBQHiq^aI)@ zU5H}~5O#HISq?=*WVKIJN1o`U$b-cdiL=31D5y)A#CPj17n}lTdB&thiKGP3zTo;8 zB1MhzhX;flA0crW{hiMmiO5>+EiM$#oE(Le?B8B9PTWyGS3`AVQSYQmf(Ix8iCM7h^B zL!y@(g+$AdxJdL*Rl0|9o20HFytWcS{GNGVEWKk`V6Un%jSVc0Z|+^>-vL|M^K( zx{#$2|9Qn`P~%Ykv!(|SpFrW|f8emliOHPENdf!oftp4_8KIFGp-};I+4jcvibl$$ z2KWI31DEiQFwc&|MYn@dqU5tM!)~kZ_JqW8V&|2} z#Q0xMaV-qFpKsO`K*61fel(FbmyIWW1Z^mvxK92i7QW;}@z{ztG%cHRb1{LvQelRj?| zc)R^)93ll`e<>uSBLa2AsxsgzEA1A|9p2?vHDk@c`c5kT8i~uAf1yfkmd@ce>xOVGC};j3C}+SA zviJN4luLHr;vS;v-;vyYflQ|hnY19qSuL?`+4k8Ov5^otQOlle!s}9jF>5rF7=3k3 z$U1gR4KXg>AEiqHzrp=xW8x(%KOCKq-ME{?$=Za(HQ}{RmA=kW*Myh7{SDCMt5|7D zn4doseNH zkmAF=U+;;MP#dqUSHzRhZM<$%t=x{pWxQ@urDZI2887Uo2MKxpdeotc8;^WLuwwSC z<39Ow7mSPCC*KEMd)`XiC*LNG`z=>{a`0oS{onh4Y_iK&{?KGUx`!J^b;t*_?uvb) znb$nQvApM6Bz2xE|AIZt^_5^o*10UVJXd^k27ZRygdr~aSb%_x*U4lvW1sh>x^fy9 z(q*%PwUybZ@voTES?!tsr*Y~=c?BIzjU{tEozOPbbZN~#b))?HzYq>I#2(9Dz~U8cbY2p(~l8;9v6?@KJcTl$7dwZ=jR#Y#4E$_m_t%`HZ@JkA(VY!&Sbl4o`B0E zks%s(&Et)@$_Cj!Y$}g$<_j7V_(PQZZ`kJ~w#Os3`|!w-JRWQhIZJ4@z-iTVwOVW& zPOAlM6-${gf{|ADEO1(F9csU79<^jxxe$txr%9JUmU7tlWz!c0HLt|pyseePiBcbQ zf)!Y6Dh#nluX2UxGU#UK2_+e3%!bV6th76C!Tt3e?U!D|I+90tbO~;~KL-odgU5xR zi%>M$e#}9Ss$Ja2OTk3DC2W_wXuB+f#o#Vl0C$Qyq7mhh-L#+MA+nqHT|7i~)4qX+ z$ZpzK@gO^7m)N(yLnsNJm*80hFS1*~ZO@aycSZ!hTm@gpX5f>yzO2{zxet)J*0T`M!TupOyBY z)nLGrx|!JeuWPn`$}yOlA@x(W?dLJ=&x^CO1N9Yh>2SWWq(B^C9M4+l&2PZ&Wbmbc z5};bf6|7&|FaH~@H@APOmH6>EQG3OQ&ER(>TS$)I@I?GH*&>uA{iOcQnB5orVv(>L zSE2fa4wqu-hlzw{_!C1v^gt!TNDUcTgKVA#xwS^uY(sAXz~uX1L{%@)37m zyT}L5)}$58H4aR~RVCz(MNXSTt`ZntR@F22BfHQuF7-7&9No*MI>^z|Gjui9W;`GN*7h z>&76{->jR0`_B(l6!lw+TMo}NmX5-akR{$IIZO(v)A@|*A`trPk-~BdGbRwq`t1>N zK$O>*!GY+AhhW+JyY@#u!o>_gg?ZaAJ)8Ppk=`ip#p)VUCVhA!9Cf&9gETkK82yKLt)T3*<90FhT-$%+G$2O4vha9HX; zkY~)<#&L)Lz^O*fCG?=JG3{`=|I~bQ(0j(LVg|DZy>8690GYahY1Ic$%{wcv@>j;v zinR3c)d%zPDh(WRo7T3V>R_G`*g`Mg8q*#X7_*o2ft92?l@J05Oq%&BYB@VE@9aEt z&|XzRhN|EqRe^^PoFX6B^BY326qzUl(rUW;=wtH68q<~^^_7nT&PVsSK03RyQxxoq zN%*3T!1+ErO!?{p=c{v(F_sQY1A?dK88t8C1tOV-=FY;Ei+mqq4gZPfQ=nhT!x}yu zzy7Z4qVnFai*icu%`Ho*Ro+Sh)v5tXM94vB0+m4hmaU+IlHd0|oC17^b~UbFp&yu)VJaroTDJy@nZ zA8#Iau9z?Ey~dYX&o^KT-JE+R2la*j&dQBIG4u|h6Y5XR1BBfglSc9DX<8G3;(Eh> zrwhS;6R96(PI3b}9w+{aTo1#G{?!`_j3s-7o*N>UB)@K2o#0|0Y-{+l2({JYNv@Kq z>%QBK0Q&)0TR;md9F?;u^M2qtz5WCJjX5KzUH$|8j2hY0s$m`zfq5au;|^2Kz+ixC zXED|sE3_SGCJsm1WzxFYyP$yqk3EWLiZv#kB<&%(*@WSzz_SM#F$4Yc^3JS~b2f6K ziYPl0Tirq|TAfLq)}iG;FrYHN>5inzVK$xllfLyIC^F`}&rkdZ&M*SMQ@K$_O*S!b z%vxJM(EPS>NY{wyt~P61$WI#ort2nh>-$t1|EAwml$ycyNd>s3siG(PooxTgKUE#*HW|*> zw=RXf2B+o6$yXX7Pa@K>?2;AuxX&k|xn}S6X6nu)nhU_f_kmVLz?oX-Q0Ov;LT|Pu zq7e3V$Y=@`-C@+6f)|J&41W_SBtdxVZuB$zr}i@kH5#*iD<5t!X5EL(2wZ4foyeCiDg~bzf3KZwL*6Wdy3B^CgYxC5@jbC8`3KPZV@Mu0kdXf!ingRJ7Uc6BRih zjc|Pw>l6J(tHx9Wa9}vPI$v}|Myth`JnFpmg<^>Q5D(^!r8NVDt)zAAhgkT0cpn~h zxF2GfdTU#ZFe)@Y(JjIOYOSruf8bi9=1ab>JL0HlvxlYOfp^r@KZeSue@Ah=8^W-E z>X{}kLY(!Eh!kwldSnWN`^>(33tg6AZz1lMsq9!cIKR3{x=hur|AAk{5?zi-YMo}N z4=c3y%Z{^kJ`{{_xlvO}^-REdHz?t#^KCIWpR*h9Q&-lKSg}BNZM{0H4>>NS%Z{of znk~^^mJ~>d<9*n(?fndDW~t-|m9$eyxk_$U$@MC^N+qLJQlygeRWej1`6}tBl9N>O z!WYs|clGpF^%UFQTvfPVCA(B|k4h?3@_|amt7L;p)~KXGB`-i$Chb&)QiV zmuE^YK7V`*m7}@y$Mu3k95i9w%lEL5Kx*e0%{i6@w~x;e-xL#V1Yvc$_f)zs0D2q| zW2Vf>lr!@Zk9!Iq>9a=Xjytc`*SX2ZdGJkUun~J6I!qi0+tpNvqR1VMh4^u=x}(wG zkms|yK3KSEJ8qjb{Y_mbE(;w&(C`f(4cs4uCyaAU-rMK{qT`0w`qE%bMup|pM*2Fz zb>R-H)3ft%kCHF=I?v%HTD&WD5z|2p({A=z7vd7xZ|~hgQ7OT!)P|P^pk60P8xa=z zMmhE+W$HFWCDi%72or7XnbCeZ&kyvuxPhxTs+vHRlK+CZw+!VnQ2u4nh$KiCM z7R7R(bI3SJt#p#XEc};A1%i zUTOv4Re)KE*J8CTg|=%G3!#-$R;L@MVJfh_G3#2XuTvYc#l%>5@>TfHm?i74peLmi z-~t3*dMSG#YksJIgFjIEhZoc#Vw3}u4>T)$DBy$AOw!mdJ5T24R`F-cGhqppkAlR@ zDk3I^VC2}}+(6|Mz2oeuLo8Sr6NgOaUP1L>Jt4-OP+2dhGKd2Vf&dw-&W}lrQkisd ztlQ#I_3;!#?XudH7@#T#H>X!~&~p~5CSXYLWT8CJ`dC@DqtC_1JW35> zopU07u`gz|K+iGYx}$6Oawu+>8*1)d0ixnA%}!JivA`l4s8<@P*=$&!@u$7-y?m-} zs2FD90`TGC#hR&T3sDxlgpAk8WILH00FYvLxL#RU*y#pylPxzDKl0bbXAZlzJZSFS zZlZH&__90iEWUZOTnUR#u)*$;@SeQ1G4c|Q*{2y2>G2cUz|SbMhW3$CHd?_$AdiX-}hL2nv!7Nh3X=^3Y)L28FgyOEW68<4XG zGLk0A&Q4MbRuSPRjR_d%73SMt{az6}huw4^4GE|3ocB>Z#GU9PXENutw>%u_1KDFa zx(&ZeskIix>Q$6b*gqf4g>}Y*&r=9EWf<*NDSy(fW|hWN305h@0aau13(lnd}2x}F}l__xesjw#X$UOVLYYB=}CMJQP zz^#V7!Lbc)3H3ysFLSq0s2e-ox~-zUpZ*nUdr`vmbgupd`nyf(@97kn>KzLNl4rC# zsZ;3h8kSpT2N?DO!%|OEb4z&74SJ=WoORr3KY-Q4yyND@0=$hKv6eU>i?xn}%J5Ca z;zE?cyTy9-sWZVy3gnP8&NHl>s}|s6++FLLy(r!kP#Ep3t4VaZD?>(B0+=F2=yBSX^Va(*@)>JmhMF)@o-K;xxt8ODsqkn=%q1#S?8SQ1+bd=Xl-Myprh z7afaSA)K&fOGgDKwjFue3SZq5qG5%>{}%536kUlIT}0Kzsi5fRg?-;LmwBe{zGeHB zo6N$!JBor|6gK>T?ys?fukZH4;9Gdri+x&!ecv&c1#8t`;ofh2sg1tizCwnS8yY>n zzKw;!cg$Ni4>tRPflp{Xgdrtu7YME4%aZT{xE`+#GnT%I%TI~BG3PUEKF0$?{KlN; zIN|DV>}Aa92djo$mJzsE=A~DBi6?k#1Na0&)T45E+D6R=WD5NUjxuTf{bM|tQxKCT3a zVuCJ7F8ir~JK#Uq&8QI{%DNkXZ7}Bi9h6y}e&pHssYeB@{=sacM%;G)!J{k2;kkRo zHTb_57XA4T9#e6NW`g4OVbQ%Xc!1L^K&_j8=j!xx&Zb!; zIn7rbSvMiqAcrpZrLKStD`ccc#C`>3zOe5m#sgsdNEmVA>1{*^bI;ci!c1kD0E7vh zMD{{AY=OX2_O}?xBwbaFFtB#`ide}ci7l>&QJ;s-V_l$=5y+ET8$)L>1<1m)TkCNc z`e?AaFFJE^Kazv_)>r&UxF$>#SiwIX%$}FKO~JbSsTf$%O=wuB0@k6)V4VV3_2+O# z%R{O3QTzvc8i6mVm;(AXmFr~$-exZNPUs_~G|_^Dg1scNGRB`W5;k=M$ke zTNKe|EsPj`fkc&|(YLCn*-%^js)Xp_HgFxH~k56NX^S zT!IMW5jcki%j(|WhmL6>@-U#rtois=GAnuLjMMAl4ffool|H}>(uD}9CZSgIwh&D7c)SH1r>tFYui7WHZEN`0Clw6b%Z5l5Mv+7tC8GsA@5p zWW<>D_aM^J=|=2^(>Jx&a?8AnW4U=~aGd3)s1&<;gl5dNSg)v>Cz|Q6Lgad!nbw`a zt$Sc97!vHemxfGRw9#;{x0y=(fTf;^^UfOZlWcFmTv^V;9xxdL{ey#mggoyn^eoCu9k&zEF7x@ zTcx%9DrmXSnz*gde=yaU`53xpcvV~yVFYBpSh-jgnT}@?3ZXmn1#wH(CzJ6moEk61 zBLgFSgbXq>ha122e=An`)OgSAaYlZ-^II}Ex2MZ7A-HN*l6E3DAb*ESg z@f@6iDDG?g<*me%oF##R#9hY0WQBt>5e-wRE%(R4WiXJgXnqq74!V)Cwx;{UcKa!!A-(1HmM~ z=)??lEe=&6J3>944^7h63eswT%E9?ud7do;ReD|=kNN;oIaB;zD!`Q$QDADKi`ue^Hq}mz&8#!KT*q#ov)8W|bK^LsKF0uv=pz$Pi&AP5$_$kJ$ zd5|^99M3PB>%bxPm`@rDA)A2BB0m#hn(er|VmB7Oj4J8@OiCXDY5Cc^k#1yQNEc_Yr^oX$c7YBE8=a94Z8pw+&LI z*r%gycc)8A{7gbz#kQ*(x%3N5ng0h-rI=D&Bcl3}0q!bMy|$MYRS{4B0dz4B;a3dT z+r)UCj{sTmIw$knmV}n$EES}F0Xs*2CSo)zxL0wI1cA*~0=sB_GXhJ`bHJ!LfxW(` zOJJpjLkTPuIhnx5_?~Z3V5=Ls!qo^IOUC&dI~bN%K-8gtD$o(>z4;?lL|54@VLy+BJZ=Z7wmemjCZ(6^bK4X~=;cIU)F3Vj!s3?3K8b_37&7r7 z4l}qbv_FY{b66Z9!|NaZVr1wZM%C4g42EC{BV#qyja|sMIcv$S>c;kb2uPn>-N@xr zMqnvegVWj+V!_F>j_>@Xd`O3P{!+NtF0?vlh*8)czhV2a`@SAZLV<%*HQ{F=Ma1Dea8{+s$k$D*GphE(-2a{ymqB$8DgR^g>H&Q=Wzt9F2KsIx<6y*aD$x)t_D@0{)ylMlN9@g zt-lx(7V{p^7*hFym`>_BJ% z@yd%65WnRmg}7n|mQ-k&q3j%{%)HLv7((fZGSmK3k(u$oZGn)Xf{163VAFm{nfZ(g z+q}$lDo!BX=`S`Ib@2v>ry~uw)>V z!(mf(BUg^%?I_;T_DH8~-J>T6{^8^OyKNGz#(c071atAFP z^js|N&PcTf-m4_V%Og>;c|uAKt1piX*>l9K=s9pb5@Jv+1?8b$pilhdYN&${ZGP?= zeu+58MoE|FZjqYwqKE2LRd~c|>g8%y-%3A+!6VuUR!AdOG-%D_o4Br^L_HX@xS`93 zXqT8cjPGdj3a#|BO`xO0OpJ{b|C8#S3<-X~5T7zfYNkKb8H8s1uNE97ym@@d^4xvD zHUI#J5HPx~;#d-C;IiHv`}=bafB=Zo%h@u?8Dp{(MMJjnpC4W}Q$tszr5=$jBRq|0a7OC6UrC1!mJ58zen zQ_h#s&JLjy)~7roq|m7b*{m~h78)*dy&7f#4+umTXPef1HSeQW1JHD2)tieIx7cbR%LyjS66&xk?L?nj(#8 zw6K_aac-4hf(2358E=`ygyX(AOk_C=!`mpQ^rYA~N+aCd452F^u-QVHGkm`pjyfXC zu!dj~l*_Q_L<;Sk@ErguAwWtP=PB&*Yzly!fW||yJZPx#T&904=8xrkfU4F?s^h@U zvOFuG0D^KTY~TvZs>*C;>`AwgMnntX_hBuIbS=xI2`y<@mW4+c2S>PY@w{{aR*!`j zv|6$TmB%oo01Pn|LzH|81dL%sfcM-sg|$1dX9|mCV9rQU=ne(Eru`v+w{N)@O7{>Z zm__M`HBU&I-VZxR+Fi;JQ`Wvqkbt#0Xa~=-+=aRU0P+|RfaHM5AOj2!*1G#wY^-W* zKlxS6`J_(2or^iM16wOjK}FB8qPiZ7V(P=UF;zkMRvJq-OB5&BQh7Fu4@Q$95HNuW znF40;;gzZWl^d%Lw4Xeam0+KTv1BWfOI3aT`h%|hHU4dBvbUy%3P}$rIwmZ`N1IK! zlhfJ2Z~8yx!hKn+zV=?=?X7Cesd!)Y`M@bh9f}pTUpQaKn0YnDC+18MHUO6Eg@U5) zdEvGux0HNK^L4*O`vtS#*0AtBH1^Ig`PZoIAJNtY!Jk}_560tzO8(xH+ z1N|>1@iPZ7fz5)Bh>Bs^5!qM9jQ}}VP2LBdwXl>Cl$y==wl|gxVB3|TAbT(H*#3fc zSOf*U5a6@9mam#10?{aBVw1BTb|Rj8ZvD4s`)1+4i@4gppKXt2AK z?4|&eNhSik{pdXq=b30!^&xTeU%;;t?k6r2)BshvQYz%8Fo!N9kXyx1@Br97mp`IT zL(D;bxX$;nOZW!95ru=%mc2S-i6Yk3 zC~zH4{QAr(k^b+*Gf_kJjtq8f=>JlfS}N7+GdDug46M)Grqi92JfM>;z2WR!1`%j= z`$#%pmRm<{XQ*x?caa}zT2L{pvZ3Ykef*VE#H;xRxTNK=06bu&z-zW-x?*ny8DH$NT$lq+e=mRsn zsE9_l4`BxV)<`-}t&IfT>ha8mIl0X>fi(3#kYSNL&ll6qg@bwW-Ex`Y8&T`ay_RbR z*~N{(nOxVHK}_3%vDk0(;{T)WOW>QTvbbAlupsq?rCJp9)cqb%%hqUX@v~DEr7_L*AH+Els5UX-srDr zi8lEmd?29J=$KPG1+bseGu^@ltCRBbjaa5Ep;rPIv@jwJtC>dz{zwyW<)l{PZooz^ zBnU0i*APBHN}~%xh+tuk?K(2`5c@(4F3)V zo5D{Bo0vL9zkw4A;VtTr*Q~ojsLGu*z#9X29OnX7lR(YGVxWwW3kke6pYjJ#C3rP5 z!QeJ8Jnk&vf_cHoJYbVr9@Uh2pQ1)dNY4ysJzvJdCbgQ|rC)2@gfdB289E_7C!AG_ zLRejJv!GlFfw#Sp;4IVa%NdtZ&?iGB3 z;-X9@E~0LMEr2qImd#{a<{wWZsT7r>56L@xQ$SIMFLJz(lvBU6I*KR^S)`}42=BhL zizsrjNPB0Icc}70Dy>{pmKdNdz2bmGZj~a|{0#WKLUJ0e&pj4{Z_L{#gO^>X7`%92 z41N-YYzE(H6;u!>Gx#o5QW*SOt7K{hU#vnTznrp684xyLo4Mqxi(*!JpV>n&!l@hTbUaSdRq=zo>9+>R7 zTw%&i(2||$t;kL{%U?LNfE-ZWM*nJaJT5m!;C-aMLm1-n^3$mfPQNXjRw5Obm$l9! ze@rPavzvhHH2U2%5P>FS z&3_`FkTW)=2Gm5)hZI-u8d7za-xvrNq5_Ad6k!dtk{}I8aSOnv)Ee9VJn#`zj*H2@rFkJTfU#4%DiiyqBURK#;jBI9U6U5M zQFN1)e+?K&4zWrx^uK6eX+-tNb2yGR4OE>-2Wc#*Hd4`?#VS586`A?wtQdKpN-EHV zto94(uLPR9Yc+F8Rrp;ZyTbw3uPnPyaGRhA&aj{L(0YC6I-PlBfz9ye_V^8#=gfY{ zy~#Qf4`1k0KV!Yy{GpE{uPY3&Bjp^DA<%S`Rx^MU4D4+$xIEbZSI1=yGJ~DtusJni3E>1c*dVQ-aV<9dQUja0$Fqy}vrV zA26R+5gzbfxTiF<%(ru`ub~OnX_Lzb^A5=#*t;Jl!z&|qDKbNnkF_mIFdLsDkMQfS zYe^0V;4r%$t!46hE|G$a?0C6hH1eGD9pp9cEygFlgT1o7|t6*pZIXxNoe_j=>C>|f|Xs55LX2a zRlOLh!E|c|$K4v+0!3b9DsEtJoAIN6W#$&4V{Nup-E>M-4b)V6byI;hX)Fd!byJZx z`H%R}Ybg#+0wHjE#rPg-llyn$bF{$M$BVyJQj`vltKhbF__t`x$8m=6l;xNqhq*S7 z!r=w2F-O^22XkuBdJ=PX+V0Y?&75o`Jt1D8{gz=;Yfs5V9>o>pT?xAlHrzpJKU)xGTFaB zP*Y>`~{;9|v=cKA)J zd7lR!hFv`sg54E@hwTf&UT?6*f6Ng(sPs!Y^EcVq=sNvz;Y_YPva|VUjWc6k|9=AT zFPSwPQ_K^aWMM(>Sa6#z=31rF(8ee#z(dE3dB;UnY4r1-LGKPGeMKs9_l5q^Qs?f| z>9%#P9>OlM^<4L`r@DOzFD%3?b_@$q0lA3=F|H*W@}8*(Fyf1(wcc|%<{%I}X5&Ke z+Gw@h0Bpal!F7$qB125$$%VhVY5W5cb)n4z4J)c~*3jhJ>HLrpoCE-iH1jEpU1}E^ zLBHYs38$IGr^p$k2(2HS5yTx~P&o=PuTJOZk7g}^+=%9zhfJKaG4mtZLb8I1JlrP)NMOyoP!L+4Drre`MuUJ7IS=nr`PY&eDrZuhRL^~|=OA1Y3 z_keL@^@$5cGJ&y$!`i5a7CQ-@9Ei8a=6-}Il`C}vbABf-Sb=_{we}#cY2<9d)=9|p zai^JgGA$>SXy95NZBhU-@eaofRMF|D>`N83E+I)iAeXI3q0~NLOTF}0rsO8+rAVa` z6{etR_bi4aK^y&md9N~qn<>c?>%Ws9cBN~RS8�SG3uz*I$2uL^S^@8!LoGOm#wfA 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≠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

    J8;dmS5t!4qw@yJ;&lk__h_RHcPJ zpBDOKywX@h(aM1YejW;pwP2d`Oa(Cx!cF+=apfQH8`Uk)-x6qs$3WSNu>ko3!p{~7 zD;>Oud+f8iPl|hpvRo0bBcP<7?1hc)y?%QC=-yu;pw4H}#vs+LsdAU@fM}qAQG1dH zd$bYiD)Igrd4Ho%RtoFTaWw0*c{fk zx~U)?v_;khsNjCIjAY2e0il?AAJZR1yDMJ6!a-vG%F&ZPo+>K5WY1<#OHIH0v zEv#JojAA6rZxov#i8>d2UdE2lqFG^QUU-&>LOI=Pr5GwP1RN%6eeA{IPxzKvLc#tm zyzxR-2V`b>lIO5#lh7PA&rRW4r7VX~WCR_Qm+D@W7d}TMuRQ(;1pcB%E%3d%wIT4m z(5sz!+nLP-{^~mt0$&C&A@HM7;1C7=k{f@Dz}NR|L*UoRCk{xzM}4nF;D0jrCe(~_ z425*UB729l;-=3@8Yd%twZ`PyF70A6udl-7Y^joYq(Bal^G|EKq0Av7v-7y0g3O7B zw}H%>h^IYA`Ci9H({%h)RiKSw>`_E<-5Y0#=Q>thu2PpWb$Q_u82jERl`!_WY2m-h z31!i(dGuegq{V;0;2~H%IEz3lj)Ev?n0h<4X}+qb0PCXBJy%tJ>P&3H zNmY}w{|X(Df(idRs9_U=&W55Z^Hw+$--zx#YEmb8AK&aud;~v@`&Y!VR0d(9-J!C` za{t>4>+FoxKwN_g2KE_$fDMYrs2Xh1zWdg%Fi7t4(u0IEjuubDHvsWJh7y#a{1?!% zWjKI1AwSQ!<1;*n>@G0sKI9uXDN~Nb^QsYiue+jv6} z$XaCj+&FFGO z@Q}P>kI%z^xwqpH6tw%_i;sMKD*3wdbw55Eb8mXV2h;x!2!qM-@K+Mv=D%bC-VWt) zwqBKuLuSw^T&%hEGf7u(jD73lUt@1e<>8TC9jjh%-Z~9cbY~aizUEcjRWsFSTgbz$ z*J1cU$^w!I`48&D1|f*>(sRl>sb6*4vLO&r*}F9j$o}fo^F#vxD^TrDe;gscciile zIF)>cV%Qe)cr*=jtM9v1ctn^F`wk))wLJ4lSvIC0@B<@og=f5t*ZBCDM-K-}L;T+D zQa(Ng`(WYnj7T$>Fk4gfx{f`v^a%I2dY{N(Ydgtl&{D*?B<)ILmVzyRX( zlYYrWIkIUMWH;MwJd?l(O}H=)xkWQfj`w*$N}Zj;^m+4l7qo>X6;;z>fm^z_HA)=;Y+AZUPkR4jwO*^Jf8dOF^od| zUyPw(Q`ivFh!`xik%d!?0fjjrrUyv?6;lw%ceZQwRp24S$R-}KDlRMyI&yv_Sak!xQ~;o8m`-z& zemMTn8U_GX^`R9VmYV>gKH-eA|4HosIXt2q9tJtY=Z5er_6L>%F2|FMP(^_*z?u61 z*3%MxA$Jq7NX4p@j(|+CYOKVu-@Xn}GW=7bthW6cjgF;Vd!H2*S6@L|3AR`?V7W zA%Z-zD>2>fG^w1Z+hGAQ*N>gfU;L2J ztRwxnzn4F3;2vfKw0hr&-bVBSquj9-z&X31*1rTNl9WU50XjpNU6L5#G3@Rz<(RND z6a-mkMEgmDAP7g{KK3Wgc?sqKkXb@??jW^$t@{};DS$hbA8bRI>}eab63O`;sTj42~=@_$?knG;qmBva-WB7HY zTfkIr8_^PZg0Cw z4J%}PI>kQwp&ZixcLAJoITj}^1yC6c+!9~|vU9`kbsLI+nIMnH5o$G8?sX49hlVuK zig0sJqp#>GR>hC+3ah~!kS7tE!Z+N&%uOfJYJ=^a%)J*RW~u0Sgf=Rr_{7eiPzdSE zSs2psn7?MBaO0JnK!ssK(OxNe)*A$EAE%asHI%vWCcy#HC8PtsJ2mm{ZUFhi%NocP zKeP?x&yzroZWqXot${r0fIvQ)p-`Cwa_9Npbgnk>?r!1B*zJ^>o2QA?RH)0<>as>% zPAZ0g{HK+Gw6I^P0g%6y|2J9ItM2%xgi*O(y2c+dhl(1{eM@4H{z3k6GXAzyqixn6 zAKFSu+f#(L|2=`UHEOxi43fRGL(v!6DtG|e{{!#!yg7_oS$v8aYlK()arQb>-O4?k zA^xGMHDlEDc^-da32Fha3B4sYg{}ae;{4-uh2qlqyJ3F!`Z$d_7&pEfQ z&}$kTArZms4Dkqo7>=BOMA8De^JBmn@lF&w^y@l8W3buovTaMIoaY!buH;xTy2%X4 z=@sA28EhZQ0fgQ9k|yknyIK-fr63&>RD>0voXjJpCIlDa$netc;}euEp$-{OsXaK- zetp>iNej@?APv|xX&!AK)3m*FiYGpUy?3!|G2ZH35n#!1(sA#MXo~LcJZZ3ys0LY@ zU&Gz~A8`FfbT`5eir|Z!(T_y;ApEdA{zP=w)s^RhORDbBL#N7XMNEXL6&vetXo8J( zB?#mpREqAJFnw}#*G-id;LfPcz;JatnTOPlu0&`0;31Cgsx)d&ggYDEb*oYHxk$uh zNCamSm?YNJL4gUK;6er5cXj4s&=WGaj7)8Ykjb2~mUc9{>vp4-tI0U?VN?8YhCxH7 zGaS+VZ?Je{ZNy?7<48xK1T0T~s{WAjDajubbQfq8(;mn%gjsuu%-At%AI12hyQfx` zI0KsSmEK7?Scaj{_iy+lJ+<+Cp20rN=9w~YL96n*5?5!yBhj51lQNtEe~iE540uET zcr(5nSyC{3_<$bW2ux&P?Ka2mMio5h4=IiaI(3RI2!C+WtZ9L|?dwFaZ+pscRm>pJ zqno08IvaIgpcP;$KZ&H0erOi}Cg=cc>0B)!X;anhT3#*&Uh-?-oQgrMiY>!@0EsaF zC7#wLWXBts-cbj@52U9aiS8yQNBlAVs51hBBtPDa&qWR%FzFoB(AyIr5ygy20cZ3d zW1Z2QGy09_9{K%dY!`U)uk0g6;XkNuybmhP&sji9w3JhXFrV4 z9yZ)3ZdLxay6gzSSNL=Xr@1Zs1N!Um4@w!Mf;r$n;EoEBv%j%x@Ikpav16*Prg1D& zyd)76tQonp&?;)^86XP4aB9KMPY8j|6UXA52th&%>V*|x*MwJE3a^w#nZo=8Vi;%^ zA`GXL{RR_!ns?~UIvE+yYcu!OH$F2LqW_{2a{3+B%*Ci8wt`xvjYmDw=@C*nn$;==gq$9fCqy|NjoaO2!X4Bi323G)w%UoGmWj zJMQ0Kc@Iy*7M;X+U(kw&4<+nmN7Q$!oF41~1K%w_IJY7@=u zA{K)-eOZco^Kf_A`5@{q6GUwxuMriG0#9=1A?P`ti=YBF79FNu*)FL-&U$pjKbC1! zw{qX)yWi-$-{Rea%;O=S+~uewSro$MRrjdXjdQCk2u8~^TqI*yU~Eni@%4?m4Dv8- za)Rm;cB_?USy7oa0QMjFN@o``9OgdQdCLcjR*qNaYA>2|0X?XY}iv_dY zkLHn=G)h1wEax_I$whAuKcSIpy+ZTUjmpKhFF^P$5VkJ@2iyvtLtyNCj2x`n^o&*- zzyFUUI>LFSEK|E_Dn8{Z zYavWWWuQY86z+g zO7SSx50dB(I0szz5N1(6>+a__rzodheT?A>%-oP)SI-ez&nkoB=quQSN<E`dmWFTqHCAM};swsHQMw(hNZWj%h1oe-g?M{pODe<;4n zDKKhp!|049m!(GbjIZn**;8uN@&mVWb0bqMy(~&@X>|%=SA47FX<|GXdgQEf`YA~- z5v;GB&mi?Wod=_~A%H30PHceKz>o)UAy6?AvQd)j_@M@_)*E+p<(+I-^2Nfi6unG9 zH&b^>$aXrK!Gb$CbYE%IUWZ>?e<&@6b=kM37#W}buN5Qzlco!71tR0z94@Yu7Du_< z`Yg=2v9$Zx>fMDm8MP1d*Ak{X{?4dnmJ@7Tzl$#fG1qY7T5~IvN`jF2V|T2kCiyo| z$|cUbWElsqx8Q+kQIXUn_8Ew(-X<@oPQY;4ZUKxJ1tdsj%O%?Ks4U17RL5ipx-qiR z8^s_PiW^u5BdN(DJCH>Vjuj3buqG{RKEPtv&?qrlt_~;k;wGgbIEkg=VI=j7$S+5D zsTMe2LxLC#KcLl+ryS`sy0oEnR%fdwed;_mTC~njY3(R}s|5i1Tk9(7$J-n0X`p@L=cuP@ zcej(V_EGHw-Se-66Qm7(!VlWfRrx`phn-C0{+52wdnlm&pqr`n#hUA_4CFih9kMcV zGM^u;{2($S8I$^`l`hiWkm{0p_9z*p8bgfANO;4^EW6M1iFSO&q3RN6O9^G1=+uv40au)@46d4QVh6TWXcPUhX|6p_KE5{MI2*>DToR_GY5tORJIZ0!lMN*ZE z9deCiJMy@UX2+y@o9t;O(LY2fn~(jSE4NO@`!{&tW&UF)!PCC-Jc2+lDfH+AYmM%o zoMy0A{fzy$*O7e5C-ximf)R;l;$&Q(=q=+C>1{tFIzQRl0Y}8Yc z-MC6xI;P!M+w_$dlvXUr%5J_T`(Ku!|A z=Pz+46~zDIRUL>f|5Mv@_e*n06p79G9{%QpYh-eBgSuR&E?20_lGEUeR%5@jZ@%Lc z<;+q3=RdhssCw%*;qqsdjf4N`@;7)&90@Ka-tim@$_7nYCh~b&i1B-S^VK20rqi!0 z*T9}eBixryrZ2`LiYP;SiVLB#zc+aO}R+ zJ4sB{WD75&g;kx>@ePUqKAJT=4d>T}3gt`od3Xc6G$bDa&rS?>;^2Erh+uBPBRTeC zJv_&-H5|zy+yl52ztk=xIEW9m%4UHD4Ju`E-UsL~3oGTD(!N3w3O2ciOb0P`OWG(;3wBxCjEtB z89krg-{1Zf#+wiv@(~HNt!UT?TfDQ!uAiFr?9qXOqS!#s= zriuW4NnNT{9G;7cvz3aAokOR%T|B7qP!8J~52QG?GNBc(Flt^T1hW6N)dpRvN~T?H z=)OrtiPW`v3L1fwm_{L2DS)^IeBfksovWF4{rl}Q?Kyi3C3#0P?eLiirjET+D=%411)0oQEGU&3R$#H~9*k46*8^ zfan%j;znYMn#;~S^GAh*FYzmET?!-LJIBqWK>;rX$V*w&!ca2|7D55fQh}HGD&UsL zP5<%-wo`SL%1if|AR*h7-;z1?1R8x)+}Hth^nn8_eiq6(@tu6xF?+uSnKPc zaZ^9qC>+_$VtLr%`JPRCfSL7GLlkDbP>$z$wC%Ha$9-xyQd^YR$M9H*u|~mwx52L^ zM$Xu*SV>Bu>O7X#7}7KU?P{auB56TeeUaUf1P$ z`q!`XAMOBJfkS)NPAx~CIle&hjuCwl z&+RGm((%-YQs#>6^m$?DB7BDHO(R+@55kLn803sd9aPXXy=zgyJJVjVrY!m){vr}` zCypty(id^J6ux#b5$jWn(8a2>`0ue-Y7&l`WriwvIFF7JJS>hNx-uKqKwiiiRW&Ax)R1*F%uxt3bv42cWsl0^v zGCjnV3gY+(VFm;Xa8r(}^22yMpu#Ss8S*9}T!}u&#EJn4j3gf;3CS|g!L=G9a6+>K zx9UEA9L9JYrXkIiCtC8y$pp03c@||ssAiSGVdxPHAdU!TRa-MfhsZpn`SNmlhSQncBhXSzT1H zVp_U22Ib)@LcdNSR`haWM24C;Ho{sRkKhD6#QV87w_xw|lThDRl>s-*6kF7Cdfjv! z^&ywJIjta>*bStC4*d4_s1Joc5`3LPin9-p)Ej&J_wJn+3nPs@7WjN!c*c*>>&#~7 zMc*$zzyEv?v{n(t`IWOL;1zlsSG{Xs4C@0y-97 z?axlXKd#MA`8}0H#16h`b9%P!nYju@Kqf}k+dWZw2Vpq~$Q;r_Fs}Zu5VNthf)8(3 z7{&sjm6@g-yPz?L=6Z*KUH5&g9TVsNrZD`M3-K~mDNT8Yv1zY|P;fZm4b^>!BwoiueM~)K z;x8%A6|fd{IKLG-Wc!3C;wRDv7rX#JGl?JY!JKAza(7-N64`JR2GqZWhHD{@|8K@~ zq{jLG(Rgyzc(!LBcs$~cHp>U>TaTc>@E$lG@{K&II5xu6rxiNI@P(*U3wBPuEup1X z1D6cQj2~o&BT7{-#-l-Y&q(3EHAPU+%Sqo*5ttN$p3pAby@*MC5lG$JUBXZ|`t#^Y z`;0b2(x0?m1giIsRf0OzD2vQp5LPGlfUrVPL=Tn2Hx5=cD(QtSd!t0MwmYbGhw(qV zUx$SeUOp0t+n`i)3;G|X^f9E3IZ|Femg*KN51;eHc*<}FqnBx>V@mY7B0x(V5yx;& zk($slvH|k}CKp6d#Gk`#m5#EN0elz~JHsK**js-ji z2Lfgw@+FT@kmN4I=I$%lc&KI5m{BR3FJ~qxj0WjkCvpn)lzcx6*Ek#{kEDhp znQDHrb|*#C6fKRVSA(`cq*h%jlK0-Uj)nMsU;GWz>aTWsGRm3-C95eA;v@)M6(kn0 z*H_|>?eG_PCH_JY=6zk#L(o`v{c;2`VEK?NTgvoD8K4sw3Guc+WZ(?1iUx7Fh~ zp!{u4Tn@5F@Qz495x%Bp#_g8e)mifaoQZeVoy+$X zY$i@FON~P(wZsXq+S@(7EdX0EBHE0{4)?Fu5 z-_X{*L-nof0WQAKNL{RczNc?jjSFHY6k(D!>X?D8~z4I2_V zR2|{4+KBE1oc5HvVIh_q(KvpoI;vZR3S)L1?oDSTrjX00pNiV6QJzR@?h^q|V*4SrDi;ny0P--L z@0|TW4?6YqK*gy~=4UXh+wX^HbjvP>IxB!vGNdcrF8x=%5*iI=mpAU+{(uKTyy z@L31DcUQAu)x;vR;foG-f1_Z})E-RjPr=C+xu%WgqB!fL>ICdk2N_mO>}`(%=AA3$ zhhZ1JkPa$5QXg-^;TLbYI|mU~1rV{U06^9hKd{u`UdXT+c2PsEXRX*Dyns*Ol~0MT znmB?mV+@43$Sxx3S554XiF_)dF0y+X#RUx$e-6$50=Z)12{N$su2y;h$o>MPx93sN z;i%^g$i2u1se-o!e-2jsnMeN2C4T}N^c%sSp?L2Wxxo!|IWR{{$I9b6$-MfU+=OxF zlNUm!m9Ch=z2pa+F2mU#+Q~lu$9*X&RUHw|KoFPBhp-d=*2iNjgcURHoTdY?BbGBN zLv*6WAeRidO$*;Ya&^Ga$s7>Skyq)BYX$T1Qiol^U|axGdtw)##28DM@dBBEab!^( zkYidsQBEL6Pwwe!RiDB5T7lll{J4`B{_mc6H=9YCCV;_023nIFh=yv>9bF`>`fUjr{JfdPXl+1iH8B(dSdHQZ zuqxi_8Hctgtpu><|GsPQGjk@BfZy-={yYykXU@K@z1G@mt-bc%Yu}2!39t6+j{gxz z)c8kuIF0{QY~f3Vw2Ua}Cn(BP61XZ(zj~z1y_;OhJgX^lp)^jH<2*MlIvY~n*>-^t zVDummU~xABc*mav!7!TJag*N%Cbs=pIj{3k^yZv=qqzlv+UA^Vw(iU@t<1h)k-p$V zu9^W#7?fH>5SQ65E^`$wb&~UOaY8I;Y4zG`ylsZZ=n1k(I_c+-H`$M!TH zu5?2^ZLz2EOq=`jrSSf%5Q`x8JfiW`_8;By!trP*b{{rW^T$d2(S#Q^A6)<(+U73- z;=BO@o&+DW&5rQC{_d9v$P?~Fl_~~kynEgG`(;!Jl!K4yUZejG9G0Jc6viR~2K?-0 z4~IeKD5l2{B~b@+GXT(q&^j$O7&g3t4gv(%=UE6KT(o^24sT@Sp?-uaZ})6^J-%H> z&GVZhF^EMSL5@0~{8zc#LA)SX3}h6`7dA4X3e)pv`_6iQc-jj-)EWEG`FTLt=*t0M zqm$5I>7|urU9M6(AI#|8|$UCD3{MB@bx=L|H-X zENfuAk&K0EIjztNWS}fMPcR}N>JE%J<_At7+Hv&7p4J&U&}W`c+Gl?Y0YojRIT`<_ z!hMVz{svf+{nzb%6<*zkNp9@&$5c>`H5JIoCI(IX1xXzzIVAV?c+kN%GaW$)xlI&t zzhJax$xwCvb-=U20=h#I;vOufDPe;c9x9quHJLz9dhJ1{Zy%nvPMF}eR9VSjL=pkZ zQzo)G`fK#sx#~wkxpjVU%y=buy!;|WiC@#_?X;V_(8-+8ByMSz-8 zsP{K#e;oTEzt$dxa2Ead#G*~I|3V8Jr1)z5_}j0hBlbCBm1KhkI?bs#Pr#ZikHk=w zw<--tJ>nU#& zN%b3xUQ_&=(uN8cq8PHCizI9jIMK@+TX9k=e89i3Lc+s@m_Ft~xV*mSA75_8L!7V)ig{2c%fg=b)Hlv=)DK4bxGbZg4wz7FUsZdFv<-xf z3h%qBHd~ZlVY^~)PjNYf4Gk;l2&On02ejiq-%uyPjr&_;>y?6^cbHTgdt571{d0xV zq{jU%F?(FDiYj#oK)Uzi{~izk0PLn>3@Ty&Ahm{#*QIYB2gOY};F};U@p@lSzkh=I zDfVs8`hTBRGCynfD4Fj1|2e&t;Qvhj|L6PY|E(VVUnqV2vX58)C-L{(YauUTuFQfB z4&DwZ-+V>v93lz*fvPic4*+xC~W0@<3vWs9PY1utei1^s(!vW5-S6o3S^f9t8UNGD@FiQ zzCE!I3rx7x!phetNBe51@Q3C(-!1$bAe0(1L$n7fX{fQi3T?*GhG5jPa{3X8xiTp1 zAP(0yY+~UXwr(5ZcitEGm*7<;s)$JK?{K zB^24>Mijz~%^rLIW>lH}l|lr{WI4-kR?HHhX(hmdwNP1fis&&-ZQMzZ=G&a>#tQ46 zkp|Y?oaB^B=HC+VZ$9atOZw*mGX;?rGXm0~D=J#x!wVG3vXxB-R28zbfP+{>3 z_O9(+vEM4KpQzu)=`l2|SagXWgsj`Onw$z2UBxF@RGvWeI{bEHY}R7jhxVl#jW$q; z+Y=hv(Iv~wpr-qgHf_PnJZJ?}h@}S^jX370!@AT@G9RV0VN{WmZ0shJ2FEV>IEmdK zINjad%pCw&2Pt4SDop<1E@l&+!E$-l=T%4|xI%t&EYz!d0gDGM@jv-B%aOfhuHu2*nY|Vc;mEg{a6Fk#rr`m#C~+h z6I7AJ^-SMoB zmy3LnCKRPbipHx15GbnT2-q!TA+6A1j!c5*Hn^uVuj4ha^ zFR6WL_Sn0V0a<#As}k$g=0l)5Td?2-#J#@KMR7798?jOr{Yu1v@2Bm;aI z-$5ASJ)M)E=xGOY0K9E{CK0kePfGXF)8ApmEcy;mtJ|KQ()Lc)XpbG7-1gp+6K(Hi z4z%6LXScScbT4h6!M3LgS!scm=VC}_CyWl7EHb2_@iC;I{ihnz`J{g?KT&)6ouUU^ z3jse1m?%owqs&D5-z9A2Me0s6g+2C#WE-@P+cD^2QOdiS%~i^s{DJY31%6?dv-#}a zWy#}mL9$XFht<32b-=MRc<*-XzX4EQcSU#qWfdnONj5(99QMMus90I~L2fK>sI=v%2Vx@ACG6_}zDF;wxq6*H5sYyYO^F|x%7yDwx%v-25N@##;` zg_l}lyp_Wz37*1A9Q1~S73UUKL6^j2E#>xeV-c_YF|GcZ=^&SR7RZfG-7px2oZOdc zPx~4^L}Sq?WDo5>!l-`~tR8;#pCLFf8+VB^r^67AVR{scw$;uR%L*Q(5nM$pH0{fg z%v~T{!~+RI2vQEqq4v{K{7iH&3-P-BX3+s7d=0^Z;hisLd#RPNO?cgmjLCDhLsx1D zYai`~uWmn$wdH-npX73jLHN_$>v~48379d1*$Nj8V}Mvw%lYFy{LuIVn%2w62BtWb zEEQe6XpMXukU$;72**+P9)85``Cb6H&CIP55;0<~P-iaK!b6#lVXnlh=Xs^r^WD13 z^AzH%0Kd50DR_>3?rhDMDamW<@fY=YSv}UOM`#a522u+I;u+0o|*nC9gm07AtXB1>viokI(;9#sAiUGb^(@5a~4;=-xX_5&Nt}DSD4S$ z<}&%1iG0k(#-n*MA2QLe&1UO9csZl+a=vN4xzBv_W3CrAyj62*a+SWP2Xkf5m7zn~ z^bx2s%7q_qR?ZWrGj-2(i3TzB3xLOb5saMrTf-46F()1b`T;EMSi!r$Ra?=FdR_v8 zi^q=W^u6sop@;S4}F!`ov>IqR191Pi{7lML(wTcV&Hgy=uH5aQ-}dPXN32i?qXpx;D{D>!vfZZfAEc$DYMw= zH?9Oq-T+ECzn6I4GNo)ln$g@!EITu9R>lOxoS5bArc{K>OA*%~$8P1A51I;NUShvVzEI}#MxAsq}zQp9-8N{p? zrDh$T?j0_Oa02?zApMaQ_c6?yjyY9r_c2!c7jOMsopYXMp})&aAqkX4t=_CSW|`*P z#jJlqR?OQ{sxD8>e<|}@sZ}4Bn)PI6t(2-WjYZo5 zHIEI8IXvCd&foTU(2sHxXAH>Il8HXLfovZXghZ`ZSuNZNbQTt_hSbiB-w@^@4j8Ff z$m&Wri0?FK(ez~2WE*SPF!|GI7mL=5zd`r?k@$1#5Z1T=b)<+hSwwUiQ9<+!uyknO z5ToI0s5(eA^a$n!z-DLATbxAqG=b6PcP`Nlw;%_cx+uXN4cb}BV%)rCAI517a8O0` zNmlD_G?Cc{?p? zp=?@`l&*r5u2drm$ib*stkn<9{S$Onhpk{}5|SSglKujTE1*3_o}4DfT`SFg4C~rs zyLV$G3%^Ds;v=3!xp;c&90995hA<+DKCsDrmb#x>&$1_f%?mslJA{deURX#pB2NWV zh^eBYLrS>CLB^u5L1%Au;H4Xr_&|8+oT;h2v`+d=URt0h!!8z3N9iBDXcb=irXqn> z>Ao>R=8xg1%uQnMbPn)NAW{T$GR_6b}(c3z+|p z$nQlCbXWVcDNsyi*1M6_xj08`@ql_1smGb>ajJU!`wQ6O3o%*t*y4Om*yD0OugCR0 z^8>xUxAdWdtnZy5`)D~6`@h-W(`QGr$Fax#J(oe3xchsa9U)j4z@EnU_jKzYr{T%- ze~9!78Yg{r5;g|X-2IRM$s!b-006q(ttH^}bzpCrh7fN9HR zgel%{--W;TGAi(s=B!2*6M~OFWTpZEC&( z=6enK!kq(aeiH7?tQj5dgr23G@PfQ3wdj8?MbV#k%Qr1G-(Q*UhHm+Ol$!51%va2O zwlC*n_8d$?Y8?&)0V@?k-;b{QRA%JaaJt~|mWQY_h{sCNZ2GG%S9f~O3H^-v zmfF_XJ5JhX7zqbpv3kaQxACwX^`y-XjFH7dUy=AaKjFsrYzOxU$Z!v^ zXeAph;9C{n3i(#e4yi3@&b&|1nG2*d-SGddf*-ZaqEm~1P=P5n2RL=3v?4S>8x^P> z6JoRIDxX@K6(F#J|d^`D9no(X$q-mk?5r=i%3?Hait0xaB#ij2TEdWd7E zU_l(W0xoK3DzY1ZJKLG6$pn5-CNJh#y+?|)p7AkI^92TmrgH*6c70wJ%bi=CWh`nKg6`Jss)jt_dUF+@ zwtm8Lna|(!;huzig1juFaklu1fJH~lN$>QA=hE8XsfF32*NMU#5ds@1D7A5I8#a$& zpID?lG1Yn9uF5!pgqkb04Vj7`5|8RZst}E--?4Vuj584y4^K9S35{V2DxfP3C<3230e7C+( zj7VH^ongj@(Nm;`aoU%E+DcNxtxq){Jq%fbfQ{xS z^ehs9ZDdTWRPaSE!+li;aB3GpElx&I3qYzni0u!ES_{H-unFD14zTSSSF${=9V8r? z;61-{hlIk{Ss*3m6HP=0E;O=z$MsY3BAkBruv@~rF9~Wb-yFgL)%_AtiPMI{5*Ssx zIjVL$mtyz6Y2Ab*O}vc(DoU&;1q%5@{1a3FM$hL}DHW__V}NrNd^2+q4bAPEH7(n; zW}~ZeQvM^O@zX5i33tJ7y$-pH#R(KF+GsRxMgn8rR+FHWtWjxl_}KXwlGAtdrwP>O zaxmr-{{_y5N7Nv~px3MuDF!bv;6`LJkiKXwVV&v+;*Td}s&@L4U6gB5%St}Q7ZOw^ zV)-a-$Hl9UZD6~o{CTyqXZzm%#D&Z?6a*JgS=s0bx`JbJj`6@YIWY*K#Vyz_YU8M4 zl^}&+llY2$MhzH&O+(ek3Z2CdvZsnBO5xhR!VDc2M5GfE=L_;EvHuLnqlHonChq)f zX(>>*p2DFm-1;?rP>okg8Yis+xIYcMlLDn{r7GU22e0D4(DW|;Kp8_fmqT=csCA|2Njo?-Tw4%K#tMye{h$)~#p@cfGy}t!`S!aoxg44Y!8% zEkiNh!8)mFO5S+T{?fjhnTwVxVvD>WuN%$5yzxzbV{I^R(sdEDkK#aU*s?#$P(x5% z_k=H2_%;Tz&;fF*5XKsIBXYr2P2PaB-}H;)L#Z%MfRE7^1hAp#P%UoCi7gI7Ae(Ti z!MOVYMH^-%rkE?X1h@PcQmkhbVTNin*n?OClTZW#8l>lhM*YR=E3mHT`S;2P(L_#P zSsW%!fU73mq7dGiT#hYVxR&5;2y{#YQ7hshZ-xIu_Pf`=L&0qO`t;HGjOrMxQqxY< zv>|P<9>hQvetVF0-t!7sbk&&X9%JWSBZA)a!w%_-d$|)Mf40dx&7ghlv4SsdZL_K& z4(4N_DFFF=2@lyXyw2odKU{uTYLDqGu?B7b1LgB3PGZ${8>Nvkow46=?TPr7zKZY* z-LLRXm^q?QyOyUAf`rbkAbKqcVEfMaNDWeo6ZF&3-C?oQIq#lBAT1Ms0BOTrq^&^pW&}6g@q(`C zL_IJHHGj-c#m~db6@DZOh>R>6Ics>K@dTj6s2vji7}Di7C0*Vy>OWL7hvT}k(HI0+ zKZ}*SqPi|8encMtTw#=OULD7spdvBxvsPoWfjmnn+!!5^6E$ z?R!->*f`JDxm!b&3`y|xQ=WXT42jMaG`Uqpbe5e&rRKlrLQGq@){P~29C+znA`@q3 zXuna5`+eGiQ2fLmXdnK%srm0E@om&zHgsPLi-Qzsn6ejtNZ+Elc&#Xq|dl`9I+O>eg4ri z->1*n$aRoDZ~D1n1vYYsK0o5gn&>lhCnicblRiKR^uyqfqaIy)ECfDIQF8^|x&?m9 zJ;oAo;9xMfqcM-lHX6PXsf`s^WbE1y!)3vo7W9G9y2M?RPip zvVQ{oZZ!Bs&P>9f)piW;qi;TzTPx}hV7y+3x#~rs16dF#+_iA05-9J*1(WsA^Sw2D42R0AzwZf=a#rYX<`pFjO-Cx=q6CYVg;!^PpJY$ zH3xy`O!wq-S*V*pDb!h1s|tV7?IOMw>&=IH^&Up=d>Xy^g2(Q%Yqx}-uh*%VErU$! zgcbzkEuHH2tw6Mx8*~U2N5`>A+A8Ns(gcuc8Wh}YSpK&`$&H7#uzTS`Ir0>lon?(( z^E+a0+;&`cJQ-qsJIdC;6h)O%KH1O(vu5qn)Z1IHskb2w`m$%c%#4iF8v1AfT#bs@ z!;IjO%ld8K&UeYw^a{}CR}(>;v{ah$M5{;5*e>|sMDXh;g*%jHjO^eRcpj!yD2pDc zH6x8w)?ZE9NxN~&p-$|!dc7M{vZ&=pWk2_XgzErg5E?V9_NXL#oR?9yMR(K8$NYA$ zMpH+)XC@DNnfz4Mjh`M=Yv%Zn3&G6%aJ6VAR|7CEZJ@`<7|~g>KnhDwwB{p=34yz@ zPnkh6oP6v}d)}OsU+2>1le)$i=eynReRY?od!)-j?A{BXP=l0qZx%>GVRDm@rf0j? zYxGvc?KIp`$M6MZI2U&vjkaJUkOhZ?vzmUW%)N9<93GF~63N&bTP=6l$E6*IktL># zyLik!TppvBpt%)9c}ot+dCuD|m%8?w%%+vmdq>kDxHJgZdNO+1lD6Xjo^Unfbw%9h z^-H>I&Mwwlhh3w0!`+ImlFMWCvYyxqQk=}ds0vyeMNgI`Q`ZDqq|2*z6-iVewBAOu z?Hl|b&DQ%un(iCY#1YlgKnb`0lY2B4{bv`}$%?-QA`z;W8TqgK9NO92M|^X;)g!7N zm-dy9zxyj3c9)|X<*=J+y7BpJoSq&zxyg%NT0@O=I z37|j?bYBj~Cjn)8fV%8R0=`&J>IA4KJV4#&0jf^kagK(Fv~%vsB8F0dIwuvVlRZH7 zhN(aNI)SOjhAE)bG)jOP>H#Xv1Jo{!sR9Mme~q4jTDm+1Q}+}e8dJx5fZBsibHtRi zBoigyFQsusK1<%k#2YqG1C_6Us_F%(>{Ousdv*e--Y^xx&~SNbyaq~IQa}yx0QF6V zVs`S>C-S~rEBlE zsCi&6Vu}+F<>l~Q-~sA%4^YE3P`jDc&iUQIo-ws#bqb~e9-w-|)N8*?U}~edq}?SD zA>Y&K2~0gG?+Q~5@~*ck+c`(}0@TH_@|=XJ-<@@6Or7lk>L?AAlfYD=2dF#`P+1zN zoeEQR1A4~PO^>Hw>PQbzyWW@~3jWp$l*p-FqZ2^& zhN=0#NMPzP4V1K`M&E;7KZ?t#26c!3g3y;^W+Oil6t^|9 zP)nt8CDCt}cZI3zHBd77w{un;)-$HQNK!L`sna|_^@gbz9!_9tFG^8PNlOZ-;om06 z*H7LRP+uQVm|CNFs&6kq4fu5mrdFJBXiVjKfVx-%B`qnS8l-WBsaxb-0d=JYYPACD z=6*e6YGaa`5lr><0M#3&mOhlg6we$GQ__+GD$4`ZxBH151(YN2`o0A_XS=UwprVha zVCv@64~?n)4<>;6!mof@#qKMhZkNUtrmpt@b(scgg~C)xFF-w>q-F$D+fPdX)f=X+ z^#FCY21;5|K=tzg_4U34raqK+y}D@UJd@EgrrLj%f~gV@P`$~ijui<^HPXim@-0hX z>K18SVd_c`P^B8ECWWcty#Upiq-F$D&x|@Wrq1;M^&am#0#MSD!qm5&iP7iCyW*+0 z{B2^@VU?+Qm9^3F{QcFxRRz*+js6a?)%B>_%v z2x_=LfuMJ}5{zkXwFc(~4>&*efK#l&sRB6fr1y-S%ainqVCO~;IK2(GZ|+NgbA|?| zN`tfin*?_LF7FCEZ^^qHkjlBJ7jSNSBn3O~k32MXuJ?e`#B~v1r&5D6U4sKZ+n}p7 zIGj#R)ZpX;J8RQ=#?A#vxI6s4$~f2_n8Rq4U!=`2N167{1SL-b7iS!y-9~(9wKCEjn-e`l5g= za=~F%EE!F2a=87EBXBx&-eN2yUFi0atew0 z;n)RsRnlop+AO|im84V~Ya7g@;hrR=ikY-`4w7!<*%s-D4uLK({EbO3@?eWjS`}}r zl}Q6UNvq>Yzh%-i9+=Rjlqt!!EG9k40}nb$nZ8V_X3~BhE6_CZUYeWn9?VA5^>N|aKr5_b6xCT;#_B1yS+m~;)3hI^8-C@h317c=R`e0?ejmV^b--4vy#}Y{e@hZ17>ANozNrmyGmzgxllN5+2 zJ;tO*qKQ&wJgJFE|HQ3@&ZIwLap4KvT&Z^hd(WpN1qPp*iwy!iPXo6h&zlTadz}Rz z*|hs}O>2~j`t6kdMGPa!ZPrAKTztv&@LQ4D_!`Hw|Pdv6EP9ko z5#Ck6Hlca>2WG((t| z^zp~ub!Iv5f_P3tTM`W)APw(H#%C%#*oR2;x;(N#q9IU`;Tt2NsOaoPn|p{R-1gtW2ahJdh0)}fWvFQKTjn5|{FeLj3o@%Szs)TrCb%iu`q@$j<7itYhimegUE7F zgA4u6xmR+`@>~b_L@pD>X`uz!&_}ZeqbXO##Cv`XMld)oK_59UCk&Q!eg*?eA^>1C z7pEht?!Y^)6e2P1_!JJ%8CgK#7&Ny4m%&&ih4__Gh;XwwgNZf)eTKT6gjq>Y@AgYh|rAhq8DBIYMa5> z1%|X+AnbO`{xmw9xzXtWaDbb=AirRH`mTD0r+i3R+MM{4<;=R?vmpQ#$T=nkZNwH> z?BUF{eCIS_M?gz$rWu(CbZ?K|&PKrtg{mg<$QL)#ZbqpXZfb)a)w&Z4?bMPtf4E(k zr#$)tmO_gKIBc}-1%23vdDO~QF3jDJuT!7^3ewpNiiyU{twGN;0+dYzWqg33yh$4q znG4K_t72w&K(T$l@1ss;$~u~mO4iYU9A}Ph4GmG)dRs$vkg1FZ-{r^`S24Nkr#g|kAQkS_%t|fIn3K+c`W0jjdTj{s^plg;Fzpn zD^(Kt9Xk6`KMo01<3-`l<04F4AN) zQL0m;{u8pR#Yiy~xP?AYh|ALQg9vm`#w%2~O$*yvK-P@u+(Ov8vu|V!Hd#&C4hCDW z9bC*lh1XZMaRUm*fNyxZrU}K1FrnU`0@iarxYomt1*A$L8LJBHSZED(n;>eMj-46E^um98^FO{U>uQCGJIVgDXb#Jm-m$H(q#GHR)SL`c@fNv=~Rgbl{(I z{t=4LH!Z)>Tsprgn0NAq&?>YHlxwPDL}9lSy^}I*@y>L?oXi#RBhC3W_$&I3eBTqa z(uyN*mLW83nUz*XLO%{48AES_vth7Yf`I*(SR>jQE+sJ0u4%{oa{*BmKMi#E4vyQK z(r|Y&KrIe+BBIbnI7;w_b37}7nG1Og_$#)Dji~j{@dZ0n5eN*vFHp@Ky(zMloBm6? zT7t$iZ4>PgJOcoMZknZ$_Ytbx7vy!V!vNTYR^|$9Eeb}q7xQpZTJhG;ijBuM&AC+A zui;dYH+s_M#>WAtFByWSg17{`l+j|g;s*xDrKQ+Igz;fb8SYH7rflh)V9nUFn+zKL zJE(JE|Bo+>WUdg>#vY{rqXkIJsA)Hwccx;-i7u4HXNusG!XUmBMDqm}zX<$Nj?EGY zUiJlDT6ShL4jf`+W)29q?nB7Xc|~jhg+-Aj8bKRr&c88DC7#?yf^q=>8j7wLj)NHn z&dt&_@MByn zXy7fE8&nW!F+Hjv0ISt9oa--uT!2GI8e32_N(@(|y><~TN95VVI5Ol^0%x7~;I56ylD?eL*0?&Gbv z_mQRMeN^59+xZK5-%8|t?-n=j2Vd&c=M$+9 z##3K$Q}0itTJh9hNviXZG~nE;9*foE$G?VtT?LQZOw-*@DfZJgWv^FIcfq*eA23=K z%#~as6MEMb9E@90Z!tSER4R3ga5Y^Aw4$5oPE++ZtpnbfRX7PTpc)NU6j{cRjw5q4+_zw~!f-h^>cdAG!mP<1B;2RJudbG8O_P9lIqmSN97U0lu(AMIo`E^(tUc%(0cJ z*_eGTIEH`)pvRLt6AdP6Mn7DP>9+otU!0fTmBDn9KEJw5nZ3XOG^jP`>f79< z1EXQ3sOZJ|B#`N^PqT&0s=v|o~O z1tZ!FZ`|#%Sf{+EELJ5wv1?xma!xq$Loqv@h4?{Bnnwy&$S(L~FS((iT+lw zzsE!Nm^On^Bsx3mb+>xG9m<-P3)`-bVaI^Pbr5jCS<<1c`p{_DAm8B` zsoVc=O0=cF;|I!wDQqOt23eVb=euV3yRMqU%m>ZA-^G09-fg@Zv^X0|=IKZD@Q|qw z{$x2XUY?2+s7%w0SZi2)U|e1PJS2AX zbr`nDctdhV_pAf+9*(@x7ipt%48XV%)Cm~(PSumts9fVt@Q~h4&?SA2o6Zdx{2Vo5 zIyvLED*5sYhz^Mxm*ln-ozT?8N~~q>pvXp`kAY_7sw_C`;Wm)4%+P~HLF;1N1kyJ5 zv)GBIrPNx{mU&rbWQE|_8l~3{roJUjUMi0y`P8B0(@UJ2)$LN$c}nd_f_xHkpid;1 zS0CSu?89?>GTQg^vhOKWZ7 ziswNxI`dPZN*meN}z_PAWmOoQ@EBJ99M;bS`laKhHr2H9vN^k3bUYihLgQi z=^?0My)(_83{iy$(|Rz#2UEd`&kWv~TuqC;DmI3ItpF_4U{^3F=@EH@`6`&NsuYLB z+zR89eph@g7x5LuI4r{iykR}$GbZaZ@-8p_rY)nUKh!ELX7%w`t5ETU^`99HOYk9R z9bX0|mS5KJk2?>)5O*a9ONzcQ8W@+FMt&8K`*olI-8I!MjHh-89Y6^u&hY7d6i<61_DDhG0^&2$_)RT!Y`&lO~`;e6CO%DI9J z1iVz!Nm~CRpyOCjeA6Usg%Li`Xl`Op>o?V21@u*f_jT1~A^SZz8~6nI$Of_-X^VS zPOn=}NMUIy$YU=CtzYp=(0YO#T-NZ}of)N(T2wO?fJ{fLFR+I}t4`&LFqfR-;=B<0 zV*zy=@JyqIl964=2EGcZOasWA<}AU+(m3-)O@JQ6-q9u`3AKRo5Z+nod{j4+7_ao8 zDVH=<+HDj@Ooj?Z3nBLAqOdTwPPc8CETMUBLb2tJT9+mD>?-~77Un!qCj=htxA|#Mt<}mJ*{R}qs=1s+oQkN&)?#y z(KB1;Q&7S6s<^W|F|wj}>)EBsSPt-4Dje8jAkw?D^jm-&rW;rqND#4C9X%Q~z?LPe z0&~f{>Ky)>i1zpHhc-C@bIX+Voi)_sb-O|=408dVX8r+-FO%xj>9cSSJNhYnaUEO4KDug=y zqE##ckGyZ-QwBiOYfc;~2u=k02O~4#u0H(|*Tw~p7qB{TvO6)nm*85%_TMZ{>mR}Z zA>iIN*@A8uZh0M0L}3olMUMw8WZ+857?2h^K@E7CDRU+(`=FBFk*HdYt#T_=B5z|L z7j33-+A`m)TOY!Eo8!L^7bUP=EqE_rPIBm*5k64ZXH2DaTxd4z=f*ohJ@GBkh#jOI0~@H0>k zj;Ph_5wtGIDudKtG7}$yR%i_}1g)mkc<}Qg8x52(O#KgWSlqCGB*oSUqgWwUj?BV6 z_A>q|v!~)z`JRPSN*P!^vW7_$?J;1RVVB-Swn0#!iIJi0I!xFYC0(6<<%)A0Waqpb ziq7q<>PmFKmaQGg0j_!HiSArOegfBEqV9ACd*m8c4(nBM&H7owHD|}UMxm;Ey9u_5 zgQnTWwG|c%tC4RjBg9dYJe$qk`75)%YE>#AGbx3c;dg)LDj= ztst7@#-1|VUAOoI=uKzTq(e~F1v8p0Vp@@bTC@cn1Eph+yOf3< zK+UZ5u#yjlPdqfGcibqHKK~GucHtZ?tgKDM-Wc_OA6)b0?`T4w|AQB_) z7gB%+oFhSd3OdMD6|1htLF0BQn!~|kjfazXVr~$dc7pcx5bm!TjSIjQWg|bP*sUrX zxwCZdwo>foC~f^LqwM(gm)IFYFNE|lO2aK#rCqPO)s->u`YLjkRq2OWRr3)gc4ZLe z!5U%4)k-`Fg9NR0P5fxDkOyXmWY{v?Cs0-tTR4X=!N>|S+a(CERAQZW>J1bV|ETSE zNhEJ?tUidD1ZnMeKAD)pN!`b+ws0ZxL#WWbaZ!wY8Wok%Ge!ISS{atOfAlvlZ()iV z1YMweX1P-2IrGrGb!V0E*3@2k>rfB{Ed@+za7aPm?!D%W2EsjJWzYAEQk#cEO) zmou+VP&kn+;5uYcT&E`08^`COY+7^x%$?FO&)?revPCK&9K4b~Xk7}c>l!SsbliDa z5VZ@&OR>&J%4Rtaw5Uy4SJZEEL8MJbin77o^6cJKC4Hhzuz$)TuOjpUa#9{eXOjr- z4{k%M-xU8j4Y@@$HmKV+$K(MeStuo9^_LA|!BGZyG4;J+$yBxbYexmGi?9|niK=hz zoC~e~CFl;Dxv*$+F|M46!?OcM8Q|$(JH-7|ybjsYqOB@nK<(rbP=!T{!}|slQ zd;!W^LlMK7J78{w6e-RvDSCCz@W@+1tj2{;Wc4sWtf5#-fu(_ZN*S;f_DN$J(;|~| zSyomh9k!yKgu%$GrL8+NDAcPa*bDmlX}C}nAZT6QwGy<>X!ru^Y{JHpzJ7d9yC9O$ z7aMfIzWvRj4MzB0)K(lB`YhRjvWL+Yp*bOE2M3E@H^Q^nnmwi&(Lla7TmRk{3Uuh1 z#S-*?eIEj%nHWPKt6&K4zNnRyjGdg4l?aJ9_W#lUu*FPX2hW*LbP8J%naEVqhJTosB(8_dHDj^;RIEI_ac3J9BU zjvWfpcte;5JC;}tC3$9S5wT@7za)lEainwadx81`H3+|`;FA4v{~I7sPKFG?OGaCX z;429Vp9@9wzrda~16}nJfl^9!Roo3PX>)BsUM`8rR%Ff}1d?~k56m{eE9$&+NfV|W z9M#0G?CEgsm-!<)O;ry%DK@f#1LE3SxRG+&9Z}>3{!n0u!`-zS>A82wi)`qud(s$S z7|n|Xq42vw`4i(uyN$~gpgE$YLF54O(9rLsm*5Npt}gC~J!py!LNm^;@ziiG zu-ZF^5xI+HZj?|}Hz73VcMlE!H z|L9j7Za{l=qS1NMs5auH14%8uLURfwFdO$R{?AZ!4C;9>Sso1XtZt4LY z;tXQbEE|;o*5pF8;&)bEKwPS7W34XoqgzBP?(bJKxY(Y+jWx!iKVdjUkDvhjUkDAC zl~TrQl9=<5Jm5^?@efeZj9vsFXc<=$)Cw~)F0o|gIK}UDp;!xg#GWZ^GFKb{ESE&0 zty1y91)_@p60B3|P8OI>^^2mTZ%~hG{rU0b zagj4z9^WMz*SkFaI!26ld0cVn8mSjs z6=G2|AFfB3g^;+hekG9)OCs+DAr8x|;hamuFgC(VP!orJ0nG-Y1MHd)oi4k(3t`Fh zD@)&2jKJ*#t2nYJ2=fWkiQV+s?RIW|P64M}??&@Xo19X8tsITGn(sGp?U0P z=)i*ph45hAdVXy~!HnAJ8zc*GDsFVsdQgZ5b#kJ~9gQrOlp;I4j^+FnBJAJ|96Xg8 zyBsjUjY3lmZ@66g0t)kFwA^^B;;bz0V)#%1q7R=Y@00iigpC3U@yJJo8P4x&;*3a* ztI>t)4S~IUgn_O-9mfv9F9p;-<=BynM?rC9E3uo83lU2rU%B{?J`XVpTLrP{gKDa- z1{B@MTr#%D98Hl2_I6`#!vC&)$Z%%S1%5Ke6?5mumU2WAxrz0Uo~ZKuasgZZ+HtJ7 znw_cQF4IMI(3IA(#qbx^Z~H#f?{CzvK|a)l?PHgsaB+A)-c}y6EJ+st2jdh;T*%}S z)k>~-*FuhSk?B%`O#K7mJ`gR|UVMdBvw&HY=twMbBqSBlDLn9{@IYLS;&M`mCM_{= zizO_h7RjM@EIM`;Ul6Kb}(6hgA^{hKfPSUrXYJMymsOok#5gO>*5TDSu@kRaz|^kSP)}l7bQw@QG5boaC~|4hL>381R_?x3xG$A_ zaSHK=RL7`ofy2QgoXM7Lw1UYT&jt=fJ&9M)cQBTC#0r50{0_x|EQ(R zB^aIJr-g5zk+;rrI?1llS|_Y7T;{D;@j}sn^a4e*rHA#p%6b)* zubYA&y$Sn-Y~K@?6sN^Pgwy0&1(^$9=iH{PV7JHM2{48@7#7eJoROF7+ z7XBBu5nbqBT_dBQDUaSJ zs!?lwESlcTanz2UV*8ampoBZ*=Ndk&vGhvYYqsGBmeyed=xub775s#TF6?@S!o)XPiH5ZCu4|H&nK9K$1?@*M6cY(^YAaXEqfutjM z$aYjn%nFEIoJDz@+3Yb7)2C`Qk2^9D>cS1^gF*!YF03)qzhSk)TjvW??%Rym&EO#4;j+ z{~uzBkK4bHXfzME=XA@6v03gv}J!?cIQD*2j>%0n6Yp zB-1+=f62?8V3Jya46YqwsR?EyY=kp;Hov+~l>!@C&%%Br zzjY}tAKzhw&tRYIq4(%xh-Zpd??DuN5eaE%b4=5eytAMrYHn5gx#iLl_=}))a2-?> znXs2H505l+B({BhW$yjZZ2j(h^Z4(~^xZOQ&5;Kv?6N2wvYn&7M^tn9t%|v-IYiIG z^kqJJHU=MXex3Xf#&-5~uowX3peZH8(_()e{g#{u#N#KB5_nvJ2d?Q^OL-21rb=MJ zOEq6W?F=ljuwuaAsT7B#qS-wb0ekga#5wN?;ph#kgf7jL6_@WhOXV^ORhY5s8gIgU*x`T+8@^Hw8jx&PM( zC}i;sMkCirYzburmp#Ths>lZ|OVg zT*fqexjfZ5L2iURn-bz|DsdhTK{)ZNo?xtvL6!0tb~PX94f&7O>rQ#<7_ydcu*y6{ zWge(DqidkO-7Nf?UWSd7_IurEBWIE#xHcy2nn% zmVAk;z_ND+b!rxg)WNwP%p!-d*$F|2IMMa4u~0guoBru>1=e7 z6owA;Ga4;`5IT@Pw<+BAUFbl@ypU^OVOI=n?}4(89R;hEMmnH(`;~4iIidh%()d!y zmr3@N0q~&aEWU^q`TMm;FeRTUSjCQ>2L6yePp+(S#^|_o=#OXzWzKQfX2<>-I)K}p zdEPzT*2%ka8vh~O;O6OzeLDUieD`4n8&D^%2~w5|QkH;(J$2t*SPaN!^vTD@I-`Mp z3}zFsOj~X8*dU9r)^Q%?D&kw1`z3MUJr{M0B6J~*jzw15szaFnt zY&GaX7O&zHEG|#0UR@AL8`&Oq?lyLlTVlmJgkW*1PIT1`7#vmsAY^Je2XZdE2Ul>; zi7mrWZbY8*WDXT&yiOQ)ka5fvFe4N2i+g@2pue&Z!L1ImFgyX5)a@RRRZU#3kAM_ zV>E^EYjkGvR6eRtX1{^h=*$63_N!pC%)+b%@|5MjIQv~2ZV;6o)0FaOSajVHd?kSn~X3(B8&|h5N2dgjx zv6O^`tUog!Rj5HeX_x;4pr_Vk^5iat!`nX!R{YpBi|HvemyhG9dZ^-_&*qlrfgK)ea0s zJ}iwO?7>$t=xv6gD2?oieOU~dY}8YD7UMu<5Y2huxQ94Fw=mC?Zgs=asShYta`#8z zSjypuOi~uU~BS5=C>q}s+j3x35m^}E}7F(^cegQE61Sn7fE z%*wcn7GD9z=bT|y=0n)-vyyWqjNeiEJlOV!36Gu;V6p~9{A7J2P#;#S z7*A}lmHAvG^RCDUY~^w*TkNe2btcI_aX86+I;%0^gNhFjd60jFd_w-o6SB$_}K5*BM<7-b1GyB46@(a~5yT?x?Hogj(wV~^ zD6d@&${!UkFUUiwTuyFUP>TOJ2-@*XJ;u4@=Za~lEkewRooFq50_7F_!D9ST$sbf3 zv_+LU<~nR#bIj9gbgB|Pt*lPz=}kGFo}z!cry}~jJv~W^vZvaz0j4lPcTS6!m!g6n z^t1_(@gI9i&7IoQUoT7TDNC^du)8*s-EOa73h=&4p6)JFy%q$UWG`dyDtK*d#0<5YY zacRNTS4!g7T*EvM?%Q+%~WHkN>q ziD~-F!Yz0yiDbOo1DaKyy+-&x8MVcvh8wOeKet(oU=X12B-D?CC--oh z`o%D|jsSdEWu{FruY`LcYffV3T**9KGG`$3PG-(XM?U~JLr>6e@dJf$64A6~K~{wk zPY5;jt^J|eRe2&Za&Jv;ad@X6W&K9I?5(qWC-zd7dok6t&X?9>7Bd3Rv8@A}V4ULD zLabJk9zg$~EhowNs~t>fmJFCEQ5K*+na>gKcV;ruFN$U%tg7W(!osQLEMIMp3C^N> zg{c;*$9(lD{t4LVrNq=o*)Iw_Om*OI2GJl}V81Bah8Ys}1Nd$30`OWsX%4c=AK$lY zIL$#{+p=hEL9f^MGcC>tF)hR<$5Cg?&P;5Xi8D%n+f`-c5wwXB&&tB<^V?v|pYnOO z)Tri_FcM%N9D|*t9Zu*jb{hPF zgVUVzg+B;|tBuh)F&|}NOx*sgCXBe4P9L-$TgEE=8v^swHHs4Wu}kvw{)0R@bw;GTf-eEQpm)&9c&WCAJuOvKR1$g5LuN3k z3Q3hlGZtN%%BOHs_@ijDseC?9-6AT-2`6x%?l2mTW`2UdqFj$fVg-BLMEQ!@H9p_+ zO^_z$FLu3Gvg)n<+ z>BniCr0kGf0wJA7^$G~|{<47OYdwqTx~u>VVn6XjaQ}E@MjTG?iV`aSx@boixC*#K z!N~YvbSC9xL_0T}@*_zmB*oTaN$N~9GDep>8wu?8nUWekR!RXeOFvCP42qAS7$`R* z7Xdk^2~2kaITU=8a+@y4rPD~;6a5?Jacl*a0M_5e>6ZRFOt*x3u*8RYVy~GI*ggOo zbOX;hPa+F{f{(xoaxRzVM78t--z!zNu+E0>6s%-aDgM*s;x9uUsvIusQTkrwW{TD@ z9h4&V_>c1kQjpd)smCd3h)rkNwbjF zATVe##IM&ZQ}@mX5L*L#=dsTF7^_oz=YtR_>YyHxBTV94H9*yY6v|6TWhMI(InL8L z09oo@UJq9J*sib5z$JMH&Un2y!G>h@U7*!bm!C{?-sh*X-C^&W6RJ zzm{GB{Co*U5mhCBy5VOu$7pz06=i-UWqu`Ltxm#Eg@CuGpXyt6H~d&DL>Ad=L|ogq z!W8~!;U&NrjyuaaM$^vNY~{=>5Wm#%tR9?{fjAki7#`W5HM8mP`YKt*(3!}s-wuZA z!YV&UgzbBMj@q`Nu_l5UHV#!?u5(0|XSP*9Nma=41_st=oOhl97~bMQQYYghuOfhJ zbh3;_q8GdXx`>}pPve|B&^)05F(nbz#Wp%;UktXGrS9p%mU58&uCNg8T$r=ai|>i&HJ+92HRh2u5mR4K>2nA zdqF&~yP#qk3!#%j5nVi&IaEKH!@2E3)jKeoj71T&a#n_|hu4?OYBwq&#pB|2%Gd7; zV`*}uO3)#xl=J3g=;nxIbL}-vrU2>#h;8m~6T^~xeZMOh$2pHfugwaITE{tx0rjko2~n>y<)SO z-XXn)cJVuZIN#NsK&Dgx@IW26Fsh?_O*TlFsMb@jv$s*`-f}4rLRW2~JFmeI&2nu? zeol->+S}8?3kBqbeDXp*kq0ux`xb!PI2Yp}pMep3xUqqJC*oQ5h5)6`mDqs5rA*w| z;EV=1v85hZQrn+*@bMa&Fl_$C_*B?On6aE#%m=F# zv^nDxs_vT%R8<32N%$}peNM!t-~yeIXPx7T?Rl@c%R_ z2}bLNBKn5n1Z9C;oRlr~t3JVJJKbm=GraCQR&d907y{^ChI2(p!q62KP{5eul#3R}F(IcJeD%f02mz;{Wy zFNHqFB8lykf)DfpJ>aaLmwJ#oMO*KvHo^@=L-UxUu^TEh=a_)eya6Da90_zy2*;|P zm?O8DIPJ0*M{_zc61JJ??J^QZ?$8XySy|mVg12nSja;b+Bf>*VRBN(ZQa`Hq)bD&= zFP;4TCFtZx;38-ytvjO-y;>G(D@?*>t#>b3UjPOe~N+?3H z)2Uz3lPsrYT!H~m(`2CFXbc`yRs*sWy*uX`>?J&_t}BE})!<on(ZJgodJbtmA(ZOh&}lVy51FgEYcpO`%?|0S$K2y z+$9_qECYVHl+`nSo>BPeE@O>mGYdE4{8Y(WbO@#f08v&(HuxP~odP+BO?!DFls5#j z(htJ#l1Fx1ro$Gj$QIQB(JcMfLr&s@a|T3ykFjdR>}i$K;b=J< z=*2`A6}d0@?n{CDQpgu)3=T1pD*|Y>np|Ou>ESG%h|c0HVUP6d9Ue64cN?JDCqVQD z4M46W$OUoW3!Pv8wP$#~op3OCZs`p_sqnasX2%=NK}j zBJV2(PtYr2&(}b>AH<$tL-a%-8DY<_lXvpBJ#4{XWfOZs{r`T;C(3-ldPDs{R_o3O zEVF`+;x|90)3=9!tDn`n>q5i&-^ljlRIrFNcakiADff7i1R8S}uw*~Hdo03T=>x#2 zSj87bWz>%$D>6Sw$tOlMtS9GTaU#(G#4t8FjLYK|G*A!GCbKdcOC9HWTrT;X$g~K0 z)Sf)k>NcU#sCWSlq(%P&k>k8!f;KlMgbzrRppVS&wLLSRW2%}ut(u*xLJgc+{Obl{ zN|cj3MG}l9=15f}K!~|Xz=Ple*_tF9wGVzQ(?1le5o8aJ<_TrL7ml7fr#p^TOU>F# zf`JT~v3`D=({?d%aY%c{Vd0ecc<5I(5{QyrUX-ljH{hqz+asXF^)JeNWV!D6(1YR! zwd9iYJ>uhfwu8a>J$Pni(V_5>h%2||BA|p9rl_GSe-r#+m*h36`S^=|K}x6e_9?a0 zW$PzMDeI^3KGsiRK6IWlKTc4E#_mZciC8r~mxmDxn2ta&OO9ayxF+R;?OXG-n#nqQ zJJtLZgP~sbvdGCH?)SibMSElLE@D%>yJ^@BTJU_HkORw^O@b~}l76yw0o;wm>h4EU z`MIV>ID^=3v-Eas)puvsaN)S1M|vb3mL{d=GS@(_RIh8u-Y@CpV;EVipKHi8yKuyJ zv1}^hmROiXnC@~DEql+6rzTkm!T{q90Exz^#??ro!#t(7!oxpLSJBZjfjeq4K{gK}h#ucalcR!4F z!={x*+Db=uy3xFj?<`H<#z0f6n62m&qwy=&0dYh`%ZEBv9#J`h5tT5}E*S(cy|;lm zOK@_8V@D{2hFeep(Y{KaTH;C+y5k8Quq=JG?!?la5-8lWyd;SBMF0V%;2AL>#PG(M zF;>5Z)d9KrtXu6d>C@E_A5k!lxkCoED^~u7NEHx(RN{g>szB7?aje_Wj6$YSUymFF zCnQhB{$*I{ZoJM%m^F$=wwUmjsToc1_!c=jk&#z6vQ_p+3((Fpr@8)5;DXh0-UEk#tx_5gi{0e2q%h(}LPLR`w zaBdTA&ZTFl#gk=}ScY5?jWxJM*k#CrLKQddpF!9_cT&{h&MX%3;gj4&i7;dL=2rI)l zTm_go=7g_!KN{vk9MfvNJ0)-|vFnlzU1?!*G5)b~9hy`c6E+ z*{<~$=jbaZx&+WdO0_8dEIKto-dtx}=X+?IA|3NWA;3=E`Z{?gG*k8B$2*>H(FSm9^O%UYKRog zUD032y4arR2YdNlAu0MeemD=!QT{3QSgalm>T$Sw%u|nQ_1JVC%$z(FrGb-V-{|vB z50NK&Iqw9Jb`nmGWq{$xJGBftBD_Ow!%1zP^Q)OeCG9vELyKiU5=ytQL}GT5q}`Du zYQ9Qd>;*U@m$bWn)D5ihCUC;Ae^(L++4d$g7d=1O$r|t(V@4l@0S|}xF%F+=e`=c> z-`z3c5<=7qgwHA|r-cv5zM8*9h$Wo3RIBJiE|LWFe0hP0mpM)qM`WS1me*ec69JA2 zQ_XR}KAkLsF_?Fmr*^_hPyP6lq&MyI;lx~0Pc*1lut}pK>5U6D2qQ< z=^{NL1^^U5fB}H`1n?nV0G^7R7OBP6o374hZ|c^Ekk;m;p9?&EtMTBP>?`q+LU$azErs{3R%cAU%uGB^SoGd5mo6$0kGx@XFc6f$klV^Wo#=#8$(33 zJGbqDhk8KO&-8AlZhWL@%(r?dhIn_p=%HN=?`(t^cK&<67L&T3qUq073w(EG~cxajSO>S`f=-HUH;%&pCJQOeTST+y4IfDEH32=bq(# zpLaR$+4_aog+2>l{qy$y#v$xDX8&f)#SgdQV8fRIQ526<NW)KSb{n8&leRm2kfixF?$z5 zH0+r|YGxS5HEqRoIECg6S{}WX+E_eb1j|{SEESlC%TR6=Yzs6R!{3@v zx0E}gVw>s8esaX>3*^$WwBx6s5Xlx#uW5+hiO0w@8+jrtY)p+w9H>6#l`fxtZ7kYC zHI6_yqK(ks&V}Bkpt*d8SeW#;$i)y3-3qUYZU&;La3xL#t?RzC$3B5G}<|=kuvzwx+7fCF*jXx-3_h>|+7hCt>)EaL3uJn7->211+P)scS;3$&6CO zz)dg=4S?{7u>f!6RF?Iyv}nRMj1kN{4HGGW$M;^+`8;^_S2 zA08Be-5l`ZzU(LzrLcepNVjVCmugrW7^6n1)l`5e#GzbQw_u(Mlkku8TbPW0p2%Xq zWA>!)7U=l`^yX_fujl9RzgP2W>nrs0PW~o=`Y|1}m9jr-Ryt2ET4ya^MxwOu&$mi_ zVQRxqRCDq%{88!MbBFv_DdCvQGWXBCK?9ql*cWnY{`<XM|ym2nTXar#o zl!|7i^T0W|T%;@89n3zEO~5)GmPiILC{xGD$*&^`-dyj;-u_jx<7yKg$U+?Y;LUt% zdMohc+T=Htyf_M?k;F;ld@ z8Q17VB6h~`nyFGo^<(#p`;`}g^fgG2IW(jdna5KH>R!eTdyM2QH}Y-hk3!kgp}RSW zeU=`$DH`!zad=J9j*Uea5Gxw~-9&o;bi;t0q7hqlCmk(w`V2FjbZkmDo`@0BrMB|6 z1_iKD3wbSA6Aaw3jF0E($F00_k2lql=sj$fu9x)b@o9~u)$J+R*p7wPZpEix!b)#J z3RHS}sZ`8#?2CqDqd4UR#&_(mJ4kozqo+{vVJKI#h}xy=aY0??sLAIHAvj~pMN1u{ zE^k~WzZ#E(AcpWdP9NEYIgXOQ5II=8`EKS4`IE*%{^Z)Fm>a(-Y1kO_A*)0&vw{od zhgh!I7(tRz3W`GzX+^v&pc{%nQxwol7F!$h7bPU+N=PuEb}fZuwiF-9RC013Gvbm3 z%oA^DkRQ4l1+CMsPnc-1hSDUTr(!fwdnqGUv;U;nuNMM=4?>~Zr6e3Qqi4Yp?wOW< ze7;)Uq7L!jIJaCX3_3tv+Va4sa{#HN_5=LV{vl`5gI|rz9sH`{75tJbC@-}Ncf}XQ zWzkuNh3xWpIJS3u=|*ua__K#6)g0tJ5`5@!O&Mt@PykI{Lal|thQy$aw7@eFl4_4jdQ{!LeIO703jC(A!Gg>=%?|{qfP$1cn2}EROLE#tvrN<#f^zV{=bj) zlIJ~i<=I@7mkHKwlEq-XMt%s^r&qWI0_PW51aXTyDML00S2!1NlfW+C6M)(s0|ahb z2%Oh05(b>CE`h_rhwI}29mfxiXR#pvCp>pg_q(M8?N56u&?EYt%w ziBp4RA!7nANj|3KAMcamI^i4VnhS-Lt44x`%Ul}%C-egp4N2fK#7L4!C}ye3b;2)R z<(XIc<|b%vl#cF(e)m87{}=s^yg=v|`9;_C)BfiU@UAQW6WnTIWAV3lT-5OVTIHhRboSYi@RQeby^30RR z)R92!qXg`qQ{7_ZZ_Vd)2j?+4k51@`$AJ*%78HfIVB@ef`bn*LTND{Ril>y#c?&;^ z?K5!5(C$E}kO?DGHo%B~5@_J2SahX!GD*R@K*KORz=<(IYs9uw!c#UPX1@;Z;Hlxs z8?k=y(7*TKz8E7nYTvMU`1}0W;m4`(PpJQ*s`n}3(Ho;D!@nv<`zR&F;gN83D>1Ng z-IpBAG_5ubR&AxD%Q~2r(QB2jbz4j^(RN6%N$fs+9}m%Z)9`kTj+%bN92H$dWu)f< z<*=H?7^e@gWPgKygeBczbI@0?Mzl2g1V(_C`|3DW(`9k6gI^7CzyP z#T@uFGlgQ~bj?zRp^eTH{fArHduyghU)LV^>^FnJBo2`PT69=aoN=Fj1}xKghGw1f z3O_Kl;%Lx6`Y;CxSnFXadq}1V)1ZSP1v75z}+39NFN2`@s z58UaCH7+hg0p3z;L@WJlp^iIZZ4Gaw_7Mo!qY(~zLEU4=ufQ#TLTfO0u4n3)oIw4( zqzI@i5VH&Yhz{vKP(kagUoaCz?-@De2;5-{ip3aI{=m#a4Sm+bO8qW6i`vc}xakN6 zqZoVCU%^lT*^E@-4#berCQ#7%&Brt^oNfhz=1~aq8K(tzr5zv`tKQydg-5F>h4Zk` zP5Ln~L|k14UBFBczeENY$m5}S{dA7KejDHwqR{?W>b6 z2X}K^>Su1ntuSN2$g}umI{jQE-S9^~z?=f)Qa%aehh|K}LQExeefG;N6>HAw@L<&h~PMg4fPguy(6`iBELsXbd zDAR=t1;@H1wmrWh57dl`>mR zZLol~jGPACV^jn?6_-umTK}RDPX%l#0*URLAV`z2fM8MtCz`LW`hwxN5_(oO{4}hG zlVn~6fsy6-f_hyECx#wIF@zo{p-8Q1vv_!zX$HkqRuf|#M(7+)(1D(B`816Vm_%SB z=>drO%u&n$md?~x)?!QjHI!KsIhz5>LG7drB|~|Y19H!zKR_&PdrsBq)skS258HDC#-Y0uyGjX5kS)EL_( zW5~E{=fw|PVbv=7Ug#5K|(mNEY3f>VjmQqgbrTI$eGl5d~Q<<%6VT zHB+!GPJ`0!Tq^XXnvO83U;{<;5g`eF1R91QCz7-ob>)mUMcTA9D-7oojZ=!rc@s-E zx*~0~Nko(g0^PKTrj6)|ZbY@F+pPE1R4L3N67U?5r`bt5B{cLrMz?}igtdPsJaq`S=O5l<}UH7enOD-xZ}ilXw;VwWZZ zuzr`eT_X#qosPYUm5wKb8@SYk;}*?w)h`$_hVDl$B!vKs5|`;*jCCX|L{+y=kD5Sh z&~Ro`+u)_jO3ibl2Yom5s9oBG3wO4d_cMbzlaDdwY%!XR*n!jcT}4GSJ7G4NYBAar z9Ro3R_A8NoU|)5a|7-d6qq@vims#rKsLR#rvQb?wQkN;}@}|1Ht}X`*hO>V#=1F+_ zlQRDKFG8o&`X>y}?(7kmGm|gj0bmR6el@${i*k$bz#=$lSWR8C`-VXMB>B7<9;d4Z zLT&IkTV=eT1c1$e-ft|Kml=0jPlZ85 zj&?B!@V!sgD)EdLuvh$642eOBID`AERbYOcCN&p!Acqfs)6adVHdf+`(9ZJ%b(d2G z;#Z!;W5x>SVI0LBT#aA!WDlY1I*_m6B-%bc4LvO>CzCisdera1H?g%v>ZtA5 zCkW@fFT<&pZ%ha*YMyA%uvYUtOq=_ha$Nn$3AVL*T+OcD)2Cat9Vwsw(>LQCl&{B4 z1G9^y;N!5bb{>WcLpxJ%?4{o^g41va%LZ{vwe^4|NWM;y9JRsn`++ZJb(x{4{*(DN8B10jKW2Gl9b4x)O=TF zZuUM)y98=%{iqeuH>ei>v&@_~ibaSlbs48FPpHeo>hiDsyNS2xcsM6nAYRaj)^s_( zvv=`DQ6Nx`S=2~Pk{_dX__09$=r(8oa+DyQFejeK&eD4njG-X);B+-r$I+_U?yDg&Oq_v~NwuMOwJ`6Mj_+SJUHsZWk1ZxYv3F6a{M_M~R zv|4_^Kt9f8P&=L$rEZj9Ew)xZGWr`xKf4sfID@t9Ncf$%-swJAD{O(2M4-}Rk*~G6 zHkFF*2G~rQ?!zzfuv4&hC$b?SrR#ypNR$u&Ud`v8U@g<}kHK1|HTQ1dHsKqm(o**L zS8~~|E^q7yN!T3=)+WYlwf@)#1^gHENB8(9;WWNus>OrvZgfZE9dX!(I`39@yu2}~ z?pPodFb<#&u_fvbyB{dV!|P1I@nXw!Uc!GuFJQ)y!0*+r|G{8di9$u9L32vy|6BA5 zZ}`8{>)gz}px2+e$JatK1_}#1P~rwM*2D*#c?m(0mpFguH4ZYtg9l9frrDW@e5N?3 zv?^^SrUHhGV_?vuL2>Mqi-(U&%|~VCrrg|An44<3v3;$_5~}q7ZBDbqT^XyT*hd!} zylg^R7E?iWt)P_%%ebma*2oE(Q*eUy)$QDF!b1%0L1Vw{`eVWQD`%~Htuq0 z^B+SQa&V;PU?Ypr92Bx)KK27$a7ANT7c#^D9{eu;6f#y@~nb zkN0Fe|9DSU@{j&!Iegd(3?OJMgZND84k&n1w1~EG24;Zl^Fa0ldULWbRCA4d&B@^) zIh3Eymn7#nCm$#>E1_v(a@)6hf8GC!L!t=Hz&AZ42N`6ho`79^Wp*&|k&+DTcb;4z z3>krem~s<=5dMb;sGueh->sH2%>n7Xa*+DIVnQ%p4n}oJcrbxj=O3Bi&ZH+F6#Wym ze_W!LXfq|?=DuJ>m63o1e(*qr&iEHXkQup}8Pa}@e|ZV~-`_Rq1IIOxUx&F^-NeS%EB?Mecz5KUS_@Txe`G%nxu;7GTFrYQKS$*&`S^cgKTclL zwG1_h1W_XYi}vHaef|gbW8qU>lKj2bJtXhaev}JpZQlo8fiOBp1VTwiF@1^2lmWfW zP3f=y(0;VMlT;4=*Y@KS-~YsZ9CBxu%&=bbFrzE`(X*f%{6kOGfLH$&`*8|()}d#X z%y;^q*pCf8yRskpd?|;+WnG^ywS_H*^{%Us(K>xz1Gkq#VB(fj<)I$J<1P#@a;zz= zg7$4fwAf$*^s}>4R@Md7{!?@=N zY;kx-9~|R326Gl(6~C=8GWMzugV?vfqpEjtIIT~#FXOf7uuvOtARE5Ec>ShJqqmlD z{I9F+Lo8ZVQ5}f?)UX&3uvxCE3W`>yQAk8Q8d`B;0ft#Cb4sJP!5KmIFoyx2<3eU& z4-NGt<2tQ*VZE}QWv`HZ(x)@iQHt$y84IhC@)PT!vfV>{P?ciNq~Poma5)%#ll9Wo z2c?U`e>235Zqg%rWET$!gJc84Sk*ih~sE^2Ex&{1=ArK5y!RY}X(FwpT9_ON0 z6_cR$jVFji?T>JMQH^|~#|`bFS$&d{nz?2>=e*pB)Hrv_Gwf)x(=?OS_u;pr`2-Wj zuTNKfA}92`s*fLg*O4hR=btIS+4pP%SqO9{szs6_D-o5s8qdms`dpIQD79FbM`CmcC^ore>Q>77CQT~ z@+tMQKUVCX4m)#+J0g95wZ+;TXRLlaQg<>l=V8Y}5u+&Y+C!7|+c-I2l z0r~Oc9~eVFz^{!AB~Nv~Ro8(6G_nyfa-bBx-L}Z#?ybT%fUYW z9cszk4F`hvwVU$-053$f6EJ?QenFYw}?+^N|uq^x(u2E=1$P?@%7{C=NH{ z2$FpSq>({|u*)|s7=*Evo6eGd2jgEVVX7CZEwOKKKHBh`wv67yNr6S_sWrQNfrfO< zT9hNQ-}3PWu0U!}d>83|Ql!wIMwtcLf>LFPE6mZmsW6-a<541SIFTSSSRV_-J}%4R zYnBzMV@+{lgD*!VP8j`@3ubg+k09B>Y6(?|k@E7yQ? zFXYtdA5gZV*F?tJYaw1Zv}Xq&}fJm--kFof|u%>x$GCdEu1mIu)omLKu$gKAjz3N&7UsBj zg7AVC1WqK19M|yyX(Q)j4TAx}_7kp1#4w8iQm;@Pe}Jk1MQt3UBCjw~+y^FNr7UFG zA8&a+Q6|=ASEf&>TU*&{RI|*O#(kh}AwDV$7xzmGPwD5EC$|by3^*~I`nUaM*MzLp zWoi9VBb9y9(0kBeo&?-s;$=1tmI{Rah;)`cW)@Dy+>Ns)S%r@#6}*LgobiH!SqRb& zu)3nLkm-(k;SMb!+ztCa=K6Ao#%hG(SaVUc`leq`V; zkkGQH_;X>!a0*amDxvM??3o+)jqDTJ*-=IE1;J+lar7ABIPDsz?Y#CJA)AmpK+=lR z+85DRB^aqnm6YrLfKxBu=}Ge7t)xOeOck9(GoZCabOvxdF8p2eG#Vhco?pekMI^5J;t z(dCcsr*(PypY~3d10E+s8v?y6`lA@=@}kI?^_Uc}K3F`iV+wkIKCINsltmrZR^V#j8>3Y^BUCyYQ&oNXBT^ zWkuCkc%bph{ARB*N3~`g1@$7zd>54YdHZQ)9z7gg21P9PSpM=%64kwcaSVm~MAcm{ z=?zWId{w1`^d2g&<}{N|wr|&W-K*~FO!KKLpuf9U-IN1n9Nh)r+o%1DC+3bMEJac< z=Q=d4AHAEj!2A}2*2eT6F9A0x(Slvr!&~l-z+KI*UV(-*%+asewNIe#dzt2`eICrK z3*{gm)`s%9EG;!i!8;FfNi0F(@sz$Mv8$Irko_2i;%i{vzenEeVW-8e?t%K@I0$4K{T+2I znxo*UPrO7eGr=ssJJqICltP~~&W$(oz?CGSTE(Uu)(P~i@!jkFz+jBqPOHBkSB5OBZ_ zb8c1DP-oJgrO4EMIqJ2Wcq%6SbTHUII0j-dT-sn zo~YQev|+uJxTNSg(1f(mQ5?QmPbASA_tUN`wonyQyPT!dDblI8hICOm^w1uZ;C&={gTR zMmFg>L#>Ha>AiGZK~_Bx(t=sC|H*Qr6NqlxcfQ0RA!5rOAfb)AWq%|HR)VxKJBCxj zr>0BO&Vg&(;zu@AEiIy2U{6~jN2e?U61G=WTHygL$bDQ;+vsx1T|_@#_p-kg&O$_N zd0{{L`f`)co5;{VzlqE~tO|gz{c;sZK9ud;%xp~~Out=#P!Cov8`tR+{;nApURfA9 zFHa&V1*rGQ;URZHo1$emW)()xR4)eM#rSagU6E7sI$FY~=0zWb(ZZMVRUdv88E_Y~ znNYBC+7ZS0yf|`c)`aldNes|Lu}t(=kpc4y3)YMa%wJ4jxxNe;6l{o|fy;zZYunpZ z#SccsYj*hq_2m-$_t=2#m_3o)1{{T?i8f#@6mj6D+wd>Q`%rI9-rj#y%xfb7!C|WK z$mCT2r8^cIWer}YLJ3Vt&Ey!w?CVf!q$j{R8Cv0$cC8iA;Ze+Vdp@|yhFVW?j(Nmb z4uG>s%HhmXW4?iud`e<9eDlfStZ-=>xZ%`(qx>R4dZ@Vv5DGl$SxwAD>3zu#@=+!^ zgwsRe;!s*RJ;xb`?>*nhkhht%iXYJXlMA*|?^kQR&&ZLT@%7h6%Zc9Sq=lH?zw%)= zq?6vKRFQR@0WgWDAH}8 z|Fj1UlR=4Wate@1)cXl;Vg~E5g33R^P3*qU{}Glz#*}~0EnZjg=0}n!{YT=JK8bvx zPN(RWp!By$ZzvA*Gf}31ehT>Zrn6_zj}v;JXGwJAkskR#&Xn+=@Y!h=@T~T-MpQF8 zR{CHuh0}_nk}8}9coC;?Mq@IqQ8@STtL_v|H4-E$oNb8tL*e`#7mvbu?prFH-hsLw zAig!b`UL7Pl`U00nrEzRh@Q;*d=1|uYMv>07Px5${)Ohr^=ZvB_a3s!*L=_k5CYwW z1$Hpd*&Jwi4ibXh@wiHHCA?ND3nff?Z-a=hQNDxlL~wo`v!KCg!Fn2KrcCGgtUYwA zu4JxucipPU(O13^M4B-xv7JZ#mm*+s-726Qh7Ntb&>&_ODMY`_&d3!P8ujWvMmGG9 z|GvC@{JO|X=WbQ^@=^(7piIdJo4vAf-h)YGWr3@g;daxiE3(t^JY3QnJ8zs2Z@0?M zc;d@0MFV`vb`FzfOO#(^LkA`LC&<83R5_^(Jc1W-GVlZ(DTs$)HbUP>oC9C>vaD~fgH}N2`zjb3DMcNtoAQAU(0mOlu z=7_TQ<@M0Gzw1uH{emIMaL--1HSWKnymZEWg?uNtKUZ$!aQ_OHn|ORNXdm?ab!-b~ zD+NL~ixeWJg@=uz`zIqBfFCvb2Sz%oUM22_v?6GA9bYL3Akt;~o{$|n;q!k3Qha%VIbu15Gmlu8Z@90GElc)GeBqvlDxg6f*=4sfQ z^Kw++YIv7lOe)wM2t|9MS3_oy)%SrA0spJW#gC@M@~ZMPpMl5+V^*bjFT;MhxWU*vUGXK%|9$7jfolDS zy8J_3O81wCpQ>LQ)#W7h@GbT0O?7!)U0zg|h3fLSx;&&V_o>T#b+OfDySmI$muhvn zT3vppE*GiG6m`+%ovMEQN?n5LQlKunykDqaIqEW0UG`U(fV%kAB~@K^50KVwQ&m|H&abu$&H1zKl*6v}+cD$GGBO9j#^IM?H8OU$h_A?_8Stm`3IST6-ynEF z&kO;LZkNp=oNLjTmhfBl`zVy9{PB|hQN|z5`bW95L+|v8j%hI`jT%)_=dSfyEorqL z!2pfu9kct8{}T{n8>FlA{D5uzE@6JZ8I0DY*h66O<=jKvtuNR%{d}&Ou9khJpOBKJ zd%$L;?zX}Mpk?S~h?@|>iVMvn=XH0)V%RfH?N$7-L zY?<{wGGF3+N?2$!Dm#^B^B)0sd_3$>TBz(;sy#V1=V=2Uc<7MQa{vBx;2#DP+BiH2N zT|VR&&E#Mds3d)0{G??!D+7f3CS)N4-Dcs8tl{QZ7RVvuY$1Dz)|SW(B(#+ejO;2A zB+&6j+4Dl|9Cp0kfEGkakli-<+N=cCi$Ec}O?+Ovl+6c2)F>iZrSy+>3KgRfwPFk_ z%j|jX%>0}3d9zs>sH9Kh2%qAQWTd_zzU_fl7y`YTBxqzwNHY&t*$-98EnQntT|-^b%tD-WefSa?WINSDXdueNW7c*_dJ6f`}fuuw8t~BwTP+N#(6cRY`TCDw&ZX zT=1#O;U9n**SXB-Y~SQ)%FyO&;uA`h|A+?B*e5?u5z^nEQzP)w{NRdY@B>6V9cb44 z7$p3_eg`th5UI{AhNi)cok`q)2z(f^6{iunTSUE$zVDG3(VsQGi0{KC{)u*4uqZsG z#XkxEpc7EBFql$=$SgVm`xb@MFagoYZ;s&w<}K_szmGo=Td>J+y=|`b%c~< zl-DAU%rPCrIe4B@1-S%5p7zw;d0*c@3uUmj3fiqFH=jYhT8p@G*LtQd6RJmX z3N`u+!uPnzV2!t_j!7xgmN0F3`zy|8eT6eusLTBKz?t8BIiu!HCD_~jNzx?tme9qP z(1Dx26|R5>rTD)Bz5g3=p24PB0M&V*DU5)fh7%tO7yHp4fG#dxoEgc;LffEy79;T0 zpH&3q(lKu=X5`Qf0-W)fn(mcbLE%q%PozF|sdhG$5~A@1#k16?)H}B%B`GW>XRkf@ zjF1$&d-asf1s7{-R!4uW2??1gCihG?>_imJnux*)l8`0sOPzcA2q8~@7Zl_HIf`)l z-vs)dr|1XGM%M}WF4z7FsKptP8rGNvHCwIKtfc>Vf+c6}4Hl4N1QSyp8$`!&bGRRc z;yi1*0^r8H;8OwaABr$JP_4JOhHrxI!M;?p##;870&MQiIw?Fk&mZyK|1>c@AP*x> z#B?6XZhSiJ7dqBFgXuCtRp3n8XMSSfEIyvl9zjmE$J7~iQred(+8>Hy0cY4Yz*(|< zTefx-IG04v@FE#pFbsHot_R8B!jzn{_BWiY-ok(f{c>5k7JR5Td`O`G{{+9KPyIXi z-F=G}znd@W2ETzhNolC@`{|SaE`DdB=+5}v&`aoc+nVn2YrE_HDj>UE&F=+1Dgfzh z$|qckjPzM-pYq_8L$u1msfSie6!YXZSZiPurRxD#&dI)6HCH}{c+n%mTksjEqVHUW z?JUxYutg3-jP_TeLCikHk~!z2tb&wycCnzZq{nK?P^iM)>&2&r`Ct3!Bhz+kcSfjF6S#T>w~4buG3sRoIdjiZedd=Mqg_2HyQgq@})Jqx8lnuk)8f}mwE zPF8q1k)|3edwUQO<>V*eYvlRch@uI!ptela?XNkOPXM_lP06#mY0yXjqD_jP)`dA*h^4@Z;{2Ag@^2s%H#ZSN z#q=NKSMUEER`N^9;C@8n*rLCt9Nh7cw7Q%czN3FD{9=bd1lt}uWIY>3gKUNlKjEe> zR!ckNd7HK72k~zCPo`6XW%{gNE?E!6OAn3a9TPU}Dae!kvt2aL%hPx4*=L!`PE1$v|!`UN{Mi&P6Q%cG}jTvA}z z*)UR_h4RUFXe>V0P7Pen-($;wKwoEPid?p;%ivYO>u-!;$ME`Jm*?jmAp!SRp3i9T z%JYONhLTC-xx6k3CBbT?9FIe>dneCrvpv`nSe3NDwOj(uiBhtuQQjUCR+{-1U@ zjc?=UwAv3loMH1m>u@&Qf}a=9Lnzz#%>%)d9&Tn%U?r+@J-8mz!Q``_Yp`(Pv70H; z!_L&NG z17ACvndMnw_G`HzHBjr9JTV5A;@tGvIzep~U*=({4+u*mN#B+Qvt;L7HxZtLMa(p` zG7&>%aKZ?(6So{r})5N~r(nuIkS!qyAX!gz0adDr>68)i*G^4u$NI=1#+O zRaKCJq_$6kouTqFq=u$WalUIyXb%jNmmkuezqyGL+H>)8K=u4Ms7j3!>RX?*zEFh1 zL1@Ln(u?K!;svWJj~TV1ZbjwDz@k$!1B*&C^EXrt0c8M~V3x~J4=BLZZ}I=vN;4W2 z?7Td49p<*nR6veS!1mWvK9ZohlrwuSe3cf-M_M=c=&pC8J0+R zXwi3`dmrWWwQK|(t%BpLupiqY?QeIR-$XaR;}mLBh-0*E<+Ot%1Lo1tA#%HF+Q3NK z-8g#degZf*R$%rI?@_%M#FzUd%Y974#Ur0d+GDxpADdYIL6IRSAKnuJ^wai>q%RDo z&kGM(7%TkY-BS3g@5MFx85aJyDIC{W`>8)~*dtbBqJQBhad`BC);aU)I6#M5;NEDg zI>)*15+K^L6da$L!11{H1!ljc@Cl_g6_kb!1Gxn>f=^&=F!#5we~`&ydL~dmM?J{Y zE7owW1{;5ws)5>SHSnvc<)9`bZLvtErm8&1;Wf@lwL8A|dH9D@n*Pg$3{1DM! z`%xS}y!zT%_ItyR1e#Am@$Hc=@o)vo@1E9Gq#ek~5II9!JeX@$GTOn&FwX0t-PX_I zXy>#n1}SF5NFlZQKhZ->)8Y>k=mC})3@*B=3wn%29lD{%j6Kr>r<}*^8;E0R%rOp2 zwYWYRadf>jaS*R_-u*O=H~`lwr>O-5x+0!HarD_sdm}O|nEB(zI2zg5L&6vy=e8>i zjUvkaC$l%_x)~$@>-%QZ_5Ap{lA#IpjqHs)SK%X)(H$}a#TB2K$jp-C$7Kd)Pgh+=nWc#? zV+t&^Wt*$&`S7Up(DF8Fsx8!1Tb!-!JRImsr1aIl+#fz79k06Be0~c>G?5^nWu`NJ z`??NnqTxQnjGB(!WQk719YEe?x#(Oi5cNjx$(Roa1zCgDmaIxGtl5UP0%4B+Lx@v~ z7=jT!#$M^lX=-U%7WQ|(l{yMN7nws&y^6bPF7vNJ0sP~Aqq>!Q_L=#|=j`F}56#Hj}rc1j>xTQ*zd01> zhxQ;5D(_@muSzXzN8b@|Y~RznSpeT{z0SP5jpXD|JpUM~5`5_#oqJvbMlaSKL=Qd- zbM*N_*+fO{<|cj|*1N0&oQj$lM(&Kvv!X6C+ZP#RdWV>8-9N~5p4 zTq}&B-+k^BruaefeKk8RzuGNd(-#aT4WF*Y1Td-{iiyhH%+1gQ(A&*BXS@n3zHY)o zt_6(IQ~KL_|455c4EV@DzSh5J5)qGRupo~%M{WqC6sJ;K<80O|A3$0+ionCP^H;7? z%`1UZ9T_gKm+wlm`}KG9YTi|Vu^j3z(%Cgz99?U=BupmM5sbx$Hc6_ zBFo=65d`{jK2x0ml2v4bNQWZ^iu;KWHfTpuMv8t1pdlDRREjw~n;<+JOM#Rl^3Iid zW;rT{NkHwd(wPBisW6~Iom2H|JfiN>8p7`!6Zcv45;8!-AN*)g{L4e|(s}O{P(R83 zkv!NLHa19lgKGQ-r9kQcCiIFTMQ9NQIk-B232MX-O^7nRw*vehI8S z)Cg9bJY9Ppc$-h&qLa&iP?@0YB>^HRKv`0Z+cvOV8ziBH)I6Kd%9$?Lv7@PA39||< z&0pf&h_c(~xWXLgZ$M+MR`YWfaiVVR=7l0?PboD4{V3`JYU3s0994b^lo}**kSvJF zcze#ElvgmT9R<=8sX#{)v%a6DClD#k!lpj5PIB(8Oks`YMhWGU?9EK_x?AjRdf@0Y|~gc54FKSmheaQcluOp z5PM?#n z7a-=c1z@vF^;`xKu$9b8ZZDh<2oq!#Y(^PtR4sXfHZ{D#9|rbv5$g*zLs^h9wlAYu zQ|XHn0D#p7ri?Fl|bW>7vZ_0hhtg1U+n zipq_4=4;mDgN;)nzAO-dN=mdaI}Uo6uk@Ox;RD+4RWAVxF~R zq4kJr!7805sbFjY?<`i__T6#ff%uSG{J!@0I%scXBp;#9|(xwx%CU$7BYb~jZPMQ03%6}a|(A#crD|3;IUf! z;;H_kT`0TB=~MBz@z3*(;JAXe!uhXR5TCU(CC~kZ_Wm~ikM}{j3RQ=E2a-x z%&sK`?AOO7D&BW!;)N!Y}U5icLh^mj`s8cPzd+vWZXtN( z*|3~e!5Cjq$&ZvNPO}J*Pyl3RoTXAQLIC9=GdvI>fbt>*`A4<4kk@!B!VrMq zCBjYTv&&WSR{NV`BCzAcz1pfe%iMQi=jNvYpEr#PN|5&&CGV)$RBCkogA#(UPta;5 zFmc$CX$;eFiV}1k%BDjRPS1&BKCO_NS4WUXP6LFdP^k0>cOq7hyl#;+Q^(jqVH6>* z0}d{hJp~5A*Qx{x#-W3DHXN_!O7V+ffk+;i!^zr);MQaRuh~!*%~c0kVHQ0O^=_Vp z)duKTh4CYT{!@5dcKaKuLR8O>mXml=I!bF_6&bpu9$9=?<+H-6?O`@hQF%sOLK%MG zi_#bn!6H?S7)ax**BSWBKc(dW@T03B){gTeICPN`@C5#BfqMmgTuuH|kUtf!Vv~?3 zSi~U-jA_^}A}LmU@q@^KmBP6{$PcXR2>pWa{RhO`5RQHxu5#X zK-{A%eAIa!beBXj9jeh+3q;bRqo0jwo0a?`Pj= zE|YT}E4jktAYLX5Lx;$B;@7U0O8>pqQqJzas$gv5DY_`74rr-`o{MB0#1aIB_HT1p znbWEM*nc*5M8$zoQU!>zHDDix1lWW`>YTm`-clt3!e^5pz36vgSP)CzWVUGCqk#FS z6?CZTZWqL3xS|6cBV70_B;qJx=2-R@Az>g?xX0{!1nNG)_bU7Pus|3z4vg=C_GlFf z5|Jv1;hd@^?UbxY#>fzf`dbEV4n|8sKfUM@+Jfqlf7B8ckOVWY8v4~)dI_lrfo=a= zT#wGIxA1%da|7plJk=wu1T<`B4s*qg@;C0jk7Y25fkGRlNIZaw68-GSNgTq_kQ~OV zY~Nwils-}x5}ZhJhGKGt-cYXcfEd@rkH^W^PG9MQ-C_b913fLfB7Be&F#)~x-qxbT;YkY81PCAe(rHX8} zZ`AX;Z|6T!As9H(R;Y|=%0ZGzJ6Kgv969*0|0Q^<<1NYDh=bNDD+Hx1qM%oMg>{EO z$r7pnS)~88<(|Fd(-_4f=Yfk@QOI)iTy&YFUP`j*ecU83we_>2nI?tpTR+N+m4n#| z7b{cut`4KtMr*NU04~2%mttI;z(?ZntbYvpa2vKTN%WTkvmfY%!s22?&Jz!Rghs@K zh{T~FK?!G*E>I32j;y7}UXv|tCt8og{p|?U6)`WIg5DB6$a<+})^i_ZuqCOj*2^iq zuWH=NuoixRS=sW>DpKI9a1#wviOvss66xa3aTD#@ zCKaD}y(f`w-3e}@cU7Xz6`n-8PQ%?q&#FXch}`RnYZ9cniEdVjesiNICvbwT`$vvx z-6bl~g2z0G0xHpBH&IX}I{P+HBD!G6>1j97fhtk|Ydwj4Dp8Z0X#00Uf|*Hj3b~2a zs6=BLJUQto#Z_*ir&OZyB#F*;6E&zrcU|MjNz-YJo9IH7=%yrz4ssKXRf#gL^W>y? z*T+qir4oHS+mlFF{NqCm#kT?QAl!krCy~a}YB$l_D$!1CGb`GHS}a`=^IQtf+D?N!cTdsB!ov#u#CrLEfO>~?})GtZvj&&0aREfq**jpo0#NGA{ zb`x#kJ}|Z~D@jg29&G5eN+tSXx~Jlr;%#oC$5f(WhzPrM(!^ZiCaP75a+9>~F*nf^ zmFR#ZiEech9jg)zPr{Z;H_?77(Q8Rscb1#zn|}xiuJnqzM&|h8h6JrD(fwXA*Ss6( z=Jc>i^b2n!Q&T*}O?0D5bm<}wov?!=C3u}%+}SG8x6-?b=iM?l(P)(@m?Wor+(ZGD zXopv%bj9o3L|0D1DEeMCYiEdDd zrY9*b(@k`yO4Q-inOcu;%QkEor4k*Pq;>DRiPBY~-d@|HN$}u7Ca15y5fbEiwTf2J zbKFFWnJCuzfsxIQw(NuzAM^mscOmZL;}vjpnpFHXgT5xS&lH&AQX}Gki9wi8P+g~2u5th~ znH^jY^*Q7F{1l(PaHR(liu@)G9T|F4bYpp=0!jm0H;I#jmKLMCi5wA#1@-2*C$0(= zYnQg+Gn{{cb#5}HExx^&&LO^$bMpMeAZxeT#pmKuE#=?J#d&b8cz5@z%eMQ0l21%n zLPsOL@lm@jr<^{R%%}M)&<@DR_5*;7EKs%8mEmY?_s8HtcvXA4%(}9Xm@3 zM2tpYiMDJof~^beed+swiZvh?Jw*f{=F1-S5~{$7;W>4PnL7~aSTA9Y{=7BNa44%Y z0zK&1a#*ZxeL?NUnYz^qGkm}p@oSB;>8Jw2*dIGmQqYY9nx$NLmx!uK1p#7Ikjov$ zpv|G3V*>TRWZ|en$K5|z^V1Q5y89u8qnhRLbSx`;pJ%D)G}xt0)G$4Y4nAmohJn9n2F?opyiP-iQIrF$jWRNVh*d}-ma-X2{cx6E%26Tnh-lX zFn>wa{_G~WAN5`ZP=(jGFK(QYgVRCuu;E3`>`-8TJy}w(yBv^j>0hwBVG@ElLN2CO z`Qk3q*`ycjp+5(uC3OxgLILgb$WFFHcEOKv77-b&y23Qx5^g6jSM|3wrg7vDx1}h> zOol$_ZI9_w81emd4R;l9uEH#A&9LwooOT1w;OL8O(KhMB=@V12so+a25xbc#lq-6L z-g-N=zo8a0mC;{;Kk^m8&ac`Zf;P*4SSvwLT#1{+2t`j+QvYEZv@`8=svObP93VoQ z5KP6&M7IETLw`gZ8;U3(f`* zKI=FvlTJUb*dA~k7i5)9Dp+5&l&B%Oi;-a)$%yOS@;hDcI*aO8FDcB@#EIhjhOT~tgZK$ipU1UlRh+7)w=e(c?D{!KE zWT^9dhIRw>byCr^BPo#(DD0ejoMgf*k-rNvWT&c57=z$tL_wx=b((^io6gR7{=80L zoTyXPNIS&tnA$;%qrayJLbbL@UD5$CDwO?Cr>NHX+~Y>`CT1%rb`XM%rpmi*@4&d8J_lhI~dA4nl4a-$ygL&Zd6%+aom`V{JA_r;x@ zC6k69bas}U*EgX#qGfd0OtH)xHgg{Cp}0AZ^+Zeg0fl8oUn1isKS;hoKd1+EI-*XgtJNrhpBRDU3w5MH0?7e6&RopzWqL3|yh4x`H@ON0qBv$U0E84m z+-zo)&$mI4^`<`<*VP?}{Poayzf}XuIbekzuV4n{q2=Pi-<$S3!_8a~cg6{5A8;)$ zaFJGr1!h|IoSYhY%8rChUkDV*=3}Z`{>XJ&HIqw7j=GomJc8*dvVa@VzzRBy4>ibu zn=wcuTCMOhYsY#ygJ*cFmAab6`K=M~d!&~DyX|D^b(+~4RRT;k96sT`7~8yN!cQ4uL1&T((T4u6Z6nc3*s# zAr5bPe$Q((W3`(lUvw6lB};vUZd}dZ6tJeZ43r=>nS4Zg`km6@pNY`mks0HVZk&dq z!YiPdiFMWrii9Dzx+Nuoq!w&cOTccEM~Y(o@6{9o6#b}y@GjGtVs+}wszu&sV^K4F zROy;j!UVzpvkxND;qxJPtnz+GatA(f1_BPM+<+57(s&5XJY+s8GGs6ob`QozZL4QZ zQ%50A@xx6V!nNEVl+#W8qH3Sw@DP9d?QAB|RE%q*)J!JD4S^+RALhD=WUQWT56G6% z^pr_GxUoCG-~l-0rtIj6&;!MAFBeE&dgZn~w4a=KOrMHKL(4#41nRk9JlmP9>5xn6 zLH4n_n$6;`61oR9%*#`*r@UgkW>L|BRI9L!;6Np51d5$WiqVHgk9aOkk&t3}q2CXT z;LT{94!PnoxCc1H>PdNW^ukh_o6)Et@xT!#T7O{j@iX~?x)dyAUn<49Wu!uit~KZ< zat-+wk+yw9?>2H`UQtxOIv}~IJiEjrDs8L|M8(0Ce-xEwUTgInGL+WD->73X>sWzW zb13g0I6F;=v2OSzo*&9xUwX2_rH3D?F9Lo1W*@0;Zg_x8{uC2zfJgm`>L zq=0T1Ez@l?fhQfSvd3NydutAJaBUl`4E2H$bt_CctRz9i%4ov^6JzX^wlX#H5v|OH zj2wcI|7|Pt#LW0ul*h_!ns1~>9#V9k8jxIcE^cvoz4un;(cfw-)0y_1EzQz zDA94ZR)0CMs|FS&%j#~?$&Al-rq%BfvMPk?7qe;m9=I)rA3P*}rec1gQb%A?mP=V@ zG**_V=SU`^OXTy9F>bYcsB>Z?pz*bVhQuuSjR=vl3jAP+8_dK_3_s9cdVN7I;}3gS zUqC>mEcMh0T1)G%QcOadFq66oKFAzBWl`!-hBb<~XZce!6=~w zlT#!@rR?n~EGi^%1gNaiz@iz0Q-d`fR|V>BgXG}unn0cEQlb-LS3eNy7&QG*wyeww z>*!{me{nZPG5ge{IJP-D0y1G&zk$Tpt_$tVu6#SR^N7k7VAL4mp<1{ELYwG^c;c}whI~h1*_2LNWi3c#NHniw6XiM7j6<1 z!BO#c$fO|As7~ScIK=&E8d_A0&K3W7-z0ZZ$>!Otq;{W znLY(Q^v;#q`s|)6^(;=ZQhdbm5z%$D+Ne>ZsS)mJBlri39IR`{*D!T`b?wB8*aN>2 z?FGPiYbQyi|IoR1XY8?d{o-nOG;2o;MOVump~jy?s}+5f&tknDzgkX+RW{Pw!RW`c zthL+QS?}%bte0sW6x$JqiptUt_I3`Qo@j^4$q&3A6GHKI(mgG%+n4f(w>4}z-`@Dw7(MFlNTf&Go2e<^1u{Xd?*jeAV>JCCe7eNE z%>OP>YLYN3iZhWm) z9}{0Ik7we$xf2`K_D;@*dvUz8mV&N5lSgNP2Q~0w6ZFGYk|};Y2LuXs4Tyda!oZ9L z8&Iy=DoXdLhTp*-aAvrPfZY$?p*=_lO*}athLhe%u3;yF` zrk~bdesM%@Cnxa^@B)4Q`D$|Bee6D`^YReCQSLe>q3`Ob>}B0!?by}sLu3}in0Ce| zCu;U$m~MVcV9^S={$Kx`oW+nXo!Xf=<;s=ZWSqq&cm00`ztYaQ&E#cg{7JHCRj@uz zvJfjvFCYmxN}m(IWZVtF$VVbou^vtwUIMe9V2eVV0g|bVSMwjmf6%1%1D9u21rV{+ zdLv@KV~#W7qNf&mgejl32_j3hky(Y7W*a;)KONp7{cn8MEr;Lu`HhqJ_8#(buDTvg zDiFccO-g9bGu_y)=fHoDyAWgzDunwxpt6nIRd)unSl*06F#JkZ!2yIF2y_kogr{h~GBKVyZ7}*>+YXz={wO$%HytQhdK!n-@u1Z=Cb`tbo zN<^rBL6EIqyp{u86h7n*h7?m_vkzzc8uY&E7W$;}(C1+dnQu%QvA6CGlZ?AK$4hSi$ensO!87EiwP{Xru9w=2M>Zt9D&I9f; znFQ;Jmt4J%E(msuI~g;Mpkgzg5yqtFgql|?HU8rv9yLDiX%B^x8k)DC5=p&lI!Mq% zV4cwZeyYC!!qHelKJkxl=Trt0AWLIK%`Bw890c92IC=H`BaBm`>R_+3JPT^ zpLDU&ooj?l7fu+IA|226+ns%%6uewk1-z_9m)h%}piCXFT1C+8MZBsB<6*Aa`yD@u zm@!R&>qxJi5paS0dUO+`Rxgoo;EVHw+ogg16E6%*F*=<@$aH@GOAo6dNSIZGL9+n& z5-yeP&T)_kXa6x=0O|x8WRd+8 zelF{s=LWXih?Xx?>WWNl9rF@IZ~RwsL_f5^gXmV4*G(jaby5hb+hf$lslEnq?=Nuo z#Al_y`YOxm!hdOjJE7q%{>!)-#cBJuNHvh@3HFbY?{!5FFtR(m^&g1TL&@opO zSx2jq{__xoAWJg&GgysScecd=lQe(RVM&r-lbO` z34gk)|C*;v3Gwxh9@u65Z@j)!{U^#EdL*%Gtx*8|_gMeo-Pa%bv{g-JK0)bIh1aLl zkg=_=UX7We8w6g^BSL+^cbU91@J;cnAofNvI{kB#=|t>)#W{jXA3~GBK4Vn;S9D2{ zljT*6C8A^s;fWkHu6Ab)coVSyMGkQhEHlwot;iVMt(U11Eu#cMGP*P<2D9t7&N@Gd z5r#E>Ot%uPqI@F{!3gEK1a4?%#kUhhstL$Rmd@s=c@NY6>k1{ zm#Pq!A*KpTqbExdV^EJuN(0@KBMx8RQ3&xv8!@F-4h`s}=FCJNoG&-PfXl1yp49u{ zCF1MP4;%EtSgj^CpzhY=%0DZj;ZeJks9ECt_cw5_uw|2;b!V<9BH)uPdGq9WecV?l2OS6Qja|-epbg7;Myss zYa(hc#y{wXW~CqQQTm~o`GucSb`APL^ab>TfP+k%=hYAS4E~Cl1mT@a+`bIjo6jD} zNSa9XUQbR(RohSm|A;TizIJIdelCGD{q-n1=vu=7D{8$%YwR$Z7JV2^kgFiDj22VM zQrA;c!9N?IIG#T!0MLmN(8% zw{MahV?toDs1lU_@HErTLglylor;9=jcLn&z=L9{9HO`lSN%*w!zgutdW{qSsE>XmuJKTU`O0mV z)Y5^VUWCm9n2ej{{M7QH@HdZ0&*ck1N$qE|2JLhQFnMFlBeErKkW> zUg1BSLYfk-Vl<`rGI0BVn97RjE5_5OcaEi?S+pll#Kp$4LC)Kbi&Z$At?)bNZ&4LC zLS!t)pYC@nOo{^TC9DyBMIBN9%cZDR1uS%YeY%YAU!paQ0Eo3&YRm~^bJiv?zK@KzD1BZFSw;U@lnL~?*a_%!xdJ11vuPySLLFvN0p))D%J!Xejt_fS06&#f1u3}q(^*2&3Jr$$l-}&R?fzMsu+v#pwtBx__lb|hoiQ)V}q0# zP{E<)u7sO@bm`&h~I(Cn`Gw z8vB@a%6ULYkTdOx^n#T$dcjCx3DI1&-b4nTWl_NZEGmGMp#;A(L_6<{2vwysZ^#wC zZw2PMYXTvOZpk7AnuN$?On8l?qYA_ooym6w8^eLBF^*G(eXVqDp&gzbMPkts z0dbj}M&-<0Yi3NqXS$;$R(|w-$b|RfImdcGrt)@zo{!rxmlvDw$>~Vm&%P1{nKHrh z6sNa*#>A*wS@bCsMB>(qW|r!5>_B>|u|0s$Qs`1RRC3Otai}`2$!itC6ZgsuK#e$4 zc~aRL3*r;%zzpzrWlU_VmDuKflU&bix!V<6ZQ5W*7NSY~qa6{%>*JTq+=t;X^zAo$ zNs^oArKGT7`)Wk!Qs|Jo^0Ma=oV>fm>w5Vvx!iOigp~W7c)OR0{r|tQrd`bMyZVo& zd5{E+Dk9wWy>?ill;PnGN2`a~L{qL0N_`TO=GTMwbzDCvpLr&C~Hzvt#-a`e~lhPv)?IOZU*bG#GJMqQB8bG|Elb!rhl(2>cKm@AZ>!)xtQO4Sm_cOIm$2FfQ+{`7wQ z?SyO>`|$(u3z-oZ?lfryez~q~|zQI{Y8Bet}BEvd!$FwrPci@g#c&@d0WK zBf+trlW*0b9$2v%Ob4d`>cu&0A7eK`x@Q?T_DgJ>g zfy)eq#gQf4Kl*z-dE<@GC$5(!!76_6WWooggXDJBCW$W6@a_u@jK!MxWFB-NX2LWc!?pn>*ZeYWjw)66OM{CLAqFg1}clnyYbm^ zto9z_vn%*Xy#2I&R(~!?5XhPy5fH@X@70Y&5zcQo=mexdgU~W)7B&xe(9RNN5+#m4 zkrU_-Z30+k^KC9v$+v@;Ggr|ebXUW&@dJ<_`1CMl2pxlBK`P0HLm&8=<+Sb>myPKZ znf^Xntmk|G`nPEDVApoig2v=m;?ZBK_LeZ74ri4Apnhdm7~S0J=Q%JN2I@ z=kg?M@XH!zk`m>V-wM=8xNIQ`Um{+$s{U<=3P|;%MJ)fMvq6iWP>DGADUlwn%q+CI zl=Og|=RYnzM&02l8yu4cOFvn5W5>|n8(#HrP1Xk;CQ@mL?NUi=T4**`rGr)~Wa8wU z1zK(D1dl{|$>P*5);ssRokjT$K9Hh|W}+ooLIO64H_rL#it!=?fQ4b@j&x<8Oyz|> zGEm~X-*wCk(VWZm8Hgse$z{|Wx2efx!#VLxH1e=GK*aO`c%l92?+J?9&0A3AZvE+O zCDDmH{$T=vSJ^9FS?4MT1L2bwisDkhb#@K;p?pgdIo2hfj z8r6~crmyM9AgweZsGA_pHJv;&QQXR81$ph8(edjpxPSkLQH{Z}ee>iI^CAvx|wkJ$rcvO$I*V z*9XP$A@<^9cD1_DkEcO58+%c=8?HO)A;fa-bOSsbx@nAiw^6HfzXp(oGuqj6NT*)e z$Df;C88CrZ+O8gfxsY%`h{`3jE7hEhXpGoMSA&IirpmDQDd!sM`JU}ROuqCx|7>*W z#E=m1Q4Lz71xA^&Er15WZu@%aESyigXA%Ns8gtHLd&~|jg`GFGoGq$@nWL7K7xG0u zZv(S0(X>M2&}Y=;H|W!eo%6aV|7UwFUrGQoX8%a)c^h|_$vm}-%vUt*iB`7n%jr7u z{ZyJK>SrHIZ*)@a5F07bOKPVm@Jpe<))8?O_{G6{MS(O)MhevG zWhpTVJnXKlzQlbu*Ezdh;!CHi%Yh}(0sFXNrUdzakV4VL{E`bWoTuf#N@f`5vc<_} zd64LM2?t}Q8BhO@pvK8Ef-&`ku5g!eJ^Rd_%r z^)+l$ocf{?z&vS$0gyW;H$>%-6WA(?W~zh+OLR`DnyH6+NT))t&8|Te_!rk5N!G@0YFq8iqG$7p0*C4qD1AyLrtJ092;#3%^{Wl8J=Xqy5Y8CO(X#$gm47erLl zfQSKSl*I+a1$ERa!_45yHk$u^&%L+0y3+~5e9!a!U!Di5y6V=w=brtXyU|bsD|vi` z{Pr@3C#ASpK ze++$vEvi?MTV8j5E(B*SGJ}T+@l>3@Hc+KD&tHmlz+dyUZz}vHa#ALZde+Add|Vjs zNWP%b`35H*6Q6=AI5o6a=yoN#-9`+iCS!o`11P*r?O<0=QZ&qC0Wh^rZ-&X<3;8ir zs&lTkB*r=mK8a*tsS1Vom&kwt*IQ6VuOFac|GXralNb=a0mlPw!zM7Yrbueo->69B zKVdWmrFP(2uX)3L&RI##8`?Kk?F;Q&4F&DnCWQ!b{i5b~QME+2mD1UTR_A}{6Pz@V z`&-Xy0M($maZv5R35PY&6hC~ZGzCO}DXYj%Y{9Qbm7`_avK0NSI6?TQn3jcm8OJh~ z9Tx)Sy;0=}y;-}mESE`vyHo))syyu`V_AGOHCY9CKqUw#OEHN`EbMS8O#5=ofy%-b zH<(f7HqsK`1-y3{RhE!I7!g=F2lLQ8FY!D|3J|2Vgq`u^2&KH7nvJS&+3bI&hb*UX zx<@ipcD{CR1p{DQQIAMV{6?pmIkPM-Rr}m(~oGlnJ+7sWU6m zg3N%y=pl6@O5``(CHD=naJ1g-&JaO;*HZmXzcBc>(5Jgn*pieB11HGx%vAG2kR3Va*4s zv!bin#q`1PF6OE(X01!z#mlCcI-BXD^ZP-7^mkrNABPvJU+*V1QjL$*6L$DJb-cpg zkt_V2b@Ck2ROFe$#15qE4hT7l$a(0Bu%gWN(4!*=%{NI+U2>eITGh!+fH{v*DFXhG zUMq%7UDLHz3Qx)rvOH7 z4_SomA+4Dlcq&9bRn=Sw2{qFq;g=N`aL>(^9BnF$ZYkKYrC`OLzJ zYF{^RK>{44%J?MIo6@MMwMPg1RI*+=H0~?%v9b4@C2MDOJD-GrvIj+_ar9XfDU_u* zC4a1tBjxy3vFAXbGi7cFyg3YeqW)2uLba+oYIQp>pluVR?EcJW`SPeUpBDP+K}I_e z9cIMGyrPmA@%Pjc)OoTeL26PMy%h&F@{j&q9k11^>TyB#*oed4%R0ALO5F5Ke+Xc$ z378V(Pv_IV=l;db- zD|J2JVaOKse08X)=cVh+AxH`J@GEDUzn*~9(^=OuPt~(bTpt)YwdML_zFWrEphdc~WvxLK@CZ1~Shi*)JFv8r-W4Dx zeJ|v9wrYak$HC`omH2kAHNGthlu_qF3aD=FtU2T8`oS&#t)2=gD1tL?T)$V2455B; z{jLF(rpqi;xPGW43?C3fRrje9^!-le<1#a!Fr7#wc#t@90cC@7V#a`#O3?8{x^tXf z_EOpaEe)x*10AF>;^ZLj-3+bwm1{ot_bFM0tvVzA;=?0U2sArSS1;!Nx7lj{+kcUe zQL2qWsVfpTI3%ee9;?kGzF5-(x~7P(DMq72)~LY{AA0PYEb{%$ac`%#Sn%O{TMGl{ z`9k*-OLpLyYfbM=&?y2Xy$js!^$xrqLdVSXH=S>=1J8!z>_y$I*lS9?`VgH+82uSo z?o(?d9htSc;d=nrF*R_4vC_Mm0yj$_P(vm7Jj(~1dPO>a`eth2{ycHtfV=6Ml$Zla z(ww*MYzo{W4V)MTJ5cHQQ~rq${hI;qkbMO1!%_oWQ~mb9V;*qia5+w{AQuvaBkNB) zoQk&sq|S67W-?K<7pL(#SVG~>O?dR4UR5F7NKzNOr3nR=@S6kp2s~Rv8QmmE&^yaQ zc~s)Ja6uJs@CUMu9u(&(Ri0$aU7bia2~f3nUsDUc1 zLiedv?5xi&*UDxo>XV^8BX+kwvp#J_=+frH^Z)#Mwt=P5(%G?+;=YGVnH1^i*^HT*}dAjVSE!}2Q? z|G{&nokZ#?O>{L5jkIsfq{E7V6r80p_ZL3qF6v8h^D=#ru-*H1@gkV{*WuTR>f2e@{dwXRvPFM^3Cn^h~3nvCl2PTW0uCU{DYVwV! zHGH#--`atD`Wrk7c;wk}O}?qq?bP#Xn8pr^FrvAP`T48_sgWmEB!jq4e<}*Xd>W|} zi6*2Y5Alo|$yIp`IX~t`2XUUoKCe9<-X6GW6YeAlq3> z^(xB7>mcL-742VEbE10x3|VyhGN=H3@mO(7?=co0=i;$>5Cluf3ILP~Ovjkvo;E10 zB&K)OQFyr1zt<%`AZk(3o241I_} zv^YD~wHzhFc3CDR<{&AxAg79;@H|n(b>QP-)F?Y50FJH$Rr!3D$Btj%L0PhxuT=aV;~2+6|$Cwi+EmYZ@j`L;AkO~ALhXiNdHIH$-{y5JC&`0 zdwU5j448V5p5!PUEixU=jAcC8E`)9rrDJcB+P|??-~hTP3@1zy7&vY>${i4fgWI89 z;YX7%V_6mQU2z^xGcAWH`{qD0b`kUo4ug*s1W^NA=^|B#)(Nu@ibBomPw3T!sFr`U z+)5XWht^SfRXzK`S*Mqi6g50g@KbR7-k3EnF zrT|Q_P?-8h=~;Ei1z}i7SO6Dc;h#Sb*;A@5R@I)Ps|~rQNdV86H91xMM4Ihv-Ycww z56j#wA`xI7oaAN1lB07Nd7Vz*IRwv>vrJbF5$<b<+9_$0jI7i>zp!%X_dfjtzomncF}tY$WoS%>0KkpaP2 zR$JC$-;!Gy8>2CJ0%*Lx@8CpE3wsh|5gRPwoe}g zqlZamWg+YgzCPCbuZKd+8!Ju%H?0Ro!0S8~J6wuuF|HJZlH?&SNx?Bi5}UbV zU5aW(PLCpA0W^_M(O7NOOdjWHy>6pSWWY?nZg?Ra8vtAl4T{bbuTLO6uv0IIt8-k!m!u?Qp@d6*irp*<_KjDG zV83-L1p7=+u*ZfI&JTHz?WWj2j?AjIropx}>!*&o>Bca3{f&FH@$p2}jF2xJ;k|L59xFXKm^~P% zGwccQPZ|o?A-dziW*F-DzTYy8G}leNRB}o8LvS(VX)T zR_8Z7XdDH7O=!=WQQZu_qA;QlflW-C`C;;ja5AYyL2!mIQ5-It6Iqy#%AB)@27C#G z0qxxpfklaa=m&LQ#^~PdIMYlu-yvfXA94Q$3pOFRS!E?UPP$0ETq_V8o-eh9`dXweVw+eiL+tT>PoH zV9=(_^8m-d7gdIxHTO}ytM$@PDVy3%CYg^SsB)N(!wys~81gu1^3d>`12WMBuq*-A zP$-^n10g7_5!qBeYPSPPKnw*uP~Xv^BoPF1C@}?wrmau32A3vUgNINbtidU?2CG9w zAbyf1fIILsVZa}eTn4t}k?gSeVh?(VlchS<@G9*Ahud%YxCMLA=gXA#po%SsJ;)$T zK6?P<7<<4%?%5zN@eGrt?E!jjG~mLoRVY(Rq=jh@_zmnqR5?aK4wb`XDQ1X)As+W- z@nno98` z$U$~d%tMwW26&Q;RMTQU`>iiN%VJfw&S|B}LtlQ8VRYefXjO38r2vk(h4+2A1-uD| zTVW%(w=H`mqO%@#*si(e3EUZEfYrdQaImq;b?!uYfd`QlSSYJCjk*W+@H>TZG$o@Nhf+pEn-$&Q?JHwNdq`X*?AYq;Iq3A#b41DL}!lsc9DXn|7oOz_2t?L!ROpLMsN z=tu9Rs;P-p0k>>e5x)mdayKL&CEUkTu8JW4#US}x*338P_;Rk$d_HLeSOxP*-h2=!tSDUIGhypgi_n9F&GvP+uY(Vl@-tcq?qTJ&b@%wS@0# zZvxM{6)6bz&A*!v?CbNA3HC}dnU^*F>Y3!P+(yycQ2(YQpwHx{A67Q`aHGKKC&r^Z zP~8w?f}lzZ;~)8h7KGZAOq9tx?5{7iLd@NxSi&q(hkiz>LVAFK!T(fU$M7r4K@QWL z#aUbjDyd01J5)E)3aYCK+P9FonxefE(B5w9cqQ&T)Q6t7>IKb6OHOUt&L{4?Z&sVS z&#;yR=A6Hs04eAip75yCjv!&5wBwWzC^Nx_&S3+SXzE@Dj&P=o6rZ_5T_&i@)#_5B zE+f_D+2d$mp^2KeuagGBwgzcivuRuLU!ZUghL%LKV={-B`A!7g2J7+lmNMMvNDfF2W|R2g%Ig#+A$x+R9a?W0lTnF6>NUY;bmA?1Id~ z*u}wN*x+@hoUjKU3(h2_SP$#AZdmm7f*qR*R_yFM?3k4o*lpSuaG$w(`1ZUWb?4R8 zmERwZ4Ms4zJsicwz5t?iaWIViQClP3GPo=pML7dy;^dLY<$AXeX zHR)*WTmz@P_zBuVzd(XlX$^rH_p^9|zh<+cSicvHd#(C(oB4~B*9y8(mm)b=#X3x4 z!w!t_zA=L+PKo{|liy^sED6SMC5|&)Lr)+l%dhs!NhcPx72rgs(%4`yksdh*!FfhZ z1S8SrWTho)*@1^%=%CQJNY7v7ILwqC)L-c}m{HSyXJ5d;+;jzmMla)MYPz}R04F#N zmdWcGXye@bp~75Q!)kQ%B-7~WzD8g8$!m1Mj(u;mv}vQq>qbkZ(HEBLp1!(H!NQ(? z_oLV73H#A#Nz+E3-mGdbX;|%a93gflLtVyog)KP-M$M<+WqhSAbw=v-YS1Bf^%Lzj zi-KM&LJ6Bhn^mh)Hzt;9Eu{kg7|L%YU6HX4_evXKUNN;1wvs-Gvc#Dzu^!A5 zBS98dMTN03xx={U%@`CK*6Vd^=I?mZZR4=$COxfi*fAdtYqh?x*XtFJ6T)0-ys#IN z7vdN4$Y5Wm=3JU%$bC&+#gT+Qk3s>l7q0^iyW=FtFx{fEf(lM^?sL#vMDkF24*&>+PVx$UWjwcyZnjv@o=L1z;r~&I-{EZ`gNOO)- zjo)M%pXO`)ig@E+|M2S?N64Je_;lTPe!~Xmiy~o|b321mK8Q#4W5Wsg$Y-blQsg6} z!U-4j6@Dq=1*k{=IWu+FHpMT{6DUQ*a?sG}|Ft0YzUMSzAJ!8TDH}7s^ALMzQr}RE zLTo+}t8J&50%(>Z%x+wR zrb}>mgOp%j?2Ly#Z(@_LZSdJ-Y(EM1mi!Ft#nIoy^Ma7)YTJ zQ>dE)$CusUHwax=sV(J1l=Z3g8nkn2J4kpmB@wzrD4HVVEsM*Dv#0M zHHBT&^mjHG#rZi%z7=&G+XF`&}|MYKxa+UV+}dHCs}{T5kL4$;wEMiQH`R-m_aW`kVJh3M!*b{RUr%{;3vR=JeWt$+lK>g zZa?A0I0^7iDgf+ITH^^E{{v7VZiE)2&mV%w0}%ubaLe2e$k-D#*wGD56`Q6oEXdub zuS8P~4<+O0KEjgBT6j_!2I#v?=%Nag|7Q&;Hx@n<4 zByUk)!Nj5ASjV?8)42R>3^<`J&XMo+Jw{#eC`)%kF_~$O^b0Eb82~mktOKLI==`l9 z5r_nSv1WXr=-HHKq?71SF>jwpqR2~u^Ge9gip3HbTt7mIT#;Lj5NIZqj0uC0?HJS7K1sQ3 zeHbF)a+&x9pEu0uu|@`woK0ad%?}+0Uce3+abW=olKOupbTLR0rp$yWGa+mfg-S~p z1JdilFOJ-DZO3-$z2|xr!SzA}ctH?RVD_+H^_KmnAn7Cge?hFx%3<7<@NxVY2JYhu zk>X*!)>mZUS8x~-^##2)mmkw(3#O2j{}HjEG!?}K9j_#gLSUq@xInq|$nuE1e4I~? zZ6w80C}&iI?ZurBPm5zENKE9i1JGN98!jT?zo&`$bxYnjf=3tW{K?=|q(3{xqlThQ!# zcZ$b!H)^JnUFK6TU7Pa+n}4@}&1F8OOTwr2x0Cc)m=b|=AEDsYlxi^Cx~WqqP6t!0 zNMH)=nV7^BC1i@jCEV z+sX0+#-zDU0=?J7a}4P13_pX>*Ozx7pt%ZAEl30^*Ke8DI4=xfv%-)B4eSIV=nk=f zYDu<#>OI7WEdTo7lHmhJwQr&1cr6TK4q#iy^56^u1i%U=faRPfKqS|fy1&ZEVgSxx zrx@97{k^V8f0FnCZX@-39`$=J^*b;@`K4~g^2#*UsD6#-uNYj~7^dYB4>YmN5MO&b zCk4V&>QT3`F&22@E4ZIZ!4A(SgQrss2T@^dTdD9c<@OznDM^{Jz!Vm@N2K$;95@>t zihSgNe1>$fz-W0pG>>m(K9C)FOd_NKd4v-%a3+!jYna>>I8_zTMK=0E)sN@^=@9JK z0BjXysrMngm(N0YjDM1;W7i|A@?cTgf@$rc4IFXCVT$B^UR7})V9;}(?2HeW zbAkep2$oJ4mc~scZ=45TH`5bD3k)qo!89I_JdD9UO30T{NWgUT zmz6_dFhL55&jf|6TG`+WRm{SNNKOS|qVRTdW})2=|IWu$!p+v)4s72Zjr=xNPp$Z> zO*q=-tXSaEFDM_Ep5+sei_Sv*&G%p;s=o#4_W_v&(Qga8tq#}zWX+idc@iIN0&c9x zOF-q2SkE`{j$X#JObmh?L}NboJMSaum%BYkDvH?4fg{M$0lOvXId-Nj6y@R z3wyn3*$<$M75P1?D~OeUi{-~C9KkbPXB(@wg1`8916fpWtJ?#v6xa*^0sIPG)zF%U zm8p3wpak8$#mtdGW^~0wHR+a8pu)M+OB8WT%TTKGvi@QwEAE zDShE6E+AcPp};B=XYf%dSlDZ|Wm6|ukuo9nxjVv*t1%B2#T%`fmk2H=#`gMTdU2uM zX8pie#{8{))6PTY9cusF^~!Yyhz?7Fa%BWjpJoPPI%mqd6)jmnfRsbuOBp_ux&INW zEH?`_N|!aA62*gsP;t=dUPnei7(|%?BXFXRU4|iCQ#%oaajRtj#l1lIoD=e7fTIlu zGJb1T8d0HTS}5kcAoDqBYnvr-O-cgyXmmFcc2CVr3x;EpfK#PC3!;_jvEJ8w3eIe_ zYO%p;T0s;bV@f`_e;#qg0ZzbHB2gnmVG|$PT_2mmiEvnf@Z>U|Lavi9WX2H}$hBv^ z&_;&~HD{}DqoS+8BJ@%&V%n}KH78Jz2piYGKWBs;{--0Vb6n%c|oi4#h} zsu=7iedS$hFtx}ZgMiK-^eYOidof=1_{n`+<~=OYvlq{W8KN=3Qr*8ZtxJamJS5v~ zI|Fh&i&TC>oEx>+f)oIaVhdJTMEJ(AYV<|vhvZ^zAG`(tZFs43M`KzHe$`-v2A6R% z`(TM0nq?P7VcLPGn?m&@2JVep4yc;9GO9NB6PbV0Tru|*1;-zyRE;Qnh2t7A>!Lu} zsbaE$;0N2ry`ylYh6rWY;^K$YY*q3T1R07WQ$DDXmFVQ3py40f=bC%0FKBC0)iwGP zvdG=Dm5_jq#gCmWpOYQ=DaciR3$wsL6kV7gS;baO#A(Pj_*xov9y{q%5J&WjXqx$& zOrxMlL=$NTP`-C6^`wA(Rv*q$XNe_DpT7@|M<>x&Y<<`4vGEN0OXsXwvmPeN!LRZD_7Wrd00V1L4O%IR>9 zo2Qs4NT@_9x6l*^1yz0(+%@?MJwlcCoL1JcjEc?F&BU@WI8*u?(#{6HTI_+Oy{NL} zBL)~hzpSdvYj_3WLr-WW=bN6wGtV`C(CB^=ABa=wmgIcjPN8?x{g}1gfe~ezQj`;x zqX}=v%Ann4+qgWR8p!03**EFA$+|7Ht20DauVu{opG#uS*dLhyqG`mQ`n(c z#zFFGL=iCld-#7K96%NS8@wQ3&~L8@#WFtr0L`PhlCXVm6~4#QPT}aSyd_VS;)?g< z!DbN|kfk3>6;tuj#>R$^NxoA5YpMah{vBSE@A4aJ;1A&;Y1hv@q~b5pkz+YcGHsmD zn%{QP#qgY@Cxc3z2gE^K$`$8Jt9#2J)aaMdSl--HP1#`N%tuiK!Ob7C21zfTS+KPMfuIS8mY zC%s{2Slk9;YnwPksLZ`y3_Q~rz;+m55C5BqA0$a3+ZLCbl~q4HpCW!>q98gVGnTdb zJ#g=aiq7FEd~wXqekUB2fyp9vH|$=ln*wD7<%TQ9Xz#3q#X_V`al>mgUsdQb{}|oO z;uS1a3YIEEIzqi=DZb%f{H^ox9+0dUG}PjpEYEXUJjM7r$LosluRwSN0!$RZw+`tz zs$)*$dinvFVpl#yF`r~05NrU=he-&G{pQ02B?v&Vu1D%(m<9EKx~L;?mr2gkbv67Q zDXBG1H^O`oP(+xM`0M{icqi{}9$xV*Q{fjwt}@ejpAZatj6~vpjo|uS0C(gT71qdy}xVAZsP>E1X)Y-X|9t8SajMfpAHawdo5C27d zt9GQSuUBgLpklE_PRjsJWQETp%IkjtUrtK+_8))m{*5h!BS)&OP|HvZ-}6_W^!c(BgnXM06CD=~e$3islUiL5&X zrh$e>1fJUa3C|0MVSf1aH(Ir7+e!mX7gHFH&oFUw0K&|ret_YCbNuMELEOaU zqK8Sh%MQH$a+6e37!y5+G`JRZ(?L>x0mAT+k7}sQ{T)Mv7T!yK6c{Jw`NveuLS7Rv zzgN=iwFWP=!cCbp6zdnPfhSv+Eqs7}e!rVEfo5KNvkE%EaFWeo$OZN-Lzzu!zC2EQ z!f7LBXu(E_8f7l%WN7;dC_np;VatKCLFZbSnLjQPHu>*=?7C|wR+VoTttT`B~@`k9KhN!6jKktvrknurW3Qk3WG~1FXveAxt%dcpaYBG zZHPN#Kd50F=7(+Tar+3H!qDd5#9>Q9ULRQH)X2;6-T--jekKWdD?H>azQ>2WzWWNG zLSDWPz$E1Td~#~!ed#^NStSCU4|xkT@-qFfJ#y?mAkV6KOL64^73J0ory-SjOz(W-<5%eS^-&inN z8ajH^q@*&*nwfs`7I#moaPK_n`i;4zM!jAk38kZ zEYSc-N~!l^A$`h^@BfDM7`O*2&Z=2~x@o@2KYebjRRl=_uzntTA2+GQ1oiUbNg@;0|<%xEV+p54kyUE z!`{6su(i0hXi`G?5T6#sIpH|dHOR+&AEMvtx-Xs4yzDj#pny!GQDz#+@TnO3956H; zdm}xMJlzBb=?BMgFdfrHs0RE(Bh|Z&*m$$0hW^F@Oux4d-;sv5iP8NvhWXdjBi_p%ENT0oo?3nuEzA7d6GDhjbFlvT#G#{;!b3O|ESkfKY-~sds|Pf z=8vVTwH6E1%n9W{A|B(8L_9&%DqtL3 zwd-W7_V)s%8Qq8WTL)3`w4bcRFy1rB=bQ!~)29GKUewH&S>|QvJL^)=S$xeR5UuSp z#UUgbtTXlZ=Iasz4nwqKI{75EjvWJ+*5k@Qa`{4Dz177!W@qb1_yDgREZ(KBTbs4Z zDvB|m*b=P4PjOz=ukzI~&H#@C8`=Me!yHyHAKwhj*B!Z!FiS8(n6K>860+Zb%hxQj z7nzqpcCkS=!>k7-&W5PPC1m{g)W}|vy^nw^oB{C1JI4WUitO>)#Z7_i;rdm6xHW(# zUW)iAc}t9jG9J;6@-bSCvJt+w z^T5Dbe#)<-czECa1U@t5%*)$IxNEl~-y~N<4Q0YzVpLuO+9Q+5fkF>T? z`bF7Fe`C=&7*@@ru)+zTyro^%^ze>NMzfyqS-kyHQ94df-M&%iU@9sjXNqaxy+z9z zl^pfEvtAb8nQa=NDw$BhfLs*|Fgq42P+|067(2v{RJvJ zWe0{HsHaDFxP#N9XTQh+WxdyM>|ospPMG5q=X_Qi6(1rOn-XGr^kpn=50TlQ%n1<{ zD){e@=9$uwy$fYepq&t0<=ByNf^-Dex+G5+L4t48*}663rTby!PboKMAEe%6Ps zl!$1Z390ie^Bn}ldvzbeJfm8W-+?qqiVdWy_Ps$;C-*yRbUjoKGbos%B>}lI6(L24 ze&bTBoM;E5a-a&u41kTP+W5!Jr5@2a3Sd&Kcfw zNM6l4B8j`KQb3!Yy#%UYE>^}3ACa3V5y)66?KJHwc7bV32u!xTWLno*-JV_0lhs=8 zf`apnj`1$k$e_B1@DmZarABzBc>`3B1Z#Uv&_Oz#5Vk!h=-sgj*?`ncl@50{vwJguPQ(;K zR-Va3V9S6ilwRnyih6ydKihjw(!WifYJv2!V|d1-596d4i-GfV<;WpDa|b{%BBM5Y z%ldVs2T!vX{G+=draR8tE%&j-Z=I+m!N{$00g@+wVUQen;4Y&DYmSye!!|?DWh44E z5lfQ38$%11u%47OC`!LrK znO0h&(8Qqv;0U3yUP_urXdsK=%hvF3ePV)I^=v!G1;OP_5CVddM}D=rQGRENz~ll& z?>}KsM2#kV_{im{wNpce$A{FG2r^3rxCFRTK1b11{czTN02naFUU19pa5zvf*~MAkB6XiA8K8G?E} zGiICD+`?x>Xa~g3Y%JSTa9Az^HwA-X@*F^LtNSukU5O zGb`v-n$rjK1!xzsiwt%iQGQdUi+u$)E1}9f(E|fz8F%6@|(bTSeAwTf$UPe#cF=}y5swtYz)T3 zRs);}jYU!z0E^uS?#EzPjSDj3NNJ9)$zB1B6B@x*98BL(F4g zdZrLM2LYvP;ZYaF$p^z?*9-RdO_HaHC}EWao}sTr=xolD(%EbPfh9NLY?lj&6*Xy9 z-kYm1ndgq;bF@=rIJ;PG07D5`LbZyy#3#%5oX9M5E2*FDz^?n6u*C1bkF!Ka1(3oq zK6T&KfGgU$uj41GzE8M~j7HGT_COoM=X(RqIV4@UYU2iQ)l-_QjP>#BKlm=&)p+ZP z^i8X`iHXE`s~CUVTmzkUXl}c_Hj&%Ra485d$j@+KB3bAMU3QNsOd$g1I4^ucGaMG( zT+KJpqI53aTBq38o&pNnXRQ4zZRmIa2X^1?JcLR8;n;O)3=&nW(^jP(k>msWYSX61 zuh9=tMnT>8NDq8 z==|gTB6SO_&R3gBBKIalu3kl&zYg6QBsbfEQ-0L6u80^~+ZmhtQ%E7t4feH%(xR(xbs+0-YW`}pN=KEFekyP zJR`uPN2^WJyroZ!&UXGCGg8i@Kbl9A-g7glY3J!SB3YB)fn+VwQyJp^1msEQpZjz4 zvYGun?ZDc>T$=_5p#7}|#~>w~54FS=5-{u01POTZ7jEIIB!Flk>roBJW{+W8CuCr~ z;;X6nnrFzSIp@BtkgkN_E(wkG0{qA>B#>{x6KiSOxyT=v$xDE;I@Ah7fqFy0WLq$R zA4H0!>|Sias}MtN3l`&6az>sluxdUAfUDCWO^~FkI6ws6NVZr}kv(DlB5>g7KMMzD z(q#RPucGkN6!x&i98h=NBMGRx5i|H(K%F>3sqt2`+>f_$T6sXs!oVby$G?RTB6!Up zYBfq&kyEAPN_m75l*f%+h1R6Y6<6>X%y?0DEbIEmq`O!_63T^M>45G+IZ@EDZMoYT zGOJIO>|gtK$bP zR1$X!Ueyj(*u7ILjD5kI&OgQN33peqA_$})3rcpt@8UFs&#pe$PIm9zyE|Y zq@Z@(wfGO4HT{boD|B#AI10-B*m0-d{Q&2sIorNTazDVrhGFq_!##@K^s|Opa6h=F zAD3dZqJ8#w3t#=g-vT<4=G^9M0UMnqhy>hr_di;+y@p)}PtZV}dEw6W?rL%8gd5*Q z2GME17J7C8q$KXWB>68@%73Arfxb;6UZab1c9OjCU*w7mYPvj!!Y%SkTskcnoKkox z=kt5`S|#jmDa_yr4cZJ&m}1x*99u@wLm7B7?>|gNSI2toq#nYXQpy0exR_S^jANH4 zsG^53pI7B`zZU(U!k3e~6i+4jU&Kqaa^L}k~zH~^U`*>Z>=URG_Rp@r217s<~ zp08cI3gBgMNUYk&qbU1|zZ z6qHx5A|)_cjNyb7RiDh>`zKGYmgqYz)F#_PrT2XR8e?dXhle~vQ6NPuEe6vu>7 zRYAJhDF1lR$XV_IH?pX}M>4E|?`uJ>SjG>$fY_DPI#u|FBL;?pgkBUYrYKRu5R0{o z$>j~!XU2)8CP0))=AG5T(T`W>ye3lwn)r{C*^x5(j}sP>9yii|Jd^$-q}}+BBjlC% zj|b9!Y`9aYt%1PaLE^okj)rPB3eQX;Lx?d@hdNm13+;Ur5p|GFmi|-oc$=RZZ_$oY zCwQNA&PAQ>F6xba#J_X=YRGyJUncldTa|qOObM&rwvbqceBaG0~T*qP=VDpbMBqXR_wGclc?;L_VgmR<2RBdou`UIIEFekkivQJT!q6Qu%crW?#96fL^ z)w1nH2dI1*fx#c6n>t>T;DV)DN7U%>GImb_<%$rVr=*+_^WwOeCsOW;XML2b9VFN% zjNEN3tmOhc!;akqZ^>PuJ&4q>Yu6?TcBl7FF@*=d4)OR5;*prYoHV%U`XxI0IKmAS z4YKikCM}Su!J4Y_Hp&rFxYcUlBb6=q(@HECdL%hNI;jlxqu_XCIc)haaMCWlw+I6e zK|5|T%}q9MoK2r^5KhDyQcvC|>$q|3OW@uay+Iq+65+N|c1DyBqKIV#Mc>s=LlkL2J>_*Ac<#OAi z042%}T~^mDMJ&^++^1B4fAbYQ z@Fy}MkiGdzzuSPlild0k#zO^Fuc|_C zB>koEci2?m?+e9vW=x#Cw@14$`3=u1u`&(Q%zk2Cx|1kbzTOt|heB9F8XnXxL&HQ^ z^;(nEmr*~~cm5F7bpbq^fWa~_nQ8}?P4=xlkc_e|Z;4n`Di%6!L$CVg6JeoTVnA3G z>WisDJ8+2CEL~0Eoev5Un+1oXaJthNkbu4ZHSpAP5WfWeM)UKOeHnEy`cu7aJG%w@ z;z;-O6$*yl4F71<=n0s6&%pqucJe(HwmlpHEi(Sb2|=+U|HS_=vu~wK za&)cy65k)2LM`Vn=1dp!#_V*&2fg?JJX@xQt%m@q^g7UOXz;)TKN_|VoD+CvO zb0*Iy0s`48NiZs#=QTBQmRNLwQk78eRRX!!1Mn**VH6a3(FjyDn&YM&cGnC3!{$t| zc{|!+vRj1c1?D{Lz(22VPCYo!PEsq#gCuD-Vajbl(1Y;{4o=__-N~_ig-QI3-Ga@W zu$>(@bGi_ z?Ujyp!i^RA9r$6dTc1_H^a%>fv5#JyVzB|~gcQtjD9yfTt=I?{JUby>s`LhaZAjq8-z zR`Ma^W@d9WrFkf~)H?H=KmO-kFqYO))vKtwUZ3YoPw_My?Ir6SFf>v7`iTtC2Wg75w=N?_<)AB@l7a#*V=uAs$4a};@<&G5A zXJKRQ#D4h7ySwNxVPC6xs8@;96d7cB?^b^ff=-!p;D_-nhiub?hRmEYvX3Vssy6pD zR;`35MKQNMUPFjnI9yotna93lOTX>Fgew2YD9@O8UVK7T7NmhlX)M6?ifo_kZb~+G zaaK|nzpHN2#p5uOzzi+!rHic1ZL5Q!)R=G^kPAT<w`nAQ9iIuW zVt>Jv%HBJr{gpUFiHj}L^TW_fehMqF{!O2)mwk?Gommu4Z))x*eXh(sgiVy(d}Rj6 zx|As`AWXrK6wctse>KL(?@EDjbaIpFB<{DGd!0sGv_f}udcWk3@-r$ieu9oxKkV!1 zY4S`}tsrjNQTwxf>gedd{OXQI5Gf>U1abK6KqS}Cvquw5LWXOa^Pfe(x`ks>w1D91 zw@6~((pz1Q#>JW0AW=(|x)dyh`&Fa2 zO^Mt$nL)HBB^o9s)0z9A0v@T}I&M=SrpQDX6c$thGcpUuDxkwf>~K5+ah`b|aE*ud zOPyboctg%jPdvZJ4wQaLPah%o1*M){lSnIL^~A1dA?pQR0AYyS3+*FmLj*du*fcUU zz!CRR2tl9HiFl+&aT+D7)`D*1$N7u^uAIXNz^eV6MvqZ|BqYVt3}T9h8mNC2FD*;} z;ddBw;97)7&)|)jmV)1y%Z+bFpsGtaj|Gc)762->6#IIt+nR%4 ztNW#+-6CxLjApU9?g-6as|NY`>o{WB@+5?P7nGzad;+m5=XZl^9*Q8O9KoE7j#ZF^wiJK1X~fFoAn8pQD*d!9xNTbxh}B z(Fr&rfp0$x7VoAaAI0T~^4A;k7i4@7?_T~3+#xd<&`C6uj&<17a$8TQZv&2XCdes` zEE(akhS#I|h9~{vlbD~dX57Xa5_1TYafC{x^t&!lhd#&-Bajm#y2w+M3FBh~1+tIv zaj`RWhwY4SzNVvW(6hXq5Y>2n9Y7Bz34RzDVaN)_O|`A#VCOdZ9he~9q;yH9FjVVS(8 z+c;PjxiCO{Pbh5%zR=@N=}vd=-QDtzd`hUC4(5e>2}!~_Ro__SkFo@XQ*JuSOKnS> zkGI_h zOKyX$f?0Zo69RxN$jflN!(_ zk^Dup6!1oE04|&#mZ!FepdKo7wOE#d5mjB5E71AS4X5i=fH+zUOLEfgf@kb0yd zDaXI2)MK8OJOwDzoiqpL|XJ*Gt%( zTY4t)zl>$6@+fxpu|7r)@_SnxH`+sz8Nw>`=AdhuGxyy@F4p^Xi)Y`IkuP7c-`oLS zbf-X37h=q`)ZK|t7!k@cby=t`x8g#4ZUtccOOz13wRaN<0ebDgR|yW~8S=4_zQy=J1xQH5v8{pPezm- zxKeLGgFe-dGlq1+zr>JU{jpr~7QvproOl9vfY#KuUubBQHG=lsWxI0^IjOvUTWu#YGx{P-0 zSuD$v4oYxG#SGDgB+{p8A>O+~6BFhWN@pJN4jF~QfeOWp3lm!vm-xve<0h0V_P`0< zH?u1J7+Fs<{yV#OTuV0N_owAGlU3H$lyb8D@cubj!{< zawLoz&dsjPM>(tZMgcu;<5MI_?@hbpW= zJ&mBAR$v!vP=^3iPLZOC5l|Di+N!uNmhtjb6@-K_;FOLK?;Hs(Vux5u3-U3kPfo^C zToq?DQftIkAPDq>H-%s4b=ch4fRk(_I5G1B@=BEW7Ox$V8~J2 za0oZs|RueBF~ z+EL8?9{pL0&lHKU^FVyOrFu^3jILUrV!H-RON{-(rjA+ z4#tC9+d-JhOh@N@0ECR{$SceK7GGMC9|*5H02E7Z*nc&n6p`W@{$eEcB5(9mA^sjF z#VE|!vJScj=58pqflovK!uG^mW)85*5*-?mi;!{n7%_7Fd4b?VK*a~tokEa?k7TSY zb&p<}?eEc(EKUNf4&@`6*o20R8)!KLm9NoI7{8<=Kl2RV;6JD;#V--gmDj$xNib~n z(voJg>Q&@E&N_MPAzDB^>Vsl+`coF?AN^{v#^w_O>s~05-%~r+f4+pAs>mXTlZB(= zysaGQH`c#lZ63^b+`gYM!*d-B0mUUxT{_?*ND@cCGhlHi($@vDpqUGqoMQZA2Ns^J zw4plR#EXN}fl$X4H@l%bW}g3e6SK_~U2qzJNKa8%9R(HL6o$$OyB~6B3=NjB!4RLJ zY0yp7%Pj3CmGC)Ug25VIq6@iCq#{Z^sfP}CdgyA4-88iB9J^5zQp5dFK{NIk6%^M$ z$ls^%KRRCT^FIQlkR8ZA+V~%HL~VHP!Ccgx>;icrD z63jcurv+~<-M9e{2jnB-&KfF(ic4t0)q#m&l$BW$A`1P|V}TP;hTqDOiFgE%bR8lT*+EJ&Tj>RDdd&h7iyn!n;7rui%Gkyvs5zE(^=w*#$SVOU2CgRuKDb)V^UJ_bpl zL!DJ`i*~W^fp*FEIXHXMFB@<4=@%W})O9lY<&+PIFHgUmirSO(OT2#gPfsiV>3HZV zWnq$n~owPVVP;L%TC|nX37=1S)>FLT)0Tkhh#X#w;1CI zXU*w|nlYX*ZK&shnfxX*W1RR5W`vs%#th=kHz>bsEc3IThDHf}P#DK-h+$0i*vgia zj^H53r`3vGI0%CEm-4-Chu+RNqSYiZ4o`=pzEB&Rt(ix$Ag0=&vb1owwT!cNd>CG_ zyKnfIwc%Fl6b-v!MzrMU%8{(R^ERJx3pO$LcHoVNOq$<6lVvVwPp*Udk^v_OkQlU! z|IVH=rxoub^d=)A=;t0kH5|(m^TZpq#{g_ui-vPqywWV$>wU}KKm`baEzufbfp%dL zBrTUTHO>gf>30`o4r4yQ2Bixm(llv6=w{A@Q4@s#4K*$8MSs?d*2Kj&V`hY2OpLf| z(jj!s+5Oco(#aq{hntCp`iMe-+kDC=e5a>3aEoP8@8%2^L9ZzPC3+A8xymIuRU`{e z?^OFi!O|=g_Y!marr}`HLAiyo^Ycgo@v0D9Vht+-7J4Cw5d-He*Y5uTn8b*1_#4;7I7@I>>{9jeJj02Ffh{t)l|9&r?n zP5(}u4>ag5$8#LmeqN6?1yM-TuEOXC?j=&z9HXa|ivixqp3yMQptU491j3y`3jmgM z?m#~Yh$Gma83Tz4>jae88CQ+XPFqGN%pEEIWIUOeP!QFVB^F7|bWcu@t|-mn z*1-33YS)Om{^Sm*>lZP#$%Lc6e3U&fN3SR8tMutYsc*3o8t79I9y{>O^LlZ}4TC&o z2>yv>d^TR`y-&2>ds@DSkOcZ(C_!KzFJSap@*+OArT|ALY{Mv^lbB-&il}P|0-dUv zN<9WCnaB%Lu%#_X3X>Hj0Kg3z)K_)21_xy%`O}^tqP!xvEr!IN55bov|q8ezl z?7(%sGf*iI0b2_z&$J2<1!8lS^11?_)rGcXDh=)^8s-7R4_`x8z|s^RFigFpwv%@+ zm+G04K}{jDeu*eO0iZVkAUwr);s4`bcv~0{eKDuZRwmAXo(RT2USSZ0Pt5PK;=nSCFa4#YDKoD|JCe$>_ zDfI=PkZocFyW$?8H0_FHG^?hKMr9Muc5E#|kkCEj362q$LYuHS2*#+zpQHrU89f_Z z!KvLT?61&kx1twtIUZC3z3^Y4_!VuS8v7Un1!N)veEn6*;;K1}#;_t@19gFg(gs}C z5%^LD8}kGmAXaxwC4o(vBZ@!TF~|Ay8)Pd@GBAeH5oV}_F%S=O^^R5?grgNVP4B0& zz^F@Sfnyn;j-~D3;qz;-us1sJtaP23H)1zuFgt(>-75u=qDX0;?Z9E3R41DxS}#?N0J3PL?8kt{zMS#KN;w-zMqY7FlyK3tXyqwa1rGdmFKG*fHx8mgr|kZxGO5R z(pTOOQ^ z@h$EuDdfr|&CjV~WoR3KEl>_O)_BzMA%2S{u$QQo5uu7_1d@dDUW{*%xhXa`CFZ7- zH#oBQ^r5Y=>IC1=2ow>LVs^8HR-n{cIwWtF_&s2FFjkq!8t+gXddB(FKiH6;my-Gq zs*_d#pF;Y(0Wh!kiz5V8g6AM6pZCFYRm{%1v1dk_+eOMywi%h*fvFuig2)!{;AEyl zosVWf!VZc{Slk{1I6Xh{-gE%h%=|<dbWWZt}x~3!V9k;lZK2@r4Tyg8fu=s46xY(Z_Dfj^Lpc`B7eBdlYmFc;(2r+Hejh z-|C$XZv+UK`6oLaegh{$Z!)xr6Cye7kP8ZN;ZWBr@{D1QNupyx=0kXBMP^GwJwK3a z`AjJ%Npy^yP3A8q(XZi+fg8VnX6PteB2C8X#D2)h1Mbi8(2Dd%bp^4G>&PG>4f4$Z zxv@3($h#TEk%@>j;t=rxD6c{8A@w15(uje1TnO?ChF?%9&h}SRn=Q3blZ?a-!5Zs= z(UjLwq6}p3W9BlzL#0qTKom!#hd`{4MKS7&1EhMH6AUox%8|SBiXlGQbD7kJrN}ts zK!Q4K34ndN2S{i%l^5d;z!oT*Yu3C#7$9Zo;+NRQTpNW0O(L=v` zuB)yqE3Zh0zt`s6$+C;Wr886%wpE~7u=i1@EmoE597(4WqjvNGL`raQKl%k%f#d3BjVbX1OJ+>F`imWtWltSb6xY$ z9ii#H9Z$N&$x6#Sqn_>m`*E(?AYI>i5i5B6$<}*LsU5P3>53I-;GjV^hOj&ZD zlcbvQO}`T#gZaOce z+L{({FTguAdaN`m+;)CK(&m_ie*NW!{q5IJ?p>Up`IB3vE?1~ajF%1WNw}zpG&_+32H2Zv5 zMh>HK-G(RV``#eTFjvmAtKdbbv_ZwyBn?`nb>Tp| zJqoGJ%@wnhspew8&DNZosH(BfA@V4zhz)!n@BtC{63tO<;|@M6ox^eC6t&?B$egnA za6BX2Jy$mq6gNSd>a}*_=y0qJ+?ZzS>eO6a=ywT`t*eF>D*<4D%sg_ge?|ygsxCdI zfX-9=$$|uW!(Y8yjemyegjH{&Y2oc`_=%XaA; zP;UFuZenDj4f}2)c5C-Ejrn^x8k+&CqC@6&!snq+heAO@-AjmR-H)s`1y1vua)^ zl(CU;6}C(Vmw3*PReLy?Q5>KNW3R#93iu^X&^W91KMYyyz{aV{5mMVO%$Mb_R27ok zmufXdt5=cGYQ)SAY_InlkVGdWG~VC>^`zXH1x^U-XY{$1ZTRYT{-C#M13S<`1Wzz= zY}MW%9|-^OfrO)1e*x4U?QX11#A=n^5e!!49qfb^S7i$3HMrQ!ts z=pRr!u(v_y=aY!wa-vnH6v__pMF3e>!#=pf1h(0pq7p(@uOfZnVNDFi$$(v_>;VuL zoiM5Wsh>4}#Xw{d2cL&gs`Cng{&o1Oz`g}$2bua|dY~#y5fMUw#L$_B#EMFVfQBK> zKyLUoxPV)ZaU;pX*wF>>Vkm*`Y^2=RNcnvEYv z&QXdN0%Nl5v}bziT`6ub^=|YKh52eC6D+Ze6u=5o+$xzL4&=i!CJG>tK6X?b=~itw z`QEf6Gwx6c6bOb)G0rd(xo_0JL{~a3glSy)oW@1>f*Kz{PJx_st0zUF%HQPSgDZAo zLSB8i)h70!P9TGAkO_N|t7IU9&vKnjcdGz3&x6|@o=5K6&NK?_cD*o`;Tc6|Qz77_ z3q$p%?Fbw<=f{uKk-TMImC=6rlvx1RFBA(LUjW3_RUjZUp!LghtJxeLNOPL{UNg?h z?#RiH7Kl1RBq|_=FWc4fx%w!6VMpMh)a$^z_?z|Rs=DG#mrcKJpP!|M}!Um(4X`+KOk{J0Q676w0tfe ze3s_Ap>T9zh*a={k;qR58%K9T#X$&rveO%8DwmVppLe2S;SyIi-T;X} zCt>qI*3X<@OBYO-M;r&w-@N;Tl#WA*@;9$Vn@CgQ+#+!tO2u)gBW*>j%4Ews&4&pt zLn{qVCHowrl__a>h3baV&OhF7l{-q2%3U&4Ao&m~5dRqeT&{>%Z6E3fDzRT}@AbS@Tnx4R^p z-{1xMsfwk5idj^zrqpwaNr}7cG!bQSPCSRmxjQQH~ zCNV}-pey4v$$VTJ2i`m)Nng5T?-||efGrx-kbls zaG1~kJ(yf!2XeQ0{;#N&xc`f)oArMszZN3clKHh7*-#f4NTs4v6;sq!8o%y@zd#eWfc(2jP& zWD6FBHJAAp;~~Zo?q>{{C_)pEG4GMC5iLT1QdRa2mX)QfOt>{(QQ}W$XDKN72+T`z zzHFVcAI~!DRJ~2qSah*+nQe0o+%{g@kJ~$Y9*52mD?zWwLxJdZza~S0*FN98 zPJXG_r{&l;{v~K70KJvZlKY1qmBe-Oh1ipuXfL5ojt>QT(HRxcj8Roi!R=8EK}Vf5O=-}62XM= zDal%ivvg5TSi)yWC`6E2ajg^+j|nf;2UqfgW;@jkdH1orbIe$%wUdltQt6q!j{m&c z+h?CJ1B3Rd>`P;xUVVsI^X$`WSN@-}PwU?D>{I!#wNFzD6`%Z%*r!vQt1QtVDU0Bl zE2sF1|HeK&E)g-}n{PWdYoFe~&-4<4_v`G_Bh7r0!anUhyG8r78L#)pKHYv+f_-{_ z-oD$X(Z5ywPHmq;1dIX>H+w(q(+y+y**+~jTI|!GdD$=fWM7oJL&`o~-z(ms7VXp8 zr~H~Tag?Z&cCv!|tiTfO)3f3({ZH7ZE-gSiez-x%KB`YD?|c%$XP+87DGB-?vQK|a zm=Kg`pOzHuH{8ZP4HszlYM)M&V*d;Fsrs`0uuq!@`RtS4Pj%BL#y%Y-O3AZNN27&i z<0s^Yb}IjVHO*Z0HgS95-&cv%(^oi#^Y}X!3i8C8pqgX5)#n$#HB0LqJL9!GI54Ke zp)eWt8M$(I7B*$BV2x%b(7RJTa=HxGD2e^pjvv3OP-|EGrq zYrp#sYIILVXz&QWC;DJ+vU%eSnqnY=FDgE^opHeBjDryDMD-T32tN=9Vg7SZm1Mmd z;V#pO4(p8aoR+Ll@Cx&;MY#s$wVp2@EebN}x}8P2|4K|xQRT7S+tXpjBV(nw-m>9+ zJi_u=&JM+v4fXuR*`~{Q!z~-QfC0Y?rI>NA_PT3B$Y!nnxdDi`c;?dy0`@3$a6!&O zfXKO>b)5YgFg#lhyXb%dR^(Ik>w;JtEL%jb&8)c|hJe2d zHV@4#i0t}*tbGZ5RMqu=SOx|pOcWwfL8lru;1*OgDC&TqFBmj#HK5hFr-~Xifv8kM zlOW^p5Uti-amO7kQnaW+D4SYYTu@xV^^Ku|)LIag|Mz>&y>H%3CV>3@`F!BLd3QVa z?DyOaYjyEffMZ0Xr91_@@i>flF?WVMI8PMss5Gy1%iOYfDfVbL*PMm^fZA81Aua|6 zwYOlz8fh4VhHzEMO2Ot=_=E^L>fea9#UJ38d|t?xzyTd+^S6H}hb(Qko2#8VyMkEe z>KR5yH;>tJ3t69w!QcgX?OriVZts2JbuVwp5LH&V$RHoXXJ*E>jyI$*gdcocPdbY@ zW2g@+!jSrq1*SS~IQXi+%EZO24%CK`0q5AoU0gqGHeOdad&4No-u)UM_RJr25BLOS+va`5UbiNebmY39j6OP@=)8C}IQ z$15Hlut6L734c^SoEwpMNWV-$pI#YVR()-2gfB*+at*q_D?v;tYehcL}G^GxVSYGo#q^@if>>punNWOh}w zh|!|)p32q)91_N8Ki&$wlbjtSGIc!=@Q1XOoBI<$pMln$xPx_L$>u-|k@47DA06?4 z+DNX%aF!xl&cI}h6Twr_qE4eJn{C=N$YxN5IbI2t5pX476ceib+4X=1rQU*zALHyC ztKz{Eq;DCrl_$?cbK6-UxgYWp#Pzc1LU2?4UQoDx$Lf9DtT0o{A z!v@{Z8)rZ)FhAY2KlMMP4?518I-Kf@#gkO*e~~^8F2XrL5}7Tg0BpoZ{-w+Iktti${Nb^uR;( zDKIx(fFyE88)plEsb`g(kDEc9I24BYAoj@{+A7~T$tN8+u~tv(p_;xoU*Ge*^FLh9 z9Z+3wk}1~}r^2&*?!PI|Qa#LzV1xDrDz-S;*AsugA8}*U7fcpC%-9O09qvE4h1l`^ z^{dcE+x~iEVHFkj(S!3M6Az{Jo3K`{7l6y2N0x^RtIu)Sw!$5TwaPNRhyb_D?Kdo3 z8t~$mV)3jdhwdJ3*78x~0%Fwc&yc%jVF1Ldz>8h&d%=wM0pHZXky)qi)(A;k&Defo zFqSpX5!K&%3L8^qfN(68H+sc+ld%F?40_B0l^aqHf%D{lahnF(7y0R z0@g=XwZtGyVh3>Tbt&A7v!m2cfbD!yh>V_2KM_xmFrTDF$iC6w)RD{f^iVgR+lan#NCsa^`$Of={w!tnNC$nm-m7W8 z^j7RX5O-{XZ7>5TLv+Vcqt?I~GpH@}3c6CShN#4PlC?G5y$9#~Z|!)T&Ot?tpiDMJ zQpf4YVW@Hud0bYe!sp|0I=}8uObnNqnKk4jv|TBqgoQ&2gtZn9iSn5Ut}gQ#At*(b)$X9x11o4T*8)IxBL4FJv1h*+`CP zSL$V)OV{$2(Xw-jjb`&Y`f0aFnw1T&rHd(K&UB;$Y@Ca*_b)$DuJsTGr)xdS|Nag| z8U?DHIOy|0oHz}EQV@_J4n`Dq07{dHXBWO8so}QfR2^)|dTaZqahcJkUhE8)(3h!XH#zMJA6+a5R zoi0sl$2768ZGx8$)68UT0;ZVX`PWJk;812QV>%jyZ1#y+A-nn#g$$i1nlRb|`STNH z?ED+G*VARq+QQbL@?&l0-+0fl)nH|h>Lmvmc=G z5jC=ApD~QfG?K*)U4JuGH6XSkz?VFs8D2!Hz5On?Y7wNqOUmUA*_)aK{r}@Hnh3^J zcO#Me{yx+bdRbzn36n^%IPXiGT-eMiWSi_rQ15Dtj6cFT8_0;&h?3o0PPME2kln(F zgM|5uyM;HxjM-hc@S7{-P!-wLimKb8tp zMw-SDaxkX4<`&qLJBtVnpvrJ(7vUrS=yEO9SE*zrzrn&xiHE&%sww6>b6T_d6GJ;V(ywHyXH*7{oj(v{p5GZ z3^TP{;w^SEUDm@k6G~Z&Q2}I{3&|dlunRYKI|*#*){WeVZgFD?M$qPp4*ZHV79gwH z72Qc{$1zTfj^F|Ca+8axi2(N`Z3k_b6P#0*%skF4j3m7VUnbJfO`FwAW*!yyMw`Yx zX#BP4y!e+XVu;)z#sE1GFFF+vI-{pL7aGI>o8)*?E>4ZqB_Px+^`T($d+D(vHu*Vz zpxRgXjT#Cf3DVMsIR|c9@&@@X2kZt_Mpt@-jWEl478 zZ;sc3Ie!~W*(=5AR*#4@aSfoHpXCceAUSy$LprOHo$xSyI-)w*r}SOTPb2t8`u=84 zMS$c6gkI;8!Fr-*iqrd_JNM>o~@&Ga$Z+vN^%nFN28T& z#;RBHfROanU#UhE8_8V-5{}RyMfGG$SqVdRbBE-U!J8%}pOJV2+=qVS6d__dpYu?MiBh~%C0M2hZ@LK2K<`M{Cp*(;m-|HSp?e6QLfFKSLtRvDi1~o& z5lfQ$qD#>gN0?rPQk`XQq49VC4$6Y*^S|01m5GrI8>XkT&Ys_E^D5I@RV}9j^HRee_`|xv6|;~cusc&lsj9RNk+C2b_Oo}(|H8F z94t8gAgr+aGXEIqpLf`ipQ9_GxA;4e`?fsDssoo?Gc`F+oPx%}dLlsdT5gvx5d->( zUK3R__1TqMTArq9nS^}&BW^0?6t@)ELwf-1Zavb$W<7$@GSor!;bek6o#_t2J_0um z9VGDe*^>{-%N_&}=OSmjeCC>)lK&MaBn|%3&aL2I`iyOx_-eUJsj&x~6{SXXq^Ya? z7>vktr18J#Ai8z7QllFPF_aVuQp4|7tyG-`z=WNG0Eh}Z#Q=ai*3)Pfai0(i$H@!B{2#PM0jb+Wk8P0Tc>9 z_cSOxA=T-QyMncL&FD15Q(3ScxijjV+%;IIbb6HJqUy}-^oug>#T0b9Dx;?F(h z&Xbx#U9^*3`Je;w9zb{EI5kr=H+W=|x%y|5fA!Cj$e#}&79L^NbS(TX6ogo?F#V~O zTas7M#EZB-i;t06yVU#Be9c{Ka2FGu}R;Kt$On5la$ziZ1$pT;m(r?(;opf+J05iuy6L#tUOI=jkkjF+{HuxpCxzori@) zER)&WGrOBRqdgJ9A&F>jnP-O+aUI4cn-oIC)2R=p`7E6*@q_GL$nME3ywr}AtRws7=r>bk5ESz?3RPNHC zKr~W{B8@lUe_rDTSIP|?5LT0^*5W`G@y9mTLG;L0@EEa@8%Z)cspkv+Y|w?Kq#UNC zVqRp{v9bCs7t}tAu`y1z9li^Yj6lXuk{Kh+MCg=_AZa2$#s`oZQ`136(1JOh%j|8? z!3;nZfTDcy!uu*f9BxD!#peKc#r9Z2T2gz&1@8ct4i0^Y#G>j$6M1`@`U>#O@$TyP z+d2r^e>G?zstc}o&#*>m$yd2&=f~u}_>Fn2?)s1g-R=n(Y_oT6=;py@2L1fG+K@0Pk|Dj~&-J|m z$OK?uXbkZW07dx=ibc+7!2&$-TA?>J}f>f@Xzf&VQvBb{YyoVm%poZ0o`U-&=8AZm|ucf6$nSmOfQEW zIU058RG$2wp`Ut!fzh8B`%}XH;J?tuEjl;kJ?I7W6UG*~Q#K>JEbYqe5Ygy}`0G$Y zn0W!+${0IggoG1Rap))>;wKj@aLPrZFPyn?b9)}bHXsT@s!oq+Ls6uR>KtJkiQI>} zYYP}WBaFh3Hfu)zE726%BCv8OPaG&mmyu4gAN4)v(^hieSL~P+z{Hd&QkW6n$p(H* zAuQhsI>DA;hByCk;Et0Q0oXy?4zLF>qO)gC9~JKMK5?&#<^e42MBWju)e%_fOTy zO3=LZWaXFVSz!9qUCYRrAIQPEAmkEK&pYNaf3i}(L12HnlI>x#k{_r5zvBzqoG#CD zFav(-6eUg+zZfL$CEWq>G1)E<$|xN)5*{h={x{8bVIeyUn|DVypBHjr2?Ymw`W;DZ zvEm)OZaMZKQ+fa`gp@md65MZuX+$9n{T*;!t7*h~w8HF_VE^k5v{R$O&8c9GI^|%z zp=yY@cZv_En|u6wW_I-3od{}07=u`u9j%nv(ZygT!711dU&xNPeurMVxm{5(`IIEv zC;_4X?_Ou-SOjd9d$A7eY!uLn{VC#$S7h?m^D9`}yHh?8oe&#z*epy0KX}aIhJHNS zx-(`4i2&664@G;Xg08DVA;1mlG!{C-NrtsCjfJ%0+NH=qI>{wy_c{3bxZ$dek(??mVDMYUEm%riY4Z_Ll6+P%`A<$ zOQqvtq3s+w;s$8$;JX!aZ3#tG4onz5fj#+L2ZXaDuspgH5!{9spjx@kaT;nYLvLx! zOXsfXI6QGi_wevU@9xwq%B7fFJEb2vg$kc=4}QRMEkI{M(PFE*_?(N$&dE|U6I zY+#C^G>II3)yvr#YJW3R*(O6Javu##G-^KxPm!<*9Nk;wWTphdy11DFA=zR)qh>LY z(N^A|7HtxJMXy@sC;E(HO{*Ax4V$$HkR~BmURvH{h*$?PCb4V8+bq7wPFu9b84fH; zzyhqBn#j%ej+eeGocO2C|5iD3H{&>m6;8VkrE;h5QbQQbvUx}R&Yo@oP6PNRY7N1h z%{JW7#U&~H&EO{y$U|mpXV5&=JS9cGe{&H5+loNGY&?X+f9;jiGL-}_2NI)%%;9$gKQUMnuHRuZdN+|8w-o2 z3?`zr%yWL3p>!O`GyiB+CT7YwT4v)>^mQsVgz&>ZO_+UQK1+qOSGppU?#2!uaM`=!b(2jXjkFM zKfYH7-s|kU+vl_h{e7IUV~R||6FvjJLG|$)l?|T>oHT5O8&Z0oHcHWKC&`V4tX25) z6_$4`SWtHlLUWRXt-2LtC}6FO#(%Cs-eBPiq%c*pGMl+a1Msbsc0zLpSOVK5(kt;& zI$u~GJ^liAW-C0(o=aB%FcHWu-Exq~Am(U+4*AFhR(K~?lX;>swZF*?u$bO!mEy6V zsE@n@;Io~L*lxgQyU4NY*W96n_3Eq@bVq9w*5}pY>N?< zY}#9rZ`T^*Ag1GhGmN_I2)UWres(f1Pm;^_MozHszywn&^T+0F&u zj{)%2d5Hl>2>^9~c8+KxlxoUlt~hU$3mu*0*f@6(ALx%b5TM+8cA7?qzL&C#pv{c!ZR-likPh7e61um%u&1^XTPc zwUt;1kg=XUOpJt1xf;-4hr_A{Ff!@hizu(gz|m4iLbLWh za%dv-T03(r=2&FH=~73koe9jOpM``-!+C-(%%pE^5`7NHU?$O@!mHfYoSH;$njy3C z5T|UD;Z2v4>FLQ(rpMl4+1vWx`2Z9#r!d1!<*dl~;BC_onIa8O2wt~ELl`SdL%e3v zP%oX5nRXxrqi;7Vfoeu00HNjP_#?%sK=2sbd0Ckv#n4 z!i9}|8WQ=?%Ic`nIwx^@9()35LRpT;AdZ{==Gj&<=+V60go#0HH7MfoTMbgD>2ZRK zmSU*Gss(UkVkGJcj2FiHby3Q8zRgG(Hw?}E$&4;Yuu+DUleb#5eu$P3VaK1(go;a*o$&NE=G0D!B%$D9AaYbe3~T#p2{s`j8{v zLC@+ya459Xx53&)vZoJjqxNcD5@Boa%#{?2lb>O|rteAsx*TsTJgDSD@)=(3Zf7fY z47*}n7pAY+bO)Ig3g|9*+WV}GoFusP%UWuV_cK<1-Ch|K>xomW!2?34N__}GMt_11 z5~Ih1@N7dEx_7b=qbJ%r<$3PMfVzcC724#GHcZ8;Kt4|VjU=}b8LrEQSv|BPtrz?(Z_v!EKXj52X$d(PDEhT*_~>}+_Y{Tiy_nwbxYZjOtK2QhU~Z``SE|)D`0?feZATl+6%)Z{|0rBXJsSFV!H&pR}otL?C6g%#( z_qhsnZ+*Sb53HeKEx2Sf!gZLBsUW##6kt8Ybxh?e=K0DBn({xG@92E_s-Y@ zXkUjhePHaKKHnnip@z`~Y*-65Ihv6y`7cy-Y!7q@mSWx8s>a3Pztf$eAwrlgvO5s>Mvk)j9FY~a;mUFkxlAV%fs_ec}qJh@TkI0Ue7Mg;-ejct*4@yzk=!B!$NJyh?u z0mFK~F{l=g^Yk%T8d2r~xhe8}1p-2rgG6ullSR(IC;-Df0Dmr>;kG63OTMJaHu8?~ z5aqr49xLxR{yt6K$D@s{%lk^!kT##puE!7(fhpwlsh-p5=l~K_-Ljk+kicnF^7c)v z0sK_N?+%6_C@9trtM?G*2L|$FvI-=ewsUaK^)?J;SSE^;iLdD7RqjFG`z}xVoNEP| z5r!~R%%m?07pVeXutMitF={2#XdbV=7f{TNVF47U;Wsj|FNc(w^Ut%*-b8P&C03r% zCDbfKD)i3??Wa%%IHQ6p!3wQx2h>dlSc5W)Nfg@0`4SM?QvL?gpuc>{4JYysSx-*{ z;V(%>L(*W>-;u+a%}B$QOwHJxA%Q7>cLoAeS0Ss}o$&|J5LiEB7r`L1B+IQpPH&Jo z2MEL>MX3#itP&AY?;#W2k1ABaN=N0H?-u&pme3L zEg2LJNLQs06=GH;FF;5&$!Dh3-Ow$2Q08UAl1kH;$5b9R2xlPZBG1BA6u zGru z>ICxsgthhT9ZYZ?O)&loUA&hW0f6vfBud}&a$wcGZ{M{3KRBtJ=#Ek=K~*up0_Lg4 zHr%hmoa)3j+yl)iDq_N`m>ar}3rckF4G!nId951tJ4LL-AR*aqK!C;rHT+SW4L*3c z<60fkR%S$-PLQ(TdznX(`BBlhc?d9~GM?)GVdSRMn9HB%TjazS1dnZBDyq-v`zCcW zbS&rjP7Vd<`CdW!9InF_YmGj~RG1R^v)-o*MiU8isg8E@b3P-fh!h|(N{7Jvbm1=o zbrJgymgCyAflF#SOU*5hvUmlHm(XpiObspY9S}jGc)brL!(;nh!v^>XqA-v>c?pFS zW39VLsx&~npT?`_HVsMqBY)H(WLA&&d3IuP)tX+oTvdWoW)v38<;0;D0C6>82z%3w zTUM1kg9f!pAft)rM*Hn>e{^C-nM~Hbx1;5z(t1JHA$MZD;FVHWxJ{hu4AO5-jrZ2{*g3h zVP72GBQtqNzom+}BstP3;w%kWX|ct<_aY!hJ*cxSee&@S0evD9m~Lp&tyZ7hh^svU z`eZz6ZPWj8ai|X=l=V}x6A^lae1^MbB~WCo^yO6l!ZKZR0>qtRIzk{9$e`LP<$2?+ikK|$1|Oo_73EI|pP8toQ$Uj^9GH8m z&bUq$0C{yR1sZHrEXm)MYqG+R^9NpN7yI*(6MsBEAe+rmF zc=<90${;RYf6NNuypX4I!72m5Dk8UO{1TaX3+IL!)`D9{Q?JW^A*a6?pPkZd<<%45x`I9*GvhnN2;uY1v zuS;E@yqoxjjfM3ho!i`W{o1jtBA8u{oPfHQixDZ)oHzoz<#~q=WL}>q#ClR3a2*ZA zA^(wX!W@yN&j}U~QAv(fI8yt>8WpZ0j8ZX>TwK$SEJGu}KVctzMGfW@8mO3Ri~;NB zC35q=qUEg>)$YJ515Di^_6jgsl(s``x)>Eei+tcC@3DnSc>q<0bMCN1Y~GjDr@AcX zGBG3&4KWwj*}O@dM2a&x?nX`)Lp)?;l!4#-2y6V*C^09&+SDY~jlUNW!-Ax=5oY@Q zK*=xa3q-fS^AL(5c@$L}@HGp$fW7G!V?L&QJM29t-V8ub!p(>F2~rv%W$-7rK+D}Q z^dHm`(_}t22whAO+t==&{IFWA6quU>J1{{pc?FbUkcLB@2GI*x^9ZYMmpOt2u#O`4 z^yA(99}nSLg`S1pt8=VGB2Nsnx+R^_okZ@wU&uJHm}YPn*68NmCnH~m)#-1L%WFITVlOw&4jMG&i7E!2@9ki6&1`;X#TyE{eklkFTNY z4H5xm5GFs6awOY%EStR@NPE+;7Fu>R#25A!|Ai_pGyd^sX8j=AqYIpAY&D!AXD3)= z`>tpYF}8@GEZ{FHm05fV7~7HjjSj%e;klc##QG$tF9|krkcIn8hm#s~cS0){bF@Pd znsSNC7Z@LxzH_*aHI*D8y(Ar$W2c6M6QRdHg@i)WPvmDkaS7nV|2qKdK$;f&k&gTC z4075&%L1%@gHd*<&aWM6WFCXJkf1C2*4#g@27@RB;sJ zNga%*rWMZ;Qa#=juM`hiTZh@>Lgei!zSal_6r?Z|1pCKfIXN35c@TjOk)0*JYq-Yy zI6VcjBrYt&17 z8skE?rn&3{5K^Av?BKu?{NLWL?G#-^Sv@qNvI?Y$SeHR$;QrLJDmPTOB)|v27rs%Z z&_=fPAqx)pRO|~dC~*vX3N&R3ZHeOWCS0X~hZ(4ie@?>iz=Zi^4Xj}tN_%DF4GeUn zdkHwVs&^PUadZFi6O|t%h!uO!%H|Y~>hTi;lH5V<*ii~t8GTdQ)zX{OItqhW4V{DY zUp^9x9ERV4sM3&d@;ov7n0%C~m&0{32Y1->7&77gZQs4}9EjtpwD4ZKy^2hHMdRf# z7o!0_^gaFyIX9Sn0_$GXo&cfH&6xlCkX}=y>0*`w<|`e}e_5uSJ5Y_j5E$Pj^bDoj zLvo99cd!a#cT{3Gd3`04K{2$Ij5C#p^hqTUL2%ri%!w*tA%+(ua^G7ixQr5-KT0J- zqNz%b3_^mMIJ&0#=T>^=LM7!`C@@tj(WSEg79pcI8d~!jgFd;-`2ayh-^TpP$?;+I z2z`(=@-l4%%8Rjx^2Hn0qS{$!*Yvtbb}@6MT_tiy8V(Y;%-T_nCEB&4C4>tIXe{DO zVD0E4wwK_!Sy+hz&kKDzDVE5c^8pcat?c6!#TP%lBxvbCY1mLV^#0VKHQ2`hUw~(h zSG7K1TGYV#2FywWL+SXK_#L?;ReQP#x02zSV2!X)#N?8!5^fA`E zn9C&%qD1z#V1kdilGbT?a;`pjS(j2!+5~X|e(*>DloeeJdVdCoj(Y}mErS@p^v6VDciIYkKohSXp&HAPK>T}B zJtO_RLIDMejH3*3#!^b|TB7-%X+W%@<>;Mh{&~`&jCZLwWP=$<0nPvL55_P+y~G3> zDw-m`6?jcm3P%(fue;yuuA(X989Rig(j; zwKDgjHsAB0p|Q9)6_E*O#JwavbkxhDu8-yewNE1ih;2{jGr)b0Ytx7&z?u=SZ@@-% zq7nRHmY^VL55p5j0E2{ecs1y`01a1zhB@``1@iC6F=pd(4SXf7* zKAyk0GUCpZz~gm!PP>K9z|SJ?{rDYecu(r@{VT>r{&{w?%9?wLZiwQB3fzLwfmQQ7 zyPAh*L)da~Z}M?1yKv#&aVfM=D7Z?U?Io_uD~+#o`flcMYs#%5%p1Y}y$w54HgI9Y zeHAZ}hEb`eacBZQ$vT~eUold3yH4)4vDY=SJ1Wz{SF_B){F?r^2G&4#eKjZyU;^yt#3}{yHxAVz=`F*MBcN^IJHV+`_HLDy z{7!js4teo6iYrh(ep87^vrv9}?u+JzPjU$e7t@s~D&mLFY1ON1cS-eXFS1fB!%}Ef z$tMuVY@M8(g3pk(OZaF`PG%-mU7y8*?2+!IAM)i6Qj6+xl635FGa8=%EIHbIrTIJ-W0SG>``dyHP%1B@?a9n_s_3F)ouFcj2G7; zmJ4+t!+QP)Hh`rQsoUo*Wf}E_!f0s$N3qOON&bS`lQB6a2)!c-2Y$l;<(L=b0QWKe z0kv7j4UF}Yfh{y(b*J~iI&}FO2zt<;l=Zf9Ab&&J`Gaogu6?)dL3Yfu8V(I(<}SBk zKNf<$*^1lwP9#vM9EGM#q$>`ak^iu!zY|(}zD=^3D`Vo-QEY}SP8<_Kjxsk^ zUFJG;mtlzpJDPMT$rfkcD%+bXgx4 zY6y{rgHS^d(|BwlK^|U$*`RB&cejLfdQ-pCN*EleIf(o}4JG*pR6X(?b(8U<;cHv zNJ84nIChw@www$Sf2Ppk(=|_Yph6hODaIIjgA?h8C~jVE*Si_f9XS^t4qQb3$pck$ zH|C-O5W`B1ckiQi0ukMShM2<`gqV6widY~j$)O}=*B>_9y^+mD_N*C3E z5DpgA4fv4Z@=7j6MvN^s04wOO5p7!DFnQc z)^NXOHB)^Gg+Yue0wM{|K|%a=3wO8Zueo0pJv#_a9S|Y7(WzA8P$Wk|<`xLo!N{h^ssS zD>S=zr{{Rr%BCcaLt^q)enN4yX3*h1dVpe}S^`CmxaZJ=iz8EX2`*wuYl>3pG19bw zmH`KQc!0ijsOm?oq&17dZvNcxmo`Xtbd7gHhVh2)WskgKRqTt`xlp?=AHb@OH;5Sm zkDw1w?8rr1jIpf>`Y7leuH$k0{An**LB_>ER^~47t}pes6xZBML{?EyXR|FpR6^ly zmWHjKHM0t!+9G`CAE~)iU*$ck%jJf0Hc**>7Osip3C5RPt-M^o<^WTx-N1{#x5X?3 zWP!i5D#lg``f5Ji(C)9%i9>5tUD-Dg18bruc&$>7_t4Itf+i*~R!(S&2#xq_ZvOGP zX30v|dldObhXQOY*M%qn`6iYicX(ddOwk*K*npk>Lg;7VkP@z0OoWC>>Tuk(6KR^D z@XlCF6@mM907AK1;k`5$FWfnfs!2eJ4~eA`6`so32UbjukmLL0nHOA zm@eO`5)3B`8~%;M1@r^7G;t$1M~iEsDTch=kBAB#Cd_98&}B3bMrAs+4A!E4Lm`pb7)-^? zu7(|Nkjr~buk0F2Wk+4xgKMHbc-8PCxb0zq1}B;My!f)Dk{4@7g9VBfruZ;>&;si|X3p>aldv?bMI)oZ zr7r&i?O+7R*Ahfv6F13DU=#ZW3u}zE_Dnr(6Bm@>>f*#{*u=1MY_-!DxA(s9{O==Y z?oT+N>gGQ#6HeG%N04d*p*SJ3H7(ts~j@`ABI5rz)MSX4Z;(6MRd_N78zP?7Le z6^9O*-Rsv&`q{7s{oE5QlhPG@yU4NUG0FIHBdW=^M#}Wp(DP2&<(#P-B26w!!y~#L zN&sj8e*|`K{FRAz6<*&(+p&9N>I!wOp&8218&DH=fX-Z2?3j&kZs?sEy>et<1g=#> z&a5bs6ZZV|T%C6n6jiPUia56!Kv4#M+JO^+pK9_$75M@Gg;svJZI8GyM`b3;Zj``F zoY!aDS=2Vn00j~%Q z!4y` zT?g!IM@2+#!~E)$Sb+P+F><2eR|p|xZe26L zk@^2(zE>o#7vs)E=@FIg7(cNO61^io1*3e9!DlP^ksIyO_fJAiV59ZMb`ke{7_$D0 zd8>67F=?Dw6{Lcx@dmpfko5gIaDcIB69@p;6m!J#4?#6|F7VV;hF!x5yZ)ZaNN|Ym z4lYWB{yU2lI2FsYYxiXusvjK9E;nX(p~0#^gz^8~aI)V4Z(kS>Xy*Mzgdz8MifSsb zFHydD=Y=yBGmtBB;L+guhWRnjQpQ-ar``VsJO{e}%ImtM+E^DTQ@{I|Rl+?0IDQ&y zao><(O19c8FF^Lgz%%fW`}3o;sdN|ck^V%E_ZQ5~^P+K74%8(tL3Q4FAA_#_(i8ww zp}e`ao=B(8Lp=ratcpnK2UslQZ>^+~Xv5#af!MoH9LZjx6Q^OAOPbS1nn6&d0r+9F zY7g%XTy3j^U2hNppnojn>KN*PW?4 zYfop})7e}iro;!;_mesZV;Wp3N3Ov8!Z8YMK@JAX89q*+SPARUrfDyM{|w`W^R0as zL(~HW?w@9I(J%qf0>&nrxS@sp0vsvvb5~NWuOK8xGrExI?bp;P&x9pf~)#>$dqnRc9LiD+b8_QU`h-ASGBa zMN07hu>XJjzs5SPDgHk{ll(sa?;Q*9zicK4=8@V4|F_!~|ND)n@qb49mI^NAN(>DM6EvNWDqh;Im zYkDjHzuyM`i~oGH`iEeo(NtFaFRRQ4$6K&4mF7U1Cb_eN#sQ_mq8%Wzf)de$)nxJl zuNRVNn2OlrV)`jjCd4@MfK-n{0gm(-Z64Ibz?x+cxZkW59RAkDIwywlQSQ527j>16Z&>YD%9_*6ZI0xsg1|{z#WatnqhCmTR6~F?3?IlnED@cebmGOq^P>DBch!I43p1(XxkF<6G zt1f{z%6_D;s0?6!s@ENkKZi>??&x@S2@n%nz7ceYmsUR=lK6KlMAt(lrZ+dWWYwC#)G*;l{Vr3Rf2s}kj90Vli zdc$6A!->R-oMKsQvX8Jk_vIaK_T_%L^j3Y0%`y&!e9$yB^0+r?j@Q9+xKd(fs3|3MySXjlI!3FGaf@VN6ZeBD)1TJ zlImpC0h!G$UtWS@_CP$l5ra5u;FKcZBq~sn+&j-zh|9sfOu@0L&)dM#6E@9^b+jO0 zX2F~N#6c2Z>R2ev3nK^t1o1!2)3G@?RE0)M(?-@4T4c}Tgm{j3)EZ?O=`Cbi6p6Jp zwln7B1MrS^#(Q@uIQN|(=Vs-fnQW`|c|AV=03SebIuCDRbQK8@BtPm%43TjJZttvI z%~4=GXK?z?clsSnXt*DIrz5l4o-A6)N&+HK(-|QkREj|h8{h=)0UB%g;T`l33$KE) z2KF#RK6a#kcW<+QW6fDpnf+V$@Be%MPJ#x)Uca8(*T3T^h3WAWP^M1JVJ#wOqk&Ed z0t7_RuRRO`NY1a z=F_2I?Iee&xYP>VBJYuZuiKLRn4{Jw-v%o^YDTRY{3GWtrQ;VmHv$&Qs_Fy@WP~TIizi zOdemn70+plQI&0|Sz?LNsA+gk^}c|c6lBM?diIa>e1N4H++Q9jv-a#Ou)y9M#>&0hj0 z-)kH8V9cfIwjeSqwC}WIv2oFM3Hd0|N1|V(c$)K(=@L9Qq$d(b3Fr$a8VfCqIuqFsI_HATL0Uw?>(3w)^6)-*Sfy;S?W8tE%=%;>dUR|F`Eh~9mZ6D z&dkW)9qqR)_oggBA12eUvVUp)iA-Ed^VJ59+GW()KGJj}vI`u%KltR}k3EAwz5}Fw zw%39`rlfwzYGO~1F zmWz7jGbX8okGi0Ii{fMnnHV9z@qe|3DtTLf`FVicf_iN<$u`p+MGaYR;o= z&X!NSL(ovm{g$=lncm)jws`9?bHE1|kOA&=w)Q@lhk9RXU0-D46mGakKhFvFydGR7 z-MA5?Fx`kW#h5pkTI@HfLcdewCfWPT$*IQ8lmyrL6{@RaWa4=KYG~dB)qr0e_$ye` z*Ie4-vmy~V^mnSYL@PtPi(#eSg9B6!@WcVCkQX=9`E48Tv-a0}w@mdiXu_ct%0t&N zuz=|JErDR)fvn0kCOS2p!)7$#-@+r*gRmZDU^S3IpQ8FSja#&{HBV?8RJP8Saeu)C z)nI};S+rNr_SxYtxTIfDfI_HSEO$33a#{JrsLlELwpum^0A;_Z_tdc;N_$d+L~As(8Ug%j8~k!Z+CX4509!bwYV=Ru=g$W z`3#^KGtdfxxxf=XYH-@dt*tX5I+K>k`Hu`HCce$@usYbJ)39;3NYjI&dIF3b>Wd6+ z=+}ulSKvK{OEd`)MADADse&(+a)Uv$)Zt1(j_vE`US^F`+pLirv7VZ=yM5Iz5*8$7 zPzV%j&2eK^eXQq06v+7#CFG7u;6$XPN?zR1`F}}CNr_O}I~Z#d$#j-?{D=e2mYx(C zh|16gQc}rc*`(y3N$poLL4=3UCR+p}P=@jXo=H+ri82yR3uU~TBq0JkxL87~?r za6?UtQn;0DVed3Ep_#&MOg%R@bWu}4106s(fLo+y$L$|^CO+CyIs#GU&>j_HLbT)4 z&2k|llPO^qACRhJKVKuEjVg*+W*rxqIt;X_I(&t&%g4S#NUy`SQYc4f()Vj(^dN=X zu&KLk{{3;Mbg`h`W5eim9&zpEf3wmsIIG3V!RDGCS#ZL&_024rwU6~?nNizt9K6z( zqbxOfx6A=+UIrbJGSO-FIWkdp?Y6<6?M(9l{*-MfK7Ss$75!ThrFmJg&g( znrK}k?$}=DVLa5%>9Q!5siL{%y%e+E%WENksJ0oo)DDPJRb)W!b2Qy+8O=1|HpKu( zA7L74o0AH=Y=fhZ|FShlXTf6ISbY(9Sg@mQ!%+F2&&?UM@&5TTI5`GR&fwqugaxzi zQS%0y1}*=#t396WLl=V^3;o2lXuQi)AB)K?fOA?&734sT;pzduiZ$RP{?htc>2bZ3 z#Z4C>*Dx(SU(cDXKqGTF4b zHI)5rZ7Ym6H~!sp|r;j3`CukKQE|-+ z$w%q^x=xa{k9k-<>8bce&c~W8E3w|Bm%#Zw)C^|mkN(^mkbRG<*Us;~4i~}ia@B$i z7iHh3TEZ@oiL%wn(q-ZoX*~Z57)v>W)sW{4dT8H7%)v_f-DF{rr2kmEUi7wLwhV;_k>7t{rN_;^XN)1ML|U}z$IlHkJ+Q5&DP?h}8weQG&BPlJTuBx} zjJzXXgh0KB_){>x1m!wi_uI%K@d;~JQVinH=q?b~JQHR=7Uf`?!LT*Z`H`DqG#*xA zlrxU8T53V=YkYdZVvFj`)WMbS+g@X=?uihZRwv9SF!Rul{Ff#@#4;SexfDZNlhvmA|qS3Io`Ka_EtKI)IS&vzALq&fGi0uBX*0p&k zB+v;3K#GivHNw;7Yp@EMW)J!2BwF>dSER9-4xkKfFxd@(3t+OyCpa((CK5{lxu*}J zG5B4#C=Q|;Zg6GpByEYnMUUCN32oro+hqor|{^ZfRMJtcw2g`8X zvICZpCqO3#M0H;A4f|q!u7-^}W9%j<2;?a>d5jm;dT2;w5S8pO7^zV&X2p-F_v}XP zcnLdROw<%P@wAS=`A!;Ys4s~(?>}EEWKe63{=J(5|AhJM7MTxZ;Su6W7QN*o0Qaq= zEBe;9Q5^qETH7E?ECaf?AF;c!RY-2vj$-w55j%{1WjDz-=7IAfH+|19{)UvLfek6~ z51hH5x98>@x8u&r7B~qC%Qw)u8mv0%>=PfY06~_w%$Y@4KRP=l3ad#ULDBjn)9sc; z-Rv*6g}NXMT=tdbPPyHSc2cxhdz#vyO6jDiaGH*Pe5WShA0&4C-&0^V^OJyCYQQx7 zgWjs?{ir?tt2-X5Q?;QExBXCR$di3(2%C*D&25#+PZm(RH> zpTf`aX9PaVC*h<3soX+&zHLZpRXXJJ-vm0CXR(Rpg3l+bWDlG>4x7l$LMte|F#GO3 zWEM_IUqoJ^=%mF7^9hK=qy3go_ge-}f^>d_m?{o9!zU|ikb3XSg#l42V)kMx7&>Ff z&Uwhs-wfm^5XVSR-*uZ{iJ*7!1^uv0BuzI&5wFVeuP7!w_DbuMfcjUA(0_h*KTVpM`UM4s0V*X&c>86~>WtF-Zkh^k9A^N~I+%Q;* zTdarJWF%X}MI^gQgaNrLnH%3_bFUPpMMqsx@7mXuKd_!l2INLVLxs#BJoY@jAY6HA z{b3KU45c%f909>KJ|I^;s^K5sC+RE2=YSV1>9`<6=(e#qleg+w&Q3bGq2#pz-qIO9 zI~SClw>o`{QLf=?x_@nU=@`Qr&@$PzqIbZ5t*Qa6j!%pVt}|8=VEONupvDpsAm#vl z1jIW^0u%=6;Fx<$_FpY=v*@I@QLYsO!F{@uH|X<#N{yF-XRwlF!ls$$Y*`&?I-Jbp z=70D+Fbc({Th)UEJMR-^{1hVz3}7E|Y31;>03#Lq*)1}F7H-AEsvEw5n|LY)-pY-$ zW4VcaEb?X;ixAr?OHJ7H)77W{4~M>!#%}J}j}iL0ktV9;G%FM7;V%IRI845!7JFtJ1a}aMB31XR52Nm<10Gwdez&o(goKsx)U#btY{FWH zN*MlHj8FJ$@&x6}n_%$!7>`<~W65>sN29b;4Rte4)t#ul;KZ zN-=$cY5WYiDWcXDPYEg_$}=j&fpq)KeABGHI~p_XDwXg~rI;)@eDr#M0p7**Th;G` zvM|+g*&*KR*-jh-o0K{MFv`G40t~mCGkDtT?qwVr8EKNkETP7QJQL=VYS_-usKZ~t zm?J2Gx%V4}m+GxKhmh)Efnv;e9VpXbn`ct#DJRbtiBE5!|6&|`4J=gSTsQDFLwf_~ z{^>(1@#-|HZ~8!~4!uw3SaoYKT)@KBigb6*Z$bKTOAOK%oR$^ohg|0){eo2AGmtJe z`L|-cLl%StF-~7hacW6Tj9(=#oO)`lF@CB^6^vgb4cxA$hb2Jl+opb_15Ha@^B}mgO{YQ1)9 zh9{9KJ15}A)Ig{+z=VdXq`o23wya6x({(E>pW3O65kCdaY5+$~Hi0!0Q-g0%jJo(o zKcU3FyP=Mcr~HH{n*%b#-oN%$!W#pF>R6nD$)ccXC^!n!l_)0KhVt3`gpZdJ5t&D9nA_*& z`9|zwBdpj#Af}OKB5_Y%>x)X;rcbu~QB=&y-{ML8G(lZ$m_A$;l2uZuLF_y^D>&_Lc#9Rb|rUe`^j1D36_AxnNwP-L0&aKJo&uQ**0#*#b zO5g&Lek{-KcvqJ#(*-FlE4`Qg3a~hRa*-3*Pdw(zHsE0`XqL4k4x%U$GQkIqw2Kfa z6~SiF0c-~my#u?4Ut>CEzX9rm3T+WrQ+lJ?dWkGnp?vNdx2k!X4 z!z0ewHt};&8a%&m1D@{xcX-a;K6u_WN=oUqpnZ1y+<5!{89yg&A3Q_T;5niVc)t6~ z{~4a6w-26~?*#eh@pjqqb8ahm$eIvQ*dnk5PCfen{X1QLFU%4jXvAo|8QOzz;M|J) z)Nk@0>7DK>K~;!+U%p5?n#Z59G?k`-3-7wy5JR{rt3KOy`;%|8?eCGj{g#E>YJbzM z|A+R=E;jA&(?%#VIJP1*pXpVn+)?07=*5B#;QkI2ZWG^1K-6di$NHTL|V&pJQ z5+k=Kr*UPYL%nYpqjD+$ePAp0H!`t;Zdt4I-B1ZPFyoFaxscMtPrlYkcV zu|V;l1|B#@gwKm1Sm6pHkxCsq|c3a5+CLq zV}g%Q?#qAcp&HH_>tj!YwRT?78+CB{eawTH{Io=Wd^e_U0dSG!8K67*?BR+&IX7IP2#B)P0-9b1}u^W2jBs<02yi8_2 z;|Yk>{GU~<0`h}69;O8}Uj9A~5`zd$;>>6KnZkNLU43GaJI`&`Vf|>_5e&<)-W&G! z_tEDokZVriQc-Ds(!n-~BTQCA*#qdS2{IVJ|Em5!_TMtBfAcVeU`xm^8&N@N!yDl; zV4195x&@j`3zWr|m&F(2F1FJ6_hs=_@dYw&6)gsYThwJdKX{8#{&-J#VxlN z#;B`Yhz`CJJq~{Z>++pGj_zVssBPcz#7n|i)6mm&#Se!&I^Lqv5lC3 zck5KC64(~1;)cxSVuFFalP$6kkOsW=$ner46_PR-Ij7~|GE}u5WlJ08fhJuwSNLD|YJbpJnrjXYbLbfboN9&0P%mq(AG`$pMp7sSn!BJ4#G6@~P zmRu(;wi(crLO$#{@B$osCBPJ5|Ej=ywRwjq)bSOf(66tGLez)?ixNpiMik^bMWL|^ z^A9*G22lXs>WD9Nzn;&5|B5vJt26O%4)B1?ud^25fyg0%-toaL6VUY#a5jJnN~EDi z{Y?#UJp`IkAP;;i31drH&fXdmNZ%;HJne_X1yKs8$%o?HDVKpV5rFSnfIZ*qjk= zx8@P<8O^wmrM7!%{P5<|_&Lqth;*eWe9`oLoGH^C*t61xCDQjIt^h=$nKry0qCx50tf!2jKiAmGgE(K9Q59$c$z^hGO zv3+C(C%9KrSfSpq!X(2AT5Wv}tMiFX$KMx0DOPQY)tO?I(mYytzlGpYT7i8PY+)6k zPcSp5a5Z?0mb_u%dXDdm6`%6Fwc`2Ly19xwS_f$dV(1-{n?A~gQ5JDQE5fv)K~jv4 z2S_8uXc9ZMDz@Gf+sG#nDR2Q;?jz@K0UEz~XB(WDZqEkRL;RlDM*Z5f9fzPIiC9MY z;(ht7?%xAd>8wH}OhZllBTA-=V#BPPw5EOyyeGOl^ZGaA#*IcY6u|H?+8EqpAZX2# z-c6Rv2$)rVQ+!`#m$1KK(DsY(*CksM->|>o1bqSFt@y4sTl{_Tg|PC@GWgBl?U{yS z+ZNw*AijN8jS7nIDvEDUh;I$V_YO<~QGA<)t;`%Hj4}rj6yMqSuHs7<`hsJ~8khk! zOvv}u@=gvIDyep!)6{_+tUGxiXPap3B)ge)+zd-@i$STe;a4y9;CCbfD z`=acPx1xNzZUezUBkXMmXNoc_p>#NWx}mG%EJjhbJp%W6M|a6AR&I*P<*#n&D8CqR zBt0ViJDOsGBycB0ONzlYE7$Iukq>G-aKOP&5CPQPY1_*G#I3T{GDO&w+&PA`CUC$FU?qgO3O zXR467`D6QShu~gw#MT8@(P8SwV4eajf{W4Os^s-@-h*|#r;5iYVS2J3kL0n8~R`z7PtYw%0$`C2r-%$z-Uz7Aqq@b zNlt}ZlgAMwh(8Wm8_s!=_x6>_86^Z72h%o3CjKl#3|*&EY1gS#u(m`Ox{>8lF&Pz7 zEtPuzdrNDPu15)cj7E`-;+>bX+4pku4u80UuW*`n-&6hJ9Lg??KZ}yaVbMzW70P$| z!{@PKcR;@Z92zdDxttwSV4ySbE-=z}BNZwYvit8%gN)jRRP*xvK^*!GurU~>fSpnr zZ|3bdZhm8*U2|{&d;HDhD(;!K1ywMg=7b@yl3x8>#v(Xr?+Y3 z-`zM`7>T~xMldlgwc;dcJd^Fv503hh4`%w0VdLGQHxh(^Fp8eV!XG|C;$}Sg$M;3{ z9s5rktVXv*sG9%SK{a|xHM2Nbi$$Tt&gmaey>@?(=CP_50HZM*uDbNm9d*8ljVi$c zPD2I+cKjHVZ};fWnMT5KQ1c4%7J{#fsDC9DduRHw7A-MJ=@%T4n`n2WsbIY_isr1> zx+j~ut+Ne@GV9w&Coviw3%!YEmt=|pOAX3a^67U1GY%-ep2$I5EDyz7``o)fY7KSh zIN5Qm7Iz~HiENa%%cKu0B6bS+bVG|Kq{ympkgT`0Di$@xinQ1=*?`N|42Uw$T4k;a zN^wK6DORGzCO;D3hI6EA&~%c=a)W3Rasywykq_^vA*KxzRT;#6SKk=|_scM7z2F{X zGPqam3NpR^uCB&Pk!iIdlgB57V;UjEAK#}3-e&~fXWMs#X6r4c5jT;lsJw~{%0%5_ zYye}4B4Qx;bVK|5#b8;b7zy;fxnn6+jIFX5TST$la{`#&n^1yMTD8SADpR@Ri??pt zj>;XPamgFFF(0R&2V!gA-I1ogtk(4|d6(a5wJ_iS{D>21P|(d^)eGKF7pW@EdFpVW zucK?bL81SR`Cb%FmcC@Sn4)gYM!A}eOAH)nkLJP6uSIExF_EtjbkW&1UM+^Xtyn>F z3~Ci8VK}RAwU2J(Q*muO$>zQswhLr2O_*-W8a5JR5^Deh* z5W4*_GVwM61~FpJ{4quhJHrkD;?TS+G)Am4{oYc4zKjc{k!w+M4V21=#O|dHn{jGL zpHNQDu>PxtHLj}ZUWRjX;v382OOmUQr8K_T1WtF2G?oH{(!@~?Z@c~gh%1YKR@(3d zf~cE!uDzr*F$BH^ny0TPv1xi5dEUlbl&Z!v*0_&`#v`*3FlR_nlrRJBi%R40hK%lm zl3h(CA;U(rmb?HqYJ_`Xvb5pnc4MY;9?CmuS*FZY3dh6I=hM~%R`OzIi!cyi>{z+U zTEQnMAqvD$r3ga7KYlL`yqDN_H}v|rlz3{Z6wmn2itCg{W3?1hRteHf@{7TN5eO)r zr?o1^R#}WKqS(_;Ks*m7WDrlSI=gt5-@l`Z5K(djoAbdFDFS16*<+vqNWEL_FpxT2 zniy`l4Q3;nLGzk;Ce2HnI960GpDC77 zuWXev&lXXv>EZzW1`tZnPpi&Ozp3}`DE(;2N<^>elm_Rg3P?Pcw*dfJfYaXe!uxPj zdVj5t{QbX_gi%$3^pP3ZWIYZfkMG)sxS;o$K?cW@&_hrJoXSR9McziyrrazKEm*?Z zij(Vv{zgrd$#8eV1Z}T~InXF8!3yc4*${_MX}Urb#k{TQ3LXjAS{c9f=ng7laC{y( z9_XV*K)*6Me#rd_zIKq{<60SPeVkWwY#QW)S_HU~dFG1<#Vvl~tpj4Alt6Jmp&4+w^$|NB(C2+Yh_!UKTD#0w8;PK%y#+Ng{ zMX-6<2x22T$~i(7H8_dupchIZt3O5>h0F=;Yq}AW=_eGGB~C7;4^TpHpqR@#Vg#!a zSZlbISKGiU58u;p2)mZRWi>Ak1;5&cxpt?ipRiVYRUh#oxIy_2=5dFIAz)4Gq@WD> zq1~Wj&?FoYyr8im(L|_9GZ!)QVjL%uX7*ar_N84iA4BF-p)*JhdPDdj{rJ;bnoxu=!G2W7-ry ztx3{QJpg4&jZI1FLM9YMVx=aYo5=;c0{rfD1S{HOgKA%F=@Vt6F+-*n)*QC!=Esy*ci= zG6h=f3|#T2GS+9hkLhqrK*ML$Tk~J}MFtT-D~%(Tjn82GqY|xwQ$>hvH%a?SCRRzJ z-~G1od)}o$3->^#(bt6s#?Y4RXKlx&DihYKm;Q`~mZ735DVR`E)$)`zh*4a+T)?4{ zJ3AjXyP+BXJBgle^7h!qQvN_dSkzczRG!nYxkIEe&P5vyn?sSt7r6|hVRNTQFvK*LxvXYjt^k>RMh)Z$4JwjTE}i*^gyG~G^=+D z)FH0R!W;meDolz|lf}z1&wMDV#|6TeVvaPujNloJDe8t3$P%t@-;=RpVkEv_4Z>WP zSLUABu5{q~$St38`GY$a`+=^;605^EV`<&z#~qu4Wpy}gT9!t1+?+yOMV^BdNAZfh zJ`?1&o8EJ_1Wg+|hW6G>pKSnc<1U7eFJ| z^oA-1I<|DK-34zbcmh_%!ntq!2S#%Jf27iGx}W1pBItF5{>XE(k*ewU{OpFVKf;`W zJ>kFf6YZe_xTq&l4&JT+Cs*U&_3b#RjWtYU&w=kmZaGuDUTkgUMPqY6#}dPiJsh{J zM>sLygJVHCG~5eWU=(@?UX_PHyTnLP0r7626fRjY7_A z&>@as|A4IhmkXQe8u^imRXj+-LSfO2>gh>E8u|pP2YOBQFk++d>zb(3@N2u88>DKS z7oJG3_7qW~qQ;*aO8=hDHDvGqvG*qMQB`N$aH1I#>)ZAV_T&&X}GTncoxnB*R3*f78T<0w_Qx?l`NjTm(jGQEAVK&5hON0z_S_c zwGDYlEGYV>Z9=RGsN_ZvYa57l5V8(fBNyRy!6Rx1vEDKx_(Ih!ebAO-Rd)uRagH{N|e9)<~i~Xgp6K;k#G0667fl|r%#rrh)K?F{Z9tM4DHWL29d2?xn=1)($hngcy&lNHfyLWH$miHt6e z=7vs&ST5)K)}ip+R3lval_!m1*p5|^O8jGo$ZTb^o^j&BVB{k(w28|3c(b?i>vH%O zS^-&9WAVp!RS1L?l!i1TZE~R`J3kK?QA=tk$%uAl{}f^zH6=leqX@myGFpqLXjfHd zOkFRr{mij9Ff_w#$-Oc{uqH;+b7HG|QF@K$XDH>E>1&ieh@ybi4znk?_3y;gftal&c~ z=XtGmbQBc2EB2XY$;z86WXFC4cERfYMRf3B6mMw{9}IK&MFJO zq1m5_U!wRa{vO~S*`*6Q1vU^x&A3C!SD7@D}qaifXL{)XzuGLiU^|pp>QwX z;hBJ-i1;en^@xq60*49+5>LwW!`eRi;fUUF0ZM0q=+#j4*a)HqjNFJ`>8mrb^4Mx> z{-$kv87*(JrYPsbE6aDt)EpU|D_)&T z0boYZWd+(gJCqP#U6i4$R3atD_t*g?jsq-EhME$N^7Bz*sHQ}QrbIQn>8Hf&c|?Vt zZ~!)t#ic~_lzbw%eVN-$vJEl|SEFxv_Cu%duGU~xR^aGTuOb>CY=#LG`?TGzH|p1P zD}Li`UZQ^1UD2AB=a6)^%a7c>wD!*|jwHND(MOm@SR1Qxn zA3IiyL^M838mEaTcm3Rh1Wd|#3J*NC0@XnugJG(JLXX)Gj8W}9yYGO(mLKO@TgZd< z^Rbp)Sy>;WJ;w_Xz}TAvAF^vCnbF1woH`2_t;%Jz#}XocjLsw?UnI9IXaQ5~(tn(n zn#H;`-1l9+n>o7_T zbOA;pK@1M@PA^qJRcb#SIs(AKvV5?Qyu~-?0R5yI<&Y-C46jb{-a}ES>;Z#x41CD# z6P0N9P`yLNuI)^Eqw#3=mqlRsrC}UH?=VDA4lS=lDcRz=VR12lO`$27md4${qZzGIz6X zXrtRXBv=z`P+#YAWWZV0=!ksjwOI0+86M+|G_I>BMeZULpmPWW8F-5hq^!})FhP*Y zV}u~XJp>^+LlWt*vLAVC*U7O;ngqZ3$njEFMGmIMAHY&40FOv>is4I;SdV?f3F{$4<~k8KCqSj@h|S?llEXRB)C4nj2Tj$|*cD9Edcg{u z?y!A$Z_W1P(N^S-W`A{*V7oqn8mN7*>)M74D&Q18QIp_;T_%C!-3=2TOtl?yAH^Pw18Z#0bwct zN%F-`kt=FwA*ifNk;lGZ*luDQQHYV)1z`U&Ri?6jQeSV3LZJ9ltO-dMKevWqSBC_P z$1-p@Wxev==E~eH=d-4>Pma=+B`uX;F@%;%RvXs-V(DdpS+onhZ4Ml)z(LpUC-krn z&2r@lQzFsqyALPXjTV`aht9$%1JdLubXe4Zdc_=C012rRVYd-{ogl7(Oskksffc9+ zGMB@;LNXl1NW&pM1IgZCBo`zYP4!a44uX+)!ISP zkbf84v)j>1r095_)sRTYd_I%55GqDM=5vc7bB6tP$Rm@p`3iqD z6La{DP>#sSltmPuh4d(A1){6mivo4DmS z37d#HE1`tet&pOs*kR&>cwWoZK4?H~igWmIq27Q|8JkOc?CVDdeHFzkvP?d^1r@{! z8BtmqTMsL1UvrD-qLV71gj(=Ilu*+A-Dwn_4(IO@>Lv&IjHa&4t<_B-xZ{i)v|gXD zmr4rlilf>6`YCnO26~g%3Ps%r4lo|j78Bsxlcy@;irRtp;Pg4w4o_AlE{hRGf(MWJ zrQXXAMV*Ls4`dRD6{r{DnWS@go0rj4BgMC;bM`Qr$uN%25f;EWi31>fVcrDcfNZ0J zmWYExuw*p_rA9GJEu^Oj6Q&|sR^ahcuK`EMPMAH9dF_3E<+3j(!KFCrsg?)S3Q=?_ z!_>u8%3V=nktbGSs@KL@KbP6}HR- zh`5~eMFiSo$tWS~En6?_9w2L9LKaS-1 z(A@Z`*|uef+2;o{^HWzB+jEa!*^Vl5SVbP@TQV}jhC+Jg60U+eB7R%bra|=+K#?N} z9V{=!GSa0$X!Pyt9vT&cMo2xfX>)%40Zp5auJ7Ko`N(>sY4geTonJ=BGh#!)u2O6B z(t6A%N@u%DEE$vh&ao*(O4FhmOs>d^m6X?!4e?j)zfKmWd~i6J@;)%D!<4D~mX`i! zLLrf0lYL}|09k?1eko+%d%lpp2#s}o9+8EpCWTX6zISe=C+<{Vl@P(+pR4BwV zA82nm)mBX|k!8zvzhBmhDCQAxVK*?QxCk@!)LXL(^jf*ER??#&Cb5N|&4QDIc8gwb zt@zB0U`T=TLAzoSFlGgo%1jkrLRSSlv7dNQ`t^7BD31`rS`NXdM>vX5qYC@#TTmKY z0u4lOkvFAVzd%q2EN{l*iV8ZWfVYlKL5Ylk$TV%))41&@@mT3^m8>vs+mFAR-uy)_ zBl;&@b=25EcC-cIvvzbN&eAiK4`o_2bP@LKt`GbU)eIf2)Uj{ynP`69XY>e!bRwGR z-Ks~fR&EtkS9t+e+K(w1f^N3763JvC4eb(sqqER4`XCDY01lj;^m0j)K55zUvfxS0 zlVV!f@cuseO|ys}v-tx%Xc#E7ef(@r54za*F!nWMylVShsH(p{9hxZWx)Hs{paBCa*J!MfNzF={jJ&AgO zzZIBJk-+9Ew||3^0CnUjfI}~V%dvSLFrf}Say0s`6gi3uM3AGyZuZJi>}l=MLI_sJ zX2}nZB-Rtkpp==RCc5Fo=HWO0=+Ndn&p7|6JORBbLYcVv-DH_yaaPNsfdBeKJ@AVj zfJ~@74w~5pwSzQfTeU2Ar{ z8@eFstBSqCcoxIKP*yfW+rJ9XGycqvm?2Z?YF^vzi1gpep4-XW5x%rX2@vCw zfspp*a*7c9r^Y+$AxMs*X<|d~pU5wyhJ2~}sni=K)gBmvp*2v8V`%kv!ro#;xK0_r zy*Z4SvVJyz;`&|DB#3t?jRND>vpw&(exsTF#7i81YUo$5$7oE;h- z5UmQe3IkNjgB2Jt!eKQkcp3BW|F&P8QHn&bMjzjXsdI6uw63Ij$(dlUqkrv_V$ezf zBuhnRDV>QHLxc|cmV zESimv^a;2w4PFLx02Zf-#~VGfkepz0tyFom6lvGZ6U^I8={!aASXfcHw#foyxD{;p`?91pWe}S*m z@jXRmq%)R5lfyH^S#O<^k7S-(SMm;j^}&4J7iNDbd#tGI|GpW)NsE@1NE`LlNIO#qDOc`9$mEQ!}iz*@*Wl9JvlnIMduLg-^12BcQlhQqV&Y>QheiY5F$`zcV6xVV@GUKiK z$-&{?05bk3yNIA&2_N611O4!w-NAU%Z66&EvEx8C3t`B325P}Yq$53gYG)GlDrExU6 zHULY&(K`vvW5a?FPx|@yJ@l1q3S5rq1^^VCdTWvC8|W6J<4|R2kSoi@MDyebSl1e) zh_$Md2P;r^ieo~xB@fy?-c$@D_&~$1b#}lfA6bEi&d38U$=#?|W{4QquHmc1;h#(^ z1aukpvKo?K({6Dn$o8YzJ-dqb=x#3NZxGen0k(tklGSeg5e&Xok(+Ei55H+KN#xjd z;M@9gMb{rFI>}ZSA4ay-7XyXWxKuStN(1b|NJcyuK0OvyWQOKX}i7lSNQql z(d*jnvw9+5q|MrJNQr{QlZEdf1!AY9Dio zS=p^aNDJt_y#a-?ibl)lJX+Dp{@1@r9PXIVwMPOkZx-O1FC!CbJ|T14#cSREyuPpM z&ty64F>sYCGXGQ$3a~{a!ww{h+^UNdsUpXzB0mf0x)rjcz5ENem2-5FuQB8@BY`4S zWWWu23X511uMrP9DC)u5;Io|WLuMLqek|C68Uf2gqhk9%L{z4yVNGKxaB_%;EAyck z{>8j9Y!r;v9{{8b!fcnbUJPg2%)g#Z57aJ9@KL7`E4vp@(?t`-@T@wcV0SoNRXC4$ zRyGi|CJbGXBNsp$>5N0BpUBkR!l23sLbhpzcp~Kl%d+2~G9!a(O zpLrIKGh7rUaKxgu!fZtzRU66vw$mV1^&P&VfgtOLs;-v$bC)vB3jB0cQvG(Lt}35Z zLFdbg%hrN^zLaX61Z}s^lm&( zRdu<^S9XGCM{v!3lXBpWC&woib2}96m&|J81yA5dbUu zNx>lMWKswH!D(2V~c!)|svATpAEK7r1c#bz+*nA1NU~ zr%u6VFK?Y>IPCxItonYQs&kJmPTyyyt25No+jqg|l7~EfS9M;h>--iW5a4s(W~a_U z>FR7g*jp!5YldC#ty9sxtFH5AU8f7D9d`Qexcz9dNY<`8q9ruSPp$LyPO9&+f)UcM z;e>7h0|g%b7kE1wC=?dYZW~$*rf|76aG4I|C%Bbtn~!jBhTU?~KShcQquJ-`CgjxD zNZ>%$i9M(iU(xy!jGSTLa)xsLU}X-|MI?|M3C#RaiexTP!4-SDUWEw$%pOFd(c?Cu zcaSfd`;Q=vgW5;;3f)6mg-GBMRmp3MbtOYRm0a$rf6P5H(m0agkvh7Pn zc|vlhr;;yzASBhEO5O!uXh@bK5g0huspMr(C9iubxnC+d&{N4-iAv_GO1^zdcc8 zO5m|fdKdsicqYu0AGk8#3S8k!Igcrpq+}oCtF4qN-Be12FXb?%bmobUR`#C0lx(KF z&J!4|?C-zx!uI1gNU38=1Y>n8&@FzTrq61m;KiqsoxIju&?xds61~P^d#MUreHA{+ zlrylCz^*wQ3R92#2Y#N{;>L*?pK(p%P0O24(10}e`1t{)x`|P zAtHS^mr($td{Ly7aL+5$L}LzrVwlEqO}uyN%M*CijD0Jcyw9{Ip@x!^!!MYTL*mc4 z7$0vs=fTK%8ndZ5n%0BKYC$K!0Afi?Y|@=Exp(<86#(En#5u8Mj7kaZtH_RwcP}2I zd?C>X%ml{Jne4Ou6*RS>LC2BgpqHawyN_D|Dh{z@`RG{TLVLlX&{y32maIRFsd5%e z(wZj~cZaG1KaOKXywT`nxx!!;+8MBv_c%;t$7NCQ=p39L5e{SjA^JWV(5oX4a3w(f ziOgG%eY|ENl7P++!`KeQYqmz>7>y;yEUv~f38@N(4`_{lhkyT2Lu+mlmVp;!H_z^N zDyJ|R00)9WHb54C6a)H)@b9+@Qyj3lqjdYLVJQV-rvM4|9}9pEu1F(Mee|3-v_o35 zO_yE=5Z%uWcIcIa?lROLe?oH%p#>g+K`t$f_T*g4Kuitc83z)UtPUR{^F-Wziy!-8 z%}pN9C@gMM$jQTT^YM-N_apxOGZ|iE>T4v!j`&Z8(!yiga18_@a(N60b9n5B50aQP z!GBT#!%+6?$rV7ToC==xSJ2cJa+%b=+f7SCR}Prc?NM79RVJ~l`qjcd^dm_->*MixOEtk zOib3G?kfBXnTe}L@!H{3-Y)~3mXFmLB#8sMdqx?#HUM^1QR0^ z6_0{}r{QcQpj#piJk<-bO|ce~zf!9B7&H^cN1531;-#n7|DDd8@5$Q^PRA;NP582( z?gMP!uUTI>)X)Dn?vR)4BR))GlY}m_4S!lw8+5Z*O$iU)aFWA=NvzP7z;R297M)c1 zjHz6GkP0J6$jBwgF0-s!Uu~(sLMVEnY>kd`^8z{JMo8Mm`hJoGZA7hwgO4!7FWLws zcl0KR_?;r6C>Df4>5IvwGhbP z=qaA0&pF@e^AFrPI+^SPUG1%JJD>qu)$=mt8m#t06X1$=Yxtr zfh1}Q_ydLP5SYs4PgLXB)A}-D!XaQnkcRw;Ghw6W;q(;ea%0o0aR`;OGv59P7uZtS z^Ghska4jZ47*|jnpK1T8H#m@Y`zfsX`EOU~{T$pSb`D?@nL9`C zqtLpK-v0J4OUG}Dd4V_T`Y^D?XZRkDSE!;I(vTC~+ zpyv8LJV+nE&}xfbt4HcoNrgO-phb#R?zS5b1gr4)3Xg#K@wF57!Y5yT-`8I2l|8ah zI(so0);EwFYUa9$%z4+yT?b!=s>g=@kFrAKO4BXy! ztbS64p@y7}Nw3P9O81_fp%999H%ub{qf5g(mZ_I~yV-n4n-?R7~ zqlI2BZl%Tjb?0Ul!`*wFr5qochigY0=sqXxJ$5R{VPJLm=4n)06ZSp?jXa{z9esFo zM#A2U(?&af72H;revk`*;4nM8`G_TR4ly%PF2$##Kjg%&`R=-**L9}o_`D<=j)50|{7wU6nw zR&WwrYo+YbC`|8r{A0ThV2NRUy;r>?;bT|)p}s{9K9c(Uau4*`J01h*(j|05y0r8D zP)$1f6iM-i`cl^JJjQ`X+s8uJu}C;gzi~4q0i8vlZ%MXK7pJzbho#a+M2{P!{acP# z=;l4p{j^>u^D`|1lu@^nY#`}F-zjyLTm+8p*1u)OgOJDQvZo$sii4_vm@ z<-m(NO;CnW9_CYyPQoiN;2mU0EF{;>l!Vv0-NAGnk2i;OG~RUmH^_nGzZuPc1wi!S zjOG=hl5hl5lpB(99Es?i4~*v9+$@cfMTbJ7JYBB=!^I063g;ndMxN;Y3S&f_bp%rR4G zu2OudBH}JMt03%K(iHiDgUqsSK=JRjmh3iZL38fd4 zNdN49fNKZi%Xdkm6n_i|5rt7ig%Pd8^9@jYtLtwN%GD{2D96-*?l-{Re4hw?(G@L&e2d4f9nhl>LHqw0J)898WwHZTaWf@E{4=zfP~D$ zzq$77`=T3EWF5f2^Y|7Q_s@qp=+gK`jKdLz=Uz#|w~FHduPVqd_@3-mkc98<1a!yv zzICVYtx?PyZ|EFTS$*$8F(S+(@;XE@^@?B9-*;38D7G)i2GnCc=uPt9c0%9Z__7ae zK40NNe_9F)3r!C1=g=exrEOgR+z#~1Upm5PI(uJ#m2fFkD97Jo=kd*W;`^TQ1@t{) ziXGVMbcVF#NI!aMsGkS-K9eqUm(ryMLdLN-24?tjC_MegtD^o|Jv;kRq2*D*Hu_Thi0{9mv9CB@60 z@u#KNhdui^JeZ^ppWPcE?m!>@KRmy(?R7uxI*ONllA2G&%ih}yee8ICrONNy4``L) za2zK`Fpk}}E=xjmX67oBgL;}ld(CqcF))@IQ?$2Y^IXqK*c~T(_FaJ+gNEaGCehoN zYEcAyXMDhq>BRalJ5ZX*x+b5GQ;JpFV>lT;E(fwW5Y0_02;qqSV*JV~E-P6T?#DKv z7_!u%2YTZQcG1`yF~KhaftxlS!zCJ(kjz@fQ%_5i=x?s8z<&!64>I(|LP{{uI7Ssm3 z$pQ==6A^f?!qmK23B*LMB0-^eOsFr;y};~Z;Eo?S^B(S!J3+{p$w=s}^n>qoHo8Vy zNzC$!LD#L}8M^3kyC4hwJ7x#{+u8L9I0-+)?%Ug;MG`7s-V?0p#J_y_n|O*}9u$lU zcg`vn&O=N6$6}^laECP;z?94R=d$`a4uO32?+QPO{k));(+AB@9{>8xXOj3S$-kBX zQE#_`BqY4B$4>Fn18MmQTmo)#?IRbv=<$rqDBl1Na9d);Pv;Q(Ju%ebVizzJLI53b zPh!OHAJp{gOI#;7h=Uqg>|(FaL_c_?kVbeCzQ@a9A^tOkxGoMGehuq0Sari zMl5_e4+H4hxTPrEXF%(Kr8td>VlcfMHBA+jVs%21$fn`_CHsKzKFt0K>d1({D+!oS zMm?w1FTl#mRpa&k&Vyf2Py2MRER&8B+gA2%U#Zpopn0W<)5oLP zmmvdB-NLrrN{X?G*U*UB6FFr$|TkmU#9!k1-6C?%gViX3EQU2 z3b~WBE9_gbEP{fGm2IszV-vF`XRKJNaei@{0q5nAs!f}+CRc=qN!`(|Q?`sb^Q=>i z=8?>fr0{<7P7Vh>QNJ@& z)wl(9w{qz;a~#MzPU9h?C#po8K>CQln)Bez}=$!jD*+&WY)4R2F|$ zwf>}hnUMsN_I%%qB<$wMurI~Bic}YZ9Iat}3K8d{_nM+9KJnwM=IG;@Ahe6sO zqEq-@kBpbuBj(Iu>AZz_UHbuE2k<)n_oVh<-g7cNHTv|y#7m&xL$r<9&c+X6o(ShF zoUN!5S4YKa&s+!(_Ufb5@x;(v^f#dQil`PKFMAT8YVv0d^@7?ZZIAustSO209WXImld?k*Prg|)ZAOP@FSkazZBxuKeMtk?BZErBzLq!~y zs`a2$J8TbYYVW+!bLw)CJpp9?VeIX!`6(ZU{|oqx9Jy=w>_jMb3!iI$PQmAqEjz^L z{aZW4=V___0eC_1NyZ7v_N@c1SN((8BeMgs#YAk#<0G8FCVo%E{ul5W>$hw8e0j_6 z;`59EH_Xx~xcvE9(+=@j#`eNOB`16gd6nxIO zWrz6Oyy-u~=M~`{;`1Ihk%m7x9}hRPmO7jtP@CX?`el()oO$rZhwx)s!=g?LaWDsE zqS#TU)TMA%SgZ+4_e~lwlt(@Yjy(phQTzkDHyie@fAh=7IJ6I8;#dytqiJ_78Te9o zk{a3ye3O}i*ypDx!~$rpKS6FNa5`9kNDl>PZ$#s_`P7}VN6NjGCPbb+CToZAp%rCc zDy5@hUx*6(*goEi2olC6gzE(MVBRWaT@vtRq=C=hKF`mD7Wa<*im^^m-D^M#Q}K3+ zM(o+RLynvF6A+`$&-AyKa()Wvq1($UfGG}MF8zfsCdZoQNyo1^L-8Lhk#G(?KX%tk zi5_e)b$!^xQK|h4Irx=Ig7!WOR*PSv=?rTP)MBZhw$`A6+y?7f&p-VeP2KMj-QT|* z*y}fzDaYQU58u6MhuAD(i|O^@cJ1|-o{k06+UvFdLd_l7Yv}CR>bx&G(R<4Jb>Kpt z_qB@Omj1@(FPp!yiM@FkH>zT!hf{C2X|{pHNYgp?*Kp0-C&Othw?XQviBSPxzQLCEI2P!T9vsh7L$Do_QRMe#gMQE@rze* zTF%$&LvR#TE8E1uPD|^@@=%UOLLEgYsVi1<1W9r%5Ljh2SsVh0G)XvX68CDB?~P7% z*?U+tkp13ZUTPWM3!|XDc~c?1>M_tqi=Kf#nnneK{1jk@x1{&rC{un<{6Ge`>VPMx)v*XpF*}X~ zjo=*EZ4&pwiY>#E*csLkfraalJ9-*=xi7{@*B26t2s7d2I)z196)V06+-v*(GZaha z(^CNy5Hz~5B_B@sO|*BHcQLXA5Y@Q1>V0e#!iniw?@Lrvg^{V77d*`h+=9#<8$prA z8I>D|b{sXfNxq$nqBJv2S+owXu_igT07DtO?l3uG><<_*oR9ae?D4@bf85Um zRC(=Zy6Y`solMz9VlxZVQpu$S%P0Er!AhiE5+ z*%IL*rm3Sx_c$Q=n8evEk^-`Q|F>ZOdaamz`oWkgN3b@nuOvU3tam3{aVJobWoh&<34cPKD$y%VC16r-k1J&cxe%~`A#f+B-+ zb=RKoj+kNaypX&2^v|>@Mn2$4W_Y3cL_m-u$38pTm&3}v^sm}xB=Vecvn!rbOBn!E zcTTx2qUIWIFPOjs`7svQk{LdeFjr%Ja^vQr`V;UffPh+X%4WG)2Z5hZ)}Tx44Y-1J z!WAaiwUTo%butH&_NUYse<3LoEqb*$3$)Md8<>Hj(;3SeoXH*>vjz}j=YuCxio07~ zT!XM~qz@~^TMP$GU=GuaEQwVytYyW)3!6MfDv2L>I!Su{1kG2;Yt#4S9R@hJ+WHFI zX3QUWK&WwBb@(5qH37#UJ zZ2V2r%EC$Rf*Q;%+TX2FE=x$M9$*A0*J>3%P``7;oj$7+XK#syOlTrrsI4R+e8K{T z=-}rqdyQd5eNifkOc&^!DxBM@63R>t&(OR6D>0`IVwc0wSyslwNyyj~6WPe}`i=Uw z7{m*Kah4&Rh{mspTj0#{!C&@SYZ=q#p~b-!w+%T4M~w+g*$ewX45fqEg$oDFDeAy{ z*sDDB9Bilg#6pW!exT#*0(@n^MRQ)J!dWBIr_l1Zocj z%%CrbspS;@A5=UvyU2Uc9>H@jz;F3bCD_az|2sT~KRWJQlK)tU`cbSF?1K7(IGbkD zpEy+l?}`2vtAV~tP3L;c}ynIvTM?B9_ZRV5KMGp%SuQ zrA8tVDrG7tD{y=(xt?&t2IcWgA~8nzmWM*;p@xKc%vdL@Ix`FN-LuI1NGSEWq#Dsv;Ua?SSq0>H>msb`6jt~ohWps?lQ&O>* zPybKk{t%RK#tSqIjXu{NHHZ0^?~ki|R)z7b>~h#@ekxzN7guK@81FNl8lYW?_P zH40x07UGA4us`e`!VZSU^B`>5*MR0mFEq*cx;X`3>%Z3cnsCofN8hZEt0$;y;`Cq};Ub}~{Hv&F< z)e)Fo$~dDcN<@08po#19^3U%z=zky3McFjJ%yeqiBEF0mm1hDL9qm3|CUk2o<-4 zCSg78yx$QufFORS{n;1jK*#H0Zl}KXk6&^AxUF$~^Bo=>hgc;{gR&7~8N^12ri1Cy zrXinCVj2Ll4#Uz;I0q$DFBaP`Y8?o~IcHbbLfdmNX!j?`JP@2Z(69fl^4kkcEr`K@ zgMvvCAf%iY0|4T@UaWFqQ$dJn0|citbLu@eP#l zH?+0a4oMxs*hP7s@seH()$R73#uX7MT$dhG+q19ltpSMX?W@&X&;S&wDUl`A>{Hgu z@%)$)$&gTu{)QmRl{OONnWe72!6;M(1BKrj2w@H>i~&{dA3tXoyBF9+w|Tk5n4NJwV*8S4?F^mv6_>~b5 z1B3D)g9rQMEz1z;%tbRK8Y7*!vr%`R3+5tiu|Z@DQR@-7?^G)Gi{jm=Y-lf9$}tHJ z3uo0Rt$LFL}8X+vFMk4Nd8%?JFkqZ`ztJa2NItw8l_)p zwV8Kua);Nk3Urv&p~L&@oWzqrA$a=oqU2(1(VdL40>Nz_JmpGN3fcso5I9qK;)DIq zOfR1F{lEjo)Iv(gZ%^IDHnkuFk0gBT4Nk=H^m8Cb2_3WEB3Z>=CFQ@;lfRfqma5O} zFn?Fc4|=0v#c5>8z8&U&X)EE8aDdDf>XCiOwY|XXebVs`<`t~tA74k>pi9g< z{ZxjRV;BXiQ(|?kh?S1auuq%;m?AxFfCSJ|03DThA^cY*57_4nFH*cNs@-}>Eg(eh=fy3gd$cd3kE$YS0@Ks$+uP%DdpN3%zbHf8@uqWL zBq-WIA4l%r+zSyU+FuEEL*w(?(%(QhuRBJ>D}*3TF}6q*!6+8-u9W6`aS%BUV=Rvj z4OS4t=ioQu=SFGc=A(?3GW;rQ!cy<%A?p1ZnJVE>m4Hi!pT+6ur7u(ZE3gZF+I2{% zh`d?Re@R7TVcEu2Wo?^=RP<@9u(C=jpeCE=VujzS#{7bk(#D^UGMXR6Pdp7an(xAs z8F@i8KCiB-Dt9;T1#54&atY19{rix~-z!z?@$|Gv2A@WH=;G|GU zsYwf?j-LzBN@lo|F~3XK#?3YLSm5l8BW7r4sJXx-2rw!P$nuZRRnD^&`1cxROQ-%Jcji5DfhqLZEb&*I`B3c~!Jf=UrD|Ew2C9+`R3#hip;+Z>M!75~ zyYN#IlfydQ7~l)qKaBM&eOML;I(}P$?^h>yU>RW)9(XmS*gRcq0l&e(t&$ht`nRY{ zP-Th!Ey^cC8x(kUjF(6HupoFu!Qt=-s30o6kPr4Go*)jS7Ljnp2_Au`AjE-1=Qq7v zemer;$Q73+ILiun*sMg#g-LP0S60HcZe$wX=ddl{9>CaB25HHrUtKUq{OXe_Tf%OU zpaur3G!-zYLd1#y$#XJL!~pmc{yyJvB%Wp`g@3S#loo_+Y>C z9UbslPb3_0tk`nY2v!?#7L6~YN;XLrwFjapCtK_%85=w1T6vnfh zbe^riJ1Y}hqWnen4~fnuU54rCjaUin1C^KCvG#=$_b`7Zl5aWb15bl2M`P@hAU*rbXQy z-t-kr%cm_rVTcnMRm5$TkuBtUT>dC7qQm=K6bFniAb@1p#fJjy{K_GU8>>+LLEE`YCS^zxHW1iGyyYK-ce>|!rsw%S=h@2sX@x^69hMNC(K=cQb%Ii? zmXu=bkqV>h+|wp0Zi9I?TK zVm$wc-BOH6?)30SQr&5sDjqQtjE=t2;PQ|C?%2i+)COlEHnzlDOT`zDtph1tnc2yz zb~V4<_VaR{x8HLy#$X=Q{yhwU`@i!g38#zETkZ5qf#Rh*76S zy2HPaiDh!$DS9VNkt`Z8nJ6M~co!Mu|M(Z6iFX(an%oaoz-4E7*p;1wY5&A{llRe< z19y3JI&@wIjx zK!`u&Hl0eZiG9!>-0LG@3-B+R`~JFW}1CKfSF$ zVb|^e5S05suZ=_#=q<@d;^N+=6CM(}2TAw4SOt7wT2bkr-Ct^1AunQdRu^=TdrO7KR(k-;2%B34ft*rHbH-L&wZEu#dOGka({nS1vDirjP9LthbLYO81T-? zL-t0$@*L}tFC84RUM=7hI@W0>=cF43qy$2m9r1}WF~a*0621ANhSMVXoa=yYTWZ|? z8vG@)id2KR$L1{K_TTWGyP6WLLK;GK1opjE5hCI1+e4poc6*4drIte7U>nK`o=l;c zy{}sc3F$f@S2A1+_LVIi^=O=!ynKby*r-Zj8$qEWdff-mJfM1DK*s?ZyitBRu83;6 zniWPRZWc$d_YFEp%+Jii5%zHVFQ{P@`IRkJ5Sg^Gw75>HWImB?%AmnqTc7O zKy-6&8B~_$L#S@u1ffE#ujO5-q*-PZ@F?Bnpp$<@5{31_rCM0)%aXe^PqNK$hQ9eP zc$inMk5g5X(&?D@mYBo5K868*)~VL<1kskzjA&RWDEsqgd|Vd6YThMgWlXJqTL=>k1LfA>jEbVK}}h62}uCR!S3w$(-rDi2M9hDQ6&2} z({V9m_V9bedASkSQjW(9xHW&dn_t;)@vCLZZ>*urfIUEoDgk)g^Q(VPYp7Sb<^j}i_En_NA7e*cVtiyZe zf#?(QfvBJMukjq6QwZgWHtAl{8Q6MxQX1-V(uQ2=OKWN?N}yq(TMpHLk=T9{uhAL- zU}I-N|D=QWG%Dq_q;_^rO#K!S#oi7PaQY+DLa~S?qZtb=5SO~bacLo_cr94 zC0i25&2gx}%cpRza`Zf`pM5*sx#eycnvxG`!G6L|KUNzqoO^w=XD$bD*(0y<99f2r z$SoV{xH&!fpmiFnI$f%QVxzKGnPWU(89N3~qQ-XSD?CLGOjCqQ>Fuvx2A&_>E`J$Q z`w-t#);AJ+V37v0Sp!G0(-l5*xNC#0A<(vzVTm%x4BcvMN;Ol1MYmx|t^|ujrmWnj zU)H|PUrzC>Sh4uxndqjPT2V0t(F$BIg}~)AQwqTlmcv*BImOHktt9h%^cAc?L(HS4 zdk}uOa3=F9a|7o^8A(3a-M;pzXjt2sOo!6HkKf?e21K75@x0K!cL7lOrl8U%pT^YF z6~8tRd4Pc*I`Dwwy1Q{(-9MzZ>0%wDGiguF=zXpHLRZjdv1iznXF??HhqTj`PkjbP z)kmv(!P}*p$i1!jRc^^FQRvrVCTtf zdH;et6E%$xPZEGbkVSdrX0WtdF>RX`|65!8eJk}NaD2K0w6^Io#ZYs8k)!0lRrTLsP8PteYR4ghrLt%$u8q`;$V zK*Vo4s*G7+7Yd%B6&NFkECZTrR~bLR1Za}L&j^G8Ba)e{TcjQ1Fa;u|9s&N@lEN*y!?fgw$Y$>hSl+p zO)gQ7z?MfvDsh0m0Fvt=B8x-$l0TX~@+MMLhVi+><#`Mk*6MxN2UxHQ%G*6JBNw|C zCy#v(nh|)5*aQ>7@EW88)1QKP#?>1D{Y;PXFhfs|X%E;P^d8%PR6&q%s)$01tNKb6}6Sk3Ew8 z;g5*46n_Tv<;psQnqL3S%67DcPKwcoKi;${yIx3-OcV0C8!|E>9}*GLDp|B{Ex4m; zQ4vOU;#=v;>QEWqeS2;S1 ztd6h5{29)%+&Jkwv;Rgjg6G9Uxw#EOKeUqH@sCjz>Mo9dXg5ELz8iR%2o0tBa}zH| z-_cR}%CL=KW-6Ho4Bf}TAAU%`h2mT@6E0xoB}>99sg^^+KzK0a0o<04J|ko*-iT7f z&O7_x^WXtD0Ro@BSfcF3d)(GBWxa4gWUgWjOMip$T2a5aj_sHa#NmwKUG~l&D2VWdYMc>^*J%Edn*N;4@kY^e#87YQC^ai<%)lrNydKrK(ShODomy zDYN;FKdf@WtYoyb*gOIOI*=XA3^wV3wj?AC1a%>0b10?LQGiMUx?JtjXUOBPn1-S_ zwMybVB@_#0<5zjK@jiZ8)795GnPnwE7`OjO&0}4M_|!b+qQa>xiwxWZZZVqgmp9pe zm`vODc6|kV)I65hfhJgoME>#FR*&+$!FdLZo0typGN@)?2t+QYELwoqpd>As94rth zXA7eEdtR1M{Jj%Bak{H|D#t@45~t5*Gf-#EAMU|+DnnQmWx~ma5H-M)|IwJ%M!bM) zs@;Kc|4+@xGG}VI&!?u&DEAl7AXaTxfkpwDyZ&Mag<&S~fv1`HL|vi$M1OTSer%vW=gYwf%y1W`C=& z#%CiHUHBH5t%%@#q6-&IO?1IHJyLLRMPxmY5L*DyVIfCf~xov zq~khtfs9N>r|^-<$@rV_%|AYq$>lkj(XGJv`Pv&3e#b|S{p@&hme_duV~}d-WFMe# z?c}7Gof0<3gu=iPCJM()e&csK;RELlD|bdaRv>Gxf{!cVf^ymrWgxE{$~NEL`%*^+ zK6MHLgxUD1q~%kuEiW~7PKrff`?Z|4A!56U8~j>MvxVXlG5~ z6}ygUkuC*v`LVJv!>-h8k>HA9@V!$=c909ir9E_XJqhdE72td9oy>>6k8RZ*kLPK5&qI96Z+YVf6PH3PW;iJ&11)YHDO3aIz?KFW zzp-owv|uS?{)GKP%|F%mXxh}dzALL(`ItI_0xMs_kHM?I{5mLi;27hdHluku4JT*f zMu-JfO-FMe356hG%lBjlKv*OC{2BR`dnjut`LLc7*yQRANE_FG@y{KzgE+JK+wYhr zhJTu?5DNcdBCQR~s6F?>gtdWXWo7_c6TeqCl<93qph7E(!L{3&(xg)o%0iZ?p#~P< zANgapJSBnIw6${>`$S~hcX*)F$z7>o_gd{+e^5+jbueK0yb(uyO)@ z_j_wb%b%d`K=UxHw4Sqyj>RS(IUge12* z6&aJXj6}r_cSVmY`NU{0VN+Y+ko*knfpAAQZRuOz+n7HTQ}gxxOlv5h&nlo~_eBP~ zhx9--3BZqx^%93}DE#RqW&~f+z&qC{hXW=(`z3j1sN2fj`XH3ktD(k4BLVL3jEs4iCl`nP=@h zb46Cf=E(}Vz!wuJMsIc?M$X{WS)t?`8BuzH_!{Cyxk=H$y{rx_lVe{x&J`o0IVj{) zm_ryWhbyRG0a<|cv+7idDqy`-o+X%=+tQ}7-la-ud}TX$RC?-YuvlUJqMQ6!=OD2I ztbg<9u3#M%Q4Btm-5oxxduh3I%0Q_-bfP9UT?UVO|?CL6leAuOMwxVmx(%A8drju<&9eppyR-lD+<_UVQ4i!4}$G+J_ z>MO$E*!3*h^+N{yG@#vVX|JD0KUnz* zFDTyJs< z475=ebimm=zh(%Z(F>?@E;h`tkC>?H%4c1L>FUyl?|W(z!CJ0?K>LVvrY*>OK7Cys z>GT8f(~AWba)k@a!(qbWjb5wXU<;8Mc|Xxa?0t&52PK{DG1sc1%GZqRv9CmAsXq^` z{v>9{MC2bE=Hy zz=ok$h^aiMffjTlQnoaVEn7OCkC|>!*4wQQrY);^Y5i$xA{hw7d3`l%YTm;$R|*@t zJhPo%b2?f{P-pwlIxj}!OYH6sK?}5FsI%R8+u_g!`P2n@)CIy#z>%uh9&jb=94Bzeq>#MF#^5tFf-yT%O;=27KD)jBDNk!M+MF30hIGfGcr)el<3|w zU!J{$13z>{D2?$;YyD$Ps3S8q5F;UgXi6{@f}yds=dTq7P_ry8NX>6IJ^-2=0UhF@ zi4UK~)b*-=fR!Oz;1n1lPPv(=P0}{)VYECYatHs@c&Y1UQ?`sdI?NLS)wN7cpclx9 z?x*?$RSEEe_RNFU%EU9oGW-GS1?j+s35l_CFT7kW^GM8q+W+XSO68-}{hm?;OR60^ z{S$ioIjGCdzDJMbuzVD_NyME2Z0vG$op3_$I0<&`?|_qy5FU+_Bz%Y+^2LO)K4eK< zn)M++E?4VAol_Edggq0$r9>&M|>b0Egx<0T!35ThlR1~C%&7%x%$*{?lQ$30nmj4lr5Vr(E1n84zJZzrHQ zv@LI($8wX)RPjR>dWz?=cy4m>F;e_#DIWecijGu8=XOd4{8L;*NV2#scaowLR8fGE zoq-o`1@5>yX&p+y9#5YSNT3C^_k)8MUxm(n>3h8u`!3>B@%l;M>%Zc4Yyj<{mE9^S z4wt>n6i$5DGw&zACumC&`{+B7=iwKU*YnBikT)IgClW<>E5(>Y6x}Hor)fX8$ZTqZ zv^s5mV>$~y)cmx}${*#KcX=iy(Mu6=bk6Ep=bbAN~T1#vCOxj|mQG$e5~a|rl8 z6Sp!g(ThGjtty<#ibFbv*Po#s!}uy3%k~leEwjV-0X20%pC2DJ>EI!S{P@5OL56*c zz7Gxhj;?xBo0usPN%25}%yhn+DG4$Ex)+GSeegtiQ1v(`+7n$ogl5W^e{NRsY90y= z?G_z@zU$k{@_4e`M*RCRy}XWB{v~KvONW9VXaLJW|Cjeg&Dp{+3$)Qc^`b*yhJmQX z&V5nmKu1uh^?gwnG*BExaaVFi2kXC)0qg!#?u$C@N=QsJ_e6fleNowx(RW|eum5yn z>U~i!>TMvY_eK5AO?g=O#>)QSI)X!yyxB?npWPRA`2}p7mJo_D4>~WyJ{RjNNJRKe z|Nnha@CB{h6_c}{NQovdA@Z zkHCQ4@sm~yt4?Jo19~q>Ere>7T99cFD|>i7@hED+RBGX1WYB8iENa~lUc(GzA9J~= zg?xUATKMToW)!u6IYLagTY=F}oCwuXUQmd;6Yms|`l1sCpJa(C!AM$0#Na_*9A z!*h)D>{6GyOAc^o6AQKE>F<&Y$-QxMmmF`4Lr&ja za>wd-MoTH45_ie<#IM-VOk|hizPse4%A~vGe$P>5M|a6h(}_mQXLw57CHFplxp&E3 zj32SrbWZPGa-sN>0)!VyFJ0(GlIVs5ui3Ic>^kUw!7+k2;5`=70Q4sKi}xJuYiH`9lGOuhkfjW zZb#2MK_0YslI(9@5B~}#z83JI?aq3y?rTAs-mrXh3(+ zYt_nr;JVS9w7b7=8YqG4&l5^3lhb?*u0>&7_XSRphb) z8F8o-Dhg@@FT8-ffeHCu@Cv=)3E*l@K?6RUEu&1xj*KPX6yC+5Y7#t}-S2Wyd{qc~ z~ z2uFl?2bz?VCVE`~eiRz>Rmf;MU3esj=|KW`$(h@Rma{*h_7ReJg2GB%?8DiSQymm1 z@M|>}@ZdhRr0GmG&r6SvR~B*Wf@wM5ujwUD$3N3>Ad=l9MFwHzz1qsJ*T+R5DL{S@ z^RPk%E@{fJUtWo8d;naY$#lp-p|m2x)a;&9mt&WHrt$#;GDHTV$h`LIEs9D&05C!o zf|@v~1wDc>p1wl_s~Lxrj0!_K&=x&@&{){qlJAX{5>5_Bbe-_gk6;2lS$lJ-8<;nm z_hU9I5I94TP`ZOofK7yWpqX7ZRIOeRnh8AlylChJ3C+j*P4B)J*Xzt?p{B(-Tn$@S z#;EuPGlEl!R+mQ*tldUX=P(OEsAOy#fhgQTB*zuPxq*5ur|Nk@)uZnsa=^F$5L)Y? zlyV5zfC$YtGL)KtShr!V1fo?mNO@6eld|@t5LLaFWPzGD5!dB@wUX60Vrd{h+sidGr@E*ARF zPzMP`HJ43UMCMcOT2BFYKzLt*DhDscD#)tnTDXhy*o@}m`Nj&YS+BjezWO*8Xgf-~ zJD9umV&%2{p4hgs?~pKjkZfea8Ow|2UV#j7#&TehF61(kMj=aO4wz)(`CyW0@5}im z=RgjYymdGSG7QJ9l8)PNA5@N8101&}q=$?c!T{OphAHuHK(js3Y#dik!Kw3@grNPJ zC(ln;AWuZ31iO9kgNTLy=gG1HZ(||!y#C~{^4H+OeZp3W8`pz7K)*3sc=@m6!99&< zIejc42UhOgl__q-^gnvsh#uq-@zWf|6#JvAZP2LuwiZws&HIwJ@LndD>WhEHfg7mc z@i}n$`km2o0-h2MT#!&6f{*$-ROH<8>%RcFM0;ClF97bP6LEYbo)S*m2l(YWZ5!eK z#9r4qU8l_vF!21oXM6D?j#}NEba=^fG0>SDDcI5~Ja#hQcq%>P3~!}C74H8{TWJEV zCpf;F+YI;Ma7r&9$2;P?#c!4+3n9LQL9r}C1;#r3!@&kMvS`F}us?-t$`(u&{DDGZP+TVLN99Cw2VMxNS{^=;0;BX; z*SA7JIqQhx%|E(tA?G<+%!w4Vpo&tr6#3&qQ<8!}Dsj>Rw-4*lEfR0IVklrEqwlv~-~o(Wzq zS!pzVj^AaGEoR%_vp}2@tOgDAIDas*^eU07|H>m>O5)FOfk;&?(Pgn~QiU&*2kh45b zAh@eApi2FDgtwG*?Y{j~seIz0j{O6T*-0z+sMAu|3`;*LBC=)xD_ zc*m}#ja!PsqfZ^sdg_3sIE@E!bff8FbZpr4EMR)A5x1sbCUK=+UKbTR0}SGa6F?t z461d?fPKCv!@bBLb8Mnet?X&|tvrkqJ-M!7u0B9aJuJ9J6?}~6(XOD+d3Tx7JV?JY zT3*7F&RcIZPs6X+@9_c2homb$J<3es)BHy~_H>{qaW=6NIDxi^JqP2xt7Q&Hzl`Q_ z;6pT&HFD~crBk+y5if-f0^hrDuMJ;nG{3Ch8ZA74Q{}Ihl!x(K0zdVWP%IEW zSS3n;X*|#|Dhqsms?pqC)sV<=QSF5AU?&5b_z^aqH5e^dxlQnbH>2eO{?;`iBD6In&#nV-k%djUHCG%rA+p8BT+ zXlKd(BGxSI3P9c10cZ_nzMT=YUPomGUfa44gaFFeax6T><_~)-&pnUoP=;1iMl=%Z z_zi_bCB#2IQxWkmSs6jK^uAB|FLv`WZYV%6+d{!Ps+?3Z&v~{2g&vq@vtAM9{r)R3 z*(0A7Th@INY}pX5`1b!L`5&dA7~)OPCbbx$TKoXtz!{|Z(m@p{!bFgZA;H6ClE?`O z(!s&Yp?f$X!RvbyRp~>5XTe7G-vW|giBSvDV@AOk^gPQz28Tqm+)=*RYG9IR;vdQ3 zVim!hY6RDKBr{z?u~Syy)_XKbzCX%ClIgneOsPgy#LD?cU{TyzZYME8$Jb0W0gRv- z8get}gdH!)kg($uHvrj>f)Ty`g7|k5a7m6I+4FgD6y_(-NI*CY_|AS~w6a630u;mz z(+~6j9quNc9Nf@Jzn%G)hwBrgS{wyh4x~UY!(z;qj>#hgd-VwC9Oq#@>GD1nl-<%gU{){7C3Jd;jK2zau31L=kYy7D$Dg3D(5r1be z|MKvp1Xg|ctNxhr)$QWXgMdQU7YDYA_=Ai})CnFb{|b+rPfdqMGA7f5c4VM~$E#EE zSnDJzJRU?m7B&Enym%8>Ov0a$D&JOM&QD4w+8-S5!Cw_UpSvhKSnT$qn*uaeVR3#C z;6eIIbNC(2%^gL|87=DOJbhM`Vla|j^A~t7p*hlo(Ni$yAVDzZuwjVVX0v&q$Mhn$ z(tZ!NlFh+E)iFwsQqaLbyI9;l^h0jRu{Tcyx<1lumxQnV)8VV(-x^;J_fNvtL3e6= zwYVwi@%6Ve6uusoZtNt!(Cz8E+xhIagB{^C2Rp)P4t4}@4%-Rd=6Uh9K>w(;@77TV z!CNa|r@>psvFtAK#;yEzTNrqI*DtPqev^29h_(cwL4JTTP^^k0&=fsIj@r;3cnO*) zga`ZO$JNR?^iiVV+}GB$sXg46#X)au5rKx!qxP+)IMxtWwMvlwv}s26jDKYxLg-TG zSD>!P`CJr?LOL9ePaF(em{0ig2!9>{0J6b&P}YzB=viVJBp^lX5jx47OQ9X{%U5D~=sdhXOgW579grG$x$l8WGC5hum_{^v^9bK$;SDE|;Atic zFOme|clbe=EUdl;h(1swn#jiA|Do<{;H;eT_?vWf*~YzS7=&vLrWFQZvZWj08BGj| zi7?(LN`sk9gqxXZ=DIx!S+!nv5Moqi7Mqw0nZ?%RBM#L1IVAF4hj(sRbobl=o#I=Rsh`5esELaoyHzg;cc$a z@Sf5Icnx%sBy_M$?o1+pHjB>*_uJYpM(G!YbuQdLjR)K#GRpI*fE8A4EbRyXfh?f~ zpKWSAbd`8qp{2G>u)>9~!Xz2QpLsy^1|yCWC!7R&Yn`Q-iGQK&SNg`VK~Siz{Aj!O z`1!LvfCLres5k6e+v5=XZr2_QX*$wjXG4Lft6Y%`Wt4#{$feBfcSXFm47761?dA=s z=C+J4!&VbcyjQ`Jv{3EQ^wKN9pwktDQslqu_I4YcbyN~hYJ&w2eQ)gTt0DX#KtRAi zyHtDIhgkip_IA^zY|sq`(h08@dpl|z(9dXZLsM$g^$Ea(c%tEwV<=Tj2wd-7Hk0>bkhYD%I`*p0=J0{qfTOg5AOe54!F;B;ZBh+iRbs0tlPtfqM-m~-YgFON*?5ztesO~~5cqq3hs^eX-@q@O%f=8oBmKiuZ6E6cELp2^Q z{q3Q7jcR^j0{kfE7uN8#_*`{lh^;@tXotUZs$c-?VfxMv9BD#5kXOmOQ}bI-+Fy8; zt8I^-974!~bMMued~0a)*U{#$b6W3UK5-n(#Gb2fWhlfc?I-m)7L`nZ;59k%!5Q4R zY%|t^?_vRV{DdI+zq6IaE3vR5LP&_X^<f4u{@ZrsS49}y?VCZZ^e5f^}-~=`27$k+@@8TUWt<)f->wDNX^wAcioK} z#jptWK!UD37wU)^pp6;3k0MKizk!1i2Ge+;g?zS9sAfaTTlbJ@MVxelsC6P@&1G2I z!CHk@{NL^ji7iZ$84}ECS$ZLdoilqn`v>5ds1$}FJEb_oj&Xk13yM$>FYu6o3Yx~r zGs~|YM>3UJcK=rrgB}}#VdLg1oKDx{l@?CGtEmCTOc&z#xppYK_214ruy@(GQljtPbzD@AyQ zeYorg90WfoR6Cf?T80A%XY(ILHkvPnP^?!%!OFlVwuYp^&N%2O)M_y_?y$8grr@ms z?w?P7CY+xhUqYQ=Hy)&HgUo1JLL)DN{0aET5K4~zmlUQAxp%HPi_WAiNL^PD8;uf!xvZ}SsVlLo6PU@{$WrpH%T=-A=Oq! zV3t01?z;#*PfPZ!3cmhBQ;t^p19ZkhG5`bQlSm}2GTD~8vxwwwyi&CGzvweGzcg5j z^2h9-`&O3=AlSP&kJ@C}3u62ju)Ye4*dRY8V)7G&Ac8s3!>BtD35jQd6nl~xmA6;- z?;?-V1fmzC4lc%HA%cUuCSij)VXNUbN9Y$2g}#{cZ=foad&MrfAu}O8$7|>fvHyP{ zq`3*(W8=3gP*zH$L`=~TSW8`W?%$h&jn`X0!d)%g7OAv@wqd2dL)O563S7qS9CINg z@e!1gRA!@qKML|SRqjAz3eWhbCaek#bF0$7Qs^%ku(sD*pc#0#+;pe-4p#5#Ta8}6 znaU43lK1p{5GZ<{j*f1_DWo@i0&JZQ86mr&M2Yt(PUQrU6^2v+jGtm!?3v?BxB59n8Y1kQT zK^25BVP{7@b1A5R*9;XBrxPeTcyta|NMZ74nzpXzJFN(}FUR1)dG3&;2I9`}1?C%CmfuAzdU2@`|mh3>c zM+q_X6FI5{QVr zg+jh56tLjzRIi}H%Vq?q=PhV8;Xtn}H`H*)ok8dKj-MbjpCr_Uv&A>}I~QW|r5mvM zt;ck@fAJFYj&uwPC!bUG`FyFTB5O(T(iL_E zi@KbnF!|5T5!|wm1>cGhE!V-=rII{9o#e@8&0&=~=F%DovlgM-hCf+RS=cu8<_4L& z+kjp#wE!K7G20=w{9}2eDvI_s@;7r9v`0qEh1bS<-?rh=Fib@If^cu-*9{n2z>{EhT8A1Xe3GHH28hUtx6!yHiTNm#C<|!UTi%vyro}!1)J< zOESM4!x;>@^hsZF3*=TFLKW>&wK*8Xh}OL zlt{r2lwRm^5gwgf-0xGrCgUw4g_tEU&a02VW6!ocHOlDcV!v7+7ol|X1lXy{6#B67 zKn>gFLS06v%MH{@2<^cA7r0QvR}kv)pQJ(!|40F}1BrUhl7L@mDrhbv5bv2u_9oPH z8fs_zQV7@!#zVONLB{h3`~vw|o($dS6y#iR2*@0g5At)76_@cyBD0(@Yxp{f(*YjuBwEGXm@a>m){iYTUu2sOHkkuFVT_r1JYA;n0-sLA*41Z8gb< z5Wa$+2;t=umL?{@lZI$t$};r8S}^&-yyxxTC`v{YK0q&5*%r8ec|GCguX;{O%U|_) zO6ftwbB%rNU9zW+GRbT48?34iufE*y=<+^y{v^4-GuvE2!B$;$bNl z%UU2hnrjMzvBqiDu2q`{`A<&UMRa|RBmA% z2bJqMs9fj7Z%F1Au8=!8kXx{4=*WhdlEM#C@r(+|r{-Dwv;#+(t2=<6a$oc|S!u78 z=+{d539*_Zq^Ok}Zuwo<0C>w)v%mS$L%w}k7wxOA4f()a@CcD63(o3EKJpQB-Qzsz zQ493sC6sd{mX^r{q~vh~Kk$#`d{4Q+Q!X@R`&ei$Fa+j<&epQf`~6fJu}SJ9n@buB zzO$WqXU%)5@31?*!>&+s`$IhhQ0rV3sIL6Le<}j7;Cyqfj{vUxv^)#DNfO5d8lDJI zqB1gz=z-;W2dcE4eR;J`FF}K0E@`DuDq$(t`Nkv+m}S1TFSE>{x(lQQnXZC9nl4H( zGAk`a9w&-CPC>DK98T|F7n*j9V20~u;uVF7BThyW*iMEk&O>!01ovL=y*PviiJgk< z6prranW0u{^coNLO!1*q;B8%5^fN{=&F zr80uekr8Z4F|VcxUPLk7lJ}5e+dJ(&cE|VF72hkf;>z+8kyQa`wFdyE)YT9|QG}ectxW zcp3(QVJ*`+B*P(@jcnEqj1TLCi^?j<_GcW3$t@NU=ZT(XLJ#r)=1O|$ZtWUQk0x>^ z9{_n+fty?7JlzVI#UXqLiOcsd`L$e0$vW@BbyTk8b)H;0fkL8W3NJF#Lz3$xOooXh5590EBarFXUvk9SEMDCW-Pi zvlyOGl`4iLA_cpNpGo359~MCX8$2<-8?R!#IDzwL`INl~WiLYXA=D(e5QfZG6ag5{ zUmYcNG6Av^?i4RUt{H^ji#52I2M4`a(zp8RoR7Xcnm_xR;MS~#z>npyng4*WG5!iL zoaeA+k`Mq4ahy7SOU?L(YUT7>%;ti5BbYjnlqBsPI8%n!gfrz*umdYkb2(F@Wa_~c zeoLWq!sQx$MG?hC%a(_k8FNo18ACK`c%NP(XJAP3(4U_T?{PMU2hK1H9QiTB_(8_+ z=LduyfNCtz06joo$^oZ75(ojfMqkEcZk84NOUbg<{FHV5V2;@j#I?;?RXuS$*ua8H z9w}NT{88&2`4xcyyQsl|HYr~#N8;T;)vk%~kJzSTDi4qcPb7kq zf8w6EsyUE^9s@6~YD{S%wBBd!Pl)XKEsn#d4^AC`^mlBmLYvfQ%^4hQq{ zHON3=OPAG% zzUGQSC)|2w&#JQ#_+9nDQJ^;M(}3l)d5Vpu)2ympge@6+lD4XP!7Lm!2aOC^R@o%) zx6tLwLut76gF!nz@SF5I><8J<@~XD57al9@ zkI4uVu~+EU@tjM*cI!g|Td1x~vjk#_Nkt@&QmH5J!DJJ*mWxn((BKc|o)D_%>fb>N zb2cA`El+m#WDoeETJ9rK)#|#b{?6wi{@iD_PKRX9f7)a=CflitDbx*VbnT zy)yKOrvdL>Kfm&@z+1r=G$li|n-Jkil~COws=?_(A~eVaN-evyK{jFFy>Gxjo~|ke zOmlqgJi&I}yMFBJRbf0UrqB@HyZH0#LCY9RV*bsLBZluS&+%UAOJ&UiI?yWde&hizMy9vM!G$5bM}jDXUr9qM^-IVhrsl&`rCqS*b>g# z>4mNH53N=eAY*vw9WkSM>=!eQFP!qJ3olsvYI*3%u|X98AlVG$S<|dxq+G zaJ8H>Gj{y>xXTFN^gESD;#MMloqy`Ku}%F$b%XFlPP0HG`|X5A`r!wX)uLl5B^@My zzyR@BJa(NJ{CGF#+w)VM7|cIjYgwT!nErY+8g*7w$pr8#>SKiZ*fR=AErn*79IY>Y z3r*P@@&S1TL%7fY@j^bCf>?p;8L}3U&m~lkY5ySQU_9%;U;&STKoa&q3{w=uLpfkb zWjE*Qm(1y2bxk*5$p~{6lt@{TYa^vF;N?)gx^zJHY{`;I^0qHdO=?cc;melYYiH7` zob6Z8qvj*tP*+z12C?EI1$-CoUj=C>Q~(Ms$}i<5Gy2WRX9I4FUEdt{fTH)#yFf3d4lSS5si$D`ZhzBa@Cc8hpxaPQ~CBb z`2qM4(DG7b2)|UWY5KQ9HIASMxCJR5?l4GVTQh26UT7CB9}&_WER}5uGx8ecE!mu* z?`ky$0c#M^WhDb;9-yPvQF1B}l#e)1AM8&x=p%rb^F)g+8`!L2QMK}TK0tv>m{{dH z*FzLpA)>iS=^oFO(sJ>+zVio>5D)FB>^naj1&zRG1$xc?f#0Z+R!~dORDEjIsb!L&e3-hJ*a`0Y zu;cY8ElCxMfOFmYH$?(-ld1t(G`yRkcwxrDc+*1nAY)+mm-s-vX89`iTTdO>=4CZA zL2^>AgmZW%FF?eQe}9Lv@2;tV(5vhQ4wAcvZ$Nx8mRi)^io>$vS-vzw_t+O{jQ6Y! z?^}!h4d1-d%34S4wN8!E>&zkwBLEpAkU*kAfK_)-rq46%bBUQ}2y8pljA+e_K6-VQ zE%py;O=?Up(Xaz=9Ou3^UHar}v(jE$r{UQs@C0UhUW+APyCCf~m4uzDlD>!^`y*7N zK7dXYv>M1P&B$9L4VbZ?IC!v4%|ASTsmjz6HvTa~L~G1HmK&v{%5zLP!Tg!cbDZg0 z=&4XB!>wl_`+2?xDJo^}Fmyvi2urNQj{FrihB-548|*y?Wl?!)_W+F=lHT{D@rbAs zML^(mV;%6C5(-{J0+@X0iwp25saJmNQ*u0uQZ?a5-wV~hCe_7OW5!M3G6%Dn6x&q2 z@(;K8V2{O=d!WlLe~{N`=CBC00wEdH0GO7-Na6y60jsXLGHE~IpptjNTKhCxS<4h| zeUV8vk)w0{@04e7Wv@VlR!^D02!{DxANKf+xGg*IkDiFXRzU1W!b&*1jT3LXllr*) zC|HjdA<`;has4gxO~NkV?{;@^n#@s)o6d-#7V{QXCb-BS0xJ&EJ8kt3u~Qcj{v{i zd=z`9Fkv#QsS-PURPT#1w*65k&gWq~yMAYZNYDfv5ff3FQeBPj%oGwi!V)NKCm5k(f8$)}3dAk<81X0IA zDrENTF205>!f3@PJTAjJ_0!rI4hqgxPKqIO_b1ngR)f58wgO z7xV{V$AQFJQq_kKzR;A%`A*vT0RR*;iZB>}-Aus)RRN6@2GaQm4W^Il4JzQO%6Ije zMm!C1^f~7%WET{6023iB2$ODck`%*-xtHQ9M7KKj-7MC<{?5 z4hssngP#36@PQ4|(OBf8Yj`UF&?H;%8fzZ;tx}>$>q7Gcq~eo4$tO3NCjgaCx|=6z z0l97v=Ktc`jn#hiU?)?($jfKqA;M8^J(?bE}xvApk zf!D@N7l#?LUga6gh9jO+vu$(LEF6YFG8@NUM6}a3Ucp200T}3f_6iLRVFzTTWNa=Y z7=aZrx772jSQ$BrQ&h~+a_oawa-Gv|(>YoSpVYTcEyIoWb#DgHM`8%#LyW;nEOvN}+#Z6C9bQ@TSRXMR-yQSbWwaBpz&W3knprXNe(ZAmy;_Vo{k{{MfP~-0 z&=w%5#-T2txS(HB4o6#o8F+*j)#b?<_(hCZCFfIt8I1n#B?dKbhn6;n>T3BU-s?R; zfjN^E$XCIi3P~p~A*Hd)YE;;&*_0KUcCQRA|Z^Qm}o6xY^-ri{S~ zp3wa58;bKr;(sjkSFdOk_r6x6XpiOsf8gm9mnsxmslE)7R8`nf=^;}JYJA;D4q6C0H??9v%}U1L4CgE? zpD6_m(!<)5&Q6B4-yTh;S*t1%=Ft2mIIqI@5lCh=^GTU-MstWk9~Bl=ekkOdkjqyW zD7ZmF5lIYU_zFa`LcdCAa3~jH#5iH0ya>;Ed)kZD`o$POaV+fVyW%Zi3HKK)7L*jE zLNM`;{%H2TQs1OqQY%unFCf27xk=1%!LyXV19!AU?BI(=OrIHYpfk!6`qplY~1>5w3Z? z5bnw-2sc;=hunjp^s{WfFbb`)KZluNEZS%mPy&DdhUXWM2r_+SLS?mR33 zchQCzi1_K%iJVshP>mH;dt=cCjJ;X3p$v%b?+u2ykliNs2e7KCM$$P1R^-q*L&GUm z&=abtMS87&7SMc()mJL(#)nJebe6zUI-u@tt2dp%Fl*b&_VBpnJ>HFo-0uR`MPz@v z)_e*ze##_R+Z9u=KJDQOR&Q6Zu?MX$zB% zlL)p}Ef|A1(1K9X^6|+(mJ3YTKH{~*NEVm}xT9QQ!zA>5r@ordbsBt~(#2OPRWUY2 zBY|>*lmRnot16Of&>*&`WP}B0%^8XqbL55E^fPEpckcknH z9JBi4iDj(DRmO743F=2BM4Zf@6V*W?hmB?!R^ta@L#Y(7|G9+EN|l;1X%3w6Q)aIH zZluy|h%CYaar6mx1)epsU3{_lMYsxTl_CD-5vEI9uH#T5am0YHMb$qU09EI51;^SS z?8p=S!efU`cIq^COnd=0UQr=L%H@#Okc4Y)#)VMJ$2 z{bneY#`mzO;|yg3(maj-G>*{xUcZU`bWo_4_ejTn8WgIP6=bwDDpn7?xHd;*JjGCm zGx_pwDs!l%9;1>eBRMJoDrJ=1sD)Ev@L7)OXcR^;vtf=UQDZ9kHSC=H93{}0UHE1w z5HxHwhiNKMesvffKI0C_ri{j@=%rdkc;8yVfdGth80At5z2XF4(ISR0i6S&=jwN|g z+qH$7U{qPmM?u>}@4zmJ7}38dzF1wN^SnC104>QtMefuwmqN(o;@z4POrb)!#1ums z7(>uBNBM~X)=Dy8ABuuJN+||y7&^XRiKQHxr`Y4rO)4u8i{coSyiy!rR20Y5<#)yL z*IP~y&7G<+se9>$0mUF9-x;0=79rbOti=IWE^Ovi3L92ii#89oYQ78?+5HP~@&eA( zeyKSAZtDZ2z9%rGiaw7Y>7~z3 z>;v>+e{C6zo%Hs~0+Rn%ppR?MoG+!TKmi>`BKuJJ=&F6{h#jDROB}|@`D%p35T}on zkGXrpH@%Dgwa;+?3q$!nDk&Q*$ue33*yAhbmmV|hl%z5x{veW@0C zl`vna!R-<^{h1}yqQ-{i2a(7)LnSk2C}mFkQOSYIoS!s?77Av~P9`<3IZ?X?lhmNJ zN}u*w7|n>a_{dDR)qIM)v)Zd;Wnmg#T|fwkYHy)Ut=ZH)bj#_mZlU?7WYJRBoj_A( zp9C+LTuwtTm-Q1azJTc{5%E>oi{lS%D#nPaj6XrAMGv7cjUq+@hPq{pwh#BHAl1xE zHp-~8)ZOC5bbjCljZkeLv_Z2%b2eOsIK$PE2E!TR+{?#kI>y(4VKr5v8DIFv@-kJF zGEE@=`1=|u5hFJ{^6mlDAH)ogJ)EjCY?9!yIr2zQvenK`?J{PWw=2@#X2*Pcjl3&SG7pOsTLE=2BK}) z#ThEQqoO1FedSB^Tt8S}0W#A6l~WF?<%>xcs*MqR2!913(KXBXWjeor!87Gk4YlcO zMBXPap&BeM#`)u)9*t{s_S|>~BE3_XTZQ{6##uJQ5ps+B5kY}4mf{5p4rQq*{vNKF z!vZik9(bVQ_==W!j7^Xiyy5p8ud@GN8gr3nsJvd;(qvwbjiBPe z`?-c*^~uO^qdt_*b%gAPa>qU>ZiW1eLs0C%1NV9j{XWvJF|{T#G}0zw=k#4q&Uqan zv1gK`LYkNP;~83d6j@~{ojlZRLS-dDGqiCqTRYpAAtA=V@=)DW_UJ*xc}su_?DwU( zgk9vr41Ko>U^*`ZA#W5!{K8G9FVIwI;wKm#L_Pko9QKrRJ>`fg+u6SrUaFW%@w?)M zB)|DSn03s)F27ZG!>{{Bq-CakVw_w#$ezy6=`o1~*q88TLT z$}vxwvSjK^_mpRP%4D0=NwG_$PZZBYA7E0|+A}+Q->*0TVHA!Zb1|~(=DdNKb?s7> z4{tdRccD3j!zDDhbytK2YrUJ95F@zpfy|$u$BxqG&&6(w>o4T<&CSRWS{qhci#8%= zUIX{6B{^#ui;Vz9@}2lR^hYeEr2(S$x8_KM4s-cRQT#hx%2^y=IvnRXVtjOq%*Es7 z80yKypEw&c$e1a=ibH_$mM=2M(5vX+PchVbQfIkvoSzc_nzR9k^JKUsLo5zFu)MC6 z#~YUMDx-1>(>%3YO`1%h!dWy)`%h|*woqJYG4yIBe@B8q&&8vrSEE>?S--hVJ{P9E z;mjK*eAsRm@Szs&g&~?te|uZ>MTRCH_cIiV{yKivN+24!4Ey#qrtFTCsga*6;xzhNiWEMa4MO zb9h|%V=elk2V&d95!MYnd}w0N*VhijNw1iPoy>ai9*3iGp|3q+XTT}FJ)wI0JG-$4 zYzo!O$^#bqF}*b4%~1WmEFfe?l=h_JPv6xDlPvJM2#2-m(e^(7wzAesGNHKd3dvuP zBe|IB-Oz_@>MaC_(8lF6>@ILlc~dzOp;8n3k55+Yr!L1Q6Qo37J0O8AtVfa9@-#lV zk#%9K9enbS<#nnE9%|K^ykr4>l9i&011eBeP0)|UUdIgR0zzC4SvpOCL>*bSt7Hjh z6%vt%bH^)`rAnHmNou0Mncaf9%j6T3lrT0`Oo|hVVJ&|a!5FAze_QmNDm%;t;nGIG zm?hsoj_=!nzwDtMGT;l!vSOieaU5A;XWh#k3;e>bMBs-e1zsT6_A@EvjDa=eR{V7f zH!i0rYD+ysVhDNz(FZfj(*=E>*A$Xc1%i$$TF~P#Ghy8Ab`Z=E=f`R`XN79VqlDi} zveW|(0r8+ahJ`|5b6|ru9~4I@J6#BRk5Hb#8?&Mk!J>2jS7^CSmw{vHb~9E*yx0a9 zT%0`I5|;@$lf8RVC5zHTYN1%m;zT{AsW@IwNh`MN8|52fN`5Bpz2 zUyM)`4~#mYzn0smL)y{N94Y#BC`gZBBBxD3l4}&5hmMm-;7{sfV>SYU^(ruP;{l1s zUI2R$k6D~kh*~!Pfrys87>yw6VkQEy)6_~)bZ9J0JvaTJFiL!YG-x*$tsO8ihNX9>*XMA7$}Xi!R~^D*Gwla)(w zEMybg!>q}%98y;v#EefRj)cS{Bp$$&BOH+eLbE8QQ*c5q-o6oQAcL(FxtbP+p_|iV z|Mxbx;yQSlx|9j|WNrLbXvN`eNLl4`|In<2U&69~>n*RVQOZaVPug)Qd0Y{RUqgRTLY~4et84tiX~#>V z!mlC1uiq#6H6kyaU%EC4Kw)y$y+|&N#v$56gh7VlD@%mp_iYb~-{%2sghNTZtdC@_Q=Dg_~4}iqtFDv<_fSEpRaBR6LkP} zi-{L;av|G^kWKgX7n-sJ(4fy~ioUl+lh+STrwOecHZ13K57Ic$(%Ly6J+-@(%Lqg{ z!Kol5N`Xj3&`&no2VQ;eH>e2?*!(VXH)^^vevky2r%F;8*p>rcF}ce2CfjuS_XOwn z_HthFAO+u#6~3j!w}dhP3W;@5G5}CPVE$CW5~Mb8=^Dj7HRVO_;l~?nuHA#cI(N@e zcBnw99A!gH0@rK8faa`S1^jSd&M9DHmS8QJ_ZZsY9|r;rs@RPbDuEQ0F2y7T&orqgW*~2-a}VOu{{Cg%9qRdjRf{2JRGiXYnon z`fWSlysKo~8LyW%3PItjXgcB`H430CyeLbMJc>OC8bM=1Ss}4vl*k2y&8)AdoyQkN z#Ciy*SWVCdwuW}vDeph0|`25uO%cAVwRy#5Yn~R(Q`XAeqFKG=fCE&dn-1- zwI%i%@OtcZD#-RZ9fAz8fgxdV=y5HufNk3AM_%>8y*uIVlD)28q3!iQ|Jr$bmu9aO zqeL#Y)Lx(WGeGaUy%eJtZghyk% zZstq&;n5fv5&ayf9K#hdmFHUaFw|cas#j-kGkXy~2|2ct!ihaA-$tVB{i^+Np%tUr zJ4O))6P@Y98ex;m5r6W`JOm|BxuBCRyI9Z?a~G>xALXy`sB#Av>r}#f*n#_A^?E=g z-?5&3kK|M!-@qujprsT>9%$gEv6ER6e~@TsB&HHK!=tD*d?ev6p;~qMpU@a|l&hw( zgeJbc{{adxOWfB66tL$tmBXM`fw)fkJ2ldFZblcabLgx2=ks?H7$4w;v1k?TqiK;J z(|$ygNhh+v2U&Azqzd53$XbT7lwS0i4}Rj()m_-9#0P8=;BwzLHhcp<`~xLQ4�B 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�<5hFT<3z8Hip{O94a4d-OW7ejvDTx=am=~ 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 z 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

    3co7oTNXH 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

    Ph*A2v4$2_tQ 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 z z#DxuG8ygVuIhY6#t+cTB*#bH~SK*3*-jVUSTE2U7l1ICUO1m<&noIF&`1l-p%yXdd zbNVezO#8`?H57#N_21GB2sDRY2h?;>>u@oJ!{VNux2b-p_ zF-~P=5Q_sn6TAjASES1kVllP4d1EqBX^ui+c*Z&ws8lk`tel?jw^M6zNL#52NI;a@ zV1R^#(DP3ZKWqa7gMyEc|UH^>AJ)5Ui+pz~X@h%p9oiFU5f}Ta|__ z5NK`eD8#ziOQ_ks;uTk9nIJa?u|<0(QEFO-%3POFtWa$8Ab}~pMDsWiWumSEDs}Ny zDL_Gie=HMVP+cj*L4piKy=uk-Tk?>M>+F{C5~615jl(|K=(FlrkxL?G2D{{pe8PwZ z+!OpGGb_Jl#DbMTK~maTnEz;QMQpJIXHE43P&?FwSdiBo&np6*57<=&D^T;0i&t>z zI_xW|FAshhYZIr@c2XR^Xl~sDS^+)L2QUs3XFz9W*_3ugh1K>O66%ma#PM>q8Ml!SWU2IqA)^oqIiw>mxYt0p}1k0-C zF#Zb5o@shiD~_VU;3xJ8+)a0Q2X;%d#}PM=JQ@&%*Dxs$3g0JZJjVmmBhu_M)1uPs zzuJwOh~IzEz4D05s%h`ayU+9A-}LT*z#xkB2d;I4C-J7T4$#g?d!*ub>ULFA-GqAn zS2g7?4?>R@?)hBZlt#7pGzSAqE6P$!8u2@IFuSa^>pH#ccvGG?1>TOx=O*fomp@ze zzlj4t6@>AaiDDtd*(};}1Ki71JlEl^8b;e&Y28ERx)X0O9!HT2dvQ3B?`F9bzV{Z` z4q7$T&?*|Zsel%b^%1D6fkUPnPKAN*axJ|V+8uGs%Dut6#Q6aP#M>Fg(H_{iT2V}J z{EzriZ2$9AUMs&<0s@|a83s7`WZ&qh(nEnbI|m`l_%oQY=B?L?6O6Dl%Ju=glFM}C zOA1H>jR~Amhss)|x=_hwJVc5c*IJ>WrYCV8m3?xkh83n6^IFA5;LF4Ko{>@51Yk!Y zp3XPkHI=r9-b$@Kyeok14RB6&;?Tiixup>Tc%dK(BiwAmY?pa7!sQ3JycW5bB(CM1 zJSJPQ#AS}O*|Z+U2_fW@fnN}Cu8m~40B&|+=85IAnN^4{WN`RTCqjWkDV+qvK)fAR zwDCd*W?=>7eI zh{qv4Y;RjU>Ir%_oN}EdSd zWf~Z8lf%iLp;6*k6N#fc-cQeK;O4C;OA_!Q+K*|2ZS60>`^LumK3wRrdvAb`WO1H`cb5RC#TZ-~ z_zNLbyYn`VfgP9QCF`xvS>ZIs2J!X<7o_3RMcXfqkDg+m3~CT%hijEiL~V%iT(fYI zMO=e*g5Q&A9fXGMw%JzManr^txUz+9issN(7%n{@Xa*9(*Qn4aoDd=$Iuh)+R@4tNpR99K6y9oi~$uhYD6=e;SK zcB$+rO%>}9`RF2jb%B2jd%`? z@z}NRp*Nl5=uXiXKL$i`!Tu31blwiU%sH!kh}(t>)0C@J8kN2bRrYXJ{UGLJb037K z(=VKNz@el<4FwMCH*&;5M8jcW#tM!&l+CX$Z@ab*5gn-yP;n*f0(l=UMuVq;5OxnQ+OSLO%M1< z=#~M^xJjG-!>#ld)$+)3-*jnJTJuhKTpJdKyPQ&*q|u&m=OMyJi=t=vn+6A6TJ88N z56>*3cH+i;B zz^@D^e0s1J0&cbkr4RHC#-p0EW>hoW*1W9~aP{#e3UJ)Rf`ZvzXy~k&>I@uPPv}p@ zyG|0|AQP2^?>qTDG_4afVp3N@8X4lra{}DHMuqqSNTr7d`G~_7FHc(FHJoI|0+#W- zH_5Dut#)2_@bJ})m+4N%aNy8$%wNfH?@yZ9VHV^)Ev@FGYW2@R=kaAX;!9^m!$?Cj zx0{oM`x;QV_#xB4$8DN4COiYj8|VW&xO8%Os6qjNELJ?ajr|_r_7R>|Gn30h7Wf%i z#FbB>V)L5m;e}e6?&Eey>txYSa|oBMoS*$^&BBQ)1G_0!W58+LkP)YqcJH8Wj;n5< zM$^HVe#guO9Nw$+9AG@}aO#E2FY$8uFx)`79&4Qfp_48-);b#uO~-KPpSBc5d|}e< z7{JScB@{S3C7t$U`S$rD-_jnP&uoRk+juhb$8ln%BTiZ5b(?}QFBl`@D2~2ENR!1) zR@z}8ep)n#c-`-0-d4c5iZvRbM`@4-)@qXrNKeakP=8v7vSqDaTY;Cb`N&nT;naBo zoYo)V3yt~*R&AKTTXT?((p`na%K_BEeq(kN1sq?tqhP0zfrEiodye7~N5`SP7+%Hh zE$z*%uuYp$kT~3Qxp-%u>H~I$a9W?ycaD$JR6*P<%`|ERIE^g8ZS!4eumo|B`c{x{ z;2}kPb{KahvChQ(9wp#roVIseuTvW0(CdU(s%}edHTO*$i#h6b<`;%|_MwbP#Dnw3 zz|T%(DPWP$Tm`(ub`M$$hf*osk%xHNlf}ovxJQf|IODhR*zo@d7Y{K5v)!>qoOx!? zq%(9@5l$~v9sWoBys4lT59Jv8q2Z1BMT>JltHc8uAWljo4=->0uB{n)wB3F!#;M+-irJwcXiTsLiPg92elG#{!3@XnHJh+UC4JgKQFv z_bg#BY=w%0g%XxI!pTEy?BGjlI<4ZNZrC0u(v$EY3l$HY7E+6KkOkaqjE>`iC5x}R zHJkBOEH@+*<(KO+lwUd{sdFq~9WO&dbDyylp17R0np50Y323q;JsGP`roqN&+B|59 z7pl&aVKk(rfFJ5cJj~%-rxWM>T%$AmVs~pP(4~QcHR3=ibbjHOi_Vu$2YNN)%c#1a z8W8R~;lcx1!!+44q>!hFzX(4%h%|Df;1}VDa|pNr1sqpEm?aqaG)(3_lC6egm8~>t zxu>Taru7dLNYk;IrUI9)=>pFfw9={_=rHuW4P+wO*-3bsv7dRGnj5}KPn`D7Al^PR z)=JOYZrCb07Qjt!7tY&QOkRVd0XKP#bL^B-{cIO%80_N_=PFV42actX=?}mg^ak8? zb-o+uC06NHRrqHDF6Z-{p@%Zb{lSwFbxik zn+yVX#+RIo7r`K2&h|kmQyNZ2-ARG;SWB5#bE^#DPUo_D+Zm`E93sDTE!+tzAF&5c*g(^BpFiQ!OYnTGK`E{^kF35$0cP`vGZSv)B^NMm!H za;44gW4jVd3I-ctDF)5q3J9esJU0pDw<%oCTy=i|nD6LxC7zqtmMGi~S0pt%MI_Z3k10}mvdEfORs9K^;ONeS*txa3wUl8@P50xxew4eI~BdUIX6q? zxmmz-vw-JzO>(DLp||ZxR|@;~(%!_Z zu}&^@2E=DhWjLs}i%+p@gD8PFrXgz2IxU^;ssdbo?4>^l zpUl-3_PQ5to4QlV37?QRxs}ZVGLN%RKEaxKWF!b6g0B1agaQg$k_B-3on~YNU=rJF z_Erz{dv$P%WUo|bCM(V67WUGftN?7TQ#dW4F@@4tE$)TS1hcll{H&V5UCX^A_~8?n z*(fRZYOsO;6uzA&(D>ST76UiOb-v_fEJs^cke#s2d4R4>jQ}-I4^-0&dxv2{HY!;X>J)vz6Hjrt(*sDUhuiEJN1+q1_)ps z0CkRqB5=GwMUUNUZ})=vC{Q_^^$St(q=K$P?_09UaOza5`@|6>YiyK}T)ae?t=szP zS)J_JsfNe_kMUYzDYrP7!f zIIG^cm!xeFO_9?Oo6W7UU{6bd(c&R%9R1O8bk4ZT5G)c&GBUmc-FkF}>r)1Xds4}i z)^0%n_r`N)y=_>RQ()pN8L!pm)|>*^7eim`^haA`V~kI*q%*642QWB!^tYZ==`pH{ zMv)9EelW9m{(;`b++J-%66{;Upcw=(bh_dOPjuOccDxV(d&kW$s*W0l>xK9o4nCRk1vojlgP;IRw8swzfd+|jzY9(<+K5Cl z27KuKhLLWu8m!~FNql?+w|5}fnG6R{^Jj#&c?K*Xg>@DvLT&?XDJielgzr8k4GLg5yE)1TXh%usk`%zzronm}H|C9Tg&^IZ*M;DTTqoO5nY?LCcn4pk z$ieYALz`Y3SmRCx9)L#aPnesQ6}I)`s$mv)hhh0p;5E5zrlIwX4h}HDuXgx0SQ`x7 zY^b#d0s~e*Gsd<}@uFDqD!iirI+UMPK_H($36+K3&kTUKQM@YvJDXdf@MHnTJgQ)P zLIp|RjbUIeU}+ZUH}4b+G`2w6u(J(WZTAzjX}>6#Kimr$#KkxC%EpsyR$qkS_}~^< z^fYhrR)C#h8%1~m?PS(0KnTztYNoTcX}j7?_P92kh!B@#20D#E2C0CFe!9ouNwKkK zivYLtVdrBF(COwBWP!?zPLT$Iz<%4teJHS8$Wy+_}8ak2!kdv_7iM!zB1kRsh%q`jf zq3dm8>&&+7Fjn_#TP{)(B~`WMq-`@V9a~T6X0ardO0UrgNU5X}yY<5-s$L2GAd3`v z`SV2a-p5NyR2xp%hG7&ML7-$1Xy5?@^gx3QIPjp5LBLUY#-5F1NSV+tqAlEMiY zfOVZmIsh*0a26SCZ(g$pgFx7Pe5Tqr{B#`~Z0W}RDK1v&VDO8%WWCRQyVzd*G~(gX z07M2|Z8l6{+p2&Y*oGxoTPy*wKJC`c5~Fr^iM%o^O96PN=@5`$_PGL*BL$z2LtMR3 z!(Nh|sF?z1skjj+zzjp-Dg&g@W{KR;L2~}-Eui(H--X)R7ACC-gc-;d z^+YMYACm-kUXhZ9rhr_o7U_fjDfWqAe$rDEfOG@KKplPflx9pUaG3(2ZCREZL97)G zN<(5wY5oMI2NOidJU`Rf@J!2;&IXSZmz3{8ehbi;g|*B2agAaI5}=n>(ECV9vo%t% zeBf?%0c@KBijtQZ{N{ef=0FCxXaV+uiWjyvYT#CfH^O|nv9<2iVE{4}^7r@@`%oMS zl0Go-*k=Mqe6 zXm@tEfEt>`)2lDkMgcH7r5aC4l;7b23D&QE=LODmQ8PdvV^ru4NLW<*gKPTbY9XqeiY2 z`-4OVv+OFV=ACJzV6B?=fq zaU-KaH0v9bdB%QFrZw9S)ExLeZ*lp#3(eLKG%s8#+e$+9TXWBgFN3`orVYF&b^&7$ ziL}_H$zQlqHuCt~&&%G9kh1h!$NpB}-&Os>#b!r^X#?Mf6E=KJ=Xq)1 z%_1p(;j1spjv8`7JfrFtE>CEa(cf@6nna?3U-15vf6p6Kt}&y0Zs0wy474-vOIhLWW~w3M))b;XtxJ#}^)}_b1{Sqog4tp&+up zynvujNaH5fb^0g@^`DL3(?p)=d+#C*pNF0JY<^=LL=)4vWXJ!@as$F17sgYq8-TdU z^)sG5;_nG@0}ZE}hR?6i-)WpIInl2%YL9DO%RJ%gHhxRDKQWEQ(>T60Mk4IbkH>v3 z)GR}m-i0N`z}}?yhP7EWJ;M@g5Y4j&h4)uzK7N5I0(NPja12cZ2Ny+zLmD@;w7z2+ z0$Sl*JWqi$&z_3n2FinJV6~UK7sheWQE4Q&#$zvK_&j_H#&eYbB+s_-Uw0oW$364Rf1`e9`O+KF1&eSd_*Yq~Z9OS>6E1G)}vqe-!d1 z(5x&ZrlA60FVdQB5b2yi{Rs0U#8|6(J)wwQODc_;JToJzn`v=0NY|+eX-k83ON8ct z-=wK11nVO`;gN>zrC1p=&F841T{D2m^@stBG#SX@rJD#}1mleewlOwWXoL`L)9`Yz zrC}L5R~2a#Y0dr-sMkQr$_~r&xz>ee9lr=>RlZK3>6vGj{6$Ec#=c9?^v z&Hvcn0fN_U1~D3jA>4}{1^z;G43JGE@PU+HaL2@!`O5nA4^aGcl+tux zr-9-m-7roqHD@D+d2XpG`CDjl>%q6+_in-W^)BL|z=jqgad7R<)a~m)aW=`U_%KLL zMrvm)E2agyAGIkyw~SIkrB;IL6&0rEwp}#*+S~MW{SLRz@XX>cH*oHEeR^kD--8ia zTPwrO77m|-kMM(~4Q$#mzWeZc&J{Iupze1jNtgCW)wWA?}iBw^*pD zKd^QRk_^sX&%w@)MXylqhfDxLqlrRC#7^M01O#_``PWhtq$4 zXBu9;ud-GyIwFKU{LqBowQgk}W<#3JGZMq|3-E5;=x}_;cCR5V9#ywsn}FLWQT zk{1}po<@%wY&ySB#MlAc-DMj2?qp&EB^5gyTNxT7sj0mTuSbk>4o8~KmWqWQj*SlG z%;&W2(T~;SFt@s!h?cH#*^kTB5p~PUx@QCxRirerXdY;-1HKM%0$U4MOw^%nHJq35n_MI4RM%! zJdSY%j|YT#YJD@P1FQoX&JAVF<>)YCMR9u+!v$?A?PzGx$nV2x7=%rI9#P7Pkn2Wl zAPvJl*|dKLH5Gr|Uf{zdZDv8mpv^Pw1-kR*Hg__*?!0I2LNYu=mK-|>8&>FEIh(NZgQ78@91j4X{ z&upMoxL(AfeVAujXkp^yAk%TO*rXa>j`+p+LFNKP zo6fZY#5(6l6ln8@NT)6;-CC&sA1sNBdVj_;TO6z0MeG_Cl zd&kOrKc|mC7~shLIgJt6$s{n1+ZOyD^)asVG4jW5$uKuAJR?AJ75DovY`OMWfJn7G z#{A4x0d|s5(b>m{wzW~j-vg3&&J)H?23qCx=Q@&2%)pK(llkJKXq9zWbCzevrkr`Yd<9|+^V4f7yDIY%`NzmN5A zIopa~${&liq%$m={aG|2Jg3crFpm@6z}%*Fs?u(#V`o}eB@K$3?T|~vZh{4(w7wZ; zemnLM77DXR#O;MuonJ}BjvboV0yXKzG`xUZ-6D+$CT--Y^WH%>LQ{z6T&W43x@n&n zpkteXMmbxX8aPCW!FBN&PV zqp2hIBdy!xXe!c|XhY{#G@_u(riH6tpoN>QuCEXWvT2zXHf`|yiQ>G^Fqf-#RDvcE z9LYAH@=V1rj*_i6v+pL|fpWKc7&8c?b9huV3-6gL4r2S1#<1o(d@ve4@&wv~mm+9s zwjL7cn5`B%3@<1YVYO7j6ex74I9bLTZ;@YR+kW$4;mSS zuucZa!{=yim)b&DuBbS~uw)eX{fmV@ilM?QJPuo7xG@vc(!ja&wJ#7To!GX<7h9W4pl(Ob zR}7nAO@JY_W{(I9eI(_E2NL8EFs>#Tuy8+wfBc6qann_O1T^$SbB2QO%f|Vg&}2Hx zu!1Z^!ix=OE*Ly@Dqq5B6?2w|QRnXf`_2CXt)5r>+ij-5jZg-O*wxtzLQ~ga zX^)V*-t3I8#DtSjE-+LkmpzL~Pe-us7XG(7d0s_nfDuVvU|rBtr?IK4adY3~xu#{$>8 zSFu)SR;99ehn!&iDld{73Bo=+0tms_Z*29)xoTlnn5lk+&*ct@AdZ^IEG98OB4Yk7 z@9&8EWitYa6GVNa0@6xIWsqETDj-vtvzuTG-n;i`DpS|{Tt#5&3S}H4sg>CbL31jV z)c$W2x0k=`%PNB0FEH*b6U3@i{x4LH!P_eUKo8#7s8?#7W`QdZe0Gru!}5w|&QFedX~;*@o2|)WD~AXZbAmgv;g#AOo|Bl~8pH##P;X4L}}hnMTCx z3gRWz7@WFKmHwR6MGee?#ysA&`WCXfs{O#HAqEg#{N^56_2>MobfCwGD5z= zo(~9%GY;ho{(1``SIobTOo^ugm5SEG)S#_2^bvx8S{6sIHYpO|Hi#q)j7W{GgISaT zsmGCW=ta!+2u$Z`PS`Ziky>qMfGHfQ_A>;#PZ9m4vlt%XBWyr0$54R`@B_F37pc5Y zVR35kFeQgz$U=Rbwx5Osn;17M9oNFD!a*t7jr2$5@6lTDi zSgl|H;9V3lfer0?Pgkv&Dq4y0zwE z4WgxjILNaWfMq9wCCTtgEVzY_<$<~w3$rVatKjMsA}gz_v!&>J#oD67$yLB7#{jaRdg$b`gEAG>QUF z&-^kjAW$j-V>DmH5P8j3&@LH7sz@SbcDTc zAwmlCccU|E3xka?pc=bi9B@Hvn`Q$>M6q%V2(a{v7?HkXh*=O5*pj1iwOPR*0#tL2 z&5IE(0OjQdnir``YI>+(*$;|TT148=11yUn<}7G(0`S4zdwAby{)F16xWf%%Dihw_ z%8<$3h}+t525Oy^M7Y*lSL@N<#Yng)an;TE*&~maX=@=U zCfxf8u`DMk5ng#C=z+LKBEAr*gc#)?!3B=b;z7{;@y>+J-n3E+;s2*#{71z5Mmtq% zL-`Bhb!oJQyV}S?Tu-i@Jw6+dJ{qCid(rT*NJTpXD-f52jx6H!vk&6gMQ!b|eo24< zYMWX+#SKgo0;!#i9^M1a6iSVO0p5h)65t;jX`B%4S+m<$9{IpcVW3Ai!uRtG5e4b3R@nFCx0GmlCW zwKTFsA5V-}af9Fp=taynr9zh%IGN{BnUUoM2K?I)34yFYx|5Exm)wX>1>9k<7H*A< zB+(vj=zxwpg~<`Aq}pK@J?WtL3-)j00xPRbHtRA$)sl^db6X;jA+Fk zGq$n{vd?=DBjnh*S;UTptT4fX>mUWV3c3K0A>*QL334u*MH}Y+5mE``l$9Ww5qKe0T;m|oh9mA?{n3^_& zQkQ5x<&cY>iesHPZ1IHKTgWObFLqi%*`e3ziY3TktGRm#1KT z-6|EM6_|1SdMLBeWIxJ#4Ls8&bpIt}!>7wVpVet3_)6)Nm!Z~W*kT*$b0qHP-W4Iw zE@gFt_QrZH9iB(D$HX%e(FZ|;qtx+R$bnhCz)M@ejuP#xITE7{4-pYrJdx&iJ+Qf$^U4d*dIC z4~_SYKN!C;9vX}HertTp_?_{n@qzJKET_|SOY_=E8q2L4_?_{n z@qzJK)-g8@ucyn@lE5i#xura#t)3o8P6F{7_S&#G42^p z8gColG~O|uG5*2$f$>Y@IpbHxE5^IVJ>%EL+s1pwJH|g6|6sgt{L=W1@hjuE#=FMv zj9(ic81EUsH~!K1(0JeYgYg^Vp`W_`jgJ|>GafZQFg|Pi-gwOT(Dt__gu2@t*OH@sGwo81EauG=5|J%J{AEuJJqL*Tx6Nd&cjLe>6Tc-Z%bW{Kk0b zKXm;YA2WVuJZgMkeAf8A@tE~g#t)2N8qXQOGF~y>HSQU|Hr_VgGu|=&(f9}BedCwL zZ;W3Vzct=9erNpJ_`rD2_`UIu#)roH#vhE|7!Uov>)-g8@jK&D;{)Tf#_x^Cj1P^^ z8GkUIFdq6lu7BfW#*@aQ#y5@68qXMy89y*SXFO*-VZ35|#kglYX}oQG(|E^t#`p*0 z2gWar=Zs$&uNdzd_l#c~ZyWC!?->7R{Dbkn@k`@3#;=Uu8t)pvGk$G+V7zDi-uOr3 zL*sqp55{kdhyEkizwt5ScgCZ}2gYZO-y4q^9~z%C{$M;|JoN9m{*8|rPa2OJ-!wjJ zJYzg&{J{8}@tpC5@rv;k561h(FOACG#)j+X?)gr#(2#5f$=%xIpYcA72_+$J>yB^ zZR4B9JH|7{KNvqSerY^s{K|O6c-OdR{MvZic+Ysp_($U(jQ5RS8ox1qW&GB7*Z7_B zYvTjsJ>&PrKN=qz?;C$Geq%iJ4_*Jp$Bf?@j~X8spEZ7OJZ5}oe9riT@r3cv@45bs zj~P!Ij~d@JK5INa@r3b;@fG8q@ucy#@lE3$;~C>0j2{@kG@dhlWxQg% zYuqz_ZMM`^GPg-x$9#ervpI{Lc8b@qzK4@q6PRjSr3YjXxN_F&;YS z`Zqpi{LXmP_`vwA@q6Pj<3r)-g8@ucyn@lE5i#xura#t)3o8P6F{ z7_S&#G42^p8gColG~O|uG5*2$f$>Y@IpbHxE5^IVJ>%EL+s1pwJH|g6|6sgt{L=W1 z@hjuE#=FMvj9(ic81EUsH~!K1(0JeYgYg^Vp`W?_jgJ|>GafZQFg|Pi-gwOT(Dt__gu2@t*OH@sGwo81EauG=5|J%J{AEuJJqL*Tx6Nd&cjLe>6Tc z-Z%bW{Kk0byzAfinDIN~QR4&Sv&Qd@$BYk+&l!I(o-iIV?|8-dnDM0XsPRqXv&J*V zW5y4R&l%4dPZ+NlUoq|(Pa1C<-!$Gao-zKx_<`|D<2mD3#w*6V#y#WL#@ohw#yiG8 z8vkItZ~W5ujqxkviGLmSGx0yizmvw3#xuq<#&gDV#y#Vn@s9D1@k`^E#=FM5#(Tzl z#{0(m#&3<^8Xp)R7#|uR8V~)O_>Q6fCH@^X9yJ~_9y6XWo-m#?o;02@o-v*?o-^(l z_l$RpcZ^>ezck)8-ZkDc-ZS1e-Zy@0{MPuu_`vwk_|SOh-}?Ix{r$$H#$(1~#uLU9 z#*@aA#xuq<#&gDV#y#Vn@s9D1@k`^E#=FM5#(Tzl#{0(m#&3<^8Xp)R7#|uR8V~(H z{{H{f-)}r>JZ3y*JYhUxJZU^>JYzg#JZC&-+%xVO?-=hGzchYnylcE`yl1>;yl=d3 z{MPub@qzJy@uBgd@zDS4@BiQY{l=rlW5#2~6UGz9lg5+AGsZK#D7j`5E1 zOXHWuyT-f5d&Yal`^NjmZ;js?9~d7P9~vJT5B-1s{{P+IZ#-%|W;|v*VLV|xX*_8> zV?1L#XFO-zGwvDh81ERrG=6EkYrJc`XS`>;Z@h2(*7&XQf$@Ryq4A;d(7*Hd{~!K- z<5A-=<1yn2;|b$Q<4NNg;~C>Q<2mD=anE?ic*ppq@k`@f<6YxD<2~bj<9*||#&3-e zj1P&v?&x-+15nt?^sq1LFhZL*ql^p-=q%|Chhtc+_~zc+7ahc*1znc+z;rc*c0n zc+R+I+%w)W-Z6e@{L*;Wc-MH(c+Ys>c;EP~@mu2q;{)SE<3r=2-}3kW-~N8%QR6Y= zG2;p23FArQN#hyg8RI$QIpdyj&v?gp$M~i3OXFSRUE@9DJ>z}jedD*rZ;cO(4~!3u z4~>U@+u#4e-)}r>JZ3y*JYhUxJZU^>JYzg#JZC&-+%xVO?-=hGzchYnylcE`yl1>; zyl=d3{MPub@qzJy@uBgd@z78F{k987jYo~gjK_?3|I6zdE87M^Hf_`M7~KitCbp<{#T|EPr*Tlih;`QL5f|EYx!T6pMhg&^ODeV>049|kP=Lks`w7XCXee9+22 zYO~4zw^X|g{z(fTYvFwlaQS|}+e-hv*6;sbD}Ahm|87hFAGFfXweWAZ^#5K9UvBCD z$1Ob8(w}Ul|F<46^84mm>A&B49;Ze0C-wI{KqUV2R{Bm0|HD>(|9LC@Tr2&*YNfyN z0Fu8qG&=Y`yDk0mt^EF~mHxVgsZLSmzt>9tgI0b!r$UhW?^^m3E&YR5`Uejf`TQ{t z2#Gx$miO^+Uht(>{>NgtEa^k;;F;gqRyq!~>rbY8I4{qSxAd>H^e?s2CtG;vZx810 z;j`rb$F2PSQS15r*7J+4^k28|WGla&R{HyYJNQ0RE&czZrGNPE2K7BXl=r{ddL9R8 z^e4-6x0T;Ft@IyT>HmET-)!mskFE6gEj;4^CV&4{>-m4v(jW2wllpgB`e$3|Gp+Qo zR{G@M4~5Kc=&P`R5|6d;4{iOi!RL>)@cl?GBSY)6@P~|7LpHzlqcSO}y56 zKJDL3UvH)NS~%_B)Zc8Sr~RAhQTxsJZMXE({!RU~e-rPt^oKkkX8K>W($oIU^t68y z|Ff31qEae%Z<|?cYpK`!{jgzlqcSP5i2rU)sN!p7w9z z-IjjZznT75t#m-mP?`R^m7ex*rth`V)Ber$f7wb;`#00m{!N_rZ{q#d^J)KP`e&{5 zH!Ym@Z|eW6R(jgMnV$A<;p5G{!RU~e-o$un|P;{U)sN!p7w9zbFJS? z`#00m{!N_rZ{pq7@1^~l>1qEaPWv}8f1X(+PWw0UAGF>t?cYpK`#14KOaGwterf-v ze%il@)Ba7Y$-a8OORfCV{w@0M;EB`zO`P^`;}7B+gFLx{!N_r zZ{oCn6Q})~IPKrWY5yip`#14q>-~0G@00d#>QA-w)Ber$w0{$){hRn|>-lRfyxaQy zZ(8YT|7Lz^|0cfK(og$0)6@P}8Xe-o$un>g*?#51k@(*Di#w0{$) z{hK)L-^6MECLS7#A4r_`Z{qu{-zQ`dXL{PdiPQc~{Gj!G+P|5e_HW{}e-qF7c|?cH zXbfL49uqMSaCX0lXjBcx*>aql9l!|n1&ovR5kHQ%h}W2R9RTADY{ZM>*;!zOGWvq& z>~-K3n0IDP^wj z7%9wn3$LLtW5ky(H1XVsfBxk}xdfg#f_O#LF5n9n9C?hv#E8GD!lemcZbHow|J-+k zq<$Sx4C$BZSY^OpUAYor&#eE|!(TPw$(UZp7z4h1>5?D7Fb0g9J|Z%jpVv+E8KR8o z4;iV*mvjR^jLR$-?N`q~j1t5lXx10g%XJgRu7mN^Pt5j0eN@)Mc*H;>#v7JMZN&9G z9>mQp81X!#TSX|D2IpNA)Q={?nE5?Yv z7Wp?g-iO~4(b*oq;Gub?Gaj2_KSldyd^Y^Y>cX*G=mYcZc-mb!0=DV>DvSmn?cV|2 zfEkky&xbyHgxZgA2!B@6`+9)}Q~TnDL5#3&d|!1xUu{1c0=v7`4BW|UY2%;WDfxWxGN zxFB3OV#MhPeT987>v05)!#yvEv&F;WOlN2NetzxA4b%%UdjmpuAZ7w19tFOo02c9k zOh-}agzwYg%v0An5)UqX;E)FGdD6uI)e@ic?S zSLq6dQDMh3D92^@HabdBNj>-d7kG+91GKgLS+; z^TQoCasQ6ffmvexub7_#EG%q}|0zPF)HvePHt8HE_y5RM5`Lz131M%XibPY&L=d2Il%D$+diw|;q_#5l6g{1_tv0}#SB z^i@9^{O^75yL^z&$zVf)JXBsWlaH7BHP(2>_hp=x@$WmGCyVp?UQSjBalVx8mpB5r zMEw%?`)d~`Zco8X#q+@U@5{st0W z3@!4F;>Rm++HuVj2!o*LE6^9l&t1JA{lCPRLwGC%(>k6ZZ+sKY@vFQW0%?7Z4+Cjcnu}6)$wbL0e=tSr4VA9^AC!VF>>(Ay7ZkGRj26Tj39R$Z;p<3V-=zB zE?yYKyyL~`CG?r_(_S|MP%wS9ufp=3KF4DuZSt$I@(bML=iq;3e!iZ;mm=QZ@f(PN z^%$`%9MkSNLJ(p+M~K9=Reirh{Kbrk_ql-^4@=x2;;pqcMt(uGj;B4~Z?9dO`408r zyHk!Mkl!_A#YioT#7TUc*VZiXs+7PS&hDvK2L6ssOZ5aC5isJb*xnowqv%gF-Weic zIQ-l3>70%j>IwS72z0-S=Ee3l-AAmU9-0&4OtF4%F@nhaT0~d^zCHiz?gl>yQEsS@ zSWLVT;3_UlW}v>~3~RHBIPaT`7Xr)xdiD1qtQkT_HSd#QM-=-D`iS7CM{_(uJiT>Z zfH04I`Fj{QAEUx?jTqj681b%js}ScGU{0)<4>F!(lN5-<;_S(xFk;HWxk%pW55h;*kOIa%4)9q3d|3G5SVZuNk5%0cJP?iXJN36a;$ozhZn@tdnCIc}ZkHm7{Rp5K` z&lPC}`bx(~G5QLh|Fh0UmmfUczkc@y#y?E!Z0WZgXbJck!Zq@%=bzHP0cHf4=ugB| zI6I{)I4K4&#vf&RJsuKoZQ?##OePpMIbS@cp@hgk?6rLUaXmf~uQK2}gR|jwF=7XO zO8Y@K<>dIsbeQW?&u}?Ngb6zyLGc>lwFx42zf zN&G#6&ohE0aRfz$L5p@A7#7Xy<5ffv<9x;SGi;BH)(-5*dK>68O0UM>z#M-gEMtR9 zc`xE-1O~p+c!6|auE_7}vRh$X8;$EUFe__5TwGnO!{Qx>X{W1M(%wX~eT1IyXmcg% z3mD_QN2#9-{Vmk{qT1^_k&Il=5B#3&kXhU?jH?M~KXz!B%Di`e7+4=;eqKS3Wc_xw z7uL4&2ZVcf?tBkhC~ieMzEqFrNJsp<`89Q_Xde+zuc^Eci8;H@JpYTQ# zw$~MwpL);qBG(JVxZxKQK8BcroA*O{54TT5xL2klGU(P4V%|o0GVmn}8|xXe4CyF2 zP36zx?nz+A&{M!y^_SJYW_*U4Gv>7j)9WxVWZ$h~KJf^o_OjZ4wAsTo_gdf~f4m59 z1B>~p!KFRIki*RjxM6@{@Q}_Qf-SUx7RdmBz}t#pmg^-Ah3m^vfK1=w@P$ZM93X)i zZVsWxA`q1^Lsw(G;;raNU)IpU3o}B$n!l8e3+8ZjT-Gn6%3=w~-r9@%T@CYrbzjFd4r6SO z8=c>Lv$|*lAu#9D&f>Sh@0Ht5aB~;SyI{sDBks`jcEnv_O>JfT$pC8n1^zy||H6|9 z*_;^GC5%nptbue`)d=di*}29WJBS&WjJ5*r)&bti*6H;T+WG1t^mVlm(lJ=-(xyjV zkCaSD^f;5Ji=d3nn91$ z>*iXZnWz@Xk_$n#6iz|4_QkK{;x879l^|A&l^~XjCwRSe%@>A1Yrr4`B@kz#z^VLM z-hmyAr6^eme0N79sBdtf#^w6L2MPvgLFVDreL&hMEvm z+@}OJnJGcdWMKtqs4qPUL3Qnk1S&8u`6>8SeUAnOyhOy8Md(c*F4Xr! zP$P(Y-2o9A(WZRu12sah*?q!^QUX$en$W@QQ7~}70R=1#g-d5&rJ%YmAOsxmmO%O7 zpAdL`&w%?O-~wGY*)q=O3ElBrA}D`C0X7cCVZoMmYDPC=`127JIsYOD#YaFTf#WTm z`b1m~&H6{rhSd*2+z%Zyvjn7R8B!79E0u@K3oN3Dyc6fO!!Z8sHIC$%`62}4i6DP@cg78|I~HI`ppWAtjXunl6!1$tfrJKDEO~1t z1i{!w^X7|LkaKtu1WQ|KP(aq#8ouXSm90E{2}~n^zAv)&Bg_Gv5=`$2-(?+yfnGft z`gK{9A;5Kf<2P4-jUhfh&cj#)ZdD%Ch`^s)Fqe=i1!2TT83m*9udcD5=y@!0oGbr8>z(b2xi7uEGg6K zh7$5vCkk&{UMz`R+(gQIY8#DB47{qS)WDrTt62L}LtJkf-$k&wLbFjC?I9;;=+c5x zAOb)?Yr^&syZC^hyqGn7Zy$cvg5@qo*7}hZ?tTpjSbMc#HSYdv@_5P>POb5D4ch|) zf<9I#0|M>^)B+5D(X;c#`n(5xKqI1}H$U4)(D*21e@j#9DF}X$LgWv9WZ)x{+%WXpl0Uj{9px#-E6}2)2V(gVazD{zcpVyiv=83DbTo%4Y|DcgpAvXn9r(ALvSCF_`!wh5zTnjuY^Vj^eeCk zI#}?SheM{MnMu1Zt)gc5wGhMwGNN)U&=2^gaA`=OMi&}fbz#Nzw0E0t`fYa;rZgr3 zEuJBmUdQ-V-P3Ynx_<}5?>sM!h*yu5*OY^AvwSSEa~aZ8T=OYj%n7BM{V& zVBY}}F4QpwfrNGdb9QM8a8bp=5}Eg)4J5!d>ZGQ1H}?th!|RI}UUI(0^-Aly$CXj! zmFdRDJhtsIKY2>Rl>q2+9ny1Xd-xUZBQ0;R#@X5^crjbuT>}9OQH@Kn-4X&7TC_$A zw3*UG-?sqm*|*h004k>3f22nsh>OxuA}J^%9R*3a^sm0qDhVr6-V#x0_!B_rD7jg~ zN47T5(Xnb^#c{c!<%`aOrX0h(n9(AGOHTW&O96%qY7DPer3gV6s z)f}u!Fu9?m5@X{b^O+kPCzcnkVhexcN#61T0oDwtV2qy%!VdwjxWz@YxY2cu%>g-T zyEP;4Q&5fCp>YRYsa#7nt*6U*K1;w%P&)$LgkR40N!&Y=k!g+ca~`3V?I zusU-Hfd)C?&JqS`O^FbY{OPQ-ukiXY3OtHE%GErsV+PGiB9tRMG{DPVT}1(*)nMcf zK{c+20E=|=5L2focrnP;4!Atsf&dNN1tPAMWiAUP1t|CEQR{2m2G7YJkHk&l*IA*V zfytW;9fw;Ht|vgH%f=s2Cqwi5?$TCrrjDfel7|)14Y;4BO!=Fibtg3N!%J} zLl}@~Wl@05Ppvyt&Jd8T#r=TTK_C$!0SL@~=PFrGEoflT&ej)BpJ0>ZbW?^LT#doa zXz$u157ZGdsfL^oOyjPdAi1FtcfXUI*H}nFbK{fph}*16_kafI#cSni?GthJbQ%+U zL_IKVOA21}AEV*vZVCO025Ss9QDo4N07E73_O`~0sfFKcVFx2F+<*pdLxz#O;oEm8 znAzH_N^EN#t0J~{To$e(#8j*H)X~I;U$MO!6fr9bf-P(SG$a2r+(XFy!MvaT1j?_P z8u7?;HcCxcyv#fWWok@;hV_e6>oA<-&&i;TzUbg)F8G*XeKq*!q{cEd{V%xDN$%z3 zdAq0@*5yraB)_jg6?0bbpgyhSMUru}-_YBjE zkrG~{ytq29UN6Zd`Lz~i5jr4v8~#8#lvG@6=-?$6(!WZQ0qRr|E}aWA3Wav1`Jo&}%?P zR^Rmy7xGk|VJCxV)ua%k_sR3oMw8}X&g7XNV^+=~9}*zA5BC>VS1}S&hn&C|Uy`<( z>Rl3y7wL6u9o7AP4V91tBfGGI~d_uCk@RX8Im~;OboCh&p+HyP@lq;Dp7(*Md zHcy_8f`NS-wb>N#uJ~ z>!4NpsqJyBIX7{K9xhkn8*+`vbU2rip7Z(#I+XBEPfq&k zUp5M^^GZ%qq11uZ3tn@2<~IBlY6)B+v{lmRU>9SBp6!j~-saTi=75Cl>5;xdQx1>r zXmsOuk^fxSTq$>fh6H>UJU=*lGUu&zxLi6PLZP+Jr+U1XF zCZgn*tSU+PTk<8=K6hMSd=g}pO&|OFp5&{qKE?oml?y%sf^a2}GZ!NsD#umO{|t63O}kwv^Q*c0szOD9;B&W4tgmdvWbq~zPqCdsJ#b_szF zBxoj>8rX#N?U0b)s&sN~z%RwfiKo)1HU>$4g^15)u`Q#&bY6RS(Cjkx56g#NQvufbBMS6n55wb4kraG3?GbQ69(I`wk$ zuGh598zyxVD^Q$#I2ne{w!BYJv5@>?3p_nZj3_op_!{&E@}e{(U|*l+f?5(b<$kQ? zRfe$BrrD5vw<>fXVOHrULkV4&z$N3$!gD<&Bq!iK179!dsP@E1V_=&plB6jm+3E#f zAVZvWF`E)~r$Gr>GD>*GXnG}M7n2fv6B_i>UTmgAQvBA^xA`O+$pGPfk|dfId76lr zv*v#?CA^DJr9r~-#`DF7!aPX{YDjnM%Ii8M4T)Jv(zdbZ?DWzdxUg|`dlC{Qy61)D z7Fzg}&ZNoq!!XxfsEMhQFkrfDf@`^KJ_#$DSJ-!-MwuWVbl`<2nwRA1my+qF`<)GV zlk?)olfgu?&DobMC9sgYvEvE}s7DoU5-Mp_6@**+@p`TPdUX8{}Zo2nk(3d?zLv9s_9YrW0xMU#?}1Urba zS8F}$6p6|Z67V+o5`3(@a8E9-KIMhW9q^^(hE; z0fahz%osSOz)@1p0VjP4bJc!0Q?5M%A-&uonTw~w=~O2==onl#j$#m&M86?cVTOgjLm|Rm|5*K&o84D2MKP6h2QdeN_zCk zpM8$=LHO}imOQ2kd58M^UrNLgCsQGvd#lSUnAosqkvh22zIqCSwK(2Q*#Xq)_Hb^Z zx?%OC`AOKY^si^jv?O1=k-+#t(^8MyK%K_0a+Bi%bYOAOBlLc^dy8c)iH;Mp6oWm6 zjwD>!aO(&*gxiI$zWBbw&!vv~32dkspDCg5u<9cF1tgoG zOfjsGqGQSTa|VeyrIy5;LJ9WWe~H)OKzdbHw+?Nw-Ntze=pYd$dYO+P*;?ni3O5hO z`3OnSceh}PmGRK#61pD^BG$6l!xuOPk`(pH=a`Au2FnfADdAKQp3IQIU%)>!#mjh4 zYUx$FAaj;Pr7=ajd1z?V{37koFSw|Js38#3V*sA6qT5!c7nfm?_!w0JOyKGM4Q^`O@yv@U*} z*QJj|UwtgX0rUZfN#u3;W38`07F}u4dUz0`0asIrK6?8rEgnx=gG8Q0xta~$4k9y) zg&dZM`#p`buSE5+VHI>?Htp~$Eiby&+fpl5-8%njQC4nv`Rc(GgU?xYkGYh{{NhYu{^T~4kEJqXboA^#aSHgd~umD zn&fKEa1xQhp4sT){NUy)muS!mS5_Qn+>G_t=y{k;T*%RvHK>!(^PPp3?l9U_ zwM8h$^|S#R5sMUs#+OjzUBX!&<)ycmh@ntg4^n>N21sO#+I}!Zq^66AlPz|7#lKlg zBfRJ~YRNHGM5k937NON`b?%W6kXCoRuccR%4n^W9aY)YXtBBy6+ZJJy*t8e5@XR>) zlV71KveF>>RpkFLh-GP|h|Dq@CV5FMkkeZ;M6hNsQ;Wh>_Rzx4H#ZDO!SO*hnfupf znjMS~nXLrFt%9bOMbFT0m={IhD}O=jM8!ii}-oM`nR z{9TJ};s+tBc=6O)?}ibmQSLYP@){3sHa^&hRE&JpB8rlwRu1jt!Ej)nS}DRn9n5Yc zq7{0V8?}uHO+Uwpe2{&+rL~EnWNJ;eNzsC+Xo)y}Y)^^EUZOCQ?!jFczXg6aBT^uFbzfgVv1HDlPIl4=)L@=T2vQ~ zA4Ee~k{eKy7s{*s;Kp+t&!g*YqXmi>{px;8w6M87@b=JJl}~r|AP=n%es*0QelJeK zt-`5mD7C5@vIsspPcT>Vz0ig*v_HcZj;Je%NIIikt}bDwqyG!E!kL!L0oOvT$6^$S zb_V0th+;M$5Q%ExTE5XLVI@Y-^V?9!>@*Rn1tJ<4u(QkdB}6>?!pT1TKAD&J=-M|U zL`zskgV0z6-JM$C5;#V1Eaa;qumx=k9F@T|@g+hgwnX%Ig$Us;uEP-O<<8k?FxT=; zbtE#D;A!)uUQ!(FX;mA#whjwuxP3x%x%JWb}kl4G^(L)rNi%)%^7+INUoJ zR6#rcd52#BEz-IU8Xe3TyOO2#@E)f+It1BwFYdW)!9 z)k2Fii=BLOGMs;mb-#UnS)pjr;7Y?puuVacR?*mQrlE^~4G@tDbzixUF@SBATjI+d zdoy8-kw`I4`W>8uj$@vqL59*@RCA6VG#_~tV`>nRqZ|xCZIG6;zs2an)<)1H)q`6b z{Af9jhI1vgp2?WZyfmHU{w*GnBd7dwnQWyB?@A)ueRD2 z>BLQFsn0&57c0CCDZ-Edavqt_YUAFbjk_DG%cP-L66ny$gyu^Oiu4i`wO*nT(LB-H zOEmZru=`++t)f|D;E=Q7sP@3flf#-rpW{nl=d*ZY-o{Hy)L+4yKhd-Y&q0c~QK6oN zpf|9IDe4yYFf?0kQd4A#D>?L0@SES5CYEb4v{pK67y-Tk7q+gEf+CsmwAsspvDKZ= zlGh)_w<2a?L;>-1vf4)=j`^qacyqHlTB2Z2*AVWkeJXmq0+IX`l z{9wh#hZcC#YU@N=5W)K1K(Hh3qDiz}^?y3rBKyHHnj$%lMkFM<-AP1NFFu@807UB| zUv*C49)dRTB}mNTTm`7bJTE_rg|@3!^-rxJYah{W*ur9vrXohM?o!zxB561(n|go| z9PPE{4r(EM4F+v7pk(hL!ko9dwx;^>A$5pi3b?y|b9Ga3Q%3s;vBFRkIriZ}Qlb&r zA{j@BHn(~=@86%f@MxA^o7Bnyd5Rl^8YhAkz5DprjBWEwy#rl<%=qFp`X$175f5&X z#6>mm)J3=vP&6=XOY6n;K>`z6FR&YrGco8%ac*k#IReaaV1j?ViF}CG^uIu9Nv7Wai#3t5`g zL3~M8Y{DRlAY*Ry$SK?bWLyka%Ut~im#YJdTIhM<)~wPf!{k}5w)AXS59Oc$y;yM| zG+=mbOD|uT1C7jP>e(VL3xP^jZ2U^5Xi_xHA^XVqJazt$|By56SikY!D>50hH2?T4 z4*KIu=%tyQon*PF@@Op?-jp#Mf3s$q&Tb3yORHdRd7g%&4E*~9!|^Lvu< zODgIPvI|E%3;$15XVnhqB|6Bj;#tTB30BEk6sTm%uHir>%Q7%a3E9K;*;mO@&+9PD zwA>8aNaccZ3U{XT*bP0`x_x#BWcJY=kl9OjK*svSP$`+0NA>S!r%8gJdLOq9bH1?I z;HH2vKJrtsU^`OH0E0H471>q!`B7GJPw23rH|RTNSv0lcE5>KD_>vuv%*B$vSG6p? zuP9SfuKa>1YkU1r*7o2zrFaG43%MMzc^k44!(gh96B#Ypx7TieLK#CF%xWRpJWCm! zYOg0%e5#5V^1a4?=BJV$2rdya#G);ImA_%XS`D&cS3zb58LkEkU>;QGDTDLP=8J2a zSoAk~Y8WjUI`LKqGW`Z!UAiEPiq8w44OtZr;gljK)MdqIO8yP?O~LC%+zOpWlq$5Z7OUr1gV6u9$?(TR3vCCeeO z)=OEh(Ifr%vxrq(@?)_eLfMxWt~7cbau(@V?B7L^{)|mamR}RRTKj{jIu&exHEtByfXQpUSOb=^SUUw+rD2J6l&q9<2CE=Z6aMa} zGJu5+rqN-N@27duW^?RpP}bvy!o>>@oAy$T?A{&LHBhkB*GcNE>L&YnJW%JT{kg3C!wuaxJYt}H?QOoxM8QwYeXPe(xW|M)9U+b;F z?<$sujUM`!z6k( zj!2xvHcJ_P;>KE+`)AU_j7Xn%alk73c(3|YRHL_XgdTnw2f)dBL62J%3*Fue9W>|0 zgk+oZI6uKz`C6k#8JgdQed~)J%p`C(81LfQ^re4xIlSqq7qUBR={?`b?rnbCS%2CG zMc&9}(H=q2`d#8#+9_G4ncpKS!X=E)HX9(#T+2mSZe#@40X@i`bY4s?!>2D|D2A*A zYSfNL$iV57n=NBWEb`>`UFwLk?e2!i#wmn(V43FD$P%JG($!S5&7~{j^NQxJ9TUED z32b7HxyY`|C&1xNtXFZ-&?7(ed>U~Pmw8jc{36HBtMiNZ$;gDW=JYp|;Y96ycoe{G z+-pwC=*@fW-mSvTQ?`W(PLVFjPh&EMj3gvyZJJ<=9Krk|{zXO9Q5G?`3r|D6SWOH* zdwm;i1bLNsj=w$hH$fKRG;V+B80~~V`spA3l+W^XJzScx{j-43MBHu)8Qe8p!H+UW+Df8$jEKq?^ZiQly#nK-r&{;!@RLQ-+?PM*<5%DY730t0XJ{B z4>T@^lwkv~9dhFo>lx;p9QqX0ntG7M%dmsM^FgxQ9J1z81)dx`r4RGVcH3JDf2JrYEo}PcYPRCWuTa;mkW_mroKl_p9 z8_pYWV>C^C3g_ujz$A)i5a1jQ5dEmJuu&&;z^AO)M!D^s`cvBb&`Xxh56H^CLyVYs z7R?MUo3M(x8{oCjV!J(4Zxzmt5oI2>k3w9WT0|u4J{+-1`+^?#BV;06EHQ0s87Cy! zofy*5#>q~@F4^q<5_c7y!e#@vkFH^czonf-%DUn2%!4YXN>3quusuT$)9xaA8}^6L zqxc;tXRRoraloA)4HSBc<-l<-4}eIv+ML(t*#OJ1eIB*RHV)ZS3?$C(TDK?PSjc*C zzFEh>v)aqL1SMbZVUebXUaQYghR_th+1R`Yn&6V+w?jsMm)NL9r(~z9WyEZ|kTEEO zoNw=Urx4wO-q@!^xoay`Er@$3m8`g&g^b5;FuK_*`cyd~mfe%jV(x@xU+?vuLJ1G{ zH|S9|u-PgZ_UPDwaCWbc5svSo18^7zNc5{|QifL0e%8}Y*|;Tt1ry~(pT|qEd8C0u zvTm>C6Mm}y9BjFQwKsj{IY}H5GO!2Xmd^5%EKXFFwkBC{>#? zPVn7qY_f5NhECV+z`3Fw5Tg5`r8b(?T2;bo(dgKGcswj`bQfsTT~V58hBYQ8G^2Ne zkS%r&gzd?ekAuuj$BbkiCEP>@8n5U%3ETV}gqLu+*3S_c@#mLy!_*b!dFf)?4V9W7 zQLrJ*C4o6u2*LgSHNpXA)|!Jftb}deR6@~rD3?4EFQGUF5(KtzBy7{95~6t1ArB*% zJ`=HQTgMcoImlQ_voOd$5Szk$cb{&>;|(XD$5|;1AKuDgmqJBf7;Fp~QnvCXrDnsV zXrhl_*H>y4Cu=N(T)Pi!q404E2iyQ9#4t6m_$7RvFALfWyF`4X>`hOEkn_qkDXK*-7LbP&sm z%wQI|2+>+DUup}*rL=|c6UCIC1j*?joK<%W1BIEEd8!#B&&s18LWgpAya0Omtg$XgO>elzq6|XRHVEHy_|k}^Ak7dqd~7Y`jvyvt+DPSboOCD);6|vU z2r#NJBNbsC%A^PzqPEgxZ@@8W1+Oof8ZLQA4ZF5QNY5{robaA4!YUjJxL<3ce}lN= zi;@s7!VrYZwuPj9{~*}pMza&tvHmHKyE;q&`*F3UnAn=f@v~L<3~NGYckyW6styRr zGY|fdh5D!bx~WVaRA_!E3NCqS|4>X+Eg`?WVYIF3;?S?NDTa4?e2q*V3At5V%rQ)p ze5DxvV4`$3W_kRn5|VMgzTqW)YEp=m0T*iJ@pw_M2O%17i8DTOuRPUO} z=NSsG>hBV&j@m*w2w2E3a#6}Vish+18wwb0ZdD!_r^NxsYZelCKp3UUJlRzSuCe0F zQ@El+Dh^>GjKR1iq$T$>VrE2nvUbT>tb*A@iLT>d+v#*5Z(?Uu!dY2BoO@Ha+Ix1H z#|q{2!S_U-GN>XJhNw#jIq|d$IXPW+OLaNs8Nw)%mXKxf<>e!U7cU$k^svTPBFQ$+ z)dfZxd?s%Mq;P$?djZbcu$RS`RKn@&&x)5!(Ztpon&CAp`ShNJEXL9=2SDeEIpI$C z`NzW9S;rnKc|sG7mYVu?dj^m-r)`5(EHpz1n_)paAt_9{Ied|O*oENttQ3^-|S_p%Tju_*zY2^4I_u2KHtaaxQ5E( zxl)9SXW$+PF}&icRS>n8FL_@9Li4&B?t-*#gvf#`Z!)_OW)zYo?j?y5t%ZCRLjJnu zTfY~3qq&gv<_2Z@$N!m37%k{X= zX%QP!-*h<<@Rej;iyWjfmh2SruyA#n9fqZZ5hz5Qra41sD!wPGG}%OG!b2RRGlD^2 zREl@Dun?t=lzf_zF0k0|@Gw1CGx+>NbGi=~=qFfOR{=gwgE(aL5Vowou0-Nsb;tM3 zk?%|o@6&fTmJ#6R&sCDjfh}Z)zWlct?HJ$a3-wOpq3su(N6>@A9H3_23IUs+r?XcO zOZPNZxaegtT+2an3Bj~(q=OjC48mCqV2``oSt~jkcpAfNVR&conO#t;6yl>WrlIh{ zbPr+S6>}5dbZH0mD}A^AguEc?4C%0ZsPUj;%8!fOBbpM&yK zcoPa06r+o{G#~*L*oi_!Ki*Ko=LQ#tHVT_2jQIpXqBsPRjl|%9$>0%oHu^ZrFQINW zobJ=hGUsCRkyS^4W{2+4?Z?r_8LFY8=b=eY7SKMO+GF+fQg>sabFF3Z8?4uoR60%b^FkhHKnoV_6DQ%K*?cD! z0l!`-!qS{V*y=J8zJS*(f~hJZarnfa#zfHE1bJ%29sTT>}oZ#bNMtzvaKH<&|bJ^nOLWa4?9|n~rOwLDs>2Ps?aG4H&}( zen`UmD;Rz@5u}t}B11!G;I;ZOy#=Y3w1Z1qNRP0|A+;G-8+?%Fj9N{zXXwwFGgx68 zAVu8Gi(g;*@`^8HVhK`usSqRSX-DbhkEk0_C%r>UYF#X4 zi>YT$55IQt$Q)Wy=g=y2vM$I0SJ)r%4lSv3s9ak!avXB_>c|{gQs;nx1xI`ZNX{eP zp(S+=UmvO4l3JG`4Y+`+7(Tr3m5+%#NztWYa%;*DLQT@rreNQS(~|V4_a$#xom}%f z{CrUAQhx}#t2Ec}(nh{JD;x->70tW;5xtL*1<6#@nTqHvTRjN#*fUOB=tHTH1JWP>Q(~h53x0Lo(^( z&FrRJc|lM&8&tF3FKKJXKXQ=qjnRtN!4v&q8aC3 zo_Ws%FN!A7L^A#ay4f0Ho{F8bGxm0cP4XDqX1Mr%O{0B@W81rM;nFppFXOLO(yuNb zE!8fZbV&&G)BTDc!*@X2TMkbWZjrCSK$GeY&qreyxk%C5b;4E565m0Uz~CA<^Q83y zY;jA`w7KF5bGk@nZ0gnskxSMksRnhLr7}2fC@ZNjskZO!W>A+5}`lh5? z>%ZY?!aNyxh8*O0Y+N<*Ekc?hFQS_U#Hq>KTZ=UkF zqIE>mN}8)mEE4$@*2Tx+ZS{VY6yqFsx0#W0ht>Kualjl`XIf^dL}gLB7zH zv}z?~n-50|cm)6>nVczxl?t)6_2lw`;0rRZ(TxV!NE?dpo=9tcaZUWqss&e4e8vpc zyWlER7uL0OW`lQ?AqR7R^NYX65z64Y8fmob@($K*E;z4qK-55F%9Up=?U2Dkpr05K z^VgOa5W}v+D8IF?Xu&eSr7m1XFzp3j*SuLsX~@($)bSS@-QEI716^g0~xyD zaZz7d5LZ&2m?@MF-geH(DWJo>GGTa|>;5($fq=jCY86e#r2kiza%J&BB z2I`_unZZ=`+@43=hciK8=1o#cC{oiy=oj!PEYcw6${7yl&;vD4qWSYHWS#YrJtO6+ z9AKidpJ`psHVJ<5%oO%Ime)zjVAoZVBqhyw%6<({6wnO=3=LN~h;gE{P>DF@yrmGj zzdiI@-}Dg46^F9^=%-zgO7m+!rSvx+Ns&WY1*s%`Q(H(yhss+sy!g)Cz^P)gVgo+? zXMzLJejTWbWqO7oUlWy_H5qxC1s&4Wr&~|&&0NFT{>?sa00T332I(LSFb&p}?3o}2 zS!iNJ!b_6UWCk%$U5YakXB7LFPHpwYZ)a++LvK0Z*D4+`Iln>aZ09%G9;kbFD~_)g zCQ&)0)Rlyq$L5`Q9$W>Jd=sQ{X<(u0thJ8PLnhEi)wqg z2n|gQ#S6Lz((U^gM(U6kkb*yhJ+ra8P{IgPmj%PvsW_?xgGr3Ar2W$Urs53shHs366Ey~~@Ig@QP zr{qOZ;V3+GgL-e54(POjbMI(N)Qylp9Mv%@iV~)jpGl`@2C?AhF+Ru{xOCGP(2^Yv z>fpOEDh~~Pru)^y?CW8PqcwHq5cioUlydz03yk%6>|-*G3lAz zg!tp}l$kUqq^spM#0Xhkg~^NvixQW0tVWY~K^}`9$UemvKK4^%CKBi57k8jad~_xk z$un8or-rHBBF6G3TVgT`)V?HcVZd)I#F_JEIzNT@$j@oCKb4t0{Fpd^_Jt!@Q;LtSG#p7k>f_sDzu<*ddHYRpa{kCnj(%^@ zp%qgV6dGReB3RkB3tfnh${X4PV!xocR=1ucI+@9Zqw_xc<1Zflm2GkUWb5Nod~_8f zhU~z5y96&CU1@Ex^M*U=k(so(-^{!9lbK1Yb}attuMt1o`iQ$i!Cr2apfkCA^b3MR z9(eE6{;Cjpu%BT3-B&NZ+$uqTPFw6uzCOAHc|}*7+r@i-eRP>%0Q-osg*L<=k+UKG zh=-N9YThPdC0_W5iIv!7Rz&{LZyw>AhNHy$q+llTysPV z;-4Q~JM>tti^}Eg_!P1u@GElCMkW^bnj^)kG!&p-aHjIfmNp)RSx`G*OROQR+WCr1 zP~vT$V`|ssY7b$G!5o4k9PpQ<_#=O~$XiU$phujv=_sd)sxNI)s1$o@Yy(5ESkRX+KW8vb3aXKlX zQC!h_kJ@m8pocyV%zkryHV#?vC!>O=eM(BUJhcZ{;EtR=E3xXiaCt==eW~!Gm3G#} zpTamlLL7_Yl8L-+zVCFNEY7Q7^(KyyA#+8!;;v0h_b_fJ(vo5*5N{?Y4P;WfAMc0I;)I_gZT=Nu5V9H?@eDFKLff5{ zJ{@%?T4BY7aVn!KZf)hH7{A}}#nKLEPrh$M0z*5*2n*5) zZ;~4-DvQ^_vVPNDz)8FKoJ!14gRzz@nSehWezp0&KGU46ak!Zvmd`pbMO5DywyfQqxw>o!&Fjn54qaK5re3EXN z$i!mpyn^GvBwcHFI7Z_w-A+!sJ%Vv`yyb+r? zx95A)@HE1k4ERaKmx2-fOzmB4BpoGja!-efKcmwn$nNyGoCYJ0*iN5;{|#@;>L)42 zm1Ycgm{SagT8JwzOZi2@>5Kgm^ktBF?7rCZxR0;27%@S&Hb}#vWzumBVjRvMQ0{pD;A!V1&na=f#zg`}~;D{EXszh>Of|``c@DyHqb; zV*O^hUPI-8QpQiFi{kW*Lhfgu_bpHCd13?Oi1KHcg+Ho!WI}Pf<|&Q?$oH`ghWoQ; zF+uZy$!BOU5$bY)1pN#oXbgT)<~bK*9|+_!N|ce6!T@3>B1c10gEZoGaNv*_l=+%G z(XV5fz)&tB&dIFY!}QtU{q0dZzcutb;aGOuWBwog6x;4UMJBP)!l4Vdox6QWyoqs$ z1qK$`#YM40d`5$x@&#X?@xF81%m<5yMOqpJ!*lj;!Ymqy$N5 zFZ^}-S3W*WOZ}txD9MkY4k-WnulcU8|2qBF_mcHsJ`ZE=swM!-k1l_(m#WJFzd7V{ z;mQ#t5#^O%p;r#d|Ke9im(QiYM!#`Etybg6|Er^z3&<~jU5Ky7gN^blSAws^L|!gk zq5R{89aluVW?8F=9}k z(GO>ENqnJeoIfwl;a*_za7%ftY8xIW<=G~dyN|b)K%ZDXKJJ*E$+lRY%j$Oih02Li zD)}^APAB~EoDbx5xJ#$PqMwBv|2FR<%8Hxjt@j}zK!3jCMdthmBRTwx?O~;}jcd~| zCao^g*e>l;ogI{p*CvBDBIJ8YUxR?{dQ7c@a(eTmPgMB1fDS#A?AoDy%Q%EBJX3FyM?9Nv64-vwZAa$z?lE zh(*jw=A(lU@T}!m!R4aEC1A+Q#aGy%YU;hknU&2FCt4v7YD=^m ze${@DMV_=&8LzAlIm!)#e=tzB{xt3$-tbXp$iq`o_bJkp@87vGtM>^x5W8<*NtTl% z;$>SU4qHpExSO0WTJl)S;h=I$u6GZ%R_~Mf%l(o5l-94wFIloGXVF~Xj^@!Yil3$O zfxb`1!A>Jv*63rh?k-hy+2?WSdS!L7Gqns?zNTGe8;>^Kw8NBRI_W-zH(tJfj_^7l zx4eK=5?8*+-)z_Nf^P8O)S&sX$mtC>zlL(Ar(UDqW1xIQuAT?IQ_JIhX4S=NdA`pk z`XuGh!{}3Pmr|p%9P?{mp}VoRYUwB1!OGM^(H zBF-DbW_i3thAQs${q3ROfd?J9{}ZI)|LCWG5QU2vg`dZg9~ohrFkJU=EFW?Xc5JHH z*TRAN`@GRu{fHGox=U73l3vmW>(Qo}etYOA)BS5xM|k{wKHcwQ>{+e`n(yx2g8na7 z*Pk7wk0A#m3a%>GK+6ild*Zv)XOH-<@RMxaas~bGR~Hf8<>PXwD61Lvg-dzQM z29^gGv(uiz_trjnx0B;SJ?e@k+Z5$wDdqCA)Vzz&M*9h(=W`v?{g%Y;($-oAL4*DR z`&oU%wCCS&ibE~vRd9B!@B8p2JI|S|({^?jwrQYJ@OK*kgU6@fTqeH{-xMQY$_;}1{Y(f9=<)CLhY-CA4Ta_j z(8IJ)yA+%?uiuSt3b%mthmdLo98u1jJCGxWKo1ct8bUpw+z6&giVPD>Ms61suuvmN`i@9NyWJCAnBEp z3Ihj&n*yikd@~`dMl5xQbVN4+VpdJ@h%BuomDxB7*+AH@sXqH!L$OQ>SmNK|kUjUN z0x0E%f2Z6&2y-bl4jvV3R^Z<;yHA)W%J@?)2t=-$>GQ2&hbLUXmS7?Q1+s}7C~$4r zK!IzV1`1s36bfW>N)^(F#pV03py=L6-Ze$ToBES z!2)5kovLeRoSMS6y0(DD0d9)pr-V&iD$sTiHC%XhAh7>YfmM=X7s_&~sbAiQ^Qw zr~RB-F$?v~7p@A@3uuY5Bd#F}cfrpr@0{wm;GiSb&%FB;Li`*i#xe{Rx9tQ0>u}xZsTMmCO zEb2+2EY(-R0(AzaOa*;{1+amQ14Y(oGZo!&PKw$oieVovpg&Svh7itq(ICPppvj88 z3!j>zr8{Z}eqEgk_~SNTO(S%HbD<<5lstrtPsq=k3AbF~>8xftxD46ZijKTmD7r;GMbJVMyMr0`CV_L|&M;;gmP_7obRiNro zmOx~S3XUwFX|5d81?p}{3+xH{DtHW^vIP@i2!V$#0FMf$xZ@BhcLfkA znn50@;DNfzUl#<@LaO)*Gzd^M1A7j>#y9sUa}zx@C~!S$HFI>ADBS>Kg_3nRoOi0^ zm{l`~6zNxu@eC+l5T>rvZbnYB`bZ(XECfE(G#FhNbLA!LkUvWAkp-2dD8eIdGE7z6 z#}x}OQ0)|e2mn)Cza0z(MHMO<1EQWIlO#)~!;^7v!g2vdn%t9d&EQ_FLU?@%gZ1ip z2Oa!x7IDUPt)v1~D_an%75LqG1q)y^RRta((yz=AXoqsJb;ic{N^`q>vkLNa*mpC~aKXvIK|WQ0r}ZElGaEhQPy)!F#+z1=2XLpGL8P}D?@0yW zz;hIDJ%ECm3J?}BGszx-lqbxq1Ci0(bzcMO8A@^paV(LCHvx|EblgzW=c z65c?tCE+auERllJ)CY3-xjAjKizBCeQZ)|B@??7vzotr@l|uU`s)UYJ%q)b1#YLsl zIpM1gU_cPTlip=Bd*a5Tv%%4vH{wy{gVBmztu95zuYpAdM`Ac)1#uH4qQJ(560ped z9&z?{dMN)4{4iSr%Tw*q>y3I_LKd2JfNcp{g8lmDDjC>cD6!{XDDZ4+06r9MHNa++ z`svh7FD^`+hpQ+}iN04ETpPW;&2>{HFz-fS@@7HyAZY))4O&F42;4rc(kVps$B7;$gadeseU$?|07s0Ni`kKM;4Wa^ujG2kbe+**a;5OPk3&<;Q`LF^6pBAsF zbW7CQcIK$9wJO1rDJt;J7)QF(YQ(jT81f&%O@z5nSxxR>^X@P->P;wkUJV`<)lYO{ z4Z7};I4$K8T+6xyy~yz8L-aMrzvL;eF&GulCl_fMNhQby z?JV^*%UfiO_ zN6Uvm3A}3q7_J| zA8W0>$ZF;*CzS1^`o1rT4L6(_B3@3|oF`ichj?>UnF zC9ENTFkB6%h;INTiJ=l34T|%njaYS1;is^jqOj#`igc>3yKBU}LY^Evd~Z=h^S{dTTU4k zW)WFGM5n^CD+DOxBwgx8*h^|eTYSH%_}O6;RO{1(@Nm36}3G;s7koM6Lx%q zY1Az!{dq#s+;Z?^v;3xt_%0fjtglV@P0cA}TP{5G;rmuz#6v3_@+ybZXhgC(e_?1g$ zx9#vD-xjieh3E5f6ycUhjv|_DT9s6ts_TgJ89!)2s(P>&@N;WF29S7kZub5*7k83+OE z{VFTmmLWmV3|D12>~JV^U5`Mzjw)ju&R923g36S25lI-pGPSipTGt6Rs)OIqS&^^IuvC3>RI4aYd9IAn)ObyToe!{}` zrxGBry$$CK)O+ce*nws(;;fZyWf|Sk>y}NJIBBBNF>H9dWlD|UO)+>4x*B);&G0>2 zE)J46L09qp(;-};O8mol7_AFPLe$<+NOqa~&0vHs*gh+B1K)%|AUt3{6I%ge$W}m0 z!OEtN$8Sb0aJ`v8WoT!^R0CVzJ>O`{^w6UVLAi9cjJViyi<%#P6D^bASx1Yb8bonw zGbCd46VBZz(K3PgO`(YaeO(s$Cbun|PNBZ39+}{v2d)f$uZPOGZP0%uWj#TA!;FGZ zY@kd{9awH)E#j4dR2Jk!J`Ku9WyKp)%Nj0-VVGOsF?`EAQ)7GgY~ZnMFIO)jpgXih;M-8wxAWDHn{EsZJ7S`&6S ztBddzO}ET3vpJW};zDJRPS=vt>70wgC)QNZ1$b2EBz|F^)KsYrk4PDv0dvdf4FH{I zg;>=-Tq7hs9D~onkySQY#8Fughi#Z^qPxmMrc*(n3a~$wHBrDRYYTAWV^|^Dqlm*a zKV|q2FRcLup*CD_-0LM8;+ss)dtIiBFGR?6@mm$5ZiPXtR>n)urqTE z>{J!P`^81mVa4DnFK9z6cZ(yeJX*o-Lht^A2Eh3uy)x|UTTp0E1%=H;C=8hN0ehGV zp;F*gM~q%on9J&gLf6WsDM>mMn-VAtZpx@aVhQx2T~{m&U}?~B4Cu2^DDMIwGG{0q z3n|VU3761kb*Dx=`c^gwkIUMP!5|X52TWX41>qQdD|^2OzVGE`9U+pH2SccbWxRM9(Y zw5r8tnqp$xp!f8prlyeW)TF+_fwdohR`mqxcj$y};ikZ!on$HfDi$N5kmJsjcSAWb zx)2Orwfhc1V*O83A^eMD4Rc(QkvN+AfD8V6n7V+F3u)$>_%j=*Tu2r`*g6jt;wSN5 z1z3q-76uBr8Mp?ZZIMF#c}!6;g(0IjSRv!mbW56l8YIO~aW{fC9Vl?$icKR7n&7%q zCL;+uL@Emgjv2vzIFzbgTIyy~II|Rj8Kn^12Ju&gnn;<=j6`@}{45E$VFCbwpBCkAn#<>tI`rv0Ff<*74X#dpxEWEr_IC}wnGSp60 zp?RRoz@Mlxo6(Hq%q1N}4_2tU5MH(_su)%ZVK41I)q(EgAbS;A2_XM%n7x&2c!!gM z0);dWY_ysR(S#0|-g-RIp2tFlxqBcMsSC|62zH-F;!MGPYR6rpLS|4N}FYB9jSF= z?J`@63YylfT&k@GsT5|aF0+`cAD>GLzArN~)StvdBCmMq_1aMZW@^su#kVQmk@h1WhTnC}*kG!)zmSoeA3`Ns}zx8@iNw zg=`r+g1S_-ThG2wi_ExdJDK@nRdLSI&oE#7E1n?0pD;x9D}Gs3L=6DMrwiEp;RvZ) zng?f(^T4q!se+_FmAH_jl#?Oc(!$_$2L0xi&Vax|vHGUgn}JefrV6ZVw{?c~T?r|h zRmH64f?uA8Mx9e}p;V_$K$1Di4g9j&y6t%!7zBDRlTtxj!wm&^M-7L%rjq3Esc!W` ztg`wznZ#^%D0yW{k0~=Yp_(+R6l;Yx7#~lL#5n_{G((JJ(pc9lbkn~H>)M4jrl_%Q z1l2Vg6_)HfH9yn>H3lA)q72lQuNz~fQd3zZb6%lu9Y`>zJy~>=O4OZxQmJ;OuqP>E zs^5b|+ZyzO>P}T^2B_ze1=EU3@m^D%TL4&F3NaKV`eE8b`TCgh-O7 zB}>q`9h$7-6s+VTAQ>l_K$ctjV! zjFCTOWP*(bd-8=PXuPW~gVKnVNgA5W%+`FImX07pG!0BN$U??5*wgDJb~T4g#x7(6JP5 zp$lZ-U`s*z%&EYcb4(ezrPKBIoF*n(iwAAhgoTJ;Ya7*!n7~j9SqS4R>DG3ds3w&H zu^hdG83mSgIDQ!{#q4c2y4hMqFvI7bxoZ<`;I#hq^2%N_%S#~-Xli-o%wF?*!7A>B z7at`OZQL+sRBr@|qaqrLb4yb7ag-POa>}rH0Ccoi%LhcGZLe2jB-97RgZd1%7cZ&h z3X@tLwpZvuC(X?nDsSV)0;8eAHrBFK+e2{4T9IQu*ka!E##L&q3tJ3Qst^_*sM|tM zF)qbOv7^szR22*i{a=PnRib6f1(2x5yttSZ)|ks`eY#T%xcr^c8cA`aq$$h2@M|wLo3woDcW@T8GhZt1Vbcj*M z4|VWRf1JB3Y>0)5oyepbolr4v*Fdt>o*2+dz zhMA2RGsRm6a3X6Z!&a;cHt_<+Vr8@9n?~@WP?5=uFpEePPp>L4CD!OuXi%KE-;Wp0 zMv_(G<4_ET-c?-|gtHvlM6*&+KT`L?$H{;MwOm{Rx9EX6=wzotpBI)_EPzm<+UlKD z&YL1uG6_#=a~=U6i)%xN?10~ll9|x((UT_S^@X%6wP|gN)fqf}mRSXMX+PS&{6ha~ zo6CNK@t6-eDQ$C@U?gpFmuqp;Ho8?ExX%#E`}ZB(fAGKq`@)N;dhV*-Y{>M$??Z^m z6J^D6-gXrte1yj(WhH9RJ4JkMKaucyp+~(gELV|BG&F_8d@MIHM5LKCJP#*|)sVK_ z6<1O@E)cf$s-$u)&y>Glau)6Pb>Au#6)m^>(}DLV3|<8a@z4pxI`EM?mOi#z^9MoU z+~;k|odH1oObXBGA4l%FF-gYLT6fMh==dL(I~FDMqw~H(xSUIw-tfoTQ8>rF832q7 z#siFZW3@n3-7J*rZitj)o~BN$wTI^T`!Kk3I4f2KBdS8}Bi*4)!(fz>@lH8vg2?$fQ-qWIOP^TOwh&9@^!_(F=1S!sk>l@W4-W!GAw-X<}3GofkVr7u% zQv$nypyb-h#vEUAkh7c*$mA?PrmPymU7#)6y5^pqo64>smn%?CopzEN+Y`&3UEx5v z>c!y3FqNa(MIBKHz2n+^wj4$P447c{qpm;Vq5LG4r8tQ>*V5v3<%9W_k#aR0Hs{io z2RZArWK`}(KA|3tS*glJyV2=iNBe+vf)|`)7r!1H{nucyqW>d3SmwteV^N= z>h8{;P`M*RgWqR7hjiWdo#^|tJlqs6K!Cr4-?wpKFfwpbV=%&8ya45DLmW4D$6zZU z>CTO5wKWkiq%8%u#!}=L3>lFI|EHQqoMRYdWbqC?0B0tkXyu#TwxLChX-4(%ep-^W6Kg4 zdm*SzEdi{^9+V^nPn%U2lk&$(YIBaW$jFbf`pgnI_S%^75&YwYNCN}$V(9w>5bP15EFYhCUJ4%g^*3Td$A^MKy@Id1q}!b8m?r}asp~&Mri`Q zrj*UgXDn5=pC-_~sFW7;w)2=J)j<;k;tOz^0ZtRNGtss(Je7~Zu}Q@xRijvcApxLi z%XXB?r2r>lXtJVYI_?qRu5CMR8D=1bfnjHDdsN<9 zZ;8qoC{B{+zK-+crqGcdq)?-j!xl><+K02ez{Ct@;SvR>(2Mbu_BKv|dGzWw`Cu}A zd!wRl;4^q`lqo0=1I|i8;Ep{zZ~@f<&=g83RTe=4JiMo zv>lYYno8G0=lDB)7WoEg58pR51u#_q)KPQhf_^Ajm_cD~`;=q{u+Vn~MOtep=)zt% zHp5&T3i@Y`Z*Zq+ayk~!-qD)HDyXkk3#M);rH6fL^=er;-d1h*gX!#Olwx$>pcm>= zz-=(nc4=IojKcG)G|?*RUBNs)u8Mn)+B#NLf>(;k0r2OmG)+Qkd)=Yzt~O z&W{o|kpdI}-9Y^o`Ud?Gg8`0W34DVo+)wFm7%h(-+&Abi(KnC+Cy|sHWhs~iO%NwL ziYSy8h6+lyfqQUD7F8N|65b|NT&9qbTme~B zIJs2#Q>|XSKZPmGcCCs*D~(Lmic+wdJZ6M3jOZKGP!2j6tB5YWb}7hg;`=+`V=e{u zcyW0ZAKy~9gM_%~&ax}RUP(?|GzHsscsjsbaT=tME+P+52-ktbnMv?%@qG;WbYvgM zaB4WJrnD5hT8wRA4pe;u{J?F;dJJ~-x3 zGGhVW(TI;YqwB5TA^-}M<*;+7N30BDFa@P<22nDHh2kvSWY{#A;RFaMQ$K0+y0fDR zTY65g+mgT}W)-8}WwjF1CD9Zk&;pl8?C|rZi8fB{SNI!w&Az6nt?V ze}$GiFhSWdCU2aZtrZ~AS5*XWCm)P3_tUL=tK+=p^Tz3nIaKz*FYZn#5TLRiJrEXRqO4ZfP~-`>R*IVPayVfl0*U z2Ek1}L=x;3nWUr&{3c*NC^tz(fyuYd^%dY$ z33&VNR0ip*X-dJ{=*h2vgtZ0JK=9KF&~P-DX^iS3FFL3Um`1#bSceywW(Hn}q=rXp zWBt?CS-ookW;ynZdD}ue%={g!FfE(#X%+h&7%tFnQ%(|7j`=%4!(Jv)tKYRzWND0w zg;==Tqo$t$XK2(1&2NGFn7^76%i8e65d)y4tr2HUn1FV!<}=1g-&7aFd^34I3zrbC0j z8XBcFK<83o8qW|rUUnYqB-OBS*}>J}iX81z^&#Uj1!#b~aM8h4AwIgaU`2T%-!wrfH`t<8P0N#!X{sGx3)dNDq@mV1w0m8{vc32|Tb9vxQ zs^dhCqGKYvr>pP|%>HgZva3A)J$ppZDSUs9dO?NkNL9HyP;rklJW4%^ zgmrS%k~6FDK02dI14OQk>iSXvB5F9qevsM;4ik~maHMbOdXL~Ht0jVNQ=3M@Mr(k` ztf^2;+!E>8B5b%?BCa)b31kYvGIlmyqeQ~SD-r3?x2;qlcg`VVe$*3A0;V1oHvsO~ z69kip1l{Yfiz-g|l2X2kD0neXcV(Oa0eG#LTgU9QhITYK9DPRf3%8lWM9_!PTibAE zD&b7`&&@4@v$b$cYGw`GjS6?yK}APa-CeFIZ67h zpaPAa25?uTx+{sp{3gK9kNUtxiqPY5*(SIEysrmmz@t~UhtGxR-#g_xAA(D%Z!fj! zlSp*R5#cATtR-M4u&W%Eox^18WNaoyjoZYB)l8qRZkx2)*-*)%SKYOM^&;0Fudy3r zd{pdyhA59pQ-OZKzkxS`2NRh}i*U9J0>9ce(!xO7R`I6Pz{m(0 zDt8U!pu)|1XAq!n>UUEw`j)aok*yh36=jjAFv(3+(Z9H7EJ6eG?=g{BMa7pR0^Y1i3O`F5TiD$nk- zM5XsL?GCi1qMFOzW0;CGb9g7(Qn|)Fm|*-Xz9FuA6?+1$yIgzL_FH)=?_9 zVFG*CQ7UQwIzlDvVe8r}(@KjF!6>9}xdxbI6)Gyu7sS@}wMi<_Y1D4!Xf`6MVH;}v zj2V$5vGgtOD;;49eN=zTQU$Zg^!YXV7Ek4fG?>U%UoI*gcEce+j*fN=rns8t7m*6; z6xraIknE0$H$5Rod^%bfGL^D=SdI9os!75@%ouHq-L?6cGur?&1v;~?4T$itM7LyW z32C{jM7kra17ub_D>C~ls3OhOwB1plCNJKS1;jW-A*@t4WKo41j0`YSEu4(1rQtXG z7fc2X1!WcX`>h6KGG2`4W5M4|-Sj4#m~U!3gr+U<)e8?SF?dsgyj+1S;3-GyMqdMu zoD!K$9qI2_H^;S=R2KzQ17uc2frAl~S!qLz#~I;rB$#%P3WuDN$cIcMq-WjzYW6f2fv4^@*X zd8=ozq+S(MSKv}gJ&b)|2j3-w1C98~l_Ck)#mrQDw6^+SVB$-n5OT)QGm=3^NU{yp zAEqW2fk4VdX5CCU81Esgsje!jcKj@v>C6g{sC7&>#fj_LSzb$tVDIfUnpw*`v{`;RMXPA(N!D)`UK9PPgDoIm-Xoq@5=+weT-^j66)SH?`e5``& zXF?Vr)K%mte1&5y zZB8i1k#tVrdwNg)cD&WzM9T_kNy$)9##gA z*Bd(egGlGtOJuI09~RKX$M9nAqZ@@BFeaePsV(^ktk zJl2g*>!{E$1PoM)0_LqF9kf%@%xb7-CutnZSv$`in3vz>J*R6CNfhf!U+3wdV*ONnnQ%0$sK- zv~Kk8AZj!rw%N)+^3v?@AwnwziO~KYBD8KJ5!&A^Aw084H^@`Y6&|Dt{K3>wjUzRH zGPWYSqTCoYeCj{uo&$LQy0YjLqbPC{!Yv3homciOp^=5EpUrPNcZ>-mD%sc&p-B-W zgm3EYjBp+Gh>-}x>yr6Cyqtt8n5Z6F;s<6`=8)}h{Y6(gfbw=C(%cw5Cyc#>U!GG? zh;9RAtT==?2h`S1Nc|mofr|*0i9nOr?Ht#ZP=vuf zX8I)W39_w^6Bp_xDRraxVIq-s%|WP^Sy9>C@$j0lm(cZ_yo5MGbV9e6kjJ~UXg&o6 zay3SU1}B!+R2CLto>;C{gHS9?;vrd^CoX?+1{~(Vv|O}{yxjv4T)24=_pnq*G{m}a zL1AeTZ+H()s;ljbrYqg5a@pWAn!JMQVn}C8vtTz6=4gAf*x~eR}tXGWDnzg=?x*3LH{83Qt>#VuUk5Nfk32kwM2s zqLf{m03}MooS{ylL}Bf8g1B*HDRpzIb8H@2N^VZh4J3)u3Clp*rQSrclu^M>+sYF; zuoz;EiXf)j!3nnjzF~J&L2VDaRrQLL2*?M_yvQpK~m71@JFT)5Xnsn z^4jQ(IaL*4$Ope#3SL*GI`;>cFyoRPnuJlVDWb!g^%8qwa;&-y9JV7>06gbe%5GW` z<`QqtIT5CH3=mgO^K#{wnx^%b(`F?ytt7UN8KK%|t;HZM%Ppn~3$8FNGtj|DNSDwo z6A7kOLM}K7fd~Ip-R=lt)}_TFeG%T65l{n~^G0?tEzCS!yWHs$OpB73Ok}60RahGT z3UR6`TL+}YGb%;u-Y1$@S~iCJmkcQOn4wklyS@vG{R^%GeF>_p#p6V^PLzfYw@q`k zxBh4}SRJHROrKd={V#`>{u!YSL?|_R4q8`#K=jQO{E_d{C#W^H&-jF6pdWOp3R2oE z8?~U}6k`rroCz8Ub-`Z^E&c)lHxq)3{zHwiqf7KapjC2GG)B|S)jQNOH>Lst11Arq z+l#a`8zPY!qD3VYzp+BJN}o70SJr3_E!Q@;o>H{IAP`U9iE38nIUYbaQKCainOegI z)$o{K;bGt=qeS)77D9i~`8F@DdI1l{iDMA)v@qt_NV(- z=gY2sfXbSfzdFyYjYwS$SoubT*e|<(b-wJ%5KHX-)e>uE#^$@S=pmLi9}NVnK)D)5 z7Y4|*j?$)onAo5w(gc+@*1G9uHH@l9T;0gZ$mk^gGJL`0;^oeyU}9KhdW)Jyu$vqF zqCc5xkhlVqw+3z!&;uU)X}b=D-<;5!1oRJ2e!kyyL!Qq%3|m!K&*onxuQn_VrnKthea0H8;&Zo z#IgqwAf`TXzZ>)+Vu)P}RaYaj2R_ZKX_jUK`9kmjm*^p6*0@qLMICnl` zrFc}l)lnz%m%*U{ZKjSNV0LWf@ap-wzdXlAq4c#_xrrjd1dF^`Ze_HkwsJIbWZRhGOie3~ zGnGJ)E2uhcj5{N==0JK#)TlN?aCQfn+BpN(H6j=z^|p#gc=bC%?R-!9ns8Ly`IE_( zm|3XP6e;bW; zqN#$HBCNSCQ#-PlEO!>hGWCp-qSEOqd{5#Yf6ZN!8I|shcuHcZBy;)OrDe2a&_>iT z1QfB2!C>UaM<9;`PJ1Q72XeuQs>Z#71t2ziz#?)ybTEItmQD{N2+>YQpA-;q^cpra z(b=N7pOq0zP775pb^9~8p0P5jD)u;K^k1;n_^_oVSEABNPAv+Zmf?|6RbvJ1GCqWq1ZKakg`(AoFg?}j)8HmV4_D5`TW&qP;su5QG`u4*a*|`u z!oH!pz7OU#AKb`E&fbFFjb|5MCI^{eF2%stwu_+MDkdzGPlq={RCrJOG?)&BQbQ&O zWilL+MaqgwLrEhtc~x0K1-#o>oumMT4UrsR?&jBX*Q^cE={bNGt9CT1s%Ou@t8yV0 zCb}|AZ!U*Ls|DYn73NYKN5*By>7Mssf3e{ zegRzAUs~GJ-j5pGcjNEtiBdkhs0@RDdKFralg}G4J+X)8QtwAn7LDB)px0u6?t;_b z;9WudqiL^hp8gq30aiv8nk^oB91o`zWYy%PCyC|I(;sru>w1|s&_8n0V{M$ATng0o z8R(^VQgiKjg;0O$df@jRQB3rhA`_y|75{YRvt#WA!ojltdVrFH5ob4N==6YGg3t=w zz&@KykG2zM0ip54|3v8{(}QCQJ7|^#>DAoyc21}AR+mnmw?ry3;;fEVA9eB{|=he0^Bv|0^Gkl0CPWuHl9$vME__x1Xr!) z5d6EtfeKvlBZ?%;L9Z|WPlrQrq1!42{~iL^l^z7xzlQ*JsRse}?-oF#rp+LHRTcjN zU28l(9f;+D(@`9-FEE;;IRHZULI|KH68r}!a?Gg^0EYp-4he^R7YeRS=Y|4z@;Ty& zB#__h>*?BMR9}4qHs%aO9X|!28!MsVc=IPjV&UjFCV%OGh2z2E)PO2ES6nI&NNt!| z`Jzk=Fc`r{)&Q=HFBeGP`$HUX#(+HeFGp{B#tT&&ibW~*9{^Bwe4z=t#0yX!BXrz! z+yHPaSeb(gy{S#getm~R8cem#u95-8Ahw10PVOqf)M8&6o{a)2URE=QqI$U+Z7fY1 zpep4dQigOdV{86b;o6I>O*<28H%fj-BB2qU6b70WMnf~gtX}CKYB6$w;SnWdL7*0` z`j1|x%tNnt{Zr{#M<{VBE}oP+1FQ)U=DyC zQ#NVM)&L#<=`GGMoeF?+rmwq|L=y(aERqj49X7(1WK_EnRdBch=Q;e68-n}mqriU@ z_uJ))K{O7&Iy8y*5C+aMsVs+}fN|!F<`hhTKY*wQ$dvxQ>G?B+^f9Y4=;z~7B#(G1y2P;iW2Z7>qH;3) z7suabjBmv#|MsZK5k9e)aT6mL7(As%aG~petAD|YHnr4Joa?3~g#H=HUeJLbJg=V< zqtWzJdEoTV2nG++ss#$0ENtKDWH+}x#)^V|2%23gft}=S!1C&oYptO@SyBOKB@1T{ zFQ_P(R#FO~Wk^U@^8jiYS!@tO`%%`eCugIav=(+10nCkKh%wdPv7tLs0 znMJwl2Gyk(F@`1!YO2d2s#X9w?X(n}`zyQVN{rFRoqDS`yU|DN3nr9iocyl~s4tr` z;n||y0Wk~4f~a3DvHsmE5c&)FDH=pkR6ZuAk+4svPLBo8+8dBv16pCQY6$$QvtyW( z0!6hCSIFd8unKJM?p1cXl|ata`v6|Ri;os z9n}A0;wqHrd>eH_Yb|g~c)uLe-LdJ_nF&x+eC&kg1~ez4Is*4x!PKgRn^mf2mvHU~ z_MwEDQ!pPBP00Ad_W;#)D|J_HUgf3JA!uk0Bb61+v%ls>S>?tS0hoI*>9Lp9rPFc^ zp+er(p9@88Kxba7)ZqG(dIOz`Lbz2N)+l!gG!2gKYENC}H4mN@{*S0Rg&-L!q3g7~ z(0^b{aggne{;qQT?}DR0t4B0F_bFB_s8~z_*_%!x$<(0E>8q&)*B`Ct0y>1#^vO*CvcuyMmXRY|J;1?uNzz3Ql+$@@=b1pUxB{qvbI zqst}yo5Km8AA>(<%iEJAe17Y?iedgce*X7Q=-o-eH@J%U*T&$_{^qkYCH$jH2%n9? zAHSe|Hwj<=c<#R~{`%kYcJVX`-$LU*_v3%qd~1<}@4@)|AN=@XojyHZ!e0YBi}=6f z&whNP%Ub*(;TN~0_NQ(>i$28v)$>OG+~c}K?w9bFY5c2adhtzmDcvmLZ()3X@3X!5 zkr!<}QNlmK_}UR^FaEIehGiuDMxHLw-}&dy#~<}N zNWx#en(CjdbDFpQCvW}rGzq`k2ZXPU!Jja3%GVP9y@#0X>r1@+w?6j%eiHs(u75U$ z|6}`o`jvz~llw1wMB2-L@QB^>Bz&6_sQvl%{QdXj$DMYQ@JlNgKgZwxk$+siLBjWE ze73Ql|ELFlzed8}Jd&E7-OG>vW8LF(B>ZnTFusW&|LVBaT_yaA<9Ys^>7T!kUH*O@ z3I7GJpTresc*k#1oflIQzW$fQKegSz{?0AB=>-Yjj`e4@qaT0diDNF4@C&*9>3tS^ z>woXq>mHZze{lO#o&5aw_-y_A5`LFfJpcCb%m2A23_MK2|IPBdHirL-(?9$}!moRU z$G@F_{v3DX(|1bv)hs`0|u;H+xC(D-!-PZv`fs}K2+@8ygXLF#KR^D5J$_#*)&F|NXZrc)?}*R(i}LGp?Y|xB=l{TO zEvhB{o#6&|{9k^;FTW=2GhMVFNAdd44D{DO^H}G*CH{X7C;5>)(2qZ4-KV1cwfhLd zXDa;jXTjUu=1Tl~viwY}_S+vv++9{F;R`2I|7GX+`+s}tNm2ioF+N%5$7crBd067# zo5!y<2H$-17spEYVwRuT82nxTZmKKcKVZ+Q|0?|W*5|b7Ea5kB z{3gG(fBcVp{)&Wzf1mN0dj9eM@uu-&{OCvaAJYf>=WoX*GsW?HmhHdHXutkze%*@8 zrTRa_^{;K?Z~qgI-S?e@udnC-gMRt_#cs0-C47qKPx?Z?{&@O>OGW$bQ}*BUTl?F8 zJNCE*8Y`|~Hi|MN$`e=e5rYk%ST z-{+ryiw>H!PQt$pZk77q@&57KrR_^YCH&_sf3qj2={x*i9k%J5Hznj>8%tM>mp`qyvj)mbGH{s3M7ss8cXy7P7SNci^5KlQJF{$Aec7twz_ zNb8@A{Ojk?o!;C-;{PqnujEz!_1n7Om~sifgYoG%{P@YIZ~s)nuVwj_Sm&QV=bo}p zKMCJn+aJsP?Vow;3Ckq>0FFN-&-KrrNxzR2{r|?jY5iwo@NfUpPxRjwGCnicKmQi( zS9z;c|GwP*o+_{^@!C`ZsuV)F=sm5ZnKm=Kk^D z@2BqXO8B&nUoP{v|NGHX8%g+=dH&^J;>S1n?Cq8k{-7I4VAsarTO6{!gM{y|=g(xn z{Jw9?_?IO7QQUv2DSrL)$8-1mAmLADeE#MB_7|=?OdP)>xc&K8`0;bDxUq}Kzk=3J z@=8Dct~~~9m+)CVelhsMD`!lR@JH(Pf0dvA0~^|=CHyEo|KIe>pCdNEUn=1zbN?l; z@$=vDYOAv({5EcXcDWzF?Zb~glJE^r;Qqhfk1yLc^jQf%ncJVd(T{)Q`x?=InWg7{ ztslQ-%NWuBXmS?SKk=krezctO@IO-h7ij-+g`fYO{jL-BPZiJK+7tcj_ncF1sF3*2 z;PFp9?XUmGn+ooe@YRgZ_VCN!7cN=;qJ&?^@sIRLe))0uZ5>4Yy^O~%v%t^4|9k(6 z@w*pw{H3eE{qt_wbB9#_vv~aSU-FM%(a;-3{jqu^$?t3oe*Kn0(f%#e^5Ydh|8Kiq z@sw2m725u~!EgT^@%#73Ncd$s{`IP#{}27&5$*5Zy#7-I7P99-KeXSWf1bB~DL^EUghwO9G^H`Y6}qr^YW@#nHewgNa`Z_Gi+Dk6&=r@M4Mo7UrLc!S{Oet*a&c&y3IB>gRv=zq7xQ z@cnrH_Q@Z(!d zJMk|GKZ)0W<}N>eLgLVeB>e6iHb~#?#~*suty?90OU5Ve_2YlPVTBm~Xv6)Ne!!0( zfA4m&{{}I>_CY`XfnIwYE!Dpt*FXOuKmL?e?fOXg6LtR3T0j2SC9pv$$d99R|3B)- z7Zi>bE{xiA$$;bWp+50~}R>Jqbo8(_Q z2LJVgZ;Sau*R%bfjluuf@odrmo2J+AdVl?oexUd~ss2y%{%dUvewT00xkSQmVfmYQ z!q0!u`_~;N;`RP-41Qqs{clV7QnsJc89)C6PMN((!q4ORpN+vkQSbHv68>}@|9aBT z|Bidg#r1P1&;P_zeteq+3r>^xKdSXd4E~2^2hNi4zqg|Kn~A~C?Y2g?zgd1KpZ3?k z%e5m#{k2isKQZ{yo*lMG^{?jjn|j92KXLn+V*YJP+b=Qr(f|H+yTt!KUcZTF{ruNl zeYzMwn$Pn$`J5kL@7b$G|NVI#KX~4cZ*yVA-BSJk;Qmj&=*K5ddbF;De}U&;<|RMA z?TFdp{^JGt4U_?reA$oxZbxQ>#Q%1!KVR|V_aAolbP3<$je3fI{;Pic(7y+Z_HzZ# zpY&^f{J2{#746SUdH*N1(T~5e->=_F^?!)lpLyMn?|$#`A4~Y1)~exT-Dk8vNW%Zd&;0o3U;kLNKRfaIO>gnz3l7-xV2S_3Jpa;P`0+Kv z8V!~3{cocAU;CvWzf-3{pGo+4x&Jd?`SJI**zt&je^J-}Yd`+5HrZb#{D)fpe&fgQ zy8l2H!FB(vK4UL+yXW;9q)V z@n8x66XR1q`Rjl3E7!>OJI|l=FMj+!OAiqJpO1L_Q@{K1YrlDTwp9NN%fH$fe6~f2 zh`*7?Kl6v5f1@2w^^*8M$N21@e*EG0e|D3E-=~cA&tHE0s6{J8{!4ZL|Lw=WeRR_U zCH_}3KC{D*zy8qFUK0LC9=~K=ID6{+PwyM(pEb>26!&kw;1B-mJ<XdvMm zW$I7^8u;-Wj~OB6FOJ!t;*a?;_=S7@d$Gj-SC+q-82t9HhL=nD4!Zw$_1FKiKJSR< zclW%G+MnIckAI-$5zQq2XLI}0jr{oE&z~ah-;Cz^XBzwQYno3xLgK$K&)?);e*Eea zFW4sGn~mi0-`kIGyZ!~y{yIkYe+<6=gWzch@xyM+KiS;R|L2ykJR#xBnSVM4e?n1b zF@9Qn54Atl+Ry)rFFqY2@jv={!l&E%@poOmk2rs?)Z@R}k6(4(t)l-@&GIAB-jA>Q z`3tv6^`G@2)j!kGk1zfx^Pq%(oa>+LQKS_T%?%P%P%}PwK7*2QvW4Kas6ZPM_%~xItl-{mcLv5^}l!jFXl@4 zFS-AcpU2?$9wz3m{muB=82s4JH;eX9pGU}i&VJ|Tf7&zGiTP7s@cw1?dp~|^dE=*~ z_Mde#@vr^CkH7Kl)G7)8lh)rq`tirDy6tfZ-*^=JKQZ`4^Y8yq!e@2-<0n7=XNT>R zlJMiS{qVCN-|B)gasIYw!|OK&e`t?#@&1ATZRGjC&CmajhL3cU>fh)*!so;F9`66N z->ZMl`r)YGB>d7HT>lvS9&`T^?dQK)|7Twm}TkA?_Mqce)sdQclvMQ`0f4?*FOe7?T#^G{HvDjm;68c{I^|NFkWhZi>17N z{`BLY{AiST{%Qr=|FtprJ|m}y@wdIJc>Zno^FL|8&ZkTDf0x%^HU@vy@(;!Qy*JqY zNdE2T|Ke{)i}uGI?EmJ+;MadqysK3IvAq71JN*1>{{BMTzr2vo&)3G_Tlbl;RN{a0 zKpOvSU4Q)S#M9@9H`NYxnfyFY7q>ED8S@w?Et5kN@b| zN2(=!{llsL$u@rcrF#t(;|I+dpN+xi&wIJO#D5|8f3mHge~Xiz{7%AmX8oUy!B1^b zd!&Tlpyy9JKmS!-mL4kM-(q}z48GThu_sFSEaPiq@V748SR&!u@%qcg;Cr1i@=gig zh2?*;y}$jND&_sRt|zhnO8W8RcCQlUUy+vIG5FVi+(V3CX1kO8$;9OUAAVX}as2Ml z^S9s(`VjwD+dcYc&-3qnKRSJb!oFjog2O{rFS&KU3VlysAIh zZ|Na^{JOSd#r40E?bl2UeoMtmO{MnV#`otWhWh#Me$mQvCH#dPze&a5SNxn3I_ zzlnqV{J+|K*mDy9PuPD*$KVe-`4CZmSNEmy%f#UCAAES8#6R&bkN+Y5`oFXP3eo;( zd`bo#&$No=_UtPlMKYyBEe*D_?adG_&=|}C)_VD9pUeHC{ zKOgft;q!<2&u=bi|I40I|92S8_z%wX%D+!n6gHIb$r{3^&PaRlt%~wQ|F_LlZhs8^ ztx-eYllb5MD3AY#{`x=p+?w?gej&@>RA>MG!4n*UtDve|q>c6gSx&PpLJokTEZ|k1}PJgQl=^`{PHpzp^pyuQ|8B=>P4^{g;ht|67NBDC&>T*?vgP@~^+m z-!FbxYJZ{b|DOK#A2ByA?%&L3d^QGu`+kRu@yn}Of93b`^Dka9^Jc03cQ8I1gCDYS zKhb|{s^#~YX?OZ2^t{zSH;jB()c>zC|J35eUi|$Vd(D#SKZVCXvBb~6{gMHVB>ZJM ze%RaJf2(%=V623{gym0d4F8(9M~V55E42KJ;lHHqaB=@EtNZUPfBP4{vR2H0TKX%= zpX5xx{M)>4g=qh6Wcx22gCFw3gd(Z`e%y`trJjCh&jh7yaY^#;nbv{yXLc;-4t<%a2hrM~d}-wFBXk=cH9V^ndia(Ld+x(ovK@ z7mX);X0xCFql-6uCbhre&eZ-)4FCJypWQ*iUveq8KjpVyzu4=k0tx^9O2X$q;nfAzHRr_mq_@Ea;kr}IL$4mAG+Q8 z=b_yueI(&axc!Nj{NwlhS0ly!&sshI^Zorl;PfAFllX6Zg!->`slWc$9F`fp8n^HU`JeAYktm-^d3bY2rt{#?xXbjHkx9{-Lpi&u9Lr3;p^l`@f!@CHzWme{D?t zYu}l0hJ^oX1x?%ZdH(rx@WP9pl<=?c{7<~%U;iKfGf#}4U9IJ3rGNd6X|hK2-|l97 z>U@9wJFHuqk?Q|A_h0IEfB&EQz~n9xzKG>_>VN+EGx*`D*GTvcKhXNi#^CSS`P>N- z{;&Ep|I(NH`7g?pi~i@_fxP}N@b}-s%H`tz=h{NT*T%#juQ~Iu8B+cK9mevji$8w3 ztV1(V{(bQo@lRjqum98yTZTyd>uzEEqkj8;)YMYZ|LyfU;q&|W=l^a!KfF-lzk>Ha zvN8B64bK(he|d)!|5S|r|MR!TM@jtqF6H$fgTLppx%*1^Lgt?zGk%qi+;OplU&Hw$ zDR`dE{hzkm^v}d`+2s;G%lQY{ng0IocI#21{O`Sn`Y$ofzy4?5viy9Be`k*0rK7CnS8|0X%>D`|E$kRe1L=>&Ha~+;lF**Em;YlIG_42 z6SMyNwcJCD-^^h7k*N01|L!}^5ceOB<@)EB`1`N&rY1W{^Gz-ZzU$aWCH}`SJ{5yMVe6qMO86VO{`mv_^}p)ilg0eYBlZ4k4F2XFgLjtr z-^=_nG4pTi%bVs&_};vKnSY?a{_PuoE&9(@dj2H*^M81Q7rIOQGYxqC$MC;#aijhc zek0>kg?{<}R@>{v{hKGb{}ONb+uyX;$7f3X)7<|2!~OE_+DmF$OL({yTKzBC$v=NP zPqb>`OMZOO#Un-kzwW-oKUL@-zw>)^ zS}F0r@&<1IX@2|Tqq*;j`ftiynm@Hi`|JPc?7=N1{^#t*^`GI#zkS}fV*j1Z{L{t$ z_E%i64pO*SEU&5cR>%ZNPFDYCv<_~qROYKj`;Cp83i1Tl&mOrKb@hiG>tQfy8Ka$&j z$zl@Z{9o<&=%0H$*i$@z@b@yp=YQ&-|J{ZjC+7cu{5;{aDZl<2(0Q~NKmUCJ;nOkt z`?*KP^p?givn$tsn4kZ}%icLe!ap;X>mP&P_sVZylkhKd{33sjpMTTU*N>C%S;nVh z#(zW0^Z%0YhjRQj|1dxQm4}{to`mnRg4&p~amfAR{$Yyar`fCh_Rrb(cimg!{~WhJ^WB-=`nP$fm1w^Y9SE$`#W>~KzfsZ{yezz`z|{}8!N_-S3X9l zbWH#6ns==z{|Dbn?a##MuT8IgI9#g#Mm>Hp{O3RTcqa+}Ipb4X{Np$4-0{~*_>DaN z>6r1KJNdPPCH%8Ie%YAu`((eThD!K6&R@&M*bk>Xdypu9E}PHtBc}c?Y~#^pX0ZGcdfivj9;C)j^=MRhX3;`A9zvX zKjjGOzjU3nyL=+?+h1BAQD4Ge@-X**nZNxn*O|9g!XK&Uf1kx({@?vN>NW}g>?Y!0 z`@MhsP8)r$n1B1x3c}|f?yvu$7t|N?KYH`}Ni6r*zijpHqWyV0_h0%4fBjegoe|^5 zH?sW8#?*h_(skRV{(C^%ALah`U;6is$5B&J^Z$CiXf1SqTUmK%;4|${0 zB#HlK9{*IaKmPdgAWbxAJ1q{x9bI(?qSGf1?xk-bvzL&iS|b*ZcebycVB}@@F}ZUuK)X|F-tMq*~(t z4ClXPSNrvEiaVebGHxl&;Ot27m521^B?8@kLkZ%U)x#izgay0^Plqf-%ht} z6XOrNY=7-Tgin{O&ie6yrC2J5&FsZeGlSgnnqd zNB_L})Pu$G>%9lzllS}kugl{nit=M2%a8PL{`G&xId68A+W*#V#6J_mzvCx;zn1V_ zSbrvN@wb2KLu1!V_~lEfztUy?_J7;F$#D|?d6plU|M|!NkVm$N{a3G+`~Px3{)=xq zc9HmR-j(W~sPwPDrq9i&mGBR6{#+^szi;!&vnBlFj8Dhln>Sc1`XA3RJ`;ogVe^Yq zCH`M_=k{0m+dqEKE3cREjXD07`q%G&kNdiVn7?r-=bvRq`1SXt&#p{J{9o-`S2Z9L zv;Gep|BX2RdTRN%#J~P7x^s#czaPT;$H~wA^Y7DRp6?^of7MEwzv&hJ_4n=cFU0-F zO$!O1|GU5bkG|ZmT;kuI?XOhK_;2g?{nZlw-TutK!moekH0rik!Z+3W|42W6>$S-T zCHx00f3h+7-8U`0Tf&cK{@IxN?^pHtEfW4q=AVC*zy8}VXz-qd@1^aJ7<}cy7d|ZE zkJtS-&d>kfbNBd2!q3v}kHN3{cfZCG{%bw{r}+7|_-*Mx3I8|avoZKhk1Z18|G(<~ zAMfY?VV9~I68}SV|Ht5W`l?2h-%pR>`Jd_P z_aQ&NcH8p75`H4@-=xp-%a4b5S#rCCFFuy!Z{lme{Ca;xL4|}rtvBH_G59xjy7~bL zKVTl=)8F{{Pi*?Fm*^mFT$$2X!{Hyf{pZLX(FFku+YYBhx1>F7^ z{0DEW7wy**PUiM+^YfojJY0;Qbv={Y|EnMW?zr!sk?P-&`6qt!<2Rgi;{XX?IEdRH zgWqY7(@vD|eRTVO_wyhB$X)kH_&J}}q51!ZA3ylrVOL7{8(4lN{`BJuE`7e8gx`zj zUnU0sP{DVi{=bCfZ~8Ak|CtZW731ema{W`={rK+xE*v4%|Jw`esQyd*?Z?+&xqlN0 z-;DG3GBNmP@7hVspTD2wXZjyM|6lJ-iRXXUa{r}v`0aVCue|F>c2=RJ39d`iL>zgbUFrt0|dgZ@7J9|_-x z-@i)K_2Z9T-Rd+6f1%cYG5Bcr(q0`0<~fc!79+ z@23jFCmQ1@TYs;^#l5{uAQ-Nt{dg)UJN~Cq1{{ zD)H~l@;kAcAOBRvW^w;8KsXhGo zTQ>afXbFGJbiyYZ`SCY@J@9x5KaK78ObmX*nyqI`_%@@7e|k?p|GH-^yGp_*dH$pt z`|)dD9(cHfe_Pu>d-?H;@B2|~|8HzRXJYVo{_@M)68~}@zjPBn|J`~m8YSV+;PFfC z?Z=nzQG1buA9G4w(lq<{@ppF^KS#o+xc@UT`0iIWStQ}#W%-+K>gRvKgHKdS_}<4+ z{Zq~S_|LjNUMk_Yu>F*1?#F-H>7fo1z9I9^#NaR3{}eHP)t37|-NMiRr!VWDFY#Z^ z^EcJfkFUL_XpMwFm+g;4D?ffj`fhRjcWC=327hh#n>Qu?kFoqnxAybj(!bxA68=uE zf2xfifAfd$i~WBw^G~$(<1f0gkr+Q%%Kk?t2LEu=uHQ=ae@ojx?fm?oIezs73I8qo zuc`Kae9e}PqW`~%;|GbPAOFpiw?<0*tKP1or40y`_JhPe*WWnZxP#H zZ!z0{9sT%s+CC?qzuM7<@QF@-{Ki*Ci1F`JXVs^GJ8r}y*oe_{R0 z*Gcv7#r|iis~>-1a&IyIaSN~CL^nVFt;|27|Gr+Y{}}vljb0YzS6^-ab@%h{cU_kf zsr|2M`M19xzp38)e@ghn*#1iN@Z%4ulM>^Xb$I?}V(_nQe7vp1|9$o!(+BwZpLNum zk4X3ied?0`)6Z^xUs8Si_|np@3nlzTEWZNXQ@+WnmAHU+By_-q(Z~PX;j}n9Y_?25{e<0!CWc`zg!LQzF&_NRZBA&nL z!G8YLM-N>p;qzP6rSTu)$A5NJM!f&2JIjy6P(S{tHBI)D_+P~Fn@kM;&%?KVCE?S$ z{_iYN?a==T$N#S1`$}>CY}E7bJwN`;+b-Bi;{O28ztksw{N`nQi1TNg)}LGb_zRyL zdXvPz<`f#g%$I)r@yn)*@wYWP{_%|;|MB!M50v;%9ZdYwzxnYqhW{YiPgiUG@uweu z)A{wEl=wHfn%n=kAOFyOjl}(v;uPUiyPTz`j`|s%KW`3dv`ymQ_%F8KoBHtwW_pVI zpVw>s-^!0a{gytW|GtphpKj;JKb&{_b5i{;((Ui)$A4CQP74YD2G5_wzJC1OGkc5Y zPfjc1`P0>pe{a^$_e=bLVg8wJe*B&l4eCkwqnUqVe?Pug>oKDK+w(IX|DJyQA2)yT zsKoyzy?ze#<9n49iuUb7_p65W5J{P=689{Z|J_g{rF>^e&KHkf2&?Ud4BwkS9*UY;eX)%OHB0RZ|wT(a0#D2j^*bhKmMMZ z_Z=tU*RcFbO!nh{?Y=;aUwp&!KXtqx|NPLGMEUWu_8(60aXWxc{&4=U+~^?vlY0K0lA}i7Wm11yB7XuAjrY6Fz&D zAOFn#jl}%ndvX7)me+qa27kkoZMI7M&#X`N zuf4&~|Kzn@Mf>e1j^AbAc@g)2Vf*8%rmMP1{EM$3{>fTD{^%Yff0FRu^ZZG#^y8l# zeVMp_`9CecZu8?8TzT6tiT{i}ss4%E{rIg1)-RUuOLhKp4F1VO?i2fewU*zj{QR#u zxNwZb|KLtk|I{6R{4b|X7w!KChY>#iPCtJ27bmXXn$X#^~ZyL{#D7@qW&o6{MW?8 ze*Csu+lle>B;Ws)dc=?4Z~fj4r2c!B*I#y>AOFfnCyM(=-}3v_>6rZeL$eRvA@N_u z=WkNCE_TIloS$aQrjo z{Mw@9FWgzex6$V(tNr{x8g_7R3E!3RsX~AMjcag)D1X}U{XL1#{QMv7b*iZUH*)@W zVv8St%^8`#QvLHs(Xgl1rM=_7tnb}lOZZugPsi|ot@4i568(vQxEa{kHOz|=ow=Ftq1*+h4!Z^{q}#0)An2-)&E1lC+~y*d)z;N`mSv) z?*HA!`X~Q!zx;c#bz?F9_!is0=`a2Bf2StkMY1aWCMe+TY zgc5ockh;=K2%&d4klqYUI&26>5=b)z0#Y_KX=11%MUGx9zX;Mnj-nJP5u}5h(tA-5 zssEYXH%ac@yIJ(V`Ft|Bd-r|s&6_uG-ptOvb-jK;#t$)If3|Ps{4ZB+{(#~?1@P)# zIse>8x0B=F5wZScf&cvZ!Ic#Mq0s(Li~e&Ubql%vYs+EkU)v{_f7UnmyHWf{f&I8F z?5A*GdvgAt55`}Oy&fs!f#*-{U!Eq{@AAR^ZI=apb9C~bl>7z6^IyZ|{LdGNd`#hE z{6K%*D)Idd`B4nv>tMN@5gyFQFy0j z@>llD?I*H8`;RI7^<{v+E$3gi{DXNEK4Jva-$MQs*T<0apZ|gWv=8O{2V5Ulo#KBJ z>hH3^C!Hz$1BFk4_Sb)s>+gF1Y~=b~u6t(vwGndpm*meyuAdKX2l}(X*EsPbdH?6# z+~)jI>n^{4^Gov^-KqN52fThqE`R&`>x)tNOoL7S&J9T!-G@i~?~}7_6AC}k$Hcob z$>k4f@w@1T!O+ss1E&Sl$`%hN0Me!c`BndSX=){5EW z{hty)nfh~D$p7VqAoBjf_1{7N7W(@xb0>2C|5Dh07P8~@?-(_KcQ-6M}QTVa7&HCGp%lThubLSa_{{_ZhWvjgX@1EI1+Rq3Wznm8Me}bx# z>u1lGgZx?L`tMnP{NI%PI_OX9CGUSHZkJt7;lBX9`ioqD>#v@eLE--t@t+0%*TY(> z6#f*%Px>~w{>yy6@D+t$5AnCwTVDSU?b&~$@K>S!w(WBMZHLr;Lg90Y{d*7P{AaIy zK-%9c;IGdauVg&%{G;RdsiggX2>Z`<3;w-!Hzw~t)Pd(O95>|a2ln{$aa8@)+@}3H zE&R{*d{4>!8}C8>D3?Y11%^K-*B=shnOf8O$n_s~G@88s69Dr+$4R;Uw>dKX237yA zV*TLG6jt?1ffxQ2pEb^B-iM#XnmoXnza& zPk!|t>HmuX-f6*q$m(~={<{d|SN6;Ge`UjBa{r$b`mgObx&Cd_x96nlp9*-#$8vnc zd#%X$e*ySE+fQ=&H*Wmv2*rOs>woGtHU~K%$9KzCfV}_h0{QjJa{0@>s7>Dgv_bpX z{*n8?*r5~NrR3iQ?Welr{69L8eJzEbUEj1ng{61Sc;No`dBypYDZC?>iMLtc8@DMz z-al>#`CoMl{NK&`kF6T{8s*u<6jjke}TeZ2K~E6%g6sN z^LvobA3X%T)?4oXTVyNIlj2|7Zq{GDC|`fj=k6od&l}gvq_~*v+L6-d}qdA-R`5C zF8@icUn~OtE(`ugH>Z}QY)@iwylGmcs7^`JER1r(Kq9KiTJS%9?LO)M zVt~JPT`vFg5$|84$l|X_kH;%%_w|b z(f&*1`q$?r_NMTkfc@EyB$*8X|8f6|S4U2w@PRD;S9h}hdsME!JT>tNlc<*}(f0pUb#p>^TE|33LcW=9s z!UsV6J1qF;*#C^2|4fDcr$3R8KOL|2i=z0q2L0*R<^H2n;BVymS3eOy9F_NFYpYo1M?%&SenfV{qeohPg(QlggQ1b7D{-X_$+s}=!;>h~@ z)Hn67-;>)&1iVH6D>Swlx&Ba()!#TC$@O>Kzu85Kzf1I=rSkZp-`VWs z{Ifssw>jka4VgL(r1%#C{kbgGA4YWTPR?JBLi^c{Cz*PH|2TfBwdx~s{u0CFSASsr zKUIzo-%ih;eiQs3%k_Wu#knF>{kK8<<+8x%s(E%Bglg>pnqkV zy#4A|>e7kArvQItp}hZBI`;J{3ZHMAX}|iPa{X<*Q7tcp-w*s<7WZEZy6U#jIsZ8e`gdB$KkC*3a{W&!Ys#;DERR1vj(+ng)qeQ_uW54quUxdF z4u!7|_HWxQk6&in?~%_xy*dN-yIkIX9-m&lgW|sq^zV2oxBt=ya**psJB9zX(4VtN z4S$M%CFp;)LUR4Rchrx3{&o-8ziqU<|4i(#axlez_G(jqw!h`|->wuOpa1C$_OJdU z#}A#}a4*Hb0lYs?8zirP-OHg_D12kMf23RJfBE7fiC)C^G)FLHjE!<@S4WPxEdRe`O5#pVLW7#siPPvwvBzj>5kKcvZzpH+L!mk6o z;wR_-?Wz&v`hA75z~2J@&Xp_GDE>XiL;bVM`R^Fm^m7VdQUm@L_|8}2I#T#ef`1M< z|M+d11eK<@l2A{2NpFF2a8E$?=~!dXoNo(+se`{Br#F+53|B zpR`ZF{w(n49JTXM@(0ca{srXxKYX_|>3^;Z`3uVNm-81&q4?*mlv&}2Zh=3)Mg9Eb_;DEU`a5#`{oN14Dfw>;`zs>HH#r`%g2Ko2g7&k(?>beNy#IfF z0o1>!oc~Q*qhBfhBZdHf3w*O0+2&ICQ^Nk=mGkehI9FB*|5EgS3;e8_kEc-h6!8B_ zF$?|&hE$^PFCpjO{{AL1eykP;{4MaM&MhYQzs?u^x1^kZ z$@#S#QSwiM{MkxFdHl9=%e3JX{yTrO|2i!2>%$&QqVPdqfc{F$KF#@{zUDm6)1c`VgITws&16H{_EbIPVWEo z+hM-I*HJ+}|GH80hszZIj_;fLQ{I#F4?nOVABBG+{GSE>e;b~Zq43Y1oBFfan z{5RnB7IOWKo71#1RsTmdq5Uez_6(B@dh375BvYf33X3X^}n(h^j}FAP@}~7C5`>b{ZlVs{L@=o$iI8% zDT@C`V*IKs=ijQ{-i;Lgg7Ci<_<;0&4Kz?mGj@yd=WW+SqAZk(o(MfB^x@B z^3MVPsaxw$9l2Y>V_*?y^z zf7H=V?myNS_x+0E|LzjA{t%TBl)4!?uYo~k_b{GAqjO~w!LFHHM!wwJg6N}uec|Iahk>_55%|C(o845aEGG{v+ZrIB3z zS8J=zpzuFT0{#~G=hbVF`+xHJoAq~C=)c;i+}kPsN3wwYjpg!RC|YO*h2IYAN3P!T z_Fpva-8mHgBQgFpk@G+GvHu+kANk6xzfx81Kh7lmQi8(I6!RAg{vWKWPVRpR+G57< z&cky13+sBKI>kTVquh#drPD~@4r5Q{U6REa{Wyhc&0SPe+29w&|k^*w=Lj(^7)&Uuz$h%T8@u>a{Ly> zzxW5437Wf1{-JpO_l=x?oprWa>@fn~D7kA#(ia z$D7IcV>9T_p~&kW)+atY#lOZ`&|fAw{%p&ZYbbotM<(87fe&AKb1;R^9A@IRV)FVI zjQ`>Zg%5!CSN@UPe}z18t{iLw-uM`&+lCPDoTDwF&IC;mg5UXjwbKl-G=ekX(4~HpmkR%{zqZ|xRzP2 z|8BW|enH{SgZ(R6~i~w=v{%F ze+9$%=e#Iyzga66ko#v|i}qhH?>~wETp;h?Jgj0?Teqlxz+bcPQ}rL)+Qd68@FydF zBKO}+VR)C5^}#W6{XdJZPTJ3G;BT|QudQ%yAtnFux@`a39`^jL1%AMf)8|w8<-MW) z7Wm-MFmn747vtw8dHX-QUYcA#KPSfj-{knbM?MXpb-3Y$|0Kjl?!Wa5H|5u|%kfwKXkL@zU%P>c zSH{Ziw{0fpI0`>=1@u3cod0JN_O_?+$Cm;B9CCb#{KYp>_~j!1qJ{j)1$L0@2MU{( z^TTyq?*F>%`G%Z7q_i{fw%_IQABtAU^@GtXP5s$&%JD^Rogw3Y4e}3Z{p9h}ur<@j z_0yoKru@2v{$@4G)RWTxx0g)3%R>Hul1=yoPq6gc%#RtdR{nc3ekO+H7e87jn z5ee*6{NRI___z$X_=vcG_YDSZ?GX{t?V^T6Ga0HFm+i6f;X}eh3~GoU(@S_%sJ|-8 zD0_TByP!_Nal^#5%4(JLi(Jmg;Fy3x2_eJm@qNSM<6{CsqNAdie5_hw(StkKNA_nG zH@=9m$Hs-n#lO$Kr*Ql?HCx99N7}oOjIsAOAjY*J{8~_OY@9t7;Y=ytLazwNTeWU& zCRloF1h7_N&CoMEKCEN#AbW(N-8g{@8yxGUav@>CQL4B4^#uWqrW7hQ+kh#dvTD?^ zYji@?;O?>EF-$+4AN!qYnypnXXH0x-BeknqC4;E!V~9O2?)~TpZV1t_rhQVl;K74q z)r6?H;34*aplC+T&WJ?`y54bv)V`((H)7@%mk<%JGV|wu8TvySzi#29>;}nNH5;j& zf|<32#2M#xYd2C`$J*`U4Dn;X8v*C&hC=-jE-oX#s7Qlh8o#I^ zj3JzH9DNjp%VHie=ic$UK7M{hoY}rIzOiMVZj?JGga5of%8d}lC*_WvOX2slGV#ub z?*0?wi*0UqiNY89#KddL$5Q?~>)kIz;j0L|uN>dJM8J9qpZ!br{GW^EKZ|r9|FQg8 zZa0sj@M>05epdlG|J(1`yHfbqO#cqX-!a~O{)hQbzY-oq;io&<^Un5t<}$=h#s-CWx#{IcTE{ucNLl{dVg@avA7c;`#G{(A3C zoI~OFF}(T*(_d-1{BtYM%t7HV0e_{MoPW;gy<;eReWpKtI8-_R9iJ8*XM)`R%Jg{f1%*Gs`!B=Wy6aN; z=MK3vjKWtaXRhBlE$YAK^P~t0U%L_O`@H=N%k}ryh^XuozAfXgUSTw<%l+TCZKf`u z@P1uk{jr<-`VH3qm4=sAQuq&Q1HOn{{^{8RZ4^FtYqR~;YI6H~{Q1C{6g~?2uU1Qr zFWtS_bPAu$@EX&fvzEO7oV;3$^q)2uzg+d?{O@Neu!7=0h50{zI2y_E!>+F)<^L7N zZ$~pZ-cjwl`xO6Pz~5zouTl8@3lzT3awjGTb>;f+ zac0JC3V-+$lc6h8UjKQCKQ^ZDX8^B8$?+|gt|a|$7}VckfnQZQ`!b4u_Zn>cV)fUX z$m`$iwoN^iORM@l^;)L&ri^A_`{9Ua6wm0(lcjAc+?@;&!ea-r-pUdqhbH@(dDEvxjKW(ubzvy7hJ_`Re z@Yhes@%8JhXiwpNVp;#Y#`@n(`S^SMP)uiNe{Pkw{KcMix3jK|c^M5_N3_1R(Z2VWRGx>|i`%kG$InGf0 z{h9p6u}h9`aU|sdg%1M%=SY^3RhYkPzH)s2)Awsq z{F_7k=*TX|?`(K86NR71{D*_fUqp^y()IjN3O^hCk5`%KeUWzZX zv}G`b@67z4gVohOAGv0H;cWd@I_huU5vkLkbM4S&l~lO!bgbv ze<5=GiWv*Y@$adKzhBGo1wP3|#=kM5{m0Ao7ZrY^G9|xXO|$*=2}#oS+jYMMx&E^{ z&cr(}%iI51_o`DV{-1&U*=%zAzm>15i^8YE`0KR5FAOSCkisv7_|5gBJpNztsS`mWiYAd8V@YH{)+>F4teb)_KYGt0}Kp z|6_R9Ou76qlmFL>;{TG_pNsSVL@s~L6?e(__ZGCDenf8nw_CQ^Me!e6j_IBq&M9*K zUq5o=xlT1ea^%-*fjAoy7r0}^evG!y9wVLw!|GZ%V*?*=%{N@Uk<3|-rI!Ez85B^g> zDDQt2gD#Tx=V0?E^$xp#zC%9#^=;G`~ z$x#$O=M)pKw37GVz*_al^`oK;ud({uEbvW|_LryluVm{t4u)6D%J~<#-R`1Q>G930<5j#tC) zknR6ktiOLQ*I(^YrTS9*Te0!qI9BT!tM3s%Z|hf}I)xtyc-tB|zD!8Xo)o_36lgyS ze3pBu4hlaK_^a#W{9ml@LEis)0P7d}0=fRG1Wm|E@$bO;kBhaRtF^rS3U9xhhr(9{ z`CUFAnTuB_>U<0 z_)#F{*J%|0Zvd~&k;hL(b0(7ae};nowQF+xgMg=>QT&^V_SQe|Y@azq7&s3V#je-%bnt%^dO%>Hn6q=ifBuKa^N` z`{hclH=g4E3gSnb1-@{VPUQU0uQ!X|7=PUYKY!+Ma{a0x!}G&wfge|;|8X(-ZExiLXWQ6OWc+A@`McIh-hVSk#**tlaj^eST`0HzRq5%drAewQ~1T;|6Lp8_~0#JWc>6{#LpY$_?v&9 zBJUsWf$?A2BF8s5F{3jjzhk+fK1H{%pUY80BPjf@(0^^K5cIfYz5cn$0Cx>LS? zW@ErYlK;0LzZNgIzq>Whd_>8g!scJ3_4b z_|d`Sw*|}FuW*$p(*MmC?H?lNpQB%$e<=C?hW-1tZ{_&yIp_UF;WhAIP7D1#+TYHX z!jA_3zl^ zdH)vp>t$=@6LkFr%>{}1&(dntT`=zqQB@>f_J zmY2f!E0M|Y+m4fR`OAM2aD>8N74sK|eEivYZ_{%Mzg5(~w0!^X*RhMgr0`jnn)0is z$|GJ(8*QVH%q>F4G6Vhx^=)f9A>ifA5)>no{zA3HGb+mAC(+IkmS?_@9OT z_RH~m`%fU__ovW)w%_FSk1crSV~T%jRu+Hr@#7~s|80>e8!5aa#cV&91^?sSxBWrk z$AbMT3*`Fmk?(9Gg+Bu8C))4w`d2DD_9BJ<4fL<|mixaRRd0k*_>y41wkvY}SvUIa zqwsgZ{?u!7eC7=$|EBP5q5jGux&GR%sY=d21_=FKm-Ek-d?Y)?KVIPb$@RDN_MC?l zek<6IazoBP`#-;rrSP?d|HvcfKft+!eEzEm_z#B#|09i^;S_%b)-RMq`TX~PbN|

    dF+ptMH$<$k-va*6wnT1!=krt| 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%0Aypd`;qGzdextPwXk*n&ST}@!b+1 z`|W}F&tIEenc{~I@GW0M;_Gl-5Qv}k#Ybf*em2BstiP@~qP`*zWuW?%aq-br6u-@4 zQGW|5MRe{O*xxkjivEca5Aotf5ih`f{OZ?yrR84~zwTsVAI3Ki#pf1d{PzqN{vSyH zF=L|1{_Uy6g88nY_V_=P|91zaf7OhF`N}YR{P(YUUZeP{1{ciN(uLgv+2^B&Uadp% zBNr6R$LqX6{Dd`QUZnT~pnTCkv3#*yv77_(i$2?dj1NVVg#I!g%hfKwbJqvR{(mnh zUzv~PYL|cMiT+pLg#|@}d69e5|*2`M(z)_c+Bry4cq~Xm@qI7+1pb4pe{Vzc`!hKSVC~6WzY$V|8sp2c`!aGpFqC>#zF1+PyGHzuTlI5 zrVIOEd{fT*`VZ=l(ki}{=vE<);!kQQ_}D+e`h*g>f$V>1%^M_t2gGM9KGx$v{Lz)8 zVk!NTSN7tD9t z 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

    g1j-*knqK-KS$R;Kkw^W6N!e9abb!mi-D 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τ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

  1. D!wgYA1+$zf{(4~q&m1cx{j!YKnkw8Zxz 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

    )(+VB{m(jjeykZ+R!$jhO+9PoQ%ZFnX&LXYfkB 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¬4dc_U<rr_;r;Ci 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�qD{F?MCpe!2N)X&wJn$>aG;!=g=K( z>xas!;=r6a=+&W#gRMeotTw$S@-fHB2v!q$;Ym!NdR~9miIJ>jhMOm-G3n75nTm^a ztctvr;eH$EIG^jrdOc!{gC`)h@EQ?2(c|)rMVzr;?N^+h`P|C&M8v*!tX2LeVoswK z?^)nC0Ji`#-bcVGcrF$3_Fmn#{I4jfZkv=e+BuFcS@Zxu7rnfmX3y_Q@!@rh)nLY( z_)fg`Grtk9_=b}H%?M?)BbP7am-EFu#qob=`wqaWimd-TbL;Cbd1<8Z(g?`|l1GzJ zlu$H)2$5z(O(3C2ixkCOOYAPTSXL1W(Nz?6HR`IYHTJS9S#@0%7SZ)n)|yo;>$>{? zotZm%FCmHWefyu6bMJZg-OMS|XU?1{@<-5%%i_~Brh5zQY0Nez>pp9m>2rLxmD*r5 z7{@!gX0BeqOa>T`>&eZ7@Tc)z7@)Jmj79wKoLy`nCp8}G%7190o|*;xB)}?wlK*1h z6#A;CAb-ue1#tL{GSQipNdB2qCsXlgVwZCAL!Fv*A>sCLZKGX6M#dQGnMRc{)0oC1 zM#PTj5z6cf_$`bdD|@8750m`94Sq_&59PD(fTtaXy&eF??`Yr@dRea(^(u|2>L;yR zeM&E)Uel=*5mg=p``>nzwY-@;W-S zt1BlNU?D?$#D|f2hmwCvLjEzpCjt%wDEVgqr_g;}u8;OE=>WkKF!l7bd79SdE5t4# zOf(&BF7>|=@hf?s1^x=)&j3aL9pDtY`^D~qJ`PEqJz>V7>(@4{T;sY|rV}_w z|JaQ7B3L<*s_Ug-1-I#vkNl~Laz7LJGC(6h@zD&NLSN(KZteagVLYqa6w0Yo_*>aU zvcs}QbXW?+^>mp%9@n*p{3XF$7=3bp<Wl$3p&Cyc&l&7OefmRhJ5eW$TmXD#|_ zaUCMA=Wua*kBQq1alJx*Ic)!47$shtEUr_;b?s&-=V^1vt2m3DZMGg|p~sj%5DQiW zqCrD^o9lineUt?sV#nk#cJe8D5azi9n`|QW4%DGa)` z`2IXIe(+xa67}&6 z;70=H0x0}a`!jdtlDd`k%h8uW=NZ$-%RB4f&Z%SB0$mmqbHfy8jZ60q(1_zZ^<$m| ze&|f>djzO@;iDR~O-I6aoL|-pA1;&kjy3z%3u4`&vj+yg3!9DW^vey_Y<$JVZ3h## zYvk<&@nyWY{#`zLL%#Q-yzP`X`Q9k;-ly`>4f6HNY`i+lCCfDr1CFofka(EQN4f{Pgz%SZwk@sDLq47ads$lPAGhD zD0Y9S`o7S>){uM>5YOc`oSI^LoPh1a_PODhlON8CSkd{R;E%!3zk}Vb8HnlbQ1xA* z=$24rO4aD29G8-#KNk!=AM{vh{|d%_3|9X;SaLxqg~2!qkP658(bV@F zoX4;(Jdi!CC=XuG0)@z_+BM;7jJf zt_7gC21BUoO|hFMn~wZ39bs?^F5H0`cgk zndGP@oE>Oj7APC zh850m`WUAggIUNK$wJl~p5g@gKw~WCv%|Ng#O_ELdwa^jyHk!q4jsS;U^a9-8P2Y^ z4(D0Va_=*+IrZJCXY)<^?Ro~EW2AdS+;>;VzB}ZFJsQ6&XZ@kVjL5HC1k?!%{a zEdBRSDP#YW68#}%a7Hu7Y|mkb+tax@Sbv{Q@XqtjHDKP9OaGMOoXd=2l&hnHg*j&b zFL+?aKN$W0Es?P|N1``Hh94tdE53qR=U~bCE@s}rD%l{tk`4PjHTFvC*gvI4UrZgm zi+PXorlq9HIG1DR^9Ys;b17r7X)m$V`S{VBhl|8!v_d{t$CMovzbT#7KyzZ z8T(Eo`c`E491(%F7&bW9vrjpuJ_;X9i`}0#_P(^}J!ylp7yq04n}iZmoO+`_EM&Jb zpXq-e6)o0Ke&PlG7t&&Hrj30gE!v(o{5P2QenO8wqZhH*<0-NGQ^wwx61^v7uxGFx zvB&9y0ueoj+86pftJ~kC*!NJSe=u+5m@`LRGZf1Lv-QKQ0iHja{-qqNTQSrTKeE8d z{4noS<1(gaW10R~?^Np|mU1$$^M1{pL0H!RwQp+h9qL$~g!y;AhM!R+{vrEo*6#`C zEKD0R@MK=^o!b8nVNTr0(H%Vqt2{@J6t4}wj18iAL82Th4RcxEXsk|nFJr@gz$qZK zLwpTiYEDDT&es@2t54=fdyhQi*Zk-sr(kBU(VjVH(CqtQDoSn4Cl=b6v1ntOy+*2@ zYs}Y&2)lu(c`Fw-15tY;_e!&YHb0u0vFOM?Zo;r@EPAmo*x^`cY&aUam7^;=HZ_`Z zzL6G-j76LCtruO|vFOs?r=#H+i~j6YdcxWO`*=6Y`mgrrME~tf;8z2#1E~J&gTN__ zbM0#<57>9!5Hp=?8oJbbNvj`+h-Hrf?}@%FX3AR9OVI!)8`_zCg*C=kLQ89dQM1p* zH1T};B0@)tFk4A7o7w{z{ajM4l8vIEMpvS=uBE;lBMp|FU*>K4gQ3+OfD3H5tl0R9!A|FMa7 zVU?d*q(!=4wR3PudG&p;{HNzRg$Csx# z9`9nz&$G*RXRl}ezh%eX%^vqo_T2XDaoe+tU(7b` zQoG{e?2$k9^Zut_?v>doywb|GqMNgaUzzPh=vhnl0OOz()4|neqQ*T43rvHs5CC<) zY#7sd9t`*O)mR)^&DXNStvr6JeI$BTwa(vQ!lh~d)?wLLX&j_`F$-}XS<;NN2Jx6Z z&MCI%dq;Y_-dxXl%sd*B-9E9erGF>W<3uqhNblD309e_1IkuEm^-wxQ>BGbcY z-9Z1YUELt>$?bXfd7;$}u&lvAP1DG)NV&Ms&gAmBb0)dZN@Mh(O#TMn1aQ>W<1gp| zG#;^PC3&DLY|D8k{A3Pm%lSPQw@KpqxFK${#P!$WTK*)=&7U@3H7?grY}UWWf>WSb zKUI9Gx?Df9S-&ZGxo$S=ha>f8qp3{Mw&YF6Jdd2?$>AB!ZRq@Zr}Hy;{Ne2UscF+4 zo*D2zojn-#Zhy=UJfB_7<1ZwBcs)DJ<1c0BPW8$c-^>o%%Pm;Gdc$dFV+4vtpV54d zg)y{RU$k!JLOP8q+RSffmvh$4@8*|_`h;wMQYXNqCaA;aiqCh31=4~yGOLO# z1YjCAkDp0}0``{MB!3+)eX3XZ30MyU!~lxF$-qVEdEb+$=ejrqd7ooP>6Dq+_Vf;W z%p9+e%Hu^HZb24W}$YLCxLhjJz^oQ2= zh~%#s^woOZBfwt(ybMtMy$YN{_kAc`%T?!8N9Qt2^6B)wpK_~dRgX$O@=r|gF$4I~ zfU^Lq-+mMDTLInqXzRf)wM#iqwwz12oeP9(uzT!EhJzBfnVAopk!@z`!zLHka1t(` z6l%tZ1r|?P7+I3Km@hEA!DZpb)Kz?K>KeX2_0&R)EyaO~ahUu@_&SEO72}UdxxNR_ zO1}eZ(KZ7{1C(47fmZ{%%hleqT;!)f7+7^(Sx6SF5`w{DVd*2L{YP_%W|ThUvmf*g zf#+*^(yPsYYt1fy&7iILdkFaBfHr_i|7U>rl>SM6(UP-*T3r|G9VkIPJ26Cr;m4(Z z!gUGyBY=+wOadtS)xarqU-yvoao%{J)N3cfJX(0NKM!8g0H~>?ANv-Uely}%^8W$& zQ-J3HivCN$DRfVtWU{5PE@CGVBT{=b=-VgSwK%v3eq{`RHWiZ(8Cv`aSN;VF`UeA_ z1~>ws=+^-MW%@m@d?hi`YY}X9`Pc|LN)Jy0e+AGEP<*@z{FnLYZkd?GLCs9mTlP%5 z2C8U+DgauQP=$y${-o4L>B0mb#{gddSO!q#Wi9a20NvALcaP5(^{|4|cfYQ@{fcK=QUdl_4rl%-3z539rYLj}JQlH>sE%37d z=K>TT7Xqj7Oa2N(1JgSfbCGC+sj>MTk_@1og?Tt?;5uAB+CfL@<45402AuN&P<*5S zr_epUx|W|F8Av2ik0&wDLgwkGH9sZwaWv>CKF$Vy5#VBg;^Q*lJ@L^?x-6($vvgr% z9hb%yJ$sM{KP~CEBYs8yJK#S6{^Qc5yt`lN&;!*$nllJTvTIc?ovK9%I!6IN0Z<1} za@GT<(3fArp$ECn`Gi#axFQt)-|Et9MSM!G=YY2Z-UKLmZv&^$t9-{LQ_E~TO}VYS z6B!Dit>wb@tM(bG$Na^Kap7p-Qvovoir!-26uSE(b@S7b6?F@-Pn2%xfvj6WMX8zX zl2%Y+E9LX%g}QcZiIL%2ca+0~dlWW*9mm9`!#VsL#z!Q^haJyKzP5pGCFoK=?hW8O z0J{N-uP=e`FJH>n0rrF}!gBcYCK{&Yg*-zn;F^3m6|frQZYpO@&q@06C5iQ*X~2&F z90{O6`KuTI5nc5GPl0meTu$;(&>L_*s7kRXCf zi%Uman%IAp1H1?@5TNup3^)bHwbSpmKHfzh<$J{4Tk|~j)|_65EcbH zI0TQR$7#lKWJgy-HX`@F76a`xH2ZUhMi-FC0-0TOsmZ($y3O zX}1hz;6-w~S6(O`JC*Qb+))bb9$osC%M$4}1NaGmg#bnW9N-js*_TE1X-C@9#wEfJ zdS>k#F^owuL0iy6kmL~%a~`sqKK=>(N5Ibj#SdR0`B8dM zcQ;=WKl_s{wOW^6m5i^6=p6(6c)$Xe2GMLB*u`%Z#lKz{$#zP4k*&RA;xdnR$;b~j zUcf^Yd8)!{7y0tw*z_eZnAuPU!PUZ5e&{9gd4Y|@g=VoA+c(Pk`1FT8EyW_h^_5}3 zI|M}xx_wX~-(3VGme$cO^gAaj!3itw`=>8Kpgqd2Al*?^i}|;&|S`? zd{r7tu7Q$zm%R>-5MTUtDQ_F%SMnN-0WApl6+n$kh_-h%%3?RW<{KW}KtE}xz}vv8 z)fJ0j54dviiK|vGu2^5;^0sgZPMN417Kfwg(}oU@kF3D{sfN`n>y}rjU&TA{90bn(-ptsxxC7ElAiz{ zApR?FBhS?O53awDjgE-SP8prDDSaePu5KhQpAt^b_I>UVZzi61jVBRjA|AqQ@n2o( z+TD0a{4d2x|3Po4_=#iAE1qQio@bcm)G;}Z&zXKK#7VS?`OjDQIm~~di#wRo{tcE0 zz0`PP0pVg;HhB=U4-RTBRrm&S6yiR|9!0F$$#<|)b(O-Knf_aaW8*12+sJpWX8Lss zzlLEc+kL)~>6lRz?}V@;X|s#lPq4s!*hhlyfdw|?$Ai~GV36)}G9T74Me5HTl;iI| zD9@i?64eWf3wUus5icniz)K4T@>oHcKDc0zUS2SS#|tX-VFg3=5e38bg9eP`m3gBw zwc5YR{C)@WauxC|)vJ4f8*4DO1E}(LBybAGNZGC}apy1pZ~44i0|ZCYUrVpj>E!G5 zHS>N`+X?5O*uo8WLH*6R*R%{4rj7P!u!C5I(kmoIiF*#x2q>|Uog<4^u5yHBYAEh5%rK#|uA$zcGEl_pWcUDs+Cb6r)R99FtQ<9C$p|Y)<1QBre#^Ca zqj;{9;=IAk{)#K`Zcg6<6=7I24kKJJl*G_6&cNi9yu@42ah6nQROV{9tKBPfr zZ9RsiQvk6OeUR=4rcEi}*tP7WkFkeaBj89n2v6Tg3d8HqX<8Y7L2PoF1H)$vBbvD7hmSrR-5T4I?KgZpXb18k>F)Ps`rQFtsCs)h z@J|5oUnlgn9{8DnC4sK_uVwau>kI4Y>l$aT#UebUHo_ZmbZ0mn0uQ~J^IN!nGuQX; znl0Y=PWQ$8_|8bo7DrA$lA}G;ko}8_5sC z5N?!SiR);6j84X3^ua%(_>q$?$Q0aPY>z=J*^G5+&0V@B!4*Wwv{d-cM+9Y}3{j$6tNCxVu-d-c> zqXUU$4K~a*z-mQ$NTWKTL*J@@Nls0F;^G!0r>1Yi;Sk);)28xA8H2~hoeVuJ*fX#S zc&97jGe>5?7u<-rQK84z^6F7zcnw^CcuRJ&0=UL1Mb^YNu#d2hj?FaQV|*G}Phso* zap-;Pu)>B9NVb!qEaR~VA4z>qIU`X&UIzRwz%u})&u@Wy&%~U}f296ekCgZJ|B^me z$$Aq0jK0wCC4WY%#PuHeC7m1^y>0%9v4zl#kH5hgOwE2I&7^2M*)X9Qc%+(5x*0d! zINUe=47B;jnqmLq6UXqQNkdgXva!(6EYV55nHlGD*ms<+&$K>f>}2Y!!j57gwB%zj zXug#(*vkgx-gwee%_mY%jnF|8zEi#{ItzYA01E(0Pmcrt3qW)CO~;$0p6>oo+R+?H zj_EDmRX41}kuflsIgrR!uUfaVe$J|)2PIkCE?Byqwdxpbl%h1Zv9>M9l1ImQs9lAo}I(kEv{n48PqtsQp3iId`#5NG!DjGuD^B!pN90a*O`Slvtoh05Y{R1T&L3j@k1!eG z_4ZWnSU!}-AXjoek)`8M8w{G+3 zgByWA2-pcw={xr9fHn`1pDoj~!`&x8|G$*JR1P}Rm-Z6>+kR5VzTrot$EdGyqXgJy zDxDX#@M*>zkNS0G-=H`%!J4)cmnlK28Ct>TvN0jhtK16+jvWB-Qw0pb9lRT$)m1AykgW{!B(%zMoYzlw(4 zn19lUrFkcXmqLh2SY4@lvg%tme@H%>h|hZ9O8_erZ(xu*`?ND}!sMy$Y!fJ+XJ|W3 zTv~NCrDDN74~;}@4g)ci4op4x!~=ZA*jtQg#JgR`GnNDy7TcbYd`!Qe?|m>5UV z^pyLt;0;&+`2nVn^i7OO9%})7#}m-JZUDZGy#Q0ZTMS1&IoR@^gKs)~6vG1o{*f;N z_~0Nk8~bR`2ZN3}fAWeSN4P&CM)bO%K5|HG!6yjZ1@at36ohk(FuHkkrF#ZGnVp|3 zBmsR)BnZtF(-e>d(@8^gV%#Xx${jn>d^DcYc$3DN*r>dHvMAc*ZLMkY_= zY2@CMBJ>YJvgG3(QX)OU!R%5V$WM`^8J&oVh@3^I;w8ZvAwoT2EaOqs=|+~gy6NKY z%orl-&eW%jk;oQZ9(&=KQ2s>vBW)RQbwpVMXlK>{=0(<`k5ml&M<9EoL!MM*G?%3?tkaD1l%@iVs{W!b|VTcur}Vg^ZH#eh21$Tuq?>B?=E|$n;CSlD~G9 z@oWqGo&4g{iO~O{CcwudwIw{1OI=$I)emlI0Uv&TGQLU8sW_AF;x`P(EMMY1#7^ba z^i#nPBDKz;f=QoFM5Y_DrRIE1@IaJZE)YlJgDtZ{9;)qVElbt|9QmGjo9Di%?ygqc zd||*^UKB+og{v7T98#f(c0N~J`-Ns?&5C!Zb`&MeEp5nIkd+%wk~))6=mJs8R>v0S zD^Wv3Inl&68>w^T8G}++q$B)T!NtGOgQQ70oN~ORN(G8IMU0M!C!tLlt=_3sQEwzs zhh(G+MV)HI5K3E8&I0b{C2vxRP!d`)=Tn(T&d(HI&%dbBKxKjc3wZ~eC;x9>|3|5+ zvnJK!Gx3ZgwP z`@gr-?i?A~>8B=$cKVV9vYq|`7G@hV_i3l8{uT9)TeDGpX1T2}%1M_xRn(`L{Xk_- zO;Muug>A$)*vZAob|KUi*T?6K1ZWkIhxiXw zeI->~NC4`w${4BJV51S}v)kZSo_@r(f87Q@^qNFb{MRpa8NW^Xk#@wJqH>1bWM5b5?!VTBKyyW<+bwfcgVR^HwM{S}@-SsDnR&%sWM=A9h-~MI zrCR6zTAv~;s|u0ZK|@q3^CZ8r=P?iMm#E+5SLj;gQ~7V;j`Ar!W?0rB6cKg2s4FBQ zL#IGsNu4hdo&2t%Q+)yzU1z_*jUH7Q2*~~c9a!W>eh!&+A-c|fmCLLAt|FIBeo#dv zx|E6#GjT-!c&xAHufhSe3zm#$fhCBj3OH>|+vG+04}yEM=$(RP_7I9{En;NUh( zt8wXsuTId310N0;1)y+XbZS;NkW2$XXP{O??gxoZlS`*5iO!9{?*RNBKsqEk&jP2g z$0z55JN>?Omuou2D=VLhr8xX!q-q?zG7f`7!(HYjI6t|N$~0_esBTU(F(AX_5pvWC zMizGaiL4dATBfV>+l1W3zy|^b0VwR3+>(#!V)Zfv@*(X42CL(IH~u9_@m~P^H-JkI zJbri$6HcuQK%oF9@nEqL<-~*eEtgJv5}nV1cL4StIGu@g3ztFgLXaucZg9zv!kSz< zQ?5zaFGfd2%@ zKTGC|-KWcY?l0@p&7*Li`DaG{D1T;Wk+854z-dGc{*%I!x{6EZd;4nAW-D>?dK33n z68A9UJ}K@!h6VMtRTA>ofn*#=6yOCpIjS2AG+Rf2HJooUQUf;)iwZ7Azm6I^m;wkhnf=aW{!) zMW_HwPZqF{PVkz7w4AS}VRs-M?1Mx@Xu4j?Rkhh0V@GYuA6|j0y>V9@@VdU z1#N%iny?6lrj%=IUn6Vy#~JJmcA59U`ys80EbKw3^=ZHECe$J!)FfD=icCtWR!Ex_ z#&;DeexsDfxjs?f4+efPU?M=ta{=&c0lODUd1_9S_m;lpIRdp8IYyVYbS5k(SnVH3 zrW-iS`**=@zV_x`swOVRR9VQG8-#0vnY^C%1W?*tMRi)uW+`U}WKjKv$PMrV4=4jDIZp+C5kSeQ z)k-;=_D4=t0vlty#Ai# zZKC3MJ_$^Reky@$cs&NzBr>WVA+pS`H%qzqKqh4;?Yj|ne}Dpjl6x8O(*aFx`YO3= ze_8INQb=;YL~`FH<$lW0z7leWSmd{C0H(&>^o94t$02hlk;Z>u-iLdXc@WZg@YN*q zZxb?KEfV=yz63IllQQ2Zny&WWNqOIfEK1%VfctJjx&xHF^MEe~G}U#@&sD!HZ=!Tk zZhnq(^A?$#w;9@bI^|}Fdwa6D$j(WkKF_=_^_ZQ7s9Q+XD-!v+Q&diZB0md3!&{`B zZ6p^`n%a~90sal(2Y`}u?&g5D9MJ0eqpmtv%KM7FLFA8K8dqwcDK}Fugesyo_IF)4 z51#)d*xO~kZ)n%(B_FetfrjI|1W8=@0+ZEJmfM(8b`GDI=od3#0gQItxXDIO*JPt<9GuvVCSJ?wy^~0+8Zr?eXMU zf0y~Lq1~aE{EHNm<+}`u>Gw`I#ZWIJye{iq?)|t^FK$l*-lHz%#zowGbYHz}Bfb2F z8P7<))WHp3md|a2rB*7Tm0EOKsJVhxJV{!C9oe03Jph?ixo~a{Xdyr*3U*iTsc*4`!Q)*@a-_e|iw0bB}DbguwTq1XMY-7>1uf6W?n zdq<$x>%4@Gs{j~=K?jr-M2O!l>F-ATioSjeY>@x~fTAA;PGSG$b_b9s9bH5pjfG|@ zx`?mUrC*Eq75%e;Ujk?bDEe0er_lSpoUU3=P|vJc02TBn72E<90MIo(9Gm2X4r+hz z%8&RJ{nX#V2Ra}Rpy-zar*MPoSA2i$ZpkD1u#qE&jxL`KXQp+lk65={4mwAUceLGR zjn=;qr5lqR04x83HR|U{3~kOY~yuZ)^8mTO1av=x034% z;NJuO15k3UyhF;>8jurX zhKjd2Je>+9g^tIh{H>7B!FTEhegOP4z&~A?Ne4B*ypJYHURf>SG}T6udAIRD9d0T^9*S)LV%s`-lB^rIhPLa`z~4otzJp z280O+YH7Kmr1FV;yX$|b-;(c&Lf1RZU`q{9e>#DyXaCo`(q->4C*DY4|2L}ppE5E> z^_&akZ^^n()=yWQwBNggN*Wns@9!n#@9oXxH}*f)zPS5u>Z+%ln9yGWQ#KvRxih(R z)9SNKlio4aOBa+;+e3 zzpf;`p7Vv`MQMv_-L9otmTM|4#P2WNd#_Cr^@GBCyLY8eRJ+Hj-cWb-dvDzRH+4n& zkspjtfJy%L2cvhBYaJDjij86-oZ3~1|F`bcI`kc5;*A9MOaCK(SKM~L|Nqf>_;z_V zZ1bD4f872+Vx0PK;QAlXUj|U1{&DRA^^aGqqs_!d{2`-)X&;%78d`2pCK+r#RB|Pf zNfj)5BA@nkS8r21^6h=^>WPX+eNWu?#d?2NQjx!RuRhfG|7J2JbmWd=U?=jHOsDk^ ziZp4Wam;PNw*u~w&qO-K4=9}$t~s@ihA@|KY`n)M4aEwB7b;$4n=1>Mw8Non>466z z_mjZXlb-KA#X=@ByZ#r>ISpWr-et-qO+ z;k*zG?WcI661(?1sX^ML(tTf$|CzX|Y)z#F^9gTD`AQ#7jJxLnKNfHzfC9bQctG;4 zIeA^3@ThZ>u6<_W(w`D6!Gq+ot4#YoOB5XSo05;dCw`@;-Jk5wv;8j$ihfUbNlDRH zc2%|SO1(C3OVn3ef&UTk1b}o(^HZ+?r_hUEx3$aHl-DiCoJHbV*!efNx=7uk513SRUA){w&}W zn&x$#Puhq6@X3eLnR&3vxK>zY91X8}9oPV?eE{7nM*7j-B7Tf<45h*$#&|e2awmA2 z{wDcp0X?OUhk!o|cnP5Rc^~+G@iU)6aH>+!kuqt46e_$g z`R@R4aXh2^WjzKy0qFpx&obZ?va%%Kk45D@DSaj1!$x99G&wW9gk6qe)q&H&;c&jR zGihn@L!76HUADYPP1|X$E+36V+vQ^;@aqAaUD~9}?*3wu=$FQD0(wKe@BlO6&%}u{UYekV2bFZ%-1v(BlCu1CR|+a`y*Lp_lVSDZTcko8CGWIC();Xd`9a4K`VbSmQ|r!pPp4i0x%qu`pt!O1!A zGT2ptod#noZ;1u?}b^v@OoW{H$oyK^{T}+4h zZ?1jR$=46bd@WRbY5ybna-K}2Q#tUVfRO+SznD(&Yyl{FUji<|F@2s8x1fP{jd~Swo4VTf5J(ABh@KFUmNS}WN{xRS)fZ{XtX~}1^YlqiJkzq%N`6JgJf^Cm#vHN2<5HbpRwlf@+{UF#;XPf=( zFmZK=u>!^!Rag+pRNjHn5B@~**$6%qpHBmS1F#!Fd5jt<>lyfF0%&JS{#t%5@7liY zChpCQnGL3{l;fUwKw&W8}*dX z==*h&bbu>q-~qiPBfz$w&p^JkQlUTfAYA09tq!lZK7{aGYFR5U%)weMln zTuMF53f25*O)lL%h@+?$MU1Gd2twAPFM1i3d~eE!O(@0hV#EN*ev3O$2p%x{XY>p zzLa{}2!2$(^f2%z08axHzt01w&}Y54aP5+#R@XH)Hmrv8b?Iz85+5#NoEl5Y691lP{_AbN`VY5rW8Sy*#PWhu1_``rl0gC>U zz$x_Nk6iXslI8AnN}gX9r4Gtu?R8@^2`*ic?{?`r&nNsgmjaIiMgkPwF~BMG;^%%} zx=Bvu8_puaO-y^!z(t!0SMs87MDf-BQ|kR9#9xW;B=;8J_W&LMDEixgQ`m3%u2aS) z)=B-XWa_(Jy4nkg^v(x92oMJ-x|P5wsC?GB|77)PjcZp`klZWb$D7WxB+f*usT+qF!io>1r>+mIv{Y-unSB1C#?4-IIV*m~Tt_p52RN{m>I# zw_a$)I7YM}vtc+rXdF+snXT1^n6Nnc9{<<_T7>sXKfEQmP+P zsGqhGfY9Q`oApv6-l4!N0pkElFVlci=p+7yh4o7s4xKc4_5?vD5GQJd58t<<;kr$jwa416SD3_$U*1vrJ8Qzaiw zr|nY?;5UEO%0){Tmz7UizG@{l=WzI~-ENB`89vbINQSS>H*mCoQvjcbrd0x$0cAW~ z860X4^A7C?^U0Xl9Zfr==@Uc$DhT_R08HJ`JK8j6&7-||LDs7N?EZ`L3OO z`z3wIk3A}|8*+CsB`V5z@^cuJ%ueV8~M^IUmI<}P`g^fSguUzz7v+D)EO*rXa} z5%1yL;}55Lu-g@w6ZYg-cQTLZ&FSYk!RCSEMw+KyNtMJrc*2I!P=9pZ zZe#k9)|vG1Sp!G>9giIqBZU?)U;VSIhgTE(lgfY(1snuW=|34bh30fAcWHJX@^|J) z%88k^=g~fvugon>+vzFcxmFpB6ibPlN=%ImksbPGZN7{jbn<~wd3Y4~p8)Lu#m85` zDO63A^lJ|3gAe%coZYZy&C*pX=cqCw%0`p%A6-~c9!yr0Uzr~o+V{|O*coADV&pN3 zoz9Q52BOOKkV@^KM>toV%g^UH5Bo@zBAX3RC#dR@?&X>HMPc7(`y8N6E z`~kpI09CH+cGz74THJAN>v1w2+xjY3*dN^O7~BrF)%cQO9J5SZ%aX3g3;Z;39q^^7 zeJ-+Cj1R+h$BS^dx~~kCiVaVYaKsu;aWcIFc)3&QpMq*9#>b$$9y5oA$L7UShFGnW-0J88E%s37{1K~mMSyMFE;}JJ>Y(TN~d>$Q)qPeQ#Ot5BY#g^w{&^^jJg%rYSm3IyV+)V@npMM z$$LWbj}5KER|-R66J8(60F!ZkXr@)e8_WrKmhJcEWLX%SP+_d*w=fQC`UXDN3`uFg zk5}>^|8rtKdKT~nfW-jC|LMRf)W0kF-nP3B{!d+vRuT=@^i_+gHtgVAj4wIs-~+!D z4cGVBY~rV4`3Z-q=#f~ai=~uO*Ks#9Z~#3W`+1ZaICc0Xf9;^J`VAexzXSXmp!hRi zm;Ck7Z>VorR0oUpq=sA+g7|E7U%oO|YPST7Q2@#*&yT?2P%`V+1|c+;feR>H%`6Jh?|6qV4=gV>@Ta~1G2g)0q)75Y7lfLU#VkQiZmmBJjK;>JvSe`IMEkPT*k3EUW za`Xe3c21~3;r8HSia00Q?!f+}v?jkg&NWNM?w-irEuP*}s6JWc`3)LyPz4y!D z$9Y|2rxeziH73n9$TwQmGW*xyec0* z4Ezbe(*Q;HW#Icsm-dpcZPRLa9%te-G<$ zN^Z2mlQCtre5vRYMjDS>MUtPQeG3NC-GnbA4a^i8kc{L<+;j&WHDB~B@IL{z0~8)tpp!O0G|Um8ld=C0(}4Z5R(HvGSb`&Bl&4kAFZIH z^2IyAKLUITP<(j)D*327T&7Fgw0+7aj^nFaz6gDFfT)DWxt?E!{sg%~dK`sSu zWix$9rcJuo!J3WE`XJFQ&#-dseyjlf%shDQMlpRE?gUsrBM*#MsoEIpPU({0TJYmQ zF;s5P0=@xoIY9AyGjIxh&gUffUAl7N?1q!60L7~+SbRW*4IZ1A_9M0nl2<}(IMRcu znd!()bBqC0o-!mKdqAhux3c`%W_2F-Y+`A~!Dg1n8_FFW z2#sQ9i}W$i>{pq6HQ^pRY6s9ooS%6r)xV7?D~Mf7vH6~nl9jJca(7uGQ%yJ>BOGTkpi znyPt#-vNIBunnN{=T6`hYM01#SNqPA(zCG+e!7#VTQl3)=X^WE@#DqY(Xj3{AJAcd zL5HE~=;99MjaUqF(E8fO9NRQ7FHIk6fw7prf@1?!t{j^Y-KJv6XM9IuoKXY34zLKI z`1}Gmh0i{he73p%u9Nsou74U@0wPIEZJl7jerctRoQ&Qld!^YHs$EcV&%R3oouESt}M{rdAXk$303MhwcU`1I$ ze_&c^l#+~B7^k4JxQq^p8kH9dj4HtvEwdh}9Rk?mZW0!ZXHLR*Tl9%HaXy>>iX*8{ zFsC}R*c7YdWq0y@aEtQ;p;Bqs40j*FtoZaOP$a9Z$5^yp(G<*d;u} z@jE)~GlpUdSQI`Uz*xjf1*m~f5II-$%eH^sz3K z#9v)K&4tZfxppbpYr+QSC1Hb;L+(+;B?uQOd(Hc})@GL&sa`VTJO(?sOw>zhR&GIV z5IKNMOD1qEMFxrUp>F=)m6)fW27DgiIDq1FDR2sVTz@}3+7r0xNxczbujWc>aQ)cH zyVq=E+80pZY;xbHd#Et3GOFZWOc8IJ%f~j*QR(>(@DBn104P56_aq-JMKV2i4wLs@ z$|2_PMa?1DsRuW6MC-o;Ei1Sof7=sh=9q zReY@meg@zifa2?F;1ovmmCq9G78yP&#;DKCs)k@iVXui%^(Lnf13-g^;9meU5u~aU z;TuB~SG1?YB|p1CuN3qs-|M?!{{hGXD1L?kr?7UE)Q=YLQ%`GPc(PV8lv%Tr5-t}I z6p6Q$Yj@(PjZFBZj`F!sS1wHbv%JVlG}|=+=Ly`7+$3g>YDY-^nm}LicPsF_0j&VV z-yeWe=%ZgUs{zLm)=xoZYFNF`VXntx?P;&MUVGhHPqU##qEbM7yIuOu`-%GeRNy-S z{{pD~#*h!O1_#)ClI&l!T)#o^^X#+o-X%ZDJ|#{ot(QD?=~^UL``FMdIK_}?Sp&*I z53wLe?jsm-XJNDFX3ymw*6ev--d@wix8HJcdrIDR$cOLC+vA4#?F0GSYfOB5T7J7g z-uB9eO}L4QVTgW+u~IKIMvHsQh`QgWYI~e9@MPF8D~fZ(PRh#hhrGG)6I|#`@#tw* z+S;rTI|_*(gxknLJmUApy%mN7AAU{%PXb%f?%J$~_h;t)=&hc7sWa{s$NVR3)of~q zzvYK~hrUpM#@{iEE^`hwGOlp=l}_pvPT@I@dA1Y#(a!j{UHFr2{>P5*wKKl9`CdEq zYdiL>ZGK~yer9KUYV*(R)KBf$9^3rbF5QH_Psa5Qzrjhp-ih7hm^V84o1CbFUDCV^ z+ex=Lskb@u-T18z&q_7QtWn3C$7Vd`@TZ;Br<~~1PW&mSw9PRisqh>+wLT zy>{V7%RC1Yb{iQlzK~_{kr%LeH`)a^*+Xum-%{5H`N#O_4E%EXysPYjtL^wz_JEC6 z;3P!00&y*$cdlJ48O{$a!x2lVsj(C@HJ)-gOXHE$ zv}h!rRvI~vW$^UWj99vvQJS8S#WSk$d7qWgsh7B7zG=JEDp;xdGhwzG#`3FT=;qcLwz(?ngiL%(JjBy@*2&)*IKQ77( z51y*E&XD!4_EDnVD+WFWFdm@ly~V)S0Mh!&_TX7}y+gaShxS3%duwo{>;$sCR<#;+ zk8a|kd$dqo`_UrUUh{DnJo!ot%sxAoaWFg$2fQo)<&^&5r2Wgu{lOVwrbPni#|i7f zrTi@vj{*6LdxY=vI%(UlymEfX;AH;-zk!e^^&*7udl2sik`Iz!?f{!)8uK`>SP<-qF zPC>07h4XslV@2Kin!3}Lud2gz-LL56D`iRn+pPG#jJ2|lq&<78`0|DP(w`RF_nPk* z+LeARwquD4j*k8P9WPuTR^y~Fvjj)QV(AREuoVhq4~je4_BekCli+$LPJXx3nCZzL zmU%Gr{3bJg&(N{OX=V5(L(6O_XM9gm{||T_U=cvcc?NI_9Vbco@)z_fr8!0L*8sTTKieoz7?WiE`AhS>P$tazR)Mep;&G>1MSN~9GoM%7MQo2EBR{&{d~}; z{O}3z9{@iC6o2Xeko+C(=I8U=^}HTh;6=;f42t+`V}HW5Eo);7Y4Ucj`Dd)exh#vI-`jddBi!l7+#A{z@CJhwZa(6FSGaz zHj>X{pEGnDhO@^Rbq`<1S}t3NZtVjGbVs52c&X1;=&B0eDSg|4?*{x2K&9{3z$w(Y z{njIg|@^4&|N>PNPz9EXI*~;A%cf{b)X2^j}*}ko-*fG|_)O3HVmP z4uDGEZJ!0S_W^@<$aM7wWIwVoXM^CghkQr<$0=AKU$dlc84WU{t@y*g{vM~Um+ z;f*n-E4_l^}XPFuX)IIM)4-&PIjGZ$(xL~J=YoL zCgWRvondb>Y;nc$nn9eH_vb+I>j64>Cy!T}mH!N6oD;0VaiPYSfnZ0#qn>~5@%^kv z&oew29@#7fo5y^6J!No|5r*rT%;~2XldU85yz2sdQ^0#&Ai61V=yieOH~r~8Kh{jm zpvUl}=!I7QybA;TqJa0pK=h)(p%(^l*x;f5?7{uK zF|$k`6X5A%{e#m7nf=Wy&>H2>Pmel3d(4kKLH;*(ufL$xKk;6F_SFIVaQj~#d#A@f zJ7|AKb5b}h`(p!(X;u6XzQVqgd877m>{8~BdhXZRoZt^MuT@0urbof%^G*i)z*;M4 zZe=({Aj+!k%XGg7PS>KoL;c0ROn;+nn>KAt=a?KQW-4j^nyXC(_GOrbhafmwu#0-{rb+0D=XY`51pua z|F?l7BWkGtrMFqYmjc=kminqaRNgy!Sx?8@Kc@ccmp9D9p@555tzBBT7G@Gu4>Ym6 zIn9#{?Yt}{Y*y#j$%OU8cBZ}N3%VXNO7vXgRcwb1SHg2&*a`am$SWSh%Y$i|JceyM zqpU*R$1=@uWSHT#(!UPJz73ar6VClGJj^o+8FrX2n;P12#;Ne&b|T{Q8&5GT$2=nH z!WS@Ei9JfW3^WiLr9RpqYbCx?J@^jr^bYtl0w{gl2>dZX)vu%;!mhu+XB&IXM`}8z zm3=Gi_Xdgn#n>uLb75vN51m8o6(qo! z6{wBE%rryidg1NrBTweX9%qnwk$3RKF-yaC*b{!$W4}z9YKCzHRQVJ$?q&R+jE&YO zIOvCah8t%KmEOuRZ*vVZPSHnOBg`Gl8f0c#=mhC_=9by!wNlUd|4ih&F~Da5jsmFm z<}~0GswTPRv`XH4sMlc?wnj`EHnE4rbX*=~q{HY^Aac`gu05Svg3)r=%5a=4xU9B< zbfAXOKM-N2ucDuDWV_gi;gqgwy~vsfQ9IU2K3@bMs(gG5{5!yp0L5qUE6L}2xBuHm zyD0cnl}cvK)ilR55D*emVqY-r>PRIxz_ge%#4MFfV>Oyac!U;BqtM6hQzT!tpsV<5 z0)7eL3V`BkD{ujYnefzJgj0jTox1n|ED_Pim}^M*Iw^zFSqNoup#oVIcy z?J__GEoL}d*tv!n0X-zU7{{sM5N3|i-N1F692z~xSS5c~$KW3QcUUTD&qpfD`|*L< zo^%rj1^KQ1e~VOhL<}B;VPDJ$I{h3!j2Hsk7xef8JQG!CzW|1+9F>BA1{C^Mr^1&bR-|w4%HUJOU`R}8=%$zj4 z23GcsumKmvyXGn?F|xEg$Fw`sCs1iI2Fa3A1D48ozG5hTmgJ`y^h#ZR9svFqz$XBe zA2Ys%T{d91TGu{8^0l}3`g|S^yIpkJlvQiiu7rt{Y}!5$70;1W=dA9$#0j&-ion@i zG-yYl5hBPn3bZHEskFziWr{uv?oE%~onCTR`Vm{wOKwX)q9wg#b9(L#>ESdxQ{<~c zzJxb3)UWde_*o{2dNvo0SP_ruB?hi$iIt0k3y`1AcIAg`s-9T;9sIL?AJ7^BO8> z0@`_i_&nKu<*wd9$)nYtF7G|$tA)##;-HJ9QrZ0-VXKSLHWWoRlKW1>iWh`?I2>ZJ zs9`l$>&Upc=XjQ`>^mN59^Lahi(vD#W=Vsv$tf$ZUkd+^n9){afQjoCfjAPdu*3T{ z`_jugybq*_+l98c%@WsWFV|hXmmiYG8)4?WSpdxjVhBPZhHPciQVoUfZ>jKR|RSgV{LV{ue*UT>CF7|G!ksZTJkfw@lZ zc?T=%DPAA1_8XXBjo`RY8%7NgYd#raJ5e4s9LLz^WIXJIwmEt*@(kut`WI!zJ$#&V zG&erO0rsBH?JED#4tgl)L0jImy>?zO5)0gg&Y<52qBD-3px>zA{nEzci_b~T;sKoe z6NDf5r%?aK3_oV*g1p!&wx;8Bx#?E%drZHQm*IR!%pb#Gcqpd7^38l3V3y{~_lm6$ zPL`Zf%$i~OaVL6^9 zvt!dLrq&Fr7#b~vk8Vx7hZzlgras-m>T(GkXm}Ur=W>1)KhgXPa~AX4Ifs3~NIH2s z&c9^*?*?yWY`YO%$B!r+RdgdO$s2Hd>9PUCON%0B_=Xqe4LZJj*`WVN+Is+2Rb>C; zcjnG5ufO#6LS7O`US2{H2#`Q1LAnA)iXei55Q{yBJ>Y{7GwYwIqi>?d5&zZS5c?psA`~MG|JLleabLUJuGjrygGo|H)z1FfA&h#kF zwHkOfYk+lKGVOQW!@yN4ux<#5T>TPe)*G8`JJotn_hx%Sm;$8u{?3A_fv<5?15`d! z^t8}lMS4-%wcgBlMnz_x1tCY$UwL*#Rz-HymlJr6M=EkEBGHr->tfy`o?FoaLY};e zXkOlEt?_zi-1|=lpZW^;?Z048?Y|v->fk~6@;!uotmhP;67MShw0cN4e5wnFlEWXm z|FY4m7B6n^{ayHt(yfQm=&037d1=B5SR5>wvmD|AZ1#5IP3qmT4T~2q8wrbqBfP07 z`PHvN119M@b59a$OS(BpMonBsS9xSKRbCe+;82I5x3{Y(Pu^UszVM!UcDIV2Q<3^Y zS;7}?*5yr`N=W_kxq5lGiiXG+zEUsTq@Jnw7VW|2^^eBKhU6+SbNuke!N;2aGDJkj z-osG+uMAieaFFv#7UN~?eCN%V(JjPITeNVPcV~~htn0CH_}&V zm2V*~($Hbj!0biBCC9h#olCPuV7bV(Ir;J2CL!{ zE4J1uoIK8~;_3dusV^Z#`z;1eBi2EvmvylY<>Dl0x!3a=xJRxuN{t{NOITJB4uid& zWd!;4EF*e37GXu;O%VtSd+|x4>K3oj;;qsRUzg{%dX3w>wR-OFp=VH?)&tWY`gYW) zO_6*kt3V7wu5we1bV{!#VEAOZYdu}QbA!jY(Nn93uk&~ztd15stky0N9^NO*$c{2h zlND#nF9>DYK@J;{fNutlX94jcnUzPxxSNGB{X%wnU}f4jBL2Oo_)ZjmuRDL&=658N zw|cElJ=XJH>ni96%YS=F8!E@jw<^4vwph#qNBNLpcLVV(XcJe$_PGZ5?>Rr&+RVLE z`B{7={CRMAKfnoZ!}-IcCWYZ7m(3EVLAnZKwtlpQ^*$qhxRn2!@m&n3cbvuRpqaF? z*Mlr}5+7gkAS=6{@wz@^`V~~I>Q~FFC)Cx?tUkBzJFNeMZ0L(@_?VINM+_QWJ+&b` zXzW>hErZt2(3GL+RWKcDVw0;vt3>pa>V{_+&FDWiu!B;8Ir4b1i|PL|FbTVv+e59t zGH=8a^+$XMd9X4N3zh}W4_AaL!m-fvMsm-jSM=o4q(_DS9nSvCJ)fE8er~*AiE;Wp zEH$1|ky@N`BYnUkp%*?`gn3!ZV~Src)Pn8vx~GA^4%iQH=XJ-hpmrKy@26@$JAIzw zo6%@Da*FQxWdlqvPg#ul6WCYR*;$7sMdR{@M)+9jr0QAFVtsDkVzCzM5Be>brv7L= zYQax{!6st(=ZHt6sG#%oC4-*KAnr47z!9C+Ys~Hii)O*H`B-_KE3ao;u~h2{L%-56 zt}twreqpm=Z8rE-hOrs?i9kbpz4nA7~2Gt6<(GHHIVbM(H^Jh8s zrtu2Uix?k7lj@xoREP{dk$b?7M(Z(A1K|Y(<~0A^|D-DC-6%s>?*uv)8Z5;$I5=-# z&tOZQUO%#)RrlqqMiH!VRxN=Bxw0oxtBGN>a2SGx!;i+zO#8wrg2GcZGf9}Wmchsq zar0A(zDA@UMf$Yfx(oOZfLgty9T?C8tp@art9H<{r;7J?CnxWo&c@}-Fg;%}SsI_o zL64|xV~-2DxpcqUT)Id_W8|~z)Xg<2x?DwXDxE>+MJLLqJ*gj!od#y5rAEX|bK=vT zxX6inIPqsR9Zr1F{R6M|Gs+1Ya>9?(n!#@UnKqElewQKZI2y)%`Sb_jy!9pJ!8jr+ojLhk-yl*My7#Z z@3Q0f*rj*dk;`p8)5y?+Fa*5GjIVa4CIO5d>}f1_pHUpPiah~x(0Ajvd#I!e`y82575ui7fzj{ z_)6Vx=P$G$Gum08b(vtf>$c7_D_+oQysYmsSgUadQT)EO@|* zd}+nNHQ4q8<#cT@X(KiXnrEW67_8BP>mF+L4y6C=TEYK&v; ziy2e^$MWjH1}QDMg~ZMk=+26;$GA(BEPicYn=1c0vxC2%0emxH3xJpt)xq1qDePaZ z`g5}*kM1;2?Y=)#xpy*Or0%?r-LJn#hF$+=GJ<^cgmAF6n+&+;extYoO5`%?Uz6|e%M7z#I&u_DU$6%f-JB}VcW zIZ5*|u$Sx0Nu>NYmERhxqrEKxz7cRAz-@1k|7(2!gWps6?YBg=x7okFy^$V8M|;E6 z+x%MWFcnPqRZk_?*J(S7A6%f8&=cUvQ| zX_g6A6of7Rl#r2J>?!m`?}&*S8AqYU=W@P7jgPe=J)3j86!!#}9h(W_RK5OIm(hJpMqjCi@2I;VX=VRtY!4b`W-a7byW!8mOOt{qPO9KA z>Gp<`On>%3%!Ump^Y3K-By6+?*aS9~*XE`z))(>7`Y>OTks36LSjx!ZgCQoX-}7eAtB#2qpJA0~7LefA5qL;aqI2wz7wOWe@vmAMzF5?DG}rg&sJNICkRD zOJJ^O^+x$U$;6Fht_YFt(Ws&g%=07jKd8gX6aD!VUvY3H<_<%W#!@rh9>ij&7AzX% z%kY6JciY=h?s4G#0RsVUKOO~~!oq+m_ipsGRcSjtcEp^y3(2$*eKrLLv9h{8u=o1W zI3EY?6rfvWiQc5AJ-yxHsmYPn4jo ze)+PM%jPbV`p>OUE7(N}9Lwd^+9k*GH@WtJzZ5zS5lrCAi~-ym97H!+bqkvBZ%mBD_{SG(~aiM-+5W`TYny z=*K(|;L@N4sIIR3)ai`yq+@Q?zPz zSMyXm&2LSyCfkAzK7pZjmn%HAwmgLPl9`U@H2pJhU=Gn9G7CgZuN-JY z)5h*)B+<7l&=#xPUh@+0 zo7GWN>WA$-;g|cAdj<8&y~bgG*9YR%V{p48n?K0^afQ$_tsj zmL;=F__4^$_d+x`%$|UL7shOmR`@!m-3G5-lsvD}z#CJ&FMvIGkyOA;gOV{F#Oi@a zAZo6L%Jw?0=X}77HyGZ0nPCDAn?`Pb!;J4)<`ORos1*KdH?pbY;9A@Cjx$DQp6W$m zc;NELhpc++BJO>T8PBq*$ZX~#43{f;<_$Q|FcWro3$UL(&6ww@AySia@Crm^ShiK^ zxL&Tq;X($ggt~A@D$|8z9I~J$@*=~p$Do^q(7lxa{dJi-71n7@RP9`n4NX09=Vm};%`6n@_}qO=i}MKxo8R)uw>XD zm?h(yW6Q?-px3ZAfN6s&J^qrccyL^Y=?N3$>>6T zyP(#5Q7Csu^T`I8-#m8L&U@*4=Wj{=~R(d ztjFDfgjhK^D_Q@wC)TYPxcfI`^GE;a3+`9clZ0!qIHMLV;sZ|1`Aq}k);HKw=X{I6 zx#=Xlyby!6(>|KBRr{Ep+QFxrfTyMfwJdfF$F_T2L;-9`J8Tdg5k1Vmh*~CPkrV+e| zWyZZ@1guq|R3>?5sXdSL)a(@Xei}HG0GnBe)f9GFGd+_bSX|G*Ks=ef6`KuUOEN?( zEkk6R_62N7U}+|CTJYM;5=zG^HDZ~)e4s5ET+e9ddW*sJnz)`HGRmRT)`^o@ql}UD z#K)=ukFm^Wh@F9lW@n7dH1uiuv4I5kwH^~{G_excgCyY}vns5qxDu0k%n~2!=vM4i zCcf5r3vs2z`~{dGbMIX6q|;K`So#E#gHni=sP^?R+D{bsG|zn(`1gRH0B-x5nxWd4 zD^E;y^np9IuemT*STujp+&L?|?2U2gQr>DLXirYK1-jEe8~=p6kpQN-P>|N)dRw5z zdZ6s#PZrjvHpaJ96f*b-&qH4>@{aaUUrvMeTNQdUhZrWt3I@jd$>Le*B)gamu#-bMg~>*(kvs?%#*xt*xla<79d5w@_;?Ksty7pGE2-AYF+_R!( zMTC#S&RZ5MhG*a`GI*tbB&nE5jc_VuzhO+NeAe?j3pn%COypNgUID4whn{!9batW+jKu1wEvfk@#c_6FpfE z!Vq@!RdntJ9Z}p<`HAeHmIH_aTsr3gr_i%&*aJA@#LprPo$N zT5LZXUkdI15DMEHfX_NQq*;x9WYiYKv?>iNw{clUPuU%yyfGlxu(G1E_}$K+e8kQp zC4rN9iC%BkI8_ntuk!aW=y&_W$G{H)^qh|T^#)GCpQGv_;@ErqhWvG^hq`wegcm&k zLBI$=*)Yl?&gl3!q$(sE^FnjG`CxJ= zgHTtk(%FaaxaH-K1ho(#1wet;PDk(`|iPx+8%UJ;hN_)CnS69<2It z5DT&!aAb#4<_Fh^Bu^~yj+K+XD8wnnJjt2#_3Dk~TZWMqn<=NkRNox}Hzg*c$wwgy z=s`vfRc;edqdkEyYOnve*f$5b<+K|(g=WXzLtFCO%PFxTz||fU zw8+)o?OqvW$ZJGiCnh}Un}Dl#V)Dt+3D3uov%a5=7em^?lwp{}V0%t@VL0x?9u;;= zc%}}OPa3e~_B1Ryk3Xd#tddeNF*>DqtDFE%%3jQ|QWnf31BgbvbJtFRwLf z?)treJ29G0kpu$=P{Of{+b{#6O0d5UZwBz=L$E1m_%gw(wZJDX-#M#z&HFszUVd?kV$=Af#c;NoP~LpiHK z`=6xpwGVVhK{xRgU$3B+4=4h-`I-To!V&8YzBoE zsqTf(I-R7fn_3TKTu5?UU9_8AGjKr$3>=5Lca;l5UkQG5I5Uk;kk`tHKsfzB| zpeu^nETbnRmYDU%czsnVE~2yIsZK@{lqd;li#N^)a19`NpCv7?bBdJV|OZ{xt3 z{XE~SHKVhP*`%i)^~md(C|T6b7bEz)*p#9&Z#+@e%X*YU6!+9V9s}N^B&f{+xcfO* z#e>?XfVw0lA58s1#SahNK%ePW-+7K>JMHLGlOD+kWeY;>2=!giY^)D#GFY>*L|$)X zGP+wu*K&FHClxJ}HwSbXtyOQ_prV)58$YNBhWGTv`I`(X$ak4%i1%1e#CtXOguQ>T zJn7zvzPP{IR}AZC75~*Ek!t@XOd|RIJD~dOwLHn*XN2}4l&YjQu|0$by=kfbowl?m z_!sO0P1`5>nWEK>?6S!a3|p7sUf8`c;1bHf`7|@R*h&@&cU$lV=S}q{Vbp*=qFIni zHdB4=Iq13}-p?GHJ~p)nw0N;Z$F7H8&kj%KL%abPB7}t4VWw|4J>kkg+65xMR#aao ziudbjU+eL2_3Cf*;Pi7$+TVHnEnfX5uYLvWu*OJ%F+tknJl@Kyckz5!exzh!%OR*6Mh?tl zpJHFw{%>sSTWP%z__saGOv7AqB%e>852V9~^DrYuGo^9j&py~z@bh?-od*Vb23*eM zS_{16`KdfRupnHQQkXuGS7rRjvJ0|m;6kD@d_r0d;z_V)7}nzf#-T?sJg=%?BCpM> zD>#WHRL})b#sdL%j9qSB$i1na`z(L9ZzA;4s)NN+FReOU9QvyV&S0vOtCL21Q#_T> zi>*%0PpN{n$``QZg&%d)DZ=a}s@<W3JFxv2@)o(Xv3^G!_tU>yQa|HZi7)czvMu*Z@I zf$U6g*x!@;Qs>*4jX?HE3bQ7*(cpQ{PBZWiD2H~V1W%eLEhEj-gY{v%9Zxb)zbmEy%aaH(vq%Ip6@m@`l@-TrR(&6WAiDW~14S%*-~Hib+hm)4z>lCWH;| zA~u5>#!4su$eWx0mw=yC9@PE=aP$9NWl(GGgSO%5Nk{Hcd~o)8D(*CH{#yRK*q88v zrr@*wLjl$l+-k~bqma?|fQ;^AGAfhTsq)&S9(}AQ{E{c}-^pvOys9Va`XQH(rpW8X zDw*%qR|d&v>beb&sLa2kGH(&^fE5KyVMAesn!_LA;FJ}8!l#lGSGGk#zpC_(x9_yc%b$h*IDUq8Rsm-iV9{>VZ<&~=P_q1gYZkl(HL zf5+Jkv@JZHe`B&Ogte*LyLEklsAj{kka^9RDfM@A$a$z;3SM~wtktcGWNHW}!sD0) zKU!qtFx?KPR%18AV<+vfBlp?S`|ZfRc8xc!pY?zTmK%TYWbW|bc#G|xv35^?E>8+V ziNh`sxo`pNTWukq7~VHX*>rNDf3w~1VcYwVomUWCXNNAb>6%hn7T9I? zdD;#zfP(wM-S;0nhsaujk^CED}KPL__tO4G0d#U+N>svSbZ&a1S)@o12&ox zyOty6n>CN#x!l6Z70e2BYE&~otswEqfc(2M{(|>B1+b9)p_6X-~k@^#x!5&><6yj zt-~!=bua=sMg;s)h3J)vpDpa$!OyM-elOrzfXmPFtAg55fSNBIKHi|_cP-uN%XZJt zy4ZhkSalpQrB%mG23d9dVmuGhFc43KeF{fB+KyQtGy4f$yM`33Vb$RkzSo#P;IHTC z88GAcm#KeY8vlYI0@J3?P3udOe`Ok9;vQxkUzxElO=ZS0cQ0(H4mSibXc-5q4%qu# z#K5#1iw?*a93zk6BzZ+{bbxL;7K0J!CM2k=(_ z2fk6|H_!1?+4|edkLJgT`o{Z=kM#EpwhzkdGTN^0%H+*o)H8LHCm#jh!<7CP<00MQ zp##C1&tso3Fwc6vmF#J~+U|Bu_B=Zrad?zh>9T*~iGS{?_{>xNG3m0mSdq=HF8lQz zy6m@G#vP=~{*c2>qPglL95TAT@U&OyKKDgGBt?dQ(SFfHv5t4I<33v-k$Or>WqNhe z2C41-&|%u{TZL4e4&S2cA=ba69iIgJY{2;dcfR&};1u4jQ1!6mVio^}@tE|zJBb&t zLcz&M&>`cjNiUYyJQt_6#dAVyftCTOx#wYxMtUT@;jO0@mdb??8b{4oD4Hw%k*(um z3S>QZB=|qLRpmz;(9y2?0G|k03UJ%i>&(Vv>nUQ)Cc6S2H`nmuXe?=mx6&63B> z8u0!aI9A|R^l7tQf&FFEehH_`(EuYA*!P(BD<=QD8GXYNECn%mtCG|FjNdqaVN0p9x^iEZ7HPu*)qMm8Jx&ru}fZYJM+{V;k4-XJc zSLL;mZJ=hMt?kY~efRv#v11wm<%AXF##yahY1!IheJmtn`@OPSYv%H9n7r;~GP*@Q zdl+}rD{l~B|6_bn*p-fH9Gv7Y@QwDr>6OneVE%#HI^Q7Zz{2$<=CdQkM1C$!6~6IS zeCr+ajW_z0cZ9!(S^a~Tj8&7GeFd9*qu2Q2e1r(`qs&q$KlHXoVTlH>Z_KqAY3DTgjFduK?gzkz7USlbn6}I!`D-TD zuF8%Qn;>WNIi5$kzXm3eeZS%ysQwBEq7MN21KfVR1UQ9O=X{qV?BBPq z9~?OYocbo5nS=VusN6@=v}RU8y>>ICo4&sAIG=)*x(BQ7AWXZ$$-#js*#Aq%v@XQb z)1cC00UU=oHZ%@7ynu`KOpdKh52$=R3_4wVzb}C6gMyk3aPu)0IE5{H z6(8F8)^FxV3EJP|md+=63HH4nG3Acef4Gb++W7hf-qy6g;eet%Z<)V0hCw);1kcap zH?#DlKse|PWI^+#n$Hubi;|F)o@u0G_lxUe^-(NJ|57X*My2Z>!F`!Q>24fq?NGg# zMoKU_XcAFOoG=BoAUtY(NacGg^5xdwyTIQEeB|Vn`e4jZ`E>Wm6ZkKk_t3xcyyo1~yXOiF$$TWFAlW10LnjZ(>pR^rtVz_Y zTA7#$RZ!SG{e@AFg6?%s2A}`%F{Dq1^Jje333ZREdZ-)RQ4gztHvu*R-1680{8qrq zfGP*~+|(V1uhV~}Ji4ovl)99##Xa@^@*zR(Xux!UOZSby{|MN7NYSmGr{bpnU5{>iQvAA0 zMeg9O#&+6xJYQZ{C^IM`bQEa^Y? zT%Ha0XUCyqq+yUhg?Wuaqh3!T$d=0$UxXGeRGs7bb&RZms$rFm1>)I!AJ``uPF@Ws zn{Yy$sXrw|ie3)~o8x5Z;L@t4ja9LMr`V+;~!+&!z?x?B`qw1@QPw{dy*wGpp_jl;=RB>1$+l^>C71x)OrINoqkwfuj;Yxa5|UF>pywy@OD!7 zv480p_xG{X_t16@8VfJxL)Y{FaP1{nZr9C9NilhnB6_}seeYbBXP$r&svn~RyyTcR z6#D3=VI*9Dqc^x5p>QxBFV*o4t^O%Re-mh{N1mu1?gIV+06IqP^dANML_m$hPnwQZ z^zS@;9IA#1~w?_7{LtJKaoV;G7ZtkNg&pviO*;5`g z&NY(Ezi|WV)Bt~=3M_p>@c2M}@JgD4@PkQEary@~_{b9fakM?NQaHDvqT2ZTTGv;)u>b@Fi|@a=$| z0CybU4V=Oe_Q#}yD$qS*750h7jg%9QF_?Em0Ywssim*LHzd3i4Ywlz>0W@!FqhSap9rM_Z#0`q;|+z{-Sv3z=gX z5E&%#(O+TPE9pz~D2UT)0~vj><%>ylGMKDw_dQp3^=y$p30p0AAp!q)-;sVkdrXBqtA0TS6n{Vp@)(gEb`$7@luh)L9 z*Efk;xZeFyFZw}`|E$;kq}TsbuYF(7+pG5r919oB6#=7np;g9G!q`K9i;~=9&cc)+ zUSbrD*QegD$FJ9GuhZ)f@Y;X#ybsZraVW#HB<~`10o^)Tjw#GK0c`}jNavE;4s=s4 z<*?|V#Lt1ll43ps9!`oO^lBiX*nB=La60VdP8S)T0#jk9hL#)KSi$oAMLp}2)T810 zFxm?o1iw4Y3?tEprWrNv;&z!;YxlDr5oWfCdun0(7x&ddZdHU`mRcz8#zVE?ywIf_ z!&WRgn$*IRF*ix6O~o&1wdr|j=g8KF%bTiS?L`}P`D^kh>=^(?1KfVK9yo;?4b^_f z?@|2Wf3@EuP1c(AGdAh0S-(n`QG>kh5i&YnUXPR4s!bTA4;s(;w6~!a8sL*yDppKh z`!uY9`ofjYu{z{J)}&NaoY{cw)IR1slx{j7CZ@t!?j&PU*h&fN86l}YkCNZW@Mp02 zKHEGR{$r?GUgEq;nPjxRtIA_P@>_@e(s&ae4P9zL(wL5Z&BsCx2iW+bDu=o`s$4R= z+h^^jUpwW}%^*a(t>2k)Z!}L{r^&0cYx;rOHO0Xrw0Ww2TCZ+K%SXKryY5s!f3LP( z)$d!?vndHLt8b|%g`2?Y4jPYJ=*|^^p22tFJ|J`e5(91kL&(i%-c!wivvK~>`e!wBH4KGh# zJAwt%H%!lkTWP;vM3Z6HYMQmdn6LOQGk%*{ajV($X4A-{=Y!22a0I7+XN0~t{F}`9 zm1e~iW?r)?J&JiIyu*fmK#I$v5y<^hmDGdjJ(^7@<9L1 zMtr?daj}uN#wed}jgzJemRzh|ZwT-(c#pb-@zMM!qXCmrOgdMx1}q*L_-o8O7Vg?& zIC_1azKbCzy+RF8uxfzzUm=Y=k6RcHEAZ|=m`K+B@B>m|Lih}h6ZcejrR-TRmg4K4 zK0nw%1w3tE&fx{5BHS;uOUG_&MRH!!TveJqM(d<8!A1xa6fFA2@81*cL zcmzxXdDbO*EjUHJE=%#$BC^VXA4G!RV6C`HL*KQb4t0!E?Q z>aj%F%rGazWGpl-8TCi}174)Cg1~Aa#Hz>`@FPfO*aHUE3o%&iUrlO~apPn&&lo~H zl*0aRRk_z6-BIqR0ACI`6X5dQKLMvu`M%;aZO0wPcN^U)>VEdH@ikebSY&u|zE$$;qqx4moveha|w$Wy}3c?~Vy%qN%6?}MdD z!bl=d&4LTj33FDgY`{c)?(&9}BvxsL>ft6jrlD*T7J>(i{~FrD0oYr{LF};qn=uXt zR!=+)dJH+om47|(g4{2x1I`sQ*h7abJy<)xoSi{`yv}D zb@f=3=V4KPz_^TQm$RPyWLkB{Fu9j2ar#c zUhpf`E*cl8_{O_b|LmN;Je?D^T06~K$l*P_+Y=E3jvfC8HfjyuW@vY^0sT9cnIUgV zN*HT5GRO=~!Etwjj-ASeqnM+xN!Oc?hY@FA-Y-k<(ZX_JvKQfI*nqj3Wo02hgZOxK znQ{CA&gZaqnMkAE{Q;P&4Wu=yh13xC|Dy6a9eId4`8*4FGvI1~TfX-Jr?B_e?SxRi z!= zsD%$Y^^f#jJ%i+lu+0SI0$ln^fm5h)kJIN+xM764qjAEMt8rZ|3zyP^9uxTzzmyK;k8{x`@~VO;PZ zhvc6;ShBe!Pv)~sKU5%UNIg6VV;_%%0w*p>m1{A%!K~EFt zp?doW_;-K<0GD2SlA?EdjiR%g{+vi{`Q%kgNRZIP&Lkgye_}YG;DFJ_wa@i@6xaf| zf#}PpP+`s#^=tvJqT;5|7*zC3M|ul!PxLGYz6NkHz@_I+;1r@cs{Ne%`C;Yf(gRWy zpKs<*c;#@Js)ox$5dG45w@$Iqq`+jhaHj;+S0-boG8}OYA16vP?98CN>v%d=U?B=6 zm_bT<*9W;+ilr2k2w8vVsR0|#8!miNQ6y%Pp*~&Fw-4#N^yyPDt^%?EE`6oIDg0LYR>;kgBha_+x6!vF zQ_;5`>9-(#D!-?JzXkXN;PM+bHK+vu;V)JDaOHSShtIn@mE($r#W+(y&CY2jwOyz; zeDQ*1%NMO&D4TZ+`$n zUNMlCFE|@$Ii}mAsK}uy7H5@^?2VwZq|ltL^0yGQKa6|I-}S&>0(=f|^Ec)AptcGS z%~Jhf-$g2)8$BE3cM|w%r~EBcvdWGOI(FSM>&Ut?HRcEBpO-{aaAqk1Xf?U&FYU&4Cs37+&UH~4fo`yU7a#fv=9%8f^P;4$vsY*bxk1U4JRcfu`d zGcz}`f!SQDM4lm9tpA43s&P$DI7>M-s zT+RJSzGpc6cvWGhTO0tvGPFgV_D^MtCsh7o8rnY~3*ff@mB1;u_8;52vzuR`oSr)S zya_&nTKGma^E{Pio=s+pr8QP#a+v`>?ziLcZ-w(m(OuJdJ~lHksTXM&da^{Jzuc#U ze9AdM29zBJ<>7!1^4dZFXtk!CCb815CpdnmY%y72M(lPfJ4{)kN|mLHZcd zP)N&?C$RAZFG;yL%1M-A3pc8N3wQXew^rX z{Q5_XV>pH6XgVMnCzRwsX`o2-7}x>TiJ{hB=AA@dxYI}?+T2&=Upuj*zw`xu6krU%Z6`B;F9ht*SM6kB zKNZ&>KJLWga6Y|~lnF}8htHkc(1^8tLNO_kC{3ndCZ-RmtUjw`Wpg?)}^w;$u zRxVo7uxyn&fVx~BLybR4*VdTn+76a3zko|Wl}_eN=#}7>`qMz*g8_8_3Y1Q&Q03B% zzD1{Wrl>^mMmV`Q2!!k&~ zNk*TklZ>h*llY3uXfq-&%HgCv`ouQ&Eays=h6910h8NPF z*tjhY8A(;4LVlbc5CthEFhwzhf1_dCB!X~-|BkTe%vX4*n1Q7s`LTySRu#O$_7%M# zZ#)t0a3Or)jy0wHY!L4WQwI2g!$7r;+b2P<7UxECI|tSs{j6sAPRB7DBxq_JsM^o$ zlREYtP6vJtpb6menHzyqsJB!*iXQH#hsu|VvW-6ui)0^)?Gw0OMc?m}F!6UKg2PGj zbSs_jj2L0|AVtTgNT(V1avpFp{GkA%0GEz|z$uJ%=IK#Q)q6svj>n0-)B9Hr#D-@5 zoJI0H9*l8ZYB7GpWHj;+jK9{HUkUAFGQt9Vg}lV9K&gxp-!k7Q>fTGlbPh-V`;<;* z+h9dsGtzHC`b6JW;3>0%+C>1jT`ryjn|MIYEsCzP&o&UbTI=Eau3czsF25vcQ#orc z#~ukqmv9-~rOW6+b@#Z6u2Ip;>dlu$;vclC-nUzMjS1IUeF|jIdESAd7{YJ(9fr&ahZm19a?O9@m_QstAJF?{_JK&-lRWJz zF>td8nvZaM1kCJ4V=^)Xj za2KaXFEI1Z+yYW*kM4{pmQPnNDr0=-eK67@rTPp?=Wo46eQOqZPZiCQ{G{z1#C)^KfOHd z9hP2@W+lrVBWkb5tM=Y>O2<6yM&P>ue*?Jf-JFZL8=x^&@dej^&+NnXcW|u3iiY~- zi_U;9ANnR(MMg6m{%#^K7AxiTPwJ*#-c)SDB5#ceKUZ-WLFB_=kK#!3soDdu(k4nSIkxLueX-TOpfob-)#z^fI8(Jyl z*i5ptCMVt1&UY!@+koEKVf57=ZrQf#!zODg70B-ujfy?0dTk1CbE-80!Z`=(%8+bcG(GyiYtVepYks#62 z0(=MHj{ujRJ-{hM|EbzT+t9<>h1`#6PYwRuzJ&WM$QU!eM%^DU?$otr)&~tdObbyy z1Ja9tfn6l!>Uy%E{iCya5p5nJw9Qm>Mdx?4kKw?_0>%Sex{h~#k2>YlGjteTo##pI z1g6v*iGts|lT?12oo`Y*xE1&x0c`*`zcUv)?Z7GTZuaGH zR0ZuWLU!AOWVid1>AKE5->cd0vX708A@gzOUG{^K`J++p8DnfPJ_17!@3P|uLBKij z|M2gq3V)^bZg3bM)}jx4Gr5-c>z!Gi!7|=T&b~#@W-0Fk(<-tn4VL|X`8N&iuZDjI z#eyJvOo!XVZ2qipCUYpKwo_F(J&bb5#66YM>%iXyybo~8=|kWY#yaiMZJ(X^N5Z;o z-aMMnrPPfcX4i!@yHOL3*zv=<*;x?Pou<;QT-1^7MBvi^GXQS7vw;5}(sj=S{?&wc zIO(?FyEZ;d`F$LCE8r<7Eoy&tzrNm!#XC+x8ozArX~<`iW+!Qa=IL$D_q9_yzMluY z0MH9S;s5acsY@4kPGP_E{e}3JTVHE|UjeuZ;FjC9z$qNDzG$7bvZQ?S%H@leE|AqV z3Omo%FpH|}3{9MY{a6gURAr5eRekNlcinXV1Kd6>sQCbHxCRT$18Mv$AVjZ0L%_u~6*`iFpf7vn4dfSZ0Ya0=lr?M9{FaQgpBJ!AH9 zIDNU#$zUpXFiilUh7Zx58a*^Ex>V7z5b3ydYyy58;9h_`&)W(7QGi?Tt)}9m(eC6d zhZRFfyZizg<`+T39Bx0Y?aWJZ413%cM%}-RT1||5#jbnVuGO@&(Kw>SUXEk9lVQI@ zr@f>@P8D90FIwF&Z{ji>TRVKzaMBD; zNo+I&VSw%K%-1!l^utR#((ea+7+?gzO@9n<3RAk+M|Ib3x=DQkPDU;`7L5jqA_AZ- z6RDE9w>jxIkN48Cj5+q;Waf4a)Iy{seMBH(=h{Q+*e z1A$ZcE&Zias$-Gk80GkK#U2&5u zAMOrfBh?_bR1-_l+T|ctzg*>WKfdRt=WE1%2p|LCrk4%;x2D%Icy*JY{0iE&lkP%% zw+_$byaxC^fcpS$x;ubVxavs#tBa-3k+sPK;h}Jn3qEj)CQgA(jF2OF-DXybq}0GFO)fK%Aw$fMkT)~UZAM$ZwngCYIBR!M&?xCd(?2K5G71VB4kOe3}= zLwKd4uLbGX;R%)3Uf>@Az6WqT(*cKodzZuBEK~6#cYWN{-9E;z(K)#r%eRcW#TZj# z!@PB%aM-6t{1YSksS)|aDAvTVf_Q$kAd+9KX(I&8tguHF)wE&6Rk6~=Q^=>z^$vC`bYZix*}}_<~x8QfJ3S$ z3iw@sdjW3x+ksPvI{I(_BYhBoaXC@a-!UWy!ZoS`#(p-epN!s`h;3umz1W1(MpI{u zVT%g53bP%$nvtekFFS!h4rm3qtKvs8Vo$M@ZQ{~q`QfIkA<^dAQPztdm5qEF}c zc=$}UPPN7+CtdA~j&>LUUIC~Axan2{r*On}h$*U*uG0?NaNNuuavo~!;odfy^IVB` z2+(eK+F|q@mG35e-yQGo0Ddpvet?_)AAnQn+77#)@2p<7{5Q>ZaDJGRzIJ9u`USvy z1Ns2m^!o#+@LT3Pho%0jvmH#>&vo*T?^ojc#0M?`eih(4fSdlUz$tw1$OE5t>@F8C zTTni+;Y@V;jJk8cu=@>zINW@dX}^n+D@shm%ixwKTM7H{_u=zYdi(J`x4b>8G5!Ox z0B(Avz$x6=MK6`oi^az;Td;t(IVU%)Ja*N}##K_zP`484_Z;R!`j0YgJ?sL*5a;CJ zSkN>$sh5=0^Zw2fzRjUyHPUhESOa`BU<<&dV;67=jZtTObL5~z$D)m2wC&|Fz~5{8jzL*YyARUe)tn)3^Dw zC)refD^BKy9zkU*i;PPh4@HxJ|BpD`DANokCq=?M8R~8+JP#fPp>R?RJVRU?oP@#=|UXYEV}AN{0>XTy~-;XV`tKG>)@R?GF3l2 zQ1)(rc^3FPfPVtqb`v>AwVQpfs&@0e6L+qc_Qs1%#T$g=RC{$9m4jiS@L#gEZTwiX z2(A-*^Ne&Gs_fU2y!G1pFGn^#C`$ zn}JjK4e2dj+9|~~dSZ%on^pck#rLB49;NqR;Nm>k3j^Hra)DDga(biZtdx7vDUC~( zQ7K;vey1y4cPiojFy`}8u~LTB*^F&Y`U~-Wx1N6o{9?dHfSdkS;1rHr&oX_gX9#yM zAf4Q`=IuJETl%Cq;h0=_*wo2asMAPpCXXzYA*VfE<8JPX%xazo9&w z@^3GZmLru&_-d8@YJ5M6?^F7h0lyY-Bfw362XG2Iob^{(scQdS+WnlRi{?^s>|l38 z`a?bU1*UCFD33zOIL1?=y$}4}p+h^rqh8X1M*+P6E*-;xQ`lOm(mw(n zvR+!*vuu|n1WF2jZYQL}WT~B?6FU*qc8w~RW}*S3SH-?o$CSR z02>*XgiiCdCTw~iVZK&(y`m$wrh|?u;DZ1|0WKZ&z$tW{rxP7=bfQ+!c#0eq&eL8H z9Za)Y?Ya$u$__?|RwunJ_+AX(qx!!C_%^^F0B(9O0+;D^kwdnp=ZuDDNG3^bE+I*m zNmA0N`ibq@LTJx7IPL$!j`Vv1?+xe+aMPa%{MXV?~fh8HXEv%(R=~60KvHa1AI66?>eH ziA@4~)U=xv9nrNN_1+tJHDEBnrK27=h1ER|=Z}&OmkZtN@aLDnpA!h_0Y2pL=S~E) zIqA1J-=}tP5AZ(&o(H(;?{$9Hy6n?aJ8(Bb8+$+~b1B0mV;Kao^L{ZV{Kv@r#R&fg zeND`3W)n8C%w`rQjR|ZH+)B%*)|;LDU(}KR8sJ9(#sJ*(j{#1hYr9|Cu(D#+^2Jy) z$^DuRsR&N6e+W)ieA+q_x*3B3upw;38CPmxYPrR!e|*>Fe-8kE9Pk9dP4@-h6uR=? z!_w`Lexx)`MiC_8#3*bAYhw$bd}xt(ZHfu|bx7`yLS{ z$E&~&)|s0bmMn?`okVqBDNb;TU#q*-$^XS2>DK^13NQxXrau|@k5FEUG#6= z{I6KJY}Mj|F!hHcw~PkF2rVHMu9ByLuDp>G}R z!~5n49Ik4b9&;eKQ(>%u<9%(PC2T(oXfup}FF!3L3jvqr+f}*MukV;oEdag@uma$g z+xfsL)cF*@aOIjV-N&tJSbo;jr46$BXv}D0Gtaj{{FzYsR8=;LPInk6s%4`M-=WfN z!*^@&U1~4dCE(S7YJj_LAHM}OD%~AFtN54j21$>b{;Kw*-6xAyENsBg?cT0h zDsOq-4t_Db|H7l!2TVp^s^}3cd-3pfT}H#?b@X;DDpCF+?OQ$o4x&rAS46Ml!RvYO zI-b6hdmrQ?({m%QHldyISj8(eJT#@!Te<$?Ps&J`~> zPx1+So_ldkIrTdH=Dmg+n<>T-!`pdK1h0ZD)9KVCdVjoxW+uVA;^Szgv5*(50T+c9) zg9Z=7{+#Q1M$t)q>SFTXaXNfF%Syp%##xXe&~o?!U7XB6WTf2qFf-OL`*)tb-2XBo zLCy8B3}8W#t|M9DF@|tqnlKtMJ!`nP9A^ZOBQqR8pnHX3oodz@26iGYWALntGj|#E zk=ZsKPQO#&x+*u=i^Y66$%Mj=dsVy9F74>&X}}|N4{+OS8E^`}#%E-EZSQ6&v&TZG zXq`D%yV99%^ihpfGFtjhbel?dHNG3eJ+;^Mz;6cJ4sg@`5;%p8S*o2zoOQR`4BI;h z9Q(g)93sd5%9(%RA+VBl=ATXNPEm#>2B{!tz?G_n!&~#=Ga$_#C}L1Z&cxJ1H!K+0 zCPT!L%}YYbP=~EZ!zx-mdadv$2Ce9S{5j zz$^d-D(P*8qTd~#UHW73snDKV1pksH<%BJrvxGKKGC+EU_92e+PL`k0nw)f6@XaV5 zQF;9Z_!EF<64IIZD||39o%%T|R-6ev3ZxT7I#KN_q?4o4X>rmCU)GVIGT?&&!vSu+ z90#1j{+#aXB{98rJ(Y}BHfpcm4(U<89|itbz+QmM*R;!_&jRSW4;Xz&(dU-;f`*kVa4>`_J_J)105Xs;G2CvaWIOZXIu^HcBj=aQ-TyBoGYs{Jwkoy!9XY(f+ zkqd41I2#G;$5xE14=B2)gQl?#-3x%9184%c<#-2h3N_BUzUw$3U1m^&n0*_AqRB8o z1t188lXd2kTzeKrV0BDp$<;s*XU|*wcv0)A#3}L8DaKg-PjC-4rtVa9?MJ#Xhpt1w z3pe2&;L%fX1^RGfJty9G3fz>8fzL`9bVc#bF%X$P$gEsmU?-Ew_x^{R zc0hDGbUy+7Rlpknm+sGiQ`ldp=xuWR9lG@|>2{7#nmTD5m23-qEK8?$E7Wx47o72A zsZ#9$hVVHP`9$DAn3h58oDFe7CEcsg_=uuwY;(tWKMnXzfPVtq_Id6V@aq70>}^HY z{`XY8vCFtCmAI)~_oF1fCgar?3>o#4*HU@CK$p>a^}>b9l6AX!_@sI`_-k46m*~&& zy4`%~b3C}4r^u`M92dL!W#T!0%x<3i9QW?#sq&@U@u+?`-@xQAkMZZYwHqI~&8mh8 zEVlz@4y5Whnw>@bCz!Pbb-AX!&>u9+%0NjlZkCAhc{s5-JzT)SZd1zi6^2oA%n-gX zT;h$Vmej#gEggTGJA{u6JZHsUuxg*T^4_-kqg1orv*I6GwI5h{`>dQo!>sr9vZ^3t zPSaC+9Fw1^k7P#${8wA?%dOhWti1h}HN?uc#-IwOk!X22B+~3(OkB+LdlA&_orX?kT7Kuk4t2tp&al@Cd-I zf3_L2WPtcc)%)xZRICkE`z3Dsl=VM+)yjoroDCg*_c@IX9eg|SscI~Dt5(vaYJY@m zAKO*KP&ev2N;QkCecJtYH5iADIheiah*Q+W__dwPdssEq~qvn>IbvL}__OQ`c|RYs=*CYjHzdt6FxKue{IkfxCH;_N`rg z1q)uqf=5@v*?JwE5_#ZzAeK51J5j@V3Y?!t&CxVg!1uPV#;PkdlD}l1*ztY#nD^}B zC#```lR2|)rAgz=2Co_C-xgUjP1sxfbS!vmd?F`}3a zWJRjHv^}c4cAzX`ctqpjZs2bM-UYaPP`g_3!LH{%yDbOf^Q7@)GqAFL&dP;~4Zf_{ z;G@p6jE)NTC_Y#Wo}CSAnH)?iv#lajUI7gUO%sBuF?s*$=->k_S2th7XJt*us4tJYe77Ol0`_5VFHck;p`Xwd$L z&-dN)l5pqDnf=U}b55);ko>6?GnXgOP~PS z8z{3xe-*TRftbP&Ou}b`Usim*hkP|(d^>z904adxYY1pcCt9z`-R$_9rM1hdTDht? z7q)E+X3)yvGiL1Z)flzh#QQLZXiSJbX`E#KFXxCYTjP<;@S?=$015Lpmj z`UYTK95M@ip+E=@^T5_l+_#nsh2JT@qBq9*8VtG|hyl7^J`4H{AUZ_L3=Q-G||@gSy*i>^|Y_6X)M2PTMDbA?_2NeXz`KNGik8OCnI}1yb@GhF zEw~)q$h6EnGXgpjp;oPXe4ZAcXBZ0I8`nFZ;(QeAhV{ww%)$+`AT8)Vqu2}QLn#u) zMbB*lAJTUi)kEoPNM;aRdnvhyYUU_ZmHxtGmYFNCu`Hn}a5B~e3(3C1T@oF2`Kj0$ z=Vuw{^}t3z^K(6DN_+Y%K7{KJCV?NAauPpH>|fY1U|qdY?HjH!jROfB!5fs1ZImo2 zM~s=g*y>K-WvYK&$>}}htNYoPpv{}$XARJN<$|V^c#e?3*SIRWiW{jIJ%hHn3yo(G z3$E=l9O?#A%S_PMc#IY|{}p(@uBY=sUj|$W==^U1P3bD1l1pMgm+M!#*(SNvUCMC& zdbtg?`Wui(F&CI!Eg+S5rUpC_qjDeFShl|5mLKoe`F{!8e>41_0y_U`pee0*Rpp=h zd-c@im+KRqKOFP?OS$R_J|(Bj`yAsv|2RHa4C2L38qcutL>TEj?6LFhB!mO%;ZhOb zr);n_s&7a)v!X8ftNsgPd?7pVzzoC3QWnty)*R`m8Ecy>P`PjR8gB;%i%wy$Gl6#&VUdE7D9i2{$_PKm>{2m6JkQK(Grvn|AlVGq zrF^z&6~iJXSMEE{7R?N|>6)2|KOSZsU~IZp@Rz=?%25YCwSNC{&{qOiyS!6f&bL(k zwWBwo^~QRk*MOE&_*NySeXd=Zw&&1t za_24C?Wo7aW?^(5B1h++;$RydnW@_&AT!Ss1858!0Ec?LsPDPyAF7-&(6jjHg7 z$9Oe}#VXjOP>o%M*O|*xy(z%}hV9Py7h;|8F9%Vzy=aL5T&`uoiYe91M4Zw*Gp}oJ zSR!T8P}&qvb`}iML;E>%eM+Nr4yf%$n~BcSt5`z zjjXecTSL@4z7F~W;446n1Kk^7#|bpMdP8j=-u%c3lK-ZUf2iD|3qMo@dVV}1Sci-w%u0+7MS_<9LylFh8P?T>40pilqYF5iz{&kIX zrn?Tvb`iw+?&bDXrg2#~UZnmAS2f5UYUU*6gmC~t?vaM_Uto_yoHu@=_;T)ykCz3Y z`v83b&DT)SlumSR<+j6VP!Hm^<(TRk<$@+scLq!zF1I%tyP+VepvG7LLwt`>`fs=W z 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

    pjY$f5V&sQ!=M!APQs_{zZDp+4nUy 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 z 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

    $^8-N_VA7`^<62Z;|CK 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≺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ಬ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Ó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

    GaNS*6~DKKpU5A!rZ`v+p&!H4da9Ys>09cX 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�Zsj8ApXl|ruj7hI9uUu` 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 z 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Π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%0D5)Dr$l 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%0D{fGAN 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 c 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

    =Fd4l6D3TXrx zNXYL4<8%p`vuTPGZ#7ApkbU@HL15wGf6H)DkgT6`xHpBsM$`s3JQ5(m4XZXgi`h5z z;$#^Pm))i2^r-qTp`9ezglZ__^bXi=gs5IT0Y*C0^2 z-1CTGLJkt`kwNX*fF_iNJ#5%g8s>n=V}BV+D8c!V=0M~xF?5>}6KR(sE?<%97FU%G zIF5=Njlith;1QG{}^hM33!G7Hc42{(gZ)XHfp8ycM62pqM=(TBhKB zJUUBG6(1FuEN4AGiF>3%8`C9HpB=V|y4?;4+$Es2g?g-I3hE2dSrT<5{PdarJ1*l0irFGBkfWU{&gzCj8b~;YTU0kg_+f^`$qR>~<7~6m#9l{R}`*?o%6jG)HtJ zVbuR1ZCQFby!B()MR2dgt+nhmB2^>{*4M5#b+{ovY0s)mR6RwN5&O}MCXqhVVZ1&_ zz|jAo$?6gymWT&<=L>)*&weawb9@~ z;0;GzK-@N)t?E@kfFX1wAVAAH2?%JD0FlUmHrkx>hf$)L^ZGVgwu}|{6uJ#kpfG8} zaW7_pFLe?tAhbw{6=-8@LLCMT*bT(Bk#_SjQie7on!37Cib27S+*~ zE=RhE6FzI>8U6+RQE`g;%ivC|K#3nM@V-ilTVO=-*v|vQJRK54g=Tf8G(ISFiu)vH zW~I*HwpsYJu^zriA)3OTY<6rA&m9eIoxQOHVhtf7z|45D-jw)*q5bedSL;Jl)pDUS zHCU}r4ILb69BK^BR!Rp4XP|&_cH>>L01qRD9*yogEx`H`Z!(soi}T&}g`GJ)(%p6g z(PcLv8zvRuqpaL|ATBGg0_m*p7hgLC=MaRxT!!DWK2xeTyzBpnQzu?}$?3T*lL%g6 zpZX}omFDvp{Tw!*IsM#fK2I>8xPHh%HTTFc&COG$*KjV46ejkLPgVDF6+ib)c=X20 zZE4hsNJ6n-+4*K9|9g#mdjoOc2=d~y+h#&2O^s507U#;9p>lPqKHC`7B#2`#BL$pw zw;3nvFbfuNUS$YsIhMBC_0=QPK{>0sXR zhMZS^wyW-B5#C+LYVp8xT=mJrGo}zP;HFRA`|PV7DcWea%Ml`4t&ii*Sh-pkf4y3A zmz5fPMJOmX$^A_+wQ!?Zz*9mCmgxa`ZqsbJY!@%oeu5&!1och!A=4Az#bEp^P6f2V zRkPJ*apO#_dB~{71{wys}+^VCmar}QuruaWrq zy8!#ddT|Q5^|1%wPIRzVz&?Tb1HI#qdD!B!qd)GDs^0F`5!=+CYNzL}q*m}wy@RaS zBr)7j5>JrN(OITS%U$Y!(ALP`CSN;d#p+!?^9>qy{Nj)6zJrYj47(D8dp2vx3!?P# zF`^&CVxV869}LRGPuH96WGaA!J%%y>KE5v(D^$pjU$6+rM(I=-Sb8z~3J;5}emybH zK02ghG`%P3Cvc5M!REWQk~Z`zW^qlH;_^5y&z_sYe5%(k00ZFo2+A_g1$>2 zoY}1)77icBJO?3^_DV>bTo$pAlgiVus1qjG7IDIS=vmXYU=(+ri&-UJWv4VMcI_PI`kKF(7MEV(fi1=@7SsRVLk^Ujms z!5!Gs7tg)WyYZu9g+z+aTkW0nF)lsPj*zr(s@R|ihof|Mze_Yl43vZXJ>gSwpjkCp|>V6ZvO%M;$S{!r=~f%i*K zjFuv0y9Vi99)S`uv?GuJ(!l$~@1vj86~u@3VE$|<_lxu98#fcD@O%i4IZ%4u>Y$vl zk1S*~-%>1Nzx0-6$>;btqAs^o-E=G5N|N+Al{mNfpuv?!6EgFHtKc_4mb#INqXf z44mREvL2vKt;@bFl{h$47)MfsqW4qIpFdpe6I7}cniN4+@l3sbT-yl?CL zH9{gy%*CrZo3xsz^o6658!4Df>>=y8e&WWg;urP8qRHKyA}A4^0EeCGemq5ae*@E;#>wu4BE_WK(%?8K`_GVP8FiSv43sW21+8mXJhEEN3 z_?fSMjfEFcS+1g@bkZlQTEc8Yms}_O;q;BG2)z@8PSQB6vhf}5N{B%{Xc|x~N|)tP zy7+KTW1K)pqCitNAQKW^?@NM|{c=v&cr}u%X`G2;7NZgX$$d&p-OtIJEZp)an;3#7 zl8S|tz=R9w@HeUXvlr6Vb36nRSb>w+B}Vm#56~&^0*ypekOTt9nFFNl|a<$m|%*czpN229NpSJh5KduZ;$@V05~G3q`1qm+y`os&fEKB6Q?Y zjrQx)lyHLST{CO4REC#*7>B#w1$Q}Nlhq^ax@L7>kv=T%yf=~Z74=k^84Pn>N(DN~n{Wy{{{yCXlxgTry6xCC9u{=&*#=@Dpu;wP ztl=_=@mqyymJqawcgW>_jfqG#|GMV#VG{n1&ZeT%^gy*fVXKj(ndnayqpc%TWk93c ztWF?hc~O=3G1WGWX|f13JS0UOtBqt6ebt;=uX;qaw~T4o5dpS-XxVS z#a?t_;FgOAVPBr|mriV3?TqjE8AH}YB2G2m^XD}mg58NTd|pPDt;mS(U8JwFhDMs>UMU){(l2_w_F{gY)-V03rXQus-u=b; zSfN>(LH&c;sb8{J&_K3_K6R;f5=atVRYG!$qq^($RE2@GS<>HiX9AoYNFf*P;zfr( z29Jj$l>J^G_^6X@UIfy|6V6m!(OED@3ddAc#FOUT^AU9krEOze4t+lmbTQYrY{yx! zxAJXnw#F57CSm^D|H_H-2>Q##x5W;GFzB4Xa_V(GS(KO)Z*@aV1~wo{8D1gpb$2@< zr`01IK?pIZp9=-&sT+ZxtMS>dpViu4QM4$@izC7T#jWv)kpo{09;JYqt|HLS>ie^w za6+xrzK;mqQXwIh4k*|t!5vt%sJG}IC)7*y3(rHPDEa#!a=NC3!e1}wVpuR%55jfEGVu4Fu-pZFrP=SlSLMOhg=%4?T z6Y2uUSjX5N9YF9pZ+>AOZ+{Cd@W@6@4-g!XJ2^Iyav*=`cmrR75<>m=-?}1H*e7Td z+3dI>M%X`Lc0-5Z>I@&P6G|-jv@1&3y)yZs3;DMDB&3e;KQvx0Ud>ySUf*Y&p&xci zNuYs^sq#1I-&}m=+V*8f=QI%J;cz@6;gB*S7iWCdDPg3~b=230&!ce*+UQ9a9+{T2 z>JvXlN|h!UyPel9d7+{EZukWB5Tb!VXXIh<(;YgJF%mMs8He~?3+|SU^a$f_ZXH1k zG-tv%fNu+y*>M1Fb|m5Wq^gr0W7s7Ta?vGZc;i95Q8dvI;=k}dR|04Eim8Z`(qa!3 zvpou7cQXMu$uYAK>!j2XsV$>jySY>lZ0_1omY#ac3>%er=eVa`F7rVY_+3zA(uKfY3xjR zHa>H zXs2_ta}GKt)33o07fXMH_TSPtH$Qc>UQBf0bB+vh#lLXkM6*rzW+bsSajOXoGkZ)w z^-NAPf^NVs@)Q?$;&6o_jPU@99yW9nkL{-mjcLk^NhTUfS-+91NUB0D>mpU5V*w$V z(~=!J9%kTQquf*~?dc6eA3&Hi-jYWS7*2NYo{x}C`-+G7m3xI;5jXZ8GiRUoZ`1_= zU-8OzpD@Xup*;ncvN>p^Xg}`lcofpm(b8ENFV9Zs@$t5QceZv~y&@k= zQ&M}Fd%OO+8S#9Zpt*A4#zPPqlPR%UDf7!@NA%mFMDv2=4&chh-dX_%94K3LDX*0} z+MinBlPH#2wAYTV-I3Ngd&c^z$L;a;_50tKx{R6F6=4b2-N1A4QoMT}xb!G`~c{%YPhO z_ikGtyvbhoT*6AKgo~cbo_S`O_CSTpF-SW%>)lpdx|)$4&BZ@)wc3S!rfwAFummfV z@jfCC!gQ5qyXG7isRt*jyt1XoByLu)5G11MVn-4`XZ7g#hEoY@IFVbYYt~ns9jgR8 zSO*6y<2^aB#&P7Qeo9e%h>{r(d1T$pjf*5G8OsqsIpWNtRqo}$KTbP2v2mnMwpR~` zGP&))TqzU3$JD4A94q0to)~FJ$s`_k$Cuj6ZZwBKJ~48ma`8aB(CFPib44S+N6;u5 zO~yDfbNLL6b`?zqKZ!pgad1SH8eW_)16ZNWy+3zGn@GR8~>tSUU?-B0&%Pr7MEPd+wLB zVRJI4baO+L_&`L#4RLn!?tPtsO+uT;|Box$#5&%b7L7bUTW4qswY0|b%}73Xa}n@> zNei%Cf5V#O-w{~j>S{jpRSZrNz!hbi(?Zi5f8~y*rb`G~#HHhjOUJsnrIFokgpW@< z2Z+d?)b}Vj_SNy^2X->N_wEMpXO4H0xETOi-B8h9W!{*+^z{kBuIB~0{0!E~r#8?=hncZ+;>3801U!C~T!+}7{K#Q)o ztB6n#ChqWw`KrE0xQNnB^b3PGi;=iUA;&MdeGA+$EHOBda>6XXXM}(@!LA=uEUYXA;z_u^G!Jj(;XXMAu-{xrN&+=Zbo14<)e%E#YD>T3t6`J znyZD&pL~p4mIjD}om~sRj|1;5t*=kb@@6i$dJkX@x!Rb6tEcn^4D%dDZ#pN24vZ>2 z#|Tu%7mjrzkFj3i7s*l_IGUyMcV&FW1|~WVhy>FhpwNFF=Y&Fbm#{qNAdiH(JFqbjYy_Ggx9 z|9N)};Jxuy1PlAgrd?oU*~_$+fsc!5;|QH-hf2S_S$$~}IRe`v26sE?wI@e05)A5K zb8d(29nGg&uRRI0?9Hjx|KCU%JJu5PX|$!DYo!UVizJS|(+OuGIBC1FKa0EW$HMX& z&sh04chKH|+FE^~|76MEy+YDbrJ>)o3bK-{AC)<&CB8CvdaG-6Tco(Y^?kBj^oGhk zP22p@5A_c6!$f}v>fXxAEs~6>{FwI(VHkxyNc&Q4jy;dS1V1rWxS+2OZ{V>aHZof8 zcf)!?*|E6=VYLg-*NX3sRP;-a%^hc|@?|rv`43^uu<-cY@m58@dEaRPl&tC(AD?@; zsSH7dD@FSqWaT9SzFj=WTdGoD_9cGr`@=ya<;UbsGNVq+%IQ-@$9-#9Kl%fZr$ln5C_qml=_%R*%=GU)<1+gc%YG=-=aWOrCt|;rTIIu&GomPc%k~^&Q1= zJY*7rwH0>-u9~g#F;hUNNhNmH3nhBa{Z3Eui%TB!I8}eyQJihy;cC%cla(A8A4!j>cGQmgl3xvW)+0b!Uqd2@{E3M{Z6e-@I%ALOv zAjXEZI`7Dr)Tm9Kd)`n@#5A-XUh^oxdSVBLXnJ>IcR1)xUU}9<`Qk^Dnr{09ANI>_ zZ^*OvJ6t-)^{PFIFMR08#TBPX3=2AMNO_NM3uE2u5+_;nltz1jL)Toi`V+gbOYou= zRNrG9Kp5>3Mp@jf>JsGb4BIT@)#-`tcm}Vdo13->Y@($Y+I9bS2lWo*jzV_bV<~lU zyY3xQYT0#9e4K69>6gE1AE66FMdwkFth<{yi5!Z%5eLS&zMCiP+T0`O4? z=Bi#93-@_3;I>imCzINZb(cdmNif>Psm`8=mjU9Ii;tlqpG80t~yklbBzPfjY%Tdf=WHG>Ye&5<6DIp#z+ zAo_X#jX=l3UvtX;|| zS7=opv#Z?@&vbWe-$EC(vz($!&T}v)fv?r2?b#jvCMTqG&u(-;;?O-=YRa)EoDYJW z)~x`T&IXn;OD z3bK1Sj)Sj(XM9%<*}9%>!8qq!L*qy|3tCz% z_6}gkC5YUVkAbCQe`njn6F=hiAln{3wQcTKYx@{zJG39c0~36X^Q_gy{i_Ehs%u-J z=6!L`Y2Imc1{}8zSF@dTE6W$cP#NtNn)u>AY=KhyCVnfFbZp{c9Yc4NaCPoc!tjYm zKJz^rC``+u5STLWQ z<^Qyi^WC4}JicEbj7d4Z?+s1DvulSm;C#HhFPW^|;SeO8H6dLpb6B`s6p=kcPP;M` z`l`)o3jO&~YAN)quCNule);VF?N;b9GQED23#A_G^fSk$-M8pgjADa)4?MF~Lnq0( zGuEisNIg^VMy?_XUdxW4f{!6jGWSBs$AYcKW zflJ!BQ~0sYIagD{mK;x3(h$3)bFY)Q9q(;h!R?cRPi`*yb=~QkheI}F_ToOghvc3N zt)??p4o7pF*a72roaT-1M@vMZ86}-fl>FyF+m^N2HJpDtNeS+H}Hn-d@?h& z0CQj|yAL;V2l3TvZz^zfD+|QxHQR;btGeEh_$0E@Uvvv!uz!9pxAEO`acA*h6McHG zJw}#6Sb!Q9GjBK#6=ur1#owQYn;{5)o5!_ZUlziyK*0H53{Q4b&RZc~kI3Umt~Rw`$HTU>1d{g1oS)lM|9MQw1hp? zH9w%=;rAAaykO?jr}Tma^3^s`!>s62)q1I1E)31g9vs|Jo#j=rfgOOgeFnAc>l*0R zYI75A!cJ_)TLoo}N;&j6-a6SPj~U?S^<_NLRkSMfYX!uN>2<#RGe@a<>V!|;>sh>$ z-^|}VAwaWm^NaVekb9_cxcl(Z7Yax80$XEWsWx0L7O2>-(xRspi?v}s8hVf(n;lw+ z3w;}T5wbWjQfRXMXy+HNGAP?gwmQ2jC5m9}b)KRwt49)=x5`~e5FXx3%1KJEi<_-ApIHH{vi4 z`yibpqVjf#I9-mvYu@`IP+bdmqF0!})71tQq4&aTNbH)bznp$ObGBG7>0Rk@CsLCD zfM~fSmiKj_;gU|gGYO-kRxUKHor3Usvr^7nBbTD9KrmV+<_>vuO)}TV6KjpRL0QLGwDVktwaQ9iOY@A~+vBZtTG4=Eu5bjS!Kmfr2!sa){|kz{2VI zvO??W>0mvvY>YWKP`+B5a>sWaVW zdbi=;L2Jo-!qdz#AD7~;XPET4jq9Da_UR5LnAIN~X9_WN5MlLlp~09_dyvZ)1bu)U zV8|4};MNHf!{nE6VLpV|b#{9<$pT`dM_2wW9XI9`?OksE9a(F%sh4y+S%iAUy17HL z{!UnI5nUEtL2lS(loA(`j3b`dqLXn%qiaw6 z%>5m*B3VZ?e=$ad;-9(e*U@oA6GQXX>nYZ;LQ+W;$e?v_5vz1RaJHS|*)@B1L}BO} zIik?AE{-Tt&`djGh*f(K47aHfJtBxzo}Y{VfY=+p^vHE=K{DIL9~+Lag)aKokK}cV zi#=A0Fm%5>)oCFZqmDL}lf}gDl$(Vm?T0L-E7fTvUnMEpPIq~oaE{|PwNJprQJ-#3XqJM&SO3&?U; zt5=)VvDr!eV{qd^JW`At)D2==-lr=Jtt)od^l=^RJi(FBKxFsPVxFW^ai#y@GDAA z@v7IW_0cAsF~mrAfnGPez*HQ8ask8|zSCyg=Tbba$E%mF5QdT2i<`Ed4ThzyH?hY?$RhhbE$d|8 z*E9S{?8w%!XCqzv%qUyU?z3m(-LiB(OfHd)ggeIMcE;6`-+Fg3XNjk8Sf+3ghN0vse1@0(s3=@PerES=Wohy%Jb4% ztyy=7!$YEaV`;Kj=SFm99Pi=06y$V&kfv%6iMN$<{~JN190?S8P^_4mGCz_zr< z^Yf_I)R;6b^~b10-}Yp|>#d$fD6B2~l=z%VJSjx^|JWH6cO&a6{PT#OpKCddNZe!rF6H>cB7m#M#&+j5G?Wj z1*3HuM3SZ#GKM2kmbvK+yP4U1<4|RMa2pPh4mvalioVMdq0V{6!^jSx2hJlb8VjEj z(Vq{|#-}}K183pPEamhLxYs=O8q-A%wottk%9LK0E;qbfUZ~5HE#B*&K!=+U`k zWUKz8aWj)l4jQSN-jX;tmva+}1t&Zh4+Owqzr zaV76HnSb2Du0}d?hI8&&xxz2%KgC!IRE>5PIX?jQmjtys>~qNbh^OnO3!(W+o>%Bs5ZJZ@3w2+Wil^vJ@^8r zmaNq?md{d!PpO#~-^Qy5iZ4n~yuMO}Lx!1JVVnn5i}YFwpAYN5_cpids|6B~?d%Rn zni+jSA581!GDwSVNd|{Y^iHsRTOh0db2bF3v!JCkkj3zp#90Ws=OJqtyQC+Ru49+x z0OAY3@050W6n+CX#!kI62b)|DVf%SMJk@#E(O`~~=>F;S-c=g0gT3$$1j!V^^=&V* zuUfo#(`jNcTMs;r%Wj}wo;P&pP>2D7Ei-~W>T*FzpLX0RI!NDnbm(!2jZ5?$&Q@ze z?fwI>&SBS)?Z(O22RQ9q4KReNT*la_A1!w)*P)wd^jQLUaNr;gh8??IyBKD~ui(rc zfetoPzQd~+X;U$@sj(OTLl~nSr3$U#Q~}ql@lxr~c)5hz)O%;J$0`p^RR?kX8aJio zS%6M6(6`t7yI#_%G`8sf^1>_>)IGPO>rVUxbM_1~=W72o&e?Y}42SNu*-9Ndv#AQ7 zV}wzY>pTo_P5_8nNBW^f&%=C?8aC}OU+SK0e&0usa6Sk`&o$|;nk`hCrE<}`@MZ34 z7j%w8tl)20*eZCw9Og3Ru)imA7(halUDI=P7Ed?hj_mKf+&ww{zSqHOC~$Wog264z z6F*8wNTllFufGR6Gq&9Y;m?s_7r$?N^%kKI$%bbbBlxvhn}uT`znNj6Ztls7Ws$Kr9NJWvDU}a-Z+va9_+$py9A^I0%XpiMWjWl`FaOE3oN&%y z4Nm^W>&SzY39+h&qnL&q#qeHSIYUasyASlJ>?E~ zW=#RIH~0ywtdcR*(8pU%AslC7@bbOZkKsr2N^9cR=i#@du~I7~oTf_gP3Qh5dkSFl z$M85nYIvjRc(PP)H1lWkXz1d+DLatIgGocv&1MY=Q5v;srBPI;JND@?KRiDUBvEe^aPR`_Ly@GW?~3{;=RUS_5^G*KLzof^D+ zm=~!UUjG|7-O_)nQLiwr8%T$O5JLC~``~4>bxGh1CnX09h4zd0>9Ky6lhW^i zIuwnGOxXCUbE!$Qt>RQ+i2~bTn85@x9!9`S3WwICbSTcuW+6=kFwzGi5$nZcRTf_$ z&qu8B-ta>_+SQ52-`+A*XJ)FEAvh-`9%^W;)EpD@Zm?RP8ai+Q&Z5F>6X#Y_gN5<& zVy(HiQ7(;>cK`AwTU#vpQ!+W5cAea3b^zul-`Ls3!_J0YFBIZ6QnPxPoU)^{WBziY zs_80lK418-P7~Pnl>X(C*`_0Rc304nk6o|i?MsoN(aYZqS;lPazz^FMwgXE!ayaMb zlH0>bnaKRw2d;FK@g+$eEEkhA%|Sn0W$~g*VOn*b^JUHf-tZQH?u4%f@=ewHOrhzu zeA=y(Bj8L-G!1BAvAD#=@A|WE<*Z9v-Cd4$AYZBu1_sK1z732?UBr4f=0Maaq7{@| za4ObWVBbj`kIl2xGYyYcELKU!otup*9Ruz=_l+QrUOM;P%cgXsP^x<`e48W_a>;IA zt@J^l0eW{`gS+FCjiG~+jX^a_-}X-Q+T|HfqSLqI372TncRBf$RK(+ISHidTmUq*l zVR~XM+px1(G_( zt@tB6{qyqM&U&HJK*$UeP%Kzh{^onxU`qujb#~>0zq6bDZ>>&+r3;t6yzeR3uy_a3 zae74=-uD(0o7xX_|o^8PFBLWMT-QD-bKjSY~b7XvfuCM+y z!Dx08HSN97~kV1zW)YvxdCOiR;&AFYcx*{ zL53OMg>>X7F_hSWL(%#~V+*#z-232%oD#$Qa9NQNVk~z~4+~aKN_Rv^&es+csTYxn zBtnoGT(D+=A;jgy<^)dPS>l`oS&&kui}j4wz^6YwW@=65 zz*P!3oB|0*s4v|i8Yogl6QM^e3DHy~>!axquh_s;;qI_npI8b4afWP$*dfLzWZ{k? z#W>($ZYw;|_;N16S-^3jaz_GLP{Rc;km4LCwPFslTu|F^NL82jVdk{TiFo^EIW41P`bGUxE7?4 zhRWcE*@=lmTPl-PxWjIIzwK7o`T^Qf+3qkW47SE!!>2Z2w?U58!*nfNcKGVoFNU0R z`N{v+7rFK7(ixY)p18YVmxa=Qqf=*`+A?zW=!OC=sa7T^2eS=uY{%+TEJx7F54Pr* zBm9zp5DaH{Zo7==0l5R`*~oqLLvtaAw`5#w-3AQ+dodv1?Q+{Gaq8qXr|<$ZBzML{ zL>eJB@Um++`^>>@jI$GEvwhR3$Lu`(xEg8vb%$pr=z2sjVt(pbiLYM=R(ynv+K3Dg zVlG}&{!4xbJGch+VRtQ<`Zx>45~|_60cH0t_zBA#P3$NJCx6({dNc@n2% zZDlP!pov*`)Uq{Ibm1}kXx|7M2p6c}?8)lNFIyf~8^KL7>cLf3HNR|)lsO_{6jgH7 zjmAg6DjZ6~ui%LqF(P&p_v@>svIHo0mvJW_`N5}bp;_2cu^Jfa29{XlM?>YSH;qCJ z>7vMM_bAZaA&Lx%QAGE?+^IDrM$xVsURy1a%&4hU&Y_r`HHGVf9{oZxX>(923^#R0 zlBKMCO;Bv@wyqBfVc8a71f$|~Q0AL@wXno&Vh#o+Ol*MpbxU7RvI%jZJFul?;*f>Q zZZkjNF)2tEeK@-dCC-!9XMuyEOjOyL!?`-)@LgV=Ew4grR{P4Nh%#x%dzD)L)Dpk?kP-A6RXQ{m?;<5pmkKP(v@lE-L}HP(#-74j*;Qfa<$pm)es+!nSNnA!Uqo` z9=(zG_sl#De;3?Wf0=##0{-0Ic%w2pRi5)!FyWEm?J|`7Gdvg7}}*> z!d3UO;(ngs2U`UlDcCERlj^+LIY4iUu-*FCjtvaKt;=IO--ruLEyFZ~0JfNA+%S)SB6#K5=fgU7Dc7Pkp+>#GgK_DqXY^;8 zmyf{0h3AXT|4N_ck9?%7op5rs<67qsrI_lx@ovHD-1BU# zrWL6Zy)MIyjOdTxe2-i2pMT2MsK5H#)*97~yF$l)B1U#&inBitezcJ-mr<9>CD_~~ zb!F}+PsT>o(HbYikY0}FA0{2ab0tRt-ZQ{JN2?V3+j6A`f7XuSX#|Z17S(R^X-ulo zLyhqr_|+Ix{M?OCV@A>1_4m|ywXDS2^~;PgHC(8S7t7_Mo}KzXu9BEWhwKAB+wMgQ z+dUUCe@^f?v%Fkf(+PIGEA|@tJ^ItCqE;tI{MG^;a*4|!snESUC|7u_{oLfBcNy*Y za94v4kL;2$Kk*bDGX>GR&6p>+8gsNd+1#?@DjD~8FLgVI8s6J5$1y7t3IXVvAIzp7M(0QW5sH{a?udtEcP{qo@p*_4(hExEzsbVCD1HTUCL)ix~(Muq-sYC zR7S7OdJ#9?-f};Lpp(_QWv{sWgqgwqvA7)i{3E=++!+4Moe3Q9gt$a-<2x_;Yh02l zM9Lwl3@Q%*4~L{Oy@FKq_!*g!mni<^0aEExe?$uX&fnp0hZM4K>C9)8!FRa_jJf}d zdCmP!-djuupaf@Yy@WgDxYj~}Tf|woNG>0DV%yF&2-#xoEUlX(9c(hw2SYxVDZDu% zsWc|b)k5>a^RF}iW50MEw5qc}(@p?D`bzsMj)9hweC=Oo?5Q(K=*r?zv^uk?)A92c zEGi`~kDZ*(wd&d9JhopSk!NjUtmM1b`;f~B8bEK#A`E%r{mpJ-o0Rfvve4!;?2bVp@=_djp{vNPg zn38SajT%CTUl!?~6(3a;J#6SEpWj^EKzTMNBmCUZ`hf#0~v1{=ll;EE;Qsbg>H?;Y!8!Xl{o*su1GY5pMaxI=Bq z;fVJ&4A|L2d+kuqACYMFN)#0p#c6|?^y*-V&Iha#e~T&6=Rc@8K!%Dg@Xr^XCyABH zyfDwZ2~-%%<<@*h24y?+QP|0Yo+*W4E(OK<)x~jd>}x#~E^8dbsBV*NUK|uUVZ(#H zlrd{yBG@xRhA6!g`1DM(hQmOlXPO5|z>oD)QpcxD<%zlkJPds8>s-go)1Y~kB3GTC2c1{}Xr$q^gt@L`i zCa-8fJO+BZn5UDA#L^55gM)+Ee&Zy6MJG>RwL_9^A}!bg6Y+;F`Y+BIO%8q7#^yZj zvC2}LOlhj~Z>2d%T_F!>;ka<|BF>IQJYZiWNy(H78MUcOqTR9Lns{&AVWjmItxOf< z%r(#s)2TFjYA(Xv@VW1Bg@E+VjyJo0sO)G#D(1p4i%(7#AF!~?2$xK)Di$~gfzv@= zo;YlC^H$7Ff6$Dna2upIUL`8u|G*lZ92>O5_TV0^c}!$rDeu#UxddK0M^?Q~e0`n3 z_2qx&B=0&3%E(BNGd4h9l3Ohi3qzNT>-@QQv-hlRSp2EkR{!zIy;HSQ)o|zinSbHz z@6pcN9tfVEscOAC+bmTi{?5Dm-E?+LjmwCDZdot=kZ;O!dw%@x18u zvrXb6q=HuVuE-m=SLH3ZmAP6}6 zqG>zp+F_IzYP6m$A|}h@l{NUtaiYT16Ae6)Vuj!$K~&=qaxw5o+FaQ)2`Wq&uE|Zf zN`rC{KHg}`a?E9B-JNfs!{W-Z8{mpIvEiHLoGXVIZoOwTqW6sOp(iA4ca6zeFgrOc z?>Ic&NxFhe)nilPf+A>2lq~;n zSOP3ivPMcedWx+bRp4jJ?)+u8`HVt*d*@>dS7nd1hDWPM%RlloSt*K{h-s?8V1@tv zc@JGCS%X3jqbZXiG#(Qo_u=47tTPlC;}<@Z=_(J>jQNXrAm(hq!J1yPIDlvRnsPR` zMiUSps8^fC&4~KPsXi>?&OJeMiA-cl*zA}H$xt#=Qwxe)DIs4%M zg6_Ct)BBOW^?`n`UvCQab$^3D)6NP}8(7LA!_$<%I_}7v+^;X=ZomXo?GzH873;-` zjrBU#%skUXq68=8A2BgUwz`K06!kg{G~oh zp9Z7S@W?-~KnhGSvwr!JtVbxAIf3DQ-f7T$el&C9=l=vw@o?ruC7g1N_avU#kSr3< ztYw|VGbi9Ca*=@MM2(+E(3}{C z;Diy)`m@|5PYGx?zjE}rn8Or+O7ib)!@X<*_VpDTBjYOYaT$OAF)z9w) z5t8vJdVc`|gaRJ@?F+!hW-o*FqcwUa+J;gQ(blp~L^}#J(Td1*^yhoQG8=0n)X_>0 zv66gdOD|smIP1tGHta+rB36#WmJCt~!zVTp9k|!@*_CTM$N~}5D~yh zqMk8Bwwd0mdK&a4*cdzYUmo3Sew%@?iHfotn3_Z%IZgC|0&v$bJi^_9!@ymO9?rKQ zyDClGYMSs)e`PN=I1>BgP2b*&zD*#a_qvy&cWdWu`*RO-@`%vXj(B&!@mQ{WaZ`Ke znK4uQIggV9V`}Ty(c#@a%w#+i9eX{1BO8?{@^fU{#D3?Ez6d_`7lG$ zGslvV>xg4X%Q|r^887BxCJxz@=8HbeU>tu|R9d2*>B9`n?b!BZ=F*G%sSA&%s`Hf_ zH(m=w27HGtXW)`yvtR7HONZ`+4`n86^EdS*zk0B~n96KHPUFII=zgNK9(t%-P_dIq;Tt@>-zw<#m z=J;7pq*Bdxuyo?&P8s$iXHzY7a$aC}wz1NzAM%L6l1@@p+gGjjXCA<0x8=v6TN2G| z6yeU*d|O?zra6wM6eTsgXZ!Nm(tcL8q)jF<}<Cxbir|bZY{zk}&sATwagh*g?7L>dK0M9nO5E!D8skLG6`pl{S+rT2 z(J67^`T3i>#yAkWLcN}cuuzyC%(Y;8M7qW0uzzK^F(ng<($h5OGB5GDKtF?~D9ULH z`2a{1^=pwxH$DgYE|O*0pFJ24`<<`!o%>7b?4U0#{+1T|+n|TERB5tUAL1>u@nXFx zN%DvAymTxbkF5g&PPh{4hqTm<^JccYX$Kk?84IuHHuTPK>{x1W4k;0-#) zUl|^n;CYGpp2DDtNc{4bH*i}W532Zyl6tIf?4WK^VB! zlRtd^T_=;>-LH*}61@@rWqhy1P4jU2>hS3MtsU{l5% zFK0JsdGRW7@BGUmXTD@f$gd#mFTmD`cJ`2jF+6q7kb|@ZcA@HjK(az-7DF@7Uz^%iFqCb;heFN!oG}y6p{Q zx4URlhl@t|E?={X*m#;2&FbLBgUAloC{-&v3YDp%x9vrUC|`WG@Aj&eQM$KUpBg$i z)GQus4$W3d!1O>Mi_ZQ3F;AfX4L$zjg zs9A0dj+Uk>$l_No(nP{?Si2xzV|cc{zqsWx@8SB(Bn~B)ugLRNt-;Os$J?}2TI^YE zJlNjPPLcv&tZL1|m>z+x{3h;3EDjRClgSOtU+W3Y zD@*k)ecr>lbI9>W$i*d{9NBW0jdX^^*~XB`f|Z&EVy!311N;G(s&X~ptnBH)5A?wb zsMbhm&fMr5o+obM>MxUmmpN|hJ6j4OYI^$>r~`T*MwtJEP%I_LhlNC|@E}}IvLXrT zVwXgwVVw!{ChYkO`$zd}IFhk_v_vW?o$cvXDvR1X*=Oti6TPbmt zfZf*jUKS+;%o<@kD@4S>`mtxs6R={;)3W(8&w}>zM8zm0jm=!EX`y^N8#Wx?P`0)5 zn%~`lLiF{MLb&p919SU=7AotHw^4wM%0f!656HJIPz$^(BLa1Vu()`8Ahkybf}Twc zA#iMJXj$7+;|P)D_b3`>{^6kfywz*HJ8{)AADez{TX%RJb9Rgt)zBQa>RRuk(~t0O zS?CYsPcZ>vWiQ6NYhjC7bjDSYS+x8D`L<@!+ZS%y5t&831N07#t?IpZgY;}J2$^DY zLCe~n3%$eoPV&$!DQ6?;d+}gx5V=qB-&$|w^ZUJZadE^_1vk^mc-{FKk&AXxxGZ71 zx9?>vO04nmVa{Q#$U+~l(K9v*fH5{|S=(&PpxuXvl;MF^iSIvrU0^!!E45q(6PEiQ z?urrpwgtJX(}?bO|4ufD5ZnKyXG9i&Vno)m`4ZU&^(><33wTFbv|cKg3qv!r2M2fH z^}pg;??pS2<}GVpxEW%8)9K%dV{|%wXLlNBJK0C#(Ze_aHnQ`GU^wcyXL2Rvh{=_f z%~!4*VY>F3P%PUP8Q)U`+qQ%=hH72iMUt0!eZ5{dwAMRr9dEv52&c<|9%yBPCv?wq zpB9(U1<$)SO+sCQ_#F-!5mT4F_e@rWFfm!xviZuYOLV_Wb{Rbia|HQo@Pu9dCU^nv zec8!K7?vS&(W>)XuvR}kCN#G#_%MqSRzh@;U91yfd-V67F;0MsF;2_o%eW}O4-z4e zp8m;tak30o<{)p^ul1gM3v;#kq&M8zb6v3le>SYNp&J^wt|Q)LI1!$^I7Ktq{b3uQ z+Op+Tf6sMflI0+LKniTzZb9`K5w5i}=C9a`GO?ZNJ>#i>9^7ft6MqO63n@MFS%tg=k~r6uFqzU4)IPlO5uh6+B4D%U@_8b zS!bkIaL*ySp&nc7@o*|(%|!@}*|^qgX^|!9{7a5v)A`=MW+9u-GQwh3NFlTQ*fS~% zSTQPVS!YxhXkSiL43WbJHFRP>o zO+oX}cAT27^){WeI5~l|x0Nj$)>^oqj-Md&0w?bBW%3;;t_91cKgp7im+cI=lTDPP z?Nsj>Uj_6SU$v}lzP1DZ&xo#>g)v6(1-0T;v&C8P@9O_LwO#(%&E~_s?-t2Tn|rrT zw!uAnxJR%-E8f|ad&W5dJH|OJ>ymRe^nXTF)A@!Qs)&uN3>V5U5gz%a6vmkeALDnV zUCX5`v2}ahRD^eY58~442=m$)@;-JF(WR{b>>2w6@EH5FtZnwSfozTB0sp8~V`vVS zOSpqf7OwTK_^ib~!|px2$_dMTt@rxppPXW@XLbkM-EY})mAtM*ZU%aF^NZv=n3>EY z^5`2P+-+ybcd-{`Z#&g{#$N$F#$PRKo4@VAe*~OD=Wh|BM}_M#dFPC ziF64pf5T1*+e3GLhyxP?1a*8a`dzGy*S@{gX6#1Lt!%yG_T zJ!M;Fou2VafQ<1=%i88wCeVLH#L{P$Mo*1OYE*bL?oXLr=|)ksVQn5p=c_9b4#DVr zQZ>S$b_V=3J5gT!f7E>moE%4a??~d134!HEP{5eMHi-~owWqWKqKvdUcI}lkXeCQv z{C0Y0dUnQ|%X3J(=EwlXDA?G`Wn{oG+#-M@PRm>w2m}R4SOQ4|m@p7X93Z^Sdm#}# zj`w|ERd-i)S9i_sb}JkGezr7S|El`xyXvdE8+c@5Bhp=BW8b zNOwt*ed}6^-88rVCbbkt%jM&F7&GMms!QQn8I~rqc-14bkKm_3nORkhBhpt?7Ai6c z5uq*#v2QDpkVWEmbB8s&7IbfJiX7pxG~JM$vYK;4ji_JM`>u-}c^7xQ-#8&8K0% z^^VvbcdLSZC=9~-pnUT|i*OSS6qgg~oAg_ZH`cB{A&F04;b|;`iBS)ZOq@ivOPuUm z*W%PuKZ3mBVufROxQV8BEWLBm-l^t4<2C!fn=D za2u!`9DWQjjt2~?>l%bIF$KXQ6A+Q=5)k{=wSa=?{w_9;iw5@puoW@JYPK%+yze~5 z8?`Hto7tMcv4EKHGqWfN$BJAlC~L1u?w^z7;$O|bU{Ope{-DTYLS(vR!oGDa6Mw23 z$OFp?R4}l&9kD$hM?Ag=AFgF21-UI;Z<>W;HPE`48j)%@BWFOtL{5yI>EHWtGq zph}L6`9zwF`RrTQ%vaHy!WLV6Zn++rgty=Z%1t8utL~;s4C)? zHby=EGD)1cTJ>-E$?=qmDsDprlb0ejGIzqjD7eGrkYs?9bN5oOeuX3oI25<`R!I_a(Pt1Y^-R3Z z$hb`8xVX%|b}*i~?(QBuhbGRf`NLOAtdk4>9@R?+bLE7{ zSV!czSjWC~%{rOV=VANoU<%m^Yh|Brs%EIT!?@mBQCr$9@8zeUBGEydUwb!x^7v}I z{AXdZy?%K9J5J^EE5qK>xnoQ>)E%iS+8tR6C3T~E4dYozx6QG)m5##>dcyZZ&xvt zm;PK#lsL%~B4Z(u<6|57*e90L92^2WDi>?or>25zL!lhHjj5%q-V?wp`j@Zo`RpV0fgyCI*;I8y+(1f^q zKrr}PmnocCd*F4FDMU=|+mQff01?*|nc5S>Tx!q0b*=UhH~o_+(y*01V`dGwdv8C} z`5m!yPXlH5-1i|FbZCa=u6zC=0n-N_{~v#YOX*KNWb`gc=`Rh{cOV@K=N}oHA~OME zpUVW;x2{d#(y;tKlym6e(7}>f&Wh2{Z#`8J4e^micwM`v+Q2Z#Gd9_D+GPgk*IaYA zWCqbwd^ge{#oZCICo=UXwz<@wed}8Nqi6LeP`1{X7CM~G@SkQAgL}`FViUuQ-YjX1 zUGCHHyWOv|x+3F05#i!L`_?u8ZNguNgoB5`{coW;V%Tkk?%`S!?zEVDthjy~x-Syl z(7wkh+)xCK3UO>Fk{>vCHSrdZle4ws{F;x`2Vw2{)Y{*BtE8O&b6Ot1$F`pTIYdWh z-Xunsd9!a_oA>`5E`AMlHgvDB$GStB4NQ$kDI5d1K-iiPUjOT=vl0-ZyN9J;X`yl3 zwhY@Ce(-k5lq05fJJx3RUQu!-GNU1exr~N=>)L1{X7Y32;b=NeTvBy6M5cfL{@V(j zmqs0zfQY~d-7`@A_&X&t!0jJDd6#4dmzw@(V)cq4>m^`aWR^lKby*7g*0rTvYBAjS zZpU=G?%J&T))Y7M?}$ASuI6uhW^eeYB%CT1f+lG^qtkzXk6ZU2^5AAT_xtYbd`PUT2~`s=)a)Qc&xnwbBDJ^%7qi=exov8 zH;X%BFTG5)?6Y!fbJw%94U8ina4GGnb=yBEDQ)-^p2j-E@~ZCUN2adC7MHrRZ(XZv z_^iAeWwl&gg_8v06|2{=pYR|KJ|73?pC6|1v&(IQrmjFw>xlw>aIZ^g&#(FEpM|2d z8ZyVQmX&F)riRGWml)(yU-m6>_0=?a@+{L~oLl9mhw(8b1J0nrRP+~q*5kb+(hals z6b9ZDdFDf?Hb70o#8>}%JX;Fq*9?DHQX}7b{sxO;ir|ZhOq4{VOO)(e*P`?#`US`U zYoZCp-e$FA6t>i0!)5`_pyp?Cct990=6c%y?(rT!<=$aaP{yU1`tV0kX7-#94tBqZ zpFI0#1MAFU7Rhb{;gLy>NOwt&ed}6s-LUw#KI#Y&$KWgvKCHJR_Ue?s+}zluiRu?v zt1PNpKBf|tyP7KyB}vDPh)f_vpi3a^+foJMCi#8XC~ipnnK!uYr8iTm9XhllHvJ=o z6hJ0HJu*40saBhWmz~paQOJA$xkqu7mHRypdLd|InqK_t4Q!M=4Z4Zmg`z}9msVL<^sL8-5a|3pe&&~0zvO4u%zs8=d{A9aL#X6ylq5wa z5F*tj5caKWfdn=06WBa198`S>hrXuJd|m`YERFql|G9_#k8Z2j&kFwt!X zh;cEPeOoGn8KIl7an>#_{IqpQyz?R%u*mLyNz!#G6C9%*|E$D0Z}C5-+UY!~H!(6E z5?L-DvTt4U&`WI|+sak5>$zX&06@j_5VCVtg};#8J6bN_>n3H0KxaQLK5gQXU-Z=n z+LT)_hCTk5{$mi$kdpa=u%_$ZK-M;Jrll(0_Q} z&A=lU_Y1z8n~plsQgEKS*+$I=4RH^B0Ts`QAj|Yy2;ony`7wTSB1lj9w_`d}7*ASc zf+eC{f@R;j7OaQZNBpHD091WAw0<)@WnsUe!`a{c(x2nHYL#sN;FgMTdC8S;QiMoU z>$0|kc`FFIlJ4u+Qb+1NKc(Nc)Zt3H&KD)2he_BN7VS8gk&xOOnW_;hT&l*tb**Y) zvhP{v9W7mkQxX;BK)G6kWvQFZ%mJeaVf)ALR`r;nRuYo113TBbzY???uflYxH%@c6 zza;7RYHZ_ouo=uwRwH?l*&B(*WpC_T*Y>s=`8EAzX1CDSK4&>y2y|DqbZ$$fT$(8l z^w#kLtj(`e^dZ*Ra2Y&MR1s)so`HG)U!&#O{RkS`)Bi>?v~a1r9qVHz5^lkfDL1jh zrQGaW*UBAkOJ9NVS^k(zR++u|0<3A`28TLqbb$AT?(|pC73-(FvZbl&`LB9Z^&1N+ zRSliaXJR#y(uQ6|Wa>*Sa;Y!-wp8^Ez0J@18dGFkk%Hje_jy?>iia!h(!KDMQWegJ zeHUIq^~?>6g>2p=!UHw!HGhkW#Ya>aeSDNYNKSFb*CkE!uj%hFFVhu&P-N03GF{SU z-@2BzKh;^}0SE)-wG3sb<*SWK%`9yxlxM1qTJMB;!i0?zM_%0Hd3*5s8$u|53>G(c z#NGkLdmqORp?D%6)*(VDicz{4H0s~^4M9iOUbXRU^jlET2iJV>?<5rsfv(V-_#32p z`2n&@fx?tPWM)aCahWCi*0ou#MsdFU@0mlu0GT#w@IWVSy?TNB)<)ssyQjxtO?wMI z>eG8jdJ(pALgB`FDa$J{(9?Uu-$NJBtOPSUzh>h%B{NzPF>k@*rNCi%jfzY$sj)7_ zWZ$}0%oQ=HhRo(&iu3x@A@e5Kk_hWyzk5nCmkP1!MzdNiSD(Hk_T;ice>?@TT|`!% z`5-_0`fs5^IJ2vtq~C&qoLV#fZAn2iwLO3ZFcr`sBNH+a>=H8j*0qo|q@O^Rc*F?T zp4IX-{_^F|bAqI-hz=k8F!Cj{x}^ZX-aQ4g2=U#H*nM>YY)z9pGzbN6-sD$CpqQ_J zKo;|@^ji{h-*Gu+ z&y_RR;$07WK{cE^k+^QqGmA=*!{rb)g?ji_z+PsB?06@3Z{Jay?&gL^xu7or+GfV^ zc3O^~M;I_L-4R<_c;~r_=lq(7|C1yrvFs0g-DNrhx^1rqPnu#1+mR06gzxnBY}`9qYI?XKXSkVpQr zB%0u=-htVfbb^7A35dvb35b2`T0p^+k03v|>8M_vv1Bl?C08-h$9pUA1Qag7UWaF= zcEnQqA%L;p;o`E!8gW0!{cwxEXQpz=m29?(TL{`+{G@+DNjo!{Yt!_>7CkKQtX==0 zB>Ux4^2b;<(~IR75}D3WGhI5vzIClL%WqW@dCc|6G2k@#;vKPDcPWfr26ekv@%X|58u@~8UAKXQZthTJ;=LroLLoI7H} zAPVmrZX!mMMBsq(B32?;p6dCwm;G20hF?8TLYUnf+T@C)L?#F#(Ip7>t!qK}HR}vE zi~B~J1#=`eX;x2|)yw6@^C9(TLBaLw?E7~~XkFF#=UA${7Y(2=GVu}dF7dH%U5l@)2B(op+~~mZ zvn8HlV|EW)rGFU6u5Aa#uJODAA2=K5S-d&?e^7>^4_@~}{N%(t+^r~TdJzI88&iNH z6AzK;5)b>fwbimcq>T3byb813(A5MmcAi3te*xgA9zMse}k1cJp?Wv?2G-bVuZy@ z{}JLDPvvSO<0_Hk;wt;rHCJUy)7U=FSKt_~;4HpOv4X>MaY&$^df58=YoHE^t!v(j zpF9IsUiwZB4aC&<63;C{GKsu@|cH(7=>jD4yn75tS!_%zPo zz>ZiYU`pr3YmuwYl#c6FSy=X5w@zZRx{9}BF^t)2Kx9lO@?1=3-@0bHn&Lmec5|JU z5kAZ(Zf|x&gP8Aro8lK(rK94&{N_U>=Bul?0ztM@hUITJ4UsXQ$a68Dee0U}>L$I5 zn#B7y?ltVi+@LtZ<2JmDxoiIJp%PPF#h=7f$!}N{N5)1X$i+tXt!p;A8u5Ry5!`cB z8>M=_X!h3O-SmUm?2g!fz!gz(YZ{Ad_$CWAg|Hp5!p#czVqthmo86g$bp5`E0Y#3Z z+4unc7RFJz!owx8=qigLoXJTCjZAPvvP*F6Ti1fq(f%fErX{2z?ECGV29v3pAfvZ` zP$46(2%BW+(z@E0u18tfvcdDMmt7_aM_tRiFrQ>PE;1q$1d-$?S_MS(oR3TIv ze}T11IuvU0ktrXs#-)7h+ftP;)b{=cC1!b(6_*T`BkVWQ)$#$Fk?FiQz!QaB*V4S$ zfk(Mi_xze;k5;K}DECDOEcq~2ENO4pHAJSs#2}Xfvu{gP;INzgX%t;(I*ht|v}#n~ zgu;&4fp#x+}m!RB2 zQ{Tg8u~MLe0_*OHQg@wtmZrF0dz?pczyA1W6xSiKA8QC%Yn{>~Q(0n+OJ&)&ORus{ zbBBHhnJLeNOqa`W2Sni7muDVie#$i~J-_BVzpK&&R`^RXO_Cw|9vSzE7#H{1x21BQ z5qgmtAoJ~ddndutX7q2*yLfkg?eA?+@y@B>{wKKk=cGl(Ln6w>L-uW{JamX1!G>~w z2`A5rFq5>U*eKNV6{A}3h0BS|G1H)@5I%VOqZQ{0`N%0a>(a!r=J$XkX?kMq8T{lK z6$e*3gn1+t55`9(HX`07Hui1lVha+`x3R%ol(gyl>G6$h;=riY%=+fI$u9^g8KbE3x%6@R(KXs?R+dEURYX-O`zI$%Jp~iwpRzWX{&{xvQJL zioYsV^920bz{6cQTq8_(-Ak@`kD1R5142Atv8%jvceWYE_xxVf5m>P%`jrNJnU(Xc`nD|yRpyRW(}+}oX&0f-K)Vmqve!noZB{v z#!0_yh&o>f`PlUJX{{ zv`W&dv*F@Z9ZN|5uY>Bj+W|J_4sXtuY3qAm?*K$J9zLm zQ&f%FVNo^cm#rEBMI0P*R3!kms#IqyHPu!f_EW7o0ZnRQDUK@j!jcSJ9c{AL>8-#5 zF6s)S@3Pv6+eAI0U!oqV3wYC3NsH8=Ri#5sYNoA2?5D2|sT=gqScafM z`HHMO^WiAZJEm8Q^0*r)>dnRNqTbLiNpIYF9~hBU#+|;ZwB^&(I9prTPk(K3x8?Vq zB`Zp$T&>Hh5>AKp&&F!e6mJVfUAg)>qOQ;{NmsnNANp)rTfB%>r7!=2hh)kvGw&)o-yQA2Vn&zx8-s^T zgKQVVe)_9~(~4=#D5wITB!hX6&)wI*1JBxo5utoxbhYS%t9_zUydWVe1^tqg!j*N` zAIX~GN?uj!aV0g)RuA^mUp-t+c@gI3Is&H~&1%UgY^lNZX$3P|$j{{Jy&(s*?_69B z6YIfE6*cFsU83gDFI#hhOUdqZlqeXvs`Tl()L>hm*iW@S1-I(6SP)k&ItG0h_Mn9| z!v3Q-u7=4Lp;@BNd}+6+GxW>W86nGOM;!$bKCdcmI89BlwSoOqYlF~)?_(~7?wBc2P_ zxph@~=my#s!n`@Y!S&xiZ|>7XQ2{kv!80Q zbMk+PIk=eZInjiBEHWi6ywzrpg}Hgw>f**qI;Nh_#SjRhr{&rKmfPKPc)B{qpLLyMUkW zS7?tLw5s&y8waqNw*Ii68vSuM=vl}ruLjjBk@dkIUWc<1MaQ41_?cnNDGDTxWExYmgqL$GwA1zZ9H2ge2HB*3B zm7ZNm&9?Q7{p?216b(C#WhoU6chpjbkQa^ySD~JH+A3<>{ZlcTf^ATZZyo(tY2bD>#QqUY5r)JQLX09YV5LgJ=cB^&a1~_-}&Q5$JVTy zDfi~<#&qwd>AAXD>)qAJX5n?ld>K|Q@p=@%$BOSI{0(r*J^)YN5%CE%K3y)t^$WGy zmYJLL6<)ejPogB&L-)W=W%4z+r)qAjUMxV#sdxS9$=?qtlDOGwXMjGogk#Y8)>*==SG*g-H#M~wk?@zo6W&07&BkzF-2 za2-Xuz85Y*VEbz~(zm z`T?*w6i`JU06G$28OKcJyH5AQLG4L;nheTr4KvnndW+3^@tV~dK$2W??}UqPxpW*B z3?m@U8gM1tM(hD>1;8;0V991Vhw^61)qJ5~!2LtBy@$#T7!q%`HG;o&3iUPTM5$h# z-8$4en9cTye*l%bf|1Rv(K7LyO}HHeE-C@Qg>h!yFC%j$+2`TXU%VFObN4}db{|W> z8SXCew0j!>5(&oKZ4P64XUfbypyX3uJ|p-8ivpuC10Keh13>%XtbmVE0T!UvsNjC9 zDZ@nZyoOVOr#sfzp31`1;9eipinoQC4IhU>5xSh%Hk@t%7fy;EN#{Q#lUkx}qsQD|LF1%jFkz&T2ZlHsVbB4yH zGKx9Vs7yg};%lsmPn{Jr7t5JO!K_Ud@@drO5l#nQ@#56rSTcH=_8+k(ZU2;rnZ}+I zyh0ZIeig1d1YmQFNf=*gR~3eiuP>o0%&8C+Zb4b0gFz2_R#OhDcT0)Mm$Hx+<7RB! zFVYI_Nkbo6u3pD_8s3ThQYnXgZ5*cGuy?#&sXvyr8F1&#W$Rw6#Gn;jcdTd@i*T(v zpzcwk(v=2s8p*CQq24ITf+rs1ZTi+{#5P&>*F4O!4*$8BI#Vthv)F9Zw;%A@?|r)n zDVZlNz<;O#Kp*6OP?=~H3Pnh~Fv4no;upoD&C&_1H*qaXd>eJsmX(sB!{tx_0?Zj6 zfiNc^Vc=a03w2hBa#RO9o>b~Ka=|Q?ek!){SyCZO%YRK9-@NgZcq$3hZIOf%^U(1L|@xS-|! z8CYL1;0n9a9y=x~C4HLN?uqsXk}`ysng086Q&>wLi^<5TOWF7jti z8plziPVx51K`)d6fIKSYD}4cwxPi9;Z<%!T5p$2i%nL=93p_tFG(L7S(=KgHNZM%W z8OFm!h`oyqj6;rb6Js$dFDYxfN}82QV%k3_fw14XD50$SPJ+jU#MJYdCf-L(;}x+k z+o}vui&DpK6#??AKw|tutcagqM8+^G`i8e#+3{~cos+2GsD2TIsCh4HP;NG&HYic% zR^bnzk`l@yntC@#ZB8(%pZIf0oUCsHKb0@zkSodMfLDGxLI>UzGBvY^b3^O7*7-PB z@SI@y1spm4iBh{bUE?t7I*j*=Ubb$Q`+T`hVD=2R!-~=lD{!rL8ty4AHBcxCuC34i ziby!b@uN92eY^-=E`Z*qqzJs3V|OMWRmwi0I0=4i5_(GW01Pjw-@TVjVac(v;H`18 z<=mCGk*|_F4%_Wz@+XSMOdcIZ;yKKRo{^*jT~@wc+X?rq8dzuN02ATxFT^&oOS7RT z2gE65tbhpKO)qlK^WFa^7ExqnU>$v&j~jm}0%je+m=ZAU03PI3$R$8r1T$OYR#RNw zavVW@E)cMRr~WMw!0e_!ok?f54qL_ps0F327h#eKM@_=ucZ3%w4}PgLvAn#J91MEP z*{RW~{U~({ z`Bx(Qc_q#a#GFekmUF^eO&IM-k{t!z;W8eFY6Du;|x zrd-_3ri0r&2#}GDDq*HFCYF|xO0%X7tx{DnOwN zZ)8UH0-9^K3ajBHi3N$BRzbkB@);X*R#}YoV479Zq7ns4Yt$`BTL}TvD_7?%Oh<_k z90QGGxnt=6OHs_wKpd(hF|dRwb2ix&<0dWpTM9l4=+hEP^(6(LhH!Vv(yWIl{dOjw zDc5tXrdKGvV+IyPxTTy?`eD#ISV^H#bMtbhy~lnnHmg#F{V}_M78qay!L36qHv6nE zXdHC_kV)P&*?rPH8>i^3L=o>~2Zk(1fqz3eXC!Aqs1XsuP#dIh*y^y|Wu2DFvQ!cV z^&sK&aXyaDDP2VoX^FppvFQ3QBa3J*rJlo;tSPcQK=es-ql74x>-p^56t7L1v5ZS- zi=KSVsHSsyn!9?nQmlEfqUowp#g6(8B_hj014vJC`+q=^n4r=$!yt`JEJCJ@3>b$= z%$ezfeNRwalUoQ|rcok6ry$T}@OdR1XKg3*Gdx;e&oxDMcGC@*N9I$8P;X0FP!=9% zyqS&SzM=H0Foqp7YI|r77)rTC$t*TSY>kM{D+?kF_R?)-FKrst!W>ivD|-dBTm*iQ zIXBtynzLqlf_0@GJ~_YjH=@DS>ZVaRSY_*&DIWKITZZIku%8@-x|s1d4>GHKztmlT z90b@A8eKm`>5yj1Gi93hSX4HyHU~uETtoUeq0VrD$(?Bt+fM0mb-JZWgxRRXkQw1r z3`(3MT#;pUhPn^{#JOh6QJhho!I-Sgr6~8-kcjvjbm2$&_nIVB)7J#)gKRfZN9{uZ2?PmG&z%V-P?U-i+gN zG4}lC0M1ILbRg{M=XD^Q`fmDxU?~SiIat?oS+{YIo1paZ3D8JV_G1jv_Cm0bBCZ9@ zbDfhzZ^1aHYA5scbdK!nECc#NiW8QKydFMx&tQLq)j>9H;JsgYK6= z;0`C}iqmD9^MIl*a;x)O7aK$!>?n(J>KjDi#jj&T$@K{!w279kB-E9ZvLu=eM&oO7 z$vy62V(YUoL&Kfad2Ye7lLAVr^#eu;S2|B~E_)Ex-Ul3Op64OueGeDwnJJsI`8vt! zL8W89u~?x=NP_ez#ffga%F5_d0;=^sxIdms$SDCruLeMTFonSLN{XPHq#FfTSVZOx z)9TQ|b4vKkBxqZs#s(M2@a9@(2lDz4kZ{;?odAmQQLL;;m3*mWW^g_hR<)M0UzE}@c(HdT+{PUe+nHd6LuqI@?un{k zPt;Pj93l902SH9NAuu$-f&UbADX^H(3!b8eaVAcPAV(`3nGwiCFy47!U+l@T_%u}x zuY5fjJIaie#xxA(U=L5Z#CK|WGM?pnEz@Y!io8-!hNQAl*cw=#b910aNfv@(ABr11 z?+b=iF%Pfb&z*yn9V(wC}{!I6=z zecpB~_~z)}x^3IGfqrj8&iaxyI5<2!G^DWMKHpllZtL#@%DhcE>zk#2aA=?(Nb@#k z-j}k0ts_H&!$S(Ij``LDnmDqpZ@a>_o4$EK8wa-y^^YhlJf$WM=e~DN?)P|`l+s7q z``u`z@p{$toDIQ{@1u#=4yK(&c|r@F2!dWKP2ti5VRA=pt0XD z6+R*fX=>_3rdFQ9QOFcTw168^PFr%^j9Eu$Ih!%&I6e`Chgaxe_L=A68B)q1wN#$s z8#blj^o%m_!!4UMcxXwbOT=!evx+TtDC2=-etoOVjp>!jUYP9$x)Uwl zsZkwpG-MLSqYdnqTYQG)dz50cmY*I$DL5xyULkVQhVtQKZx!F1+-&{go19wDU|lX7 z&DnVvahvh4N$7r&#OC+J(iw@gdFHg1Lgx&RnnK1ZSe2S#NJ+P1Rk2=z;+7$xD8-p} z|D#Yalv3mTZ1SX>%r(T|+RmXy$)rl)@5!_QlMGc9!u#Dd;e!L9UbOa^_(RdKuq0Hk zg0nc9lmIp>YxOFe)j837pi!iv?Df{>tzvaHp0$Iq9!Rs;ANx-cjUY+)_6F!4I?EWh z&__KQc_ny7cG3zEi;~~8$pPp@zKDzI3fUxHC=vxwS>YF?vp0}zR;xG#4zJciU?uq& zmUuLWaS9~%Nr@sc^mw*{l(s~Ql>>_{XBF_~Yh9FsY)0vw)?}V`|1C)DfO2pfFp|v~ zy@?oU)w8KKS4#Kp$L$WA>7TeB#Ez|f!c~zZwzMQRs0GM4P)=6MGk8V~s_RH(fG&ZN z)Ld*%>=gZqLlOtin4sSI^dS?Du)#ILo2^2s`~%d|yk8{JQv&uPLD^&a?5vv$DkKqH z2)oWyUrbvn#%imhmuL)0CBqynGMRZ*n^`Q8eH_O-_17Y6dR zoptP$BFnA1jaoXNhrLZye&-5tIAlSbrry=+fK=5V3mWWG@*=A+4hQUHB+&_VR(R- zt2R8QcA@}J8ugrvZL519z)rw3*)p~%VF3ckduH?SfHm;k-A+h5P_A3a^NQpo3~=%_ zekil$2AI|AUf^?$9RNG)Nrv_12Ce$>HUSL_!5~1iIf4by&;mzss6)syr}1a3L$GcQ z#=TG2Ry?MP{tzqy%4$hoh;f5?OGr$)NpUJd?Mw1;!566_iH;#iKITq_ErMLqCsC@lhSOOD7rB z25N3f$xt(7WGVCNz>NB*Dvk!RGr)e!?yM40XNAK{(3(si?)`~$B!Fa1rGTd64vY4UNhTGG*5|QXBDCU+Yg)6bM_X}v&>B~84{>aF3m`o_Mdq$H7sbiF=rLi z@j|c|0nzdz9GgL}p16iJ`&Ul09RONQWfuc%cns=2k=m%^CKO0({hE>Z3Oe)6+GF&i0Mi=g**w3s*3KuyGVejTnRdBg1LFPZm%e3FT@R&J4ArcDVpJ`+0T~ ztLIM~S{>HW;(m~D`_ZNnUg66#mkMIYK^C01uVHf;Z+B=w@dL~FY2v0=_^|Jc zZ(dD$6K{qc-@Eg)$tLc#LCKT8SMsDT2K6I{TGITm8-d2t3GzDq)D6U#%$0tr9~Ch6 zFoyUChX(=^QIs7CVX0`oyd@6<`+T9dRIX4LYTt6fenHN}r$t?La!liKsj+gwOtL*F z34RX+8{|4T+y_j%OZxbH(p%}Astka7KE-*-cCtFj62mhR!yV9WIQDH+(fgm}cTD^{ zvBKL>*pGamQ7A}L6>Zn>%VLVdL)6p}PXA*bi(ak*0o@j~Zu|$vDA4&pK!lqU0J|tf zAu@In&YFUL0V*abpNx{4{bH%v>FQjiUfwc0+_zl_qmab2z04k&rxJ1FrF6N9H)kZ_ z$R`}wV3%h=mW5|C)nUD*#V;86meGA~F>0lLh;>VKIF~Agx`{hPwGgW+=QBxKxWCq% zJ2bfy>PXzf`hX|F4f`-(CXg>;_l)i)ble}!EI!FC{yd3TEDmBB*hhG%T&8K=K7Jv_ zACSO&aL_8Ca8crd2!%0f9m7uw5Z)|yw{8^36!;6bS`aoNVJ*Ijc}Ah+d=~dNz!fYs zYH@M+c0UfA6yZ}~fhyneCEihB>PYz(=5>z~!&8wY2z4#~xoCN{NQovP5HymYlebNjbuX@*Fh97D8Oz!y_&J?%*vXa_)lDWQrnGul^(N`z zT{v>Y=ErT15ew?1Y_{9(1}_fTnZ~;k!`$IYp`7n z?Vy}qVnM^k(fh}P=!9+0%k=xAFvlq)Ss|PF8^T%GL>aI3%O|I6AUT}hd1VZ! zae@V0?;-6LaZ>#DtS;g=8V#j>$^54IB)6Y%>ZL(ZyBi>O3(YUEmb^Hq#6bYIy8)sH zj{Rj9CE~ax(G3v0%4Rn}9L2P|0is-DU+jWL9H6$}!GLTcNfe;N@Bs|1+x*&r*9P#B zx`o&~yC@MQljwrR0hCO$8z4%i-3<^W6MvA=7}yw+OgBIpUv>i|$(+|qW&kCV=z@=f zB$>yt9_GCPlA)ddi7u+9-T%#QswSK121qt@oVEJq%l++okmj1Yp%EpM=%z%JOtTvx zN~YZnkR!2GTi`CGVvdGQ8h`X8z4%i(+vk#f`rZ-Wb^w=(@S@L`mmENe*VxF*G+P+0B*e1nV?N#iQXx}R4 zut`am%g6I{`^F?3kFVn$I6%u;zEA6C)KVLaJ$s{e7)EJ;sqkf~o320ww=p@mT-Vwk z0I0UQBoilM4#EYu1$JOY-F8@L$88*n)->Ck3FReR z6qo+jD+7e1X+~NNxyYeMRnUSl!%KXS!#?y>sYHi7^x1ven2=oLIUtIf`0~;-{7OQn zzW8)jk_%)R2i+Sl>_|;W)*K8pl9lMOL8+9%0xQ88<0KHqK_p> z7e6L(qde@I3u;IEW6E|o#(_cM2)~5v53ckvGYqyi>OdHXn$byC0($^=rkWg-RDU3_|&woyc16S1lFZi8K*9qTYtUOECoe0Cv&@m@*(L+ ziIzBmXo`JYBmRDLj&JFvwxe)iQu*YO3iM@WP?ZU7mFQ|uOI6xzAXi&4GS7!Ssptt4 zJX~QD!ZHlZaJN|zj3y?Tmk-mDaQ_^x2L&}DrZXB^DSwyL1fS{-O&(?x2G!Tp)`w=( z>ZU$$)Zh~uG!q|GWlU05AL5gZS`H!{*x(l|aV`1iWIiB~Z;Mhe5A-r;B$P#$jb_nQ zqe5r7&1B7NWXj4xOc#Ax#W#2CZl%>&q1OKVtXMN1I6z%Zb)$X({Z|e`1(?1+2=SRC zLnt>P`7nzmuD(FbqmsLC;YvL?0sDK))h#oyq*I!iDpzN=%x8B)pP@wwJgP)a9Y2Y7>$a?Ye znwcsN1^{wyh{eR?)W_Lew6JuE>}Y*f<2}d)av<@Hruw6cOdk6=s#f&&>%XpiESw~Rg zM^AuRaDO0ON)wkhzz6`g;{@vKlMr@&g2G|P6n_gF11!h_B&y(C4D79&D4#T)gIO2& z5ama{_))l9rNrzW%3lb;BPsUC>{sIQjfz_Axj!!{z6yms$9XLZW4EuUQPgrc*@B@a zAC_(46CIDZ3gbmTX8|XOwqR!XyEk7ujLW>%skivU*i_(AD!?Y2s>1)_2o<_bsBx57 z4%Dspn_PjxB^=*l#}D}avA9~Z1W998laln*vMZNgg{L6!IT`$`7dC*h$5tV8`|thD z3j!0iha9JBh%m^|Q4bacny{0sNHp1u5m4yvnralEMH(MB9HZazR}h3w^;$!z6{G9=oiVG`lAwx$CLXWH-C0G0vO2 z^_Z7AdFV9-XiosNmTSOa)RQFvzA*qkgSR?m8-+=pjnNWQ=MY#=6NzezwN(Z-ym8;v zQu{7P0625Ov5EJxKEibvROTN^4KoEwAaS24O}PZnX(mYK)j;+!<@AJ{i|U1I$kA?K zL}CU+zOrH^l#1o@%ajGy3V5l3ZHt{#woMQbP9wG?5vlc=Y83~r3)evEz z6!6uyo3u|_v5;JV>s!%@3TrmiZ&M(DuYaoLdCw)U57Yc00=y5?p1#k(c>~tJz zN-n@wAfZYOmM%zDs!$j#J)lF;{(_Dcg#(};Xi?}%9@L`Hs(zwHp*AmSQD_wfug+%ztlC1_8+X* zl{JjQi;b`#iLEC2Gz{iI4R*hP%QhUPs9 z5J=-%B6nTV+3PooJ)IBna@9@)td)0GF3{gp)9+Z}FluOAVwg>*fI@BWQKReth;ArA zMFH$WK&+fE9fq+(4Nx`plm(T@Ms3z;P-3WxKs2E~HGx7i(1a3N6dFfTi$X(7sZrpf zkq>b0dM7+qbdo(PDNO;Xnt-0JqArj)0;R&1j|M!S3)|nJ^Fz3r&47fuC)ssbRQm=# zikzcx+pAU9A~@s}79$hV_|c}B=`W0oc;tqR;2|$No+=~ZcpdDEfkQJm`M@o$vf79Ts zS{@cDPM&?`ItvV-qWL9f+L?ubXR=&`O(ZvQgKMb^ade+HQO)x#cmRrgq z3$+HPdXD3X9EA%@NOSL2{!K8^U^_Z#nxS0~U7lT!Koy0soT`6Pj2P3TFiE&Sh}}++ zkfs`K3hbguAfT6Qf=X8U_Dhx2STdZfmn)p@)byPtIPj0E1(IA;E0&cN2dV7hq!@o) zfNhJC$pYPS*8xR$f{S)E%O2o0C5;ey(0kCeqbu=ZvB?%xCX1=7%&O*HVm=!$2oBxy z<8_@j-EiNdMiKAW{5TZV#|N#?yG`^ScEtpSvn*^6p4AzuV;3nrwVLb-e((w}d7qZO zJFl&CIxIF|9&!Ti=HPD@E~w=wunhZ^xSAOP3j3(bwJ7ZGHmFgSQZjuJc?EeECEc<4 z>(svuJ>+I}$qs5Oc4=4ZP}?vp@6)2tGYx4`G<=l&mx_8CifU2Fy^a=zl30{bKH3CN z+t9K#xs9%;JyX)Or>ZfiFtP2bkk>|&urZ>tmd+30?0g>X(}uk#-kI^{w={OW4F%gH z)oIt|h<^l?B(6n~_|>Q!t*1`X1ilqpOOtB~Rts6YEsLq+VOGxp^CU3DJY2R`tj_UZ zMX_TvpRN}xQzO(}PBPxJOJ6OD1bzrtHrZcK;-m%Ze%Mu9Z`QDU1pB~*noZ!9Vb>>Z zdIeBh9cj|#WEHraf7cxIX#gGLVc}26pW4JxdG-CUp*fEk0NA6BAB)hVZLtf6n3RDI->xk2B4rbyvi*4dP-$ituJf{2hSp2<*@VGpl&ojZY`W0M@cBp}@7T!u zX_KcMRf^dfFyz3F0I88XvG$vkWSKTuc#Ih8NJ-my{Z`EKnUVo_)|8LaLxZh1u-V;5 zJWrbC2By}`BZnrCa^BGT3#8=|b~mQn_mG}6i%M#7ox6e?Sy>itD=EJ9#`xnT+#kIxe;~;no!T^I@*B8?18$oYHbGGfwFL|$ATIr zG!=b*N@}X0AGL~GrBX_js?pKX_zUB~?B_SCzX4zXo(FQ2Ws04bzyzFZ|7yMFRM)q|x19XlYC!ogYMEn+Skoi11A zU`B*1Rf5ywuTJ;fH74LrB8--I&fv9%?Qv$^t_|;kY_U7K zR$Z2Z+K$e;siup@CX5e5$E`^Rwe<+l0Sg)nfJzqG;Z1Qd5A?xuPBgY7{Q+uIl4e-4 zw*>>1$w#+PfG}=vzFsLuffdO74rj#=$@SQU3Mdrhf`qb25WIux>`MDXA_3k^ev@Bq z$)~7D!kDZrk)%SQt)JDR(D}8rDC~FV)hJWC-FQ*zAZ)V0GgtYZXV_na(_SrZK@Z%G zqZk_qXAsIIEA)s1TsvDL|ik17CJY`;EpFp{H=y&>3AZ0~Lt zX${qEuO0gbu?QRI*l~X!hS+0QvM}{o)IcQ+QctRE4(j@X zM5hDe8x4~5>@UpP!OcE^K7W{r?A5nQ9snC}Z63>wuukuxDN!Hog5kOAX?VAhU0M)8 ze%n{SdJm5#abf~*;Khc+MWgHo(AWHis8SZ+?8@uu%C)8mho@jB+REiFqOBf7THA)$ zo+0`_)Hll;+fR+P>j9JIdy8mo0e~IJqAkL#Gn;rSvf$UGFNsYOtKi&oX6KsfN{~mu zGqh%EEdB#Xiv31eFr3=E3HRC^;5$%x3tug_uvW@vv-X7-*g3TMQpcalz+z=6i+7|0 zqRA1i4fTM4#FRQwG%M^JJ6v7mnBV3~7RDjeHcd8yZ2G_O)uCAd+;Cd;n@a$x>gYl*`6y=Pe(xTcefnhn%DmaTXarLMhZu^HP zn@0~#;1d>2DUNU|hVi?NX{nVEOxwI!c!qj8E0 zR+xaFp3z zIC#Mv7%*Ij&tuX!%Tort;Ea!)Vh0c2*_G9IwnFrj$hJETw{Fsw5oFfXXok zlv$Bf%5J!ghxsQtLr$FmIOP%+Z(Ca;+M{o9!zlt8{hR$}wqSZ`cCOcHq*@V02ZY1N zc7cU?e|V?3Vq<&FUO3-fgB}~}m#jRdbdff1glvkSx~ZoP2f)puNSj@D3Ew!d{76#m zAb{1D^*C`uLSnOB9*G5xke16Z$pp6%l zcu|LNz?V3{-kseQ zo#a8C>);3%_`wqK6sBlu7*YUjElKEJ)+z9657(14{r&ylB6%DDGiHldVw>OrpX>3Sx_>=hEhd<2Xhfg^e0@}H{~gYo%W-s z?2tLrC>Yq-d1*1$YOI`>&A9B%n}rO9^LwO@JR$AA)D}SZipnK4r4r<-ExQ3l0`~~? zj&OZrv4;&7wE&0Kajpdc>WxF|F=?c4mqv^SB5{imy{-e^0ncbaj+DAX73;?_Nc$+W z*Vktxdlg|g2ASve%csL_I$$t|BePl#Ucct1>tdZ0klXphYA^&IS2t6-k?#cGh{oO> zQx&xxITn{z`fQk`s{G#GG4Q4)JW|0m2J-bude%ig>jK(Da7Nn>;aDbrzauVf>-Vb) zGU9$L4E&P8RWQ2|@GUi7;QDqNhpJg6z}U5JoZRQ!E=`1hps8CYd!_LdP}(Co47+JU zk=s$N;ymKG+Vs=D?Wh*?Dt%;t2uW>IqhL% z&=GZB5R5^aY90#4pfbHogF&(9t_v;)Wqw{mGYS0q;Bt`Lt>*`0kkz+O24g6~*q|wh zE|Pe>t|VmjM3R865~YezT@J zI*eY>lthmJjzNjk+b^KjA5OVxKbRg96Gdd7*{8k+ZIet+M5<=a6 znX71}n@4*1oYxoSUH(F)bP0A`4?~Ic>0v07gce3US(3xdO+^aGSc1aqf-&FyvhP!wmLk{xE7QFYSapTQAT?&#tueFl<8n z9IMp7wC&gz#Q9E_FA{B*N!nJCg*gve`f@*l*p{B(vhf13w9CzU2>9_gqtbYa$Lnli z_Scz9vzDPz26rjPEkX^0X!Wr(tetzP1{EO`io`kWmHsefM?w!nlS%1eDEOuxh9=X} z!_Z{fdKjsZ9)>0pdmrOl07FQP^e~h{LJOntB&CO;6qB7i^B%|VWa>TS!qA^wJ(a6T6!2NKBcIhmjfTVI&28OUVpBrfmXBp{*^A&P&CAp<^!{g=*?yBn3ST%`ox*w3U)G)WgUO z`9m}Q`nC7|dZUvcRSYdAJgj9%r{Ikd}FFmX>*D z;3ccZbT8ZpxMiYoa~^hnZGk-wMSS8B*1OWjw^%zN99%75ZNQzQr7dtbIJ|rY@0!sK zk2O>d{^056y%cged6ru?oHGED_*sPWTUlg$4^zFBmrlH6_g$v=YB;|xW94PTv)sUt z1y1t4lC^9Kf$N9C(BRqgBE7G=IfMf3!hr1d&62*ZoE!M+2CiR1AW*~&3W+f$N_Lth z1nQj#1D#aQ&~3C}6q+<83%V|B3v!4T{oj>MG$Q-qk{fH~lCb23&1~jaGuh+owjYwS za9?qxRD=U}InQ%|6-m(Cy2Xooh|n%!pfO%I!y5!#H#kL-(&&kqev_Z#L=W~(`1X4wl=5;<3A2M2lwhex&!Zkxt3 z4)gVBs|-lpIxswv**1V-PR5lAPaHwdDYh4nQI1J9=o{>{_n6dPpArORmCpGzrOdL* zI>v&*T`I^}aN@?uns7}WAY1$j-s&x0m8#jO_`}&ny-JjQvI?X2<}~vWw^Mmm17%vL z=f+DJbJlyZzA2qTk~29CM0v&1teUG|p&;8P2m}9S05XgFYiuj$4&inx(xTku%2n@{ zHzi~7qZ*^+N`P3TE^?RDMfw#fCSL`*zwIy;7Dqg=2p|8&%;LB0P&1&W>$| z$QBG1V*O&I5@O-#T+c>TIQq}nK&X^69Y0bnz=LCOSp;lbg)_QP%|f`=Dps?n2>Sx< ziq3~yQPrG+>l5;ox z*ipu#DjfT>M7V|5=?QpvRm2?4L70rJS?RQb?D44rr`xh>>4~70-FeUwY(gyD!s-2l z$+_Y*dkwJNVq+e5JbuNBsbUa5)^4{Z9zknh2I(X`LW<04$<48b(<^RQ2?kJOhxbn` zXQD?|p>e$R3Mg$>#evI;33QB>wrh4Giy1H?S%|E3j2af@(nFQuUJBXF%ymXJk4FPT zkmnvaO%Ly6(M8zp?@K}rjr0mW6%#V8v44_i4KMQR$LK6|kcA;^dxSk0TCtu(z+DWR z5kH8E5g19v_c2DW4InFSzhLLI2qTvsn!?rccnSZWS-MdLUh52*<;}=+kEReZoaK+E z(O76qshS0P4-e*Wqhd@VGRDxPM;~Jhzi=T$lgBVL6_GAR#_aa@qB4A1(UjS-QfBi3 z%X+?`_1CWrd8UE(NA}1H5}M@z@jDy!vRT80Rt$hb@F!TzVFQmb$7&JDk1P_zN-KW;Gr`+5gD^F_Uns`+1M8+qhmI{F9)-kp|iUg8M|qkUuMWk zeUzZv*bi6a(!=y7qjTv(_>QD4GdnbbU29|V$S<^7z{&2Jg}YiZwa~RNR*%ZVVp!6Y z^&~_s#IR&OveL1aZ^@;HDNHt24PBNAS(f2aT&>m1+0aRD$|Q%UAatVQtSrJ1OUDJ4 zmK+9#%I-2;KOAx_)sBqS*uA$SV>Qk>w4$1GFlNTXSL#F~BA-e}aoW+T-FP+)TMlQ; zO!&$d8A~wOS%^&eFxcrt$?!clHH<>&?2bjoZtT@Nk+B(Ow$ z85zeh7Fm=z9x6|Yc;Qs|8hAqTfuT}dqSqNhCpjULywYd^g7%4W)hs5BssRrJS8}+D z)!{pd!djH$bsXi3WHG+^H>Bd7Q6HVQ>xpW21Kk)9=cUVc#x7?=w>&Ll$su%oX@;vW z0<&qpL}tfIwNWS?1FD2vdYI<9-$+->p)F89KR5 zncS7CG8i;HV^Dx60qo60F+O`9(jG&>Txd2eI{mPl5<1)4GTXzn@ySWr>=5c)e?lgA z#ad#*Iw$PuKWxmvMy(3F7PW_K3E!+0CQA-G^@T3U*sNslD`kzK+%%aRopK+|XX?2s zF0F>nlSE`Zp^3{Vc~Z}X&W)zT4R%-}n;l9!fAF9~?h3X_%ui*6s7Ev%%Xt?1avHth z-3qsKIAJ+M2WL8b|K=O%0+bc+;>eiO4P3b#=iBr{-@{CoFFiY|9ny43)Vy>=YsD;a z+|4kCo~I)#oeu8t(s#csVr5O2;Up9j=NCd`CCG5LxLoCnT31TF-idZ|8$s zuFHiJp>LH-$UDSBBO8XG2HqMT3C$60MTB=wBBHn%5yiOQAMWpthRtnx!&YdjF#ORyFd;=Wppe$d^?tL5QEBXq;fqU?}XTDo)w?;7b0UWgqeT`SlV?$HUS z8`z5TN}XF-4EVJ-guKm+F6C*S3bpjz)>UtHp!^h%)V}c6P`Y+}JqH%zQ4>$|lJ9v- zXeC=mN9V&W`Vedafdk@vtT{>k4;pZe*Ye|VgeupGy7?-#hLz6miCDUqv952arpu*lex}!ocev&wf0~>> z%RXV|t|N=3&hk<(ESE3tQXS4<96rkT}|k8FTPCh*MMXO~C4dId6 zmenjAwz9{BxbcQZYg1{sD^vkSE3q|ng4RFOMKg3-6OrgFIh~bifZWkE<&I`$ z?n~;;C*iV^&;z#^06P*NQ1bDA zW~)XS(@@I4lA5)2h3$rkAVgpyKHYX`57b$am!X&M*1M^D!k9J-Nh4pKgdJRI#wu{&6mPkcLtkd_mU$O+7pN8!nOGYyC9qjGO{1!xGe zhl|D)I3lEZHXb*#dk!OFBisYIs{v0~*U1&Y=GL8s0$eD7YrXR;9c^@@LQwxWTtQgE zH+G>98#Su%?yynF*XMwO)}^2TuCe8J*v9$ZM|NwYJ!FUbcj>767JOK?SM{22=@K|e zM>lY>EXB?HUq7(S;aWGc$(L$OEpWCc@eb)Sn24>L_rceh%bGptrg4&SzyFd75Vtxs zv&>mO`rb?7EP)|u*z0Du`BHey_NDNce3J8!IfMSAO0z^sevQyOJ}j~}BLBIwP=x`) zoJ~MRKF`^d$7a!V8=MLI3>XbC79=e4)U5;v~e?w z+5Lj%_N54#q2qjR!+<+73#Pa0K6@!TPEfmp(>Fo{mOo))4{?kK?mIpzDqU28d#zD~ z>yhW8@?`eVHugcOZ-}_xi?~&jjAEPM6z=ULhv@>-&o9z?-fI|22(GnkHN8EA}Dx)xR znYQKVG~$+3%^F;fTr=4?XSZ1}XYc|$=P5SWc_aWZl>M@3!X%%ezLD&ZARs`Umv;_F z+={GGN<&a4Qrb;Z5>itl@`lpP^#OV2I&%Mq3vvsx|BI&14BL3a0^=%<=2JXANKt&i zcbFU7g+B(M&UvrnAIzH0F7$L7=O)G^ZQ^B(3~e*ae*V8{K%G&Rm32S{&dwcEl{MVA zbzmry8OZh<+p{>uJuj6Nk!lDX6&@<gg3>qBguzw*P=-HgI5^@z%e+T*e+ zG%Y4ucf>9z>ZS?9y_ozY5O3HrbhKKYhAl)};P_>!7q@O)Q=VRqWW-{i2w;8lHDVvJ zLdqPC#hLEZ9yXJbzfT-?tgwpdIeZbx8?H828m@}0shJQ)(AC5-{x;X9Pf#0{?vce} zi}@04H^32Do6p(Z6GpMQa)YkTZiQKBrd&i3hFN40o^)U*<-;sBQ$C4mEEl-~4F)X=?&6goMmlX)>WA=d8?>woN0>i**eB6oIkJ~-GKbWjdDe%% zTuO!humVr_<*9&9Tv1hT5>6vHm88zHVy^nMSjmK0hnY^OCG{FrEk|?k_|_Di2?oqY z{%n;@$&m^W0;%hjsiW{LnBC9>r{PA4hBQD9R;TmGv?fPv`iw}WQA_9Zd&>n3);dpN zZT*OZkc4waC7j+-$eg=V)yh!}$xf-0@G+%%by69U&Z?78s^^tS6OfWn@_M2GNvG6F z=-1}eNl3+MbrLf4j5?_SNoSQw`yu7LItAHuQJsXLZ|t=y=I$>+QlB#E0HmbUDJbcR zItke{uTCOfD3g+qY3y|>`jXhHS#=Up(Nrg4gHNfGNM+PXdB}A}okZHCPNLpdnKTLI zEvi$nS?gb~YVqW8NJ^-aP|?QJNl0K)ne==}8BtpQ^HEp{by5YZQYT@9lggw~I6{w` zL&@#sw!feD(tlNQ1v@hZ1DkQ-4prlK<|s($s1r*tJ5k6RrKvG^E2=zGm}A%EJg7!j zjcMAjwCIxz_q0M;K*~im0A{+O_k;A9(pBt&mFtp8uPUzh0Tdh9(jK4GTFscc&cOZS z8+;IT19c&;PBlw2Kmnw0RHx^R{P9}jI3oJgh;pS|EN4-15^6xz$Q3dFm|rsNibqRJ zs?!@Y7K4uY0CIV>;gm9U)F>Gl6!y+(&?qR19+|B8VBr}D6xFOxaszrXDyuMUaH%)d z(429+h;tLC{gP3nEuTct%Ht+-3qR60pxKS7(@RB-DU{0edO)jPYY?NEvEDhn-X>S0P5u zq0SuhNjFWjYXFaIFEuc(Ms){B^BS0$+xF zSnrb#o}MwP#|JQH6L@C28qvMyJ2kx0ndwn2Pm?%Ih z7uD&eSvT`j`;9qrQ|pxx`hGl0I(2RSxN*FJ?dkDBRmRqj^yHM zaGrE)qdKw7l+q^=o*2c55eP}B5mi!KbsB7TVbV*g)1jM#eF;$ZF=hGzW7?>5(d5(! z^W@ZFBR@6KKvvEAVbD05>cr#Zyp?GOXL1y2pHZh4rbcslGWoMUfXvib1AC05w+MILTck5h#Y zsv*_<9P)oromw+!*Y`!A)S^+M+%e@S5V|SjWNvBXOali+=hVq&p)rGo(^eKL!_$4FTFQ^mq)9~&zI;xIOdKQMYGdKnCpbwy$ zYt)hNi^}vP=$+Zn<)RXBok5+oaRv;!4c(FngaeX_De?oC`Xop6Hnz z9Uq?>GiRr)sqzKoJj(4+EPZ22g)UgJ*!3< zdxcS0Vwp-pHE3!rb$^JPmZx?WDmgd>#?*Gb(#0PnAm8geH9k`UUkR^t%60SvWZj2X zXu|KR)G;o4zW(jl);b$d4RT zmV+(aSLL&0zKC&Q5-6ucAw8^H0%~TJ)HwS|`tc+|>f>w`;+N7Ig#)735L17_K>s8y z@d}_pEa@*bpkV;D&TBw;T&VNqV9+2Q!0h}@Fo>QUIv0!?M7rZ&(}3tvldo$)$jkUY z1cQbKknV43Ktov4cQhcxT+m?f=v=E43>wBwMV)`rfROI^KL>-bw$6`&F~g_=sejdg zPz72V5Z(ON(ST_Gdq<-KTZ!Kq!ndLhq;w!6Tm#yM43Gafm<8LA;VB&m32*5@Bo+;b z-l^_Q)d($&(U$S$-f(yvcz=%ROIQd$(5h89J1=}^?P2VLE-(i|;{G)Idf&C$ijeH4vqQAk%ui^2{j{`p`|4D=zt zQaV&W(WOP996MSR(e(ulU2M>yLk*BdYf+>*S`=xHZg4`Lyro4EC$uP}EB-|dCk9DE zIuyMm*3zPgE-i}a(v84|h%Oz9?)UF#QAk((uQZ%s!vZY|?Xjgrp*?nVDDvd-FKOu7 ziu_7xQAC#xMV`E)MG?Qgtf6Zg#i3dh%CV(GjZg^v6-|vJNLNaWLb_U76w=kvp~#cR z|5`)WcJ!DjEs7+hK@IlNP*{s132EjY2Kz`tS`_MPONZ*GQNUM&IWgEzoY10(6IvA6 zkPbyYI=-NxYk=s|qDXVJDAF7qie`sWx=9^+8@Q!KA-_606#3}*-)cB9L^h;F5ht`L zl8_EXK02Qb*jsh9D6*mNYUrYeB~m&Rn_bbO$hNg8qN}5!Yb)8d4#gsOEsEm8?`dk> zMk5L>iuzg|iu#U@7DaS@Uqjaj@++l9kvGwysPE`#QAC$!;b~|)@k@(BIkq&YVVZ-9 z{~(wX!+l6sN{gbtR*NDpr$bTS5&xlvE*b@-v?!uWiz2#osQ=I2o4~hqRr%wuq|neQ zV8}9IC`GiTgb*CBiBn4Z96PDgW>I6OO&4m(l5DGyB~_9Wrxf~HIuPiBfer*HAfP~K zp*4HhACyAa&Cr3ci#-g`F~c%p|DWyYy?gbZo{~s>KL5|>=g$mnzxuv&&pr3td(Yje zSBQnI`t?$;P!45LyBf+u|B9sFMTh2|{wePXTX(IwmuG4^`IPNYAd4ctUxZkdXXZm$ z)Tf2A$f{v1e!Kl>h+aHa2xU=ehqB1_p)9ifFYD`tJ*{~vmro|Z@>qY$XE5iL0UXl% z8(e}P3gA!+ehYKH8^ED@e?D{m9>AeKaTjx*Zu|QbO@l_VOd1R#VeZQpF=;Z0M8VsQ zOu8+Ig!zx`W6}dbBrG;_j8ESGX8?)U#s18s-vyDV*#5$#WuNvp0oCJ!S1@U95Q!?n z&zW>Z5D67GzR#q6K_o1e&ki%`^#LTV>7z{gSP%(w_vJ82SS(hNE&jbANmwk#dL|j4 z@wZbq)uw-C(m6pSbWHOztoWt?5=D{rBP?kmh=k2p><>)3J&1&L&VDl|_ue29=FS>t zN&gu{qBx+RNkKkN6U61KnDoaWNm#((P}C0bae4*U`Wj2RAV?Axu>A@q z#e+zgJ44Fu)*uoVaAY}4dS?)ca`%?{7N^M&8? z0arqdxt1#DFIcCb8oU;BXD{aD+CJ-Fb~L48Bv?{V`?L-{)4YyJ-9eJbGk0@xBS9oA zyUHMwW`amm@BW2JZwMe!+#LHI>-5PW5;gXxv!qH833F$N#e>?XJ}Q=TS<<41{EbQR zw=FuI7evC`MMhcD#X%%0yF8P22aqU4w?c|#J?5@wgzXg6L{or%K^Tdulw5jpXOK>q zJ6m*mAb`|K(?pRFQJoa(+bLE(SQch5To$%02QOz?^MQI%&v+`E{kMTE>O7vutf1z# zvjdCJ80Qp&DorQHEMbF=9i}}kL>vjzo&p^EPi%>xP^q&E%Q0Lp%%k~fmKD^$cXm-HaW%7+e9ph-chYi2 zXo@t+Wr|M(dNeI++!Izp-I&LtVfLcs>34_8q9Ep2m@JwK3(X@9dKOCv8d%eMusscz zMcqZ1=TIaQE{p2pwIOwg7h8nY6I9w1%*4Wcf)>OhmvcL@Gf)=h(foI2%>=TrUA4ke z=mBWULcd zLKNT(Ns56zOdsaa3bR*VLwTgV!MnopNSlL0?M0!G-Nu&qVUQBZJH>rtN%Xz$l! zt+m2h^7Rz!g$?XE8ZtP=X9T3!MT=%;*r=T*KJ5_OcXd##9;z3X;|D_ejxLIG!ff9~ z)1!8Xy}BsQF+R&R?cyLyP@FRv;)PwjaXF;D@1i&-TzhJL!(>sMQ(na7I2oipP4<+- z=5e|jiE6ue+BQ@#^wrQjc42ATp|Y^nmP7iXu7;waE{cX`Lh5!GMMK74*(ZV`zAlP} ztdPl*E}Hh)ADSZO@j#e=@f2`KU)x17lO=Wgd=j(163D_l+F}0Hi}f)UGD*_aP&Cv<(U390 z{uLCHcQq6Zbx|}F6JHISqoru*<6-S;L(xzdP4XNH^Jv~U6XvUQUdaqAZHk6MTN7F$ zJsheR`l=b$-mgPnJrY(QX)}AMUc3n>ERPfoh0DTT)C}_+iiRp-9^Fth)J4&d6{dYd z(NGsfLsppf6b*%1f})|LVWrK{P?#6ep(;B>uWnuj4w2POF_Rr)ukH?teJ8mE2%4$s zrkLqiNFKX8(4)ib)lJ)xOi3}Q&FSVP<*+=`43ZhLP}5C^1C47qk3q8--4rv0YELsr zl`yMzVjFG5IK`kot(#(|&=e_Vvcl{|G1J2#?P@n29Q$4<3(N7Rp{z!F(QaA*v%|Ef zXeiVYwA8(L7h5%GcBQ+!k=d1QikVh~%Azq$m=|`VC02&XYA9yv=6NRZoS@mxZi<;g z?M3rUeW7|aRBLITX(&t<#Y}ccyxPq%Qt%EHJh7AmWu(x$CoR#=-u zkyU63(bCzjFst(U?yx-4QIE+`SycOFpv8~Sy*cigs~{HIvC1oWW?G{kySa&UNp}XYA=ec4vAiYZDB)^RX0Ue zc9>obMONJuS(#zwNRgHCJ1*^@13ViV&B(wYQmPdj^t!pf0ilQY8n zi)MYSFxzu%@;BBiXwIsKW_^~1rbx4Qp($dFxhpJ>H0xt6<#OB=WG{+M%KMr1fZRCZCZuKRr8TfhNH5w;u}L|k_3fqD#9YaFe0G3Ud-P1Y?EF`}R@`N~Pq!;C zw2exPe8UXBji>N{n@+aJ3vih@97;*RTRC}j?`QJ6octiS^1;kRsx-Ez=8IY7i?QkP zbgn&BC~U(QsNvy&9jQ3p=@~trpOCudR#b#p?pYW-GdsVEQ$BFB%h*^bY?vM&PZc&z zXYk(4irfV0l>!_mt%2M$-C5h=lNiu8XW{AdbaH3506J~hSHe48jRvSY;JF^4w)s%q zEa3k3icc0irl7~Uffn--1nQ0Ca$ETNc+;QYWV1gBkC-Irf?I#05J2E2demUv-)x)k zPSz24=LqiwUGU+!xx?sT!6$bvgJy1?U0Z}M1N+@JABN(v&R~EYHUXEa!_(%)HRBn$ zy0+bwMTe{vS%Fk6n0!5ICbcJ(DFQ3b1|J() zj+)e$?6q$t)_gwNKnUqlITBBS*f7v4%#)r!gl|S-SHXxb^|g z&a1zV6-widr)N^hE$|ReA)eWog)jL6{BjRh(kx$=jA0IEKN}f*+*83y_SK^l@ z;p*l>d_%f~MmEIAzx|3&3ON?;p~vdcSvp=XN7+Ve$ol`6}1vf{pfk!!u?S<5yzET_?UamZa_2VZ^wW4!90@pa^ z>bbT{#mZM!s6qZcwolxm_8n#O3tmSJ7O<(1y1w>nL-|_E6#3Q=SP9kgEtc z&TW^xhYo-qeqw#0bTZ23mh*g4z{%(;EvHE^3^$0-dO+iYed|Cb2QR&Wt*m>zh2s#V zg>t_NRr-%$V#zVL?0FzB(FAU+*Ha!`Tz9xi=L6#w# z8{ZScrGc9aS3XZ%xT&04L8yy(S$}(OPpUAU;RmEIU^nEjLnkV>y-2a`Bs_Ki@3JSl zyV~L6_fj0Lzt5yc@B(}^*E*K^fz#2n9_n;H3BBDw^#kB`2)9D2dbsISD%B6KLcs%U z7$7}glK> zLDF1@Lw_@SxFT>A=n?4B(AA zsL)eD71~sg9QAC4H=WOA_5pL=^uonbA(6}OY0u~Oa$|2j!2R@>pM<61{0y!aFRkrK zXX#l_>-k){UrS}7aX=EaOy&Do&>x6&?)ciC_MYyJ#M-g(Uf8__H`CA*!_l)`ZBAK4 ztVAu#e43Y~B-q_0O2tH}A4q!O<$ah4{6VfK&#WWCQP~oeJ08ZopF0jBdd52Y*01Hm zZHfr`HR1l6QGRt)%)vt!Q|TM9f{pKBqj6<$2(BZcmXSDX`J!)Qg>g8U)OZPAT8mS} z5|i@TOFBA~X&4)=?Q!xEc^o&Bi~q}8hVW~uP~1K~LJ_v{SLU3paEep$OeU%lWvlw@ zR3bjfkSI;%N3otPh);1nag=iNM#GU14h7`>oc|y>=;=lXhqhYyb0*W{WW&fB&ils$ zvV=`{hp&iqk)Btl9XAmviQ9U-R!$eUqW4JX zc^2D0p=`R8%w&#`~Zr12mUx}Ys}=awK6HLY?8 z@@^s(Qsekmhi5>D{vMGQnSHsIgKC$b>-BesvpbzlZi`RRFv7Z*ThTYa1X~1$;g$!r z{TKL2nM#!=bMTA?v>cF9Y#W>U9Tu9pRt{!8>MO@h3#&!tYEJ8e0XZk@2 ztP+wI`dRdOe))3sK|eDttj{4o>j)_d^0Ryx2@7mKjD+RU;ajS%-ZWQihLO;c(J&Gg zNi2+n_RfcqsA7ka(BiWpq%Q2p=E6u=L+mgTTHHu-0iUNhQ@&K#N;8Dz5Wl85>sg6} z&i+TcrcP{5Jt4a{n-uvDD_nNLU~XVI(XNBcztlO8NoG-Bn-qSG)%cWV>(f z#^LdzExFw8>AcfUl(*kUP4e#)bGyDvbK2W{g?UJ*yBVfCTA?G1g!YX1lHi3~c#G4~ zI}+jtw5!e9#=i92BmNB&EicD>Q*$#%tIPQ?61JyS7zr~s8%9F6D~FNLmUF%&coHjf z@c{h%B4sdE+XK*waz{v$ONT0r7@Lu!R3Ay0ukvUJ30ulYSaR3`w1tsqP!vYOO0eK- zAy3g_`!*j&Lg%(aNIYN&(+QI^LrAoso)06Toh)Axjtu%n_T@1MIM~OP`;J@u{hyZ7 z=X}MuM&ccVVI(Zw*)S5iwjD-7b63Jh=>PKyi3gnPQselS;&CAQz+z=6S?j#CJ#j%1 zRZF5B0Bs?m2j8_FM#7To2qU32%`g&$aA71glodw8a><90u#(5ZNa*3^FcOyVYzT=j zABl#AUo_S?Ls@9_SQv}88_tEY(Cp<<7S)GP7FFX=78=#|WhJMlruMPf5Niu%p*17EEM+e3CS@pFTS588ku7I(AH>Ud z4vPmym&Y^HFsqr#)J(eV_spC54VCz*Bl8Jt;!nN?OaEmW3z4H%{Vx7faz>}!N z>ga$gk34_C8hUCCs|QXBdH+zOT3K+H_1dmfPuF;AJl?%NH4ZGhmeoBzzOJ*kXWiP~ zuCYGg0xR#wN{KA)v4FMGhm}lGO5MHd)^{f;B%7?&zB@7IRUTb(S1oI-+BY&8SP`X% zBztv_r`EL)wa^(EG>#}brC`^Ci_zB`r^ns>c>j1m%nx6aoX9o*e}K8SYmA5SSL(%r+Pauk8KJIms!=lF%ya} z)9=&8)bQ{|+Pgfd1n>0g*7!_K(-m3ibz-7zoXOYF=9En`MB9|fbUL0f|jYH)BQh?W%;ni zyIcy;fwkX{)w?#)S^Yn3r4RVA`rsxt_YYWQKUUnWyzpOvdHN9eM>HZ zk64#4b|@LC%`Nq?ePJXl9MhLXJLj-@FYNd0z&$E2+|8 zx`_KZHb?hhkMVXTYH(8XSO3(V`1P0!5^j-k3TH`)!r!4pE-&BqvbmE(c1NVJ*Vgp1v%d5l@x4Lv+k8Lp7zSh4*`3^k2DN;2l>I;$ z3Cp3Zk+O+3@ltLo?Hw|rd$noa?8l?Y&OqJ(?8u52QvKQF@ZNZSC+!NTF;`g$N^ofB zs8jnnEVR^oKNt9Ye=-T1N@3fCUZ7UJPf$&tZ)O9(87}1tserGH^SDKDT*u8^^()wk zqU+Zd{*|94BFblw4c_<;J8d%Uu=x-AXWS6Sn_1^B;>LlizRGny4?B~XvYjZ1iH?wO zh>5OcHN-@>FE_-*mSeUdCWUqNn5hEnZQBeR6);0eaHVD)3_6mYO2MKJYWW&&PwHC} zE1z8_ZQ8E52^PVC7rTQc4t^JdAvNj#L?V?h^$0U6%sqijA?_05`tQ|>97z>RL$LHV zm`>8JZH!ANh5t?;zS88zlqR>@x2j5uvA}Ge-QC6uym6uWf$N3XVmo`^50f(0G>W-G z3HJuWR-#nxu3Gb3Uh&RH^v&jMX*iQk_JH0%YRWUnz?#}86O6oOtPp`bT#6UaS0iQitj}6F(WbLDW|P~;VKjh~ z1V%8^EgY=)>+2>AB7swRb6~PcZU=&M+dh#SgOe%6c1&}z+(*nUtCEc>51X2U(%aSJ zVe@f@oL^_2<14EYg?;%_ZcQ9gok&de7pGPWl1S$#Q-${ajs1i0wOR3&q30vjP?6Q% z0MVC*1=$uvgV1byo;J+Qo$qbGeI-$d7$m8b!k=UB=RHVrEWpicDMd~HeStq?5yTz{ z{2478`*6U|#j)HBimyDG39^&llX{Yrdt1Qwr6ei$hQOamxi<&?Ov=48;Ad10zpwlo z6Ka%$jf*qzd;Tge@z<@#*3|JAPeELo+BXb)E!76ke7V<8oUgoI2A(!RuBAEJh71qr zE%l^;Yc$u>u-}XY6}(GBGepB_*lStgH0)UOK{S{+kFZ5d6*oh$RP&83<2Y_kJqhtQgYi41JUpDZX* zd2KSO+D|I=KY@dP>EdKfLUxdD(DPs&B+L0(yc}c*IIvRp!`Yw@VS+lIO+xeHm)xB4 z)mRb6U0dTtoC&l&qfBEF6hoAE;LojbhbYD(kSzRI$&2e%Rl2{#SOSU#^8r(bVt)CF zECRFD7)e-f_tsdI=T;M8BS2nZ7PmUx~&}U4ALH3wR|Hffn#cp zBq5gN7h=_xHx~FpLj_I^a-|N{jkavRXsb4DbW20Yq-qYx+m2LnI#EjJvd&4TvK)=% zE%_>6Y3*0~wf40-kQ>X3O}rsoWWqtv_VHA@SW0C!GY9nL0~U$BjMGed95^Zaju2gOOW4lN#JOJWwwxGnJ6Uld4jL&+;q6 zsbsGPH!`>d;`QSblw^Cp1;65c2Q`G=KX$}7m9JbLLoXm2E%t)PKM(o zFqFrGLLfQ%T(4xY2z~*{Z-uk+@rjgslRzYhTqAx9OweIBW`=$N{oQnC8ofLg#06EP z``}vBR)=_bs*oN}C#a%<%#I)`o&}7;jv_d?j%i1F*$fB0)dtNlmY&$o_caKk<1U;8 z@E8ghSMgl?iXe(oMqNQ=LiL?bcbZ&@1$GRx#Pubr)&N`#kMM`5Z_C?!DN?gOe)JZ zIx3@5;pT@4p>@=u<;Jdq13{aUP*K2}QU&?Mtn&$+x#u}6;kMP`!kNO9(DHR?sqFL= z+^A4WC50TRLk2g589E^vb%if>6QQBDY4~0!1QaHT6P(n@RCnfs|nM8ks$kH-geht z(A0FMlnxVQe%vcaO%Ap1=nx5*Q_;Sgv{$*V^{^gR6r1>~mrEzZl(Q7&{KddALYQa` zlVmp_2_~c0_Jj#C6hT2Yz-FN$t;e>y*1~qi7Ut{gGBI*DHnLYT)88P~iX4^|Q}Lmo ztYCXtRupuSU8Q~k=lNl4X;`AhyMq1A^&tw>V@j%OVlEYj8Kz>EASO=kL>gl9xzFuv z>yP@Biqauopmc~qsnc%mN!i+X{}1c7Kj=Q|WQP4q^{MC;mKf?sE9y$c#%fXyfxqV_ zi~^jJRCUH`zmc1)!1l*#$am=Ky61^`eq28zG=(YJF%|a(!u1mq?b&#VV;Jjg+ia#lz^*1Fi;&%#Isp$EDw2o&iSk=9`lQLhxmPJeZu=`^%H0+SfjkG zm~m89{oQp>+IHU2>+MYZSeSb=l!c8&G?azj6ANWwZLmUF=wA6y7S_R8f7b3e1OUb9 zvG~X&TwOJp%izk;tla80cnf-=k3DElQ`ujlYg@WGc+Q^%J`>I5aD-qD-ADWBCjSL% zhhJh?F>HS^p2V<-=KWcjRD2v~{(*5IG;3Ih6@NJiJS>eDDDgza1S@V-f)vM+Uho$M z`5)Pf8)(W(o$<>)dO|G19{L?MEv21HEA3oW5^N^C{PLPXWz;kG=(YOvm=D?VC!^#m zY9!Aocal`q03Y)qR|3eBnag+9NVbE>1t0RfKN*59*o1QV6}5Wj12egGI&-;??q&ZJ zlIcBH_^@OC;#~)(`xGnhTMeIT3A_}Sn~#tEUfVd6_$)BXW;JBHTm7? znRbZp=mx^VKJ>yjak_k~iyt>y$n8nQ1*A$oQ2so%RlH5mL_*87C>X30<6={@=jk4J&8OI#4 zM#S;fCiBwiq6OoJoZheF)rLi40DpT_eam46ZYlS+#cUAjnGVPNKcI9;Brz}AF9!~5~?wO zIFbV?HD4Q{rW#Jsg;V-2=8gtG#34>is%GfNa6hS^KSV-J1t0pkL|bTz(HxBQA#&^= zABPQ+e!DL^LKCmb@Y$SWHum*k4%WVWlaJKRg4>K>%oCG%{lSm=wGl2CLmsPcqv~?8 zn<@*Jn?0u`mvMYz23^ z$yIRnsC{hTj!gq=*LA@mB-}O(3k-0JX`C(#H~!1plOfs76>8D3mQ&*e0QGkYWOwlI z|3$5$lIqUED2_H(<45=}AkDsCPpvSXK*eCIemb$w*&0x}hnw-Ue(LSh{9^cj#M$1ft}qTV@5dFj_H=zncbbu?agjW zmG-Cnig^t&I5{KZTrcQ{%N?7`|VSi9lr@FjCRV z_1!$yyvdskig#U@`X*V!`FpkbaDT`C$ddlxfqgaQ!nW>LY-TDp^C_Bs_*1^HlrK=h zJw2PVmt%+x`!TTO-p{#DRn@|(``Omw#E|s1>{P6}seFV6NkB^j+aly})FEjp zKSLS7-=UW(!Uie0GZ_K}VI3CMQ-9@@RW|1|hG^H#Qk1X7mSsZHIu?) zT_2Ye>zv}ilgQKAVm_6?jW9U$jfu%r4%EQ>SUiEA zZTb;<#_-B|__Z>`CGLKn$i$1q4bC2F(cs!@z(hX}$j_Gl&;9bVS@W~ow9%rpk-Ckd zg$L-y1jSM?b5qoI=UKtM4)3DLRu8_zVP$NHA%k|Ez_=5G$w^r&;&aL9OCBXL#>m$r zV9z;Ik3da)Jp#7z`|A;Kvh+Yb0#3co)+6BZM!61wt}nY$R_Jg3x>IYQ&!@ALBRRAs zG&SUKmg3!LuXKJG-WCBaRa*$p z_gEg5IL%$v1h7^}m9c8PJzvO`atXMl3qIX1tvugULS+rdWnr%_{&+xs%s=Aj#r@dD zh1_%=evkBXRXI@o9cMprS{N34s!7Z$!w@p zg5)!+?q?8)4ez+zNomIp$b|V`y$AGI7oFKuE*jMp0f}38sREUb+K0bwSm9e?{E=NF z>Id~S#@cnTo@Zn2nyW{^%5$h50jr-~kASu7a2*1z{?FGV-~jwcJp#5<6@}m!8r@+p zM7gQL_H1UK`e@Z%dQq2P(?T2`hMJ-kx`X2HOEx+F?)WpT%sG{!thh7PnCjvxJ??i@ zQA;DB^%v?9(E7(}2pJi|Y=GL5$xQ$!I>cN3d5Z<6!W?Nc=B3SO`z>b0u?+?0-q{Nb zhvMAtM*dGXPPN;INjX?ef$q`U{~P^W`Q726TW{!TW#j4Gs`+&zbj$PNIt02`rL7(T zU1UW)0=h_~9s!%qmGuZ%`#b6pu(I{lBVcix^$1wpL-hz)*`oCbSlM>fAPG zgLiJj;|}&8b$4)!w-;@1DZQgEk{WdHgK@SJs-V9*6C8uE<_$`K$gJcb1sYjs5q#l7HlX?V-OzIIRGO0tLcdTz!Y_HmZ?ifE5w4_~+fR;R5kARk(uSY;b9jQk^LmjP0z_O^+A*{n$;Dvewbn|2N2xv(| zX0!d8xpipC#q|hi$+mg~wB(9<1hiyqEjP71x>V{S-kyacD~cdI_1mgx?%n#m4vinF zmnhnHWes68F_9Y`>wsG>JI3LSrSatGK-V}NCL4u;H}*2l>rT=)@zu2Gz4boCIc529 zeU|TAW#F>`FklirCYgBX|0mEi@0e89SS! zLi#XeKr;bWszGUF-31U&sbCG+SdV};WK#`6Ssl+RtK+H$bOC(j6b`XA{K1JwaViA7 z1}-cE@pjEjh5QV|GYEfyQLbUQS>W5_KP>A}KX+2_5U6#NYt?wJRnrk2CGt0xkfQgT zR03Ufzd~+x`Tm7INuVcHB%tPNH&hAhvH4r5N5GPrRgRyk65t+YV01{Z`Vm@f;>`i= z$@B#H5AN$lYg#^=ggg@;)LAGmii#B1VAx$4K8KIh!<)}gO1(x18r{BzW3M!oyKH5^ zZD3H#WrmFpOTqzIpwFu-I=tfr>58|lQqpzW5NDH6aWdX123d_q58H>}f6ywAc*8(Z zg~)Ec(KKbh1Fpowi$X5nh1u#+mJPkK6h*rgMZGjS-ipF%_7)iDatEmF;GpFBo2`RB zcd{)gn>Q{U-L-Y=X#WmS)R=Uo8H+XyU(p{O9Uj`bX~XEi$QJnBl>Iuq>g{7nSR(f` zW+lLwNLS4{7hq0gD#q#!FcuPB%dZWvJhJ@H47Vu;9f$pNqf@+@&bZiXoJ&CjTI_Z& zSj6{#M>{$;^ute;&9y%b4p6N$F7f{4W5?dkE2iOsrqnCnq5x;#^ z;5bNd?bjDzKV&Jzu`ZxEkQnT}9g4ACk9WWF_1{RH&s;N5tCZ$b|2I>E5=CF$v}NPy zhAT%lj&9nrIXb$ve;BP{DUOZc=#@|@wrq#rV#;r#WGPc@k7rVa(g>_F18Jq4f_(!e zL&Fo!uS1?Ke@g%x|sa&YwL&8?tQb>;RJY+b$jW^XyK!`mB zhjbl%(5$;XIEb=#WS)}T3W3=SNM0ec zclj2@B@TWls8ygQ#2vld7Uav-iB=kcC})s8 znRj)h37v2n#gO4NjQPt7&CjJ1nKaajA=o~egN18v?U)1~gsx?GO75)yarQgBS@jbK zubsn&sRqSa2gAfoqFy^v*W*fjxO&z*!{o7gP=jIP5ae$n6)w~cRWbn`3SW}Zh`6_h z>6lIJ9fp%Zu<>9djf+hUsMuh>saOVKp*>urc|5tMOG5UA3$;Ss$79NdOWg>S3Y%r& zMzvHjTthR|l3ZVo%Y%$ip;-t=Xbm!4L*sY~W*Aza>0-E0Q!$}$+k_JYyX3eyFXDJ; zFr73!ISnr>@5L4SIloI{)J7X;L)R+JtSXHzBF5bjR=6xWoZ3-G*v5DvvyUXwYB)%p zZ9pn^7>3e(dQ^1VY}y8~5Y+Q}c-XUaik5souD?9&E4l)C)A>B?98M*N(-Ux{b{eiW z&rIMZxydP<6foYvvl~`$KS<~PyMyFIDRp*MWe>ygU*6Xf5y5Bo26nLY26$To2BX>9 z26*Uk=2N+2FF)ehBd)qqC;C!eGQ@iyd<{!`Bz6do?;G&vVL;InWFWUdyU;{E z(d_~S13QeUjfEjJ(+JoEX^E72ex48LJgZy2sAOqI68$5J@aX-l-J9BjkV+>ISF+$o8jodg-T!w)ljnwt4%DZR9u_TriR$_*(U3{G_Q1dU0A&gh36OdB}$W56ykZf zKu?*ED=SkU&WE0QhgUbj^e@a5dbZ6Qw|iqG58G9X&d%A2S{|M<$+6yVk^{Z2dP_If z_#;;aq*-NQeLot?!e)L*CU}+UJtak~V!MJ^o?K#@_M-b}RF(WoU?I_4QO9<24qj1* zhZSa0nxc=_;bDbYEc#V~dEJ=X$|KzA{P2%~`qBG2=KqBAut_O5z@tgLg>ZS8k5~gd ztTc85Jgf|n--f2!gTryF0Uml@r2!uLf%(7T>0)`58{nb;8NUmchvgA#fQRK_H^8I5 z|M%hPVtH5%@UT28;XK+@V*VjCUD_#9Zh(j7Vf-;%9+pR}0Unlzt?;UMAdSJ{L|6@Q z8wKZv|tz8Aey74=Hrm+Xe-L;}lc& z0=>2$8$raC45X9{OhKmy)5tS;?sRPr9HIjOL&^p@Vn7Hd%V$@>Sw!H(OzsJI$(cA{ zQsHb(!KJKpTt3CCsnJ?Ceu9@27E#z%7WNLh){#|me%_MX%L}r#92lvlC{9Bek$S(= zqq?Rtb4aO-O{ZahUY7K55{ilW{`+h+AJKAjt@~C`2@;x=-+76gelI~jHl;I^7h5hB z;^QRrvts_;wdPmrQ{_WkmtU)%(LqUTrf@r99-b~~2kVw_hi3IA2}3!9r?H`EJU70| z1+ICeP@GD$3h(^#UKqwH^p_y(_LR4pIA3UK6=8EX#LoB`4Ri~uH3C`+gc(2g6SgW> zY)3-CN2W3_t_h|YU~)Tjh`dsc0m`B+IfIHZO=TB|^X)21@A~N+40`jhC5MhHN(m^R zTlLCN=iNjX2veDZj z5=9Ylqaq?9r$=0Kul z=Nf|p^1kug$i$6&pTfrqVInA3z+Thdh^mYs;%i{Hr^hc&hEpz$U*mma(%<;S7M@0{a6)b1o}LK^U7+Ku=h7oCFpC+E+jlB z3Ey#*H{rVJ7N)b>$yU3enn=lB2Y2`kLz_vau89ACpsuOuJGZE@(wPkvHGPQx;~bVQ zKj&Q(dzJoCuV|~E(K7((-1Z`_r>|`6yI~0Ni)h@+c6O!v!@rw?*<)xhF}1S1=v=== zAuVA~6TajHAI&xXk>alRH}0;OB4@2?n2N;)eatCOtkd{Z4a#3{A0IEKXly6N&)Zw- z`kY(*Skoh7*F4ph20z3}rm_rlkLyF6wKE^&iZvLXQCC%pmPWWyyXkm7#AwiYaP_BD zF@y4$NzG8$0RL=<063k*YYgzdZIDnohm(Fo-K4z|6wi1-@eC)#SOdK$J!`DSC^HH< zNLv^M&g^T)b1lVQYPitd4Y>rDXD{l1swg;jJZUOnT13_qUh{2SSDk?M`KC_06kF<=Eav3rf8Q#)?}giZZxrs1>>-tgeQ=l&XQCwPYH!1wUPpZO58f$Bg1(>UDqu#k0iFjNF+x;0?^y6cHCubv%Xxg#Z8qv6< zwEyHq%Xqk0oP=q(!c;mN&!`ReF2ykmsR?-9vOSwC;n{T@i{ce5b27Pg@ogA33CCjw zpj0m8vg4SghJtl#zCHyTjk)?1to(L;3KsT)9|f|sJ)4Tc-7vs7BpLe8{k|E(Vl^(R zn;|Tow)zxW?DM0Ic|URe#;a8~7{t z@~^M{zUNoBU~n0+!%qXcfG3{8IDvZLOZj#JKGRiGc(}@FikLgkLW?=$6QSaOAn0xN z?|KI$!jEV7VfMD=O55;&jxD)R@+chmx$O6|(zsfFKJ1!-cE~wqzT0bN4+nkgud*HG z{Q(^G;yKwC@TCAwH*glD-u{?4bge(l0qw;SjXlUw*`Kr@chirb;vabw?S45-N3}*tTvY5B>x-{T^sHN(>>5jE_08%PxMpk=Ibe=zek{qE+9r zu4UhP5sy-G?RZ&f`>K<)2^yCg>!w=RR4v>jT@$(KY^kYw+AYyDIStP$!2)zsRW-h* zIBktRt^V4crYdT+q}fMB zyStjIsM!)lVf8rPY)!3}^!UxUsL>K1C5txMN$u8HG~ZMQHCoj=HQAVEONt$9eCOKc z8nh)f9u;k>n&!hw0CjRh$DPIa1dd0Cl-smUa;ykzbZ}@o4`S^Ld6;{gD_d@!yd!9L zn2VDmM`fOekJUD74gn_;sI;7OStn@sn&t zW{Jkx_DV};Dd0}-=7&~l%-Sp?;Jjx=UMF8d_spN9tGU$!R~Z(!rs!~WqOCQeaf)|E zYedrlwAP5GRe}Yz3N~@hrTOk`G_(6qW_7Rdoz-pFt8@9?c>ZV29^8)-FXal)=t}MB zYR5~bphKx%9Am!fgu1@~=^z;&mUNow=tbOL4bbfM$*K;*cV>&ukyI ziAPITJPCZ24Q$xHi<*Y-?NZG@G*z>tvOG{FsX1)6lKRwDbAN+oJ$LR;hcYBEMs>uNETch9gK6;rK#$#E^91UCcn zBHc(F@8s%eYDp`t@&9$3LsVNaV+bpqk-nfJ2Ex@!3C+EnnY58@slyiI| zHpE>SUmJ1~MdrqpeYkXOy^fa`&pHhkc$*@ZZcx8amZ142=BCJ{YqeunvA%qFaZ}{3 z!vV}iEzp;i^P{Y<9I8Fu_QCZBx7=uth1mjqaf}#ifxb9^>2HC)SZ;O;`~gQr8(N?* zjuFc(urCg^23nvmmRqIy`u5SDxT~99kNeOLk;|H1-{?y8So7u5eevZM$i?}zO7rEe zqj7f++n2X^Hl_VtkL_fK$d#>yC*Dpddo(CGMA$bqy0E zo{P)unUFeBU&m*gBDSH zh-P~nOoPC6sKa=JE;t?hqn+ASoN<9HnnzmWclaE&rz6}v2x-}>S2R1LWL8>nsm-R* znry;#A-Dn$eIf^R9pW&juWYKrOu@wIkMg8K!<;^Gvn|hRs++mxk24om zYb-|nts9GrM;op70i4^IZB33`v*AQXSxuzrp*UQz1LH^R)YC~Dmy(z>$(z`Ma1Vn*Ib{6s#VHiPO!fpk~E&Ms;Tv=klF*~gDk3d!4!lzJ=bAckPsdFn6&hE{rmC611N+OAlwNvH@{eZRe@&g&G;wG!D&KLnw`;g24-`L#7AMVNlE7CiH-qbQXxHbDr zb5n!4ESUJ)IkJg50(I!vEcQ<#f1uv<5+Gy&C%99sdSs>Tmor^uKI6 zo-N^n6-{dt-3(Y?`6sx~@HAYZQ`pxE{q28-{yVcJXrhv>(BEj<1vPaVprLfJl$(Ha zA+5-P_0OmR8>aDX;8v(_f9ao40l1%Qh5E)n!~a?RP4TI8rX`iwR5RfY78;%Gt>gR3 zD15sz3WuvN;VE{wN4bDY02SFL!7oI)zrhkZFY%em5}!)Ij#wUV=X;IiXE*w!E%^R# zh_M=*rn8CF@)^8Z01}N?cwJL|Qt~sXU`r^imLlMR$f@0{^_D(bnXlk*ToZ?%Ms?vvbE5||e^9USaja3-h2Pa`+8 z9NctpxbwW0rIRY+^HNtpNet$uVSnXi_+}NPI4cn~KQ`6OoN~jp!`m7Y;e3#>l@s`5D-yuTAhVSTbkg*n*r+90=tMsSCq3NV)B=|CLD*JAc5yX$UT-T>z~(O6 z%4$GMbg`DEfW1z>r72*~X|*&3Y*HgbT+$El%fW6HJ%N#Wjkk7TlRDedJYbVrZfOeG zq|UW81+3F{^Ha#Ar_!b3V2b`pgYH9Wv)bIk?#3|5xQ^ZFTWed;aCBkAVWl~R7xc9v z1#J9`R;JL64M(N)CXNdaqIrImT;!FH)Ed3f- z*6CjKRzvQ~Xh}KrVjjx3a!K#MpaoXy#d5G-+`<%k&|71-v@!+sR`cdorhs)iVzn{_ znpL`~l_^mF@WNK6fPI{OV=Gg@9;p0+7N*dPDcJws!W4RF2ysITQ|QH#HcssR4>$U( z9Z$0v|9*0(vOXlFTUn-FV0(W)Y%(%A-k2`MuNT9p~z5m8O2tfVsuXPMMjH?L8$>papq zJyy!3v^BK(=WxB}TbG0h=iBKG<~50Qelk^<+}jRG^lu#Awz=j})z~xnd)}X2{SdEd z$fU+I>50jbs#;u8&Dj~SN>ZMjiYMCfe^yhb;L49lY@B}Mt;AlcQpnHo6)p5aqNg2i zCrIC*JuYwF<|7>0itJ8BwnrvBk&a?Zg;ad1#yWY$I?6lGqx{aZNJ>n`;s3fi^0~~u z&hCz0Pbtxee1o@?PD~EQxAP|~2hOi-&!@0inB8=r=LVn?(*+)aQ6ooA*#INd|cx5)9GZ5JbR_LbvYh+GZU%O*q$1J^Cv9OG4DVw z3mN9Ob?r-B^^8Twqh2AGp#xNgtlMIF9Jd6FJtHS90GpbD48%?Nco#^joN#7}#nk3( zLd4h}4?Dgb!K0TVBQ|}ac8%|u>Dru4!x=@&Q~8AR#DbhmSq;mXF6>El_4anIZ^zqv zqdDji!M5cT_c4=wc($ybqqyHEihJYv8VBw;&oxb>k}~mRGF2#+QnliuCm?RTkV@T< zs?p3m0Z~)awQWf31mqN9AW*1PDSrZ@MmxJY*REYV+SQ4j)Z{tGZ|>2qDE77a6Z^EY zi)P4Yl&`07o8|Sm<1LwohZft|_JG^3|kzA`WAk89C>}T~U2LcCcf|!N;OYD10|E-3J>9GnqBh+4M|1zUiEs zQr})UB>A}iEjYaL|IVENz>*%4+bTc*1gzcuUnr&;Q%vR89N={hsA2+6F0C0$C)4eT zT($(g2EM62l7n`e9-1$o#;<1IMDqfHf=ZCj;&`qw)xNP%7@mZixdw~aEEyNy7ZS>m z9<`qj7ZUJ!TVtOWQwbQjQZ5S9;J2WI=PLTpXp&UWWyFh#blSPW+=}vm_>uZn&}C4z z()g}!5i(;v$W8Re2XTre(3H9mrCi^8eC3+O5>Z_#8X6QUo}o#=Y85*v30TqcCm;cx z%P9`?z1+||byHnSI^IorNT%?}KbC{JfxkYmwehcA8)C(`w{e@D9y$>TICX1DvB%kl! z)_AsE)8kyLIm@Ph@|F{kfb)>nt4>A&ZB@9dAqh&OwlSOBK0chMTW1y;YmpT9b*+Fg z`F_QHs#6?+ZHgiatAlot&p;+uqzw|*N4--OCm?u7Dh`n#-Vnt92Fe;Q^U7>c$MMAG zY?AJ>u)oDU&@;9-UgF@ebl(tId9o7dXFW8K{{T*f9? ze;jI5rEDJ`FQzaUiAiQ|>j@eo)$RJQ>Q~;%RsW{rP{ggeomh9v?`08hI1Ulnai=(| zCaFA)P4b}=5>vH_b#gYr2DL2i_1ELj#A6c-DeU)gm%L<0<8J1Pz*TR1HP^C{6Ouqr z=fyf$ME=A?U|>^`eDq&@BKe^4pz(e-#R-bQ;39HzBB+~HL=@=Ru{ChZb16R49?$OE zF`Z4p{ps7bKx*cFtnkzia5UpfMV;!f+>*qxPV^$KAM#3rv-MdO3=zKP+II6L-X2C} z!ZKdw;zDjZ52EcpZpv?`64rRRVtU3Q9^pI2`A*LIi$8`9iql)Fa$#UJ;kRsP zem7X>G)w?)&*NGQw!zkWI2AsIsY-WEN0GT=x*#SxYI!ponRmSgF)`Mi6`6blDu_vL zH^MUc)K?G_y(`ubliJ&cnAEH`q$jmk4auZ~JCTOWLr>)pX^6mqas z${`$daXW-VnG4~d3mQ_T{n|{_2TdOd;h@u-AspHd7Q&&v&k8XjIb%7Dgr>H`NNDRy z7zvGSgcy=e6Gg&EXl^r%g!YcrA$givG`oEjx7}ZQ6n68fTY9Ky{bM6c{c&9?pVv6V zPWlt-O@gF$q5X`V4M`;{KA)*ehU@9tg`OLcHH205sc6wiV^Yzs^9>oR3+=kNv23AT zD-B7dE%^(LQL!y)Ye<1^^z#*sQL(fljZv|*RyIb((lQ$=t!`>=u5QF%yRo!78dCsE zE7q6-SXyR7?m`=tty4Kh>#y&GSXy@tbGBapX$-#tD-4#_fyx6Qvh)M5buI-_r*J?uOUqP(>E*8rx4C+@fOYi%Qac}T9MYudH zJK>X%Rp%o}$ma{Q&KF799_90yRVPQ&L0Pivq=g^(q+{F{Y=yC0F5~lwsi;Qf0KdX8}K%cW}FU)t7OALO;2UG)7Ld$|WX5P@<5HN)%EpWx5{(ifc`x zxTigevqkEt#LjuMsIY;!DV@qB=^ii8pnL&)AHR8}Q=N+_=IXLG!1|=aoDF6wIWv`< z>FJIX;%PYYIzcrBw6qneC$O_}Dqbp;V9(xk60XY2z`$q}{)3)P8>Ocda9dz;O@3?| z?gnd5RTpvK?ig?)P{6v-Yo=B!pjc|FVkyT5PC$j)EsKyh-U~ODE{)NxQ0=&LYwun# zQhd6UgR9Wna=$-N^;f@U_l87|6W5QjV1X;9SW3%)^P_P}xD?=%=_k~(kS!JQEC-^_r z^}eG#4ZregbSu9i_y3+E#v-V1ewkNB29HC4l7si3Kn@^q$5`{AEO5tAt;uN)OI%}}vWOXIl~M*>)lhyFtF-468Qg$}zn5;Oc!!%7=lAh+Hc2@qj`el7 zaA6e8Hzu~@^{x=R>YQkfu=&bO2>RITlEHDL=ZM$AGFK<$FU0i0Y3i`E`HKeLk6kx&Rp~ z`~H^V9~VnAqKYN0m=N(Lu-?pAaf8=;+?-);2>8u)o;5?>Q9G%6Yf;EpV^ZOOP=ASn!!m+5^S3#a4kMcSajIz+p>6dr?=A}NR5Rw;c z8(=#fwhVlFpe&(16$#1vfB*CUEb#va3!DN@2RIi{;lo!j~AaFLCsB+Nu1*knr&Z!>op%DfkKv?-D$!;X{JYYxuQ- zAJp)YBVV(_%LPB6@ymkeE#Kd;Goj^I&^zg_To4Zq&uYjR%g@HPB{ zg3oDkjtJhN@&DrRHTmS?8{t1Oae~)wU85LhD_z|r>t`fYW;U?irj6<@1 z=G4;>!7JCWJ}X3@Nx?0NUBT_???%CI(ePQpCuJe)4B_7+_+c&GLxM-dZch~cmjy4& zqNrofir}})ni~8k{rz6>6~ceK;E#ol=M-a!u~hhAcKSO@@G~{MTkt_y4~PGxzahc5 zX!!F5pA|bmwW7a*;I`o4uJrd(!Ozvwy<704maq2;euHM`&k3H<_}>-0q~QyK->AuX zG&HbipVgW^|0eidTE5l@{vu7zpx~bs+{y2ig7;|hvw~ls;V%|^P{R)hepLMDU&Nm8 z5&W>0?q>x5vW9<4@OcgYwcrnH_$km~p?!{M_;SI&r{T{Q{6^8=@lR9mTQz*A;B(?v zpa%V2C-?!8@A%bCjvT?A`goV%D>eUrm*9OG{z<_rn*QH#Pdg+2)>~4`vkv7(`T#Tzt{LEwA%+X zJ=+OiWK3%P-Jswdnw+ZyKdkZdf*;cI^%B8{H2&R!AJq8o6MUD(KP>pH#{Yrf)-!J- zKLEF(zkfJ<4SzZW5;QJ&7W08de}jS>=QHl~o0|o1)9`JATUxw*nc(xLDrcAAN40!q z1vfQ2-zxZ|R=%$iJf`7g!800uzu=2C`JWYhzo!3x3vOw88W0$u-G(&#FBg14*K6eQo)9ie&;I@X_f?FE? zO~LnT_^$;&py99`lROx8>xeqkm5DIgS5n!5731|04PQkl+;!|F$Dv zlk*S3%UZfCVSaU1Lxo`6FgR8zgiIfD+RA;^5+DP zYX0^W!7UB{Z^7rZe)hCwoUe+8pDVbn;r)WoYxuQ-=e2Zi61=SO%Yw%={wD=*6TVZ9 zKNUQxwPU9*XZ;tna_kj+UbEY%;D#puWr9~UIUjcTTDm_IyhFnu|F5i%so~ERJffwW z6ueF2-ywL1#{aY#zyt{T?W7i0JX`R*hOZTTM#D|PD?{v`5%JFdjX?-9IDivu4NJgW7x-xhqA z7C--j@Fj-xio8rK8qa+S>c7NrUVdLGc6f#0&TH+?IPoWfJ1?v|B; zotMlV{tpR<^&PF=J>jWr&%B2B3hrFn=CuE}3Le$!^*02!rT=pJ%_V2C{CN!@5!|`R zEFyMzmEg|xWDfpW!JS*j9Q+T0J9mgV_?oA2y3VCwj{f6Kx{}=cdY_B?`9d`Qtjej>ki7}(iC+ra1xvR+W zw}Rl#okR})D#D?DY4X1!xU=`nvD@DTceWQf^JYuV7CT(S?azq8e`^GHcEYR{{8GZ9 zQ<4of2LyjU;*SD*iX4HBF~XM{&ORZhz7zy^b_Y50pSKF`>4E@N;Q6ZV`Opi6%*SyiBD22jY)9#h72p_@Kyti}2@)?8r`ie3#(He#U!+KPPzp z<%~Q1$VUXX7e$E)%@O^5LGT5^hXntQ;O42!Un}^p1h)i#wBUagd{%Hr{^Op(b};{V z6){hha*P1}L}R(pCQl`|iJV@-VQ@C}PC}gaYNz0)hEF?qR^`8u@TEpf?#_d7j{Y7H z+?Fc_oObD>A}97ImczL=jGqv`%otjCAARree=B%JF6rnK`G0fdzvf;-oP3>r9_Dwc zaZKu|Bj@RaLw;Ya>VGleFpu5K{^rQpC3r-`(}EiseuLl(J*u4B1g~iL-GoE?Am{cR zJ&y_=)$H&WkrS1h^c?;f&&2#LGInYBQwd*USo_rczL4j__CB&8p5>~<63i;Sqm+YWv= z;meGbvPXKc==pxamm6Oe`KJp01;HbdU&sHyC34KKv;9qJIDRg8pCsY_~~>oAK{g!r!Iob4>Ww2=m*dARn`e?e`A;X|ON{a+ zw$C9cugxOI9^-P^1@m9{ca`ABH2E2kZ@uz9;_a7uw2$zm#v#oQZxcB~TE5DJL%D17 zMIRJ?MXN6l34TPwe?a&Wqfh3~7n4?o@dx1_)A*-7hwb(~4SzD>%Z$ZZ`}u6bAx_Zz z!4$rw*?ENUB}U~;wlfTJ=x<$T2Tqe}0wN?QX)C8I^5ppOtJj zKn0B7B(<)BNhUgv0(2t$%z>H`)#Cqm^Ss@L3JN zi16jcV$D9o!Y^z5N#Q@N)t7yO->T_vuW0S?+a10p|3iWw((um{zSJmdcK(*|7i;$U4dKuaYIZ&aCg^ZJ z#MJz7IpNC;>oks|>136goA%x#_fj5W-xv)czGA&PF!>v%q!sd zVpc1!rwBf$;eCQz8h$C^Fb>^$8>Q%^8xuUD;nRdKGmdF~b(`=j8o%twxm=b1LBY!! z|BHghH2x0>hj}^8K93N-+&HY&$A1WZK+EqF*RdZS*7~XQ2w!d-)#R)byiJpHiQpX? zezo9}8lDk+R+IlS!4GNpLBgSZeiWDctoXyH2w!FxTHN)p;AO3S_?5^pwYcK1f>*S9 zeFjWqpS^L1(C|URml}(;er=oJ&U(#a$=B6{FEaG?!EurQVojeH z5)R|Ir*houjN@J@@?(#1zu@@uI|PqvanZ*dzJ|{W9?|fh3ErXMe-_--@F%QC`@lS> zhM!9~wC7iF`R1klStI=N>5NAOA0&La@e0ij*9!h>4KE6Qmxk{b{694Oje@^M!`~

    3ff*;WE9|`_C4gaIyZ_w~F&PV&edY=|YolE#q!}tf6V@&*Hz3_)L{$+xj8h$F-=~oReZCZXu2#0xZP5wCH%Z&W_s-80<=jmE`?H7KV zrvKf9!@5RB)$`+m8}~5o#A8PtIof*4-vpo4^jUTR+5zGO4PQezoVS&I2&ao3HWR+w zI7ibzF8s2#FY$W9ml|eSjVEs;9Qqxtzk3PcFfRLdHNS5Wy!>o#msUvqeMoTYN6a@x z&mW5X1DgD!!Z$Sei=M~+U=-AJpGi2Z_i6ff3T|om1tQ0k`x2dUi4zX-+w)X^$O#_R za7*M^a#gxBJ}nDw{E_vHN`5~{_;O>DRxV$5_?rKGkML#2f>w_n5x)5X)ecXB_z~mG zd2L4ZajtNCra;2j$NT*8+awkH4if?Kar)4fsT%xikyL3r){f&UOW#z$F>WB(5d zKcU&@Ga|pD$^Qo75LfrB?b0tqzV#7R{*x~f|IzRv!A%W+q2RWLe}HgkPqcIo3*XY_ zEB+z4@lw@ptDz!b`(HUr?Z+=79O7+F{;=RN4WA%QT6jT z5x&%zy_4I4#RmVqlW_0{Eng1`ZfO4hV~4NR-@glPY52eOqaC0f*7P|~@L3J-6}+tB zn*^WJ@STFsYxs47+Zui&;V^kI&VH3Q`0qC1mo+~;D0obh^Ffgl)%w%V3cgFjzd`s? z5-zV5qR(#$2mkp$_A95IdC~@M2V$E1rxU*1uw;I~k<&#uwDX$$^M(Hc z&3`Tyd_nWKorEtj_G@uSQgBPdi-a#TX0`VJg~B(r_TkNf8=qF|^}Qk|rp;S^NN`ib zA0iz33yH6s^8Fg&Q0}|A+%2(lMfiuca``3U(C_b8>-Az-D8abbm{a@HrwVRApyHi^ zS2TQ3@Un(qPB^rCm$04@(Q`uZ{07F`1fOx_{GHR?CHSqvk7#oKL-3d;=N*JYJ0Oql z!E^`xeTZ~^oG2fx+g zmhXt1J}un^!XfU`+Ve9up&elUK`WQD314o!P}App!WS8H?d(@hecT~(=AX;a{_SaOA1B_JbL8Bi%K5I~mWH=qP^9BD&e=ioi{8%m*XI|xi;4#h4_dEFAs(n5qxTW!rIPx|85y2yGQsq2u zGuOMAhIb2IezVHIRB%I+KOwlK>G|)D91VY);I@W;TJVa7|Im@6`NLlXH#Pp*m$1Lt znm=qJ9QsqOy!H_e^MRWD*NPnTVlFQyo_V{-F*JYprh{ws>rt1ooefRTcEKxJx;q88 zHT)*QBbuCd2ySZS_+`Nj4gbC16|Ef4+`@X=8a_xk^p7uB>&tb5TXJdsO7ZhI5DxWj z&uxSp6a4*zFE`HD+OaPX4(-5S?(eLvrCU*dsHYnK9Knsx zsr*fXn;JeUxTWDUj(iP&r6d3Is{DH${#zOE5IrAsaM||))sz0d=g4`R%KwAlrY8UK z+c>|LhCfqqTfb{0T;Gq>lI`nPk@~Hu zPhY&m!1?eWY|f36??|~iV(ZCsua!O|X`Gk9)&B7KJHb725AOUHuD{QCj!M&Y-2&9R zFH3y^#<>md&lI=w?O)@$Dn{2o(Vo~(?+w=%8rRo*?WJ!KFfCj^&iegfe;hd} zdfuCY$Laoe13aMmuWUVyr^2{C-qQ2B(|TprOW$A6eSJPW)*-xJR~y&YZ~w{oJ*;mr zJa}8&_Bmy}G`zll7}w9GTg)^Gwr?l)mhn`y3orLvo*uAe{CcIjd}J^Q*0={xs+-<9~wkTf!eA?_s=-QftF~n2!3VseV4{U8?^I z^`%r_VO-BcI&M_IAv4ZgrD%IKG_J=(+hw5fEVYR8C!pS^`W2{8QvG_HPkmGUWPZAo zbER?pw+<<%CwvKcF>-v`FBZVnlhS8<9{I?)eqV+9@F(hBnh#g>$2e*HGpy5dtu4l* zYCP@N-y6?TZ_@Y=!c*j@43O=$u9+MsvvK@6$GARU?2`3z;a!a9sC;_PSqv{AzZdx~ z9nYV#`9XMozH2nHdY@}uw%$?FV~?VCr} z4;LHPzn^lVT-Qy;_8o-!Y^tAPTt5$?zRfqT?-Qy2tC1gkA=|eQ`Dx^*>HJk?aAutP z^DN4#3-`${HlCvt&9|$K>v=mlyg!bIE4qGr*0_G&MeDl>^+AQ?6k+_QdYN(R+3h#F58Uj_aSMX?1Q^6gs!}aR z;A&ks=U3yppES;@H)6ST{J9Dq(0J~L`_$)6#`W`C%HL^Rzb8+}|D$k+{Onm;!_rtTPK5MwFuPO}RUz~1S&l5Th_cpGNpR_;TiF!5n1#{rB*E7$PPvPNXqH%H~sdFo8#db>;x_qjdlJvx34FrKTn(DlQu$nojA zeI4opI?jA)Tz~%wjsJJlr)d0jM#}a|kQc&})f<%=zdmnH3FmY&u0Ow{{){)S_Y3-cjhU!VQ~e6KPkq>CT(8%p z@N$2K`*Xrxdvs=;St^J2>wI{Gyp3^v-9qQbUdHuthK|Dz!vmTpZy~3Q*6T;(dcUUS z9)_Pue%dWE{yg#vjO#vAf4ZQ)G1U)&HzdCuUO@gZyczj(@POvYYw$AiZSXYtkMIie z!^ZV{xpaMa^%&`cYB|#!Kkaj^0mk)p=~uGd?e*|H)JLd31$W3d!3)TD8rSod=KtTu z^?ab?cEhomaptOZbUbNqTwgEslJUD{EtKkOT<1I$p0^L9-lg$8hx~w!pX-e0s3JNZ zeg=<_|7u+CM|X#p>%=qT*YD3${guXZRo}v8X5`rze}CipI501qGadCFJuh8={N(JV zp`7*bzO>xWk?-FU&Oc!D={ZU5aWYS0)VF-&y3c+%rw81n>)U&b=c*L-c@Dgce1&m+ zzedYlk9v>#_N{T}Ts&zGq0LiNAHeaf#kLDtuy?dZT2`4#XqEw?w^ zqrT}sYp3V4?#~n9KFl+orP4H>6ugXl6LNx8l2d>_{9>KvRh@}44+F}%5S}7$3r~_? z2TzcXGOmyRw14@=^?f33-zVV?`3iVIz7?J(|JJzfCw=Zy=hn>n>g$B1;rZDV?veL2 zuD>^%)~ndKeqK%6@m}Qk^gQPo<8_px>yVAsXNR}@0qZ-&?fD}AHrZZ9=gRTf9^cx+ zJJEc;-ni}qU0+Q{eX51zL@-aDfd}NTAjhTo`Ga-ZucNoiILj#KV&iqxmfo^ncKlt8 z=c?ku@Ns((>I3S}Y`DKY+@CjWJ)LKNLw*V6*DT45Q@?ja+p(c>-M6jb{O+jtseT0N z)iJ5}(9h|%o|Ze`xc)qy?rYY&4-ijl;tY=JhZiOy?@d8dmGpHeRQ535BF(*zaO5Y{>(G3pM%l$ z=PKj+yhihR2XYE&x%=TR`3ZMr)=PgbNq)X@y}#3Wt)F$e4!O^`o`-atd=~DIzXeZ` ze+iF~AA~FFL*#Cm{}J-W@B;F7aG&xA*?RI@;V!*r`+)Hr6{o(v2rnkzikyJ*e>SeK z52>G*Ovi57a=>3X+ zk)!B&*J+bwUd8CRcP>0heQ0l7Z$~;VjW({ozliduqCTMKC$GSLI?w)UTt9cB-%e3uS4)6I*&)D$ap;3A1^ho=XoEQ zpG8W3I>QslIRWk&*T;W4ZYNORnU?#4@u<3up3A+CdWY^4KQXSKOHkhq!Cmrm@0Im( z=sCt!@EFzK1W%IRXI$Uc(0HCky-WG4;Srh-+mPenxRFHP_E>*V`dnT`{^6+g1>&hJ z@tmoc|FqoZ@FZP7bTh86hqITNfW27mFymQj4QmIw|0mbgF^s=4JVM8}4seIOAH0BkoXsbn z0gsU{fP3U?;r>4|PP@N+WIU?+(tG~9jn`3SbiH~QUQS;7zDytLs5JS7@V(@&aedzJ zCfmjK{|4hZI!ruORT>(Hd#}p)?RK0FcU~5E(En%PY19|OUx6pdKeRdPB*)hOV4d!d z{xzd=hvR>*v!!u8-{|@0FynfCm&kJSFwVQ+4*6qnm;6PzM;^d^@*VIb z`ET%myxMe`=V|gY;p)Zk_%DMy+>U>e+Q!8TP^*u^L!#aNj?+q9+dhb%!g-fJ^5>Jbtqh422WG| zPjF{Vcs&2XJ@VWKWPOw5jp1qX4segg(+}>v5?<~&ctG_tZ2iCC^;!V;$=AZuawM$KMKJv#H*Yk~@SCkq*{&=zy z^)6k{d{s&PAI9~0ijI@nGqGOenO{3H_jlx(+tti*UcK~!8M!?UXD&Z7?)@!p&w~@; z0o@PIu{ral-uB@w<56`dU3YCWuJ4QK_v7k4lv%F+e6YnbGoEbpbA)mIJeIE8UqO8t z)gLjg`+sM6JkLEW`EHTq+vD?J#`X0%eV;&wM>6$Mbv=zg0q4ILu*T}kk(tmecc)PTKEAnEvPd?kYzHX=ftVDeh@2A=M@IKtBzQpv+ z`Yz=7LuLLHn}5~w2lYNZM?L?s%=ojEx-neu!hQ07#`W(D({`C)T;ESof1XB8oYrft z@u+G~`^CqoFQEE;#`W`a+Af8UXU3na_L9$pmy>TduJ02m|C}eJ4-@HrVGO*4{0(?3 zIBtVf_H6XCsq`~~{$B@Akw0teFAdlKZd~7|)A+BRBkQ|`d;$C*`F?mn-f^ysvw)WS z7~CP>1$W6Cmu7PG_f^tybrL*6{ux}6J5NeZK;J(z2JTS($M7W8pEWO&qvzrH@c#I! zas7OlwtKawqz`4}z2Ft(3ytgZ!uOKzV*7S|T9&JR2>V{+dcW==+qVGqE#{+scewr& zC#iQ(U;h~yr%Qf|alO8@+?)kc?+=rlIC6#>*T*rcKRGG&svtZM`@=n2?u*8C zAHEBZ|C)tZF4dPB*Wb%c=h<&jAED(oem0Y%&vz3f-yY{bHLm+Z_0Ds$T$g-|alO8j zbLt|gFQEE?@EG|rb$f4S5LwA|Z_>*Z2?y%kblM#~)mPgBmT#`Qd;oPIA!PMUI-z*Uj# zM~;%8zm4npLpe{cl$;96`PsN$?rq`qeJGWw*L@&wvMS^HdXLV_Q{jrPS3fnbuUF}O zAFU8VpKoRxbDO4;Xbr{B~!1*Ltbt? zS1CHqG+rzD9_8O@T#tux>c1-aF8SNW_4~|}UwfU@tCH|IUo)=X)1c*6e+~ImzrwiQ zuc`hp>V2wz>UCMK1l8|@C&@2=BU7*E30)6NHXc=->3VFF@ho)(UFYPyiRIGu|4?`- zc?#~6{|BEz-t{fX4`}@J;AP}{;c4;~Z)bA!{zB*3Z>-aKe9Ajg?~^wO!~;5SZh3Ck_y^QP6d1;(|j7QZq)c;tLyX`Jdq@qm0G+@<{1A0dbO z@P+ZH>Pr2r|FP6Nf58CO%N--@n~(87Y+T=u(D*Bi>*s;b z>I*adlZX1AUu5!i&a!a-&)y;9_ivW-R;epM$^7*ErQGj3deeoFn>f%-JnU-3gGM}MBXO6HY=J}fY<`$pp#xm(7m=(+1< zKZ^U0%6i%PywSLx&mCnR<{>|_2ldqdTa4!@MbC}bzyq59hv7+b_a|8|k9;aTP5wUI zC$F^^2qK5DBL4&2#=Gy@DlPK zaG!i6yp;S7c#`~n_!9ED@O9+R!vpeH;AP~S;pOBz;A!%`@Pp(B;fl_WHGh*n=aHWY zcgS19^T|8I3&{JyUGh=zBJz9SG4hAueaYv;J@RGnV)8fPaq^GgCFEbiee%8V8RQ4y z3G(W{OP@>0qwpo<7r@KNU3fWpPk5R<4&O^Y3tmBXu8Y4We&d&&31E69(+v+25}_8+ocBINn-Jo0vMhkOt`pL`U&kh}!$l0OJ9 zBA)|~kv|XbOTHFfOuhwPLcSC3lkbDiAU^1T>O2fmKH5j-Go4c|iE2VO=# z5?)Sz4?Im?3g1h<3|>M08vG#nX1Jp3#vSk&`LFQ4JbUP!(h?vWpY7n9fgOZpinci<)D zP2fIxTlfs}7(78f7+y*qhbPIWz?YEEf~Uym!`G27hX>?uz{|+D!pq5bz|-VE!S|9M zgjbMfACUeZBtIP*M)8W~4d`QA0 z#2K@G|lb;pOBz;Srku zf5ZEdpL9_Au!Z~rxT5*r4xUFoz_@;IllF_TsEW4M|5ex{|4QGSZ^C|_ z_42T{geTKs?+#D@5cV5w&YrNB*!rKt{t(>T7xsnlB>7sKL;itv>Sr46&~gvJJ@S(d zOMjB&_2JGh;c+&Dd*q#M4*4K>ntX!wH^TWd;LfjMpAYxQUxp{iH`{#joi=}eIR6iu zPk!PN^oP72+eMh+STe!ZT_1D54xB2Av!;|Ds!_(w1+x*wV`CDv0`L{No z{4bkNe$r9wU$h+^xJTXso+R&TbKVS(bEwTBFR?k~kHFL9i){W|;r!QaK6#nVC*Nc9 z$&c9lx5N3h|C9cBH_sHL~`Q+s`pZqtQ z|86+{gk$If`5Evec>z34el^^AFPuNX=97=N`Q$TfKKU~?pU#hKY!3NWn?s(qIUB;` z{2T6(*U}$=n$NGv&xNPS3*pYjaDI2VM?TEvliz9c$rCo8t_PmCIplBJ9P&?X&gSqq z_rg8$|7<>aP8I1-n!FL*q3aVD?vY<_bI3>AocF`yyw~QCm%@|eFWG$Z4K{ykIR7h~ zPhMg3$xp0`K9HXYcRmQ`Ukdlgi{MG}K{n^ZaLz=VL;j%6Ay2~7F3TFSzqn#!}(XkJ@NrIpM1Q{C!b++=()`^HivwT%^}}vT>o8< z5igo2X+d3ipq7Rwo638G9^P;K8#&HT;q|Ij6Z;YQx$q=;Av{gq9q#N6=MS^_qZJ3DSo_c=53eo~$K448Gg?XVM?%1nJvBxO1;~o_+;B^HZx< zra$^U`Bvf&p`Q-i>nq+2@548PJDFcR)IUjhXPeVjd=YX6+4{T1|3&=->vxFnh0lPy zL*;$fv&~YJnh#I^E8ZLavaLTH_Ra7meZ*^_ekVM+N4!1!54ie9{7U$VCrf`e^b$W2 zUJsreES?81fPYB!9pU~2S>Ly@zWv~;rT9bW+gNzIuDE_J!Td~vyYI)hIo!Wl>PKRn`)y7;al3u1o`U()PuxX)UATLVcpB@~7#`5} zZ3p+aN&P99x7XYHS>jJ)-j0GR^ygcQ--kOIthbEc?x)@1SCZdo{P^$TDM5We`43l8 z|D3JADZE`?tE7G#>X%$E_4c^*BRqM6tnWSO^I>?pwYc5yPCHHdqizl__X6X`uUBi- zCkINs-Cn)m>u5Y9;7`+WY%+Wc)z3D5{BoC}KA`2k3ooaf9k%|EjMEa*$m zwX2f)1E^0^pKI31^ym2ebBxzfYEXDSTn=~0yTLu`=Z&`hdYPY>U_ZSB?%pTv;kZ2u z?o-ZUs!_mfKMe?ooof3jXh*zQN+0p--m`M>*fq47E@kNV#h?oxlQt0ZTX zt=}o*vDXz-Dyg4~`g~gMic0F&qrQ;pzk~;Mr2hf>@H<@5^+UB>*^i1Sryks=@i#So z{PyaE`o5Giu#)--s1G7C&NUe418_H2d=q>D+^7BY6}Us!haXs1lH(!gJDX3}f&ah* zTHlkS(jTAl8^G7l{@&8~@%`z6`hdoN6I^YOdC~&oybE4T{d^Se(L8*?cvOG?%nBsP z|Gb5IpXxt@C$pqKCHSxQS*PpjW5%P$<>%Iw{v;{?BIC!`w?lnE^?hs(9UpF~Bxfq> zOQ=6j!qpM!r#+9Xg!^>eyAeKva=wO_lK)}+`1Puuhj~Kt?JRhj*7q{w$LDlLy`uYz z!IjkCih76YXIif++jlg!??Sj+Tl{tStMGvO{}J4y>)RiUA3y#>s8_?K|Mq(I)YCKl zIllfpf4Kz)W3uJEtLPc&7uAG7kD|< zS2^SV?n7PUx(_s-iz}(`fO?nud;>g9+i`3qIrpL7r{z9XN&PBYPs`n0N&Ppd-%EY? zvy%E6^<+N^D8Ih(Us6ctFR)U6tehC~( zUs|tOmDDdreKFO)0soce+b5Oe{DgX+*6U~`^>ylFKN=A}K3oVdq4BhZ&mg}JUP?X+ zzJz>=@#E*`T+}CN{3|M{Uyu5Al>cQV^}nM&p!{mi|2QCug5w0IP z!MD(O23C?k0rhDb&javs%2@#ai{`^CaEFeoAHerg&UbK^>i>Zsr23Q3k$K|N^-lwM z_6_0VRZHW?Z{HrMS3{)U9=C6Tr|G)!u1azqMZHhk1m$%?YsBfRa^Jx70 z;3_FO_Ic?sxJP}9_6fr=hOOb zg!{B!Ut6b~Kj2O^xqi0K>#8@9dE!#v&Vm=xaxb&>w@JlQYCe{0N%N=5dD4e~ye{0qb6|TvezElqGX6!F4;`#e7SDXORp#dgcro>DEL_p^ z?fc;VDUyRU^%Oiw$GuhXG>v~Vyo8qfjjgBS(w{b;_PZMAV?WB5k?7X|%uju|cVXC@ z!;^HM+Xe2|lKQ75Mh&rkx%i#PzukH>al79=Y@P1!o`VN8PhNx1pgwGamy-VocWHk- z3_p|hm(wng{`f;=oWpS3xWGE)w1x*X{$6l3ESxjK)>F=8_!1ibZ1_6zW$=bH{&(Sx z$#=lFP|kkiQ8k#p7wCliOds^$H*Y21TN1(cJ;S*E{;NhajaYAt`ZRv8$GQtIpqxH% zMLr%LA%EC-mP*rd7ogsw`n7PEd^6l3Ps7V-{Qtl!$ZKAh>5u-tN*d2uaCK3*KTY5f z@^;4m|Md)Z7j-S_J*poKkCRU~o}-*6mzwQjuYcwn*Plnw_uXxU`wz(RIUn2i0P+)* zA8C|XU;TFwO2he$jqC5dZx;T3n;3iv`2^%B8s}qhk9?JJeLwZM>_-ZpUw>$QZrFc9 zPMXG9+idxaW*$zN2Ti_9~-8Vas55d)Ssd7B>5!dxbI7!3(@D7;EH^w zaox|s($D;C`45iS9NJ!&G|sG-9w$C`E=7JPbY? z9Oq=2Z%Nemg{vdtc0U?zoj$+2&$vFGyWxI52~U%+fJfSe>)(Yd^3UN8`99y$_4fW1Ll4IXf+HLb2iAT}5LpJ|=@x917rK!xf z0P|!K#?t`q<2@4xUT9p;!&c$#+ZCR?BJ7@Vy&o+N?-%1yAGtDIf4_14eWBfDee<#0 zd8m(3{Y&t4f60lV{yn%){)MfloS$ue>+pE~gR3@SuYGBzZ&|8<`fvd}PJSi4jQm=g zLw&m$?vmdHkC7+f9{FN;ocwjTPrePFAm0s7kspEwOoq%`vY$SuYRsDf~3G(bh>5or-HasA2W;|D=uUTgHM0-8l9`$Le z?+dRW9|Ko(e4Yl6kk5lVA8OBoG2^<=UBZ1Hgq$?xjD?qx`|yDL zQFsOUv&N%p5%qHwd^mXkFDCyO`A&Q3zr8Q}-njn$eCp?KaD~6yXy?^olxSI=RaNUr|fyK2VBhv`xN6@s+`XIbKrd&$oTDcSqk^a--gG?KZU0$ z|0j3_`4RYD^3$%6`F4=}e7K_JUIEW0kHI74H^KAB?}R(#vyAKe9qRKtsL!YR?Y5r! zpLJzsz4ZMxZ5UvIY$&z~aels^z&NIo9!l213T|L(xKvVX;}f#<*zcy4Cr?Gm_8 z{yIEP{-N=xT1@-J9^+Z6h{kgm^#|!VP@}cX^XDn2o^d_?m*qao!F5rA@j5Dj@AJ3w zwj;chydOMCKGwMY`(M=m>2O89z_@;X*jD;!`}PLvJ$erFIXq7OJKQI)(MINflDq*t zLEajkBJX27s^WA!i5u7boFo0T<9`4-0p&c0dhcPWw|#yC9wYx8-k1D0crp1YZDqTA zwB64)uAgJy6+Vu|P|xq>jzqn?L+T4LPiDb`ufx6u?vsB5S3AS?)m$0pLK9vuE+->rzPdwhWhk^aL$9qqpAaqXQ6R@yh_XXUG!la@}0)v!dj5Z5d+Db~ z{dD0m@;-2%d<;BJexLEEx`5`%T;qEG+8UncAHo9~XO#{z&LrjM!4u?7;05HJ;3@J! z#-r+d8s`M#`n2Q~PA>1Q>!??b#qtEYtL4BO+t96ud`n11aW?VntruFR(Pm_-@o~r`d-zTG9 z(Q@Y**XI%XeC>7PQI${I@l)eLbg&)wqdw?|-?PY;f5^I8*30RN{SKeY=fYje zX$JRcf9zuGH-_i=&2aT>cwS9`2ekjbU~_1H*=0PcE~NGS%eekLj`~)!Q)a!QstMIM zfL}shXk5>SM`WD#crwhm{=3*$hL6v8A*UVXJcjz%72*0daEJU8xJ&*g+#^4=D6?Mr z?}3u%!wbkez@6qY9&C2i-{z3t0?#A&jYrj`w7#>A>;89;$Ye!hYS6yKja)t4n5_IjW3u>KoVZnb2}u8rSC?%8A1R@}+P^{)5fOe6aWL zN8tf^-L9BF^mp8v8rSC|THi6KPg2ed)T>r1`e-#z%{blrOw+^2EQFrO%`58`q!fJr};-Zi4z?UAUju!~M6yJ_R{(y5D)!xW0a99-jX%z+LjU;4$*g z;2!xtxKDlz9w*Q3A=@!Qevxr~e~tIb?Dpz}`Xtp4gr~?S7}xJ((BI{phWdc&=fTU! zQ^xD4QX0>Ds83UUxpDnmariQGzl2lKJD{xYyIT{(cx5e=&Rs`8~)1Q$OZ$-UJIV<2E-7l;+uCFU-eZNP&+9k_%kzeJy%y{(m z%++!naNuXb1M-&eH2HPLbCjAF-mi;|>+MMWnSq?-09mewxtAG_DxbEa zYdlA#==jhT^>Nz1*Tct>4?#{qIpg3Z6@7sLxU#w3Kk0;U(hmxJ{xFs|=kXq-LZKKVG~ z`Z&2byno$mT(8%)GEZX2e-!RtE^e<^7b8EQzHLH&lJ?*2w*H>*`W``kg7Q!7pXr0% zUQ~Y(+$Zk|cgb%zo}<>$Jf9BVLO$QPelM%DtgpSVT#o!VabJVS@ak>kl+out+mWMi zKK0PgZ&4pme||-MlIGP317yE;uw7i_)P|?1z6rd7{AzeWKGe9LKXg2~2la~jFw?kx zf0)L<0Pd2fkdvnSl(*p?<$nbC$#=qC@?VVW=R!Bhei281ju_X+TiV~x7%1~9pz~K- z<5{Yh?nh$qIQbBG3Hf-qPd*hsgZv42Dfwb}f_yDJNxm6=H}3cC{46)F?-OaeR~V0~ zGMpdn`9cknbcCtU( zagHz^RS7!3Pd2XSGi~4J;Xe6CwtiLk`2U-6{d)oQe&8`%PshFbgJoX%v7ru`Cad<$!2)>2<6?hr>CU`md4tSb;uW@~RejBs+9{EW_WWRIB>%sHM8^a68Tf+;TqZF}O$moN;}<_jkC@8&U7m@#+g(Psi;8#`Srb=2eZM(zjw-?iuhn`9<&&@+;v! zc{lhB@&QQc2jqL;Tgd-`myu`RD19y` zKOMf8yb(N2eg(XOyes@5`9Qd$_twV1v&kpJBjgEq9{EDJ*FyGddwzM@xW0a%wN%F_xOUU1ZC&<4uuJ6-noc}Yf_fxt* zt$mYh_d=>~0C&lo!Q<4=j>h%*g3g0Cqu!_b+l}WchpzW#7}w7SXuTG~_mZzg{#Dq& z?0dYM;T_4#;a8LIGaglA=sCbY#`Sor$oV3H>(A_)Gkw#a`_pxAU3ilGLgP8gc~$Pq z3XszZuIN3zF1G%t)Z6pd0OR_5LFs#3Z!sR#?_JCJ(a!UG;1%SvkdvU#{gcLXRRNtJ zUpB7iIX(B=Xk5Q9LBBs+4p;QP#4pC9>OAW65#xG(4v_PRzJoPCrw*4sm(g>HON>WV zBg*MuT<_PvNlp=RMi|%6A?dw>DadI?IkVxHkuO7jn({wGev0zZCvlaBbJzs`S^fvt?^uyPoJ}Y zfcoHd8K<4k|JfY+JhADB%=+s5@1)+vb{P(L$)AGzKZfi7vi0=-NsW<`?~|Vm4=Cpb z>-7H5T;uxvf9mH-)xc(fRw#%2u@hRts@u)1M@WS%FlljBSr2eL-S zqspc0>Q<=tI!V2KjxoTv{@m?CIp5jeTb}@rlRpS=PRGNA#`XR*UNoAJg@r0{Uu?aXZ?k+e`Ry1zWyyTPlCna`a#wy=UKQ* zIX}XE8fT+1lCQ|)aF_Cz+j{aptkZHY87uiN)2h}uS>HI8YoE_Fg!hEo_b#r4H=}X(hR0|-jy7IL z#p!dX`;6^$Uql>Zv)Q&hhb^=Yam2l^e zaL#79PreJDCjSTS{x6(!>a8+wljIk`)t}+|ws4QU4?G|r3wQns=S+wDk*R zfpE??c#`}lxcWO>e+=%C*S!t+ADJ z!u!QG<5AUy=Knt9`u73p`m@^Ynepc;m%Jgoh`fWXr{_yuj7QZ?wA>ruMRc7u3OSxD z`=jm8WO$5xzOC;j_4YWh9G)Z(;0}42aeW;~v{V8da!YQKB7KML49ybc)LGmbM}b4IR2#JE?u`*yF<2noYu=R zuJ4=Z`9@c`Pvg7`IVF@c*LYNoraq*MXQ?#abFkz5z~(<4UatdicUsu+?mjUUoj5c$ch~OYi?Qg$LyQ;fn6R?lZ2RtI%>wjqCegdd{%i=Fs*04%DZq z{ug)|`7z^B)sXsd+TF5V0ezoXYva-5{tm^p#`S$79e-|yAEfn~jC^-&c%CeQE4u&s z0y)`~f53Q_O3-!n$&)hU*Y7*gdNqLGPVO4dRi*U%*Kv4ob$I?H;VJU%#`QdZCcIvG z_hiPS-|M6L?#8o}gWn6V$JKj`>-S4ja{RIPxl56gpmBZ+Pf~u)WZ911<|VRc;R3xQ zJbf-4_uVDN^>b7j&l2PMzT+b4!;Bgdx661`t)PCM>}Qsnqn6gT(tPg8&P8P}h0()epnkv=3ZmcQHRfksZ={E; zuif7tFs`=?{a*7*c#3?x@u+%<`g7R0{$4&`#uLLA-d%XF^ev$E>SH`tIT(*UpZcgz z;yh*jMdSLsus(de`V{W;#&*Z?^RV&b_v?mJrElp5sK-3H-gs24r1hExFCkAF*YgMO zIotXC0qRp!|0n7lT>mF9f6kgF{YlJ`?Pd3uo8UhA3V59SfblGqPoKBC_hs_+{3o9Y zFC_oMcvRg$<3Ia;Y)7oGgYl0rUPqPCeaafRPkszOgZ!H5nf$2gOUs>aTtD}q^X4k! z`aDkGyRrdZM!o}{BL5j4kROFtkVj@@#+j?u(Rj`^uFvCbXPVB~?bsY1AuobE(;Twfo4E&E*|w)?Nf_5Ca@ zS3Mx}BuRd%as8erZC?k@zt7&xcpY_wo&yxYQ}lVq0C)w>t2o?SkNq9zi%Hhs3HyWA z-w69$xYHAkoZvR{<9kn>A6=E-E^`gzeH8NUbL zYFr=BDd*;gGCBHuO8y^QZ3{2=$%j$@S=gICBJP)keT(%^!tTvN&Zl8N1Xol)DG%F-!?P(r4Udpt^t9yUk>3V)$lrxm z(0ZLbU;3b^&o3H}sy?*;{txx;W3pZHu|F0)lgZKFf7LeJ|JiVtd^fy;w%0`qB&Ur0 zE_j4;-h(Uh8cE4<$a}%lbevgaTyL*O!|Qbvu4sLGFO>Yfl(PU{K+D~4JgWLpKQDh) za?-TE_rg8O`4Ao_&v{OAeDWLM3GyVog2w+7+@tpvnk>rX>*Mf~vLD&Mw|+ak4Sjy` z4&3V}^)bwo>Wd|(E!FpcJ29y*K>b{}OZB_p9@Ss)yyUl|`mykU#`7w?J=GtBCn>+v z3zFY~>Sw{zRKEl6^bhx;{u0S?t_`p6aJWal5}qXg2c9Nx`y%q2NxnTEPKOteZ!?~& z4$^$cU7E?sRoQgj9}HLIi;PEAf12m}jO+VQIxbzhER(OV4-d(HXXnX&!xPFGo92RZdqk`t%p-fdj}UeBfB?fwbs^JuvZR!NRSeZIrE zzP>7#e%kByJ*W?8x$R%h)|c(mNNP@kas+G`~zNj}`To}cvnCtn)Z zzt2Vag|A9~92(~=coF#z@ECckb&}(fKVm#br5A?p2X`6Q-v>+MZ}wUyN6+GC!}ZgQ z>+OC=c)$Av^#SEy@w((B$!EYF@||#xyx!wK(qC&-b4)UPq1YDgCj2$hdwkLHkj+w=+5V{b%x|@u=!T$JIZL z>-T5s%l>Y!Z#%z}$IrRaeaMApY!fAu8$A1Wc)V&KjdFU<2m&M8E2CG0^>S|uFrQE*Y{o- z_8-f5oI&Cqd>%YP~dbhWlM5-}d=ixat=6CS{W2lKa*v=To>MZ}^Gi z1YN@Uw^^tB&2XPQ?^EPZ{s?#ht?wIfHC&ckf_|R-8P<#H2g8%JT~-;_&kbn%W^K>p z=;JeaZ{zy-e`k0;tIuV*K8>d*-03UhwAZ(b;4vEK-*At-=nKh@lh1?u)=KkOZLNsgKv z_Sx|Cq_F=45AF_o%e3Sq?+W`&cyM3Xzk&OAhP}ym7!Td&PJ#Oqq&|&#@)2T|wWYd&v)(oTw_I`YG^ydY>l^cgPEOXL9u4aiIO{5#v$S zlk$H+eJRzq`cZO{J72;wvlhwUzigmH3uQ{F_RA zUnO2qi65%Ovwr%&w|le_KTEs$+-JX>my0mz+8K|ki)nuLLA^`w)l5QtQ>uT=xc`uh+X$a-bN7sKP^W$+U6|BUPB1N1!r(VsKp(a#y^J;MUHL-jG^QFRNA ze=K|*+`d;o*SP+ke0r|<8tR8q&X>k@AF3}gYwBZtYyTqKOX0r89=qDXBjj;-nzrvE zjO|%Jy1C<8+Pd=Xf+v#=|}GMesQJ7smDPG0}S_C+^QI zS6|1rm*+VPuaQPHGp^sS>n`)b-bdUF_i4MA8rRp)^#0Wr zc6hJ@^9sKZl2svnc6!R^8M zjOQqaw!8C3W;{`~hUQz$cpc^BN`7#Xxe-8}hylGq?51*Ajr|^pezr&NO!hY`m zqz~!(lE3_9$-lw4{(Vx)PZ-zF!DzkKqduVDll>d{L1XFLnb`00|CHr=1>!B>{f+D6 z66HJsSF2^eaAcV3UARO37u+Sk;IGVb^?pb1+q8!}f;Rgg>awpuY$+P z2g4QR+zC%n{S!8y>Q}-&@~!Z6uW;XfG#*t`Xum#cT<^a$-%k4n+jn_*`<@3+lDC8h zC6yfV={pCa-o-`lD#Q&VW1QP2ev1 zRdA2|2IKlZk={d_2tP>gq0O>6>tuV`&*PS&Ug7t@?0&t``an5u*!?#Rcj!9suyv}B z9?JBgjw+*ZHic)?a=XIQR6iVEL4GehLOJu{dF1Qh4*6&BeDdGmF0F5ke`UQ?f9a1s z-Zq36P)=L8M>+lAF7@qJ(7PhbFS(~ zWWRGC4xguL8`r9}{PalLy?*A-VvKkas(2v3ne2v3kN zGOm9QiI16(67IJNFZY_Gne~mTZj`gexIXXG_n@}>PwKDbdgJ=Kz2i)?re|V( zYaGke>+3Y~L2z|-xPCRzkwH!pOz*0FH=q%<9c50T_PjI4m<|#ekj+s zK5lpxAZIn@Y%{K(3X|9nz@FQ>!ZpVLmHCb+)ybaukUxb_+ z;VF0v_;h#${CxP+aHqCwrt)HxCT%#oZs z;1|Jtxb0g9xRWdOvryk1o`Pf6sbO$0D)kqmek?ozuM5B1=D_jmKI#E@8Qgx4K`A^9 z?}PiMC2%)SmfIEiYvBpF-R|$he}bc2eF;~mOU^a;hd<#l_~lscDb=N)i8G`gtS*En z;dcC8;3;@LC82`*(0Q!yULCPa0kTABXWAg{R=7 z;Cb1yzRsDl+?wzU;RWy;;H}^Z@~-d-@YT7|xA|}%IeXw0=SuzE@WZygq4$FL3Vy$!THx2~XyWw}RI^N&1<-Q2ZfyJ$U>garwVW6~I&Q?n-`I z!&PIc>;k_Y9)k~pm)IP5TljQ%1-vE3^8~!$63KrU_0Pcr_$t(|gZl+i{}g-++__ZT zLCy}i3%?lkzry2}N&OvoZdtXa^sS<~_~*!}4KHgUz8pD?;C`Wa?HckQw1FqviI2<@ z9|(_h6mN)}iE#I7@jInlCEx-41NaJfqLb7=1K$WQC=&kyz6&1dEdC$X_h0K>#eYKm zskNjJs+;&g)L#hqdWhc!Zv{_ZE8Yz`UEu{i#ow$h|1c01iT2jK1maXZeFPLclj@D9kY2QQl_^tg6cQIRf*)}qW)XB1CPP~u=((*HRK)N6YXt1++P3mgR7ZRe+rI2BjJ%p#Pd#& z1>6rWcuYKran6C4%@w~2<9reB%oFbie-rLME#3gW4W4>N{FW1y`T5S~EEab#&OhPq z67kI#XZ48mGqOVbD01pqUn8zhi{|GtxU*LLbNE$o^_uugQm(Fpr{Ilh%0Ju;Pj8U= zp{TzN9@{8B96kdcz;A=kgS(rg-p-%p@C1A;>I1miEcJGO*=}>-r=b2Pcnofj8-K&& zaC<(DoF@G&cwh1Z>|l-H6kfF?r{ed+pMZNi#E)RR zudx1g*f&|=l0i^^M`NU&KdXoLAcV-^Hh3 zzICTAnMe3KspMX16#rtBrJP-G?#Mh(#HF)d<@yk&E0X$Jn-1hBTTYsYX zO62?wSJlPGAg6kc^evt(emUyThNs~6I`$%X>?EoG81=2-PEGLu-VL6HAA%3IUQ6m< zsv`ez7d&x__#>!)#O9wW{sR12cp1DY_PbZ$kzA?25&O|LxL;S?&gb2>K2Q91)E|Q< z&Jce)TNWJ2mA=Iqh}-MK2Jl2f@m?5bb9e>(YIqUcJx}Ua!*77A^Tq9PcpN+iAAtJ% z;VF2$iu}Wqa3^1K>^xZoPs7i|@og(yHJ18sk^haYhaZ6-vwpGEZ-Lj1Vt>3u+-}E0 zxZ6bB?qA*D`U|5?f?eOC@EF|o`5t(psnkD><<5Z@Tq^!v75Rr1Houwp$?y&ENOSR< zkW&u#;r2TDfABQi&i|TqvA!)N$3f1;@G|&BEVnB>Rw(sV;ltowOYt`FyWz=J;!orF zKL_r%6>o&?_%b}+Ui?3d=R@lq#Baqs-wUtkC~lWqHBZ*7pp*DKD9VI!}Apb&m zVzl^9cp*GKMtmCPTMxJzCvMN19y|#jh2>6wN5)HiT^#49!V7K}KUiJb_^RH=Uu{x{s6CjJuqw0hFd3ixN3=Plu7Go(I+ zc{LdBKP*17iUd7ia~=_oqn~fUy+_5TA?I^jKU;hv>eKLesd!`bvjU!+FFpqKS!c@l zBT4bRS~8xq;04RY?eVY`T&)nl1Nqm&{g=hBL?1kO@QU~=RU|)d>t7XLihe!-FIXq; z!I#1l@NLL>3+}xx^^M>k+xj=erz2-K+<8;{EBIe<^%m-pbK+UjpTyhZf1+>ot-mYY z5%pKX)9;A~$iEJrTrWNiJ|14ML3|H<2He>w{w{nmyaH~oSJ%T+o20%6#`z6gy)V84 zegK~SKzuy5*NOT@Ci8ipw@rK@mU|{VQYPM`iu^;Nt^Y)P6!N>n%RUpI3?BxMeIZ^S z^Z71#{44SMvD_!%>T7X(o_!JS?-c)_iu?!f+Wc?D=OF(xc*XbPFXH_23p}|`d=2_= z81C&C*B^hIpIY_NpWnr2!q0|RREU=%rzt$~m-qp!S6k}`#CKwxJ>l_x#bemNhQotn z;v11O+2*MBMw(ZVe<+2QRT2LK^((Dc4f|&6S>pD5`VG9`1o5%R-w#h#6EDa5{s;GK zh~I?ep5{p3D&Tg%y98c#lGOi)=T{xA=ZJU3atFhmsQByfJK^cN;@h#@Iq)D)9OY`U z&4&*`{hM(2bg9q6fAA?hc82(V)c<1Z>xI3_IkLV5XNuePtp|^sC2sfM=I}CjALL(e zbIz7}>l5J#xc<1={M-jmI#S;kIdkCZoUlI+_u%&V&uj29xQp%kK0I=sF9pTKLLi~Z;V@m9z`8=h<=-Vgg}Gq`FhJ`OoO;Xb?^KHBDAD)qgv9Up)P zmx;dwe-<8ZE}ImiXTJ%r`B7Er{TZD)9~upuOkgG|Jz8t-7bycv9{umSCydl zw!WSCFys$_d+o(j@Dg~WgZM-oH%j4&BJoSGzAwXr&f*??Gu-JSeh&KZ9X!@ud?o6S z!c|QCZ20L7WqqA%#T|G{xZ6{F2*!UsJOyu7RsLZFyrQ?%>&sg6GZ`M~BfbRw1U$Gw z{1xOchx`4+*TFZ!-TvYOG0rdH$pPYDSC#)@zs(seel>Eco+s;D2Di_(9C*T$`aP&` z1^0)DZ-aM*$A*gE3?Bjy;G^NU!3%Dbdb^*_fX8nZza90Z@Cx{y@RY3|F7?CV8{ld9 zUii20vSO(}1%3P5){hXk&wFd0Fa1f561UGo&W3xV#eYS9Q+Vta)FZzL9vLgX0rkD$ zX?SPU4}lkqlX|;8NBQ~bTE5|jr|-z{E({EOh;B=JY!ZQ&Jg``n`sJa&)N+v8^( zUNBkwHRMdQIq(2p3Qze`-v<7ct%uv|lbtsIUa8-S`XlhjRB`(pESfKUh{NwdeG7O6 zJc{jj9XxWMdxb4 zs{c2RA8Xl%ltLPzL^8I@KG~9WvL(dWBQYpTlqpL|YAlt?GAM*H3Q5$l^v#y0P?8wh zBs5VeOa1O#ulMiqIOqQ3`^VGuz0T+JIm?_mGxy#5tWPaGHCH|)w~CtL!3FXV`Hpxb zDR01b```(@HTf}kW+6S~pT+}=+m2RCchJp;xWeaHJ*N5 zJ@$O{6rOlPKAWD4cxZ`y34V1|t#byq>wINAvQ&BV`nc=!_IPNSH{Tym`g{x?c+;Do zipTNBjPo_z#k;Z&Z{fie>aph-+wjC&^5^K;Yx%e3ZFB1%zQy6xi5X7wziXAhpj?REBu<+mz-Rc`$se#e6!%Xe@;nZKIWGrL`G zuT!P)_zrn#*5@`nxl?Y><-&Mqm%I<->|}Y|p3n5fv%8hIbsLFCKK1%UJcUo7|3y5s zNBOsM>mQcknY4U5`AvB2b9rIr^%)-jLOzsy2G8OF^1tEEKIQE?mj5=bXBb~VPiZ`Z zZ^x_Qsr~A)>q8iiekp&E{nZwC4$2vh(-#lmE$AO%J?8u$p21V!sK<`aId}$NLw+fq z{8o8;f4UJ59G2UC!frf1*b!`#~NK|JxB-0lZX;K4I;yPt7FS~nNB_m#!);P1-Y_2eczjqhQ#xxc08VOnqCfGV!qSObIX(TFT&$_}m%!6_cgA@m9x9~#akg6v4;GVeWxK8LES`()-j6#a zl(+kwfq3L9xxH?V#WQ$>p6Bt%sb6!?1|D3?%*DHS!zhEAe_ob&mO|5?xKSKU`JY7Ng@5tB0-HP(77-thaQ%U|J z-T{x_EH76`MFa6Mudnl%2psa*e?^Ji4?6yAdI zbjF<)O4|L&U_6XJ$~dRsE`9=EWc_!m=N#*~(fl5{-S-~GgRSHbGM+PdqK*7!dJ5L& zy4O~2`>`4xZzs3+*RAnrd->1wMDfVI^0yfO!?@EyZtt5O$CLOnp8Gv-JzbUW#Q5jp zsc!Q6_;NhkLvGLcH{j8p@?RLw=Xj)-++H7l!4r5F^5?A|58(ytXx)NQ^_U0oh|lZc zai6!qQ}}w0w=Q_BzxpS#-G^{zfP5+bl=a|?@fmn@pz@8b)IYqACx^-Z|GpXz#N@Nt zzn@tDaC%t(19*0%x92n-eMG*Pc{#Uh-2!9fHs4}+`f+(r`pe;=xcm*~RRho9hYIQ+ zn&Iv=<@=Gp*Lt3l-@&~4Z2cDPLq30Pqg8zZfF@Hh%LX3YU9-Se#`-hFz zKU01a0=J+Ap#TViKSbmOrGI+&1HQ&f9@_rm|4RLp# z{9*Dv@X&m@J+~QdJqzST$WO+jxaD8O<4NV?kx}0~b<@Q{?3ZB5Hv2G3U;5y~)^|T`%^Z8)h z_4$){;63%&>&45s^S=BP>$Vcl;*;=?@%RSi|HL!qAIQ5f-!ph-qx?oZUp?00L;1b< zwRr3!d4~Sm@Q5q7&pjJi&t|!urxD!QBA-Fe06dAG;0@boJaJU{R^(s6Gd@q@p<~M1 z`LZ34zkz|*+BkISF)0{Y+meBe9v*!fr%kK;C;>UbLehU2p-p88QecQO7hxbu^I z59>VGdXCF)CLg!_&+;e_9ACwwzsld`_+N(y|B$!HqoVzI>@T_9SN~ytL4Fn64K&a? zB=8%U*R6Q!lJdxm z*Rwu(8fkr^6_syDz9gQ+@4zeL8N4oD7Y|lakNrME8|%UCextYb-~|}ZV|ex^_3Wd6 zCZ4`oJ_LUg4_B5C#y8<9d?5Xw;=wA)UnGCTysF&3r}rBk3CVkq&(m1zmcq;6SL12? zE4F*98p}tRugko=5TU?eZ_lKX3Uv!~GlD`#C;q91jbKGg8 zd^5&>A0BBhuRzZLJdXcdSpP5@kM&S~1pU+S>;v*;_#!;nOJ14&wRjqThjrV9C;BLF z$LCSp=_|MArRVS%Zr>9wa+lUE>+=eDte<*5VLT1-aDVwCyo2@N_FQNPo*AILy$_m# z#~+mcz&a%H*kHMxkMH1-hvW;{?l#;RA|FN1*Vg~Ad>wuo4-b>u=b``N!I(VfCH?YG zktSN7;BdLUzL&!jczN+sMF<%{CGtskF+|A41)yWhBk z2WF~gJo~+9Gp$2nmV6DbXUB+Jz4{ngJrKhvy@yGEP9{oW1k@QTo{6_hsLzPkDQty|Sg&A^M4TJU8R6&zs}H?aJHn z+#L_?kZ)u?V|aF_w|^oY*(D#vI?Tb-K3`?|-OAhj!&cn+R9>9zevJqBc(kA0J=-8H2lD$)7GQpN>b) z$d56vBp&`y$}hL~N7Jn53VC_*%kXpoxt*t5@JK?-|VdWd)H{xlZH^2i$lrP8e&=C&>IH)UyHk?l(*~N4m^0Rd_3Fz22bL4-9Cv&uT#Dv$6>BEtV3yekt2e}3hso}vkh;Hr*XTF9g2tUQr_pz=S7Y27;c{@cE*#q?e`d- z#qByU)%shj-~3JM$3I|wc38fx@^)YPBc8(3B{->=6xA(L2@o)$A>?Oa!`a8<){_`t5fj`AK&sn~+cbp~e z)qG>PeV^ebJaC`#cD^*WywC5$(|CQxIl_9ns>l2}Jc6$$zr^zQD?g0ma}yr#F7L#= z_TiZx@*?C<;@O_^-t-sfp!r67$=l*L;3@oWye95MmAB)qIUdIC`9OC(f!p($NAPHG z_1O719Z%x+y1(4KkMcd3?@rw5=k*iT-{0Gxx1;8p#FsIz8}Y~hOgh!DeTWAKd3`^g@cBvH8LYgmXTDCFZy2}ZstoQt zq`W;xs%$>Q>#fZnmfLaF4G#>Hvs;|Oco4Ve=VS3GK8|&pf@kmn_-s59^Y*W@9(*PF zt$1L#^7cLR{dfxJ_Q5%gyLdi&F5qeW8zxq)v(_^+QvFYmFNa4T@p?7Ol<@HDLjL)CNQxm=U1$cat z*Vp2a$zI=u2d8-bD4zBCU%30U@`c%t1@B{ha69iR;TimT^0(vRXVkL+zXx}w%I)>{ z0X%}|VgqCF=(EamyX{QIl3iu#A?aM!gJ2SQ2My&I5 zczBk)96j^#D4z4Rhs!^2E-eg zjK2w<#cf`9z>9X*eo5fB;T3Tg58`$43~u+y z9q{1W>c5eEZ#;tA`hi&v&UcMq*w7Psf>0X(+ayWNU-5^q9JE$hLr#GB&IJL<9h`v4xq1LTL} zA)imd!?+#iFXK_%uETHQah%7f&L%vG+w0>lJcZkRLKeHDe z_)xx({8-$@-^XX*@sE_Z^<07H{D*BWC++#?R?Fk|y!R*`+N`|Yk6p4nZtp9vjcQ&Q zyes3Wfrqzv$I}*f@do4v;?7oY{z*KJ43d!?aJScPsNkC?e`^?-{Bq47CepH_z&T+ zoyyz(x@dXa_E+gXoEN*4Kg4(%z|7!am&AtJA1tOeRveN zd=__cyFL`m`2gs@=Y(0@j{gdH>@)R0$N1~vPFimHj(8lm{9rurx$^ehatfZnr_-Or zgI_3b`|$%jjVHpVjqu<%>Y2{#MHf7ENN(rjSlszmZtMRd9>wkWN#PmX&c_{i{IGg#|NdZk z-1`5;!$*|2^)LOP=H=qH-CB4!qr7=L%j08M|ACf2>K)HSJc-+Q=HbpUZ~q27j!&U~ zKOXo_c{~2k;x7IM`C@}Kuh{qA{%Uv@kCVU0@;`X+Ezq`J?i-o-6U-Px1u) zJMa{4$N5i|Kd$^v@_7bp{8`-k+u^aFmAB*JWjt^~Zs*HScpSI;iaHOeKk|$6L)mUC z+{Nv6`~f_6QhB?de+19qb?BLj2TytXm*WZiJ6j(-e%hNqjAwBh&u@70S8qQ55X~!) zm0SKg+{JCax8b4Ry!pHE3~u`?ibu{Uzk%^Tjt9YFPjVewG*TY_OZm3Ee?K=yo<8p# z&$_Yl&;_}j?;{_RCvY48Mm+1w=NYGb*GQ^iraN&CGO-=z7*r%Zaugiw+Hbw-iiEaJd{^G z=J}q|I1~6|n&Htal^>T+MP2Yr5xKpNJd7ub%6qWgX?Pa5 z_b+eY;bO|y$*=#zCOm$%{9Oim(DJ3^^Ei)A;hF2?_W4oniCTwfY576&CGqg}a{GHG zRq;qUdCq13@=sIT4a#RSuRhjaUj7{UNAYY0`KRQcwVsOd^Z2XgmE^_gS%GJ6mOsuq zY{a9t$nE#tKDVAK^5OI!!^2hOIhU8qKj$o8P5usk^ z`0dt%zl685d`;y?<9+cYz7Bs3kJeJ&&X<|ikK6m!rMT96h4H{0@_CHEJf6b0dcQ?2WrE)~QN z+)8f0H}MW0Yb~G3d9($0+R1ZXrZ4~O#p4lg&kuO&Uaz0SGacl1eJk=b$6-f#AI4u1 zPviaZW_Y-hx2HSq;?^?)4|P`FdS>EDJjnXIYCT<*xBKmNc=&#~eGe*)r*X@l#3S95 zU&i?JKco3N-Q^GBW$+ko=V=W*+(Y@RS^sK z-r#0D)lY8U4?JK!{k?t;4-J&}oOM zzLZZUe+M2sAn(q2?!n`@eNNE>PvS+%$M6*X0R9{v_*(r@dhj6+DT*!1>r14;@ziS@NB57caqj4#qP_lsBJ( zJ4faF>0e;^@8mY$Re17yx&5B$CwTBjxy|dS_25r3o(p*FxbkiBK+X-}f9J3Jv)rCr zR>C7E4kq{m|ulxt(8{)wW@;Khs zdhk{F19;@3@?YXHJakEZCF?v15C0>#=Tx)sEPjrj*UkS`{!e_3xuYkRXYlRjx#UUw z8$6L)UY&K$;%;8~OXQvBwVu&@^2hK1p20WM6U0+jDsSIQsb+cnXnqyd#nZ)<|APMJ z))SC-#5>}F;_^!PKs=1wbz?jp!R`0iXW-Ei>UoI$vJ6jOC4Y+k&6Y1I{~SMrhp(2~ z-_QI5Ph2D4Lq3pmA^Pt;jh2$nV7rxY=Q{cActbo~T7I0Kj(Dhyd=cIk&*1iYJr<9Y zRlY9y*?0oK6<>wB_(FUq9=l#WpWyrPa5=f%UlmMnUBV}kZ-_^3Q2spL(L5-x%5n7| z9=}n31^zgms3@P$y1j^pZj#r?rwuH}V^!t($#1p(TjlmX>#+4ylh$ zF+=lB1AE#daX^ux~swd}m^zu(nJX4$P=9Q1ZgLUP0{hVcad=%HW6?n9v z@_(qt*=F8IZu32e2O7(NV|}vbcgbyD1!ro$A>7Wp3V0ZgF|WFKs;PR8F`kZivYEUL z`G;}0g?u~XnTjV`%7-)GMR=f%dyW<(p96XC#{%t(b zUwM1ZwjB=)kbg|i_jm@k*Xw`q=s@M|I4}K@=9|V}q^AxZdr*1v_IO~B*9YS%d@?;# z@bF;er{D|lG;Z&&*IE7{>W>iJmvGw zczCGtH*)=n;;~_JyG}l2K3s0kCr9CFd=={u$KxZEZ$SUExI0q*F!?!n=n;7~pZ;MX z9(+u0>$w6?;M3_@WBGB)+wY-o!jt3WL&wQ?Ac<;hCr8@8VtY1X8k;!oqD=j7`c|7&=5x_mXh3QxTtKf}a6G=EWk7XQ@zHTj3^uM8fWE4TMe=Pf@^ z9^t;C@GDwRXOa9E{nz8!rSg;XSHUyOm%Y3CgNWP2pza_Wl34QS>UXXQo9FM)N z{D*h~52fUf(Elc$!tMUy13dkX@}H95hbP~ae}kXG<7?!7@q({veX_V+4=dq`waVN5 z)A88*@*Qk<1s>iYABS(pUHom1&lA?ON%pvHdpO;@^ zJ>NFJAaBRKKEc!f%15wYzQ-fET3&8=zo?4-!2<#L0Qw8(d@%ao``I`?9}nWe;@*56 zJb_z2f`>{dKbf8fao6WhZ@y$w^Nr%`*=|KVSWEe9 zIKOVk!?op~az3`g19j!!lJACR>&bt@2jQ6p@^);D%i}C+~XS>Ml zbFos3v~G#}5QGhmCl6lsr!U3(Mn{KW+KZ-kvMo(7L%kzY!0Q@#gDW9$(FNTjBAs%G)}3$DPOI zZ?k^~(o|W79@3Wq1@;}J;H-FCCGa7fNdwmL?dR}gy8_vc933*fY<03pd!|SW9XQtfN z^F!R7C9hA&Wl&%r&yos@YJhbzXeae zCb#EW4e<0_`PKBd$FuX~Hs7AOv%u>k@Icb*Q}EzId4Kv}#uJO=_PW0WcNfdABEJsL zyzce?;m#7deU7#l4=z2h`-0ov@Ez>%O-c-H|`I2}7x9eC{Jg{7O zdv4hRPvL#&>4gVZC~xug6n^tSRJ(lZ>-;>Gc)cwm+C=8LTdx9`<#z?1k&dOpJ=DfQU%$?tI&x9>Bb!(*$J zugv?|0?Reu}Tf$HYl}3#W|#b4w)+qs{#5?bjp}*I^1sR-qUSX{a#n8tJ;bGW^mloE)^jbM#2;h3AK}42 zmES~uC!WFE+^&DvkB6$=a~V$3bKH8W%WL3&;?a=Y?vo3z(0*}h%FB>1iwA4TZ9Fyb z41TJR#?uT>H&)(`+je*)EVtvWH}2xL--qFWCd%7!KGFJdd*3tzk2h6b|LZt&EsvjP zJy)1FQ*t=|9v*2f-^>2}7!TbexA#Gx;TgOEJ%{jME9H0De!;V?<%jTdc)G2;2|a~Y zYQF^A$)Cq>z*Be{ua3vtD{p_FEo}LS{1fsK%ik-v?=kkl-462R3b*Hk9r4g$W;k){~IibE-f} z>z2grc|v8}nW6kR)*+0?XUXmFe)qPX+4369D~@Mym!7$ne_8ni`L%dxjy%M?KEb1} z$n84+mE~WRuMeo`XFR)Het@0}czUJ$Z|>g;uhu%GKakg8oMrI9hw_};jLSdOaMzWe z;<@V`czwl^=_Lh6i_e$Md7* zal4*hu>4Nt?e(STJFE|G*VW2+XqWQ#z95Vza9fAYcwo2kwjX172LF)#H5E_pQGP1( znumuzlPB@jcpA6&t-EkHt^5M=hwN=yCCMMtM6=zrhnny?zFd9P@giwOY5pcV4fEr|~4)t%t|H zSKhp>_52{W{nZao;2+Zy$D=DX{Y5W>`rr=qemt|)q?wnMQ`93^=|3l9S z^Ha*(_ofQI$Mpoa-zTbxr%x+yuh$*$=&$lYTqj3ZJ}bA^<=J@lH@RK+R^f>=@@E+5 zPCR&4Zui?iSwG%`eE#(sf9Q8_z9OE%E#C|e|DpV!^z=3VQ{D}qh$r!O_+mVZ&%r;& z6X(>^2mb|k{_=W>_ci_)Zm$%T!>lJPqmnO9K$4t@h3x>25C zed^(X3i1u>SKLd|cQhpNKeGAXru?lLSCK!;eE+om z+vN8BrE527zR~LPoLi^MKVkEbH{TzR)$sZ>JYG|ti=MafL@jTAFP^OJ_49bDj(i#y z?yEo4IKvI-XWgpf5!{~tG{IvHmACuho_HF!`{6NosFCuU>7Rx>jlI6udT{&i;H<+_ zO_krs`;I+$tfkzpp9ic5|C;Tdww`;Gx98zke8m20CAaq}CGeEbgSgY$n-Ad;d@I{+ ziU->$Z=c7t!vk&QtH}4jUEK0R@KihH8;~D`XYn%l6zgxVyuFW}i-#ieXE@GR;%*1| zYpnB!c=SGb9*+Od@K`r*{umzUCI6KEGkB)Ad^zJRkn;xlzxNl3K61NHD~<>H%3F{x zi$`%g-m2j)elOdtiw6g&=SjR3o_bI|81HWRhvfI+!|?dS^0xQ{JUz_o3F{dlAIJFT z<4N3}i@u3FBb9%b^L-8OJ|Z7M&lWuVsNDWLcYDl7%k6WSBi4hLXZ%?_J68F}>3243 zzr-Gs+w+RzxHHb1zY&k)mamNm#w%~nhnwLE+`gC9&U&6uehA~aAJ5`f@Bp+A?mVk} zlKfCSiQ9e17(6&l`L^Wacnt5&`n-&1rYnCnz7%&7@`LQJRhFOO_4T+rOK#VzZFq3D zd<6YzJo%E`&i5nMk5?ss1`oWVd~xQLcZ>F8$mgZ;2ws$YRXmE9!W-jp{A#=tp2Umc z58^4j2tFQn@$&dAJd0nCFTn$^YF@+ewRjx2_aocz1YVu%*lygNub$cT9KoXtbx|Dyb*3-r9{Z|=0xKMfX+ISqd=Z!7#3~u+CQ9Q9oJ$*T@M&Zuua(k}(yybEG z{PcA^`G)d#9({xdmdH0S-vf9WUx@#T$CoN!jPc~%#&vs{+}5Wy9(Ys!0zG~3ByPv& zOx*SPHavr$E1{xq%r~k(=WW8}pHtTVk^D70-^Utfc#C}Q70O?YXLiW#dB`o6-zi_K zxKj^zcFEhb4(;*CZn^#5XfHhdnS3WbBk^Qf-VA>p&*JvJZz&%BTzPXBPx$<6JcHZ! zrO)EYFVwS_?H0=U;Oz4E&-cphI#3=@;Q5&E9e8q|@^-$r!&5#VjJr6y(TU?3oXfd0 z2hZXKIDg;Aov*cBdp@uaPvFz8)WlBW!DGrl!F@}?Pc+};4|2P|s(>ecly6~u>f+I# z3Y^1O_HIiCDo zz7^kz$NrSt@pcN2;}^+awS(jNFXe|ao?GxNUZ3kj6FhW5`A&FGJaI`Lz@NmE|H_AR z;4a03g<4v-ofLP39$) zxA#HK@buMkyFT>A6W7Sg(=!2g@z*)OX5z6Ml;2MNEj%2Qr`Ru_;Mwx>Y$5$0e!(-< z7Q2tQ?^#t+I-SThA*TMrG~XyGxp$aFL{vT?IfP*Eq|V#f33fd{9e4o zZmnAye;>aIPxMvZydECuCofJug2(Xd@c!0=AHm01zQ20R6V^XKp5_H$F&-Q%AI5RM z!TKMU+wXyXif7|;`#kyx9(qbXh4GxlUEF>@qCn0Y(*IuX(i4^cg5$F+o|-K0iihyP z)ADibm)3YGe~z9tcyxjMDC6IaN0Rb7^#6n>7Rfu3{|C?F5&Fx1ru7NG zuDpE@@J>APhWrZh9q{N9`6c=vHeV{Y*XxP6^QL?S`Iqn%-jwmbY5A4PFCf1WPvZR; z&u4hxZRJbgNAb`qc`tg-;R*alyl7hM5Kk#@UI~w_mfQP|MwWj^ewLoj=I_eyVmyQK z^cwjz@)PjrTDiSnn~gi`k#};aB423T(zrdxz8=qf zuDpGIR0VhT%1_X9JD$a3cr!e@Px*J4S9d&kK;DD>H5`v0lvl~8qKSCwh}_;E&B7BI z`Fm{l4LovG{yF|W9y%uf8Q+ZuzmwbNfQQY$_j=a+2l+C3{>9TiFSeKS^hf32CSL&$ z{Uo>hkUR0fartWUZSXX1^XiSKepY@t`4M>Zgxu~cCgZ_hbIKO(}sSEOZ$v=t*F3RmX@Dv`rByU6hRXm2<^V>Ce*5|t{|BrfJ zrssP+@UJ|HJ6~$PDf|gMh=&}FeW>GM(^1F6FIfFrL6I|D^TjR=x}UuUa0r z=TYzAS$qfi?YNsqJ?7t8PhR;1@_*rhd~$nUSL`dTLjs>pzA_%nue^=F5$@ti@}2SM z72ffT#6wrg?K+ddv$*xF#uEjUf0F*~c(9<{@<(tNxB32#hYKlh`=!JI&DX`J(q9da z6jpvd-UiR&*3%b{6;a-v_m0QYcqe*h;-R9-+c=lvDcttsW;|X@d0YR3crYNhbvT2& zxb+wLTJsGTSKijYD(;lu$6sOm1MuKg%0G)w##8t+_#!-9Qh9S1PvbVuukpy$ z$}gbjS3HZ`I^;XZaeIyO=B4paDY@;hT6hY#d|Nznt@3vK55hCJ9fuR~*mcU=_+P`b zK7ZHprM>xGmd9zRPZ zZcyI#%N*+odVMvX!mZ~MJX~IRTeoj<*XMs*{zm0({3Q-)9h?gCH5@0m;x0al*Xw3@ zxRUaA-Rom{d=@=V;L)3uFOAQ`<9G#p1D^8b_v2}wXYs7h3xBJ51#b3kw;CSuc}qOv z^Zt0u=acaS9%B59a2KzGe~deoH6EMqcX-I>|KL&F)~)Pe%`1*yLw`d&>Feo=r+q#g zcW&{HXBr;DZM$#a5ub0vV?NK|37=oWQ@E`|sUw#yoPe$HAyZsRYS(fDJ&{LOg6=V3hM^KN+B=VS4#&u8L+TfO6a z3lI5x7aqawxcw22<96I$aa8kiahq=iJnQoYc(9sxJYDfHZu@aG9>uLcfhX{~?62i` z+UL9Qz-`*@UF3hUexDaRrg^1s+wM(x#^;UjKy~lDy5J$7kHjNBpN_|Tz6?*`HXavu zaa*?|c*f_>cbbv@0N#qE9i(|EjwcO6#ZN!-T&8J_m#vv}6$ z#lP4112w(|c3%91XK*_&0zYV+!CD%p&9^ol@p)%F zj@xy0ES|(|eAGwba0hIrQJeeghC zjo;3TNq88y^I|0)$8CRohNpb~E1tn^9ZHMMSAB!h^z7S92 zc3y0^{`%Uk`B^-M+jfipqH!jD9>UYO&8t10_4!CV&_LU@{A@hr^L2OxxAE-9@II}J5XJ1<_u+o{Ly&-#2K9%$?x&tg2}^N;a}&rjen+|G-_r#T*QJ1=VE8QkW3A07y6Jm#bEFmA`g zt9TT*{p;d!Urz>4;dWl+`c>o1`ur9=beG0s$A1Km`+OXp#%=ts;7$|oyw+PkZu9yI zkNEro9`kwGtj3@4c_Tc9+jt(pGq|nWMBHhrahk8dgFfGfhkbq?kK%S-l>JTP%;0uj zG{BS1v|U?=Ubu_f_~UrimtTMfntOXb#6vzmj7NN)=ZwY~^ZAW zXK<&5#%brpDm;wad_TuyKF{Jw+}5qcS&iStZ9m?DXM8=o0^HX@JrTT4N1%KB#qdu>UCvclr3q0lXL3rBdQ}L|Nm*atZyyMx9hjClCQ+U+p zCI8U)<34YICw<-YmZGoqKJ^**xdbc|j58}3e zSK(pY`ai>CxSbbSJmvFi|I#?KxSbb`@o+nh$9yoJz-_zF;I7Y?T0d^b!~gI=d+&Tt z;31zE`dj0S_`Dh(!)-im@FZ^QHUf8j{wkjF`BvPCXq?vbGakh4yeM>@{f^stQ5BEg z>z!{qJdWG=hv6w-{&_s@^SAJ<&p*Wj9lYB;gNJ-x`~vIj^O|_f=UwmwZs)~l+{Nv@ zn2$RhH6ELx$9&!uPxyQcp7QxCcpA6yyoWnoG#*>GLwL~VdH&Hj z!#=NyM|~c_CvY2Q z40nD0Jf8LStil6bz3aRe58>AT8y>~&I1D&>^!G-5emkDQ?fC4Dhwj&Q%_re;+_sy< zQ$F8h{kX03LEP!)UH^-C(C1}xY5ZZI*THO>%jwg)K<93{b;ZpV2?Jb~MB{wSWtZN4*cr;o;Cz7h}Nwr)G{2yW~AGamExxc z7!UTxpN59>)XyHBQSf#zQ{eibrs}4?l#b@dTeIp2edB)PFx-xq#;7;}Gx9xG>L1SG z*@WEw{!*dBTDQPVuUEoDv*h2<-_Y{2+#crN~dj zLq2~QkKp$GpCxz}x8GA(hlgKPzy1C5E!Ojz{4KWoDelabAH%=4e*8H8J)W7TysiJQ z=JVzDeX76l*aG=>dh!<0`iGO=p5o>Uz4>x@V3FK@pQS1uTrA%~|DAXizrgv@&U~rz z9XL*+cqApa-y;}-ySRPtZj$9!E1xsX%RjH+(KYf3oYyPy%v$+Uj-SnVV!eC``Tcl! zgM55J^&iLGZSsZr<(Kf-E_pT1#}Y-g&dId=t-Q)t!6W(Q|1QQec(Ay<2 z@oa5*Rq~zjU>*7A_(0sbT|O3n!uoOh-uo=;$L;lQF&?`^J$636kB9G++wVi|Ft01O z>(72XgWLD>kKv(u%HPE}|HR{XS=Oysfa9~i@@dYa%6P1?+># z!FK!N!KU)k4A zwN$Me~M@DmGm6O6VEEY z5dRYoPm{le7tZ+)!~M6OS={=|VpwcyN(=tlz~$_y~Hw!c%xV{50+?R*&`PyISiR z$F09Kp1@zGCxnMySC6ev3-dR;{XOuM&j(n3i8ud<<$eC7<(DdN$L(}HiQDhjzk+9% zDgO=ElcjiirQF`{yleTlT z_n&2O_dR(&j@#;Z`h9tr@ie!d4f3XVFFcA*!N=fPygU9B9{E5$cD}!ayLgQJ3Ouw? zd3*ojS{|Q9{*d)=Qa*zJfhY0T@nWU4K9LWVe;mIBPvdr<*3|MJdB@Wo&)~M*7#?z! zx91pB@Dy&>nYotVth{aa9n0f(ef|`WY*F5}`vacDcQdbl@Yq)6?Y{?9>RPQsYMXbv zAw2Z4+>Zad@FZ^6=Z<*bf6Cvl`Q3PUxBN%WqqBG@E#Jeu z%3r7PJDHYEq7p8f5^r(CrJ=?73nEX5ZCp`F_+Uyk0zmr^_mzGo8ynoAB%n@;dlQJXArRbJ@B4Q|1P3 zH*%Bwmb~&Bc)W@{g7?MKx5@3e8jpvn%U@*OmRUYTKfV`tYRc_CmPx;_)NC@3Lb5&{1|+r_2bPsPLAQB=E}dr`V_iR5c$$w$HDLnS5-2N`mx0WA8o^|-m@}uSU`d+-E#_8e{ z$=AdqW0be&LLKoeZapzPJXZPH^gNGeaO+u##~)LEH2E)aXPkT?ei2XMcHZ4sN#hTV zSN<0AE$}El81Idz@h$i$Jo&hK>^?J&J5R{}B|qDIg4|wbm*Ane-0ovP#9e$5JzwIn zCzbEWbta3apOW_^U+5<0J5k;OuY$+%MtBq4#oxqx;;~8U>CARV?P^;VE+K zS%_!xP4uk8Q_m=G=i?qcHdQ`_7;}_(0@%GkpNp7z%{qf*G z^swDgcq~`@%j2-;X_N6lZn>Qov+xvttboS92u~JPelY!OttTM2*M%*XFDWn0^>7dF zmX`13IRDo2W#t33S?84XU+?uxcpT4?FMgZWKUPlp$@mSpbAx;xUK@AupYc|BDyaNa zygME)FSqBh593MP-X~7Lqc?iD`yw8!AWzc29CvX$?>6JvO3E)JzXwm=*w9XrO#v&byO%u(A9E+s#`;;|YZ2KePVV<4z0tE1Y*V z@#Nj|4uw_J!t$NuSJU4U590ms;dlZcichqj&gx0B-B<8r7x|~;SKzVx8Cs=gK=ZuhdfI$C1Ak4=wZdx5DFZ zdizJ<3H)`A=eccy_h&yO`H+mVZ}Xl<{9xm;JIoe$*2nC~DwfEUD{#)Ei(o`rbmBlR5N_4EVl`B?rwJ^S!9-i7i1X+7JOuf=>z z)YH6TJLE0txdnIeo%FQE6T6i^PkyNRr}CUXBXIfW89bhr=V80cEdROOo{w!c|3bcs z{)2dUuiReO{=i*)0r|r9HLvJC20XZ5Ztwe=;|Y8%J%jMbm&)(QpTk36$?g8_ zO+1C$e%Xe{4k%xro?k4Fm&A)S;CREo$E)M+*Xk*Ox5G2I9alr}EWVfHYKrwAR!=pq z+ezH{L0$>pfQNpOUytv@BfrT9aen=RyT8lr{Y!y{npflx`Hzgh93K8tegnr(Jv{oC z+~(B-kKxuc-tvDdZ+};OE*?2Ae}ZwY#?zO){a@l4{2=4}8+ZRv{u{h(Bh4%MuY5Ot zD;{(7#QQz`ZakFB>wWMn{we3nW4N1FdAomm0ngxed@iwkKIKod-4F3pe!2af_I>78 z%I!JQ3EU|tZ^!}qFCH!@FT{O&$;Ry8D)Q27w=N#T?Ky1^JmK>RcnY`cZ4wVvRsVd} zXC0otRlbz%?!n{Ly#Ay0+$Qfq&);~Wy4>Dh7teXn`rmy{7Ps$1R=`6wl+Uo;CU~Hx z*LztHew6%3JX1^gG~;;+s;_*2^Y<-0+)zH4@od6Vxb5G=*3(FN`#kZi_23ie$=gKZcX9jv za7jGVSUqjXSHVMJ`RjNi%i~|+t*rkp<#l#DP9HqbME)@OQFt7;c}>Ngrpk{ezsU0V z-S`?jjn}|G!voFKW9x7jPvCYu{DmidUaG0qErs95{;G)w?pD8jzSA0ywUqZDKL}5^ zlHbEP$Kk=&@?rQiJb@p%QvWd5`a3DVle~+EJIl{;UhFf!PrejCjc2>cx6tD><2bor zZttgV#>3s@_Inx4EZ<#Tnfdm?vk%CJ(?1H2^_2gMPcrW%Ux2@c2mX(%I}MnrZsRz9 z>_r$$*3?)c*~VIyGGr@Z?1?f&lxXZbCrfyeCR?&(5K>~YrI10iS;iKkj6|iySd-AB z`}e(G%-k=$_}o9&|2qG(pP73mDA!X{$61R9ahuQGcodIN=L{a`raG3tiAQkT{tGnL zJS1^@UQrSEJf}LBso&VVhx|Rf3m(J!;6rd#^+fe6ktApEqTC|Dg$NQr4=5_E0Zu@&D+|x&SyAB+Qhw(CO zpL6lpOUl25Z@_*1BsD0$+^Z^*HNs zgz{Zkzg|2!Qr;i0frm!RzvOt;4EMXK-UauJm*=5Q2=`8q+xHMn!QF{++uj!Au~+5x z_bD5!{$#nmAO34RI7MEPK2PD{*W`BHeg$`@%HJk`=M(IwZ^*afUOf4xJj#65z$4S; z39&I%zUo2Iy05uPJSmInphP9*2=5We-Ep(PTr04^&mX4S-zkA zY&`avd}0nQz$QGfOK#8M58}x$kPyFKgvI19;V{XPx3!lkBh86z6alc$Id8k ze@DE>@;}S%dFD@e;1~G;>imQIewFWF{`0rc{5TincQHTZaL*<3)Txap@H<$p4tVmi z^7fo|Fdn!f|Cs#$to~o}-uSz?drf`;|IGZl+@3FeXa0}e-q(5!Pu`H*>oo;iYI%b< z<#ydt4fouVw`O@8<01Tcyd$2#H{t#8$iJ#%-}5^bk7iNjo;+s=f`lU zFCSYzr}FmqpDPyavm)5KmN-x1*ocR;RlB zHTv0!#~+c~{m5y{KPoRxKbP^4U%r-cvjsG7zJ~HIS+1hE(?s5k{DXL)sr(E4QQZ5u z+{SHb`R1wK6?a?6cd@+vE#Fdp`(xrVekPi?mJiD#pM%G{%43`_*5cup+s^ZZ=$>k^&h~4cqjU-gU8-f-X;Ge z?w>B-!SVcA+%reMi++aTiFf2*vR+=pqY?QE@(b|ba`_t8`zGA`f&9vyYUq^tdinN3 z@=R?s56N%juhM^B+}$moj^B%W_oR9yJcdssUk?xLRemzw98chO+ZAj62xsHz?N8-Nkm9#q3ERT<*{tDdtgYtGh-Ha#jdYnhTv;1l0f1%DlxaTK% zG4|_R9W)QVpXHf2KHP)*f05h$@*{WxxB6Z1_^-;_>p?CaJ|~|=pYw3vd3imK=Ns_Q z1-ZSxb{r30me;4wRXlP{ZqIcKcGPltugm9>uZYKP$)g-Uo8Y0WZ8B!80sVBhe0KRN z=5w^=bIAKqXEvU=OMV?+ZJu9l*E3(^!9w!9)c@V;<95FL*Sx6m2gnzEO3NE4CLhlF zEsw`b$cvJH98cn(u-<#&(fgDiPydr~|NZiV`1`oGf;<=VwgvZ9k`HIxxYft)xzJgw zQ$_i=I3MNgq~(g$ly~90Qv&zamv5y1hw+489_4zk6&`+Eo)hniM_SA6?{3Ch{Wht- z#PYZ;?`AyOPWh_L!(lwxLH-_o-s*IcPh);^KF$94w0tPbRSA!FmJcG|#`0a{_Bk`d z@W3Hy{_-Wj~R&MYA%+^Ky zht|vMvK>BvM>ol@F%M16x5~K;cY5M6yc*-aiaRmo?RB4}xCgi6?H5)*E&sFCPs`_g zM*Ro3slGj*ERQGgOZ3y+e7o}YoUZM#RCWBzvFjyRsa4&a(lg|0-ii9&(8MW6nBou`{2*xp`-HWsXqZv;P(EjcW~c# z%A3b<_qcon+wBS5IVqpVxK2?0M-tRwgT4<>o|FGdKlSm%Z}M41^otI-o3(8QY$z!2 zhx?1lw=(Vo+$kh`xH~P6>nV!koVEIRcgD@xU3~`cR~^e&#H09Z@~!beS>^40 zp(F4({wDcFc&ME6cD=m=PvEbR|HbkTC_mQvd`^8PaqFiF9xk7nZ-sjvlv{oP9>r~W zXW>o-GWBFn7SDF7wxHC$= znm!le(b4kU)c*vJjg{A@{(h_D%I)vM&Y6!-^(?*Bzw@fxjt@ofP?}f56KUQM4@^=W zyAJG(NB<`uL7ySq_nO?+`#G&g$Fmuud}=b`l$cl7WtoeB|NZIZrgJc^X+ometKCQJjpMnSbnea zVftBwCvdwS+lnXmDgP1qlXx^PzkNE$_{shf+tnetJ>RH;`wq(oGe7O{=n?r8=6^iy zKOwKqbJ~Tt`-}V`*83-T>`(b|`ZICumcm%iihp)p!*_Ch3{OrbKcgTOE&aZg%PPv^&vi8$*g>%Yp zkuPnYOFoMEc@+2LmEZpQ(Ttx?xRYQ01a)4(19%DY!|_l-pw&epTG>lNVy%I^n^p@{8mrnpcw-##iDl zUIyQTN7MWQp1@m?zq`Ns^i@~=p?DoUieJHdnAcE#4j#q>HRbjkbtCSnC7(rpkJZ7m zvR(a##~xOG0QsA^zjmq@8le7TXDN$!Xu9; z?{Xa5V)=&h0Q=n!c&M@bVb=R4JlaHV*X=n5vi&rb+v^3z@FZS@3!v(_XOi-la%;hw zo6nLLWqJGJKHT1)`8pn+t$YQR_X9jOM{b{2yxr=|l^>%1_qb=CyaoIFc|5pSeun)$ z%OIBbJ^2gNDUQeRDt3OvlPi?B{kjz%dSAYTIxpki59Idx(d$+ppFn;U9$2Zo9S08J zaonC8T*CbyDsR^<_YBr@#ql-NZ-9qaDZd!+g8Ns?$KfNa4sQGDJUkFpz6beF@EHCE ze$w(EDR28}rXlLnvqo<7Sq2Z|>!{Nh53E(*=CcQ$#BDxb#ocwv+kAe2JL}~(pL_5S zZu9w<9aN-`dE3J&!=!_qul0m1n%NCpKs$y+>T>0Jp763e9pM1 z@!+R&ZnK;m!_=pXb2;Nw!oz9a9*^K9sXqXZ<957y4Nu?&$S=X2P3p&d3+~0cl0S;O z_*M41-^{nD&Lup{aF%PUJVu@3xIZR8h*!bA+vJbpkK#ex@=sZv?aHqu-ye5&$XDa9 z<5Bzrj$G_YV}keIfnd`VHexl5dD7(!4M3JE1yu9Gig0@Ykpl!2{nbZ-3|b zDIWYmZu5KyPvUmGI%oNl%J-xGzj!>&i;dQD`4h_9@v}Of#NT8;YLACcE1x^71{jG) zewJq^zX*^1Dj!2XU*NuTa(h3(k5(U_Nj~QowzuDuKZ5&k&+qc4cwIb*x5t~{F?=Ha z6dw3PbJ-Jpj%MZ*UKV#V$*8ZN|?8^E>6wke`c3@ChvN2HbbI^3T%Gmw334ygYssj}?~N z{&Lpp6pjGjQlt!;P!a*VYyw8^~OWB zA$_mv6*(%D7 z<&#*ywQx^Zei!SdHSV1)&w=;Aee>o0=w~b*Ss*XM@n<0(i^zL1pPyTuMe@h-v$%_Q zrvICGVwv*qkk2`ugDt;aewI36Ji0+% zmFJ4<@#J>-G4cnk{tkH^=I1=_`9hx8qyLa;f|kpBME(QwTnKlL$y?KBMLc+%`s5qo zkrQ&;{=4E)+^)ling5_XxBJd?Jcir-(fhc2GBv*q594>y&$oCak(&PlkK$H8^F+-< z=u~RH81CYh_u>8@Q}fO60B+AGpSAp%)cg?3<1zZ5ihF)e&A*F#aeKe+r+D(0)O;Lw zewADQKjAUl=Km%h$A4qHDtP+^um7$aW9L*SGuuNsJpQ|UFJ2FioR{18%QVLW7gD_o z?p%`ZV;)|z`j_SQ`od5=c2(Y+aVOxuzva2v{^#QU8*=-6;1BU|CY{*>oENs^iJbD1 z93PJ09*_Jr`n-ro^2zP^lXa5j&68jL1M^uFPvZ8uofU9jLFEUrzx(m1S8mszZ7p9? zZl4?Z0v;?S@5Hz+9!v8%xVNQBBeIT{YFL<)Nd=T|- z;-Lz1JN^`yta%GmlHbMkWH~%oRep>*b#Q-m`BFT9Cu_)O;@$9YE%|tS5bk}LJP#(u z;jxBtd!OE0c&M@5zE5qX<(tawdr7w7p2w-f_Ib$iPp0~1s~?berq4U4Xnx|Y1kF|7qSLW99a~?jpG76}i1G zRtZnycE461kB?LS1M0WI-SP6O_&_{{e~-U`MoO_baI62p_P${!@Z8~09< zU&4==PnO$p_%t4$LLKJ+D(<`{uS6Z^HO-q3x4&1t3lF}oynU}tG2Amle*4ss@$-QB zOu0R;sDnpvd%tB1JU(0b@2S%hkIs?X=K~M0{9L)6kEU4t1#)}d`ws4ZNB%m?yUOa| zui-H~xKR0(^m7dNERx%E{_|FUvAhs}*SJ%Kp ztL0~?@3;CyU^m>i zSALG=8isrK$)9GuPqX@Qc>~5>ipLMipTIX+og;F)kK2!jkID~G{}(*;oxCu0E?NG2 zc^~@BI!*KA{E+HJ@DOgVf0f1)Czan%omzM-A;10dYsOCt-1n3G2Rw*-ev#XA_`Y}u ze}VcV@C4q7?Rl!zPpXbxufBsPaXX)`#{CzSZ<`Ys!=w4+_IZFWH zPYS-Nc}Uil+w;;&c%q*CAjgv?c&xs>Js!lp4dvbFXCxkeOum}@4BX#Dz8rrSPd1Zx z#W&!A=5l+V;g@)@g}f2-`~x0M^DDU1Qu$WY&plo95D27tc|6i4)tlhSc5)weg1EP1 zs*kk#o#YATXDaUNEZMOObAxt(`5nm?QB`^~$`-(wzr#UnxaLEM?4<#oHsxy*Em z;^8!}fk*IR)M?eol4rP=7lf!AsyL@EE=sPvUM5)oF@n zo~h-Hk6T6pjU`6AX=Q{2->zLNT#@EFe9J)Azc^OEuxsWZvEpFEDw z$Kx-{?ei{{;(`A1dgNE(;Q{g`^s^QB50tNByNctKjY3&`Eopo zM{zrUUAH>Jl(+SgWtQgOH(YM_@44~d2)X_JU2)tyN?wg|@3%Z|uj^IDqj)Xy4e=yy zucrj?_-NH%N4`5A9wQ&eJP*LVuKYAU9`}rs&!o9?3&iFZxyRXaNq913r=HEL_UW#!G0e=4{8m(6%!libcDN6a_N?Kc=)8;?#qVa zzJ%QF%ih4fr{wniP|K{&kMbk*{}~=SEx(WL>TApYByZ0CauiSeEU!fV7u@r!-1^Ks zSMw9a+cIu(+;dL(|KZi~2tJwm4RGJ@%G-Vsz(aq?7cg(VtbS5%`^6ZmgWG;F6Hi`H z-u8=CR{x^h_KUB~FUjq`{wLhID!2Rk8+hWH-0tfO&C~q&ZpiJv-iIe{$?d+rDIU!7 zRK|?eV!d?7BiZGJxG(F6$8yVUyK-^IBcH?k&$c?aZC9)Ca6aX2yV_}W3drs6Ccekx zcgu&-=Vd%lRBreCx#qJU6_eZbPigaeR;o&GIHAE<+eRI3$(nE@^afA?!l84<+eRMZ22m3+a3bA zw}#xdhrW35A-Ns*rdplaay#xV$DMj|JML}6eUHlRxc40%!0otq-Rk?5zn}fFz&l#r zctiQWJbx=?-b}uZ<6%`i+(KTA<3J-k+A`HUTb)*^J_t_+Ez1~q5k9U#V z>)jpj=ri((^clka&&ut1JH_hYc0aWWPvCYRx&@B~Ri^^|AI6j28ZTkca*{1G_Pm*=apYUopx3qck!OMuUBe*7@okNAs@#5y_L_0uf&76 z-52k|L--2j;VACyqdNcaAI_N%kQZjZ$g)WD;~y$t%eZ&r&MW` zdwxb~$mxlP(tHT+;{P(wQ_Ul)a|K^zzDT|l--Y`Y%kBE@EFN4UFT#4cX?2#$M^PvL z63v^lOm3g!`UoCaETaetb>kB8EHCmu=jpYV8^XI;kjnM@tGB<@S|`gjnx29GOhlbxc5S8Kkws#H2)lT)BGeJP4ioLBF*nzu6giWOdYo_?oabhcnG(7=!-|v z+{NQ*J`;B?rH=a^?o0C+9!&FNcsR{3;juK&_nwwFndUy+dpWhAC-Fd zn&xlfi8No1d#{l7G>`Efjg+xrc!;Qni=`MclOaz*iJ)USp6|5o0-GagU#SMcC<n4R;rJ}Be;$G7ViI7`MS){ zCaa(3XYd&Q0r?y&)n~}jJK|o#y?6rOia&%$GAVD*!&~9O%<`t3cY5N{Eb=kb8IAk0 zruuZtr}=x9&!+q!>g={WZuNh&eD>7(cYMfpmFA^zUk>H%`JoSwo3mW?@z9;A`S!Rc zr~E7W?13lnDfnQklS}!J@YitPU2=QKK&l$-^WYgNqiYz8;|5mt=|s!=9k;+l6~fERN zVfri_)jYUf`6B#b+*eZmB;MKbY3|~2-1h5bc%YQ(yh)v}@g#2RN-wWJb~MDjG?&iepRsdorbMWS@|sbS%G`Y$*s;NJcN%Y zzZZ8NQ2sQ23Qyuz=O*qiulxe?#nxyZ61dfQ2#-IgyuDu877taBAEZuSJWx??>-`nn zsU-iA{0uya+xrPu;%;T-|02J`yo$UgehiPL`BmKUDR2GfU#sPf;6GERA|9@)dmgaq|{zJ;!bAwm#1a5T}SpA2Ux9#~;JelUl@o??b{7u|fCw1I{>)AeW8@B=; zsH?pBV|XmhyW+lj%FkyWhTw7B>de6Xk0?Kt{705g^MiQs(bW7^Jc--5c{XUd!u6FO zO#Sc%_p2RJG_s5!tVB^$$Mcip3Uq_#f@fco%^JW*zH&fpFAB;!vBh;CSyN@ex z{Vc_kxb?po4?m&2Z6}9tr+KO;@epq7J;z2Zujk3sd>P!ur_yIb%ePS8yaygh^GUd` zrSdlJLOhP^w~n*j@~tFxUOSD4@qF}?=@a!IP4nV-Jk4w2N!*_Qw8gyvjcfHoxIfLO z;z8VA$9d1{v{oJ4FTTVh_$c~6Yxy?H+i~(A%j33wbAQVEYOB0mhg87BxShY6;@)=3 z+wr+89>Z{J||%-p6r>LKZ6H*$#-Va0%ZM6%jN4M zZ%O?^xcidawuf@Kx37F450oFpBd+|R5~|-0Pb`qz_Bj9#z9YBm_G!3pp*+YuFTun3 zG<+NGjVRv>KWKTp5B>}8EK6`FOBiY64kN4XY7W1mdQ8rI>k6V z{+`^nlUaChg}icYHM9Z`|0vhLj`J0s#O-+aGafjtWIfhzff(EES$S^OZw);1vwRi% zMLRt3yL<%sv3UFsc^N!{JLlyGv#bAYc;bqD8?S5ph)4gC+kSlu_uP=LWxW*JrvBsj zW7MyOd$T;9k+l1%c6bDD#OpN!@MJFKzohUMyI?3;0c^|lafc@|9uYFI;tWblaNlRC{fxn*xJ#XPEx$FjpF?;U zUqn9Bm+HqKQ+^3v5l`Z?@Q!$RoAP!Z9E*Fl%PWvyYV~ouF4}}gaeJP*4-f88ok?tm zKjX>I{?`64yc;LA5&*78t7;f{n9`}5& zyj{=yi+j_&*=~*N!-p{cujA1lRL9=;c)&a%_t8(bJ*tzyuj7xIpHklb&SC@}`B5HZ zy==vuvvNCsW!4hbe-IDg;q@Yq{&TkqS<-rlU zY75+5B)9MFdKr%|k=x&ugmKR@c{ld2bynv+`P29@Jn_EV&M(*S;0N-rn76wR(ErNR z{6lyYUrfFu9{f;wd%iu{@^~BaTX4@R*ZIteqLn0Sw6k68ajZ756SCN=LR1CR&Jl$^S~kXlQ<&Z&vLcLV@Kuh(Em6* z_?_IoCulAnIWBKSosaM&{sO+s>YPwMKlM-G?)RyF!Rr4Yx4*~CdRYBCr{t@sUlfnx zcKr0?G2Hrm9{2pHI+mY_dvSYz>;~LDt^7#(KZ-kNQtRBb`nZi-^7aM!f7hA8w0sLZ zgxmhu7x(_G`gYS5*itoUEzssLw-cH~y-kan3WvhQ)`IhAKA7Oh= zrg}|0j5i|R4o~1NJ`fLHP#yEI<#GGGh}C%LVru_i;xT+Z%bUR6%gPsJ+zWUF58`(o zWxKkfy!m~25Py+;Jv@$=VBDwiOXI%k^77Pgj0bDThmr4%C-BeN@m|HF zEtR+X_Z4_3Ape>=yKsMNxqWX-5|6Z%|4To2eoz1H<@PzurEsUC{58&}P4VzEa+}ZR zt$?CpOm-ztS|83S$Qj7*!Uff{w1%?gQNnd)MqmHGZ`Z;;5p&L zc(|B+d>%E_75A2xcV~GgSiYj%#XrD3KKTdq|1BP?D*uV)&GMuAiB^;MWxZF%y*1@_ z9oQL<)sl~<&IH{5klbG1S&avA>*qV%Q(O5$^qJ$d`tj9~zl@j1BX#B0e+xWZk2=gl z2#?m6AEC}H%QukkWPjX-2b;*h$)N>1kNaB6ZNDh?6Z003e@p$Qc({%H6y6_q+sW(V z3-DNbc@O4u2kz@2xB2`H516xGGFo`U!Jp!J4ZeX_v4<0@}_qD!GnwBA2a_;aqlwuCN9KJ;)$r-?x*tota05n z^0U-wgoi$s-@|+k$HVv{miI&4ze#y}eg71m!0)4epi1$nEpS&*Pq3a=Y)o-f7FSR;(Oo+Eg$j=Uf1WfLB+CqKn? z;{iO@K|YoIA9$dX{22A~|DombJuPp9SI1qP$A?ZAJf7yWaBpYTS;l%?Y56X4ZM}}O z8}~gU@6EWs;}N_se&?U+)AOwIAG4np#p5r^L*#4X{ywSR29M%)zUXIl(tIkO#O?lQ zIUagR_06|g9=GRjzgoVp^6%1T-t$^6Z$J6x)<2%a_u}pF*vraW{o%MjB)8+td_0a@ zeiI((ulzLXAH@@RKm3B_2PkizE2;itcz5!T;l6>&e~XX6J%i-C@sIEXZuwuW{$S;& zkk58O;|7Mv?fH)vcZSJzReAgU!*~#Xk~%%`Xqr#4I>S}R*6&i>#iz5K$8hgRg>ebnW_2XxM!B!?q|>A3EYl{Subhc;P1#;UjR^V~`H2F1n>>cIpc>Wb0Stz&rwI6YBB-L+P9-l$|!k0DA{zb~K#B1S6 z{B5@X=6HCC^7gu6H{A2C{B5qI2H?>Tg>ZK z_&@kL^Qh|F$@%dH9$h21zo*W5Mf2dSlixm#X8aVvlON0Nd9n`=eInn(^N>ez{|@;q z&in20#Fz5?TtM`~oqck<9~^^6`L?~bdQpCmqwev0GnapmneTp3T`wqG>B!zYxl!11ab9!to-#$UAj8TmYX z4DLH8FG&A0@BscH{vPi9ru^;4CK*3p;)y@yZOMO+`_Ic4u)Kd+J}I~BoVKEZ_WFKv+W4GkrP-h4p{#Ra> z`J8Hbr)x%XAHLY~ndRfDvk~`Zk=t=>KOVuKB7X{ZvMO({dtStYxLptYizo1IJZCHT zx8^61TXlZoxKthYd*prZ(!fpe=sog!EZ5U`vV^<|efG0D_sVmUck#e|@(YYR-Mo~1 zF8kLCt6x?=k^N;G?mj3V&vE_;?x`m4K|iN0kLRY&6+B#1d6#^S>zW@=EqP9kllgFO zJ-OX?RL0|v$Zfx9ZvLp;wx8a3q`o}JxD#>5FQ1Gr!^61Ur|-t24V1Uf`?`oHA4{!s z&p%o&w~>4?^{e2%#&WCwEFNegzms`*9S=S!|B*VYE#E?Z1wUloQhxh!dd5!@_qCDR zesuQ@^%-m{FGs!(9_}FjlKNdN-%I6wm#t1;<$uF-++v>l$?f=D4o{|eQ`~(yHQx*OgyeP{n}mmPJ1#A=e1GL9(9aG$ zg4=QL7u*@3yxkAp!b7-SSLgp%%jF%Y{G-fU6+AddZpWnn9vUn!ML#3)2>xwO{bC{R zy2`&u{u4Zj+wtc(9(+al8yr_}nopDWq0f7rtQqe^h`%AX`%ORYz9}!jxV`WQej1;I zho>uV*W1f+-we6^z4NztV5Yn%{rroEX2~C9|0r_UmeRbd|gX^;_c3 zYI$>fh}FUGpw9pB;77{aJV&k08u=3H9L1yfHvAUuu2sGUUM7qBkKv2)CU|I_@|EzH z@kpA_#p7wd19#S|PI2n|j(hP=c%iK7$Hia58{$cPJ^m6N-Jtrm|4zWYAIt6fd@dfx zXL4V&6c24vemV7{R%g5XBL1oQ4*5p>b3B3D_3b%4__^|S9h*6umN$+sqE1EJ-KqQ< zydCb}CAaUd8IQ-lkmq4L-(vN5%PXi>bq<8mKfI)~~z2juTkzat*SYqR}N#*>GX|Cu_U;fZhMb{}*V4km+Hh$s-Gx%KORcR+pxR?@c1ct zLyosAaqk&<1@foxz*+eX#w~RF3&{SPx4^IRLip2o=r{R`)SrhZ{*)&m*k(* zf5F>dK>T0*$YpsR>UYJXSLNgJX}JGyc{Yy!U*ds(_1heVWer@p)KZh2(a82;xz^o8nFc_ZC*(-bb3igGJ=^n1?&_vA&AQ zXHusT?k_Gsg^$L4_sH!!^AkLV&nABf50+4V99|*6#!cdO-sz18?^S*)`6ambKDmqk zfJbnT5X+9YD z;j5{$3{T+o+0GAIod;CkJp0|MAFLp6MxBT8C~n_7@Ejhhth`;{F2ECbTk0Ig{Z*7V z_ZHH)5qvZG_IS{z{9X7AJcMs$o)6=`YShQ`7gqgnb-7(vG{l`6a{D~wak#&hyc*l{ zm$>_|e7mEct9YQcd<nXpEe2!wOpTuK$V?6qZ@-99B_dP1V!8~s;_sg5%f8lNe`Fqr*o(V)-~13m!f`9Zh!aJ z6%TfoKh5!WIv(pO?|^@UdtZ?I@mp5sC3${FKfcl$*TwI}pTi?~H+(kk=^MhpO06=(uO#V&F4^_Sv_b)qf&uIDRf+}Z_xd42Bt=2`w7`R~+;9sTUb{U6C+V;*vq)41^s@~`o_cx1EOUSI2r2R@TW=zk%e+$ujz zKL@S;=km39<_9!x_$#^H7u3T2U(3VP?}x{~kx#^z;K4oe)9{= znDx>aj~|o|Chy{b!}6y1CwSyrxqZ&_MLcv=ZlC{C{XvZzJtnvJ1NXr_$K{Vv{{uXD zLT;bae%kUUVfYSKV-LdHF7UHlC~?x9ha8aeqa*y)Kivrs@YO$w#ofjqx}>7@uVM%F6$Qe}((2 z$UEbiYq4JNSMWNx&!_wVdv$4(@dt08i2qyfp&H6x!@HQ*l>0O37q8*bTJmk=Kf&FHs4Hb_DfI8+zFx}TyhH!tUGtFK*6$uXiXWhU5)b!R-j4re>#EPhAbEs*XWShu z@5*w$X8B=qJAQ7(W5eb7GO5rh%a4%T_Lje%#&t)^?LN0Lp2WA(&k#I1N_kt}Ww>v& z{C)C2;R)Qv^*qA3W0aqeN&le*?s4Vzdf6!4_lo>5_19Z|oV+IfD;~hx;iVtdxKZ5J zdn-JF@1maxmY<;dJ*o2{?wu$fP5w9@c~u@EU!cCm^-q#7VLjHxlmC-9<9OKF@~_KX z>P*06_)+`=JTguBZPYo0hu)O;Cw~)9;`W^L9>4kw&rtpg^40O+OnGsMC4K;28ufe#raPMsOM`{b$8CMJ!vk+CZ|A#LEsxu{pW?x}$}gh+ z8Qe2Z{w1EL5%YjwX8WmY{*LmqO6ouK!QGgA5Ot>E&NjInPd4Kr+>R%|;J)q3+xAwZ zG26oq`6rn)KodOnxx5el4DQ<{&qx1*@xYhzcj)s?Jc(c7{&%7I0p)L>zB7J4vHC~k z_I`%lxc{j91ocnj-edCY_%*A8zlIlWqUDX@c08$$`;V*6mVEjTkK@iC^4o9Y%=qbN zenD>YJk{#s)iWvouH`Q&UlWhv{>yS(uA{j3iu@7g`ENYef7R*~mfLmpB0N$=u74e83+^c@xjU1_J%;;=$)6WH zSF8^H4Eg-c*go%3-p(UF+=q{(&Xaf)x8vsvcpSfj_4o>&xKH)%erg_`^vVZQe*+#W zDW6H7aokf{?vlTShw+t}^^1y+Yq|VomAB8I>54}lkk6q07|TB>zx_6$jGtBJmE|vy z--k!5$X{Upx`}&h$luDWI%S_=zo;eeK%LIG_hI=>e6)ETxvMhHDm;R(<~nd69%!ii zZt|C`&SP@BkMlNHKb}T%+uj=BNqh_abjPDjlt0S+jK{-I$l3gzC3plMNS&Ry_ete{ zz%SxXOL+l2@004&+e*HR<*JS+@kW{Ti?+DGjq-)a55*!ISs|`gsa>J1U=xb%YR zx{61hkv~P9dt0i1=UF+Y5vK|6!EJx(fk(S4KZ0>5;=XS3c8t3W5BHGIVcb2I?EA#$7NWmX@5mioK!F#cI){o*tp z7_K^YzmP4!e2$PG$fkTHJTX>Yk~%GM&p5gDGZ6RTcAY%O^5d1imwDS|`3dq?%>VDW zJ4v3G{N1h9XLxezxV7*oUV(gDJTXOidp&e8?wu;Pd7F>B_;~7U!adWJFU|4uB<`P{ zS|?i@^%=qKIB-86nxXt=>OX<|X35{ptoa{=C*De}zYO=!k=y+5$AfA95ALS<{cY(J zzx{UljGxBl^Hu*k+u@7m@5&!g+<6_3ez{}7&hUvBryS8>luc~k0? zXs14dtK?5JZw>L-YPqe);kY*{xA|Ft`|)q7f6(%4Q|sK>UgNsB)p;0?;I_OSaqkAz z8OimMYx&J`d;M-1?rfD8$*g%hWOcU5hqAm`JFvdC%iH7Cap!aSHMY<0=3mL@aiE-R zbq>h8^IT;q?l~^+nOXgOg}dL&x3J!S#r;3X$KW|Ts?QkSnmYI6-c!mqCf^tjrFk!_ zlji@!JwK{WXX?Cfb#SY{&+6dzeD56YJFPl)Uy$o5`o~98{{h_plk#@|*aA=B_PR!2 zJbXs^r>Qd)PvUkTw+auPRo?ut8CdC zyC_fKkK>+8a+}W=@gRPS{3P?s$}hl|;La6!N&4B2`>x8bkpI>EFS*_K{f+yt$(NBY zbbCVnd%l{)o8Xmk|KG}6|4r~P9wOfxcdjd651(vxaI3T2>fmL`@5f{KB9`|rJaj|# zU%^XsR{zc|xoyw2@E~58`W&x4P^!#IZ@XCWTJ?Yegp9>s4@VaCr<^MBQkt;Z{P zz!DHFwztPVmJbH(`2X$6jojX%~ zKOV+=lD~;NIhFS^ZmDO~zxOV=-QP9CBe>mnbjRJ?%9o(e(U#96x8uob+?Q8AfqqWo zG5j=s@3ZPB>QVj)&cF3=r-=M-R{XQ(<>bfcXCj_>KyKI1QQTi%Zrj5_Jb-tipTF@a z-VQI`RegFMRGkudW88-qrJr7Spn~$+x*R8r$8fuUUxWKADsRWDgSb;kzMOF{;ZfYq zn?-`^(^p0LdaUU;EyMtHQD+~zridmc~qId~||Kezh$Bh3FFR;Rh@*!zd??yi1n$k2JxZw(@z@ z8HPvN$ty9R3-NdddAn>{u5WN(7x|-EJ0+~^?rAIwh`JTg>Xj(lf4K1}Y-q6K&rPmYv#C%+vJj+WogapoKz zo*-{UzTorfCoxf8kbY|6&Sd!l@_q2g6!}W#b2=XQpL{msZo!jp%4@Lw{D%A9lH2`V z;a=(|I7j|6^Zy7QpD+KL>)XEOOXW3ltDz;hXRUlAeSU3ud_``?Q8RzIHvYxQkC<{Vv2k+m$cP>&W|X|89ASEGm@eMb^tcxm^#}z&&yKL-Z5G1N-Ht z>1Pt|KOnc)HP+%$+}A_P31?izvu7Ayk+i@QK1iY8sZ_mZWjIGIXs$8`3U{Ijt6qc3y@!Lb#lr- zr2bLdn@e6KtA3IB_JQcX{n4LSK9GC`Jchr+^;$Yb(4 zEZ3iSqOtr_j?X3ftDi_qc{cJ-;?aQIo`(;>W3A==c%5!O?t4!D6Z7x|?(HehLH+ZV z?c1?{#QE+h?j0omCKm$_ zR6ohF@~_xFtK+fp^84;m{&_s{hTOK#xwtcvI*hvmkH0O?$~^pGb>_*3lP@ud?PrnP z?k}3-F?ZiAf%})r@5hhhp=EMgUwH>>T=zY>{ry5y-1ELXKmCuveJkbv z%c}WVh{vMxs^s_K&RY2_rvC;W!TaMShNvI!I_1sl;}P8MYl4MMYcd*sL?L7Mq?*CkMI9xe<@gQ#bOL!tJf8Pk^XQ%26Ww{#T zE^hS);1OK^%W>x8o?WT^?7@Bb3(UjsR_6;Uu)jDX)lcLrxvj72cohGTd{;cUTlvM* ze-roYO|7#N_u?;7=OP}CEB`)q?!SFuka7M!Ah+XBXFPFGZu2t-cMhfc*SHtA^>PJ| z;P&~(`9^Ep_z~4y6cntrO z`5B8x|5bh&`89aZ>6szKozr*--$MTGS2V6KQ)<2$?#K6J)qfa>d$KFPo&gr%@f>n> zJ(MpmaD*cEpNOy z^{G=858NZS`+|nJQ$k*v6LF@0*}`a7(Ga-FMW*WB6WMUOZez`5M$8g~xHb@0*MJ?^ixV zeghuGSL6HfU|Hp7F+b;Vr@Y+i=bEVgL-=g^tb%(gDE|g0u(o)ls@$&M`r_VdsXo>6 z`03ngbQvD@D{t>h{{#;;kiSbmyRH6X@-OfNo@^vv$?{&uBTeOY|C{$!Ew87UeAJ!l zr!*dJE&rbRY=DQ_$nAa6o$y#Yxjhdbfk)cQm(%A=JkU{Y@1u+2!KdUdwCU*fpY$9$mt6x+je+#Mm0 z(|;5Xj7;?dxObGim~Ef9e~jFos}z{5<#NW#4^h7!p1>{N8IQQiKS_Q#p2VNUXXAla zl(+X^t;0j(`y1h}>Q;-iU`5$$iv6jz^ZtGqGO&#iPsRlc-|H&<}T)|<;STr40ogQhWKnej(e%U4Nrcgd=2{i8TYM|S0bPHHT4->FSq-h zT6kcC+^#3v;PH*}OVoeSe3RU^lW}-*v)r!3-@$`h<=N6+@2>-uzU&Sdyt=v$MC_~^^5m#e;MWVuj6dC`uNM#`4RWtucUo$ z$rU_QR=$t?U12S+znr`t$HQ{CTR}dW{h|@>RFQkw4!hx=s`5t6kBbMZ$@gT}!1Hlm zZMpuvyySckYPpx7WLy(ITW8d-h3Wjj<<7 zLw4ar_ZpJ5uuLp$XU)BiA@!0q$ljd3@q{7CkD2={c7U!!N5d1txZ z5BVJT<97e{YuxFgyuI&v*79BDc3tC09y^G~cF5<`^A8^SN!$U19JklYC-G=P`F@P^Z`^m9?c%xL*El_Aiu251+}mH;H%G>MulX!5T{8=`91&<7phgi3JBbt|I zsC+E>C-BG{^5bl`IqnXV=b)z#9v&gL*Ku#-N!-?FE$+C=o1eoyxcy#Cj`GItR)`9?K(V!Cr4>KKIS_b_l}k?z-Qv|H2(~D$E4=B;l8n{{vDo3^WX9C zIOSt(H^YZohrpY1yI*u49vv@lM!p>GnIP}Y!d1uJiE_J7(gIK5*3%33zm?iQ8js*M z&RKYHlJdVXp3m^WWVszzdvV{}@~6pP#6x&%Jof^vLmaoy!&JaSVfEPij16$_RQZz} za0Bq*EV;d(I~R9m%TKZ0op=Jb^WKljWhV6+>YC4@DSdO9|ZBl0_8tu zyJPV1LU{)scVFPnBDp>8e#3*feO|Y~M;ed2MEUmg*TWO|J&eCUo?NDUfATZ%P*mQP z@qB4LU&!rzbqx=%kT0R9;>Q|~f2F)NJw5QqYI#Q1=L0;tM*ciK2XSYuybk^^9>6cr zQ(=*|8(6RW3*?*NQQW>ypgSJlpuD|q9gQb8%KxNiuK6apz3;XL_iUDLBY(j1xP9*8 z3Le~|y#0P+u}?JqSWNx~>sAf-e<>fre0y7dyL>m>jo{%O@{aVZ$DOa`)Ho+`4{rD6 zGB4J6qWIhNm&X0ysK?$))-sy^c7AJA35zK3&!& z8fOS^$i&LyvAwC|Y=(RH$?g8(P&}|-UVwF5Z2jNLyD*#qx!ex9iEtco^sM%2|y^@$!uGcRYdH_0RpEYCKM1^_$nj zy=guW_v5qakKhU1j`MHu;Qi{qm;B$ji`#q)ex~twA4r{VRXl>*e1mulx1Mo$ut;jp zr+5Olo+G$ZRC(*UhDUH)|H7X$&SJ`2k01Br*3%hJ;MOx94|-F3qPUA&&tcqKJat~z z@d$3?d2pG=8N;oo5gsg&+A|PO;MVgI?mVcx_3XwYxXtTN-1|`KyzY-`Jbt_Z$3t~I zj9dRJxUXdDIH%xI+{U>ckK@*J4i7z?+LLR!#*@UYryA}ll{()pcoet!zK#1zr_Of+ z9>DuD-?MleuZCy+LgVq2QIG!DamwN@Zas}~r>v6W=oyHIal1b=4G)x4-a~#19>ncB z?XDFXPXxF9RT598<=f!CN7QdU)A3N6@5iHf2gY;PN^RF$KDDO-9>ndu+5?ZJR%E!L+t z9#8YOc<{;8{OfoUx969Mc&JipegW=0CAagyHavn)V?3vDe`V!I;u+Ry{Bhj!Me$G- zvp7PJJ z&fYB?hxjJEChpW%-p&JE@Cbg0{8-#=puD}lUSd5Bwj7Kp7>5Yf^Wfp!GrCT{}9i-L*w+cPxW$m47cO99_|k+Z^v5~%j0%^I|}!8P~OJB z6i?t^FrEW=q@(h79!uihPV&0sb9|-ohtj+(9>Zv-Mf%^uJzeGY zxysde7`OE~Z24}=hw1qXkKo_f_;)h?SCqG&$MGa?$8&2u++BG)o=4)IS5tdFu{>`3 zYp>;dq~@YZUI{c73(T@_m)J{#|$!xBd&b?{($t zF;34ejnl<#zgNbceyQVWhlg<6?kL>TUwPZ^$9NdG{5QC7Kx+PXJc`?R3hdT6eFIa+ z@SlgHrq7#$&kkudw`JM9oH0C(+xuw0;_fiz?fj5`ug2pHmxmZnbv%R@&Y&Ok#KR+$pHBWg z+~=l_X9FI^?f5*2`$sBo>y}}k#uLZw`TZ%}H%fVXe(!;YaofM|SbntfcD${@qqyad z;ej!!`5Sl~w{3e&*08Dx#c_JE^g=BvAE|=?|-dD{7w{bPxj*)k9Udst*0^`!0q@C;tAaL;}G0ksvbLUFT&$#egyY^s=S?_ zGn~+PT-?^bB<}l6d6)HRhDY()cpp6Qx$<-Hx9}ux>pve4E>nI9`Bk_lD(`_G!(F@< zeglu=wjYOo&%Bna#~v@YaQ_!_JFbTQpnMFsb-03uR;1?3oK!xE+v}hRXSIAC`I>kPxA70e{cDuB@hrAHZtJ-h_pMdl*7G9n;vW@KX8@KEz^)Kd|6pO6>B+vAa^v*`b{1bcv?yn*rcDH`85RcW6-^DoBD*vn=0IZl6!v zh=*ItzaW1W54u}#M8o%2<)qQw0C=W5Ornt9@djx96($gyabxr-gsj_@e{l_V*ep;h{nDDvYz4<%h}- zGoHbC_zk(8Z)cbfmse-qHsXm9ay$Ny<4IS3)z;s9WNN<9ZyLWdTE2sPbv%yeV7ndh z#2Dr6^OHmII`6Rsbd5u5tp8R*l z@5lW!EM9;myYhIqUa{C_jinw>Z{3G&>@i=bxVfx~M4azrX-Nxh5n0ygE^YGwS`3T0j z0#EFa+xO}1!9zRcuX3E9v-~c30s6CD;CS0Dx8JLM2oLO$ZzEq1_wJSFVEo;1-vRlb zEKcu>gC(?WY9zCgi29DeHcUiLs{8f5d;4$1@*Yw2QAC)&Bh5LU>^;x*{bEUQpi7^JA^&qI?5A3veeX z?}~50L--^fk0&gDS^34}|HGqrF1+NQ%ojh0SHq)M)bk?8VLRM&Rc^=ITex#g9w5IO z5BwvaO#cx)fzQBi;qGtXW)sn z{94>`bc9>~aom^YH}N1|n(dajr16LGXYqP?Jgw(7+{vKrK0$su?#G|RH{mXB^Ge_m z{6X@WFKayUw0v1SnU-&gdoyZ0)-wbT;I=+B*G3{#9^4 zZrAxCJciqOezD~t-`cJ}OKQFe9!vAFmd~1+k69k?$@>3=`?4u-@5_|9 zs_iE6E97gM-=+LS9$y`C_a3?RPqaL~ik>JQ&91z?|Fs|YXt%G>um z)WBo;1&}p8O8? z6_zJipHer}<9$GGuTOj8o+5JlKF?)%ps0K=+x^RWipja`aw^|s|EBo}+>hINW-lI0 z^CJJM$HndWr4JtRYP)v-XA7Rd^;5^m`JZ|M#U%q7e_K3`SH~CP-V(}3@IUYvejKlU zOZ|}tmACWB4BY#W{15UMa8F73y*&TcaJ?}-%8q#ox9<+E`d_QO3- zrutX7x02lMHx|mQo-l4bJ@Cj=sreZ0shrxMFN=D-RpfTv-WB&(mD~5^ufqdR%k92F z&aA9YwNww{zGvjNo-6S%ZavwusmFabHUBc6z%9QVk3XmUP4;`1yVMi+%k6k;g~zJP z`;lLU`)kPUd~yR%;7!TbyPNseRK6|#E*`<{{i*M9Pc7w7vELuP{R^l6`yQ}lZTT5` zM&gM&@;dkt+*dc%%V%fZ@O#LQ#lyJ$-I+aj;(7Jh_p6k+{etm-=LGWpb$}&{!TJKMYUemXG6+CaFCS=cXr+ z>O*kn1^F8K_u(;oFo={We?S0<*=*w|Q#* z-n{DZz9e5je>Xgizk{#GLoHH!a^Jpj^uPV?X_@Ms@F;HMUyJ)&rRH_z$ z@v8OUdX?ljfdcAxIx0Vf?XJYb_(yl^2e}I>@9(Mn^LNQZc(|WD6X%C-@koEUjsJ;4 z>In{z+utdehWiJ}8#A6?@G$-#UcE5uGdMLr4Nu^=592%ke#eu;mABu2uX8`+87Z$u z|13O$AI2}>?kMG(;mkPpL2K@kEHoexHDEg zmakfrd8PRjJeKC?aPPR(o+`!EIvcYxvcka|3u}Ba~viu|CYQHJ-JG#CxOqz%j51O}HgeUF=Q&sKSu?HDgP>){)5Nx#4fpgk7#4u*&~m!-+SS)y>fd$Zi@MSxqbib$GHE1d>Pm6JMrXE z`P#x7&rf*tlHC42RNj)T|KIY?tlP7=|GK;-`?ob7xhY?gPyM~|fTzbD*h&6f+?!8+ zj`dlGd+wJXQ;l;RPvZ9dLN{<<5#@g;pYLIf-&<5Z1h0li@TZtpD?CwL`FHSeDcHW$IF&~Ouh>*UP|K(Jt3bB0t>xH{jOgw?zBwxPIw%* z?|B|$`PRypqko?Dx0P?jw^+Wt{3XVD3=an76B*AXJc)bp9Az{wPY314;1A;w+&)+E ztmQi?-;eD!$HSfFedy_9`7ZJ!_}h3AKY=gB<6V`v*Dv4T{%-P3Z1*SJ=`OeHw5(+{ zuLy3>?+@e7tIGdMPdz-@Lw*&1&AgY~#yJU(_m&T3{B!ZZYw}9$ua$VXkKA5|er5gm z3LZy4;L#zB3 zfcvM&3$Z>+@L*VO=e^yyXQ8}BL2ck99@;3k*LTh%j32lApT%(hCgtt^YBk*1EVuid zZSXL@gLw_YgIkoh=dWpa9Jl`E))Q0S?tARSovrdE^q;_^cu)5GW!$@6`2_2hqrB$p zd?gQZ{x63I_sXx(Q`bB$_hr_GTjSwFa(le=vHrvIlUzSfz!S&i_C471@#y#RjvR+; zaqo}vrHpeQ9{*k53I7H6UzT5HeKI_%`TDQObMn0W03Ns@|BLxnH2+V&h@M)wb4xyy zb!dgVnRMhFqvtg|m{nef{3twnk32j5Gw>K*5C07JWTyxJ()#hetn(4vmq+93eJ@!4-U2$JwxxK$X6nF2J z+xKI?jXOo;=NRW~Jc;MVS6jZQ^2PCkxDU6-=^vIaraXsmxRk`&)f=8d0+xO}}kNcjJf5dj%;R(OouG+C*Yd8)o;?dXTA95Tv z#DfFmk^A)@biti><@SBQlX1^fxrcSwh3Z)J{$59Rj#`Oo5k1@fij zd*IH;srk9McaeM?`(-g6#rZg)vmcMA`9(a5bDP1*TSepae4_pb>92tMal7wS8;{{t z$+yCt#pQ{FvqOLHJ*I0`HG!ud4Y5KUL2( zyeIB_CjS-RjVE#IxrK*5SAGonichQGSthsqP~64sI_gW@8&%%cA$K+P#PLt)Z-u+d zm7l}$vjO+6l-vD*?9Zqtv`TL0r7n14wfqFfc?^%OmG@)2g`ZWAf1Ug&=g(Jh?`>jiOD}@yUpKZVlkzU~T*sZ$@>8r&lNyZYoO~$xPw?Q+^84_= zaramGy==EeP4z_Z`n+Cv7f)VL-j0VK@NiP@vd$H1smJq|JQqF$_g<2}&33=Wqj&@_ zSX(`T%gWnv-VKkZ`9{lMQT`#eo4byB+`r{J>2He%uF7|lUxs`Ck^e{jmicx0qpWA3 zF5|o@zktud{kP-4(QypsMWpI1*J%}3#p49W-TKY%-#<*ONgiF)dZWsz?n zAHv^yWI9yOFWD(;5b}@`*SP*8}s@P_j%+l`4<|fKblXT zlX1?&WBKK_J{NKKKKW1d*KDYsPyxAJZ@+`P1?4}IKWF(ua=Q+!+(axBE!L@L&nK-9O)t#~zYjWytfrpqBD4a{Lr|Q9aQ*IOpdcxTmq)J~y%%58Iz}M5W z8jl2(f1cy^?pEqac97e8w#H)}<+|(TILmNfC%Mfxb8GbkaJvuF91r4lUAGXA;&mA3 zW!&kke*1e9wcDuQ(^bCXZv6*y@x*I#d)~ih`M&b}91jiJs>jz){t4@_5Kr`%f690= zysUh9K&roj`v=NDBflF@;?`55oq8gJQhSErfx+^|^c=T*n%8Qto+RFc{1V(hB(*1V zknyK^dpv=^NzZCLG*mt21v;q5c_Y>P;o&sjfqRFg<_mOGPZZzE`RX;?9jSaJZZLg| z$KI01IG&-)Wa+ch#qsnz=edfrUa-59Blk?>E`vOOB z|A+G1|M$+nr@An&Me+pmnuCXz%I)`CuUh_d`OB(tp6RL{&oa4PSC7Rbcq7Jn08cJg z{tX@%<-4gTv_U?N{B`HSRBzoMSN7WpE43hu<@_Bn)KaQ`-WZT45? z?&=ADliKg%Nu1s8oWPx3$~WY3TK-kWvpcn?KOV)KG0uIsXOHsszH_M_^z4@p;rJPd z#}B6VZ^3Y`&o{6|~Sw4pG zB=GPR`Kwtquks=FI5$&!2H-*bKJo`~H)HQR1@`_+sXp{%liP6{!h`tBjAu6Gu^y(I6*d92(Z^(0!R_VmO3 zt>jl2|8Dcv@;c17&|vk1Urz1mh$nITe8?6&7*yU~kLMf0csiu^w8i}$<@Wk_1@7rA z|CIfkVW@gyucr3Y$Gtt|ZJ5_$+{IsFeQx22Ua39LzoCAAZ+S`9;bT11NB$jt0}u31 z?Wr|PJyHA^`)dv!9;kd9o~O>^NjJ6UiQ(!AjFi94yxznUcsa&%2=|Ot{%_W;%n0>( zCdsRkAA<*`$j{J!68DGY_V<7uchwVoM_!cm9E!VB-4;1 zK2v$~^X9YVi^$g=r5@ird0+Y?coeTl{vSLUQT|)0!GM-!`uW82* z?q4Uj`E(6dqAnB#dk?rxDkNdF!@x>atUuX|vkdICG-Khe_@_kSb5{dEd={%yg1 z`{dnOhrDm8CxSP}JLArNKmCwcaFXN#!Z#_jlZklh#!)abDtb8QRN8!;l zKZnQg!HmcMj(Ys3G*0tbcr48?TRx$@?cc`lswawbT6LD;u{6&)Rrz?D_reotz6Vd@ z9T|VQY3d1{)_D5!xEO;c&d6;%KjTTf8pm_Z>FV+Qr2LJd+CaoS%WHRF6OWhw@MJdm zSB$62d+LeZCAarIcjEE8YZu#)m6IUZto_$j&Ni_KNusVx79?T*ExRpoPY zXv4elKwY_Bl{ikBdFqL!`B>cdd}{s-9!c~1AE?JuFEt;A$2@KJc*YhzXtaaqK)MHaC>%~JaZ;9>j?`uAGCx$@Ru>=X64_$unQ}c)M2yXd`pQ|U_LHYTN zb0Y5VC|`@8#+^>7`O3@G6UFU*+GIS~IdweeaHos>4E

    Pg~u{DkpfSLN;a{1Nwd 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 literal 10300206 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
    Z>|O3_Iv{z?i* zxn;)Er7r8ryF-8&Q0$)!u)(kl>NwAV{_uJT)Q0LqgvI`pnA%BwZb=CZ%zvd8g`4&2sjatEp(g^!mb~-h9vk{3aVt&){6u+ zTx+#Kg7#3ISfD%ZN#)U-?%48_YZ|hfrF!TPfI+|b?_FVpdo_Id&3>ZCSq(%$IrKCF zH`{f4e}6bci!B6pNB~xDU@1qk+ICssm}mFE0GtJinlv)C`kM zFb_Jir0o!1a7DaX!)|JIz8v3-sq7AM?jBDZNfJhLVswU433jfe9A8a?ksgK=`A7ZP z7&7pLkQEUVzOTUofASQ^6-VwrD`<2O_4ckViWs+V!s;|2ut-Ow$MVnWIlxKp!?!+Qv4X>}rEV9WYi2%Oz3% zW+_y1xlw4|*bs$EM4^YS;^!3c8`*Fas#4I9AjnZ@n1afJAV;AC71T2baunKCK^GI` z4|B!M3NN$nrs96J`4xZ97!>*>=#t>Dxxr6XlP-`yhegrMTp}z#scqvSFU4S{rd;kr z`_>!#TU~3OB?-q(4Rs)e)%o?_PE01$lC& z+u5#Mr%GSt4#SWrXZvlhGC1d`by4ExRa8>KM~s>I{(b_s7}m-K=(f1_M$*Q3Nqd{7&EF&oB|TwW!C5zRRDyFp+`zpS@exK>V@$}3*$lEyJ{R!;9==!>(gjEVqcfflSw(Rq=8~b^4rc(S9sx;R<*rNy8`-g(?{ zwtPu>mwd1Alozp(ldkt;Nn^AjUwRC7k8-_%-QW-}_6qkiKzxG9aixO0UE&AaIN;#8 zogf`ARdI0MTzM3>iUuCc;Y91VB!w4gehyQ;sb*VFbD9njtm&t{;At1dHXLXa5*V!s zp>Os~kDwauiF!s)NDq29-A_jK9l0}uUVeq>5l_~o&$o3b`Pa;K1VJ?y&RBL1RFfSh zP=rBVBr2nUkhH14@E5({v+dbI-Z1JY z4vJ{`JFNNxYt2-?fA=HCx~DF`Kr_7To#!RKZ{!|55|P*S@FI`cLxUGtGKF{OGa1?fSM6F%96A0LF5yYs9Q3~Y%Uzi!2%@(c3)Uy%)!p*f`L^NjFR>2RwyWJ&(r z$a34{fGjWZ0$HxnBN2I84=*y;9x~vJED3!kBO45cJW?Vp>D}8;v*CE@FFAZVfB-U4$~+5 zwG4(l&J;hh_O}hYm{`^bx{Qf2zOR}X z;PU`4;4@y2MC2AdyvP)LWbnB}pUKE-g8`q{s8dR3Ium&R%C_eB?dKbjmvx88ccIxK zavS=-w;6jcvhIb^6fHW|HEZV+8@#m~p`%2c>njnA9&fP;Z%r$?H||9a?nv5(uF6b( zxvMm5hLn*=-}sQo=DsyCvdYvhDi(#vnx&O2330jA6A|QA$*a#nM4+NJUU;rDlgYWC zCB{Rk%|ppeY-q)iFZ}rHlb=ylx(HT;jlWcf7^Q8IE-e|97TbL7UP;$3T^mYkN}Z`ZnNUktkfAfB4b3k~4YAT- zYU&WZwV_y|eRf^qiTBCz1vGFr#|eWpuR(KuKXtbvl93(W4T<(P(jSY@G10#DXnWk~ z9@o0ZO!rvH)N871NViMJ^q?(1Y8w3uY!k@_~-EwvbA_mKxw-dJi;$Jsjw+xEn?Jmo*V4U{?3v~CVP zqKz**{1JBf7@WU5^2sv}-(gOC%#Bp|iUMgMW_e%%<@tTs2_TxqvYsV!gC3Bue@JO2 zBQt`u{?;$dc;Cime3bgye5>f!u)N6 zId*!3!owdYl=RM@TzG(eni7|9!VDm1WyZsF8M!H5w=sXx7OZ9|Z<#~IzU>yO*v_Ef zzjl_%`!7){)<+e~;oro{&B?Pmsk-&~Y?<^ZG&yvcsWQ}1TBs@M#eanwm^miSb0y89 zq?Vh1N8Tr%^84j=sHPt4JO0N~`?V|e+cT|x+pE+Y+O^kc<38#Sa?VSG+MoPQ@=4E7 zA6Wg9Mf-8Ir#>IDs*e@OhuXC?++~)(R#&(+f7NApvM(mg+IaJKTg3ZpiVt{Y%KLaY zZX_qoUZ25CJ}YMw|7DkW{-zA%T4t%yYf873(j}J07hJc~jwe6A>&4Fwr~R(|lKHA_ z;upQSE3@{)6W?oDUhO7*MC&TRt^!dhx9R5LUZ*t-LxYK_s0z+)|B|m_ z?o6!tCojwty;buz1Dvw@4i#Qy>F~M@vFMDStq&V2bElg-_SMem)l3>4g^elP=tRw@ z)MsxkP7^vZ1_Ll(>5xQ7rOGnJ(_i-?a>t|)kcg&6sZ%ky;4ofE3=+nnYC2L>Lv5D5 z*RMC!&B{g_P;P<$*FbyHJ;${K1(az>pzK!kSP-F1&#ZZT-+ud$-HB+zC3K`E{i2-i$5z2OB6VD~S1lqt$2-3~U80 zg^kxODzK%nOQ!A`_YR8>czwb_6<((wDh4dA{+zK-IcSqb-Qt2p`hxbMuWX#Z@d#m( zQ6Rbc>U_{CQeT4wWj~RR{zvqp?>hN!I-8(@Pwt&)e)gdUAAFGWk2M{9=tXZr?Jat( zNJK6mdP(Fwensm$(rKT*Gu-d_%etUV8XXF`<)7HD{4>&dyv1xKn>z~lX6dF*`x%^$ zs>;oNN3dBES^e;ZdHF4?{L@v~O`ET8F#Ve|p7bJrBPC2m_6kqAb#z|p2FVibh(^rF zYv*8qSpc89C6+%I5aI*w$ldLaA9hSE@AW3W$Bmx_TpqDUVw6we4b}YAw3xNFX@bc6{{l( z{&MIWZTw!j=hPQMu6rop@ujzm$A9B9UH^I1|7NAh*58f?!6s1sbuHS4d5B$XjCDTyg-+IeZdfAKn}$I9Y# z3vtqTg&#iv2P;YjTEo2Y0Zv=wM=?8|0cHron z3*yP$a{fg4CnKkQO$8}i1H?EJ{F4pudK~cXTR16xl%7!C;1Z~maS@R*pmObE5r2{Y z%3-D{@7@BIonS0Wi?Ti2$n%Y&RqpzkWTZ5W;O#hFy~xV@)AFpro(O*`N9krs(yg`m zKU2hQ-Wx#^h9dNBIxNDG1HWJ7S+X~Bti06;T`@w(`Lv%=yVP-^rnou$wM(!K{xGRj zLVc}l5O=DRS6Fi&g>a)wAG^KUZk2PzsAN^ePGeQqWD}U))A9~8&(qF^YU#Tk zPGU0XCt?z-n>X%S`}x1GnR)-pFZ--c{3zQ=CwIJsnb=yrW&Ec2+Vx!fy>?ZfHxo}N zMSQ@9X|%d^DHc{>bFF&@ez5}AK9;t8$I_D&2bZ_{DHf5Wx&;-_@(a$F3HGqTtmC;x zvQYbt6NQIOY}MW*Dx?VJdy-R1%5xjuc-G%q!*iSV%o}L)D!OrEt#CyCOwL3WT4nj~ zwaUKNhFT?TEd24_pjBRcvul-%HPkBqX}QjFDgogUedX9il+AQBhj05<`L>;!Y;KBr zdSk%B$Ui;^r4yhtZ?^f2Q1k)W=vl7$bd*m*u8_#dh97xce2ef4XjZ#eBxEQFVwtK- z3et6VH_OI^Z(42m{e!xfy1iznp;vMJ9oSLw+P1}I`Df=v-lvRm+gn;*lT1Hrle;{_uCFcnIK&skS;2DPG`LkuKy(2lCBsn~%0~Hz=$YENEw5d;TaVBTI zQ^=HV@B^|H@kF#_ozn()$6#ls6GbnrCTmk&%_v&^7|zpW1$fJ6l#*RE6_ccllh4i; zf59q$zV^{P?`uLm%?tYl0*^o83#nNt2bY~W%QUJWtiQy(TsdM$ z&=;jE!FIb!frF_gPk3_*@RwEwK$$T^YCpA0y3cz@647!i z2ugPU@n2%M#!?hnF8;+`rhFPtiGW1CH+9JKzdF?_@b0uw1)w48pM=k8S$xXN+-=gL z%J@42uIva`B*9fkur325*DZuw+bVzpwnryz+P6JXa&p>>H4lG$BU=o#jMJ}j=0oTDeOr(M6t63NSUF z9TWcZf3RX7ni9g!L}iGI-9J+-OGL7wa`YVmfxd%45*7MJ)vjK$-rG1-ceyo$s?mEcr1R?(o1xIp?2`6B8DVuR4{HTmzj&b% zoJ0cu1qbr*6`?$>`a=bBKqk+e>c`Xg{`-1YeP??4d8+u|FKN;gukgIv9`^?{!gN5ace>Gqg(J3o=f{vM*_*2-kLr&>gQ z{6s=235H21P<2gcJ15W+*Tb&CEWMX7#SkV2X^(H<(1F>x<&DUd9sf_zL-~P&?7PC( z=Sz|_MDhwdSk>tw{AIme1CaveNPze#OsFv`Dd1aNCEe(lmRp|g6OE~U;A%gSu|YK` z!HQK4s78Sh@E=)69kcnap;rIpKG9p9{(&B2sRU(!qj}@yhelr3YXM$#*69K>eM=7@ zG7l@cfB=eo^;!*SZd`I<-k>~yCPo(Mp{_9|e^D`aeltDTcYW)k0gEOK@%oJgvi0>| zs}moWN9X^-y=%8Tbz$Cd-mEoElDz@%MeAhbaO33qP3J2s_6}4>A;i>`MnpRdGQ{+X8Zgq<~M535h6GCbnm+XI!<6#X# z)gOPwx}ug({n@N>#gN_6J+^g^t=yxNd;Hd0AfR$hcyZNk;O=*DvsC-S)8D^e;vNZL zu8+)%tT|QHiZnk-jlIat?&~i1b%P!qBWJqDjqY)~d)(n3e{+vJ^+-gv(!(npp-28Q z0yaFs+tSF#JoLxwN7>g@_Vvr)l^qoOF#lOj$M6V2ctn?fVm&lzlRc{!D`@B|&ZK3j zecietQ&vEbgZ3Um@krPQKhrkfL8xpc|KN&br;{p@h3Avi3EmCO%BrH{DP<=l+ib2g%|lokB*V2h^t6M{w|RG@43`Vt7!VY7Zd37 zOY*j{O3fyAct-?tP@~|I1Ir=E6J&6l*R8oC*)vY)afur?`p{;$H;|yhcTPK37X)@2 z%zbC?Rph^w8Uf-6$1u5{J4S3iDiJwE*?EyN7r2|g5|N$kQMmCj71e2{crS*Dg~S;&V!Aq!`sZZhWjV!^K*0coy}W5+loUScQdo- z&~{Kh4z8(X!Lnzx)k$$J?)}6JVW}t-IxG9Sn-Y>5d}2S1?|XQsQzTzy+Z z`4}f-rBwA}4c&^Ia5C!s08oj0TxiDREUS&nDY~h8ub^l|_1e|ykJH*XABTj>bu+`8 zd-FFj)iTfH zu6jE3G)3F7aLiI;;yHSx7yE1Re#gT7UCiDtCWa_elbLfNJ(2m$PQd#Ok0{x61qShU z^;*Zm9S=ZS6NTIAv2?lugLu2Ejr1;l!~PbpK>e{QqAx1qo1TOw=Pj40(-N2Idb@bX zgU}Rj3O>>I6%>etDv^8^oO3f}NoLt{t^ldF$chZm#6qoA$dBi*;GC=RIRkk5P`~f7 z=aJt)C{PR0q@I78vvlML+8i6JXP74UBe!01U4ge4B_oy$UCNF??SV15;4 zVFj5HK9AFp?V6W>Nt?r;#no$9sV^#36*_1WOR^iQn3uP&#wEuXe#dnVRl}C*{$%!8 zx*B^q{3g_d@Uv>X7J#{Gw4P|WZQZUK_X6h6p{#T@-eKa^s*x+d^p4r-B)=S;>>P;6 z!iTTBFi-b3^>$N4{?PA{)P-&ILA0@0?KpRR7YmtY(+oxC=(fbd8~SI=IoqJft4xms zygMEv*<+^B^JKA8zuco>Q(j0Vt&6N@n^l6;aeTvDE303)=c?9R^@EimC z)J(>?=k!PQonHK6?14=JsW1IfTNBh z#p!&8DAR{eBp+)2C|WaLd99+)D@_YzUM5l~JK6I)*%d z=XBIb{X$WDC@RlYv)8|=rbhW{BDwN)6m1&4(YpF`6~+@_yl>X2bo71F{xpve}(k;`tdc}W@UoHKof6g-TFy2YtpjO z@}*hI7^x&t3i!^+TMchc-SQbV`If&6oZF0NON0oY;-mZ0GlDtwi#FQidF~hh1a;1l z@$VjTNFy0-n5q1zok}i4%nF#0>59LlGt%OYn5p@L>K7!h-Z7oDnw!Sd03e7Pl2{I# z!~M<8;r@a~Z2c)5S<2+_I~j86mm@|OBZgh0(>Bj9Sh2P*{Pqv{7S3~ZN@zgahCa8e zduVrFgw9b&%2REv8sXim&Itp%M~rX{Cn%lzIyt?0cySyTm2r73%3yf3;WLely_vIB zspMRHut-xaBibwvxrWK?5BR1dO|o-Xj;WbK@!q0)*Vt62#u%lb#C20=2?IYL0D z)BGy~GR9=smMWZ0HNh>2l4v_a_eN0g`EvLhvb{~4oKd;8?bB&sM4v>D?ll}Ig%f+Dd9ekjJsOWUPI!5b`J|fw6FJ8~z zg@zJMSKMlR-aP?9T3#1QrJ|?ww-qju9GM2NJGil|0!r?a3GX2T(^2xQSKEM5X2_EM3{o2(}lgOWI(3R|lFss7$KfWtgf8a&mRg2>$T9)0BBD(^#H@b6(^C zm#0mpaBV|y%9%1utqCp%p>2g5(Qho9HVj%Y(9+GMYPtf)mbfP2U*yA_p~0b8ZS>bS z&b}#EA4VJ3582qcu1r`)>Nmg8&Jbz?8k|k+Dsv-jq3K=sc zki|c!pV@3@e2Flu%?^Xx$ir8nV6MHJVJk0YZwRltb#yfk8r5w!CYP)E{yXY-04$RF zi@6k&Y9=TMS$M-nb|m;GGJ%-lu<%gtj{VifpfiiPYsmsIq(WG641pf&61|}r z`>ZG!Omsi5k&6f!8O_u{4+Na&LFQZ=dvOTagQaX$jqewL3wot+50@U~&8S5Xd0~}B zlj}SdRH|$xs?!qho0th}xzBQMlYg}F*v+(OgoZVa$rDS_a+P%(C)IS~V_e)j5ECIk zTK}qQ*6>TT;U`}DH2p(0RV5GPxb3Co^{v&+Aftg~!Hr<0*_lY!rQM~CL6Zn9-^lp! z8pny-l94URfIc<0v%X3reECa`Q`TZD`z}MuNmt; z(7;uuf$Pmf&nVR-I>BZ*c#pjVCBMGe>Hc!nUZGjt|A;zo@Nrr~C7q~}R$84kO!ekC z{=ON#=3@(NqvE6WH!66ki9!3KFKt_Nwnyn3F4{D!qePF(f4`$Bqy6>InwXTF=l7tG z4|Nn4R-mxOwvo4<&go1LYuN+&yn&r0?6I;coA&nqZgdw{EN6z{z1!;TD-H-`^qsvz zQG2NDQ5NMVn373#3S=}#pHI~K)tGo6%-=w3`mVzJdSX_(BR6a=$|)R#1n$^5dinYO z6EdS{m%)Gx-pMdmYrp8y0j{?1_mHXyFVDsx&f2aJt|7-d5SHD|+>QCwNuXN?l z{P=%a{(U|EOa1exzZq|vt$(Kc*7IEbf3N&#<5Tbn9?-w5TcZ8hs3m>Aap!DXM4CgrNCfZow3nhV_rNDQ9(n>fgAyxhLD*PGU_u_q6mau4nq-@`89` zAid0GIA#|zP0)QjYxH&QggO_UDR3h1H2OXh)1pocZ7tJrCYoDb_YYc)RPB$nW_63+ za^x%8_`IuMNX9@uFRy^}#&+qbGieGEksXuguoro1Z^dB8`NK0Yt+Ny}r3b?0Ur%UA z-ZGL0Zr%Lt4~87c$TwX=O&~_m{;fEv{5WHOit2`w^1LQ#8Gp$jg69zIk98@x4)5eJ z-M@#;eEAjsq?&AmPFFLheiJ9cyRhzrBQmCpHKlq{KqQtoUE^DwBnujGQ{!G_cPa-i zKy*S`T2wiep#_n~@$zg=EFeYk+EqkUs`gG1`13ykE3F;LrT4@${~JDD6}y z{JQ-kI{$`}IMHar`d#@pn+Jp#3{ENO|4b94Ni4EC{nT9ETblKx#^B;7eDLZRnP0+@Jsc3YnSX8!>}9vqPml{OXMrB?w_1AiMZ!bRBTZgI&YwH zq}xD^NN9pxjqC+%f-Ukp{miHsp3#VUw_Kgr)UvcsYs&(y?J{JWsyU@di5U2vfZYVP zHoAg;UL<~Xn#4uZDV702H~&e_6%Z?_St-K4Ro%K@YtB@{mY39y%YehTk=hlWN=U$_ zzNAuA^8)JCE*3GNMCxO8P3+rHwEo(H_;Hj2YB&EN5hk+y)sXE{47@*cAV0GAIn;C2$u7CL{ZW*A8u^B!5s69fB#EWZTg+B^pk!U*ZaT;-yewJ1FIcv;&ao z^Z^q4Ms{4079s?e2BEPi%C9^_3cb)gRk@0iQBZm6ks?c_P$kMN2fnKyXIH@%87wcV zpjur_PyaSsC6*rP#uvPL(#TuxIAFoh_}Y{m+`gXe!5ex6*MyX@?I~~h&4=l{yYpTN zJdPMQ5{yilc-4@eu7SkJ+0(AjUO9!PD;hkhFBy(S3s7I$7IjG1Nm@X)wfxETcj~m9 zE$1Xdil*2sQ5@TV!;6!JeO~MUD-L=_sn0>yso3P^&n+2=~CQ&%7Gc|owa+d?#ulAALA?k z9ZzgxXj1cy+aA}9+h!`;C=P7-n)}y#*cgFkR3@}&Mut}HVqv=|v8v?@nvkMI_O{V} zO;?lJ3=Z_qNTlX z6P5-6h(lz@0_Vd*(X*scCO85w4aK;x@YgL}WUjS!mIZpPaf%QVhG@8lKp-($nP zM1+sN88i?FXQ8D<%O3>}fb~sFQWcWKg2wYAm)4Iqtjhft_BS+3PY-ph1m*cdX`RBM zT+-`LbiL@o*M?fZ#Mkc$n2N}%jAI?>!+!{YicbCyhw$@HG8cT^x}R%G{UcoI=Ug2s z9Yw@=QLrn^_<7iYTy<$EyUqeR4=F?M%)--qVsC zz9Y#Bm6K08+VFS#ij4i|`2-eTq6Y?E(V1**LHSc zQlJCXkCpSxd^rW_E*rJ5V;-SLga1;y1J~q*?i}AVsDPU z&$w@gxCX?S9R>c>+f*CLNL>@_w<>5~-1k)XjumekMSCo?W3=ZfBsq@jYhRDnJ)#eB zoOzywIF~kVQPY`)JpJKX%Uyi#SaT~{vwlnXaL1(4;yG1|+#0+N^&;=WondgQD{FTC zOmOOA*&!G%NDkHz%ISPUjW+DgE%5J6x}kv$GRo!m>MtL8O!G`dZh1Ts*SwDI)#u*f zW$~5kgrAwPrDz#$WVs9L1!B!}k1tk2vlTSc9C}UM3tAOPw_+9ZwVb5=r$z3MKh} z#E`}*y)a{kFou3HJ~&vhjeCq-0V_DG&h>dY^qja8{3wVgdehW;m-y4^JL4W7b!?*b zcPCxTiX8Z8V}oj$<6}_&HJ#cHL1>L=Y_lsor5bi7E0GV5`o^R_knNq7^&P#!K^Adx z8DU$;6GO^G*R;nWV35C~$7)6R9HBc{N)!q*I!yXVN{}5w9uV9BLgQvX@Em7*V7C+w%aeJ5@hNAedw7LqK_CsM@a>eGDitzR z3iE>S%4a0FZnve^tqX@{W3SL7;&z``a)+W=0NZd6FVXqk|2pLy#(32isgECh)h-sju!p-3 zK2<1>fIi9Ym$a(18%m}tA(rIixYregU4TwZ$k&YSs+I->fCjB|0^nDr$W=y?-=S<= zQSfqH)Rg=*CdLe&%l)5Xa~x*y$a_ zk5YR~4?rTvE)E%CEZEQUSMMavlEto_eog?Ds~@s04b{wQ436I9rHeQHc|a*VyfV(v zNER+wbdI?zZAuIkfv-$51O*Y;0{=8a!cjERb>N{yspTajcg%3_MgCqVnWOIPSI`k7 zb96+me$ak<)b3byiTd#(179$;K1h#Di94u)d6Afl+f5JZ(22^x;xt-!(hZ|^Tb83b z(yMFQ&}U-%@_v2Z%KJ@^OjevGqw+p+ai8kZzPtlnc~|`J${XnN9F$X@9gal(T-vxhX?-n-4{V(V_*5!GL9vOO`>dLEh zaVKuRywA2a{_Xp}E3b#kvu93uUzsmClIP;`H(%a(SKf2W{zLtGwUN(cq%gdojXA44 z{}|jd$lV0x)2#W-atX9Ej18eNB^MQ zGZqyoF(MZh)U7Yzu3y;;g?*Z^vvkIAqM&63wsTp_zb#@{MX1HCaE%_b3B>7c{kPUr z|9cGdp9(?K$_U5K@|RuZY=^RxrmIjC&y=e7AR8%2=~F+ly@*Iu=et5Wue+kY<~OVJ za`Z>E@kEU?+qt}OH51%UMKd(mP9wMGPdY3e+KKz#gbX+K)~$<7`HDze%#STOV;8uC zhoo+OBwD9Y8LcBa;}`OLR-G4~QdwNly1U)SI=C{4ok$s#MTndAi`MObE{tG z(p`7M(qsQX-OU!*@8Eq1e7f5y-jrFrhvQ{v{(tJP5nX%R-eLB|G~7!rZro72 z@Jb1E^VeIFxz>M0>ulaR+4D~WEc5ML=63mWvfukEk<3{`eNE}PoYusBWqC31W;e`s z1YS-cn+zTY%q^IxUD&#-s`XjkC!$EtDhDt}0Mg!Al4U6l;6f*kWdK#DbzjMNl#>8E zrQSnT>H=s4Ov718tG|jB$gpzdlOa|XgSLP6-b5hPh$T*rIeQw|6~~6aFq!lG{s9=- z0d}ziTRSoYW*&)c0x*gOY={FpX=n%xVk19$@$-&DY3@y-SetjA#bRAr?`Q@>JTxBS zao=M4t?O*WnImr#Cm?I3YThyRS22kgy#UqVMKz>$k!SOdqV|OozCRclm$f3AsMd6E z*t&(!jaO!AlhcRcGCJPT&0PSCC3jEnDqG|cq-%;39Lw@!9ATU`7VCLzE za?KvWxSOux&s!$7Fhj@P_IVlHgYEC|hB7414;Ydo>D8aOU#|>D``2%Qm6_}@+>WK> z)Th;>xPpa)x{`ygxl9N?|Aq`l!lDfqNq)VG)m3S*X{T2tk8T}4U|qECJ{PxsovK}G zP#he!dem_mabx(iKc`~-x}je81s7^`%uMaSl(}wLY{v`-c7~1=K&C(gja8}& z)z>-zTyVB%gQ*{{@G`PN;Zf3fH0Ym8(OZXe=VhrEIaM)Ai+zKC^B6$Pz;cIFNs7lo z@ySdrvzOm&nmt)?)xwovY=X}^4~lFRmPp4*SY<8u!PVm)Mst!vQ#_c2LXR)>t~?7c z&hOF80;PZ%=+&5=3Z({8#2&Y-G0S}u>_7{_X{3gfzzvQ$UAufh#Gp4aOUel+AHcHiD5*2aSc; z7e*!Gpt^h%)m=WOA~|$ZSAp7w_ll(J0Nox(A6`It;j zRq^B%xNnwTd2Bp61gF~2<)ggFab!fHs}TgO+2FKzwRXm{d?!IdUe$^{S=CLFH4!gZXL3NIIXUB)fXpk7aU{c!N26EzRg z4c5mRWudiXs4Df5gdkbC{y`_RW2BXxY2;nV%->LG8hH<9U$CdL;-vjz z?bGiaUP;8jB+q}=rT?6YIeRQFeOWGjSx#~Uj4vRZstt9zIl zc2pp=Di+mH3N&?ZN3IbzlM86V<)BMmUW~u*%X6K-?*eZ3vwi^mG-xG(72e=dbm@SK zM0u(B>d#V74)rM~7@Nk7i7>3cf(rbRZ;KkP~SZN zqF@P)S$qg$upSoNsE%zjtJ{cS$KuVh`i{?;1>^PLEPK2Qw#zzx9^$X=NlSv0gQ=^E z>&RvkNp?6_%P=q35XfNa*q+0$Xk&}0Soh61u>j4*kNj2q$v*h*NTYCpzm#)l)ZG8a z7=e6pPqePpCagYTVX|V`%8}&6GIsy5#9Ts54a&tB2&XzHBfDO%0jQb;W~X9`{9jMd zv28&Er7oys*1KK70uAWit)z8@>PY4cY?Yu&IgcW%5v%0PAuBXHfg1NV4|A>2pe-v< zII_Tt_@it&D$d?xAmWOY974(#YhQ zvDRl9J7Zi%&M=)Sr@l~=^vXlHTT+T0N)skMT~TE2ds*Bqu)vS}9`3!{;9hS9p zi~DT7yN^NAoefyU@hpnsr&8g`QU43z9bO+Nw7kh3S?6!5+qg$1Ug^FmyE}8eA~-p_u?#)^t-yo^t-G9 zd-rCQxIWzu3!PQ+D53Ghtdi+^YFx^@5;8>Ky`qF3aOs)q0iz8QHGaigI8J-*o)fVc zhuk~T7W3}HR#&(R&LnX_$$nQ8$6@NF@#JJw^@q`VRy|PI6q+cFziMc7{*X??>d_La zdWAP6R*^h5b{xKp$lxXAyXB*qD=4}md2+F4V~&n59TEeO3J)pPllb0>_l_-9{I(Sd zdIg59{+F0X!O3C+QNL=z9qA3#16Q^DQ^%@S=9+U~OmL01GM=ExXH@g+L2$TM%7bb@ za+<0}O>8^Hk|CXh?QLfW+hb!YG7d`7hIgg@65O{Q=uO{?5CEZ2S9139R;7`7wBarw z`*1y1RWXTsq~S#;KpC46TI_%OG+I5wcO`~RrprKaWNCcBqG-dR(Aev_9jK_g>mme} zmd8Xdo<=vX@aNMVV^r`fib;^zwhmUPVQSZ%^_o~1H?#6b>wF|YV%7FEh4ez~2dj+t z`CjC1%g{*RB!1%8cK3#)nqd&ZQhf9iP0 zjs7ic-3G%wsl(FgzN)}qYI{{FH^rWr6xS*S@sj4&#K%@aOjW9f)H+nG6hz!0GK~J> zvd!~92(FUu@1I&M<*LE-DZH2fncBJ^sMOAiv*v?>nZFLju?=lBO{m&a9idb-oKgn> zX>Zs1u(V)o3pj@OQmdov+qt~OYZu?a!`ZiJ99o___k#nx$SU31Qe#cCTZc5$oE}6` z%*-NDi}M-2Qg2P6&pv?&B_m&664HCP3Yl*M0rTNBg%4hm!1#Mvl>Z{88A(4H7D{T0 z{V05Bejglivca8pf&RQZ$f+qK47m=pDvB zb!%zlM@gVa_unYp}k`6?*%SP`qK?S%vT^wF=L&n_K=8C`mak}xtX_q;}n^)t>Kou9cNuyAQU9ORH zwKf-Hz%liLvM91j@?vU~B^eknGF1mGulZz2c?{o%3|-A?m_3fh4oyW_!5B{%JYz|N zG0jh8yby50;_ z`%f}z^*KIrD(j5Jv=n5?XX{aVlL1vI6Um{Nen1j68>rOTrcLS2a7)QIsEaf;j2!U( zc!0(s39pYofIbbLRhHA;jshojyH!FA=Q`mq;OYNytcJWgj3^M8V*l&{fEWfH6RJEl z&hx+Ah6oUWrzD?=7y|ZTSPvT5ivgGs)j!99opL}ZH(D_Ec>o6PILIC_GR)+s>G(7kZhM!dp>TVH^M%P{_0 z!Mb^tQoSnd%plC0^9hB@2EC2v(pr5H1!Xt9!j6t*J;_VmVbGnTyCaSCIHgu?AKc1B1CzMJDmgi5GU7w6Ra7T!i*1c{C3;Z95 z#TKBa<@|-OI_Mo!k@ar8XA5^#H~#c-*^QVQ%Fguk0=jcsPn2l{^V!Wxeul*d>}WJu zvYX}oo&Vx2A7q)0=$;ml%n|uh4KUSzP1b5Ma>Ic~8ilN?`wOcPD&q)YU}8zyrL{8R zMcvdfO1e8jp87U4lx(kGqKyxO676k_aoFyfseC(6D8U+(@`z8(8Aw(yf~o9glmi ziIaJG+?!iW@hYRgzX--aiNE#>l|l8HKMcw+i_-tbb)FZu1KT42D>q4d$$^~}ZkxvW zUo#el1oAcqHoAAHP~-hOvLc#DkK45LMK^qd-d>5V7 zN{s)gxR8w8aX|<>B$@kvh28EV7|fik3ae|MPLz>9+mnjd3M%%i59|P1kx!1bC?U}+L>2MC-wkH^T}3ljZTP#oziW&CXEdtp zL(!VBODt>lJJ^+Y(Pux+k6yRXMjx=Wx8K8+{`{a&>DCnPqNAqV-fn4&KeP+TTnTV$ zJ>!PNa%Lb0PvBOBz9%tlbVzJ8NS?74oiJi;K`H@+-*L6gKU6TGkvfEctiDe>I9Qni z1q(FT(`hLZ9&VSd-h!Q_MR|+7*{cZHceYGLT!5KSDGdgKYtmAyn^I=4P+CGi@JxHc z>lI$@Yy$Ue{da3C5|~bpA8=fp=nQ}miu7X zmz3iemP4P3m*tvkL}r=k%@o5p+uoksBe{l8E^L@-y($)QaRBkMgHX}VwsMU;87YIt z*62Ccu?Mq!)et2 z^6$78oAkCoP_yzHzE9B%jU4$<<19y{qV+!+JliZ{79#|)PIz&=vkfrCu!*b=xzXmG7m=j7u+Q@WacSe4` zNqK&dElg(W;~8Os&6obsmTKzhuqDA}1DdhD;g(tC{Fm)12^XI+)- zr*raH(6eBx_wE`usLOkIX&+iX=iI+y?V@?Z7HmbUTUdr&vS)n3Yk_FQ*S6^TjOGm; ziH*)*e$mTXmD8N+`p1_!Fznr4%ag~HQRH4Us`=W)(d(7uu?pB*b3t62PP+n+0_-uP zLy=zme_gp6VSw}dBcYa-hbJI76lV@nu5FcbHOVo zwe)#e-)HhIfM(LIFp~TT-&TsM<5|lS&sTV~h$=5j-KNffy~Jz$Q{@-L>fW=hw5`T^ z@LyJJR?qL_fKO-#{Fs2}UP)epEg*17qZuSxiO>muNM52CTqnErQ56FyOgvqpoDHU6|$r3ty2 zhglNY8w<|k2L>jOf;DVxYMM4x=g_j`>$!|LCf<#&{oIz0B?n#?U-^|5g!Nj_VIk*F zID<7Dh+f|w!|T>{nedFlCJiRDd4b>~{<0xKBGiyQ^EyI4^7Nfc*Sb=6>o4V^mDw9cO}e&$eAQr(8432!hD&ia{k=TA6w z$t|6&vYa3P|s47yp-Aq2}iH>s%#L=B|$<4~D(Uh_@=e#iY+l zfi!(qmVW7PFRn=99rFOkOjjD-a9L@-0K=oy8N4QYvIyQ`0!^Y(&NwQ*$Ug=AQs=0} z<c=-yLVv_S zTOYu;5(Wh}JPa;(PMyx2_)?~(tlBM&bUN;wJZKOf=j9#-j z$eA$nc{H#t{j!%(oNj{jx<7mbHh1zS)R-)6tQ^f)5mScMcX@v44V)l8CycoXp9=vJt>9NA)P@Ya_OK8^ZYkCNf7AgE(;b{$Oa$-<~t_2RR>(;xcYELg`jyF z8L+pJO>v zolLRYa!oxsT)!OBC%ez$p~Wnbohj2KWntZKt*SHYX&dFTiM)EKd?V3@he4Xpe*~Ym ziV9xjWS38c<-^(chiQCUU5eSVtu=N3NQnyVqCZwle2~xA)Gl73PcC>!KVr|L-kNIU zN-?rL{-$OLmg+sP<(IT8F@ry(JjSN4)Oe{>u{_Y=8?!HstGEvWwzWJm+dt$3C)SlT zLiY9~3lHwCN(Q4Uf6NHxPj5i}XZwY@kTwd}EbcIYELYos_l#P!G+i9uk8o8go=Uog zb?jH6X1b@4xcDpSYtWrHArxg(Lnox8_8lFHG9PN+bW}rlCeSwV?3j+a;Hpq6o1okD zWl+}VQ$kTT3--B1`CaGIq(lCbw(~9Q z`>cCO40Fa8+`EdXWQtYuc>}U>Ab78V9OT~He-=52dy?E><(DKF##;HdO^!tvf`t&?r^de)4Qjw;k5vAg8`ihw-RZ}AC zE6`VDcg=<9M86NNAd>#JUx?H;4YB}J#b5M2KeqvrI#hj3GBPqxl2(z9=FoTf?4~Q3XP>}6iOT-B@`?+W>F~W7}=@c2l#;t$(tD`@C zftH`6uVXnHHJDpnn4Vij$C795Th~oOd8vI@Wf*-%-kDxlC0PLO#_~LKc(V{yTrLC z60`NKadG9$+D|MWGeT;8-ZNEk)kuzPP29A~kj}5!4);wH@A!@2ae0yMwSjt5)6^@u z-cir>)7HRg*5yvdkFHcJr=sjfw5DGT2M@GB*#wG79U)#S(o~!^jiOu#9bHI~H(cD7 z+wsqh+n2$>R7DQA+w`{+PlNrCGdmp{S^Sb?zlwF(nmQ8RMS80=-iTmTT&5ON&?p6! z`kzT*Aum{?OuqU*LV%Vzx%SmWotGVw6|k?k3OcEF$_W!EC=dm8#yGr9|c{24-OaD~e zOk!Tibjv+5YjB_sPVOZhrdROK)TkRbnWat-_fu?*e?Pu*y?kX{3nGBR5lXL#pbGAzvqkmnCD5gVX&RQbD`Bpc;5};i*#h(Tt{fCko{Tf!3irBy zeXttEz|{yj+oig$PMu5v*M18j=HC{a_@SyuCr4w%hxf+Ue11z$jp9jb@iW7=gZfrU{V@;0H5)eaWCN0 zQ5v2`8}247B$5c<|EWqzJXvyw6%fdG?P7^L9p=diGzQHV40tz3zBnM{eXn0*U-1ieps0nG8>iIf({e1YJ{x&@c%Ak+o;fxkb&N0xz=#F1(KFJ zIS{f@YT)JVh3s`^awW^7BxJ;Ag=|G?lQXzxYznE^_{rkem^iq0b6}TO4mtCvuJLDuP-UCG5%Z$Y|3M(sDPei%YAp`h4w%_ne$RVH{6B=i02usq^6L z5mt5^CSGspSiwXNLT2O~Q{mMKzQU!h@UB;~;}VO8VrL(#-fHX(|$RLG!FW zseTLET@gttlE)WmZEWX?#92iq*IKuzoD2LlaVOP|@LEWSwEzJE}WLZ>wIq6X^ruwD0bjP6RJ8N)Xw2hjPj%xfY6t$O9jZH^QZIz8~uHr$gzj-VeI; zZzVR9zBl$E5;GRrk*^9yoUu`dd|;X+Bl({XGqel*qu($TW-E(-s^vJ-hUeZL>tYml`{s) zs!1wYx->GR-{`!ey=i&de#KcqXU^ki0m{suU>e%$6~Ur2u=1};V&2>Q=sVG*zFh4vaaQulrNTJfnH!yidz8yTJ$;)mGSTASVr^XIm zoEBNYnQeIzq`R&_upln$U7BjnL?m{aY_7hVJ@Bx0;hh<75SWE%0Km{JGHnMDKJxV> zHIVeUkMQ>upu&@p(+xzzGGZ{ovWomm81p70cZ97h)34XN$)D#NVA`o!rnPAw*Q@E~ zoHyk~{&oIbs^^|(j?d?~!p z4QnLNKNLWJ&(#(?et1aMSWe3N`nOEhB0{?ofoy~C{jNP@ifIi3I!%kz(rZ$*KC!d8 ziQ|CzpE4;yWQn-fzhmtJvQN&w`p92~C+2AB#-NEWbe_+;;97ks7;LXOP|X(XU)o9D zslVz|sS}pki!>6@+LVY)AQtV%5;Zba0IgSxbvJax8<*6 zd5l%e9Z#Vu)`RlQ{-mR`L*w%Tn(72;EJZPW@lvc8|In>r9VZ*K`sH=J9hQ|nspvNR zWae1%S1x{nDnHb3+3pumzi7jU%9qkH*fb^}X>ikMCJN#vXa<~JX|IRCFdzc z?sacR3L{G&xIr=-9dL{U`|mdI&7w`aBkuhB%3y#kDx^>+pp{Ow9QV)syp%3J&(aAp zmpbR3bpqa8Gsm&SV*Uy8hI1`acwMX98~(d^tc-HX-k+&2jNxdgu}S;*j|5;b1N-z- z13SMW1ZKW&rKi%x!P3BI9Ne<9ia{}!w&kon^g zq11-+?g28ThRoZa8Q7n<4uKiY8x;XI4(I(GF1H>V0yCVI9;hAx&JhRKtsTw}1LyzM z;nd~aP%h?_Ki(NelcpocM>3vmBfoZ@d9Ha(~e9MUuN+h%WW`9k6WL(7N@p zX@@O{K`XEDAOJa>d)c(TAQ9&yN48C;Ozl8Q&S|D!im4+g!dNI?#KMnv6U$nb@Lb@3 zc_j#K<~;MMw542po=;B~{n%aj{1y{F8~LT=V};L=h7V;Gpz{HC*mSSAblie?dVo!9 z6K$lRS2H^6_9o}5%%HZcd>F+_69v%2AAqgpKr$?Jr#!anTPb*Q3TEIo8^3usr$qw21_IT!46EXOeZbndq%$hH!^1}MG0Nc^XWV;ArF5h z5$S+4EYq}P_=AL}T$O2wXoK%#a3ELzgHUC1rc>t~qccX+K_r@OSuczmF<@cM?ku07 zGmEc@K6bsj1+LXuQeOXy&b~`4Sc~uTON;OC_l~KNx8Dzu6XP?_e{!``Bc_1;3-pzY zlx-IRv#~{z2w@bck^P65Kh55FF`+P&&8e9RKe}QlUI;-T1a+LghtT=FP4DX#coCgKSI3@q@j|}WD z1tDY%=k0TFjyqfy3=4r7&Pop!MFG`g4(@<&2X=Gm_WHMEl>`>cf%Mh56{q_LNiONdXD~%s zJ(;ELfd?Gif^}_cPzjuWm~aA`l_F}bsBn(M4A}$TO2hf|LqfsFaa9gi!%c*;T^XItIF0)k| zSfv^V8zY|(+INBuC5l=t<%thp@;v=EZ21v zX{`!L*m$?D%hYM|z*KoROU{_488u*a&CAxC$6J>s*2EJVG`pb!h&&&vKPJH7RyGcp z=R*UBm_w*j%~sws0;p@vuRfodf$HPT|LQMiCo9UE%Boy8ZfwgPBU2!YE1hy%uJ#+| z(=XnUhD^>}jEcy_r)+t`RhihiGZE32zbShbJ4G(L$BCW)D2p0|jNz=*F?DQZ!rpG& ztJ~C}X3HhDq7|8o2X(sHLN!b+-GqcdZ#DpRjb6nW2d&H_)L+aq#YxYtZnunRTIzRx z-K6ZN<3dtqs~l$ISX23dl=Z<41bX}bTn?QA`H<_+ALHQ858ygGxFfd@<+qjK%7K%J zIOYGD>zXgIl^sELX6ft*nBU1EwO_YTCgzlRZjppBZBDcuPu{7?oA&D=mrU2NkXab+ zciKio#CLEkUc7}uhf9R#D!Tr|Xv3c+w#aCyXLkhGZR`}CajS(v{kn}@?2p{1;z$ZL~({UeLnisH2!wS=MOEV%-XwgIU>o4v4U$tjcMXf2ghYA>9>LZvKq zHiG0I{Up+JZW=lw@vw8|{NvMM$=ULuab%qsVK*;p$%h+5UW8)Of`TH}q+wZD1!r0X zU#{*QBmh{fa|y=$;`mZ2(IEv@O$`H&CDT>8{3X*>F~V9hC2mJ`U&mEyC9ZCuX^^NPiTSg{&*p1iBo7<}6CpQ9|vo{b058 zP5`J%<+n6(et-22oPotUKyt6$*a=Lc^>w_rbWQ`^O)nbE^+_FVc0gU`Z(435zB;_u znauM1hQQ!K*MaLH&LsP1Yk9UMSZ8!r0OtCv*{(a@F1**yIwPg0s_71NjDwr>eJDGq zk>^K&^EU`5p!;V!(C~n|%shW;A#Zo zjY>2s(WtS8YHMhvLIu58v=0~+Tq^ES5I0oBM6seKCIPMwmqpRKwOXxKTdQa-B3dOt z3AnPj;8LWn&uv_A7Z>t>f6hG5y-yNtzu({YpVuq*S?0`{GiT16IdkUBJl`;Y=9|Ul zFB>EUo#uzJsyA)gBJT8J{zlvA+&w$!zsNa(Xx+ZS^`Fr8FJ$I^OMDmGtuKBpUkvFL zxz;aX3vXm;mjwkFf+)BRKaNpttv@}qVH_uixaNBO+gR1D^=m`0GGq8PZa6JHAcoC2 zsr+y1;v*6YZox(ochEhh88LP;~_rJH(YRjAzJP@+_1L+KE z?+#(fBo^Hk4y(tXCuJKMSsr#s$S3Tb;2Yvu*nQP>20%PU_b)7bGMC?Tgn*(qFjGnsFNY4*TJbG?u{Uz0@-m8*PVZCZx(&1 zsmLUw0(t*<W_t!aRZJS^$?Y6^Bc7vC{KU&!vnG<*zyBGzh|ImX#{qC#xTKMC z-cvjJQ&C=R2lwp>d48fNa2+esiLXJ3r=b@+Sqi;z#WO%Cw|wTWs@pKN~1$pz(q?Tb_R)%r63g#N^2oY3Ddy^c~i zW~Ma5wSAt}#SsN_{9;+wJy{4|3xPvnPy0Jhnc{=2Fo9r0Raq(R_fw+XWsiWPZK<#- zgN2-`RC8tV=C?a>!4JF(RWBj-HN*2Gz|&hw)7GdaeY4+2`s&ynOlIhPpY2zG*NnaVW?D}LM5r>G5D<4xVwynE-aKy5IihZ2# ze6dK{Z>fKA-=@ty>$ZO6$M(MT#*c;?zU+x)}67X zJC;#4$jd;yzvCHl*|jA$aHGHMCK&?oMkEvkZ^KMZ3wiujyF6?cvW=fS+~~5oh^dgr z9N^pM&;<&v#t_3!xEY_?RaOf^DdF_|2j}aOS!5S|np%>?=Z(@=xrD27?$TjBT)XYierqnC8w!hp z@x)xyrPF@mCMa?%BJW>U}MciqDJK1LtsdTF?QIodEqcPdpQ^*<~HtD+OEM(^`WJi+-lqLOn zA`O8s6y=41lbaYrevCZOL`W$QEOsFa6)IR_tHUW7I@qb**s4WeFU^Z09^8tb)Pz^2 zqq=AS;cv22o4Uy3fleMPL;|jDeqto#*E7En7TQ6vCYj+#F9LBCu2G2qHjD#o8=jKr z2Lnh5j=8}}tV_+5jwnZthODmNBe|e>==Q81uB=OPJG+QIBS`4g6kw9xpJ3S-R`-2q zVhUFR1AnvTd<7Rn_D*L_bhanT zlGC1IB>7L{p`B6I5ysQ!+s2NzhGJOGSP?E0S_nnyx&7238DVb!h7Y_X_A7OI{FfBO z{sYL?sId!g{lxs<(!R+S?T``|#}^86r>m9+%7ge&Sa=!UK(E7g2_KLNMxE z7Zs86XyH7L*m!@#7U6i$3Tke=FLUGlV;87^+<0H_KPcjuPS&4eL;t{z*tpNwT*ofl z1&IZ{v?5$z=^xym<@bZxhe-pt^Q(%_F^s?s>~NnuU_ikT0ASJ*C(Aq`i&yELI;z3O&?~8reJ^5M@ydi%=kfv3IJ~#1=HidecU5Wb;a{Ul zD0uWU@U*W$Tt{pxc2VqQ9HZ?g?xde#9-P1k_&F*118CO>=<~0?jk$T@e>e#J_bn3n z@th!#5M5q<{&-gm#_NN3FSO$3#M5n#~eBev9FBLt$Y4|zyLPG1TW)+nf+tp1Xnd#uAir>g`@gHb;zk3fvSfSM zscCq+*QA_0KDC{5pD?VUm;K^C>Z}>tJS4Lta>6pkn7`g+_!5>P=!LyX6nBzrmi53; z2Ze)X8bAAKF~iXi4)2hJTCOo972vDK|Mj${xxb6 z^K24dSBE8$i@km-AA9XzvkoY7vr%a7Vs1GqmH~OV+bBd;Qetfdqb$34FR2ZQvQjwR zM9m3IQBdCB)xIQD6=*QCKNGq4HPk8`=Y!`CidF87Ub)I)3ZzT2y8|iqI1EdP%`rw~ zd)s?AtAvdz_O4vwz3NZ!i?Icvc>H9#*eSdU`qd&0^v2H8VDXTY|7xB zSW{pdKAYcw9X5D>C^H1)*0vR%KSK-Dm@Zmbn6Ux{>=$n!Pshr1@j9*%0NojXXz2rm zyqezI2rJzdBYqA)LI)-=qWX7b-6Jo5#J;AqMZR%~Gk!c>#d3=BI zBLR)E9^tM)t?I^z^#lR>iMu6O^mi24m}-r$Hh@wCm^7RnjDG1fL1fGo zr&06+Loh>f($*mBN$u;G);g$a8-5?yz&ioYQG&Y%R1FykD4&u8egZMRqgPfn6QRFTUg32|Dnq_-3wRJ~PPT%Qkb* zcGdhq>>Lr&I2tDZOaO{-RvCX>rKJ+Cwf8V3d${R~2>!AV9_6USZ=^3UW*k|jOpfmi z@t7q1g%gpf`KXUB^0Zpa>Eut%_g^N=CPAnH*CR0rA5m}2x8E*r zkg~}X?qh;M7c1TcTb?U+gcBza%7V;kHN8Ipdyo!sED^!XwxRvYnnw7 zv$rY91%%8szgl;wY~;+Kr9eCZIg*eE4ji7GxA+h&%pK4&g)`|FnbNO(?YP%MMzZ}L z<$<^=5#i#oaBOTx1%x3ua~>ax*Ij!{i1|x`npGRzMZ+a>E z>C%3-9@WX8C#KYTY5E#GwKm}U8ec>jAu~f$EGM@>*%R#8MeIm>tgIFvRHVtDJ5gVT zVm0ssTFr*1C0K=~(>3JKTlMB-CQ5db!@~&7+jY`^o7Hmaamnwqkq*GI) zd9t23r$gar`U@XrJL!-5txlZbSX%T!E^eJHX$J0#-2~wN2x8iYF$mhFvDJBi0R4Jn zEQv0w1iEZnqi(DuGdV?->Y+(ge8&IYF(S=~?=<6A#|ixdnZ)jWV&*-w|AOG{J44HV zWipneeg46dQPQV-#gfbeaK9x5>wZNmjdQKkNxdy^5Px;-WA3j@|4O>?7A{G-phEab z%;*&|@`?8xF9tJyC!0}pu8rtW=NX8GG?sT+k2B52u8?DS@0T9OuRPO73M!KrY`_R& zGHe)ffiDAX?0Szx;0U4jU60M!9(!4CE&X{d*H;QJ+mB{A=pO3(4F3)|;o1)TR~r6E zP0B7sQAav-2{IsURwNT%Zf7M`7;4$<8?eoj`2y{hmP@N%MuM_nZ!PV2XD}mqkp3Uw~ws8gI$h79p5_j#Jt8A zLGkbe>!T0c5z5T8;+SBV%v>KO?HLbdu@%V6qNMjvjO8-la;+r=>0=P5=R;Gxi@dz< z&hsgQ-1zZ*bXp#c8QZ{aIUv&v-)mp;g&eaD4q@=i&^-*PeFw8uD- ztlBqmV4R=mrP?m8tFhYVR#83%$R^8KZlcNZfGB4{ySi62pn_907|sQxXtE4Dm^_;Q zibFDYGLrKyEn6INAI#=l9P(mipYJC&6{rtx_bKMblZ07u)@PWg8iI;KY{r&x-HHsDN8``? z+=xGHw~^KNBWcx4;`IpiU7&7%OT>$a!r*6}@rLgUf?YbjCoYL;tuuAA+ve_yxEr`8 zy9z;EL|YbQmzzkc+|RfR(qoYSUffA(c9Q>#5ASMjVXV#S81D{|Mn<-AZj{{DX&kjP z2ndO_bFRgMT`8&kw>jP1t-R#4C9b~>&QF0MD8HUb@2HkIs&`Da4sp!}X*LdsXkjgu z<~5rw=M8C@M`~oX%{>YL)Eh>f&Z=t0A)6ltKSio@iQhL2;u==*etHgQqdh2vc*iwV z`)QeCCU7quo-3)_py(#I!LlP6>Soh??$q`AyG;O&>WJy6A)pJs!4DR^OKP4E)UiTh zQR3r(iZ$2xL{Aw1a!ssgf-M-e?iP4am{Wte=|SKXvEy7 zCqCx(TC5PG`GpY7(Y&Rj<&qt{(yaVY5rs9pexITH;F%aYqj?%|!G(^d5xaGR$bOZ|}OBaPQSB6~sZnl8M;Fe}GX3QA}Yu;gh z_ZbX*dGA<7Y}g!eOIXJPYCw%yyS|MY=IqGC!DD0m(Rrak<;@{~-aayxWM;)y zmK6M?2L34g?LYBn3gY%X{Bf02KUdW}Q{AXIDANLZ9id{XX%(w%xA9hgE^rUd#8)L{ z@KtL9D7#Z?17$I$nl+5_!i`MHG7riZkoyj1`YJv8rEhvCu%6E9VA6e~} z{sP|l>9>Glb@3=Bn7!LsLs(hIsuj*644^(VV;jlXue$}my}gh^MP~G^lczjpdHKmf z^vxt1ul0`{&i@R)kKjxkLY9kFX>;Y)QRAbwh#V`bMD~0Qnd$vZ28x0~of8jGVpP}g z1P?TR5C7;g7XOYe%YH(;1an5wLg#jFp?rU3V!F|tANvh4o8NOzNhhs5C3{^j7LwL{ z@exgw(l=N6Xaa{V@IM%fd+3nW$!2-U{lxMwk$gBpQw{d?h$ zWAxV<6b-;hB1bB4`qm{gbQtOG=Q<|ovzqmLs0>_HDhYf&M^ujB%}`A!Cc=yC_ClO? z=T0nduDlI=l+gKXiW<%wejb0&$V{rR20w4pm%WminE>W_A_=(hQ(mRlw|>2A@zx*GbNuoh>@uu~3luc}jbP}J>BZ@dBh#zJ9ew!kCf=ntreEaw zlk^%-Mrs4E^mU19zu#|gRG5E)3Jt}-mV%)pvJcTz5jV2;tLNa&99O>Mzme4;FDEni zs#4J|uXl@h$dnH~TC8N37hAYiNp;ej_Nxr;9G|z{ZO$}B;!|oiKDVi2AH1x z&}^B+b5cB#iw7;$`-ZMod?>#JQ#JjDcaaU>yh*jsB%b{&BroB}dq>YgcnZKFX=`{F zktXrR`}twBkckI7)LX@uk5UYb}=&|5?f z{(05Q8>M6lAK@L;m5z@}b8**`Q~-17lLO6w>aJ)eV?;q61<$Y<5KbezF|v9jgncA4 zAO!gXtJ4fO19I=Qh?i`B$`Xp_N~;S{o6P*;-Z0ZIFX9*3Xu6(vMwh%VMaqy#%=t9r zUK^*d`iX&%E9S4F52#8Wp6VI4&`Xv_dFdD5MGlp4GEYI_p@MTmt!LZNufvlnWgXmg znia5bRKOP2JRz4@&=Q+i(Av#0ENY(ep8`+w^yyehAv5;@8$Ermfh)7yV@ep8v-9Z# ze&WaPN^a_Q^%GTgcX6pLWjy=|6~d3IT6{|p!GZ6G`P4do>5-zxg*Ol|)HgWt%P^U# zefY&sreAZd&del_gZs$^rKh~ZV*DC~kCYx`w=mG!rSvyH7QSt5+WDe*s=EJayx4-` z(#S*0LCejg`Nd~LotW3(p3VgoQh*c|7l>@7D3Zo69!ZK{x(6>a$9D`_n`~CBg_9;{U~1D7`=Lxj>I%5g<%~^1!xdoJ+TyTx!KWhm*njibv zvs?xoh^%l2FS4=Knl@8B?qkPOYQ#ZONc%{o?`4>Blc!W8$KFekbQ`IIDRG< z(@xowl_=oVshpmuv%^Fw>OmI|LSBKaE8Tnq}oTm_h_sgE5%C{Rk3LVET-)qbT^6KzCTW z{Ts$oW|9%;f8%Nd2g+Q%M*kMZK1TOG3znI3%AS(DJBB-w`sZG3%Ux#$Ti%l@Nnd2Q zf@OaBr;NA$pnvnb`pp3!ahBdy>s7&!#_Z)bEw^susL7to8^pgL_|+MLld&NQzf`$k zb!}YI?y$}ltwnTU%RAaqxggQ8AunmQ|Fuad51=?h4&rneBrTKp{DZJ_{ph7w?*KN( zyIv>8Wa2DjVyR_8CT?2iMy<1~F4w}f|4K<5Nv#^0uJG-z=hx&ORbP(fGa_M`x3kw~sZW^&7N&p*9aHX}{1r zU3Y??IC+B&XxsaVW@R6i9c zCPWVOKRyPt4y0lO;&a$8^}D`X{W{esKVv<%%Z&9bXs2ts8Ebhx=ZPG}o0i3w*a17P z9>MJQkcAIvbpOIw<5;^bV};e4v~qkbX;;Vz?y;m`%`j-!TJnFIUtS7JXrGurO#+&- zu5mPJ%-=@+)8=nKVg0`y<5&x7Ff%8$!Jlp@g!i`2)?nj~&*FrdWi5ms-X3<;=C!WZ zr3j$dm$9La1g-osZj_$IygrW|MNaFOu?{JV z@;X>k-%J1DTD}6+ErRri712X@u_(0etk+@bcJB_h$rQi%Z>S=2ftgkDliX*I(nOJs z>)fl>!O5%xh^CVET}2CLm%BA<#0p>j{cpRH*@kLimw5fBl9SbDzSBK17q=4K1^W)A ziL?hZ-$Y&HYbR;dPUqpoW-ndJ%l55}@Oh!7SB0HrBqdw$ zKfo7xCf&}B9@@L%UmaPryO2!tANH!6KWQ_H;QY(g)~3pmEq{^hXgp9jyWRXloTi;F zcxkG${)CsC!%+l22OIM1LEn2g6M|&$Vd$5Q?h9O+h zXl5IlXCS@y@hh%AY?_z6{}ZqEgFVmveAs}G#d^he`K5mjXlTBnXaO3yAbB*#`}ozr zi#ln23N8pv$gPmld=-pTJ6cvos*S6a)hHn)d%H~g;)7n5U7T#zuH9~UGo^jsV6vMg zKE%wCBlz&RfH=w1%tWoFFUq)!7}%i5!f0+2o*wphwwr z+O8GM*3MqgS7qtl9YF=^%02!@kHdq`6q;uqtIYM4?IMB9o&zv_Y}-p?ifngrX2bMQ z$GuS*OCt2YAozzR1s@Ei1Fb|ravi8s|G9W?`VLm%L<|?!a*ISU`KyNS__(p0QA+W+pB;Yz5`&;d0qQ?3o+wf+sE+ERsb-Kfa1+9C2s72DRRNBzkG z&GfhUpGYIoqQZ=pn~28Mt^TxodJ;VYv#;nSII_5YP>dUS8C2JAd%{VI(IoLG3_fK$ zO}5&)V#GrA7$FY^UxOLQ`D93WWIF}Ne5~bTC~u#}p~Mb+yEdFRN@x+{3+7Vp)Gem1MqS;v>y2!(Cl(~~USS8&mMzjLN=I}S6+sny; z`n{8bXCD7Q$w4OZ-kYJG+2d(fPvZ6Bqh8;)+^EO2sN1NAu6dvA8t@WtapNc6;aBI` ztrylzVzw^oE)$-?4}RLFxL}d_Zjz(X@)qvf@5^%shJN3++IuqA-_xI@981)Oww6;( z)VHzE%6#K`1DmlV24-tHTZLd|hXe;)XJC(a#K3I*N%`r1(fZSN4sQ2{VsNH^7XcUC zDVl(;_@4Er&#t5$&B_n5 zX#MF_2Y3EoV{k_E7Qh7`IhuBiFLw1+|G4`q>CIp@!K2xlE)tw?A?)*u8EfPEk-mD; zTI;K2s*@wOx70KGB-E09GIYLw1$7{Af3SZuC92 z#^_U!{g81kBqb;t=#~sZ3b&dGg|7!|_(E{|{7&^vPV0l>0Vnp0cmQ;YpSK`7 zt*1!U;5|V`WmHx^>e_iM)~7#lKulc1ve%_LjEm^RH zZpFHi$jvi$gY#+l#lL$|>Jt}K#*8BQxbQ5YXj9dc%(Y>IuKdXkpi$h)%$b($K@F&K zTJ3FFuF|9amN&HO;+LijY%C#6lPYAWEEnBvsVb#%t#H@x{2+R1FUxD+BURROENkwg z=nytvx%u-;Ult!S_TdjNGk*r}yv)L}WT?qB)N)b&zv*q8P4AS6Tfym%Tfv66g4bUd zN=)PAk9hR_zuFMl)61Mv-Q1JSQR!0{B2Qqk%FA49Nj(Ox@zQoHR{1w6R``phsPm3w z%Uz&uyGn2Lr^Tw!)hSPr4U55t+tYh~%{*4}?lFFHdWu#Tbj1E(TY9kNrre$s0YH=T`aAe!q-R^O`Pqa0ZNNnxl%6e4A4MzL>1GbIMmT06tCm7 z4DFn`*fO&!mczbtXMiWv+u1UTK8p{ppT%QY@|o9%ug7LjGA&Vh-D+fkKGEB`tF~}& zFIdy*?MBl8r58F_LPWCiL%AH!b4T(0f+j3HI{AV`%=GI=!v($PcG8gt%r>}D_oe8m zVa+8(!5eeXkI;_!r{2kY{mTfIT{{~GdF+^BCFXSRwBwLoX&YFUH)tw_amsp~i6=7? zgiMO)#Ly;+=;C|UBmy;Nia|aq0Y?kL4IR!taRKZ>m#Z)!OW5<7Y`Pf+F@Db}M{hDv zmr4376w%8a^A2yH9?bj_W1f+!O}3JuIrfbT z*#3KR+((Y=vnnN%xH>|gWi>BGO%8pdfUh-@*g8YV(p6)5$m*=7yhtHWG?Ls`3|{<1 zmdEoW98xAaSYB37qj{>)EKqsIx{lYUb{=1$@|KrFlW%RS*1QgXMXg@1;r6O1<@lwt zG@}9B7M6Yhn0=yaPi|Cr&}$i?5i5hkVNAQ9C%>zI@EJ9Brz+*UNZcbxYay^5>x3N% z{h1N>2PopG?SmIexac5)tT5w|BUWoD4PnyNRm*2Hlba;P1F_C;0^D&N_ zC<^fo!wu!XUgE0fI7Y>XM-{K8;zS{efIVlp=`k9DEc;)kC(3WXDL9eV&2CR8b(N-a zXQ{nv)n2vv${~LY=aB~|+HoB9`<#5|yffd~i=uAhkLu6b{wTKP*61S+(D#pnW8%Oo zKJ{Q9j6nQNi&dB!J*}&cW=0XNw(BMZhZ(d-RC>|P=;+32#Z39& zohTgbGuZR(D>NrL-Q}qljaJVaD?%w2LSNg<5sFYln{{=kyx?YVe=gE2ro0+dex~@R zJF5`MI*dm@n=?@U4JZGgZWL-h#5wk0Cz2Q1v(~WHW_JvC1zU%)SFV$PZL=KX%y%i5 zTKdsh>^%#6=tVSi`%Sq=b#)8Y%t<^g9&R_4y*;LLe?vOoYcuKW7p&cjG3$5iM9O!q z;DYAD@Ar`3-h!FCB50>p?KkGiqkt;O8|s{&PV!dLUEX*zNvH1-OvXpR*Qvep;X(q> znMjNcK?(iL9r&7TS)o?&HLkSfj;X=6qtNVe`NRfV1yYm9 z2g+RE!K)c|5ZAv*6N8!*+lEv78dnbo?{Hzs7k~@HzGgWUTBG$zbCOD;IpmK;=j&8P zCUI{hUE6gg%DGf?1v}}MWSg!s)x7$?a5!N&%aPpq5OLNI7L&)qr#hJi@hWr*=W2i5 zPm8ta3r6~u6Ohm7#DuxWhWtCLGUQ)&YmGLU#Na1W)qCLT8Fey`NGk7^G|G}9 zfkWQt$nt0-Z#q21NxNUV<@4hU8dh|^$T(En1z|T&mydQJ!so%+IH|#97#zv(LH5U7p-HX zWm0!28=Z4wI)f1u?SVo#Y7bdGcHQJ!*nOY!QME{?@f(JZT^$+$vmen=nwX?# z)&ru$l4^O5=E5g&Zy^sYi`6nk+9|P)cX$(rgQ{3r)jDr2a_%i#&a=THm|J0O(sen{ zxb6mTvrQJQ!ZvAKB|`ateS~lPqm1Rh3;seivsJm#x?BC8mPYxHDzye_gJGVT9+FWv zz<&Ct|D$7XJIJ=0k6LI<+*{8vChp90#KaxAk1??<+59I6@r!5k9!6e9#g{!7qPyAJ zL~Tu%`GsdH+*w-YpXX)2U@w;IgUPm-6)DQ#qE${?QQK(i!{`?n{FrdlJPB4Fg)5f& z6Q$m2O|T_&n0dGbHwOQ9M1>uyCe^Pw!9u9kA0CurL@#<`2;Yj-Yso#wyW2g>hl5Dg z0v>iv=>YEi(!KfB^5Gs_vwdh$ptg)bef=yB%6|lpRnXvUn2k*8F7iA_rFT+k@NRHj z%29pmnotO#H`TK8a#JQ=UgMaSQSbSj=qk7&oArQFX&()LWTJ1?R8}D8RkGZj7{9_o zn^?yn8IQ|lP$;7o9ql&dwqIYznijB4xR!5iJUuSgea_h%WrRIsrc$-)o>S zQ9VUePl;*0neIE68oYldP+14|eZA;Ad;UE8&L7{Hy9FGDYnzsC+4Sa@jbE?Bt(wfd zD|a50jmFyCr;EK(YkF)daN@4?MzZ+;!E0~33Y^V@bN6zPWU}Rq5SQ9%A8*`B_Pd?G#CPdeTeK=d5m1fIvvi`Xw}aoCROck)SiV* zH6L-X-A`%;6E-OqKXHLx>d?30DNh@Wha+29%Sr=J)8a4fgxc`ip#D!i|5D(74jhGS zR4zYJvt$AY$Bd@7Er(zSc| zx#dXEMP9~N^q8LO-iE_d`LM+lH)O4RpykItjt`WuJHoWdSN_8%EXjQw-J;X6qe|?C z2-;(wGL^MmbX+mL#vT7aW{QEG!2@_xL}4v1*HtDQbJpoXT=`y)NW|&k|9lcOZ0YY! zoms}1V{lEa+prhXV56MJNQ|$xI)<-w(1D?4%slfkjhUg^{R^2>LF?`nhI#@j64wSsNsUw3|MUPHh9TWFT~I&Vq# zeBfM;@ycPL@^UcswvZ~T5)zy(u|#}<=1zM5MQK1ucKB`2?5%Pzq*r-j8**j})Ce92 zgU#gvAA>vD3P3YDfot>`WoV89r(g>yt`!pt)&9#KJVxj-}5&u(}5EHStQm!+_zvR7)}%^5;f!x3_b z7l{_B^(pwx;J&O|(#ug&>9Sa^{Z+BYT@vGWTf<^rK%>w<^IPuX#In+jkGVbw~>SnMgbs&U$%yRn#; z={XA_julAv#O7kZ{0<~hYULE=N;fLSZ~T&9oHTZA`ZATA`7^_r_*EO$0Q?Gu-H+L} zH8JA6(8(LeDgg>{11fLRri$dukHv_UX?ua{FwCXZ|ukqwZ^Y)dkQWW!agXy7o~UXb3g7*9LdEZ%bM4k+W6L*$RQfsJi&bF zr?JyGdoSuBCtTg<3z!X(FO=~_Iu6D_D*Gc7D7sj_2{T*SyW%tdK{IHm{v*ZsrIQ}b zwIS_so|i5^6aasYNzIb9UH#I7d8f_xKUe15qPIWC$zIr|dx8oaw1~-vJN=2uS4qlD zIRrgIV{df!l(0Q2sQvTHBpHH{cYVD@=!Ckm!oI*nq}f8j;OscmFa7(XILQ=Oelv+# zFT{wcmAJYS#+h-9W!YU_%l;~a3I6#PXMr+m8{uBY)e9?skVdU4H2**={?)otke5dp zd(kl2>(qjNd6@&Ke_cfWRJASf%eOO1UC(&6{!}kL-#U(CE>0LR+4Hq`pboQFb`K*~ z3iFQx*)xef`^btk`(ILtMT459zka)&%ps|2vL@U~n8QojAJ=du=`IRx4&$S!5n%1J zf}Jp!v;T<1sEd9&N`lc@KVhFQb!`&t`e&yd4&sHh!~RO3RYUC{N%{gw>Y^M%9{S}a zkEpSX1w_7>jzB@(NRE&j`hp))a|lPJ`lV}@sMJuNURW5(Q}H6+XQ#M!yU$=EiJJeM zYrN|0@gy6PmN=3*c_ilv$xj`U(>ftJH;1I3lGS)xo@Bs_I65+d2pLbJ3u?N%6PFR|;3%hpC3FW5%X$jj_O@Xpj!C;9r0@AIafjE%VmLP#*`G}Cq$ zZHwQv^=UtG^OV@KIYJ1XaTB2`i`8TT%4S3mY=DVB` zbSJOn)%t&NEYan?7b4g?TC->=A9ed8uR%N0w-d6D(XkIFa_mzXY>)u>JTxsUS{l4T z<=R*M&*2~ZU&3GYzl1-k3w)*-bpXK!3@=GeyH=B}#`kVOLcH|7m2-5>xNGvb#mQ}& zD{FbB>!k47z|~JY@>lv92IP;)ACoqD>K}uFbb7nW5?v^qg8fXhHRje#CGXZdT-{AR z?})L>Oy&DD$1T=qv{9qc#$dmp5|Q)xzol}qiu|h_!9>8#dR}>52m+f0lg-QQ`HCrC zOGmQ#VSBiElBN7f`8efBLY!>5#*+LZX)bA?tL#~dB-wm1_nh?2!Jl;kwuwa8<*osfH5zXLW#kEPOAlkI` zoEz-^gejgsc@k$~rIJk@4&T$Y>M0C;^dsqH^)egsg}F>m6^17>e6jb%I;ZA&IoMuu zlZtLU-2}(iJ8N63;>p==H8}Cw{L>(0X60=vl26Y}vw0-vS+CZ&ja_r&Eh#=wU3F&V zS%5tv^TW%`Gg0vTe$4T1u>{35ZY!2SUagu{4Mn8xD#2q@Hd~q6rDOF=EFLDLOeE|v zeC_wbJA?aycd}O9yn96DSrQvG(dY*dw3Qs1Ei-ibb85Uy@rSk&$n1fNn0Q$e;3I*7 zriZ0(#I6)Lg1PLv`7Rm7G?lD+ekk{i%hU~)`qu=!l~p?26uT3B)Ymp4`BQ-M=tb%g zUP!*)bs|5qE&s6UXCVXOkC<-D(2GP^7T+5K$2xWovDv?a<(l3KH(imfF#|8G4VFaM zT4_y}m>G)G^HsLw&FR*hXmC?4+^YR|$b}|G!SIVD7jiO1y)*1%?N^ykhV_c8&I;#z zCMHtZkHPt9A4q9FqwC7qAtAUmM%cey9La8$5`t}O51rW^tbxr$$(`sf%iQI+eHjS7 zSUgB)W5Z7jzF!Kc?$GEs;HEDtEFtT+Be2TbNiV_y9LZ0&y!_BEpNg8_G)jc3k~yHE7E&!FV2u|Gbm zP9+;GlX&#!5`J1GcLH0r7oNa2*hx;j5v!mqY$QmoFlUr`D-)l*sH$Mfpnoca(5VUJ z!5Y0xH^H-8Vr5XOX!;0@}+w)j*V zkIESBDp-Im{>mlQz0LiE@cw1)PY>^(!GTi^j*0Y1Wzk~{L-1g4n)>88t=~cKZs;KB zouUz9l17M0eq!aHCluJ%y_3`5-4b0fv$BC&q1tE3DcQKGfU$|sI&iNBXAQCFPq>%p z*YZUMH{+F~0nj1E6_3DD4GG5yjXKr1S2&8=8?b^s2J5_@Lz&psh%tjtnaCnI<{di zBxes=sQ;d9^u?4o5z)B0$_6U5Xh5&^(x-aZZqG^9y((Z^2zk=Xf0+88>^4%#1E%XiQvw3Y9zx<+H99014!}vnq6xsarSJAGSY8 zM&hGteFL38uSDZSOGiE5J2+dkfD>F z9NXS(dk)Mc@D!m*5}yh~W}o(Bbn_%U!R!yBnzp4pD*{FYJAS0T7djGyJ|mqLOwmK& zj+T-7>x|*%$_725B^W0&XRGStUe0ywU*)r^gL zGlM;yeQ4O(ucWg-aW^=_S<%#IIC!#?p$CQ2n9on*M6au8zUd=FIW!cZ_)BNoF`oCr;#s{hs`4Bf_!D z1+rSV`=!;RDNW;CT=cc9XbmqOzfGboMIbH8}VL;-dm<(Dd@`V~lXn8qCCll)Z$9;Pm~S z{bv`(tAiJ%s7@#|Nw5dCV+>+Q1X2Hf48pdd9q1s=?13q<JI@wpyAE~TYuNWt3MKc+5Q5mw)*#0HFKYYTN{pm`t}clFAACJUng^= zb9u>Wmq?;I?MI50k_(8!0b?CslZ_vm47&9^J?~`CiYWFcBPhR4X*&AT5&pq_4`B${ zOY87!y|nvm0&XyNZKn@T@x?E-n2fD3`nKhBNp3}5A66!P(*x~21};Wa`uU@9gHqYx z_jtkJ`(qEsxN3Z_8s`*Zg|X@cj0!bRLkvuX1%-gY(0<;y#RfRg0S@?M4AAz&tivmx zXMJx6wqrMZ4*(Y2;)q)JX$*-S>UQ*z5(Wqv6~vNE3II!Xjm6EYZ$*q&)(>SAQjCQfUVqkfv9PMJKhlzx3i`2X&S)2e8T~9l z){J)AvqHmLb^D)?3)w`7?kGf;VK#X3IBT!-?}@R=nqiC>PlG`+J)oy+hS@V>U^Y$s zVF-p`0rpz0!`2PV@`H`K12*VX1M7WT44VbAS$@Er0-NQq_38%pHzfd8W!TPiV8N|j zu~~k=Tqj<9iWU0Y2Ord!#@S&rN{TS# z|Ef>e|MzDpVK}hIJjH8L%OtdMW_yv=>f$}1JSy*z^Y?RBz1q>7sO{8WG~rma$c z{1&zHo%&=NCJ6FM)5_V8ykb!#>V9XdxGl8^GmqoL$1yzmi6?l%?=yXfJ)I$XijU(r zy=1@&zkCdL1J>!7zU1s;WuJMfTwIyNr)0BwoOrEGi;2s$&+Yi7lYg)At9+a;Lslg* z|H$C?V+wea^$mZ}!duD9$DR8o7YthU+X+}ZpVyu5`Gf8jPTv2>!VCFW;C=2}(CPJ! zZ+3jx(UG~V0~c6w+MW=?mwoGJb6!~c)nt4w%($gxZ2t$Z?hVTbUp>gH2OJcq&bHs- z0B=zbsGv4Kh-&jAT19eIVV=m}BOSpxgVlo=XXKka**dkvvx`CXP_q+AR^#GU)UZFn z1x*=cS$(%9wG$v_No~W8pV*FHSyFwJ(@(smK^t=+ip6`L=SP^ep<+u{aUX_}C7W%4 z@Qdde{7Q~R%$;f7$Sc3JiC-*vD11{@pkl5V8`qJM=hJESp-I8v%q}cG+Ws&^ik;C)I_Js0aQiQDS z)>zWdlyt01lF~)rVrD0PaZ4z$qpopHj5*z4vWYsZ3YKwl1W$qr*;e4eK<` z672F(3tE4)ny1~ zKgNxcU~dPzS2w~Q1QR9ZhSN9PNce1Ak4s+!X$Oe6VzKquM;zd8eysE&0oFRevIuaF z1H5%g4A3gEzbdi2BdnrdjAPiF1;NX|G^N;M6G~BsN5w|hZuZaZ(pO#M&HTje^hdhe ztU4vPC3gN(Z9&8JHxw)^_|ZUwkg0jlYd`0f(U&)|eg}TuzAXbBGof`n)!>woVX2#&N663xqVX$zhx_8hB3zIneL|lWVCtG&vydSh7O_h#sISBN|hH>a2cP8A0C|)X1VVUr~2Uox; z(~asw%6b+o=M1>aTs4rG5u4#@P9GDMQoBIwC~&zkw!4 zQ8Jx28d;=w30L2&VUc(?h*uHV8Bcnxn_x~B-mMmIm;icSACjaGEtJa?_t! zs3=W2_oh%zie`S>(UzFSqyAv{l}d?^D~a-E6JP|RlBC@NnZ2jUD*Nd%n zTe5g?x4rnQy|`R2e!~l9`YTtU8G#88TVc9D1f^g6r@Lxt!6%cqwp!?!m|R7s(=C%a zS7vx&c8H#ID9{RG1dHyl;Jyd8V~ePr>GWKg3J^0`9cEr6&TR~tJ}Elw_{q-&L`bEV zhV6Z+4=JW*=9AKnxW?C!hZ4Auonkmzv+pw5$G>~KY?e2#o1kMgn=jY9NRYE7K>CS4 z8boUdF{~Q|E~uX*XT655TKz`$1uovgf`#K>J_PP(Gdu=A`xIR^T)M2w{D4hKvbV5S zC(3)zk3I%$KHt(YDh~swNHF78d5vE=FTxgj&XiByOr!e!*4pIZ6)H?0>gQ!9SJ+&D zGbrS!Xx_q~+<$m_;|PCL_2C>Ky>)sr~2 zjJYLBsT#N@+_|@y9T<}^ELUA)6X0Lwb}yuvz+d(|*Suxn+C)Xvx@&CTwoI)|`2-c{ zs?{nQvic~Jr|c8M`HLHVui*1`R(AW%5}7jgfpS6fP=PG=JN98=vPFv)Vq97J3+BNU zBZquhw@rF-MZ~u%`(hi@jySezVs2|bvwznUPKZ5SinGDl(x85qICI1c`>@E4z}&fQL>>3)vfa<^Ev6l z`c>>l`5xN07`SGu)qF5JPdOeAQC{B*=X_V{7pV`nKRZJUr9K2TDQMxJdy3%Lh@S5c znGu!iT(H2R-UxW(duEXmEN~lmyo|dBHSAT6MhsjQ#jjB_X$Ks$iB-DiE0e#I^q~t1 zrlZToB?@oVbLf>CSG>rQXI3_V)-PRUPdWr~T>0I0e-djxgZ^f>b&N;;uuFxOPEs4Z zj(J4^CtsGb0?aJ6IqU@4GDs2>X*gg(hw*vgtNSf@>8kZR|HAts%V@l<4LYbs^|JcW zhUu9<#xR*Lq`xqYOB_2_Wm1P42iRwB4A2b5PjE%4$g>P=PY1Twv>4b{R4{lt1asPP zGoA}7P;h??Y#V{y8G=nQY%e*m({74^6$|VN18c5q;K3mO;vjz=w*_fEzCRp7&WIqJ zfDC>t`*cBbrA-`&SYNuO25Zz^t6zHh9Ap$%_jRW3_^NWK?(W34L{^(N%!ohJ&<)q-_LycGGUJzpfrd2_3DZGa9)!sOo85MKS5e7J-B?f4`AFW0K(((Q( z2R3VV49r?`KnUh|f1(3B;l>!4@xF(F#dtr^LB4)|4AKZ(2dgQT$}YA>Dsq5NrDK5B zNcTIy{s`@U16HIR^eeb4kdgXs(2Z(q{I0nso$nx@m>9#WP9GenwmumCMQu$1jBe#m ze8J350p^dR06Xlc^}s*GimT~{WLqKmmQ?YY8SIHct$XN9?%og)yr`5!#VkJgvO;AI zSyA5{40M>i^J3&7TLr;F_z~QpEP!UmLQ0TuupgZpgSD#66znCWwl_$uK4vn&sCej= zROB8BDuOfzoD!LoH*Q8?_u(#=aqi^1^evSQdOdFbI!mpSvRSy;?x$8xsu|ay@DQ!H zoK-WtP6yU9 zGX*Ppxy3#c?wSzHsi`X**v->pU?z!shG4F%9OuA3oD%~xm*QspWfDO*@1`6`9jggl zQShdcGKt>t$tK!`?}u3)ox%!X!8eS(fIWLj47GvX5u$D&k3p_+kh@QfL86N2{~=_q zAKdLA({bf%wK@_=*-|@bLhzsyu`L>6_)JX<2%)wY)JzBU^_5+rdRnQGH+7IJa>Us& zFq7BUU|rC5uw#=+rr%ITihMw)vSehO^XJ$imhaB+;mb+~`X|c9uKQ8AH$v|*Ku z7>-`G-9p)<%;vTw)^~f_eXH) z^PD2_AGq5%{*Y@_Km2MAA#A~<;nr4f#w%&E{Do>C*F-ZSt2;jMT_Cu?yahV!N0pE2|`eEOZPW-|3 z%AT{azB1^Ul?~+f#+4psj~H2g`D=EIjTKyTkhNLKj2OF2W$dWNgaJ+$9ELZD^7sEu z3~X!A1|N%yfVqBM>A;drF)-_cPZ?Nj*!;?k>(9njl_?i%zqnMba*(f|5yNSn>=JMW zr$c`xT&G}8TJf)YU*EVhHs7u`V#isTIv7ZCi;Bnw{3A653>N+S*;Yyix6Hgo`KII!!FJ7Fz7o>v_!+lQfRSj_dOuuYV80mHCr`$}7$P>?z z5iM5+gLbl}`rTVJ)k-=>j)k4u>vGzwOmlNwQu?9f3hO2H;EQI-!yx|hYg|K;Ivm)< zc|1q0cpCSSQ}1N%bquuTa3xHM%G9@>7!Y%T?g8fD#h(~?9dAP3IrP~ac}xXig+D`P zuRli?FX!tj2*;nV2c}|gavE13Ma9n3w{T0A5(n}({0}-{7tdL;`93A7 z#Wg#Iy^R(`WKEb}tB>a1s2BDPzPf)o&M?OCad)hTcIT|I?EYLM_D0c{UO!-MHjqg>V*cG2%p(|5PcV$DxBaP5DaPcSJpNTph zK`MG8#bv;f)&Fk%szHRe%n}ZQJ24i<&!nto+W zpV;{Gp!$?HqMh^_@@l*0hqPW)g{L#h{we^pgU8+pPo9LoK3JE`2-dyQX6Z%8Q?8aqk1A0aI&w*3)LFqtl+V2V>DZMjfaCNEm zl_qzY>Mr$mp|rnuq^vYETz7%O;Me;a{2dz*4&t+7eM@3OXDCsJj{-R477Ilm>He_@ z$8Ux7&&^B!de84=I;sL46+dD)F8Z8(^V7@;oVfe3=Rfq3T0gxi-`sq;vu?FqzJ`KI ziUKX!itY-?E)eS2`$(ia>8s>4+ep_%XVqYS#roiYwdwV%+Xt-2@pN+I<_1t-@~Sy! z70QUVsA%pvBGaqnkmQ2JNBGUHqI5*2?_i!+9+B?#RL9~W8z;X8#P-lXBKbh0lUG$> z9`xe@i8PzK@_uw>;!urQGF48{M5zcDp4oBxvOQIr12+;xcH%2O!DMraUaa)0W-W4a zhVM$rA_Hi@6|jYMRS9EMoZj#v_9l3O#e?iCarGYS|BT1UY0oJ`r}0tcvH#VyRZS&+ zv^myOMYal0QFtXI7ID64#TkT91(#9)naYrlVf4p$0U2@ zKdH4gi%CY1k9^Qkcy=C}X4V;_>{K0ZTndiT2zIQ)cfqrPLGa(3{(r&uT>~s18k?$b zJUDrG!z6R=D<+7GSG?mV_UG0w-o_ta(6cznZ%6Bp6<0jliS+olB~}pr6%E#gH#Yos zDW*&RM^H^?O#4`VfikdhaZ$kXqRcwMfPkiT9*5e%;|EYDVW7 z?aK)UxkOgFroTlJVm3koHlngu@Da}d6jAA9%OgBUG$#?(gGS;wGJhtX{V;II_elFPk_&>gy;AW&+7!IU~75PhnKPBTH$35F7#SA*lvpH?0)@M zOkkiNPVQs=dEtg$&PY3+A})lVFOhwBtwFc8?>^v_);D^ze$~Spx5g{{n5g%{sYgP{ z-~nx|@Ahcz;Qi}fAu9xRj8Hu{($gTAXQM)BLZCCC!5X#YNTK7rT0S=#?W_< zXQM~5`AEzBC5v#%2&{i;l~?$ZFo>E_nWey!vo&n2f@kbtQ!^c8vtT{1Fr z>1Hd8f|}kfv5L$z?$>A<+LMt~E>pDbP#7K^euL^9+4`@ZN+}8YZRJdjN$PZC)p(BW z>|JT^i;=a?G_%)1Pi9?j$R`(V?PV^4MbA!tBfAd#wm;NZ^HAkNt^+&T`(O^O@S2vh z*Oz#J*Dv3`#^0jGA60dDre;WwkwaEaem(me%c;d~e=^;uPGiE*K3>mXGm5uiBX8ux zBD;GX%b6i@xE?(&ek40D&Cxy!BY zQspj%y)DB|?&%Y|FuWf1cnbPLR#|*-*&YTs{CNhqTi{e&qju6a7a#ZC!&#B1Ng3hA z)O;(Vuiao%&oUlzh1rg|B+u$zMtdQt-|3Cnq!w?jfSx^zy2~eGOzwe{5s!o ze?PxIxcYneb>|kwuPat}2~XtauSqJFZh^S{DX*5&t5Bhc8z zJC7$O7)lV8qTsHt715+@p$qKWapE4ypa7c22qqK7B!q^beOd7FDnz=WQ~Akht<)c`r10$0f2ChHcB5`ai?_lHdz;zbgsiC_sXnF5agM3z~Z#LN~ z{jARRV)n$cBSscPxZ*E`%>A?o?3W%W@-zLP)K2xjtnjlcyxkg=kyu7Xdeh&yPz>NU zEi6%BM-dj;MPt3zH+#_`b}aG}4V39+_S=zt7h5ot?btq-VI7VE8jSbh1_-jh4lU@x zur8%Oae_)P&SKsNLxHoem<5x2Srb0W2%lY^6ZtOuli#T`|H2)o#rIE|P*B*a4=SVC zOHV$%Qw3?*SE+q9VTyg)#q7SUf~>H%HC+%~H~qUf{L)1tHL;G1pSb2C$KgLZ4*!*x zlx-YFk87`M6Di`cU%Y!KVpg5ji5PMFjHiv;7pnlj_)Hb>pSkU2dhO^B+FCSx9&)?I zaZ%jXZXG%dVi05|1msL&q0(O{O{fSSHkxw zX!rg`z4sG~^gdJkC>NWM%JA3*uQ8@+%fBTSe)(?%qHVZO=(#P?#Ip!psGkrX$4|1k z+29jr3cl&fA0}JIx)-Oo7tCLO>0TV3d$F@#EaV68A9vaipV(KaMvT23J~9 z#CM*DC|u>f+oGXT(V{K01?D9wp-F?w*COZJsVI!fBBThjSaQr~V#M_W=b^(h2;|Gb;Di~iUee-`pw zo3|(6*?wX<$EQ7Tm&t&mMQ!&shLe?-Jt+p1kP* zFC!I;P?rST^)_!v*{~tiAaD6K6E&Z(mBvj2pV#v_Jd>+Z0%cO=VG>qq8p3*uk7xH<3-9Y*{aX2HR*= zgB<8rYRiqh5jrt+gfo;%f}La8nrG&+0nN^^6`Z%nE6Ok?>srX)!i|tF%mX$S;gRO; zP`W72SX+J>F!ZBj3+H0k!w;3x0apdKw;phXbwVg!7{@nOgt*xJ{a~15fO6a!KKyVf zDL3SB@!<0y4#?5l@o}<*y9vo3GyEle_URVr`jZeu-@Oh&0Ayhhz*Yf#4)b)?%oSAC zLiLGIRfm{vbqV_jflJ_*Ghdaz$7N>+Iv){7UjgkA{OB%g#G+w(s{ct)9u!jZUX{49 zO-JM`(FgBI<#ojNYQNog&#ID5-yKEXe{J_KlKKN5+!W zm4bdzQbo6)Theh+ z(ox-#hDJ&6ogJgl*t?r01*4XuF<(HYY}%LCmvsFv-D2Ztlmkwt8B|M)jSaeH+_f$7 z=(*TkylG3U4(|}D1CNOnX5mV`+P=Yp)@V;pFNv+Uo<*b&pX{dlN=aa7;CeRw!4uBn z(ho)ml@1@Fvy`c%plBJu;Hps8%s0GK$mCA|R4IQ?K>@vd5xq(qSqlSa!=IVDfH_Ih|VfTY?R1wPhG zGYIhPRC=)IKTPkis>Hr6_N}nf8m9_N2LBt>S^N$b^)40^1-}m)!jP63(sbgRy4r#~ zS$6JX?D0{!k#DWvn_z~m#X7-vv{oI}%?#y}!!O$|jxV#eCnl4)DIPOpz2oR*ae?*H zjA(F@?^}V_PmG*gTaZpPjc4YV`1@IIp=aymiOFZu8I~s|=;HZdS7}_Pp0hM4{BpA# zIA48Xm$ggicC+yE#Jw%u>~9TJ*eeK$*4nVY5orb;#I08{^Q5ZCCy1j#QH54%D&*3X9}y|+TW(}tMe~7{|sX17i&Ew;zxTcL_kxn)%s($W1{wH-O!_H zMGrgELdRbfWKX2E-5s&k9m3jvw|=eo_TMI(TU4K>FBA1s?3GF!H~F-S>bHZUUJYNJ zRo{D|nkKug%f3Z@xj-&D`}{NOQ^|+N^n(70^sEmg6ir`pWcsfFG>}U#s!O&I1l19O zopBx}5048qVq}+u8QPz5q}*W_FRCI+=ud~HVoJ#L`yB*psNPaSS6cW;Dtm#6BkhwN z1oB|xVw!kw-o=_&oKmkVdSn-hX5ofi#C(i;<CG@QdTMF&2 z-)A`eel`_Czkdk^>GzGgqTlW6C(b#V8KiV{wZL>vp%(K}B??3jEQ?OLqi>vrGcB`+ zTuuEegMO29t|qx=@ySj5TEhr2cN>%mhqh(*ck%}frWyz4@h)*PY)naoaqj;p~9Rx!W9=4fe_u5_eGVkwvLu+^Xi`{$Ewi!~L68&5^8q%r*^} z8G2<+x^7bu!^5VM5q|m8r%&M2qy07=!Z}-8)ui{?l>HeJBTDZkdrdlAXGlL(*C&^3on%w!50^+FdNTp_&`u05@ctPZSKEf-rY<$BH}*1qB@s9~Mf zz@SmnQo-?5aC<6f8!aV-)f#uHU~Q~||D700sX<;PRH~zj&OXRISkfesP}3?ttA?g7 z;i@K=IiCfd&u?5Nfm$lKh1@uGh~f&;1Y1c2^ft>ViS%F_*bsicCAnUb zJ)R_OS7v=@)z_%Qxf^ZZdxg!g*?L}d(MO6m#Yy;Hg~mD@^ZJ1sRl+W=*y#KIubkFJ z`^Z@I1=Pghd4aare)so&|0BN4$=`!-zyF`{y@eB~8+~j~6vsRH*Mh5=N#gXms5Vr) z{}%HziK7dL&;~NXifff*{RBZt>8>PL)=!Os)|W+A;mZuz85UIqm+1g0Zg}v-FXuJ# z6MaC!yM63KgPTtUW2SiDHwJ^4k=-x;RBu!UFeSnEyN1}C@sy`eL36H@XUa;)tWGQ_ zh=@xpwT!aejjq>r4|4*%Pr8WBgcD5Ps3HuMYQ~~q|9Sz**!(NV?)jIf000xch|1@E z4ra9LO>peXoN$-uI9US+^~DG}ACLG!R*gheM9qId(9aM&9z(D_2(|!0TjIS_2+`p$ z+oJJ2li0|!5hQ*DSJ$y(^$M?7cY1x1USAb_gT?kAzTdM-)#=pUV#8R**UNu^UA6m+ zUOQ=dm1W)5pon$oqRabwL!P>P%gOI#rzseA|7nIeK; zCCrKijSyVU>xW9?1gD924 zc*8vFM1HHQZu^+wUW^mcq2ut^aq0pZQW>BnrVyxKCD)z0g7$XM7e&vciJT6uYlCb}iV!^SlubOy}DxtUU zxz&>W?}xs3_H*b5(6_9Jz7o?q>wCi=oo3q9yF9V1b#P)?)p-riCc2l<2U%L@rP~HO zjO1>AkB3Hyo*{{4e4Hr&D{@`V}9wi4~oDvaMid6RNRi^?9qC_N>!! z9xvOglyQi>XlHBpgti54$k69)@O>A;k{3mDSfX%CT1$Dd&NuKz7J+#SFLOVNHIXTM z^u8D+M~GJI2AeFtb04&Nz8|fmlmqBB&e013O~+UvkNk;P`cno+M-GfaKYG2~pI%9u zo~#V%Rlh@e5kcOw+CO6LmuwNOqd+f4$g=x*sseZ(oqN_JyqrL!ArqoPGz)__?O89} z-8@>MmTC_zj*3C43(0HIPoBH+t<_QROUidy8K*7PjJ8Kxjfl3{X!$PeB2$+7%|P;A zFv!Sz9TDs7-9_XbNZ%DA%7E`tMDp0kQi-4)D33E{#bmLrr=*|sO{uI>l6$HW>FfHU zNH(QX(l>&!xw4wxN|3IjB&P*QDy*!6$tuO`M&>=tpXx}~~Bs^U{M6m1?!}A_@*?KqV#`3uf`Np&6z^ehc z0&G`3R)9d~u7nmmhC*n)9+mDqgx_t1UOQg{gU**6Q!`P&Jj=-_8S__M=0H_ z!1t8_UvPtpukNYo(pVyHaKA9R&zua(*VWA7x9aF#<)V8{j`d9C6>-oznTn*Q)2ie# z8JAPR(GHijqH%oB;i^Yjr$N%`W-%r7Pxsfy?r)Cn{Y&td9=39cWtY(X!&WZ3S2_0g z*fY(U)n22WQJ>rMyyMejyz?fdhqb2CPp8r^wWK#7Jtvd!x?$cq=cN3-?5L0y|CG8( z{*C_zh)Lq{Ol@t<4QvFYd|K@lz~k?Uhf^Mc8nUHrYQte;~Y1`OVCy2}|%B z5Sz*4Tx13FKf0)+hpM5Ngj&&rSv4k&eI@%N-k&!yT{=|?h?qxFi$yi6*^>UCWx*?# zO>W_f9DU6skTx%W^VrFmx#RnqH}thMJeBC40Y@e#mX&^s9@jLp2eJFBJeiys)=W}o z=}CTSH)j2>H#cmUF|?)OPZwX8Ju0lw!OukZ!ThrBTQcWaD5?kq+C3l2zcKHy=7tXv z-9xExJk)A$ZuncG`vcs-$(iZjC~02)cRHJXczH|u)oe5Ju2_nfA_(x7(8!$ImsL*P zd5!7u6GKdS-;!P}-m6H8@@>rK#wl{E&Z>;*g*2Gw2X>=aLTF z@Is>dM1Fe2n!M$&m0}`3U*4iZhw~H|=YEUCXA13aK#sq>nL;fplxpZpbpOUWeakAm zhX+Bc<0pbF)`~i>@PxQmyv~*xdkXS4!EuGYL6m)fLitDCx9|(09W$|+&jmSViUc8k zuyO7QM)JETCkjqQ=-zE^cs|knUF&SztY(IVll;!lmA4?USI*)oMUFxn#!sCzwlDh( z!)|lB*Ai(I$w51AvKWi=nQT(Uh^Ek%3t%bIQyVmHW!*N+Hpng`^U@Z^Pt#J>A{UZD z9GzuRChuE`%-bwYV#{snmgruI+bc~Km!MDS@wPtG!a7y=&v>Q4(i|yF`{c}CnDv)R z1shQ>7sQ;LsTq+<|GcIH4o>!`?};?tWq}_^fJ=E^qmrJl`q~iDPU+ldLDGB}%eQzYz_*jL}D(#ihoI|`EDj^02d<2|* zD0jJ-)t-G7>Z-b#JUZ3@lyu`5me*O!l*Y+LA z8+zIxW?CCNhpe)5dGx)onWw2c(M4U&A+}x1)5|g1G$q6DhlYRtN{t6Z#0)2`5$fQa zFi=7DlHl-LlqbmR92-v-g~VyD4&4c6eDf|~G+L}8fOK65(v+cq^c)}!LG#<{Jb&2G z#IlYmKC9Idv|S+cWV6JyT*pqF&Ck%30CybV>|A{@l#9ai?5Wk9vyMvCB1p}t zVhrMOqDGFto;sp7iKs4ED1fU(ICEgD^|(t-@whf<*z6dTrSYc-Dp%E+r2`H94`Ig++*-jF#sytd&=Ql`wp56+JBj%_3+Wi(Nc zvRVKD0;CK9{QphLp0wlA;zXM&6p)xLQZ;pn#FRk#Vu|?yX~3bxjQ^377*)zM28mI{ zyu{dvb>WCFA*i&M1&OH&3!B7<+tS@Gfk5Hf@Ff%-hQx%X$w^E&&6C6!0H#)XiD_LV zKE_e(A}ns|e$^ha^Vg$6gVP4;g+^wvU1S!rfwC4Dp9+ z+G+koziC%Ay~makf(t7pWEeyq^ioRE;xBueB(|0d+5>DnTNFZzA}QxJ-CFLCI>JhI zRBL*{kmU?ji$APh*_`*Y@R&*?yLpSI1IDqKX5+9Uef|;uK3?lu9^br3EO1}ZUJ@>E zbZ~^_A_KayXHb(rd>tj_h%VU3Sl65$)QE#pUv-|Hq_-KAI7#p5U%1vPakUrxOe7_K z2R5`*{XMjoz(vmoh^n4Q%*gVWsorS3QU=);KlH* zfmrl*Mfldr15mlzFos|q>LV7I3+W&I{o_R4R>C4w)1ER08gER6gAcQD>+#6j2coxVE75vEr#79l6oS0zG*a+W=a1`q&p zEYILh0&wdj6DJb@`<6*T06Y_bRs;aQFD3v#rY{8G0;^dN08Bz&09v!#Y(;J$A3q<0 zyL~?H8@}B>AK(A-$Dx`>aXuaUM?c<_=OaSfkBD1KA3yQ26^r`hohyx&`|^Lk@x=a-!u{yh9;}X35wIi zccU!>-+G~zelo`l_Y{vwM55cXU^(9xQTy+q5;U!N+ zy~&Fe{PrzwfB2(GhwPoZ@M^UM;M9bIr_SxcgIK*aTlyeHxfI2WL0!9Nl`gYY0z z;M6AQ!1H!sX^~H{iJKa;6&$^te)tG37Ld%C0bTxFqj1D6~@^towqKl2%bObPLp@Gj(@`Z>L3X^Ky4>_(o9nm&iHx#z-Bq zE+kSvf)>*~%MpPb+1+rA(3_{t=nH%RX|GAWLB>dOykQMV5cqO?eZD85hbWhLksM^-x8ZvXL=mSqo$82E z%*$2w=6@i{jn=`#H8%@q>P8Qk5T3?XU9)eQGjW$W+U7CmAzgdQj>vMiz4;%=!k!j_WzzV1Y5XPt z_*ji6N28y{-$MlxfQ{Us@dqE(U*kvZNaM4+7@7lh{MD0-bzFTo9bXf^EtZR4hi{72 z=sJ7zKage`E{$LDg(E*k$LsCo>B&&XlX)E$oVsLmi*k@Uc2xW3SJzk93?>5NGSN`xwlTj(=d8AwA*5Kkf~@6y}UD zv;5DBXwywM8fKRgr%q{=NZ|L=@oNfA{?9tzpGdBkn2y&=hfK#m4H($}ded>qhIG6h zn55%LU9-as((UQ^-$|j7r&lcEkJ+35K~{dESTe5NuG(xec4M}YlPwd=jw5ogWzbB{ zoIS2ztnX>ybEE5j4zwzAUoB|6tde4^e|}NkOFV#gZq_|1#%QZ$5k*c;=;nRqJy*Qg ze_Ut9BPZBZ%kKRy#ryI47K&wa@3>a}U$BuP;*J-gG`I+*YoTC}yHh^7Vi!@=6j_v) zH3zSV&)jf+(RkMBSyo!z)KJTy-$yVju}teuAI%%eYW>B}XZOUMYD))#zEC72f|!DLIsx3)lp5b%Ey7C&$kpk>N_ zIXFy(%#?M!-V|Eg@BhWRzvfZ9EOeLo?sBQS%y5_K?sBfXoaruKa+g+jX?B+h?sAm7 zjB}U6++`<+?*8@*pvK-FLzi{clAz`V1Epm#%i>#rJW7~5hbX4|0EF`Q#`VwN6KiqS zOKX__l{0UEG*F)Xg0M4C_~|=|n8Rv)ftN-0Tvxiq~dw>CIko&6xBLI3{#GrvK-Bw+0_&YyBMxIKO+uKYhqM)w=jM1ywG zpq&m&!!L|zu_~=m#y0*+--Szu5oif~6V=PLz5i5R1$!8B;EP5k-3l7Vg+?La)yZ0c zwmNAe1jmw*q_o0&;P}SmjCq&uTc)qOY<@}Sl5KdFmpgmsZ+u@Jb2JpO?fS_0a&8eP zm;TLIJAC&~Gp%Qqf7Q+W9=nlugJ!VhrtDsO-aD(pLICHfaQaj@K=v*9M5N|*l2Vl^ zd+8s_sU8o}=kh^Xj=L*cuP46V`aB|xm>I@fZNpP=V(=%O6GPpKUs&DK234xnR#MTm z&wKd@w{WA`?e~zMJb4}!CQ!~3U+VeliMFpg;%it#g^!>xqxa!lq<|r0nX*G~5hb9X05cOg=vgz7pJLN@ z_8=x4rZN5X<#c!h~zYp~;y7X%=aV2SP(wA20izj{Y1Ugh$ z7YV_>CfhN=e$oW{*@1%nBnP$Z#MZSh=Ol*XMvya_89&0myfT$(8lkv$Pqj%d;wb+k z>19Yg=ce8$KC{{hW75~cP0!y96KtSS$T#_cOu>&yvGw?goXQ9RYLx`qJfYnlvcXzo zG2FD24cGRA2e`Ji%HGLlR2CJHtSKg7i3QiumG&^S^G#Sjb`mm#g`<*S6P~Z==^;(6 zCQT3q@z6LODnln{Dgp^+KsuBAz5U8Ppi6apwcaGJ?n)tTSk{4`>OSI6r&l4f1f;AV8(asPKW8k-!9?}R)(_VeE zIGpxK7@f>})&i5wep|97<0Tc@!?RB;xLdYA-Inw##!#f$Z>>^)T8cKD&av06RenW< zdtKR_(MmOOU)9z@5G*5tGe?b*DY&;k{O^aVr;Cyb=ss?8&R4~KPq`F&y(;#)JACa| z++$B$t;=Qn2_0pj}*yED$u?eo(Eqk18 z#9IEyuXyoO;)ZtlC0n!YGSFmXhO zmIt{f_#EcV>N#lR2wM@YWX{Pp{Ouu?uX#!n%};7Qr&C zYK|<1==Ww;J@hHPNC^uF{py&!JYgoa&)xPzM9X+r_j@gwtIFDDc8XP-a+>sfEiC39 zpIY=g$ZOj+ZP!!5I!vc3Nr%{0fXu@PzJ6^uwX z6CNpW!p;x>zD9@cH`+A5FmC7%;I)%)UalR`B=vyPG%x))+2tu5}xrIw$8wxIH4-{41X*6@Sl0nAYUy5Q|I|-FsPHd@jPS6*ymhM5#N4ib&Q2G zk}8yble7Kn?Gm_Zb&LJRL6hiF{{%DDM|9#hT#8Ze>%?`b_nYe*o?v%T8Y^goJ{gtTz@)`tii=ZYO9o1Iv&mS3EBZT8wP z`#DcREy)KeD_PsqKBuEt%S%#-QWL7fYdEw{uv)7pxXA~g!Ejt|NmwgpzKumcP_r@G zOAm`h&5s`MFVr8v8y z#>@++o6f9=j{DAj6q(I@1K;0H15Z=Rub4{%C@GbbHdbYq7gaueJC%P(DUJR{ld7IU ze%WW$5NznO!MwqrP@g`&-Y*+z08UQo>v?*8guR}f^vedjH&wiWJBbBBKHc7yT0vnJ^($Y+=`pn_fw0Jh6&2{H9>=zt3S5j(QDhi&!!!QV~~*?y#3 zJD@`U9&X8(6*NEk*s`p*LmMR;AM|}qO&J!=n!*FzBV%7=(Xv})v{9%IXF2eq>?Us^ zf=A|JvRfz>O%1mBMK* zFF|TLV5Zoel48_MWxmSs5QqJ$T5IX7Iv#3zhOuNYPNh$;Y$4rlZ+}#V_br)Ild|m_ zQIO{JiAjIdY@X@~F);LuPEDIewey&aIV?@D!lSGS_w+`ddg+rf<{R~m4!(bxxfnyfVkWxx?*6hK+HiUT2B9#n%e`UL5B~f) zeBxKBgfYjU%SBj0|9;uSt|CzzhOtL21a1|6t_t^yozs|n4gVg+AZa-neH8V|b2mDl zL2X~6qThB^@w^PEcXP1WgLI)L>kY?9r`Ls3-jR!3? z^wAMTUC9c-UX@*(FDp&lSX@>EE*2wSp@|A9941GzpYEW7^w);zu$vD|3#Mq7$vI3R z1dq{40~ z#0p;am69Fm$6%))t?_sy(Z3!f%`2CN;J6UGK5m$!cAM{&f>`_Lb<7+Vaa;rWzb`4s zCWjsGL~*PWM#SP+68>+R9P2wU?L>=kB!H@zC%au{= zTN{~csu^ZWg7qv3ssdA)-kDa_SRa%V+t45r#UWGT&dGJ&=tn#mPkGIdtt6=CJh0rF zg4u7aW7>TwBS9+d=usXV%_DU|0|n$jD$8e8`}|R#0CZ*_m4Lqs;8$i3w{avg|9zj{ zL2dFeId3N;p9H_k+J~$>?8`2-K|%d%tomKlf(6m@)Cq^IcGjCVpf&TMR^6)t_YN~m^J$+BIeT2aPz7((;Q zukuPAH=th7xvOiYGPjQ>YKrK#VDZ~m7!$x4C#1LY*r*eH1$FW`5(O=XMvW^Q)ATrG z8~v69cN`uyeXF=!#{{n4CUDhx_FB35VL2X$0NCTNhmVtP`(?g`;Khp};=_=?plt)z z`w~~a=IEJ}zSV1fUN2m{JUxG>_o3<`jL`G3atAG#mim>V`FzT-+4ibd$VE_;kS)vT zoTPFo?QP*c2$SP3{RCk zmaRdJ_xdJS7$5 zP~mF*Sm;Xq;LT$Tr4W~r;M0@}M)3Vnx;o_OSR3YaZTLS6J#D)Xw2pv`hE_j&F>Anj zcyRbH!xd_@5b2v9t%onAje+aonWmcc?!3Z>h%~S{{~kcnd4;#@nhCFDYCNFdKEqSy zdKxXXQU);22A%sGs9^)X%~YpZefB*Uz3s{p=U^gChXle#iU-aHbUX^KSqM zUQi?3!KZnetWGlcwCm)yk77_7(UuB)h?cZY+FU1_--s16WUf&sm+q*O4s|juScg{x zh?f?1a&p)Sz<|j+f3#xP7IpF|b)tNt?P3C37ui18;B42=qaVhgG-Tw0s;(1Cx?1SE zI;5zp-%~QUQ|)YrXz80n=2QinR~oFpF6!zs>nch*sdoMRJ{Ntz3;PL@$D_?a5n9_c*cBa0Bc$w{{0 zb3jo)v#g&UD`i~`cU>*X#xOV1rPS5uchps@@M#UMa{csfi`6!|?H1xgIqoq;pC zsFT;|J=my5wucWED^=qK2f9wqF6!hC!4A>Dn@&!2oxC2zU@=UtP$%EmQ74#rT!P?t zgsY)gX;CLlVJFqr$*XS6TTs-=D0Nc4gHF;mGSN?M@CDb;M_Xf18pZx9@IeM81DVTQ zKckBJxu0Ue&1z&j6id62kZDNpk6y#)nxcL>!+y{+`q|s{bN_2GaExdz>Zg9Y{Uny9 zZDd8*ZkDiJ;ktTmbF2+RX&39N$4Xgmw>#(L_@drk0E}Rr+9|?{-X1pP3wztk^>$xT zZ$A_&R2NLv+mWufXI_oLWw>3W-lp{HjW5Y&yxN{YiDg|6S$)?|@QdFY8NXW8+hGHH z3;l@;ih3KO-u|g}{LnR-zfyc!5j;c6Shj{k6yzZF^N$i&?hd5*d)N)RiFyCOzdQ3C zlPlj107N7&P(*Y;PP^J--#lf>jCH)s8MQj7>)S?`OvSj-S}fEYGgDD}eWTsiJy zy2JEs_*rg^F<&_`UW1QFhTeGrscMyzdpthJ$f4F- zo|{_Y594&IPQ1gZv%vMe&WglCFAhmu@ii@uE_hF~$X19lCb8f+o`^C}a@b8iL+=n3 z168U+TrE89!V{!caHN;>(Q3}|9FpjMS>-arUmL0kPtz5gMMF_Op>l&UgpM|xzz{0ZVJu*^IrNldgc$ms*D*LOS_+^ zz9IY^@s9LbhkTpCP}+>3^gTP3#!g#aDXzoVrsd_rv@N)jX{-qbJCDRHh~cU8}n-S_uc z;})m6-aMCR9(JVjALhI=u-HXmF_a4vc#9j8Z;D$=n+lx}7OS^n)7>cKzZ7fDtjQ;Z z(Qf@Q`c9qHSCpMc0LcH2xWTWh&sG!-WkT@GbLVRkJ$vgJTODoS{v01N0JVdPdifp5 z1h?}xFV=p=A9ru3wPamlY1djB(WhDUy(_+d&Z#wXk;{@9pY+Ra8FF5UzGDAFu71V5 z%5zE%t@tkY4QuA^7yP1HY_Vsmd9o#wDFT2qi=-dZ| z3MY5BzfEinQblH+$d30k)2B!xk>$sC19s9FiqCk4h@?daQ>zhHX1LT!oC7}`e zrPx*t=m&QrjKPh13r#~UGMTfJz9aF<-l~9bNE$n8Ciu$(hT6sP8NH3wU!ldw4E378 z`);7U@r8j@_>4LqMd#UiR#bu^zow@1qcI^NK+e=;f2nQkd65#GzQ;y$U>+0J$d2z< zB6?cY@2Mm?am78Xh-Q1Wcp3^vdNK4vRG7_sQ=7333(KW-_M21S_^nL|`i<0`ZssL) z#1>ZRMMf2YN%2pKUu7`IPKk;%0E55tU#6Bkh;1y%maAinBRB^48+xf+E%DKC=z_>p z86dOQR4 zy@m1c41V%e4;w0axcA&)!5SO?`X|Q5aU&QJpG-XTYU#y)geYVPDclBus|0EDcbveM zizn3#Z{@=n-qNM(NI71I>EA0eqt6Z>`>9b6|3@E?S03=#UOrdz8PBIE?!``eF>^PL zz|M?1mu|CXN^MAnuU#zZ9)9nxSUQ@^{S7VdDL)V6q$Mh#t$1&ajubcVXZV5Fh=PnP z|0lENWfbM~$A6x*=$g7lMT?H5O}B`2*44?1wxYls$p_U;<<<`X2aSgi=42%X(Dtlz=+o8r{@JH+8y! zFIdl+$#6)JrNq6HR~K34;7=qtOrjQ)9E_b9sKOeXh{Whbb=lJ1*X`3rHSB9 z_34Cz@dYbsv;qKwV(znOE@~RR-hwF<5@9U0fsS&wh3yk(d_Xu7XS_$(jJuj5 z_0)9nD6zW><>-1dzcEw2T#$TOtTo&^Qex!R+Ybd(Zr#;ERHf}L-^J7vXscACN}i}z zn;2j$(oH?pjg86Z#*1!R?Z(`ylUu#aO$LIOe%|wsWS?B3`_3;G!r$qq{cm@+2|4H zovPfR&0hM_^8DlZt2&GhWPp&D%Kug`O)j9Jr2A*R^mo*h9e=toRiguFDF(=L5;j~U ziz}vRlqP&~W+Sba@g$`!Y zwv6&2e7G-JkOgxpNbyD4ppv}dG}Q@h^B}493f*|zfCPaV6tYV_GvmBR*ZC_YyDJJ3 z85~xw*YxT#Qeg7+l+Zsh{ARmz_qXToOKWuNWeUC-`7~rK(Cp2;aFde#OqjwVz*5UM zpc370s3K~{r6l+c>m94O51wXEQ4FT7%(jAmzi&QnsLOdio&lrSG zzXWrYJ%~SfA}nHM!-(+Yd;N%TS{X!ma~s~3Ezn9o(9v!WS8MFrY=^a7uqGWcEl$W- zNkIApNcYzLW*!_l+Fb@ln&J2BC&&ZoFAn{up=$&UyU|wK893J~j2<{xX z`CCgWOG+-@m(M6Hr=W(y+Yz$h(nS#I$GYp_&YH?S*S)novEXKk6`C3peNc>Pz?|Su zepuG;vTo(ptf73m7q5c*`&Bnn3Jw*!@bNvAjahFr;YIjlrZQ!}el+|v36$fZro2Zz z?+#<6v;{>VtK7lhmK)8}d*j)QMvUUaN9{3XV*xBY^8@Od^c*&rngWEt}c%~&*!M>?*62d2nR;!)httD3MnkNTN1rDKDu*a|L?NNV?y+w#ig0(-}ey=CH zUZ)oI`t<$rUN3dM?pxIBy%Y;>a*aIt+`wK>b-iZF7C#!p>Qe%!-d+V?JrxIn4C;Ok zM1O}tsDrstkeVgIS9;6?)WhH+bR;YgEFiZcX#FmKPSl^{_!D|C!3m3;WA40(0s3My zkbd9uqs98}EkvSZDzIu`GvJHXlYF9T=6MF@EA+iuD*qZ;3QcnL0lX0LT-%{OHC zHwB0)2D7h}#00%3!yp3caR&9H->e$g1p%~9jIAjL6?jq-=yXKE5zd9?&`xfZbKv^b zPh8n8I`#7rgNN=gIsWV4ViIMoHr|K4z46OX0D4U&zHu+lp5__U`fhxFeu&^msKy8+ zGik00xRkfS7hI$N_ff1!gNh7u@E!5r!*}WJMva@|cEIR2NWI;4XFvKKCit%B8T9+@ zA+gRaVeJV~_gUTs_q#@K|6;5N0o9UV`j3r%-E%x25;mpP~dB@fYIz9n#6tMTV5Xxf;Ga2gwHUYV-Zq0X zwAlrFf7oSCK&r59_SMY(^`r6_M<+0%-o_p{1 zTA)5XO^5fuU#;${)E)G#OFzOQPoKB^{bRl5IX*pq+MfK_#!AAr!86ADQ?9GxBO(@a zcyiM&D`d~B(jymx0TMZ|>(7N~i4YW~YMX5s*(n}7A%|LT5S!Kb2x#l+qf<&7)YVqV&r5CYp4*3se7#-|gvd+~Slv@+LaRP>l`A#&Z4WP#|Vc3tw zF)R!m6Vxh#aeOGYSH9}JFJfhqd<#n9x34V6V(hhN;-Qyzp7D8B?IZz+!|M`lV5XQ73uP&U2nOI(QocDXL;1^roB#eD916 z_qm7EZ~y-CAQ!hLzA=Af?tCZ`Y=KCeDQ$W*WguWw)XQ6h52ex$QitUL{y_rq4}xh> z0cG~Z4?jn?ACvz9pyD}IcW-S^bPM(Ly5(8)b1N%-Lsc;|>cfAY%caxb%l}+@O?pGf zpTsRhWbURyZb(ylz2DhgPIR)nT#v6v^SCkn_AVbarXOiauX(F6ac^BRaowt9&wHI4 z{fbv;kSRqiCwXQnp5n(tA|a;`?4G!8Ipe_JFqgG90yzJaxx~!Rn3bUXZImCoF<*G* z&Q_TXm6@{B1SmWR9^3RmU+y7IKJL#QHlQ*6G>W;l2mGX!cTP%LE5=D1&u{v^$!7FKw?^a`>V}s>GI`tIYdj zNKNuxySZQH+ex#($g%h2#D+0^0InPqoc^Yp(U}%_PHxbLR^26~8Ep~@rwg7PS#r5L zNIyw%bMreyk#aqN(Y-91DwbV;a}%$T-Qem)LX)@W7T$h6|5o!^^yFT5B<9p5fHLDat>s~tF4eF(an0v=sl5Ypn&)pR;Xbiw zUlmV3trY6#!*S%8RA$&`o0o4L+?*LXmhHZCUy3(cs8j-k4 z+ran|^3DuGLntwyt`ps7s^!cPKfb*k?`z~|z3%rXCc2y5!?kztaM{Q+Q|VQlQret; zwwX}Lq8yEhhl%d5n`)Guy}I4;QJniDZ?$o)UY-gopN;$6-j!Iej=pTG5m-$#3Of$| z;2&`g5=;L}7L8onc?pMI94qB#I;_=a@jbH__FM60o*+IWhng=Gln!YB=cLD z?2!mrL4upp8^&&I-u!l!SVf;Vf5qka!Z3Abn7Y-NdWG1YIU>ExnEDCF)NiPvBE*$ri8C!k# zOpJx+0bz@|y9)SRd^4@YaLFyEzf|JxN7SFbppm%y**r2j5k5lZ^de+5Ge~8If9uxv zk_qU@o{pTmxTm**A|ECgc}6o{Ui#@~8JFhG@1#(c^vYCvJ$R+kFJ~VSi?)N7Qm1J9 zh5P%p{R{WBIchuivsC80CDrUJYk2nJ?+-xiO1kyZ?_@vJnk--cLZ}e(_p|@7HQF!> zlgMKijdFh1+*yntpZ~iCi7?X!0i=S@)q*@Ka4Eo^sCGUo;%AfXS&Om z+@;lBn%!lBU9hG57TP%`-%gEd=Np{kl6`=AMdYL4NPW^{=Ehg=n6rK24MKgZOA%p^ zSlu+(ybC@ZHwZ_obna6WCYl!&9{Y|8M}@dC=O`>aV(wpT=~aqVj+xoX+Yso3C@fjd z{RTbUhT&-p5}>^W+$l|Srxy)Dfqmaf4~DCLV(de8U6fc4@W-G}yx0grqwZJrvW z0-3TSE;t9uhb~g7uptdp6H;tuWw3L({5RYwr5^QY0>IZt+s|WKxDCSr zbJ+T~c*TBd5i6J5=y9&yZD4%Sp~(UjECPBoE4Vh`esibTE0zOGf&-&hH@_W={OqPz zJ4dg+5zouFrNlQfCYX=Tu*+`8B3`30XOVafobPUbZzBWanfOopG;05APYT3`3vvCbN?iGv(CjzAqG4~7 zV8@re=E)EGbee0fQCe5OkVjKwQKiGudtj?#{%ANAs|5aKr8fxG;6S_erf3q=D(~o$ zBwFw*I(h*HSVyb=-a zR>kIA1MpSG8TfjVx1{7PDP&q*w{3}~Bsgw^`x}k>eC-*R1C3l%XFxbbuB-O zL2#s@Fpl%|H-;!ka_e&w(YgH83AqqjZ3{Ii-v$Nk*8|RoY%(LV(K}$hLsYvYxyAVr z%|dd`zQ?IJ=chg&((GE8BjC-FRI6?)!^vPrBnts78XOTRiR^hRf=_oCk*1A?NH06V z7(kx~ojlZuK5mK%o9d%3FX!`H*!&YcpMwOfi;*>Uis-?HQ&SDWHKS2@G6%x(JlUT! zpJ4HHcLAn3UIr##ox%$G+tZ^+D_=tD3tHNPhjd5c%&J zwWFzL@Wl%av13kBOaukL%?7G zKXv??KYXj1i^Kxu1sq+{#Zb__8@K64#y*!T?OU-SI9d#y{qDjkHJ~)VR-#5)4o4r~ zyB=JX6?+yqy#Ch^hq0V#CA~UCdR0n#Q>a&BX{KU@6(cq5PKfUKjMq%BnljHJ8FkPa zc?}EIGS+1p9PU`*rvrX7zx_dC>0{22Z4elyMN0-bDc-EmCkF8y&)<)aN`z{4lWA1? zDR1=qdgx^QtsL9VHKBvs=uBx1xRnPFn2TfcJU#YZ!wBG<+#OQ(6j~)KZTgZ1g`F*d z%#4P-|4hYB8msl@uqPs|>E1FT(LKt5mFrRQ^6RpRrwu9xcmA+!Go3j*z_jvmm0qfT z1{#Vuts$j#EWsK}g@)3}sj|tMSlGl!{d11xyCT0v{oP9j)&@xs`v0{|u%=bCRh2n||;Hb)vXz&`v7P3S+rj_FSdDa3QZ?xSDNd!rxY10);? z{(fS?&8n6ezpuwU`wAUo>mTt;&91mEvG6Droze{ezpH14S5{mn?t-;9c7%Dx^IJNa=Hi)Ns1 z-5W8xKbcs%O8#x4dvzp^{=-8|A?EiroCSBA`>|UZ zXSBdN+thbtjgTo1&JHymqa(thJ`64t%l!<8=T|cjU2}aN>)_5G^{_6H>ths%yFUL1 z3;l{W{$jB$avUlqwM+C1?#K}=JUXfWRv9bp?%OR*QeIBLlp>vDpA!sKRQ6};YoUsL z`!PpNqI_FM%xHBpgNi1-M*7Q5_|Oc@1GR&P_drp|)VA8#wKw2J_WPR9nl8zFoNww7 z(LK2Fd`Yy(l!U?PFM;h~5^khNs{ltMSACBquPd%`kCOJNhc<&Jcof{Jq8#xS*BJ9s zzp5qRU4tX7{ou2%n@rjJ@vSIUu-*#N#@2n4P$^WVy`>hTTpOP|5Vd$)Y7y6m%EXmT zP9Ko8>6i<~lXfw34hJxBeyG1k=Hi_>)o=MfM-BQ*_bP6OcvIi==6^)X$;4Iqtc^Dn z=iI^?wxp%iEaDn%Dxf^6E^a)ZY#gQDTw19~Ca0(nCTWqLU8~jd=7x>>eu~BchUUqQ zJ*731{c%~HM>K*j2+bPaOn=P8W(;fck3I$2pTq*$yi~(Gv-fXqcyGoC>d!bMm42&v z&_{2zB<>wo(@3y%62a2@`JN_UIPRTsT*^O3M>bBE2s7CWhNK#TME6m2J}I%ZrnEWz zN3Z+Eof|j4(b)aUpvJBb2F+Z_*L1VC*}NrFbIjy)O*VJ0RIQy+Y8q#Ho}&{zI%}$9 z#zTt&O4sMh)TEdC(e_WtRNEP%f_x!lqgLutDZ^S9?C%@vSDzeX+b1AI@Qdr5tkfAd zsaor#^J+cMlr6hIHlvX%63h%M)SGY};)>P%CRPm4N`jNZVoogIy4G5|=H6H_h*A=$ zez1oFZnwz;fm>^3c^Zx0)g@D~M*A}TvlWk)M)8PYBLyxCq%%nlP)w+l9% zlONR&?6+Zx1N${&Pw0(?VBd>$3G6#0Wf9ni4*=Wb5_}iax;HiSUWrEb6BIWAq6se( zme9x&38EAk8MY%NHT`7B#QIKQ%=ju{EI%f7+3%xHJL1-ko{LK%7o(VY@bni%{LpLD zs3_MkvO?H;n+0?1PH+uQ6z1iL_||zl`eAP}@C~%7y`oKU903#xmM@7}jxtgFAK@U^ zZpHR@#n#7typbxlDl9ff#RPJjvv0rF^Gw;S$7Aj8stVr=D>(bM+6|etzls$@5=(+_ zQY<*#VKF+sEm?XVRN5kxx*JHLrKdUZtP~hf#O8)fcr}JO18_!COlm~|aTHEt`|{KU z2I}1SZncDZd0j};$3WaRI%3qu^L%XhelV=iDq;jVA|8<7FTaf8X2N`JSd9KDw$c@Q zvZ&Yv6bruSfcr%e2`X6W#ajP@v^P3=@!v_LA@mng0{$@7u2SuS^#yYa)+Hf+6PTax zDnEE%3_@f6TcOkA5V_VtcwBs}B3Xz0!LXP^!!7*TCB ze>yBSP$GIA>I)x>5z?gnwy=Ve_GehH0nQ`uj1@C!@1j_6fy3gcxL0TtI`EPmQE1J{ zPTH%)Ph>pwN09qS+E1Zp;xWNxPNsGeiO-aH!Dq?5^$=7egL zX|&g>%m5E)>}a78e35E4+nY&8Z+K<~Vntr~pl6s#x3aic-p-)Dw(}5bO|x3lG_DV* zK)$+WP2RK>{dZ^$@VD2Z0L(wDcp~HtZjVcHT-M#!R(2daRBR=vsm%Ko$OvA zqRr-WQ;*Fk^O#!@!+b|4ia(!w!3O6%QwQ)9uUGs;U8XBAq(AT~>4jf%R}lYwSUz@R zP7LvI_1bj2HhFxb`Q1jRov(?{+Qyif$UCI{nTOqkl~#C>Tdjw>#jGkCL*BWm2D0lm zJQ6ND%Y~LeUdrXC>jCRO_E{b4v+Vy|pVmUP`ZUWRe7bcyT6l7}Cx_QhB3SDUDi;?o z_eLZ7;h0$&G_<+(=c?>9IdV9WZIGZua^qSHmK}uL{Kf*f1$t)K@gUTWYGhuzzq~Mx zfD(Dr_^G;P!mCCm{r0^MTOxZ}PN))pm>Vb)^H=7Sreu}vEJ4m3#N+HT5ZKZ|)in8B zx4iDiSSeIHM7VO{FwM)jlnVE4<4t1hTVm{6!87E{dj2=~uV!(--7H0W+xaHsVzoc| zX?eruo=5&x`UP(^>sy=_o>+?KP4CL*{<$F#A|n1~3Wph#2g{hLOOECUtd8i5I^4J0 zy@9F-;1gdIL_2C__i!cGh*i|b)cD(sS8bN9T0?-L)v#_hsuAw~YS=I%p&y2rnK=q_ zaEFjUl$q4T-i6PBcAA%lDdy>NV8#69E)madYMNu|3a#~O$C@3o&^Q$Ca3Wa^+1bwS zYH^Fr*WrXlH?Pavr->lA@l91`TP+i}{>VEE~QxP2Z3c z)k7iUFb}Xp@MF|PoRE>Z5dO+Af?Oqb8yVu|Kz)wss+S3=NzKY&dA^brAUZ~=~5uCssDk-{SVnU7*_Gv@qq*7k^Xyyhm3Z&3wmDeL$Ir-zQd`%K^Bp_LY|vxKxsc z4*F1~;Ws+q+n8Al?{Wa!Do6t>tbs(&F+jMgOU-fV)g^3&77D%J!ls<4a-kPN z=z2Ld2A${?GY=VAY+|}emQy~iiOP5r;=!A_Sf61k=!O?Pz6Z4aECNIu5?7^dc5iuF z5y2z_4y0ZX@7EuU>9AKW?X1-z-j1LSCDkpU)D^Ga-RtDyTO)-;s6z8sN~5qUCfc`C zn+#*}(|{%O?RL@@G*T_h19bVfKh!3m%YRRHTklM~CD-?=F0o=zcD8u}k&OfYPp{#i zW!zQ+TM2NY0l(U1pnI)Z8xf-qvD<`pNzEpE)2V3soTLmKG1_FirQ@aWk@XF9ff{s> zk%K|%cbwXAz1V!Y2xn1BptwOf_L;H`cgIYc2o@cbupm9p)gMvR&62R#G%NN+SL}tK#9A|;Ghs0& zTc38t9=tVH%%<4qS+O3s^;P{2*Mm&ih$6Vh^CCE8reF*On}Aepb_!#af8)c@Nyots zwUO(__58H2zHGxXhG+Qrrwp_F(bssC{XoxguGE&yxJKdfpy4U`mOV9HR8NJyWIsXC zVE;~o>YJw~DH@J&2T&^bg%I=05`R3)UIc$pf_kRxU&~{NGRBk`J%eeknUkJ~y|u{7 z{$IB#Fcr^;^>CmnmPW7M&Bbcj^gnAWE&jsAltX!Hf;l7u(fhbZVihuOv7%EasH&UBV}{cHIpz0AN^2Fh&6E;}AY!Y^<+Qdi(ga zkf3K)#$MUh()-*izY&YmQ}Y(3qoH|=?h8Y6YqJcZ+-O&fQ55&Pr$)uNpVRESKvPFE zqXP7w#^>U=;nZ4-Bh`z(a>0iRuB)j6ex=xYEqr}WUnxko`0ZFR)@oY( zX;?8lJIV)l;yr=-sQB4$X2r&ebTG+L=t;sS6x%f(moh6hG%V&c^)6TJr`N{_X`Fmn z6sEOyWB3ABEET7>6?@n*;`2okb4ys?S+Pm3{!4MTnn9Qw7IRkY6Ry~8Ma8}l7V`|6 z%>+ikZCDXBhdXFa{cQ{zvtq-;`bn$5%+)`wsGEPP|2zp7yJGtm6!c)Bq91ysUP>4R5F>DjMmW%k7b$ge2m}=7aB$VqBj02R9&od?I96WXJ14vM|9%+OETs~|<1 zWp*FV;;`9He7702U3?P0ZEbSlFAIv`r^+^!2jBgh#zdLn z)j&q8tCKPpY+#IL1CR5Ija7aIZmQO_+s7gzOJVtZ!x zp0s)L25-ab-u!JPw0QB!#Ism&^1gZz+KIbpdY#ucLy(drB>QNVyHs`6g2_#$rQ09EpbNKBtQHo zP_X~Xz?3Qw^HUMxu@%P}tcn6Jc*$Ybs`u3Z+@t0JIEh0x^XDPBBjy<)ste$L#T6S& zYfbzCm)6`L>26X4-7rCmOtcZ_YhMwJ+5@h&#kdA@D#aWcus>z{O>A^{{j5?7t%u!w z;yh$;Jf6@*;LL(~izTM>-*DFDE;ql)xNCS|8G)|Q_F)xn7vq$bs3ffP=H~Pk_Na9C zR(gFa5cGKmFefS3mv?d}X2zGN8dfJ3?WGR-*lo1MOTWO!3iVL~eg4VQv11GF(jD!a z9c2A_0q0GjVoxNx|E!zz`)njBh3`jVdd45A`Oh3Ly`-i~U?2^1&f&3r(LCi(rpU2M z0=tTRu*5PRPbRL_&ODM6tSNooNiOesjLps%7`uppAwrfQWc#ocGNk3Yv3>G~Z>FQ% zB$pPGX(UM|Rnyj-xnz*#Pbs5jG?=~ZZDtGCN5^^xyroaWOluzWh(c>g$v``Sq*VIx zRC)M`4FhnbQLi{JZ-O|h z02-ip`gr@5XCmZT5s>{VxyKame1IPs{(5y~e!EcD`76a_v1!Ik%MJINMnJM*BQ&pd zHC#Hzz#3!U%X0b$lZW?n;N^Igy-QD6_E$yy(|xbq6?YkQH_0Le!`!9JE(rR`ha>?L zy;AhdeAuC9TEWjIko1#^5>{Y#?7XorZZEd4)-py~jaIZ z4zDRW$`S^^my&p!yG}aOzdv>n6|W@}_a}#59aouWpDyYT`Hccd`7S4_%kK>6Z_0ny zpFBn6A%jH5>M4K+J*(+X5> z{ZIWTuDnw%_uoGNU0Zo-9k$sGs(_j8?F9A|9K`gDCzr7L^3O?mu*f#KxAhX!8B2$g zXr!HQP#GM;HWG2a8dF)zVn8U4YTS*?tCq+LGZe8GZ9Dx(HG|8BA+!zXVxFk|=$W{3 zfdJo*3<3RF>cCSp`0~2hr(S&ZCjMq<(7JB=+JC*2uT1jbj~4UY0E7%Xmig7PqF(uyNBUE0AF^4 zia!7`9W24u)5@K8*0PsOcAfP7c}-^26HCVpng5Zno>#`v0GxUWLO?2K#}*>w!?dgu zjRZHS)wvclBINGY_j20ElqU);$`}dPa;J4IIuF;hKL0sUfXTStU!`p$4^*o-Z6FQS zpJbY`AvyNFv3-DYX@UnSlE1k2Q6v|pV@g~i3;e;PhyIGW4%_!vP|opSMyjeUfN_T+ z;PbAGu7@}U;j}w~1NQguKvCTCG<>#oyN=HicwaUDKg6lDf<)XP_ z)ii}th@3dMQcBTS#gU%g@-4@v4p0Wvp=tTsVjWx%_sS7RXr@bgdDHdF56%>I$+zFL90PRjO1iqSe~h<$~*vGAu9J3G@b@&oKbM9<^39zSZ;8 z#1EF*hi*vG`VBwl5EH8!m4$@P8siLcVvO)*Ivfs$bu|e&$rI!XQF$v zJsh6L{-W)|*K&C9VZDjUd+u^$c^As!w|_a1H!QPmn0cTeXqAv6 zkaErxCo#o?Nzst5q2J7HX595&dR&21fB#J68HnN9ySLae>2;X2En?EBGiMb57L!K( zQ5XPh_9SD-;*x3*Yj{LVdc+;akXh`Q^pY{@5HYFk^Two;?ZTYpsd%EHEgyXGWGitw z`-|*w=zYd`>b%5oGfk|MWpM9;Gd^dy-NH_H`}}1A zH{A`u?`4M{J?HI%fh2!%3Gc$x2N_Eyt{W1WMb;VM<4%!+HMgdvp#e8&{=k>WJ09iYC)IKR^+LZHy^?G(1@%~m+goDtW)7F#GNkNqCbua zjxR=jp@GV;`|2u9Oa?gt^+Rg5$$$ce3hO$=y> zrMq`+JB*!fB4ytiBsug7yzWhd*v4t6DUW@QO>a9XM3W}N?#X#)Czg({YRVkHzOie| zF0&^!KX8Nlw{MD5c}S%kw^T8W4X?tNz7sNYCv%?e<{7=Bj(PG7Gu6ZqKK3U$nV;$0 z-FpDA^sh_j{p`WRAqtf+NLQ(mK}C(&i9S&Fa+NRbS<6Qs26U5NBl)T1T;7AlsQz#J zi)VlNL|yuiwGb0_IsTZo5bq0l!9h~;f~SJ``k8wmN6Ce$nx?{tNv}zv1rklBF4b_0 zv)jJ)5z(S_9t!cx6uKr7{fFp)ulT_$(zdENd8EAOIei2a*Vt%Lsa976FMmdAr}MRH zB~Zi^^(O*2__;8*wh;kvkYg=jmqc)9UX13wh^zxFgs8u~j;8r4HBXL?{V6-}(qxHI z1pLa!07-CZ%IW`y;I(`JJyDQ;^#Q2bYI6hFG!Yzim@Ks#?_OE8BAB9P?Bp;9P(OGQ zSN>Ua=^yXUl+F3dkp@$6?A>lCL5qYm$0{Ti-J}}wy_EEO=%`nIaxP)6_cdV6I73=q z@AVN6d*0jpoSm@L{c^c{ckM$`?nOtXU(xVW+t$c2*G594SryP$qbpLjH1dI!Ee|Rm zaNSqto}%x;b4OW1@}Z+T)aQcdW>rKTmwM^8IkGPGx$6zK+!Mjn57^?j8(hnahTRnK zXMS^!i^q}=t$6HuVaBTH8eKEd_2HUL{O&(X<%rqSp65)ODO#O8%s_1X&m9lW6vf zQ1%4~L-y;@UV0~0-lT>zO9q0t;Zv@Wg*Rai1YwBk{FS1>3LamjiW>e+qS8yXuiZV( z-4+Zbf!BhQ1L$e0(<9x+rqTu@r4>3vK2W3CM+3Biw$(>5tm2y!jb#`PO6Ez=+V^RMRC)$XrJ-p%>>* zC=`A@?WX*lQsmqH=-iT)hBa)F>}^^&ku`J|yKAAXlz(bFpQTS+eU?h2;H@_Nc+9)>bU(uDYDt8~G{!^{ki+`@x>3Sser{V;j|wv%^AIvx5T@9-Lj zW|gD#G}G_qDpohkCf*v9; zRfC8d@LR{SDIS(4*R$b~Sry7i?2vqD<%JT|qFwEFz|3G_Lbr_JvZ^FlTCFk~BY>dV zEDXZi&iCTUD!Su`K$e-26d2Eo9_bU4=~G)heHhbw4JTG%X(jV3R1AL3;X0muNAxWjW^n_L} zW6~2&6Jm}DOB{j)uAfIrzLT1Pd!DUxU&467~`b-fjpSQQ4n@TRCCU3EOpHT4d;SphEWuXa0rOIb5zs9#9nb$s+N4 zjY^#bzLwRk%Gz1ZIO)NHcfGQt^;(OKrY;hDrWFWTcyjSZd7T}wJ!zI+q@`1qat zvSY48iF#+wQvwf;x#3X|n)*BfOTy#~&eOT&|D)|~;G-(8|NjKC5QMlvi3W=rYg$8n zXt3Cligi)Y8{OETR`H=41ua(ei;w^+XmAtAdRaxQty-Zi$Owmi1x|Nfl0yV*?u+u!f^=cT!K=gyotbLN~gXJ*cv(J<8AYZ)rvf{m`8 zfVM48ZS#ZbS}IMa^84Ax7jF+Mj`#vyIPZZH>*MEJsK3u{5wMNi3vrwJYb*AIA&+_Wx3J9%hUFB6f9Ol zE5vhEVnLKocJh26a65mSH-YSi55sSD^7a)sn6?SEx(Rmb3WHiE2fgCo)J7go!`#O~p@o+Hc6*R?o4NV~xLvVpe!kCWeCa)7nKhmPA+MAHb>kXoRUAw`#{x*Yiy%P-v6od0h7_q6`B-Y?u zui1`YG8#A@cl8R-6&&G6UZ+$S;j=W(^k{OTNb2m99fUISZ!GXq{G$9Z{E z=RD_WWyUXAcOwX|Xu2fM8i0tpzs%mV zi@4^bb-jC!=zX<&@7KHo=ej?;AN`wm5bpUge$WXOG8FCw@qCl|m$>5Ec;$lh#27~V z;j^YVISRb;tj#SZRLD}s0hU|3fkw<~MN&M)AJV5Tbyi_*&AMpfWYXh|VvDFDo?KT; z4AO7=m3`}K-j2?{7~!f-uGB7dVq0X+B5Tyt;*f8RGj&@w7udH~5oA-RGU}9QT82ok*QHYV(lz>~7@J}xsW-^KmD#$VdWHMN% zP?TO{5$Hvg)xkgB1H@@OCo zzA5CISEGr2RV|HGHK+JRoJ@7Ig<7_Q2+t{~8ILh6A*0SCm5azM_=Y2eB!IJmYmYT| z{SU5-ffppy{CXrggMPKR!9P64xxqWGU^H2DBB?(PQypYScY|*2_=`uDS;~@%L@w^> zUH_oIo^1eRb5dmx7t9kwn4*axfk@ZKIx?6@; zajg%2fmaMz{NSRVSPTcGN@Ux$`~=Hc(<^5e$SG%TTV1_E?Ja#xMXGxhTdp?!Ue!}} zk?@r3OXxnxCi0CnGBA(^$ASBW;p1=&Ij(|$ZqdYEe6Qswm4bZxvqvG>TcU}7!%6B| z1IW|5GF5c65lka~u!_SDs?vegB;GL*FOA})r(9W>=sInpr0+9`8KKk?ikfx3L9qg6 zG&p!Vfh18&A1$NKudm0NajJ|1bn`|4sm@1EUW&FJ#yc5^{jfHg7_1-6wNLT~Vf3tw zw(eInn%ox#1wevCV6ORrHQ&3X` z;X^SO>%H3ue-S@@X=Q;{Hf3L<+R3`Xo{#h_a%WDFtz@yISoXZ7GT_Mptl~PKh32(Q z-xe!6TZ!}9%7b!~axB*9St_UF@?d#icR6YW%X_UuW#5F&>7-M_L2B+&ja{r^woL{~ zH))z1>}SY>bb{fGma$6FqSh9Wc!+$#19;BBk_T_j;raa`Q*hKcSaJjIVyZfqofq-d z_4{7R@<(M!Mb6IUX=$(EA2=KbKMMhwY;cdY_J}@u zT#*_&HTvjD5ozJcjQ#y&H#S5cJ+;5A$O*ya-?Zlcx+dn@Cx!TB!T;y+G;0xVS7@fu z;UUMHjw5XWX&#AFMUUVbC0!XNO}3;2>1uLHy&$18$J;$3n;@awgH2II6v@;U1iiC&i+TK+L+9`3YLL! z5r(j%plgnkR`y$P4;M|1w% zuaU-cey--3nVl9Cr)Jgkw?&=YJ!-+oYfp5ZHm7>n%%Dt{(x#hCbBNs9OIRoBg%O_k zo;gR=@xdT3HRNWD%06D-de7s8mrRR}bTJ_%6WdCo36_*Gd*gc)6@HAG2F)G(VEp%uV&lyZ(FRX-t+O~Hco+zNp8hDoqi;jo)p#jMWwYhYi4XD8Yvu71s=vB z)%F61gqz^~_cl=|um}2M)~L** zucDx^TflEg`D8VuL1ud!UxeMgdWxB_*o@$&(;BS{wDwP-S)pRfoCvWcQQ`mvM~t-b z)iY%L%lZ}Z? zL2z~mx;+FPY;&XUtP65-!qEjmb(qsyYArM^XA0aXfnE&mbLgCXc1~%OQbF*EMyEHv zrr|EL6_Ig;fNr5dUh{HvzL^*Fxe=1Eu*~JM?5Ox!!-?SWVrDbwptbCer+;O*hc>OL zU5(3*C877!;IDY|(E67z$-#`CK;e}HCpw{*0bR)bk&fUBiDmy>zL;w=VGIYoJb z7t`!+l-wkAQ(9*uOQTW)yi<3+Do|W4W83z|J^aYiS83s{amsEAWTK&@7vuT3yL_q0 ziuZCzV3yQ#hnUJ7vZp;t?BV$=mZ=*~!OWr??h1OA`l~3KrSHrd%eK#ioNPwl2gnxO z?tnxW_Pk5{pauIn*A&zQ4|`j4aOqZCfF2h0F>iLqKy03twNzsbe`##ozv)4 zV?bLlvbAW`b*!3+A$V_=Y98+wJtR8RW^nFU^SL;4Nz)nXMKuTfJ#}(-lY;XH8ZGaA z1+-6dX!pQ(3MHT^HrW)2fei;mG|p&%C9qHdOCgZS*_P0@K}0K-{GhjW=#)w;L@SLt zQ`LYFp{G?d8=mu&Z3O#!O`qluxAO#mvz7fraw=W5zl3 z1&k?^H_x6{r_e{?NMUAxSSVYXBzYXMR@PZYX{equnOho%Z$=Zzlx{C^Rt8#9c% zbN;on%!v=_-6;S8hXz$W)%S+vvH^54HgG17;{-+^BM$>dxXyPFlO%QGuQgCK4TgRu z9U#q66|TyL-odcdvj9?C@-Bvq4=%Y2o>^ZY#3X&jix|Iv9%9ljOfKR1U479L4+_Li!N z@zn${97I64$_LTZS(PCDhBt9M^W@Wiz&gXr1j6Vuy^$>@y-Xwd zcq^;@Wnu>(4YwW&mgI0oIaLNT=#k(cF&gMpS#KV!q{~SPYQJI~f|>zF=dHwF?Yt!z z$;s37fuGynKREq6O6_GANq?xplm4A|v%b;97!LAmnc<;ngQyCFL$&DK451Cnu<%rsO5cQ=G z>;R_mB>-(if;riU46asjR{bdDiW>>j>!c^e^L(};ewKT2VyyQNSK}{-Yj9(c>Fjd% znCl*UxW{QP(!ob`3tp&C5w>D4c^Ev&|6q@#FiwtGk$jF=zx`5IaKN=gQ~6h?AI1rW zQDcb%GA6k#@&2{Rk6(U&z>YDSJDQu;j-^dikcZ%qKuPFg^jrE0m7e3pM5-$n?_l=w zhx)2o+h=okg~o!x$iyN3_#((sop`2y$M(M5GwOu85FBMO(JgLDk6w!YJBRBlAPDgh zt@)R{z_>Ag=i|kzVz`~22an$HFyFex+fOzquO{lc8AY0;s-@5`yLy^7grlvTJf~my z!y|QNac@_eKHK@iLUK^UIa|*!g1j;gFz|T7O=F7v$PoZTb(JGNt=hh&Spz?dQQ4Ss zFe$Pq8ys~zq)=PO<175Ke_x>jXH_9z=aZ|70@u&d?kxkr!xP<}EU@`CT@%(+WJ>sz z*V@qZaxoerRHsEPQ&bgXCLSTD;&M4Zvkl+Y#ueD;3AW(~I`nVhr*Y{DlC3T2dRUxK z1-E9rO3=F8@54<&U1H-@WaBOFOYpaA9FE0VLi=UItxdO!+%$_(a;{OHt7+hmSo%7F z5QAmqF4!_ZY$?GVvyvKI!8%lWP!A5z*5heD@MZeGRQ$)vzy44G>w6dKYnEP{S5nj6z1kO@7mgPb)W&+zyk1ReFwcb6 z6?67=6Cpd!Gyf5nW(_#^-3v#!p+E{hB!1MnjQdFJ=j$Cyc-_b!WUYgCR@q%h18 z%z}8GEnYISgI3k*NZpY3oFL6C$@r^iw_C%6`k0<*tgHxLyAFAPh*gq3hF^1&EPIMd z{Id0zNjWufzj@@xB$&qvOM_56{d_1!oM-7O9WPf%l>e+~{_vD5J) zPadN49+ejCeFm?E_Lh7+T^P^<<>x!t=x;inm1Igq#)kRkC-pmd)M57fg(kIX(==*8K!e2)K&>*nB5aii(^VuG869**KZFP@ zaGA(Tdr3m1Q{Q7^ly=@ABc#HGkic^<`1^I)&!k%(yMG{P{TGpP2L^k(M}PMyaF1;} z?AvkA(!nfy=PVBN)OXQ&w)33$aF*nEs^oX7AGz|7?-%B1Y-p&yDAZd8i#FG#yuUQc9GP zx`F{l3mdJQuZc;)B#x%If6T(~U&LPS*p*x5W4D<8jVH0i%WAEzW4>v1;df<6H~f9Q zXDOsw%c@+4p?cK35>31*b}Tzi&{AVx+=_snL=V3hvQSB(<$EDI-))l~m7c0bY`%7o z_iSJEL01^}$?2frxk8O_7`%~`zP4VEYF^X0TCkeCtKwPK)P7!rFHY1 zNy{R8fIlHWA|L+`?NE=VBEPe{S{TB_*`?aCmFY1=zbYV3LGT?mE6Mk#ut@OU*+@*} zX?_+2+qy(mjdS#MI;x8NlKU@4AX`^lyHGtBTNb&6tQ@}Ggyy?RKvI#Ld7y`$jkF31 z|4>Qi>60YyOX8hWl zlcu}3+T$ng@k94`6Rndbpj?iK_0XRig;$Vae5!L;eBOztt~&_+=hC}hf-&N@j{GDUT;3d;7)oH~ehF24c& zZ3+YW8_ObNc_T;UYX(kTmnu2X-XY&cx<{giaLEG7!sf=pm-(OjfqPXOtbPV!{QGnC z&FPZI9_xFNRhL;KU$TexPH+rKaAtz8G!0?uao8$JHbaagUb>RKdM0_>e zRbATA@;W~H7OH$-{UA~#Veb@lDef0-B`V8S3kZkMrtVV_Rdl~zm;iDtrR*BGE}j~; zY8*0rJd(GnHi?huWKv0>!eLuGlX3VT?@d4l9~f z+Jhetklsvum}jp=>Zcg}$J;|nTx9uMNPpCM4*gLlS^CG52gj3aV!x`*<#_5iycL&6 zQzuX^nvmxfM>T+kM z#*?qrCI2^lu%WWDF1a)v?S9pMQJA3*uXV}i>WIDZTTlsKf5B_;?x)5yZ@9-R?(w2~ zEO(C%_t*o{rT?5cW0uE1J?B@!w`>mVRCl@X4d++OSkl?q{Hn+NEclEgSf1az{JdS1 z{|>xcC0nIJwn{~CN^W_2q!?Zu65N|fJv4IE1yY0RDhVMkS~sR=kS(EGfdxv8fqhlo ztviz!R>ynm?}GCtNq;xFsWmyMqFeh$Uiz;4JP>_*4e#jNSJ2xRDw*LjNS`JiiaZf! zlTJS&^X;Zh^)IyGB= zM`k(2FL^+pkvaM@@(arvxl0e`rKVoeVrDt z%Uzau!&mW!(aMERA4$I@Iq8dI!)-=ct{GivO3yigq^1|fnm_A1BO?0@a95U&Np9-c z*pD;i&IMu2fRDYoT>;Cn(S&D6;j2HkZ9z@BHJ2-7h+CJuqI692*1pjeZZ#_yv00<) zWbureTpS$CY^6KuTjvO+)~kDGc?5i;O;gdAVcsoab7ye~2&|P+9teRD`voTK1 z?D;WBUwfkR(fU}a$Y3|*CAN-?-e?g6NtrBu>ZjxLZH43l7G1Q=u0SI!h|7JZPXa(kf(6~ReH$Z&p5BQgy>l18Mz2QN9qs80pmqRc+}CUa0! zKz&dq`%Ny^VO#KjNR96zV3MOe6EIl%k-~k$9O!#GJpBXoamL*SZc4NL4O~WoWi5l% zKVvxUO$W8J{#UB1)Oy8DQKNzd+1i94@H`W_pwZHepMZp4^po<-#dp1xXY|qAHo*n( zbn9XK1ZFT+T+x%1sYu`4n@INu|KPd)w&;5I-<ZBTrV1TDwz`8_r}{ zq!Gb)>$2*Zg79<|h-&84XgTr<2b&%Zr68+qbM>v(U%yA+(*?2v7@vzFQMtChzqOM_ zq|WY2-mcbgol4W*T({KDJA)c>8!OdSRKnVs6QJ|P86m>)Q&?MjD7XkzIum*N-spFR zY`I2g)Pc;)l}btQV|kWQ1DTJ@eme zkk}nq1hR~_8}&O`^1dE^$twH0qVY_X@d*b|_9s$W+P&m*Z6cAAJE~*a3q~i!OtUma z#V#?mHM4FMhi$oh#URr|=U5Ms*!fpCEoZYK75R=f7Sx%+ITp}dOe{ZKh2=W1g*)my zI+LtaoMKS+NKbH``sV3E7oZoPtcfP=P4CSY`Ki098<5{i z=ON+i^nEkAl~aI#oX~z#W!hwCe|uzW@4N35ry8R>sda>`gj?`uvXX>9PM z1~U4aLlx%CR2uyJc^!iakSoE>qHC{;WRe&hsFlLus8%3U^=kK8>0(LeF5PVvJkPWKSC;r_|f?`?WGwF96*dJT26B8R?OjL z#TM=M&DnP0KurF^2degSS5|mQV8r!=D8_qlUg{`jO$#1A$u%^_n9gVH1d%^M=vsb_ zv<8R-L6Us5Mqvr^^W^-ZcV>Ym6=z@sH@|NjaOv-0!+u#d?8SdjojyhZtjyv*c6o); zjJy?{2XiF8xVEbuFXK7K#r-G_#?#N?z+FdO%}b5%=s+%qw~?i<+ljB5Pq=!)pUMfn z^-b>(WBP0g?MEIUf|)+XBGn%I zuwLTrt>VLK8RXmpxP5Dv_~Raxv~@sJIPbFa;86JBm#&*l;Y=1`t8{0df_)Wo^`NOW zOhokqp==zu=`~`*YOnBRvujghON)Cnz;=wdYIE*3SG`Su(PDoHzVe>Phh{oC*;6xp zwJZGO{V?Z~mLG#5_9-~#A-E;Ta!U{Tn12%jHwDz7jm2KAqO>G0rk!bsT(yiqwWckQ zNK~(=M>3imO<_sAxJAxpu3ZtsLRLHrf{q92lHK|@ng8O>>dzT38R924Kc=cfWFm%) z8>V-I%%^r3Ba6&PA=A@;F*@%r0=z4Gt+%~F=ngcFF2G66mD!(`AaBnpQ;h(M_4h(MR1#THM@bolk*D?6%>eDc1(mC_s2D=|_>2P| z+MKafAev2Eimi8dL$rOY=8Vk{oJmEUzxb%|%^R%c%6n^M@M zoK45b9(U&G3^8S}VY?~n0br9oZ4XHA|paZg9;%IrCR#Bgrs|9 zIYz=IeKXLAm{BgflAOUGsgo$t`J3Q7EN7dWMh|?o^bNj9Vfu z`t(qrpXc<@Q2XvSW4`wrTDzACR$hB&^p>YX|07Z^`&%Br_Xqxe$nS@BH*7cZdT~Dd zUoq?58T{zHaK9*~{&MqYF^tDD+bY_xf87ms^B1X0FWI(6k5tJY2Y#Jj%R*8Q=k6E%4CLV72GL`J_;*4N{%yWZ4Y&JclST@Ep(y2b;W*&lk}I_` zbVt3ov1U!Qb)i1fxEN1+@iH&<_Tsl0NLV~Z3Uk>=r+*cl=lN@AV(me{_ERvv*g2_Wqk38faQS z>fYw2ZzeWe+g4QR#v8iQt%qjF+=JfBg4{+!D>pwjF5XQy-AFO3uk+^M<-6g6^Gqjq zQ>%x)9i8_N5ZLW_)a-;_A=krtV@oU(B#5DcF=7jdziBz^Td5O;JZ4am!^)gNNWCd&eaVWH!<#YOsXzxZW zXPvBfmyCxlH(Q^DYm(WH*$FZ2a(m4+F%OcCn6mk`6%tZ)e`{_=d**aszV_T_V{Z2a zXZ`}>?!+GW|95_KKsTb}_$M(e zl9GeEG2fk#JoK)kayXy;coAH++xcvC9!fy+&9K*PzeFDTE>*J*+%#76to6s+SSiEd zi+OnDh)}+;R)u&t!$D<2(T|)V$gqwYl@Bb3b@G9&dk1-ZIH;sC=Ci*`c}%rbPKFWP z5%7oLKeiBMBIyXYY$h+2c}DvGM*f@{E>n>&tcuw?t1TqB_+JXJlVV9!h6o=cAB_R+ zRAk{S8EfI;*;Hh(l?>x}Qu{-qrC)?1bLX2grPsRBtM7J|HUOz#Sm|U{+TaRtCN5KA zu`5wsE}5V)rj zu}ldsQ{v$ek9xAELg3iM+WrcGPsn6F!vTNr=dQucuE7mfC_LFtgDp91a2r`NrAuAu zhaZ=}c^FwHRd&_$j$F4HuuQ-i*GEdrlz!q{q5)B5EMMfl7gVgp9rA~(Eji@smQVBXx zP2}snq)fd9VT4oLUdUWkx?k7Jve8PlwPiQ5KqhP2+@)%?LIDFJ3-q&|bVF9D z+EJ`suxm8qrxMv#K8t+*euN4>O*huQ*3BWd4~wjmwOCo*iBKUL)6a?^_5~5Ednn9= z+;TCT(!-@~Q)gFq{#remha!cnv7>_5Ke6kBH|Jg%Wc$<;aefwXhCiAR!3P>{x_fBO z3Ig3w5R4{Ua0s4Ge0}VjIbSU-!1};uH2raVNv}2+s7YRCy*`CT)}Fe>7rbykn!=S5 z;v86Jxt_3$o-j#ta7$%_l6<1<>Ioa%a53xB>Y`E&B|6B^S1|mtw~vN(<@T|LB@U_^ z;!Xu|epP$++%3bA866n*A2rFtcd_LMTs2-s%w3>abTT4rLwp- z@$at2PH|BIFk)@9E02yR@3xp_s-W5`aN0(mz;ReZmDaWXt?595ZmDuZg7ylD+C)2{ zw%ohOuW!Z?cRkjFsiQ3yv%RU4foif;l$xt%Z=(5XcDIF5HNFb*YOG7AK!DtgBhy_;zh#M_1$P-0Cb`RVLc{tEgy~ zC0gS_xEV!T-x{RUM_fCOaRJMZfRpNyBbSV8p(DGBK!M#Xe~-9-)VFFb!t3z`iYXP! z->^n6sgpTjLG(4T0UI%|Z3T4G0BVo6e1Y$^{(f=4>=VjD)o6-DE%=@F%`@C5{FkR?AcN|fv5Z|8+3#9R(`a_E5DgR2qufR zY%=nHG43CJg8W^IqQZw<>w<`Qs_JqH(C?>o#Smd2z;|y3{F~#JVNTU- z;#}!+F4;RLr+PFvhn&F)!Y$jLSXKHjR?dlhQk`d%5Fu;Gy6u4oQklqm?t z2(QCJ(85PlS2^?g46bwK9@;0Toahn^P`Q8bH8|g8S=0;kMq&MuvW#|F4$sYEQoMvL z+3q$Z|=b+G&JL0iC{JvFQO+0%=V{L3yhUU3o9x zgVXWG0pWvkwUue=b(OfrZORoJKxO`H8arc>yWO_MH=E41V0r80K0)7;!Y#YaKr^V9{G0~beT%> zK|P)>qbk96yxbCM9|`G#Q2Q_wV^ZmM_%v_xP$u0$l7jP}u-GUpO?KaqC3S?a&gk^D zVhg%|k#GU?7#~pfV=W3XwcZxusM-nXJqXZD7@hL=l3Md|=9)%`;$Z0`8Qn+Gt;TV3 zbY!kLIVi@%N3FJGnyMa~Z2C7y(P+B&@LZupTNeb4qQ?0Y3|78tS)Lr&lLN-9EMSGW zD5!VW7)jjM9ONmzitWb-5Ez@0xRab!a8|F3A7f+$ud8+d_n?M?TNLPo7J6)%oA7tNF~0&bl@*&eX5ISChord@Kk~%npK_ z%DF%--KsvJkF5Qia!=@O&nD%4a8goaCImQFIOL%6F(Y@^gArbk{nmB>%J2UyqEq$j= z4b*YrIs{YuCgS6}g@@Y2QqJ{Oa0#6go+U&HL_=GDG7#1DTCZ0w4BPXLd7rFF3zGqLM4L%T{2s&aj=%Rw7xB~ps0F6T*{;Y(cyvG|iODlQ@lj$8x@1nPY7Y6o_|1 zLuf-L=XEY;zX3TpBg*-Bm~%}g=LDB?OJPn<*ry=4k(|L*!i{E&CoSerX61(92H-C! z!Lrv3s~NdwqDGpat|wL>zHK=#=~dUkJ+XSm<-D(74pufB*(P++D5zWra;VETusA21 zHFLFPYjMM)au&LrrM;@Ymz=>5TobC6=fF8wO*m;)=;U5`N6shP^Z2TL3W^`KU5i5Z z*!~Cm^{IP&=pOIcLu9NF89_(y(r3=j{^h++OR}orf(tus3GYZ|r7#y-UbhYyoUzuZ z_}lgzjJ_yj-%uNYY^B0lR`J2r^0cGC{~VfAtVG4`35#v8tk7!QTUNolUEgxZV(Jwe zOUx!`@I6=kfN?o+SOqHx4tUXM1p>{6uA4~(zglC^p2&?qYzvS_^sM(U8!YFPUiB8K z-j5ud=8BwpO-$~2A?%~)4v%#sTqBhH%%`S*Kpp>9s3kqb1hPQ zB_1SMFNI0j{U|%{_GhWtJpW#CCI^KEc@tmC253|a1X*zf&5c7jXNg)ibD^0OxvOWK zptMbGeP(B*FlT}r!oicNj8?o7+lDkY@^|0HK{^_2{wymyAGAWY>&Lk@yVFP-oh~b9 zZcz}d{b_cF(YRdbO~uY{JivlQS=@{LSe?d`vhKQ?Zc$yM1gI)~BC480v4uR`+*E4~cN?zjxr49GwHM zRN%h-yiN=WuCJuN9Au{eF1;t z%r3P?Y$IaINGiif^Qa0?F*52U(1xIfs2G{`PrG88sJP9*O*uPb|GJm2?2IYLC^2J- zNJBZ_@5C|P?VNe31(t(wLkz}?fY!N(m+0WUS-U1Y3{Og91+yZWI!ciI5!wN38E)@x z!-d-?qA6|eYaEm{%kD+vV9vC;jWMlc)h0)-VKC+#JfF2O^JDc+HFMoBYbYE=Dw|zj zicX~LYW82A8Ox_b8o%!)M^<{n-_-DE-UVv97@;&+i)vASGg)UfM9CN=_&riA`e)Li)WbgM2p)gX z7_!gRz?{QuCyyb!`O);x391J^6pyf7id&HWsB@I!x5?X5R7A1hlz!lk-6&(~M2-bb zCDK1kF_#JgOkiTE!~bMAsnXD6uq5XSDpe2+WeyUqSTweG*X5k0xpKOZ+c9kcNrPNg zl`Z*srfw>kst*tf9TQx?+9z{J8B5-_o?Wtm55aQ+ zXZ0%>o>VFUYUb@DI;2iQ`3O{a#=O|^SMqL$S%tuxzB0@v==vF$fMvU2<4cC)t6O_k zd6^kUa?1#D9OZEQj>GYWUIj*n1w0i9E@vPOhIV62m#MF6I%ZY{(_Ebw^a8OBOC@-h zuW4>zqeWvYW5GC=`MliButq`fyv!QNQ7y<8 zhx#`a@RRkSgV@|;s9mjCB{#`>()%F!^eMjW0uuZ-&51bT%bYQ>t#7pTYzGJlrX(7n zO}`WG{9BrHvfi2UO|@tEEh#Z&tw58pS@xk3%0vEcqH9#Cq8b}sswagnqcSNmdtpN8 z1q)wyf>4ir(1bfOi_(B35Ol%xIOD=3Tp}`!O~OQ1XzPy|t`TSMQqgKj@DzpRJ+fCYbA7q%!p zT3t(vtX_1Q)frMa{S)~A36Ln5e^ZfgvEwWc7xRjLTMEasoB{RZyOn_f*PVG$rfggt zuX@Dl5JXB7XL={NZ-DZ4z05)d2ar%gUm#e&waYUT8&CzESe@A{CS6P`2-7yuwBmUP{&+Z|FVK z8Db>fMya-#m$IrQ;A#VK^{rk%+z?^zX{`N(Um8@P!V|B&H_hP)@XT7h+LBm0bxAO^ z5fTu_#|FCYHdyCYK%U8tTD(C?+xJlG zAWjc4AjP9b{2kVYj3a!lJ!ma=Rwx*HuZ_w&+yHs;L_$dHN0qVv7& z)P}AY;RYoX1ScqNzl}sWo<$jOr?SSIog(muuVHIh<8_6|dwMt*3#w4~D&-uE3 zHxAePH3!NUvSy89l8h-HJ!V?}(Pu}0*xvao4*TE5|3BmZA6reGw@AR$i^atPl!_eD zUs^}HgT!(r2Cv^Fiiow5kZQGiRQKL|=k?45DbW9(Dy>^Xe|;U4|n39+SM|xU4_mjUguof z6$7G)(d10NJojyl9bRHPDaWWRmlqTI^@o4C5Y`yI4@BRmII*oL+SR1oeuV@`9SzCrnlGgp2L5_NGIDO`qwCvwYA^nK_P9arxLxPRyIy<>!tR&}K zGq~9Io{Zj$wtgc1OGRFcUPQ|w@z;xVnl^IgUIfa7L6GB;<9X*sZ^CD23i}MF(xR!K z8`}<5bQs{QS2U5?coq34vaW8^lX%UN#uvu=2}#qK#MXX|Ea)bxC>8fhE-ck3@kib??Yi7uF=u6*Fn#u`8Q zFsI7_$o;SIOi;1Ru@R#yZT!T{DVu@l@T9y2{Ii)0tZf{eZzuL?JZ3ke9potwPT&x+ z7}OMAy?|92QPMBa^Fg`8>Y&n?QP(u+*M-&3Fy4ae^_8*?s|9RFc0K}m?t>yC&p_9D zJ2^~piz7@nSyKs;TU~B;M%vRalN1(O&MW=8r6lav&-$ugGb5`g8VjykYBal~vnS08 zh24kx3U)E0*`E}rYBwXl{`L3waBEbSVtKmoa=dmzw=y z!RqqjbHj#{KSR69Z=3TCW>q^Y0uw9Ndx7ShACbrGMQ1X#$PMcoQl+7dmBdv;V;KB$ ztqdmU&IlH~BiPo3iS}Ztf+`&%Pi(80!>>{X(xxX>EUY@yU2mA0pTZEFSUQU}kDNML zVX-YncK8HG zd>=yJ4ioIkUMh0>h2G5@|I~hLm_h`;SgMc;J@sV09H?%T!?bv(+)H9`zouVgn1F?j zrynwWm3`;awU;`v07fVq*rO07==V&f6|`7|t#4R=rR~A(uw2kcj^ND>BgLwqCn+vg zzVRUtRcwnZ(}M?GfiLFDzl}*piKx~JDhys_q(dxb^n$ym;BFHT@|K$ul?dUF$Nv;d z>SKu$O=;*J*^C4~`o3!?tqa#wX|Wa-Pz01doAh&WgD4FFXGh<#)wiuQbY6PDXEU$W z2QYDr@vs|1Z|;?C0@;G&0iNCgg2Aub4ctk&tM+)pa{s0B9Ss8o`zW(!VK~;Lzaq_9 zG#O4|-L{)k9Lwa%XV3cw{m6&`gbr?>aRk)-kGhHu< zXjl_VE0zGX+a}LMSU}f34w$`v6f5Xl95jB9rGwt_d;TCP?P0G)>Q$xm!#uwFk)ISB zPGfD2%pfeTg6YCf+)*dE1bgCp2%{Yi3pRw!w`#cd)-gsao+MNPcmio+xeP#ln%)X+A!eU{*X0~IZ&D(}H{k*$G4ix&hRDH}{ z+4`49-x;if<;H8IyPn!ZCJux=eurYaO@W39-I((a7H&G9`TX*;Gv)94S6=x?c2+(* zuMlmNZ_h!`sp8##ni|#AIaT(nNJ9aZmVfg@N@S8sII%mHi#2N2P76H$cdP9E)Kgr$OIZfqz&nzV6#M>E2b9cgrhWW+ci^9P(Pq^TA z<#K4LXp2{V)s7mX`GYMK*9!Dkb*63<^#tRdG97c&7jwokkv(`GYbKcaC!0x3^(M9( zZNDdtej$nAa89n$g_R3}+f`(&zJd${Y=G@&J!Uu{M!S{`HeWV8~i2MeDx4CehkN6+>XzDIn79IuNQ|i0}~hk!0ik+#Z5sXMqJ`ob9w!q~-k_ z${rykk9=5qL|O|B*>nmzo-phl&eikQ2cEF|6w**zwh!LXfV$q%>w{e1P83K%P^Kd7 z`brr`f#0dXZ(V_}yp=;T`oAD}SIxaKEZ`_GR|Q@tDOl_<`_b(=Z8%7!E`P{$;g2pr zoxF|LWl#A+y?$6BTclib@p2(kpsF2NJJAl_pNV|3fHFk|Nf3K~{b5coQ`}*_-&9SNL2eCQZ$f==_%r)*3Z!s+gf3 z37%k^M0r1v&frU$yrd%EYRd|A-+tW!J=riAk&A)I6?`>2<$(gNx&|(o{g^S)od@J} zl`&CY_2vU~qzIM~21z4_f7o-jdPg;fz;t*?}!8|DKaH^#9X_7W7iEG<> z71&<|mWKt5)q*EfpiD?@QZ+OMMDhhW{WqAoM>maFoqh-NNjAn*zM3>=I?(n5VdY>? zhxie>dv8YVTSccBc;r&MT9_Q_Q2$1*zm19Pg(^}KqVC$-C7rn4k#go6ImDr-3xW|U z@VdTIiEHZ%Dli-vL6O7k%engq2dUJP_nX>DMP|Q~!y=}U7TKp@#dncruG=!pCV#yB zTzMwg@6P495uiJf=dn(n>m|>g9J%uG6!%QVEv@J(*qTr~|Dc42k6 z;~5!VfeiaD432-(26dR$R3~5=HjLQZNeJ#`+;uc(td|-+Bd)tt{P@=5_{5j%YMz<) zPF*3vQ&-MhN8MXXnmlP4F6gM?sf%c2l`;<3lT=`wEAY(P9BP=*&Q^g#!UB#OLsg)Wq~O~Qv-+EJ zsxhJM_v=t-Z+|oAlL>9-y*307IUAw(=EgdYi*d98==EtS+)ahJQP@o+>H}L2GBBDy^tDX~zjws{n9li65>ml`i>q{jDY z>0{fS5N&YB+r>{h0uCEG;I-&tE+dQY5fRR?gRPQeU<6Yq&_~)X$?2aS`1hB#$-5&) z_*ILXt{00Oo})4?in$g|0lNfO!R(ae7lX`x*)DjoSMyH#aP>7!tf=*gK*C|J9*um3%Q*zeM&~du$tCg&1XVg2#!CXG*F$dsG1 zpG%@Yb_Sv&0tgA9ewaVFmE}iy@QoQx>sPQIabH@C8w_WA8!m*H_E~VR)rw?v-hN7B z$Fxmw{I7XkE4(dhy^d|n^WQ4g#E`=^xG*&HdBnQ3xlh>g{j+u)eg(;KpKGkvGzB`i zv4P)pT+|(Bu$o+#I*pys4Cn>!bUPdQ&1BN52{V{ST+kAnz#bw|w>eE^c#NiWiM>u# zOx7`&4SX8MF%kbBnaT=L(E44yOk5Z5`%{h0I>0Y69OIu{O5Z|?lJ{@Vp%eQv*)fpD zbADadyn(LCZt{f@UAC+uPS*98H$Dt3MMqd;PxFV;DqL#xvax<7wQW+tIIQtTFF9

    *ru-DR=ALX`e>J|2iGmkEBc!(oIOXa$?WyUvk1XL4Fw78W9u2&WWFl{)bA)$X-j8 zlNe-#8dNa zHp6W{r?_1n<{qDEe<(FyW*0zaiLmz?VKW?2qoeY!|L1Mxi|zxP8uxDyYmdVy{s8HX zXPvC)D+@gwG0a#cB==4tH3mmb&qzSlAE4xltw@4jcA-7?KTVI!1-cW^sJNTqg;H`n z>3+#Cw-DGbyg=8sV(kLm1%{|%($QS3KSM_NVj2oxWMrs)aUmbP)baHAxnds4f_Ole zuU)My^a_j+cC&8gUEq%7r^;5EJr`~=0Mv%4(#%V_UV<~GWts=~NC-4-lqcAI zDKP*BNOu%JV$$lR&M0zQda3h_xgbwi3$xS|8ryhbvNX#Ee)xUBmE)spyuP=)w%loL z;!aYy81Xu4-yez(N7BNlLeCYPPJ^57330OZdnB%bsWKe%qZ}!6sA)`ic@R=`mP7^C zRW<3Y#=5)JP>wUxM`#35{o=MD2_yko1(1xiF0^-jz0|(C_NLdUU@CHE!pV^duezRr ziQ!K|S`qBGhj5ZL2ZvN^Bpk&}C`X)|fezJnp$GVS#jFU2DWZPC9ZN>68?geS{f#rQJwF9+wwSF~RS&g3 z<=iO)<0LP$znp5RjES5!9v3<34+sS?yx1q3N0ZnW#%9%WWbj90Ba**s;oH+_LdN=aW}`T z!#YZX)YVzO&H~KfN2HyWsVPvX;sQkfU`W@#ZcS zP3iMH9Z=KlCf^2Kqy4WhcR~(n8lTR#LO3bjtXRu%a$=sLJ-cgHWWQ#_Q$qc1Z3t*; zcswuC9Y>_RuI6n~j0F-#mqq8lf)m8(y`uB}hVd|Z?`Z3I*_9LO?3``L9VB=egrtjEMhhXJOH`OU zH0PXpia%%>W=u5kd)lZGXu?T;(X%G*@uW0sOUOV{s@s_Lgi5vPhFx`7c8lXX)bY4$ zLPtwsbn%2E=f2a$F_q|IJi!)kDqN$~xBX6Dl>)65ltQ-4! z2d(!CKaM_n_K?j>Aj=kr^`wLOa!cRn;%P_D-RNMR3e4?=pJ-Z8^D141W42lm%Z@L@ zw@d$2d#S~)mi6A2^8|J(rc-ggAUrt=)Xe+vaeKQ5 zCH}O%twkID$=;ZI{6?vfbAH(`>%{+T9gtyH?>FC+F0DkF`CV+yQ5nKen*Q zhz!pzH-doDX%@mdB=#yRl1uFP9!01~sGSK&0u3v&MM$+G$97tnHs`i#}sdgpG0 zX;(t_IqAKGdRO`LgtS`_5Lhvikf$NeU_c0i29`E6ikWkJZEh^>sX@Ad#uyC3@zAfu z=rW!v>Y=R$W`K4+IC^m7WCp(0TWuzt5j77eSs6vL*6PgQF6-6}geTE}o!0d;0^?W% zI-l;wQqE;r_`7QQMVXS=07rF~jUnyX7NS3v_anqP`38|0TFvKL_0C@}`Wf)Qg)&4<%$_zKVwoSrR%mYM~!O;|w)=kmqx? z+vn=g*Lv#Evsi^flbu6c(U>VvW;lssl!$6;hLlpG0Z%E>4ffPRzF)M(lYw?bXO3Q( z)oa9QRsocj0q{q%?vI|_ZYS0y_!%8D%QW1V4YytEnCm9x=$LJxhI2J!PKXcTlma?* z&Hn*bcW2AwV>Rn@^zMffbFeyjr&yhi!)TTWjY|;xMoGV>3*B~oX>cJfgBh*Wk~YeP z;}zVy!G4GB8J}Etx1n~WZo~9m0=29BqxXxp%)}T@x6p69Dy*Hd2os8|y!Jvz2G_k%#xKka za&BISd>pVLD@#zAZT5#eLDMhT?y2}OQ00b`*l?h!pPwxv_4}j-<8HTt2lXoWuNw@L zFU7FBnU-*LA^-l;3UvdwJuZ)?n&E=z{5vGW!%-wFGfT+_b=X?7d37=a_*ck2D zI4JSZO!0wz9WK%N`;w5@*uP`r zUWU)00k0(9Keprjegi%eULU7876U%GPe-Bg2TXdfAcRj*e&csZt6=Zx){(RA(Y?cw z+n<=tRf(nZia4muPkx7uKStD(A)<(BU%EtnC={Js!44H)-u{Qg*$}{L}A~X^{AkrQa!9uG1f=-muIOV6rXn z5kJ^JtHLXMjitHG+&0^%YsuK?;xVHx9$T|ydOfd8>Mm^`bxLYbpD`_kC-^*c>G#30 zmd%a*|D+D;e4*BFEG<68AKRxiK75(icPhi>)Y8tk$=Ijq;X0q|MB{y91gv_t^Dc_v zJO~jLO(z$}joF1}%ZtS2$0l6c^%Rb;r0B7vymti>G1@S}Cd4qS4VR_H3+z z%JnP{pA*7ogPtQ+jKh*`V$g zUd-2?pK**p*h=bfmJgU4rF^Pv*I1MEM)_qQz9BeMt1^R6$2)zzgPyBR4I0WiI=Ak6 zRm%z(ZzXunIW9x+-~S_|N#}YxfYWvI?q=;uJYF2!n)wQ^aJ>NEjBC>8KySZfCY4%n zhG%2O^671vzC`C0i}{1oGXPw+mpZOk;F+@?K%`sQly|pE|smnC0ev zH%#6&+ovyuWx8<)F1*Zi+Bxp=?iBlV_$bExQ7qVH)LIXHw!gY1{|+TYDux4y4r7^{ zo9{JrMv|+&LcBf3_qlk>Gld1w))mmiA3w-H3tiWUA%9J2JXJKfW=G>te|#xD^&-@$ zhqi`bHC;7|y+n<8{)CE_zGK*h8ZsCSDKQVus!_JF5^kVLdtzh=Y%!-zh;|}`Gz3tX zsyct_C0RHyGZ8&jY8@S1#NNM5Bi7$^eMDY~^d*J|gClFUMPJfFD?EYXp28}qVJ5ig z62U?PYpY@F8M|+YkDUVaAm)uamg)Xuyw{Xf7YjQ zFS4QW&Z>&nte)1MUM?W*9~F&h?ka5T$KO6p>rad>Zrrcm#pBq=T`l$7AYzS*Gh$Wa z)Kt+@aJ)ZcKd*3=7%q7I8;$%A!6*3$^Y9$-(3}cU#0l z`f8svsh#W7HM`TIDpV%k>UXj|6K(m(Xq$mNeu50kmKR9GdT-;=x=ya{X!q#iA=5Z( zOIN`H1hOII%x+Q8F*uBGS!Y>h>zF_NZ#o0IxKp;%0X`DU>*ls&CgeTm8JfbZL5+DI5L#dIPMWlnl`4)g0n@zCnU)H% znY&a-(&qf%!Mv~0)`Or+&i*9!){L>pR+Vt75Ki=-^Lw1}C2?!DRjcEOvP!9}H2C`z z;jEkqoST9-zh{)J0($2?JCWZR7xvVB$HBTN3fB1GowLjRX%+rem1F(ms{B(Ab2MP( zQfh~uA2OD#<*@s(VB=KPD>pIl0%04WoN@{FIFj1iGM$*GKR7p)?|bG`zp55#ji&o^ zd|eGHr9tIOf9c+dgjB!ZzDfmjB5{Qx%PPesk~!mNrT!NEH-{HiVaARM+)MV z6%Kc%CQGZA1gEIJJ9Fz(E7{s@)2^m2qiVCcK7L0@d(+XbLGD5yvzLEG&-Cm=hZFQw zLt&L*YtkmK-|3q(>)o4z!L>hNYWtN1e5F>SN-*qZlJ-?nDzdLd4hTohQWZEw1-ALF zfN^Nhc@s$|P#`$ydMkCzl{wW^s??fmjZH47h6!bW<+eAkJu_lEX-h6?GyNvwf-fd% zaP&Zp?^%}o*H@wFZ@O#9hfhR?-21<2bQVer&L~4YZ@^p7o>@B}NyN5S5AKqI>d@j7h z!LLI2l?y)@_Bgy8oxHS31^sd=kqXXLA(l zRGjThUT_vDZacklK=8zy&R~OqP0yLEhYIHaRhTC)`SneqzG~rLCHzq{JCo0R;avCb zjxIm)*VUNCs*i=Zy(A4#f$k9u32K;<(Hg%>@964$D_D3q41IMzL+9ZWo%f!TPeesJ z2ApUWI2li$3K?#@R~eX^5sPI1f*q3zTGllVj6QnX-$~~6z-7&P!|w_M*c4X$ea9nC zVQKO3b?lyNF2%8(vumq7|ER0%{p0CNd7n3#bpM$7JZg!lz?7gPUEzI7TF{ z07l&3qs|{tn|!S{`rulx@KXXqMCZ++ng0IUUz}7>OJw(W^uZV6g)ee*N9))4;3csH z_w$cg$7j#~f){;oz1O##HI7zsoR=(T*Jofn+3qE`$(BPN^vB10r6#Ux(rmyO30KZW zFKjlhl+>^WX=1Ad&mS8g8?_DT{rsaY3v0v7#R}|SJA4gO*;C_54rB85+wQAY9b$EU zaqaN6d@ZiS^K&{qp!vD%z~bPLjZQ^?k5q&+p$#GhEjDNO%yh?lJI~vhl6co6-V>NQ zNwQHu!C%7MF+qm%;B6}(>A%YW#xOyfKgK$ ztk%SW1Qi`L>J0{sN;M*tC>YVAP?!KJm|zw&4r9?`wboYN)_vcKxU?n&2w=qkR!}S= zF5GbxaH;I%_x(QS+&lNqOfawXegFBre8}AGx#v9ldCqf|n+nVD7rh6xOR)#>f|rGG zgrn(`(zEbIO%t|7aIvrgbnA%8X5sNGC@{spvTohLp$l#P8F*wfudLfaHuG-sFz<6X zJQ@)&Ny9v5XA{i(dnd5*IZ(A&U%*9}N^kzO89&1{%$X?{S=%KlM%KA?*7D4-wxCIY3Dm zB!+Wt;APZzie2I_n^~e0@2&U=kS_%pw!2Ex-Y2!!GCP{c-EGhru@#rrx(-Dp+c%cP zC-wbp-w%sM>` z%8@4CI0Ezl(-Y7!IU(Pgw}8UKMcpEQt91++(C(4H#NQtN!FNM;zRE-BV!*_|wX1+a zGjTl--&g#N*4Pt2MSbsF8dN2%#$rB~IOejX?_FOmZLxa4uF8YSOFvHYzR~z6dd^Pt zIg&H+efHIIYS(d!^oloS7VvMli7fV-iuM`NHZJ4#10y--;KgQnhFFJHgA!^(Pj zcgF(u+|Y?!wFFgXMtsY0#M?&09k{;$)n_#M)-OZV&7sNq@=aW7rBRHz{+iv`>KKJY zbs-I^km_Rn#vfGy0eyLg6yW>#J@Nv0Uq2obi@9MGHkzD*XYmiXpU~Xq_+s3+nm6uH zH)4|nDCYv)i|vN{p-7TIyk`UKQlC%t5Q3(g3~jGYzZaQE=P>btRf@RGIjSSbHF zI1~LPPY`qUf?gga{ietZYe9DO){gM2JgM88$(`AL+l+H;*@n6DXXmcxE|_1*Ys+ROd?wlG*+)C_xh{*H1eG4R8dz};aqd6_hwJbPaR+o5>u!DxIDJWt~j z*wMAy`vAFS%JLu?RDl!lTh}~A?M72d&(~Bz^WnI{0W2=sq|8Zr#%P?FDD{CHtNnh( z7=+nPLLU_D_jmw@SiMq9=PArKjQ4|d|AIT{aE5*N<0RsH0KXm0Vc%Q=vSN|tGiSj; z;|gqP4h=KgY8Rk5{=-6=s|ksSvX2?Pi?_inEL{uBIg*OeoFM>U4J|N{6LB671CcM< zH6pEgdxQd3Bs6qKAy!YD2D!a}91)!c$NbiXPb!-)ga<+b6h;*aaEz>aV8X>nQ8_HC z<@dWg;x8sW5k@`AC%*?a-?^9Pibp+4ja@x_G?c0kN~Ngxb#!#Y-gMR>Y@504&iR)l zZzDzC0La!~rt7D(Q9&l^e%1FDS*!&84sk97wZFOK-BMA&Zvd`hkVMHb8 zmBsJ~(K+m?Ac@}>l6*tH!O$dq7Z`*@U-+OHPh%Z4y}b5(2cxKcwHHHSYtY;YK+*2cDl?-BgHXi<>2!QEXE%2} zESB!3?%zJ!AH_fI$d)Hwd{6GAEwFy^BJoVPWEak(Sm*+~P;YscpgcsFsr^^1zaGvo zN1L~ZEShug2at?lf6gXt>U2<`Sg25aS1X2HgX8z=3O)51jq@Q?)EQ)*SnPx!03`Gi zoqvB*S$=<8KcR{R*s}`V71?!bG{WJi@1oVpgjEE6&@NyS^(`tTx{3jyhz%3govpL+ z{r6^tZ-6UWMH1WV~63sn^)1dtgF7Ad@P2w2V1Q}K$d(% z#b%`(J@ifeMQ8lfNhM?cTYbs!Qj1IfyjQWbq z%ejOH{h)1_A3Sm{Bc)(xpF;@H?LdI~1+-Sm(1Xv=`Fyx;4Ep$vcpq@wyU3S|vxx7J zzaw604qb&uTejlSPkpsC{Gk^5)H8hxcz~Dx2OmZHoXD34EJy2DGfCnVzjpLh* z%a-xD%*bv3+PJdiYonL%CKQA7OjB7qiMnBn_)&kPU5 z{QDOiB2fr?7ob9lzzIyvR9t z&dzkPtUa|pyHNTy{gDNVU2lhWsrJ`-{usG7)-QgDx+VyM$$3^>_VIV}$FCm_4R|7< zQ(k`p1x(3j+PS<=%8z)Atr*0zh<2)qt=U3JqbB8%2b$beT2jpz>fH<3+zCG z`860Q1#PF^Bw(fYxxlDb^1k&C)&)&MT*ncozQ8A(r74^{GGP;``KBI0MurZ^(OOXa^9}lH$uf&L6dxb0u*@cBc z@iWUZTg{cbutTd6eL{fy`dDP-r8n;bA!X5eIm*{Z?%;D6`y`tEc(L=6NY16NGjVfi zL0R<5f^!(y_XZfgORwH*I~O??=J-n5F(O>nUWp7-JC<=>o;hMjYfVXM^d>~rGukU7 zeGW!B=SNRpju`?6oF5*zT&>*3EDhG?x3;X(^eO71eXm@6bw&*9D=DYRB?EyOQ*7vP zFwcfhzeAM#wpzftr(Fg9aAq7Bgf}Q=Roxd*Rn-IFXx8K2`&e$h zcM;hDLNTSORPA#K&V#c$Nr$Ojv`Lfqz!Ao_3>weVcvkX09@-VfA15}`RU(kxqJA21 zIuVyhpNz74cY z(KwjmOpe*`bSxEQx*;_)kmK#6n(I6tQrea5;r-kG&yJDODE_6AZ_8mzTEeIJ2}R zcIJr8m8C0pj6lBnPWHS;U^OQ+zeU2Nl=JBpvoGptUG(5 zR`b{NE(L{LslNVYB3KRtIG!3EbU_R4_4W1IZOIXRzMq=m>41^Ox?XO=a9$uR4d;L- zNrs(Er_(@V&xV{y@);`>jjH`uMbN~@;ePxTE5{U#_}zJO_>DRgBfSy(Mx~S!{+;s` z&WEi9s0+G32cKUcI1H*}Gr<4{3NN`a)rA9|_nzU(l0sE8FkfA2`!%YGKWH~3`sl51 za8iBlu{)5i;tA+SuGRY*)lTW2V>Q~t_=_mhTV4^$%On1JED+;qB|+h0!g(#1UD2E_ z?wc&>6$eXidCZ6U&F~45k0t#WRYfun6FnoiSI4w$d=L8lTdjH)ladepc_;MQv?-U8 zC*x^kdL2i7e~;)X{&G5g8I4cSB0TYfPWR_UhGViN8WrpM>%gg~?=S9c6=lTjtI0}+ zU=XzGw<^f^%b#6g0ed^vat)@UhY1SopgAru*kOkC7l2uJs=7x1+@%8WPS{^_jHtj0 z1Db~EaZWgqB(K!*y&m&iMHR8AomWax$C4{a^978?4*>yw6jJ7{G3khj){b_Kov)!j zNTBfJlMtU(HeR@MpL+*M8T(u2}a;JKdfSvmr7un3^SWjs%#l#B~*z!AFV8WdS z4W^j*69u+8rL-#nW|b@zo*@V88ZDYvuvMyd3AH<(oVV+{skAgwk9cBfkmQrccrW5ueZ zkdNPXVGe7}u;z^x%^HC0W$dAJ`7)z1Eq}p8#b2D17n7}EXT>D;tiXEVucL8=*8B8a zQQu32$^5;FJOFjvg}LxIc!ltH*+HH0H_iC|D|fiq zg!vz^|53{RVG^nK9|45dAKLjKNI=Ceen=RWspGdg`dQLXEP^m z>h`T?JYao$J_?o_fQ6hdDvVSd6}kIckUeB|Xai^Mq3R6y6XpS&{?otE0h1`iZcx1K z3G<~8x2OM!FY+M$C%N7*bUDrf?b0`2t4i1X(i)V$&wS}wo$vyz2xB$ke=y$dRxD(P(MBkqbZ+3Rcn!TOFTM`RqwQ z)^i7-ra##=siT))XLmvm`GdyFy7g^)yks8)m9m;gbv2&yjmFOB%lHxOiaZ`v0hT{v z=3*1}ypCnqK1-hb8WTnnd`lD@DTUPte=!$4d{+Plg&2^7TUcKb<~@jcpu9}uk2d8J z0&hSV5YiKWRuys}7Yc}P6V(!c|B#lO0kS)vFN5W5U%(-8umZU==+#+}4W(<3hu>Vl zY#CbsR5pXIoz4r@N)Lw~EY~{xGBVX3@URXcXN_xJc8u5ZVs z9{P^oM}4XB$$&q){L{&hi8bm{@lSOuCM7=6`JVBVNhM`cDgKGB$s?09k`6f?C??}%D$=Ju8yyb zT)0=}t6zDHog!aWB{yAyGmiSU3<}~DkFB>7sViTRg1dQ)1NVjl_pl2t6L8kJVL&v3 z(j?=)nYUUpc6C@~PhkXm+W}~%&KicFFVT`&6_4)iSmIm$$hZuQH#=eXLJU>PS88lk zm*brO&;Oa>?PmBJsK8Imx=*%JNN|2!niL&+^k30IjXsb+9xFr5@EF`51EsR=mOX-=8zbF-qs3d#}XD0t~H=8o{$SBcM+uZ3FEM9szQqwT&s-i~W@gVG`HSo}#|ZXP%u=etm{D zf8(BxiVDlPe@_Rh{t6ZFkK^#}v3ME?OG7f99x99&02!2U1)Nnd0C-eC9!?D_H<7UM zSyv$ujpjoS$%QLqTpyYRWG1j3d@rQ7#$Qm49d3C@_}* z_(0IxTMzahi`Ve#B|zd=@QPq2>Tf$cppSX_$Yde-eTBc{W3g}MD)}KydrVdc2x@{V zip_A)1Qp{GcylNbJCzPuf+RrHH*^}(C>wyrK#fLKak&}ZX-3ZMScCB^-!J94i)pUY zwDnh@^h>ZMK)X?2FPI+6ec5K#M9>-F3b-fYKA|sv2)SPI;D8fVe$}vG@Y#^FxRA5Sbj`Hz6bKDs4xbA;rkaER=(!;1#_<@*16KAh?%3js zte!j0Tb%jfXkpYtCs*D1 zBylI8?)(`YE)5e@cPi0Q)^}>voqkA7=sOvig3kx8J6Uq)e&m2`m~6RI0VddY{Bq|< z=r7uLa^=oDt~&v_b2rk7HcU|Nlw*+%?nHfqxogP=Wlx^un3E@E#0$@g7~9(Udit=P z@$BVrM+J080lFi&lgk5~7J>9Omfb;h;0rc=^N}A0U66=kme$>H{c+?;C)L)5O#yj;_ zsQSz4zvKz(pWvzgYh*N7e-Htm*=l`^p$Anzyi2S;y*WFN9Qz)G+H;XP56qAO8P6eVd*()~sx+)0h&L+EVhlCUS ziq_{(CyTNFr=aYIiE{ZMP1TI*qZXi`9KZvhEYmfV80TVEAyi0EmQEPfG-ZM)=xb6@<}K7V&k|3zVM8KFOS5RM-RTZL3{DjkTFqA+DiRH9LcjM-&oMSV0Zk8&q=!cjJ-9)71kR=h7n&Xc2R#WW(j&kwdcK1I zL@Im$dT?m9KHBD{hfnr{p0jLvf+&Yxhey)GqlX^cAUy(S(}N35kAQ=o1Qh8JU>7~d z+4S%M=)s}Y>gAz_PxgbJ+iZGjQ4Z45Co<-~r{64SH7c8^4Z!!>#?I$8Xc)*Yw~h^x){F$FJxioI{V_p@-n4$AJ=h z2<)QgM-DxBKzjV3C(}z0p6ri&urn3|K|dNCWj{CyJve&l$yM|a&Y>sQp@-n4$AJ=h z2<)OqeSezzh6khv3#F_g>~!an51#A~Jpr4ZfTjmWp$A7VJpn}z;T(Db4m|`XJr0!6 zLtqy@Qy~haZ+Jj@0-)zAY}xFh2T%5go}f)nP}75>(1W9wo}i+Ka1K2|haQ5H9tTS3 zA+U>{M<5DC4<3-7An3UZdr7(I!IS-=r`D#YR?~x{(1W9wo?1l@;T(Eu9eM~(dK@UB zhrlj+-j&_6sc(2ddTK#W3$|`{(Ss-ZLr+GgwjZu8XH7T?J)EWN>PQ9fK-wR|IrL;? z+U*a)Nsj|1^bpuZPj`nNJRm(8nXT4Wn?3a4$$rt3Wz&OkETIQqhSJ9*da@KffJ@Mm z<dI0RAr%HAO7j9)Mda_%si@x;ACwu?s@!RzHH9g4tNsSo(^Xi*l(F3>y zJ${ECfD1h~l%fZ~E_!|kQE2)26+Qk|Yt|QDda(VKtK+V_3|;LnWM$}HJ(>hf4^oFh zPi`_jxr!dZCFsd@=mEIUV?!x=0PLb?2}GgkL8pxNgZ)9C$Ckn_e*ir8i=KcjpMa(( zpy>%D(-Tni04_mKz@Z1=LXQol=mD^cp6?(EO;1446F~n5+YYdghM^o58Xu*3;mmxU@}ewpWVb zfe{h29GekhkYffWO1kS%<0Ddjc%xHTDTc;EQ$}FwM`@%GCULqNJs7e#bY*E|5)yQK zL%+Zi>sIu>k^W8$E+9XNd>#klm`9A%_{{-WbBJBM%Y~HnV#Fs8YdH1$7*Z)jo0Op^0N5{cW|#(52Ah-+MUt>khGf83;2mE9a-hhxL%H12tH zX9uP)<4OYnGkbJmlbP9OMo>VQ1>MROeD-*Rj0L%BBL*^%QA`QT2+<#~o0DRMS_5S> zLLZ40hC=iRM=SE1T4Gv>P?;W*8B*z=mWAP!(*iu$ItG5il_e$=k^7M#a3!7KzM46d zsI+$IySH<+(q}wl#k(2LY&D9^mW|l$wVki{sUXmRL;{@h7RJexH_|3UeVE>29o?}L zPDT$V!itkcEtL`gI)cQz8O55$*a;9%0vmh$Fv3sMA>P9zp%?}$ToB(Fw?eh5j72Tk z-x!mcGpdY{&+Lq&)FGKm@UJtT>OppZ^dnZZh4R3tN61n{n?h)DC>|`(6|zR z0N;}Hl$5rm&r9mq_jSAULRk^Xr+ zjP^gr!~V*GyQW}$42b-1i3B>Ifj{Vms0K9yEMgJ-rTl4l{9Ol#${>Emm*ZzrC4Qz) zk|$IPng@TW7%&jiS4&UQfdymNqb2_DV)efO-!(;XIb89_wo^Uzn2ans0pBTT6Xay5 zeNrMP?=og^y{-MVe%~}uK&HI+??zp~Zu_KL`U2o>uN!|hTz%iGufyShwdUg(AI3f( zY}Lj1wGu3J=PtZ6svmLR%o!(Tkez4kG| z=Yb_ijkBJ~Ll^Iz*d2cc{w@vRXG~!6p3p~&KMj4p_@C>(UA$+_yUFi&bc7Zy-ad^* z;6PHQ9%)9vq{9G-$e;~>m>x1@W$0t6CQ{Z9VbaL{+xa2dxl(UNXs{XW`7e-|fi10r zwR^WuLu`Bs-im|(ym~V}KOncx zP0+f}Sah|G8c;Tiur2v&8DiS3#q^^RvQi6gbmCTr3Jf#5DdbvU*c|zy97f?e}upO_^YDEP7FX>7eZ5; zA*zm!>SGuGGepH*qArh0E^6{2@zdP;C=Kr{ zi()Id*qNeYN%rrCM~DoI*YL$LdLj=r^|Rf${nv~h>vrZEbs;(1o;B^*D%o0ijmnCEZdsN@z@y(u-mjVsv^J4w1M|3;LyP~;Fee)09Hk&WmaKzbA7d| zjCW!?X%={%V_uL{bYRs_8oAys~bv%{cZ2x-=QjgfI0vr#|RRsZ^!1p$F0 z{iltw>&HtazO7P7n)egvY>aXC2|z{{Z$%|*QOP$>C3~e$SEFKaO8yV*{`f-v)Ut%^L?L-k?d0F5Uoh*nlFx)kXHU0Tx2r zOWQcfuY;aDURgWzgq!ID8)`WJq;7jps3OoXqt&@p+m>uKjCw3`q8St4&|zPdwzXiu zKBII1+M83aGJ2K`!O{inPH7I=HW@vDQ?I(9gZHN0Z(^q|GxP1T0c%Rbr+NJK9k8S_ zG^GWx0+eK%g>IkW&+$Bu&jT@}%be#`rg39)l~Jkx&|^chlRIOi8QzAIfN^`2+>Ms> z+Zyi!bPerMRvNFbs>bdLZD{t}CVysz+wjoue&{c4!#rc~gRM&@u*HT{m{uCYX6ULz zcR1cS*!4ze#gO->EH4e`O7E>7rB2_qGW_1^jV+(&qQcNqd|Eqn*>quT6-pQM;XL|n zShR8G^rf~CadFtX>f?Z4plry8Gpw@khu%jAiNF+s5a?=@E_m)l4S1A@K^V}WDMSN^ z&q{Ese;tkl7~~Ykq8La<5K`=HbLQdqe@-6PpHuXSBa)?#NDgz0e zJmqefl2b#WiqH=xh=!?;-htcc2T>J&_$H*u6f4BC*30n@f0F2!3j1Ivw>iz#+ z{U0a(PYeDx?IGD7b$ri86TKd6u3i6_M1Mk8P1_o4W%Y#~}Z^skfHiqta}{Kly1fxq+6eX2PR zy`-A+&>5;ZFUX&A{#5d35`J!HaXik^$9ekroIW<|W4k_X(8sMfnzQ0Wz?{{l4uZ~< z+hRS?daO~F7LF$os5{02zj+9p<_8J7A&BYmjrnlwLTHj1{>sdJ51%NQ`kGp*u*U^t)@?y< zWV0W@yP+7&lVE`HLvz6T*r9m$j_!Aq_3MCW%P3kaOf13Yf*g7L=;~$4aL{g zuz09Hiw9d+JP2p;HKY5pc)=Y9B98;H$ARc;7Xloa7!y7wn3I-@##*QgUY~g99DVY; zdHUo}&*_s#n)S&u?fPW?27U5(Dl>4V1Vus#2B)P;IY?mp8(m$^z4KI2H4p0QY94LY zcb?VN)x5kx-+5yzPPC&oqw~d2M&IDUh_de$yMe0*u)cD@SNK|oaobbck}#dn-rcKb zKV*Broa<`w^XoZgTXQYTqz8m2#J!uy>50RhD-G`&F<>>%OPl$7QG3~dbv(J8?4Eel zR&)T5E8|ihxKc^XUJ$^^r9u2$S!rf2S-b~sdQZ)T@TE1E!I##I!QD21PkY(Mzen4{q)Q<$XFeX|y zt~_@mif>uiG=lyS0~VGISY4L+E(+_f+YTeIv6+m_YpjJ&Nk`JGC1jOuB1qOIlC=qB z&C<<|G(ywD2|BNPjw8%xuwYO}4Z}`linV7FP)wcle zbzl~O(>X<{@;;g^yq^rF*8i&fttv22Edft~WXD?n^MGTS`MzNJig&(A(JJPLUkRRN zWNiD&3}@%dw!7Ol%G`&d4t(x*)j370O2ZrQsn`Vv(;P6^!F9=X_BUN#rLgC}359`cds~QJ) zhUrE5MMw`0%;($_Oxr-|nCXJo)NVyKO=k4;{G#vh+EG)ll=(W@`2u;}D%p=X%?qCS zJ9zPYyS@|O0Kbsh^HzCXbH?)fPt(&&kZw<@_%GGzD(>tx(I@7_5PpFjCHM&}z>?F1 zdL86lu%5&}?%5YufOV{R0mKz>zDr(WJ`$mUBxgYZun^>pd-5vGk@}c(uE5Fg2Y9JC zK?TRRFmQ>tfKNydZ~ejye`>>j@ymqjibkNma@L1c&iuh_8q6ue-d+4CVC^O6NBAyEu0AELg85%s>2S1gpc4&q6EBH8qQ4UYq{2si0`XkTrE2f zOawVMJOOgBwtj3PFNLd7$Ve6Pc3Gr}ttlqToP~{vC0B*>Q?Nt!B+i~Wu`E*S$MX>Y zJv!2qEuhthVcY5`>L`om^n(LHEj>_6$A(xguIf6Dtp2X3S@y6li}rnM?6{1r!;I$- zs{ROXT_$h&Dt^WNmUEu}D|ZL-Eq|OZYxDUB8fZhL^;S2C zSg>4RK~JH>9|wK$goL#>yBwEauz(u^fFQaTnol8G>~AsVmk~Olv~EX6=s4{SOR;N0 zX>@v}btT|OU;~PAWqMx<>xB0@I)-(;^TtFxS#Y`(7ymlJJ}>|3RCTI(>6Cx&`D*O6 zpi|q{mW9R*-1t*xCD2R)Fq4F4C?po-$r}zo68u#T`XBNbv}^xMel6g}rs7X>TjiQt zbGWX-{+{4Gb|we=7sPB}DZ$}4pNTpzu-pLhyln|WGLR#A^980n*BBOcEa)lM(u8sT zpnE;}c&L|~JrHLhn>`Ld6mvPe+E<8yfORoe1=E{h47ChUbuIV?bx+ZD1;iPh)`<>~ zZ3T*nR{h_xy!u)f z_z?mk)ChIth#~J)A8ovBW*aY$%C5piE=B?{u@al(&L!n}twqi8ZTS1fMn6fO zx1{njNuJgp#w)bZAW@9bi_n5_vsm!Ys_{OnYYBKsLP{aS8vak4?j(}_>viyUf{V9A z(!*b)ky9RkBalMN#3l|6skE4!;0ctZftrHz)65|&LN^vI!?!3<1itAWDaT`O1ab?8 z09S;LlSfCPVM2R+KBlT`7MV2M0vK)~d9_*5MmJr2SYh0s!2K z<0sOcVOn7CAUz74T<_J6ZCg9R5`v)~0^w_qb=!x|c#B*HxZUbot6v7fcZq)nBqV_E z?sPLd7Gj>y(3wL_e8b)huQ%}x`^f1BMULt=qCn;*-$?3=b3Wop~q-^yvz2t6#TaS{jrv-kMi~`i zYrt9|jKal5m={&X&swTS-#p5gKZjHq^MB7n@%z=-vUSc%b%%%I_d}^+gHI8NC?Psa zowE7M1)cm5OK!X!hKiy3_)`2WvX=f8WFD)?Orq~j;^^7`kQl>#su&7x4Vq*9o$f!p1fwK6{`Od?WB{>I1lJ=hz;? zv+-L?lW?34fA?YNbc#7mh#nmdMA?GXHRD7F=7MbDDsAoYf4GXfjjT26B)C7z zn2+Fo{;2HY_tJQ!sM9e2tmDhjG}O)kk9!<;bX9 zs2C#wNFTbB8VP^}TWk&X&_DI;H2fD%qE_ALuv^Hyi*?&loAxA(-+LC!O}iiT)Rg_R zonl2#ZJ9~=7r(7#=IydtH?#Oo_RsEOe}QQ%Yhjy>Kbl4Q1Gr1KKM=9}(E&;#^4n*W z{)#+IEf5tRS04*4^+QYj#Yzq^aYkfmJE30wcM*Tly(|YcjX!kWjej$G+19_X^Au5p z=kSIe12z8M`Y%l*f0zAr)#jw?yWetb&RT+fG~;tq?5(T*Mm`{Mh(n5|_b4yDB^2tH zi#wsWgczjcPo}5RtJPfUAU~<^Qvbq#XnOXQNC8f+L<+977ZT)Z?GlhkdFd&b^+d<4 zZFBVcqptFYc|PmwMKrRrpH%)_mrj3_!JySeU-`{yG+D#p3@YFZ z(wGlc%PNjUv6H;b48i1*<&ODClU4Tw5SW#uA7fJMFO*`S0#Ibe&hcL;vf+d}cXRU> z+Pq03JBPJK9PLbMFQ?v&`cWY>M*Gf1edS6x0h99+?$8yyg3h!Fr^l9&6-fyvYx3jJ zkQ?MNzl9Abuz~Nf@ih*`iSn3ly$SR} zX(xcWpckRIDt7|QHCgUOsx?L~IXfTrhT*zC=U>I|b}%HTE8$=ZB@TxSf~@H8xmP}W zJR%)DDCdI;M)XL`@;k9d2!2-GV<7iNkV{NWVtNNLZE!GECtiHJ*q%t5_l0I#2ehI9 zMR$9$6sTKK2PjEVK6x~qeRR>kO8r;2eUJZOY8p7fV}M~`4ln3T$W}ovV3z>@F%tNE zzklswyd(JC{f5n-B+_G#fb{)}cNG0gH2q2O&K)d1eY|5dzCm^BQoI@jq_yJjHVq=< z=tWRwJEwT^CF+@W6w!;!#IqkIKZBOq@9n(U^WLl$8P@cuj)YPdJ9Q`V@9~Ers(fw8 z9{o-CJuW4D5xmgAil_lXU%$nU4ux(cBy%4@bU5J-aaI~c)?;aP`OO#bw#hrD4xpW$z#wf-THGQ{nZJoI!mzNYK2 zj`^D{t0aEigi7{L-=zGnThr^?5iCBvzI7FUrO&T-g8wUj*GAZVPTEg<^`VRYxs3X7h=Y&leO(J|(Cwd*t3&+z zY9~mS5b2cocS@@7DAo}gg9Y2Rr2d613ELVhwuQE?oOGid993@T@6mJ(uW&k@X^h2s z1z!}7h0@u3SL0oY$Fm$#H9rDr`0=k-I^oAaAn}9wA@#q|oQ59(n;*#BsqqZ7?86J3 z&R;ryJU*{eevJ0Y$Ij0~GK?UYpKsZi&2(L%nfbnQ$&C5%{gspyedY{&9LbxaFGR)h zJG}vfS3g6^^~Vu7F|8CGmWi}~=FAd}Nl#$%5isGTp6F4%Bn`xfds;i4qmS$xCI@9%R!T*1v3vUvwlT zKO;8tiWkV8pRsNbPBLgra>C#K2{?|?O6+1`626>a0eqpF%r7Hm%p<-9#>?U`3XPYK z;4t-Qj9F)4%sPt~=erX+r{V%`WfVfwH+A;`*2ZF(t9AmS=vgWjvQEVGN0oyACmN)c z_5q+YbmmL4F_)h$J z7yYN||NYg*U;7Kl)a^edQTVh2ltg4Uu}JZs|1Lm1`u|rffTFm0U(gv|NFl2 zyISQNJmYuQ%U;Uf@w=?l@w-D=-(5-l&0l+M531$y2U#8EeG!~AeKG6Tw1$oo<5z>+Y+oa#iIHxXS%a;ct>50ChX13I`A?#X<0mMt zw`{;F5NQk63KFV*@nCLo4{d}w&%ls@w>3D170&VS*JzZ;*VD%ba@e(lZ9qqh8D45i zX*0(qFaQSwsuheL1rt-k4`SXbTok5STCeU-Fa$%sGWaHa`;nR8flOd2I~;sj9=Z>z zVM;quAQMt}DeZ*1v?l!?s&T%f8sddL_;)p)khbE5=WQL(ijtI1m9`@403|8PC-;GS z>EmhHu$k3T zERWsJCcuWY)F~!Ohvxkb`uryBwexslQd<7OrAaTu9kUDn4xXv+7#D#0C@@&tG_|3g`dk!9`%wO8V*OC;I6%qtN7B%5H0t@E1#C00MHhci1souBL>36j z82YtX!x5?Q!>BGt90VUJ`LJp<8JtjwZ?6w|6Z0R z=lk+cF!+@D&+%`?i9xf zdHL4`eY)b`N%^ZJw_U)t@Vj}P=+g+)z7Ks$6OV&Xuq!cFRnKUUbsp70+f}EX%A&$= zI~Of2k6_n?v3T3k>^b2t-43>V@BF79knj3KYQBs6`lRN&P6h@k`L4%P+ApPFv}}hByo}8rFF)W(;WSto{plR4(?1`5}vnX@BKnf9ldY zABei<&wB0e7wP#kfHFbLqB7VE%`lRf!kmLoPG!!~Ggc-uXH7krbC1MF^zxtx{7kHW zIeKOuG9TIP`00t=Sg{Tx>y}S}cberbN%{BhlP7jlNY4L0DgMJN&u*#m%qPmJ@?4_q z!Rv1&|68c@zjfQY8PPce6Po}A;&@$BrQ=zh8fR{{jB|1QP|i%Aa*L`{2(H zi5HLfGBsWtmKraPMZKx<;vbd&+J}7&n|Xu8i{a&%!O)F9CKwrbxCD%mo3 zW({0;XbmtdQRJrv$%#`#tT`ledCj=Q?g_zx~m! z0jc`bJyo9uqS_y%Pu>3m`n2Yc3I2Rv`yH9N4}JOp{%Bo6Dt``00 zFJtVztM>M*8T;T*7xRI#p6i9VWQ+_iU_MSF>1Z8*8k~Hf#51agpw=H9V$2U>N!IY} zV$b@P^!dpy=J&921@j*rd=LO|eGYo5Dfy~BzwHF+k+%Tpl>A;7^RrU_DvXCy2zlrN z%D{c0B&>l9(i5c!?KQnFRw35iY`u?!UMKlkqp>dS_#MKbl=08$kc-IoG)ILlj+47VT!ZUEsPNrw9*1FcV>NapZoU zB6-#DZyX~{7Ju*OFYmpNqZzqFSQ@!c4!r%kfNmF1{_@^K0xEk;nUVX2x!jc@jN8Wi zCT=NZ%)g%pEJ7L9**eoZ6cc5vRh{a=G+|}yy_(c`n;E@B$%UZNCUvgaBI3DMU^z#G z1f#*UmlGq=R)=N6a46hup;{eeQG)}B`@h6}#r9~EQczZ;HCx?)1yBg0tOIP!Vw_}X zzjz;6!cLq0qPn496l>Uu@ph43>>}5TwaG848~Q~tx0jt455|j@H5JPA;vN~d_vlks z=hqEImDb6>=|oq=*u0epV;=AHV2_e1yu8aC`4Ds0*?gXD9ZhXAuchR3p`7dCY zJe@wgk71I|{81P2m-Pk5bcX*;tYE+NLCXIcBjD-qKVl#FchR3p%y)H@&42Ar(K&Vp zXyQ+YIzUNIXD-GD=ugw>3wAm1W5WYzj%&XoPwxYPxZdK;E8ppe?E=hA>$&(*-|Gtp zBTUH7x6VF#m&6V_UI?R#oSH+&VXw|=e6>pw(Fk^OW}kkggcTAJN<^8brs4yC5U9d< z8CUXK!Q)ktx$z~|B1Adq#yd29&g3qXfw;-p9?_fsb@J<|fJ3GBcxhpMh8e{+THvpx zz6!>$D~gd)7AChp*|w*HrUx`JNr4@z2sW#TAklFJ3hSNUv6`3w78}$81Ymxv9q;fi zU;)Zq&`QC)?EH?EuHIoBOK>~Q7oGur1BnTY6ZwO}@?5xb?x5Vm@GQU}g|~LHN`lrc z!YAVIMB(wL?7k$AUU_~``6s26-*<wuvjk-flsc~SFL z(|Ep@F?V78s?dSNUn@lfU#n{gZN{e0p{9YNXE?p7?JS&UpP3j8`w7Mi#en&{8WAuk5PS$)aNtM1(OjUn>dpbM(|V-e?5jq zpljG`HV1fPFRl)wK|ZXP3JqFKdg*d}OZ1dY#rQA+dKC5OAJJ2rkwcow@{ypg&!5Ml zLC$m&UzUGNE*{9Q(pB*+7h*jHC*T1Q7S!wW{oXt)8@z!7Y*^ct`fJ#h!&1 zbFL%SQ}@I!wjb@qKCMGqs!uFxE?QQ!$_&rWe~!h6>+{(eXqubf%*%-8z^p}N3_gia z0W6U-So9VfUO`k8Q+aw>%2PBJ5NMNeq@)_BA>1jSuEj?F}$MiU=e;YOf> z7fQk<`IQb!I0-{KTG5z5TKbIrl1^cle zHQLVx9$`P~=(~RVAl!y8Dmv0`5x})_Gcr4$J!mtGhM_74n}A2l{SEkXaXcG0@lbVx z>Bwj2Z$*(XHRwns&P4d*a(zI08DTlO>n(gw-+Wjmt~|vgCvs~Y4AD(;YNo( z^D)(Am(eg8`W%L0B$E_2s4R((+ zp(jSeDmoVwOA>?)uX6G>aGQi1axz^`Y>*Ufzm)}~fiI(n7)izLyJ@4=_EM>=modN8 zFPZ^@i`_Ievr4!XMbiWMOL-j~^ypo-;)`2(T{!^GVX=Cqp{f2oz6K!%g`mU1I|e>} zOe`Kkl`j`>%rga0AoX!bJr9zQBZqA?u<^_MHKMK2W3ypNsDkIQGqh{6bzq(#lF)(2AkAo$n9<{WHGCHQnD4QTIwpHozYb_Prby0~ z1B5x)ZbRG)iqt}K@i_9E1djzhw$WCD?S;tW$5b)G<3jS-pp(%&#trhgKCr7JhWJO{ z*Y3=3O~8F_i^mxOgd0sbQ;Wf|nW^aUQef~{_4#u^85)`UaKLAVeV=~_u za?A5h6>y;mU{h$L{$P3T)$XEov3a{#(yw!=GnE|I8Xx-=Z_$^4@5K&gZjIJ^F0_jt%|t&?Tfx5eR00hm_#hzKB&+I-UW!9hLTJ zRWDV)iE*|dn9jJk4%?3NQs#jqE?rNpfy8nQZ}}&qdGEZ4k^DUzg|e(% z(3RI}-OREU*a#=eiP2W&CL0L_4*YLL~@+YKb)d@tmg1e|D5u zjwWgqo2b?J5EYuJhuLU$_6{Ue$>zM41;Ae`KQO4{1N!-|jfSiEas<7#dfkTBD_`m~ zo3ryRsk`q#A~auGm$>%13Jw>!R*~HycDtwl(!N@`UYNr{G`%# zTonr$2+s1P<*d6hH%;xDd}SLC=q7m3_B-t6O5(KFbra0y>X&x^*F{r(A-yaV zOWFPPFm2sj84a_g2K|Ut=V@5+g#mq$YyDW*g5DO(EuiZSDA$W(%hA+g0|&cRJu2V2 z78Ba3d+;jt`2{Ql7Zto9Dy)2PQ+RsVF+(8R}JIt@RDP4(Pd% zpA!owJajYZ5&QnwPJhuuch63=g5ZKb=BI}Z)9i$Hn#IN==ynkK#p2==6RP!`Fln}S zQM09&KU+BqQ0Xy z>sHXpbp?{+8KWtw`6GS$c4G@z;cr-FG$`$vo3Eq@`-}Siv`)8#54(#fj^uorMFyci zCRI!1FB+goOz?VUQ-armrto^2ovI_R@0X&gp(NsKr5K`6w2VAcm}2{9%z|4RTi`T^ z(za0yR~(K85o^vU8{Gr(Tj%1YY-KN|3>{E35&oxqbhK_T1zo&qor4WcDcc~GZXSq2 zgZUT^Y%pJ0n`kikNHv(h{iO2-vy$joMcHUDM>=Y#IK+$s2+I4UdK9AQnU&qSD#6nsd_8A^?gCwOmfGAz--NuGB|gRsph>WZ_Nv;@BuWu!5t}=DoSY)8-}G z4{4u&N7YU@#~fTZk9f z2D>iz$1z_}b6z4JH1-IO;f}#&w5K=rNi_PvR2o%cvSPD}6pm*m<8NkU7;YXwKLQU1 z8KUj4%*4-C5&#sS-NctvP-r;|1h1OL=p$?!-SBNv9s7n(#cWG>*YzV(~ z>5mlMnq*QJD-a$3k6~urHVV=k0Zp@;emN%O7j^POw;)N=Nq)$a$pxjFRXQw>&}%RB?jGck@6B8Cf$Y3 z*?bATuxVaHzZ+8q%?7jv}g`RLT z8VGCcWzf{II7^9luSpY6vug+|J`HBQ?Q@#-$`Gc>!(l=L)aHH^k~OxM;|fA;u-am8 za1SXY!tKj|fZiF=V;|3{_?Vy7gMCPQ8-7YB71UAN2Nb$qqBmt9N&2GgBRN98K-)(W zG@L<@NgSm425nwRZTZG%I2^FtAsBho`gKObTa*^|bsUfS@tw>K>=JBcmtd>)0OsSG zksIh{pR1+XkTVh+moVRlo`+S8k=yveW>juK&9~1{YBZi1)XV6FC(%7d@>CN40J0m2 z)j>@$vU^2!344x3-v#Tx3%%;}Y*`8Verya825caLk*tn(wo_OXQ+*eWZz=E2T0}-7 z670okQGbWYWW-ScMzrr^?c^fj@s|l3 zk@OK3e<8r+G9ViI?|Se7u40dfj;eqN&!FPs_JzzSa}ngFb?yh+@W?Eo+Apj%BkX6g z#7}nZfEbigpo^3j>2vjtu^A1ks*f<+f_cCLNCyLQlzK6UhIZTCmYpmioGKx{N{s6~ zmvNcIq+GrOT(k~N`KJuExJnwg(JEqEYV3I$*DWJqT*oQnO13YfaSIVi+M^V_2b%*j zUmu4^IR?Kf^3c08>R%yv@zkrm0Q-yeJGcTHR(%WD>iGr&TX8Nt3 z>lEkUjML;TU@3&R9@)90BjPLE4vsZf_a|4)RJKh3opo42#m50Moru6=!}z~DShcTa zyq#vQ;J~D_!9eReB#UF;Le6XuJ@)>XvUgM2`&yL5e6QF&`onUBNH_34sf>a%jB5Pa zkjwEvbg@EClAFahRmZqZHxfzEU`GYbz8q%1?JaHg@*#9aDiZ#XiKwrB8cV=XT-3K> zhHc@aUA~We5EZk|n7k8ww7we)__F*!1Lm3?BQI+z!lYtG{-jhl@{3y?H*%d_35rls zq&z3lIC8BoZnu32Zb0v!(z8PFeM0nn9u`(f*H{#@P^I!Dppf`0DB|7(FgglmSYM(z z3u#T2JcBCJO}W{QdePU(S#=9(r*e&CzKK2lw`XdzWIyHWe?xngRVOl|aPm%{5cRTi zv7#qB7iWr9Y5C4tM6rub!NQUttaVj0HAn`9@4-(%`q-uNOd%Y%12FbSCgP2A`1^^?yFygi@ zyuPR--mMH(_#8AI3bfEF-#*8VrTAIx^#^4K?M%`k(FsyFFp3-njxP5Dh@qFeme6#2r=uCE` zSNu*@i2jUCLx)lS5S0(#Stc6z228dY?wwDqyoaB5^IL~B?~y!7FU;4iT!6C0MvBoq zyt*-Ka<bHry($6X*8l#eND_ZClt4U`7K`Z`s+69`O*Iq5x8d<<$QM&{m_x75Fbe z_o*Wux3WLvKr(~~Bg!)eU>_`g^wxN=IUcsG^?Y_Zp22PjP%K~E0CQp+p;E!7Q2rs* z*FXt=uxkO#tl`%Rd0Nb|d=I*V_l)^qw=tjaM4BJZ>>ZnpG8p_7dM1K4m}_avS^;XJLCr`EC&(9Dpwm?V9Cj$-oUKwklWK@1XB zVElp6%R7u$KgyVLgYoLeSyQs(rI91TYg=}8!|2(-$I-}VRG%0%x7RJp0`>>W8t~A+ zun-u!k)03Y@n=|1{!NYetL!OB(q}HHOsl~Q74`}r86i_b3jB+qsShoWv^8`WQ-U7tY8ZF6p?H6;gYd9M`c*EVdo+%E& zZyiy;y92Fel`1IchtzWCSaYMh!6lYo$IdM(L3s!U*;G*XQBtmyV`Zgk^b?dUtE1HF=6}hCLaUW z=|X$6PEz`bIbsw>f=2xn0yA6XkP&*y%NX--Vj()OVSRc7rCP5Zf;%$lVmx?(PlBU- z6CoP>FtgHOgdf`^Eh2Sr_W(5WkqUTde0wK)GiGRfSThErP?=^JQIYJYs>=;$_lo## z*@DJ4I=UD5UJavEiE<#^%g>5XK7{xaD0l2;>aC;&92oHY^zKNH{gcBd6)=;7-&cte zX@#VXW5kt5mlm+T>gL%C9zueD9}QZ zIUBhIyKAiqt(UHi8Oa8z2oK_z^?(rA)*%=(bm+zHbW6M~J5Vr)9@T+S{25i43S`vP z5|Qxx_@G_3DeK3|4hPzRLbU;kA37&-5D49_)lu+-<^m$d2@ixY%`hO&WofvAjv*+M z?E?gi^8oVVPs)@UCpdnu8-ke*$jUNiihruWcw`Lo3exzeA&URt#spLa{(}dS^kkq; zOfl^Sx>I0{#IS=fL^NqCt}v$#IwI*YU^r0IkjoDMk^;_8jxHhIG~(sL4)`Pb8b9nO z7v{CrtlQBM>S6xg+_nRWzin$VnWtrA4@wu@nSlkt(d@&9)#F>$C5K^gFsdpeGlpy< zYeW^;zl)4M5YV9mVZ66M03F8cD)Mf~hf^+MbkMR10vLS;$YGZ|GVlyCA0jN_TQ>Gn z(Tej5AsHG=Qd~*$$5TH{c#(4KC5N>NpILvqML7Dq8FJ{rI=$Evim_V5J^DTM3U6Cx z9ekbUqHsvhxEsuV+-_f zbF51nRqHtkvYw6>qfa$6Pm#V=au{?O57ArDG_0vP%Zy$E-R*O}-0QtQGW0rdtD&PB z{hglcV~2|ahL42$_^k^v9FMDTjqRWhjr#g*CcWSrlu=YOS82UC{_UE42wNs*N{7GC zMr3CqeRf;o_WPS*UklSUn0XjpqUqFCT%p^5@x%eGOwN4**i*LxuXZTjL%H!d{x?VU zY-W@;xS27>8sfROUY#zw|DrnVMwdHwd&18r>EAs{|0<||==t&|;`0-qNX`L*7W$m% zxL*U<w2ZSiOZiK^f73B5!e%r?ELKE)8!rTRwwx2;~RLqCE!><9w>@!4Mz(L)l<| zNu!&S>hyO~XVUAjLr{BU(EFc3L%yrN)@);E1~zxL zumMwQ{ruc2c1MW*f%lpI8`Q9gq8K`r2Mo;Dt>+W?U#KHDj)0k=RT#LYB;u<>vF9M> zITc)A!-9*xi(Nov_OR!dd(yK<)^>TDsgpYajXy&BxKV}M*6ZKco}$h7&SzJ#Vvyup zsZS$0@lQeSvTDr1^*x81^pEAR;)+%%{)4#gI=*EYWy^`R@ohRmzQu^%`YkK?FK_>1>gitmoL+7o`bxucJDMAsXGkQhki?EFJq7n3 z&+X}mZ?b|c@)>Uf;<4YUGrjHC0w@@8LhG)|U)s<-^XGNjJF3edvgYaht`S@sZRKc? zVokbpcZc_t-W_;F&4{*pUGUO)N%hSP;LuiRhi#Zg&?PCJ9E?#%F{{M*@d<*g?Qk zztQ-6lm#3LDB}QS9AKS6)>$Y#^6?Vt*Lx^WW}4XbWq@+^S{RD*KF``MUbH+DROmVR zW7i_DJp-R;MGLoTD|ydq>M)%N48Pz87sCT6-s+gWTl(};eSEGp<_z#}xQBmu@4ZX7 zWC03Dc7ay#EHTU6L*LZn((qTfTMff;Y5#YSS$q+h)W!Gj@xDJl{rg7av1|ssYczm# z0cG4`ZfjwW-)Oi8zr2PshOwh%P?_vr*_U6j`8mDH<=K-_}vpGJ{@Lgye0+L&= zz<@zLTmObtHRs^wFlOVhlgubn^(*4Xprz?;n~aju#HVG^MDOS%v4R4)+4sqXJcuNK zu)#iSSQUQ~e~+Rol}*IL?J~6tyq{U&q!BjWYo`&$-$svwr(+UNUvi!fx1SD6JZ*HI zo*+-H>eC_VX1HT7|4#z%@~E2#j`;)Lfi>Djp%)z%lSf2cnWJ?g%89?`XnT@8o$oK9 z5Ymb=(TJcOL|cq5=(dHFNA(ypycD1IMtjYb5fBHNA39UTO-m5=yB0^t*Fb>Wxymu! z_@pueV9EpmJJ>c)U1yT(TZ+_a{EuMT@s~L)eeicSOZ#AwBUVyec^cTlM%kgr!ylt@ z4pqm)BV)erv=7E+oSr#VJg4GIbq{OoWR|$Z*B1{nt#bx~Z7{**dZI(0FLg5&$r<&b zG)TvwK^nZ`stoIi9bogP_*vrnXx-QhB-d8B&*6m_KET3Oy%oNz zN^YcJM)A>9QlQr{sj=VyF&%ul%7B7QX3ppb;!jDmfhYzZt_*#Ox-B~-OX`NX%^C{j zh!wjOgeCalUh0~`W1Pm`v|QSw*PpqcpBCTu^T_wSzw2|)`$_uQUHQKt?M>%LqQ2su zY8DuAH3dtGv0Tx4%Q7`yfY`K*)``R-^4I5LP7I7m(n08$@T^kcO$4eP?JNnfWsF8; z%v6SsWe|vKbRc@2CD9!?!Xu_<^MNyz#9mv`2`XP@LW)wCs-596c*$Drz*4FLzCCr- z0u6-4e|J)~b@yP1>R)hIjxF;fiC=Y!U!MMkEJf0}EOY~B=K}`At?RJbBK|AI34XUR z@=|^+l*t_MF1s4r)|)MR&oqyI7u|>aNoASX@QyvT0qsI7lMx_7P{sN;Su2MUNGL*j zs4-13+8f;&cjX`-YQKEuA!vV)p&YVs>a5tCta8Zm8OJffz;vc~B&0X*;{!eUjRGh~ z8-t*>Vb!h3*ZLN}4ZksDZ3sNwYKGs7FJ`N)Ew%A zp6xq)5*hSQIRLNte6qio=m$xN8Gjhn+$oQ9e!~Oi`Vu$(BVG!>+4=K$?citi{FOM~ zPX|F*Df?;2_dy}|3G7wyN2w8gm)0V`W~z=(CJ}kjmg&@>051zHzqDCSwgz~EXgf!1 zCoMH6ftd-;mA6_K6D6+Q+L!*wOx?OKz{v?H6gc9?xAa=oS+`EwWOqg&;7XG#eJ&_vF@kFnTyPPnPBBVw z<7U_us?<73p%WvOoERx#jXY01hAjKy^(#EXn1K}-epSeC)$bO{F+yJxnbsrb(`9Sk z8=TLjnm}np<)Jh*c?l6p!vlZw0meisrkgAjRTqAWBgMF%@oXhgdn&2(Aqheaw^lI1zn zT3%ZvEP(A1o5s;7;L*ngkJ5Bbz_qTP1%SuE%qkA;(L0B42lMV#sy+BFH$d8gb6lw= zImGo^7FYqqdi2lyjp`PGP{_L<2)3nqS;0hEX<_nKG75fH0Qb*DRZxk9dqIgzbHRe9 zkL$1q)IA%x&aEsdv+q zD$3HM`_MlTM&i1H?u9VHh&vjNy$Ie&M^CNp46f#LqKTEr4n9pA1G$W8`?Rv@L=XVj z4RY~(HY(#?lNO#eq#y|=2gkE%1+8D_x?NJ)xL6A+<__g>u1BNo*jj*|7d1_IdKN3l zR=%`w)CgvT2=dph96{cs1EemJ;`l2^Txu28ll_b^ZIVX%QN_>_Ckb?7TyI$8SgLo* zBB{13-<*zLR_Nj$h-7Z$U=E#--=& z*TAjb#X77*|AI#M@F!Gss6WQ`LTf+^w$6Q!)X7GBKKD)z&r8sgF<8O@CIJ6+=#0UHU@@-utEtZ7*V6$NF$F5J-GCO}nPYX{ zjI66sFxuxJMaYPF@lR1cU26YOKA0yq68W>-v@tBe&zvN0BeTlETG!k>I-5cp@XDU2 z+x;oJeGc$CH3@QGjwy^$A8?Wf=9myE{69-UAZRD!xbD0I0=HX0e z1)AP99%#}g_!O?h6kKXu0e|L|+F9(Qu5^)ikBj6j6$Ymf^_xX8MeW}}1KP|rr#p&O z_zClP4;`TLOi?V$ZN&lsb@n`FkAou!#iemD(>;3fem$*b&N^Dig6&f6U`A!`EINaI z?9s}28IWEwf%oP4C*Z!>G>n){u{xiE87=&QKo|~&2HdNb?cv*$GPHah2Xuny z(Q4Z3N|A!r+=UmKjW^sXoFiNj$yJMlE@2ab5iSHF;qn_Da@ds4Tme&hT$qw&HEz8d zEC+R;5T0A3ngPiTS;6>5bO6bw?NG)@o}wm?tiOh$Jx4jF!z@ZMY^2A`Gj;k5|prTXJv{G8`4T)Hm- zEt3x&IFJ)(`2Q(-0_Zqg`#fNRi*-Mq%JpM*L_}XE5d!M1qBTk&oS7;aLV z2?_$&MnS#W@42;cy+lcop9d>{`Bzd3WKTiH3MHW(BxV-^R&5TkV0$9H$hGAioGVPm z=r84pK@<~@N0-saHt1e~iN4^ooMmvStn}p}rK7^PYb6KSlo$d<6SD& zXy$L<^fMY=JQzn?8|Kpuf%a9~X|0wj5C7%j|CtGRXF#;}$RWC3hjA)|fg&{9xe5O3 zKl>D^&9SWaJ4CS)SgE`eBNvkq>I{GuPi+a&#+8o7*;sZYROv0Jk}`qz!;xbi|Pu*Uw+|MRJ_$|3R`Ws`0sw;XmWhHre{c>m&V3-{y3?@OVS0bO=VU67;f`8v10h0G@(YE){J#?Sbbm zT-xW_;$w6x(xJtsnBp_zqzFqRu?LytY(Y7qV!7Ww4#^)(LhGoN#gJ;rczhD=CiU}uD~kfhQF3F=L9z~*9wv`)z*QQ%5YbPCt`zIO6SYl6w`1yu z?5q>$5N3^MJ75n>jZ2gaml`n!5Zm0I{gr2hn{Sy_6S>ypS+pF z6=rqBvoA}H*h!+c#p<=`6Y!Og`Stt<);jivb3wn?hp5U`$X0j>641}o+E&5@ z?x%xL4)wm&cn1A>vMZ6(QsdEx-w!Ll`HfKl*O!%OqrQdN8GZ5WacybH03+EWMp45e;m8{50BI_mw*@g1n@yBsxT^&;j58?LO3+Kl1E#nH59%8S1uCR zumafo{1t%ryPAAL_5Ww8G^9W^a)_PJl^94zIyn4OYeWX{tP0dWB&ConHHz;L%(xN9 zuwv{(M@rmIPQI2O)InCkb=d!;ru4fC-e;~0ao}%c7%kj?sQvhF@HK9SGhb&%S$thO z)`2f_CBN(MRm>NS(`CNsH`a0mUsLeyNMa()*Da7NHL}p1CrfhV%e!BMOXjPKn$qvO z_C4mSHx7cYZ!h};d==93j~=oub8QDop~D38hNs{>i{mk!Wph}fGx#Lh7h{mQ{S@{{ zqfP`2lnwqso{>vlI+IEwR&9*2P{#KBBYpoh6Zzx5P;3Q$DrauFDfw#xxQjA+5`(yo zCW#vhwnK_nA=fjGw?{V5$-Rq+@n_+U$j?prC6X@ziicaF@^TU4ND3{Gv2j28cBF!b zRG<@`PmrZpayRBsmdm9q761Le;5Q!&wxq}(;`emB|1bP5rELDI{NC_;{I;hoFUqf0 zT2G8erTB>T^Y=dpub&HF!uolq(bV2=b}h%nXrtf|=nc5mR9r7ApX{wM>eiU}hTxse zEJ63hxBVNoJ;u8#sDaTIJVXt<&(#z{-2Txg((U|`(e{zIfBG)nzWHNuyIb7;F@(6i z&HqTZ(`Gs2>(@o@7{pQ!&*!?8Zg-W@?bz~KO)a-CK1m zJe02|avx&5{qX9DvR88Me!iW0qw(*FoZDR^Dc+tGe=?r7Qa| z*uj;P%9Ri43coZf;PNR~R??L&d{6xIe8uVx`{>GN=pkSb_7~;K19XL+WHNqEM7Tc$ zZ&KsWANZc%hU(wmiV;Tycj+$rLZFg6uvQyo%t5}t@jbr+#9PTXMPxPSiqH#A!89|% zZC~tb&JXRv7!Kpd%;m*)VPKiToJ6A`^Hra#yDESge9t&~DcG2Snu(16e}IqIH~%&t zG}bX%rCfxM`;ha+`Or%Jnf;W?O`j zTxos}zV=U8ki+&eykAOB>szpaz6W1!HJKnIPWK^c0RN-Cqq%RbbKG+qYvt)N-iqRW{fjsWvNV&ZH`srLQySfdQM+Ol z=Tm!mpo+F=6U9!mKw9~J%w?|qGnJ{`WyR-@Yu*A}_I=HTI)JCRU7B|zNltsQ;e6+j z%z(><(hbH#mWg;KwY*)T_b6yMqb(BK6OlnFy=Fu!e+cD0nAZlik@RaFa-?d(g|NEm zsb^<=<0-xnW6pMh2CY=*d&k8L3JfexFFw;>D_e?tkg8rjHn`$@dZisWMS8t}UR->( zf8lRrfC{QSe2MpH|H`9H8lLkW>0f!Ie#8CVL;V}pz$$q3oPx*f!WwxGYn6wa@D24F z?!^ra4`M=IB&0SmR3{fNl=pCl%ER>m(eNBPp5j(Cw14DQt-Px8P>0Gh9klXozKy4A zI&PVNn3!w0F@&V>rzn9e!g&~%>pY>*RvcQ0Lp&cs)`9tVo4sGeJ|184pV-GgH~ok9 z;kN99UauA|#edH}E|S4-+lQMhHt7%8he#M{9~aG2whwV@q{fbOm3ZI+VY9XOy9zjb zasFX?SSnD4`;a_sqgGZ<5bO+Su(R}Jyn5|x{qzC7@;r8@?bf5QgSJU$b6*-FIhN7* zc|s25(8o%^D^>x_KU6dwL)3fTOC!mC{vhqxQ z@0JQOtb~Oz-f#MQw-zrPChk|<`ue)Mgs8$yyd;oRr!2i^(cHakf;91NIb?$Pwp5<2 zA3{QF<=s-ea6k;VpGuGkER4c?)aIWh%?ei`0~}tmu}UdZaFUDHVNSh%`I?C zT#s{6VxF-lo!Q+X4qL>bk`Gd>pi`M&(SJfg@oishd?!z@A|DPMLWwmm&5gnInvtL9 zx$rDj@F1eaDZIwJtB=~6Uf1Eui2}azNxJViIv;q@tyM-^35I^OkTcd`OA4KDCY+NRuUC*G{vH&Rt;k^&dq6eo|<;9DaT}1y>dpF#9 zu;_(dh{^v~W?(=}Mp{MQO-MVaQA|2|WYh~OY``}JKg053z5HsVsz<5*#Hs3qQoSis zy<)C-nH@Oe2@f+E5QkE6m?sW1`5=h=ukd%Y?Ei|tqz{?D7IC0&P+YVlf4gn`?W11o zf0sXZsIz5^>CgO)5Qib+&|e%<`QXf-h)NXC@SI;0vN$g}H9D;c#pg}4JED~zKo9tx zQmcn^LMzz~Tk#$A9)ZclHqXE|=_M3PJrzI3!baCBuF`0}EJ=pUx1#y{p*~t{x9p11Iqo?f<#;KLhj*0PB z7ki59`WIb+g!S_GV(z@2p0+*j4#3CM^KL9IKG(mnl7;|?A=2>RfBP#u4l#~j&m7l^ z!(nkaAP!&f!S3Jx0l%Xb{IB_4w*LP=zix%m|Mf44-=+PSU!OQUA`Y{}A)gPC^8;fM z4&2oCi}_({u&zglkD7O>x1z>-rlGcs-tCh@&8L_E#`w3*PdR9`n{-Cw8fW~&MYfL7 zxSGtkxdG+{9*4^){SAIUlhoHheyN;aQAdPXO!q8)gsLz$`qg6bRv}Ng;r5|B;CFr2 zjK|>Rd}z6j4m6WRoe0bf&_q4W?2$%pXe8ZkRMkgY{X6exDx3*EB>k|-1g(oFh`pQC z>j=>H9@@YZ7y#C(4}qaMUL{4Ncxd6)@wpkONu^?PYS5H2Id}%(LwHm+?y}a+=x0>; zr_q_zdqA3)5aA|*KYISsslF`!M$R|+%MtvkHTU)jspdMN1$L^r<=BII@#im#!S2O$ z@OaO-=XDF{r@d!mi!>B4h07}p2iNkyCm9!7$gZabGk?$ZE9kHz_zjHf%YREM7F+y9 z7}uFtaAiIZ1!bi96w&9oWL^RHN3?a=6oN;Y&@ZUKwxl_u@MyJ1Ti0*K)2pe0Vj+9GyvT*()Q&| zzA@0mGele0V%X&Lw2ehga5`}q>9?;i0e@>|tkVPe-J>&nXM%qnlw30a8V@6lF_ZX* zbTvk$ad?=T%7=mcE22MT@i(3I#{fvCFN5gw_ge$vCK%r$XD+!rQs zr%(K6w84{-XpaCKc#Fi>^xx#GBJU37%Rj~+JH$WHA2-C`#GjtFv&c0lZC9Z-C~cd{ z*S5iUWmQ*SP4`{tr%(Q#enuC;QUB|hszm-J98!sAT4@c+ti}xLl%`?{9}O4&!)8B> zFBkJ;%Yi%$UBA}6{P=93*92`{{)}I+Bh!<1dTy3j^v?nj9vUgkt?y4vJ2;2DNSDF{ zg_m%^!@N# zf9v$LeGWuo5RXO!^q}z)h$oy8S=-<%#*5c7Io-q|KMEZE-u|w_i0_x7+@gIg>MYv3 z=Vpm`?LCy!&yAPwseumh@Z}$+c$jNeb!1~};N?Ts_si7aOqGKHET%NQ`-o+b!(8EGdp@5@MYW1xj^ zgl~67<>8o-{ua$L!D8&lz?i3F)3t;cdbu@T4FXYm+OBzx1|grgL23Kv!XbCf{tM>B z`$mtzzD>U#$m|^J&zv8Jp(O^bb1xf|yvuv|g6=&O-EiZ8KA@?wP@uB7QbRZ8hTX}Q?jHgiz z#H*!|xxwmAY;F%ORs5xJv|1f>7bXPewGQadd(XBms^_gZ1Qb+E_^PdfGwE}q}VW`1rJjPk>9C5rQ_5e19P&-cH{?>EXva~7N*J+J6czSbAb zPb<9^%7Rn$x2B^`Fh7_805?y3Xk|YGSf8{-pMSO(XWAmM`#t`h22`UhU!()K$n|v} zw(Xv!MtRV0HZuD(FHHx+Vlyfa#h^isjY&_dn9~5(+dVq?ekK}p--+Nmh+=at(Yz&; zedTvC+PWq^@YTV7K5PuSRTMD}j_1b4=%y$)LOkj2#kXY8i#E1nITK}wQ?H;a(IZ9` zYa@US>koxf05`zF*e4adoTw9;ug%x@0yn@#-U zGYhWgpAGLX$cExMRoGup)q^tG?3#~@^p%L_J(MBvI zx=DZdZ+w@3=CFHVqi@SyJqUnWEpo&_`)Lo;f;)8!=zcO%rliv~~noSHR<}oB9Jpxje2={^ZYZP2EM&n5tw~>jPqT;TUaJxF;PPF6p zmvPrTC-kkjP0@FnguA0VQ4pbTeLL>a$r2CaP24OMx0{4p72z ztD^64t}?-I2PfRW&6IJu-ma5zSO1UTAy>uiE8$kBIPef_*Z1Jv5)U_-xKS!@P~zbM zC)_s`eVK0W~#jQG$6Y@9B33pYYjLY`WRmOeB#H|^x z=(}9PU3awu4;K_%)_2DwiH89uZjOpOT*AHG3HMbyZjp?8>>0ts@o|d2og~}_PPjMO zaXZMkkD0i|D(?BiVSeAb%7KTW1vY-G@057xW8x;LxN9Zcu}-+JD!9z=12XR6rv(oy zvK1a?Nw{@aI_P_o9rsch_fZo!MaAtV;lAR8`%Ave1MBcOx%jGioRY6_eLjN zBTvSSjzW8JkBqzjDZxXQiaSBVJ>AWLhitpPnvDC1iF@c4Mc>8}?(56b$o{k|gOwlQ&QMl1SulW?zd!d<1{G7mS(xEuc>c*s$4 z8%wwclN@-+vg4kJcY0a;(Jw;v};JltvGt{A28@VbOM&j~lquJ4mFZX**n zMa7*U;dXVxU8CsB{Pve|*E}wGsK`?EZ7kvL=;FY`L_6-$2@((EP2AoJE{!jIt{Wb~ zm@nWeVq8p}(b&X?2<|X8nbg$8q``v+W0P}x$)IRl5op<)0i>~s(uQFTB+3{q>$LeX zQPxLqRLc4mLyErhkw1mY>aoTqJ(L&_OStFp={TCk!FNgh@%Nj!ZB*RbC0xG~?w8fF zEwv=vl`?KC6L-v=aIuM_U;%2=ua>APIUZEE6+-Xj@FDQP@{CZ{FQvt!lR26rugxlN+_sdx}9=gf6&zZRAbVc6= z67B}K0}pjdo4|Iq`(}xUAtvslD(=U-!u(Eh!ri-8*0(wN#Vi^3hed*iHY)A|5^iHB z+*yiWaJ_YsahI96tA{E)bdYe@c5vX~#lOn>UPAhAA0zQ_gNfTm#XYz)%)hW{|>zCgBcu!d;`ZLmVF_$+&xbf`=dvJ`90ar zfrl@ZxWo0!~fxYtOy1D$Z+R@#e3dCl;Chk-f_jw8TaVOlR<+44rAbnrYl6bhx z#66d;=zF7t+t&&AZ6!XiJ&cxdH9#wJcJ`3}3q>U2~O23+UIDez0@BJoj8x?n* zgzI<0ec6t?QpRm%;;!~6JlrGU_H@GCqV!YQ9)`=fAC(Fo`lz^IZY!62=B_3`uaj#Huk8TU|kmrQk z_x6soUKyA5?J47~GI58gxI-n}s#Xp>1njs6hD$t* zG;#O$RrIaf8s=e|6YgJ?c*b_-m2po!B6ygp;_i@en>*ot@|4U&0@*`18TUC8_go)E z-+2=527J8TS`!S-6HHd(8MpJhhexPNaj%hZCpqEnT_@|y^8~YG+#lu(9@?n5 z2e*XzZR~`*=tCK|74gtX#$9IOu1-^USR&!BZQ;O!8qc`iwr5B@++gDNQE`V#xD%Xk zyWb=0%l4Zm<9=5xc-WSz=zF?4%tJjV+)orgW`Aod<1RLF$E&!nNVu;zcj7@A4>1o_ zy2L|o6ZhD4ioRnd+|f?BA1d*Iai__+U(XXfJgnk2kZ{jm;-K%R%6PsJ*+X*~x75UK zq~fmI9OieW6Ygb7{N;9N!%&Hbt4-WzdMiBKBjFBr!tHvu%^oJnxO?Ub9jTZkdF8ps527 zJMNJ6W!#ekB_1Z5xZAob`u3M_y-v9CO8n(|TQ1`^HF3wQxIb-4v=`b&BT3J#l2C&o#lk9uDNpjeO$(^Z{jvm zaqB9>JalrxjkD|9SH^wwA;H5l*C;%EEa7f%;=scwWj?hD+3%5biHBQE+$&Vv2PE7) zC)_8M@q9et`eob;GljnEuU7Q!AmO%k!fn4qt~c)Y^^|c}nYhDL+#MBReybWg@bK&_ zGA@tj4|pUVMw+<$uTu1#C*e+W!fli-<8plP%DAVB1P@bH-0LLV=1#cfV{N$IWZdUW z+;dkd`X2o_%)^F84m`Z9__65!_Lq1VV&Xok;yx+iPIAJ1ag3}lx0|zM+#d=B4{cQ3 zp%QLmC*0FYJH&q6Nyc4f;;!zd@NoL0Fb``RI`FW{j=TK^iH93Z+&(JqTN3UBC)|EAh7(+1c8@5)WNW++iwi-G(p^1D$ZQ z?D|fSaX+6Sc-Y@X(f2J0H|TQU;cI1Hj{TyZj9X~pPE~PlmvA3wP31 zE;Dh@{YlYRlW_Yw;ohY5Q@P$o%eb2#6g)ht;(ok7%1{U&Z3 z754!N*YAXzY{y+G`t_rv^pop2W_@qy#|av8U&i924!Et7D&IpOwF`oC0||GQ6Ykr}d^Owe<1%i26St9y zyZ5~?znz?LXBNx)Y7}?+%D8XdFL-#Sqr$_J67KeB2OfS@?3c$wM|w*<++yNhq2dme zaPypSZx|)(%l_tzk{Oh0}}2uC)}5m_L%+HE90J;E_j%#;&za5n>*o-w&Qk_ai24B z&t0bIyQ4hJ?}j@1^|+lL$cCe=k_>wrNqN+Cho&3?voPkEGOI;kF0MD^-~|0aqFA7 z$D7Og(!O|~tI=rQQ{Rbk%{}$#COhq^*YE)*-n&klz420v_~%}w0*gKMhfh&~!+YwV z%$IfIzH?nSsjM?52@VG-I=R*|q}WTogds&=36J^H>m35^7bt6Y+~&R_3i_!aGi(rRmYUv$31<8#KTk*_um-K zOV2&el5oqMa8D|>&wZNbW!y_l+!7Ucw1j(&6K z#*Hy?ziq1MTTjC6;Dj4c)&$w#u9IIPP2A2Z?gmNU zk54%8aQV+N4-|Qgy(07nmwlj{C zm&&-0nz+4G+~E@LD^9pGDr8&?preeBJ4rnBFmX4biIVhfEaBehggZ}}D`Xz-k#YBr z7d(tnaW}jauD8?wa^RuGU|C=8lWQ{WBPQ;*xFqSjT*7_c3D;dD=`oM16&a;S%nX zPPo4)?J>8TZ*`P-xZK3;tm1Z)aQi#qo>byG^E+0?-IgtQco!5&^%h(iwuhrZ2OcVv zIEhXp-k0N+^qpbi4pMPfO1Mj$aE~i-hxvU)#%*Kbu8)=VrT)6l)oLjB^{-=Gv#$@j zocj8mc1wMIywNKDCRR-J^-mq60*Cwhf9@gMQZ$vdxvW#^SixaaMJHDSsjMp*QuOul zIy%wUKcwLDxMo8KiNmW++~+Vvlj>&Oi{ZK%?u5J8jyp-l-E)i3_i7dQ9trnkZMe=u z`li}(8_T$JP27)A6iMGpCEVpsxIMbt_+5LM#6uSocchA2{X&?Bflj!K6ZOIxm!aXH>SAmbh$Bg*6>xTALG%Mt9krE@2jQvTJbpSQW^JA#>IC=Lzwh-FQ4m?f%HkIOGcTWbP_M( zVkYr)I9`5*N862&(@^k$Yb=slS8yv`>4hu73QK4v?*L(~j2~=6lK=8=Tly-JFS5&DCwV)&{Be@Mangn}i{$<6@<}BB^e0>T;Uu4Em-i(3_a|)W z+md{?U0#pmP3-dEJ&-?p+=jE8mp3E%=C5t(&rX8;7Q6f#l7IIPTl%deFSN_wA$fhf{ArRe`@0QiKFPb- z<@b`j{D3X}D3TAc%hO1{XTL3dN0Lvr%NvsX)K|9jC+>v2)Gq&uEqd|-<{2Y{1&_X8Oermfd{fXNlFSX0RB6%yjyprUrw%KrABYAJT{Lducyw#Te zA(G!>m)}A1@3z>|XOO(mF7HnA`gVD1k}s>a;Y5?Xi(OuO8|3AiZRvNCe288CKFRld zVoU!5$tT<8K9Zl>WJ~`b$xH3>aU^eLm#33_Rh11VndH6g@@6F8ywR5a?5&XBVwZnI z^6x5b>9>-+&@O+608e9LZbR<>@3}^*0+%GRb?}<;_UG`CVK3vv{Lh?JaisHzfaVtu6glk{8(;-+0T0w3p;5cKOF7uXxjz{uPpE+2u<}e(0~Z^hG4kwaafOd6Zo~l;lh4 z)9h+XehtapcKM|wfBSV?`Z~P3t=40gA0>IsYFqjpB+s$S*OC1AYqs>ylf2k2FC%$^ zUH$;cSG;P&8B6jMySzWiD_*gs?@ID4yIdprp;fl@r^iB`YnLA+d6ZpVP4cBL+i>0@ zx!W#(lH_l{WJ^DfYEzR6{MA;X|AM*A_N zN8b~Eq&I$GdJk{-6yLKjUJ_RmFp1hiTmMZP?Xk**@n_N}MQQ5~Me&dC#gAzI@pti~ zA^+Gdel+JF)#67B{;@&)xRigqCVsT$A5VxMZTUw4KW5DBz7=`3(;lnnxMiWM03vAH z*?XozUZe15dKPAO?m#+Y%`D0|jz37#1h>^=oB;yVg&+7jU*`@Tw=HaWm5{}8g3HAZ zs9mwp)e1kt$Y8^5d_;(`odFn~cM1N+Afc}kdAMtH>gww7ZLAaFJB$_hvPtc%3*pMZ zHzJh!C>)Hsh|_&n^5@I(Wr)6g_{$ItLm$M#hapzioaYZiT!w4W#+87>tToPKLWzv) zkWuhu{sINnAnK@z_97Hcz~>%XV46G;%Q@|;_&P|8rY~v7LDU2yRiB~I2NT@W>Emql z2Wa>jO9dvV#Jshb^W_x=Ubr3kj#yYoqE|OeH>lg{7L85WZqraN_`%s0v(13*n^K-l6t2k&!`&>rrD6~WYin3@Og?Ja2 zjS-)c>PD9*VR`AW$WMtAXa&u>>8K@SCG0?y4&R3q*FDexb`Wy>2CT=3qjyU z4;J{Le6Rg5eGZ?_nLAAP z^|L<4h0nbh4^>}atHS56O{)28YGbe>jgPFB4QDX&7^)TIK80#ZM@?nHYfc8=85W2g zN$eX@h^mw-k(Sa>*R)2A4^n}xJp7s!m+7yU=^vh$k#<%q`-Q3$U@26vq|D?UnaQ8) zr@z)KFZ9pocw%^E?aYh>8ga4pU=}1g zR*Az0;_x?dcvBq89*51&_?2u{jlU1V7EuTE^(xpRc&2hMsF>ZCs6aqKF~Mn^(Hr;D zMbJ)i@;ta%Q_IZ~QF-nv!^643X{z50`OmZaEdN=vkM%tN7<4HN`H!NHR{Aq>;Ls*i zd)$H^_7kW<-#-iVYOSa3(U!c1OIq1lx)lVQrk|fL%pQ#UqjY@ytjtddU=_*R=o@wX zfx4aap>mk;Kw=j`M`?BF+eOA3n}l)TBE6Cv^_0zu;3S7nV7qP@7Ft$%eOoadG;pmCjvR6;uug^ahg>1CI zDnMqU&CiV9Xvr2Gqv(blGX1!uCuAb1XQb`Y$`Uy+&+eR>nY?R6D2R^exNSsqjh?n! zTl^Y_#e910eXq_Glo6e<$-wBgQ4l;c)Tkm3B9iXZ%0A><;1Ry81b_S`y~KWofvf?w z;uKfp2uv{-9Tddi*_@`Nb1_Pw`*YpY?%-o+r}5puv-ob~Ha*a!IR_t(kn{(%E$Y0G zk|QY8?J&PuToI= z?XSI&jysR)fikiN-G>J2Mpm53qVJxe+$cPmA8_>AeHtPHrgQdETg zO?bZt)^rNs^ar^ku6o?8s-OK6)ZxRcetd`YtJ!_KZ^c#Tt{W7ZLLoWVD)vkPLa^RV zI!x!Fo{Xe1D@4+pg9*WpS*V;!Fj_8qV7k5G>tP>cQqQ}wr;LkEyKg?P-R z{9qhmbuV@y;L3j`)TEBvnQm6*?K|0+wp8%p1wTk%6w!i2@Nf37-D;bkB=HaK5hnuU z(O=p=@75wHnjQB(YAvc{YkrF8r^1D|<>^{E*jU(vw?U;^72x3$lt^?5bRV1u6%6|{2-Y$gTQbl-(g`>OHu$E<#gD8+$CQHpT?Izs=ug#DleBHM%gqyS34z8LV@ zqVxDmb>y)I3FxT6jK*OgF(Z~fRlB5y(v|T}GT(!78@N~pw2~+IMx^t1*8>kD={c?J zdy?V1s%1y$1htif?yrt7tDZia)UqpK*?mp#gfF>*oTi*zZ>(HCrw=_7dKos%YgRAeq^?NI7a?CO4?wl`ZD6&<%= z;EMhSg(nILR7g7EkU%Fn5P&Bl(7P$M%J6-}{68WNv&3PH57jU)!kFy+krYuMNmL*5 z82;k^JmaF?jAD7v`NYmSQk#`@RNL%s`CZ35l265-phM^uaEgY492X@NNwu;^sKkf_ zYS#~QC)7OP^R_vn{|60VSuk1LkJ{n>-+IyflIbHL(%0jo(N^LdA19{v)eYv+9?%CW ze@k26?%;Bx!-vfDnKE#@R&a}8h@7tE2^lgOxRb}tW#>VYXtMpe7#X7dq?RRZ@7&=S z^z}d!TQpQp+fg(C<2_tP@CrBJpQ8cq8KEJ?ayDaxHk1ZgdNKK+`_2X5HcCGr#i-Hw zEqzda7&0Pr+E;UW<>hMSEgI={2y!69E^m@j|0A$ zoyg7veQE4(scPhIu(S*{kCE+TKVgq4WRFP{A8{lt{6Z5Um9W zGaHG3t8gE^ECfBMUweyg7I{|OFx=pe?~_dZT116F{IA2Q8-vy6>;fZr_Nvb|>c z+RNn|!sQ#E6e`~s-74SRqkg}9T{tzB?^3CJ%e}uB z?&EU^y6**K}vf!%|z%TGY-VJ zUO`=>CZeT83O4iv>m-p+Pz1M8)0aB77=ux#jRON0D~pQ7CCaJ24u)aOT*t03>Jc#c zLD&`8U?S|roUZ^WYP^XE-k7B*t0K)POm7K|vrh2DFf>PS2dg4BXyqUUHIQf|ye9Z^ z6Zuej6lQ5A#zcehIZ&5oINSfL4Y~QXKky+f)1QusnTi{4bpwsEp*A zOne3V^uCPBGnf#o$)w&Y)lhN`Rc{t?iE5$xMC}3HiVGMBcRzs1?BELHj&i1Dyg2ln z4|aZczT#;rw8MNS8ymVJY-v2AVoS4(3?-)i67)e0<&(|jQxG@DGtgB~MWiJf_vS^; zV#8Q6$+FqHc>Ki;yEWdOj&gf3+h{ycj4})h#R96}i2ChDLp$&H0GtkL;4eAkFAJ$u z3o7QhD2th7nJfv!zj=dcir`eJXiP{I+9eUsI@M&NAR9*KrUIaZ6G_>88VY>Sxfs}k zv9QyF77LOqGkjY^=CUO-(4v9qCMPm|=#B2dC(JXU1Dh~9Pp7oSqu{n90(x{Nc}J%I z307?crV9dFNNZ4eP>g6gtm_qaM9C)PG&X3h8NEw6bO#5NPrN3RAa9 z^PVQiK#QA5dzjClJpjnugZ_5EJ%jwN;!cyI2BSmQj+_p;_QSNn804H*qm^C;)@$Ek zjc9s|W{^=1B%;3S&^{twr_iKBF(u+0ITL~kuEYGa<}JgO;ei$&Xugv)--(QS?et$C zhkO^*6?8+Xc4nki77fvTi+I$Zi6e)aP?Vtx^=_JiSVEDC=IyqpiM+Y0vNKU%S;6)A zf_(6AM$TGxfN|n*cn$v=E`EI>ezl(qi+WEQ!bjLsN8->n{>_CkX(b!Epxkq%-Xw~g z-ThSXS`o1VMbTssD1DBeT%F-Nqn|#gSJq*&<_rn5c=)*mKCY8poFfy1D-#Y%g{mR{ z@u3$&Wu%J0_9Tmh!?thgVx;1j3aPZ8C*!uri%6YQChTmhrW@a+!`_V;B5I>+dBn={dR`_2+% z2rbihbOcQmvxgBDYyh5Q1q7(~LZ(uI5S=e*UN=OUf!IQ_-R$AMF_m${ zeG@Aa5Hc$V`CA@tKM7X-tO$(J`vzm;3V|B4Qp0^MDg_~F6~$7uf=u>Bf!zQfojWIJ}bJ3u$A|S8&pIE9pMd9s1Fz6fcgG5=z~BR zeA6r)#V^tZb^}FBo)I5Vb?=JS9u*E#<0|{Wtg_jtvcCMPB&xEyirQgl2}Jz#H31;a z_Tdfyn%2R#KsI2MoECvGg;FI^-mu;$%%UtZi&7F<6hr~)6VpGM#ijz&KRU1AGr8c# ziZ?h6B#Xmi;?PzcO2pyTBE$wAOIKoaWb@zW2;KXA4*733`ENGy1$P$lUYG@mP*56) zg$5UF=V7CF(-rn|B*XM0_#%BtDy$y{Vqij$J=!Cx7@Q#Po8tpiD~AG$BUEoTVo^?& z@k}9#Fc{Iu-d``A3f(=Vdn)OUD(9{f%_665nUm1H0^Ly5_mTjQ_kx?^w`99k~oSzp!#A;C0k0Vr9&U{2P3eWO=5BZI2%QrMdQT`eiYe_zeb%kXLc6-oD zgM?(W2~p`NAMB0Ym3lr<3M6xvB2>QnL*=9R>?1I~i=vwNg@!^aZx>U1zBsRo8LZHW z+ER26;h}JBI_4^XX?2i+Wg?R5{$QvL!Zspw?Wo#$4^N!vtM|Q4I0-z8nq<*W(}T;1 zVLiCWc>PtTqL(<#$pa&2%(kBhiKy?zzr_c~f3rUaJ`_(dsyNi4)=3WzU@2kO5!_h@ zY9Pq4V=HMnj8In-i6tjAw#|UbH(Qk$q3{0R()YLOj|gVlf)4qVDRs_vAmGsO8=bTK zk!0votm-VfkN8B5U;|f##q!c7>rC}x1@>n}BM})(IKD8CR==5pO1Q@+Y{2+=71!G5 z52EZ1t+G4R*H^ak!>yZA;ZOxMa1O*?W|ct;{28e=FUN4p$Y7nl>dn7Uj4N~c@zx3A zKgrh%{!R6T-EF>&bvucbI9lSTvS_N;yMj`S zk|TC$<@s@SqUf_Hi|R$#ovHiKR3i}z4v#n5-Y(D7A{-?7MBf11#E6AKcq^HF@)jZp zEWxr;ztR>IQJGYdcp=SqJh;xO(9xpMkG{lZ-~9l}-c%_&)xXkT2Xk%|iDO}sbs`#4 zTuNmL=wPN3u-4YmKl@pChHs1SL^^AdzWbX&4R`2){LXG)zvnVAYk*$`so+?pyn@Q*Gkem!apxT7gV4BeK9GCCS)cx zA#iT9?Z;57pape?7UDWaZN=w`wMQm#Z_rgWNxWymIOevdgaw!3Z3xss6nzME(u~6t zR8SO50?-s6ayw4B9XGB*`=|TwLk1jJ(M6|Za*D=g3b_4rER0XVXUlZdvhhGD>p*;` z)>MSJ63j@ydI|MJv*Iu-&CZ4BL7OnFX-q2N{7qD3gl~>&@BmZ;lEJEssmY=|Q-Yr& zuh~{!^`yLxCURcHj3}Ru{T)5RxpuTT`^}7V*!93Qu`BZaAxY$&6WoftqpZBkI#?73 z;?G~|kau~rP>KIo-e?}E&~n~0%)GOMTa8oGVca`unnbae!a4S~7^M(>OGIm;Z@Jmd zpe@d%{znsJ6Attk=unfLKxq>V4IM9H-Ypyy@y3i=NHUYU*HlST*twn5qS+1dH1SW> z?=HK3P(kRI#rjcpP=VUUfUE!WV%tTc@fT-JP&n#*BG5>Y)Yvx-J;zdq{I$}T$e+C5 zBZujTX)y0B%8;8W#G{C@7aZ*auKZyAOy9OlY+gcGEa^uOmD!IL0abS`wy1N{0@Fb%VLv{20yKdF)NFND6`;Om+RmaoIA;_wBYEox-?q?J z-mR2vPGAClcM^AkSd(tf^)o{KPvc>e23zHTIr_xV9%*Nd6j4- z^BzShcn)gzz+KV^$y|4)_!~+*FsM>d+}Ou9Q^1 z;^HccIwWl~Ytiw-&KYSoMbXK7)}t+6#WwQ<=d6{t(S6ueTuGY-LKa?UGGwQD*JH3rb(Leqj-fQN zOiw+aEw~dlG&0aGY6N_<%#U;#Y3H%)g>OK6l$ngxzVl`z&g@u?_|iuNERGjc^9UNK zac(ND2{eo$jDKMxpE)AZ791v?K~YXs{o&A2|z zIDx=j7BoGL>y&n!ZVxSO?Ibq1pAwA~QbaPbE{Qs3vy|)DB1kA}E(+sEl2Nfxte5f@ z_721}rl zFh$thk%3rr#;qELS&;LP`8rwz1^!TF*S3?)((Wo3FO3i?QIPQg4 zD`ZCR$4(_GLW(0FmXp}EF-s*}m23=U7CvcC3UXD0PS_mJpoXXYl8lGIn>7k=ZRG)u zV0(Y8{)Dw??pK)kQw-($;#;&vD z;3Uhe=ul^v?1*HRhnr)OB;&RtA~2(VZ8M)aAp#M?bsw>3p8zs`3G=2P7|p4GSHm>q z)?7UQ1+#-8(!RxDb8O9wzV`q%m)L#PjOI0e!VZSn29HnIlN_7zcb?JS+66C~+ZfM4 zM&hO6hx>!C>VDT3XL8^-@t@EEL}U>WWD1CIJiRj=;mJ!+ zP()oiNR@JdhSHAF)& zXEx1aV&cqt=%$7zDal^bzM4CpB0P#l9SL8k2aBL@^uPl#1kM+ccFUZuD9A6TQ4oL2 zU+KUlKv|{`S-BJ)Fwcw~c-S%S+ZH^8_9gfNDA>uj#BZbnD9EuWz-{CRq1!NE`{5mP zpH@MFH6pI|#C66U{`fU9yie^ORkKjVr$Y8F}`{@re3!tOK5+Ts z+a{OEn#ASR0Px38jt=d4+kNnQ)Fkccd+>_i-}Ck|rzQ$JB??sR>H7nF@Qjj)VEGzb zI8x^yw9+I;`%V?^$IlIEfsMq04;voszV7`7*AU2h@;1_I^}tAUKJ-M-f3|=0_xFey zgRw*2@(n05hMX?6e-tL?As^Sn9uJeqhH5YY%Spmj=6d_zY#T4&fOH;ChZCJofP?mg zd^~ikadZjCij)c9bc1EN!fqn$g?IQk*o)XNI*07!;Wte?iH?`-q#rW($KOzQr?vNU zdQ)p}WJc2O+sO@_n(X9!%dnkDJC%u=6sx4Ee1h^N!d>tniSPwRqi1OqM`?$FM zQ~1NPO$%NIBt+DG3yQMk4YMdWHkOLgk!x(xuc4yU_-#d5+~xO+@-*K@Me($-s&0d^DH~Nn zBQrHTMfz`RQ9qz+I*N_>=qau$}MIJZqE~O5^eJHe5EAW?oBU4e-Cg#*vfO00cFz#xO zho-+Y0=J;ViBi~)DDMJMUe3mB&jK!E1Yy$rf1G9C?8!9Cj}z1`&BwoZj#WmdglbfJ z*3z;y=;3klR*{|z{Pt#+fp0X9+zd@`lQeaRr-fr9+Fq0wSwqunvG_tn$Dt=y!0#t9 zV}##zu9oa1{yZJ<8iiQV*+q9AW))|&Th5koH*ya?jx5#w#{l#4duAm@7L? zw?x!OiKq_`ReLH`JK8lU!PY~XK@&E}uyT-xY$8{tEG+R1`%(Ywit zCfdbHYS=coLw#$D3w7{21Oco)5@GN~Kn5%6Hqd0K9$e)!;_>NUADmV2t(?OPgJOT#PpUiH+ulCmVkz&6(w$OvtD()tq3YtkSuI97W^TSGF+j7Hp}ar66kp%Q{k zMBg_s49g+=sN=PmcZ67P#mR+oq}6Hbp-&t}A9UaFRDXOf zoKz2t_8<{noiUL8!n#hgbJSpGqDvM04gSqf_!R_?P@@wBors|UPO@179l;Ov-a<+l6CYuNxmg^p9syf8YuSP=o@=G^ zsb19g6~M!Fwue5rrj=-v0*_bJBL^07emuN?JmL%1sH;gc?7?6BHl1Mo%0B~-QE%3L zIAB(3!GZjT&_RG1%|LJAVc6NJeC(|mz*VLvf8}rg%W;Iw0|gx+^Z)`FJf00zKT3wS z3y(q51u)AUD(-j6^p-ae^d=F#;1~&le-lt4ws4ZeIY^LSlgfAr0BuJlY}6l?sGs6j zpKz0A78RVJzF-oy8l|*Xg#)OfkI^?E(rE2XU0qr#^AdUJB0*z7bl$ z@Q*@uj6-zauPxAG32+ot8V5so5QcC7F95Q9*LCU#?leI!({B~Mo;CG);v#yP`$XV% zGr7qMsrI~!R5LHb-DU!?UV%bUsyJZ~STPi~ zJ)6w0Md!NR)CRigVk#9og`5Hfeb!vH8J+5H*_DcemwWN1~Vukx~fjm^8Y%t|__5Vi>bc^@Uf!6K|V@Ov|T)sZIav?=v-|(&wRr9j*}A$O$ie0KBsyToI-G1G zIM{TFkX2B>rhQDvvZUIp#V`lDY_Hvoqmed?o2(c4z=p{Nb-9=mX&WJKEW~4mAY|@9 zpcdWY(BE+Uk9Q+w=2tCeK6THG^0UoYfwu4v+g+bUcOe#~8G zdim4NydGFLXe?fEkffF49XPtakmiqZFXu%kI%OKp#W?j4Q`mnnNIA#th(!nrk3e>% zv|izd31H5%BkEE6it90f4v1%nZ<)~BkJMgXl>iy&3pZg#7VMh$8Ghkyg8W21XrkE` zm^s;7u8vV&UYciNuQs4W=g?)D8PrW=b#dYrdRrM(d+7ZnQNgvwwOjxw9Z`QRDbOhE ztHFj`W&i$(ERj7ES_VeNLJ?|e=EC!#RBi%oC@$mYqNpRfnVs%)wDsmo2lbAhJHGhg zgR8_A^TZM~s5}TVGofkYf|e+?82Xq)oke(F68!b3pK!GMgD8!4K|#s zEW-gOSr$3jd;P&0!INxDxqqKXSN!nc~B;96dLV&CV|d$$1)voKA? zER42@!T^oW%6L|UUZV2?NiYJGdcW9i-0lX>hu*(LV=d|z8TsG^OdxQxiLjBQ4@j^0 zqrRTMPbMaou)m~r9UjTd!=A*6H^9Tk>v&g2767uSNZDk%Imi-m2EA532^EqTlzsbx zE4fzrEnY^4A~x%V;?PVS9u|ku17Pc)%UxSGdAb{Rsbh=z);X9^Z6ufcc3m(|&s$ z7xtT@^E`#+M=)VntBdZUcM|-muP`^k4jgn|tzHUEn@piuKV$Y3F-Uh) zTNucu`@sluK`f)Dav`xV-e!tu2j4ZvblbE=JS6tzqB23CHEnS1_Afx3|N2jH$P5gq z8-cwtZTac$;lRcgx{iIcE+*fFOkZ{F z_2jCcEQMwbQ1DC|;bAK}jqp6GXH7mY=FY$yrNVduWKmLZ>7i{uNx_%s60W1&9)}`4 z2wxbKg8liMiw0uRpa?FMjv>%-y!kc*11D>KGJn)%MY62it13 zPfKyACV-3%3=RmbqBz{^wTkFprk4D_zqQY~LlUfg@A1)`bNAW9+H0-7*4k^Yz4wSN zHn+yv622mRuhii2O~&kZyT_gGk#vu1PKVilA!hH!U*B>3HD3JHDE!H1T8{V@5#N_trvQY=qWVg>U8t8aPd-D)>X-nMobm*N%?am|HB)c}Aqx zs`+{{lpCSzc$D7D9Kgp}u^>M4xSu@JVp3xX7zTbhtZP*N=HYBvD4KB%-w2&t@5OWu zIp0p$J*upEtPY7pEV;wD&gP4#hG`#$Lc55mEF9P@f$jPp!Hr=4jLIm>|C*3STf{sCB!z_Cj=rg zZ?CSFU1iN|RuK&}x->`rg)(SMvoxhxO%8}QCDIPv3b!P=IH;goMe53@cgs}uYQJU3rGK$E?h@1?AZ_g8JwGwGfqI$ZEaUwIRlx~#W60ZD-T zo~kXDa!8f8;E}5Byw|oPTbXJBnAHYMaaB0c3u*%PROY)*V51$_-a{R1KV0L@{k}?o4nt6~7*Z-$ zINr1vCbhxPw74AYyEt*`W3ORSbTuP~9tqkxadG-*kXvXG2Z_T>@M7?r_>Z3mAR$n& zeQL@l5_dr^CZ|qG1k*UY@GO8FI%&u8)P(s#GmdJZ@=>3m26jPeKSPW8&W%>GTdiAI z0O^xV{;o@BR3Yszv@V9*zwdOlg1WIfttfLqGiFmb}ZH6OI2ez*RBF z0bu<^<5xqZv)Fi|vE`#+Ad&`gh%TL6O=rTIsWhB`>(q~$UDKnc&bF&%#HlY?R;ySu zbVE4*Q?NH@$6Tr%_`>bEiL2L@o|`yuU9{$PZ>|;?BJpSJMggnqSE{S9hNXV8_;_&! zeD~puseW9%7RY6jY_wXQy5(ARqt!VGKt~_3C%u^<+~^F*Y)|-Y$HS7@;kvbIQ1IPw z&i4xY9SrZ8OHu%Z=j*ne#%>c2XV zs6E(sUM^BH0yXa78z>xzyK0Bz?0G~I?Habmsi{|v+VgotaE^sZnne&&^*X2)(|JU% zok9oBfgIuNs>gigVo9GK`+pi8JuDJVA_Ry*xs=SQ$`1tsIbvOr=V+_+I-peRV;~upDMy9{&MbIw=Fs1G%NZJ!vDu1EOE9e6v}}5VPbPf= zhC&p$gE8`_78FuMOVN6nBJ&(YvRX2fPB|lzIaY!hI<8IZnQ0Q|H9MQGx4DJK)Upgb~X97d&nL+d8DBRH^5!7%Kg7*GjJW-O(!c%RfcALh-vXqpU}N5pWxA3qSf zXi+m!@{i|$0}Pd?He|ADMXN+2X9!Z+?pFY5Mf1T~kPLSWV?RAg(vsZN3gWV@KeHvU zOf%+(46tn_v=LXCQ|p7M;l?y;hg4EqA;gnaPR>Y$1JR8K{F$rOit!)W%#|4+-$ufx z;Qb8C4?V?+lyofZ$HVh@A!Epo0YPo?4wM&KJTe?Zlxy&1DH1HdW`hIP{|M2P&8bgUuQQ3h!^ zdRSYWHcY+sas06oqE*MC!ce2w9$cAWn4Q=sN2(fW73)nk3oQ*mGez<7l2k_0{!) zHC^IAUAB?%<^f8s#tQ|jtGbvj>=2_}4JWJ9UVS~Yb*7RepuwQ4gBqnn;_FuE=dXjcN`4gxj+XUCcdxFO46k}(ko$#)AYpgUe zaPy0ZhPA|z@YTmf0as*a))1lrLNqdiHrI+It4Rt`<9F{l`BZBqGt2RLJMu!C2>{6? ziBV=RdG(YeRyKmwvS~chyCgO~EqgDZq~7?ZG3iG4c%&Mdd(@Ltl?DEpLH^P7Rzj%I zf1-|*G7$NO@a%E_%=uDkv0l&n!ys!>@4(kob}k&Jkaldbb=!NqKUI0@Ye`LxNvABzAHNHWlfTA>kp?z6Gzmyz3H{>R>jys z)&LzDD{h%u&&@D5*6YBhUy!%wO#;ueGEU~&XdI$tSv2()yD`*t8g~rAIV(UV6d}-; zA@cMUl1lItb*hsXmz>jg5W^~coDF~-nP2&daSVVNJqCaT{GJBD1V6rSqO5711jD3K zMm!GIGvT(?nI8y1-?X2N^Re%Wvy{ZRnUMLbpE!&4eus@1*syNjqnG>(6uz1)#vS?m zj4Radk?K!gzyIFYt=}WVe$!ogx>^`Eq4uw*!|@%Ndo<@!cG>as0s_s~6IOT5iPV?B zVSIXmdmQ5)CC9?9w==QrCZ9|S^cEitk1`|?6m7GudLntn&^X8;lH6KYYjOb8teZ4l z$F)_rABZ=S9Cjcx{zk1Bs3b47_5y@KOrS{qLNMW_jgDqJRC1`6|`kpz(DhRv)2QPcGf39rolSN>HVbb z5-+Z@m?yR8tKN0~1=V`Z$EzX!RCaPzEKWX;i<)i#~xPA7VFllr^23jvJV8VvxlkGGdBaH+~hW0alD z-0Ut4lh@t&2sGCbQz z6pH8%Vg;H_g6uaVfzLz&e--JwliQ*=ym-cpXyOa?cqk|9wA9(37bGCMy8A^^rGCw_ z8TI-EyO>x$5s71-8=2!bv(dy+FOanGmXox=Y1_Ae0yq2yZYWF54<5YP8Osfe)vW1dp zUEPahCk?0nu6{$mk&)z7w$EVVu5$Xw?T)sRv97DVUMEcs5G0ADzX3P3p%BCdP1y`F2BxS`fa&JoX{sEg!Pf#!GA%J~D)XH@9G_+M7I$ zt9&o<2?-y(jD>E8{{Bg*Rr5*{2U{qucD!(moHc9kI>d|%GsrQ~ttwzl)VMLrM9ze$ z&OFw;;o)jYbyWfMB?UHuL?x_=AYh2ne6@HL`~=#tqR@KpW=~AMn7#q)bqG`hOSLMi z?Os`_Dx*e8!N6meI{D!4E;`s;vK&-b(_?N$IUiUvKghFRlC4!!H6ATwZpgmib>@5K z(~RHm9G%JF2^-3{=`HYYl(Xx;{={$8PAy7*Y-4~UR?cg{Rl=yd0a$PJEqdo}GTEhB zcjyIJr}~K^#k)G6!OIa2oed9semMwb#brgt04u z)F9c__ND|R(roT?dI4)wb)-XV`_w_~U!wo9qleHGf$Udp9URyuqkZ!)YpI(>)P1Fl3?86Eo%y-D`a@)GTd{dAt zgoOv>4Snqb>1IbBgX(D3@#8>8fCU``FhM#NUmx>)8fu%ZI%L#wX|HcEq?JAF&3LW+s6pUjIo)oAj)epsiDq;Sj;soWkdS{kh(4*ml}eyC|Q zDQePcgIZosc$A3VC;??|_;_8d5*Yh+(0=*TxCT&l7Q7n@)wtrJ>l*x{>p&ULWp#$K z5gm48nKMSFnU=Zou}0vNmO1_9tbk~`M2MenNX|Cem?*i-+R`a-t&X|kbwIHyy~Jc_ zz+A9)?z;@sBmSzHqN^vfIz(G~t_m$Xa{{gON#Cj;p$J9jueP?&q|=ke`^lSW<%xiG zJDN_2CQAP6QL!!Ej#$9}W1!;)d~p5w-b>y3^H7ie%vmDbx&By-L4R1dGS=Io5Y7&$%z= z@bk1Nwy+0&u3K#Q;fTs`3AJuKvF-fI$4rM|Nu3mE zo$qsH?NWaY>-@wuewi;U7a(m(?~y$CS`nIsHcI1uq~* zWg|f;b>3YaqZI*zqgG9algw9jsF{#4408oRqhOD6KheKyjRsVOL@|}i$&VR=s*({y zq(`-^O~y8p2#L@Zz_Z!zKO`=wVuFR&JgG69C`5IOeZmr662$Z z^BbedOOeTLl^a))*ZMYPqKP3-FKEPl@`Bf@TT(}?KrglGFi<~!^HA+uNtC_NDgVs* z6&O+%M&oBz(BLkuXDrK%DafUh2 zf$jwK)cEz{c5_CB&^r`l;(MY|)C!yFSyDt_9KXG`Hpg!_h=&}8^5x4vI*i|r*4Opc zW8{mqtyx7t4G7@?NWX4oVj(lSVq(SzU(Oq*j}~;Hm%4POLnx#IrO%Pa>~G=Fu`Yp< z7`XI7btPQTJ@i5Q>DI;B=mJI0gQ6GbQ?!X)FhjOIV$^IR8h6!*6={4+Fukzr5VVQU z4na?@$sy=kpP;=)?d8m0RKuyq2kBZWx z(UyMlz(M$2&?c)aHZT3HKwzf~itu!`lE?l)Z`i#NFG9*KFJ^_8CJ>G~TOSCiQ<2x=1fgtf zmR%IwMM49rwmMOA3hfeuTEUnkIS?1|x{9TBHx})26v7a>yn^P#7xGB7L`@l_*c|F< z`WJA~o`zrQn_sh8$2j-6$R3zAubvo~HOZ1mIUz>aTDE%0Yd{@$KpJvmW!`x6FU zIpEon1xhEO1d* z=Hr}q6EGVMw5$U&>nQsdJ>YXgSn_{Z1uR{g=EQ=oRNFa5{`cKuihFEwk4Fc>6CWci z#S`85L1zRO&iC1mK4?KN`_UIi)xy$}oqy7P^dX%zI(7#fkSv*Xn$GQjOXyK)1zk#Q z`;}u2hFFv#7B4&bw`@f(oBt@{keQp^+7d4rMk2+()uZ^r?#1`9;#UU6*P6{!vhzMG zzHQ^ETo*3)8A|3AD49pjM9G&_9CQ6fD_)jx#ozuQulPU}|8n=@zqR6<7rNrQ zB!wQ`z~FGO>KTY`QD{AM^8ySF89F-HTsp#lIO8 zzup!9nk!y%WM1(@ReXB);{W)K`hG-Ee4s1-0f}IK?&EpIPf_vHx)=YM6@TZ?uJ2Ef z2jFja#Ya4ySNtm~-bLVWLErbY;`dqc=I>Cn#1$R-=RB~ZK{6azUek7+ym~m0Eq2SBM&+=ux zEV5+Drh+dU^hGz_@?}B6mkxb7!hM-m@a5O~@~rHYWXb0WzRb~=Ci_x0)V|1bCM`5k zU%ueJ?EaPd7=CHcmqpB6Qm^jM&>qHHDDIyT`b&f5xKfSCL15R`St`Ppq2Y@d&OVLQ zOZrNj5}&zz`phNPYLE8zRQtnE_sowXDK`KLflM!3ne9=J`pZM0txWp*P7__?t5!5KNZ@ip_ z6Xd#?s@0^HK1d9#Ft>i38drw=xzXh3G#aS+O7mTQ{P4`}S#i`2KAlHI-Lm3@A0%f{mF*7q2a8ksqA$^X$izl{+Fjo(s-EY0UK2nuYMRh7f^ zu%SZu=o|y4klVi1AH?33<+eWxvG+S5a_tAaZTA9EX>JE#&Cd;gU)F=#2N@FoyKt96-DF2B3Hr zAOcPf&&=1Sl=KptV$7E&fI= z4iySmyEr`aWY}V^y`XM9H%>mfPzdTG9yuJOn^pGJu&kcB@`Cr%^fhS9*Vk&MvAaIH z{zccD946_dTp57DfVi`}zWzhW|D8SpZ;sz;jo)O?1*iZ8f&u{=ERk1OP(Z4h)<3&G z`d9MX_#LFEsnXPvp!v^aE&Qe!K>n5dR{NjE-*nH>2SVALE63ljbf*gV*b{$$L9l#Q z{{ElAGjGGc0Z*dur^3Skqcd_*%K6IKbz8l1Y=CRLV>_Go_7Yk?B4yw|N7eNqZKXG> zgB08F$`vkyw|e`_ZpzMu7hWeNgq2!Kp0Zj#=v0lFFI$bPCx2UC zrt@X1ckyz6SqJmCF6w1+oZ$b*_{Bf3#jjlHKTbXT+jP3$&$fD$QWR2=TNX=a`b2-` z>s|Zw!57k6x)-x(5wcp6zyZanf4}z1J2Ne6{~NAHYrG$Kn8#p`UCAHqc0MMI8XDvw zzWfkhPvVeK?azKC#MeAhLVT55BMpMc8Qg}ZcW+8LG<`EDJkJV$u!f2bT~cEe5iNLX z@b&9_1yyTusFEd(b|uVgxzn=ol?BMSr>IECn7QjYRz($xW`3k`0tJELmlPyo*+- zcUv78z`AVdWXMyrI2fe*PHi(DPocpt3nrFJPF zv;snEk>8m*(I4Ul_&j6j*sc>No#Q9lpVe~zwpVPN`Rg|MT+-tY-so4Z*Cl1!R{NE! zyYmGgUnbC^sI_cov?<}G)Wy3&-V#`$r+)8t{w|%cfgmz{BTH-7LGPlqU~Xk|#Z8An zr(-(&*rp=8m&%UMHL2w66Qt7nski?5Pj~)qfj!~PT32H9nksrt5PwZ@BFAlA6M-b9 z?{U*vw{>tATU|J(gu?6n=kIQG7O1b+pLH+u%|blzAuI?lZz{tx91u!eV7s~@C6 z`!Q9i)G;8KR) zNeZNXmSK`Ia*yZlbybc0J)|miSZM$QsmPyFQX%DdhY|Y?uPQH&6aHec(GO>Z@sp$c z9zffW6xa*mYUPC9E9|wAnDu`C8g4b=6qr{OLNSu%Za?-qtiZABN6_kW_LJ|$vjb5^ znSpnoXkA!6c{w0=z`q>c6kn71o1?qiol3VCO+JO(C4VCKR&QJ<8ww3}$H=F2}a^)F+IFl zc9t#7$~8V-+bTD1|K`nlfVaSG@LGS&4;6gS70gVL+U}fkiU!)0etJ*;i2fGB;2RA5 z?FEKjlE$qg=YdreDj8(WnB>+H%un_X2wvVxUDo(ur{{-z0erHl6yiZ;Wt)$;&aP_S z>*fYBFP=O=seiK64_+Z#nDYW1m?68neoDmegpDO^6Vcm$@*=G6b&hK}Km znZo^GlfRB`F7@Nb*l}vC+}=CSR&F^3m!ueHrZw-A>VKSDxShqfqSPVdG+0Vr|M^vY z+Dn>AT3Yg5{&E(0P$Knxn##-z&6pfY6?|68QMyeHI&i2w%JrCE3(f7WTk`U8glXkE zB5K0qb zvSPdCoh$VhI@^$D;~V_SMPZRGw^*=L6=b`{_pS%?5+@t4|`b zp{&xityxalN%r1A`o;EpNVneuyZtUH_}x(QB5f>`tz5Kt#&Ou}2J$fP-_1A3{ zPUx*_MwFFjF^v^pv%dLr@-SL*Fl_>xIET9Jhiy6a^dG@T&E7TMm-mGsimvfqvO?mH zJa&L6v3H9?BmOwfpjtWUXaOMm^%yf^>Exo$B4PUjpuWbt0L%xrDXhpKy zx3||G+H*|zsAHXKnp-t#lr^V6Ypu;|y#H9ui%j4}oz!z7=41Jx_YPOv|FM|gy|tg- z_d{pc1p^{|Gza~KgM(-K3)xU5OYP2|l?0+)0po#OV$$Z0<~5&Nx%TkrkXu8p_KbN~ zgAgQ2dC6nP2*3+h`<7CqUi20pW(Hp^qUlbAx8kdm_cw;pVU?vR+v%jO=>zSk4M4hNa$mK5gX$Hdjg%f zj)_o=LuiDw20!jxVT~HLr35(~I7{`*F{=8pn){^g$kpFG-u>Ya} zcC5=jsgrYc=fU132+;q)&fm`r`>5IZu(M;NPwFL%%>Xye^V6rJeewa?J}DoW2GFl^ z1@ZtwpcXnpJ{vM;7a-FB8k4IZfV5eyW#`wLFUfYYI?dJ- zJ4C^)^nAW$*U?_v5IFmBn7NOgyv5Mt=)F~5Qig#SyO56>Zl7la9@{*$wzW&gpf0SS zQa`?MD37O9G_wLmC1fHTZ4A!U4994{dYNct*(v}gFEXur7+scNg(BaZeohvC$k`yqC3R zsA;uq^41`qsHdxXViSLBrd-d_WdQ=GALqqBAzz5R>WPN|WX+U8{>-lOBk3PuQ=^{J z_3e@5w5h8zD}3+4ZGPW}gc`bM5AIIcuMn^LRUp&ya1I2+oAISC-pgOcIxD-E&$XfR zkweoN{3xsp1dQ=oyI`)&ogr?sEvKI)y)b{vuHnu5FExfLGKNX7gzZLbOfTk9m^F1( zrQ~bsQunyPJ?h=#EcZCw9)ad?kM8_CNTT<)jzIL5o9KlicaZQH*zcob+w5v@Zf_nl zV(pj_8^?@zQxsUFP}t;rqti0S!pH1i*YeL}n@>9Dcl}>ymqCN3D>K>)~K9O~=yUNzqSFWi~Uffk*x!6DYeDHQD z?t@qAYziK6j_~@yZ`N0Ck}hNp$2Q`1Z$vBCM*6Mu7MPsHIy`_PL5=?4j!0!^eZN&Y z{h>i;qc+NzbE{R_vxbUvhsSFN0VqywMAHNa&*HWFuffVC}2Hr}e@yuol+{-*s^@TM4#MI-XHhS`6jsv8 z4|NM6s+&sNmTKn(c!+m$y0B$jWP@vE<~?~isxutXZb4p(J^_4D$e857pc_L4c(slb zF&0c-z=avA$H<(nQmc;O=a+M0#V2VF+Hxsr&W`K$?QBv~kAL3ATJhW1P!HlK%Z{wx z^ikP&|MN1#COuf>uS+?8*yy*d_u4KKU$Lccj-1`H)tLG&3JrX7sx^L5Gs_Q*zfG^T z$~>^W6R{mt-fX!MS%Nrd#&E*DZhl`QXyA2vBpcq9)e$?4nz0$@EYbxI%+)#<9z+pR z%3eH7RUg|q`9QNKhni@~+G5JFuQiT8@>ME7%vJ8`!5)&>ldhTpngBX)h1HOg*Z_GD zojqt0p&e!G|8AhYq6a6s)U2L#6DHvcsOiw$~ ze}Yn>`P;2;shxw2fFHTXd-li?vCy6%JKcwq#r2A*apxUiRKsptk`4Ob+t#B?a zAEFS-yhgf_PRQ%{NThqrk*>FjQl}qmq#NlTBkYkQoxSDsTapdQa-!S$4$ra##Q6># zW-8xbwNTGw@YF_0OGkXLiEg#M%TZp=nfov*`b)#o4oMwLJ-BD@x&5*}y71uzDG~Ja zcql`K(`-49+XA=v@$7AZ2N8p7w*@9GddfB88kEdUu#??dM0uvJ$9WaD)!HZq%N9zO z6x|IkGC?g(of4dt1Y9hql5`?O;V)b4hU=UckjL&=tCd~&_GELQo{6B(GnWVziw(=8 z@CTF}Gm^Ry_|YG_y>%!9w)d;Zvf5HHUZQMfo7*1rYwK&-))|_=(t!|V{-8wJ<>X;s znYPSbr7y0Z+BH`;v87Q0YLXt@ww)*&VR;*dlJ_v(sbGB&FxwYt(9N;t)75611?RP- z{&}~+bC5~)D{3GlpD^>c{O{j4jgTz!4N_6`$-K{LO>bze|ItC$&$}b9>-QCOeO9aM z`Xbl$ZPR<{`c>o!y3TI9g09cK#k$_2M|^BWV&KV^m#(jEJ_Te9mH5cgELpa#Q*$ zyd4t{>who=89YzD$M{X1juO{!7^?k`cWN**94IL8OSb;lWn(|+muLW`o*fP&jg?0B zG8{e~r`h4~$J!Fd@4JaO%G@Q@gI znI6UyU$VT$695hyXU>MXHgev~$ zywC11JJ4M#Tik~ZCqReetqcjJB$TJ#M&KAcP<(XNA)JoH;e;vz6L60KWyA!>rwOMg zUnqRo87dCeKkX6~7u$O`A+*)IB#-+)W1&>+uNYuldD_hYE0F&WW##{KPX0Sdd%qJ) z$p7V{D0psRuLsuo@t%-vML0R-)aDuB=r z*N$tGcBBGaqeAty@8zk0D+3ka3MESpyDQ}R6T@+6DnP?!tf{K8A=6_-1%g9I`lz1> zl2pwAfl!qAoazw!NesYgYKmC>h9q|6tEYrIlNC#X@o_rnPI%+!L`kUbP z#K7w|##_z8N-h!KZ((*Zl~%47bl4sfkV2fUL1J=6iC4N_6{vAoZr z4%mB0(DnK`d0k&9Y-QEotuqRAz(-Sh>H0YGw?GHvXqGJd z=y8#HPC&ZWUP+hJ0dL*ua3YX%Iv|IWr}Mt&>ww|b3!&xS{2ZYUa20eP7wxd9hX0;* zKq}AyzYTOiBg4XUfEh~YfC->UbJ0ENfRpY}@1+C2Qkka%ZVz+-1x*L+7i231bVQyh0pb)XA|-H&l)%Ypb~TYNls?FFNgu}mj*aadC1BDw zCxrrW^%)DKZe`IYUDjOzQBPs z36>-EbC9V!#y6RI;X{&DRsDj93K#P$UDr%v_)-Tb)eK+XTIV zbPl+d47*(rqK4+_8Q!u%|7r!B+f+(Sk_m`GdPyy1_q4zPI<59nR9|f4-|^yN$L;48yvbeL+kVlYgHAg?Rv&`7I|~lYK#Zx zsIbzr+mG%3k~e!U%AVVZV!Qf#ZFN%oPyX~L_Kz#=xDu~3&r7$Ra8(>{EY#F?g=Z1r zBHi2XTBevA4meJ}2vNOQ8!fQ{Fks}EVtwktdL1O;XG)!j_$fV$Eqn*XXinLU)P? z*B~?2q=P6oUj>q7U-*;LYmS>k?hT`?oGELAOrvqX+Z@2-GYj39)~Xg&BeqF>7?>&J z?LZYjE{#y;e@C!OzOBuEKEY-*B|B~aM~Sj`^>C<4uZCwp;s@@_CLTE7A14uV{3qlX zJf$CRzfE7~l87D%l2)V@TTanOT+v^-qAf}c`-&h_C-qO}uLhm|$^YtN+F+&fX3v*1 zP5;W%kI3z>E5Nki=*O4(%h=DV8ebl<*5CF~G+E2}xm$crIOa&S*)DVQRB>tx<-G+b zumAijqJNr%>_-HwKoa0tL+z->otAa$y)(PMvQMQ=}oqv)< zN;NdCw7Ld7TB=fj(+?kq0^teBc%lLi;tD z1D2O55wZ*t=_*pc?#y1YBxww8`|(%9yZ&OEi~OQ>Bf4tar&XOUk!MxfEWb&Ugo5K{QBbM<6(ny$l70tBMC@|n zFsn8?ahTI?ANV7qt!ACqmR5tHc!Fp$p0i3TbksUW18%&&v5zjKX#Jylu&l0B1W%OQ zISEX6G~bLVKJO|~65m}A92~D3lqhN9I~^z|&q?~yuF~;3;z{zjo(*o|dW{GZEpUGB zfME43TTtV<(#$M@NH50Aiba><4zT8xp-(}E^tCoLp8-ou~7|sCR*1v^<_VTI-((6Fr4YI zI;Vdc+PMxUOCB5)SdgFG67n+ejg{avESDWS(FxwasBp6E*eiu;qxJ1dF~QrPJb~c7 zQC#3KZPTeEzuQQg0|)70=Hsh3D6g518ZkrFgW7z+lVx{52uIKlN0{(P$9%YrVV2#ko|nDJ`0oSg(fmJa%(y#?bEt8Z71p_ zOWF?((DeL_JT&PP*8olX&@CNI6rgDzYo!~SHc!|inzmnSXxgEN%{u>Vd2QASnsn)u z(4>2c1NtV*n*Q*a(4^@6Z_jp6H}r<4X!tQ7O=n#ZqG@>cbBHF#{ppFwCPhztu~#W! z!3gQK5&&^#z(|es)B2Gt8Ff&A%h>chTsG!#`S|x7E)|Li%RN3$pmf9KkI56TTyr;; zd*VBW%fIMhxV+Z#8ZJ2x9bD!MfMnS*4}4}kR?cz|H*yCk3ZPIp6o((vQ*!LK`|=Qv zZv~c3WBPdeOz~vNLl2(_kT5Int+RCOw}eCg^EmB$-_)5zqNES&K7HuEAMANyX;1gF z$%eA(rQxI-rRoOp?2~$$34oK$uvWDM8ncf>zj!~$sM)}6^YK-jc!#h>D)&j8bmaBW zT#_wgiRf#v&|BE{GHF1&m(;{$!U}3+zS8ROh|wS1 z>FH-UaATDP-)3f~A}i?mfuKnXCf)SgOR{`>yI-ljLSK^Sv0OWEs9rHsZo9OD>n9$zoSfjAoUxZ5>)Ok^b*CzTithN)nng33g6o1IlJu0FC!0EAr#r9QcakSLx`;+)<>-LE z0V*CEQh+knnNd_&E|d;R`HzLx6J;ut2CIyg9daEucZ_?UB5Zt{?bmGcl3QV&*1klL zIndS#l{MSF+t!Mu00kb^yLlrscQ{bK%#ZqEo%PAvHzDgH+cxOG z&Yh>%SFUzvUe7p2VK}uiGmTRE#r>z-^8l>%L0wV01I5B&$r)y0%hK{)smB%*=*@mc z9j)2o-8Rd5+*HuxCMx`CP~mt#(Qb?c%6;9nakS%k9fa7TvY1*BsB_9>f7ogn=d6cz zZa-c2155xjY&Xsy#=*G8{Hoj51}F#1OYIdcPjl8EGJ9!yqQq3PqvwN;%sK%BIU7WgcyODFEdpu4kWcm}h!a>?i9_vyt@WH^pjuFaa15Iu0 z#JU^tDjPEhtVu-*zoTQLp0dDD1qJCYZ43i=aht#HeHUBQ5oz1P;f|^?2#c-xX!?F^ zBUdjc{yBZDzUa1+kHA8vKlLr}*Sw?PUamA*_d%p>dsBu$UK`ZOuXgE{oxFHnf89IL z%4L4n^8{9A4vr?TsXnV6XuB3ix;oEI9&-0rlTDYbj=H$AXwACmH9^B(>_M8N2M6|z z0QI`}38#uw?h3@j#0BX%pM5Iu*KF4Hc}$qvKABvj9m|UnWgn@t0(UhMEMdxnfX&R?$|b7T$TEw&47i}*b??AENjWK0FpFFjPFkG z!&pr%{=}&EgnRtSJ^tVx+d84)8AikI;|1L>4;C_oQN}&$d0Q0-f_!y)#iTD25q!KT zI6^xTHhXt;a9#)86$}-e)$uE3KvB@63p(k{=uQNKcoB77;T-vzhiR0m zTz0?0P%Yj@R2U>6T}+!&yHo$kQO6TJr@d=q8OZ|_NEcrnjlUL+uZ7OjZVBahOtI5o zX}}4QSSJ}e3qs~1gcfGUdL+I!;>LP3dB`1+HJj^)y%J4c(G_u=K7D`U!{I6FA#gYP zMUK-^AZpvvn1zD7chRAs^8NPk@nL*CSoQxERT~Qcv&W6r%JmAaeG3f#WFZGs*@no_1trYcJK{eKCVs z)!1=r2+JKyrnzb~^Hxo-friW@sdk)HX*u=iQMdlcm&Oo;DX(L|!S7;Jf!{G5%T+%G zgStc?olvh?J^d};2r+4zx8RT>B0-zK0#{f9zL9)#WHD^NMBEw6>2y0-{L#Te+WO4Tk$#`39`A=8 znZMga5*A=cgcj48TZ~CY*&~OLZv5XWIopH(5zlD5Uj%a;IG-CKljof-g@kG%Fj;%& zwob3q1w;vK4HWx_{vTe8o?m%K-(i=-Q0XwpbCZiVW|y7F z=gsxWZxA^A##ZHSzOn8Xo0i{HqPGv_k`5F^Va(Gf0}9k$Jn-$XciQ&mN6`$Y1c zQwsBVbKPw1c|&?<5Jy};cx{xq$GT1Y)n@M-d_`Rk>+lnM$@E1rB`<=1_BE`qyVzlH zW3+N(gzLeEA!pgQuvUV#I*JM(so-#&U<^iPu2Sk_mC~>{!fd-~jo5b_JbxrYrnyoN7*VOxtZr>)gzkI%ks%!p=;!zs(lExZ|YrZG?R178!`0 z?~nAi*~TWNZ$?0NZg=@d<>xOZ{U0v>Y5DnaCUoLCQ2nQe`C-(z%~M#7`->a9R;pjv zj?C3;N+MXAe+jcs_grj8&QwX> zbAn~<+|`%))i{qLZAq`>6@S-~NNm@EUTh-?(PYWl zhh5$$k~oCW@mIWhsh906mJJ}%LQ$mg(F5Dd@m~|w*4Y?W~djNuA0qw zNfy`Q_Iz=`IQn^kOxVR7Th&(rnZ6BhhKA7;rbXi0SU`BX-2l#%n1L+oa9yBwu!LqE zoi&4E9mQ(2G`qyG!mnJel<`~|18XkAyq51SF{u;_xqYr1F$1b0{!fIZgUg{Ttoki0O|4bJ`Q?WZa5+m4zqSIwEcNngc z_yg2Q2(Z0$5?4Zi9jsk2!cyErU%Fi3mwSomD`DaRFuOVi1d%mV(Y13cR+@sk&u6K_=v+$YzI=Q;pJKn4<;>T|B8&Sz;E)-5)a;zBT+Kq?! z3->;#p>bx(K@Db|XZ+4xoFBHcM7Q%Ke;V)~DVbCK7~32AH_Dzz?C1|Y94`f-rPVhj&gkt_`xRAYVS@WSt-0~`>$d@O8eS+0>u75j z*OqH5lSJ{ljFh8oWZG31Uth1;uvXU?XhAp=&v4{B`O&&UX@a28ZO%yL4qhkT)krqMf#Mh5lTeodX zd{LeEV8<}L4}r4OOD$xx)dW9$F|E0+(RiwD?c}5C z;xE+wMINtu@4@#Xoqs>PKK|aAYyaMV^sslM$?;v0*gq>KE>7=H`%dOU*$I*Ol1y1$ z`>4Gm$uY@Mh%&5KF4kd%G{Ju#U<+E>_z*~UM!{j0w(|&bHu-7Ys80_kZ zbghWSU#gF9pn@6a1?aAiuLJ3IPf!@k@y$r(Kk94Vm{N%+4+quT_<&@FR_=}_t}2Zt zj*8Z7ns{$o7jkj?Q40?^B=n2>@iPWV?s17F7HH*mzuy)yzw^p#G!Bv}RFSe>jxO-L z$rr~>z-AtV-q)mO1fy`#h`=)#R#g%-?eo^w-mD!TVXG<=0C5s+p&_=sCl)H^z zleOLEBPPEklH4S~A8c#zFyl};qGs<4nKhp}b{R-XnlLI~<{J!;9`i*es zs!od7d8DEeL~&H&I>ND#3w@=B5sV9_bguazt?QV)hhT%5tv0;?Ij4`vnw)DVU%6D% z)Y?H}H!7@f1g$`o`bJGetN9S1Ki3?vls!zlpSwERi~DCbC>N!|=|i_dsp)SRwkNyC z_v`_huUU~r^R9hD0-g7f^77TseSJ3j^#uExn)U!hnC*0hjOcFo|3qOQvG)*!oRKH_ z*(lV)&HG!F$W(n!T#PVfn2xg_;T-~}DN3#FR7<;%Zf@|}4(ErrU|czK>bml}k?dhC zCPndW?VzeYQL5`q+YSeBk;GJrQ2ro()OicWmJ`s{)=!j0x)lmFr8H0;K=xmFFwabx zT)6V*`}p$-h*~@O7@28V2cIeVH=Hwn6wds2{9%OX;mlu_wqr<>W78(#xf20*>po-J zi$~ZD_oeB$X{J>dMU%zYJ6(gk*a~Tk#Lb9}eWOYA+}Y^yawhS+aRoeJ+T?uX#rYMP zVs2JM6`m<~$c#$1q{2!ka9JH&zF+oYH# z=lw3UBypZOt=VH;0T+B-{6n2wu_Hy3QKrF!XyWktVXt$}Lfv09 zrZW3Rx|W=qyzYTMku`5cV*fyuK0^ zO4E+4kAGZW^Ol!fL|ygqx9f+!SC2A8y=g*_rlx4})PbLq#=ZKT?PJ>B^jhWHj&G5= z{Wy~NTs^bu`kH51cp!On(r2M!z)>jSCBv3Vm9U+9kzcekTC-tNo0MWiIz#P8i?;Ay z;Vn3`ysrI>p}L{bS$upPDZtCM$$AhPs=jhbG=4SW2-Y5oy6ux{qbYc+s=7T0qC!GA zKB$jhH7HuNDZgfOPGt6u#5ZdBCV9wHEPXgLC0e;Sf)=h%e5pS1ok5YBe|oXaRL}Ld z)n~SkI)-nEyJe9$k7RL+jyznqnKG=;M&lcqKCX|}ygKPO4szDMNm*{Iss?!IC{O{L zq*0t+4NWbliQa*Srs)X6CzJu{BT!b^AA|FM49Ne{6-+y(O3qR{VxhJ|Pj5k_yxs3* zxTMbfn@P@5?lJIH`*p1Qb)aiBND)4)j!8trA7K04 z6JH%vkGHSBX3@l@={c&eXq!R~ikAB|%O+o{1F3XKOD*jHM2z)NH8@n8)N7VbdCSBM z=2G+FyfL)*MW9SZh!%~i=CGD!X9fs!@~K&LW&7I|g~TEmU{7|9VNFu;B1glCUV5bEHnYq98H>q?)-EOdA;?wtt|}Lg8%} z!FXm$U|I&2SWRzJ^;VrafDxmgzOx0WYGgJj0_g=2HOV3Cpw!5p6oi-%I@w|ng+eV1 zoOx83OP_|dl^XMFn4=GG-TMDS73|UfMn7I`+%jGbLXrSp*PW?hcU-%!M`1*ybt)M1 z)~~Oq1u7Vs?U(NZ@w@=y`S!dsxcN4OJarcbR;9IzKL>BJwJN0g0Q5-CIukY>ZU?Et0&P(2T!DD>c`u zGw()Z-P`q*Z$~%`BNBfhTDc)wlkwV42b}u0&0ec#pqKpqh*5nWMXdr3$gs3SaPQm` zAm)*(hm=~Pcfr^_Rm+8ewvBb(JsrAD`zCMBc=TP%j%&Qu275W1o44&{jMsJ` zFVW;zi}0X$-fddYCE8iXZQUjOWs#<#1}#*x8*RkS2S3W~%5K5SM&W5lj^rZ-q|Dnb zGHQpJrOzNt@tQ_dLjTy{tx19xCt6hVPNErdB{h?Zc8LI(`Y=+5I6)0NGvmMIW&tT^YvSuN_ zYug{G>QFjR49$b6I`4gC-g|BM4nCD%IM1hAMNroSzS%qZTu-{uKwWh3NgeXzA(fOT zBlRKs^@M76>bWDQL&AXXDUB^V#x$QH5=~X}OqDr~iCD@&BIJ=saS%lG1uBXH?X-{{ zjRnUd_H&{gE9$$ zS>?e!fn;YQB@u0vUM6{PPaqG>Xbc47r^W`?)qO^3qekg?jnWAck|V8|IaRgxytB&JGZ9dJ z<`OZ)V&SoEvrHu0kVQp67N9$^ zzq1%2-po3lS6%9c{F<&-kpkXACmGB(fk5g9KbT?$JSM@GdQZtgxmM#}VXP-l{gP;2 zhd8$Ih$efaDZaVn!#Et~x$$lLb^j{R zX1?b}q&6jC)A0vWPt36iN{(WT^e5LShKL=22JdNz`*FvVCVoPubQ-{za!%DR$R)m% z(RiPg$g<%x;RvBJr`}ltH#R&*6AIW64vdNyjSc6ReI%aRV)fkVEU$!Mow=liw8eng zw!~OC+_Q|3Rc6A;Z!_5~>)8@s@#f4`&iE>9BB({;7{XLa9>tV5@2axZ6Rv^X{0}er z8-B?hd)trn@_*6$=az=D@T^mt0v;BcB{_men-7vh=lqZk<#j@#|Y_# zdi#a&%j8d;!_7p66l?fQK(plH4o6y-zC`-QRtMAH);I>q23YbuLU!(PbM=}Hx3KZ? z5rckd@qRI|4)$nM=WnQ+hd+=ltNOc z-eSAc{{+dYXYND*?2{7!x$%$C+a%M%^!qQJ9GEW#jNe~1&t|p36P9^MzqOe9Rpo;` z9mc7ISIB*>2{&X~sI;1OGr%1Ko*&_kl%r=!^VNU5Bg(LgCi+E(ts;ux>IfGAB;RF@ zDp}e{4*io>9nX7D349uHwT2jUfO4AvaxT*f+a&`xmZlD|yEM_a1|XX9P6roOgrccJ zB@$MUy3Fps%;pcn&YVMqND`u_G4ZTtYrI(l1+5)g8gy3{r+J+n>@4T@1iX##SqHdT zg$z8F(KvnBfJt5ZoES#~Ekx_lgmNx7W$7n_5~)9}bL=HZyvH^f4TNH3Ju9R{@BKt5 zmY7OjX;Sc>DnCr9Q-X`Q^kVY->nIqeTttG0sXr!Fk(>Ra0MSCdQN(8Q|Iw*v@=n9{ zS%m6-j(~ZubupI@ic<`VH89-jOhlZ-H*mg5G)Nnwt<ZIA>PD1x$SO@gIU@JsnmegZUn;ZFI_xQ){jOSB&9nYhy zw!6Xn2h}+9JtyhzuWF$Wa!%?g^W#3AT$a>&nX*A|6Z^^Y@M<&J;+wc=?nmZDakGo1 z#ig8h8q9kY2J(!34CcNJ_Ju0N#==>{snT1}&w_z#UiIdFjg0LBKn!jl%R`icdBTzx zf_9pD8M9_-akWi^mn(F4!8VkgWKY$fMz| zF5Bsm_KUXiv2S$P+GuhB;W@8IhjAM7E4LgB;C1Z>j!a(2gAPRF9qCgvbc`^NXgqV$ z`+x6LvG!#`okCE*clJM6&63Q^Q^9V3=md==jKTokJAtyVHU-94M;7k;^1TyI?f>$< zk@%X(wp6reWi-A#(z!z+X?sV9t&C(BvJL)}T4*4q({*Aca&P6BZ?E_%BCxJAJz&hW zEBZ&`>qZY-d2VvR-Sm#&BK7WzW0L0(tUTZ}BhP6?b;+@i=`>KaC4C-7ivn3D;ORPB zJyTB?{Vp&%=y{Kxww=|BvEdUINd;ji1t+^YsWuan`RCZCsfxh&f#0;svlP!+GGg+f zR=J_kHbdtzxs7#EULLoz($^!Cp41Kriw2b0W*L$vm00~J_8dgwsO4jNa#UBRhJ{L} zS0kOwU&{}zO?K$Xi5Ig=jsKh2r<;r(1j1aGB3;WP+tx?e+8N=B$7s+``GPnNBZHjW#74h#6SL55dVwH6T&>bf?1VAl7(s-&6#~ z;NSKtFyw8mNc|PZo465{6dLp71k7m7P>Hmrb^R=3_uc6;tPLHwmMnYhzJltT3XIO_ zx$1MIk|@sgq%q9`A`ov)f5&QdSY~1cACz5QSh+2I$RvU1DpD1_RenQ}e6O6v6;SJP zDu2}U+F5Fb^I5G*O%EP%2zUIOV=)=aPoJ4ZOLw>p5i2YrFrZk_R7i>RLwrn~|CFh< zzdmV?A>T)>Rg<1)pJw&hKV-@5NuRk@B)MFFr)*H!v9Mx??hN$V8gFi$eRP-1EiLXl zJRDFeuv+YebvxH4kjXm4{%UV-6U?`?cwdx6p7Odx9O?Edd2=o1t+?;8Y$fSm+dk?9 z;^{ajNPD=GPpC?Sl~rA|Oxrx?{DL%%2kE(J%`z{kot8>?$e!-ZmMFXEWB+8JumC-3 zWHfnJQKV+|j9*BZu|HrM(gAXy=1RWt>rlMN9ZDjj0zbQ?Petm8GejQS>|k>l7IW<| zBN%yXwm-1%1T7?-Z5Q~MZIijpJ!Wgvr2tDatS$Bo=iJ?tj}vxfFa9cIa)So1zd_^p za9&*xXbgvvZy_}4hc)qwFU_=ZD8p>4P146|GuE>;1oiElUTPyeJRE`wj}YscHKA)b zw9+Xm3(F!&hn_XNz1ct42N378^Og-q(-^G;7tMCxd6{9~gL?@Pjq_EIBM5S~1xQb= zBK%zf0)b-=iy$Ai)a~TYV6(tN3Sa+FP_0%SHCv`%$QEkY?4=o-L|I>&8atunwqF(y zHP>+s=ksd!h(>F?0h=YhJROytNu`LklGFB7pVUNAu0AdH(}$@c7PF$QG5w*VOZrhg zlZU={uOO5+zCb$U2ri-do6~!NR0Glt&h*WuA;KFU0}C`5t?8@yn0op#6AQ;aZjXIt zAsya8`t^vn`=V4zEI-~(^L5!pk_hjLg4Qqja%rH&(2qFyzI`E9%E3fW5awMV zw!opy?J9KC$TbQr;=af^rLIcELa>5W>nAUUl6Km%$G6daD?mfx)TiRgSOjv*d~ zf7TJSiDAtqZ@~&bIp91$)`8(p#Oz(ld+Kujdb4c@z1DTvo)?^1(aB)kaK)*}50WkB zCWJK`Djl9cl8x};rJVY}s~Az%h-1P&seNqbX0kl$gvV5wM=i<>?Stbiz`%seeW`c< zY-4Egtzcm{_y|40?%53=eKan5!3WxL&P%FZh_OgOA^5W(#@wd?Vr+LrPsDVN`&7iV zbz}pPJ_R>oqGH3*eE0ZC>Zt{Ws(CX(mDV%5^ULHj!Oc(w zKUBz3UZEzcZ3GK2iHX$x#)#(5G3hNK0sU%4mkP!t=TX#9edad-8M@)$OynN^cqGz% zAzxHjWfT$>{%A7H&F96TUYl;5`cy9cFJ%ab@gu!M48)=|m7hF>xr`19$~$VMGZfi= z&EhGHDYv@E4{x?x-{l4db+6G+7Ju0gku3S>vMe=AHIU0w_p#eVs3L2qhDWQN@Gvx$ z=SPR208M#rZCTJxHI_~KSs=O)NA1d)6WDHiNYWfz<3t$R%z}NSRm1)v6|gp_F+ECx zOT-T%Z!~ibb0H2(^}~!vQwQ16m&aj6sa7c-`UGLKkqn4mCx(OL_j>J<+I2Kb-z+%7 zAM%B#PJ6@{@D%qbzXd+r7znQ3`Q=R!agY3BQp_#C|66P_JC99n{@=05Nh*$Q)q_o* zxuiRr%zWtofK8%ze+D+$2M1cfAwgi^9@*sIjqOeUcBF#2+80{f7T1O=ak)z5|xOrD@Y|7 zD_9=v+=}sig!RgM?Jc;cY7+PWAK3+u>{*{3}^>T-NA`0uXv zZf#S&SifvIM`;M_yrAj|jubhVlOT4u655XtO`f}(+0%eh*6-@PTffJ^O24D&pMZE9 zcWkZ!+mE1=B$B6&q5)h%qfZGM_=D9Ht-68`F5FDhRXr_y3mLl)eZpC=h=IyE=b>DxLT<@ z)?%G?5^-Z$+IULaF4;E6Uv0FkT(6n5fRKA~wgo&Rna%Q3!k+{sZpQgm*=6Xzwi?5Kl4&-tCaU!BmCN({X)R%irefDQ)leaUZKo!t)D!-xGwQAW>0O=GKXu&f zA?#;$R*u)gjxJ9RN8PtVoHe#|4{HwbV%I2d^3=WhUQUq#FU$0wHB0reh4raAUNQsO zY%^+H#0B~KgFj(IN0g1}H7`v(T8BJv!cuH^l^4@y9+(;SAK26}N*;j|j~7o*>`3oY zeU|B6tNCnLxa?dq!S^E^%dN2wj1UbF!PuF;2KnKJ=zc&jU>qY4C#|{DUz&Kjyw|OF zsuTgpfZ)Bn}m*D z?wd{ysAYSM@mpv5be&$ehVuht@g>Vv+!?5#&{|FX__#dY8zj&BP#cfA!N5Rk5MX>X zYls=3;_MWz&r03ss&Dhcwztt$-{Iw`)P(|zoYh(Dqc%GrT&1DwAeH$4ynPFNRK?kT z60)#B!dY$_6eMU=@EQ;_2*`5N6WnM-)QD7rB4S02m;hRkgiRo8IDjp-)aqB-+Dco$ zYQI`QrJ4XmF3Qad;02LZJ!?==tc0NC|2*%^**$wnh*baiDKlsGoSFAN@4R!n)73Vb z6*r87Hh5Yl9MZyd_KF!GLK~=8On)Ny_otZ+9zgFs4c-%cUbs+tprMD<)dU55{1&ee z8-_h#oGV$5QcQ8Q;oD0DSRJ^>je)OYp=rdHy^W0;&Ib_0KnNSPa2(3QoN|7Ju-T$L zV$Pf~xvB<+I%Pyf1K%;MJMe-!1cf166B>e@uZ_?hyzwn!bVk*uqDUjs7#u4?JWa)R zB$H35;kXGJaDOqFP46fc%kp&jdWe!1_K!Zal48I2lrovb$yn*F4X1M;7(C)Lf(?Wd z7ONaTp?k%K{y}Xo6otg@NXKzLYAk*NzcaKyYh-mG4QG5@iGZvxxZi-foMa9@GPgJ8 zP((&dn)zj{4Kro)*Td3;EuqEZIprv==2U^@x#_1$y7h#L4C%Qz7^KLyPrD#?LS;6G z^ePaeFp%j6RUhEJ{(_+?_2mdHv*I*eF+~icCs}qze_Es*9vzyX%l+c{Nt(c!m74Jk zHe*J^A2d#Y9D3T`x?v3Sr)cdZ{USI*#eck&=vv$bhmWk($#1 zq-OX`j=&h95|HV_kEUXAbA3a8pk-wW zszdLHqd7!GKn1UTO7XF#(fGi}&2nH|ETBXI9T~oe2RVEdtT8+UMw{oJ1!aNQ>4n?q zc%B7hluPL}p{i4%swJ4~8+6wa5{;3T7@|?JG5$G^M2n4)sMu&Z>T@8#Srk^UGo&6B zZ~=Q|jw&|b^1-=@m1*H&ZQ*VV)Gd5U>}YqDJfxBvro*88U$S`Jb>lmPEQVV1WgSr8(1RM)1zmVJW+TLQsxPk72KiyQ6dNhJ6HUN9Wvw%xU(w z05oDK`;r;iDqOd2?wL;Q*ye&cHqsMx(8diE_k-dlycx>8HR!8F4%uV&LMa_sb&ir% zG!U`LJhv4tFl3^r{!v`=4ELp?sj0Uw#h5<~;=h`fNe)#5FMc7FD_%gnlJMd>X(5)e z!V3^D{3ayc{#OZTz6d#|CsS#3d?5Dx@lHa2AUX{wgZ?EjZKFXX2uEcOPvgRM=Ws-+ zQ<%r7?46mC5n$qX?Y3`CYbNje*10HYOGh2mgIFvgtWps>O0{M z`>qJ-;cz1K<~)qhSokF0##S!4Y3AX#%=Vaa=5bx4q2~m74DKO$yoiw8W)t?u}7(MY%#h5b0e-D;wy7gD=HBQEZSiy*( zDvnTcMvc}SLUX_C3)7?`vd%oI-pu9%g(1p_)2*KcBk~MJ_#2x3{UifSR zfh9tOBv0cRVGRiuo&!0nID-AvDRbJvp&Le%ix(B|3X||oB2!MI9ENmzm^ON%hd2skIR>7@j5jWx}2y}8M$T%;8>YW2gn%u z0uh&JGY-tqLK3R0wc!xeLSNtzeIon7v}>gtqW_#phbX-*9U`UIaEQvmR8E639a%k^ zKGCSu;0JJsGCJYx?73Y=RA<21SPP|udl>G@ZWEG2VME^yoyxo+MBZfNB=|t=6Hhra z(LrgdrC&0N=7rVNKcSVglT-xj0Wy~32ZgE#T%6mpJ}0qOn0!&s2oD_G2Ys6ZZp#4H z%KTHc0=7lw-j3>{I+&EX1u@LUDj7g1dZ7rrW9CGnCs^=k_4~X;N5^_WKKUVaw^q2` z^$801C3c8JYEWiUEz1o*f}S0{)&~oS2zxDEoAO9voruTJh*&i7<+PC?NyC%r21d-r zaWU9}-i3@8$Q?`~7+mv70tUIwVz5n?I`rz@8Vue(UFmkz5fw9cA{h7tgXVZ(g%dEi z=U2_~AX8!Rqxr4iLDq3F2p;K()$OnZ!6O+)<(3p?GL5PNIlR=d>c?fz$()pGmOU@n z3CKP2SaZm6AqWJlys8z*4e9f}3D|A$QJTl#tB(^f*!IijFt~@bvwFQ$*$NCE$Zi<} znc7(ku6zewd4%J3M@Jl{M0DlcL{!q7Mdf$cBnDIt1zUm2UwXHU%6Guv1sRw(r|tKD zl)#LU%bH`x2VV;Y{ab^1Y1YB88rovBKA*pjuVANmh_0YUl5PfhIWM{FDGsu_D?P0?FB=#XXFz3>d z=gtr}{6hf0(~YO&{Zk_Em%eLS7$itf!H^b23vp7Id1f^F=zFs4lq_kU6WIu!0QA z4U7iQ>D~;9!YJIQ>)GTC;V6V60}J6L^>?ai$*VkYY6Rs-brum*{eUCw=K*nh$uDH= zA5uvdmHb2{r7F2wB~w&#i%N=Aa*ayHs$`T(dftj*>=oEat%tFbO=mwU#;-F95j%h@ z$^#rRcEtciP68qqIcEUYdN~2-JDt~_cS*4?#D&uQ2~inD!^E8@i!qeq$3Y$e`Sc`A z#y=JvGsm=N%&#C%65_u_N^*3h*2^Yju;62^gzcb3S>*u^$&{c#bWV!>goY@W5W%C6 zz0i&XIuqO4Z~#ahplt^rWrLS{zVExxBURC(clfyUc)a-k4?PGG=wWGyz8gIb-_i^{ zrh!+GgJ~Ro@gFe3G($>03PnCx1olBlkSQjo$e*5PQ({g_u?s#`6v`%lAYVM7055^N z0WuaxWKnk1wE%Vr!Qdo*RD5FR4`!S=Jfsic`G>yxxmED&yZJcq81vs(^4ym+LL`j; zfDVfKxGt4r(LJ27TBM8+=M_n2ucH-b|oGtsE(fegC4RAbRrbce=D%wAh1IK=v}b3s$^ zBV2#=MS0_`#sULxls8^tEI5j;uDlWTJs}yiuoM|6d-ss4GT!IYbm%0tz%ZOV{pUv;IVcy-os@hHQ&f(BMXs0uuarJ z(GEzDUC1YP-9?gtU>B3U7&SUHR1uWeySp}4G=fPfb94J|f&!Qra|fssh3qJcSX;5w zhRjsSL@TTDe0x-&Ifmp!psDe!Q5F2-gewTD3QAj30T=L!wntEa2>8GOMsh<(`)>*# zl|i@XELG{*t*JDT$mNX_jRo6<_176yPdgc|H(u=p32|zfvG77X^?wKFDYhryKT03n z9-C~|85aFV;r((r$OtQ?cN}Ax+eaY&Ix{e0H9q2I=CUo2go;L?{X8TmKzr2sYt-tQ znStCNRn7HJBL8xvbdxS!ge!<}a%%m2-gLGgm5w`3$;MgPhu=5rnqUeVuFqdi~*;Ff5)IsjpwZ+0`e}Wgt5J2I zgsmt>FObLh=^6QH`i!f~8_Q;%S>9O6(+|pw%Fpp;cx3c-gwgnVxx7AuFU>M4agIY% zxL5Qggj4y_P4d!|2o#KUqZk`O0Ng#1Vg&hEj43u0PdBRGKt{ujm^y#z!jc-#mnrOgFdEi4tn z`KarR;9V%k?3TC5pZBFvwT@Az;L%iLUV!ggMd+TKadl)-k=%xi7__Rays;SfD5GRh`(`2{$lB1+Mx!*gd5wxKWrCs#*cn;Yfk-D7VWMM&MGP*&L%v7l?t_5&@e&p3E--M?#AAUl?*e zhbRb}VB8odZ(ww&=V|EUAi@t9;%lSoKQLzQ)dYpZ%2B6b$$83fEwF@w3+l0D46{RX zvAIt*I-)vVH8m7Oz80Pf&uge0%S?^ug|9>&Uu1&SNvlyI|Cq0p9Gk3E>%qXj?fk7q zOH0N2<#=2N$^}5V-09Ak*9k$&RECUsBU4cInMnfMC8@wYK<5a)f*zM*a;Pvo5-@Tp zTW`W@Io>uoLn}&6lPH1x;h31vz#0mYqDMC`30BUxQ6uQ`_RM0&1%w%l3oH?#lgU|K z8Vw4VfEoVbHVwM<)EZ;hw;3(>4eOz_o-XcqMI6jjTq|4l6+9o(Uf zEVehoC`EX}BNd`Jb0`~UQ!{PeaNxXODWeCRU3pKOmE?ENl0Lz@Z>cptJGH$sn=qEz zY-VAY(H8DzAcU8*Ep?58ofmDa(wor`ZII1muVXlbAjMm1#p)dFIN62Ue0Z4?BMx<+4Ck)? z9gP8=5j}YK{e3StR%MKsG6Giyv@@;o15)cD*$~q&>tAFj75(;k>Nsfo`guf$V7uD~ z=%O3VG>@oAi_M>Pc}+%ztMPy8#{Uu5_#TX}BL_rB{Xto;(}{zr`28KQc-0X4VKOSe z(K7c1kK8U~J%{}-e#T9A)!L`Qa5l23MxTrieNHTtU`pi8VO-x~1l7`w z%#PPXbfMRvTKB`(F)!yw^g7CX&7kL`h;CKQuw|0Rs)s<0XDRZWmiL>XZmZh6^+RXrgAOH|18Fc`PQb57;n<7y72}KVXM<=765xht2F&rVv zmiC3FAO!YkZT(hU@|rHVOYE@w!SRYr#b!;fub8hH^m{2Pr5`cu5y@j~49N5-@+1=+ z8aJ7QN_V>9>)Sdi)zK(|O2swlK}{skXk&y%zrpV{=|2O7o~uAyE-hsau4R_kwW1Vc zTT==U!B4Po_*qjE95o>~O0w*6;umPI8gYv3BXb0qk%YSd zD(bS1?(v`K`={hvOnlN<>FM#wq?DnlGvq?mYzdo|wX;W+v(^osqv1)|mi!-_RSpk- zLRVgI4i?e_?}EDQ*?Z^}!v>Q9S!T#{lYL7{jpxiyC#B%9#vhxZ%yB5dr!O7ljH><= zs{~W*5%Hhq%BPb~53bK%XFqlY04j6%6enK?6@Sn+*$bG^L5KkGIuX!VMhLk01J{BK z{z4tJ-G37YNDKHOZ_BAE#B28>{fQ5U7?tMp=hET0R3sZep*BC#o1o=&rM~_YE;A}g z3V2!eOV_>6w}-`B&#K=Iv3tV|4F$n5XcdJeakA{su;YWBFX|L10bczQ+!wwu*~@i_ zFUuZpyZUlaB-#CF&F_arb1)&`feZl$pck`u-rOLJg5YSCQL=3JL-on`!_F8Ps|&v!#Gmt;HK$;ITG?n^stSo8hr%MHyuoQpGSQ~Ba70@PZ+}gY?E2Rs-`ng| zz!IMAD5i!f7M|;3>CwNIRxhuIq_xy1oDKdTxv0u({Z-M z3f)v#FbY(7R9fVVKn0&TNACq2JI*=zkl{;Tf`2j|F)pYpOZ&-3=mfG-=+kDUI#-j* z_a^`^7Cv$aMR+?2pJL%XIT7Anh#t29@5ytraFlfVcKnmEV~PU!!)5@Eh4;qf^u=j9 zB%jp{M4Lz&cSEdA`!V)dabIF#9ya?mBIKs=8HD+fSot#M|5Djo$nrGSi+>;r?MZ)F zUu>NSHVm6{r^($|O5}RVtRrmZP|TJbErVU1xE1W0y%oDNMsEh21DkPcRzulYgcw~( z!kSV0Ma;F+jAUaLyTgQl}sLQm@^b&KF+KexEqAPz0o*?0$0BdK2~@7S8zP<}jO2v*t#qqB(} zeg3??rFBVU;J?S`VXjn+(=l%%K4&zKkN1bd$CxiCQY6^0BEnk;F$S|S4~)ZIW@El} z&&)e1Wv0w9ycL;YfW$HUt1msl(Wc6bmBOe{E9|k-^V6BcV=+iPRYXYni;=kqmW!mR za(iH@IE|UZAz?gQ){(Fnei-wy20sNli9U52gX8=M1`6vF8q#KBM}-m~{i7gTquWQ$7HO9H3y#T#`X%kmWe(l3p8?LVl1!{>-GhCjg|(xHx9 z{}7GdsOD4t%xQ^=11f_0w4Ps)Ly8 z`{Z*;`bO;imHWA|v-MCQv^PKW4Tkvzp^XKh54Z_iK1FD91uND29C-4bIFeX(P$@U) zVdw3l&p6b_n*t8rsFp8eHi9w;Q>CL^7(Uw{4#3M`kIYA8)4{x&pF?aBLEmUBkmJt4 z;*!XEHThopE?IL#2Qph%GK=4p$XOur+v|xEuJJOBvBv_8B;8utr_`h5*rT5A)C)CGhW94rge(lhZX_;NAf+e!% zL?QvfBVCPo>-d{=09=dmcX@N{r`%Sd_k;&Oz;|k`ziAEZf#n&TuSTeI11_1xU1El{ z9K(8`)d@(I+4)o)ZU*T%^aA!F3?V=;1WrsH6_co~!WAPZoFd+kR@MQ7#*R~lU2s9^ zU!x&^>>lKpA9jM{>HV0EWuTYD0-`Vy(McwK2pfhJiyz_7IxLF&lG8!2cHWv^lBCkv9H!Al#&}o zdVitN02nM0WKpMFR*d6F!;^H#2n^BTQk<0lZE278zZ#$6mbgkit)@>vz;n5-?|Z2q2lfwwZO5`J zIepk3eveqftidpA7r_mP_a}_`wFEQvd?w4YY{o#~sK!EGz=sesDD7mjn6WF1l=q)q zliBY*4B$6mqLFolJRM%esJzD0W-pV>bS7YrzyHoKqlmcP&>Z}}fv!-6{x3u5e^^c>Mg1c=(6;Jm|L`;T-G3NRbS5gRM|ahm;WK)&B!<-&CfFSCg3%fg6>XqyimAqR6rI^d~h1Sq9v_ z>iixY{ct~gi%r}#9=zX+iM>Pt9Xye9>21H)mfg8^_%tuU*lKH zvrC>KBRF%60)wKSks8i{5aQdaRQ2tUQindCeVd4u^dWQ}#B{-)fKuoa?6p7F^kL`F z7yUfD2Q_n)`ImRd>F&Q~g6=8!E*qusstKgQJx|Bk$?6<)Fz_;*H0~=uI;`w-9&C<7 zVQ?{kbF{~1Uh9a~3fW5(kr1g%?DjJoh5X7#Z-!n=?EN!Z_1cRuuPw3v9P`|4?UgaF z*`6N@r>`0WPWMopRz6CM|26}T+5tDOK~2zAYcjeqrO9AKirw`JJVl2dUk!x&|9@_O zN8*R#;mX|RkPPSwt`Ysf(pVJW|vnF9IXuK)}33=vcl`{cb{ zu0O|@3^74Vz!#YwcScC&nN64us(*>*0>4Se;rwRz2MTf)SJZn;z~>9Xn}`oW45FP@ z_lei&o(9ie`+@`PQZz!@Lj$S;q8nDDzgft-0SDD)FMkH+?WlGFXxkD#Rf33=#5*kLiU*a-~QN;o2bwf|9 z-q_M9=0p2Z#0e?#xvqSkEAMyZ%}737Iyw=|SlPZmPaz&F+eX#Ib|?oLKu8%t_K(;d zanod)Pzq7MJCy^$Sc_qas%7MC|99H)WyW=`fI!aQv zz5GH20t68q2$xk?JtS+4E0w!}N(FEtLti5s8TDmb%>=DkU;@zKym*L_AZdV|6EMhP z4cVxGpgz-$?Q^&X=V%4XfKaYoeG%)I@g93F!tt~RCdGF%wFN*}ncc6V8tEQO!LZ+U zbP4D#XJw9-PgRNqI7+xe6`gE*8GPt1EY>Krubpj7^#YV~ejR$7vvbxedgpo~iG+Ms zY6ivhDa+6_(^BIm3i&|_`9b@SSZc3sMbWR}_0{|muhvTH+yoQ(WJcr@St*J=P{pSa z3F*J2Yu8kz%`>XrB=Om2{umkDW?#|x^7y;4H1Z~vTiwTZ1!-||Ox5r3Y*dZmOKQOh z#tKH&dw>DY>zU-Iql>HJHcDevWzHI;Q!q>}y%qmrjLpLuDCWl%dCRl>Y_hWw7Y-8y z&z;l!@<`!dVs|ZJccxXSVm&oW9M)xMj~}sq3e^(*Otm8NMf{O^MIe&t)DnC3y-BKW z9mt=a6$A3cF(4P8c)gFt*89<2eitdcN$PzbXs3j)Z7s1OkV0iFj8x=(4qi|)@-8Pi zp$MV_Foj$Kj|obdK*o7A@iyBfJVHm}htDt!EgS72%>@W5F8&sv4q6!Jp+LT>#g- z2!T^|FdTGL5TpH5+W!^yl2Ck9F>D0jnkDv;xe~#_p34e>o7mWFf|5&$z{Kn*Oo+LRzlXhqJy{DNZH-1(QzIkUR| z(D6R@V`k|6`rd(ly952+#zi4IzKi>^ak?8Kd;#9g{fg4Xk!WCa4enKjVp>O_m^h&F z^(lTNnFsnzOc~RE=a~NQjOqXHG5tR+pcelWuZ*cl%MaEbEEsGX3-Uz~VT%J0)I#bK zREs_qcte%pAM?<&0AHHXS$!V}Jt^-8VCwm9AoR4n7qG6t zg1z0wVh$53jdt~vAM*CwTmsrq->Fh-5a@!M6QZd=D%v$uNlab~8a7TLIZ z<5P=NZ=8?C=JPj0fx;!gkg8Xr*ZN2p$TR$@i&2`6b2;d;SPD30U(!ER&J?UCv4=_) z({z|Lm42S2g;g=2P5tBQBo-Vi{0CJRTY-&o&R=1B+4jXBP}OClu7r|cgPi*gVj7S& zNnE$wq_uuKkmVmKxm#r=zfb2Gsv#s81R=p!47aJ^8kCr+CP zK|OQ+ZGIF(ncgv~Zs#k;svh|NU-`lH-xLf!U@WLdEtE3ok+{hcx>QPo_wv&M)(lAg zF=KHxk*xd3Gi7wB=K%Z@7=Tj&ClBxiLemChjjqYe*vvTU!~xzhRh!DXLb?WEzHqZK z{~`=!!Vihws>7iJki)5zLx_A&b@Gh8Z6AeN`&^J=$eun)8nO)embG30G5}GXTK^QA z&$*nUMX2yJF=sS@ffB&+g;~%ma4pX-o^)hiTz@C1Mi8>?OZQUtqw8of85NMThhpH6 z_Em+9$g@FEoz3IZS;(^O8n#`7w!?e0eyqlO{G%M!N>1fB>U;n)OC6%c5gCSlEXOkr zgI$4ST|S(Z#pj~3fOXe5F?x|+V9oa6n$1G!&wl*WkRPg3Rud``?!xxr4X}L@qE^y1 zDjW+~lIm?-+txJ)D8DoFu#kvHMmaI4gL!j3P(R$V^Ml2JOm0Fth1+J z^?5=C8OFSMs)Da#D#*|kp!86RL^n%QETMpaM>`Kq^0vU%|$ES-CISYjzL9KUxPB;^04^ z;4fll1h<#}0G3>oLPRm~>16y)#*_@&Dqh_i*?J##;N;>g$ey`~97Du*zzTJkjs+q( zn%cSMOm;DUfc3;}5OV%0&y4Q(1vXG+PhVF*6%Ii5{WoFtOm1}`9l=?LIOe`&rw|Jr z&|8UP3WwkR)=i~sk`FdS$5aXtQz=?!Z@x}AyiO$S-7; zfF34^3sVE*6N#y=opU8(s-1Bi<3SQ>szaL+Co@YjmgmAAN)XHO3_;Ag*)M`v%}21& z1b~G&MlSQ?VLDpC=^Eew48ctM+1*aW0L=?>xympBe<&eM(BM4}{fG$rDGUOo{+^S5 z<>Tm9$d7=MIiX((b9ww~7R?ZW;~(>cjDIfZLR;$p$9}6fsJ4Sti=&swb`tp)XhdWo znzr0OjYdTSvb1sK!WN8c&ce8C2Bz3Jk_Iu0rTGX|qr#4&BKZx-7qeFaLXIZbA6+Xv zzK~!}aEH%cC9cp7{D+lNq$*p=iY_6F{C?-Al+BL~G239_AzyReh{0FRA22B!e#(ZQ z;`%saa%co1BP|gRe5hX23j`&-z~C$_oKCSf^;Mt%JVw#+BWN2N>b@N9 z)-RY_Fp%2&ZpgF8>S46AkON^o7 zK%Nh!p{H|lnOaVYxxVL#Z~xju=AW^hg38%VPpk1o(8HI4jNPLjp1=?&4u;{%EvMtQ zmePVV(9K~@MoP+z%c;PAe84~EO($=8{vd(O%A7)04FBgwKLD!CDdHn~L;i5o zf^1?xTZg8~on=o)3^Ewtb@2&r+7)`6sKY1KI>QufnGmo!2O72|`S|vlgBqTYfD3OW z8JzaWQz3hIM=iNB=oD$ucb0rK}*;TwG=yeWZIlN0WAC!9-e_NKdX!EJlZk`G#q#eI`nDN z!}YUZ&L6roScj`O3%isz`pepG@OMdR!kON+K7yMCLCPkmLPutDg?u$=F1X&i?s;fL zO8r{?Aaq5VEiYJ}4>~Kz`+~loUaugBxzZon`wQ3yX#N9c61ZvZ%*iBhXM~QuQ$i-_ zN|Is`mWj{4x>g`{h>dA397ZXk4DMQCpvp}PT=RuX!E2AAS+xdyi{LduX& z$|TO~U1g>Lh)y+TddTz%VBKP5PY%|N5C9n^dyXhc8e{*A`GaH-nQ&$gu@4?eGZrv% zLLc0y{3|eFS=mg$H~-E{Ag=ILGdHU+0(>7cjRFa^2Pf08d;n=t8#DE7Gt?QL5VQ&F z9DV846FcJ|6>KMJOrL!KHLYp9Nd#Y;Yye#>>_cX%WFnn5$yn(8rn+{^^R1zHT#TxE zT&H+EHQLdm^jD9mv73GCCTIExK$Sb%y>hw8#ENIF&*b_FG%pc6Z1R8RDEQ>>y? zTbYj>A*%w)b7>i9%k$*_=vlk^S7IUP3;@tD;3!P1xh6eSm|l|)6~o{!v*f!p@Vj$# z0}ty4S{6ZsPD0msHEupH#4tnQM$>3{${JcLhW06A#dkc^4c*CK;=?^I{{r!z6)N8I z0DJq21G~W`cI(@jqFYz#>>PjMmG!^FVq8wQK`;iE@O6X?_Q~h)+EKAzM1o!KK=D59 zM+fsINFg;4!pCp~BcCtHM|2_8S5VnTy}1g#9^G5KsvQM5*Td*7^!_WIDoHnu*%pufD>YTQ(-tPak zTG)e11sL@E2k{#J=qog+EGW8A1GO|MQ1)0HSRB6H>Gz}d4+L4R_#+p&RUFvIn!z98 z6ZoUj*{~J3kSX}eLHh9r>Bk?m+YFEJXQ;y;MKQ%6Gs2&t!XM&D;Q5ecdo{DbC%xjq*0IQXJH8V@_u^zH)I+ zfC0A%4FAYE0wj4f#wZ5kOi6*l{i)~cc_zf4Wh#?~u-^@$fYUpJue|@Knf?uA)A81C z*l;uPRts)*B7e`o!e*_1=Q;d+mbHKc^u4f}sCMJp(WTO~s;cQ{2aQQ2Z(C=`nD z$fbW6{%|ZT>r*DB5!`0ir;twk<8p)DNE10$iGZOjPyj;_$cfR`>mt7iR!Vrm5!NK! zb#n)K(vpAFTA9X&iwedr)eA%%)lkBZMR4$i@T1IMSM7Z0V(4;N56Z?R5eDf>Dfp~3 zPo&;43HoMdOV5mfx%>DYzOj+2Zz`3BgeZPm`9uPtiG@-bJa0S2&+4@h_N8T4ODmpc zb*qi&hqqgpAQWRzxyT5|yRG`M9j0g!V*gQ7)T$sZ!=A$r=8vyDPvz zm0*iL`*m&6AV-WbYhfz8#>88zHKfD&uv|Tq4Ny|FkB?e*k(K;GX7ER8DQ8--p2UT; zY^>kHm-pd`f3#$_q|xcVay~mB$o5=)$WkaHr)fLo#|sD{O%!(s5*B*l@TRGBgkx%U zE>vHtdg3@x>@zw-Ha?4y4N6JWULk%zb2n27F)ri+Q|ZHst7Rz-JAfb;6!v1{&F?q; z&h7i0_F>;s?50h}YyXM%Ew+CT@CV$};N4pM2e?4AA;idlF49$MarW7AKQ?}F_UM#m zVYG~0Dd+^CPrM?FRRnPgF)36C0J*fg2%K`t?M?tE{D3=N$(A5%65Sf%T_^FG$TOlh zG5j*-zpDDRa@0+*XA$gKluN1*|Cq0poXT%><+r=?R80Q4G|pHg_hG_VP?^jc?7VlT zLlh;P+pG}Vr}=-DZ^0@nf?U?J*DY&MNFUwlPp1ZxTcd}Hu!B}qzUTb3z}hjD?C5D392dm2ukj23{F0GYCh;a~ep^$JkdSVBX# zTz;6?0rNzN-`l?7YGG&{i=9d(PEW>Lp6%y2OXWqkXvKz=sL>~I#-QKiIMb;Y1K*ln zPy89f@^{LvB&H>1D2rP1XN=iM`{B_%B-{7x4KA2s>=b#1i}A6RO7YtUbmduXZLZ&%Z|bU6l@suhjnA zrQ&se8ZTD#Yy(Wl&=z^bs7VlecT6l|;`m$(xr5M1yESR5Qxl2xq3+UC_=D25CHCWS-xFh( z3cPl9R0RMtRp7x{5WoZ`EV0MM)U?DN8S`wf%M*UDQHduVZ1Yd^c8Z z<0&%VeeG9jva>J0lD@1^(FwY!Ix}Uj#7?=&>gpf1FKGj828daw%y==WoQ{)bAyO$= zjPK)a+^n*8@?4Mbe#2Df;R8I};XJ&7hmOtzSEk*A<7nz%a(Zr+I`wyqt6$#z@_X_x z4&!nOHk7Ss0eS69-ow9;i}g5L7@>fDXX1zsOSU=dyhOA??dpP}-M;pAJ{- z7gC#V|Gqfe0i67@;tBP_dOHrE;0Zr(Q)xHy9E_&{0g8^f&~AbKSzi}npk#^f+UEkC z@Qg?oA0yv0zHfN0lBqe(sO0ecDy12Ctp6gOaqW3(1OhYAx_HKa&QpXFD}+(x_Y%)2 z|5zzHEN5)|3cXO$PFF8(;;>;kwcm+n%xwB5c|2n_;@Q}iW zi5D>}W)3}7AZI)kBiHV8zM@bb*#ots>xNK9Dc7bIPl1;-RISpj)FH*^Vnd2>OtPi^ zrF!p!j&MhU!_vu1yXdb=Kcp;_5@K;rBV$bPqp1EdIwlfVfJ?-{0{`eLXF2)fv}TY0 z7QC1nA03Rdx5oT`u->@!J9-s^9%?GjHO}&YHeP{Sb zP3SH12D>cW(aS2JV|rOdHf5_XeBE3-J(d}$dI_rr+ObX8cYOmy&x#0LRNgpV{Z8>c zM<%jlz(_*dFX|zFP@MdCT}mQ3L=m6v`4v{~??an;_G9s@a#$Bs-}lP>Ec&2>fMm66wzBvCuGS zeDgcgAMJ>YDEf0yWM8J+Z-M@I{Xp$==GuNKN8#T>`}IeDNc@lA{#`A!Z_Hl`EFgoh z=F`AG48DO0eTra1hq8{w%FGduO~O9uvN4V*KqkbBig-dv?RPZem$C!PpkB3~Yk=Bb9Z}ne(-yH@FN*DBz01iw)SHF;3gknze99)7`{GeXl)22^U(V9aO`504fuxXsG_rXsTlwN;2n%rJ)5#>K{evNoCKWv|N=|Adz#__-QdAo*KTJ zQiJ}DAn~t7u4hj!B8cW8yE48P29M+Aug`(Fn0qYdY;-0tq?B;Ijye-O{w0Kw+#uS|eg!rTiSCMkGpag zu$-q_U5Btujpv^qkxH2xn1CHhfwdb19E)HNixCNZ013C|Db zL31b#06YOzaRHM0-=p-Tvgc8HxhlParHi$DIy%R!50b#D@#tDp)wn(G5UBgVvD8iQ z{~86Y#P!=idC^Y(2JOVWNqWxJLKg}95^9*BER>|!J>4TZnZ}oc`xWZ6JQK^#0ihoK zP^9YTOh5oIkVcsERj9<}FrwHGik(#-rI=q)?DdD@r8ckrxro8(uIfJtN&Wvs4342n zeJri+k6V;>)K?&|wd7HV>e;Y3_61*pMqxLN;^gl&f)_KUA~D(s(7KOQyAe<#_E=G+ zE$nktb}FP2$j;Ser-PZHe~auq%mlR1T`8mn-7=OjE7Dn>(?5yQKugWGIWba$^_N;| zPEu8#jD%KLON~#Jc4q0Ln5M&Q(;|Dw7eM)>NXHw8?*{^Ej649}Y?eY=0V)*+%=e+h zh3`pN`^6WsDKAP2mhc6;!v|93D@a`ORI5tsSQ?S1`p;UDr)|V6L4R(F!Iy%iTpO2NSs(FylVE&> z0>oqzm7@d=+V@cc#@2()VEo2D!T3!iE{wOT(rqk_V0;9d9K+qT2F1vaG5;flFBr)& zFl5N244E2Vtv^7xm~g}1>rN=ke&dV;4dMkTd`)SPvZDn8Q1`2t;HTr+(Y+r=Dd6V^ zUc2UjL?w#a(bwK58M<#p;o9Y) zz}9^X6Z|xbjzGBxj5;Gf(V*`9SCk%F7Us@Ol!d=W3~JqbA`5Gg)c-1CP+wG~Ygk$( z234IyW@Qdugl;vP-RiDSK%->qt;QzWSM(gxk$90xCa!DwRfHZu(3?N*tLVS}T_MgtnY51n2J($HGNXajb!vWR~A6VboI&P^T~IFKEG$uI{FOwAb~#bm$pQoKB|e+ zk+|q{sw(Zt(pdWZvc{p$C3bW4*-Eq%`m2sYjEKL-4vR>+x~uMbg-cR{wd`%uBJ-C_ z@L92PdlC#*|9w#cXoI!){$>o;nX1aOkhlz1Z&jMj(ulzt`!SI1?l^pL`jWhV{!w%I zIz3mGozqLHNm7KL+9L?BU;=~@chND!SP$3#egeXuPHzU`fvUQ$)y-rnmJrWnbSF6%OmPYV>@Lw(9I~;Z!_6r&}4R!|p zXE9~9#0`77HSPRT6)TOWU3(pU zRT{E@??(eC3*QvlSxk}yPKwdDPmK(Ld%u%F!B_8z(UWN4q^qj98xmLGBvX}kVyOg9 z;6X4{nKW>s8n=7w2Z5i|j%}R&oRx&Wnm}~%jtX%Y+JG(TEDy2*AjZWYNuAMgc9LN3 zV8jpzr7I%%OI8IAs9^4`*hW>8Ir0rsvim3|pyV=nWns>8NtddCCHfeLqADEt+MXyy zm5s9>yqgq_PDqnHe~CDOYhIUD{(+=^S;PrksY+L|be?hoXTk0uwlc61o$N6X&)&HY zWc#0yQ1Xri@~rv-W5+CcO0)k)qfQd*ZA`aRcf*{GX9*t7xXyZ`13TSuYhwJ+z{Bq zsnot|(GhxLP}9DeILbDOT!t>SJl7 z|Ge~F;M<%(+`9hr>@_Fef2M2N`J1KPCUhK8+Qs#sfvrNj0w%}pKi_{nfr1O~h@oJ# z|9t&5srU^fuKx2iRl1d>t?fVeybS_3(|@*6`UsYDk_7r#L` zcg>V|rOR`5ls|iw^y|J9iA(7$Rl10!Zl(MC9?)nXlrB!+&Qh;M3FOr7%N9PO&%QI1JM9I1a~-ErQ`rCZOYT)&V-M zkW}xwffAR%c+H9!uZcUNbkxSH{q6B|bQ`ZLRVx7`E;^1;rI)kRO~<=;gN~~md2EBiac0ckvJQ?YNL>6HIw*m-Q|K);4IJBtx+N=0kjWKiXl?e zC|{;39*)Fil=D>SV3sac^Lo|xZMc#&yw{}(Nyq;UN*{_{_7^VD#hOH7ID|w(EHNQM zETK<1-vZ@8pQsDvB2fjxWF%cu5-oj2Nc1QZkVqM^=wiMi7!5UHP7cs3B5{$ZyDB}2r4bVO-vEiYL_v`znZJ|Vf5sfQU?xH#^Z@~5{pYVbs8>K7X9hHx z|7>j_8M-fGf*L^P7X9bbUX2pM&kwxzmRm>&_i)YaKWD1?J0WrT&+SyHm!%Q^dBE$S z#_{}TO%EVGjl#=+z+sUSlR1$SKi%konnpqyp^+J(k$|3MZ*Q+?q)cihKVV>B9PbG8 z-2YDzkWwZ<6k?|*G@w8j_TpqZ7BhO*eoK@nd5S12_1&0|SWfJ`6qy+RcD>Yk3`zZp z$i(yVdz7)S=k|x(~*G>`gI1Y?Y(Cprs32e}6sWWj6RjdQ^tBq0WD*d<3iSa7v zc3>V}OA>dlLE>^?DphF}OI;2OA|`3~V}$=ctdhNa8z}y(7VVQhZxMLA{bw8^1!8|9 zB%~t(b;PPNKp`vj6M`kxQDQol7(OA4I-Nx2|K!?#^C+4owdNb@M2ucx67LE^Ut_KL zjju#0s5`v2H#K9;3sl8dA#qvrD^#h;(#70nT~}WX%5A(4lr!K5*;BTHa>>qH{FTyT8)oPyO* zt)S1(UKaW+WzstO^!aB3eYVOiVzHfHls-PyL}w%}`gBmG9a-w8&wy83L7yIp{w1Ua z{g|LE5+YKA?&>%$rAyQ3KRM&ETzf3HNJGAkW4x|?N$5A8NxaHI#Kf4oe9Zud*PgxW zq9oMDtLBDy5px@_*Zv``Y(?TSUazRqjVyH;FZ=V&AR*6Rk2+Lw_e&CZ@Izq41P?t$1MJ~$=<&1nUUZ-U9A?{7dox_ z*(#PYVFV+so)l@db*P=%JZj0Xav>BWPcz2BmSs=u_FWqd&pePx?3$D*zXV>k*{q-H~b2eff$ub^Yf?My0V4-^GjQVFH6pgkY zbI_w|7x(c}Fwt%i+vP6WF3v7m0C%1`q7mhh-LxO!A+nox4;~`BX}TF0MIvqCV#_n?*F;DmnJ7KD zzh@Nq0g0T3&Jp}T4+$AFL(m6g@~Zfag@c;OydvKZuJ60f{^JHPAo>0E zlbWrcatx+=rGBcmeLAN7d2x1DWo@ZkI-F;$^os+G<5}~4d3D&GjNQ$C2AWmNxPtXF z`&_o3?0ly0fFF+&wWsfG2ER@JY!<(fiTG) zBs9aH82X_HO0oa%JqLamiCmm84z1A!Pl()?FIkb7;+XjF^?+iYTOLWjxck~gK5(`s ztze$9>Xa#i_mukj$8iNG;ETR`aasv7%8L7>_2HQ67ZTLJYTwTWl?>e-IL-Sj7NzI=RW6b{zz6K0X0;j(t&X75Uvsp6%nE__a zEZl#7w6viACfss3%2+iPM?x0)qU10sq)z8Ewu?X*tVIgTEzFokD08tAK$8QaywMB| zL`NiNa>{B#UVD1Cyb@5V2{1tS`i1r-z#=>nHvd(1zAn#@K+WN8)4z3f~QLFNE~Bqa^WUVR7u?}e5L-{SKdQXi%Z9MnrclsJ7M;#RBxBE z+Vj?e^h;veGv+T=^oG(*L%py;xu8UQ)(3B6M5?N54$fInXD|SNkanUEOc)3Oz}b`N z7W43wo`-vBaJD+yg#7Tv7*ZPdTR=K+VvKzz)&!8$*_E|rzriUvg(>6^v;^DU_$Y_z zs7HHG9jH5As2i^j7#O+bvo-WN_wIQ51RL7T-WpGx$!N6xr*Z8W^R4612X%c9)M@uY zlsdmV4s~9v1$D01)PelPbX)9A!MiNyG+JKRcNCFVUdf6BlLs1$S8`YyJeq4P-p6rA z@aXwQ)i`?4)`WIA-G6qTIrwd3K_P?LgSQw9u0W<{U|Pko^K&oBEj!g%RhpJQrQ%p_ zZkd5YZqwTO%a7$6mAmQXTNB!&0%PGCKCqH>rxHQ{fk`u8MlF}-=3bg>4nC|Z@Tv-~ zRuy;%!Flp=Ex#cItB{F8Ag!jWk3Jx8tO;%TQ9t>p()s8ou8%G)%ZP$qIs;#{5jfw4 zhbdoO;e2%&GRCTbX+ZG&T%+nmyg($=(A*`sa*^*ttl>ZLdI-7D3yfacBtld7M zyrKO}BPvf}91_`tDhHPpzSIYG^1`BiN6or_`ONlvd56t{Gw`{Kd$3Ho0p2|BTrr>D zXJa6>mT$lox;gh!HtMVY3oAD&3!!%iolt+O9wF@3gfxoZX{I$DC~h@^_qh=4Kb`t< z@eDVhQ*h$1$n^-k7~HVUZ>;=U=(#O&N%9uc%7BY~tgR93PN=P3ySPfGrsp9y0_+E1 zZ2>K;a8%Bs%=?Dt^ahU(Fcy!db_I|2H>zY)tA=?(1m+bOk2_2mguwvS&SI=NR%koW zOq__c%cOO)cR>RK9(xqg6l+2{N!m+vvkAjbf#+*v#0(6`&Aqr(&e_P0Dx&O2Y;_B< zXvv1u)}a+VdQn+?(;Z2b6Kp#3JAE5GT3{@Gm!AZW4l*i#u5x3IDjsSPF>7u4K=a$i zAzdS)yV|Ucon%yf2)T94+C4_qTO!8OVf??CJKDY3!tX z%F0g0k)JgFO_Qc`>-%gP|E32@i_Os1qyk*kRC*fvovh%xUzZ>4F%!<$7cPap8K>pP z$yXX7Pa@K>?2;AuxX&k|xn`fOX6nHtnhU_{9|o-ofHSquG5ps#6neca5rwdCMn+Sp z;9jHZJiI^zVfdRsAqm1;52BwrGP}PyxY1bfGx>0vvEX53M&tVP5fu#u_uezPtP3vU z8Vw@hdC~($<)28~&^C}KKeRET-+OR#pSJ*m-l@jQ3~#XR*X2ig%$$f$r{LN$933A> zODjJzz7+I2;-c3DJj*wh5?FBteSDwq9e&@eYZ`9$IU4PK#QAeZ(6JvJdRurHEF(}2UoL4(FKK*7DW700-lb%_uxz?xVG*#<7Ir)0 z$&R%uD0SP`4!B%W`1uEhoMW-+${Jg%7@w#IE2XsfkP%Zfp(UT_9ZH$w z6TR$++-r2YSjl>c`qC#tElGW%ajF8BPZV-KE=MK`f!ingw`jB5Cn|708twWh)+c&E ztHx{ua9}vPIbU={MythyTQC=ce1r8NVDt)zAAhgkT0VjrG#q90Jz@NJL0HlvxlYOfp^q2Aco2penoM75W;X|_QfVHLR_#* zL<%-&D>C_^2D9Jce3vCSoR7O@$~x8z&8ujVE>m^ukMXNmqI+4?I?YfYmTK>p9cSx& zC>Y@qqpFzdnSk>lP{L8?yJK)3atQBJS2mGYu|Rigy*jH8IWDEkj;bV@Ezw_=_@%_L zf%a_s2!om)l^pw6o(`*|SQXx=l5r}zQYE8RGE5~GtK>qJ^i@e8m7JoI->Et?)YGHt zDYm_GRTx&uewEy%lF2H0O(oZ>@yg@+V20_*VRQ5n)!61_S$SIZ3Pk*L21= zn1eUW8EmW^dJ!Cf`!AzEK45g-E2SR>w`GqAZp=o$ECWJ1i5_m#gEL;kpfwjRs_t+2 zgb}@dvR8jZDk=!#;t%~Pd@<|G)R?}ozMX`Y5Y7N-xDR`~VZA`s)$}lH?nA%n`a2|Yz8EV9yhYr&R!ge*~qbPDmV?KU7tnO$G*5wAQZa>Z6 zu^+e1n!%=S(^rQ(5e0n1M+5f<;R)j$6EcB!0maDbKpKq6*m}9Ok-ko7bA5*m=~=nB zM=226!gF|u7Vk=Zmg(TSId=xED{+bJ7Z2^Gs1#vV>it*yqh2RS8xa=zM%ngnr^Xx* zirFXJ%bE`&@mp}sA36CL;)82fRYPIf#}V4Y;b(9ij+ev*^ZB9e`Zj8_&o12LKJ#|D z&b_B#Rf^R)kl|ToDn_FK#R?3aO!&NX&V2TH2n|u_W>Ml+0~0Sb7GwwXo8b%Mafi+KaSSOI5_Esi;_S$EqPkt!cSqy9wnhZ5J(GL_!0bQAKWk2 z_W_kmSILY23)ydrpOe~?gTz0^o+x^8(cwD&2JRIaD?67ro^LE&XH@-yWle4!5AI8a zepgS-8E%GvDPjR$yWQRVQU}+v$$U(f?JPYPI(;A@I{hgVXhkvV1F>l&z(d%Oi27rK zbUTktAC8E18@Z~Lt0oc@Df&fu?D{zr% z72*-|jT_CEqF1f%G7o>mt5yS6I#hTc9fDv}`{~bzk5atBPq8k+hV~D6qyb~4+GB-N z)4XBvi%}n!-~5s9TP9TgNP8o=Ql7@=+`wDEn#zynmhR$Pl>t#2T`K@D2h2*mo>R+2 zXuEc>5L!8FL%MMRrUKg=3vQA6GTM+WCdRrmZ^A#u0#mA+&4o~<&}b{8x3UMa=7;+C zG{%YBE|=k4>T)$@bf`wCTSd$ohOgyl=ElHGkYVIkAlR@Dk3I^U}W3FCsX-E z?>Kwv5DPMD;*jZ_8>k+vC(O7LD!b6B4B`NTAV9{d^QX75MyX7?I8iHNN#%)M)dCOuB zI4TY-A;m&ZD>hm>bpR&`!S3bq4y_K%$O?I&^|89Y*Jda_=22=8>+G}fi+v5N1$rQ? z7$V)#)qOG?x62JT53dDLahE1;Ys8mA1=1b$N+VS}4eLYxbolKT&({qV!Yo_?K0LKS zGZk$i%7T}W@j00+CzA~TQtS!0DhmrcU1#pF<)-3gzklxH5x10t%)|RlbPjc&^yHnz zckYxcVbKZJ*}W3plb5zfUcxc^G(#di!DDTVc_Rf6X9Xb4ob)}!4BB5xgM==?@|5=* zBIv4lFoAF*Hk^=95MJEjzVKJn39VW$V5|%G9B5bH*oF>biFp{CUqQF3OYvI&cVg9r zwG^?*EY%m>Oqbuqg7La982q}i_&LDg{8KQQ`v>RE8w*fh8AR}p#?5rfUU=pt<1BfX*dfI)^e09Q$QIcKNZ%b9+_vqeG5U6%ETlP6u8xpH#oMT-Qm+v z=ZoAe6z;)J_b2a&_KyDp)b{Fx>*-wm3-ouN(%%ayFck-uOWRLtcT%U&-;FG{%nmT@ ze#25vvvZ1g&kcH|gPe6dXs2TJFi$9c-jBDjBi0fJRPRma(EeekOICmv2R5#nyXsjyM zFUQBYyVmpg+IUmI%Iw>JM54=G88WgGz!WLMXM+9qS5Jbz&!|4z8JjVkY}RC)iC7=l zjPsV6iiwl!l3%#S|uzDd=c)u9S<8m`>$SpnA2us;uS`$!n{*OdgH^&r2bYjSFl=D$)4K${9eb+R(+or2K21)&cE z98KWYK+T$*6-eu^fT;^02n?a6A_YR96@)$r;E5hWLFk(RoTXX$p}hs6_s!6noM)v4 zr^VShQv>J?MIozTwNv`A27C|*J(;sys#CuPFd}1x0p8<_DgvmACqM^)76piIb&=9r z^vL#_{ZuuHSL!hz2q4=jXnkPlW@?Y329ZWv&iYtH1oip9fMK1EGd|hLr0XJ%N6W`Jr9r zT|0-G{lLH{wI0HdlD5k=O^Zo*0bGw)M;NPK$K|KQ-B|n~HlO2xA%0`=Gn{Y@Hug3a z_lH$OuDelrjm%50{RB_&)-K``2vLj5;b|LH+mOi*9zDsZdV=j)H)9}obZ+|%=@(51 z{~l%wn%L!Kt%<5H5z8<;Co3TK_{|AQA7LKE2+rnUj(!ol14#YUNNeCHK_;7u6M3SL z55NvkE-2!(XB6?}NW;^h1^}~%QF)`voorO{kY1E!8I@yH?i8bP2y#)1n}Csr%W2UjuSo~5N`_GGTn3cM-F~8r}%(4pe@ZJFI zWMSkw#|U%b%jX~d3{8-+Y=%{%m4p0B+^0}a^k_1yC+Z&7i zg2zrN9jBR~xP3x&&kr5tGz<9{{)J3?9_wvXZ6Hq84FGEM-1|1954n_Pk>oUAa%A0v zT!S3CJdnB;HY}f!9ufPsl==LAI~Wgu@grfxiDz#SA^;RB$ISiHNwE!LyBT0lO(pd9!7m09>uyqC!;b~YHbV;VhWIjXLr@&Fm!fk{m_|< z`;i>XH$LS@4uqPM;GYg=FU{GfV14z)7+BFwXjo?h*2Om@fpr#O)t^%!!m0F8g2zrX zDnFrO3h4V(uD4P77IUFp;rEf!L<{qW$897@|4Q zQwOu{3D?IGO-xUT49Ub7a;%Tkg%(?|K1s3ArsqnL3Z+E(p+n)toG=7qmJmc3kIEr5 zSXR#g0d!0&kcR;^7Ceq$C9{r)&N#g;-eAvdTIm;=A-WKi`pQZ1bRiS=qu4N#Xgp6y zc{#{ceu9F_=}E({$$Ww5(&w8YF2h&fjwf*`5XvIC&ADLSGC@^~$s{AjtiKJBmQFWf zH=MqywU%4vT^!5JLxbZiH$}yC^$5+FX|Y~WHBU6tpN7fxI5Vy9^u6nAmu7x!(RxSQ!*|eHG47$5M^?PoQgtSH&d}My1RbD;KLY)A3BgVRVOq5N^p@Hxuu|sqs-fycp>t zWY7)src`d49MBfQF$7hZhf1a}<#e#D83M%O%(7rF79P;M6?YdVTuepkL9rC#IXDAR z`(EsC`Jt`EQ=BD)%V`P@nHhg4lQ=Zi5X*Rx!+Z|RA@l5WUnx|~g4N)}kwXD^;8F{e zn^XvQBC$!k1v5yK2<`B@S6aiON^MNpoTAtvW5KT|FX+D&#Zd5jo^C^5nO}ioLb=pN ziO2}W2%kLy`(A!%YCZ5JsimWRpqgLs@VxamE!rS~K&_yX-aj%`@W|Dq8Y7A-!05yb zbuA86AUi@mo)1mZRtwTT)nlyC$5^_y8Y4A3T^lVwjh6HVuw37d(Hipw5UFV7dKhEzYNc{q z(q>d%s2F?D)i7J^8v>PyKRD{d)}a)qT>11G7upW3=^pboiEk zxIU2jHc+C^=?nCG8%VV?f;V%#RJR|u-gzGU>}JpfYpx5dffvzulDcM1Hy`{IW5H6$ znq2B##-hITM|FZ-Hevsbp8x9ph z$=e2rQtS)Sw!706a(q8RT+X&D8oBffOPTTSiHa)4l;Ro@)j9*bQKGu7UW=-TXYeSx zn8)!ehU;x&yv}7nR=m!K_-#u<%W;+jHSII7U*(4u+?zN^g5YLR+$>M+Uz!nEdY-|t zaRR&Z6PLhB4aXB$DsnP`jqyF-puko%a)ql=c{&*vZ0ulIJ^@jO0?I*8xGvdBxS;D| zHUr`)Qn2xJioNrFR74GPOW5}#TxT3W)s|<;|0boE>T|EnSADK40;AlyCNQFTQlgCSVL$XHE9BM%%f7H=ZADjM7Kp;G$X zibgJleXHCFV$=pQ~^SYz3;sr4AuUhkleAR%$c*1S%=AJ+bw9{qbd74yZX4c9Tp4T z_PakA-h9EVSd&9>;YH*`A_N(k=H;fJb*@6!F>$CBKT@r z-NwOcrXi$?dF?XKYQ#ig3f&Zq&f^GHU4YdOMA6&qL~u2z0`+$U7nr2jx4rX&G2uDh z0~$lBKxneoaUs>mZ~tIz=dtaIMy_c#7IkEpx}wo10x%D9j|VO^HY!KpUp#P`qEU4_ z`riEDHyOsl;glHb`n1SEi>t|3kn_wGc#&zYH?%wz9o;jxs5!;%^bdB5m1QLOKv^U7dq)Gn)_Qh3-$K;82E>8Td1{N1Bsdc~MZ*xen+iEA0S@LM$Q zvE-YHwSgdANA6i@o^+>lNFd$oFE&rQaIG}tdHD}5pgM2l4~Z&oeZh2xz$dzeQ$d{JsT34jvKl3=(>YA5vyM zq{22YGiJL4(*64R=1J$sOwE%mpn8@6hnAUGyBODnYq4?QY^rGFs!^j-_UKeJ zauH|Q>{y5b5_yb_wuS+sAIK?PgrGre+fiyjG*j%lHzL#!xsxfac&m3p8WHZ2&~_AW zX?skxZD}?^@N4nfiM9RneG;t3e6SM)bOyhopU!|IJOCVn-X8b84l*FtQ!SzN94zkk zrrO;eQt6)C~Qj=cvP_e!ok62B;M$PJ5=|dPiqMcxcG-3sVH_p6+>k5k01E!PtE9d_u#R4y+ z`BwU+CeYDgCdNi;|4#Kzh6F!g*QLynn&}UB2B8`Ms|KqGZ!TZ5JP$9|1_0m?0!G)J z0U1e!SYNh1X6R860C9RbTPAsw|eE_3}6%mN+|h%U@Bt;f~OBi%Wx*T_`bT&@MFzd6 zL=+1pw3tV>6Fjzq7CF^!sR+Fpl13hAeIu8~HUc&BV~osIT8KoXNFy38EDC)tr(7_> zf+%ZHH)(|9zBo)|ISV7(D5vzK*l*rPOt`rjLgy#2SwfjXYmN;EH6qKf{uh&=T!uv_ zQfQ~ccm$}304ZTys<6kiDFAW;8V`l?prOX|RQ;pLA4~WERjrm($AO(?c~+$Y2+E51_*Roog(2|B_S$KqTaD)pN&r26z^|Fs$iq=~tS$`~v z;kq9TF%?6UdC>#ply$0f?1Y@k!d_3 zX>Nb)9C_+AE;jGJj0sqqjdt)%q(nDByj%tZAUR+%$NS+shl<&wLqkKB;r> z;bP9L%6Cf7Lq%6heZ2}}>ch97aI`82-#TOEPKn|qTPn|Y@xgc!1V{=@$oQGThc~7M z*KIF9+J5GIR)T#V|Bt$Nfsd-X+Qt)LARzGsAsP{7&}b7y8Wc29)B%E?(TN5{ji?xl z)u^ac5eD6)*Kt5kajcfZVhipejhKC|=GmsDPIcQ1U&`+WX9$ znIs5(-_QU5%TGBobM|H3_F8MNz4qS5qD^>Qq}mHM>~-z032yErdu#U5AnAdDjs?ru zVP-4taL{tB%LY34#0Aq zD5zEvVqHycDcM2wb(ci@7ZqSP!;F(}JZErfpjEr$vW#ZW7HxL6d==?bi2`vF!QXt2AS z?4|%z$cH%a_CeDi&UNTi#MzbKDD|Yw6mVN?eMhLj}l_SslB&UkYCwcfj z`1`@FJkBoMIQ(TuBl7mvj~e``f8`tK5Dwa2f4G^eJ`H%qCt>GvvwrT9C-S>vr;<8_ z6zK5IKzLao{Pw7D)2Q&qlJF-b;g~=CR!R7~07y_y_Jgt_WC2q4KJ9ZM3l!Dax-3)U zSuV{vrVRkg_t`4@4Ra?d^#BlFEKtl7CC(JV0{mWFAIQCmS%EZS#W;0qoUm0ScGMCj zv0$9!=3@zuicI7YTz*wLkX^0s;GidC*8M}!Pti(a)@*#B{;x)doVVnPMQBGy&#Ft>pcFtH`7V)=u9*_#jL)t00Vs4x;H^0%5WQ zGebYa$@os{yxbzc%1bcSQW(MZp(M@-X!O_YlBJlt=V58sAKW#-xO;w_To@4i zmTlDbmf8J0wPwmJ|Jg5M(rUb9TwBv}@ff4_aeiBL0S*ipY1ICS^Vvw|&Z{vFf-8RX z#Q|f3E(An<{F*kpvRL9Q1Z0L5nWAcFyrULX!g<)sz9( zLnCZvL^A#Tc$}nBJB9VZ7a2TZXo1->Ud*tW6Uod)A*>%{v7lV~fVa$4#9PP@O0sg; z%!_31K0-=*S@J^)2HuhlczGx+PnrA=Y54e}Dj1cUXC63bKg9eqU*hI}9iP|)!>#qL0%ivZE^Se`Pka{iRN zP3O!j|=LP{{tPfHD3(WAjzWtLOPw&epJ0UGQ_jMpU{j^8m zDIf<_x3LEujwj^ivtRCNjdpKWUe@51BXZGKh0{u;67ur6yT~o=%1g*y?jUJ=J3zrcF3I2Y9qv)Zt_BuDo<;g%Od%W?o(458O1O`#dED8MMN!6Se>lWsIKSW z_kF20c0}{!s5o-EoP2^xlP#Ni@aSSuub7D=kLgW!&3V^;_e^I|hGC(AdLUpBJ*8=# zJtqPd94Z0`O{=<&-h+cl{K1B;e%aQzn+77-g1q?mRn^2?g&_C zBZ;XID~en_^anSmgMi)4$Qf%c=VHCew*jH|32V5;p;iLSeHw)5))r`yU<-1?7f{LJ zG^^>in~@{`(~DG0W*Q9@%nfI4abF>_gz(#hiZaJ-zAdLO_ zLHG}Iajgr|P3x*IFwNLb;WEu#VVVP0<_p_TgC~_@M&XlArKm#3mf~rKk=RDtK%Hc# z>su({G%J zxf2Ts4y{6!eR0SiemlXGeM+%22BXW64#(m!tX_2P#9p($(bZWu%)k2JBk7n+}mAnx%l9p9hVKr{dJGSb(udq2p205 zx(gn^EWPtVUlJMH-@0E~XBg6CR(_w}> z#4xzGn-KPgocU zm|d??dnw0KV@nne8^HlNLdebs{p^gdlVo1KTa$5Tl`#urV856L0HNbBs}8_PMF<2M zQs%E}#~LZ8ye;IA9&;=T^Z2M;@q^@KvPcubd1H8`KfHQhir-P^ZJh+S6~HvOf%+6+ zCHpjv`H8;BOxxhzPSYp-%$yyDj*Ue|b<3ctTIi_s>XriI&Z!tN)h$KFtXuG5@M@fk zgkxQBIK}h;L$>DXkDDS1FffUrrGh8gfs8^0aN(R|Bg9&X9L2E<%Cf&XAGG$CgE_#nUjN@ zCWI~27S1||2EM4B2g|@!=S^(|w?;)gp<9^^nOP-|>}&bp%#^_&`m=CXra>e@BCj2N zk&A&7D65r>upr>fl}}8Y_U&!AhxGnQVjBsJo-W%PJ$1hksHeyyyP6NWTrw8~QQT0U zoPat3u)zQGL0yZ)q7ti~xsN#R4I4scE4E0gdT51Wi%R)j%kvB)o_|gh1YeU!_OpC+ z#Fh&evc~@yHz%U>-*V<**|_NW*DV708}i6r#79Sf|M7+YUjS}1DK@T^Yg%O8K(0{8 zvX5gb6{JvHcZmEL75+ptVImdaL6axH=Ao*z&Zz&At{v=oQ+wj>55KW*o!dszo#AYT zu?g%$E^Fv%RkV=sLJ7@h$1o4&kfm4%<64p(@4gGsMSPL0)w?gj1O$S|WLpScC!>!0 zd!4tnxSy0*bP>B4>-@9Z#ha0b3vC{3Y^uglLbImO^C2TR0{|9j_DYOhY8P6-faUuE zhm|Gf$6ZJfnm%|U2s(0Vg;4-bwLj;_sb=kQ#u58{v!~sF!?Vn-t!c>s2uAIvkUO-KYBpYjaTeO7;wy<(T={EHk_(dL|eJA(E8oT5&$; z3vkZZK_$bbOQ4e z+jy(1%<5^2lO!5m z%6lGGi*t-SgOG{WIA)-VrhleY(T07&+!oe(Iy@tb@p=b7dVrg8h0D#LKEfL7dk)Ud zc#Fwu-;;*K~MLtri>R}!jghf-TO>fjGQ(i!+! zqlkS8vUNTtL#_pWWGl27FP()m(TA5*-H4NWbH@#5pg$g09Uk62iZQhR(c&7Th3M6> z({qqgiyli$sxn_^Ul@$VxmU$zLru>7VH|7(pisX_Kn)aBS?KR@Pl7|ii&64trr-wJ zppGec^-Vt;1qO>j26uOw)>mbU465p7ESi)aT+xKIk?uy_AEc#Zb;2lb z1Ad2gJ22huS_EM5nr(0@sh~})66+~Z7%>J?!qM$+_j8G4e};6{8CK&t;1M#ID@{6w zEjbAeT%MFgf38jLnhSsLB`(HEaArPh{KVXm3q|ZfHXuuRbz0QEuy;maTMOroa-d^+ zZV4)+MmwVK(BN>%Kg4T%2x%EBV0;tTmmy(kJcD^D&aIi=lQ;LM1ggo~NDf)H3?Z_dFrWA*!6e@DR@TlJCD*34Jy-u#IAIAd00Ea&cgx3VZ>v>+U#wNOj z0cE(MwOz1dlk0ZlxNi3)&W9rrhV>>tS)S)U*6YKE z_1Ne7u=zu|Bmn$IlSQpU!xwia033rt&ie4Nx?p^Lc%?57RK#Nak9(w)tPO9*FIcem z;vrB={430b|MyiXSr=BrL(Kq?A|MO@*jkOYo>!%~@P7#o;d`zhmwnCsT))k{==A+u z`?oxoNXwY4*k>M+Sc{GQUS_=Dh`7d#N!UlZ-bXK_G;vbQc@B}ZTYDv{C$07-mU92? zF0!1#Rtgs=oml!`;x00UMKE}BNb=yGPDU+nYGS;mLZ6+)ka?qhW=Z-gEI4-ZH*W4! z5`MEJzp;dA6?HuNE3vaN+@$xvKVi9bgoSeawJOxwXJ7*}_7joNy_%UO9v+D`Vp zyD(~TRGXZTfZ;z;Fvi)ep1BKEM!enM-NJmlHx^}1T67k`%f3b)M_w$Cp=a|EE<>oW zG^?KJK110!knsskzzJ8+nK}Ap8eig#>RI%K;Gk221mu;&DY?)C!@Yb)vNtuC1Ix>@ z2s-!0o8jSvx!8gEMvulCuJaQ1y0`>Mf7G9iw{7GbynAt47~Gb1@|Ye>3sTG$X?youionY}A!OI3k|oRTHHY z`8QC@439?kx#xFJK{AUPjoK&h8xPS3g`|Tu5H85v$2jp83!km6l_#5Pc^pN5b4fzr za8kRLS*M;lbAvytW*kv=iaDZwpCmr99Fv|XH>G?cA&OZ}{Nv|x=X0BEr&ZC>07?Ze zn4fxHCh4u{r*=6=OoQ64!2N24=qiRg_$nK(qN7~uOUVGegWWxq5~RFEZ7L0FI0onK zkKC^oIIqxoqV}sO5-sE_YdDr*mnCNWSb~Kw!=|81?8?8O2*w>wUu@u!ic##c!w+g0 zL~&+08gNM2GgqJgonilTAn4#4sYRf?%rd5$sW%0B8=HTXkX(2x?r3i~N&{}a$W4;4CE|G}#jWB|&o^=%nx$Uu-M zVjO&0pESxRbaAV?eHP{;lv~YS(5o_^ATz9$l3DS(CK`HaVc$hL{|N|IT6onHV(}^gpG%BQ>`;M7?Bb2+@fE8 zD{X|dnnCDLO9vX^X90PoF9)R{-#%riGEYKf(<+mUSL!m_MqvGb1M||oxO{q%XXF9` zn>j=tfZ14d66{HqqfcL}Wt{$QxEvnygk-~bUS)GdPF70IkoO_Z_;)&#&XRGC}<`v07ei3Or@ zdPW==#i3{ca8KB+-??9{iyJ4_nu=G^(ee|#b1-D;?)TE ztA*_vC;C&-;&?5ttwPdO>yi?NNumAZ4e`rmjambSDB2{ZNeN~YR~d`F<*1C#>qv>u z*8Z_16F3_v0$jCfbK3UpSAf+}-YF_lDewPsln3`@8o}$Ry|BNs;_|depSifqh0$L8 zegS?jjs)iZP>l0X#xIS2$TW?{mW-18wI$cDo&&rB*a4CMR!Qxr2;Jb+G=0RR|957!-1*vzO_DUiCH$IzUfn2dPpr zo$bR??M-L1Go(~m0iDcc9C%Q2CQFA)F`bR4IZthIr#T-iBUCo6fywreB9*~hKvM!X zyEB*}-euxpgh{YH6>lIw~I&NZ}yct2c&NIg_Mm$9h#wtX; zG^_^tpeYDZaJhFG%T#v!791@^m_TabC}UTxE>%MXn>sF18;gc_9yX>*wF5PsT0W9~ z#-;u-!z(|E-H#4ERlKaHi&6K0s@i23wm98J7PC7~+v=#()d&@#gbsdTW+l@>oYyHf zC`)2BM9mE(TWbdx(R9(ja&)rD=ES{1zqM z&V5vJ{OWc>X_-GJc8ubR6>g=r`r+7gNJQurl)xpiJ+PDRtm>8%E4x>>oM6=6tLpvG zW?!ipCIRSjTujpe$?_5@IF(E=sa;oP(!8C;glk+uwGqBrRd3>2PF9kOKJXq_)dgF2 zPWyreaOTIXUxuw1oM4o@inLQ}zkafhP(=H7IEeO+CR%*7w4vW*84}wHI9~ENUSNvA zO$moktO;JB+~G;Cax*n`(3T3xEmwVTbN52qpiMxO^nC_^1s zW{_1rfFBj4-b7Ll%j(Muu*Zu$ADc=x$=#keNyot(ZD(be}q64+Pq0g$~8?0L?I z0{H-97Lsf}GXfxj%QLXm-SdE|JNv-v7Ok0b2BpAj;^rmfAYfo17ug)JMglyt7oC~2 z07!HKKllU=r+53DN)k@+>zF<}jVw>ssb^uouS2Qn7vqM_tYYgNb)S84Xj9ea{>2WN z0!1rkbbAG&n-*)rjnRuht=4m`X%~Q6t<&|3m(XZt%apUyb{dyqi0+L&hDD<(gC(zW zr_qbBw~rGB)D_II)bz7!Cus~4`pXLC7E<@h{WGf=Td&!sEcMfBccG=9u)Sp*VGOWO zml(X-t>U_7uarN_^>ObxHz5W;!3bP~1?hB#o==0I6d0jzdEY&jnL>T>p&t8E2e(GA zXWO{2sA$#n-jFI>%Ds0`Wp}-tIps6y_C6Q~6fkBT&W<1&7;(;8nVPzQ8XZocDW6z&N*KJuSU5IJfB4nVOQIrj4p(y!Ai15gVUW;>gMZ8pWt!N_Fg(mV9i zDZUUQ`+J~M1(lh^DctCe>#hgdt(D!(Kbp;ZV;%$pu~!Ewx}4hT?oCwP#s`F;0~h`5G>zjMj7wMZ`8Ig3_PXpe#;u_M;Mai-6k61nt!5k8*)0I7-=5=V97e#z zzm;rX_y$k66f~B7zyk5L87%gyRKhwOsZ>{}SKO+OR>eYvfmW6}P@~SbSZ1maN3GX|C;ro`QMC)GR}6aeTsZQJzwl zYG3AIgabGbcCs9vltu_&y!NDlY66qTAW#m=fQ1lyDq<_!bN3Kb>XU2F{?c*Y@p>X6 z8JMuG`iLHT)tNGllh)BAV%Ye|KS<7s4CVPMw^UE)5!&{#bj@-O6DWBMAgQfp69NOe z&#)`LSAxa2u}57qvRi*~00`cDf(yYkcBBy0Qz9#Sz+D>01>52{>X(A%#~&upl=|3X zos8y3-3}a0)e_OH`7Q~~a8q;wLlub$Xz;iLK=&`lyU@*YqbpKvWuIhebeF_j=qiyX zS9ks=fv(hVgYNdO2ac|4iRj+@Z4$Z(G*3!8d=TsJGA5AxPEW(~Y(Nec3|CFk8?A-zkuH1;9ZpGL?3`=y_5}rKtMB(oVT(^MKqdkMO|o0NkP-&LQ|@= zL9_FJfu?GSXg<2rjixVz%!mLrVS?+A9plFLCzRESU$}(Z>lW?>imey_R^$6`+l8;Z z6nwKcCDrQ+bL@F8TYTCs5kK|9PRRGtOfK;*oZf8J}WKyK7UKlc*M~MK;vH>=aQ+p(v6m> z3?)-L>NSn0e&M3AloT32zcE2$snUkV&vrU+8mpE_fv1Nb|AZgyLn~xv_t16nn0gXscD?aCrWy%_(Ic|@h3}p>dXY3s4;r3}EeVpKCU_O?$%)ZzuPN{VL{^Q^uT4NDC z#o;5l|FP&Fk~{$}IQqwATxuh*S-ZN@YX%!Ks8sB^zutqDE(8N{rV#vX77Q-W;ccAf zm*}$>Ezd<3SGyQ7EK(7NJK6P|r2dS$!IZk-HcTfcz&S*p_{U=&tXshV-0VLoerL4@7MMKdm-VE8&+#2!Bc(+_EG~UD5(Q3(v@Y`^Ml%kgxpzEoGae21Ap4a}0y8=yC$~3V(6OBzr*1@A1aqBXV&8^F zV=uMWo>BK7g+HWo0@#4@fWgc7G}~OOr+VNKK!mWDzo3QvoXw5`#T&3GfY(U63Skj= z+Byn$DV8g$Do`c+Y6>=l!OC2^y?`I{BAI2X3>GS?j%Q_1A1f4=iH^YH8?IJLTnOnS z9?%4GEFK6C;82=!+FLtSR3#s8t((q|;!#CzrgBu2~#=1p!MoGd*LEb>FVF1m} ztq@3<{sWf~ZBunsGPr{Uas?a<2z2;hf1RhGgV55{JJ8+zBY^>u(i~bc8Lsgep~v|< z(-TB1*C2j8AE)|PK{!}iktCE`%|7s5kp=S+>2p8GZFxRChCTunfo?{`al=cFH3678 zbf8zUN#IM4%&~Xf*a84FUu%|=-4ab8e&U2Q6#po-75hIA%r%gx9%(5PtdlOyZlx zdv4i{&EjH&^_khFZF?Xt;Ba}AH}1}{7u?VeJ@;q4#5v>8c3e9x+5U0jRUMrV#eyL& z%RtWXPWEq%x-ca!xXni$1AE7RfDB|EGJ+4_3zSORVfT6Wb_9EM<&i8|h9<#OF3-RW zRZtlfLK*oWGI+@n{g#(;ApU@R}E!qjx*R6 zegcYAG^kV_%jeP*WEZhn;2Yl!J79xS80q+NyF@&(*tJe=qGcx)>;(FRF;~<^=g=%l ze&gZaM{vZp3j(c7W*F?f9M)iRD7u=!!)i^0^uBOAXA>aJX&W75xYCz_*e{IWls9EE zK~pkeC8IsC51Dsl?tGmErFgsa1IM_0I`sbq1fqC0VBa4{E2F~Fea;UsCQp# zJ@9xcS`rIT%@6oXZWgs>=T;~EJa~2Vc8ox~=5mqavByCuhKh5SDi1~-cbv5+zu?bZ zvfgHSdUV#q7{Dm+c~>V#-vKYE5CFPPf6zyyZ#lP<;PBy=UK=azHOi z0G=sDKomA=qe(vrW_3~!GTsu zj3WvMz_gzgKL@bH-RO&@2fq8A_JIVywr+G~((CA1v@tlpX{r_)4-i(QfY2NR_CzvA z08YqOf6yiG22S}YG$lJBG?)y*Ps;S;b8G-1E6}o%CgmtA9^G95A%%h#@C%^5;8fn0 z3kK(E1}BgAf#7Wp$12=A{sU5bkJxtoi3nKQCU5jc zp3SUN&oSuG#gM+{>mWocgo+ks^6@Dt>F@y2l9Ne_FZdxH=be~X@zcLHetwkM{cTrf zVs|XWazPLs#NK}EEe#KN#&f0ztV-E{QTqpWjZJBdTahFG33B9dsu*(QC$KaYb{p;f z<|~Ob`3>BNnUYR_Di4NU`?=ZpRev-68?$J`j2?@L5N0HW%c`=?8tlhwJxjw|w8nU- zA@=FuhS+9;2sz#n1B{iR20Bdi6y6@YkD$vOBacg44>d@GKZVaX?c!sE8s+z84op62ekXbd zYSS+Pp_Z8m@WZ>J!{m*dR`V3CD3w1&ue;i%SLOKq=l`Ho{v+KbmFKcCyKouM#qm9w z?eDhF_6L*Mu4~2zSkibk>W)gc*=)T=Y#Sa z;JJZ^&=AzteRP>D`2d}fW4|TNA?D$wg;Mg{B)?4}Q2~FdvM1nwW)0xSMD<`Z3{M2}UyuoW zB}vQLYGfny7dF@4ZlJ{80_GxFLx)ab!`mw-lG{ErG7+x*_m$w)RG(S&(ac}s111c6 zrXOcU&dy?ZFue&ndG*G=ApA_pw4qeOq#}W4c_|zm_%>W_x1ZK9dKKGIb4g-b!>ZWJ z)B`W_U3v66jC1?dBf(Cdcdu!bLZ3luJaj~#yH>mD<2(JQ==1LW(kFYe(8mbPVGTEp z#yB)O&!N!>&mPX5>q{U!(wNIoE=bHwZ^ zO2#=Dd%(mQVb+na|M|4E#RwoU0p%`5(V?X14gEmT7afWw(R1>ZkTo;ecL!1yE+^f-B3sc^_?btIUck2%qzOLMw;s@FtcLH6}<%KYX)+fTQr>Gtzd+dt-ir~Q7qeND9l{LA{bg+Csz1T+kbK_7@5 zpt9moA)$n)@_xrVlNC>D=(GT}KUCYBonrt4j~F zaaWdPNHHCzm>P)P1`(38j{=bUh*uhQPcZru+*XlluLNFaLqF5Lt10gg7cEvE#J}Qf zEu-`Ttqj`Ej7o+wekZAEx(h0vquVVjwZBTzL z#n&UJO~elE&eMN|oW=fTJ`UG$V@iNy#4`MmoGFW&$8qr^k?r$=ng6~SZ0$7V7}GjC zeF=I73R(qW_9!Y2JXdxW6YSW>61i)F2Zt`gO))4md9DVa9;5btY2ZEV@IH&T1U7Cx z)3nC)XvOzVyaJWyo8-R-dx8jYVrzJ_ji^#DtN>#k(bCn-Z{dx%f$$1{{wiFNTX~fD z*a)U)@Ydh&$kFi5#Y50j^h}0j>q4LT+0>FBQp{M3p>EKV(aKS z8I&Azo@w9Q@X2LsO_8eIJ>0^=+3xl0xXF~4$FiMpz4}WGP>-V9S(38G+3bxC!_54p z98nlO@$q`|p+GPnRv?aG5`L3!KM>qT<1FX@3O9}#jshZ zApQR)sR-iN#Wi1#U7x?Z{DnvEF`Kz9x<{P0;6i(Z6=>UNzFb0kRVuV8@XGos6xaUg z>U1}(E>I{d9-NZ^hGL+J5{xtS!9K7O?)6nNBtuWV#zXjF8P!Edn&V0IoE$h{dpjYM z`iJ2vq-ctv2M2wy2Iew5i@^LjE?V*-sXwF6f;2$vF;fh>0iSI+#aP*&Hqm&WcgQ|FQ?ahPNy>b*g2;wZg zSzXuyWb`cwMmY1yIn`MVMEbazaTjU})Vh+_4 zAd;E1iu@ZVinXc6l`7wZfUO^iGQLCsWL6ku6tNTgMjEd zL10A=X$6L2OPto=W`^W};X{^}C57Jj=IxGeb`5!#LUU8JIoy@_$fVIyBLXDxxrPM- zitTdMZjp8aWD9Gkh>uYxTU4#fU|b;=XdN{+={gb`{_|K z3m&Q-gVf^}>M=(>!s>CSdR(3bMRrMi83Th85;suKm$_Ue9v8!Fbgv+EtK|Bs*db=? zN}L{qKu#dMZg{vM0QaWo{plC@X`ue8m4H9I&TK}gY%31_?su<$?Uq3PhofM`2RPQe zcL1cp1)h`q!4(C*`pUywV~^u4g+Me*USh`&f$09N$O z2mlRoKR|d*%(i{Sf_srXGz6*mU|Y;;M0jRxZ#$9yIc>McP z6r4QJv?k%lm2Qlhl>7msp1|niK>likGH-n~b^@Kzf&@sAWQZit7mvQI#_?!+^e_|CcDtUt8|#363neROL3OVY~D z*#*tdM0NPXZ|Xjly8F1d-9F647k^px<#DZ7%~Nf{X~r&q#@+cY=$E9;UtAzJigw)k zuy$J~{8&8#t7aY)ryMea6cOS6AoIROXWq9snfLj)?;MtD-fx!V2Kyn_P=3T0b3A3pVRM-UTACOjfGoh1KN{1Z!?R8k4HS>B=E=j5<=r zbqI{AqhWL*rKBXqo)%GCB**X<$7KbiDWt$?IceP8Pfu~QtYG~Nw7^jC(oI(}%=8ax zc2kgy*^Q(Jjx)D@n|8{tmzyC9j?!Msl`ySr!s~1H*##JOvF=zW5bCB zEGdVr)vpuO*!0WHqGdBiI}tP2Nl2?m5R_#@Du9gd(1l#|06x+RdZj)VR|s!QX>rsN z1)84WLDSP7B`@+~E76rf?F%G;R1~Y27|yG3&%i)@vadP_y6;Jtv&0BYq3=kV>2_iw z0HuP{=m9AU43#$%RGF~C$5~2u9Eo!o5SE#R_(b5=OgkiQHsijNTWH#>4!VS+%{z!= z@=}Hol6fTh-mm2hY^S6MB`s;lG#a6IU_kCpqpHC?+RWd8!)`>&B*nYo%8$q1DdAk9 z$g_Qkn5Yz<(P9-B@M6|C-PM7|6AuKWqrdv?IEbP7w%KMy|Wpb)xm0S$>xRNt+L< zB+1w0b0J$0WUf5I7cR8V^ne%W$y7K9ksSF)%NQB<<#E#DYdJ+U9PV%sB=!+n5EVC(vo54(u{@oNF-VT!@~N;_nFF_9nI^Medren} zN(b@T+rZC4(z1ZGEFgg(KIEsC834+G1$eUT=e0%#3A^NS0F+@xF~dGr(2y~x-8(Ni z4x&nAR}|YA3iTBjN)Rv1evn&gpG>fBZZqKpKpAm=F%jSZ@>tnZQI5q6BOf30P2ZRvR=I#hH0rsq%VgvbW3wJ_I4&Bd$79-OwjhNTg)LZk^N1#UeU3zpD7;^^SO zKobX7UcdTjtmV=AF1}}N=;&W|+jOn8zlGdc`vEFp9i!(x=;lQZDj2%Or#|$XL(9K8 z{5rGQDTFQ>w`O1|w}+X(lY#l`*WE;Qh|(_)zvru+uh3ptLwazhUyf|^8!y_jnb&MG zj@9_pnP&RiW;)v0i{RGh2yV6DxJ_)?G-^fmT>&n5K5Jdgav4BkU4i^Y73+H2pTC-? zCWh95McPBgk%8n_aL?(+T@w7jF(|NL=F8m>A6t3<#OcTj^18O}7P0+Pk}uOxC&S zaC~r9%4Sx!JZB>>tvFIVr%TEB23)H;4b0{ef?QStr4q>vF=h%8^>WO>8^=HP)?!YgyX3}I z;49TrHa}!CbqKeoBEh10831U-l3pbHu5DMQ(dEI==4nXH_e_yvQB)rHFM$W_Wx72>XvOeb@MR%i)t z#o~%#rC$YB74T&|CWM{TPs9MUl{o_U19B}<&Z3iAkj~_j1dnfb?GVJ#{WzH$+REp! zcf6wh1gXFTApt;$cb{r6o>lyU%A!jLehGebohokwjDH@R1S4A9e;D%!jn~N|0Vt?V zwT)l#O2F&LtF%0y_0vgC$alKZ$u4g?Tg311bntJ8i+?!;S3G-U2uD1lw_ceR+o8lW z72mMJ*Cf6^;tP`@3OrQ+u4q>P0DHL^hLh%AL?v1o_DFdW<{{iluXN2CMV0TA)xFTyL^V^XSrbzbZe1x-* z>4cj);YKLSP*`t5C-bD-g8I@<>bJalv$OimTVL8m{gzX2B1FYe{^%1y`q`~E7;E8w=Yob4hXDq&|oQwf)MLa614f{*&QRb2Gi69>)tyY&_ z2!#SKVx!hIU?$b722bi}V9zxzY1MGlAW0id?d1Rd|bm|qaZdy;;<<(W{bLH_0$7sy=Yi)0ogK;HDgeuLb1 zzd^2(MhWr?ouN*UBiZvmgZP6V*uniZV~T}8>}id@phAQx{(YD`{%f{XlPnlgQ#quj z(%lw9F(Uu2OlcGa<%EcIqxL-h7TjeRwQq7l!h<4$ySo{6L)cnmbh>G*p?5!@ty+_s z6IV25U?;)gbX?)n?B{tobw8k?NMLZfft5$>EC??9CUIpZZeGPzAa(1ce-)k%;S{BQ z{jY6YmJu1c{-JU-J{4mQ6J4Hko<>ks`m)feviTV}KP|&FUVl?=Q4O{%H)_?K0WaE^ zonxJ$pM1z}N=9QO^9po}oS+lqJz?;0V!=Pk9w!R?qmbbundQ~^49{ek>y+=q7d5xW z5PJ$Xtl*;zZuf24ym`^xVbE zv5WK`94;&_XT(#-N>*n7i(KZ{nZAiLpB#gz1T|ESV4`;_LTvYn^m3Br!o4Ed=l>bh zSXTv&G(0Q1LlgyP@nKjrF=B&WY;KKia9U?9@)A93z+MAFC%kR4|) zKcinP;ER=@Dj6eVexx`iNViWtw(|~Dfkex(o#UjvGB`4xPcKsrgnbZT#Ic<>kCCHB ze~kx5+$Hku$TIoH{DttL_2*~QkLzB4c8^e3cFCS3aSqQyGz<06OZAk;4K4pBWZ{WF zbz~=iE`@ip&Zt`mhdq-0_B;YxR!W6hBTbmFikYX5{$J+vwdg0#=k5~0NaFL^*!~vX zL0ce`cdDe5@sl7Py-_qKqXVFfeMJ2CtoZL>uHBhU{Eni+CZO7dh4!|;vl%cxD#!Rq z^YBOQf5m@4Sn8~gZkFybU&p{Iz811FB6-+7A~lpE!T2bq(@|=?#Bz+4MOQJ^2IsS$ zs}=guPdH)<8NQ__js7X#Yq}iD04a6K6q&2-q3f1H#615&E3_&o7=VO z`GorR!4JZ!`0j536!(}3P|5I=0Uk89U-6tcj5+ocomC=`E~mhJ6h>r5@q3}x+sNC|FjbJZa>^SZ z=075DlF-Hk4Yo3or(WJ%HDQ7wcbLZ0B18~56yxz*e95t||1^n*3T*;xc~*aO8c=~O zlk-QQd3zd09=nvGB2)k-5}lIuW9&;c!$|GBG$Z0^yuTdscWG8_L)B4c_yW*!o*n~E zfSKS2mzTpIyMlgyB_pl0OBBK2)5_3*(fB>KG-)E?mVAs+-3n2U9t=*{?`;PG8$rs{ z_&~LyAAn^39q3n1WF`uZs17mJgSDEpl)?JszuF(Hor?8f4L{Omu&%f-K3I3&5g)8n z0Q@5=?G9Wk^Kbu9gLOWOL7v5k0mE|83F-UbSDCEttU2Zx?uZY`1`BrjlpY|27_c->8-DBT+ z3!^f({>Dr!Hn&-4MnO0lLohvfA0c0f;vlS!HT08BD=1&BKoQ1fcK-XAT#RoZg>o<} zNe;4l2~{2>X#=-TA!NRa5M;zwwjbXyIfD#t1Gy()lwiC}q!M3DE-|ovkW4VOX|u-S zimOeA^$}-?m_;>jGF!2l@YIv)k8mSn7V83yd(JXjG2`3a*+kZ?H5NK_VQw|s%>NMS zvlk*M><wLJikO#}eeIh_*@ z2LNS5{Yb)A034zLSirUtktHrF5dc4$XLZ1#h|pUBuucFNpA3K_5`HXO5df?%ITXNh zi>AO|MMwJcza?uyf%RAw*qvj{?kNB`O(+%!0N-c;*aW!HM~g&f+=XSn{QAwkGK(n` zR+qk9QeJEOUp?skzf3%%$NPWrhu`%#e~Oi>ZhoMn*3ta=@0MKuJ(tn~;jR9)Uk1XP z{o(ih&7YwdDE%(5yT+gYe#!M;a@p)WYs}EJlJJlI#;Li_^h zJ5h}5V1e|l$P32;&|7pHVf1_f>%`qS3vpCr!aveV#(#OfHRO1|mTipC#@LyG^gWPt zEQM|9I!CD(6aj&upwf1cH+cL0lG=}qR#X{R3d z8LCw4!(Cyvp_1)mGtg#|Tfj92BP9L`^eT!WIRmWmnY<1v z3wo$jFAkNt7l(FGib zJ9#lCeT(Qjn0^PsA0lHgdYjC|@k)*9=*jZxJ?Nk4e>llzEv0Xwf53OF8bUorhx4P> zh|xVbRt0H%(BaVs<>LpA&W>J$?{;=S&LUxHdpf(!kQ>H7kf?}4Q0 zWU7DGN+Kuaa8RlsJ*n$A9WLONstWN1JlI{%aB3T7=J6B!Wr`UHibf@V4yTb&BFgHd zekkcc5tI|r?U(Ay+Z+OH4sFKgA}9;N(RQDs8!Pr3*mREl`;BC>_L@^Tm;c|Pk8zhcUotZGiF;HAf=ttTf(SeVqG;`;3-?VmhZ3{( z)Yr@6KS2piTjtSVfN0uE;8C)tmXd)v_Gt&y;{Hj1egCK6K{a>)VazbY1LOI-@cvTu z3~u}rjU3;cpR`(~l?+C%^(lp>`Ge+-$Yk$c(l#tc6tq0EW)FWetmj$K8gc|} zXJ|dXgjX)+8+t8mPd-M|p)%G;_$BbO7{-R5B}t0#mzW=-nsCwtLSKT9fpCMr(e{?8 zJTzqK@*6f4d2x5C`i*)XOLxJSP}*;mrc*R--K-8u82_k!y5zPH~m=T z<~8C~Ut*)=VdmPe{IF!fE$I?b@BX2GtsTIAuA&W-k=ne<%-<0xYMhMgTJdqia7ByS zO;yN!ey?g7GDM&lkzm}{AKadfL=4)n0_Oy5>UF`>dK*MVPh=M4}F{iqdvJ$ z?Kkko-p20>PebkGiuQ9KL&)y{=-T&hqi-g|=W7cOIzP;tv(y4;%9AeW*;954OJf?g$lHX-lC*O%CLVL*PFg5Uncq(G0sEU_{_{e z#AhNS$CxcUS0ZIlF%t`99Ic?ZM>@+(*>)D*4k__30Ve#L8S4rMS}f+y0GtvWtUjaA z50fWe?N?_7(myoU?hT}`FpE|gLHbbg^7AfcWXMrwQS-FMlJJI-@OoI!*diXn9i+#H z>sz~wK(1J4q^x2PjU~K|n?2B)+-`!gV zSiO4GsK=TQA?39aOlvED5;E&R#&@7cruk*iX?`AG)NqX8Y`sV+_dU!2LL_@xjITxI$)#b>ECYq)T7=s`PvVMekI- zL3);vKot~2NFS7={#1*03Cx9EmEs0r761gd8 zAh&2oNHxfvB~twkDWaqgfS*KipXAU*lUpWDl_WRZwSAHM@;x1sn^iRzlgW*N26Bs@ z)AHz&P+hNhHbdn{ygJ z$?CqeaZ5(`_1!m8<3kq=5xG(o%rM3q8k7F*#rLTId0xyyN(ruAB9x7Inpu$}ADCVa zr&wJX6U6B>>1*NsWtm7P3a@<`!LGFEl^_F0F@EGIX2|f z(CbMw0D2XYhXv$e0qJE5;h|#ScVgqw(&^{$dM{|U?QssX8`UYwLj*X=e41}wR?p*a z;J4@rw#%&UlH)b==It!t zRkN+0;t+mX-FRy0C*;2Zzw?hP4HKQuP;F{6e@Gn`j_-71s3};Us&Bsj&N>(~Q}K}B z`JI7ZRqj4jKiC36n}O^#_R?;T_?^d+^G~;y&a+Apc*5}uJx~+(myH>F{k2BzkBBr8 zfDSs!GOYP5aljq5WEr&sQPWtIhHa8Phn-ZJG3;cc_HZ_4y((d1?7cICE4NcZwo^j3 z+l!GvY({Rv;i|DC5(~F9zHpUh_jwNJnAS+f&$>>>IM)^h{E;)*!?0^-Bf>(>+Y_9I z`%tw6F|NKm;wF-L5Ffx}fhG*I;hrOT(GI6SW<;~GW_dln!oLcs5LDylPGo_i(0!T} z^HiU>_s06ZCn_HxfiU(_!*oEw=Thf0!156ss9U}#czg#wma#}2tbKvh_rCy%1aA@w zV<7d!svkTJD=N(2L%$EXh0FO@r%wpGL|)H z3E2u`bFAerYB8*6_XBI*M8ou+_u1(A2iT}=SSENJ2?S4pt7MS@NP=Bb^p;^g1p{y( z3>r0f^{Bz?aA(py(LJL=n~d5M*@iayltPpt3+9QM2!?cjbk=mNcPjf?AG z6_gd>mQ~CW5!kj4kyVa);)R+}2TGWr4o=;r)qy!)^nnqQ^Pa)zIRfHRH7A@WJ)!T; zu;jBv_Sj_}(E%T&IZR6pYY5%nj-(jBvn2nthGlGi?@J?(JpZTkJ z2#|A{!zz-4{5R8giBpjOHXVK#Z1~qUu9FqV8>qQr z4Zd=hXXFgN?I0ZnU!Q>WD>#_qE{WsxK_I+EMx9I!p%1E2kfY8gyuhey#0?!{gyW-* zZ4n$PibX&kS_me~&*7e(*?TExK*6rEma|ZF4el5`2^wi757YGFXocyMeD%{1&%q3C zs#&yq`dA~_ge4tn*fexK%2?DVYgB06aO3`^#r0!4cMkxQiGiYZ({qjBd?`3jbQTKc z_8t}b6a|+T*I(1QNAz$C2;iYci}sW+s!gOMMm+0o5&>AxN0I>STl`RSuB!RR1FgwK z*vF}AoQ$qZ_=QJEz6J>SS8axe^jJ~cBO~qFmBl@1M!@894nugx_u)J{R?aN@BQuSW zPkhx(CsPI@mc^H(Ddqt(R84&FMlyfDyScFDnNa~k2Q7`&R%l=C1)oUInEH7tYeb2~q9f({aRBf}0h5kS0~ zDZl}^d6=9Vwa@SiG$Vobhi~(#b9cd_nfPY(@Ip*i81Oqk(xq!jcsMSL4IG?N z5*eOV5*eKnK!3pqN)$)3AD>vBR$^UNihezT^u|$4<@JaCrO|O{k+zMxFCg=L&UU8G zQe>-8fI~u*Zqxw3j!OKS=>Ql#4Br5g5zI$_B{)h}0~IL3-uV)2mKclz2^8Y>J`zQz zSpybP#ZlI%-uTDQRB`e-)lVh37z08>v8#=B$ROs)*k-toyxNR<%H%$VS1e3&Mt{K~ z*3fkyQ!fljU23B+dF_isR1?Ttp$Y)^Q`6?IrHTr_8J(t7)iXE9Sb2z#q_MJZWmy6q z&B}olFDd%in3cf~`ELcn+M(g{gYtF!%^&!27+cAJH5XX9SSt9dIA|r|H6_@`c_z#c zgUqx3gVBQMh%xJ*_~6fPp|er}g#G!VVkh#WR=fjtU10S@EN8ZEs44m&4zH3{9(7u| z|EF3B3|JXRf8V(aDk{fc740@={RR~o#+h|BKQL6K{8ye&jBFX0AcDecq-cT$ywB5$ zoeQP7v610e+Mx$yhk@T z6}p+HGSAx1t|6+kHuD3PxItnz$3p@^4%L>vP!@+cA(o8-TlqM!P7z9pcPgKgJ4H|>-sxh7R1jK;PQgBYd)yDZ zc%u2G>QSm5e)Slk9;d6vU)AG5_4vJd+^rt<>QSQ}x2wk_^_ZX@zgCZZ^>_42#6B{= zcEvsz1i8jcx(}T9`KH9=#3x`x;V!1Kn3nki7bj=Q7ce#1bHvG$2#?iX!jh<17U`K$ z(=zDx>n9qaog@s6$e;KDFQIN3lnXmSr+fZLHqnW}@32_h0g8YwR1#Nhuu6CgLtax+ z8w75fzOEvB@#ZABWFPsJYSZymso|hJr&9K-r6HYM7jZ&^i4c>7%^4Q6JOf9mAY%?8 z@B%rF0Gbkw2`r#CZQ~_(;4wOYRzT2WqOxF&VnDB$Xfxt9PPZf)7cI%AS4q!zz|+Bx z1bC=irj9fN@#V|o(C_v&yG7E@cmqsk)`}D0O7PbT+)RKKK}m3?%vDy{;-P@bqPTT`*r zWq&H*RynM`>1+5{6g{usYbX2SZr+hamW=bvVRYL8UCWxAUQz(B}!M(KH; zuGnu0k{BN5pNCS3KAORKbSAyrjUo`(N}y! zxDfc5t*(YvgI)*a;Cm`I#aocLJO~OUcm*fnUb{%^NnuOv3z!uQZlG|Mk}iOzN$5LI zVrj@5X>ACEHyJNg=8nYy>4qhjXJbLaux@2dZ1im{JukhJQCk8b!%9UDh2%kN|*^ z{fs*=kdo(q8n7<6qSw{6*`GSz}lve_bGdy+6E3@8t~)SkGHPz{-*B-6fFje z7zS7%&p>Vkecb2BH+Wy1o(5pxw##?rvIfEfbGe)fGvcf=P-DV($NrL!5-Wb#F{^ul zK$L5NV1o`gA_$xWv-Rjl;?C<#OAhjWtP)qjo<;At2YEkfC(*wQa^gs(3Ki_>HbNCw zDp))rfTJ`vGZyg0(Fs2L!spbmfFjmG1q=)5=h?aQ*$?hNJw)q-`iU-`ATQ-A*v4Na zbb?QyNYx3iN7~Z~MXkGjQZcLcs1q)~&8-uF2B*c-P-t+PGdr2kkUl2Nber zWogPEe2a_nQc@^?&eaLZ=d?@tQNL}E@~{8+)09{3k@6o;NuoT2N9ZNWruCCL5n8cIWqnCPB@Az^`D}JIN)x8?P zj9NgCRBL!enoWwPmAxcWOS5l+OPZymNb_yu64ESH+V~bzX0<2HJK%%;l!K?*qcr!f zN|k1zpeT~W>WOe)hz>?&+2cM|RPs{U$ov3)1M)Lu%<1?M81o#y&#|v=4<5)SRgUpe zmtN6U(e_FNjhFhI933J*%+n?M^o>TD$*!wJdPL{p>!?U>&*(>3U>Sw8D0)Vp!l$!Q z`S2(=_2N^{UeS^K6zS4EnuQM|jF*O`NB_+=f`lFEr8Cf!vk0FR^12T@GIPA*zp^8l zx_Ae6q{ovkJ5oT(C_BR4hF12g2WjSyydlnf*@sB4a^@8Y&P&ZUoS$CX9_O2P{WRxQ zd*uA#liZw-6h*^4I6Xm}OK&>>X&cydbxV68QMa<+?4c39@cKByv-MIPagJP` zz*(xa!8sgi59iMNfwO9lI3Ihf8|OLp8_jJgWM>J2 zrmDwp)Z+&A7_T0~7GVP14FMlL0lvmeif{B`P%SyX-|`fnLI%L1GoywRM|;JLy((vo zvII8=Hl0a|-;>@*m;MFL$?0r_R`V;SjiNm5bs~E7%A^j8ooBA}G+aF{4b}!{a~v`j zgm1v*TbAcvr?NxOe7s|FirSZe-|yxR1jO<@FGT>4{Qqc~Tr~qNdKWH~t14tT$fjbnO`zk1=YG z=R9Z8h)%;s8ns8^vpR&<5m%B3=%8oMO}mSv8KK=QDMH%)8U9Ob z15h4X9moE7DHz9o6Ulq8-DM%<<{jumCveh6eyrl$T`G7|Pa#5b5XlgJI=7lnOFtu? z5wBsd6$opZk<3B(JQx`W*ewwAsuiu^$}HXw>yuo6thpk5im#@La~PRraxA3?KBSLk zvYZpX3X0cMGlI+1aTtw=8&DJdDFBGX>Ak_Im}BQ}OJV|q7tyoTm6x+0Zq%vlK?$vh zP5^WH;#4zo8Kh|Fj)f<~bNR697&8KI2Y%9h%R-x+!e_BC_7fno$)n@2Vz>oWUPBdp z+(0)%l#v+Jyh}w+Pv@_51V%_2A}0KZNjv=w{_!*2TmDH_4xh-%!2@KGv@WnS-Uijm z+cznlRvLST`RTRmSj7=d%Tt@=Hyk4E>Uaa%!#LLGJmHJi-uXz}&tak&NCKTI>mJ#& zJdXc+O zU;^YUh(kZBy4e@mRK_bjS$LUlXMeu8)t+DVL#utllNgVd=gBaK9r!^7fIFbl>^q06 z{SP3kIDMHlrQ)mF=~gg=dh;|Kcf21>8|RyD=Ez$nOgl>06v4%0~TyXKIHI&z3iRup)@&)2x zk-w5kI$;5ZbzT8sU^s^APRzvX{gilkk?@IeOGF1cU4bZt!dXP<6+b z8cKK7Stq%Br6sZbZL2P7uj&PDs~+68>K*M>ee##?UIo|nMX^F>|3bKxrh4r0;&N2Aos- z!x<4z2x86v>Ijq~+tG%nVz|ia?Jp7xE$VV8#~;pAqOMJQ*z;ZqMBU@lZG1}Bhcj2> zM?m(Eb*}3DiGNvY_3Na1x~?8k)yLvTd-@xcLaIF)C`YpidNQ@LJey{-d1^D@=w-mx z&ik{Y$xsVQEc2@Guf#}vc(f?09AI`fepulddVYBtavYsO4}uNC?`BxbxIM8#Sxe75 z0boK3h-SJBKS$+EK%6U@^yVzS!PVbX5GVL_9Ysu9UoT%j#p$Y*IZrA&J$2=q@tkZ} znYSjr*>)Y?^iXdKlisZ38z{S0yX66Rap4o(mPJe;*ZfCgQc1zU ziD+^s2)2}iM@e^WL`Y$E%|@H+6WYIOBlzi=$yaT_Php3_H#gK60KoSUy zn_unF_l`KcH^kwMUkHLDLkKTVuXad```rn$qggrzdEmZ4J}d>~DH`Nk1mpyLUxeP3A;{_*=Qf!YKp7{HK67z#Pb zf!~dm`eKt0KHrY*YkMnC8N52Qx^ke}O)?h5-B@*mvB-z*ZRh3`uENm+vLg|_=b`rk z-n;u1{@fqg^rwu^0`RW0-(O@$}SpuvgBz{;BWK zp7XAA^1EQ8FD}RS7o|>r=mNqJH(`Swg*SIvd3)!$xSR_)SbKEJd+Nc-{edMv?8HkSg*KX%#W^Py|vs3C}ycQiKU0s>p0r z1R$3dpa`CK6qrSCSDr5er5LpV%0;Fbxg1ZQiA1K#tidUxM6I?a1)uFpmg|6dY&`}L z5`Kq)`Z9oIITd=*K3R(B0fg3pX)J;a##!wZ?%KAnTbC8#U*;O1s{JS? zRjsHZX@Kp3G{2oHb5O;;?k`~D2z+weFY3Q*QhBHR4&3QXIe_0WEY3-vmO;oT1u@G$ zq-C#oKwurIfZrfd0fsFc{bSGkyNnR~5sZ*JdI5#>0v@3~c(C2^KNawx6^68+3&BnW z&y9q~Bs`@Z!own^gaYtzK8{abdk_xe=2ys$cF@WRV+CPUQ8Rnf^8#ZrV2sjU5=;on z=~WSeS(l_g;`gDVl?mtrFqUZ;joK$f7K_n17eaq4-!dSW_@A_+%@832?FiDuIIL3z zRt6WUSqXpxT%EUrFA(fR45H9}MWY0f5MuKb6a+_9^hB?HBE&CqeqdP!OHjVd{_Z)! za@@nflJ}t!ORPYhZq&+66>x8cD_IsP z?*eFVH#-6f&==oTK#`t?-s zRXy~R^h>cqGSZwAzbS$kZIdzDAgp9Bq4vfc>#C@$K? z-0t8%gUq*SG4)Yv+)pu`lYlT8zOjH0ta|s`hd#FTgUR%!pL*BQ?SvBr) z&s3X@wms1>oN~5fFyt~ha%K=ak`)u$&~zzu$AuvbVEb_yAQI zVKFi0P8yc0?}U|YBhlaj52>F@Kpx7V&#!6!-p<;;ZK}|s+yA)zt2=9dC*A(llm55( z|E06`Z+leZ--Y&njlaFYZNF208`h9C+|gBk`)l-NY4c|2OZ_84qYrNXzo#$T#T@uD z^di{yUdGgj?<~STJ4+$6DpB6Ax}Ba>Y!!ZDw<^)x$yI|=kTDaxU2DjtWxcTF!-1y0W1<0-O zyGh#b6u-c6V=*6Khd%iXKhD)^1T^zVzPgg!*T=APNz9s70m{R5r%C!tlE9%1(H(Lc z6pE%}NY(p(GBu5^WzdcK(ao?gUD2P7$ffSzs1mal4RX0@{l4%%k-oQX+?0Oj7@zG= z!N>S)dmWlWfQSbfn}urZV@}({KGZ94{aR9Wmv%@HjH?{N6PI>Nwf~m!@*fP=Xq^53 zjmOLN_X^e@+|YIZpGzL=8%P1^n_xbmQ#s6~XQfWZ#CQ2}<_&HhSH+fssrS{)d;F5s z`Fucxk$n*(d(g!6r=(x*>QA%QpUyl+F1Uwu)~D*iO>sVK(jBZh>f_0NoK82|a$<(I zWXMan^=cyETMyv$Vd_b*N{Zy^opMH4$TW zq>gJ>oGC}OuK=!YZi5`1L!cqwm6Y!$+HLm4Jh6n|zR7syuY~_DcSp-Fg#Yh%iykby z?*9$^AN*SQAG=H7-{Joe{EP1VmGbi$_U)qIe(Ho@ME@?uTbuS5Qy$bFq9MND z2E>~hpZtyBD|u)$;JagzP_)M;;mhIAEZ3i54H@jpx-Bo+Qx1KwL+5^s5F*i=M@r-e zX%vd+@j)@;=+u!NviP%)H1E2($LZ!C_Sk@Q{3iN;gSKCA+#@lv14|7MjHPZ8+ic>| z5i+hBO)sIa3yPy$zyK7tVI6bppGY9*G6@jwuq^oYH>a3?56 zZ918C>FLg%;prBpJ5Mhvd$%r*L+vW_2(uoP<16IFc~uu*3!)zCCtpVVw<-Gd(B8>Q zzvl;VuFOxrp4s&KCZ3aib}ssDrRm4pshijJyz)#LSmn_tg81+PQ1L*J0Y|@L<0;vi`nJQ0Z6znmpB|(&oum4*J}2U^ab1 z+4Om9+%Ke0=r^Fx7%UMmg0@Ne^aG&3C4C-U*(LpZ<{C{OssT6-d2^0KY+j##B`gZ` z3gf&V)bGhdU>c4o1tquHP9iTj6CZzJ&0Co7^wnI$HKY-764-qCB1nTa=%^jXEQ~ z+oV0o!S6>8$mVx2o8KR`{z85Se*=DBgDLv1^7{|~>ftw5rrox;UNNUv1#<0yhkzg` zj@nH-oXmHhK80IXY5n*06l8!*I*wT7bs7}?;vf&io^U_&CN9Hr?;~J4x5k;(R}JF@ zHF2cl;-2_v1r>X>CkCwFs~U%c=;J(^KP_3R54`^~-^W11Zemk>_>ZoGzk(E1&#<-rH5y(&KuPaHw^`G zrRzG}8(g<9&W2xWg{SQlo;V9IN9u~v;#XWJq(VT z@cn*)fKx+oF3~2=2T!=Q2bUrEd?;yCYG4Xq%~SOOiq*UTws{u7n?>-#F`hTXHj1q0 zaj*|waMaSSZ+akpk&0WC`h#YHjm7t{)9Qn7xSgC#!M=n>@gt?UvW1sAV;8a2vbg?@ z)Lu@Jo>Jsdw}?LS8(XA!54b>ylK2BeEIA)UDH9q+K%)}Us7z?2UqPdSyImRumN+!} zalX)Ka5HGcg#~F*mM0&*vd_Plo_{Yxmb(4H!gYSmt+JXvF5j-W z%Y~_Fu>;fj8m1?&227W`t|=RyaBGF;pC=ySq9%(gOkM+NNTz5kA1i2rGq?)*d5}7f zr(+p{Bbi^1vc($5{LrB5@d7A&zQQ6RV z2QDih& XiSu|F!kl3(^Xs4-I0~ZsS7fyWRcr*kT!=eb;xT2B)E(fCH(05#dmJ*f zWo_M&JPj(2^M~F@O=cEhU@7>Cvuj;kdg?=BfDHby9NirE1;~=zd;?DJai>ewW8ZM7 z+6%CAh%69Hr}lMIzn&{{aA*@~eoI;oeEbi${)iT#FCP0vdY6*kw=oGYmU!rGk>DcR zqxTItnU|FyRNISt#ww*zw2-_6z&#Ux3(fYZL2{r1UR*= z?jibBO}EVNL;Av#8g+uULFz=GN@f53Tdc*6=F7cd|3s5<(rG?39*qny0M zCEhNJ9OAw8ijb#oBgo@Dk3EAvW_-bC;~3DwSU~;1Sg$ATdF1Tjv;#PMJi0fcT`cqs ztS&kW^b38+A6OR1r5GYtR}z86I>!?Hr2fTjMhU1UTM$a+!PP4@`YM3Q@sW&p_aZ;< z2ttX0ZF{VlrjG<{Twy2x0OUy+bLN}aY8WxX1n4~Umi~?dNSOnOaR{G{1t1L`70#g7 zHAKKCPac?{0Kt64#oPo8JLojgN<2h+Y)2v5rbj~O7>}P#(4#+q{8jYGQ!inWy~Del^caY3f1t|XayIMY?j2X(HC zXpM)WetK2_KG=wnu&#g)URjz%+W;vz3NSg16)1f_985Gh2~qGiRsy<~&Q=9zEOnQr ztMmV6v^U1r-qY~8gl8k|O}=y!?S)$xqt0A7Y99O@8k2eryEH*oHL9PMb&O|4gS(l_pC1M822 zJ?amGkKD6{gRP+w{^TkL?a20;x=wZZ8(^y)_+bx9fYBrw{p|Mcx(({FC7S6Grm6kk z!Kd~3q~6x0#@^tDTC?XICXENx1usab_0(u^{j+o=n#+Ej16hxHd;{nWqpQVE#7InL z6_G*!<1QosK9M9S>)y`5MQ69LQ|o5O0ARhE3zl z0fC0tszq|Fp3YmsZY{2X48yyP-P&`B6zV~R64#j;qpTY>(kA1nEPH`LICcyn!{u(c zqM+l`-&?*r|9FbzZcNwf46xmJVh1+XbkpbCh{jf1aX8gocnm7QEnqWryWy54hGf+k zo90Hk`b!}FH_tOhweKDtqgsrtIRCFmj4FmVLd#xsjOuxVXjF0VA#20(?KY{E80ZZ>hxBva=-v8_Y==w#eQ%$#6Lc> zG5%4?od!Dt1=|f)izORQJ1%$S@xXJ{`x0p97w)$4-1-r2UC3tqJ{QWD83q_Hte*HP zgWUDluV|tI9%ER<+U!vEB?98cD!M)=;fV4(`+tnj6%zN3J4QD^Z*xOGKNd@J!)`e`~6)F^>DFXNmM7eFmu zjm)Vt0Pr-6{yl{Gk0jfCgQ*V;Qv$x{=Ro1601PY z3SWxqdol3mF`y2^ef~Jy`Z~eyGQVHO8Mi+C>#^cIo8Ps!JGk#RMR1RHg1g!;(HX~M z)BG6M`QE)8Ki!w2`qcvC9bAkv@SU9#-zdHczqO#d{C?w$OngV?!ng4@2j9aU5_}Kx z;j3m`t+9mSOUNXwhb?SVcRlIHa)R%jSc;G!XPqxa9d!|~i~!3F{3dApO8hZ>6p=%Z z`hN&iiM)X$E*N=UJ?tU;*xcyexP}U_z?>d{kp&wzlD3MHsUk+bbA@^l7(QHk595%j zEKY1M^{4JtxBmm6p5idX2k+<+ki7_DbyndpHgcg*cMAZ8)~O74kR;QKVoJB(u!LU> zMd7b7jeA4^8o?Ya-7_c$`{E2Ms2u=9Dn=dfwI6PkG5ee_#G&t3CEYQW?4gX+TS)Ns zA%AkTi7;)k&anhP2;Kw%LtnMKAuSk%cD6L97N-Ry3xkvY4k{k*P|?xmEPOUkpT96C z$GGk?w?0q4*^%$F?%%jRPq?l#eSYRKzog&qd-v+|wZ0T}#>kE7^DXRR`qwu>Bx@ag zZqN_f-O4k#0HX?;?`DoJGBoGe5XGjyiVWJ82dPbVXv$44{`V38aLcEr6I6`=2$Kuu ztrC;ndyiw_A#9dF2SLeRUax@=1m&IcvRR^pgRzH56|X2=8`Y3(JYA2*g#|SX+Yr^J$pFzA~E98LU!M;M)LTd z+2NLZvoW_mB+r#Vl1*KROWD_SP;_8I} zdpnp&kt>8eOMBbY6OU>kfIY$?Gz1z1IAbrIIs|PFOzSQR^%Q ze(yBD*tUZiHH0^_aA<14U7_v12y*72AziBrY9N=J-KM@n z+(L6=0C!9K+gR+&rS7=^l3S4xa%I?`W6AgCHPy6%&i+IbkE;`4eaLx_gi7}kpK2Vr zk@yA3H)P0-M@(wHVxq}Gv4T-|V#tc(i2A5iiwz`3hK%77C_7~=j8%eeupMPOL=AH7 zz!wF->yP7iiy8N1IjE4c3DP+!3db0N6Qp7l*k29yV<9~*dff}N1h1ht`&2&JU-&eB zz<$=2`X_%HlKauDd*k5D{gZB;YTp{r{8mpVG=tttw7mdLMgj};e`;9qtpJRFe4Z>% z`gw}y`AN_74CfiFfQ&&Q-d0(>`h&41$l$Xkr(f?_lY+aoHBl4-R+VW#AQqr=(rcx) z{TStxNPEOIXCW^*DIFk^cQ6g+0xenxYDa{?s{@UhNb?)2ZunhA%><({GsaW5_4oLmlN9qpRJ+km=|uDE8n)zrem7Cpwk}1)h@th7&=_T&;^UNAz_e<8_D&tF}{F~ zl1L-Euit(g!E-Ok7b8uM^oZFr+hrjJBmAO()j+^%#lC=~Vqd1gzMQZ@ zMomt{PwF0+4J-a7F3{A!E&5juJ28*4crT6#Et(kF%Gf1Q$pUKTgI=K8)FZz4UsmS` zUmfaC=RxYX6HAkpcYAR0Vsp7Aj*-Iob(&UF^;Tos{6gZ_f_D5PDC_j2Jj)SR=6etV z$3NyN@I1?*OXhpT`Ht=_`5}t&!hf`42&Z+IiTAj$3#{|_bmOoIj&6K&ht`eTJ(*n* z68GxtorZ?YGnUc>s_gdXdCGZ}q+I}$L5_*$=yjtcizS6hf>Ugl%L|TSwh}KCuap;T zZsna+3NKv0RZ3kd!%Lo8capZ9Q5wBQd=cwKBirCgujnJxs)`4^wMiZxkn7y4hs9zw zRGM1&+Hj2LYKCKb;{S@o@xcnaaL9Ro#2q>d!Y$;(utX3Osqocg9Pb*MjNd`Ae4g@6 znhs0+6?*qkIQ9y^ho>L8HwSJjXiENpbN*>*JbL$zj27UY1!Q);_l49xR!{h0z|4Wi zu3ed^?*zoVpn`M)M!Rz>3*ntYLUK?*sGt;%HuX5-Co5q@uW8Pc$P6{rU>i+sfu=t6 zqiE_B{Kzprm{hKacSt9~JRU=rpuZlTe&k7o$cO~JY5vy;H(=JV#|-RW-J1=2oBCId zuT&BekAIu3R9Wp_mZJrA)H%@j0?b~f^UPM**#}fdC!pA=XLx%B>&tw+=C=&4L zFwA{F^azMn*QD`d$l%k}+pl$W)w)&d>Jv^*zoKFUNBr3JAM3h3T6zLXU_okknp}7S zgaap(#Bf{40aBBQ-kZF{sA)Z*jD{y{$L}^#z~*h-O?0W`d#1P%UwD!EH8uPIILl;Z zRvfn~>^0Yle{X&Nfz|O}T*fq4l&m5jAL|fUp=$Awa>P!@nVt|RLdh@X2;zhrMYMS` zO8!DR#RjYV>u~H8ex>6&NRk_%rh&W9`6JH%Ul(qXYo!wh;|2w&>GuQ<3SJr8lB*kP zczf9}#K|KWHyzF{1H(?4ZP-6{}F};po=q{PgX^fhf(jc zvQBcc%B?iI0+vjMB|Gbr*F5*t4%E11KK0Te3!_@ZOWybqEJgeN)iCP~oLQao%RXN&KDK&5#EAF88 zXqOye?a{6aC0`w!5>@L=zCpF38&j?7oT{b02(DSB)V2cCRg2Q7J(T7oG6ns@gms6^o1Z$(QM@CR%b4{KzmO%1+Nv&up!Scw68 z=l-b7e0{o@@0&@!`Uqu`U0z&Qn|y;Zh%Ys%FWb~Ye?~92vw*zYmshp5i9B6!2IT1( z({IeM?{ZsQ^BM>TrvhaD#w#~?c5OPICxf8;qkXRyc^a54PfrP#&0L%3@}ZeAN1kdR z=Nz?YaB^nacT4R1w3S*`i^x{4-w3zpTc21rHwMIe7BdNAC-Ikz4@mF@wUxmOw|l}6 ztdW32UeH5%!7vv`WvFe8l@{S)*R$?K*)VPQ-E}y7C2#Wd$6mO-VVnAL%AFO%Qdovs zW*`IW6NVV`hb3pPW8*5R;|Yi=$W>Ik54F?vmd5;2&?W=0Hud4{S|H4X4C+9q(%9fm z*ns%QU&z;h(@)lHYg1SI^0ui_zIQ)xnPrFg@~RzAgG4kadUfQ^@2RM3XsF z&Ol)Vu|q$|lCx+z26`SQZ;>*xnqc*#?Z$7s8TaEI{}M7@dfSrGYs7*i0b7z(r_7Hk=<1!CNwcZ>j(XE8$KBXzT%2Ap{wm295SfIi z?+M`5DSymMeqo%rMSP=HeBMyp>w6-A)E!D3f8Vk}k3`y`XIbD6L;#8oqr{Frbfyu| zk?A=FAPb9o5v6&e*^Ser(^|E|PrIcGU#)HGP~ZC|DBo!-nf~QtSw`uM;+g#OIR zr9aa5@t^SpM5{n3PzrH@^H3uX;2$UtWjJ-Ihfi7=^Z|Wl*4#7E-u((k89L%rhI%;+ z5wgGoxq2YrFw^Tnkq$DfK;1Gbv!_=?$AGAcQ!F&zZK}ILu@nJh+3Ys;HG&|rOTQC% zjfJPkVqX?@&k3N)8i-YTwk~VF?k1|Ce@zr>*3`g5twSHJB^npd=b$B;K0r!BE%?n6 zqtH+VZ7hmV7Q+4EWe$Dr8K;fK=S+~QTu&)obQ6?;3MME6DY!fF)uS}EB5Vwnz?o6H z74-%a2x7yO}jBs@dJz1`|o%dEtV<9 zW$>6t0uV5aj(WAJORm@S*UP-jG!SlEp3mtaocJlf*b^ncFZ-s4o^DeE{H0wQdm7lz zmqmSeJh*pU2KTb~H=DG~T0arRSCMZ^9zg3dD-O0@^@ayqiZ#XnbfS-CrI$J^`y6Y7 zAkrD@2^!AU3^CjX4$vCRm$a$l5JXW(^@`6nb(rs+nUE6-(WZ)hDeBwffNhTT1g{g3 zEc`TDAY!E-zq=P@;+J!MNM(bA-?kb*XsZm_q*YeH461F-EQJZr2|AI$I-hf|^J99l z?_J12Op)_oUy9m>n0B&0MD`1mux}M%APj-WIIkYb;Ga2k?Nq(l2Ha zE{jkP4#RqbT>AxN!lcXeJpT1edR~-EUh>8`^n58M@`8?!kDiQD6Wws_E?DO09mYQ< z_zAg<@7+ttFKus5HLC)I>hbBb{>*m!VGU4 zaz%#4%7|w-k00T#^J9FS!;gcn?h-$m7yGp6SMnp^4H&Zdagc0KaO`3(e)RU|@bF{( zwO(GfsZV|HUVbe0rKo#`Zkith_4r^7^`n~lQQc_(iQtSLmwyyWgq_fszc18O^aKJg z8I3^(U$5cQQ4WW0ZPXl!xj7{epmRWvuMrL4j;D}r1QHKh{FRK)$zlZ^Cvh~KgYwb5 zu)Q~{iF0g6X2aQofQ}cS8hl1CLajSq`>RqnfQU$atC<5`3=FKxcwd#Z*D@s3ZzUaO zY(>NXJ9^G~SP*AZ*aHtch7ra)$brMkF~n2XUviuvp|}}7NAHonuJnL;IpRVpV>N7Z z4Tb`->V(||OAz!M3-pzqH$K|66Ls4Y#!7YzEP(L*&_CvJ!HMV76nsj)&i;cva1x)- zX9&}drMP@x!74#hx(wI@9L-C=ABREOJ#C_cbH_2aO_tq!C5!L9(KZO~9`TKX~>TreZLv z2exyKRJer`KUTa?vEEyFRxd3{CLVy^0HKd&S}r8W+I;nRx=y_tzMwQs>%%ur zBYc61fE&rt6z!Jp>iUxF!tR>|O0s*0a11<=WSnpz$y`Lpq!3n)KrUHw2PX+ug-P3n zV=I^h+0*D{j?deHkKfE@%9euGGeR^A9qJ5Lw0xJk39acVWBeWq%0WoC8UmF(oFV|c z8?vSXelc@Y`;kz+gqip;QBa1z{SP6|>i<^btMm_Q_Pl&G4?-Uv*=W1Vydin?u z%Mm{IiB{VsMuj3$A&C(k!deBPd!=n;Og%k+3*ghP+Z>NcMqr*=w@ z7q0ZvW2*1nOOG3TDeA9>Zh{{6;NmHIed7fPcd)*3IYmD{RZm^n<`>?5Exz-Qq1QV7 zD9`TtM$9&@WO^JfxKFkS%?=>V&7-|ekooP<&F48(8+-|=7H(Ii}YsVggd2Oq>w0Y@C6Jkm*T6(Xte=b7B-? z23$Ip*v^VKpiFH+V!-wPK06OldrMmn$eVYp-MegXVn89f1L7HdSl2YOa~5L~%b&3u z)^Eo02`dLaUKTh^zZG3@33AX8#&Jg6Hx3BrOAf>F_%bVw6LK7Rkl8K`0hU|`x#W7n z1X34^OQj}6%F?v~auyE{KwV(Dg(abwxEhuyII91OacG? zwPAmPD$}MEA}lLm6s&0u^$y)?vjE)=l=tUeSgeq87 zLaHQ}5_61j;6iTHYbATIr=X>$!afFqxg^}22XYSWSVb{MPZ{!?yi!W_#!-$V(cm7N z(ID5qHE;#N6jW4!u2yYD0@{{*4;_gLn6F!jydBv7pS+XWoE2GtUU5MMI>|+p(1^Nu ztv;7b9C9fsivHRpv!3~+f<)m>E2s|jr&w_;CdiF=Cva4Nu>@gg{0$!PltIPhmVlCy zF_}>6-he~(UBA*)mn0xr?SQ0j+yQ-YFkAeqpaM*ZoZvWR255P5NiS063=lA52HbbCjTTd@|yF z8awoN(5c|u0LJ%lf>hwtWoNthaYtmrpngj=dnDVM8z@5}?&Dtn;|A6EH(bj7J6wyQ zhU|pHa_m5#^E`((L{PQ*>=oSB4Y4%?BJsfRMYsw$aPzxhe|!Dka5wNt_<*8gH?TVm zqI0-sI~IK^vuH0VdWJ3vK??=(VQ%1|x6jtM2y0ML*V@-<9mqhMxxLqZw*fc8+kvF- z^Y;AQswN!>YJCFj%+){c>iv}c2=D3&3JSte>NspF2`ZB<Zdrp+6?~Q56HmZDEV7P{z4C7L}<5<7ZTyEQX8ee(AwkGunIaG;V2kXxDLH- z;8bPwNhUtMXQ`Vh&qUzQVx2=4f568oG%gR-&O?nnfGxGGuz^IH96Q98cYziNHaPh4=K71O%3gSaWYQey+>_2ZoD3Cg3SUyA^Rw(EfF2gbh;nmElgu0^TYl@ zQ0e!(twb@rARtuFCbfBouavP;)X;y0vnDdN3zvtr zGqXJg!gK}rY@dxt43poBt@wI=v8?hR!&q<23T1Jn@r7D4M8KZWRp5;0#BspAaQmI9 z)DyMubuJ=@>!6onCCG!t+Z>)Pz?j-LPnOHNIK87xQ;7XTG*GJ6?dm^A+gJ)tF3ezU z&QNdx9m%coMW|(V^oV8vl5vtk4FSREs;zi$*c^bOz6)Y(7~NBxsaCfm3134>)v|^8 z$e4Uj_+dt08J52zb#chsws7VqDNw%TD%}1&NjuFB9^d?o1}1)BcgwEp9!v~8{wN5$-xqIU>2iK-Sy2}ygp2tChA{@DI!N_kliukw$?TSSMs~|& z)rj(Hpk1#`3?*|?4*V*{0J-B$K*6-VC ziJI0-766?9%KQS=Df~|T9;zo6rck%dJMd_fWV6x{-G%EKkv{WWew~N$ScW@>%kZK@ z&G|?4qR0V4AedEKe(VXyBIFT7Mi)wr8MfE_iul~2-!C89vF`9;yUwr3hoT-@JZ!H8 z6%2sLbSMHRTksko(;@I+wQ9m~Eo5_)6Eoj7*bSGKJUssti)k>Mu+dXNJZk*qG1SsuQ>n| z8CE_k+*%59B#TMEc|#(o33PPni(^C+r@|hc1xg=AI|0;qh$^rGY6#}@&Eh-2N*sX{ z#MxPwe2adi{_XX5H-q$e@Nb5{3MT1+T zfkf!OH(;wkL4nu~4PMB253G=CEF2VlH8NOsWf7DcH@?V{MI82FhZgiivkrY72LR@X z@Mw(WiWg_Qq=S(rR2Grqu+iXK17$dZ}F@$>(rlarOA zYm4=*8SyuhF?KcVz$0f3KyD1pT>LMc+30gDKT-JjBI0yflrdBg{hdp3*me|UZa&(p zrv>CItZE(})ETR(tFF|FRRFe7Sa+>!9ILeB7Z)V@9*^oum>KC}Tz8VQCXK7}etU}#0q z$AuCOjacBAK24=TtRgR;t3qp0kOcV9?L&#h4a=_A9>u6r^N+N^$>4!69wI{-nuE;T z=?SI;uAZVlmhmG8X^^Fkz$1)Muk5Tt1Q;`MohE96x=>Pxo8H5%hL?bNdxBoMjwmK)z|$O)|cp{zNhyP_=pl_F5By>u=~I1hvkpNpRM1~vI~oYG;XuP zEfa;mkej;8ntpie!bz$6?UDS-mXch5HhEJ}cU034JwJT*XC{UAmXaOyds9>j>L800 zG&Cbm5t!vccpZv2qaTskJUb;X^_G=50u($3gmqJ}`T{9;Bc%i>V1++L7Hk+v(?34` zgq*qH4Vu}U@kaLL6xu-r{e@n^EGqMZ!n*)DTzPPRjw)wp*KmZ|#cAzg4 z084>7cEz`Hq;FB`F5F1bj(;zp?$o^iWbGbU%5t0fp&0VoJD0qMTW{zRzFQi6!3RB_ z%@e7)V5hH*CWt{Fy_69`mTdk7Jn)M2>5f_ zZk_RG^d68!2>wWr3bGhfXO(f}8nTG0!3=(H=83{Ppo-KSN;Jh4bcHNh(2Xc0R}=|q zphvRO@{ag=xsI=84NlV<@w@S<#gi!$w)ur8eUk49s}$0TD!m3*=nK%Wcf_&>teSKf za2{E_mawi>E3rJ@O8gx~P3)c68PgcB#?nQuqwzZ(IACG}ZljW)tMDaaB~FC)$?%Bm z4|f7Q)01?~xM(GDrRSH0BX}s{gDNS|HXLbG9AZ3My}K*u{}Du- z^h?u6_S;_wYX~0H60aKKRYL+dK*PeZLy^}1Ri1UpxGcz=VkSJJ;@&fOKr9Cra6_H6 z7pV$&N)CY*0;w#~W84hKi$Nx=l9~Y1feuyuObXhcdoN(T*g;Et0` zIQ54&-B^-N4D$l$M)Ca1S9Box7};uvE`QJsBpa**7T%drlDJir2OOS-i!Z_yaK93R5+5I2mS{om9UCZ zc?5Fwe^pNE!s=>fhu8_-Ax`7(p_D=)r5AzDRvRlqH*qq4`)^1c$?f9i6(=hUjj#2d ztf0krsNJVOcT2L)q4^z7J6fcAuq{=4sN)4h^}_D2)@(X6Vg#9j@M7 zgeg?f8!8C&W`!h)-W*I^0E6hwhyOhd_;P(ZC?+Nsf-{57xgAfkx@k@$zF|5}s}4$2 zby}BeuxoLoma94!yB`~k>RflPqdKQJY00t-)%p6Lj_Q25G%fX1o$H?$)wuyb$(M}k zfXpCx@`()9S>#qS)l-S6jw#VgRENw0&XvitPywX2J^2G`vIB2l1Rotor*QZp4?}9m z5Zu@RD>kuRGekzG?9iLCnh>riaL4hE{qvR-R&v!O?4K$5EZ)G%1Ed=hbS-tJ3G9dL z#stC(fR%QrED2T#Gq;sQVJ7xuu$w?;VvKv8 znvEan0jnj)OLzB?onfMIAeA;z8TRR8s(jO$M%D+HnZrI!Lk?}9;50863jt(2u2EQ_ zO$LKasQF~64SjgE-)@AHP7}l~q3GZUm-Z{o#68ULByDWUmxp6Juz1@ zgq#zy3wsTtB;pW)TNip{SUfQngFq4&zvwe6jiQ~MOX5AqZY0q)D#jVNN>bXW(ALly zPgoDx1C`2XRKy8@+1j|6pvcE`088qkGzGE$TN>zx|UQyoYZ{!v9WWt>?IpE`t|o=zAGpTSQuN>_dFj?jaj z{iE0aAN%X=BU)pimFCcw&Gy%APf)+o{<_+E&+^yPhZ-Y4aK1;i#K>#as-Njot=;dY zjCQVCLy$dFwT!>+CrN45sy3?i$M3ajMSqFEUbfh=@g9HO;eKp1s`Zb%9MyWjNz3xr zM?OxiLLW#CTIkcN&?>Qfg{$$iDSy3-Tggug(v@t6zuuiEMnX;1)VUspc>MK8GkpGf zx7Rd7aR15ChLxkdC54sj%q2pPn3Bd{KQG~b=d8RO*)#n0xK&`4`0KMIapV5_^lzEF z>;8Ic6EfDOJpTGy6MWQq{dJz(b6Msld;E1+hV<#qpGER!`|IuKjnFT{kM`HQTH>$Q zZ?_SD{Un{F|2#RET~4lqV@tHRh}#6fhF(DMd96{v@dw=Ckf2pvv|bY2zx zB73p_ck(d#ApOf*i6=)#VJSYIT~k&x^0Dl0lV7+%S16o$OouG$@-Tqy>^|qS zp?i=&|Jou0D?&TA&*3e!kjK$2{;I!WbypS`6115`3gCjfEa>NLF))~rkp%tUxt4c+ z3cG;3_rI#+ey8gOi6}T!W&lyb3b7v(7rm;ftZ-(!LVtZnpuQ5~6XC!F2xZ33@mof0 zl-@@ugO@^A3Bw1o7s%|*+*^MPTj*>(mMnQ`UIXrpH=_|m!3mQ~Rua@G1nts( zoE#+l!auTk$XsW^4Zc-t{sB8QE334eNou`RLu)su#*kU_UPz&;&4fMl!w3LF9P~b3 zg`8t<5?DsrKd>({(I=Mabl?z6nlxwJ5)D>UoKU$C0Hjbwd70ytq63gA=>|bhCId(Q z`2tputQI6|fZ>rvXdDDY|2JyvzW3@P5AkTcDjGA-Rfk%dWHfW6ntHe>GL$~ zH9R1mDUO;^hHi5blYdWlc8_&?A(y$yB}i7k8zf%vn{A+mPiUKwmfoy*{ao!2p?f3g zefS@^S|xUDfY%@LL?&Qe9bbSui@;!9nY`mATQt3z2O{Hn2YJTm8=ia1Gb>IM;IKO2 z1J(!CUvAarM2K1>E!-#0PsW5rzzWCSPd7O$9J82`C_K)2|5~V6LCZ!JvkUJ(jBH0| zv)_vzwnynE1IU{Q{q+gW_S;#~4lTdIb(2+DZt_paYuw~%j+-piZnBRgiJJsl1ORc9 z#cRl383Cc0g>35CQq4Xw!Q|chuW0C^DID+b3~tPKKi+J`VW{oU!2%trG}TFy=^#la z^+1bb?xRy=chYM2ImLjQLZ=u?;wPz(KNf0&uF3i0)6j;gWOuic?w(4-DV7kuh|En> z1|obd(aXYMi)%nes3UNd2M@lovI1RA4-FE9^%|tn1nC9(uyeP9JYKa)c^szYv5NAD zF$MkySg_OwesveGJgyf331X2>yr(dx#-K<@fNX(UeY2J~fxb3}0 z-sC8NMBxYbn0L9D0GXncw=&4vfrlD-dw!-z-mJ8|eLYpn+nrk8{@&)wTXmMa%|l)z zZ^IpVgJd%-n<_~nZ&)uR0EoOjBV%w9fg0NY7F5C<^0qE*O9a-S`rB*`pp}}R7P(X0 zk2e~Td+j;`NRcad()8*hN+iESF(Pby()9h5wxY}E695!;ToAN@Q0Y|5$~?^d#}r;^{^s@+ZNnFvkBPx505*MuGru7_RW zf}_oluhNakSH4%iR(kE3+F_!WDkveNCfcqnUwPu4eyRF{^PVMD4SzCHwc($cQU#9< zU-_pgKB=mUZ$zrLLEcWJYVAWz%9g5iA8DzA%E-86C%$spOO60}eB~tfqa#(z#yL{e z=%i&y)h?49sp|8bU#ec9g-?WD#LuRr>W4d=O5T}~uA~c6RSlwwuhdS{=PSi*)cAbm zPz};C1c}?$R9QDj)zez4ej|B$YSZ%6jp%w}ucfz}_bhoT8DQk;iKjE=NylEFJm8b3 zKW|K)o=4tJw>hHl+Vr$2U_c@; zlD0e%`a6C$B~K5#m0aVgXr;aDSQ6{IF;)r|n=x}iiJwFME89(u5NW} zQeUXWKS5+B_?q{(A8vg|%a5l&g324>9lPs3@Twgz350YPc-0PklpgS^-h8Czhon?f zg2?|GJq&`;wpy!cVIE3xezpK4D^erg*Hi}*W-2fZEx)Y3g$bU^y)bdGb# zxNsE3N_=CNc4*J{X@IlGg`MEs*B^Orx`x!^xUf#C)`HURqB@Da5%{E5&xV*h1Qz?f3A z6xsqHsa7qAzV^edJvI_Q&K2PR5bF{ec>@Ha#XFdmDBSi&w2TEqu|p-Vj7}0dyYSq7 zjSo*f>JcRAX=oq5+g)0aJ|u>?20ATBReH_bY3Q+56(#zvzmo!0TR^jR8#Bv1gDmQ+ zj3f$INODyPb~Bt!H9#q>)3*yhe2+3jdSXl?f~B>iR?wbtjD(#}8bVYiVU!*RUj4HM zG{REVniY7eA*r3Q7j1{o1ntl{&*%bCN_SN%AsZ7p6seB(rKG#Pm`!n|Z#O58TsO=b z4QIi24Pv73+3P`G8It+uU=!1Guo%hngy02VwoUx2KUqUPhk}d5uzD!D9Xg$+X}t(xW7>^wPDL@k{y&Z2`DI zbCi*y2)~t(RX|v@Oomk0;RdD4U_zs_)lJ_+WSaqkPhLll$>nRk?Zc3o_N)0M?L&{z zK3lEjQ$$U%wLAj|V-1C)4Kz88lnE^Epl%Z$<4gj8C&@F|{qX!MdYGPlm*~;*-T#mt z4QAwYGwAW{w>jx?Cinwdj^q$3|ATx$J3R7Xx%?4HDNsM%>){1R!JS2r_$uZD3yqML zLMqB;tET%_slW>QVYO`ppjKd`n{P$;ps)$-t~ z`o_}Kgs&lHJD~=b=RSUqJ{7zM4(td(-tb@G^09R9;5M2R>Z+NqY6%lt0A|0+I}8FP zW6JZMV@N|hVTdYd&D;*f4rn(uk&UL?vtz|IMD3741>x4!*hGkRdHTk?sd`VZ?feG% zjPd{h8Oc+xz}Zl!M8%AlBU0068J)?>+y!N3$(?A zJ~YpT4&mZW%RU;tQn4yuaebM+Efk3&S3@~iD{^&&$Y3?jdvXJLcgoh89+pEAWUopc zGy(1ZgLJwA78%N`w?#sHOGHD}n=AE{Gw`9V#wpw6>akeAOi~)1unYG-f^=IFZn+pb z!xgLy&9SE{+`>b+kV1)>jBnuvZQ! z5lGefG!VcM6-m9Aq@x-KVa&oUhml2~d%NT|o2wz_x-`T${xz+JS)Ypa(}PGKY@1#S zh~3RZB+DeJBitfRw0u4Vj$%ULT2hbMqRSy%L(1gB#>rCljHs+m!PQI?XU7npuObKz zn{n=qk3OI%nsXv7LmzR-5!Lzu3BiaE@&(5gI4=qyky*qPfIW%AJkE?% zM@(VPNY3QGe6a&NN?Z=o-ZjZl_jq7Cd`yHYt{2k(0H6uc0QeN`TUnyI(Z;p zKrYe}9OZf8dC6_XJ!>HNf$b3nd4`?Xm^H`tf{)oRE?*)WNRyA^1>eR=UpXy+;)>5j zh3e%Qn#SS#Up|_}ho4rJJ_{&+p03R;TXps|#rJj1U+^NPZ&K z6&dKiG`ahF@?bd+#mh^6g@d->Eb#d?K6M7>COGS=o@-`%1j&WL#n24b1i{6%^kpk{ z;Gc(5U(>q<^sx%i(J92Gd{+Hfab;huBdFNb{4pOAry7I%PW>5piE3lJAUv@nhBc0} zC5v-@ilGo7*lacF|7z+9w60~e0hS)C)i00;K`L{6q2o|?#xmJlnBMiBV7l;-E@4{B z+{E;JK5QJ*!II^FiRmvC1GTL}{Qbi>p7_+*U+#sG z{kKYejIKhwlm5w{&_0?NiN?@AS~Mff+lwP;#BuLzAPBUu>G+=Gcr+h!q*ke$SnJci z{)gi>Xo_@#V{bvleaE#{nNuH$H@x$R($NE0jUJER{ z=k`N!iq-{7S;E@u9o}|lU(DL=YxrrXT~P$23Jc#rFXON6R(wdrnvwVY^&aoaWHQFvfp0YZ~g^lCAz z6U)o%7C(*|!!uWIeaSXBo+pHJC-Zb+eA~wP)|mdbmGiBD-_rfRfq4yid-^8e~=uL=Vhs zXKZ=^9z8YXGkF($v&1AbVp(-J`!jV|XuO#G#wG4I%I`9*gUJ?oLoW!974ePaMu?T% z0^ikvA3?M4-o$ucxOE-5k$ZkCHbvMRxV?(AScq%#Z`K{UNSns4S85Ih-I`~r5GOB zfx!ddhLBQaQaHQ=z-vGr#13$5@&Myv;7kOLXreg_9m$_;6j4W4$r zA@30cF4$q9-bb+VV5a=o==0D6$#|)(yKP!yN#}g39B*aW<`;5ViSPVlf2GRvTg-+FIei_oqVaZH5eIsU}5obYami%kJ!k^sYs(TXBAjE(Et zIA_yO>8;PEA0iG82L^`!+)g5`rGZ6AdpB);vsRR4!bE2cn)ij5UL)1M#b&X{M zj?_2Ior`O2YCYm`D`9wRO17zwa(wN)j_Emat9uG0+}~UOT(SakJ;CpsGUMf}^M39M zn)n~GEb*QRz4t(6`n;bE`?oF8_n%h-(ps8caMsR4mGe-|2hO~9q_)6+7Eb(VUe_~h z%MDO=;T2ekgMLr9rXL%T@5&*V*v_|_+gGvEgUCAGF=z&Ooj2&sm0WAGQ~Tgu+Xq8( z8U|reKyRygLnPc>hYaI}9|}i%bbe|Q!oJikMm0rA;b8z_uqSHa=K{6&?dvy)5+hWE z6i`kf3h<|eUtC?Dmuf;L`zNsDSsR}aBH+Ryn!w_<3>9W{|yh34u3F~X&pXML&F=tKD!b&>M8tkl1Q(mv9 zLxoO$Q@vY12+89NqY+Iim~|LTL|&QjOL^Q8Zij9-l2>hjE09?DVP2%zT_-hL~!|X92qiQTi8QVI^CrB5TatZ}U4)(d%F1D!qIU zkiPcAt=n-X!UqG+kMG}*K0jX9hV$c_g~f9N+anR@$3KtrQF+uSK_^9rLo>>VH4roFp%z!Zv4n5B@q4zJ<Y}Hmi;l=HdStq2P#5isqPwH0D*0@~hPi>i)th?-vK#e%4rPpCR>P>vk_kDhzpPTS`^$2h7`|&xs562ViK;tD$0ZG_NSJyJ-O&L3o zK!wM=;(T1mAZ4c8tJYeiv%ScTp9XwG)s5eo9Dw-PmuvY0Vu`mmLxY(vhjtQ#uobR#wBf zVe_=50BR&yK)dez`QQt;%B8NItzj0&Nf`eG7|oP@-BGR||tNm(?zCGd!)vvE%5=lJ)j#;cB= zRZKM|X;rVU)}vMU4AUZ7OWl`#MigHav{UfBm9-p-mxTgsR2m>@a zYs5Syi9E1FjgS#?!vw&<_yyDiRxH}g^IpGRi4}6&sNrZZbvutxEV0TDsYjQ4H=F{S z{!7!>H;}E{g*dYfw7X*>&*NcXHyaBNzB31l|KXAJg=a@#YCMei=NH5gDx`-~#3En#(1@gpz3MwoYwO)ef zL#*;I!?6_5qe6sZa?U%B;6+%3Y?t8oaxfTKZgR6+Ls}%Tt}0Opk-r4Lmq)DfMRh|( zr4F|e$3oL8%MeuI_Y7!TM_obx41Lo0$yg|Snff4RmUX6jl=K6;NHwQ1S7 z@Y2p@<9L5sa|dL@<^L5fZ{8$x7p>V0=H8Q?S(vM8UIRtG)|~S5hwI~f_BC5~7mji0j1UV(zXQ7K z@F48!X9f?xTL>$gu|7`hh3ro5qW*b_3!SS3?a^&XoKe&j;@;o1N#b6d%0XOp2tZE` zal|Ln-o>>1Y$7JOWweK8j0w{APW(PQ-|8

    P$e3?#e6Nl8K`|YM`456oz)Y!NJ4@ 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%0A2L^a4AN#x9RCD-yyCn6?L_&S@)z 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ΜSEC!Ab~+kqK6CSHxioR35L`PnH4WVa}l$BAK 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

    xuha+r~*iJ&^XTRFVQnv9M^yew&mA$xOzM8R}> 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%0D!Ll6caD44P#u<2$(hJG5m6cwXBj?dqXD`|gv> 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≈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

    _F#7;ILp(Imj(>kuVnH{FT?@%WbDKuOk^W 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

  2. XV#UmNzfPnS|mdO1QdrGmOJ(%e}*b6>ugFegL4G;FagpAm}c(hzg*Hp7; zqfu}7W!q4i0^A0pe!4t>+zAX&{R5UmbLp8V?kT~%#Qx~6;$Ktmffg8m86H?|S_(ao zJ?OtmjN$!YnjLf#SzxvF-pLn7iA%gJ4|$3yIG^xr_E60)FO$~CCSi(CUv-%RK(kT| z0Tz=f(t0By8Q7VWiBJ;c0t;zbiG;Z1!DPQbO!;F+OEb(xE@9#Xwhn?X0=4;_F;BT_5K>f*;QW*LB7nUSF(6=s zsSmaTbTiDACUfO1xrmio-yz^qYPFFG$S%=(IcNa~sN#okvViietPxg*nF?p{c+y$Z z44+oA6jVrsT-Ddn8%TFMyXrROoRa8-T2vO5Gdj(PBZ%m8R*a>CFTNJTFESpKeiH%l zh7{tX>7o?je29gA>>@8Ly2x^^I!tMBnHH=?a^5M^Ui|VLYzuUe6v`#ISgNYkZ-oSE#(VnUWkg#0 zdZUN49y?>H{=(T+&O)Gfr;^(lFURN9fTpDoMV+V6cnDkeYNzPg%@ANTSV9{g|oEs^HZNgRzu$NCTo%YPtqMS=8vG>e%S9x+$k& z6tM)SI%zk5Rucg>0ex5jZ>bR8QbB2CMn3YhuT3ise~RIJHPXDSU2L=>`USEWki0EU z6TGKrDvpH=Sj_=zliKcb(C%1v08553l@PF21+0(g$ITHMFH;Uh(RyRvQpo{Wkk
    LyZ0u`8sle1ew(2B^=fG=HgjV)sx%hWIVc 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%0DZr;W2qRQM1hPO#s&Fpu&>;yZcms1sr$% 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�&G#d6C+%_1yBjeYHa(b@{l< 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

    M;!+gxf^C>HO`1Fe&?-aaa^vm(BB4 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

    su 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%0Dqt1P&kZpD?7~g}Hl+&xh3N_f) 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 z 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%0Dsilj)k-i+~IH`Hc1N>F_zeoXIT5{~Tw| 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

    sWapX&5$CURWqh%&MX8!XD%*72P(?8 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

    %4T_q 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⁡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

    _2u=;JfyWlibJk1s>L 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

    5R%A?hQCKQpnQ#zuZZ`-;0sqn}~ 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 $r7qa^rpQA9I&PG-4G4XHX5? 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 z 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 u*6=G$!e*r9N* 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

    unBEA5m#Ah6jl{h&qb8 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

    eV*1#5fiJ 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ℑ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

    EVeW_+f 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

    8Egz8c zSP;6arY{~~m?k2~eO8mREkYYv=`P15$+VI8lt1-kHj4PUFIb-TN8TXCyoX@l{uU3O zQ{`-GBy4))!dF8>@gm7Ny)!`kj#hlq zS)|YOOzE&nr6p&zMGV7ORE%o~FuH{{!_oZN+rp?!V*O9_G^t?%@*}959^~n2Wu^_zQi_7&QLC?=nFbC9LU$- z7X~zj0=Ott&g^Cg>9q_!VL3_8`K4Pgbi#btDUu-HZ~~|*30XOSa2sVBFKxU;#D4yu zy>Ek5Ytd-Z1Rm)FD&r${b5o-Y+Wqf;fGx#Xj5Y39?8xAf!FtyvlUeW4qQZLDFLq3B zLtIVpL7zz~PC?%#!S895>3>>EBcx^pQ>Rj-Gbhs`BqvG`X6a1%xsbS*TeMur(S|p= za(n=&<8H51Hdl~HH$&v>Kj4YbWTnT6BA{88xiOG4s!4IuI(^tjP}8#>qgD0eKXV67A^eLSXYs)=1hszcEN$v2y-`ZPBi)hw#1DGXn~)IkH-{hM zxs~N6XS3MX(?huXKeQD54xUy7{eKY2 znQM~;f`9%;+8s-#rXiU{on{Z}n7_ZDAip1hmI|V(9(?RHU#e2zWV(|@Liyas0-+w- zau>X9C9ODAdZOC|;&hf&$NWI!HRnu+wh~j0>j$Y`xCZ=V<^tueNYAz9{VF z*njme{&g+z7rU_QA9i0oDn$MH7w}y<;vZr{f9}K`K}?nsjWyktecQwFEQE3Sn>0(q z(6xrkdazyg6-9CjgPOy5dGVF^hehVE>-fe0a;&SRQQ9_=bP>ya zKi`0@U$NyN5L0Mr1iJc(rIXOF3RnW%;9!-xTMBTz772ZdP#^IHKZa-qBX4U4z9}rZ zZ{?Ul0GIuv2ZW>QTDJgUC{nuCy2ENDuw1!LV8emd32H;)s({XjDS8F*OrLR`m1v1n zPzIX9+W279GG-^~=Rp5E3^>fo2~h}ZY!|@6OK-`2$ryVr|CRhVFTnIpX&Q!F6swfo z&Z20zXO_Datm#%Qoy-u!m%bdPlB*~y*O)kGoiS4y8g}43vsg7ZUw&_s->dcE8nbuK z3DiMzG_7cp-bvPU)B4q1#(5I=>aPSM@z5uV_W;)}OSL1>!|BDi)GAriE$2-nh+SIshrCDzh;l&@1?JM5@#n5Q6lYVNy!H-SsL)I2#rN!OEqheOjzHTSdS(k8? z-iDkfm$rT1b1Sl_eNb8`j`*)y1R)%$5@>p4;|Q3GTJHUX^SK`cc>dOrrTKOi-}Uz? z&l-&=yp^l>s^sZ~wOj3IYrs*KfZ(40?;dPOiibg<^X3!a>AeW=llkjL86#0K<1l_! zPmeqG^%KM00h6xAZ1T}*{f!(^^11C(y(a%*1pkEpV)dt9OyqSqzae80Fgs*SUL(uC z7nVtRQu>F_*rr~Ri%O;Hx{>mpQhh_YK7ePUVCxd=H9z!h>%i4|=AnA7WS~;XU?5|# z2y1xTd=PmD@*YSsML>5)0L2l;hc$X+5w9#h|0}8aB|LlJ$J|kCx(6n4<%+Y+`}oO^ zjLM0hcxnr=Q;LU9Z4>n*tLZQgqR7HsapbqFunb`F8x{G-;xrXjG=MI$DdJuG(|{ib zevQ`%NFMk-s%Syv4p9qhXzwjG)qTALd~DGp=5`{b--=Z@q* z4exPE#S~g){ za*rQQYH9YGR*@B;))20q6~-s9oN2d6(+<0}?n?(VZ_HqIIr}TM zFS(PJZf@|>>FZ|-n7bvCK4iDl7jjfFq$dnl>TPs?CQ{?QLYzKz2RE~OqM=&u0FsL& zFoAS#eWq!iLp}Gu{E$5r5#vn8`JnlD4Q?PSWYf!T2Y&0jt2@%%;yT%C28fH&yTv)% zr(zoc92ps3W0p~~)JJNug(1^z-0qO|wKZRaA(Wb}A9%W#V32kZzH9UO^g-ZzjsxKk6}Hd#prPm+); zOw8uI=2v)#5DIsIG3h0a9|v4s1~3}x*q?tnZ;NUKx4~ZbP8JDm<;rLT8sUX|RGyDR zFoj9AI5Mq08jC-k?3=9ABHv4g<2w_K$%@s+3ZJp27aJt1fR)(P){aQNq%;|x?@BsJ z>B|Gffe-Q32`bR+8)2D!p;237h9h*-MAQ9b725ASV1a14T#iX{$pKCe9X()* zHv4B68|9xhh<)sURjZMC1Z1S1o_8&H&!0D3ReZ375cqTUDvKzDJId&C3vZ;<1~6xf$_oN^Yr?CGE2B?9v9%(QFKcb*=7^|s60AN25Cu| z2YC$3uc8<;3{R_Ru34I*9#V2em!~KK57ee(GvIY&9IT*Z*tQa?qd=hrFJ?a>ed&oF z;)%Jx3_B$4^`VziEqQLB{-~l>lD8Q$I?Bi&#z9hy0)KWS!H-(w3C{(c0hS~7-n>e> z2%o*`VICU!PDb;Nkg@y+234f;Kueb{iW#ewuCbuHB`N-@f0{$9+Ee z0vp7?W8AfzeGKa8{^ILVhXqU+7}|`x1~~St*OZ~f{lzyw2JQ|W6)_znrkK>J1HlF2 z)bgRI%~3y{({`9`@nLZ$YIA*WaBXVv&K@Yrfibf1FpgXJNigxyI2SeAiAd%V7ae}R z8y2ir8|kAbY>jpfCOKj@8AofYl(6?cJ4o8ja?Lb4Yq~`w)Lrtmnoz3NLNo?#u1YLq zOf-P6+Nm~ZGqY|`jZSxRSMsR$<>;BrlC+mz5J*HAa(v^M?%Dsy01&R!ZrpOdaPCWN z8Ly3aNq1glZOa5gY9%R{=+=qzEwh#1VmDJKkj%C7RJ#+7Xj;0epNQh39Q;MrOdad{TJlp* zH+t$@Rea|dgbXO;llEpveJk>YAk^S^4Q`t%XJ+EUFhlzG96-Lv(gGpH_|f1dfC*>S zvG7NFilw8T?~%fTJV!@bv*`DZfgwl^P8J*Ek|$H75 z+i>Jlck=Oj7$1OJ?H&TvT&f=T-p|=GfwwhF;EBy469}A&G&3_vUSyJR=M_OB!gM=T zlAau=N&=UmHI(mZX3;y+ln;Ib$XHpeRerKaQh)IhPjZAp-NMRiHHDB(jEa|@p{*AS zPHc2_CjAEcJ3Bm%0u&P9^y;Pe`tbkpF`lJ;tV^54UnKKDM}Tjzt`D+?~qFmOI2Y}N zXt`9+wcw-5Kak{2eI_k?j%@tns{%Xe<%Jm|j@H!Vw=!dlWEe0OTX9pnoTTSGf-NG9 zLxPnRpC+L<9SQ_nYLQIyKVM}VH}t97Rk2U${wcne32#GUv$9<^WXxc%(k4x~0IXyD zEwH%f-N0E?9|?Rmn)OP+&Vb`5WFl^>Difo8R=22zu^cUb7E4MYF>RbB&BHXC+FEIh z)#G?J$G9Djcph`pY49jMLayHSy1-o_ouU(Rqc;;dQ` zCV|BmohZnG0!6Elr#DY(|Ll!{YTF6c4e7Z854Z51jc!}|-#8PG$)C}(A+~Eb*&>rX zzi(8bUaRuOG75gRAXZKFWQJ6}^UV>p8kXILlaOgAIS&Et1t!f>CJDnt1EWf2f%j!7 z_1kZTeJwO9=YNBQNM}jUn(G2xKBkHF@K%-zA1k3UyO1gi4tI1_fx^C>urnOghAtz~ zd`@nlHbR^8O|UKAZ`|oe+EjC5$h=FS;AD*{7gW32vgq?F5`Vcot0C#UYUfH(-ueg! z;vRD4P~c8SzDT#XmwCv#&nMFayZVS{eiQKS5Y_A&p$)^tNW$^q?orZ1;P-o*M-tsN zauzOZ*~~%Nr)IfRa-+Gc!hnVU%v0bd@kaurVaZH|$aQ~n!0ic|eo^iDnoGFF3H1*-;B`kw>?y0W#!A#_CX|CM6jF#8D zCry(xuAB)LtC!daQ}qG`*3t+Q4F?D>Gy?E#j>7G(P)_ScJ4FBoK*ju&7#hCGEcmv_j~-&Q0t8zLzkV(2PVO7 zQP9nFQ;b`SEmeu4N5z**oDoeX}JaDN!V z_W|mA176v)NT}Oy4AdV7bTvsZdD}+HsH6Zt3S6Z1q@O?^byEP2N~#XA4wNsKRd!vlMxhadU92__bN4!L;66z`LYXsBC+7IkrZPwbFGWu_vWHm!sd$P1?~>9SS={9O)~(d2(tep zegtqO*XjDz`a7rUJPa30!Y@DdsRM!Y33nFNC#)U1G~SS%D)}|0E9$rE3YM=px}=0=VejpFcGG;^3I2D;0N|ms`7U2+?YDcp-z-=7D z0>S=g1YRg_N3++fBjs@mx9P*LN%A+w?(&>xJBlt3>{8ba^dM71wMpCpsv6aqqfPY4 zP&Gz_H1DS2Kp$og*tL$;#dG(l4mwl7HQYi`X+&`DqUR-5QdRwor>+Bk!BDkqZ=5Kp z7VrjD#(DqhrXhW z$=*xE&&%z(L{CC{N~t9Y@x1qtfUo?WCq#D#9c~(zOtfvddfiJ?N-!F2v%+5;k~ip@ z&aeN)ECUJ1M&4lqHR&6fm#23>WdMlhobt1y7}aJ#RV6VV*edh;dC|jDI6zyjRE~#x4^2 z&=);pJ0?Ar_JqwTPduwZWtUV5?oIO^ENSFG&>dl5 zQe}0;5vdvNf}>p;pvay)8lj3cs`c6y3GMg3?AetERrbK8q2hFkcXdli4}op}x(8aA z)R0bJQ4R7ywP2fSF`fzzCZYB}T)4uJ& zp`xp4BTG|I@zZ#aZ+8baiXqzTc92(5)M8_38N*QA6MqDnbG;bHjL5#rP)YT z(pIJ^de!a{ z=q$aU(1$W52ru>!(l_r25XUe}uN8>MIhSuRe=Cd9uoPHinpt+@0->G!y&R}J4B+?E zYde?D$$^pG;)mRK;nDB;xdk;{d-cC@VV;Ak;2jVS zUI!-J?-(CdtGly!+g^-Y15K-n2llC?ssWwvTahQrT*Wxy?6&fb5uCc}`chU8X*@U3 z+99sfj{OQ&eFNseiTJAOxG7kDZLOE^ev$`QUt6PFNQZCl`L&HfA75J}h78&u}w`XIYYYqI=m7J=%iaSVBgyo`ytgV0y88ijWsHJs3Nu z{-CVl&kzNj{W19#DnUhAi_DxMoVO*6)FhpKP07X;NWHI!mXnJoUDZm^v*fEk6iQ!Q znA4=sn*nShRLS=ws!_oR{LP5KOOs&4;S7f96 zS4zu>%f1Pc4kw>NRI`PWKTcgHoy7Cq--hWcYc7_{7}B-x&K9lKzVf9v%a?c+w964$ zTMH!UEeRfR!vD0!j%P&5_H&_~hSg;Ut8U32n<1FOiU7_R9m2uJ*2oh1*MtXeV$w-C z<0k;#1%Nk2ICm}$&$}-&mOrW6fJosYq4eHosnJGL!v4Aj6W8+tc@S6>^T6&9R%>vk z5Za*BrAlTA<=+aPp8t<3QZWLPsYnGI0A`wUi`6u+fubc@WVV$%a5Z@Rv2$xIT^?_BZ|=?z@J$f{Ss5P}1b$^?&YD?3Y6i{{!s+)9qhZLA~9x5Ll>3yp&Sn`WG3^3{o<27-BE%ZQiasi3kh<_ z*47s98bPv<`^4n~XRoZzu?&sZ5~aO^BNNzwF@YiP`R&C#UCN-)Gniqs8GRc^ ztK<6=$UHmW_3%J}mioxT$q-SlqeP_1Lh=afx{m+KCNF+Ly@W_fTA9sADA(6*TYuq& zNgq2Mh&nGhh~d)SjdjGwV7!hQm??Jui%0rlz#Rao>$g?7!`app&qfrP@r`NOZ_9m} zCD5+~;Lcj{c^B%zX;^oJqQ+>l!0vaY!1RDq8UGx6>8`ZBk|d9^F+GO=3V;0q73WD% zycs~NPeZ(CyfRoB(LlC)*1n5?{vZN~7x7jc`Pm0sh~4Vb@^6gx63T{0d)8w^T5;r7 z(OZ5a%dmI#Y4k6z!Brq#7D*rbzb=9!V#H!R+`r#+cghhQ!I69%2Wy%zUi?^3Q=zu@ z(yg0CBrdlyfmSiT-%62tMBeW&h#Z?&=||Ca5TR8LufuJBDdy2nd~XhTbt&i=Mh9M6 z;VD&ihK|wlnEmDA7;ymF$z3A~Qi@O(3jEtAzh{BaPy>`?~IN$iaR`4G3 zvs1jtHDsbi{20wZUm(=VX&$_ znLk(*!U`zNv)12Lyq$K7HacSl#)^gpFmQQW8GVl)EDl~}VfM4!tSs^?SDy!WnzTMo zObN}osq6%L!ETpTb`GkNF+U6p3ey=|R9-Y26scEN3K5Hb@4jS_;C4U7^ZmHNPD;!z zsS?t*r+bKn+C;6Kok>m&tVeyCVO$?`nLSv1?aLmV6mWM74^V>pw;U|~8j3w99PsK2`RYP1*>0*p2lo=lo#%RB1ugj}*Xn{r zpiSw7nzDojh~*6V)J)b$Rhaek0yzyY68y)W70{@~K?|cDBMQ-ndP&NvJ`ax-!SS5T z5!gs?06J7r-=7&W9k>nVZ5O|xa0Brh3at`zS2hGJa5cR=ba4qK7l)E65q&!#>=?B_ zWm%CiB%>Nr3+()&KMYjY#|EnP;R=FsPIhre#MHC<3(7R?**XDMLR8&p$#*MD>(oK3 zoulP_XZRF~|HSKgECba$l5vb)SO-=oWYDWCtOWaF(4V~ALU7<@zBd)mEINy|MoTEXr*X%gq$oKuRhKjsFw%Vp_*jUPi{TyBG0v;J@5i&EwgP_2kLc{ ztJ5$xuL?BrM??SCO94?Y5gfYMBSK99XAsjsMnifrNKH<+9AavCjEkwU0+{rU=R8j6 z2M?cHAZwcBj9lW$TITqpg{ea(p3P;*RFzO4(dVHT>bj`8kPx2p)jc`ke#MJEbfSHwnY7X0>B=vLd|6Qcw^yda@xR>=8-}h7Ou6!&K(3#!0 zL#!6r7@ZNiQa_BxJTacd(?j^P0gv)jP((cuq(a#R9b)1>J^#glG#lBgn5`mVC6QPS z8_SSi%|FDoR}OjOi?^3usBTTIv>tU!7*pbI)mTXs$jD!4nNl+syEGOCJZH40tAV$d&q2Uxock z-5SfdliY~I&VLU0^Yf5+%O+!a$dyw1%lg^xN7&uzk}T};>J|D-)vFdBiL5zn@!Age zxEOGp9T;`#uW24Q& zI~+*H1jyesf(2oMWXKs7#iJcMnN>C%_+A|`Z9n#9O z)(u%H?@WVuU9by0 zi<%7LSHIBnn;NLAi;Ld}SG|4EoN=YSRg_5%@5ptMhR+0A0%k8!nLQ_(2ze!;zG-~C zdPa}0JfF-H*gN<70WKe?sj*pt*s<^UK*7-q>janMk}4s5DhE=eQeu1;oJkQAj!iLZX<3`AhMM>5|duSx#JZco|Yh< zzzh%hhnBGFbk&L#;ubD+uePb_3ze%skco>zD%zFGn1^DyyQo_$c3v%dqM-N1pn!d2<+beBlal)vTdvW^{Vx^a9QuQ>nM zBAN2US9<0sCY?5aoZ)pNf1GKIa#*y7+_p!cw!tHj2~eVLN5e510h?Mv2tJJA!I$z&2L^YeR#qRs|5?;eE_(d;TVoG!gOZ7%U|| zH@M+fpB6m@$5()oDH43cVNZC6z6JM~S09(rmqMXeMw3~BUh`);DALm-FS)7kA`?!h zH|b%gXI$qyi`NG0ZCLphh)qEfwSYufCqE4bH7Fx9sOa8VvQ)lG=D&Nu}W zS&cYor)>=!wY7oC>6kBPY-ouR7#gZ{;za_@r>e=9EuqP&w+TM{(OCR4vHI1gg|YE1 zH;yiGgSv9Y4=%vdL?$yhnsAE8J$c&`MGxT3CYbxbqY+#L0ygl4^{u5{6L{%Q&4^BZ zKkyf!pBTz3j_76avin#jk+m0_A5_9%Wq*;^Fq10b?zq9jFW6b_?L3mzLRmDY-O=O} zk5le)Uqo5$t$3x6S!8PQk*>U@#Nu|6$S?vOkW@*{Mehkz(N4Ks%fNRGil)2h&oh<% zMVYu$*uLZ9Z22gEu#vWONV_|Uju9|qW1!gis2y^fCM705FM;eIheE0i35WF6b z$=hUN?>AF4^<~ZjXyOYLs6?vPbAR#6KY|spG&A%KnLgAkg7;MilYGGNpMImKqYW^w zmfOJ4M!CkC^sx8iZ}LzI&1iF~H0SO>JZ(x{7va6>gC1_6ZrP`2cu#PrzFaZMNM;E1 zO*ebs&Q}6$1O21Q#KjVD7&4>9EjjNzmgZ>bB8NVOh0s6w5s#(AJ7A)2jyTiQdW4;0 zm(yuLkKt1XW^4MY2WBQ$yPFasj-S{38cP6%y4sQ{rL-uMRAyg%nMDtB7Y_4=9&T@iYFz+WSSP))7 zTUaEzI0>wuK%W0q53Dda;?8+6X;s$HLbsJw-3$0!ohLg8MIwedaIrVO{nbwtAN)o@ z)o__mPn6jF6|H~O)48j}&HtB&VDoB75RbDr=#i9ZI~l6rCv(Jl^A7`dP-rEdF;^dC zh0yUz<-D@KviKpk?Dmi1Z5*>V@$mVF`A4jfjqCIYkek_p#IyCAW%fV9hM_VNfDjBp z(?{6^UGG`U173L981=Yy^s&zxCAqCl&)5PA1-Z3FIf28VNKpYmc&x^WP`8`do}JoEGr?1uoy-@T7ZHIG?hB#!}h9=bDjQMYW{9wFbRC4ZaG-7?}WaS=J zB2n2{fgZ}f0y)QdI_<}PzCxh2$t#dL-`kW$n9J)wyu37YCg$3moaKni<0MiAW zOtJgp|1$@S+R@n9mlX`iU|@c67vX=bH6D#d(=HduY)hr-j3sk~yyfnkksu7PLCTQo zU=*;7?F76t8%B%cXSqJ?!c2XnV$07PsfnaEKI0*LJTU@m9??gbFnmic=_7zk?`Z@C z4;?*!E#_HI*8r>GFY!Ze9H^mebwA;K?s(za+uQT(zWx`DWNaj}?0DWU+rkP}B&wj4^zr-QU-^E8dQHoM3>V+? z%6Naaf*UJ~>aY=irY481D*p1il$DF@LQaYvS6Ga_O87?u9?dR%apWmzNYjuyWuv2& zu}eytfMv&@MM7BhYfrJRrtAZ<4WeT+g@F8?QqslF$9`w0i)|FD6S(U+2qbRzndL5` zyVEUK*~@791G~`6Q17pxKd}AikJM(PCK2`-HHiXbZa{vs=~i0{+l@YP2hDAJ%;(>P z{R&o(4^zc^j4RgZ_89rjdj@j$qFJ`3tS|U8#rm>?Bap(bv{NmN2z4H&tg)2b2GxK^ zXofaw*h78r=ZnDrPvY+yPiOeAoD!U;q6wf)>d#DEk7sp;Sy3-xe^F_2Q1BA_@i-3y z;d-1w;&XZDKBT}KvUdlhp4^~_UXB-_BjRhNUAW6vs%;tDR34XCcV^jp%Y!}X9qKW< zM1pc|OaAJUQcI;4l-E{$45yy-vHxQqng_=pgEPX-$Cb~Y7#r-?$BHExDd{4Ni3rwC z%&$DHj3Mft@wgY@ziYNbi>yXtwB+{8@ zlQ=N1$OETzSmZzIyS0S(%Mn^jrrGD@$9hsENv@1jmfEDQEC+UknyzDyz6lEzgHE1CST!CSjTFbt=4>?Nb**n7HA{$ zlRi@Q#U}^qAPH{IxPeD@eF}(48Zh;hR7oXt-{CN=ZPJy(h6A*o8MG_gaB|i*?aDSB zoV88l4_sM1SbY7zLPn$E>N;9!88kZ9&W5q(Ja!z$Y92?VPjie5Yy4PaG(uFwRmWs5 z2t~ZQ0r5Glm>dM#p?u;~a#1g>y&C5(=^?D&oZ(>>qN%%`5*1C!QQJD>K}Yh!Jkog{0Gf}Q+Vw#aDymca23&rj_|CYcJiN_bz0;5uN;1C6NdEM_2)X9x(O z?ykJ3z8+sE^91&7-xTk0ogBb7RrE(+#=ZMIEq(_tSU+ zs!Wb0GempG(*t^W)xD&aAC~tSkARPIWGp5L{xT)WS{+eb_ejO^bfkf$o_9P( z@QUV$r*DyTJ^NfwUyOmJ_cI1b7^fafq|AXF+3HCzp$t6BLn~Z4fr}@DeA42ld~(oU zDmti~^~NPQt;VHfJg51bv12m$H_M>F!8*mJO6)&=cA#Qp%+L6OXRn{|qmdA_AsAln zg5j5u1Yw7soVwiwW76`1=Xjdbr75SP041~O)%E2PTex@;z;EaM1afX~09KbR^di~L zYbmW~`5ZY{nw(G=_i#YehNPD;pSLc89YoGAl-M~Q4A@!THBnRhV=XeT40=DI z{%{HCO()#IEV6t30#78IQlnMeqaV;P!J%vHu!R$VpLdvex~!zlEh-l^E%~pU(O2@{ zIFk>n&3{FU4{3~h?K|isKBl5aj!g|ZL$k_P7C&Pd7wQdbu~K!I@{IZvM>x7Uj5O92 zPMBl$<)j%WSisB;K653r-B-x0g+!kx&4pDWPKASP3U@!98jS_`5dL~@3U zUwc_fGen@r2diGH-Ma2xH#k_Tjwkbk^{&eT%yC_S!^NJy&ZGlNe8rJJycT;>?1zD> zvbCP!^sbT0j)9RaR+Fo7)0-uh_0JF3XvSd-OunEEhlVKlo;{LB!-La${F1&)=!uNB z*gj(U@(Vq-4%uPv7k1drq5-xYwoA`Z5onY;vj@;OiuXgku&gq@0s})iX|(2s!tSciT@ifE8M@FTSVo)>*34KPm(L|26^~+;(Eoj> zp9{-O`quGak*jG$WcnvrB;3zbJp4jU+(R&EH3p%ox!3Z&g?)M;Q(@@T3~0x)9NX26 z$xum=SqbRjF~gztlI~h^@gBVlFi!$rab+OH?&YcL%L`wDjpEcoBX7&ey(G!U4kxDu zvn)#u?&s}rRgRT{X=1)-GEh*1@4tJ8@Z;L6i}XpU-^SBAOK~EMc*0{@>BXOOK`+KQ=*$oWAZw8ve)Q6f1jt@ z16&3_be5R0&__^@`6Caq0JFmSxFSpO)o~60ft^MUtO!D3Fe~=&O1P1U5~TLJIm?KReSr25O_58Fw~}r_rAc zqZxFkL%UCplc6NfEN?W((-_*$RhjgX>_2#OAYbx^EvZ`s@o(rc8RIz)&LJHWj41pS zP9ePwV!!6yRcQSiX3Z{I)OWdstZS&#k|r@!Sy3$(veSP%%X=Nc8^K#KHIiNuy!E<3 zcu2p2C&$)G$=zGSfm~Z^1Cvf*FcI2>%H;~viyI~*^#|7h6XKv!zM!>Kz62^Y1k0rd zplsh{U%Gbpx#jWd4Bqo+u|mlhr{DqCUq45@`yFBAx^+1+-O7M@Ew&H3`H{Ib690+o z2}?x>XP`Jfa7{Hy{5}5!?#a-RTH~b!S>6(bl9>C1)@tC*8paPVwu}Clb6)Bm*8NR{ zfJGfFRKL2YkJKHkoh=fE3(uM%ez5j56}TjO_@}=|u6ZR@^5m|+2)vP8F8w3$T&9<& z<=|mSYiPRMhOJG)3N)G7VPA3fhHbERXNYgH_zOcEW*APV-6O7P#ZyI2MF-$4Yrz*Z z8mc9jtV>2)l3Z_t_{F=zU_#QR6ULDE2yI}AkCqW9+=6_%YgjU{P0G6t63P;9#`Kkr z>1(6;puZ*Opt}Qh15ab=_Kf*0Y#x&D(!YVOiN^SaUnAfZ9_m-0rpAI4+*#Az)E~7-TsMB)52!G%bYEV4 z^*n8=sasQdFz}J>-6uDrHjeEn*D7P95>%QcfY<$X00diqug~momWMVvlXEqbQxe<1&`#^1hbpzt-Ls_18KN8OgmOMLx+>T$gokf zW2Q;}8Gqx)(SbA1iX)p))5)E>a_;9u%nnb(_7cdg|LB3?RT@nN!RUW_z_#I_bQTX# z={OyDj1BUDC>|&pK`kY8oMNV%FUfj{4M8;>zREU1pLRaOBx;n(zfxe_a8*%86v|d1 zeNM|(5fvu`d34Hn9HFYx4XJc$=wkCg2mlR8r>lJiaQx8%$=rUb-1Oa^)3%V)b~I{p z(~Nv@56`tBQ?H@TCFz}t(>A76$B0Bdh=mVq;@l_a=)$00Oo0V|T=y? zq{Z7LD5i>mtSZ(Q zQi*IS(sj#nfo(W4^__@ClKq_91NkD4-o6KQ%2l0boC6MgI$x8eQRz#;ZrXYY`)vV7 z6G=&V4S37ihz4B=e;&4^}un^>jby|+aqwwm%3y3*L5EeKw$>DD^v1bufvp`O>n zp8#lY6lHvaaNs%^;)G9Fx^_1THQl{-;DqZgD-qnfNKZC zX6(kr#4WYd!blbfY|BER*6TIX)yf*tC(Xb@XZ1~tyS0||5!9Fd!-Fi85qb2B3<_Kq znKjZ#h6blT>k%~prQGw6*d3%yp`10!19GCnACN=+voGKeBX9}H@9C?H&;KHR8!$J= zR~OHDCzK5QT?*`A@g&iQ%?9SS|C|j!5?16&xiPLEPUbnfy+014L~0W#f(}s%i5yxa zjobumrR^cyEPAv{GX_VPlPTgG|5?DR^Hg`o4J1jXIC;=G$&bjPLkEpR*eryJ2W>BQ zOg((in93o{wj6?&k{$)pAv3Y94CNy0=p4O+*=%5Tz;|3trZ}dD-Q~yDbk5oX$s=$V z0bcV954b>nP@_1erCE6_%}Ov$h0?JJY*X25#wO31mCBiBBqJ^j#fO^jcyAs;K1Cvb z_m`g7zy;mHX=u1?bJ+o!!It;uP+l~K-$}Sv{c0KToxPA#?KoN@Ls+KC6yg5x*B*X> zNjwk;o=Ta)g9gTV{n||D#Eq54QAANoLNIwiQyS1Oo6@4!Rm3XUKtK_<{kCj}7n4|m5 zm^8SHgloT!@t3R_Aqk2FJ*M`X1`!+%^P&C0a&>LfQJb@H59hSauuY~%2Y18%V$b`b zALERuS$^a*qCm(ku1#fAyUy*mSNTpgTX^a~QTH`JeXVv=AI((jRGeeL0smxXt|TE9 zyfB^LE&n95oT1uDex^Exu=lO`0QSB}MwoKqWF(t!LK$h61eK9wm60i8e9Tik=EC?$ zU8w@~H|?>bm_$k?NI`WnyT^2Jb-=aU!WQqPnq!0AE!t!0ZbEoe33{I2h}8gONB39- z9xrE$drZzikP?e;j_t8KMvfrr`>9D2AEbBSqeGMS5pbR9C2X3XfM&OivISSYrPs`) zIYW24zuz!vXGO@Vf}Nc-*@)%#7Q%?z=5pF@%W0d>X}dkAZ6T-aXw>G`#$ry}v7EN4 zyAKexj zL;m3WUd>hWf-#1Sn+HQBlAbrN&y- zHNa7=4P%v;m~)FC!db2D{w_PVK-RDcK!y2XkM$tf%$-)1W7hH5;I$Pgi_SM<;>>Yy zlV^rOqLdGI({)f=ZUAnmNyBAs^! zdfPaOH5~1rT;=LhlALA3{sjM(gv((aomw$EJHr`YOb+RpV|0q}i%R=kzWE%n+;z5R zwmvnZX9=Dndm8W9L}Ks4OHVTZ4?HITg7HBY(Q+j|M)A^)`rE zie7Vk;A-hKp=^G79?c$F#%^e!P4A+kcpjmAIzU6t3?^-t?%k2Y%tLNX=dOxB3BqK6 z$v02Po6q(17BZ!20?WnLTgQxFEl{KX-Bqk*&G;PNI0s1|5uN``k1!er_F5TUjm7g)95NG-n<+|hxm_hfHW-*`WPy{0z+ zt(C6CAN@wg#a>{uZiN_w<>W_W!{2Re>Q+an9Hqn%45^EfN3>r4)@cE6a=|>WIKQaX zmlKLj(Qa{5JcT$-QlGyykStLnxde=z@a{>o`%s%7*UZuIb2ji@h4VDrg~Dd|6U>QM z-XAUsZ??gfP>(st9^ZrtsS?TAT&YygDcG@ zJnKWmSMG-M(A`hY{dT+OV1U*k;bB4ChMWp~pCgf6YS3zzbQ&>`NI_#QdVm^C*Bm*9SFll2c0LzFhDx$pahB7tW-V>JdRm z`U(48FY-8~Ds4vALH#_7N#V(MSs7@-^+t`)pvC-A3s)CkC>}GB4|j6pg-303G6NTg zI!kxdN^<6{gsCLkKsvgw%?n?YO{Hso`;+WR@^K zx*S+znD;q$_;l#loTFMjaXW5iC-eOL7o(n?qDbXUgwoIj`|$+?#B`yo9Iyq3RL4g!3S>}9=`OO|E zPKzk+k{4M((k%x}EtMkCoIB8X__~d4I2X7ZrqX@>Kv9;LBpSIjCkx>JQupNnau-$p z-)N5pWwjBItRl3n#7Tgmb0ASXCgdQIkhDpFaA|jDdNNIVx|{BqTtFBQU0e`H1x1ZI zawr}vqp09Lq97}%10IWrGP)wH%fc*+iudomSD!k*->yF9h{=yXn0%|h-_JYhRn@Ck zuc`owb1-;oE0vC`cO5GWk0iQtz){J>5u0GMWxKv?g?ewA2GDUBlvKz6b>lCuf3(nf zN)H^A@zIebQ-Sv528+j`u}h$I#1lZB<;eh&%GAA+?9d1L+ui3I44LLdd|vjoBW^Em zS)aAXJ%n2YWD*g5tAijlK`D>?AN$xMmh3KDr^Z~m@e6$u)ez=DQl_1T zO=3Z9Io^lL!`!6jbt?abhI-B1GD(2bTn!8u?i?bfx2bVUBa)K2c2n$j5GZGD^P#~2 zl@F%}5RW--q1Mgb0w3=xUPA_Og&h`l%P!Ky12<1e6D|RzhBA=9<)u(h4Lpsa9cb0w z?A9Fm+!Zp)=ni-ca6fTi8BAqGI;K+}$#lTu!1&FSv4po^0^dJtr&XrnDKez=kW|w2 zDjobMh~tBU?1zp7&fBM{lXMe!@1@@NsRnbqeSNDZKO%`*K@X4<`xB4pEcL z!cPuWHM3o_{7$cHd41HzD;CN zkghVxcc=NP(=k8>7aC}4gH2)%ynU>rqleB-SPM*17-HZ@=j+HH0^{M3@d8%;4Lv zS&XKX7Y3tv`;f~F<)&XP3KDp`e-d9U4hHdd=UWXesv^~J>Q@k-sRd)#AI^W91)!6V zWS+Z8#eC=Du{RkU7@9$-wL^CF)cPSHQ-FHTzgS4*=}@h!@ll`4EM_47y&)1gA<9c+ zVaI|X4){|n8OH|wp9N{W{K?ioS`>`n<<)OD0=0442`vt-&tdJ9IvAO4b(fSbR42vr z=QicQlB99*U)$z#LH9ax`>AYB@-|W`rQMgxJQlIjw$D-2gL@_n4Br;dg?TcgMs)v-{#8;*BIc1)=VNQ^8%&0aSpFL*x9+}R>zk3c4w z(a*}}*h0i*jGmNN=7IJ<` zrYBJ3BqiG9LL_-m`ke}5n_Lje^Ux)DhY~!b#N;Rrp#XQ_5h=Zs%VsUoG+0vitLAbt zng&aWNiU>nuoyYFEG%fzELgJp^If>6hOlWCd@0?Y8(C+1OmVc|;`!?v@59 zX;vzA)UkJ-oGv8iPMw=UkwKNwqgy$Yc>jB>GF8HCrzFhU`8gS%I)K$qHGF5wr` zrIH-|uqk=UAyn7A8lx_I!w4(GGo4;`wTuo6m5oP|<%C(COU;R;8)zj%lKjB$IQaa= z)rQ};x$KqB+H=m&Lu0T&t<7y;N!Q34+Zn}YU%bYA9;2LO5@b{I`e9;B4pX1CXFYAw z)9$U>f9YscP1F}E;CU3`$nr&)S$PJVqrhMIK})AkR?%|>XmX6nQW{Z zOIehe*g>ObY;HA6S)W_@P6&SO(cQ_fQW7OMufA-)C>t2qDt0G-GmqcS7sborS1Hk- z6%p(0K`Iip^)o+4lJ)Z8d;G7-NU|{Kgak{iBwi>{cXgnT=ALvOy{n5fzPxph)rEEz zRwW<&IBT6)yINfvj*RC>uOR5k&m5@GrUyPyLaQ3EJs-00Z0=mCX>|laFXQ7lQ7WZG z6}Ca?Pu1CEwJNC!38F|@uw23E3LT=*l>^N(Xx;k}OViovK?#1+S#S~h56S{JMd(W#dtaudh*StT?kvowx}VX~Di>1yonzT>ojR z2ntaODGrd=qSsVIdZ5~?tr2+Ny~!$0MV_ePGqW+0i*!N_pJn5C7(Y_Gm(*@rZ0yT( z+=j}=s8|0aeb7fy2YS4JckyYr^dV8Fyt_$!}`n2JzjTZjtcuHbJjT%zR++WI-yb?%| z(IB3@p&0UL(dR3=tOky1a8R7C!;%wh*2CmLy9}By`Zq&cFIe&5Zq7@u)wGWUnMGHw zTHTQA=d{x*Xe5BW>t;)%$fiQW#k@ar1X8&RyOpY&cCwJsxCn9(A1@iHX0(A1T?Xkv zki2xnlBPx{HQTA8v!rR#?kZL19BWcxelZHw=D92!9IMqvb7mF>Ltx^5%Zvjg_QLdC zDN4l!sT5=x$7gdtYh;lD=`UM-7ErF_#j6pt4YZG?dw|j->4v&e8F(q+yzCZ(7uzoR zCbXKkU>CK3x!c9aGRY&i^AkC*q?KOPvGLh9S5R?ViLNc7dp&tGl2|Fn_^I(Px(o3M{DFb0TEC`fVlDVRw_!!F&jTRF}`sT4++HO zDyN7$cPhfZXw`?w;lyTNN~8~qFhFq>5dO*+3ETBFEzD+{bvn8+3scr&u?~aoW zRn5JC*$J!M+m_|EfiGoF=__g8ZTy zXM)RG@FKL_Ax1Wcb60;GA-GF`s}Fq5az_oBlYvRFQiD$UzGz%xc_3pv*p5gM;N=Y9H?cW-8X7ci6PmcOaPnI+)}1Y zQeiUq)v2&>=gXrWh>QdLmzIdblP{}TKIGuc1U|X+n})wOl>t0!4`=_9%p#|xb?8(C zzP=Y%nMsN(y%CRYo~=(c7y_*$ZZ|aPTt}7V;DO$xvKxevjO3TZ6o;ZPX0jDwDR2jJ zJ1to!0@4Zwh4Jw1+HV=wZQ6Y}A(3;RiNiT6Yte9=kfiE*)c7^0V$&dVi$ji&hN{{A z?U+Ugf`Xj*^d;Xm9JfTA^o1|(vtNe74~R9GmQTWBO^poPj%hmWn104gFB)gl^Q<}I zsf4%-EnRY7%|4#CdhoUS4kMYf96FblLsZs^5ROD6BH0@uRhQL>KsegEcH_I+HIRf=XT@(z1kw037(A!0Z=|*xb4ubC}dD`!?a^tVB9G zU9Fo&QI$vv5AT-MerTtOlKBz>PK^NZG>Cq|5_f}Hp%pC&?vea) z$)j;>R<=2g0^u!jI>||`P&==P3tTKM=e8~rCvNc^uIo6JG6neFwqOV!K5hZpI{JI_ zJZbp$%cxscv$okXm1qfC3{!8SqMTi|)fMo|4>Ej)$T-NDjUWOn0i}5z>M2O$^G7X= zUL@RmtE&nzIet9&>fhDHd@>4T%G{NLki6%g%`vtXJhe0FjuU;7ttm7MO z$^g8i4sb1h9BA~Z~j zd`)|(1FvTC3Vj@?f0!}!RoQA9)3zWuSk>WS_{#|~+R($QX_a@_WCDO+vA`|ZWSAtI zZYy;TyBr0n6Ar1h%P_FtE^DjVvCU3^Zma`d%ja^s{43l}Gx+vti_wBkw$F1d)UOkV z7L*Yjs+7==zi!2b5&g<=5FITH0_|OOP;0fIgEV1H4CDJHFEmxvf+pVEf+iyLpp8z@ z`MjlP%shgX&Fs~ z5&fEQ5FIT9a}?(X;je3Lj9ROOlS@mtXX%_7T8%Q}SOQ<)W>H$Oio-a3*<>6GQPbT8 zs4V_xqjjT+Fs5G@LhF)Yt?Z^zDT!voK~iIhFUo@1~LqcB`-Er)`Cv1TGZS? zJT!IJ0a~B8G>w^rk^PGCAUoO_1?s(Z&}+4$hwiYojN|(qhfhW`C-Q}3O`1-Gp6*6K z=P66iXeEs5*GdG{(Ma$TCBZ@X>lz{>H`U1M>RGu;DM;Y^t#xp$+?0%XdUQURnts~lepClgQ32A z1Q@H1oQz(+d~9>QcxXa3Y0&z%rD;?XM)s@5gY0N$45+`XgI=p0UihR04PLSg8_fhD zE>BEGIcIk?S57TS=w=9{VlOo$jc&rge%;gpJF1BT^rdyc9o00r+F;|dbdUnVbsi+S z)4&95~lcp+s;G?)O^rev*d!%Vlrrdz%M;CW0w1+twEd0$dG0uU-=VKs4Ipf+@p++UE+52GDK8LGXeBs>n$scv%jtBkiVVq5jfyK%5wi z4FbEpfNg%dKE}YpbLSZuUAY7+l35W3q$CTGDGq>h{XnW>RpN_sL0uTvm<25Zln*vS zlO=3Q%0aNy1$0)oC2T67!vI@3-^i-een~$$CEB>8Okq+!qdRJ!s5Edr7ph>A=NweSKx*KbN962)HPWGItH-k9%GCm#G|)OH)Jyo zq*Ll3n$s(-0=er^8pAhN)cH2F+-1L)g&6L;oC6h<%7AnCB=OvXMU|QWaOAN@P0B=S z+JS0~^EzlJXOO_#pK`v^k$5?LoU;DZ$ zvBHR%RxCDJnKuQ`{r zM!XQ&1jr3|$clW1EH2_RWS3a7Dxy#m;*C)r#6X@z=Fgkw8;Z=dwAi!jL1A zsXeODCm^|PpgII<*LkRljM%KhG#b@|MH~Ur^G>W|FoKwpt&a|(kInTtx&x8Ue~ANX zu?I42E)g57(X~eG1kz0&#IU(U5PfW(N|*BH=~fmwSBuyk0qD;?;9+(Tev&f7VK%iv z(a3Pp5v4N@{PnM?qiHh+xO6vJ@v}tNAWD@_!WAfA-K2 zA?Sc03I~U}qH?xcrIW33YdYI-o7$bCq8(1Vi|Vh#5)NLcs^%*Et?7|m!swL@VO3q4 zGChq25?gUd``QxC{44`QAbg#Nfz~B=DAouYA~ymu$GyIeNwy}hL(eB6?FFJ$HoBKR zNP*5q4?Pjjc!kZHl*P;d>n;ywxMPc8)@9Z7I>Pf9aG&zv3(tMo9jDU8dNjEbuL@UA zVI3txv!*&kjxfQXQ&mO~jqULE;7vDUmH4$S@sVWQeGd z%2F5s@^MS+SQseO4Dk^X-pZoA6_!#86gGM&O-B~qW?`vhfc}t&idfq;H+zn^b8!jRZrMq7V_3?P3IfxdYPT!(7+l!5km1oioJN@Cljlx#64fc4KOhdC8Ya4P?faO%WW z1Wa;BHd5ftL{$<%e6NG7XOZ7;91&EAh3u9pWz%J=!7w2H9jxWCTLDZ ztKM2N3ZTo;p1s!iIN-LOYB+8|<1bdtR4TXKt8q(6FE4<= zla`RtcNngTzI84qxt&?crC6)@J`;a+yI(mqjfcTA0KLrz4xJ03dOFA2a|m@_2U12y zfjWPkQN7U!P|QUvdF#a*LgF* z509JR^Swc)xIPb^iuDe}9B}GI%t#$ae?hfcf|vt@M7l$P`Jc zNA4$Y|8v)YF^#-wp)|NZQcBTIQEkp|qE)5#DTUy4v!ibU1Ubv6$PJ#sCoo-`* zK52sy$B=k!$}-)ajO=u4L;~B~(!l(err43z;m0PWP;#}}<2D4y@5~IeyTNS?kk8)O zOd~CEt-S=G-DFW)Fq?1yRmm zKHoi~zdgN{yUSbb4ZrAo{n?8 z)Ct}=&AAg;zj82jw{#QBUsk@fq)Qd~-wCxql~V_pd+xiSlXSYa(qdv!)FD|7l>DQz z8zw;J-J7fkn%uW0LC!bWa0cG`9Nk~EI2Z=}p=Vk$tf@zt#H5BA2Q&e&Jw8yVUkKD! zKPinbp>VEI52^ucwsGusX5(UHfaOt^W1)a`fOiKR_ zXc}No`aq#|Ay8lIJ(QeQ?Oj^kS?uEbZrED%1y65MoIZiSuFB4zgo!#a0zOqcTUb|? zqXcSGl!FP7%D>qvN!Rx^PJK(da)o=PIdVLm&dUiW``8oagE9agc7WMDl}MW<3Eyyy&c<%C($4A_;CeP2 ziCXYFUg>Nj@=pzG3BqG7gV3)mLE}z_VVg`5H}DZttSmCuYA^w~9MzH=jy;->x15v# zNhO5A%K&}M2M$9LLJ>pqbvXi0CvfrldAAybg9+f~y2H#rL)${Z3q^G3(8vHVF-_R4*kKjWB`FBJDr)LwjS7m+>&WKC{ z^9~1FH|f`S+Ev{;t=Q8sgE4@u-4bT_!Br28xo z_?0DO`m8WqlRitwh$LPROaShj^9=tINR-XaQ_wdKU{T;1fIi^^ht9F9x{=OZOs)3` zK)!9O;kyOBfBq~xNY&AMh!}J~1R~EU7-B~EVMyP&7gD&6$;AP6W>d%}YZKvp&_M=x zKX!20-;gcUldsPR`Z!S6^jSq1bW|udZ#SsWFsQE4G%$Z-v0JFooz4z)I?gwIvW_&_ z2sKpc1gLB-T1j-58^-iiDdKnGm|Gc8&ng+n76ka4bNGwjjR_M2|8Wqx)Dkl$8HQ}q z9n_rT5DWpbt!(6wEhT`@-`L|1H$Rv)D<4 z|LQlST7syH1PHy`5;S!YhHX+8gvYT%StcI_*r638h19~i><>)77F_5AAV2AYhW>?2 zWcW5ip^jo(cJ&Nl1dy+*TCR1o0%YUBxC^P^3$3v`+*077u~Z zC6PdbbYdY81`9^83$TdG$2DA zSY1_UuTR>UIYFK(oiEWF0r~+Kga!D>)O6F3Rva{XeYBt~p<7Q`YT^?)14a+FWuQLm zLL*5FgYBbDV>iwQYH62x16CY#F17T`SQ|$5`EBlLURr`7AkDpKG7@~#nZfzpwh%2e zv=nGuXK5Mk!-!2h1zvhsmMs*55g;A4+i)*#Lg^(_>bVVW3V8SVaA7q)kAH8i3#T z0Yg1Pq?vj&tGd@81K=5Nu^emV05H_+NA=x3P%h-V=!BefH8;>*QVUd}(0K;P;~okJ zeT~!~8DgUpauq(K*xboOhXBwDj6P^O(5Oov8DNyfk-6JCHxaMil{Go?-o@r0YHLoRA>z|K<(lKwXl~yQD%0IUU8wDu3sU{&$%w zX!5g32RRPJpZJi`CXZw)P1+5ON`jMCt zwzTrSWwq_yk1n(G=pp!VP)OFH)G9a~OJYxQ3Q|D3uMVodK!EPV;BKB=qY8&A;z@QW zbsJ2mtHO3yWWS3iO-FitCF`n%W|)Z%I$&Yzm9?t;8>^C*j8vFp@*_^U-Z)wYu?Y{+ z_HQ(AFIBoCTu+zQQi}P8{N@4;th9SzO|BSd)XsO*inK0-?w?}UN8hlWZp+fJFT1J^ zeBKEw$#r4spn+ObsZVGP-5?jFK;XD{PL7Z^5PhOS-43DJpYPhblez?PE-OI_gl=>Q za<_01D{b=QOB8+tu&*1k@)&p+nUHGIIYe-E=2<6T4|tb_*PVjEw&)v2oi=CVn7XO* zBucSE=1d&4KIfr%9cyi7X{x~ED2Sc#?pi^Gs2Oeifm3n&=(snU$w}Ura&*-)NNB|F z1c86|5c(cVHz}vEG1=PTdkj=x@t#^Sh5Dq1Z=ufXu}izQhJ;K3{wp3bf1jF=hD@zc zqo8uw)wMziwaE*mSC-~=)RIep%v(L=UOGxOI304LQkhT$L%>g6Q!AFxnY^WFv1;lI zByRDLTFxR(lT@t|M?vYZ_tpw06eq7lcNNN8Zy>eZL-MmztG6&or|t$p6mS2O3VMOrj4S~o49I7_-*T@h{Jt3lpR&pL zIGwY~`J9yfn*r`2AF%kWow;wDti~h22>>qspa&Rg7b5l5-dA4iq(F88=m7^%YvRyv z61US!fh?Asae5pyR_(FOYg)%JEjP3xnebQ-L@qpJ@;KR=4AumJ|A~5Z>JQBt=nOe& zw-k&3;sqaSfn{@oiX_V7Kn95h)tpV#KEGJvWzsE7s6Q9Z4NZX9kcVi2^#rx3a~>U! z)`QuhnyZHTn+I~q%@$HkZXC$=`E*P*N1K;B$9f0Bhm|_+#a}m9d5AfrR!FC!h~JIV zDE0J79q_2VW1PN=>67Oe3FnATsS~rsVH~6{{YY)ie1=(Q(dqNGW=iGES14&0eN!+5 z8g0Xt7B}a=T|smv)qzHl<3POLhm7_tRO+{9C!3IaAE|F0j2!`N;-i*v-Qva?S&|PF zrlhg1@?iE}+R&7$a`IoO9}11x1?Ys3uJS3lTzP3Bzb&^WU!~T}5#^;EE+_;0>ZUXz zR}0ibRUO!G%C!9YF6$&oa73JzVRIc z>S+IZgj59wDPVu49u35%=Dd>@|8r`Sl_zG;he|r50!q67BT|opOc|FtqB%H9hc4};T_J{{Jwa11TWzo)2WQdvUOM%qb(#vKt_%QG{f z9hcG=D6ILnuv9_`QpvxkC{;Pj&6MVREEQSR6+?-$-k#4 zRkfHcS9?qSkgaO%Is=M7j!?ezvYC*vKHYK9d;iU0iG?mCmVZx9;`O#S#k`Q}aTqiX z9SPH#bLKQ;^ioQI!X6(bNF`M3OLg|bI^*FmFrWKbBSp;^o?>65r7^r7l{nBhS}HQA z2r?v)e>ad|@ggfiwV3beA?G~E0Py=3xQ6|7%j|nei~)M!b4EkLyTF2X`FA7UPtZQo zAW$B+Xf+J?wa&1?odDhkZV7WKSm09r-H6L`$L^e;zEGdl_qNQc#Z3Y40gEeK3KqDOf7j>IxI<># zKapJknax+I8yN@mnlBpGg~Uy*vfGS68o+J0dI&%UAr_HgONnmuYXYuUVFCRqhlGwb z33Q8-vDQecK*$Jaz4SIKR*0sFl&U}oVK)&*hOZz6y!$-3cX13~WJx$vCfp}L{zT}8 z!WIZBNyb5G?U!mL5sD@ht|ZA7yGq^UOB{DzwN&glt=LD09rtDnK^otm^c90cN#qMS zde)o#0h^PAC}!=E_`00nI461UV>Y2hN7usy+UFY*8|k>o73|aMAY&S&mVC{SY|GJ1 z?bthsnhCY5sc;l^b&+l<%6A*^5O5~|zwz}j@MA3i)4g1rlF~0%Ee;sn*L}|mq)f+hI#toO+izXiL9_s?a|N{VrG z%-)N$vQWzQzjARf2!JOV0zL2offaLU$R6E{NuUz|>$%-%)5D#6GPNHxUzNk#l;}Yj zXz%*AMXi#|68nWM>tk}mGPlnURXgdK4#^z`%mH^;I8!aCirF})xFK9MyG5C_yP z(}ko(5wUnq0^#dxMge%hcMPvFu-KcF_T=YWuL$|o8&OMiY&{H7TTo6(Ll6zfVR+(86?!jj_@PelkfYEi~^D#xg_}$ z^|Y8-q#IOP&||hz$x>h%a&|pr<=xexg&p0Uw8HAbyHHrnZQo|z9J7UNwtPnTZkRGZ zjN@UKbo5j(c(GE@t`61?6_Nzlp(=HlIi9m_Zq8TmNUPzHVya9F1TJ-glwYTG)iHz0jl8VPD}* zD69@_wyGY{h0`6#oEB?rLn!Gt26?S1 z(FQq;5~)YRv9Z|E;oazPy2T{SnaPxFeY@t0Klhn=3j=jom3d$I-Hjt6%|x{u4F1w+w-YfS+f z^l-G`CKO0NGqTI+bZ*DD)a zBGam#jus4Fpm59^m!qJ_?ItHyYf3ciwJ6!Fxfxak*7&$(@X$S5&1YqFPsrHZ)S>P{!0 ze;4&O{43bnB-QI-i(hOq(xbsyzB1tF;*{mfj8x=$SZ|$qqlQSXhmow#!4d>D)uJN{3$hrZKQ1kfn@HF zWB}vD`(jQU5~>cADRYFTI2)rup%GA8{#rv(fGoh0C;x<_^T}d zLmjzrI>#80Zhu{v)s6q&j8$^dS8yCo#hHRJ0KDV%7KnS6S$kN?we45TPsgZq0B;B% zU(jhmIGTofq82t=4cH|f|J1+laxzASgePwj6BB znpq-sw<aWEd{l6mLMYl*CiH8D zinJOke0AB@xUH~qH~RQ4gWu%omTyPFGzf}^F!&+PKLe(r_LQs4D$X8$mSH)FFoZDbyiniD?!x zAbr`H|4bgfpJuvajc^Uv`?b&oU z^|H7f+IA;#HGk0-PuCLCAQ^3?DgdVSrJ1`WYniMXww^|4kV@d#Q4m47dINnM`YYN2 zq#%Nn(tDWwkwD6AR_~#d?43)eXl811r8yr3$2V^_oKFRJAmY!Ve;onpJGvU9N42XL zj=|+TV+_FA)no8ta`5bRkwP|W$1Pl+AEaNtgN_>jOt7=M3Bn^*hQcWck zu@tUp0&C`#R8vwGswsIO{^b`F;xly?tuUeqnJGd!{Czb=HX#oZ{i?$c3apPooZN&E zpBWdajAE41>b7nZgRLqAT*MYeBMjmW zW@@jx&=^t1diAE{J=i9kh#EQ9c8cUT5w)l@AVhLWYSY<;W7rX&1P zUJld3kAmi1J1uP^n$T%gG^+EcU}FIN&MpJqMlr@&dzRfh9RbpYQZNSO`!6sQY|RLj zR@tYZcsI|8qB4vF`Nj(kg*Iwnv-T{$Z#pv2a=l9~7yN z9<-3Mi9-ico!pnYOU4pKl1UsbQxhmjHYd5FAX8tNou<6&y*#(pd~|~TO_#WQP?tvQ zI^3n%Nw6Ui50Pk3@?5*Ne?n}5&nBkvn^ryNbx?*wsj!XG3qb3l%PdWI5~BJ+8E^Ci z7I_WZsV;eZvhgf`oQ#^JjuG)O1G4Bk2x{+nyQR9BRd$MUhowT-NQK7eFocRk{L-pl zujY5j=!IzmO)66SrKiJTQx~7uUDU}{X;8?m+IZ?3RYe?{(Z-h$3bp$4h@j%6!{Gmz zcm5;gkichHj%eNin@d!Vo_wLOlD#TAWJj@k_>f_{t%sB)P9le#$>tsn#Al3xY*uYX z4mnET^P?S@9R&0KA6l!J<5j6fk;9Bq`25OuS#AuBv_l2bb{^N5zm7DZ99lF4pf|m{ zbwF(b?cPW-w^C7EHOK(;k2e|cn1tcGS!=&IUperl0hK>QMdRlyyX7KyypQT43S#P+ z(*(*mKS`H8?Uv!&!HR+_(gAS#y~{miLnxE3Lce%zs1S(5x{w99$$c2XL$-Sx@3!LK zZ$r_xe3jNcMCRdY@`4|cpK6!)ZmKHp)2>X9poEnG_x84`a_M=Js>??48Y^KL9ZD&4 zhYc|2Eho!0hVEV4MN0X_qSbEo;JgnmkCrH;{2Zlf3f|GGLn9ku5*?aSnr2;CMO% zsTx|~3@qX&e=0ax7#;JM3x>ep317C1x*LBTa%FPA^0?ldrhr;E-08wf2*LIXTmM_o{$A+5bDW~-UX ztV9WQ9Hf;frO$_yB*)Rfn_4WFx6*f9Re)A9H@~i^#tPp=(xj3B~4B2+az)LTt8|y{kfBJTk=KG&$^1N zUD5UJvePySI`dO zVo(N9`_HEjmi?WJb882JVW4dM^$ehq<^XfZ z!_$TnuQ5mfX#TVSY5Cc>jCBN8Tj%wX8Q=3C4hY z(4&?@7tOigK}!5UAKDo9ART50iru9k0fe79NIYMa-jwB9MiFIp%4d7$OX85O&k@i# z09O8&Wyt`w+%31yU!j+e)jxtX@c#2LgNytYjyGTd(hZ~6PhAo@(vpa3GhUHKOj;tT zPyH#)6R_#bO;fG6-O(^h2R>nLH~~K2|38M`HV53!=Wtx5ozJNmYIH{GXoQH6yQf3y z!yxb(KcSM$P1cThpf+wsU#%N(iHnu~8mQ*WA!e>rj$Y z$ONKB#qp#jD&=F*f&_rq)FV*7{no{5_>&M7(L>)N22IT#X)XQ`W<=>sl8qxsgWQgK zWR0f6F(H2-EM$C|Ml~1&_}A+Z>CP4M*pDS-B-$$7sEXFA(<54zj1RF4MnUYcdPFNq zn^*oTMTZe?lye)n2PNA6aHB_$>jx+_JOL^%|5F|N05#sy)23ImRcKA`W2iT@*C-V+ zoD@jq>XEFkRT)JmCucQBd#XX{k~$Qd*g5zf!q>OdL7@)0q1zbJ$Hoc`mK5gH((2|f4B@F}mo_ZwQHYE~Gp+N~bSmqcA{iPm3H>U($hVFe^ z?lOen#!?XcMVZtw_{-5FeUOuk%DC}Cj@SpW7WyYQ7kyqwyEGOPwO37N-myJ>K?-C) z<&e*&$UhR=S+qdOZOSfG!uj&aYciheQyc-MqyB2!(v&E=slD~dr9kG!>5{9451Zb=Bu~MfPdWk;hX?2Btx9qr-Dy0#YvmM3!c`|1H>Q&S{zE=G z=PRE?Xkyt@&r2MM!i^eL7mNe&$Fsr$NGPEd0qVd4?!0GuV8O4DXq8{PNlao?W#B#- z!I!}EJ`U7tVqxwD9o%ErtMqbO+hJX_&sT>}%+rUI4Fm3J2Ud69Z()NmE3^J3 zUJa+uD&rX`|92(+x`RO&&pod!US~a8qtniKIXB8ZPj9N=H}5rHh&njVrR+N6-a zsqW4k1z7yKmUC^S9|<)m|BT&$Np`75x&FX9Xp*&qsk&sCD$lWY0%LF`$#evGEBHsZv z&>6IGaP?M)I~M)HNe}s9I#Xn42y7f1x5_f?peBU1$Vj_|Qv3&Kk7lXwxN5#KK)2r( zk1Le6R0gUYG&|NeI;DX60SBG#QQ&K{N#q|M#VLy|AyGIT5QiOP7;X6NiX9ZaOyK3L z{iuyYl|)=M=?26({MnHT%J?+?g4XEriba2g?j0eIjE{ZO-~HBpPb(ty2Jx`qXVFnx z$02lFrU8G35bw57UGW5HY(3cU8m5Kt%WN6LEiLAwp)y0XR9bHtG~RSb9a^+sQ8|_p z_!0Bu=jb6NSs&Ax(a($&lzd@YOX>zztN79Zk>!gf!t%~7i1-y zJ<|3YB%JF5*QlP=<~-5{?UWX|+_E93Ov_8>3z+wG867boWpkAh2#q#9iq&eZJisPg z$Zg9NSo3t&WXDe^wAojc^A0I_QMsb6nDO%5<^f6!f=*T)VRRF&fox?9A|mP#saBxr z`fN&rO#||iGYP%A*hAMB0tfo zUYYIZqqhM$Cpm-A>1;9I6(j(8^2=rrTI{+fNCWeXm)F7WDOLKik^!u*a)hPNNw#k3 zY>qua1~j%DwKr)=tLh2LAo7d7N{m|rB_@N$BXjqrU`&hJM^7*TGH-gt-Xte2hAIt2 zwzTg}V$z1F(m>?0d3%$Xw5pz92t?jHe{T|#c2+0`!=Uocqw7$c$_T>kim-=(dGRqb zh%N1izy|^Pz)XU(Efe-QFn@6D3^I;(LhxgNo!>Eo@X{^_JO$7rkDEboX$J(J0O;YV z83Y%*XK;W%Z@~8>K)dFf3Zj*|wgxE>-R2PQ z<30OpA8INyDwpZ4bur)p1L#Ue!sHub>)h zX#4H+*Oazw;Twu+BcDwDf)r44uQF)*&X|mvRMF&+J|WdHJXMOEH_$?hu*534LN3cE zUT}b+3_^EVf^A_E#ttS$#I);R49FjUwH3)=_WFdHxu}5Fui>T|jDU^&iLJ6TjrqJ) zx(&dTL3q(?T4jJ{<*Lzh%hNsdoaUXNrH=VUCrJLbWzy4|aA@_b8OH>ue&DsO3O+N` zF$Wn2+0NJfW67&oiKhD7eL!8!Q$Y9wum8u2kD1Fb$iAWTA4?v?cp7A%z4RYT9WIY{$ZUSY zUX@SU9I3MmG6$csSIL>E2FQGN?~QGTYmBO} zdZpqScGA^!;VRAB$OJqX0@|r*2X$M4CUUa&Y1Rm3?u~`?7FKvyS2yM=e3TO{dI0&V zHyR2tIvuAkU#jxD+ovy1KK@Huh~u->BzM=4R2Kp?n9$2I_kv&uz|UT92sG4c`+Ppb ze5I^e5F_(C)NUbs{Y{G^Jnf=T0G9D22+?%0v<6;L3dR6DaE@V73Jrl0Nf}UTE$!XL;#`=7M=gFEkg-J9?p6 z_{PF5EjEAjRdiAq^N1okT1pt$stZOU3)Hu%1?t#l-h@L&FuFS_rw*|Z_!O>Zm;PHv z8kk5;Wk>{aS*bvmPIU)^sEWI~ZIwv8NnT*a%++vO+xlWSyFfnz-EK2lx(y{p{83e4 z?MY6qnyq9uo*@EStXq|BaP>npukO$H(djzbzB0^+j8L5)G&vjRLy)R`PZO`6jzQip z=8W8yH@&ghpIkH^;e$LW3qY5WZAz)|p$+;j7&Kmm-H)kKt4miZBS*XyIdqId zwm(#YV5{PJE&g)CYd9WeLT;n84r(>Nr@+-fkk%9mRy*j5y&*nnCo2Afv0;I#v=->E zP-#YxEe(nvwv@wp6O$1w1g#_+2JXoDR6I{ zB@fD!tWyaRpmdHy5qg=mr)e$PR5|SQ%>d^30V6=ewyKiU^k!##bhZ6h{26uWR70Ga zE?#w%03HV5uPtyxH1P!{@bdSzwI)gp3(HHv7`}bjVwn9(GQ`OhK(mugGYL%so6P2T zFVX}cS8q4$waLz)rmIH=i>GP~l?KEorVhnZ6^0rC!~r{|%#}<+7%L8p{M4~zhQU~6 zVEp^kv1IzdSYyDLw{yxe%CwcSQowlo6tJXYGkKarKq&39Ts!&29^Q(hzI zAn5+oq0dRgyaL$LHl~)Sj063J7g{L|6{IQ)#Yn1hYtn?KGeH70UU5;FmUKF;WWYC& zC`>5@3Lo3;p#-UfYDB6^ZcA=Q`8diyr(+;H%Gv&|-Zgo?R)YT(i~#N6i!Cb8M@MLU zqa9{4{w;cl78%K*QXa>8I({*DMm<#J0tN}d-R8nB@ZlDaw=V>ZdGS+}$TB*SmG7S) z1?EL>F)YV=I_Ml{b})XuJIUYD5v}w;2lP`^&mqAn(QpXDK5y6vZDD&B zC>vp*wjR`_Jeay{Mk8CG(?fuL+jV<~#`yz$XzD1?e|JMOD#cQ9ONAzJm>Ri9^3Q3i zG@3xt9O6brW7)?IEo%lhTr7rCM~%}WUM>t&gEWYK!4lsaw8$%^<_H?cf654IX<^O! zHz!aJ!q>#hTsx7x?bp&4#a!C!=u_O2c^&d6=mhvPKW&L{qmKPXfRO*72HbEnmhbs= zE*;s61LCL%RKbB#li}KiAtypne^4H%_68{c+K$YPjlnOS0A-6yK{4n zj)kHlBZ4u29(9WWr%BU7?$s!>o^j}rNp#ACYz9_@6-(fqehxT{f6R#$}>+Dops4K|xG8hMWy+5H#aou(auSCSFiCt8fO42x_`@ zbt!Q@!SvPd8nNFZdlgu}s_5j~L3~{KqGeB2NmLv3ve?4)%Ic-ZjElzV6R70MIWmJm zfUo?zC8BDT41o^U=7tob;f4vM-5R0$qpXdny0RjM7=lW1Iz?X=7sYTCrfqYshwqCg za2%_h?cs?$J*%i#TOnKRU$0mthUjo@#Iaw=hKgMsH0YkdkK_7;>TvZaNmo}XY(%GT zry*$XH;ll}@GX@eJ;X>wuEU_#m}x&hx2H1jQr|SVXh6~0GVZ(2J}oYdTDeM*4|ma! z$9&5|QYG|u zsZhw$zPw-r-)*?Ze9!z))lt|+n-e`z$i{i1fQ|D+M-B3mwKW!-<(r)xWAj(0mq?;5 zEaacs<&*jh_Ru-}B|1tKY(4)G%N}jHG|gep1*$pZP05E*LfwNLdd9rNNum#R$nhqp z2rB_2x`;o@Bnu$Mvi$!vpRu~ z#GiZGeHgq@!O1U|}Q$i~h@{V)o3awR$-RI4XlN1-`mqHfg7!bPpgqTx(o2lgb zO514FE!#~Y_zl=$3B!5WZ><5T-c5C#mZU13tr(F`2i>D_YMI3rsjrs_SdaqMtN$lN zovq8ZAZiUY1G?);RB{8wc(HlXWv8u9w$5Wz@mdyhq&}%2*6v1;(VK zUzKF1Eavct?jDC$f<+YK;7ZQMZmxW)`$cRC`Y5=11E6?y7^6o}CEK56s>T{Ux@n;d zrvTSn!70FzT>Acrb~V_mWb`FCLA40G6-Qf2{zV4(YXhLKn`yPbbzh2Ds3LrhQp zF}OO$N~lt#HmiJ^IDMgyxOFd~qH2+Ms8jDBsHnTCq=7khK+mWOb8!Bdl@ zS_XJ^stQxyDx|H3UA=PR*$^mPc#x$;odzN+71c+>9hY9IB^gf7Rr>Q?*}_RQXC4Id zpBxHC7UP%sf;D})%9b3T`MivpS~Un>pjbTNP|K>i|3-!ubKOqkUc9 z2uD)Wa?E!E%>3>s!<3)$_TEws=11r z@4li5SI~#VNH~f~tfi9jB+Zlfo9*)hIUN)Hy(GTf8#FD zucVgQk+T_zyZim~I?J7k3DZ%!1LdF$j(&Ko;moojq-QJHw=kcHR1(G2Bwv4yfv**MuW3P zYSm7d=#_hO^s}l5uA?vXIjs!fGPi~%pneK~+hrJ6!dC#-Xf_&%wD| zx1urz^tZghP>IPhd#^GKnOr!LI+1T$)Kx_cf!@YbEM51aJB|vvx|DxoqNF<3Xb+<5 zN6CiD2KLL>%q$JM(uhJv=%rHtKlfBiL{*5oIa*y1*DF0s+f=36DBBw|AaTVyOKL|& zLgIAD5%pKpmSm-h3Rg+A1V3u~m!;686t6L8g4*Bh0#!Y#2%w-S>(ItsWqY&5WKl`NU*9gk3; zqt0<}c5d%;2Mv5NNCUO(MK?|!k56@&lw;}i=TCWI>M$7vlzS9U+qiN`5S*rD?K<7c zY$mp5lH>C{S>ZC_DC5&#pW%TJyNs)jOUBh!y7Se=YX7>jUJ052Zg!K!=i3j~kGq>{ zeV&(GR=BRrS9tLG`(*&EJktVEG!BasDnt|0ee6Q+ac3thzw~)B=}L*NLPxwR4Y;Gv zGO#L#mjHTIIxCMqSjtW*Tpzpb^A&D&YredeLNO@-4qIRuDg~)5nw>4JpKK7T6@UJ< z=tP*GBfmwfUK2^H%SAQzx#w8s#fUZ~8B1S&DgTzlWRFlax4`f^d?80McY0YLz!!DO zwF>EucB&uRU=IfV*D_*-HLb&69c(Z2I!-lH;NV;(%trj>#89>v(GI*<%z&XcU)yb; zAHhvia()JotKV$(rS^4W2yINq*SbS=#AMINchj}5X^=QMYe-os?2^xHWwB<-=fIE! z*PGlc(X<7F!qJ-zrKklPu}oF?EO_(wAO(z1S**6rqA}LI-(N4*A6KC40lt<0cCh3cT_6fa3JA6l~)oaKd^{yTm;28X>t(`ObfgdvaqnR$u=w9j8J5olUV=R1;vIKIE;e1oG}BPQ*9)4haA za4etv+jImzgO)s2MI;yo>Ps)O=;ZW~i$SS5+%{tBiNd_{q$U%Og`OzfE5C`R^|V4B z^qfK-^lSp_pNPTW2{9NvA;53ckC$#f+)}3ZAFT7SvC&V(2R3cn%?AsIDihl z!~&Y-LUkc9-2jEjA?{AHtgC)rx*1xX?UK&$KyU2M*8Hj29TbEN5+Hc5Ls+ghNyEuB z;XEUTzhluBMWAab>`)EHf%xG|tw=ndHDW2_k|;z~R=B7Ohp6g3BQEc6vFn!9I54vL zTDFyt6stHH1_xhyi{ZpU6Ix1xjqx_{-QxM4oxvz@&U&B0!*a&m7pdh86Q#cABDDf( z3cepLpe;tSWN+TMFIw;;6o`fE?ML#Uw;ss@E#XPPK^|xYPabwxjXHs}2qcWM-`&lxeFnH=%Ivm>=rps;)*pIh1b!+J9-=j+=C9R z&RIU<(OS{NthLWqvkg8Bn`SfP0J-sVmPZZtY6hz_S0Meuee{hXE|Fp|0_;O>sYAom zmA`+|49m8yxW@_!xNH1Pgp zam7;=EL6Vy8;T59enzSlTS6?1?ql zMoBW_!RVvLl?8+_CF!jUsPvaSkfEtVnVeec?>P5&KlMaw+(jx^kI*npKs><-?E_$3TDF@qGglvw9;= zKYX!L91o?;`A6`q(qJecFD_(-f1-3-c@TS%EE#Pu#)7oTaPUEzS|<5(FmA3W+O)pdr8v`PZ~EOqilX53roZzsek( z%>0;8#KTojmQKMdLy8xVTWLyY&BVR5W>HnAmV_WzsVSIGZD_plP~!#9=;;#46$Mf{ zd#sx>C1RD-7-~6PQlvwqkj8nz}`cTs{(KH?h$199fl6AqMS~`M*HXQ)u?%x}*SZOOO=MU(N zR6e4f(9f+%dLkM4*ZxY?IJY2=RO#}_eFuL_t^Yt;^o|{2)d&V$)!d+rU@M zk?UU!g1;#So{PU6{$xktz~7R&z$1@%crF0-lW}}`rVl}y06J;8_Xa}>j4#r0S!8kY zGeG>5IBY(z9-~A+a?bJ=Bx%K3zbWv|G{)?i+t(VpX=N>n1mgWd@k$6Kc#Xn2TG znj}U8^0B1qsp2IlrAsjEE`oQ z7ne{WyaJlpd#%T?dOjWILKjj4eDOhsh)tC?W>?4V>EgQ$1DmOOf=+zC&VljhicQEc zV0EQHRIoD*g!3CCxuH&~&wP>et=jUu4w+31;`)HzUCk-N}`-qv|BjP%Sc&4i}ft3Nqy*@0`DOK@oZQSS;8Ug2v-ITyM z4zTjU9&Lm`F&m2R4v5rTh4mh z0dej=JFPkeg-DfVK%>V;t6`M_&(>%e5Wn?7g_Lg^oUcZKt15H?Snq$KM-?H=NmQuT z1nP4b*k3x#(5S7?M!NUaCtp*~8_=bZjsp40IfjB%=y#`8p_)XbMu$M;y*^?MYg7Z; zDjf#K$9z~J^*5|i4Xo;P1Yloo3Ob28)g*Ky9R>KEJ|e)4_KT5vG=7HKQj30T41g03 zFlmBPf_Rc$Ryh>Xd5KHIZihed!5N-ao`O1AN#pMPXKO1K-<`xm<>7RSC@LJkL7*M* zA|EQIU9Jz-7&V9k=L23m1ZE|?04@{tA_}y@rI78)EiDwl>M$T*dAOI=3bI^;S=xds zhg%?p$jmqD4CIy;QaVAh6QoXh$zCL>XvslTY0x?Ch{@3V>Ho-NO#-Kutt8Y!8d24lN5hfp?|FH45iL7IUZO z`m=Q9lA`+Xv4(nVvzQQ7Vp^FL-9xIDxi;x%lXbw+!q$EHa<)5|0HLQk3_(Y+S><{n zC@8L{iZ~nAtw*0N6r|x$;3_yyfnBuFfYQ7#x6N%>x`FWcLl&f)hgd8UE;wF*W~7TF zQ%woBbSgDqDR7l~(jOSra6HbD%brxMfY z_e!VlsK%{Y<3Zf}q_@Lfv7<~E4hO?v`JvYu)*V3N#<9Tu9C>AY1caE3JBq0OxlL(< z8lznvSjt>OYEHm-Si{bYHOAq9Oq7G(@CG-jb!5?*NgRvlg_RKXgFgZkrd zFkDb2*bUoy2%Opv!}rWCNfJBoo+0FCi;~(*AQ2A{nN1IO*PK%H;_C;UDf$0NFPJV@%$g(X@Z93lfNkk zb>!bb`NVWc6NtRJ#}cFAfljG08)7LZR>n(R3>S%3ZKYU-GVAB-<#cx9Nn?X>`}M~> zo+=ZPZdHGbVrom5&pU{g9eIn3cB?w0Zd6l=L%nY(D?pz(4Qc;irEZ%`$pN$W@FHj1 zT&(Vsx@XHeXxm&_|EFiVQS-jIts(r|Cw%yf zeCAz=FQb&n4m~ZcRI=CrA$bHU8xT1JX4xzhd3IKjA@&G3`siCNXDXTHYHV>(PuJ?F z6xY?B&=ai;tArs=Y|#D{Wo?TsunS@eX@%G+)bl-G;b^E3wm@e0>a*Cv7EBb9(MjQ4 zvkpxr^XLDj&WIF3TjhBBig+-ylLOo0biS8dP17P=F4^MnPokUkov7?&X4x6<``HMXUv)n~{y?GsBW{M>t>t zel#Cz-fsAr8A`xU12?$B;FG*8)+V*cJh!TYOucFec_vj4CN%NqTxpn?86h1-#)195 zcgzS4_(2e07@!N@X~1K1?I_WkJm{YfqNX5+D$m-}*p-uE2e_TUs}9w{y^cMs)^L?+ z0eBFAe|}dT;4AxDW>^8cYzOaFsEgiH2YoVZ!yC~W0pxwxSm>(cAmP+7J%v<-x}VeI zp1g^6n^pmWP(9tr{zQxVbloIyHx91;{9eml2!Aqyhnx`*2;QfFKlOe~ASAvHm4w7M zI?*Epb<@g;2&G$|} zj|8gKlwyb7xz6s^3_jUrKQ-HYB(JfB9j=SGcdXf7QA?H+z=A;#dT%{~nC!Xv5-no$ zy2&tLzdR{;uKRi#Q>{4|1>k?y1IENuZ%cJH!>Bx^j`K>Jg9&_H++%7=Qq(SNbpwop zRR+cG)8Xx4S0En?g$gvKL#a4Pr_P60(*vB<7BaL2)0zKX#paN-}aJn9`^@8Ryk z$!3Gg=`P41>m@*M(`#erhIE;8IF}!VNx3kV>dd zQ7VqQCFY-v9f7vOZFP@;@=@1^WnD5OvNorm0^K`&^q~RaWl9>TMonFL!mJXl6sqqr z&_4f$unu<5fDT&YU=WnsZ}e~gEeJOeEjYKbtQpvq@5xn;qh$HME;_7ICc?*Uqi{>9 za-8#CPoY%p>OHPZ>BOal9klIbZMq{%PB&lOO(O}NbeyYHgA_Qr=i`R6n7L(A zPw(x$hqvJhJbUjU&EaK-%T@{7P}txu+=s{W@dP9dMJeu)TeO5Vx#Nr&K3ZILeJ$@oJ2Gy}ZR26fp1Wx3KFeH(Y1@pr;-)2{?b-;IOLq>GN<-l`l;D94hzr~FabX98nG2% zVr+V0Q%#{%U{z8_ICqaVWm_F^V zzR^X-RTqh`qcY7{hmq!+v-!Fm{)>7T1ot2Ox|KpUwNW*2zoidZm4D}Xz}=`jwpHo{ zr5hG1ofHAt-JSPWcfgclboud_sugJ{3xZ)Ve$Jha0DLpEblvAo%t)u9WZX#eFS`6B z*F^_oS6AfKd>$1a>aC*RU0nMk6V1 z*I@%`*FtV^H(*7iKT9_|&_N424j^qL5#aR?dmr&I(@ z7mVowX5xN4##}1O2>bifksXP6DKib=k*0C%O4K)M!;tm`FbO2Y$dUwETK|?H#C78#TjKDJB*S zqV_WP*;-UXr?fVuPQA>CL-y%Lr&)W#o#brYElQ(^>nDlI&6%m@=;5F3G0?o<@gpmP zXkXiou6g$FyGjG(=SzKJ^o^knIcA`~MjewmNFD3T*q_E_?E8lrwwEg1)nE*w-+aGS z0r&MJleT7gQEP-`kgDZ-T@a(!%g|heW=Q_Oyj8?2LwJ_7uxs(4aN)9csusc+C|RWz zsP-deiOq~aQAhvGDvTv@%tKpE$dvxSwi%prpMuOQe{N)N+qdZUAOWtH|8{@j zj;>LsyreYvIqbjp8@>vqY(GL}32^n_j~VV_-MOxOU$!8bd@72#kNe@1bN$_PIu2#p zgUiSN$8syHbSjU2AG5i-lFt?SKAB(w{2ei2`4q>Wrf8C&r-y8s>U8RvqZ*=R@?%G6 zdfc=>4A5^Vk%N$cIREs2R;;SZg(G+0xFZGa#cOY*nk#DuMSCRT$eRFZLHq3R;`syP z#mk&_-?}GjXuE0|?$tJC^tw0YBZp+h6!Pm5y#I zP>eVzgQc-Q7}n?z?Z|XgEmP`JZQUrvJk?mZcCV>{OXJ0Bp~>k!u9aokvbs1`OZ~P# zTItnfoO&B98|e*7SS~V?>ir@Rvy39OWMD(!|CGO2Im}sz2tMp%oiFFb&ouaZ)!!_i z{Two`%Mf%zfH5n`KIV&V zwWQRVN}xG<)8CDX_c3R@{In0hi>EyVCYL|QFuU)0qeUPrRi(k!E1&DK$Ez_|p2-gMmvGYu_5CVI zwT*HLi*mMr*_$ZK8Ttg4X)nX8>)^T*^7)c`&iYoBOn+8Kg(ZY_=;`oFR5vc zxVP#7v&8MhP^T0U!dt6gef0kgxbf-K0_}b2b!lB9l1a8w!K0p zX(hnY2a|@i82_+TA2TlY;LR0Kg>bb8Lo*?`+B!O;oa#t$h6`nNogG-+uoY(QM9S=U z+b_}w&dgPdrC=B;`@(#yI!Sm^Zinu(bXHOqdGV#bWxXZZlw8d+ze%<73j?0 zQ4sp&0z)t+v7B^r@vMUbK1{WTtYL z+UFC?oEe$x;}sOJ{N>{<>y-PiyV*`<3B6m{kSc6QmveMc<{(J^@*he%+trmTQ-y%&RVR4l-rgI^W;dt* zsGV)oo(CE=C|=eN6oVnK@xmod*_p|Dkb~BHf&{2mUu~$X9Nn~PMaCeSB>L+O38~~Y z&pdcW4Tfgs!63N%(Ne>uG1Zw=iu55oMIQ&D*POI>3DTWe{W-n|G3W%PBUc%Ue6(aw ze#h;%F4E(TUi`2>V9cP{<^N;vTj1las{DU-Ct4TO5pb>k)s3TK+I2(P0v260P+D4S z%g`6~fn=IYlA+1WFf&OXv?ch!`eK8EqIQ?42*;-(`|-aya_$`7q?3W7Z8%ejSair@3J!(MM7 z2sS9CsRW$G|`wD(cAU_M#<%u7GV|0 z&bYveiOY)@J(2)49p47RcM*BRw4iGtb^_WX(iS4S%)IKm;NamuQXaPHK-1V~LHpy% z)aOAG*q-iS)SD!{7{ds`4M7Jet&E{aSF}-)wQ^H9p74ucs3hC`(ja_I8~|hL*md$s zem$QTvw1h&2|WhFe|4eN3oY{&+H7szG#W|RC)pS{K`S7fve7^ZZ4Igeiz=HLWYhs} z49E+pcC8io%9|oMyOd{9AE%T-CDk#4uuE<78?T+4CP!5Ib_4*ASfFx7hHN@&R^Kw3 zU=j%4u{k0#?E0!NvZiz`W8|J41H5~;L}1RNp4|{k0o^CIMo>nDS?o&Of(Zcrn~Mx^tB=!z#b{A`guRXyO5|o}i(I}h=m4yhaqx^S_CFQK zG?NC=OPWiZ${~X;kQ|RA?H*jxxCww@Yz#F0-^AgFsz>9ntm19YL9k8f=!q{ix+=vH zY>!M%StcITiy9Nw?CtH^sbQCI3!U>Yu$e9WC%yLY( zX8O)9*(HoyBF)H(j-%Ne3P2gXLuk{^B{k7n8#|Z@b8b1cQKInZuemMLCovZ%11Ueq zvo^O0afE=BBfKY|RG3cgs_*a*j_M!q10{3i6S?z{lDIs}CD>P2ceBzrD9DuLq%_J+ zY}80eT-C_Oh=U?6&`8i}`ji=z$$O!myu}r26~1(cLAMX9-MnH+JNzZxbPpHVU#9qI z)j*abq#%vXEoGffW(AE-SH^hV6i~oqQa|1zqRlvv9$Th^5dgZb&jF_N3`usXZN!?5 z(LTbB`ema|)Px#B=q~pUHKvt9h;zCP9j&`h*q7d`6gg?YT1G4*bL)-eXrD;T8jOMA zH95<;RY5@>(Lid$X?Psc3V4ZXjp`Zb(rnD0H%92>e=0C7(}5t1+gHo>eLj95m+cAC zVB!y!8GXxR_E8krN*pio7YJ}rdthNR zK$dfSMOJ-);{bN?4xl2Py_0jCo}_8k;}THsFFbQ@mf@8 zo!AUiZZDEcLdPKHSpPQ5Ne&Z0_1M80naOZ41JzsP8L$5}z>)y;idtYY1pEW5)%hAw zT>$gXwV*`p{ex0^UISzt0RC7DL{!~B5a@Odk|3`XX9NB^rb^V?KN44;bv88(>ffzJ zA!^+8EMUBrYq*nuIY{Lk{GTHr5!=vf=LZgSzPv8w0tw8tvib0temLn?2rRC#962lT2bgI)s zvdR^S8Ck}Y!@*2)=7_gbM(BvrSm$Y#=3@%@PrYI`e8dd7M)MIf-ZT##z&>@A<$()y zI2xq7ObIZkKG~jGN9`0cN;@A~M~}J!2>GQo60{{G+E9Up3O1#4wyFMA+p(0ZE*)-2 zAUf$+!6UjpX6QFsWEl5aOjN;M>kJ9$9#r$qd719UURIYANlK7O6WNjLWm zmGbhj%J;BtCkm1$qD+sB@LuV*WhPaGvV(+f*V!W4I~C3h8K`IzUC&T1{l3~K6VwtjF@+9_22}Eqv-1OSUm}x5L1Us!aMA)J{q%z2CyD9r<7_mJ^ z`A0K?Y%A3>I<2}l568B0x{_`Ol5x4zXaprJomTw@N?Dp##zeVFnIoGnOc}GQOfDzT zqI=Q1tq4op<(4B-3&D>z4$#woE~1Tj~V5ReFxsW@4bdX=xEQP6ickm zGq1_i;`_XuG}^W#Wa|ls&Ml7s#!o+F;3&7qEFjR}iKcK#L1^$utI6R~8x0+4;}dix zm!hk_X!Jxrz`_CzBl&>mHhKX$b86UgB4z_+dbyE2In}6dL!~w{dwNxYzd{=RnV*tN zE>=+6J$cY-Eil7b|Ad8!4`?!w1qk{;iHqM&Gl8W0Ye&N8sc#xEEAy&|+2O}EKDM}L z3Z3-kf3}@f7?5)r3u?n1C!r~Je#2uZjn?EqDuf&I8w1dtAGUz)MnPtd)qGn@@Tyub z5jNH6m9V1CecwVoB8hido1szRtiLQup&w4?S9v?*R_wv@UgDL@w|v(zZ4FiT#lNru_AUTYZV+l<#x-Nv${#fNv&>@*p*ol6C~~> z*(27;1e+O^MOIcxO{w`F>h91-uu&*)oKGr$de92?%T^4&)M;g5kQX$S(rbkp0iD-d zdRomt^|(1PV}J>@7zM8He8Q>)Z8Ou1D18^C^Ur{t5ljO0@=qG{-g zLLG4@s9bBQwR8{Dg!HK-^`wcRJngFyGrE#dgf(gm)bG2)@SLDz1NT%~WkT?TOi#CA zgul|260opKcRzk^RFEM-0jI#mrJu9xFgg>mkl!K>zBFq0p8OVR6y{hyY_uqMDGbd& zO+7Oxg1tK}o4z!4)vgL{dM>jRtTR;woo`!u+U~49WllOBFwyOkz;*aPY_}KX(hyp{ zx4BMHYME};hq^{X*(Ehag@1+lS6w25^24ckY=Df*IyMlxcc?0r%z-&nz|Bq(Ng z9{OJ^g5aBqmreLf>v#UtoK6=l(8;W>9qa;~NEzXCx2|2cOpYh4s+eB7-kdx zktkH&irF%mEpRQLghIzqIqQz>Zu1_*iYy}@xcmZ|2}CgSPbrsn1X@VT?=`~mrImcB zv}?LLLE^|y45@?^va8B%ZIaeKJw6joUqEB zec*}|GmzjLSfotN`2D0AGNSA!daRLx@F(+dep|XU=!6*FV#VQ4LFl5Gd|$RFtS4ij zbkA>W2jGh=;m_gvpL}8GR`#uGQs4FicxF}jYdC39`+{MoPJ4uCjikJ(^_<-mOUrQ# zRXe_~T|=Id39I(`EF?H|eUQ`nh)d40X76>JSG#U`C%cM*{|( zf^jp2?%MHt+ilLcp@Ct?4UGlKz{wyY^_PcSucHo-9`oib#gj}(ax#qUT0Aw9_~z>f zS{4)`kUOnl{EeVhmknhG!sDk3I%hvc% zIW&lOKvTz(gMrDqWS5OumDo2K&QPN^qT0Mtqg_meW#w-!HQ%H`DL)tGBXzQxNNNO4 z%xbYR2pWbWt9dwqFAq8(xK~*L`qQorg-VQqjcQT}+h=hKmRvkX3Z`L0$CAML!-W>F zW0~ek$MS_rRLw+U^H9xB52hfym5(+u^rmKm#X>2v%#a3|6@O{S>FMs0C3B-yf)X0l z30MbDG4K+ZGOq*b9Fg`pc-fCk2zeK337j8dV~xQ~cd5W{Frftb5-LB$pRCQ(Dr>%5 z0t!;tmo6Y@f$EMRIDRWxMHUU8O=V1-Hj2Oo=L1%8KKh$y1Y;2C16H)&6fNI9Fw_%S zeh8kRy0G&pwks*1)BQNISLOOlMh;u$4xk;`zR|rV+sA!z{a%&p;}=2bV|&%ClT#pi zHY>%rWv@~UG$XDa-<#rVufwab^xi{wiAKY;CKN3_JbtpY`NKn&cGfD!Rt**_yTcBN z7VY^~#0Kq(=A)%#0kCQx1h}T!tP1FETJ2`fS6v4c4QB`{kWjBW%wjBzgS%HPw_FZrVX#7^Q-X3HD#UYxQGniZx&>eHeVeiv zyY(_#htgYJAbQOihPdumo~@f*;1z}0&5J2xz;@w_490{xSo``tYN|t;WDJk6Wry}e zY?;hGd$6X(4~O?C10$XcCbH@tNe~keOoK=EsA-VvL+Lk@c&pBX+`C8RL1@LIj8{zU zk-2ahS@M@zHIu17o=O9V0n<~PK=WV_Xugo{#t7+x>^{BT%24d{VK;?L{+~6;lyR~T z|v^7(2m4K90;X^U(!d5mX`B zXKXMM_Rx(oAT|_shOK%BXq)T?cJ3BxJUxWu~6_nPz#7eDf$}!0Mm2wQT5I`QVTc3e4 zSGZ|TexK9>{u;e3>;;=c!m)y`D=oTe()6NZl6;oFTX68o&biSsEjn#HAgk(29hvFx zuy~aT5w!DA&6Wll_%mK+81SZMo7RREtOGP!E;h6h2!!B;+_Ep^g4A8p9($xOJr_PxZ9dMvR7si0?H@!wKiHb~;sz(_p@1IebMKM_HI?hAqZ`tx7 z=u=E=!e5UCRTt%YD*YusyeQnqT_AP!rB;6Gnn{wCIx-+JnAyd`T%+QhZX6U#EviOY z>%@PpoD-d}oIxcf;v>=)%K{b3ELg2=xWt+<>d zFa>7fQ0$~1cB{%K3d^|ii5*Rj(kL2};!Y>wixi*MjOVVJBh9GvLnkJ{+;jI>CTTy~ zrpj)*^M-hM2!$2uP)Eg-VVmW}Um~uU6XjrsB2K;5AazxtPq5zL{6>eNl+wgXZZr)_ z`AzvmBI{%3H|5N^H7a_hE-;1;w+hTd1wSL`L^r&}c84DY$Ii=(N;#^bUED5zvEyS5 zwANg1RG_7@lPdQ%t|sl2Buez$IMx82QfZalyp2N{q=Bm%i*GyItc9tMeoGL^2D(-m zm>OT3FMRpzPCd;+avD)-ua#Vxj%i(R@V4I)9J9L*;3NapDoZ;AZaD*Q1h`-Xa2~kA zz)F-WC0bmP1uP{KMB+)=e&R1Qwf75|U9YzZOfmVZH%F z+3@T4t5r6WoE$^ZD{TBN_#BVp%H+Gd+^LqYLR&JFuz1C;rT$F^yb<2Z(6OR$)Krc3 zv-3TAquvz6a_dz_JTpgr`3~7E4J~dA@^glId$T16@dS`AK41{*dN_peSWyXw@HqDu zjZkWAm!U?Y!QIm@f&26lFh|mGDW0||iyEQB=p@x?K?fNAtz~?ApstcNysJW3x8#*b z=^)bJb*h{4_{%4k@o>Z8uG0^VW}%ki%%BK}8((iUYkH_g6I^rd&49bsOb^#CKpT3) zY$1w`M(FQtg61PWHe`3ME6}nLFM)5`U9MyY*A+57G@M3&aoHOU)7zTO&OkHfAGyJv4N2cux~@84qBbvl9-+UW@GAemblWTI?K zdDEoECThMOrA1%!32=~;O(&pbvH&s9&f`-duk#+ z!bGB@kSv%2oRj`x9>7{nSMsjRbobLCnt=1U8w{)j?Q75Evpu@cBZD7ZyiJv`MZX(z z#oYL!7d2JRh%%;)0~BqEz0GD3?O>L5SO;ETHD-8rks2L#=P`APRWm@c*n?3(d-jd7 z5a(K$8)>h8wq!KDQj$wsG}iaVVs;Y^99)qJTcnm(j33h&yATE|;!OhL_v4{bN}bTb zLNpcYK%uWUm;$PGH^&N+b{P(aE)bP5GB@wEg+8q~k&pa5xo<1KlILOAJ* z@Y!YA-4#?p^P{&|3FOE@`pSJ`DBxLg^3}tPcXoMGrZ=kyPk`VD-`51fZA*mc;&wV* zYNMKGdlZaukiYo-76zZu!W@$g!VMZHf7=WH2FBVl3}hF`j!#S8+vO6F!rJmV1v&~? z6Ak`pI^O*gUrnx6CD2qWO{Tt{pvjJ~t3dg67|RsF|!o zlm0!deC>Ttfch> zy7!RM5rFWVs)3TA<-Ec6-T{hhX+?voh~ITL?*Zcny(vY$!B>b<8?8v6N=||L6^CNf zMvJ$7RdSn*|4^v(tMvFn5h?i-@TYtaw3V5>>h}&X^mfabg=5?q-{jX)*v(^Y3{-y` zM_s%6d)LrfC@nWtb}QBU>a+aXJAk>M#JSYqE2@K^|2^B$!+flP>1o;vCOu8-+P1B}B+@pCp8 zf+|RVW7256h0th&q@?^}9!fj|P6ETv94zG>6kXl8mTUmzu}E~`mKKYvS)JzKl}?)k&Z~cH@E#kLhfZr-lBdEj zN~Dp2$x_Cml*?=%aE|R91)itg>)@hJypuZ->9mFF3^8|6d#FYF7|R*Fht>;LItE1W zA;Ut&QF{5c75F~r;^YO)x2&5Bpk+y;*1{YIychh$ij!9hzmT2_l)1dlRXLLE1hg+Y z5IJ8rb>Un*b=(+Uvn4j409{ey`N#~L^tfbl{Hjv1H!;e-cX4Vq4%*x;ZsBhWvZsOFek0n?y= zmxIG-On4GC0X&umWCrzk30X*+48SUYt-a5hQ=>)A1sKsV12GL~cR3J^W;GXLSnCYJ zDv+J^b1OunZOug()kNjr=^My90dTbg)Tm>kQudWI5KuCY}61&HUdOHaFFHMnK*w7c|c8urUQj3 zfZ6d&GfLII7S7!0&E^JVc-YQKgcFu&5wM3Xe8(GVxJ+vUuuZC9WCVCV{wpiiBHb!w z5}B0Fmc2--5vQ$EKHF*JL?3m+n$)|_qNVW|AJ5y8T`e0WwPqho0RLxBE|}vib5zMd zac57ioAZr-9G3K6A}6H=-0~1whB+;%v$-QXRW>)&cp$EE6pf`}^W*E$M8cx292A-x zF^=st64ReRmbc)O{LtXpTtq^^#?gcWVGe~KC-8{9kcRkS7bKFjhjt;s%PgX8BBt$d zOk34$)5+XjDmN_BLEB_Z+r2SuQ)sK06!6hq*lT9a%^TURT1ciqdtkTXfLcIrbhpA# z9A;TvzgukpWc}plvE8Y&H=GDvwBxS}hu_wiu+=PCn!+1i^bofr_nNHdXJ&#;2&(2T^+p{{(rnmCR+F@p$C5*2( z{goYO&UGKO<4_EPzV3te8On2S!BuD^KRQQ3j&G~*1&3@}aGILF zutSWE>{2xE<({BsoTbKF?PZ;Tny}U0-F>e%smxZq-m+owA$@qh7=?VdKGDcolJyeL zH+;H?M`)Cw3!nxU#ekcUs(O=UTJ8Z|+)l&2Y#f>kO6zC|szf`4i$M6rc7s%{+|p8& zD4;Bu(GrzBR7Cp@=yRgviFUBrQ=@3(nth;6YxaS*tl0ORV(O z{VC2SCNQH(+mZb#&V#Zs6XQmU&tly2@+qx8b8;`yD^FAVQ=COhY?r5_`%|2+!V^v6 zlD(?EowFJDG|MbZ*=f@)yboNddr(EkY+PDYy!>yZ3^jN^wZG7vtcmQ<+{j z*K8<@)1SKiK^m9MRD`fpND&~7WoH?wcvFNer2!Jun(P2w2cX9$$SmzNaHM8=7=kHJN8O%`GZi9f-y$>BKQ3Q_HIC%5~=0Of}a3ozXwSjU~X2lq! zM?v!6&NZT->nqsnGmgKytVOp9qExK@kwXW1;Y^<($RF5wh@eycKwoSn2`_CIO@6 zJR=z?j#zL|-L4isk3)`!Rei`O!}^k!oN*hc<4K^}>!53-u=q0fU&0?Y#}QiwftZ}wqB>S><@Pd`LMj#psCzXH zShvpsyn*a4J{GF2kD}k9?d^0q`f2Ni_T=cCl+%i|F}6Efs?cuW?j5HM)6UL9=``ni zw8T~J?mw+q$oCbNwbO+pbd(NHiY)O7u+nmomAHgV*ZsxGer%Lq;A?y6Zu?wsj%2~` zlYqVDPXxZ&q$SY10QtRtBGA<+73kxD{Og86=N%PvLet{*Ek$y@Xy3^;rJg(Sm+fhL zr9a10|1&sw<5VDvc`!+CehMBz8Tf2_dw-_f-|h^Ihc|%KF?AzA@`9Jxfy3S_r)XMm z{Krn-wSm3S$rL|nB-zV+;phbYbuW#QXPe30`!Nv!x9l3kcj-dff6ZY2l&|W zd}hFzFh&6Al%6oK0}GoapjcR~fO9ks7UU%m8z`?bU2Qoa_u^ru53))|x8tvNfbM#9 zvt(5RX#!9_+Z*mafdo0pzaw%w?y#Y4iQTfdSoX?Q0im_eLeW9ZvtLdUGR5kgBKDHx z2t%M9bDH+8^)MWBQ@^LR)v$PEciaRpZO<9`B+BO0Us}`WO~ob*6p7VAtHUlo0bsb! zIw%6(Jr<^T`LesKDN{)V&=i1FE;VwqfS}?6E~4T-10YJApFLD5WXn{iC|9=zBS7=5 z2&y+crdhV27SklKoUkJ-DZvCu$-f&bDO!11S11(M=4p+H4hG{GDG5YZN09O2QgdP? zwIUS7H3~cn2f`8)T#%UjyWtY!HIE<(7(a=?;bpmIib=ps0mRGmVc7^6$VUF%SlO)Y zHJ85!U4ZgG5lEkZb`#~}0tyOBHb22%?GXqd$VmR(Xc_6t=2g!D&8v&yo|B8+n_|Lw zp|LlFX%tv?UlxN2k`jE4m6W+sHy8nsrCm2{bCKo& zM?Q71g@WjpEj#mK6?O&_cu)I2^FG=oAysZt+QuthUu3z@WT-mt?ZErKZQm*cMhTZd=|G8JMzzxB8^j)Jt6m0hh%j{8Mwb1Fr9Snc+JEl)v_ z2V^StW8>=q(*QzSZ@3~csRxLv_Vf5vL)Q>pB(Jz! zL6=t6k+9PK{*oEGYYmwS{;aaItLXjzN@bH!)$hcqEbOePZ4ruv{e2b(NaEf ztG#UrkMFI#{Xp(#4aV@6rynqHOQ4F1?vi~Zl?(A9dHyd}gJC#xN{()i_F zkvE*$J0m@I-o{*2@s_jR7{()SGk8LJ?7RU?b>hbdr+rBcQ&u(vWDLK3(wo9SE|@u6 z=6%dqE8g?ExcAj(%)A4vjpFC`P5YVZ*K*`K!fWok-n=fsa%98Pnd0AB1|x4LV?|f(iGhN-k^_+R z_3qLex$;Z1rGkv0U7)I^?^M)Z@Q(&Xi~GU|lSA?&!(^=x({w*_<=kvh+3&Nqlqtm|=h&*{B$~DJ(|Qk+lRitmZCH zcI}Sv!ZAyWq9N^329 zl%=2pRByG^ZSR9uIh#yVujQ3{!&0xuE71!kKxEr{YFHH-Ghj7LEXpdsC6-loS4u$_ z=-y-L*D(9klgaqiXZD_%GJEFf!4$|GxUq&^p)vz@!{nmu@>^=z-6Fw4DHsLWC%o5? zui^F`XHf`TpWC~a(8ly*sxcD`T0!NIrIvsi3y~Qx8>SXzmfsT3tm@ne5MFgteRgkr z0`XIy-4A_hCYsFbQtzfg=Uz)sGc06gz;Kvelwp2LEyK$3V{M)S;rHEKpJ6#ey*|S- zgPZ>CsAHz!YmS4?%WpCCG{Zt>1`LPkDN~^h)e3R-Y8hV5cRykLg7S|of*Or}>|ahh ze)-npV{0^M22&t(_4{gA7CJLvIZQCx$NZLBmd`aY2#sQpe!}|=gc_a~Et+-|zmjIV zWAm(u2CblU$Wqk(EQDsjbeLk4X?{yB)2z}HAo;;@!)(Gi4}2Vf133c9@!=yNake72 ziRVLY6u8KF-ui@ZJ^&I;;`GroMJ!=A*G#7iQxCHLs|SrbQR>*@>!p(udxLQR|M9FiN|Obz8J5P$xM4G5z$wQ`rU zt}n>brK0%yj!&AOC1``>R`F^`WVh{A2Xcy}bmVsk_r|igbQ@h^EAgHBB0@R3iB|fg ztYbU6i&h%sm-rH0Nh@u=!=``fVp`p#yLSY4x9Yw;uuu9j!GhM`8O3+pw(Dcs#&F-O zQEJj7C3{YllDs7uldL0eIWIgYLSS#6FoHAk=JN=L2I-6{q?g(A)NgH_?yWt+7+&|G zxYveYqEq?Az4ne^9N$0bQw9#cK!=14X7W9JMDrGja9Z(|i)y~QA-fY^e$a&vi+7m! zC3;y#T`B9A;&?q0ccHX~XwZ@U5=|ykk9jwZCg|-V`9-Y`t|jDwe*cdw9VIa7;yqu8c@)n**-QcoAl%E6drJrVxe@gqzS43^|`MbaAF_tV726CWH}@o)IKLmVUPBd$OoravfoU`j+cfE16*wBx z_OLb@x^t?N*Vow6fd)17-59}511@9~V0#T@G zS;;&$%+6|TY-&dU>*+s;fd^~$uoAQWESUqB3xH@i z{^*Y^6LVZIR4p8%Ug#zFOU_(!xC>M32Os7Y26a3eiqALj0d0J_)oQ+xD)_My&51v; zBFej&amoftW_*XvA?i{nxs{M^S-kXDj|&p&C$54uP&uJ2>oD`PXF1>@k;v2~eGkqi)o~OQz1zPE}Z^ zX%7A@M)r;393^>0(0s&wF|_NcA&+mLYS@>RYEJQ9lK}GhUm8HFs86jQFlnop5rDlF zPCHZlhgqhZ@}XkVsHrXW^qrLGF!e;pcj~0e!@eiFj#XWsDeX8nOP2%im7YC872KTg zE5lV?E+qC^PiGBt$)9D$gkX(;x=AMn9n48!-S9v24>K9AAProrjv9OkWoOyI>bYqY zw`x0|U{0cYxz*AXuL_ZN(Y@T$YM0}JA$1Ck27I2p%<>*_bR#J|+kJTQS&;Gr^URUkSBcanVRwrRiO@>sL3VVf?ULCXo)O`yKIJ3KQL|I^r*COCmX16Qx}#Y<5VuWV((JbBJDRyomxk#(n%y>iL$lj< z0A)Ib0l5`?R7dAJAhp=FTZA7tWrt&`$#$6bKNfmd76_mHyAH_xomT!90i7bk-yt7p zVT$u*J{3R}L5_j!H&3+P&vkf_Y08x55tPU@HLD^>f96At>`B00^%w)+NYAIR$|`mX z(x7wuNrqmilo8de27}tTB>g8|w=rQ!WseG_Tp!Pm^o?kW(~GxCv0){X%a={$6HEa4 z*H1PaaNVP>lnGfOfHWz3-#)99v#z77O<4q!0Q9UU8(@iYae&GsBO4bv9M)~Rj8A>h zmgjMidqTb#PR-elL5-)xIK;m^E>aPL6!CVbf0N>K^gt7am;P|vB4K_Lm0k{HrFU2c z9pL@MRx1NB#^2bljIrpCW?mOHsz%FvIOS-1bQ+E+^(7eOD@aaL8$l`~c9KvE!Z^|> zVQ_fPVn~Ahy-zn{m~R~?q8S0cM=v%w6Q;tH0&U43n<7!V^d{Uh8K~Vtt7>8gd~2Gj zd`<%7%a$0hR;UE!Se4KIOt;|a3Az9z9|wpgcQx&Ku{lnKbP?1Z^*2TgszSP7W>~eC zpniq)QFfAH5Epr$lWDT2y?5DCxk&$`%t8_%pJu_@KBKKo_M0-rc#)N3qNLQj6|~

    L)RzWFW#N<%?1*Fb^|vFYhc`zHF+*|{l2SgjN!m;#btw1))|x7=)! zar>9qeGmRCz5tD5@hPBs%V{y_P>68T^!q#otBGs<$K@6+ErtW;i#uiq*Z3TcV{2UB zj#QWh6`Fgn5ggBw1zp^(bs-Jdk6dct>oNopa=i)_19edZYSc&Pw=@8FI!FTXmu87P zBzQL?&K=Pf;ijev!4o^ZdKaiU+N%mS&RJ$ULTvRJdzxXZ&G|Q~a10oF)VHrJrbF#uo&u`3 zoDqW#w)$c1VD{%pTeM`W0rSOY&JJ$KWYpG-h4(}^$X4?feZYR?a}9iLtIhW9IK6Oe zbr@>YR;%sX-epg=8i>C%OXMNJ*V^hZH#N4}3p+bYnIg}c;#LP$FtF=+whJmI6Nn|l zN@T$>QKr>9*(Xdh3>LMD!#v$=OC2Heo`@U`G)$Q$*|ZJki?-|fiV(oZMZ^@vPjslH zI<|2H>>ROdwJ-`sXIH(vIp;MfxN;h#*FE1z)NF5^$CY@!H}`Yi+|t9a}H?CaaYmli)$3N z8}K)T4L13CFLla_YHhM0ZLCcetP~&vIAD!29`G;tmPD)-s2AsjSbSg)A>1OA4rUt}B_%PgmaHY|NfmRTh)gAEGXyYM%J4aV-NCp%~7)mrB8d8Yms znl#pQFbBN2^oEOQuW)H3s1 zJX_{7PfrJ}!26w9;tmPD)-s2Asj>%ro{5W9?gXt9H(8ol zd(W~}J^t7K$HX6|jzoc4HF0oqt^nW2(N2F7h$V#GKN){u3mHOXQ8 z4Kc|pf-Yb_d8@&$EwYHWo;o-dIgB%Ek@+ni#;=>hSV0CEaPOWa?2yQ74RV;38iVYK z7cvK%26Ek5*C>OJLoc!2P_8MDq%u=o&w2|gCbNDE+(M@O3uh6=p|h2D(g*B z=*vGq%QiXxriCvcDeNb&och$-Tw3jswFG@%&v7pXM!1$KU;^xZ!?JDR__e{}nuo-$ zrh!S2UiWe<`G+BAN33aew~G<0Up}-LWj;v*^h2+(;H}!wi3*|v4m*19D>p%HXw$2F zOVq{`;+jfaQnZlXP=Plon&dZGUz&bsBux;~i$QRS;`tR_mUrHIp?70+shu?3q>rTT zj}#S0yiB9gkA$Adm(lWV6zhassYv^TICh+sT$lq>4l zP?_a4*tpfQBT>p#SI|V|*P_zQV2D%VY62A7`ivkgall}s?|;>_HdB$7@C z6F_@#aCWFe0ZJ;Ye)Z^&<_j!Y%-^#7R)?D#TE4 ztR;4ks9Y5w497w7YmH^c*V^>(>5L&50l~c$BZEZG9k-pq{=}=VP#Yb)@3>8N>c0lh zbVi8y8&}~u!)J!j_g{6xSm!x(~$!;ZaU)E_??az zIQalT{DnP6@H0Xl5`68HXltUGD&p;$yNuE-?>Rh zO0duc8b8`+xt}Y0O==QM0mr+puz2bXOVbgeG`zm7tcRz5aeP8i;8HLSP+uM~;1Z-A zj^-MuFx`{qOuO7Hz?JDH=oE!}&xxcJ^mI@K=HFg|A!qeBZCtyQqG>eYrF$@_l-cC&%Y5FspLHq!vn8wbX({cKwj zBCiXCK)B;IG1Bl0K#>;jlBMrbQEs7g$scH?)9?+ z9+G>lnHD8C%&Z7mX_|sqCLVgBEXt169kU(16RcePM$6K$BoM^!mZigC$sf@38nu)- ztXG)3>{96NS1Fgc;ilbXK;>?LeAsdzlZ_zqYhJZ|cQHVxM?n3;HyJrL3Wd{=%2x-; zA7AZ|obP+pbAd@@D|IFUJDiB zn;y}#b?puS2QV2n%zZq8sDuZG;w!wMkY5HbpSfanLX%*67UF zkX80;joOxk0Z;-+Q+;0?^+wMLMieqDj03`FpxiW&z)gjdS);I zApic47EryhXiW1nzh(<=8e^KduS&rLKxJ--0SDuJ!q=uvnG4hg8)pGaSpcAX(%9_K zhHOQxc@A^X81qbu&Wwzh28o#HNkI5b92Ea1 zdigRj(ZPF^*#8@Ud0Xh*nP}SAJ_R5@xzXxFz0qh)^hUauLKmbo#zf1J0l^eN{r!7m zz`;cSXz{ei8wk_}n`i+`IS-(G?oG2p8?qI(COXVPV@xzDLMKrF%A(hnPDET!DI60W zMjAEI{1)FPnol?gZdT&{cl>o0V5bEh5__$Q4l`3@qCIiLCfe@pCkr_NF3!5eDiI$8 zw(F`UBsL5Zv5=jBur&^fUkjQ2!DK4kr4>CroRi1!{v$w1A~*YM{)0AV!qapbgoI zS`!`SpfM(z6rl*z&-|c4uT8XwxSmotCOV8XYNGiqzD+bAbI?vT)HEpwQc8q4g3nZAL-_V)JPp?vq!U<&Z7|7yhVQ&{I^ zD;xAphJ4dEsA_8WSgLi4Ce4*af4txC9Lr1aTjXwEEeoLe6I{vzCqfOxA~R_IWT42v7OA;kl(qFytWkepSS^vubC?WQw1HM<__y z%e(_>1(0vY0lG{9!YTDq_mfPi8@~L>hK|nQtssQr)I6#mQY63$VG~=OFDDLQM&*e{}7%oRg zjucAIT9zGN)}Alq_hd_jAozsRl${e+WB6_bsjsHpkeNZ&Vz_k=_te8W80cEizDj>E z0@5%3jDe6C<~u3GX44EqN4vc1Zkl0=Jl)V4LL9a!=crRQgQ|b8asHiF|CYDVSYsBt zQm1~K-XTpmYN$We$Ht;r><;GgK^i>%)#v}0^P1Tew1USUed&KUucd5Xc2_V3E=yI* ztvV}9lu!I6bLhFdxo|0H1@-SA6NP(O)vQk)t0Rid*kRBT8Z#} z(Q1ZD2jE*N`#TH&?iiHUXG-P%%m4!k(xCh0Y3YAdrGw@4wYJ$_rCbM%@V`D&gdnN_ z@aeBxLC`^2B#J|v8H>1?$2$QE@v}>%%x+B{WH)>xO8yN8EO`~G9)C~Jg|_6{su?** zgXDSNvZR^a1qYwHJvp1Gy^f&UmKa*HO?We1&XWeMk2o|3*&s2=mI{4??3PM096z@q z02k#d{fuA&lsms|xK0oPBHN!55Ov^?CWsm?l5cqi*Ig*?4m6@uzGIQm{XHDHm)Qq7 zx<7SBcalP0ei*qT^+$SWv1pB^Hm3K`m$^co0R^o9Ir?1#*1-}@7xl7y7b(P^-MLUF z17tSPu!in2@WS5R)aA;%3%Ptp(MWoz&jlITtC9}+-duK|NBZFan&gzgQ9SfA%lb#x zqmk^0J-E_s!+C?Zpv`!U>}l?GTt@aHscph-L#pHOUhyNXYf0a$qK)z6Ye)8~v;WGt zk&V7JX`AFUKx(=dO@mBrYHx~7UqZ2j_Z-DHh$VHbAboLUU*udtYCC{7xxS5_Z`qd; zr{3zRjJ1WT)r=`WvwcVxda_wQ%Z!a(c4c8;AlqFbE6coxJh@m z{+4d2?n}M=yA(xOvC0rzm^zuljTY%S9&$*>N;K6Wz3SO;iGYJC$nxYVN2VN09Wx5D z_(@dC_KUiZ21{KPa$mJz{pt?vakmWv`w-gX zw|XS*PhEK(4J-LA+9vl)H`>i!G-B@EUpuO%&{pB`Ne7dzpcgrP?+z&=BS1Gg2|^|Lh@dMXh&54RRg{`RJebqJzygJq&3c<$9brkrvaK8D~bcH+g4 zTntCD69n$EgiOM;=k>x}hvnQG26Ch|f+{GV_n=|bAo$T+8-V~JjRueg;c5(kGvC%w z0B&fb$zS%zS~-MaxZ%yL3lg=~?amAisO%amTzf|_0=iE=;WBglsaZss+Ns7A9gHSt zy&T=C5?lItWLNn4K;(H8&+6oC8s61i%3O)-aAa3%V=uX=xk^@^CwHgTWRnjkmI!kd zw1SrtA7^;d3HI6L{A;B~8oZX_Ch_XMmP8Au`JeoD(j2cz+WHtqK>LiOVbfwjURLnH zR2@(5x)wz#TP_R?XSF~&0pbG@Fg;BWNCe6_AYA(Ruv`QRf&(fOiGu?GZD`UFz#VG=JWP5C~ac(v{&Mcq*7mK>8w+(^|h4J z^to~+TUt%4$|?)o1vS0!ETgV1oOylRm4r*7S*XzTvbyo$N~&mCq{PpyYD|${)5D6C zWQ%*U?;h^-x4fa&f?`3w95M~s#ThB9+dsr{;E0l5r1DVrk zVyn;+Ks#5Z>UUnf*1S8xiA+*tT5=V8U13j^^n6?D(kaS#aAy95@6$ghJ;Ke%B$27& zr$sVSyue#IkmbGb0Jije1JFS5LPkW~iMMyX*ibpHmk$o@YHwSzk*+q$mKL|K&s4hm z1O4vDt}`@*lRMd+D`nwDiD;?lihe-iOr~D+9*LWz2Nt1@YBzo6e>bwdtS0Y|x*{_Y7ohLh^8=U8gszXg^gkM#@E#1#^}dDh;r% zQKsSQ|AumjJa#J8dfH1*GO}5eV%d1?7Anu9TL2ZmU$lJNPT>hq;Rq)yRvbLpGY-*| zpb8K#NSjV*IvB3e?xx}*D&z_}fn!q~9`Q|-bhx@nFV7@X+sgH^%sULboMCG6h zSh5$!$jB_gOupMUhK;=3Up%i=7%B!u(EjGM7!LoVR}9;Sasxe-BP|D$AiHW~j0hyv zyfD?hR}Lyc%)(C|yM$ITmBOZh;Paadk_1VpBBN$oipPmnVADCChtC=@LO~T6zOlt( z!SY60kkm(3%uqd&Ol308Vb!>0QR-LwM37>C+vGhS1*xFRdfp^p|KOtIg^#tqyIw-3 z6aI9oci`DfPnJ}13TSV5iA7yk0g9O%{Y2!9kW|#uKe$4<5{v=Ss+Y|GS)~|z+ni@b z6*qt)5njGc1J*Atw(y{>lrRsC8!Rk+;JxAqU_|?dmaX&`Xmxc8aBjH7!m8V!gZNS7 zdo;}hbPSkQWoCe_IX%j_(xq%~ZdZ^7s$XxPH|Q=L%9e83au9SYNdMe318B_}q?@|? zvx5X~9H1`godLKqe$;r4J4es9GFrO;F4=EEhUOMK%VD%$O%8~4iM))~GT%Tz22_LC zWx)t}i5w7ysi5q*XDTAOa;Q|w<|}Hx9|6gG8&A5MqQAV1`za7xaj6l$&a7?%ntw>N?D~>ZHmbjGGU4k^I zuer>i;Oh~FvL=B{k*n%x-SZT?q5<7ZrD4*|mBPyYZ1)c8Ymr^0AP#_XfX=^%LZD=mZBe2)tFC=&l3a`xn{YX)rs zzEs|*8!7p&xTe9fQRmSq32z!V=x^#uoniXs2K`N)hA(Ay>hI|!JbB}0wNxkJ-NZbl z;)O`AXP4=eG2O<=1f7c~w)j!!;h7`!P}QW;89W+~>`VRPCQ3;toM@cfr;^;1iRE|Q zyD#;b@6vt(hK+CNT)oqzGxfp=zD8Mku?B8Z{Q%m86MS!Uzg%b=sz{+Mz5JGIzjR84 zlJwH1*Nt!4ulD2V=W+Gi!j2GUr6<4SHs#HWm_9Cy88S`lB1A`JtuuUOBmI_V^b~ zUGE~K&XP%5+)f^rniZ;G=j(5=Y!#O>;7{(Ck;bV~y(mnrx_im&$UxOr^f0=e{Fu^i z_GI)2)cwLY8Kr)=owPvOMQJA82kLbD$rK*?$$q#$KZ{c{(u$+ z4ODzdJ4hBPJ|L$=Ru&~C-kD;BOBmSv9a6hB>MI5gnsMPdFVJxQEt*&7Um~Y2Z&~Cg zF+w>?v8$8lyzy&oCo)3m10vm}1S(Acj6FeSRR#XmtV{6YM-J8?wC&WmKJ`|EPi&`3 zI5d9=VsSg=;H8u{L{qi7`D9RZSu;t(OgMS8IT=_pYOBb@7%a2DZjNH|6< zI7xfl!LAVnFE<3OAo#L(#0(X7;?&&d2BE&YgvN$I=>mjZaZrp57>Pd_WO{m(+aI6mkCfJeMH21vNGO@6?OaYR3{ z6+&Mn0inl%B7Mc_@Hyx!2VqbIruW|zBc{fs?N#1AtkUCv@Ygq6C@iMe+@i&#me18d zWEF1>l@_$g*z;#U)?;m;6?l5zXK*FN)6{PGpxMo&-N8W<R1c8`lM$p!dM7hHgT2h7PQeLy!nnw~;NA(Aflk6b9>5yG@;_e7k;~ z32Y^D=6F|9jAW|QDwuY|MpgZ7B~W+VapbMb0A{^??-)TP$w%CU;NO&N_8zh_GMo#3 zD-3WsU+{~e9|7*q{=3C5^5;aI#qV~>yue>9WvL`ttyfin{k0!6Jj_5l+(jMV+F=Wp zMuF)GACJM-@Pehq?U53)R={}C?FNq2yi!khN%fi)oG~mu3(5qLimp^WSto$p_Q@JR zYXne&mLI74OzEP^Yv}}mLFlF2Op0MA0ON%d295{E&~cn~I;s-{CM+SdVeug|eJ_-{ zPwTigs3tZPC~AZnS?8yWC=9|2->)5vCLs*@{TiW0_VpNq?`<~1kbkBTP6FA`9knw2 z-7FFEUc=LR^TX{_f_UcXnP3F({J!&U9uW%;cKs7qUz+dJZKy+o^ozyq8?%&i52o;g zzqr$a;zfYV>iujJ|2#radM8O^fT;L95mVrgGgqK%nBD}Fo__Yzs(BTKX}72cf6 zGiY=kkKt}pZcjEC!HZuXN5G)uH^!noXQ0r%LtZqB7rf))y@+HMjNzxR_;jtHc^6O& ztIW6qOl(pYe*Q80nulqV1~U1+(~6}+rLcXdSN(%Z_0JjVrA>#6+t1B*7kYR`$07W*X7e^99+)%+7OmS18gS1)>N4BSvPK0WuS63`qSy zjV3h)#BO0k9G6cylM%t&74m%wZtw*K^Go>4YXxSwqVQPq^#FGqy9|#tT+2Ih#j~lZ zCNrE3s(`b!YNVJbsC}e}64?^z$Wcd=(uQS!9ZgD`S?H7n`GPh_Qq-|9_2X|+xw<)m zL?(@$xsohav`R?YvOPoloyl0WrG7L_W^5>5%66;mnbg>kTCj^6QPi>G;cs@HiGYGm zNaTV4G?HnVJwqs$@~&!I@`JQ|PUqzX!B-W&zsFxzELQgg2SwM5+gYBAQuhyv=$0wz z9>-E;oZ=fa>$9akI$sM=zWg;KI*MUrHLgD;^HZ|{+Bwuf4XQx*`EOX1v>jNbd`V_& zRAPghwBLhVht|?kz;fi7ZaS=oBH+#2ml`iNsm;H_f&ec zqfZry!JY_8QSr@e9dhMM`Y01ME$Jt-ZfA?9C&rE4m;QFF=^@Za}< zm=ML_*Cg%y%Vfq@N$SLgFymDuZ8+UV&fgO;*?AN6Z!8qqi6cANU<5&xE41;d_)k z6Kr4&-z3$MZ=#jIEBd3qssq|JDngt`qoYz9>aHLF4<4=5<@CR_YI7Mg(mzjO(~fVx zb1vuv;9DPKfjb&Y-7OU(+=Lvct`}5F9LkbH%|lsI{EE8SyvX#iIQt?d)w_w>ylR5_ zpXG@3(@eUb0t)^`1Cz>}L{MgtY(6W2mgWScxcIR~n)A+q17wvr>HyHU&wIeZ7$ELB z*~pgcls;mTjA7K;>Wxy4?&>{KN_R(Mvi@WNMNi$VKN&%3lc|nIgiLkDL~2uKw&-a) z=a@*+e$jO}{G9I(={nM{Zgh@u|R#$h@ko z>MA~vTOUL{g3jtZ#dKOrmL^rsx!Ps=Y~T z_eJC~l>}fxI|&TWaj@(nxyT|m*5X;`8nU#mq@tIwI{@LCPn<)s7%%|wJO_-Ci`kLa z49QU5wG$wgFPdw~Fc^S1-vQHf$(Tj_G*H~;plSM8GH51%;^ZgUj+!IcP*1f2#Z?ZP zIg$;b83l?TIB1$Kn~l1VVG1bz?*G`HGP04?+i1C!=M_b^!3IqyP+aYx*{&Cp&3>u| zTboTz;lwC_eCH`K;t@X>*Nz)-4G@nDXc9o$pK1ZsZqfHFAzUF5bbx64UmN1;s?lw- zuudn8^BOAoG+nZU+Codx3l3uKU)H0Ox^%BGl>l}T)F1}ZFF)NP=GEayT14DH711Q* zV?;z<;w9QrnI^BXXY*Lftpff>o?+OSCt(ajbeC@@fbhVx<_A(XFKQ8B6o|gyAY)6% z)dgnRd!csCMM0AiW_Wb@1dS`MD!`m@sufqWLD^BmovE_$N#MEv*%sGKLjA_q3pfg= zpayLU;&&F$52(_|3fd$fm6lj&^?FxgjD{+l!ZZRb$-kK^OksT+g2DmL)N?GXd8cr| zsxkgYyTO`}aP{2O#;;H<`ds1`?E}s#@MTUjIAtn}vv`eHKY%I%%tLbqDy)B`eq6uN zp+xlkrAAb$OFQRNMNioF5$q|z{nGOJ2V2`gf>{N;?WY@mg-< zsa!h<&QK!y`I$ykiCucRO6Tl%&C69gM?1mH6qvYsg=NN^&!(ACXm{XoNSDW0AcRn`jqI8eXs zoCta>?KaoLj)+-R`APXT;QiloElhLdAXaJTfw8lIgH;OX+4##fto3BsB&DsXAHXFDuic);$un5jxv+hroL-Dnpy0B4jvTVKKsLARih;)6n6?G>7 z{b0_3#p$_9K}-QtU)l&QA)67klDn04^Tl#2=tV&8zR-nErbLy=CZxP^n<~_s%z^*Yr_F@-%9l6iz;Q)q`VC3nq za2bm2jCna8XjD@Ms{`n7>~guN(=GF5I4J1jfIOCQp~rT>{22`jx`zC;tP8!4)aUhJ zQ2exlkEOjXKe1ggFUNx8VRnLr8~QCPWfR_Nk12GK4tqeZa(hB=BOs|UOODVhCsVeDGQ;#)Y46eITCkft9-{s1{4Cp!SGTwjI30%+IZ}HLA zC^OaRi@l@`NicJ-7w_t#3%F9Zo*X3P3p@c*8{NZo`-60ikQ_KdS8jz*7?D(bbI;?D zbPcoH0XAQ2*{$0J%}E05jew&-^p@Ayju__McY4PO$x&^|%M5fEin~oa-Cm~JO$%RL zb~lON?MJ%5jI*xX7Wy?^Vy3@qeowcUsW&>C|Hkx|K5o<9Y&ZYOJF&xVTz?fn@$EzQ z+maY1J)!-HV#Lkf7TThyHV$eMRs6`+t|N41{8JupSpiwP!ANiH6Eq-88+Afk`-m*f zK0=mWs`nkz9Hf7&Nz)W0KQyaFYgEKF=Nn_3ts1FOhh@TFH~1%22A%-N2oT_ zLj52uc^aJl)6FM=;~0qM2>z;9UwoZEuyZL&}^={ zI;++wLnV$}9a0S%5~iO>{<`nnW|F@& zhd1<+aJ9Vo%NSZDVJ%Q@oxuiMI?K1XnGe)ja8S;xgEeAzCYd_<+vJl&OSq*?wa|Br zy$GZa_)EI!uxj#H#2QIr$z&c(LXaQ6))A<#TOoTQ8eX9@wb(qO8h~tyQhY5hlC8Kh z`g;%~>9;h8&Iuz851kW6Jy3H_7|B2E8qsLeKCrP`s8zRCiw_g)g9*s+U#~N=Y@wwTj$T5LP^{dH#69)cB^n)2UGP?mZid1$GGCP1`f=HB*r*+l zdcPqr_%ZfMKNnY}0eQze4RosVBc&i^5=|UfUzW>ENtxt%MsBtZlZl$roHhS)65X7r zcS9sKw^CHzfNjvLc2%u`R$}4~NiWja`{91+MswgJxkF;e#p2QDGvTkqu2BA}#X)=P-CQk3ftf z6MCi|VNF&tqGy^KTRuOV|_RWqw81)zSDLL#i9*7QT zc4^On;ui5TRQ)IYhJqGxFj!V{q$WixN_hN63R8HQG?B%ar=}6ejGDBx4xmX(Yiz%g zmN>TL9!qS>*9LJEOM?xPYQR3XkeoUopM~$Ya+*doB#E$SND^VukTjHo;87Yf^)8h0 z?on&_=1((fliVV*$Y;R_0z;dybFL4eu z3tK;ISs_n#C~GvHMy7VIsTKY*Sw-zzQ)9%nww=lX)KnV zRv8hRSLsAQK5@6eGX{2cM#N_J_y0)Ru-Wj!SXittVRp2`o2D@pZ6j$T4;cULA zP&&=|-mwnP#p&+Exj_oB@#Ur^grOxsb_X2!H0TXJmyj+ytY;u2__tERG`2!UUGj}<&c#CP1bTuZ;Y zS4p2o95F!$hrjxfl!e8YFmD~$r$pegI~vn=eM}pzB-ErcZi#6dk7+v;(>9^nT6!y_ z`jT!EpPTeNDKkKenmHGxc;;-$XUh~*uE#NDG8p7`3*v+ax%W#3$j5mxud}S9o94P8 z^c`0C)c*?(KJMSdCGB7Ui+sCb8o;KV?6!mQ-9IwjZxP56qoUt(DPvI=N_d=hG?sNF z{$LUqUU~1#vFIrIxNftJ3*Ot7KqY8CT-@GECM6gJu1kJm@eOi!ee^0aukmLnTz6 zP|0*~6J{22K~+;FXYx$&HwURnPp$Ac`G;&5X~ZBIbt-*Jay$JpOSc?LZ5k>Dz4?fIJee6o_vskVzNF z*U6TGBB*@cQX`jg!9iIGF-Pw3TBS!2G+|o^m#k$Vy_s&h;{+gHGG!HkbMj2S#l2+6 zBqTY8^axD+k@mG^il%9hbOFX?4jjIC2iFuqGd!EHux!@T#5e--zj0s~sYv8aSv9^J zg`;^I=t*@E6I|$4S;F!tqqZe<#S`IL++G~21i}5PtB(9C+-0|XlKcjA8QUw$DJyLJ z;1vz@+2lhPi$607Jil~smCgE&8P-ifLk`6hV01lT#bn`#XjGC*c{ggSs`e-rNq(Zi zLK7cM!~5WDV0r~crVx4U#qHFyyrwh`Fi-ofksX~N&cPQcyW09|PZaML2VP#?-AKdAdif1qV+JM zYgTSy87UFZIe>ve--f~_t`A&AYj7iAao~}L)t1UqLZI$|lboKiLk-gox=EFg&_#FW zX1jwTaCAJ!;7JUVJ+x~XhY_BsR-Kx!qP4QzEP5QVP5N83Dj;EDWtsUFWy7OQln>WU z`iGPek2Z~{PP7^dtBvcf#GWroJ!!||gBHFDl`_?=Xsqh$x+{u4m>D*Xh|{q*@3C6&yqEDTZJkfcPZA~EHx z7CMBZRFSl)eE{wQC5Pk_;f#JwhKG5eDr9;flOsz6@<7H$9^}0+``X&5`t^OvVl+c4 zQm!)v2|V`&Rube?nTQm@CO7GbG`{vh*3#qvOK}$AyGpjPRaIIwD*LrD+n1w!TS@ZS zo#5m3FEsqHJDrvM`+|d#0v*Z^m9stE!d|&J+A0Ij>qcl=l;Q-pM>QmGn^u72?ru6^ zT>io>8U@s3r-i(eEcSEmAkW+J0b0aQLhcO0Y`}@=H82AWY~LyaFpS0A|u{CY9wrShoM^On#O`FcD^a>HAN7l&hq6D`^GA3>l z&RQ^X7CpfEy&`9omuzX2(#EI*uTTXekny>zjjUS?NR&(!_~bk@m3zGIYT`77*N0F`Poe?_ik-s6Dik)!oJwL+yC&&HRa@4t`94xxl|QLoWye<; zYp}?fiB5U9u%c6RjCU{zMLPEtMxiW}@Ok15L~?e1caR2xCuI#1+T0V-jd&uFYL_2tQNuV6+128a@jmV zKCn+6DQZA!7Zek9qnsd78o;Eab}#~L59~4+t>E0-R{%)ezCu!5uEKrKQly0c@@102 zkql|DTcJ7uf4QcGmk@9KbOTp>Ll`J8ngsEe#DS=@=&RMt`$DS&PGv&@>ZVzM^X=4_ zGR1N*4j8wO7lsu$9M|bq2MOHy6E}_+LJKT zDtQiS!q>)vyazR_ib0Vg$saOHrq6;2bk#3k zX}Zi>0FLIB@s#jVt=caN)%1BU`3T1kVzAaKPkjmyZ+n%2nvjS_W!MdDj|x6WS@ZtP zz-Ch0U;<==*IDvZPiCerUAM|BH>BUR3jV==q#CoGJB`Zd>Qrjd_8#lv{2rd~XrfvJ z1*R5OK5;-qgSYSGhi&Su7Ah~R&9?V0 zLynfEgvejZ=zd35+p(pjKlPoP71rpzAfDF)Rw@CwuwJja?tc8G2_?~VShjkUb_QI6 zeX8xfL;3EdLGT6z@Im}#fTSCG{~2y45k2Wr!GRR$_DhXF^=}7hg6BCo443y&m1S*Q zBYvYooWWn7qZ@)l^2kL{IqO<820f1Uwk5J|wb(4LcY@4ymRw6aZ6jkR%iF@Zq?)m*@^Vpi0nJn#Do9HZ zns7yxa5O?%WVF+ibfPlLK*Pyi9~Rc8&yc^}RAD)wiU9NbI8cz40F21W+W>4^V!duv zxe>fw$tR7!Z1c2P_z=sA4WJA~PV9O$P+=$(o@fk*>tShr<%Ww{0pur)c(E!dlXhefb5pp5PU*t19jBW|CCd-Od4A}0m z7-s}Y&q2C4s1ep{P?e%n-LXuMQ-JvLe=y>d=`q87+Efb`0oDaTPyWXkV6b8WGGfIV zAv3!S60`!&brDz+Ry0*!4yZAJIp>D3tOOKfCI61ds;|)AwnRCnt(Ui!cjvp?H(s=U zh~E7CR&TSxU@Hyamw9`go#-xJ;_an8pR1~c)_r8}s4^f(LzWpwrrHEg(BL3b`)BD< z>b_EF4@+;Oh_48-UHND6*$s^G8xv#1N0n2f5Zp)V2$1HA|Hs~&$H#e9cjJ#_DV{7& z}(DRLAGqird}qNow$TxjYcDB;?c}_7R%0t@&d)sma0HsT$&b9 zp!EwasI&!_CZMvKrJz6omqIJbQj@YMVR=J=@cW+SF3-$J-ewejpU;~=B0uMO=HBl; z_uO;OJ@?#mSBc5=p*LOh|D+K~!RcIRr8Mr!P{>^{scd|F7Iyx>;XDfim4DO9wl;7Ik3=a7sHq39X8OCj_?K(iYD_`X9N(3 zh$rQzb5(bog{yo{kXzz?$#g89LUfay2FfX>?|InhaKUED3XwHPAiVDJ3O@)POaEV z!i-k7^zD@$;F$20i`m?%>1@-!g5!OYR$)aI!rzub`L*-vAq%#0m4->J^@?|d89}u> zM$|`LSu7!Wh$@mR9irOHgRR<1M5k7Fm#da_RhSX=k%&7=@k}w5w(6l*F?_8I%jQM( z5D8bi%EYu*d+T3>WrC`&w@f%NA))9}C~F<0+6#rN8&Y8&f|yo0;;LrB2y>&}f??%! zRAC%>7U1-hhOy~>(9B{J3gL>s49m&x^Xnm|wsMuysMh*GmD=kqr4~y_NJkaP!wymH zh16CJiRg(B=h8{mWx<$M`uDDK7E|gB$BuXZ>lyBOM14eb6OIpM2lMe^BNL+v;=5&F{^g>2 z$b?tDO2v%UyXBo>si6AnEfpS`kX*zR%N-6=?d8I&yiBR~YPGL&)w6trSyCURS`8Jc z)iK3#bWTilmsxOXT?xk;5qqaV8s9aS+}yUf9#Sk2%m`{x1ixQ~R{Gs4 zmDhXt7&e5)&Wr+i(gCXd*fBLj9J))xrF6WQ+OHN#@K+)aSLo{hUPUlfhUBHq^%y0lZk1G1>9v0y9zMjX z{{~7(QacsMDhH_cl4@#(q_Uqh=+fFAcD1s6hS~7UIrZ!jfMM5EFs2~hJtvs@_y;}C zs9z+QP#B+`6Ha|xR302P`rc!% z%z;$Cz$ehQ^9dO~qW8R);9ev?*w)f^{@2M@thf@x{pnOD8O&$_+dgOu;;F0Qkq`%m zlf!ho65^BfyI;=zy$(QgcYpg&7EO~o(uYJXdf2wtS1HeFX{Ga+R`P{o>2+OFJem{^YEZW(qMD zg8urhkJ$QVDMbX%i$KLGhR`YhU{trb1KopfQ%kYU~M$m_u9pmEkF=m7212HfWw(wu@6Qk{~k zRP&b3$r>JuqguohuBfw}?XZYQ3=}%HB}X>)1T$Lh-%mN7BeQ}%Kn@15rX8kqZJhrY z?Vw=@{m0?4Ep5GHY{;K&-V|?bqX;+lbP(TzNyYZpk6Vn*19ae#Yv!Y;a(jot6m6US zDkEe}XK}|%RZNIv&jb^S<@Y~-%9vh~#2I7l@v}JaToqFu!w56g-e64eJotrE#-+Vk z7hXZgHplMlk?}pMm_G1Di>+w@0U%`K4Ye_QT(_!$*V6XZ*RpuAu${$aCY5ZSC{iKPRYXn;JtE93%8@;k>7hQ_py!)h0dIn&Cp@4KBvwDRVN8^`MFfIw!c4*b6RFz z8PyCP;g|YLWX9pi0uqGicfG%6Oo@!JtTbd6;U9$FX<^7H!tXR4v6g0%iXb@xZzM>@ zzX?gnW16Q^64HnKD>|$xj8$LSL?Vn;i6)gu2#>x)W)Zdx6^~MpT!b$lsw&kgE-cmc z5Et(67L|?ZC!CC=a)$dRK_Mv0SCgKwIGi&XQjqR~8qtK0v{{<%qM7E7@EkVsl$$Tw zS@xi*IipZbXO9@BUb#BPwClfJ`}kPk-+snf&1Z3SOr^Gys`-THjMjPXcP(#S-LvEm zs*%xQ7=SaJEn0j3X`pb^=NVrhP{|o+Qi2ua6iDoQ9$SzrNbNRz9O&ME<}PCSuT6kI zFp)(jTAi^N3^#w@VR3U~PA(&{3GZ2Rx3>AfYAUt>wlfZ;bt$Ah|JOlF9*``|Fl}PeSwx{u07cUgTb{H1!}Et_ zIY{1h0^x@FI=7}X2RCdZOi4O&oloV8**vaR(pEk4KdyBl!9!+0kw!DE%qSt0Vt2sh z{(@l2qrg`RQVqnz94!#`G5(bJ8mjLcs%*K}pa{Y-1S?Ln|W;5>Pbh1JA~>!GH&Yp=~SZQP}p>enmm2%{%0Ny8^$Ytn! zrWc_$T~naXNAGVte+nktHL1Z&HqSXO58dDP*e@`PRZ8h1aUimk&eXK;h(E-ejyqHN zVkw^93NJ(cV9=!;y2Ejb*Mtg$8+^QhnO4Jf4+DWqKSfF26-lomc-Qsh4-n7hK1jWtt($)!Rr*Z-ARcF z&GWC@<&w{UnrboL=;+cWFI#DwUZbwXZe!1K<1ZyPBTP#x`O{8YncZ>x2U*_pS}YRs zKG)O)384!6N5>V_+Eph*=X-8z>WZ-FNP`A31#<4{Spca+!tQFR|J!#+)O5Wk@T^aw zMREPjZ1_}$krY$hYmBcx4C8S;sX$(Q-7E~Vfc!z#qFTkm`SrY_&6&L~-jC-b6K`g$(fiaOr z%p2QP{u-&qvO}Y6d57nji7J}OlcMr{DmB&0hEZi};lM!JcjL(z<~uFw!mu#3o$9w3 zRbZ=bIvK#a_h=X(`w_Yn)t63+&i5r4)lkzRAj`~Y1+w$zld;QRP2z658m=adthohc zucG;@7n}^0zw$d&Q?t}VCDxf@N#A-hO#X_-n#%Q1>x?U>c(%OI;UaxXE3o-h?F=WT zFg|%(6*#Ki8Cw0+JK;c#T4>QXrEo@GWMMV&TJ`WlZQNf*>nk=j0BID~%n&u}Q9cmm zuLDOF)U{m}oHa=21rIo;tHDl%uxRbcpx6Z=X6!mBDCtDABy3SQ!8!};RJyMg$J$^~ zkqcJTK|vEPD~y|4k$9bh#F98Aq-o`amzpdMGME20oAG^hZGBVAOYMH0E(#rJM zQ^36|3hKJ`7F?J=vw$%+UzH5KcduT358@}~+WYAJ4+dRY_PbpjOb-=Wopb*^LO7A2HdMfebyCO0r=o411>9kN((J*4CCbj z6)*q04DYF$6n&{;A0K`0$mR!Ej*K9QV7ye!W|D&)@kAn-EAA=KMb~^y(x_tiT@Q}TDx>KL2=D@=jv#;eo4Mr8gkvlAsreYQ$XU2DYOaqz< zZr9&XSR6FM34uv8lQxNrsE-+eNlb)`y=cP$PIyF93F49X!{NNG9C? zG=dV?$pw5$K~w^}!W;!*2}}_j`Wa-z63tJsW6XsS4*d+9G5i^CV0DQg4Ivs6#}72f zNX3dL$=7{h$!S;zCtj|h?WU2s&(XCT~?u=|1WMtiw~$y zFfgc1{mHZve&JjF?;1}d?fg*>dIin+AQVh{6h7JR49O%M5SyofUd`E02l znmQfN4DP{0F^fFDdywKgnJJ{QnZn9kUkN$bW}%e~Eg zlrxab^8kfp>+Zf1H4H$v`9b9PAGS((80%*=f9$~0AqllQBh)L^Y+_qS30i>6_7KI8s2N+j1LV5#Ke_qTBdf^3Pd zW9O^GQry)D0GETpx_e4>!ARuT%-T4Ws<5B$c#}M1!L;)G(1_!^#}XJ1(tK(K;(Qn% z@xrKoZ6ixCH!Q;Z$GDW#q*jrUVah3P%+#w z%(I8`H_{{a`jt;NF>`C!6wVELx0a5;tAMw9TJ# zZRc~9as!}%dlp8qgUSkYO3{6H)b`M?7E14Sz+gr}PCooA1(v5kgDLjEEVeTew7z6E zpSfuz5*6(&tlX#BU^_(ZN|d~*;ciz`a~#9qo-a9r^K_Sxo{4la05CUuwdVI%Lr~)- z;wd9zV{%dvZG4681;?9Nkkzo8;HsAm7nqANh4714S}3qMR?)zZwY}!cSZMP({@rbV zcO3l&Pb0^dHazl@OECf1xO)1qh5(VEvxpEsBpTd|W1uvNze>>U(Z3YhL9tp?Z?oQW zd&cg<>Z0T@qy$5+*8K;+V>#t86gaUdaV^qzeZ81*M=6O2s4=bo(5o$ukSEIWMIA?B zS8v_8v^5FQ2*woD`a>36Ig<*)CDH?R5gEBvA*KLwRe;o`TGf4lsqo>~SPnFabcmaT z2Ns*1hN|YoZZSp;)vmCv|0)I{Gi^u)q3vM1yTiU@yKQkY3GHM*eUJhc!t!e-jp;apqK)AOEo|$t_;q0!xtd0YA1hYmrAIBBP zjEBegIe(X!R7ZX4aA3?B0Q>*9>!}csSsa>fm0CYWv5`Egz`EXadH~O8RL|=ZXbZ67)WCEwu$T&^Gx2N#_(u0|R#6N!;oms#SL@P%TKRiyWrrOT zExLqmuBN|!hPu!($J|k-j!^fal55JqAgYjt=7P56=XGQol(tD9no|(ByxH=psh_S$ zhq>0<_7yOwIh!le#POz|x=?z!t2&;kBf$0*3Ci6Eej!(L9;ofv_$wl$d2hQ0GGXWl^aBWoLnpVq+vMzrwQ zFm0@dzkk*?mUrWXw(j_D*%?-Yi~NibFZ#{2|Z zQsJMN7t{JechSZkkO%;MJgkrVO@zSs1F{)rPlF#(g5NgXIGfNPdocCQ(egLAV4R!$ zKwIhiSlruRm}-ytwGc1Niz$7HFyf1@2Dw+f9CTQ&|NX`%(2PK>t3}Py0%^z^` zmd?pb8*GB(sM5#wg-Q}mq?WzVewdVak7mjX!c)4nwQIlO;_0TuP%^QX`OW>(qK$gY zHLf`gMBF{Q&{Rg?_0zRuyLGE64iVQ9c-xU zOD_G73H8IrL^fX|-p_p9jbr>!MTqw!s|~mYcZ8rJ=1)J>7p4po_{YES0V4d*{ldri zbm)Z-6P{P^Cq7anlc6_8d;V+&qevx|dz$9wpv`tQ9!~`I?Q8OmmWs)>IZQ25 z4#wHb!l3}0BrJ1W(f*_i_3;0Y(!%}d;%uSm|5<|?1fLO>9@W3JSxKyAkbQ#i9}t~| zr4jG5mIo)-KIFwSM%q^l#50M57(3Ou-JQ-BlH0Py)WE@DQX6o?KRX$rMC3RB9Nf0H z(<|<&qozF>+>N|9)TIF5RRw4r`#0VpD-eb8^Z#&gGUSNM#S=F6 zu~6zO94r)*8oQtb>J|n9;+JLFK((_2Ly+fHiwnKCpij4 z8Q(7%*!XAa#2P;!OAy{!!8c+^e4~fw2Y`zF3>{&$Bw)ww4M-i)Tu4 z-10-m4}+)f+}NJSMpw|KRezug1oRCrNm|;JK^)m$XA{(CkU*SNXd8Z1$)zyFy78=i z1^fk&p*-Kmr_vNtJg<4i;%e$o4R4AgK8=Q=CVfws5CI+6O3q+6MLtdz)*akNwiJGZ z>|W2TM|M7X3m^FA^*r*C-|Ht3(Wd@V4o5MucBgk6%+4czrpdl4KQL~OqnaVCA3yAd zCxUgsgKbBfFF~oG(K8N!vLBpQr?00CN#5^{n9gTWXf;nP3TJU%3+fT)X@-)e!t6#> zHLi0f$KAlB)m+X3B;l4Mk&KF+GAga3vPl$hhD~Aeq?bt$V zns!;?kicR+3Bnq)g=U)+NUR(-=EyHb7w3VRUW);k>f=&1Gg8A0b^BYz$3Qv zaPY6V6Bja?S9-#Y4+UZ!Wiqd8=4wMW`a@HqHtB(AFciB5&;2I&YpW!S1gz=OQ730i zH?_U_9H#Hj`ap02RbvA|?(T`-}% zy`atUnBM6r%Htzqw6WQ47&{#z>MrC7k7z!eQ5so5B%udFyU$PSqm-@Y-snO3hKObt z_|QS&xH*yu6OfK*>5)vDjgmZx96l&x9#V|h7CDhh^^S+WXL`z?l8zi~%Up&&l;4@j zW8z?2gQHsUIcmUgCDwC4X~?ye(_$VcGT#5~#`Zdyr0~54 zEh<~j+~j0Tcx@~RWbkDLp3W7>`L-TP+sM$kp4s(ZsmL8Mugtd-O5o_{qxzu2hjjuc zKQKas^TDrONJ8{si6+3=V1D-NF*137+x=g}9!%N_q@EczkqBe=m#N;61oANFGlj0_ zL2Hpy#N6@Rc{~?6zCflyjMv{J;a(MCB;HamBU$ z1y$HLtlXPFc!qmHO!0iJ8ZOH>I+{Mud<&)((V<(aaZJRmuDE!;G!QSPb#YB6;}pwX zw^>Y0oJAd$iyfb`(y1G}5<^*Rpvfcz_k$wo+~5#NeirKnf)UQqN}6g0bDYU(L}smS z$l8OJ{)E<2U%z{QGLg+=<;nZ6xR6(y@LwBUQ(W>Ns24fE)(q6N$!w7GoUGeJdeWa4 zlC37`fzHNt-TaVA#M?iZ(MJ5tH3r+<4UZhZgzbe+lHWS-AA~UR=0R|~aQ5B$*KBGq zs99X|b(7-|Jl;8&P*|_t>;z!{y~fnQ5MwdkpJEF5*QJ&+@ltcl;B#FI=!zU)D?u{J zxK5a*y~dcU|5ij#X?QqJN=2Ld{TJJ2hk`t4XkySJxZ^E9t>bzqe$Mc%OaBV zZJ&9tZO7x-QDhTJLmc_k0(v0Q#vv(b3j5UHcA!QKiiV|MM~xV5sBa_MR}_S+veOWZ zYYX1vTEY_WiKT8B;*?x{BTp@)?R_|Fz8`016wSBpa{SF?M>)Bub30BzCQtkK-90ds%4*Gunc0-s4)b&(1su#o{3giY_1!g~b$O$0PiT zTdGS2#5i4e9+n9DhitaA;B(R|uvR*x&Y6a;|QZktf)E7##b6{j}YmWNX>i_FhIiEK-MY`4VO%odbSa<<@3oAi`9OWsM=B~T1eTG!c>_G-%;9Hgb8pVPlI zvV9Y@E)A}mYJicz_Hi(!&3RqM_9I(9;CYvrMSN`&9ydwX`EA}$x&CPLMLPQNZ@~-# z&Fkp0PPJFZvR|{aZPD{Csi#ke@u?L)rVV_HYbZ_=H#|ZRAXmH?uDdo-Ky)&0TycEP z;gLHC!RjGlwS}iV1w7nvRyUbwU!m|eV~=Y}VLc~n<-)S7{s`75aqwDezV}%{Kqt|2 zTJvKLf$bt3mq%YTnQguy9xIkZW)#d%>}Z^X|7jUJ0wN(UR>eJXo_P zqi9iluX>;g&RNn-sBOr7UgvQ%dn1A|MZEjv7I_l@+p(j*VgD>EOnM4a<&io!hv!SDq?1Ka+jo+wjT~?a_3?+DjIqe50pj3S=Ww0F+B^=^ z*+%4jo>rijyy9elZK{THiJm{qI4=mxJgQLFzS2UrVlhAcPD$&wczYNzMe^-eRU#tO zP8C5o_YN<+?OiZ+T`z|efd!B3Yl`>8A&XnmfEb+!%ZW804>qIgB+|~ZTr8-ny3TK6 zZLXG_HNHL6L`2DK&vzq>rL`Srw1r!K*R?c}&83q4UO#fHo!YN_uhW7~1;Y|+X0kBp zW};F}(68<&+Hp_Z7weOm!;Dqkftp)F=21I4Rq7_v>_OqgUNDd}Ut~=A^Woofd}5CR z!0nc}T$9`R+lwZ1s3<~cCw0u=X@;{E&|I^08iQ`2J)$+Z>(yleJBeM)d7`iJz% z-&cd7Og+b4UKdTv}IL9QTg)%(H$#LkU0hS zsb3+G96}UZrwFGM*>m1t^-VJc2RA&zfx$8f7*<9&WO-g#>7!g7L>1k;P8}ukS7>HY z8POyc^N#$wU_udJ{YJ-MkEvJ*APBsUxa{V$+ZETI?^Hyi9x|E`DO#j%fH;e?sqw%c zTb|UdLNDhhIZlF6t@F*UZhP?zP6n*b{#2-+Qc^Q?Pbij;Rl&r2 zob%R^ipqB5lp^}pY{=%R8x@!7#2JOt{3mw0vucAGW?F-8pEsf4K3oMPXLXym9D1jKIhazEznBf}uX-{) z<$Cal=+Tt^_02HNrN=`o!sn~&C@A^avi>R1oC5q(6`-8G(4Ir0gWz=pY8QcQiA^h< zC#%5XqXP3bfm>X53J?BNO>F(^_bp>Hb7h?`*|5mWTohG6t4;>2&T|oB;meXtwb$u5 zf4HXQzd0}*bZO&Xzs8TXBky({M^^

    U9g+JR)DYWQ292<=mc+-5&wqa;I)f!9-{$dtv^FP&wQSv<7 zqUhdnnkdaIVCLC6O|I=L>?tm>uO<{{@RyZbZT$6lw68o|a`a6BePcFY^WWVbMDFVu zh4#)Pv+!;fh&AZze70{OHMla7&t^LKAXPk5g#Ragum_2g`b+6#$2K};J)y{c`~O&k zO-0I8#PKn7BDT4pKY+6QJoPsp&6d-$z^PuWGd?@(X1dAXRm;zC>)5Xd_v=A+`HDuq>LaF= ze9EhgvhO~Q%9;x~9N=N+DrX@~3~Q#cFI>%s_%t~GjKgJS!3919QwrzG_qYx-BgSUX z+$6D0mTrRSOlHjt5~9k8`!OyK;`o(0oAu+R`0DIKEvq%lsE43a8+7j9xP~G1;VeLn zj^I9c8NsuCKw!^$j2LOy00hXY7qlp==^`7KO|F3p`uJn_hLk^|Bh8z7zGLfWG3Aocw2(~KyHSYG~ushDei+la}E1pqM%+n8e zDvXMKF#L@CygcR9oS{9%Y%UmAPX5qwwDw)c9O}u$bA_QSq~$T`yf1vnbs~KM5jJ6$ zh-BojOGDQ4O^9d=k@Z~0rnc{625jO3urX$?Z2}a69xAPg*vI1e0>bGP_%k1K4H!rz z)BP4d&W|%tr7C=!A@`{oeTkS%K32l&+FTsc$0kHe8*2?*151kVEDn zd|cpvQ~zSrHs#})LG1?A7!$mGDcsnF$K5<$nz>P!WO!C#WG!tIt-kW5VRhEy9yoUp znqWrp9sR6hH_}_?Xbc{Du_QL8=wSjkWNoIu2OnCgdQjSv&W_;Crqtk& zd4tT@B3K8C`S>0xjLO2u69tjsOE8fKyRvBQ#OVj+IGtCtzBwUpnv(}|lu5MCOhcNq zLUMBkk@1}Lds10e_?%^32ngqYrLJvh`fJC z`5(vRnt5iKR^tMFiV_HWjQ%(M3nR?rzpPQp&_}^0mf>fM%A&b$nH`O*PjK`TIC!6-7*3>-;tLu zmE}Nss4u?Pk#40n-K25oVrv@ZWfJ?7@;Ym#w6Exa9cwJG<+4H>SBL}OaZuy^l#3U` z_77ezhXD>I}s@;Q=fj}+>&*6US_}X8`$=pQVji1+159cADI_!b@C%uqR46O z@BU#G6#GPpGorKi6#JF8uh8ZHa$f&WXzfdWHqfM_z;sBtx0?p;S>!?0llP;bcAM(aj8phv1wu6noF~$52haI*%hUH~1 za&jS;O$3cqi{a~AC-mq4ICn8L7tT`5R=SvQQh)x*xr^y}?&3L$Ay;THr6v4e?vlj& zTD4u93+q$)U`Buclex>0sjzA}JqHUx@H3H&CHj|qA62;g_;)RP`cs7*e9oJS!|8Pg zi033B!Q{m1C6#Ko_qcTx5zu?Cpn*)b+CvMd%Kf)+&jzH z9R-v6%O71}OK2Lw6_%T_g`#00oHER_iYmQ~Je4cgY!M5?e&@^1RR`Rq~;_I7HJz?te z`H<4M)myTIgSgfQwU0g2w(8$5#@#83?(jp5u9+E37t=I6^5y^ZJ6PGtUDCqe>R=y& z7@I5DfPV4Z z34&jfA~#*-iY9f15+JF(CSuX2(S@a>3|D#!nI$o53J(kwy(S;sxT2$l6#a7Yp|DT% zxI9~?_Tc6+Tr{qL&b!(IYcB8`J<6U*Ci~M>r&dqNbK?iFqq8b#(SnwH1$wFS_ow1w zRUY{f4;3C9#!JV=@Yjk!XbFawf6>5O6QUoBcavYt+^QZ(Bh zrpSfAVey_)(Vj6YyGf$0n_h&%TcEP&v2NHZ zswx=QLay(yD0yg*?mG3M5h}7vi(0<2N|8D)xcKVhqH=OruCqg@7WjK!!DciR=5F}i zH{Qd>zyNN_j^6)ZFs4O3D)WbUH{_v=qpJCqk5bV|eDp?}GWwFN2zxbQFo zF1WRnp?wQX5Xt`Af(!O%abfZ$pv4E09kDFq4;Gd1m&}%hkqee$7q3Y1411`HgU-t% z1>B_`G%gD`>@rP8>pg>D-NBE^Apd=Ot>at}Yo)2YD>9xu)EBX3L? z+GRr9i^UwiSSnBPH2u2uAb&oX(5j-8WFv?a0I_jd`xp5EKz3$#4y6hpUHcs(1+8K1 zuRxqEH|@IB!NR8V7MZt#abZJ*U#=Mq=Xy_rgDJ+Zj7jmb} zQe&vsmq+`^devIF>PP3Owc2l~&5O8{#)gI^EBIfm!vxNnfco?@%XeByY#+dVj7`m! zMtoA5Wp+HDj~`^|+jMyZf5G11MZ)cLau`pY@h`AAu;tLWY>hlpV(G?ZUCaO{3a+qU z0Iln15pOEi^>PCFRk+@+IqQX;iHg>gRb+p>AK+|Ts0+EsHDyJnGJI@|T65LEP-}3^ z*-%z9#kIi}@<|lULc8k5U}59AwwB>|jw{(+R>|JvLB}p+8YAW@xB5zny;uc;VZyy3 zl!2#B@`NAiu#d^O#2{tsT1vcwdpW{KMfJNK;qUkr%IlFYr8fO^r!*MmYZ{jT?oUdY zcgmM!0fJDTLZI^*QT9QebOdOwSG>G@U8rAN|64F&?=*!af1~E?~vz ze#h^r>`U*y$7nPui>nG+m;NDMMtD%r&o}-BHh>~Baw6=1jF9&M>YN`OheL&29^rcM z`!(DQG!{RJi0EVo2H;*;o57Y8iYXf;eldi^_Mn|eXJcGW87DOk5B2jH-0|fQ+rp(h z8Ri2fHNL>Lb?G1BSB?i4{LLxyz!U)foA%38loAFsmCZutd#cVgv>5LT+AojD%nKIo zJ5G`y>c}!NoyzPb_Pvf@>Xg$eQ*0l+o{h_{kl~Wb=*wS|=TfFrz$RPcvgiFd{}ieN z57B?12PY<+EbS|R<@8~gbvNPNW!_5yy$5AncH!Nt@1dzibbI6C^QnUygA4Co#bk^u zwi6=qq9Ir+Js!P3YQ!;_iT9My6$;whZSojs1kis-*bt7+Vd`IrfW=J)*ycZwC z|)GrcMIF^VdHOk6vr88%Og%c+iRn69A@*& zgHJ8FG`N&x;Rg74#n_wW%O&To!shL{yn`$D9S6}=w z6}e=E51BmP!D8l7@H{jd70SbUJSH6!3Dr&n6QWz~}qx6GlybtDLG#)KvvzaKDL=};*SUrIZ1K#8< z$^FT6R7A>Foz4#aW}04vYNg(+sP)cdzAszA1Q*Q?MDe=L@e%br(oSQzaA>IF~9}vLcf# zt|UKrM|V1fNXg(^sN=Gw<85E3HqNK7_^p`O*JmI#2w@t-w6rMVUs~eNcES5K@^K?#16U5^IG&~1#!8k zCM+i@`Q*9eZ}pW<#rJa-LM`=}r}YNQP_oB8Lw>s9^2k;(?Z7F32amjf6UIbKuZ!){^CtFh)rgaKU4+z3I=aZq4b=iJeO?BN&=?)^dBREY6u{aYD z3W6KGi#P@{$R_@7nJ&0z2av_VjA%;tyj zIM(n{EiXVfk+Vdrbd-FFbKF9a3^^2x2WgIqQFxmO;4~ns{DwG^DQZ> zz(Y{NUsT{iHOlCwit7nz9FZQn5LTkL!9e+4ESb!E`>*86>D+-Jf`D4UKKJe+nD0d2^opm5-UEkt zvfuj+&EbV&d^krR^*+uYZSU@hSzU`6LV63zc~>SyT9M`jrUk8YFp@Y;@~WR4xS{jr z4zFS?jVRv1N$dZ9@5!Wfwvrx0IhQS+?d_p+FONXqqIrQd1P?pc_4rU=(b!i=R(UT3 zCRXZ$fA_bN2RF+qqqF=2;;E%=CUcM`h+ZKPn-QUqCpl5}SrQ!i*?g)vB=hSC#r;HV zZT`!{4Q~#=1mnjW9%Gu3P?}K1UVwb0;^}Rr;Xa;xk2YNWJt|p|(Hwi63EDoCb#%d( zzfYfR%NExqVc=57PBdRXqqMaHh%^D|STk=rM!<_*g*eVzVD@c3$X{(Z0GoqGN&&hrweJ0>MM+W5PLibuceqA58#t+aG4O@v|pCkNp#Fr%VS-hCh zua#jW3RLFP=SUZ?Ey10Kb{sS>#umy88a*;t@%52~Vr@}3!2I%rj%*S1ioRdJt!Eqd zCy0;7m9zm1+B8{BNi4qU#f&K{=2H(vnt9O15EhgwLcO4<^;udB7Yv*6+wq8SqRLlz zdn6(#HylW$OK^F)BJgrjUv}@LC6RoN4QU| zo~Td)G;|mFBe%*hfnz1~NtMBZPZp!&lXJo`5dZNk zYkv8hN+mBvacE^NL1|kC6^MmnB z>OMKt0lipBji)gUkipm~@5p(W#y9|FlTa|h?N7mW2SpbfJ-F){UU?B_kPqmGSXRW- z-4y;wbBYkl6xk778(`)|ED{Y8e0x-hX3QLGc#2gS)I&aQh|@w037^+|QiqtIJmHg< zYl|Y|d}k)kfr$m!x^&AA{C;`a@Z9}U$@A*v!c^Z$JKd0$NmPKDo9tFRwsO!!74X%| zA#|4}Gf2+^HM25a$gJwv&J&p%kdQ4>bxyV(!)>i|c@SDpQXT;oXE9k3K`VTfbVLbF zVaIhOiQ}>me6jxMxC>Subj}r{fc+f&E1GXY!`mu31+mx}w_uaqgl*{PqhHmSe5gu{j3zz6djmEA`1&%w6iG_IKo)cE3B>CIoqns6MI< zjhxeDB_oH=DJYx8bXht4RG8W8`Vz&{dK&vEk*Jbs&a^*dn|_z$dM0=F@WLEL=vs zFovoRdx&DQdWd$5A~qhPoD6_nP%gtcwnk{6>=UYS_dur`Zx5CT>PzCAU?SqxIV4`4 zkdH>$LhM?cAb1Cgv|yvZ#y?n2CPxptwZfwZX{Fj+2L~5iJg0JVZprR!c5f<4p3QQf zqRILU5pTVu zc1;O3|Aa)pW~>PgVaU*V0gRXT|6iIPQ-z(mH0%j+W~y16A+x~xwTd~KgmjIpQ6K76 zEoS#(^1$0Q*Zqu2<1?q_&qz z%f+9e*Vqby6Fu3#HI5WQL_hFUKx!tRMOp)LuKv>kJO-_`V-K;rhTTV=!1JH3X%AA7 zvGVQJbT;14>*bcApAzG4PiOn+hCKAzCI3SNv!T*1T4n$@^A^o;kvrX}8R6yrmE(8oYbZM+ZyVo-(942(CA%SIG9Ov zNMA>wW7sP7Qdkr6F)M%=lD4#fqp^Y3IIHnfual z=u~DAcuum1U>uvBG+?9{>Zu0T-bZ8&LL|lXJ@yovAmo@1l zzeue55fWA8SalsE8MKBbs+NC8b+wpv{Q9T~P*rC=3N}-r&{Vr&);LY|sph#g)!EN? zQg5xMIVp|WP+NgSf3oE#Op2&PzNF!zT1aH5@b{q18mNs>nb^_GQLK$_e2GF(b)x%J z@%&(6dtNLz^$Ze;boS9kGIWgr49Xg@%|>*9!qlRnSqs4qp(alFy?FK_zF|K+aB)g_ zb62x=;jh7LuYnM|l4~Z(u1LaI1I0&bXni(;{Y*HwFT+B#24WT}6JA0ZA0#wEtyEp8 z0s@V|yt5Vrv)l-HBJ^cUg8r}x-Ip|H&c4#9qC%&@G>|d$K^%0AXAIF1eYIKltH6*i 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 {Ck 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 Y>wO7M`76Loxq%28s!P4{zw*i$1gyl zbi|nRH944lkonC%L=lewaXhLJ<3Ih@#L0xQu`oecd@UL$GyjQ+dW`nJ5pHK56gD>= z6h@^3!Hn;jjbNL@75$)W2@qN6(GvBhcp&-C*nreKhu9ooySTwCRq`$^O|Cx2=z;>@ zOc)27Tk-=*kAT4od(AL~fAWk02?$O+ByjdUg9&hB|d3a=6^i7s%a#c z>7nOvG5eSQ_ZNCK@fW%&(Cz%kFJ{|Q^7nr4KYsayb+`Na<$njZTcqaP|GwY;?=5(s z7PsUO)!CW5Kv=2j1QVsYLW9B}EJZ(E4HyJi#n2okBbGNF-UMp$}1D-MoSo@qI49!K<}anCQe0RCaXE! z2yjFXa~G!9O0`Nb)BnBw->yqY94R^-6XkMaw)NF~VnmdNgUoRFfQob}DoW=Vj91oc8bSp4Y?a%A^*@DJu$?&U?JVbiF1~n7y}8(7rEX zWJ=T76Wa&h?O!O^-<#uRr6Vmy&Y-?qVVa9ThOXQFZyO<8P*#AJ);FIy{f=Az@7;Q| zOCJe9IC?tAM}Wl=mU63x4&>|Nf6(29^H9#$Y-&M|05ErfPr4}d=B~X#q9MY5y z=tFDc&XK4PL%}&ZlbNeInDcVqT=3<l3{837SHV~jRtF;)6W($+ zl!}0$Z57&4p`VLvW)Tn0N&ll%lfK}T#Q!MOSU2Q~`8B#8O*+Kc9TDt!;LOohn!%!*4IXjfEMAf(oE3pYUoIwviwYV?l`>4b> zLSkC434sNM1P&NH9rn!5*ibHymInT&lOVR}m(VS69HVoAXAPof^Ltc6cqq}Xe~Q;Q zcmO=L2h^r}G{^Fn9Y0bzw0&sE`ewmhvWd~f$xucdc<#8Bt{k}X6H?DA+|MB5HucCI zi&b`1TV&26&$Cq1AvRmKXsUv?&-?L`PycC#O=#nh=v2lXh{KM=7@y-8yvIWh zeQ^q8L*gVzPIP2mzKrS3>xPaA(;?6j;{01OhRmlWUjq#CF?cjxt&y7|H>5zAfoich z5|MaIoGOfh6TNBK+k`gPFL+?$P3y>pNP4|PPvE?1UEsE}B`|=`2pARt;CI)jAZZcM z$02ik00>kR+2qi^uEWX54273y!|%3Zcln1E_L2%+g~ny@)GBceEpvvug)IO_wxW(G zd3a#VgZletT+~O0^f8QH?+7T_@El_S4&#LHIG7V0qXy_TA{tELu!iMgkd=_C55i@$ z6S}N|;T6lOpkt{$K}|Z}Gp0q0FB|sFK@&d7YI(3e&1vx3&rcMB1HTV3h|k>*_ZN5S z$!#5I8sp*X_0H)Ofzxw@9-~XUIHJa1B742lhd&~&WIl@M=lN}IiUSs}!mLkG4Ur4N zMi~Ag-#OkNo2I#*1)#}`VmVRVJSVOBHa^8Hz9lg6&;{g9KrX-}%?SfVKo9u^XHH%L zQ)qX~$M0Lzy)Nm_Zv@3l1)z8ceu5YVd_1b8J4N@cOY3lY`eVLuTun=mLxdb!$6|W0 z&h2*`q>bVf42mUhos>t@3EbOlN$`C^x9Gz6BK#~*;VX?17ie+dfe6~}ds^ZeO!&ZE z3-@tS`kzz8CK%2(Bb?Bl;y#LG|8+^vow+pY!vDOIKVzz^;Z?+Gb{weu>f4?vKXNoa* zE?(~#&Gn{57cWYC?;}8Md!@v5J3fUS!tW%7U9I5YO@5In;*!I2rci$TCk0{_x~rr& z>L4X$XpP9El_<21WkvDK`W%5>Wr8+W;UDRWi;CfqlVT{-3OOBKR)9pQGAD$}`|D!$ zFshavA*xMH-1HhD5u#efB69{MWedS~az5t^1Y#Om5UCoz0F-_UnGmLab!etQTkJlJMNr#sT3B@Z+&wU^RS&-6=_}6E%R9z#KbB0ZeOY2Ty~>d>wbjem+8SbP z(uHNN^jmb}fNF^zBA{{i5D5BdrB9$ja)GJz3W1}aqC^5y(Srgnx*d)?ft7qWSS@R^YNI!w&Q5%mPD> zry<8vpCf)5Lb$8htS`u7xLys5#W&nm#S5t?d|rJ>_m~{q-TZUkuXhjvY>I0n2&zU_ zNSk~`rJog9fCxf%edY^TjvP^B$NRnfdo~OS2-fXrFrSM_=06btu*}n3&o^^6%UMZ~}`#SzaNwmq*O7XNXA!-&({aMO^kgL<&Y6A&6)#^6Rn|l~e!B@xZ*G zz|_h$k0`j*>{08&_V2N#3J&pR8SLF3NxV|!a$c;^smL_wDphh}6X0@ouOdwrutrh0 zR4I5gwqe`0z14o>HC~tJYOHnk5BUBqyI3{MFYox zQ z#_5e}q68DAB3+52OH4lg8jcepMRB^nx7+4A4(iCKr~(abN4vUH0UBBp>VW6dG-JL5 z!&jM9v`PP-?=G78*lJKAU_I8Rrpqz4iK|G&0-#VKe2~JUHU2(@cCZkhJCCM#0vj`z zh0$3O-t_U`IFpp0eBAM6aZHgqT#|mi#$#CK;<|&q-Z{_LGdu%;8ETCK89aYNZuY8#1#`CU{`RtDpuJFOP&~xZi%typ;UDLVfIfh!AF>( zJqqG3a7^sK(E`hy&WaFQ$tAF@LM(=FSZl zfKYIO;|?G)^sFwv?Ni@SQ0T|J=C!p&J(B${Ocx@V`Jn?R9tFIj{f{N59TAO50ow2& z6#!JvP>fS^MC=$GZLlJDEk%*F+{dTkjU4*;#BS1K$HN6eD0y0PSMXoRZ-hRKm7(QJ zZHBWt_enDQk2|t3`Y#hi*?%Ha-b`3NpU7=FAYpbkhiQ&6Ei**7KaI$7&>^zDi1TF= zykkR=kE1&8-)#741fO+Z$^jQmsWQxG&(mJZ-i&!O>dh0cJ3M`OtUQr`fGzkf_7Iw{bTdi@ErAb_HmbeY|FjDFX=Y(}Jhny1yPB-fXaZpwM@? z`9a}S`6oJneC5z46@UF>iaBfGoYeeW5*P84^8XvTd2tfPem+AK3zCz+NcIx`DrA0O zC_LZDwZa$Hej|7qdp;Q=&JpjaaXe51y1RiMV-9BBMpHLpIT{d-{jQKDq6SgMp1_<8 zGK@wtkr;}DF}aB_f`9TMEq~(8Av&<--=rQt(UUs-#c>t+*O2^^5LA&rU`WbFRx%a? zla-KzzNDl^HavAQ8o?RJu(%?jg-HDUk)LuG1SSq9=Xr(&%T3e|{=mWBD7%kf%;uzI zgBd4dKz3~#g1=_)q>BK!P;AS~`2U4Xu8@H<7T-r10(+43Ol*Y^kdyuw0tyJGS_aOgir` zlG%PPu8q4{oB&{0_sFq?`7o*F|DXLY=P|M89#Ap?pHecLiZ}rkiWh2=nZ%9CAkm=o zbggCWs_;zOJ~oBeNFpsJ2_H=!~Q%X8BjBsp>U9(H67${ZZe@&ljw4UcZD`Q zcv)p7aASousF{>0-`6_2abru2ZF7!_#LEJf{GU7}x==|e zD5kr@qtwtC6=DlF1!lz?Y9Yyvr%P_YgpWiRMpyU~_()j1TrhOnLc(Ig4C+RYoUt5C zOj-^kXCwy;W6MFp#N!}h?r|Wm@*NU)Snp ziwKI=<&h3GBcV{OxME-yJ83tLG?`!IhM|Hek8A4i@!(XTW_jOE0!on~IfYqDbj42d%7-p9;H6c3s@w_OVNY}dZn`$bFrhiRya$q@Ajl{aI>bXcF28_Xs# z^!3hoWG}B^{er{R$M6Su@YDGHC*|>caD4F~pVi%r)|Rz$tnOe3(kMP1y@7|d%A8O& z`4WoO{upG{OdZm0F;kfc&E}Tc#Eh*;O$~jNm#}K`T$wTtXx^w)DkR|ZZ&TP2>(gUz zgH2quX#)pKafy0(oX;O@*s9O&4i}0Z;6ms}G9nT!7xYm??V~YK;ZIEgbLA0A0IOlO ztQJohKSskj*AT&mRGW=b853k(5<1OM#UOq#;Hx;T{qZ(0Wp<}_KtgdMcs^;8Fs?2)dpe?} zGk3HSZAO`KUowY!S~|2fnVD4-+ix`tU8<`uIgF2o=8!{W3v_J@0jKfp!=A#c{8$)k z`Hg|5_Qjb13|)^=;J6ISAiWj>Cm0Rsq~H-|_6+J_Dn9Xen8X}rJ(`<6*U)%zO@2!_ zOlHM(%Q~UQiOg0gtYBj7r=zgiuV9K2O95&i)7_{;RY7DMFC~11ag~r-kSG0Yj+>bo zJ!KiKGZ<>k+$rJ&_o{FjLD`*@=fzrlUC_IGaM^;L0a*CV7=L#^NE8{QO^^f8P zIpm`x;3#9vL$^{GbIv6A9`YHG0Qg0-fc5DBN_-!(RuOk}3T@?~ zv2ln8*fks{se{sQ8Z)>}jbG?s+=38qM$*#}75fL=M}3}8u0Zbonlmy0el5zi<9Z{0 zQy+sr140RKhQyj85jqnEQhE?wUgUu%AeZ@MgCG?op@&i@CID8=R?s)C&~XFI^OJ;p zt0zfJ0;LQAqm_ON#&9K&)I!l`hp?$80*Isv3djNQ*YpsQ!0*r!s3?Z3f;UhKqGluy zt{ibl17?0GM*^f!-aCQXtEq@Og*s}fzM=#Q!liL76wxO@rp3z2JPE_M*?EKXAHP6E zDBWLxgU(a$1U*DOp?l*`;cG9vKZD-xKd|eX!QlWKp?rxex|`fsbsYEz;21*ptIqQE zO)+BfSB|oO$37MQn?{#^N!e!NU@?(@H`!6aBZ&sQsClfm?yHYi0#{Kv9Q%aXpJq^oU*! zj_RbEqE1No$`>oRdzyB`dsAsC;EZT+Rn)`qkN0}rU%0ohD>=!Q^+kny=7O|oMX-|+ zufR-ks)(nlQdY;ad|riet<``(-k;Dzb+uT%EX>gql+O<&9435&(qzwbOVjWMQ5Kn zr)nk^`-VmXXk1pK@eicMuYeS#Q~_c8hR(ovq5=MZ6P-$s1_pzc!{&f8p-tDfxHx~! zW29=`0`GNR7-~Q9Bj)h z41w#8KtQn>u1M)M-_YBnloNy-%Ox@kr!eG1Dt1AP;1tQQbITA-;R2#iJdkLM;RD

    $I@cf;|tw64k?P7j1~ZjXDm=P{4=eS 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 diff --git a/vendor/bitbucket.org/ww/goautoneg/Makefile b/vendor/bitbucket.org/ww/goautoneg/Makefile deleted file mode 100644 index e33ee17..0000000 --- a/vendor/bitbucket.org/ww/goautoneg/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -include $(GOROOT)/src/Make.inc - -TARG=bitbucket.org/ww/goautoneg -GOFILES=autoneg.go - -include $(GOROOT)/src/Make.pkg - -format: - gofmt -w *.go - -docs: - gomake clean - godoc ${TARG} > README.txt diff --git a/vendor/github.com/Luzifer/rconfig/bool_test.go b/vendor/github.com/Luzifer/rconfig/bool_test.go new file mode 100644 index 0000000..11a6f4b --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/bool_test.go @@ -0,0 +1,70 @@ +package rconfig + +import ( + "os" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing bool parsing", func() { + type t struct { + Test1 bool `default:"true"` + Test2 bool `default:"false" flag:"test2"` + Test3 bool `default:"true" flag:"test3,t"` + Test4 bool `flag:"test4"` + } + + var ( + err error + args []string + cfg t + ) + + BeforeEach(func() { + cfg = t{} + args = []string{ + "--test2", + "-t", + } + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.Test1).To(Equal(true)) + Expect(cfg.Test2).To(Equal(true)) + Expect(cfg.Test3).To(Equal(true)) + Expect(cfg.Test4).To(Equal(false)) + }) +}) + +var _ = Describe("Testing to set bool from ENV with default", func() { + type t struct { + Test1 bool `default:"true" env:"TEST1"` + } + + var ( + err error + args []string + cfg t + ) + + BeforeEach(func() { + cfg = t{} + args = []string{} + }) + + JustBeforeEach(func() { + os.Unsetenv("TEST1") + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.Test1).To(Equal(true)) + }) +}) diff --git a/vendor/github.com/Luzifer/rconfig/duration_test.go b/vendor/github.com/Luzifer/rconfig/duration_test.go new file mode 100644 index 0000000..1ca95dc --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/duration_test.go @@ -0,0 +1,41 @@ +package rconfig + +import ( + "time" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Duration", func() { + type t struct { + Test time.Duration `flag:"duration"` + TestS time.Duration `flag:"other-duration,o"` + TestDef time.Duration `default:"30h"` + } + + var ( + err error + args []string + cfg t + ) + + BeforeEach(func() { + cfg = t{} + args = []string{ + "--duration=23s", "-o", "45m", + } + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.Test).To(Equal(23 * time.Second)) + Expect(cfg.TestS).To(Equal(45 * time.Minute)) + + Expect(cfg.TestDef).To(Equal(30 * time.Hour)) + }) +}) diff --git a/vendor/github.com/Luzifer/rconfig/errors_test.go b/vendor/github.com/Luzifer/rconfig/errors_test.go new file mode 100644 index 0000000..46db039 --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/errors_test.go @@ -0,0 +1,56 @@ +package rconfig + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing errors", func() { + + It("should not accept string as int", func() { + Expect(parse(&struct { + A int `default:"a"` + }{}, []string{})).To(HaveOccurred()) + }) + + It("should not accept string as float", func() { + Expect(parse(&struct { + A float32 `default:"a"` + }{}, []string{})).To(HaveOccurred()) + }) + + It("should not accept string as uint", func() { + Expect(parse(&struct { + A uint `default:"a"` + }{}, []string{})).To(HaveOccurred()) + }) + + It("should not accept string as uint in sub-struct", func() { + Expect(parse(&struct { + B struct { + A uint `default:"a"` + } + }{}, []string{})).To(HaveOccurred()) + }) + + It("should not accept string slice as int slice", func() { + Expect(parse(&struct { + A []int `default:"a,bn"` + }{}, []string{})).To(HaveOccurred()) + }) + + It("should not accept variables not being pointers", func() { + cfg := struct { + A string `default:"a"` + }{} + + Expect(parse(cfg, []string{})).To(HaveOccurred()) + }) + + It("should not accept variables not being pointers to structs", func() { + cfg := "test" + + Expect(parse(cfg, []string{})).To(HaveOccurred()) + }) + +}) diff --git a/vendor/github.com/Luzifer/rconfig/example_test.go b/vendor/github.com/Luzifer/rconfig/example_test.go new file mode 100644 index 0000000..0a65b2f --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/example_test.go @@ -0,0 +1,37 @@ +package rconfig + +import ( + "fmt" + "os" +) + +func ExampleParse() { + // We're building an example configuration with a sub-struct to be filled + // by the Parse command. + config := struct { + Username string `default:"unknown" flag:"user,u" description:"Your name"` + Details struct { + Age int `default:"25" flag:"age" description:"Your age"` + } + }{} + + // To have more relieable results we're setting os.Args to a known value. + // In real-life use cases you wouldn't do this but parse the original + // commandline arguments. + os.Args = []string{ + "example", + "--user=Luzifer", + } + + Parse(&config) + + fmt.Printf("Hello %s, happy birthday for your %dth birthday.", + config.Username, + config.Details.Age) + + // You can also show an usage message for your user + Usage() + + // Output: + // Hello Luzifer, happy birthday for your 25th birthday. +} diff --git a/vendor/github.com/Luzifer/rconfig/float_test.go b/vendor/github.com/Luzifer/rconfig/float_test.go new file mode 100644 index 0000000..4ec8a1e --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/float_test.go @@ -0,0 +1,44 @@ +package rconfig + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing float parsing", func() { + type t struct { + Test32 float32 `flag:"float32"` + Test32P float32 `flag:"float32p,3"` + Test64 float64 `flag:"float64"` + Test64P float64 `flag:"float64p,6"` + TestDef float32 `default:"66.256"` + } + + var ( + err error + args []string + cfg t + ) + + BeforeEach(func() { + cfg = t{} + args = []string{ + "--float32=5.5", "-3", "6.6", + "--float64=7.7", "-6", "8.8", + } + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.Test32).To(Equal(float32(5.5))) + Expect(cfg.Test32P).To(Equal(float32(6.6))) + Expect(cfg.Test64).To(Equal(float64(7.7))) + Expect(cfg.Test64P).To(Equal(float64(8.8))) + + Expect(cfg.TestDef).To(Equal(float32(66.256))) + }) +}) diff --git a/vendor/github.com/Luzifer/rconfig/general_test.go b/vendor/github.com/Luzifer/rconfig/general_test.go new file mode 100644 index 0000000..e7f29b7 --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/general_test.go @@ -0,0 +1,128 @@ +package rconfig + +import ( + "os" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing general parsing", func() { + type t struct { + Test string `default:"foo" env:"shell" flag:"shell" description:"Test"` + Test2 string `default:"blub" env:"testvar" flag:"testvar,t" description:"Test"` + DefaultFlag string `default:"goo"` + SadFlag string + } + + type tValidated struct { + Test string `flag:"test" default:"" validate:"nonzero"` + } + + var ( + err error + args []string + cfg t + ) + + Context("with defined arguments", func() { + BeforeEach(func() { + cfg = t{} + args = []string{ + "--shell=test23", + "-t", "bla", + } + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have parsed the expected values", func() { + Expect(cfg.Test).To(Equal("test23")) + Expect(cfg.Test2).To(Equal("bla")) + Expect(cfg.SadFlag).To(Equal("")) + Expect(cfg.DefaultFlag).To(Equal("goo")) + }) + }) + + Context("with no arguments", func() { + BeforeEach(func() { + cfg = t{} + args = []string{} + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have used the default value", func() { + Expect(cfg.Test).To(Equal("foo")) + }) + }) + + Context("with no arguments and set env", func() { + BeforeEach(func() { + cfg = t{} + args = []string{} + os.Setenv("shell", "test546") + }) + + AfterEach(func() { + os.Unsetenv("shell") + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have used the value from env", func() { + Expect(cfg.Test).To(Equal("test546")) + }) + }) + + Context("with additional arguments", func() { + BeforeEach(func() { + cfg = t{} + args = []string{ + "--shell=test23", + "-t", "bla", + "positional1", "positional2", + } + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have parsed the expected values", func() { + Expect(cfg.Test).To(Equal("test23")) + Expect(cfg.Test2).To(Equal("bla")) + Expect(cfg.SadFlag).To(Equal("")) + Expect(cfg.DefaultFlag).To(Equal("goo")) + }) + It("should have detected the positional arguments", func() { + Expect(Args()).To(Equal([]string{"positional1", "positional2"})) + }) + }) + + Context("making use of the validator package", func() { + var cfgValidated tValidated + + BeforeEach(func() { + cfgValidated = tValidated{} + args = []string{} + }) + + JustBeforeEach(func() { + err = parseAndValidate(&cfgValidated, args) + }) + + It("should have errored", func() { Expect(err).To(HaveOccurred()) }) + }) + +}) diff --git a/vendor/github.com/Luzifer/rconfig/int_test.go b/vendor/github.com/Luzifer/rconfig/int_test.go new file mode 100644 index 0000000..2cc0022 --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/int_test.go @@ -0,0 +1,54 @@ +package rconfig + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing int parsing", func() { + type t struct { + Test int `flag:"int"` + TestP int `flag:"intp,i"` + Test8 int8 `flag:"int8"` + Test8P int8 `flag:"int8p,8"` + Test32 int32 `flag:"int32"` + Test32P int32 `flag:"int32p,3"` + Test64 int64 `flag:"int64"` + Test64P int64 `flag:"int64p,6"` + TestDef int8 `default:"66"` + } + + var ( + err error + args []string + cfg t + ) + + BeforeEach(func() { + cfg = t{} + args = []string{ + "--int=1", "-i", "2", + "--int8=3", "-8", "4", + "--int32=5", "-3", "6", + "--int64=7", "-6", "8", + } + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.Test).To(Equal(1)) + Expect(cfg.TestP).To(Equal(2)) + Expect(cfg.Test8).To(Equal(int8(3))) + Expect(cfg.Test8P).To(Equal(int8(4))) + Expect(cfg.Test32).To(Equal(int32(5))) + Expect(cfg.Test32P).To(Equal(int32(6))) + Expect(cfg.Test64).To(Equal(int64(7))) + Expect(cfg.Test64P).To(Equal(int64(8))) + + Expect(cfg.TestDef).To(Equal(int8(66))) + }) +}) diff --git a/vendor/github.com/Luzifer/rconfig/os-args_test.go b/vendor/github.com/Luzifer/rconfig/os-args_test.go new file mode 100644 index 0000000..eacee71 --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/os-args_test.go @@ -0,0 +1,40 @@ +package rconfig_test + +import ( + "os" + + . "github.com/Luzifer/rconfig" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing os.Args", func() { + type t struct { + A string `default:"a" flag:"a"` + } + + var ( + err error + cfg t + ) + + JustBeforeEach(func() { + err = Parse(&cfg) + }) + + Context("With only valid arguments", func() { + + BeforeEach(func() { + cfg = t{} + os.Args = []string{"--a=bar"} + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.A).To(Equal("bar")) + }) + + }) + +}) diff --git a/vendor/github.com/Luzifer/rconfig/precedence_test.go b/vendor/github.com/Luzifer/rconfig/precedence_test.go new file mode 100644 index 0000000..6d87ca0 --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/precedence_test.go @@ -0,0 +1,87 @@ +package rconfig + +import ( + "os" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Precedence", func() { + + type t struct { + A int `default:"1" vardefault:"a" env:"a" flag:"avar,a" description:"a"` + } + + var ( + err error + cfg t + args []string + vardefaults map[string]string + ) + + JustBeforeEach(func() { + cfg = t{} + SetVariableDefaults(vardefaults) + err = parse(&cfg, args) + }) + + Context("Provided: Flag, Env, Default, VarDefault", func() { + BeforeEach(func() { + args = []string{"-a", "5"} + os.Setenv("a", "8") + vardefaults = map[string]string{ + "a": "3", + } + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have used the flag value", func() { + Expect(cfg.A).To(Equal(5)) + }) + }) + + Context("Provided: Env, Default, VarDefault", func() { + BeforeEach(func() { + args = []string{} + os.Setenv("a", "8") + vardefaults = map[string]string{ + "a": "3", + } + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have used the env value", func() { + Expect(cfg.A).To(Equal(8)) + }) + }) + + Context("Provided: Default, VarDefault", func() { + BeforeEach(func() { + args = []string{} + os.Unsetenv("a") + vardefaults = map[string]string{ + "a": "3", + } + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have used the vardefault value", func() { + Expect(cfg.A).To(Equal(3)) + }) + }) + + Context("Provided: Default", func() { + BeforeEach(func() { + args = []string{} + os.Unsetenv("a") + vardefaults = map[string]string{} + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have used the default value", func() { + Expect(cfg.A).To(Equal(1)) + }) + }) + +}) diff --git a/vendor/github.com/Luzifer/rconfig/rconfig_suite_test.go b/vendor/github.com/Luzifer/rconfig/rconfig_suite_test.go new file mode 100644 index 0000000..72c9ce4 --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/rconfig_suite_test.go @@ -0,0 +1,13 @@ +package rconfig_test + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + + "testing" +) + +func TestRconfig(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Rconfig Suite") +} diff --git a/vendor/github.com/Luzifer/rconfig/slice_test.go b/vendor/github.com/Luzifer/rconfig/slice_test.go new file mode 100644 index 0000000..7d9524e --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/slice_test.go @@ -0,0 +1,51 @@ +package rconfig + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing slices", func() { + type t struct { + Int []int `default:"1,2,3" flag:"int"` + String []string `default:"a,b,c" flag:"string"` + IntP []int `default:"1,2,3" flag:"intp,i"` + StringP []string `default:"a,b,c" flag:"stringp,s"` + } + + var ( + err error + args []string + cfg t + ) + + BeforeEach(func() { + cfg = t{} + args = []string{ + "--int=4,5", "-s", "hallo,welt", + } + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values for int-slice", func() { + Expect(len(cfg.Int)).To(Equal(2)) + Expect(cfg.Int).To(Equal([]int{4, 5})) + Expect(cfg.Int).NotTo(Equal([]int{5, 4})) + }) + It("should have the expected values for int-shorthand-slice", func() { + Expect(len(cfg.IntP)).To(Equal(3)) + Expect(cfg.IntP).To(Equal([]int{1, 2, 3})) + }) + It("should have the expected values for string-slice", func() { + Expect(len(cfg.String)).To(Equal(3)) + Expect(cfg.String).To(Equal([]string{"a", "b", "c"})) + }) + It("should have the expected values for string-shorthand-slice", func() { + Expect(len(cfg.StringP)).To(Equal(2)) + Expect(cfg.StringP).To(Equal([]string{"hallo", "welt"})) + }) +}) diff --git a/vendor/github.com/Luzifer/rconfig/sub-struct_test.go b/vendor/github.com/Luzifer/rconfig/sub-struct_test.go new file mode 100644 index 0000000..cfbfbc2 --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/sub-struct_test.go @@ -0,0 +1,36 @@ +package rconfig + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing sub-structs", func() { + type t struct { + Test string `default:"blubb"` + Sub struct { + Test string `default:"Hallo"` + } + } + + var ( + err error + args []string + cfg t + ) + + BeforeEach(func() { + cfg = t{} + args = []string{} + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.Test).To(Equal("blubb")) + Expect(cfg.Sub.Test).To(Equal("Hallo")) + }) +}) diff --git a/vendor/github.com/Luzifer/rconfig/uint_test.go b/vendor/github.com/Luzifer/rconfig/uint_test.go new file mode 100644 index 0000000..886db1d --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/uint_test.go @@ -0,0 +1,59 @@ +package rconfig + +import ( + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing uint parsing", func() { + type t struct { + Test uint `flag:"int"` + TestP uint `flag:"intp,i"` + Test8 uint8 `flag:"int8"` + Test8P uint8 `flag:"int8p,8"` + Test16 uint16 `flag:"int16"` + Test16P uint16 `flag:"int16p,1"` + Test32 uint32 `flag:"int32"` + Test32P uint32 `flag:"int32p,3"` + Test64 uint64 `flag:"int64"` + Test64P uint64 `flag:"int64p,6"` + TestDef uint8 `default:"66"` + } + + var ( + err error + args []string + cfg t + ) + + BeforeEach(func() { + cfg = t{} + args = []string{ + "--int=1", "-i", "2", + "--int8=3", "-8", "4", + "--int32=5", "-3", "6", + "--int64=7", "-6", "8", + "--int16=9", "-1", "10", + } + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.Test).To(Equal(uint(1))) + Expect(cfg.TestP).To(Equal(uint(2))) + Expect(cfg.Test8).To(Equal(uint8(3))) + Expect(cfg.Test8P).To(Equal(uint8(4))) + Expect(cfg.Test32).To(Equal(uint32(5))) + Expect(cfg.Test32P).To(Equal(uint32(6))) + Expect(cfg.Test64).To(Equal(uint64(7))) + Expect(cfg.Test64P).To(Equal(uint64(8))) + Expect(cfg.Test16).To(Equal(uint16(9))) + Expect(cfg.Test16P).To(Equal(uint16(10))) + + Expect(cfg.TestDef).To(Equal(uint8(66))) + }) +}) diff --git a/vendor/github.com/Luzifer/rconfig/vardefault_test.go b/vendor/github.com/Luzifer/rconfig/vardefault_test.go new file mode 100644 index 0000000..8328919 --- /dev/null +++ b/vendor/github.com/Luzifer/rconfig/vardefault_test.go @@ -0,0 +1,122 @@ +package rconfig + +import ( + "io/ioutil" + "os" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("Testing variable defaults", func() { + + type t struct { + MySecretValue string `default:"secret" env:"foo" vardefault:"my_secret_value"` + MyUsername string `default:"luzifer" vardefault:"username"` + SomeVar string `flag:"var" description:"some variable"` + IntVar int64 `vardefault:"int_var" default:"23"` + } + + var ( + err error + cfg t + args = []string{} + vardefaults = map[string]string{ + "my_secret_value": "veryverysecretkey", + "unkownkey": "hi there", + "int_var": "42", + } + ) + + BeforeEach(func() { + cfg = t{} + }) + + JustBeforeEach(func() { + err = parse(&cfg, args) + }) + + Context("With manually provided variables", func() { + BeforeEach(func() { + SetVariableDefaults(vardefaults) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.IntVar).To(Equal(int64(42))) + Expect(cfg.MySecretValue).To(Equal("veryverysecretkey")) + Expect(cfg.MyUsername).To(Equal("luzifer")) + Expect(cfg.SomeVar).To(Equal("")) + }) + }) + + Context("With defaults from YAML data", func() { + BeforeEach(func() { + yamlData := []byte("---\nmy_secret_value: veryverysecretkey\nunknownkey: hi there\nint_var: 42\n") + SetVariableDefaults(VarDefaultsFromYAML(yamlData)) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.IntVar).To(Equal(int64(42))) + Expect(cfg.MySecretValue).To(Equal("veryverysecretkey")) + Expect(cfg.MyUsername).To(Equal("luzifer")) + Expect(cfg.SomeVar).To(Equal("")) + }) + }) + + Context("With defaults from YAML file", func() { + var tmp *os.File + + BeforeEach(func() { + tmp, _ = ioutil.TempFile("", "") + yamlData := "---\nmy_secret_value: veryverysecretkey\nunknownkey: hi there\nint_var: 42\n" + tmp.WriteString(yamlData) + SetVariableDefaults(VarDefaultsFromYAMLFile(tmp.Name())) + }) + + AfterEach(func() { + tmp.Close() + os.Remove(tmp.Name()) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.IntVar).To(Equal(int64(42))) + Expect(cfg.MySecretValue).To(Equal("veryverysecretkey")) + Expect(cfg.MyUsername).To(Equal("luzifer")) + Expect(cfg.SomeVar).To(Equal("")) + }) + }) + + Context("With defaults from invalid YAML data", func() { + BeforeEach(func() { + yamlData := []byte("---\nmy_secret_value = veryverysecretkey\nunknownkey = hi there\nint_var = 42\n") + SetVariableDefaults(VarDefaultsFromYAML(yamlData)) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.IntVar).To(Equal(int64(23))) + Expect(cfg.MySecretValue).To(Equal("secret")) + Expect(cfg.MyUsername).To(Equal("luzifer")) + Expect(cfg.SomeVar).To(Equal("")) + }) + }) + + Context("With defaults from non existent YAML file", func() { + BeforeEach(func() { + file := "/tmp/this_file_should_not_exist_146e26723r" + SetVariableDefaults(VarDefaultsFromYAMLFile(file)) + }) + + It("should not have errored", func() { Expect(err).NotTo(HaveOccurred()) }) + It("should have the expected values", func() { + Expect(cfg.IntVar).To(Equal(int64(23))) + Expect(cfg.MySecretValue).To(Equal("secret")) + Expect(cfg.MyUsername).To(Equal("luzifer")) + Expect(cfg.SomeVar).To(Equal("")) + }) + }) + +}) diff --git a/vendor/github.com/beorn7/perks/.gitignore b/vendor/github.com/beorn7/perks/.gitignore new file mode 100644 index 0000000..1bd9209 --- /dev/null +++ b/vendor/github.com/beorn7/perks/.gitignore @@ -0,0 +1,2 @@ +*.test +*.prof diff --git a/vendor/github.com/beorn7/perks/LICENSE b/vendor/github.com/beorn7/perks/LICENSE new file mode 100644 index 0000000..339177b --- /dev/null +++ b/vendor/github.com/beorn7/perks/LICENSE @@ -0,0 +1,20 @@ +Copyright (C) 2013 Blake Mizerany + +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/github.com/beorn7/perks/README.md b/vendor/github.com/beorn7/perks/README.md new file mode 100644 index 0000000..fc05777 --- /dev/null +++ b/vendor/github.com/beorn7/perks/README.md @@ -0,0 +1,31 @@ +# Perks for Go (golang.org) + +Perks contains the Go package quantile that computes approximate quantiles over +an unbounded data stream within low memory and CPU bounds. + +For more information and examples, see: +http://godoc.org/github.com/bmizerany/perks + +A very special thank you and shout out to Graham Cormode (Rutgers University), +Flip Korn (AT&T Labs–Research), S. Muthukrishnan (Rutgers University), and +Divesh Srivastava (AT&T Labs–Research) for their research and publication of +[Effective Computation of Biased Quantiles over Data Streams](http://www.cs.rutgers.edu/~muthu/bquant.pdf) + +Thank you, also: +* Armon Dadgar (@armon) +* Andrew Gerrand (@nf) +* Brad Fitzpatrick (@bradfitz) +* Keith Rarick (@kr) + +FAQ: + +Q: Why not move the quantile package into the project root? +A: I want to add more packages to perks later. + +Copyright (C) 2013 Blake Mizerany + +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/github.com/beorn7/perks/histogram/bench_test.go b/vendor/github.com/beorn7/perks/histogram/bench_test.go new file mode 100644 index 0000000..56c7e55 --- /dev/null +++ b/vendor/github.com/beorn7/perks/histogram/bench_test.go @@ -0,0 +1,26 @@ +package histogram + +import ( + "math/rand" + "testing" +) + +func BenchmarkInsert10Bins(b *testing.B) { + b.StopTimer() + h := New(10) + b.StartTimer() + for i := 0; i < b.N; i++ { + f := rand.ExpFloat64() + h.Insert(f) + } +} + +func BenchmarkInsert100Bins(b *testing.B) { + b.StopTimer() + h := New(100) + b.StartTimer() + for i := 0; i < b.N; i++ { + f := rand.ExpFloat64() + h.Insert(f) + } +} diff --git a/vendor/github.com/beorn7/perks/histogram/histogram.go b/vendor/github.com/beorn7/perks/histogram/histogram.go new file mode 100644 index 0000000..bef05c7 --- /dev/null +++ b/vendor/github.com/beorn7/perks/histogram/histogram.go @@ -0,0 +1,108 @@ +// Package histogram provides a Go implementation of BigML's histogram package +// for Clojure/Java. It is currently experimental. +package histogram + +import ( + "container/heap" + "math" + "sort" +) + +type Bin struct { + Count int + Sum float64 +} + +func (b *Bin) Update(x *Bin) { + b.Count += x.Count + b.Sum += x.Sum +} + +func (b *Bin) Mean() float64 { + return b.Sum / float64(b.Count) +} + +type Bins []*Bin + +func (bs Bins) Len() int { return len(bs) } +func (bs Bins) Less(i, j int) bool { return bs[i].Mean() < bs[j].Mean() } +func (bs Bins) Swap(i, j int) { bs[i], bs[j] = bs[j], bs[i] } + +func (bs *Bins) Push(x interface{}) { + *bs = append(*bs, x.(*Bin)) +} + +func (bs *Bins) Pop() interface{} { + return bs.remove(len(*bs) - 1) +} + +func (bs *Bins) remove(n int) *Bin { + if n < 0 || len(*bs) < n { + return nil + } + x := (*bs)[n] + *bs = append((*bs)[:n], (*bs)[n+1:]...) + return x +} + +type Histogram struct { + res *reservoir +} + +func New(maxBins int) *Histogram { + return &Histogram{res: newReservoir(maxBins)} +} + +func (h *Histogram) Insert(f float64) { + h.res.insert(&Bin{1, f}) + h.res.compress() +} + +func (h *Histogram) Bins() Bins { + return h.res.bins +} + +type reservoir struct { + n int + maxBins int + bins Bins +} + +func newReservoir(maxBins int) *reservoir { + return &reservoir{maxBins: maxBins} +} + +func (r *reservoir) insert(bin *Bin) { + r.n += bin.Count + i := sort.Search(len(r.bins), func(i int) bool { + return r.bins[i].Mean() >= bin.Mean() + }) + if i < 0 || i == r.bins.Len() { + // TODO(blake): Maybe use an .insert(i, bin) instead of + // performing the extra work of a heap.Push. + heap.Push(&r.bins, bin) + return + } + r.bins[i].Update(bin) +} + +func (r *reservoir) compress() { + for r.bins.Len() > r.maxBins { + minGapIndex := -1 + minGap := math.MaxFloat64 + for i := 0; i < r.bins.Len()-1; i++ { + gap := gapWeight(r.bins[i], r.bins[i+1]) + if minGap > gap { + minGap = gap + minGapIndex = i + } + } + prev := r.bins[minGapIndex] + next := r.bins.remove(minGapIndex + 1) + prev.Update(next) + } +} + +func gapWeight(prev, next *Bin) float64 { + return next.Mean() - prev.Mean() +} diff --git a/vendor/github.com/beorn7/perks/histogram/histogram_test.go b/vendor/github.com/beorn7/perks/histogram/histogram_test.go new file mode 100644 index 0000000..0575ebe --- /dev/null +++ b/vendor/github.com/beorn7/perks/histogram/histogram_test.go @@ -0,0 +1,38 @@ +package histogram + +import ( + "math/rand" + "testing" +) + +func TestHistogram(t *testing.T) { + const numPoints = 1e6 + const maxBins = 3 + + h := New(maxBins) + for i := 0; i < numPoints; i++ { + f := rand.ExpFloat64() + h.Insert(f) + } + + bins := h.Bins() + if g := len(bins); g > maxBins { + t.Fatalf("got %d bins, wanted <= %d", g, maxBins) + } + + for _, b := range bins { + t.Logf("%+v", b) + } + + if g := count(h.Bins()); g != numPoints { + t.Fatalf("binned %d points, wanted %d", g, numPoints) + } +} + +func count(bins Bins) int { + binCounts := 0 + for _, b := range bins { + binCounts += b.Count + } + return binCounts +} diff --git a/vendor/github.com/beorn7/perks/quantile/stream.go b/vendor/github.com/beorn7/perks/quantile/stream.go index 587b1fc..f4cabd6 100644 --- a/vendor/github.com/beorn7/perks/quantile/stream.go +++ b/vendor/github.com/beorn7/perks/quantile/stream.go @@ -133,7 +133,7 @@ func (s *Stream) Query(q float64) float64 { if l == 0 { return 0 } - i := int(float64(l) * q) + i := int(math.Ceil(float64(l) * q)) if i > 0 { i -= 1 } diff --git a/vendor/github.com/beorn7/perks/quantile/stream_test.go b/vendor/github.com/beorn7/perks/quantile/stream_test.go index 4dba054..8551950 100644 --- a/vendor/github.com/beorn7/perks/quantile/stream_test.go +++ b/vendor/github.com/beorn7/perks/quantile/stream_test.go @@ -33,6 +33,9 @@ func verifyPercsWithAbsoluteEpsilon(t *testing.T, a []float64, s *Stream) { for quantile, epsilon := range Targets { n := float64(len(a)) k := int(quantile * n) + if k < 1 { + k = 1 + } lower := int((quantile - epsilon) * n) if lower < 1 { lower = 1 @@ -99,6 +102,30 @@ func TestTargetedQuery(t *testing.T) { verifyPercsWithAbsoluteEpsilon(t, a, s) } +func TestTargetedQuerySmallSampleSize(t *testing.T) { + rand.Seed(42) + s := NewTargeted(TargetsSmallEpsilon) + a := []float64{1, 2, 3, 4, 5} + for _, v := range a { + s.Insert(v) + } + verifyPercsWithAbsoluteEpsilon(t, a, s) + // If not yet flushed, results should be precise: + if !s.flushed() { + for φ, want := range map[float64]float64{ + 0.01: 1, + 0.10: 1, + 0.50: 3, + 0.90: 5, + 0.99: 5, + } { + if got := s.Query(φ); got != want { + t.Errorf("want %f for φ=%f, got %f", want, φ, got) + } + } + } +} + func TestLowBiasedQuery(t *testing.T) { rand.Seed(42) s := NewLowBiased(RelativeEpsilon) diff --git a/vendor/github.com/beorn7/perks/topk/topk.go b/vendor/github.com/beorn7/perks/topk/topk.go new file mode 100644 index 0000000..5ac3d99 --- /dev/null +++ b/vendor/github.com/beorn7/perks/topk/topk.go @@ -0,0 +1,90 @@ +package topk + +import ( + "sort" +) + +// http://www.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf + +type Element struct { + Value string + Count int +} + +type Samples []*Element + +func (sm Samples) Len() int { + return len(sm) +} + +func (sm Samples) Less(i, j int) bool { + return sm[i].Count < sm[j].Count +} + +func (sm Samples) Swap(i, j int) { + sm[i], sm[j] = sm[j], sm[i] +} + +type Stream struct { + k int + mon map[string]*Element + + // the minimum Element + min *Element +} + +func New(k int) *Stream { + s := new(Stream) + s.k = k + s.mon = make(map[string]*Element) + s.min = &Element{} + + // Track k+1 so that less frequenet items contended for that spot, + // resulting in k being more accurate. + return s +} + +func (s *Stream) Insert(x string) { + s.insert(&Element{x, 1}) +} + +func (s *Stream) Merge(sm Samples) { + for _, e := range sm { + s.insert(e) + } +} + +func (s *Stream) insert(in *Element) { + e := s.mon[in.Value] + if e != nil { + e.Count++ + } else { + if len(s.mon) < s.k+1 { + e = &Element{in.Value, in.Count} + s.mon[in.Value] = e + } else { + e = s.min + delete(s.mon, e.Value) + e.Value = in.Value + e.Count += in.Count + s.min = e + } + } + if e.Count < s.min.Count { + s.min = e + } +} + +func (s *Stream) Query() Samples { + var sm Samples + for _, e := range s.mon { + sm = append(sm, e) + } + sort.Sort(sort.Reverse(sm)) + + if len(sm) < s.k { + return sm + } + + return sm[:s.k] +} diff --git a/vendor/github.com/beorn7/perks/topk/topk_test.go b/vendor/github.com/beorn7/perks/topk/topk_test.go new file mode 100644 index 0000000..c24f0f7 --- /dev/null +++ b/vendor/github.com/beorn7/perks/topk/topk_test.go @@ -0,0 +1,57 @@ +package topk + +import ( + "fmt" + "math/rand" + "sort" + "testing" +) + +func TestTopK(t *testing.T) { + stream := New(10) + ss := []*Stream{New(10), New(10), New(10)} + m := make(map[string]int) + for _, s := range ss { + for i := 0; i < 1e6; i++ { + v := fmt.Sprintf("%x", int8(rand.ExpFloat64())) + s.Insert(v) + m[v]++ + } + stream.Merge(s.Query()) + } + + var sm Samples + for x, s := range m { + sm = append(sm, &Element{x, s}) + } + sort.Sort(sort.Reverse(sm)) + + g := stream.Query() + if len(g) != 10 { + t.Fatalf("got %d, want 10", len(g)) + } + for i, e := range g { + if sm[i].Value != e.Value { + t.Errorf("at %d: want %q, got %q", i, sm[i].Value, e.Value) + } + } +} + +func TestQuery(t *testing.T) { + queryTests := []struct { + value string + expected int + }{ + {"a", 1}, + {"b", 2}, + {"c", 2}, + } + + stream := New(2) + for _, tt := range queryTests { + stream.Insert(tt.value) + if n := len(stream.Query()); n != tt.expected { + t.Errorf("want %d, got %d", tt.expected, n) + } + } +} diff --git a/vendor/github.com/flosch/pongo2/.travis.yml b/vendor/github.com/flosch/pongo2/.travis.yml index 18971e1..a22ad21 100644 --- a/vendor/github.com/flosch/pongo2/.travis.yml +++ b/vendor/github.com/flosch/pongo2/.travis.yml @@ -1,10 +1,10 @@ language: go go: - - 1.4 + - 1.3 - tip install: - - go get golang.org/x/tools/cmd/cover + - go get code.google.com/p/go.tools/cmd/cover - go get github.com/mattn/goveralls - go get gopkg.in/check.v1 script: diff --git a/vendor/github.com/flosch/pongo2/README.md b/vendor/github.com/flosch/pongo2/README.md index 9c26041..7c61e9e 100644 --- a/vendor/github.com/flosch/pongo2/README.md +++ b/vendor/github.com/flosch/pongo2/README.md @@ -1,6 +1,5 @@ # [pongo](https://en.wikipedia.org/wiki/Pongo_%28genus%29)2 -[![Join the chat at https://gitter.im/flosch/pongo2](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/flosch/pongo2) [![GoDoc](https://godoc.org/github.com/flosch/pongo2?status.png)](https://godoc.org/github.com/flosch/pongo2) [![Build Status](https://travis-ci.org/flosch/pongo2.svg?branch=master)](https://travis-ci.org/flosch/pongo2) [![Coverage Status](https://coveralls.io/repos/flosch/pongo2/badge.png?branch=master)](https://coveralls.io/r/flosch/pongo2?branch=master) @@ -96,7 +95,6 @@ Please also have a look on the [caveats](https://github.com/flosch/pongo2#caveat If you're using the `master`-branch of pongo2, you might be interested in this section. Since pongo2 is still in development (even though there is a first stable release!), there could be (backwards-incompatible) API changes over time. To keep track of these and therefore make it painless for you to adapt your codebase, I'll list them here. - * Function signature for tag execution changed: not taking a `bytes.Buffer` anymore; instead `Execute()`-functions are now taking a `TemplateWriter` interface. * Function signature for tag and filter parsing/execution changed (`error` return type changed to `*Error`). * `INodeEvaluator` has been removed and got replaced by `IEvaluator`. You can change your existing tags/filters by simply replacing the interface. * Two new helper functions: [`RenderTemplateFile()`](https://godoc.org/github.com/flosch/pongo2#RenderTemplateFile) and [`RenderTemplateString()`](https://godoc.org/github.com/flosch/pongo2#RenderTemplateString). @@ -106,7 +104,7 @@ If you're using the `master`-branch of pongo2, you might be interested in this s ## How you can help * Write [filters](https://github.com/flosch/pongo2/blob/master/filters_builtin.go#L3) / [tags](https://github.com/flosch/pongo2/blob/master/tags.go#L4) (see [tutorial](https://www.florian-schlachter.de/post/pongo2/)) by forking pongo2 and sending pull requests - * Write/improve code tests (use the following command to see what tests are missing: `go test -v -cover -covermode=count -coverprofile=cover.out && go tool cover -html=cover.out` or have a look on [gocover.io/github.com/flosch/pongo2](http://gocover.io/github.com/flosch/pongo2)) + * Write/improve code tests (use the following command to see what tests are missing: `go test -v -cover -covermode=count -coverprofile=cover.out && go tool cover -html=cover.out`) * Write/improve template tests (see the `template_tests/` directory) * Write middleware, libraries and websites using pongo2. :-) @@ -117,8 +115,7 @@ For a documentation on how the templating language works you can [head over to t You can access pongo2's API documentation on [godoc](https://godoc.org/github.com/flosch/pongo2). ## Blog post series - - * [pongo2 v3 released](https://www.florian-schlachter.de/post/pongo2-v3/) + * [pongo2 v2 released](https://www.florian-schlachter.de/post/pongo2-v2/) * [pongo2 1.0 released](https://www.florian-schlachter.de/post/pongo2-10/) [August 8th 2014] * [pongo2 playground](https://www.florian-schlachter.de/post/pongo2-playground/) [August 1st 2014] @@ -158,7 +155,6 @@ You can access pongo2's API documentation on [godoc](https://godoc.org/github.co * [macaron-pongo2](https://github.com/macaron-contrib/pongo2) - pongo2 support for [Macaron](https://github.com/Unknwon/macaron), a modular web framework. * [ginpongo2](https://github.com/ngerakines/ginpongo2) - middleware for [gin](github.com/gin-gonic/gin) to use pongo2 templates * [pongo2-trans](https://github.com/fromYukki/pongo2trans) - `trans`-tag implementation for internationalization - * [tpongo2](https://github.com/tango-contrib/tpongo2) - pongo2 support for [Tango](https://github.com/lunny/tango), a micro-kernel & pluggable web framework. Please add your project to this list and send me a pull request when you've developed something nice for pongo2. diff --git a/vendor/github.com/flosch/pongo2/context.go b/vendor/github.com/flosch/pongo2/context.go index 7b728ec..df587c8 100644 --- a/vendor/github.com/flosch/pongo2/context.go +++ b/vendor/github.com/flosch/pongo2/context.go @@ -7,7 +7,7 @@ import ( var reIdentifiers = regexp.MustCompile("^[a-zA-Z0-9_]+$") -// A Context type provides constants, variables, instances or functions to a template. +// Use this Context type to provide constants, variables, instances or functions to your template. // // pongo2 automatically provides meta-information or functions through the "pongo2"-key. // Currently, context["pongo2"] contains the following keys: @@ -32,7 +32,6 @@ func (c Context) checkForValidIdentifiers() *Error { return nil } -// Update updates this context with the key/value-pairs from another context. func (c Context) Update(other Context) Context { for k, v := range other { c[k] = v @@ -40,8 +39,6 @@ func (c Context) Update(other Context) Context { return c } -// ExecutionContext contains all data important for the current rendering state. -// // If you're writing a custom tag, your tag's Execute()-function will // have access to the ExecutionContext. This struct stores anything // about the current rendering process's Context including diff --git a/vendor/github.com/flosch/pongo2/error.go b/vendor/github.com/flosch/pongo2/error.go index 80d1147..c1ee86e 100644 --- a/vendor/github.com/flosch/pongo2/error.go +++ b/vendor/github.com/flosch/pongo2/error.go @@ -6,7 +6,7 @@ import ( "os" ) -// The Error type is being used to address an error during lexing, parsing or +// This Error type is being used to address an error during lexing, parsing or // execution. If you want to return an error object (for example in your own // tag or filter) fill this object with as much information as you have. // Make sure "Sender" is always given (if you're returning an error within @@ -58,7 +58,7 @@ func (e *Error) Error() string { return s } -// RawLine returns the affected line from the original template, if available. +// Returns the affected line from the original template, if available. func (e *Error) RawLine() (line string, available bool) { if e.Line <= 0 || e.Filename == "" { return "", false @@ -72,12 +72,7 @@ func (e *Error) RawLine() (line string, available bool) { if err != nil { panic(err) } - defer func() { - err := file.Close() - if err != nil { - panic(err) - } - }() + defer file.Close() scanner := bufio.NewScanner(file) l := 0 diff --git a/vendor/github.com/flosch/pongo2/filters.go b/vendor/github.com/flosch/pongo2/filters.go index 13061f3..229f7fe 100644 --- a/vendor/github.com/flosch/pongo2/filters.go +++ b/vendor/github.com/flosch/pongo2/filters.go @@ -86,31 +86,31 @@ func (fc *filterCall) Execute(v *Value, ctx *ExecutionContext) (*Value, *Error) param = AsValue(nil) } - filteredValue, err := fc.filterFunc(v, param) + filtered_value, err := fc.filterFunc(v, param) if err != nil { return nil, err.updateFromTokenIfNeeded(ctx.template, fc.token) } - return filteredValue, nil + return filtered_value, nil } // Filter = IDENT | IDENT ":" FilterArg | IDENT "|" Filter func (p *Parser) parseFilter() (*filterCall, *Error) { - identToken := p.MatchType(TokenIdentifier) + ident_token := p.MatchType(TokenIdentifier) // Check filter ident - if identToken == nil { + if ident_token == nil { return nil, p.Error("Filter name must be an identifier.", nil) } filter := &filterCall{ - token: identToken, - name: identToken.Val, + token: ident_token, + name: ident_token.Val, } // Get the appropriate filter function and bind it - filterFn, exists := filters[identToken.Val] + filterFn, exists := filters[ident_token.Val] if !exists { - return nil, p.Error(fmt.Sprintf("Filter '%s' does not exist.", identToken.Val), identToken) + return nil, p.Error(fmt.Sprintf("Filter '%s' does not exist.", ident_token.Val), ident_token) } filter.filterFunc = filterFn diff --git a/vendor/github.com/flosch/pongo2/filters_builtin.go b/vendor/github.com/flosch/pongo2/filters_builtin.go index a267fa2..aaa68b1 100644 --- a/vendor/github.com/flosch/pongo2/filters_builtin.go +++ b/vendor/github.com/flosch/pongo2/filters_builtin.go @@ -78,9 +78,9 @@ func init() { RegisterFilter("time", filterDate) // time uses filterDate (same golang-format) RegisterFilter("title", filterTitle) RegisterFilter("truncatechars", filterTruncatechars) - RegisterFilter("truncatechars_html", filterTruncatecharsHTML) + RegisterFilter("truncatechars_html", filterTruncatecharsHtml) RegisterFilter("truncatewords", filterTruncatewords) - RegisterFilter("truncatewords_html", filterTruncatewordsHTML) + RegisterFilter("truncatewords_html", filterTruncatewordsHtml) RegisterFilter("upper", filterUpper) RegisterFilter("urlencode", filterUrlencode) RegisterFilter("urlize", filterUrlize) @@ -105,9 +105,9 @@ func filterTruncatecharsHelper(s string, newLen int) string { return string(runes) } -func filterTruncateHTMLHelper(value string, newOutput *bytes.Buffer, cond func() bool, fn func(c rune, s int, idx int) int, finalize func()) { +func filterTruncateHtmlHelper(value string, new_output *bytes.Buffer, cond func() bool, fn func(c rune, s int, idx int) int, finalize func()) { vLen := len(value) - var tagStack []string + tag_stack := make([]string, 0) idx := 0 for idx < vLen && !cond() { @@ -118,17 +118,17 @@ func filterTruncateHTMLHelper(value string, newOutput *bytes.Buffer, cond func() } if c == '<' { - newOutput.WriteRune(c) + new_output.WriteRune(c) idx += s // consume "<" if idx+1 < vLen { if value[idx] == '/' { // Close tag - newOutput.WriteString("/") + new_output.WriteString("/") tag := "" - idx++ // consume "/" + idx += 1 // consume "/" for idx < vLen { c2, size2 := utf8.DecodeRuneInString(value[idx:]) @@ -146,21 +146,21 @@ func filterTruncateHTMLHelper(value string, newOutput *bytes.Buffer, cond func() idx += size2 } - if len(tagStack) > 0 { + if len(tag_stack) > 0 { // Ideally, the close tag is TOP of tag stack // In malformed HTML, it must not be, so iterate through the stack and remove the tag - for i := len(tagStack) - 1; i >= 0; i-- { - if tagStack[i] == tag { + for i := len(tag_stack) - 1; i >= 0; i-- { + if tag_stack[i] == tag { // Found the tag - tagStack[i] = tagStack[len(tagStack)-1] - tagStack = tagStack[:len(tagStack)-1] + tag_stack[i] = tag_stack[len(tag_stack)-1] + tag_stack = tag_stack[:len(tag_stack)-1] break } } } - newOutput.WriteString(tag) - newOutput.WriteString(">") + new_output.WriteString(tag) + new_output.WriteString(">") } else { // Open tag @@ -174,7 +174,7 @@ func filterTruncateHTMLHelper(value string, newOutput *bytes.Buffer, cond func() continue } - newOutput.WriteRune(c2) + new_output.WriteRune(c2) // End of tag found if c2 == '>' { @@ -194,7 +194,7 @@ func filterTruncateHTMLHelper(value string, newOutput *bytes.Buffer, cond func() } // Add tag to stack - tagStack = append(tagStack, tag) + tag_stack = append(tag_stack, tag) } } } else { @@ -204,10 +204,10 @@ func filterTruncateHTMLHelper(value string, newOutput *bytes.Buffer, cond func() finalize() - for i := len(tagStack) - 1; i >= 0; i-- { - tag := tagStack[i] + for i := len(tag_stack) - 1; i >= 0; i-- { + tag := tag_stack[i] // Close everything from the regular tag stack - newOutput.WriteString(fmt.Sprintf("", tag)) + new_output.WriteString(fmt.Sprintf("", tag)) } } @@ -217,28 +217,28 @@ func filterTruncatechars(in *Value, param *Value) (*Value, *Error) { return AsValue(filterTruncatecharsHelper(s, newLen)), nil } -func filterTruncatecharsHTML(in *Value, param *Value) (*Value, *Error) { +func filterTruncatecharsHtml(in *Value, param *Value) (*Value, *Error) { value := in.String() newLen := max(param.Integer()-3, 0) - newOutput := bytes.NewBuffer(nil) + new_output := bytes.NewBuffer(nil) textcounter := 0 - filterTruncateHTMLHelper(value, newOutput, func() bool { + filterTruncateHtmlHelper(value, new_output, func() bool { return textcounter >= newLen }, func(c rune, s int, idx int) int { textcounter++ - newOutput.WriteRune(c) + new_output.WriteRune(c) return idx + s }, func() { if textcounter >= newLen && textcounter < len(value) { - newOutput.WriteString("...") + new_output.WriteString("...") } }) - return AsSafeValue(newOutput.String()), nil + return AsSafeValue(new_output.String()), nil } func filterTruncatewords(in *Value, param *Value) (*Value, *Error) { @@ -260,19 +260,19 @@ func filterTruncatewords(in *Value, param *Value) (*Value, *Error) { return AsValue(strings.Join(out, " ")), nil } -func filterTruncatewordsHTML(in *Value, param *Value) (*Value, *Error) { +func filterTruncatewordsHtml(in *Value, param *Value) (*Value, *Error) { value := in.String() newLen := max(param.Integer(), 0) - newOutput := bytes.NewBuffer(nil) + new_output := bytes.NewBuffer(nil) wordcounter := 0 - filterTruncateHTMLHelper(value, newOutput, func() bool { + filterTruncateHtmlHelper(value, new_output, func() bool { return wordcounter >= newLen }, func(_ rune, _ int, idx int) int { // Get next word - wordFound := false + word_found := false for idx < len(value) { c2, size2 := utf8.DecodeRuneInString(value[idx:]) @@ -286,29 +286,29 @@ func filterTruncatewordsHTML(in *Value, param *Value) (*Value, *Error) { return idx } - newOutput.WriteRune(c2) + new_output.WriteRune(c2) idx += size2 if c2 == ' ' || c2 == '.' || c2 == ',' || c2 == ';' { // Word ends here, stop capturing it now break } else { - wordFound = true + word_found = true } } - if wordFound { + if word_found { wordcounter++ } return idx }, func() { if wordcounter >= newLen { - newOutput.WriteString("...") + new_output.WriteString("...") } }) - return AsSafeValue(newOutput.String()), nil + return AsSafeValue(new_output.String()), nil } func filterEscape(in *Value, param *Value) (*Value, *Error) { @@ -377,8 +377,9 @@ func filterAdd(in *Value, param *Value) (*Value, *Error) { if in.IsNumber() && param.IsNumber() { if in.IsFloat() || param.IsFloat() { return AsValue(in.Float() + param.Float()), nil + } else { + return AsValue(in.Integer() + param.Integer()), nil } - return AsValue(in.Integer() + param.Integer()), nil } // If in/param is not a number, we're relying on the // Value's String() convertion and just add them both together @@ -549,8 +550,8 @@ func filterCenter(in *Value, param *Value) (*Value, *Error) { } func filterDate(in *Value, param *Value) (*Value, *Error) { - t, isTime := in.Interface().(time.Time) - if !isTime { + t, is_time := in.Interface().(time.Time) + if !is_time { return nil, &Error{ Sender: "filter:date", ErrorMsg: "Filter input argument must be of type 'time.Time'.", @@ -711,13 +712,13 @@ func filterStringformat(in *Value, param *Value) (*Value, *Error) { return AsValue(fmt.Sprintf(param.String(), in.Interface())), nil } -var reStriptags = regexp.MustCompile("<[^>]*?>") +var re_striptags = regexp.MustCompile("<[^>]*?>") func filterStriptags(in *Value, param *Value) (*Value, *Error) { s := in.String() // Strip all tags - s = reStriptags.ReplaceAllString(s, "") + s = re_striptags.ReplaceAllString(s, "") return AsValue(strings.TrimSpace(s)), nil } @@ -769,10 +770,11 @@ func filterPluralize(in *Value, param *Value) (*Value, *Error) { } return AsValue(""), nil - } - return nil, &Error{ - Sender: "filter:pluralize", - ErrorMsg: "Filter 'pluralize' does only work on numbers.", + } else { + return nil, &Error{ + Sender: "filter:pluralize", + ErrorMsg: "Filter 'pluralize' does only work on numbers.", + } } } @@ -842,16 +844,16 @@ func filterWordcount(in *Value, param *Value) (*Value, *Error) { func filterWordwrap(in *Value, param *Value) (*Value, *Error) { words := strings.Fields(in.String()) - wordsLen := len(words) - wrapAt := param.Integer() - if wrapAt <= 0 { + words_len := len(words) + wrap_at := param.Integer() + if wrap_at <= 0 { return in, nil } - linecount := wordsLen/wrapAt + wordsLen%wrapAt + linecount := words_len/wrap_at + words_len%wrap_at lines := make([]string, 0, linecount) for i := 0; i < linecount; i++ { - lines = append(lines, strings.Join(words[wrapAt*i:min(wrapAt*(i+1), wordsLen)], " ")) + lines = append(lines, strings.Join(words[wrap_at*i:min(wrap_at*(i+1), words_len)], " ")) } return AsValue(strings.Join(lines, "\n")), nil } @@ -862,27 +864,27 @@ func filterYesno(in *Value, param *Value) (*Value, *Error) { 1: "no", 2: "maybe", } - paramString := param.String() - customChoices := strings.Split(paramString, ",") - if len(paramString) > 0 { - if len(customChoices) > 3 { + param_string := param.String() + custom_choices := strings.Split(param_string, ",") + if len(param_string) > 0 { + if len(custom_choices) > 3 { return nil, &Error{ Sender: "filter:yesno", - ErrorMsg: fmt.Sprintf("You cannot pass more than 3 options to the 'yesno'-filter (got: '%s').", paramString), + ErrorMsg: fmt.Sprintf("You cannot pass more than 3 options to the 'yesno'-filter (got: '%s').", param_string), } } - if len(customChoices) < 2 { + if len(custom_choices) < 2 { return nil, &Error{ Sender: "filter:yesno", - ErrorMsg: fmt.Sprintf("You must pass either no or at least 2 arguments to the 'yesno'-filter (got: '%s').", paramString), + ErrorMsg: fmt.Sprintf("You must pass either no or at least 2 arguments to the 'yesno'-filter (got: '%s').", param_string), } } // Map to the options now - choices[0] = customChoices[0] - choices[1] = customChoices[1] - if len(customChoices) == 3 { - choices[2] = customChoices[2] + choices[0] = custom_choices[0] + choices[1] = custom_choices[1] + if len(custom_choices) == 3 { + choices[2] = custom_choices[2] } } diff --git a/vendor/github.com/flosch/pongo2/lexer.go b/vendor/github.com/flosch/pongo2/lexer.go index 1698e41..8956f9c 100644 --- a/vendor/github.com/flosch/pongo2/lexer.go +++ b/vendor/github.com/flosch/pongo2/lexer.go @@ -63,8 +63,8 @@ type lexer struct { line int col int - inVerbatim bool - verbatimName string + in_verbatim bool + verbatim_name string } func (t *Token) String() string { @@ -216,8 +216,8 @@ func (l *lexer) run() { for { // TODO: Support verbatim tag names // https://docs.djangoproject.com/en/dev/ref/templates/builtins/#verbatim - if l.inVerbatim { - name := l.verbatimName + if l.in_verbatim { + name := l.verbatim_name if name != "" { name += " " } @@ -229,20 +229,20 @@ func (l *lexer) run() { l.pos += w l.col += w l.ignore() - l.inVerbatim = false + l.in_verbatim = false } } else if strings.HasPrefix(l.input[l.pos:], "{% verbatim %}") { // tag if l.pos > l.start { l.emit(TokenHTML) } - l.inVerbatim = true + l.in_verbatim = true w := len("{% verbatim %}") l.pos += w l.col += w l.ignore() } - if !l.inVerbatim { + if !l.in_verbatim { // Ignore single-line comments {# ... #} if strings.HasPrefix(l.input[l.pos:], "{#") { if l.pos > l.start { @@ -303,7 +303,7 @@ func (l *lexer) run() { l.emit(TokenHTML) } - if l.inVerbatim { + if l.in_verbatim { l.errorf("verbatim-tag not closed, got EOF.") } } @@ -394,7 +394,7 @@ func (l *lexer) stateNumber() lexerStateFn { func (l *lexer) stateString() lexerStateFn { l.ignore() - l.startcol-- // we're starting the position at the first " + l.startcol -= 1 // we're starting the position at the first " for !l.accept(`"`) { switch l.next() { case '\\': diff --git a/vendor/github.com/flosch/pongo2/nodes.go b/vendor/github.com/flosch/pongo2/nodes.go index 5b039cd..5fd5a6c 100644 --- a/vendor/github.com/flosch/pongo2/nodes.go +++ b/vendor/github.com/flosch/pongo2/nodes.go @@ -1,13 +1,17 @@ package pongo2 +import ( + "bytes" +) + // The root document type nodeDocument struct { Nodes []INode } -func (doc *nodeDocument) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (doc *nodeDocument) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { for _, n := range doc.Nodes { - err := n.Execute(ctx, writer) + err := n.Execute(ctx, buffer) if err != nil { return err } diff --git a/vendor/github.com/flosch/pongo2/nodes_html.go b/vendor/github.com/flosch/pongo2/nodes_html.go index 9680285..9aa630c 100644 --- a/vendor/github.com/flosch/pongo2/nodes_html.go +++ b/vendor/github.com/flosch/pongo2/nodes_html.go @@ -1,10 +1,14 @@ package pongo2 +import ( + "bytes" +) + type nodeHTML struct { token *Token } -func (n *nodeHTML) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - writer.WriteString(n.token.Val) +func (n *nodeHTML) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + buffer.WriteString(n.token.Val) return nil } diff --git a/vendor/github.com/flosch/pongo2/nodes_wrapper.go b/vendor/github.com/flosch/pongo2/nodes_wrapper.go index d1bcb8d..9180dc7 100644 --- a/vendor/github.com/flosch/pongo2/nodes_wrapper.go +++ b/vendor/github.com/flosch/pongo2/nodes_wrapper.go @@ -1,13 +1,17 @@ package pongo2 +import ( + "bytes" +) + type NodeWrapper struct { Endtag string nodes []INode } -func (wrapper *NodeWrapper) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (wrapper *NodeWrapper) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { for _, n := range wrapper.nodes { - err := n.Execute(ctx, writer) + err := n.Execute(ctx, buffer) if err != nil { return err } diff --git a/vendor/github.com/flosch/pongo2/parser.go b/vendor/github.com/flosch/pongo2/parser.go index bed5061..c85e2d2 100644 --- a/vendor/github.com/flosch/pongo2/parser.go +++ b/vendor/github.com/flosch/pongo2/parser.go @@ -1,12 +1,13 @@ package pongo2 import ( + "bytes" "fmt" "strings" ) type INode interface { - Execute(*ExecutionContext, TemplateWriter) *Error + Execute(*ExecutionContext, *bytes.Buffer) *Error } type IEvaluator interface { @@ -26,10 +27,10 @@ type IEvaluator interface { // // (See Token's documentation for more about tokens) type Parser struct { - name string - idx int - tokens []*Token - lastToken *Token + name string + idx int + tokens []*Token + last_token *Token // if the parser parses a template document, here will be // a reference to it (needed to access the template through Tags) @@ -46,7 +47,7 @@ func newParser(name string, tokens []*Token, template *Template) *Parser { template: template, } if len(tokens) > 0 { - p.lastToken = tokens[len(tokens)-1] + p.last_token = tokens[len(tokens)-1] } return p } @@ -211,19 +212,19 @@ func (p *Parser) Error(msg string, token *Token) *Error { func (p *Parser) WrapUntilTag(names ...string) (*NodeWrapper, *Parser, *Error) { wrapper := &NodeWrapper{} - var tagArgs []*Token + tagArgs := make([]*Token, 0) for p.Remaining() > 0 { // New tag, check whether we have to stop wrapping here if p.Peek(TokenSymbol, "{%") != nil { - tagIdent := p.PeekTypeN(1, TokenIdentifier) + tag_ident := p.PeekTypeN(1, TokenIdentifier) - if tagIdent != nil { + if tag_ident != nil { // We've found a (!) end-tag found := false for _, n := range names { - if tagIdent.Val == n { + if tag_ident.Val == n { found = true break } @@ -237,15 +238,16 @@ func (p *Parser) WrapUntilTag(names ...string) (*NodeWrapper, *Parser, *Error) { for { if p.Match(TokenSymbol, "%}") != nil { // Okay, end the wrapping here - wrapper.Endtag = tagIdent.Val + wrapper.Endtag = tag_ident.Val return wrapper, newParser(p.template.name, tagArgs, p.template), nil + } else { + t := p.Current() + p.Consume() + if t == nil { + return nil, nil, p.Error("Unexpected EOF.", p.last_token) + } + tagArgs = append(tagArgs, t) } - t := p.Current() - p.Consume() - if t == nil { - return nil, nil, p.Error("Unexpected EOF.", p.lastToken) - } - tagArgs = append(tagArgs, t) } } } @@ -261,5 +263,5 @@ func (p *Parser) WrapUntilTag(names ...string) (*NodeWrapper, *Parser, *Error) { } return nil, nil, p.Error(fmt.Sprintf("Unexpected EOF, expected tag %s.", strings.Join(names, " or ")), - p.lastToken) + p.last_token) } diff --git a/vendor/github.com/flosch/pongo2/parser_expression.go b/vendor/github.com/flosch/pongo2/parser_expression.go index 98c6580..c1002de 100644 --- a/vendor/github.com/flosch/pongo2/parser_expression.go +++ b/vendor/github.com/flosch/pongo2/parser_expression.go @@ -1,37 +1,38 @@ package pongo2 import ( + "bytes" "fmt" "math" ) type Expression struct { // TODO: Add location token? - expr1 IEvaluator - expr2 IEvaluator - opToken *Token + expr1 IEvaluator + expr2 IEvaluator + op_token *Token } type relationalExpression struct { // TODO: Add location token? - expr1 IEvaluator - expr2 IEvaluator - opToken *Token + expr1 IEvaluator + expr2 IEvaluator + op_token *Token } type simpleExpression struct { - negate bool - negativeSign bool - term1 IEvaluator - term2 IEvaluator - opToken *Token + negate bool + negative_sign bool + term1 IEvaluator + term2 IEvaluator + op_token *Token } type term struct { // TODO: Add location token? - factor1 IEvaluator - factor2 IEvaluator - opToken *Token + factor1 IEvaluator + factor2 IEvaluator + op_token *Token } type power struct { @@ -55,14 +56,14 @@ func (expr *simpleExpression) FilterApplied(name string) bool { (expr.term2 != nil && expr.term2.FilterApplied(name))) } -func (expr *term) FilterApplied(name string) bool { - return expr.factor1.FilterApplied(name) && (expr.factor2 == nil || - (expr.factor2 != nil && expr.factor2.FilterApplied(name))) +func (t *term) FilterApplied(name string) bool { + return t.factor1.FilterApplied(name) && (t.factor2 == nil || + (t.factor2 != nil && t.factor2.FilterApplied(name))) } -func (expr *power) FilterApplied(name string) bool { - return expr.power1.FilterApplied(name) && (expr.power2 == nil || - (expr.power2 != nil && expr.power2.FilterApplied(name))) +func (p *power) FilterApplied(name string) bool { + return p.power1.FilterApplied(name) && (p.power2 == nil || + (p.power2 != nil && p.power2.FilterApplied(name))) } func (expr *Expression) GetPositionToken() *Token { @@ -85,48 +86,48 @@ func (expr *power) GetPositionToken() *Token { return expr.power1.GetPositionToken() } -func (expr *Expression) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (expr *Expression) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } -func (expr *relationalExpression) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (expr *relationalExpression) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } -func (expr *simpleExpression) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (expr *simpleExpression) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } -func (expr *term) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (expr *term) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } -func (expr *power) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (expr *power) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } @@ -140,13 +141,13 @@ func (expr *Expression) Evaluate(ctx *ExecutionContext) (*Value, *Error) { if err != nil { return nil, err } - switch expr.opToken.Val { + switch expr.op_token.Val { case "and", "&&": return AsValue(v1.IsTrue() && v2.IsTrue()), nil case "or", "||": return AsValue(v1.IsTrue() || v2.IsTrue()), nil default: - panic(fmt.Sprintf("unimplemented: %s", expr.opToken.Val)) + panic(fmt.Sprintf("unimplemented: %s", expr.op_token.Val)) } } else { return v1, nil @@ -163,35 +164,39 @@ func (expr *relationalExpression) Evaluate(ctx *ExecutionContext) (*Value, *Erro if err != nil { return nil, err } - switch expr.opToken.Val { + switch expr.op_token.Val { case "<=": if v1.IsFloat() || v2.IsFloat() { return AsValue(v1.Float() <= v2.Float()), nil + } else { + return AsValue(v1.Integer() <= v2.Integer()), nil } - return AsValue(v1.Integer() <= v2.Integer()), nil case ">=": if v1.IsFloat() || v2.IsFloat() { return AsValue(v1.Float() >= v2.Float()), nil + } else { + return AsValue(v1.Integer() >= v2.Integer()), nil } - return AsValue(v1.Integer() >= v2.Integer()), nil case "==": return AsValue(v1.EqualValueTo(v2)), nil case ">": if v1.IsFloat() || v2.IsFloat() { return AsValue(v1.Float() > v2.Float()), nil + } else { + return AsValue(v1.Integer() > v2.Integer()), nil } - return AsValue(v1.Integer() > v2.Integer()), nil case "<": if v1.IsFloat() || v2.IsFloat() { return AsValue(v1.Float() < v2.Float()), nil + } else { + return AsValue(v1.Integer() < v2.Integer()), nil } - return AsValue(v1.Integer() < v2.Integer()), nil case "!=", "<>": return AsValue(!v1.EqualValueTo(v2)), nil case "in": return AsValue(v2.Contains(v1)), nil default: - panic(fmt.Sprintf("unimplemented: %s", expr.opToken.Val)) + panic(fmt.Sprintf("unimplemented: %s", expr.op_token.Val)) } } else { return v1, nil @@ -209,7 +214,7 @@ func (expr *simpleExpression) Evaluate(ctx *ExecutionContext) (*Value, *Error) { result = result.Negate() } - if expr.negativeSign { + if expr.negative_sign { if result.IsNumber() { switch { case result.IsFloat(): @@ -229,21 +234,23 @@ func (expr *simpleExpression) Evaluate(ctx *ExecutionContext) (*Value, *Error) { if err != nil { return nil, err } - switch expr.opToken.Val { + switch expr.op_token.Val { case "+": if result.IsFloat() || t2.IsFloat() { // Result will be a float return AsValue(result.Float() + t2.Float()), nil + } else { + // Result will be an integer + return AsValue(result.Integer() + t2.Integer()), nil } - // Result will be an integer - return AsValue(result.Integer() + t2.Integer()), nil case "-": if result.IsFloat() || t2.IsFloat() { // Result will be a float return AsValue(result.Float() - t2.Float()), nil + } else { + // Result will be an integer + return AsValue(result.Integer() - t2.Integer()), nil } - // Result will be an integer - return AsValue(result.Integer() - t2.Integer()), nil default: panic("unimplemented") } @@ -252,17 +259,17 @@ func (expr *simpleExpression) Evaluate(ctx *ExecutionContext) (*Value, *Error) { return result, nil } -func (expr *term) Evaluate(ctx *ExecutionContext) (*Value, *Error) { - f1, err := expr.factor1.Evaluate(ctx) +func (t *term) Evaluate(ctx *ExecutionContext) (*Value, *Error) { + f1, err := t.factor1.Evaluate(ctx) if err != nil { return nil, err } - if expr.factor2 != nil { - f2, err := expr.factor2.Evaluate(ctx) + if t.factor2 != nil { + f2, err := t.factor2.Evaluate(ctx) if err != nil { return nil, err } - switch expr.opToken.Val { + switch t.op_token.Val { case "*": if f1.IsFloat() || f2.IsFloat() { // Result will be float @@ -288,19 +295,20 @@ func (expr *term) Evaluate(ctx *ExecutionContext) (*Value, *Error) { } } -func (expr *power) Evaluate(ctx *ExecutionContext) (*Value, *Error) { - p1, err := expr.power1.Evaluate(ctx) +func (pw *power) Evaluate(ctx *ExecutionContext) (*Value, *Error) { + p1, err := pw.power1.Evaluate(ctx) if err != nil { return nil, err } - if expr.power2 != nil { - p2, err := expr.power2.Evaluate(ctx) + if pw.power2 != nil { + p2, err := pw.power2.Evaluate(ctx) if err != nil { return nil, err } return AsValue(math.Pow(p1.Float(), p2.Float())), nil + } else { + return p1, nil } - return p1, nil } func (p *Parser) parseFactor() (IEvaluator, *Error) { @@ -344,19 +352,19 @@ func (p *Parser) parsePower() (IEvaluator, *Error) { } func (p *Parser) parseTerm() (IEvaluator, *Error) { - returnTerm := new(term) + return_term := new(term) factor1, err := p.parsePower() if err != nil { return nil, err } - returnTerm.factor1 = factor1 + return_term.factor1 = factor1 for p.PeekOne(TokenSymbol, "*", "/", "%") != nil { - if returnTerm.opToken != nil { + if return_term.op_token != nil { // Create new sub-term - returnTerm = &term{ - factor1: returnTerm, + return_term = &term{ + factor1: return_term, } } @@ -368,16 +376,16 @@ func (p *Parser) parseTerm() (IEvaluator, *Error) { return nil, err } - returnTerm.opToken = op - returnTerm.factor2 = factor2 + return_term.op_token = op + return_term.factor2 = factor2 } - if returnTerm.opToken == nil { + if return_term.op_token == nil { // Shortcut for faster evaluation - return returnTerm.factor1, nil + return return_term.factor1, nil } - return returnTerm, nil + return return_term, nil } func (p *Parser) parseSimpleExpression() (IEvaluator, *Error) { @@ -385,7 +393,7 @@ func (p *Parser) parseSimpleExpression() (IEvaluator, *Error) { if sign := p.MatchOne(TokenSymbol, "+", "-"); sign != nil { if sign.Val == "-" { - expr.negativeSign = true + expr.negative_sign = true } } @@ -400,7 +408,7 @@ func (p *Parser) parseSimpleExpression() (IEvaluator, *Error) { expr.term1 = term1 for p.PeekOne(TokenSymbol, "+", "-") != nil { - if expr.opToken != nil { + if expr.op_token != nil { // New sub expr expr = &simpleExpression{ term1: expr, @@ -416,10 +424,10 @@ func (p *Parser) parseSimpleExpression() (IEvaluator, *Error) { } expr.term2 = term2 - expr.opToken = op + expr.op_token = op } - if expr.negate == false && expr.negativeSign == false && expr.term2 == nil { + if expr.negate == false && expr.negative_sign == false && expr.term2 == nil { // Shortcut for faster evaluation return expr.term1, nil } @@ -442,14 +450,14 @@ func (p *Parser) parseRelationalExpression() (IEvaluator, *Error) { if err != nil { return nil, err } - expr.opToken = t + expr.op_token = t expr.expr2 = expr2 } else if t := p.MatchOne(TokenKeyword, "in"); t != nil { expr2, err := p.parseSimpleExpression() if err != nil { return nil, err } - expr.opToken = t + expr.op_token = t expr.expr2 = expr2 } @@ -479,7 +487,7 @@ func (p *Parser) ParseExpression() (IEvaluator, *Error) { return nil, err } exp.expr2 = expr2 - exp.opToken = op + exp.op_token = op } if exp.expr2 == nil { diff --git a/vendor/github.com/flosch/pongo2/pongo2.go b/vendor/github.com/flosch/pongo2/pongo2.go index eda3aa0..e61faa4 100644 --- a/vendor/github.com/flosch/pongo2/pongo2.go +++ b/vendor/github.com/flosch/pongo2/pongo2.go @@ -1,10 +1,10 @@ package pongo2 // Version string -const Version = "dev" +const Version = "v3" -// Must panics, if a Template couldn't successfully parsed. This is how you -// would use it: +// Helper function which panics, if a Template couldn't +// successfully parsed. This is how you would use it: // var baseTemplate = pongo2.Must(pongo2.FromFile("templates/base.html")) func Must(tpl *Template, err error) *Template { if err != nil { diff --git a/vendor/github.com/flosch/pongo2/pongo2_issues_test.go b/vendor/github.com/flosch/pongo2/pongo2_issues_test.go new file mode 100644 index 0000000..731a290 --- /dev/null +++ b/vendor/github.com/flosch/pongo2/pongo2_issues_test.go @@ -0,0 +1,20 @@ +package pongo2 + +import ( + "testing" + + . "gopkg.in/check.v1" +) + +// Hook up gocheck into the "go test" runner. + +func TestIssues(t *testing.T) { TestingT(t) } + +type IssueTestSuite struct{} + +var _ = Suite(&IssueTestSuite{}) + +func (s *TestSuite) TestIssues(c *C) { + // Add a test for any issue + c.Check(42, Equals, 42) +} diff --git a/vendor/github.com/flosch/pongo2/pongo2_template_test.go b/vendor/github.com/flosch/pongo2/pongo2_template_test.go index 8493dae..b6dc8fa 100644 --- a/vendor/github.com/flosch/pongo2/pongo2_template_test.go +++ b/vendor/github.com/flosch/pongo2/pongo2_template_test.go @@ -1,4 +1,4 @@ -package pongo2_test +package pongo2 import ( "bytes" @@ -9,11 +9,9 @@ import ( "strings" "testing" "time" - - "github.com/flosch/pongo2" ) -var adminList = []string{"user2"} +var admin_list = []string{"user2"} var time1 = time.Date(2014, 06, 10, 15, 30, 15, 0, time.UTC) var time2 = time.Date(2011, 03, 21, 8, 37, 56, 12, time.UTC) @@ -34,8 +32,8 @@ type comment struct { Text string } -func isAdmin(u *user) bool { - for _, a := range adminList { +func is_admin(u *user) bool { + for _, a := range admin_list { if a == u.Name { return true } @@ -43,12 +41,12 @@ func isAdmin(u *user) bool { return false } -func (u *user) Is_admin() *pongo2.Value { - return pongo2.AsValue(isAdmin(u)) +func (u *user) Is_admin() *Value { + return AsValue(is_admin(u)) } func (u *user) Is_admin2() bool { - return isAdmin(u) + return is_admin(u) } func (p *post) String() string { @@ -62,53 +60,74 @@ func (p *post) String() string { type tagSandboxDemoTag struct { } -func (node *tagSandboxDemoTag) Execute(ctx *pongo2.ExecutionContext, writer pongo2.TemplateWriter) *pongo2.Error { - writer.WriteString("hello") +func (node *tagSandboxDemoTag) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + buffer.WriteString("hello") return nil } -func tagSandboxDemoTagParser(doc *pongo2.Parser, start *pongo2.Token, arguments *pongo2.Parser) (pongo2.INodeTag, *pongo2.Error) { +func tagSandboxDemoTagParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { return &tagSandboxDemoTag{}, nil } -func BannedFilterFn(in *pongo2.Value, params *pongo2.Value) (*pongo2.Value, *pongo2.Error) { +func BannedFilterFn(in *Value, params *Value) (*Value, *Error) { return in, nil } func init() { - pongo2.DefaultSet.Debug = true + DefaultSet.Debug = true - pongo2.RegisterFilter("banned_filter", BannedFilterFn) - pongo2.RegisterFilter("unbanned_filter", BannedFilterFn) - pongo2.RegisterTag("banned_tag", tagSandboxDemoTagParser) - pongo2.RegisterTag("unbanned_tag", tagSandboxDemoTagParser) + RegisterFilter("banned_filter", BannedFilterFn) + RegisterFilter("unbanned_filter", BannedFilterFn) + RegisterTag("banned_tag", tagSandboxDemoTagParser) + RegisterTag("unbanned_tag", tagSandboxDemoTagParser) - pongo2.DefaultSet.BanFilter("banned_filter") - pongo2.DefaultSet.BanTag("banned_tag") + DefaultSet.BanFilter("banned_filter") + DefaultSet.BanTag("banned_tag") + + // Allow different kind of levels inside template_tests/ + abs_path, err := filepath.Abs("./template_tests/*") + if err != nil { + panic(err) + } + DefaultSet.SandboxDirectories = append(DefaultSet.SandboxDirectories, abs_path) + + abs_path, err = filepath.Abs("./template_tests/*/*") + if err != nil { + panic(err) + } + DefaultSet.SandboxDirectories = append(DefaultSet.SandboxDirectories, abs_path) + + abs_path, err = filepath.Abs("./template_tests/*/*/*") + if err != nil { + panic(err) + } + DefaultSet.SandboxDirectories = append(DefaultSet.SandboxDirectories, abs_path) + + // Allow pongo2 temp files + DefaultSet.SandboxDirectories = append(DefaultSet.SandboxDirectories, "/tmp/pongo2_*") f, err := ioutil.TempFile("/tmp/", "pongo2_") if err != nil { panic("cannot write to /tmp/") } f.Write([]byte("Hello from pongo2")) - pongo2.DefaultSet.Globals["temp_file"] = f.Name() + DefaultSet.Globals["temp_file"] = f.Name() } /* * End setup sandbox */ -var tplContext = pongo2.Context{ +var tplContext = Context{ "number": 11, "simple": map[string]interface{}{ - "number": 42, - "name": "john doe", - "included_file": "INCLUDES.helper", - "included_file_not_exists": "INCLUDES.helper.not_exists", - "nil": nil, - "uint": uint(8), - "float": float64(3.1415), - "str": "string", + "number": 42, + "name": "john doe", + "included_file": "INCLUDES.helper", + "nil": nil, + "uint": uint(8), + "float": float64(3.1415), + "str": "string", "chinese_hello_world": "你好世界", "bool_true": true, "bool_false": false, @@ -123,22 +142,13 @@ Yep!`, "escape_js_test": `escape sequences \r\n\'\" special chars "?!=$<>`, "one_item_list": []int{99}, "multiple_item_list": []int{1, 1, 2, 3, 5, 8, 13, 21, 34, 55}, - "unsorted_int_list": []int{192, 581, 22, 1, 249, 9999, 1828591, 8271}, "misc_list": []interface{}{"Hello", 99, 3.14, "good"}, "escape_text": "This is \\a Test. \"Yep\". 'Yep'.", "xss": "", "intmap": map[int]string{ 1: "one", - 5: "five", 2: "two", - }, - "strmap": map[string]string{ - "abc": "def", - "bcd": "efg", - "zab": "cde", - "gh": "kqm", - "ukq": "qqa", - "aab": "aba", + 5: "five", }, "func_add": func(a, b int) int { return a + b @@ -157,17 +167,17 @@ Yep!`, } return s }, - "func_variadic_sum_int2": func(args ...*pongo2.Value) *pongo2.Value { + "func_variadic_sum_int2": func(args ...*Value) *Value { // Create a sum s := 0 for _, i := range args { s += i.Integer() } - return pongo2.AsValue(s) + return AsValue(s) }, }, "complex": map[string]interface{}{ - "is_admin": isAdmin, + "is_admin": is_admin, "post": post{ Text: "

    Hello!

    Welcome to my new blog page. I'm using pongo2 which supports {{ variables }} and {% tags %}.

    ", Created: time2, @@ -228,8 +238,10 @@ Yep!`, } func TestTemplates(t *testing.T) { + debug = true + // Add a global to the default set - pongo2.Globals["this_is_a_global_variable"] = "this is a global text" + Globals["this_is_a_global_variable"] = "this is a global text" matches, err := filepath.Glob("./template_tests/*.tpl") if err != nil { @@ -237,34 +249,34 @@ func TestTemplates(t *testing.T) { } for idx, match := range matches { t.Logf("[Template %3d] Testing '%s'", idx+1, match) - tpl, err := pongo2.FromFile(match) + tpl, err := FromFile(match) if err != nil { t.Fatalf("Error on FromFile('%s'): %s", match, err.Error()) } - testFilename := fmt.Sprintf("%s.out", match) - testOut, rerr := ioutil.ReadFile(testFilename) + test_filename := fmt.Sprintf("%s.out", match) + test_out, rerr := ioutil.ReadFile(test_filename) if rerr != nil { - t.Fatalf("Error on ReadFile('%s'): %s", testFilename, rerr.Error()) + t.Fatalf("Error on ReadFile('%s'): %s", test_filename, rerr.Error()) } - tplOut, err := tpl.ExecuteBytes(tplContext) + tpl_out, err := tpl.ExecuteBytes(tplContext) if err != nil { t.Fatalf("Error on Execute('%s'): %s", match, err.Error()) } - if bytes.Compare(testOut, tplOut) != 0 { - t.Logf("Template (rendered) '%s': '%s'", match, tplOut) - errFilename := filepath.Base(fmt.Sprintf("%s.error", match)) - err := ioutil.WriteFile(errFilename, []byte(tplOut), 0600) + if bytes.Compare(test_out, tpl_out) != 0 { + t.Logf("Template (rendered) '%s': '%s'", match, tpl_out) + err_filename := filepath.Base(fmt.Sprintf("%s.error", match)) + err := ioutil.WriteFile(err_filename, []byte(tpl_out), 0600) if err != nil { t.Fatalf(err.Error()) } - t.Logf("get a complete diff with command: 'diff -ya %s %s'", testFilename, errFilename) + t.Logf("get a complete diff with command: 'diff -ya %s %s'", test_filename, err_filename) t.Errorf("Failed: test_out != tpl_out for %s", match) } } } func TestExecutionErrors(t *testing.T) { - //debug = true + debug = true matches, err := filepath.Glob("./template_tests/*-execution.err") if err != nil { @@ -273,15 +285,15 @@ func TestExecutionErrors(t *testing.T) { for idx, match := range matches { t.Logf("[Errors %3d] Testing '%s'", idx+1, match) - testData, err := ioutil.ReadFile(match) - tests := strings.Split(string(testData), "\n") + test_data, err := ioutil.ReadFile(match) + tests := strings.Split(string(test_data), "\n") - checkFilename := fmt.Sprintf("%s.out", match) - checkData, err := ioutil.ReadFile(checkFilename) + check_filename := fmt.Sprintf("%s.out", match) + check_data, err := ioutil.ReadFile(check_filename) if err != nil { - t.Fatalf("Error on ReadFile('%s'): %s", checkFilename, err.Error()) + t.Fatalf("Error on ReadFile('%s'): %s", check_filename, err.Error()) } - checks := strings.Split(string(checkData), "\n") + checks := strings.Split(string(check_data), "\n") if len(checks) != len(tests) { t.Fatal("Template lines != Checks lines") @@ -296,7 +308,7 @@ func TestExecutionErrors(t *testing.T) { match, idx+1) } - tpl, err := pongo2.FromString(test) + tpl, err := FromString(test) if err != nil { t.Fatalf("Error on FromString('%s'): %s", test, err.Error()) } @@ -317,7 +329,7 @@ func TestExecutionErrors(t *testing.T) { } func TestCompilationErrors(t *testing.T) { - //debug = true + debug = true matches, err := filepath.Glob("./template_tests/*-compilation.err") if err != nil { @@ -326,15 +338,15 @@ func TestCompilationErrors(t *testing.T) { for idx, match := range matches { t.Logf("[Errors %3d] Testing '%s'", idx+1, match) - testData, err := ioutil.ReadFile(match) - tests := strings.Split(string(testData), "\n") + test_data, err := ioutil.ReadFile(match) + tests := strings.Split(string(test_data), "\n") - checkFilename := fmt.Sprintf("%s.out", match) - checkData, err := ioutil.ReadFile(checkFilename) + check_filename := fmt.Sprintf("%s.out", match) + check_data, err := ioutil.ReadFile(check_filename) if err != nil { - t.Fatalf("Error on ReadFile('%s'): %s", checkFilename, err.Error()) + t.Fatalf("Error on ReadFile('%s'): %s", check_filename, err.Error()) } - checks := strings.Split(string(checkData), "\n") + checks := strings.Split(string(check_data), "\n") if len(checks) != len(tests) { t.Fatal("Template lines != Checks lines") @@ -349,7 +361,7 @@ func TestCompilationErrors(t *testing.T) { match, idx+1) } - _, err = pongo2.FromString(test) + _, err = FromString(test) if err == nil { t.Fatalf("[%s | Line %d] Expected error for (got none): %s", match, idx+1, tests[idx]) } @@ -365,10 +377,9 @@ func TestCompilationErrors(t *testing.T) { func TestBaseDirectory(t *testing.T) { mustStr := "Hello from template_tests/base_dir_test/" - fs := pongo2.MustNewLocalFileSystemLoader("") - s := pongo2.NewSet("test set with base directory", fs) + s := NewSet("test set with base directory") s.Globals["base_directory"] = "template_tests/base_dir_test/" - if err := fs.SetBaseDir(s.Globals["base_directory"].(string)); err != nil { + if err := s.SetBaseDirectory(s.Globals["base_directory"].(string)); err != nil { t.Fatal(err) } @@ -394,13 +405,13 @@ func TestBaseDirectory(t *testing.T) { } func BenchmarkCache(b *testing.B) { - cacheSet := pongo2.NewSet("cache set", pongo2.MustNewLocalFileSystemLoader("")) + cache_set := NewSet("cache set") for i := 0; i < b.N; i++ { - tpl, err := cacheSet.FromCache("template_tests/complex.tpl") + tpl, err := cache_set.FromCache("template_tests/complex.tpl") if err != nil { b.Fatal(err) } - err = tpl.ExecuteWriterUnbuffered(tplContext, ioutil.Discard) + _, err = tpl.ExecuteBytes(tplContext) if err != nil { b.Fatal(err) } @@ -408,14 +419,14 @@ func BenchmarkCache(b *testing.B) { } func BenchmarkCacheDebugOn(b *testing.B) { - cacheDebugSet := pongo2.NewSet("cache set", pongo2.MustNewLocalFileSystemLoader("")) - cacheDebugSet.Debug = true + cache_debug_set := NewSet("cache set") + cache_debug_set.Debug = true for i := 0; i < b.N; i++ { - tpl, err := cacheDebugSet.FromFile("template_tests/complex.tpl") + tpl, err := cache_debug_set.FromFile("template_tests/complex.tpl") if err != nil { b.Fatal(err) } - err = tpl.ExecuteWriterUnbuffered(tplContext, ioutil.Discard) + _, err = tpl.ExecuteBytes(tplContext) if err != nil { b.Fatal(err) } @@ -423,13 +434,13 @@ func BenchmarkCacheDebugOn(b *testing.B) { } func BenchmarkExecuteComplexWithSandboxActive(b *testing.B) { - tpl, err := pongo2.FromFile("template_tests/complex.tpl") + tpl, err := FromFile("template_tests/complex.tpl") if err != nil { b.Fatal(err) } b.ResetTimer() for i := 0; i < b.N; i++ { - err = tpl.ExecuteWriterUnbuffered(tplContext, ioutil.Discard) + _, err = tpl.ExecuteBytes(tplContext) if err != nil { b.Fatal(err) } @@ -444,12 +455,12 @@ func BenchmarkCompileAndExecuteComplexWithSandboxActive(b *testing.B) { preloadedTpl := string(buf) b.ResetTimer() for i := 0; i < b.N; i++ { - tpl, err := pongo2.FromString(preloadedTpl) + tpl, err := FromString(preloadedTpl) if err != nil { b.Fatal(err) } - err = tpl.ExecuteWriterUnbuffered(tplContext, ioutil.Discard) + _, err = tpl.ExecuteBytes(tplContext) if err != nil { b.Fatal(err) } @@ -457,14 +468,14 @@ func BenchmarkCompileAndExecuteComplexWithSandboxActive(b *testing.B) { } func BenchmarkParallelExecuteComplexWithSandboxActive(b *testing.B) { - tpl, err := pongo2.FromFile("template_tests/complex.tpl") + tpl, err := FromFile("template_tests/complex.tpl") if err != nil { b.Fatal(err) } b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { - err := tpl.ExecuteWriterUnbuffered(tplContext, ioutil.Discard) + _, err := tpl.ExecuteBytes(tplContext) if err != nil { b.Fatal(err) } @@ -473,14 +484,14 @@ func BenchmarkParallelExecuteComplexWithSandboxActive(b *testing.B) { } func BenchmarkExecuteComplexWithoutSandbox(b *testing.B) { - s := pongo2.NewSet("set without sandbox", pongo2.MustNewLocalFileSystemLoader("")) + s := NewSet("set without sandbox") tpl, err := s.FromFile("template_tests/complex.tpl") if err != nil { b.Fatal(err) } b.ResetTimer() for i := 0; i < b.N; i++ { - err = tpl.ExecuteWriterUnbuffered(tplContext, ioutil.Discard) + _, err = tpl.ExecuteBytes(tplContext) if err != nil { b.Fatal(err) } @@ -494,7 +505,7 @@ func BenchmarkCompileAndExecuteComplexWithoutSandbox(b *testing.B) { } preloadedTpl := string(buf) - s := pongo2.NewSet("set without sandbox", pongo2.MustNewLocalFileSystemLoader("")) + s := NewSet("set without sandbox") b.ResetTimer() for i := 0; i < b.N; i++ { @@ -503,7 +514,7 @@ func BenchmarkCompileAndExecuteComplexWithoutSandbox(b *testing.B) { b.Fatal(err) } - err = tpl.ExecuteWriterUnbuffered(tplContext, ioutil.Discard) + _, err = tpl.ExecuteBytes(tplContext) if err != nil { b.Fatal(err) } @@ -511,7 +522,7 @@ func BenchmarkCompileAndExecuteComplexWithoutSandbox(b *testing.B) { } func BenchmarkParallelExecuteComplexWithoutSandbox(b *testing.B) { - s := pongo2.NewSet("set without sandbox", pongo2.MustNewLocalFileSystemLoader("")) + s := NewSet("set without sandbox") tpl, err := s.FromFile("template_tests/complex.tpl") if err != nil { b.Fatal(err) @@ -519,7 +530,7 @@ func BenchmarkParallelExecuteComplexWithoutSandbox(b *testing.B) { b.ResetTimer() b.RunParallel(func(pb *testing.PB) { for pb.Next() { - err := tpl.ExecuteWriterUnbuffered(tplContext, ioutil.Discard) + _, err := tpl.ExecuteBytes(tplContext) if err != nil { b.Fatal(err) } diff --git a/vendor/github.com/flosch/pongo2/pongo2_test.go b/vendor/github.com/flosch/pongo2/pongo2_test.go index ea56f0b..5f54584 100644 --- a/vendor/github.com/flosch/pongo2/pongo2_test.go +++ b/vendor/github.com/flosch/pongo2/pongo2_test.go @@ -1,10 +1,8 @@ -package pongo2_test +package pongo2 import ( "testing" - "github.com/flosch/pongo2" - . "gopkg.in/check.v1" ) @@ -13,16 +11,16 @@ import ( func Test(t *testing.T) { TestingT(t) } type TestSuite struct { - tpl *pongo2.Template + tpl *Template } var ( - _ = Suite(&TestSuite{}) - testSuite2 = pongo2.NewSet("test suite 2", pongo2.MustNewLocalFileSystemLoader("")) + _ = Suite(&TestSuite{}) + test_suite2 = NewSet("test suite 2") ) -func parseTemplate(s string, c pongo2.Context) string { - t, err := testSuite2.FromString(s) +func parseTemplate(s string, c Context) string { + t, err := test_suite2.FromString(s) if err != nil { panic(err) } @@ -33,7 +31,7 @@ func parseTemplate(s string, c pongo2.Context) string { return out } -func parseTemplateFn(s string, c pongo2.Context) func() { +func parseTemplateFn(s string, c Context) func() { return func() { parseTemplate(s, c) } @@ -42,27 +40,25 @@ func parseTemplateFn(s string, c pongo2.Context) func() { func (s *TestSuite) TestMisc(c *C) { // Must // TODO: Add better error message (see issue #18) - c.Check( - func() { pongo2.Must(testSuite2.FromFile("template_tests/inheritance/base2.tpl")) }, + c.Check(func() { Must(test_suite2.FromFile("template_tests/inheritance/base2.tpl")) }, PanicMatches, - `\[Error \(where: fromfile\) in .*template_tests/inheritance/doesnotexist.tpl | Line 1 Col 12 near 'doesnotexist.tpl'\] open .*template_tests/inheritance/doesnotexist.tpl: no such file or directory`, - ) + `\[Error \(where: fromfile\) in template_tests/inheritance/doesnotexist.tpl | Line 1 Col 12 near 'doesnotexist.tpl'\] open template_tests/inheritance/doesnotexist.tpl: no such file or directory`) // Context - c.Check(parseTemplateFn("", pongo2.Context{"'illegal": nil}), PanicMatches, ".*not a valid identifier.*") + c.Check(parseTemplateFn("", Context{"'illegal": nil}), PanicMatches, ".*not a valid identifier.*") // Registers - c.Check(func() { pongo2.RegisterFilter("escape", nil) }, PanicMatches, ".*is already registered.*") - c.Check(func() { pongo2.RegisterTag("for", nil) }, PanicMatches, ".*is already registered.*") + c.Check(func() { RegisterFilter("escape", nil) }, PanicMatches, ".*is already registered.*") + c.Check(func() { RegisterTag("for", nil) }, PanicMatches, ".*is already registered.*") // ApplyFilter - v, err := pongo2.ApplyFilter("title", pongo2.AsValue("this is a title"), nil) + v, err := ApplyFilter("title", AsValue("this is a title"), nil) if err != nil { c.Fatal(err) } c.Check(v.String(), Equals, "This Is A Title") c.Check(func() { - _, err := pongo2.ApplyFilter("doesnotexist", nil, nil) + _, err := ApplyFilter("doesnotexist", nil, nil) if err != nil { panic(err) } diff --git a/vendor/github.com/flosch/pongo2/tags.go b/vendor/github.com/flosch/pongo2/tags.go index 5168d17..292c30d 100644 --- a/vendor/github.com/flosch/pongo2/tags.go +++ b/vendor/github.com/flosch/pongo2/tags.go @@ -87,46 +87,46 @@ func ReplaceTag(name string, parserFn TagParser) { // Tag = "{%" IDENT ARGS "%}" func (p *Parser) parseTagElement() (INodeTag, *Error) { p.Consume() // consume "{%" - tokenName := p.MatchType(TokenIdentifier) + token_name := p.MatchType(TokenIdentifier) // Check for identifier - if tokenName == nil { + if token_name == nil { return nil, p.Error("Tag name must be an identifier.", nil) } // Check for the existing tag - tag, exists := tags[tokenName.Val] + tag, exists := tags[token_name.Val] if !exists { // Does not exists - return nil, p.Error(fmt.Sprintf("Tag '%s' not found (or beginning tag not provided)", tokenName.Val), tokenName) + return nil, p.Error(fmt.Sprintf("Tag '%s' not found (or beginning tag not provided)", token_name.Val), token_name) } // Check sandbox tag restriction - if _, isBanned := p.template.set.bannedTags[tokenName.Val]; isBanned { - return nil, p.Error(fmt.Sprintf("Usage of tag '%s' is not allowed (sandbox restriction active).", tokenName.Val), tokenName) + if _, is_banned := p.template.set.bannedTags[token_name.Val]; is_banned { + return nil, p.Error(fmt.Sprintf("Usage of tag '%s' is not allowed (sandbox restriction active).", token_name.Val), token_name) } - var argsToken []*Token + args_token := make([]*Token, 0) for p.Peek(TokenSymbol, "%}") == nil && p.Remaining() > 0 { // Add token to args - argsToken = append(argsToken, p.Current()) + args_token = append(args_token, p.Current()) p.Consume() // next token } // EOF? if p.Remaining() == 0 { - return nil, p.Error("Unexpectedly reached EOF, no tag end found.", p.lastToken) + return nil, p.Error("Unexpectedly reached EOF, no tag end found.", p.last_token) } p.Match(TokenSymbol, "%}") - argParser := newParser(p.name, argsToken, p.template) - if len(argsToken) == 0 { + arg_parser := newParser(p.name, args_token, p.template) + if len(args_token) == 0 { // This is done to have nice EOF error messages - argParser.lastToken = tokenName + arg_parser.last_token = token_name } p.template.level++ defer func() { p.template.level-- }() - return tag.parser(p, tokenName, argParser) + return tag.parser(p, token_name, arg_parser) } diff --git a/vendor/github.com/flosch/pongo2/tags_autoescape.go b/vendor/github.com/flosch/pongo2/tags_autoescape.go index 590a1db..ec30438 100644 --- a/vendor/github.com/flosch/pongo2/tags_autoescape.go +++ b/vendor/github.com/flosch/pongo2/tags_autoescape.go @@ -1,15 +1,19 @@ package pongo2 +import ( + "bytes" +) + type tagAutoescapeNode struct { wrapper *NodeWrapper autoescape bool } -func (node *tagAutoescapeNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagAutoescapeNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { old := ctx.Autoescape ctx.Autoescape = node.autoescape - err := node.wrapper.Execute(ctx, writer) + err := node.wrapper.Execute(ctx, buffer) if err != nil { return err } @@ -20,22 +24,22 @@ func (node *tagAutoescapeNode) Execute(ctx *ExecutionContext, writer TemplateWri } func tagAutoescapeParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - autoescapeNode := &tagAutoescapeNode{} + autoescape_node := &tagAutoescapeNode{} wrapper, _, err := doc.WrapUntilTag("endautoescape") if err != nil { return nil, err } - autoescapeNode.wrapper = wrapper + autoescape_node.wrapper = wrapper - modeToken := arguments.MatchType(TokenIdentifier) - if modeToken == nil { + mode_token := arguments.MatchType(TokenIdentifier) + if mode_token == nil { return nil, arguments.Error("A mode is required for autoescape-tag.", nil) } - if modeToken.Val == "on" { - autoescapeNode.autoescape = true - } else if modeToken.Val == "off" { - autoescapeNode.autoescape = false + if mode_token.Val == "on" { + autoescape_node.autoescape = true + } else if mode_token.Val == "off" { + autoescape_node.autoescape = false } else { return nil, arguments.Error("Only 'on' or 'off' is valid as an autoescape-mode.", nil) } @@ -44,7 +48,7 @@ func tagAutoescapeParser(doc *Parser, start *Token, arguments *Parser) (INodeTag return nil, arguments.Error("Malformed autoescape-tag arguments.", nil) } - return autoescapeNode, nil + return autoescape_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_block.go b/vendor/github.com/flosch/pongo2/tags_block.go index b558930..30e205a 100644 --- a/vendor/github.com/flosch/pongo2/tags_block.go +++ b/vendor/github.com/flosch/pongo2/tags_block.go @@ -1,6 +1,7 @@ package pongo2 import ( + "bytes" "fmt" ) @@ -21,18 +22,18 @@ func (node *tagBlockNode) getBlockWrapperByName(tpl *Template) *NodeWrapper { return t } -func (node *tagBlockNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagBlockNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { tpl := ctx.template if tpl == nil { panic("internal error: tpl == nil") } // Determine the block to execute - blockWrapper := node.getBlockWrapperByName(tpl) - if blockWrapper == nil { + block_wrapper := node.getBlockWrapperByName(tpl) + if block_wrapper == nil { // fmt.Printf("could not find: %s\n", node.name) return ctx.Error("internal error: block_wrapper == nil in tagBlockNode.Execute()", nil) } - err := blockWrapper.Execute(ctx, writer) + err := block_wrapper.Execute(ctx, buffer) if err != nil { return err } @@ -47,8 +48,8 @@ func tagBlockParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Er return nil, arguments.Error("Tag 'block' requires an identifier.", nil) } - nameToken := arguments.MatchType(TokenIdentifier) - if nameToken == nil { + name_token := arguments.MatchType(TokenIdentifier) + if name_token == nil { return nil, arguments.Error("First argument for tag 'block' must be an identifier.", nil) } @@ -61,15 +62,15 @@ func tagBlockParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Er return nil, err } if endtagargs.Remaining() > 0 { - endtagnameToken := endtagargs.MatchType(TokenIdentifier) - if endtagnameToken != nil { - if endtagnameToken.Val != nameToken.Val { + endtagname_token := endtagargs.MatchType(TokenIdentifier) + if endtagname_token != nil { + if endtagname_token.Val != name_token.Val { return nil, endtagargs.Error(fmt.Sprintf("Name for 'endblock' must equal to 'block'-tag's name ('%s' != '%s').", - nameToken.Val, endtagnameToken.Val), nil) + name_token.Val, endtagname_token.Val), nil) } } - if endtagnameToken == nil || endtagargs.Remaining() > 0 { + if endtagname_token == nil || endtagargs.Remaining() > 0 { return nil, endtagargs.Error("Either no or only one argument (identifier) allowed for 'endblock'.", nil) } } @@ -78,14 +79,14 @@ func tagBlockParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Er if tpl == nil { panic("internal error: tpl == nil") } - _, hasBlock := tpl.blocks[nameToken.Val] - if !hasBlock { - tpl.blocks[nameToken.Val] = wrapper + _, has_block := tpl.blocks[name_token.Val] + if !has_block { + tpl.blocks[name_token.Val] = wrapper } else { - return nil, arguments.Error(fmt.Sprintf("Block named '%s' already defined", nameToken.Val), nil) + return nil, arguments.Error(fmt.Sprintf("Block named '%s' already defined", name_token.Val), nil) } - return &tagBlockNode{name: nameToken.Val}, nil + return &tagBlockNode{name: name_token.Val}, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_comment.go b/vendor/github.com/flosch/pongo2/tags_comment.go index a66a973..8c22496 100644 --- a/vendor/github.com/flosch/pongo2/tags_comment.go +++ b/vendor/github.com/flosch/pongo2/tags_comment.go @@ -1,13 +1,17 @@ package pongo2 +import ( + "bytes" +) + type tagCommentNode struct{} -func (node *tagCommentNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagCommentNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { return nil } func tagCommentParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - commentNode := &tagCommentNode{} + comment_node := &tagCommentNode{} // TODO: Process the endtag's arguments (see django 'comment'-tag documentation) _, _, err := doc.WrapUntilTag("endcomment") @@ -19,7 +23,7 @@ func tagCommentParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, * return nil, arguments.Error("Tag 'comment' does not take any argument.", nil) } - return commentNode, nil + return comment_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_cycle.go b/vendor/github.com/flosch/pongo2/tags_cycle.go index 9b83b9b..6a6830e 100644 --- a/vendor/github.com/flosch/pongo2/tags_cycle.go +++ b/vendor/github.com/flosch/pongo2/tags_cycle.go @@ -1,5 +1,9 @@ package pongo2 +import ( + "bytes" +) + type tagCycleValue struct { node *tagCycleNode value *Value @@ -9,7 +13,7 @@ type tagCycleNode struct { position *Token args []IEvaluator idx int - asName string + as_name string silent bool } @@ -17,7 +21,7 @@ func (cv *tagCycleValue) String() string { return cv.value.String() } -func (node *tagCycleNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagCycleNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { item := node.args[node.idx%len(node.args)] node.idx++ @@ -42,21 +46,21 @@ func (node *tagCycleNode) Execute(ctx *ExecutionContext, writer TemplateWriter) t.value = val if !t.node.silent { - writer.WriteString(val.String()) + buffer.WriteString(val.String()) } } else { // Regular call - cycleValue := &tagCycleValue{ + cycle_value := &tagCycleValue{ node: node, value: val, } - if node.asName != "" { - ctx.Private[node.asName] = cycleValue + if node.as_name != "" { + ctx.Private[node.as_name] = cycle_value } if !node.silent { - writer.WriteString(val.String()) + buffer.WriteString(val.String()) } } @@ -65,7 +69,7 @@ func (node *tagCycleNode) Execute(ctx *ExecutionContext, writer TemplateWriter) // HINT: We're not supporting the old comma-seperated list of expresions argument-style func tagCycleParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - cycleNode := &tagCycleNode{ + cycle_node := &tagCycleNode{ position: start, } @@ -74,19 +78,19 @@ func tagCycleParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Er if err != nil { return nil, err } - cycleNode.args = append(cycleNode.args, node) + cycle_node.args = append(cycle_node.args, node) if arguments.MatchOne(TokenKeyword, "as") != nil { // as - nameToken := arguments.MatchType(TokenIdentifier) - if nameToken == nil { + name_token := arguments.MatchType(TokenIdentifier) + if name_token == nil { return nil, arguments.Error("Name (identifier) expected after 'as'.", nil) } - cycleNode.asName = nameToken.Val + cycle_node.as_name = name_token.Val if arguments.MatchOne(TokenIdentifier, "silent") != nil { - cycleNode.silent = true + cycle_node.silent = true } // Now we're finished @@ -98,7 +102,7 @@ func tagCycleParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Er return nil, arguments.Error("Malformed cycle-tag.", nil) } - return cycleNode, nil + return cycle_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_extends.go b/vendor/github.com/flosch/pongo2/tags_extends.go index 5771020..6abbb6b 100644 --- a/vendor/github.com/flosch/pongo2/tags_extends.go +++ b/vendor/github.com/flosch/pongo2/tags_extends.go @@ -1,15 +1,19 @@ package pongo2 +import ( + "bytes" +) + type tagExtendsNode struct { filename string } -func (node *tagExtendsNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagExtendsNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { return nil } func tagExtendsParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - extendsNode := &tagExtendsNode{} + extends_node := &tagExtendsNode{} if doc.template.level > 1 { return nil, arguments.Error("The 'extends' tag can only defined on root level.", start) @@ -20,22 +24,22 @@ func tagExtendsParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, * return nil, arguments.Error("This template has already one parent.", start) } - if filenameToken := arguments.MatchType(TokenString); filenameToken != nil { + if filename_token := arguments.MatchType(TokenString); filename_token != nil { // prepared, static template // Get parent's filename - parentFilename := doc.template.set.resolveFilename(doc.template, filenameToken.Val) + parent_filename := doc.template.set.resolveFilename(doc.template, filename_token.Val) // Parse the parent - parentTemplate, err := doc.template.set.FromFile(parentFilename) + parent_template, err := doc.template.set.FromFile(parent_filename) if err != nil { return nil, err.(*Error) } // Keep track of things - parentTemplate.child = doc.template - doc.template.parent = parentTemplate - extendsNode.filename = parentFilename + parent_template.child = doc.template + doc.template.parent = parent_template + extends_node.filename = parent_filename } else { return nil, arguments.Error("Tag 'extends' requires a template filename as string.", nil) } @@ -44,7 +48,7 @@ func tagExtendsParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, * return nil, arguments.Error("Tag 'extends' does only take 1 argument.", nil) } - return extendsNode, nil + return extends_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_filter.go b/vendor/github.com/flosch/pongo2/tags_filter.go index b38fd92..f421e5a 100644 --- a/vendor/github.com/flosch/pongo2/tags_filter.go +++ b/vendor/github.com/flosch/pongo2/tags_filter.go @@ -5,8 +5,8 @@ import ( ) type nodeFilterCall struct { - name string - paramExpr IEvaluator + name string + param_expr IEvaluator } type tagFilterNode struct { @@ -15,7 +15,7 @@ type tagFilterNode struct { filterChain []*nodeFilterCall } -func (node *tagFilterNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagFilterNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { temp := bytes.NewBuffer(make([]byte, 0, 1024)) // 1 KiB size err := node.bodyWrapper.Execute(ctx, temp) @@ -27,8 +27,8 @@ func (node *tagFilterNode) Execute(ctx *ExecutionContext, writer TemplateWriter) for _, call := range node.filterChain { var param *Value - if call.paramExpr != nil { - param, err = call.paramExpr.Evaluate(ctx) + if call.param_expr != nil { + param, err = call.param_expr.Evaluate(ctx) if err != nil { return err } @@ -41,13 +41,13 @@ func (node *tagFilterNode) Execute(ctx *ExecutionContext, writer TemplateWriter) } } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } func tagFilterParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - filterNode := &tagFilterNode{ + filter_node := &tagFilterNode{ position: start, } @@ -55,16 +55,16 @@ func tagFilterParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *E if err != nil { return nil, err } - filterNode.bodyWrapper = wrapper + filter_node.bodyWrapper = wrapper for arguments.Remaining() > 0 { filterCall := &nodeFilterCall{} - nameToken := arguments.MatchType(TokenIdentifier) - if nameToken == nil { + name_token := arguments.MatchType(TokenIdentifier) + if name_token == nil { return nil, arguments.Error("Expected a filter name (identifier).", nil) } - filterCall.name = nameToken.Val + filterCall.name = name_token.Val if arguments.MatchOne(TokenSymbol, ":") != nil { // Filter parameter @@ -73,10 +73,10 @@ func tagFilterParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *E if err != nil { return nil, err } - filterCall.paramExpr = expr + filterCall.param_expr = expr } - filterNode.filterChain = append(filterNode.filterChain, filterCall) + filter_node.filterChain = append(filter_node.filterChain, filterCall) if arguments.MatchOne(TokenSymbol, "|") == nil { break @@ -87,7 +87,7 @@ func tagFilterParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *E return nil, arguments.Error("Malformed filter-tag arguments.", nil) } - return filterNode, nil + return filter_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_firstof.go b/vendor/github.com/flosch/pongo2/tags_firstof.go index 5b2888e..b677979 100644 --- a/vendor/github.com/flosch/pongo2/tags_firstof.go +++ b/vendor/github.com/flosch/pongo2/tags_firstof.go @@ -1,11 +1,15 @@ package pongo2 +import ( + "bytes" +) + type tagFirstofNode struct { position *Token args []IEvaluator } -func (node *tagFirstofNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagFirstofNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { for _, arg := range node.args { val, err := arg.Evaluate(ctx) if err != nil { @@ -20,7 +24,7 @@ func (node *tagFirstofNode) Execute(ctx *ExecutionContext, writer TemplateWriter } } - writer.WriteString(val.String()) + buffer.WriteString(val.String()) return nil } } @@ -29,7 +33,7 @@ func (node *tagFirstofNode) Execute(ctx *ExecutionContext, writer TemplateWriter } func tagFirstofParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - firstofNode := &tagFirstofNode{ + firstof_node := &tagFirstofNode{ position: start, } @@ -38,10 +42,10 @@ func tagFirstofParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, * if err != nil { return nil, err } - firstofNode.args = append(firstofNode.args, node) + firstof_node.args = append(firstof_node.args, node) } - return firstofNode, nil + return firstof_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_for.go b/vendor/github.com/flosch/pongo2/tags_for.go index 5b0b555..de56699 100644 --- a/vendor/github.com/flosch/pongo2/tags_for.go +++ b/vendor/github.com/flosch/pongo2/tags_for.go @@ -1,11 +1,14 @@ package pongo2 +import ( + "bytes" +) + type tagForNode struct { - key string - value string // only for maps: for key, value in map - objectEvaluator IEvaluator - reversed bool - sorted bool + key string + value string // only for maps: for key, value in map + object_evaluator IEvaluator + reversed bool bodyWrapper *NodeWrapper emptyWrapper *NodeWrapper @@ -21,7 +24,7 @@ type tagForLoopInformation struct { Parentloop *tagForLoopInformation } -func (node *tagForNode) Execute(ctx *ExecutionContext, writer TemplateWriter) (forError *Error) { +func (node *tagForNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) (forError *Error) { // Backup forloop (as parentloop in public context), key-name and value-name forCtx := NewChildExecutionContext(ctx) parentloop := forCtx.Private["forloop"] @@ -39,7 +42,7 @@ func (node *tagForNode) Execute(ctx *ExecutionContext, writer TemplateWriter) (f // Register loopInfo in public context forCtx.Private["forloop"] = loopInfo - obj, err := node.objectEvaluator.Evaluate(forCtx) + obj, err := node.object_evaluator.Evaluate(forCtx) if err != nil { return err } @@ -64,7 +67,7 @@ func (node *tagForNode) Execute(ctx *ExecutionContext, writer TemplateWriter) (f loopInfo.Revcounter0 = count - (idx + 1) // TODO: Not sure about this, have to look it up // Render elements with updated context - err := node.bodyWrapper.Execute(forCtx, writer) + err := node.bodyWrapper.Execute(forCtx, buffer) if err != nil { forError = err return false @@ -73,30 +76,30 @@ func (node *tagForNode) Execute(ctx *ExecutionContext, writer TemplateWriter) (f }, func() { // Nothing to iterate over (maybe wrong type or no items) if node.emptyWrapper != nil { - err := node.emptyWrapper.Execute(forCtx, writer) + err := node.emptyWrapper.Execute(forCtx, buffer) if err != nil { forError = err } } - }, node.reversed, node.sorted) + }, node.reversed) - return forError + return nil } func tagForParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - forNode := &tagForNode{} + for_node := &tagForNode{} // Arguments parsing - var valueToken *Token - keyToken := arguments.MatchType(TokenIdentifier) - if keyToken == nil { + var value_token *Token + key_token := arguments.MatchType(TokenIdentifier) + if key_token == nil { return nil, arguments.Error("Expected an key identifier as first argument for 'for'-tag", nil) } if arguments.Match(TokenSymbol, ",") != nil { // Value name is provided - valueToken = arguments.MatchType(TokenIdentifier) - if valueToken == nil { + value_token = arguments.MatchType(TokenIdentifier) + if value_token == nil { return nil, arguments.Error("Value name must be an identifier.", nil) } } @@ -105,22 +108,18 @@ func tagForParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Erro return nil, arguments.Error("Expected keyword 'in'.", nil) } - objectEvaluator, err := arguments.ParseExpression() + object_evaluator, err := arguments.ParseExpression() if err != nil { return nil, err } - forNode.objectEvaluator = objectEvaluator - forNode.key = keyToken.Val - if valueToken != nil { - forNode.value = valueToken.Val + for_node.object_evaluator = object_evaluator + for_node.key = key_token.Val + if value_token != nil { + for_node.value = value_token.Val } if arguments.MatchOne(TokenIdentifier, "reversed") != nil { - forNode.reversed = true - } - - if arguments.MatchOne(TokenIdentifier, "sorted") != nil { - forNode.sorted = true + for_node.reversed = true } if arguments.Remaining() > 0 { @@ -132,7 +131,7 @@ func tagForParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Erro if err != nil { return nil, err } - forNode.bodyWrapper = wrapper + for_node.bodyWrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) @@ -144,14 +143,14 @@ func tagForParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Erro if err != nil { return nil, err } - forNode.emptyWrapper = wrapper + for_node.emptyWrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) } } - return forNode, nil + return for_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_if.go b/vendor/github.com/flosch/pongo2/tags_if.go index 3eeaf3b..2515c44 100644 --- a/vendor/github.com/flosch/pongo2/tags_if.go +++ b/vendor/github.com/flosch/pongo2/tags_if.go @@ -1,11 +1,15 @@ package pongo2 +import ( + "bytes" +) + type tagIfNode struct { conditions []IEvaluator wrappers []*NodeWrapper } -func (node *tagIfNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagIfNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { for i, condition := range node.conditions { result, err := condition.Evaluate(ctx) if err != nil { @@ -13,25 +17,26 @@ func (node *tagIfNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Er } if result.IsTrue() { - return node.wrappers[i].Execute(ctx, writer) - } - // Last condition? - if len(node.conditions) == i+1 && len(node.wrappers) > i+1 { - return node.wrappers[i+1].Execute(ctx, writer) + return node.wrappers[i].Execute(ctx, buffer) + } else { + // Last condition? + if len(node.conditions) == i+1 && len(node.wrappers) > i+1 { + return node.wrappers[i+1].Execute(ctx, buffer) + } } } return nil } func tagIfParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - ifNode := &tagIfNode{} + if_node := &tagIfNode{} // Parse first and main IF condition condition, err := arguments.ParseExpression() if err != nil { return nil, err } - ifNode.conditions = append(ifNode.conditions, condition) + if_node.conditions = append(if_node.conditions, condition) if arguments.Remaining() > 0 { return nil, arguments.Error("If-condition is malformed.", nil) @@ -39,27 +44,27 @@ func tagIfParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error // Check the rest for { - wrapper, tagArgs, err := doc.WrapUntilTag("elif", "else", "endif") + wrapper, tag_args, err := doc.WrapUntilTag("elif", "else", "endif") if err != nil { return nil, err } - ifNode.wrappers = append(ifNode.wrappers, wrapper) + if_node.wrappers = append(if_node.wrappers, wrapper) if wrapper.Endtag == "elif" { // elif can take a condition - condition, err = tagArgs.ParseExpression() + condition, err := tag_args.ParseExpression() if err != nil { return nil, err } - ifNode.conditions = append(ifNode.conditions, condition) + if_node.conditions = append(if_node.conditions, condition) - if tagArgs.Remaining() > 0 { - return nil, tagArgs.Error("Elif-condition is malformed.", nil) + if tag_args.Remaining() > 0 { + return nil, tag_args.Error("Elif-condition is malformed.", nil) } } else { - if tagArgs.Count() > 0 { + if tag_args.Count() > 0 { // else/endif can't take any conditions - return nil, tagArgs.Error("Arguments not allowed here.", nil) + return nil, tag_args.Error("Arguments not allowed here.", nil) } } @@ -68,7 +73,7 @@ func tagIfParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error } } - return ifNode, nil + return if_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_ifchanged.go b/vendor/github.com/flosch/pongo2/tags_ifchanged.go index 45296a0..4412ace 100644 --- a/vendor/github.com/flosch/pongo2/tags_ifchanged.go +++ b/vendor/github.com/flosch/pongo2/tags_ifchanged.go @@ -5,15 +5,16 @@ import ( ) type tagIfchangedNode struct { - watchedExpr []IEvaluator - lastValues []*Value - lastContent []byte - thenWrapper *NodeWrapper - elseWrapper *NodeWrapper + watched_expr []IEvaluator + last_values []*Value + last_content []byte + thenWrapper *NodeWrapper + elseWrapper *NodeWrapper } -func (node *tagIfchangedNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - if len(node.watchedExpr) == 0 { +func (node *tagIfchangedNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + + if len(node.watched_expr) == 0 { // Check against own rendered body buf := bytes.NewBuffer(make([]byte, 0, 1024)) // 1 KiB @@ -22,43 +23,43 @@ func (node *tagIfchangedNode) Execute(ctx *ExecutionContext, writer TemplateWrit return err } - bufBytes := buf.Bytes() - if !bytes.Equal(node.lastContent, bufBytes) { + buf_bytes := buf.Bytes() + if !bytes.Equal(node.last_content, buf_bytes) { // Rendered content changed, output it - writer.Write(bufBytes) - node.lastContent = bufBytes + buffer.Write(buf_bytes) + node.last_content = buf_bytes } } else { - nowValues := make([]*Value, 0, len(node.watchedExpr)) - for _, expr := range node.watchedExpr { + now_values := make([]*Value, 0, len(node.watched_expr)) + for _, expr := range node.watched_expr { val, err := expr.Evaluate(ctx) if err != nil { return err } - nowValues = append(nowValues, val) + now_values = append(now_values, val) } // Compare old to new values now - changed := len(node.lastValues) == 0 + changed := len(node.last_values) == 0 - for idx, oldVal := range node.lastValues { - if !oldVal.EqualValueTo(nowValues[idx]) { + for idx, old_val := range node.last_values { + if !old_val.EqualValueTo(now_values[idx]) { changed = true break // we can stop here because ONE value changed } } - node.lastValues = nowValues + node.last_values = now_values if changed { // Render thenWrapper - err := node.thenWrapper.Execute(ctx, writer) + err := node.thenWrapper.Execute(ctx, buffer) if err != nil { return err } } else { // Render elseWrapper - err := node.elseWrapper.Execute(ctx, writer) + err := node.elseWrapper.Execute(ctx, buffer) if err != nil { return err } @@ -69,7 +70,7 @@ func (node *tagIfchangedNode) Execute(ctx *ExecutionContext, writer TemplateWrit } func tagIfchangedParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - ifchangedNode := &tagIfchangedNode{} + ifchanged_node := &tagIfchangedNode{} for arguments.Remaining() > 0 { // Parse condition @@ -77,7 +78,7 @@ func tagIfchangedParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, if err != nil { return nil, err } - ifchangedNode.watchedExpr = append(ifchangedNode.watchedExpr, expr) + ifchanged_node.watched_expr = append(ifchanged_node.watched_expr, expr) } if arguments.Remaining() > 0 { @@ -89,7 +90,7 @@ func tagIfchangedParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, if err != nil { return nil, err } - ifchangedNode.thenWrapper = wrapper + ifchanged_node.thenWrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) @@ -101,14 +102,14 @@ func tagIfchangedParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, if err != nil { return nil, err } - ifchangedNode.elseWrapper = wrapper + ifchanged_node.elseWrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) } } - return ifchangedNode, nil + return ifchanged_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_ifequal.go b/vendor/github.com/flosch/pongo2/tags_ifequal.go index 103f1c7..035b8fd 100644 --- a/vendor/github.com/flosch/pongo2/tags_ifequal.go +++ b/vendor/github.com/flosch/pongo2/tags_ifequal.go @@ -1,12 +1,16 @@ package pongo2 +import ( + "bytes" +) + type tagIfEqualNode struct { var1, var2 IEvaluator thenWrapper *NodeWrapper elseWrapper *NodeWrapper } -func (node *tagIfEqualNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagIfEqualNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { r1, err := node.var1.Evaluate(ctx) if err != nil { return err @@ -19,16 +23,17 @@ func (node *tagIfEqualNode) Execute(ctx *ExecutionContext, writer TemplateWriter result := r1.EqualValueTo(r2) if result { - return node.thenWrapper.Execute(ctx, writer) - } - if node.elseWrapper != nil { - return node.elseWrapper.Execute(ctx, writer) + return node.thenWrapper.Execute(ctx, buffer) + } else { + if node.elseWrapper != nil { + return node.elseWrapper.Execute(ctx, buffer) + } } return nil } func tagIfEqualParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - ifequalNode := &tagIfEqualNode{} + ifequal_node := &tagIfEqualNode{} // Parse two expressions var1, err := arguments.ParseExpression() @@ -39,8 +44,8 @@ func tagIfEqualParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, * if err != nil { return nil, err } - ifequalNode.var1 = var1 - ifequalNode.var2 = var2 + ifequal_node.var1 = var1 + ifequal_node.var2 = var2 if arguments.Remaining() > 0 { return nil, arguments.Error("ifequal only takes 2 arguments.", nil) @@ -51,7 +56,7 @@ func tagIfEqualParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, * if err != nil { return nil, err } - ifequalNode.thenWrapper = wrapper + ifequal_node.thenWrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) @@ -63,14 +68,14 @@ func tagIfEqualParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, * if err != nil { return nil, err } - ifequalNode.elseWrapper = wrapper + ifequal_node.elseWrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) } } - return ifequalNode, nil + return ifequal_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_ifnotequal.go b/vendor/github.com/flosch/pongo2/tags_ifnotequal.go index 0d287d3..1c1ba53 100644 --- a/vendor/github.com/flosch/pongo2/tags_ifnotequal.go +++ b/vendor/github.com/flosch/pongo2/tags_ifnotequal.go @@ -1,12 +1,16 @@ package pongo2 +import ( + "bytes" +) + type tagIfNotEqualNode struct { var1, var2 IEvaluator thenWrapper *NodeWrapper elseWrapper *NodeWrapper } -func (node *tagIfNotEqualNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagIfNotEqualNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { r1, err := node.var1.Evaluate(ctx) if err != nil { return err @@ -19,16 +23,17 @@ func (node *tagIfNotEqualNode) Execute(ctx *ExecutionContext, writer TemplateWri result := !r1.EqualValueTo(r2) if result { - return node.thenWrapper.Execute(ctx, writer) - } - if node.elseWrapper != nil { - return node.elseWrapper.Execute(ctx, writer) + return node.thenWrapper.Execute(ctx, buffer) + } else { + if node.elseWrapper != nil { + return node.elseWrapper.Execute(ctx, buffer) + } } return nil } func tagIfNotEqualParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - ifnotequalNode := &tagIfNotEqualNode{} + ifnotequal_node := &tagIfNotEqualNode{} // Parse two expressions var1, err := arguments.ParseExpression() @@ -39,19 +44,19 @@ func tagIfNotEqualParser(doc *Parser, start *Token, arguments *Parser) (INodeTag if err != nil { return nil, err } - ifnotequalNode.var1 = var1 - ifnotequalNode.var2 = var2 + ifnotequal_node.var1 = var1 + ifnotequal_node.var2 = var2 if arguments.Remaining() > 0 { return nil, arguments.Error("ifequal only takes 2 arguments.", nil) } // Wrap then/else-blocks - wrapper, endargs, err := doc.WrapUntilTag("else", "endifnotequal") + wrapper, endargs, err := doc.WrapUntilTag("else", "endifequal") if err != nil { return nil, err } - ifnotequalNode.thenWrapper = wrapper + ifnotequal_node.thenWrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) @@ -59,18 +64,18 @@ func tagIfNotEqualParser(doc *Parser, start *Token, arguments *Parser) (INodeTag if wrapper.Endtag == "else" { // if there's an else in the if-statement, we need the else-Block as well - wrapper, endargs, err = doc.WrapUntilTag("endifnotequal") + wrapper, endargs, err = doc.WrapUntilTag("endifequal") if err != nil { return nil, err } - ifnotequalNode.elseWrapper = wrapper + ifnotequal_node.elseWrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) } } - return ifnotequalNode, nil + return ifnotequal_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_import.go b/vendor/github.com/flosch/pongo2/tags_import.go index 7e0d6a0..2abeccd 100644 --- a/vendor/github.com/flosch/pongo2/tags_import.go +++ b/vendor/github.com/flosch/pongo2/tags_import.go @@ -1,16 +1,18 @@ package pongo2 import ( + "bytes" "fmt" ) type tagImportNode struct { position *Token filename string + template *Template macros map[string]*tagMacroNode // alias/name -> macro instance } -func (node *tagImportNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagImportNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { for name, macro := range node.macros { func(name string, macro *tagMacroNode) { ctx.Private[name] = func(args ...*Value) *Value { @@ -22,50 +24,50 @@ func (node *tagImportNode) Execute(ctx *ExecutionContext, writer TemplateWriter) } func tagImportParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - importNode := &tagImportNode{ + import_node := &tagImportNode{ position: start, macros: make(map[string]*tagMacroNode), } - filenameToken := arguments.MatchType(TokenString) - if filenameToken == nil { + filename_token := arguments.MatchType(TokenString) + if filename_token == nil { return nil, arguments.Error("Import-tag needs a filename as string.", nil) } - importNode.filename = doc.template.set.resolveFilename(doc.template, filenameToken.Val) + import_node.filename = doc.template.set.resolveFilename(doc.template, filename_token.Val) if arguments.Remaining() == 0 { return nil, arguments.Error("You must at least specify one macro to import.", nil) } // Compile the given template - tpl, err := doc.template.set.FromFile(importNode.filename) + tpl, err := doc.template.set.FromFile(import_node.filename) if err != nil { return nil, err.(*Error).updateFromTokenIfNeeded(doc.template, start) } for arguments.Remaining() > 0 { - macroNameToken := arguments.MatchType(TokenIdentifier) - if macroNameToken == nil { + macro_name_token := arguments.MatchType(TokenIdentifier) + if macro_name_token == nil { return nil, arguments.Error("Expected macro name (identifier).", nil) } - asName := macroNameToken.Val + as_name := macro_name_token.Val if arguments.Match(TokenKeyword, "as") != nil { - aliasToken := arguments.MatchType(TokenIdentifier) - if aliasToken == nil { + alias_token := arguments.MatchType(TokenIdentifier) + if alias_token == nil { return nil, arguments.Error("Expected macro alias name (identifier).", nil) } - asName = aliasToken.Val + as_name = alias_token.Val } - macroInstance, has := tpl.exportedMacros[macroNameToken.Val] + macro_instance, has := tpl.exported_macros[macro_name_token.Val] if !has { - return nil, arguments.Error(fmt.Sprintf("Macro '%s' not found (or not exported) in '%s'.", macroNameToken.Val, - importNode.filename), macroNameToken) + return nil, arguments.Error(fmt.Sprintf("Macro '%s' not found (or not exported) in '%s'.", macro_name_token.Val, + import_node.filename), macro_name_token) } - importNode.macros[asName] = macroInstance + import_node.macros[as_name] = macro_instance if arguments.Remaining() == 0 { break @@ -76,7 +78,7 @@ func tagImportParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *E } } - return importNode, nil + return import_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_include.go b/vendor/github.com/flosch/pongo2/tags_include.go index 6d619fd..7a7cce2 100644 --- a/vendor/github.com/flosch/pongo2/tags_include.go +++ b/vendor/github.com/flosch/pongo2/tags_include.go @@ -1,38 +1,41 @@ package pongo2 +import ( + "bytes" +) + type tagIncludeNode struct { - tpl *Template - filenameEvaluator IEvaluator - lazy bool - only bool - filename string - withPairs map[string]IEvaluator - ifExists bool + tpl *Template + filename_evaluator IEvaluator + lazy bool + only bool + filename string + with_pairs map[string]IEvaluator } -func (node *tagIncludeNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagIncludeNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { // Building the context for the template - includeCtx := make(Context) + include_ctx := make(Context) // Fill the context with all data from the parent if !node.only { - includeCtx.Update(ctx.Public) - includeCtx.Update(ctx.Private) + include_ctx.Update(ctx.Public) + include_ctx.Update(ctx.Private) } // Put all custom with-pairs into the context - for key, value := range node.withPairs { + for key, value := range node.with_pairs { val, err := value.Evaluate(ctx) if err != nil { return err } - includeCtx[key] = val + include_ctx[key] = val } // Execute the template if node.lazy { // Evaluate the filename - filename, err := node.filenameEvaluator.Evaluate(ctx) + filename, err := node.filename_evaluator.Evaluate(ctx) if err != nil { return err } @@ -42,93 +45,76 @@ func (node *tagIncludeNode) Execute(ctx *ExecutionContext, writer TemplateWriter } // Get include-filename - includedFilename := ctx.template.set.resolveFilename(ctx.template, filename.String()) + included_filename := ctx.template.set.resolveFilename(ctx.template, filename.String()) - includedTpl, err2 := ctx.template.set.FromFile(includedFilename) + included_tpl, err2 := ctx.template.set.FromFile(included_filename) if err2 != nil { - // if this is ReadFile error, and "if_exists" flag is enabled - if node.ifExists && err2.(*Error).Sender == "fromfile" { - return nil - } return err2.(*Error) } - err2 = includedTpl.ExecuteWriter(includeCtx, writer) + err2 = included_tpl.ExecuteWriter(include_ctx, buffer) if err2 != nil { return err2.(*Error) } return nil + } else { + // Template is already parsed with static filename + err := node.tpl.ExecuteWriter(include_ctx, buffer) + if err != nil { + return err.(*Error) + } + return nil } - // Template is already parsed with static filename - err := node.tpl.ExecuteWriter(includeCtx, writer) - if err != nil { - return err.(*Error) - } - return nil -} - -type tagIncludeEmptyNode struct{} - -func (node *tagIncludeEmptyNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - return nil } func tagIncludeParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - includeNode := &tagIncludeNode{ - withPairs: make(map[string]IEvaluator), + include_node := &tagIncludeNode{ + with_pairs: make(map[string]IEvaluator), } - if filenameToken := arguments.MatchType(TokenString); filenameToken != nil { + if filename_token := arguments.MatchType(TokenString); filename_token != nil { // prepared, static template - // "if_exists" flag - ifExists := arguments.Match(TokenIdentifier, "if_exists") != nil - // Get include-filename - includedFilename := doc.template.set.resolveFilename(doc.template, filenameToken.Val) + included_filename := doc.template.set.resolveFilename(doc.template, filename_token.Val) // Parse the parent - includeNode.filename = includedFilename - includedTpl, err := doc.template.set.FromFile(includedFilename) + include_node.filename = included_filename + included_tpl, err := doc.template.set.FromFile(included_filename) if err != nil { - // if this is ReadFile error, and "if_exists" token presents we should create and empty node - if err.(*Error).Sender == "fromfile" && ifExists { - return &tagIncludeEmptyNode{}, nil - } - return nil, err.(*Error).updateFromTokenIfNeeded(doc.template, filenameToken) + return nil, err.(*Error).updateFromTokenIfNeeded(doc.template, filename_token) } - includeNode.tpl = includedTpl + include_node.tpl = included_tpl } else { // No String, then the user wants to use lazy-evaluation (slower, but possible) - filenameEvaluator, err := arguments.ParseExpression() + filename_evaluator, err := arguments.ParseExpression() if err != nil { - return nil, err.updateFromTokenIfNeeded(doc.template, filenameToken) + return nil, err.updateFromTokenIfNeeded(doc.template, filename_token) } - includeNode.filenameEvaluator = filenameEvaluator - includeNode.lazy = true - includeNode.ifExists = arguments.Match(TokenIdentifier, "if_exists") != nil // "if_exists" flag + include_node.filename_evaluator = filename_evaluator + include_node.lazy = true } // After having parsed the filename we're gonna parse the with+only options if arguments.Match(TokenIdentifier, "with") != nil { for arguments.Remaining() > 0 { // We have at least one key=expr pair (because of starting "with") - keyToken := arguments.MatchType(TokenIdentifier) - if keyToken == nil { + key_token := arguments.MatchType(TokenIdentifier) + if key_token == nil { return nil, arguments.Error("Expected an identifier", nil) } if arguments.Match(TokenSymbol, "=") == nil { return nil, arguments.Error("Expected '='.", nil) } - valueExpr, err := arguments.ParseExpression() + value_expr, err := arguments.ParseExpression() if err != nil { - return nil, err.updateFromTokenIfNeeded(doc.template, keyToken) + return nil, err.updateFromTokenIfNeeded(doc.template, key_token) } - includeNode.withPairs[keyToken.Val] = valueExpr + include_node.with_pairs[key_token.Val] = value_expr // Only? if arguments.Match(TokenIdentifier, "only") != nil { - includeNode.only = true + include_node.only = true break // stop parsing arguments because it's the last option } } @@ -138,7 +124,7 @@ func tagIncludeParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, * return nil, arguments.Error("Malformed 'include'-tag arguments.", nil) } - return includeNode, nil + return include_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_lorem.go b/vendor/github.com/flosch/pongo2/tags_lorem.go index 8a152b3..16b018c 100644 --- a/vendor/github.com/flosch/pongo2/tags_lorem.go +++ b/vendor/github.com/flosch/pongo2/tags_lorem.go @@ -1,6 +1,7 @@ package pongo2 import ( + "bytes" "math/rand" "strings" "time" @@ -18,64 +19,64 @@ type tagLoremNode struct { random bool // does not use the default paragraph "Lorem ipsum dolor sit amet, ..." } -func (node *tagLoremNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagLoremNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { switch node.method { case "b": if node.random { for i := 0; i < node.count; i++ { if i > 0 { - writer.WriteString("\n") + buffer.WriteString("\n") } par := tagLoremParagraphs[rand.Intn(len(tagLoremParagraphs))] - writer.WriteString(par) + buffer.WriteString(par) } } else { for i := 0; i < node.count; i++ { if i > 0 { - writer.WriteString("\n") + buffer.WriteString("\n") } par := tagLoremParagraphs[i%len(tagLoremParagraphs)] - writer.WriteString(par) + buffer.WriteString(par) } } case "w": if node.random { for i := 0; i < node.count; i++ { if i > 0 { - writer.WriteString(" ") + buffer.WriteString(" ") } word := tagLoremWords[rand.Intn(len(tagLoremWords))] - writer.WriteString(word) + buffer.WriteString(word) } } else { for i := 0; i < node.count; i++ { if i > 0 { - writer.WriteString(" ") + buffer.WriteString(" ") } word := tagLoremWords[i%len(tagLoremWords)] - writer.WriteString(word) + buffer.WriteString(word) } } case "p": if node.random { for i := 0; i < node.count; i++ { if i > 0 { - writer.WriteString("\n") + buffer.WriteString("\n") } - writer.WriteString("

    ") + buffer.WriteString("

    ") par := tagLoremParagraphs[rand.Intn(len(tagLoremParagraphs))] - writer.WriteString(par) - writer.WriteString("

    ") + buffer.WriteString(par) + buffer.WriteString("

    ") } } else { for i := 0; i < node.count; i++ { if i > 0 { - writer.WriteString("\n") + buffer.WriteString("\n") } - writer.WriteString("

    ") + buffer.WriteString("

    ") par := tagLoremParagraphs[i%len(tagLoremParagraphs)] - writer.WriteString(par) - writer.WriteString("

    ") + buffer.WriteString(par) + buffer.WriteString("

    ") } } @@ -87,33 +88,33 @@ func (node *tagLoremNode) Execute(ctx *ExecutionContext, writer TemplateWriter) } func tagLoremParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - loremNode := &tagLoremNode{ + lorem_node := &tagLoremNode{ position: start, count: 1, method: "b", } - if countToken := arguments.MatchType(TokenNumber); countToken != nil { - loremNode.count = AsValue(countToken.Val).Integer() + if count_token := arguments.MatchType(TokenNumber); count_token != nil { + lorem_node.count = AsValue(count_token.Val).Integer() } - if methodToken := arguments.MatchType(TokenIdentifier); methodToken != nil { - if methodToken.Val != "w" && methodToken.Val != "p" && methodToken.Val != "b" { + if method_token := arguments.MatchType(TokenIdentifier); method_token != nil { + if method_token.Val != "w" && method_token.Val != "p" && method_token.Val != "b" { return nil, arguments.Error("lorem-method must be either 'w', 'p' or 'b'.", nil) } - loremNode.method = methodToken.Val + lorem_node.method = method_token.Val } if arguments.MatchOne(TokenIdentifier, "random") != nil { - loremNode.random = true + lorem_node.random = true } if arguments.Remaining() > 0 { return nil, arguments.Error("Malformed lorem-tag arguments.", nil) } - return loremNode, nil + return lorem_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_macro.go b/vendor/github.com/flosch/pongo2/tags_macro.go index 18a2c3c..41cba99 100644 --- a/vendor/github.com/flosch/pongo2/tags_macro.go +++ b/vendor/github.com/flosch/pongo2/tags_macro.go @@ -6,16 +6,16 @@ import ( ) type tagMacroNode struct { - position *Token - name string - argsOrder []string - args map[string]IEvaluator - exported bool + position *Token + name string + args_order []string + args map[string]IEvaluator + exported bool wrapper *NodeWrapper } -func (node *tagMacroNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagMacroNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { ctx.Private[node.name] = func(args ...*Value) *Value { return node.call(ctx, args...) } @@ -24,28 +24,28 @@ func (node *tagMacroNode) Execute(ctx *ExecutionContext, writer TemplateWriter) } func (node *tagMacroNode) call(ctx *ExecutionContext, args ...*Value) *Value { - argsCtx := make(Context) + args_ctx := make(Context) for k, v := range node.args { if v == nil { // User did not provided a default value - argsCtx[k] = nil + args_ctx[k] = nil } else { // Evaluate the default value - valueExpr, err := v.Evaluate(ctx) + value_expr, err := v.Evaluate(ctx) if err != nil { ctx.Logf(err.Error()) return AsSafeValue(err.Error()) } - argsCtx[k] = valueExpr + args_ctx[k] = value_expr } } - if len(args) > len(node.argsOrder) { + if len(args) > len(node.args_order) { // Too many arguments, we're ignoring them and just logging into debug mode. err := ctx.Error(fmt.Sprintf("Macro '%s' called with too many arguments (%d instead of %d).", - node.name, len(args), len(node.argsOrder)), nil).updateFromTokenIfNeeded(ctx.template, node.position) + node.name, len(args), len(node.args_order)), nil).updateFromTokenIfNeeded(ctx.template, node.position) ctx.Logf(err.Error()) // TODO: This is a workaround, because the error is not returned yet to the Execution()-methods return AsSafeValue(err.Error()) @@ -55,10 +55,10 @@ func (node *tagMacroNode) call(ctx *ExecutionContext, args ...*Value) *Value { macroCtx := NewChildExecutionContext(ctx) // Register all arguments in the private context - macroCtx.Private.Update(argsCtx) + macroCtx.Private.Update(args_ctx) - for idx, argValue := range args { - macroCtx.Private[node.argsOrder[idx]] = argValue.Interface() + for idx, arg_value := range args { + macroCtx.Private[node.args_order[idx]] = arg_value.Interface() } var b bytes.Buffer @@ -71,38 +71,38 @@ func (node *tagMacroNode) call(ctx *ExecutionContext, args ...*Value) *Value { } func tagMacroParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - macroNode := &tagMacroNode{ + macro_node := &tagMacroNode{ position: start, args: make(map[string]IEvaluator), } - nameToken := arguments.MatchType(TokenIdentifier) - if nameToken == nil { + name_token := arguments.MatchType(TokenIdentifier) + if name_token == nil { return nil, arguments.Error("Macro-tag needs at least an identifier as name.", nil) } - macroNode.name = nameToken.Val + macro_node.name = name_token.Val if arguments.MatchOne(TokenSymbol, "(") == nil { return nil, arguments.Error("Expected '('.", nil) } for arguments.Match(TokenSymbol, ")") == nil { - argNameToken := arguments.MatchType(TokenIdentifier) - if argNameToken == nil { + arg_name_token := arguments.MatchType(TokenIdentifier) + if arg_name_token == nil { return nil, arguments.Error("Expected argument name as identifier.", nil) } - macroNode.argsOrder = append(macroNode.argsOrder, argNameToken.Val) + macro_node.args_order = append(macro_node.args_order, arg_name_token.Val) if arguments.Match(TokenSymbol, "=") != nil { // Default expression follows - argDefaultExpr, err := arguments.ParseExpression() + arg_default_expr, err := arguments.ParseExpression() if err != nil { return nil, err } - macroNode.args[argNameToken.Val] = argDefaultExpr + macro_node.args[arg_name_token.Val] = arg_default_expr } else { // No default expression - macroNode.args[argNameToken.Val] = nil + macro_node.args[arg_name_token.Val] = nil } if arguments.Match(TokenSymbol, ")") != nil { @@ -114,7 +114,7 @@ func tagMacroParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Er } if arguments.Match(TokenKeyword, "export") != nil { - macroNode.exported = true + macro_node.exported = true } if arguments.Remaining() > 0 { @@ -126,22 +126,22 @@ func tagMacroParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Er if err != nil { return nil, err } - macroNode.wrapper = wrapper + macro_node.wrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) } - if macroNode.exported { + if macro_node.exported { // Now register the macro if it wants to be exported - _, has := doc.template.exportedMacros[macroNode.name] + _, has := doc.template.exported_macros[macro_node.name] if has { - return nil, doc.Error(fmt.Sprintf("Another macro with name '%s' already exported.", macroNode.name), start) + return nil, doc.Error(fmt.Sprintf("Another macro with name '%s' already exported.", macro_node.name), start) } - doc.template.exportedMacros[macroNode.name] = macroNode + doc.template.exported_macros[macro_node.name] = macro_node } - return macroNode, nil + return macro_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_now.go b/vendor/github.com/flosch/pongo2/tags_now.go index d9fa4a3..0f4320f 100644 --- a/vendor/github.com/flosch/pongo2/tags_now.go +++ b/vendor/github.com/flosch/pongo2/tags_now.go @@ -1,6 +1,7 @@ package pongo2 import ( + "bytes" "time" ) @@ -10,7 +11,7 @@ type tagNowNode struct { fake bool } -func (node *tagNowNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagNowNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { var t time.Time if node.fake { t = time.Date(2014, time.February, 05, 18, 31, 45, 00, time.UTC) @@ -18,31 +19,31 @@ func (node *tagNowNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *E t = time.Now() } - writer.WriteString(t.Format(node.format)) + buffer.WriteString(t.Format(node.format)) return nil } func tagNowParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - nowNode := &tagNowNode{ + now_node := &tagNowNode{ position: start, } - formatToken := arguments.MatchType(TokenString) - if formatToken == nil { + format_token := arguments.MatchType(TokenString) + if format_token == nil { return nil, arguments.Error("Expected a format string.", nil) } - nowNode.format = formatToken.Val + now_node.format = format_token.Val if arguments.MatchOne(TokenIdentifier, "fake") != nil { - nowNode.fake = true + now_node.fake = true } if arguments.Remaining() > 0 { return nil, arguments.Error("Malformed now-tag arguments.", nil) } - return nowNode, nil + return now_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_set.go b/vendor/github.com/flosch/pongo2/tags_set.go index be121c1..2729f44 100644 --- a/vendor/github.com/flosch/pongo2/tags_set.go +++ b/vendor/github.com/flosch/pongo2/tags_set.go @@ -1,11 +1,13 @@ package pongo2 +import "bytes" + type tagSetNode struct { name string expression IEvaluator } -func (node *tagSetNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagSetNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { // Evaluate expression value, err := node.expression.Evaluate(ctx) if err != nil { diff --git a/vendor/github.com/flosch/pongo2/tags_spaceless.go b/vendor/github.com/flosch/pongo2/tags_spaceless.go index 4fa851b..a4b3003 100644 --- a/vendor/github.com/flosch/pongo2/tags_spaceless.go +++ b/vendor/github.com/flosch/pongo2/tags_spaceless.go @@ -11,7 +11,7 @@ type tagSpacelessNode struct { var tagSpacelessRegexp = regexp.MustCompile(`(?U:(<.*>))([\t\n\v\f\r ]+)(?U:(<.*>))`) -func (node *tagSpacelessNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagSpacelessNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { b := bytes.NewBuffer(make([]byte, 0, 1024)) // 1 KiB err := node.wrapper.Execute(ctx, b) @@ -28,25 +28,25 @@ func (node *tagSpacelessNode) Execute(ctx *ExecutionContext, writer TemplateWrit s = s2 } - writer.WriteString(s) + buffer.WriteString(s) return nil } func tagSpacelessParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - spacelessNode := &tagSpacelessNode{} + spaceless_node := &tagSpacelessNode{} wrapper, _, err := doc.WrapUntilTag("endspaceless") if err != nil { return nil, err } - spacelessNode.wrapper = wrapper + spaceless_node.wrapper = wrapper if arguments.Remaining() > 0 { return nil, arguments.Error("Malformed spaceless-tag arguments.", nil) } - return spacelessNode, nil + return spaceless_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_ssi.go b/vendor/github.com/flosch/pongo2/tags_ssi.go index 09c2325..3c3894f 100644 --- a/vendor/github.com/flosch/pongo2/tags_ssi.go +++ b/vendor/github.com/flosch/pongo2/tags_ssi.go @@ -1,6 +1,7 @@ package pongo2 import ( + "bytes" "io/ioutil" ) @@ -10,47 +11,47 @@ type tagSSINode struct { template *Template } -func (node *tagSSINode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagSSINode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { if node.template != nil { // Execute the template within the current context includeCtx := make(Context) includeCtx.Update(ctx.Public) includeCtx.Update(ctx.Private) - err := node.template.execute(includeCtx, writer) + err := node.template.ExecuteWriter(includeCtx, buffer) if err != nil { return err.(*Error) } } else { // Just print out the content - writer.WriteString(node.content) + buffer.WriteString(node.content) } return nil } func tagSSIParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - SSINode := &tagSSINode{} + ssi_node := &tagSSINode{} - if fileToken := arguments.MatchType(TokenString); fileToken != nil { - SSINode.filename = fileToken.Val + if file_token := arguments.MatchType(TokenString); file_token != nil { + ssi_node.filename = file_token.Val if arguments.Match(TokenIdentifier, "parsed") != nil { // parsed - temporaryTpl, err := doc.template.set.FromFile(doc.template.set.resolveFilename(doc.template, fileToken.Val)) + temporary_tpl, err := doc.template.set.FromFile(doc.template.set.resolveFilename(doc.template, file_token.Val)) if err != nil { - return nil, err.(*Error).updateFromTokenIfNeeded(doc.template, fileToken) + return nil, err.(*Error).updateFromTokenIfNeeded(doc.template, file_token) } - SSINode.template = temporaryTpl + ssi_node.template = temporary_tpl } else { // plaintext - buf, err := ioutil.ReadFile(doc.template.set.resolveFilename(doc.template, fileToken.Val)) + buf, err := ioutil.ReadFile(doc.template.set.resolveFilename(doc.template, file_token.Val)) if err != nil { return nil, (&Error{ Sender: "tag:ssi", ErrorMsg: err.Error(), - }).updateFromTokenIfNeeded(doc.template, fileToken) + }).updateFromTokenIfNeeded(doc.template, file_token) } - SSINode.content = string(buf) + ssi_node.content = string(buf) } } else { return nil, arguments.Error("First argument must be a string.", nil) @@ -60,7 +61,7 @@ func tagSSIParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Erro return nil, arguments.Error("Malformed SSI-tag argument.", nil) } - return SSINode, nil + return ssi_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_templatetag.go b/vendor/github.com/flosch/pongo2/tags_templatetag.go index 164b4dc..ffd3d9d 100644 --- a/vendor/github.com/flosch/pongo2/tags_templatetag.go +++ b/vendor/github.com/flosch/pongo2/tags_templatetag.go @@ -1,5 +1,9 @@ package pongo2 +import ( + "bytes" +) + type tagTemplateTagNode struct { content string } @@ -15,20 +19,20 @@ var templateTagMapping = map[string]string{ "closecomment": "#}", } -func (node *tagTemplateTagNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - writer.WriteString(node.content) +func (node *tagTemplateTagNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + buffer.WriteString(node.content) return nil } func tagTemplateTagParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - ttNode := &tagTemplateTagNode{} + tt_node := &tagTemplateTagNode{} - if argToken := arguments.MatchType(TokenIdentifier); argToken != nil { - output, found := templateTagMapping[argToken.Val] + if arg_token := arguments.MatchType(TokenIdentifier); arg_token != nil { + output, found := templateTagMapping[arg_token.Val] if !found { - return nil, arguments.Error("Argument not found", argToken) + return nil, arguments.Error("Argument not found", arg_token) } - ttNode.content = output + tt_node.content = output } else { return nil, arguments.Error("Identifier expected.", nil) } @@ -37,7 +41,7 @@ func tagTemplateTagParser(doc *Parser, start *Token, arguments *Parser) (INodeTa return nil, arguments.Error("Malformed templatetag-tag argument.", nil) } - return ttNode, nil + return tt_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_widthratio.go b/vendor/github.com/flosch/pongo2/tags_widthratio.go index 70c9c3e..d7d7141 100644 --- a/vendor/github.com/flosch/pongo2/tags_widthratio.go +++ b/vendor/github.com/flosch/pongo2/tags_widthratio.go @@ -1,6 +1,7 @@ package pongo2 import ( + "bytes" "fmt" "math" ) @@ -9,10 +10,10 @@ type tagWidthratioNode struct { position *Token current, max IEvaluator width IEvaluator - ctxName string + ctx_name string } -func (node *tagWidthratioNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagWidthratioNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { current, err := node.current.Evaluate(ctx) if err != nil { return err @@ -30,17 +31,17 @@ func (node *tagWidthratioNode) Execute(ctx *ExecutionContext, writer TemplateWri value := int(math.Ceil(current.Float()/max.Float()*width.Float() + 0.5)) - if node.ctxName == "" { - writer.WriteString(fmt.Sprintf("%d", value)) + if node.ctx_name == "" { + buffer.WriteString(fmt.Sprintf("%d", value)) } else { - ctx.Private[node.ctxName] = value + ctx.Private[node.ctx_name] = value } return nil } func tagWidthratioParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - widthratioNode := &tagWidthratioNode{ + widthratio_node := &tagWidthratioNode{ position: start, } @@ -48,34 +49,34 @@ func tagWidthratioParser(doc *Parser, start *Token, arguments *Parser) (INodeTag if err != nil { return nil, err } - widthratioNode.current = current + widthratio_node.current = current max, err := arguments.ParseExpression() if err != nil { return nil, err } - widthratioNode.max = max + widthratio_node.max = max width, err := arguments.ParseExpression() if err != nil { return nil, err } - widthratioNode.width = width + widthratio_node.width = width if arguments.MatchOne(TokenKeyword, "as") != nil { // Name follows - nameToken := arguments.MatchType(TokenIdentifier) - if nameToken == nil { + name_token := arguments.MatchType(TokenIdentifier) + if name_token == nil { return nil, arguments.Error("Expected name (identifier).", nil) } - widthratioNode.ctxName = nameToken.Val + widthratio_node.ctx_name = name_token.Val } if arguments.Remaining() > 0 { return nil, arguments.Error("Malformed widthratio-tag arguments.", nil) } - return widthratioNode, nil + return widthratio_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/tags_with.go b/vendor/github.com/flosch/pongo2/tags_with.go index 32b3c1c..5bf4af0 100644 --- a/vendor/github.com/flosch/pongo2/tags_with.go +++ b/vendor/github.com/flosch/pongo2/tags_with.go @@ -1,16 +1,20 @@ package pongo2 +import ( + "bytes" +) + type tagWithNode struct { - withPairs map[string]IEvaluator - wrapper *NodeWrapper + with_pairs map[string]IEvaluator + wrapper *NodeWrapper } -func (node *tagWithNode) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (node *tagWithNode) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { //new context for block withctx := NewChildExecutionContext(ctx) // Put all custom with-pairs into the context - for key, value := range node.withPairs { + for key, value := range node.with_pairs { val, err := value.Evaluate(ctx) if err != nil { return err @@ -18,12 +22,12 @@ func (node *tagWithNode) Execute(ctx *ExecutionContext, writer TemplateWriter) * withctx.Private[key] = val } - return node.wrapper.Execute(withctx, writer) + return node.wrapper.Execute(withctx, buffer) } func tagWithParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Error) { - withNode := &tagWithNode{ - withPairs: make(map[string]IEvaluator), + with_node := &tagWithNode{ + with_pairs: make(map[string]IEvaluator), } if arguments.Count() == 0 { @@ -34,7 +38,7 @@ func tagWithParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Err if err != nil { return nil, err } - withNode.wrapper = wrapper + with_node.wrapper = wrapper if endargs.Count() > 0 { return nil, endargs.Error("Arguments not allowed here.", nil) @@ -42,45 +46,45 @@ func tagWithParser(doc *Parser, start *Token, arguments *Parser) (INodeTag, *Err // Scan through all arguments to see which style the user uses (old or new style). // If we find any "as" keyword we will enforce old style; otherwise we will use new style. - oldStyle := false // by default we're using the new_style + old_style := false // by default we're using the new_style for i := 0; i < arguments.Count(); i++ { if arguments.PeekN(i, TokenKeyword, "as") != nil { - oldStyle = true + old_style = true break } } for arguments.Remaining() > 0 { - if oldStyle { - valueExpr, err := arguments.ParseExpression() + if old_style { + value_expr, err := arguments.ParseExpression() if err != nil { return nil, err } if arguments.Match(TokenKeyword, "as") == nil { return nil, arguments.Error("Expected 'as' keyword.", nil) } - keyToken := arguments.MatchType(TokenIdentifier) - if keyToken == nil { + key_token := arguments.MatchType(TokenIdentifier) + if key_token == nil { return nil, arguments.Error("Expected an identifier", nil) } - withNode.withPairs[keyToken.Val] = valueExpr + with_node.with_pairs[key_token.Val] = value_expr } else { - keyToken := arguments.MatchType(TokenIdentifier) - if keyToken == nil { + key_token := arguments.MatchType(TokenIdentifier) + if key_token == nil { return nil, arguments.Error("Expected an identifier", nil) } if arguments.Match(TokenSymbol, "=") == nil { return nil, arguments.Error("Expected '='.", nil) } - valueExpr, err := arguments.ParseExpression() + value_expr, err := arguments.ParseExpression() if err != nil { return nil, err } - withNode.withPairs[keyToken.Val] = valueExpr + with_node.with_pairs[key_token.Val] = value_expr } } - return withNode, nil + return with_node, nil } func init() { diff --git a/vendor/github.com/flosch/pongo2/template.go b/vendor/github.com/flosch/pongo2/template.go index 74bd30b..c7fe98b 100644 --- a/vendor/github.com/flosch/pongo2/template.go +++ b/vendor/github.com/flosch/pongo2/template.go @@ -6,67 +6,48 @@ import ( "io" ) -type TemplateWriter interface { - io.Writer - WriteString(string) (int, error) -} - -type templateWriter struct { - w io.Writer -} - -func (tw *templateWriter) WriteString(s string) (int, error) { - return tw.w.Write([]byte(s)) -} - -func (tw *templateWriter) Write(b []byte) (int, error) { - return tw.w.Write(b) -} - type Template struct { set *TemplateSet // Input - isTplString bool - name string - tpl string - size int + is_tpl_string bool + name string + tpl string + size int // Calculation tokens []*Token parser *Parser // first come, first serve (it's important to not override existing entries in here) - level int - parent *Template - child *Template - blocks map[string]*NodeWrapper - exportedMacros map[string]*tagMacroNode + level int + parent *Template + child *Template + blocks map[string]*NodeWrapper + exported_macros map[string]*tagMacroNode // Output root *nodeDocument } -func newTemplateString(set *TemplateSet, tpl []byte) (*Template, error) { +func newTemplateString(set *TemplateSet, tpl string) (*Template, error) { return newTemplate(set, "", true, tpl) } -func newTemplate(set *TemplateSet, name string, isTplString bool, tpl []byte) (*Template, error) { - strTpl := string(tpl) - +func newTemplate(set *TemplateSet, name string, is_tpl_string bool, tpl string) (*Template, error) { // Create the template t := &Template{ - set: set, - isTplString: isTplString, - name: name, - tpl: strTpl, - size: len(strTpl), - blocks: make(map[string]*NodeWrapper), - exportedMacros: make(map[string]*tagMacroNode), + set: set, + is_tpl_string: is_tpl_string, + name: name, + tpl: tpl, + size: len(tpl), + blocks: make(map[string]*NodeWrapper), + exported_macros: make(map[string]*tagMacroNode), } // Tokenize it - tokens, err := lex(name, strTpl) + tokens, err := lex(name, tpl) if err != nil { return nil, err } @@ -86,7 +67,11 @@ func newTemplate(set *TemplateSet, name string, isTplString bool, tpl []byte) (* return t, nil } -func (tpl *Template) execute(context Context, writer TemplateWriter) error { +func (tpl *Template) execute(context Context) (*bytes.Buffer, error) { + // Create output buffer + // We assume that the rendered template will be 30% larger + buffer := bytes.NewBuffer(make([]byte, 0, int(float64(tpl.size)*1.3))) + // Determine the parent to be executed (for template inheritance) parent := tpl for parent.parent != nil { @@ -104,14 +89,14 @@ func (tpl *Template) execute(context Context, writer TemplateWriter) error { // Check for context name syntax err := newContext.checkForValidIdentifiers() if err != nil { - return err + return nil, err } // Check for clashes with macro names - for k := range newContext { - _, has := tpl.exportedMacros[k] + for k, _ := range newContext { + _, has := tpl.exported_macros[k] if has { - return &Error{ + return nil, &Error{ Filename: tpl.name, Sender: "execution", ErrorMsg: fmt.Sprintf("Context key name '%s' clashes with macro '%s'.", k, k), @@ -125,22 +110,8 @@ func (tpl *Template) execute(context Context, writer TemplateWriter) error { ctx := newExecutionContext(parent, newContext) // Run the selected document - if err := parent.root.Execute(ctx, writer); err != nil { - return err - } - - return nil -} - -func (tpl *Template) newTemplateWriterAndExecute(context Context, writer io.Writer) error { - return tpl.execute(context, &templateWriter{w: writer}) -} - -func (tpl *Template) newBufferAndExecute(context Context) (*bytes.Buffer, error) { - // Create output buffer - // We assume that the rendered template will be 30% larger - buffer := bytes.NewBuffer(make([]byte, 0, int(float64(tpl.size)*1.3))) - if err := tpl.execute(context, buffer); err != nil { + err := parent.root.Execute(ctx, buffer) + if err != nil { return nil, err } return buffer, nil @@ -150,30 +121,30 @@ func (tpl *Template) newBufferAndExecute(context Context) (*bytes.Buffer, error) // on success. Context can be nil. Nothing is written on error; instead the error // is being returned. func (tpl *Template) ExecuteWriter(context Context, writer io.Writer) error { - buf, err := tpl.newBufferAndExecute(context) + buffer, err := tpl.execute(context) if err != nil { return err } - _, err = buf.WriteTo(writer) - if err != nil { - return err + + l := buffer.Len() + n, werr := buffer.WriteTo(writer) + if int(n) != l { + panic(fmt.Sprintf("error on writing template: n(%d) != buffer.Len(%d)", n, l)) + } + if werr != nil { + return &Error{ + Filename: tpl.name, + Sender: "execution", + ErrorMsg: werr.Error(), + } } return nil } -// Same as ExecuteWriter. The only difference between both functions is that -// this function might already have written parts of the generated template in the -// case of an execution error because there's no intermediate buffer involved for -// performance reasons. This is handy if you need high performance template -// generation or if you want to manage your own pool of buffers. -func (tpl *Template) ExecuteWriterUnbuffered(context Context, writer io.Writer) error { - return tpl.newTemplateWriterAndExecute(context, writer) -} - // Executes the template and returns the rendered template as a []byte func (tpl *Template) ExecuteBytes(context Context) ([]byte, error) { // Execute template - buffer, err := tpl.newBufferAndExecute(context) + buffer, err := tpl.execute(context) if err != nil { return nil, err } @@ -183,7 +154,7 @@ func (tpl *Template) ExecuteBytes(context Context) ([]byte, error) { // Executes the template and returns the rendered template as a string func (tpl *Template) Execute(context Context) (string, error) { // Execute template - buffer, err := tpl.newBufferAndExecute(context) + buffer, err := tpl.execute(context) if err != nil { return "", err } diff --git a/vendor/github.com/flosch/pongo2/template_loader.go b/vendor/github.com/flosch/pongo2/template_loader.go deleted file mode 100644 index abd2340..0000000 --- a/vendor/github.com/flosch/pongo2/template_loader.go +++ /dev/null @@ -1,156 +0,0 @@ -package pongo2 - -import ( - "bytes" - "fmt" - "io" - "io/ioutil" - "log" - "os" - "path/filepath" -) - -// LocalFilesystemLoader represents a local filesystem loader with basic -// BaseDirectory capabilities. The access to the local filesystem is unrestricted. -type LocalFilesystemLoader struct { - baseDir string -} - -// MustNewLocalFileSystemLoader creates a new LocalFilesystemLoader instance -// and panics if there's any error during instantiation. The parameters -// are the same like NewLocalFileSystemLoader. -func MustNewLocalFileSystemLoader(baseDir string) *LocalFilesystemLoader { - fs, err := NewLocalFileSystemLoader(baseDir) - if err != nil { - log.Panic(err) - } - return fs -} - -// NewLocalFileSystemLoader creates a new LocalFilesystemLoader and allows -// templatesto be loaded from disk (unrestricted). If any base directory -// is given (or being set using SetBaseDir), this base directory is being used -// for path calculation in template inclusions/imports. Otherwise the path -// is calculated based relatively to the including template's path. -func NewLocalFileSystemLoader(baseDir string) (*LocalFilesystemLoader, error) { - fs := &LocalFilesystemLoader{} - if baseDir != "" { - if err := fs.SetBaseDir(baseDir); err != nil { - return nil, err - } - } - return fs, nil -} - -// SetBaseDir sets the template's base directory. This directory will -// be used for any relative path in filters, tags and From*-functions to determine -// your template. See the comment for NewLocalFileSystemLoader as well. -func (fs *LocalFilesystemLoader) SetBaseDir(path string) error { - // Make the path absolute - if !filepath.IsAbs(path) { - abs, err := filepath.Abs(path) - if err != nil { - return err - } - path = abs - } - - // Check for existence - fi, err := os.Stat(path) - if err != nil { - return err - } - if !fi.IsDir() { - return fmt.Errorf("The given path '%s' is not a directory.", path) - } - - fs.baseDir = path - return nil -} - -// Get reads the path's content from your local filesystem. -func (fs *LocalFilesystemLoader) Get(path string) (io.Reader, error) { - buf, err := ioutil.ReadFile(path) - if err != nil { - return nil, err - } - return bytes.NewReader(buf), nil -} - -// Abs resolves a filename relative to the base directory. Absolute paths are allowed. -// When there's no base dir set, the absolute path to the filename -// will be calculated based on either the provided base directory (which -// might be a path of a template which includes another template) or -// the current working directory. -func (fs *LocalFilesystemLoader) Abs(base, name string) string { - if filepath.IsAbs(name) { - return name - } - - // Our own base dir has always priority; if there's none - // we use the path provided in base. - var err error - if fs.baseDir == "" { - if base == "" { - base, err = os.Getwd() - if err != nil { - panic(err) - } - return filepath.Join(base, name) - } - - return filepath.Join(filepath.Dir(base), name) - } - - return filepath.Join(fs.baseDir, name) -} - -// SandboxedFilesystemLoader is still WIP. -type SandboxedFilesystemLoader struct { - *LocalFilesystemLoader -} - -// NewSandboxedFilesystemLoader creates a new sandboxed local file system instance. -func NewSandboxedFilesystemLoader(baseDir string) (*SandboxedFilesystemLoader, error) { - fs, err := NewLocalFileSystemLoader(baseDir) - if err != nil { - return nil, err - } - return &SandboxedFilesystemLoader{ - LocalFilesystemLoader: fs, - }, nil -} - -// Move sandbox to a virtual fs - -/* -if len(set.SandboxDirectories) > 0 { - defer func() { - // Remove any ".." or other crap - resolvedPath = filepath.Clean(resolvedPath) - - // Make the path absolute - absPath, err := filepath.Abs(resolvedPath) - if err != nil { - panic(err) - } - resolvedPath = absPath - - // Check against the sandbox directories (once one pattern matches, we're done and can allow it) - for _, pattern := range set.SandboxDirectories { - matched, err := filepath.Match(pattern, resolvedPath) - if err != nil { - panic("Wrong sandbox directory match pattern (see http://golang.org/pkg/path/filepath/#Match).") - } - if matched { - // OK! - return - } - } - - // No pattern matched, we have to log+deny the request - set.logf("Access attempt outside of the sandbox directories (blocked): '%s'", resolvedPath) - resolvedPath = "" - }() -} -*/ diff --git a/vendor/github.com/flosch/pongo2/template_sets.go b/vendor/github.com/flosch/pongo2/template_sets.go index bcd8a63..c582c5d 100644 --- a/vendor/github.com/flosch/pongo2/template_sets.go +++ b/vendor/github.com/flosch/pongo2/template_sets.go @@ -1,49 +1,49 @@ package pongo2 import ( - "errors" "fmt" - "io" "io/ioutil" "log" "os" + "path/filepath" "sync" ) -// TemplateLoader allows to implement a virtual file system. -type TemplateLoader interface { - // Abs calculates the path to a given template. Whenever a path must be resolved - // due to an import from another template, the base equals the parent template's path. - Abs(base, name string) string - - // Get returns an io.Reader where the template's content can be read from. - Get(path string) (io.Reader, error) -} - -// TemplateSet allows you to create your own group of templates with their own -// global context (which is shared among all members of the set) and their own -// configuration. -// It's useful for a separation of different kind of templates -// (e. g. web templates vs. mail templates). +// A template set allows you to create your own group of templates with their own global context (which is shared +// among all members of the set), their own configuration (like a specific base directory) and their own sandbox. +// It's useful for a separation of different kind of templates (e. g. web templates vs. mail templates). type TemplateSet struct { - name string - loader TemplateLoader + name string // Globals will be provided to all templates created within this template set Globals Context - // If debug is true (default false), ExecutionContext.Logf() will work and output - // to STDOUT. Furthermore, FromCache() won't cache the templates. - // Make sure to synchronize the access to it in case you're changing this + // If debug is true (default false), ExecutionContext.Logf() will work and output to STDOUT. Furthermore, + // FromCache() won't cache the templates. Make sure to synchronize the access to it in case you're changing this // variable during program execution (and template compilation/execution). Debug bool + // Base directory: If you set the base directory (string is non-empty), all filename lookups in tags/filters are + // relative to this directory. If it's empty, all lookups are relative to the current filename which is importing. + baseDirectory string + // Sandbox features + // - Limit access to directories (using SandboxDirectories) // - Disallow access to specific tags and/or filters (using BanTag() and BanFilter()) // - // For efficiency reasons you can ban tags/filters only *before* you have - // added your first template to the set (restrictions are statically checked). - // After you added one, it's not possible anymore (for your personal security). + // You can limit file accesses (for all tags/filters which are using pongo2's file resolver technique) + // to these sandbox directories. All default pongo2 filters/tags are respecting these restrictions. + // For example, if you only have your base directory in the list, a {% ssi "/etc/passwd" %} will not work. + // No items in SandboxDirectories means no restrictions at all. + // + // For efficiency reasons you can ban tags/filters only *before* you have added your first + // template to the set (restrictions are statically checked). After you added one, it's not possible anymore + // (for your personal security). + // + // SandboxDirectories can be changed at runtime. Please synchronize the access to it if you need to change it + // after you've added your first template to the set. You *must* use this match pattern for your directories: + // http://golang.org/pkg/path/filepath/#Match + SandboxDirectories []string firstTemplateCreated bool bannedTags map[string]bool bannedFilters map[string]bool @@ -53,13 +53,11 @@ type TemplateSet struct { templateCacheMutex sync.Mutex } -// NewSet can be used to create sets with different kind of templates -// (e. g. web from mail templates), with different globals or -// other configurations. -func NewSet(name string, loader TemplateLoader) *TemplateSet { +// Create your own template sets to separate different kind of templates (e. g. web from mail templates) with +// different globals or other configurations (like base directories). +func NewSet(name string) *TemplateSet { return &TemplateSet{ name: name, - loader: loader, Globals: make(Context), bannedTags: make(map[string]bool), bannedFilters: make(map[string]bool), @@ -67,97 +65,117 @@ func NewSet(name string, loader TemplateLoader) *TemplateSet { } } -func (set *TemplateSet) resolveFilename(tpl *Template, path string) string { - name := "" - if tpl != nil && tpl.isTplString { - return path +// Use this function to set your template set's base directory. This directory will be used for any relative +// path in filters, tags and From*-functions to determine your template. +func (set *TemplateSet) SetBaseDirectory(name string) error { + // Make the path absolute + if !filepath.IsAbs(name) { + abs, err := filepath.Abs(name) + if err != nil { + return err + } + name = abs } - if tpl != nil { - name = tpl.name + + // Check for existence + fi, err := os.Stat(name) + if err != nil { + return err } - return set.loader.Abs(name, path) + if !fi.IsDir() { + return fmt.Errorf("The given path '%s' is not a directory.") + } + + set.baseDirectory = name + return nil } -// BanTag bans a specific tag for this template set. See more in the documentation for TemplateSet. -func (set *TemplateSet) BanTag(name string) error { +func (set *TemplateSet) BaseDirectory() string { + return set.baseDirectory +} + +// Ban a specific tag for this template set. See more in the documentation for TemplateSet. +func (set *TemplateSet) BanTag(name string) { _, has := tags[name] if !has { - return fmt.Errorf("Tag '%s' not found.", name) + panic(fmt.Sprintf("Tag '%s' not found.", name)) } if set.firstTemplateCreated { - return errors.New("You cannot ban any tags after you've added your first template to your template set.") + panic("You cannot ban any tags after you've added your first template to your template set.") } _, has = set.bannedTags[name] if has { - return fmt.Errorf("Tag '%s' is already banned.", name) + panic(fmt.Sprintf("Tag '%s' is already banned.", name)) } set.bannedTags[name] = true - - return nil } -// BanFilter bans a specific filter for this template set. See more in the documentation for TemplateSet. -func (set *TemplateSet) BanFilter(name string) error { +// Ban a specific filter for this template set. See more in the documentation for TemplateSet. +func (set *TemplateSet) BanFilter(name string) { _, has := filters[name] if !has { - return fmt.Errorf("Filter '%s' not found.", name) + panic(fmt.Sprintf("Filter '%s' not found.", name)) } if set.firstTemplateCreated { - return errors.New("You cannot ban any filters after you've added your first template to your template set.") + panic("You cannot ban any filters after you've added your first template to your template set.") } _, has = set.bannedFilters[name] if has { - return fmt.Errorf("Filter '%s' is already banned.", name) + panic(fmt.Sprintf("Filter '%s' is already banned.", name)) } set.bannedFilters[name] = true - - return nil } -// FromCache is a convenient method to cache templates. It is thread-safe +// FromCache() is a convenient method to cache templates. It is thread-safe // and will only compile the template associated with a filename once. // If TemplateSet.Debug is true (for example during development phase), // FromCache() will not cache the template and instead recompile it on any // call (to make changes to a template live instantaneously). +// Like FromFile(), FromCache() takes a relative path to a set base directory. +// Sandbox restrictions apply (if given). func (set *TemplateSet) FromCache(filename string) (*Template, error) { if set.Debug { // Recompile on any request return set.FromFile(filename) - } - // Cache the template - cleanedFilename := set.resolveFilename(nil, filename) + } else { + // Cache the template + cleaned_filename := set.resolveFilename(nil, filename) - set.templateCacheMutex.Lock() - defer set.templateCacheMutex.Unlock() + set.templateCacheMutex.Lock() + defer set.templateCacheMutex.Unlock() - tpl, has := set.templateCache[cleanedFilename] + tpl, has := set.templateCache[cleaned_filename] - // Cache miss - if !has { - tpl, err := set.FromFile(cleanedFilename) - if err != nil { - return nil, err + // Cache miss + if !has { + tpl, err := set.FromFile(cleaned_filename) + if err != nil { + return nil, err + } + set.templateCache[cleaned_filename] = tpl + return tpl, nil } - set.templateCache[cleanedFilename] = tpl + + // Cache hit return tpl, nil } - - // Cache hit - return tpl, nil } -// FromString loads a template from string and returns a Template instance. +// Loads a template from string and returns a Template instance. func (set *TemplateSet) FromString(tpl string) (*Template, error) { set.firstTemplateCreated = true - return newTemplateString(set, []byte(tpl)) + return newTemplateString(set, tpl) } -// FromFile loads a template from a filename and returns a Template instance. +// Loads a template from a filename and returns a Template instance. +// If a base directory is set, the filename must be either relative to it +// or be an absolute path. Sandbox restrictions (SandboxDirectories) apply +// if given. func (set *TemplateSet) FromFile(filename string) (*Template, error) { set.firstTemplateCreated = true - fd, err := set.loader.Get(set.resolveFilename(nil, filename)) + buf, err := ioutil.ReadFile(set.resolveFilename(nil, filename)) if err != nil { return nil, &Error{ Filename: filename, @@ -165,20 +183,11 @@ func (set *TemplateSet) FromFile(filename string) (*Template, error) { ErrorMsg: err.Error(), } } - buf, err := ioutil.ReadAll(fd) - if err != nil { - return nil, &Error{ - Filename: filename, - Sender: "fromfile", - ErrorMsg: err.Error(), - } - } - - return newTemplate(set, filename, false, buf) + return newTemplate(set, filename, false, string(buf)) } -// RenderTemplateString is a shortcut and renders a template string directly. -// Panics when providing a malformed template or an error occurs during execution. +// Shortcut; renders a template string directly. Panics when providing a +// malformed template or an error occurs during execution. func (set *TemplateSet) RenderTemplateString(s string, ctx Context) string { set.firstTemplateCreated = true @@ -190,8 +199,8 @@ func (set *TemplateSet) RenderTemplateString(s string, ctx Context) string { return result } -// RenderTemplateFile is a shortcut and renders a template file directly. -// Panics when providing a malformed template or an error occurs during execution. +// Shortcut; renders a template file directly. Panics when providing a +// malformed template or an error occurs during execution. func (set *TemplateSet) RenderTemplateFile(fn string, ctx Context) string { set.firstTemplateCreated = true @@ -209,6 +218,58 @@ func (set *TemplateSet) logf(format string, args ...interface{}) { } } +// Resolves a filename relative to the base directory. Absolute paths are allowed. +// If sandbox restrictions are given (SandboxDirectories), they will be respected and checked. +// On sandbox restriction violation, resolveFilename() panics. +func (set *TemplateSet) resolveFilename(tpl *Template, filename string) (resolved_path string) { + if len(set.SandboxDirectories) > 0 { + defer func() { + // Remove any ".." or other crap + resolved_path = filepath.Clean(resolved_path) + + // Make the path absolute + abs_path, err := filepath.Abs(resolved_path) + if err != nil { + panic(err) + } + resolved_path = abs_path + + // Check against the sandbox directories (once one pattern matches, we're done and can allow it) + for _, pattern := range set.SandboxDirectories { + matched, err := filepath.Match(pattern, resolved_path) + if err != nil { + panic("Wrong sandbox directory match pattern (see http://golang.org/pkg/path/filepath/#Match).") + } + if matched { + // OK! + return + } + } + + // No pattern matched, we have to log+deny the request + set.logf("Access attempt outside of the sandbox directories (blocked): '%s'", resolved_path) + resolved_path = "" + }() + } + + if filepath.IsAbs(filename) { + return filename + } + + if set.baseDirectory == "" { + if tpl != nil { + if tpl.is_tpl_string { + return filename + } + base := filepath.Dir(tpl.name) + return filepath.Join(base, filename) + } + return filename + } else { + return filepath.Join(set.baseDirectory, filename) + } +} + // Logging function (internally used) func logf(format string, items ...interface{}) { if debug { @@ -218,14 +279,10 @@ func logf(format string, items ...interface{}) { var ( debug bool // internal debugging - logger = log.New(os.Stdout, "[pongo2] ", log.LstdFlags|log.Lshortfile) + logger = log.New(os.Stdout, "[pongo2] ", log.LstdFlags) - // DefaultLoader allows the default un-sandboxed access to the local file - // system and is being used by the DefaultSet. - DefaultLoader = MustNewLocalFileSystemLoader("") - - // DefaultSet is a set created for you for convinience reasons. - DefaultSet = NewSet("default", DefaultLoader) + // Creating a default set + DefaultSet = NewSet("default") // Methods on the default set FromString = DefaultSet.FromString diff --git a/vendor/github.com/flosch/pongo2/template_tests/expressions.tpl b/vendor/github.com/flosch/pongo2/template_tests/expressions.tpl index caada14..40a158a 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/expressions.tpl +++ b/vendor/github.com/flosch/pongo2/template_tests/expressions.tpl @@ -46,24 +46,8 @@ in/not in {{ 7 in simple.intmap }} {{ !(5 in simple.intmap) }} {{ not(7 in simple.intmap) }} -{{ 1 in simple.multiple_item_list }} -{{ 4 in simple.multiple_item_list }} -{{ !(4 in simple.multiple_item_list) }} -{{ "Hello" in simple.misc_list }} -{{ "Hello2" in simple.misc_list }} -{{ 99 in simple.misc_list }} -{{ False in simple.misc_list }} issue #48 (associativity for infix operators) {{ 34/3*3 }} {{ 10 + 24 / 6 / 2 }} -{{ 6 - 4 - 2 }} - -issue #64 (uint comparison with int const) -{{ simple.uint }} -{{ simple.uint == 8 }} -{{ simple.uint == 9 }} -{{ simple.uint >= 8 }} -{{ simple.uint <= 8 }} -{{ simple.uint < 8 }} -{{ simple.uint > 8 }} \ No newline at end of file +{{ 6 - 4 - 2 }} \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/template_tests/expressions.tpl.out b/vendor/github.com/flosch/pongo2/template_tests/expressions.tpl.out index d710fc8..be51073 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/expressions.tpl.out +++ b/vendor/github.com/flosch/pongo2/template_tests/expressions.tpl.out @@ -46,24 +46,8 @@ True False False True -True -False -True -True -False -True -False issue #48 (associativity for infix operators) 33 12 -0 - -issue #64 (uint comparison with int const) -8 -True -False -True -True -False -False \ No newline at end of file +0 \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/template_tests/filters-execution.err b/vendor/github.com/flosch/pongo2/template_tests/filters-execution.err index 1fc53f2..da761b2 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/filters-execution.err +++ b/vendor/github.com/flosch/pongo2/template_tests/filters-execution.err @@ -1,4 +1,3 @@ {{ -(true || false) }} {{ simple.func_add("test", 5) }} -{% for item in simple.multiple_item_list %} {{ simple.func_add("test", 5) }} {% endfor %} -{{ simple.func_variadic_sum_int("foo") }} +{{ simple.func_variadic_sum_int("foo") }} \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/template_tests/filters-execution.err.out b/vendor/github.com/flosch/pongo2/template_tests/filters-execution.err.out index a960607..e83ae01 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/filters-execution.err.out +++ b/vendor/github.com/flosch/pongo2/template_tests/filters-execution.err.out @@ -1,4 +1,3 @@ .*where: execution.*Negative sign on a non\-number expression .*Function input argument 0 of 'simple.func_add' must be of type int or \*pongo2.Value \(not string\). -.*Function input argument 0 of 'simple.func_add' must be of type int or \*pongo2.Value \(not string\). -.*Function variadic input argument of 'simple.func_variadic_sum_int' must be of type int or \*pongo2.Value \(not string\). +.*Function variadic input argument of 'simple.func_variadic_sum_int' must be of type int or \*pongo2.Value \(not string\). \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/template_tests/filters.tpl.out b/vendor/github.com/flosch/pongo2/template_tests/filters.tpl.out index f7fc97d..1044857 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/filters.tpl.out +++ b/vendor/github.com/flosch/pongo2/template_tests/filters.tpl.out @@ -105,7 +105,7 @@ h first T - + @@ -113,7 +113,7 @@ T last t - + diff --git a/vendor/github.com/flosch/pongo2/template_tests/for.tpl b/vendor/github.com/flosch/pongo2/template_tests/for.tpl index d14e632..51e144c 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/for.tpl +++ b/vendor/github.com/flosch/pongo2/template_tests/for.tpl @@ -6,22 +6,4 @@ {% endfor %} reversed -'{% for item in simple.multiple_item_list reversed %}{{ item }} {% endfor %}' - -sorted string map -'{% for key in simple.strmap sorted %}{{ key }} {% endfor %}' - -sorted int map -'{% for key in simple.intmap sorted %}{{ key }} {% endfor %}' - -sorted int list -'{% for key in simple.unsorted_int_list sorted %}{{ key }} {% endfor %}' - -reversed sorted int list -'{% for key in simple.unsorted_int_list reversed sorted %}{{ key }} {% endfor %}' - -reversed sorted string map -'{% for key in simple.strmap reversed sorted %}{{ key }} {% endfor %}' - -reversed sorted int map -'{% for key in simple.intmap reversed sorted %}{{ key }} {% endfor %}' +'{% for item in simple.multiple_item_list reversed %}{{ item }} {% endfor %}' \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/template_tests/for.tpl.out b/vendor/github.com/flosch/pongo2/template_tests/for.tpl.out index 27c7120..18258a2 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/for.tpl.out +++ b/vendor/github.com/flosch/pongo2/template_tests/for.tpl.out @@ -16,22 +16,4 @@ reversed -'55 34 21 13 8 5 3 2 1 1 ' - -sorted string map -'aab abc bcd gh ukq zab ' - -sorted int map -'1 2 5 ' - -sorted int list -'1 22 192 249 581 8271 9999 1828591 ' - -reversed sorted int list -'1828591 9999 8271 581 249 192 22 1 ' - -reversed sorted string map -'zab ukq gh bcd abc aab ' - -reversed sorted int map -'5 2 1 ' +'55 34 21 13 8 5 3 2 1 1 ' \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/template_tests/includes.tpl b/vendor/github.com/flosch/pongo2/template_tests/includes.tpl index 2394ee9..f2b0253 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/includes.tpl +++ b/vendor/github.com/flosch/pongo2/template_tests/includes.tpl @@ -1,7 +1,4 @@ Start '{% include "includes.helper" %}' End -Start '{% include "includes.helper" if_exists %}' End Start '{% include "includes.helper" with what_am_i=simple.name only %}' End Start '{% include "includes.helper" with what_am_i=simple.name %}' End -Start '{% include simple.included_file|lower with number=7 what_am_i="guest" %}' End -Start '{% include "includes.helper.not_exists" if_exists %}' End -Start '{% include simple.included_file_not_exists if_exists with number=7 what_am_i="guest" %}' End \ No newline at end of file +Start '{% include simple.included_file|lower with number=7 what_am_i="guest" %}' End \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/template_tests/includes.tpl.out b/vendor/github.com/flosch/pongo2/template_tests/includes.tpl.out index 61d9318..90f7726 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/includes.tpl.out +++ b/vendor/github.com/flosch/pongo2/template_tests/includes.tpl.out @@ -1,7 +1,4 @@ Start 'I'm 11' End -Start 'I'm 11' End Start 'I'm john doe' End Start 'I'm john doe11' End -Start 'I'm guest7' End -Start '' End -Start '' End \ No newline at end of file +Start 'I'm guest7' End \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/template_tests/pongo2ctx.tpl.out b/vendor/github.com/flosch/pongo2/template_tests/pongo2ctx.tpl.out index 9001211..04d0d54 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/pongo2ctx.tpl.out +++ b/vendor/github.com/flosch/pongo2/template_tests/pongo2ctx.tpl.out @@ -1 +1 @@ -dev \ No newline at end of file +v3 \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/template_tests/with.tpl.out b/vendor/github.com/flosch/pongo2/template_tests/with.tpl.out index 46686bd..41e3829 100644 --- a/vendor/github.com/flosch/pongo2/template_tests/with.tpl.out +++ b/vendor/github.com/flosch/pongo2/template_tests/with.tpl.out @@ -11,6 +11,6 @@ Start 'I'm guest7' End Start 'Hi number 10! Will not be overridden inside the block. I'm john doe, 50 years old.I have 10 children.' End more with tests - + user1 user3 \ No newline at end of file diff --git a/vendor/github.com/flosch/pongo2/value.go b/vendor/github.com/flosch/pongo2/value.go index b1d4f7b..8cf8552 100644 --- a/vendor/github.com/flosch/pongo2/value.go +++ b/vendor/github.com/flosch/pongo2/value.go @@ -3,7 +3,6 @@ package pongo2 import ( "fmt" "reflect" - "sort" "strconv" "strings" ) @@ -13,7 +12,7 @@ type Value struct { safe bool // used to indicate whether a Value needs explicit escaping in the template } -// AsValue converts any given value to a pongo2.Value +// Converts any given value to a pongo2.Value // Usually being used within own functions passed to a template // through a Context or within filter functions. // @@ -25,7 +24,7 @@ func AsValue(i interface{}) *Value { } } -// AsSafeValue works like AsValue, but does not apply the 'escape' filter. +// Like AsValue, but does not apply the 'escape' filter. func AsSafeValue(i interface{}) *Value { return &Value{ val: reflect.ValueOf(i), @@ -112,8 +111,9 @@ func (v *Value) String() string { case reflect.Bool: if v.Bool() { return "True" + } else { + return "False" } - return "False" case reflect.Struct: if t, ok := v.Interface().(fmt.Stringer); ok { return t.String() @@ -229,13 +229,15 @@ func (v *Value) Negate() *Value { reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: if v.Integer() != 0 { return AsValue(0) + } else { + return AsValue(1) } - return AsValue(1) case reflect.Float32, reflect.Float64: if v.Float() != 0.0 { return AsValue(float64(0.0)) + } else { + return AsValue(float64(1.1)) } - return AsValue(float64(1.1)) case reflect.Array, reflect.Chan, reflect.Map, reflect.Slice, reflect.String: return AsValue(v.getResolvedValue().Len() == 0) case reflect.Bool: @@ -299,7 +301,7 @@ func (v *Value) Index(i int) *Value { } } -// Contains checks whether the underlying value (which must be of type struct, map, +// Checks whether the underlying value (which must be of type struct, map, // string, array or slice) contains of another Value (e. g. used to check // whether a struct contains of a specific field or a map contains a specific key). // @@ -308,32 +310,25 @@ func (v *Value) Index(i int) *Value { func (v *Value) Contains(other *Value) bool { switch v.getResolvedValue().Kind() { case reflect.Struct: - fieldValue := v.getResolvedValue().FieldByName(other.String()) - return fieldValue.IsValid() + field_value := v.getResolvedValue().FieldByName(other.String()) + return field_value.IsValid() case reflect.Map: - var mapValue reflect.Value + var map_value reflect.Value switch other.Interface().(type) { case int: - mapValue = v.getResolvedValue().MapIndex(other.getResolvedValue()) + map_value = v.getResolvedValue().MapIndex(other.getResolvedValue()) case string: - mapValue = v.getResolvedValue().MapIndex(other.getResolvedValue()) + map_value = v.getResolvedValue().MapIndex(other.getResolvedValue()) default: logf("Value.Contains() does not support lookup type '%s'\n", other.getResolvedValue().Kind().String()) return false } - return mapValue.IsValid() + return map_value.IsValid() case reflect.String: return strings.Contains(v.getResolvedValue().String(), other.String()) - case reflect.Slice, reflect.Array: - for i := 0; i < v.getResolvedValue().Len(); i++ { - item := v.getResolvedValue().Index(i) - if other.Interface() == item.Interface() { - return true - } - } - return false + // TODO: reflect.Array, reflect.Slice default: logf("Value.Contains() not available for type: %s\n", v.getResolvedValue().Kind().String()) @@ -362,22 +357,16 @@ func (v *Value) CanSlice() bool { // If the underlying value has no items or is not one of the types above, // the empty function (function's second argument) will be called. func (v *Value) Iterate(fn func(idx, count int, key, value *Value) bool, empty func()) { - v.IterateOrder(fn, empty, false, false) + v.IterateOrder(fn, empty, false) } // Like Value.Iterate, but can iterate through an array/slice/string in reverse. Does // not affect the iteration through a map because maps don't have any particular order. -func (v *Value) IterateOrder(fn func(idx, count int, key, value *Value) bool, empty func(), reverse bool, sorted bool) { +func (v *Value) IterateOrder(fn func(idx, count int, key, value *Value) bool, empty func(), reverse bool) { switch v.getResolvedValue().Kind() { case reflect.Map: - keys := sortedKeys(v.getResolvedValue().MapKeys()) - if sorted { - if reverse { - sort.Sort(sort.Reverse(keys)) - } else { - sort.Sort(keys) - } - } + // Reverse not needed for maps, since they are not ordered + keys := v.getResolvedValue().MapKeys() keyLen := len(keys) for idx, key := range keys { value := v.getResolvedValue().MapIndex(key) @@ -390,31 +379,19 @@ func (v *Value) IterateOrder(fn func(idx, count int, key, value *Value) bool, em } return // done case reflect.Array, reflect.Slice: - var items valuesList - itemCount := v.getResolvedValue().Len() - for i := 0; i < itemCount; i++ { - items = append(items, &Value{val: v.getResolvedValue().Index(i)}) - } - - if sorted { + if itemCount > 0 { if reverse { - sort.Sort(sort.Reverse(items)) - } else { - sort.Sort(items) - } - } else { - if reverse { - for i := 0; i < itemCount/2; i++ { - items[i], items[itemCount-1-i] = items[itemCount-1-i], items[i] + for i := itemCount - 1; i >= 0; i-- { + if !fn(i, itemCount, &Value{val: v.getResolvedValue().Index(i)}, nil) { + return + } } - } - } - - if len(items) > 0 { - for idx, item := range items { - if !fn(idx, itemCount, item, nil) { - return + } else { + for i := 0; i < itemCount; i++ { + if !fn(i, itemCount, &Value{val: v.getResolvedValue().Index(i)}, nil) { + return + } } } } else { @@ -422,12 +399,7 @@ func (v *Value) IterateOrder(fn func(idx, count int, key, value *Value) bool, em } return // done case reflect.String: - if sorted { - // TODO(flosch): Handle sorted - panic("TODO: handle sort for type string") - } - - // TODO(flosch): Not utf8-compatible (utf8-decoding neccessary) + // TODO: Not utf8-compatible (utf8-decoding neccessary) charCount := v.getResolvedValue().Len() if charCount > 0 { if reverse { @@ -463,55 +435,5 @@ func (v *Value) Interface() interface{} { // Checks whether two values are containing the same value or object. func (v *Value) EqualValueTo(other *Value) bool { - // comparison of uint with int fails using .Interface()-comparison (see issue #64) - if v.IsInteger() && other.IsInteger() { - return v.Integer() == other.Integer() - } return v.Interface() == other.Interface() } - -type sortedKeys []reflect.Value - -func (sk sortedKeys) Len() int { - return len(sk) -} - -func (sk sortedKeys) Less(i, j int) bool { - vi := &Value{val: sk[i]} - vj := &Value{val: sk[j]} - switch { - case vi.IsInteger() && vj.IsInteger(): - return vi.Integer() < vj.Integer() - case vi.IsFloat() && vj.IsFloat(): - return vi.Float() < vj.Float() - default: - return vi.String() < vj.String() - } -} - -func (sk sortedKeys) Swap(i, j int) { - sk[i], sk[j] = sk[j], sk[i] -} - -type valuesList []*Value - -func (vl valuesList) Len() int { - return len(vl) -} - -func (vl valuesList) Less(i, j int) bool { - vi := vl[i] - vj := vl[j] - switch { - case vi.IsInteger() && vj.IsInteger(): - return vi.Integer() < vj.Integer() - case vi.IsFloat() && vj.IsFloat(): - return vi.Float() < vj.Float() - default: - return vi.String() < vj.String() - } -} - -func (vl valuesList) Swap(i, j int) { - vl[i], vl[j] = vl[j], vl[i] -} diff --git a/vendor/github.com/flosch/pongo2/variable.go b/vendor/github.com/flosch/pongo2/variable.go index 25bca20..9ec6a59 100644 --- a/vendor/github.com/flosch/pongo2/variable.go +++ b/vendor/github.com/flosch/pongo2/variable.go @@ -1,6 +1,7 @@ package pongo2 import ( + "bytes" "fmt" "reflect" "strconv" @@ -17,8 +18,8 @@ type variablePart struct { s string i int - isFunctionCall bool - callingArgs []functionCallArgument // needed for a function call, represents all argument nodes (INode supports nested function calls) + is_function_call bool + calling_args []functionCallArgument // needed for a function call, represents all argument nodes (INode supports nested function calls) } type functionCallArgument interface { @@ -27,119 +28,119 @@ type functionCallArgument interface { // TODO: Add location tokens type stringResolver struct { - locationToken *Token - val string + location_token *Token + val string } type intResolver struct { - locationToken *Token - val int + location_token *Token + val int } type floatResolver struct { - locationToken *Token - val float64 + location_token *Token + val float64 } type boolResolver struct { - locationToken *Token - val bool + location_token *Token + val bool } type variableResolver struct { - locationToken *Token + location_token *Token parts []*variablePart } type nodeFilteredVariable struct { - locationToken *Token + location_token *Token resolver IEvaluator filterChain []*filterCall } type nodeVariable struct { - locationToken *Token - expr IEvaluator + location_token *Token + expr IEvaluator } -func (v *nodeFilteredVariable) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - value, err := v.Evaluate(ctx) +func (expr *nodeFilteredVariable) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } -func (vr *variableResolver) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - value, err := vr.Evaluate(ctx) +func (expr *variableResolver) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } -func (s *stringResolver) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - value, err := s.Evaluate(ctx) +func (expr *stringResolver) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } -func (i *intResolver) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - value, err := i.Evaluate(ctx) +func (expr *intResolver) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } -func (f *floatResolver) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - value, err := f.Evaluate(ctx) +func (expr *floatResolver) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } -func (b *boolResolver) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { - value, err := b.Evaluate(ctx) +func (expr *boolResolver) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { + value, err := expr.Evaluate(ctx) if err != nil { return err } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } func (v *nodeFilteredVariable) GetPositionToken() *Token { - return v.locationToken + return v.location_token } -func (vr *variableResolver) GetPositionToken() *Token { - return vr.locationToken +func (v *variableResolver) GetPositionToken() *Token { + return v.location_token } -func (s *stringResolver) GetPositionToken() *Token { - return s.locationToken +func (v *stringResolver) GetPositionToken() *Token { + return v.location_token } -func (i *intResolver) GetPositionToken() *Token { - return i.locationToken +func (v *intResolver) GetPositionToken() *Token { + return v.location_token } -func (f *floatResolver) GetPositionToken() *Token { - return f.locationToken +func (v *floatResolver) GetPositionToken() *Token { + return v.location_token } -func (b *boolResolver) GetPositionToken() *Token { - return b.locationToken +func (v *boolResolver) GetPositionToken() *Token { + return v.location_token } func (s *stringResolver) Evaluate(ctx *ExecutionContext) (*Value, *Error) { @@ -178,7 +179,7 @@ func (nv *nodeVariable) FilterApplied(name string) bool { return nv.expr.FilterApplied(name) } -func (nv *nodeVariable) Execute(ctx *ExecutionContext, writer TemplateWriter) *Error { +func (nv *nodeVariable) Execute(ctx *ExecutionContext, buffer *bytes.Buffer) *Error { value, err := nv.expr.Evaluate(ctx) if err != nil { return err @@ -192,7 +193,7 @@ func (nv *nodeVariable) Execute(ctx *ExecutionContext, writer TemplateWriter) *E } } - writer.WriteString(value.String()) + buffer.WriteString(value.String()) return nil } @@ -217,15 +218,15 @@ func (vr *variableResolver) String() string { func (vr *variableResolver) resolve(ctx *ExecutionContext) (*Value, error) { var current reflect.Value - var isSafe bool + var is_safe bool for idx, part := range vr.parts { if idx == 0 { // We're looking up the first part of the variable. // First we're having a look in our private // context (e. g. information provided by tags, like the forloop) - val, inPrivate := ctx.Private[vr.parts[0].s] - if !inPrivate { + val, in_private := ctx.Private[vr.parts[0].s] + if !in_private { // Nothing found? Then have a final lookup in the public context val = ctx.Public[vr.parts[0].s] } @@ -235,16 +236,16 @@ func (vr *variableResolver) resolve(ctx *ExecutionContext) (*Value, error) { // Before resolving the pointer, let's see if we have a method to call // Problem with resolving the pointer is we're changing the receiver - isFunc := false + is_func := false if part.typ == varTypeIdent { - funcValue := current.MethodByName(part.s) - if funcValue.IsValid() { - current = funcValue - isFunc = true + func_value := current.MethodByName(part.s) + if func_value.IsValid() { + current = func_value + is_func = true } } - if !isFunc { + if !is_func { // If current a pointer, resolve it if current.Kind() == reflect.Ptr { current = current.Elem() @@ -261,11 +262,7 @@ func (vr *variableResolver) resolve(ctx *ExecutionContext) (*Value, error) { // * slices/arrays/strings switch current.Kind() { case reflect.String, reflect.Array, reflect.Slice: - if current.Len() > part.i { - current = current.Index(part.i) - } else { - return nil, fmt.Errorf("Index out of range: %d (variable %s)", part.i, vr.String()) - } + current = current.Index(part.i) default: return nil, fmt.Errorf("Can't access an index on type %s (variable %s)", current.Kind().String(), vr.String()) @@ -299,9 +296,9 @@ func (vr *variableResolver) resolve(ctx *ExecutionContext) (*Value, error) { // Happens in function calls (as a return value) or by injecting // into the execution context (e.g. in a for-loop) if current.Type() == reflect.TypeOf(&Value{}) { - tmpValue := current.Interface().(*Value) - current = tmpValue.val - isSafe = tmpValue.safe + tmp_value := current.Interface().(*Value) + current = tmp_value.val + is_safe = tmp_value.safe } // Check whether this is an interface and resolve it where required @@ -310,10 +307,10 @@ func (vr *variableResolver) resolve(ctx *ExecutionContext) (*Value, error) { } // Check if the part is a function call - if part.isFunctionCall || current.Kind() == reflect.Func { + if part.is_function_call || current.Kind() == reflect.Func { // Check for callable if current.Kind() != reflect.Func { - return nil, fmt.Errorf("'%s' is not a function (it is %s)", vr.String(), current.Kind().String()) + return nil, fmt.Errorf("'%s' is not a function (it is %s).", vr.String(), current.Kind().String()) } // Check for correct function syntax and types @@ -321,56 +318,58 @@ func (vr *variableResolver) resolve(ctx *ExecutionContext) (*Value, error) { t := current.Type() // Input arguments - if len(part.callingArgs) != t.NumIn() && !(len(part.callingArgs) >= t.NumIn()-1 && t.IsVariadic()) { + if len(part.calling_args) != t.NumIn() && !(len(part.calling_args) >= t.NumIn()-1 && t.IsVariadic()) { return nil, fmt.Errorf("Function input argument count (%d) of '%s' must be equal to the calling argument count (%d).", - t.NumIn(), vr.String(), len(part.callingArgs)) + t.NumIn(), vr.String(), len(part.calling_args)) } // Output arguments if t.NumOut() != 1 { - return nil, fmt.Errorf("'%s' must have exactly 1 output argument", vr.String()) + return nil, fmt.Errorf("'%s' must have exactly 1 output argument.", vr.String()) } // Evaluate all parameters - var parameters []reflect.Value + parameters := make([]reflect.Value, 0) - numArgs := t.NumIn() - isVariadic := t.IsVariadic() - var fnArg reflect.Type + num_args := t.NumIn() + is_variadic := t.IsVariadic() + var fn_arg reflect.Type - for idx, arg := range part.callingArgs { + for idx, arg := range part.calling_args { pv, err := arg.Evaluate(ctx) if err != nil { return nil, err } - if isVariadic { + if is_variadic { if idx >= t.NumIn()-1 { - fnArg = t.In(numArgs - 1).Elem() + fn_arg = t.In(num_args - 1).Elem() } else { - fnArg = t.In(idx) + fn_arg = t.In(idx) } } else { - fnArg = t.In(idx) + fn_arg = t.In(idx) } - if fnArg != reflect.TypeOf(new(Value)) { + if fn_arg != reflect.TypeOf(new(Value)) { // Function's argument is not a *pongo2.Value, then we have to check whether input argument is of the same type as the function's argument - if !isVariadic { - if fnArg != reflect.TypeOf(pv.Interface()) && fnArg.Kind() != reflect.Interface { + if !is_variadic { + if fn_arg != reflect.TypeOf(pv.Interface()) && fn_arg.Kind() != reflect.Interface { return nil, fmt.Errorf("Function input argument %d of '%s' must be of type %s or *pongo2.Value (not %T).", - idx, vr.String(), fnArg.String(), pv.Interface()) + idx, vr.String(), fn_arg.String(), pv.Interface()) + } else { + // Function's argument has another type, using the interface-value + parameters = append(parameters, reflect.ValueOf(pv.Interface())) } - // Function's argument has another type, using the interface-value - parameters = append(parameters, reflect.ValueOf(pv.Interface())) } else { - if fnArg != reflect.TypeOf(pv.Interface()) && fnArg.Kind() != reflect.Interface { + if fn_arg != reflect.TypeOf(pv.Interface()) && fn_arg.Kind() != reflect.Interface { return nil, fmt.Errorf("Function variadic input argument of '%s' must be of type %s or *pongo2.Value (not %T).", - vr.String(), fnArg.String(), pv.Interface()) + vr.String(), fn_arg.String(), pv.Interface()) + } else { + // Function's argument has another type, using the interface-value + parameters = append(parameters, reflect.ValueOf(pv.Interface())) } - // Function's argument has another type, using the interface-value - parameters = append(parameters, reflect.ValueOf(pv.Interface())) } } else { // Function's argument is a *pongo2.Value @@ -378,13 +377,6 @@ func (vr *variableResolver) resolve(ctx *ExecutionContext) (*Value, error) { } } - // Check if any of the values are invalid - for _, p := range parameters { - if p.Kind() == reflect.Invalid { - return nil, fmt.Errorf("Calling a function using an invalid parameter") - } - } - // Call it and get first return parameter back rv := current.Call(parameters)[0] @@ -393,7 +385,7 @@ func (vr *variableResolver) resolve(ctx *ExecutionContext) (*Value, error) { } else { // Return the function call value current = rv.Interface().(*Value).val - isSafe = rv.Interface().(*Value).safe + is_safe = rv.Interface().(*Value).safe } } } @@ -403,13 +395,13 @@ func (vr *variableResolver) resolve(ctx *ExecutionContext) (*Value, error) { return AsValue(nil), nil } - return &Value{val: current, safe: isSafe}, nil + return &Value{val: current, safe: is_safe}, nil } func (vr *variableResolver) Evaluate(ctx *ExecutionContext) (*Value, *Error) { value, err := vr.resolve(ctx) if err != nil { - return AsValue(nil), ctx.Error(err.Error(), vr.locationToken) + return AsValue(nil), ctx.Error(err.Error(), vr.location_token) } return value, nil } @@ -444,7 +436,7 @@ func (p *Parser) parseVariableOrLiteral() (IEvaluator, *Error) { t := p.Current() if t == nil { - return nil, p.Error("Unexpected EOF, expected a number, string, keyword or identifier.", p.lastToken) + return nil, p.Error("Unexpected EOF, expected a number, string, keyword or identifier.", p.last_token) } // Is first part a number or a string, there's nothing to resolve (because there's only to return the value then) @@ -468,26 +460,26 @@ func (p *Parser) parseVariableOrLiteral() (IEvaluator, *Error) { return nil, p.Error(err.Error(), t) } fr := &floatResolver{ - locationToken: t, - val: f, + location_token: t, + val: f, } return fr, nil + } else { + i, err := strconv.Atoi(t.Val) + if err != nil { + return nil, p.Error(err.Error(), t) + } + nr := &intResolver{ + location_token: t, + val: i, + } + return nr, nil } - i, err := strconv.Atoi(t.Val) - if err != nil { - return nil, p.Error(err.Error(), t) - } - nr := &intResolver{ - locationToken: t, - val: i, - } - return nr, nil - case TokenString: p.Consume() sr := &stringResolver{ - locationToken: t, - val: t.Val, + location_token: t, + val: t.Val, } return sr, nil case TokenKeyword: @@ -495,14 +487,14 @@ func (p *Parser) parseVariableOrLiteral() (IEvaluator, *Error) { switch t.Val { case "true": br := &boolResolver{ - locationToken: t, - val: true, + location_token: t, + val: true, } return br, nil case "false": br := &boolResolver{ - locationToken: t, - val: false, + location_token: t, + val: false, } return br, nil default: @@ -511,7 +503,7 @@ func (p *Parser) parseVariableOrLiteral() (IEvaluator, *Error) { } resolver := &variableResolver{ - locationToken: t, + location_token: t, } // First part of a variable MUST be an identifier @@ -559,26 +551,26 @@ variableLoop: } else { // EOF return nil, p.Error("Unexpected EOF, expected either IDENTIFIER or NUMBER after DOT.", - p.lastToken) + p.last_token) } } else if p.Match(TokenSymbol, "(") != nil { // Function call // FunctionName '(' Comma-separated list of expressions ')' part := resolver.parts[len(resolver.parts)-1] - part.isFunctionCall = true + part.is_function_call = true argumentLoop: for { if p.Remaining() == 0 { - return nil, p.Error("Unexpected EOF, expected function call argument list.", p.lastToken) + return nil, p.Error("Unexpected EOF, expected function call argument list.", p.last_token) } if p.Peek(TokenSymbol, ")") == nil { // No closing bracket, so we're parsing an expression - exprArg, err := p.ParseExpression() + expr_arg, err := p.ParseExpression() if err != nil { return nil, err } - part.callingArgs = append(part.callingArgs, exprArg) + part.calling_args = append(part.calling_args, expr_arg) if p.Match(TokenSymbol, ")") != nil { // If there's a closing bracket after an expression, we will stop parsing the arguments @@ -609,7 +601,7 @@ variableLoop: func (p *Parser) parseVariableOrLiteralWithFilter() (*nodeFilteredVariable, *Error) { v := &nodeFilteredVariable{ - locationToken: p.Current(), + location_token: p.Current(), } // Parse the variable name @@ -629,13 +621,15 @@ filterLoop: } // Check sandbox filter restriction - if _, isBanned := p.template.set.bannedFilters[filter.name]; isBanned { + if _, is_banned := p.template.set.bannedFilters[filter.name]; is_banned { return nil, p.Error(fmt.Sprintf("Usage of filter '%s' is not allowed (sandbox restriction active).", filter.name), nil) } v.filterChain = append(v.filterChain, filter) continue filterLoop + + return nil, p.Error("This token is not allowed within a variable.", nil) } return v, nil @@ -643,7 +637,7 @@ filterLoop: func (p *Parser) parseVariableElement() (INode, *Error) { node := &nodeVariable{ - locationToken: p.Current(), + location_token: p.Current(), } p.Consume() // consume '{{' diff --git a/vendor/github.com/golang/protobuf/.gitignore b/vendor/github.com/golang/protobuf/.gitignore new file mode 100644 index 0000000..8f5b596 --- /dev/null +++ b/vendor/github.com/golang/protobuf/.gitignore @@ -0,0 +1,16 @@ +.DS_Store +*.[568ao] +*.ao +*.so +*.pyc +._* +.nfs.* +[568a].out +*~ +*.orig +core +_obj +_test +_testmain.go +protoc-gen-go/testdata/multi/*.pb.go +_conformance/_conformance diff --git a/vendor/github.com/golang/protobuf/.travis.yml b/vendor/github.com/golang/protobuf/.travis.yml new file mode 100644 index 0000000..93c6780 --- /dev/null +++ b/vendor/github.com/golang/protobuf/.travis.yml @@ -0,0 +1,18 @@ +sudo: false +language: go +go: +- 1.6.x +- 1.7.x +- 1.8.x +- 1.9.x + +install: + - go get -v -d -t github.com/golang/protobuf/... + - curl -L https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip -o /tmp/protoc.zip + - unzip /tmp/protoc.zip -d $HOME/protoc + +env: + - PATH=$HOME/protoc/bin:$PATH + +script: + - make all test diff --git a/vendor/github.com/golang/protobuf/AUTHORS b/vendor/github.com/golang/protobuf/AUTHORS new file mode 100644 index 0000000..15167cd --- /dev/null +++ b/vendor/github.com/golang/protobuf/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/github.com/golang/protobuf/CONTRIBUTORS b/vendor/github.com/golang/protobuf/CONTRIBUTORS new file mode 100644 index 0000000..1c4577e --- /dev/null +++ b/vendor/github.com/golang/protobuf/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/github.com/golang/protobuf/LICENSE b/vendor/github.com/golang/protobuf/LICENSE new file mode 100644 index 0000000..1b1b192 --- /dev/null +++ b/vendor/github.com/golang/protobuf/LICENSE @@ -0,0 +1,31 @@ +Go support for Protocol Buffers - Google's data interchange format + +Copyright 2010 The Go Authors. All rights reserved. +https://github.com/golang/protobuf + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vendor/github.com/golang/protobuf/Make.protobuf b/vendor/github.com/golang/protobuf/Make.protobuf new file mode 100644 index 0000000..15071de --- /dev/null +++ b/vendor/github.com/golang/protobuf/Make.protobuf @@ -0,0 +1,40 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Includable Makefile to add a rule for generating .pb.go files from .proto files +# (Google protocol buffer descriptions). +# Typical use if myproto.proto is a file in package mypackage in this directory: +# +# include $(GOROOT)/src/pkg/github.com/golang/protobuf/Make.protobuf + +%.pb.go: %.proto + protoc --go_out=. $< + diff --git a/vendor/github.com/golang/protobuf/Makefile b/vendor/github.com/golang/protobuf/Makefile new file mode 100644 index 0000000..a1421d8 --- /dev/null +++ b/vendor/github.com/golang/protobuf/Makefile @@ -0,0 +1,55 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +all: install + +install: + go install ./proto ./jsonpb ./ptypes + go install ./protoc-gen-go + +test: + go test ./proto ./jsonpb ./ptypes + make -C protoc-gen-go/testdata test + +clean: + go clean ./... + +nuke: + go clean -i ./... + +regenerate: + make -C protoc-gen-go/descriptor regenerate + make -C protoc-gen-go/plugin regenerate + make -C protoc-gen-go/testdata regenerate + make -C proto/testdata regenerate + make -C jsonpb/jsonpb_test_proto regenerate + make -C _conformance regenerate diff --git a/vendor/github.com/golang/protobuf/README.md b/vendor/github.com/golang/protobuf/README.md new file mode 100644 index 0000000..9c4c815 --- /dev/null +++ b/vendor/github.com/golang/protobuf/README.md @@ -0,0 +1,244 @@ +# Go support for Protocol Buffers + +[![Build Status](https://travis-ci.org/golang/protobuf.svg?branch=master)](https://travis-ci.org/golang/protobuf) +[![GoDoc](https://godoc.org/github.com/golang/protobuf?status.svg)](https://godoc.org/github.com/golang/protobuf) + +Google's data interchange format. +Copyright 2010 The Go Authors. +https://github.com/golang/protobuf + +This package and the code it generates requires at least Go 1.4. + +This software implements Go bindings for protocol buffers. For +information about protocol buffers themselves, see + https://developers.google.com/protocol-buffers/ + +## Installation ## + +To use this software, you must: +- Install the standard C++ implementation of protocol buffers from + https://developers.google.com/protocol-buffers/ +- Of course, install the Go compiler and tools from + https://golang.org/ + See + https://golang.org/doc/install + for details or, if you are using gccgo, follow the instructions at + https://golang.org/doc/install/gccgo +- Grab the code from the repository and install the proto package. + The simplest way is to run `go get -u github.com/golang/protobuf/protoc-gen-go`. + The compiler plugin, protoc-gen-go, will be installed in $GOBIN, + defaulting to $GOPATH/bin. It must be in your $PATH for the protocol + compiler, protoc, to find it. + +This software has two parts: a 'protocol compiler plugin' that +generates Go source files that, once compiled, can access and manage +protocol buffers; and a library that implements run-time support for +encoding (marshaling), decoding (unmarshaling), and accessing protocol +buffers. + +There is support for gRPC in Go using protocol buffers. +See the note at the bottom of this file for details. + +There are no insertion points in the plugin. + + +## Using protocol buffers with Go ## + +Once the software is installed, there are two steps to using it. +First you must compile the protocol buffer definitions and then import +them, with the support library, into your program. + +To compile the protocol buffer definition, run protoc with the --go_out +parameter set to the directory you want to output the Go code to. + + protoc --go_out=. *.proto + +The generated files will be suffixed .pb.go. See the Test code below +for an example using such a file. + + +The package comment for the proto library contains text describing +the interface provided in Go for protocol buffers. Here is an edited +version. + +========== + +The proto package converts data structures to and from the +wire format of protocol buffers. It works in concert with the +Go source code generated for .proto files by the protocol compiler. + +A summary of the properties of the protocol buffer interface +for a protocol buffer variable v: + + - Names are turned from camel_case to CamelCase for export. + - There are no methods on v to set fields; just treat + them as structure fields. + - There are getters that return a field's value if set, + and return the field's default value if unset. + The getters work even if the receiver is a nil message. + - The zero value for a struct is its correct initialization state. + All desired fields must be set before marshaling. + - A Reset() method will restore a protobuf struct to its zero state. + - Non-repeated fields are pointers to the values; nil means unset. + That is, optional or required field int32 f becomes F *int32. + - Repeated fields are slices. + - Helper functions are available to aid the setting of fields. + Helpers for getting values are superseded by the + GetFoo methods and their use is deprecated. + msg.Foo = proto.String("hello") // set field + - Constants are defined to hold the default values of all fields that + have them. They have the form Default_StructName_FieldName. + Because the getter methods handle defaulted values, + direct use of these constants should be rare. + - Enums are given type names and maps from names to values. + Enum values are prefixed with the enum's type name. Enum types have + a String method, and a Enum method to assist in message construction. + - Nested groups and enums have type names prefixed with the name of + the surrounding message type. + - Extensions are given descriptor names that start with E_, + followed by an underscore-delimited list of the nested messages + that contain it (if any) followed by the CamelCased name of the + extension field itself. HasExtension, ClearExtension, GetExtension + and SetExtension are functions for manipulating extensions. + - Oneof field sets are given a single field in their message, + with distinguished wrapper types for each possible field value. + - Marshal and Unmarshal are functions to encode and decode the wire format. + +When the .proto file specifies `syntax="proto3"`, there are some differences: + + - Non-repeated fields of non-message type are values instead of pointers. + - Enum types do not get an Enum method. + +Consider file test.proto, containing + +```proto + syntax = "proto2"; + package example; + + enum FOO { X = 17; }; + + message Test { + required string label = 1; + optional int32 type = 2 [default=77]; + repeated int64 reps = 3; + optional group OptionalGroup = 4 { + required string RequiredField = 5; + } + } +``` + +To create and play with a Test object from the example package, + +```go + package main + + import ( + "log" + + "github.com/golang/protobuf/proto" + "path/to/example" + ) + + func main() { + test := &example.Test { + Label: proto.String("hello"), + Type: proto.Int32(17), + Reps: []int64{1, 2, 3}, + Optionalgroup: &example.Test_OptionalGroup { + RequiredField: proto.String("good bye"), + }, + } + data, err := proto.Marshal(test) + if err != nil { + log.Fatal("marshaling error: ", err) + } + newTest := &example.Test{} + err = proto.Unmarshal(data, newTest) + if err != nil { + log.Fatal("unmarshaling error: ", err) + } + // Now test and newTest contain the same data. + if test.GetLabel() != newTest.GetLabel() { + log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) + } + // etc. + } +``` + +## Parameters ## + +To pass extra parameters to the plugin, use a comma-separated +parameter list separated from the output directory by a colon: + + + protoc --go_out=plugins=grpc,import_path=mypackage:. *.proto + + +- `import_prefix=xxx` - a prefix that is added onto the beginning of + all imports. Useful for things like generating protos in a + subdirectory, or regenerating vendored protobufs in-place. +- `import_path=foo/bar` - used as the package if no input files + declare `go_package`. If it contains slashes, everything up to the + rightmost slash is ignored. +- `plugins=plugin1+plugin2` - specifies the list of sub-plugins to + load. The only plugin in this repo is `grpc`. +- `Mfoo/bar.proto=quux/shme` - declares that foo/bar.proto is + associated with Go package quux/shme. This is subject to the + import_prefix parameter. + +## gRPC Support ## + +If a proto file specifies RPC services, protoc-gen-go can be instructed to +generate code compatible with gRPC (http://www.grpc.io/). To do this, pass +the `plugins` parameter to protoc-gen-go; the usual way is to insert it into +the --go_out argument to protoc: + + protoc --go_out=plugins=grpc:. *.proto + +## Compatibility ## + +The library and the generated code are expected to be stable over time. +However, we reserve the right to make breaking changes without notice for the +following reasons: + +- Security. A security issue in the specification or implementation may come to + light whose resolution requires breaking compatibility. We reserve the right + to address such security issues. +- Unspecified behavior. There are some aspects of the Protocol Buffers + specification that are undefined. Programs that depend on such unspecified + behavior may break in future releases. +- Specification errors or changes. If it becomes necessary to address an + inconsistency, incompleteness, or change in the Protocol Buffers + specification, resolving the issue could affect the meaning or legality of + existing programs. We reserve the right to address such issues, including + updating the implementations. +- Bugs. If the library has a bug that violates the specification, a program + that depends on the buggy behavior may break if the bug is fixed. We reserve + the right to fix such bugs. +- Adding methods or fields to generated structs. These may conflict with field + names that already exist in a schema, causing applications to break. When the + code generator encounters a field in the schema that would collide with a + generated field or method name, the code generator will append an underscore + to the generated field or method name. +- Adding, removing, or changing methods or fields in generated structs that + start with `XXX`. These parts of the generated code are exported out of + necessity, but should not be considered part of the public API. +- Adding, removing, or changing unexported symbols in generated code. + +Any breaking changes outside of these will be announced 6 months in advance to +protobuf@googlegroups.com. + +You should, whenever possible, use generated code created by the `protoc-gen-go` +tool built at the same commit as the `proto` package. The `proto` package +declares package-level constants in the form `ProtoPackageIsVersionX`. +Application code and generated code may depend on one of these constants to +ensure that compilation will fail if the available version of the proto library +is too old. Whenever we make a change to the generated code that requires newer +library support, in the same commit we will increment the version number of the +generated code and declare a new package-level constant whose name incorporates +the latest version number. Removing a compatibility constant is considered a +breaking change and would be subject to the announcement policy stated above. + +The `protoc-gen-go/generator` package exposes a plugin interface, +which is used by the gRPC code generation. This interface is not +supported and is subject to incompatible changes without notice. diff --git a/vendor/github.com/golang/protobuf/_conformance/Makefile b/vendor/github.com/golang/protobuf/_conformance/Makefile new file mode 100644 index 0000000..89800e2 --- /dev/null +++ b/vendor/github.com/golang/protobuf/_conformance/Makefile @@ -0,0 +1,33 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2016 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +regenerate: + protoc --go_out=Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any,Mgoogle/protobuf/duration.proto=github.com/golang/protobuf/ptypes/duration,Mgoogle/protobuf/struct.proto=github.com/golang/protobuf/ptypes/struct,Mgoogle/protobuf/timestamp.proto=github.com/golang/protobuf/ptypes/timestamp,Mgoogle/protobuf/wrappers.proto=github.com/golang/protobuf/ptypes/wrappers,Mgoogle/protobuf/field_mask.proto=google.golang.org/genproto/protobuf:. conformance_proto/conformance.proto diff --git a/vendor/github.com/golang/protobuf/_conformance/conformance.go b/vendor/github.com/golang/protobuf/_conformance/conformance.go new file mode 100644 index 0000000..c54212c --- /dev/null +++ b/vendor/github.com/golang/protobuf/_conformance/conformance.go @@ -0,0 +1,161 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// conformance implements the conformance test subprocess protocol as +// documented in conformance.proto. +package main + +import ( + "encoding/binary" + "fmt" + "io" + "os" + + pb "github.com/golang/protobuf/_conformance/conformance_proto" + "github.com/golang/protobuf/jsonpb" + "github.com/golang/protobuf/proto" +) + +func main() { + var sizeBuf [4]byte + inbuf := make([]byte, 0, 4096) + outbuf := proto.NewBuffer(nil) + for { + if _, err := io.ReadFull(os.Stdin, sizeBuf[:]); err == io.EOF { + break + } else if err != nil { + fmt.Fprintln(os.Stderr, "go conformance: read request:", err) + os.Exit(1) + } + size := binary.LittleEndian.Uint32(sizeBuf[:]) + if int(size) > cap(inbuf) { + inbuf = make([]byte, size) + } + inbuf = inbuf[:size] + if _, err := io.ReadFull(os.Stdin, inbuf); err != nil { + fmt.Fprintln(os.Stderr, "go conformance: read request:", err) + os.Exit(1) + } + + req := new(pb.ConformanceRequest) + if err := proto.Unmarshal(inbuf, req); err != nil { + fmt.Fprintln(os.Stderr, "go conformance: parse request:", err) + os.Exit(1) + } + res := handle(req) + + if err := outbuf.Marshal(res); err != nil { + fmt.Fprintln(os.Stderr, "go conformance: marshal response:", err) + os.Exit(1) + } + binary.LittleEndian.PutUint32(sizeBuf[:], uint32(len(outbuf.Bytes()))) + if _, err := os.Stdout.Write(sizeBuf[:]); err != nil { + fmt.Fprintln(os.Stderr, "go conformance: write response:", err) + os.Exit(1) + } + if _, err := os.Stdout.Write(outbuf.Bytes()); err != nil { + fmt.Fprintln(os.Stderr, "go conformance: write response:", err) + os.Exit(1) + } + outbuf.Reset() + } +} + +var jsonMarshaler = jsonpb.Marshaler{ + OrigName: true, +} + +func handle(req *pb.ConformanceRequest) *pb.ConformanceResponse { + var err error + var msg pb.TestAllTypes + switch p := req.Payload.(type) { + case *pb.ConformanceRequest_ProtobufPayload: + err = proto.Unmarshal(p.ProtobufPayload, &msg) + case *pb.ConformanceRequest_JsonPayload: + err = jsonpb.UnmarshalString(p.JsonPayload, &msg) + if err != nil && err.Error() == "unmarshaling Any not supported yet" { + return &pb.ConformanceResponse{ + Result: &pb.ConformanceResponse_Skipped{ + Skipped: err.Error(), + }, + } + } + default: + return &pb.ConformanceResponse{ + Result: &pb.ConformanceResponse_RuntimeError{ + RuntimeError: "unknown request payload type", + }, + } + } + if err != nil { + return &pb.ConformanceResponse{ + Result: &pb.ConformanceResponse_ParseError{ + ParseError: err.Error(), + }, + } + } + switch req.RequestedOutputFormat { + case pb.WireFormat_PROTOBUF: + p, err := proto.Marshal(&msg) + if err != nil { + return &pb.ConformanceResponse{ + Result: &pb.ConformanceResponse_SerializeError{ + SerializeError: err.Error(), + }, + } + } + return &pb.ConformanceResponse{ + Result: &pb.ConformanceResponse_ProtobufPayload{ + ProtobufPayload: p, + }, + } + case pb.WireFormat_JSON: + p, err := jsonMarshaler.MarshalToString(&msg) + if err != nil { + return &pb.ConformanceResponse{ + Result: &pb.ConformanceResponse_SerializeError{ + SerializeError: err.Error(), + }, + } + } + return &pb.ConformanceResponse{ + Result: &pb.ConformanceResponse_JsonPayload{ + JsonPayload: p, + }, + } + default: + return &pb.ConformanceResponse{ + Result: &pb.ConformanceResponse_RuntimeError{ + RuntimeError: "unknown output format", + }, + } + } +} diff --git a/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go b/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go new file mode 100644 index 0000000..ec354ea --- /dev/null +++ b/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.pb.go @@ -0,0 +1,1885 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: conformance_proto/conformance.proto + +/* +Package conformance is a generated protocol buffer package. + +It is generated from these files: + conformance_proto/conformance.proto + +It has these top-level messages: + ConformanceRequest + ConformanceResponse + TestAllTypes + ForeignMessage +*/ +package conformance + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/golang/protobuf/ptypes/any" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "google.golang.org/genproto/protobuf" +import google_protobuf3 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf4 "github.com/golang/protobuf/ptypes/timestamp" +import google_protobuf5 "github.com/golang/protobuf/ptypes/wrappers" + +// 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 WireFormat int32 + +const ( + WireFormat_UNSPECIFIED WireFormat = 0 + WireFormat_PROTOBUF WireFormat = 1 + WireFormat_JSON WireFormat = 2 +) + +var WireFormat_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "PROTOBUF", + 2: "JSON", +} +var WireFormat_value = map[string]int32{ + "UNSPECIFIED": 0, + "PROTOBUF": 1, + "JSON": 2, +} + +func (x WireFormat) String() string { + return proto.EnumName(WireFormat_name, int32(x)) +} +func (WireFormat) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type ForeignEnum int32 + +const ( + ForeignEnum_FOREIGN_FOO ForeignEnum = 0 + ForeignEnum_FOREIGN_BAR ForeignEnum = 1 + ForeignEnum_FOREIGN_BAZ ForeignEnum = 2 +) + +var ForeignEnum_name = map[int32]string{ + 0: "FOREIGN_FOO", + 1: "FOREIGN_BAR", + 2: "FOREIGN_BAZ", +} +var ForeignEnum_value = map[string]int32{ + "FOREIGN_FOO": 0, + "FOREIGN_BAR": 1, + "FOREIGN_BAZ": 2, +} + +func (x ForeignEnum) String() string { + return proto.EnumName(ForeignEnum_name, int32(x)) +} +func (ForeignEnum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type TestAllTypes_NestedEnum int32 + +const ( + TestAllTypes_FOO TestAllTypes_NestedEnum = 0 + TestAllTypes_BAR TestAllTypes_NestedEnum = 1 + TestAllTypes_BAZ TestAllTypes_NestedEnum = 2 + TestAllTypes_NEG TestAllTypes_NestedEnum = -1 +) + +var TestAllTypes_NestedEnum_name = map[int32]string{ + 0: "FOO", + 1: "BAR", + 2: "BAZ", + -1: "NEG", +} +var TestAllTypes_NestedEnum_value = map[string]int32{ + "FOO": 0, + "BAR": 1, + "BAZ": 2, + "NEG": -1, +} + +func (x TestAllTypes_NestedEnum) String() string { + return proto.EnumName(TestAllTypes_NestedEnum_name, int32(x)) +} +func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +// Represents a single test case's input. The testee should: +// +// 1. parse this proto (which should always succeed) +// 2. parse the protobuf or JSON payload in "payload" (which may fail) +// 3. if the parse succeeded, serialize the message in the requested format. +type ConformanceRequest struct { + // The payload (whether protobuf of JSON) is always for a TestAllTypes proto + // (see below). + // + // Types that are valid to be assigned to Payload: + // *ConformanceRequest_ProtobufPayload + // *ConformanceRequest_JsonPayload + Payload isConformanceRequest_Payload `protobuf_oneof:"payload"` + // Which format should the testee serialize its message to? + RequestedOutputFormat WireFormat `protobuf:"varint,3,opt,name=requested_output_format,json=requestedOutputFormat,enum=conformance.WireFormat" json:"requested_output_format,omitempty"` +} + +func (m *ConformanceRequest) Reset() { *m = ConformanceRequest{} } +func (m *ConformanceRequest) String() string { return proto.CompactTextString(m) } +func (*ConformanceRequest) ProtoMessage() {} +func (*ConformanceRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type isConformanceRequest_Payload interface { + isConformanceRequest_Payload() +} + +type ConformanceRequest_ProtobufPayload struct { + ProtobufPayload []byte `protobuf:"bytes,1,opt,name=protobuf_payload,json=protobufPayload,proto3,oneof"` +} +type ConformanceRequest_JsonPayload struct { + JsonPayload string `protobuf:"bytes,2,opt,name=json_payload,json=jsonPayload,oneof"` +} + +func (*ConformanceRequest_ProtobufPayload) isConformanceRequest_Payload() {} +func (*ConformanceRequest_JsonPayload) isConformanceRequest_Payload() {} + +func (m *ConformanceRequest) GetPayload() isConformanceRequest_Payload { + if m != nil { + return m.Payload + } + return nil +} + +func (m *ConformanceRequest) GetProtobufPayload() []byte { + if x, ok := m.GetPayload().(*ConformanceRequest_ProtobufPayload); ok { + return x.ProtobufPayload + } + return nil +} + +func (m *ConformanceRequest) GetJsonPayload() string { + if x, ok := m.GetPayload().(*ConformanceRequest_JsonPayload); ok { + return x.JsonPayload + } + return "" +} + +func (m *ConformanceRequest) GetRequestedOutputFormat() WireFormat { + if m != nil { + return m.RequestedOutputFormat + } + return WireFormat_UNSPECIFIED +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ConformanceRequest) 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 _ConformanceRequest_OneofMarshaler, _ConformanceRequest_OneofUnmarshaler, _ConformanceRequest_OneofSizer, []interface{}{ + (*ConformanceRequest_ProtobufPayload)(nil), + (*ConformanceRequest_JsonPayload)(nil), + } +} + +func _ConformanceRequest_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ConformanceRequest) + // payload + switch x := m.Payload.(type) { + case *ConformanceRequest_ProtobufPayload: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeRawBytes(x.ProtobufPayload) + case *ConformanceRequest_JsonPayload: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.JsonPayload) + case nil: + default: + return fmt.Errorf("ConformanceRequest.Payload has unexpected type %T", x) + } + return nil +} + +func _ConformanceRequest_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ConformanceRequest) + switch tag { + case 1: // payload.protobuf_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Payload = &ConformanceRequest_ProtobufPayload{x} + return true, err + case 2: // payload.json_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Payload = &ConformanceRequest_JsonPayload{x} + return true, err + default: + return false, nil + } +} + +func _ConformanceRequest_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ConformanceRequest) + // payload + switch x := m.Payload.(type) { + case *ConformanceRequest_ProtobufPayload: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ProtobufPayload))) + n += len(x.ProtobufPayload) + case *ConformanceRequest_JsonPayload: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.JsonPayload))) + n += len(x.JsonPayload) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// Represents a single test case's output. +type ConformanceResponse struct { + // Types that are valid to be assigned to Result: + // *ConformanceResponse_ParseError + // *ConformanceResponse_SerializeError + // *ConformanceResponse_RuntimeError + // *ConformanceResponse_ProtobufPayload + // *ConformanceResponse_JsonPayload + // *ConformanceResponse_Skipped + Result isConformanceResponse_Result `protobuf_oneof:"result"` +} + +func (m *ConformanceResponse) Reset() { *m = ConformanceResponse{} } +func (m *ConformanceResponse) String() string { return proto.CompactTextString(m) } +func (*ConformanceResponse) ProtoMessage() {} +func (*ConformanceResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type isConformanceResponse_Result interface { + isConformanceResponse_Result() +} + +type ConformanceResponse_ParseError struct { + ParseError string `protobuf:"bytes,1,opt,name=parse_error,json=parseError,oneof"` +} +type ConformanceResponse_SerializeError struct { + SerializeError string `protobuf:"bytes,6,opt,name=serialize_error,json=serializeError,oneof"` +} +type ConformanceResponse_RuntimeError struct { + RuntimeError string `protobuf:"bytes,2,opt,name=runtime_error,json=runtimeError,oneof"` +} +type ConformanceResponse_ProtobufPayload struct { + ProtobufPayload []byte `protobuf:"bytes,3,opt,name=protobuf_payload,json=protobufPayload,proto3,oneof"` +} +type ConformanceResponse_JsonPayload struct { + JsonPayload string `protobuf:"bytes,4,opt,name=json_payload,json=jsonPayload,oneof"` +} +type ConformanceResponse_Skipped struct { + Skipped string `protobuf:"bytes,5,opt,name=skipped,oneof"` +} + +func (*ConformanceResponse_ParseError) isConformanceResponse_Result() {} +func (*ConformanceResponse_SerializeError) isConformanceResponse_Result() {} +func (*ConformanceResponse_RuntimeError) isConformanceResponse_Result() {} +func (*ConformanceResponse_ProtobufPayload) isConformanceResponse_Result() {} +func (*ConformanceResponse_JsonPayload) isConformanceResponse_Result() {} +func (*ConformanceResponse_Skipped) isConformanceResponse_Result() {} + +func (m *ConformanceResponse) GetResult() isConformanceResponse_Result { + if m != nil { + return m.Result + } + return nil +} + +func (m *ConformanceResponse) GetParseError() string { + if x, ok := m.GetResult().(*ConformanceResponse_ParseError); ok { + return x.ParseError + } + return "" +} + +func (m *ConformanceResponse) GetSerializeError() string { + if x, ok := m.GetResult().(*ConformanceResponse_SerializeError); ok { + return x.SerializeError + } + return "" +} + +func (m *ConformanceResponse) GetRuntimeError() string { + if x, ok := m.GetResult().(*ConformanceResponse_RuntimeError); ok { + return x.RuntimeError + } + return "" +} + +func (m *ConformanceResponse) GetProtobufPayload() []byte { + if x, ok := m.GetResult().(*ConformanceResponse_ProtobufPayload); ok { + return x.ProtobufPayload + } + return nil +} + +func (m *ConformanceResponse) GetJsonPayload() string { + if x, ok := m.GetResult().(*ConformanceResponse_JsonPayload); ok { + return x.JsonPayload + } + return "" +} + +func (m *ConformanceResponse) GetSkipped() string { + if x, ok := m.GetResult().(*ConformanceResponse_Skipped); ok { + return x.Skipped + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*ConformanceResponse) 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 _ConformanceResponse_OneofMarshaler, _ConformanceResponse_OneofUnmarshaler, _ConformanceResponse_OneofSizer, []interface{}{ + (*ConformanceResponse_ParseError)(nil), + (*ConformanceResponse_SerializeError)(nil), + (*ConformanceResponse_RuntimeError)(nil), + (*ConformanceResponse_ProtobufPayload)(nil), + (*ConformanceResponse_JsonPayload)(nil), + (*ConformanceResponse_Skipped)(nil), + } +} + +func _ConformanceResponse_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*ConformanceResponse) + // result + switch x := m.Result.(type) { + case *ConformanceResponse_ParseError: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.ParseError) + case *ConformanceResponse_SerializeError: + b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeStringBytes(x.SerializeError) + case *ConformanceResponse_RuntimeError: + b.EncodeVarint(2<<3 | proto.WireBytes) + b.EncodeStringBytes(x.RuntimeError) + case *ConformanceResponse_ProtobufPayload: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeRawBytes(x.ProtobufPayload) + case *ConformanceResponse_JsonPayload: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.JsonPayload) + case *ConformanceResponse_Skipped: + b.EncodeVarint(5<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Skipped) + case nil: + default: + return fmt.Errorf("ConformanceResponse.Result has unexpected type %T", x) + } + return nil +} + +func _ConformanceResponse_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*ConformanceResponse) + switch tag { + case 1: // result.parse_error + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Result = &ConformanceResponse_ParseError{x} + return true, err + case 6: // result.serialize_error + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Result = &ConformanceResponse_SerializeError{x} + return true, err + case 2: // result.runtime_error + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Result = &ConformanceResponse_RuntimeError{x} + return true, err + case 3: // result.protobuf_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Result = &ConformanceResponse_ProtobufPayload{x} + return true, err + case 4: // result.json_payload + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Result = &ConformanceResponse_JsonPayload{x} + return true, err + case 5: // result.skipped + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Result = &ConformanceResponse_Skipped{x} + return true, err + default: + return false, nil + } +} + +func _ConformanceResponse_OneofSizer(msg proto.Message) (n int) { + m := msg.(*ConformanceResponse) + // result + switch x := m.Result.(type) { + case *ConformanceResponse_ParseError: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ParseError))) + n += len(x.ParseError) + case *ConformanceResponse_SerializeError: + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.SerializeError))) + n += len(x.SerializeError) + case *ConformanceResponse_RuntimeError: + n += proto.SizeVarint(2<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.RuntimeError))) + n += len(x.RuntimeError) + case *ConformanceResponse_ProtobufPayload: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.ProtobufPayload))) + n += len(x.ProtobufPayload) + case *ConformanceResponse_JsonPayload: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.JsonPayload))) + n += len(x.JsonPayload) + case *ConformanceResponse_Skipped: + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Skipped))) + n += len(x.Skipped) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// This proto includes every type of field in both singular and repeated +// forms. +type TestAllTypes struct { + // Singular + OptionalInt32 int32 `protobuf:"varint,1,opt,name=optional_int32,json=optionalInt32" json:"optional_int32,omitempty"` + OptionalInt64 int64 `protobuf:"varint,2,opt,name=optional_int64,json=optionalInt64" json:"optional_int64,omitempty"` + OptionalUint32 uint32 `protobuf:"varint,3,opt,name=optional_uint32,json=optionalUint32" json:"optional_uint32,omitempty"` + OptionalUint64 uint64 `protobuf:"varint,4,opt,name=optional_uint64,json=optionalUint64" json:"optional_uint64,omitempty"` + OptionalSint32 int32 `protobuf:"zigzag32,5,opt,name=optional_sint32,json=optionalSint32" json:"optional_sint32,omitempty"` + OptionalSint64 int64 `protobuf:"zigzag64,6,opt,name=optional_sint64,json=optionalSint64" json:"optional_sint64,omitempty"` + OptionalFixed32 uint32 `protobuf:"fixed32,7,opt,name=optional_fixed32,json=optionalFixed32" json:"optional_fixed32,omitempty"` + OptionalFixed64 uint64 `protobuf:"fixed64,8,opt,name=optional_fixed64,json=optionalFixed64" json:"optional_fixed64,omitempty"` + OptionalSfixed32 int32 `protobuf:"fixed32,9,opt,name=optional_sfixed32,json=optionalSfixed32" json:"optional_sfixed32,omitempty"` + OptionalSfixed64 int64 `protobuf:"fixed64,10,opt,name=optional_sfixed64,json=optionalSfixed64" json:"optional_sfixed64,omitempty"` + OptionalFloat float32 `protobuf:"fixed32,11,opt,name=optional_float,json=optionalFloat" json:"optional_float,omitempty"` + OptionalDouble float64 `protobuf:"fixed64,12,opt,name=optional_double,json=optionalDouble" json:"optional_double,omitempty"` + OptionalBool bool `protobuf:"varint,13,opt,name=optional_bool,json=optionalBool" json:"optional_bool,omitempty"` + OptionalString string `protobuf:"bytes,14,opt,name=optional_string,json=optionalString" json:"optional_string,omitempty"` + OptionalBytes []byte `protobuf:"bytes,15,opt,name=optional_bytes,json=optionalBytes,proto3" json:"optional_bytes,omitempty"` + OptionalNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,18,opt,name=optional_nested_message,json=optionalNestedMessage" json:"optional_nested_message,omitempty"` + OptionalForeignMessage *ForeignMessage `protobuf:"bytes,19,opt,name=optional_foreign_message,json=optionalForeignMessage" json:"optional_foreign_message,omitempty"` + OptionalNestedEnum TestAllTypes_NestedEnum `protobuf:"varint,21,opt,name=optional_nested_enum,json=optionalNestedEnum,enum=conformance.TestAllTypes_NestedEnum" json:"optional_nested_enum,omitempty"` + OptionalForeignEnum ForeignEnum `protobuf:"varint,22,opt,name=optional_foreign_enum,json=optionalForeignEnum,enum=conformance.ForeignEnum" json:"optional_foreign_enum,omitempty"` + OptionalStringPiece string `protobuf:"bytes,24,opt,name=optional_string_piece,json=optionalStringPiece" json:"optional_string_piece,omitempty"` + OptionalCord string `protobuf:"bytes,25,opt,name=optional_cord,json=optionalCord" json:"optional_cord,omitempty"` + RecursiveMessage *TestAllTypes `protobuf:"bytes,27,opt,name=recursive_message,json=recursiveMessage" json:"recursive_message,omitempty"` + // Repeated + RepeatedInt32 []int32 `protobuf:"varint,31,rep,packed,name=repeated_int32,json=repeatedInt32" json:"repeated_int32,omitempty"` + RepeatedInt64 []int64 `protobuf:"varint,32,rep,packed,name=repeated_int64,json=repeatedInt64" json:"repeated_int64,omitempty"` + RepeatedUint32 []uint32 `protobuf:"varint,33,rep,packed,name=repeated_uint32,json=repeatedUint32" json:"repeated_uint32,omitempty"` + RepeatedUint64 []uint64 `protobuf:"varint,34,rep,packed,name=repeated_uint64,json=repeatedUint64" json:"repeated_uint64,omitempty"` + RepeatedSint32 []int32 `protobuf:"zigzag32,35,rep,packed,name=repeated_sint32,json=repeatedSint32" json:"repeated_sint32,omitempty"` + RepeatedSint64 []int64 `protobuf:"zigzag64,36,rep,packed,name=repeated_sint64,json=repeatedSint64" json:"repeated_sint64,omitempty"` + RepeatedFixed32 []uint32 `protobuf:"fixed32,37,rep,packed,name=repeated_fixed32,json=repeatedFixed32" json:"repeated_fixed32,omitempty"` + RepeatedFixed64 []uint64 `protobuf:"fixed64,38,rep,packed,name=repeated_fixed64,json=repeatedFixed64" json:"repeated_fixed64,omitempty"` + RepeatedSfixed32 []int32 `protobuf:"fixed32,39,rep,packed,name=repeated_sfixed32,json=repeatedSfixed32" json:"repeated_sfixed32,omitempty"` + RepeatedSfixed64 []int64 `protobuf:"fixed64,40,rep,packed,name=repeated_sfixed64,json=repeatedSfixed64" json:"repeated_sfixed64,omitempty"` + RepeatedFloat []float32 `protobuf:"fixed32,41,rep,packed,name=repeated_float,json=repeatedFloat" json:"repeated_float,omitempty"` + RepeatedDouble []float64 `protobuf:"fixed64,42,rep,packed,name=repeated_double,json=repeatedDouble" json:"repeated_double,omitempty"` + RepeatedBool []bool `protobuf:"varint,43,rep,packed,name=repeated_bool,json=repeatedBool" json:"repeated_bool,omitempty"` + RepeatedString []string `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString" json:"repeated_string,omitempty"` + RepeatedBytes [][]byte `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes,proto3" json:"repeated_bytes,omitempty"` + RepeatedNestedMessage []*TestAllTypes_NestedMessage `protobuf:"bytes,48,rep,name=repeated_nested_message,json=repeatedNestedMessage" json:"repeated_nested_message,omitempty"` + RepeatedForeignMessage []*ForeignMessage `protobuf:"bytes,49,rep,name=repeated_foreign_message,json=repeatedForeignMessage" json:"repeated_foreign_message,omitempty"` + RepeatedNestedEnum []TestAllTypes_NestedEnum `protobuf:"varint,51,rep,packed,name=repeated_nested_enum,json=repeatedNestedEnum,enum=conformance.TestAllTypes_NestedEnum" json:"repeated_nested_enum,omitempty"` + RepeatedForeignEnum []ForeignEnum `protobuf:"varint,52,rep,packed,name=repeated_foreign_enum,json=repeatedForeignEnum,enum=conformance.ForeignEnum" json:"repeated_foreign_enum,omitempty"` + RepeatedStringPiece []string `protobuf:"bytes,54,rep,name=repeated_string_piece,json=repeatedStringPiece" json:"repeated_string_piece,omitempty"` + RepeatedCord []string `protobuf:"bytes,55,rep,name=repeated_cord,json=repeatedCord" json:"repeated_cord,omitempty"` + // Map + MapInt32Int32 map[int32]int32 `protobuf:"bytes,56,rep,name=map_int32_int32,json=mapInt32Int32" json:"map_int32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + MapInt64Int64 map[int64]int64 `protobuf:"bytes,57,rep,name=map_int64_int64,json=mapInt64Int64" json:"map_int64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + MapUint32Uint32 map[uint32]uint32 `protobuf:"bytes,58,rep,name=map_uint32_uint32,json=mapUint32Uint32" json:"map_uint32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + MapUint64Uint64 map[uint64]uint64 `protobuf:"bytes,59,rep,name=map_uint64_uint64,json=mapUint64Uint64" json:"map_uint64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + MapSint32Sint32 map[int32]int32 `protobuf:"bytes,60,rep,name=map_sint32_sint32,json=mapSint32Sint32" json:"map_sint32_sint32,omitempty" protobuf_key:"zigzag32,1,opt,name=key" protobuf_val:"zigzag32,2,opt,name=value"` + MapSint64Sint64 map[int64]int64 `protobuf:"bytes,61,rep,name=map_sint64_sint64,json=mapSint64Sint64" json:"map_sint64_sint64,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"zigzag64,2,opt,name=value"` + MapFixed32Fixed32 map[uint32]uint32 `protobuf:"bytes,62,rep,name=map_fixed32_fixed32,json=mapFixed32Fixed32" json:"map_fixed32_fixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` + MapFixed64Fixed64 map[uint64]uint64 `protobuf:"bytes,63,rep,name=map_fixed64_fixed64,json=mapFixed64Fixed64" json:"map_fixed64_fixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` + MapSfixed32Sfixed32 map[int32]int32 `protobuf:"bytes,64,rep,name=map_sfixed32_sfixed32,json=mapSfixed32Sfixed32" json:"map_sfixed32_sfixed32,omitempty" protobuf_key:"fixed32,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` + MapSfixed64Sfixed64 map[int64]int64 `protobuf:"bytes,65,rep,name=map_sfixed64_sfixed64,json=mapSfixed64Sfixed64" json:"map_sfixed64_sfixed64,omitempty" protobuf_key:"fixed64,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` + MapInt32Float map[int32]float32 `protobuf:"bytes,66,rep,name=map_int32_float,json=mapInt32Float" json:"map_int32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` + MapInt32Double map[int32]float64 `protobuf:"bytes,67,rep,name=map_int32_double,json=mapInt32Double" json:"map_int32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` + MapBoolBool map[bool]bool `protobuf:"bytes,68,rep,name=map_bool_bool,json=mapBoolBool" json:"map_bool_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + MapStringString map[string]string `protobuf:"bytes,69,rep,name=map_string_string,json=mapStringString" json:"map_string_string,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + MapStringBytes map[string][]byte `protobuf:"bytes,70,rep,name=map_string_bytes,json=mapStringBytes" json:"map_string_bytes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"` + MapStringNestedMessage map[string]*TestAllTypes_NestedMessage `protobuf:"bytes,71,rep,name=map_string_nested_message,json=mapStringNestedMessage" json:"map_string_nested_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + MapStringForeignMessage map[string]*ForeignMessage `protobuf:"bytes,72,rep,name=map_string_foreign_message,json=mapStringForeignMessage" json:"map_string_foreign_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + MapStringNestedEnum map[string]TestAllTypes_NestedEnum `protobuf:"bytes,73,rep,name=map_string_nested_enum,json=mapStringNestedEnum" json:"map_string_nested_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=conformance.TestAllTypes_NestedEnum"` + MapStringForeignEnum map[string]ForeignEnum `protobuf:"bytes,74,rep,name=map_string_foreign_enum,json=mapStringForeignEnum" json:"map_string_foreign_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=conformance.ForeignEnum"` + // Types that are valid to be assigned to OneofField: + // *TestAllTypes_OneofUint32 + // *TestAllTypes_OneofNestedMessage + // *TestAllTypes_OneofString + // *TestAllTypes_OneofBytes + // *TestAllTypes_OneofBool + // *TestAllTypes_OneofUint64 + // *TestAllTypes_OneofFloat + // *TestAllTypes_OneofDouble + // *TestAllTypes_OneofEnum + OneofField isTestAllTypes_OneofField `protobuf_oneof:"oneof_field"` + // Well-known types + OptionalBoolWrapper *google_protobuf5.BoolValue `protobuf:"bytes,201,opt,name=optional_bool_wrapper,json=optionalBoolWrapper" json:"optional_bool_wrapper,omitempty"` + OptionalInt32Wrapper *google_protobuf5.Int32Value `protobuf:"bytes,202,opt,name=optional_int32_wrapper,json=optionalInt32Wrapper" json:"optional_int32_wrapper,omitempty"` + OptionalInt64Wrapper *google_protobuf5.Int64Value `protobuf:"bytes,203,opt,name=optional_int64_wrapper,json=optionalInt64Wrapper" json:"optional_int64_wrapper,omitempty"` + OptionalUint32Wrapper *google_protobuf5.UInt32Value `protobuf:"bytes,204,opt,name=optional_uint32_wrapper,json=optionalUint32Wrapper" json:"optional_uint32_wrapper,omitempty"` + OptionalUint64Wrapper *google_protobuf5.UInt64Value `protobuf:"bytes,205,opt,name=optional_uint64_wrapper,json=optionalUint64Wrapper" json:"optional_uint64_wrapper,omitempty"` + OptionalFloatWrapper *google_protobuf5.FloatValue `protobuf:"bytes,206,opt,name=optional_float_wrapper,json=optionalFloatWrapper" json:"optional_float_wrapper,omitempty"` + OptionalDoubleWrapper *google_protobuf5.DoubleValue `protobuf:"bytes,207,opt,name=optional_double_wrapper,json=optionalDoubleWrapper" json:"optional_double_wrapper,omitempty"` + OptionalStringWrapper *google_protobuf5.StringValue `protobuf:"bytes,208,opt,name=optional_string_wrapper,json=optionalStringWrapper" json:"optional_string_wrapper,omitempty"` + OptionalBytesWrapper *google_protobuf5.BytesValue `protobuf:"bytes,209,opt,name=optional_bytes_wrapper,json=optionalBytesWrapper" json:"optional_bytes_wrapper,omitempty"` + RepeatedBoolWrapper []*google_protobuf5.BoolValue `protobuf:"bytes,211,rep,name=repeated_bool_wrapper,json=repeatedBoolWrapper" json:"repeated_bool_wrapper,omitempty"` + RepeatedInt32Wrapper []*google_protobuf5.Int32Value `protobuf:"bytes,212,rep,name=repeated_int32_wrapper,json=repeatedInt32Wrapper" json:"repeated_int32_wrapper,omitempty"` + RepeatedInt64Wrapper []*google_protobuf5.Int64Value `protobuf:"bytes,213,rep,name=repeated_int64_wrapper,json=repeatedInt64Wrapper" json:"repeated_int64_wrapper,omitempty"` + RepeatedUint32Wrapper []*google_protobuf5.UInt32Value `protobuf:"bytes,214,rep,name=repeated_uint32_wrapper,json=repeatedUint32Wrapper" json:"repeated_uint32_wrapper,omitempty"` + RepeatedUint64Wrapper []*google_protobuf5.UInt64Value `protobuf:"bytes,215,rep,name=repeated_uint64_wrapper,json=repeatedUint64Wrapper" json:"repeated_uint64_wrapper,omitempty"` + RepeatedFloatWrapper []*google_protobuf5.FloatValue `protobuf:"bytes,216,rep,name=repeated_float_wrapper,json=repeatedFloatWrapper" json:"repeated_float_wrapper,omitempty"` + RepeatedDoubleWrapper []*google_protobuf5.DoubleValue `protobuf:"bytes,217,rep,name=repeated_double_wrapper,json=repeatedDoubleWrapper" json:"repeated_double_wrapper,omitempty"` + RepeatedStringWrapper []*google_protobuf5.StringValue `protobuf:"bytes,218,rep,name=repeated_string_wrapper,json=repeatedStringWrapper" json:"repeated_string_wrapper,omitempty"` + RepeatedBytesWrapper []*google_protobuf5.BytesValue `protobuf:"bytes,219,rep,name=repeated_bytes_wrapper,json=repeatedBytesWrapper" json:"repeated_bytes_wrapper,omitempty"` + OptionalDuration *google_protobuf1.Duration `protobuf:"bytes,301,opt,name=optional_duration,json=optionalDuration" json:"optional_duration,omitempty"` + OptionalTimestamp *google_protobuf4.Timestamp `protobuf:"bytes,302,opt,name=optional_timestamp,json=optionalTimestamp" json:"optional_timestamp,omitempty"` + OptionalFieldMask *google_protobuf2.FieldMask `protobuf:"bytes,303,opt,name=optional_field_mask,json=optionalFieldMask" json:"optional_field_mask,omitempty"` + OptionalStruct *google_protobuf3.Struct `protobuf:"bytes,304,opt,name=optional_struct,json=optionalStruct" json:"optional_struct,omitempty"` + OptionalAny *google_protobuf.Any `protobuf:"bytes,305,opt,name=optional_any,json=optionalAny" json:"optional_any,omitempty"` + OptionalValue *google_protobuf3.Value `protobuf:"bytes,306,opt,name=optional_value,json=optionalValue" json:"optional_value,omitempty"` + RepeatedDuration []*google_protobuf1.Duration `protobuf:"bytes,311,rep,name=repeated_duration,json=repeatedDuration" json:"repeated_duration,omitempty"` + RepeatedTimestamp []*google_protobuf4.Timestamp `protobuf:"bytes,312,rep,name=repeated_timestamp,json=repeatedTimestamp" json:"repeated_timestamp,omitempty"` + RepeatedFieldmask []*google_protobuf2.FieldMask `protobuf:"bytes,313,rep,name=repeated_fieldmask,json=repeatedFieldmask" json:"repeated_fieldmask,omitempty"` + RepeatedStruct []*google_protobuf3.Struct `protobuf:"bytes,324,rep,name=repeated_struct,json=repeatedStruct" json:"repeated_struct,omitempty"` + RepeatedAny []*google_protobuf.Any `protobuf:"bytes,315,rep,name=repeated_any,json=repeatedAny" json:"repeated_any,omitempty"` + RepeatedValue []*google_protobuf3.Value `protobuf:"bytes,316,rep,name=repeated_value,json=repeatedValue" json:"repeated_value,omitempty"` + // Test field-name-to-JSON-name convention. + // (protobuf says names can be any valid C/C++ identifier.) + Fieldname1 int32 `protobuf:"varint,401,opt,name=fieldname1" json:"fieldname1,omitempty"` + FieldName2 int32 `protobuf:"varint,402,opt,name=field_name2,json=fieldName2" json:"field_name2,omitempty"` + XFieldName3 int32 `protobuf:"varint,403,opt,name=_field_name3,json=FieldName3" json:"_field_name3,omitempty"` + Field_Name4_ int32 `protobuf:"varint,404,opt,name=field__name4_,json=fieldName4" json:"field__name4_,omitempty"` + Field0Name5 int32 `protobuf:"varint,405,opt,name=field0name5" json:"field0name5,omitempty"` + Field_0Name6 int32 `protobuf:"varint,406,opt,name=field_0_name6,json=field0Name6" json:"field_0_name6,omitempty"` + FieldName7 int32 `protobuf:"varint,407,opt,name=fieldName7" json:"fieldName7,omitempty"` + FieldName8 int32 `protobuf:"varint,408,opt,name=FieldName8" json:"FieldName8,omitempty"` + Field_Name9 int32 `protobuf:"varint,409,opt,name=field_Name9,json=fieldName9" json:"field_Name9,omitempty"` + Field_Name10 int32 `protobuf:"varint,410,opt,name=Field_Name10,json=FieldName10" json:"Field_Name10,omitempty"` + FIELD_NAME11 int32 `protobuf:"varint,411,opt,name=FIELD_NAME11,json=FIELDNAME11" json:"FIELD_NAME11,omitempty"` + FIELDName12 int32 `protobuf:"varint,412,opt,name=FIELD_name12,json=FIELDName12" json:"FIELD_name12,omitempty"` + XFieldName13 int32 `protobuf:"varint,413,opt,name=__field_name13,json=FieldName13" json:"__field_name13,omitempty"` + X_FieldName14 int32 `protobuf:"varint,414,opt,name=__Field_name14,json=FieldName14" json:"__Field_name14,omitempty"` + Field_Name15 int32 `protobuf:"varint,415,opt,name=field__name15,json=fieldName15" json:"field__name15,omitempty"` + Field__Name16 int32 `protobuf:"varint,416,opt,name=field__Name16,json=fieldName16" json:"field__Name16,omitempty"` + FieldName17__ int32 `protobuf:"varint,417,opt,name=field_name17__,json=fieldName17" json:"field_name17__,omitempty"` + FieldName18__ int32 `protobuf:"varint,418,opt,name=Field_name18__,json=FieldName18" json:"Field_name18__,omitempty"` +} + +func (m *TestAllTypes) Reset() { *m = TestAllTypes{} } +func (m *TestAllTypes) String() string { return proto.CompactTextString(m) } +func (*TestAllTypes) ProtoMessage() {} +func (*TestAllTypes) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type isTestAllTypes_OneofField interface { + isTestAllTypes_OneofField() +} + +type TestAllTypes_OneofUint32 struct { + OneofUint32 uint32 `protobuf:"varint,111,opt,name=oneof_uint32,json=oneofUint32,oneof"` +} +type TestAllTypes_OneofNestedMessage struct { + OneofNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,112,opt,name=oneof_nested_message,json=oneofNestedMessage,oneof"` +} +type TestAllTypes_OneofString struct { + OneofString string `protobuf:"bytes,113,opt,name=oneof_string,json=oneofString,oneof"` +} +type TestAllTypes_OneofBytes struct { + OneofBytes []byte `protobuf:"bytes,114,opt,name=oneof_bytes,json=oneofBytes,proto3,oneof"` +} +type TestAllTypes_OneofBool struct { + OneofBool bool `protobuf:"varint,115,opt,name=oneof_bool,json=oneofBool,oneof"` +} +type TestAllTypes_OneofUint64 struct { + OneofUint64 uint64 `protobuf:"varint,116,opt,name=oneof_uint64,json=oneofUint64,oneof"` +} +type TestAllTypes_OneofFloat struct { + OneofFloat float32 `protobuf:"fixed32,117,opt,name=oneof_float,json=oneofFloat,oneof"` +} +type TestAllTypes_OneofDouble struct { + OneofDouble float64 `protobuf:"fixed64,118,opt,name=oneof_double,json=oneofDouble,oneof"` +} +type TestAllTypes_OneofEnum struct { + OneofEnum TestAllTypes_NestedEnum `protobuf:"varint,119,opt,name=oneof_enum,json=oneofEnum,enum=conformance.TestAllTypes_NestedEnum,oneof"` +} + +func (*TestAllTypes_OneofUint32) isTestAllTypes_OneofField() {} +func (*TestAllTypes_OneofNestedMessage) isTestAllTypes_OneofField() {} +func (*TestAllTypes_OneofString) isTestAllTypes_OneofField() {} +func (*TestAllTypes_OneofBytes) isTestAllTypes_OneofField() {} +func (*TestAllTypes_OneofBool) isTestAllTypes_OneofField() {} +func (*TestAllTypes_OneofUint64) isTestAllTypes_OneofField() {} +func (*TestAllTypes_OneofFloat) isTestAllTypes_OneofField() {} +func (*TestAllTypes_OneofDouble) isTestAllTypes_OneofField() {} +func (*TestAllTypes_OneofEnum) isTestAllTypes_OneofField() {} + +func (m *TestAllTypes) GetOneofField() isTestAllTypes_OneofField { + if m != nil { + return m.OneofField + } + return nil +} + +func (m *TestAllTypes) GetOptionalInt32() int32 { + if m != nil { + return m.OptionalInt32 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalInt64() int64 { + if m != nil { + return m.OptionalInt64 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalUint32() uint32 { + if m != nil { + return m.OptionalUint32 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalUint64() uint64 { + if m != nil { + return m.OptionalUint64 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalSint32() int32 { + if m != nil { + return m.OptionalSint32 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalSint64() int64 { + if m != nil { + return m.OptionalSint64 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalFixed32() uint32 { + if m != nil { + return m.OptionalFixed32 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalFixed64() uint64 { + if m != nil { + return m.OptionalFixed64 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalSfixed32() int32 { + if m != nil { + return m.OptionalSfixed32 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalSfixed64() int64 { + if m != nil { + return m.OptionalSfixed64 + } + return 0 +} + +func (m *TestAllTypes) GetOptionalFloat() float32 { + if m != nil { + return m.OptionalFloat + } + return 0 +} + +func (m *TestAllTypes) GetOptionalDouble() float64 { + if m != nil { + return m.OptionalDouble + } + return 0 +} + +func (m *TestAllTypes) GetOptionalBool() bool { + if m != nil { + return m.OptionalBool + } + return false +} + +func (m *TestAllTypes) GetOptionalString() string { + if m != nil { + return m.OptionalString + } + return "" +} + +func (m *TestAllTypes) GetOptionalBytes() []byte { + if m != nil { + return m.OptionalBytes + } + return nil +} + +func (m *TestAllTypes) GetOptionalNestedMessage() *TestAllTypes_NestedMessage { + if m != nil { + return m.OptionalNestedMessage + } + return nil +} + +func (m *TestAllTypes) GetOptionalForeignMessage() *ForeignMessage { + if m != nil { + return m.OptionalForeignMessage + } + return nil +} + +func (m *TestAllTypes) GetOptionalNestedEnum() TestAllTypes_NestedEnum { + if m != nil { + return m.OptionalNestedEnum + } + return TestAllTypes_FOO +} + +func (m *TestAllTypes) GetOptionalForeignEnum() ForeignEnum { + if m != nil { + return m.OptionalForeignEnum + } + return ForeignEnum_FOREIGN_FOO +} + +func (m *TestAllTypes) GetOptionalStringPiece() string { + if m != nil { + return m.OptionalStringPiece + } + return "" +} + +func (m *TestAllTypes) GetOptionalCord() string { + if m != nil { + return m.OptionalCord + } + return "" +} + +func (m *TestAllTypes) GetRecursiveMessage() *TestAllTypes { + if m != nil { + return m.RecursiveMessage + } + return nil +} + +func (m *TestAllTypes) GetRepeatedInt32() []int32 { + if m != nil { + return m.RepeatedInt32 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedInt64() []int64 { + if m != nil { + return m.RepeatedInt64 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedUint32() []uint32 { + if m != nil { + return m.RepeatedUint32 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedUint64() []uint64 { + if m != nil { + return m.RepeatedUint64 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedSint32() []int32 { + if m != nil { + return m.RepeatedSint32 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedSint64() []int64 { + if m != nil { + return m.RepeatedSint64 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedFixed32() []uint32 { + if m != nil { + return m.RepeatedFixed32 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedFixed64() []uint64 { + if m != nil { + return m.RepeatedFixed64 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedSfixed32() []int32 { + if m != nil { + return m.RepeatedSfixed32 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedSfixed64() []int64 { + if m != nil { + return m.RepeatedSfixed64 + } + return nil +} + +func (m *TestAllTypes) GetRepeatedFloat() []float32 { + if m != nil { + return m.RepeatedFloat + } + return nil +} + +func (m *TestAllTypes) GetRepeatedDouble() []float64 { + if m != nil { + return m.RepeatedDouble + } + return nil +} + +func (m *TestAllTypes) GetRepeatedBool() []bool { + if m != nil { + return m.RepeatedBool + } + return nil +} + +func (m *TestAllTypes) GetRepeatedString() []string { + if m != nil { + return m.RepeatedString + } + return nil +} + +func (m *TestAllTypes) GetRepeatedBytes() [][]byte { + if m != nil { + return m.RepeatedBytes + } + return nil +} + +func (m *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage { + if m != nil { + return m.RepeatedNestedMessage + } + return nil +} + +func (m *TestAllTypes) GetRepeatedForeignMessage() []*ForeignMessage { + if m != nil { + return m.RepeatedForeignMessage + } + return nil +} + +func (m *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum { + if m != nil { + return m.RepeatedNestedEnum + } + return nil +} + +func (m *TestAllTypes) GetRepeatedForeignEnum() []ForeignEnum { + if m != nil { + return m.RepeatedForeignEnum + } + return nil +} + +func (m *TestAllTypes) GetRepeatedStringPiece() []string { + if m != nil { + return m.RepeatedStringPiece + } + return nil +} + +func (m *TestAllTypes) GetRepeatedCord() []string { + if m != nil { + return m.RepeatedCord + } + return nil +} + +func (m *TestAllTypes) GetMapInt32Int32() map[int32]int32 { + if m != nil { + return m.MapInt32Int32 + } + return nil +} + +func (m *TestAllTypes) GetMapInt64Int64() map[int64]int64 { + if m != nil { + return m.MapInt64Int64 + } + return nil +} + +func (m *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 { + if m != nil { + return m.MapUint32Uint32 + } + return nil +} + +func (m *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 { + if m != nil { + return m.MapUint64Uint64 + } + return nil +} + +func (m *TestAllTypes) GetMapSint32Sint32() map[int32]int32 { + if m != nil { + return m.MapSint32Sint32 + } + return nil +} + +func (m *TestAllTypes) GetMapSint64Sint64() map[int64]int64 { + if m != nil { + return m.MapSint64Sint64 + } + return nil +} + +func (m *TestAllTypes) GetMapFixed32Fixed32() map[uint32]uint32 { + if m != nil { + return m.MapFixed32Fixed32 + } + return nil +} + +func (m *TestAllTypes) GetMapFixed64Fixed64() map[uint64]uint64 { + if m != nil { + return m.MapFixed64Fixed64 + } + return nil +} + +func (m *TestAllTypes) GetMapSfixed32Sfixed32() map[int32]int32 { + if m != nil { + return m.MapSfixed32Sfixed32 + } + return nil +} + +func (m *TestAllTypes) GetMapSfixed64Sfixed64() map[int64]int64 { + if m != nil { + return m.MapSfixed64Sfixed64 + } + return nil +} + +func (m *TestAllTypes) GetMapInt32Float() map[int32]float32 { + if m != nil { + return m.MapInt32Float + } + return nil +} + +func (m *TestAllTypes) GetMapInt32Double() map[int32]float64 { + if m != nil { + return m.MapInt32Double + } + return nil +} + +func (m *TestAllTypes) GetMapBoolBool() map[bool]bool { + if m != nil { + return m.MapBoolBool + } + return nil +} + +func (m *TestAllTypes) GetMapStringString() map[string]string { + if m != nil { + return m.MapStringString + } + return nil +} + +func (m *TestAllTypes) GetMapStringBytes() map[string][]byte { + if m != nil { + return m.MapStringBytes + } + return nil +} + +func (m *TestAllTypes) GetMapStringNestedMessage() map[string]*TestAllTypes_NestedMessage { + if m != nil { + return m.MapStringNestedMessage + } + return nil +} + +func (m *TestAllTypes) GetMapStringForeignMessage() map[string]*ForeignMessage { + if m != nil { + return m.MapStringForeignMessage + } + return nil +} + +func (m *TestAllTypes) GetMapStringNestedEnum() map[string]TestAllTypes_NestedEnum { + if m != nil { + return m.MapStringNestedEnum + } + return nil +} + +func (m *TestAllTypes) GetMapStringForeignEnum() map[string]ForeignEnum { + if m != nil { + return m.MapStringForeignEnum + } + return nil +} + +func (m *TestAllTypes) GetOneofUint32() uint32 { + if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint32); ok { + return x.OneofUint32 + } + return 0 +} + +func (m *TestAllTypes) GetOneofNestedMessage() *TestAllTypes_NestedMessage { + if x, ok := m.GetOneofField().(*TestAllTypes_OneofNestedMessage); ok { + return x.OneofNestedMessage + } + return nil +} + +func (m *TestAllTypes) GetOneofString() string { + if x, ok := m.GetOneofField().(*TestAllTypes_OneofString); ok { + return x.OneofString + } + return "" +} + +func (m *TestAllTypes) GetOneofBytes() []byte { + if x, ok := m.GetOneofField().(*TestAllTypes_OneofBytes); ok { + return x.OneofBytes + } + return nil +} + +func (m *TestAllTypes) GetOneofBool() bool { + if x, ok := m.GetOneofField().(*TestAllTypes_OneofBool); ok { + return x.OneofBool + } + return false +} + +func (m *TestAllTypes) GetOneofUint64() uint64 { + if x, ok := m.GetOneofField().(*TestAllTypes_OneofUint64); ok { + return x.OneofUint64 + } + return 0 +} + +func (m *TestAllTypes) GetOneofFloat() float32 { + if x, ok := m.GetOneofField().(*TestAllTypes_OneofFloat); ok { + return x.OneofFloat + } + return 0 +} + +func (m *TestAllTypes) GetOneofDouble() float64 { + if x, ok := m.GetOneofField().(*TestAllTypes_OneofDouble); ok { + return x.OneofDouble + } + return 0 +} + +func (m *TestAllTypes) GetOneofEnum() TestAllTypes_NestedEnum { + if x, ok := m.GetOneofField().(*TestAllTypes_OneofEnum); ok { + return x.OneofEnum + } + return TestAllTypes_FOO +} + +func (m *TestAllTypes) GetOptionalBoolWrapper() *google_protobuf5.BoolValue { + if m != nil { + return m.OptionalBoolWrapper + } + return nil +} + +func (m *TestAllTypes) GetOptionalInt32Wrapper() *google_protobuf5.Int32Value { + if m != nil { + return m.OptionalInt32Wrapper + } + return nil +} + +func (m *TestAllTypes) GetOptionalInt64Wrapper() *google_protobuf5.Int64Value { + if m != nil { + return m.OptionalInt64Wrapper + } + return nil +} + +func (m *TestAllTypes) GetOptionalUint32Wrapper() *google_protobuf5.UInt32Value { + if m != nil { + return m.OptionalUint32Wrapper + } + return nil +} + +func (m *TestAllTypes) GetOptionalUint64Wrapper() *google_protobuf5.UInt64Value { + if m != nil { + return m.OptionalUint64Wrapper + } + return nil +} + +func (m *TestAllTypes) GetOptionalFloatWrapper() *google_protobuf5.FloatValue { + if m != nil { + return m.OptionalFloatWrapper + } + return nil +} + +func (m *TestAllTypes) GetOptionalDoubleWrapper() *google_protobuf5.DoubleValue { + if m != nil { + return m.OptionalDoubleWrapper + } + return nil +} + +func (m *TestAllTypes) GetOptionalStringWrapper() *google_protobuf5.StringValue { + if m != nil { + return m.OptionalStringWrapper + } + return nil +} + +func (m *TestAllTypes) GetOptionalBytesWrapper() *google_protobuf5.BytesValue { + if m != nil { + return m.OptionalBytesWrapper + } + return nil +} + +func (m *TestAllTypes) GetRepeatedBoolWrapper() []*google_protobuf5.BoolValue { + if m != nil { + return m.RepeatedBoolWrapper + } + return nil +} + +func (m *TestAllTypes) GetRepeatedInt32Wrapper() []*google_protobuf5.Int32Value { + if m != nil { + return m.RepeatedInt32Wrapper + } + return nil +} + +func (m *TestAllTypes) GetRepeatedInt64Wrapper() []*google_protobuf5.Int64Value { + if m != nil { + return m.RepeatedInt64Wrapper + } + return nil +} + +func (m *TestAllTypes) GetRepeatedUint32Wrapper() []*google_protobuf5.UInt32Value { + if m != nil { + return m.RepeatedUint32Wrapper + } + return nil +} + +func (m *TestAllTypes) GetRepeatedUint64Wrapper() []*google_protobuf5.UInt64Value { + if m != nil { + return m.RepeatedUint64Wrapper + } + return nil +} + +func (m *TestAllTypes) GetRepeatedFloatWrapper() []*google_protobuf5.FloatValue { + if m != nil { + return m.RepeatedFloatWrapper + } + return nil +} + +func (m *TestAllTypes) GetRepeatedDoubleWrapper() []*google_protobuf5.DoubleValue { + if m != nil { + return m.RepeatedDoubleWrapper + } + return nil +} + +func (m *TestAllTypes) GetRepeatedStringWrapper() []*google_protobuf5.StringValue { + if m != nil { + return m.RepeatedStringWrapper + } + return nil +} + +func (m *TestAllTypes) GetRepeatedBytesWrapper() []*google_protobuf5.BytesValue { + if m != nil { + return m.RepeatedBytesWrapper + } + return nil +} + +func (m *TestAllTypes) GetOptionalDuration() *google_protobuf1.Duration { + if m != nil { + return m.OptionalDuration + } + return nil +} + +func (m *TestAllTypes) GetOptionalTimestamp() *google_protobuf4.Timestamp { + if m != nil { + return m.OptionalTimestamp + } + return nil +} + +func (m *TestAllTypes) GetOptionalFieldMask() *google_protobuf2.FieldMask { + if m != nil { + return m.OptionalFieldMask + } + return nil +} + +func (m *TestAllTypes) GetOptionalStruct() *google_protobuf3.Struct { + if m != nil { + return m.OptionalStruct + } + return nil +} + +func (m *TestAllTypes) GetOptionalAny() *google_protobuf.Any { + if m != nil { + return m.OptionalAny + } + return nil +} + +func (m *TestAllTypes) GetOptionalValue() *google_protobuf3.Value { + if m != nil { + return m.OptionalValue + } + return nil +} + +func (m *TestAllTypes) GetRepeatedDuration() []*google_protobuf1.Duration { + if m != nil { + return m.RepeatedDuration + } + return nil +} + +func (m *TestAllTypes) GetRepeatedTimestamp() []*google_protobuf4.Timestamp { + if m != nil { + return m.RepeatedTimestamp + } + return nil +} + +func (m *TestAllTypes) GetRepeatedFieldmask() []*google_protobuf2.FieldMask { + if m != nil { + return m.RepeatedFieldmask + } + return nil +} + +func (m *TestAllTypes) GetRepeatedStruct() []*google_protobuf3.Struct { + if m != nil { + return m.RepeatedStruct + } + return nil +} + +func (m *TestAllTypes) GetRepeatedAny() []*google_protobuf.Any { + if m != nil { + return m.RepeatedAny + } + return nil +} + +func (m *TestAllTypes) GetRepeatedValue() []*google_protobuf3.Value { + if m != nil { + return m.RepeatedValue + } + return nil +} + +func (m *TestAllTypes) GetFieldname1() int32 { + if m != nil { + return m.Fieldname1 + } + return 0 +} + +func (m *TestAllTypes) GetFieldName2() int32 { + if m != nil { + return m.FieldName2 + } + return 0 +} + +func (m *TestAllTypes) GetXFieldName3() int32 { + if m != nil { + return m.XFieldName3 + } + return 0 +} + +func (m *TestAllTypes) GetField_Name4_() int32 { + if m != nil { + return m.Field_Name4_ + } + return 0 +} + +func (m *TestAllTypes) GetField0Name5() int32 { + if m != nil { + return m.Field0Name5 + } + return 0 +} + +func (m *TestAllTypes) GetField_0Name6() int32 { + if m != nil { + return m.Field_0Name6 + } + return 0 +} + +func (m *TestAllTypes) GetFieldName7() int32 { + if m != nil { + return m.FieldName7 + } + return 0 +} + +func (m *TestAllTypes) GetFieldName8() int32 { + if m != nil { + return m.FieldName8 + } + return 0 +} + +func (m *TestAllTypes) GetField_Name9() int32 { + if m != nil { + return m.Field_Name9 + } + return 0 +} + +func (m *TestAllTypes) GetField_Name10() int32 { + if m != nil { + return m.Field_Name10 + } + return 0 +} + +func (m *TestAllTypes) GetFIELD_NAME11() int32 { + if m != nil { + return m.FIELD_NAME11 + } + return 0 +} + +func (m *TestAllTypes) GetFIELDName12() int32 { + if m != nil { + return m.FIELDName12 + } + return 0 +} + +func (m *TestAllTypes) GetXFieldName13() int32 { + if m != nil { + return m.XFieldName13 + } + return 0 +} + +func (m *TestAllTypes) GetX_FieldName14() int32 { + if m != nil { + return m.X_FieldName14 + } + return 0 +} + +func (m *TestAllTypes) GetField_Name15() int32 { + if m != nil { + return m.Field_Name15 + } + return 0 +} + +func (m *TestAllTypes) GetField__Name16() int32 { + if m != nil { + return m.Field__Name16 + } + return 0 +} + +func (m *TestAllTypes) GetFieldName17__() int32 { + if m != nil { + return m.FieldName17__ + } + return 0 +} + +func (m *TestAllTypes) GetFieldName18__() int32 { + if m != nil { + return m.FieldName18__ + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*TestAllTypes) 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 _TestAllTypes_OneofMarshaler, _TestAllTypes_OneofUnmarshaler, _TestAllTypes_OneofSizer, []interface{}{ + (*TestAllTypes_OneofUint32)(nil), + (*TestAllTypes_OneofNestedMessage)(nil), + (*TestAllTypes_OneofString)(nil), + (*TestAllTypes_OneofBytes)(nil), + (*TestAllTypes_OneofBool)(nil), + (*TestAllTypes_OneofUint64)(nil), + (*TestAllTypes_OneofFloat)(nil), + (*TestAllTypes_OneofDouble)(nil), + (*TestAllTypes_OneofEnum)(nil), + } +} + +func _TestAllTypes_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*TestAllTypes) + // oneof_field + switch x := m.OneofField.(type) { + case *TestAllTypes_OneofUint32: + b.EncodeVarint(111<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.OneofUint32)) + case *TestAllTypes_OneofNestedMessage: + b.EncodeVarint(112<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.OneofNestedMessage); err != nil { + return err + } + case *TestAllTypes_OneofString: + b.EncodeVarint(113<<3 | proto.WireBytes) + b.EncodeStringBytes(x.OneofString) + case *TestAllTypes_OneofBytes: + b.EncodeVarint(114<<3 | proto.WireBytes) + b.EncodeRawBytes(x.OneofBytes) + case *TestAllTypes_OneofBool: + t := uint64(0) + if x.OneofBool { + t = 1 + } + b.EncodeVarint(115<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *TestAllTypes_OneofUint64: + b.EncodeVarint(116<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.OneofUint64)) + case *TestAllTypes_OneofFloat: + b.EncodeVarint(117<<3 | proto.WireFixed32) + b.EncodeFixed32(uint64(math.Float32bits(x.OneofFloat))) + case *TestAllTypes_OneofDouble: + b.EncodeVarint(118<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.OneofDouble)) + case *TestAllTypes_OneofEnum: + b.EncodeVarint(119<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.OneofEnum)) + case nil: + default: + return fmt.Errorf("TestAllTypes.OneofField has unexpected type %T", x) + } + return nil +} + +func _TestAllTypes_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*TestAllTypes) + switch tag { + case 111: // oneof_field.oneof_uint32 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.OneofField = &TestAllTypes_OneofUint32{uint32(x)} + return true, err + case 112: // oneof_field.oneof_nested_message + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TestAllTypes_NestedMessage) + err := b.DecodeMessage(msg) + m.OneofField = &TestAllTypes_OneofNestedMessage{msg} + return true, err + case 113: // oneof_field.oneof_string + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.OneofField = &TestAllTypes_OneofString{x} + return true, err + case 114: // oneof_field.oneof_bytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.OneofField = &TestAllTypes_OneofBytes{x} + return true, err + case 115: // oneof_field.oneof_bool + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.OneofField = &TestAllTypes_OneofBool{x != 0} + return true, err + case 116: // oneof_field.oneof_uint64 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.OneofField = &TestAllTypes_OneofUint64{x} + return true, err + case 117: // oneof_field.oneof_float + if wire != proto.WireFixed32 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed32() + m.OneofField = &TestAllTypes_OneofFloat{math.Float32frombits(uint32(x))} + return true, err + case 118: // oneof_field.oneof_double + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.OneofField = &TestAllTypes_OneofDouble{math.Float64frombits(x)} + return true, err + case 119: // oneof_field.oneof_enum + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.OneofField = &TestAllTypes_OneofEnum{TestAllTypes_NestedEnum(x)} + return true, err + default: + return false, nil + } +} + +func _TestAllTypes_OneofSizer(msg proto.Message) (n int) { + m := msg.(*TestAllTypes) + // oneof_field + switch x := m.OneofField.(type) { + case *TestAllTypes_OneofUint32: + n += proto.SizeVarint(111<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.OneofUint32)) + case *TestAllTypes_OneofNestedMessage: + s := proto.Size(x.OneofNestedMessage) + n += proto.SizeVarint(112<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *TestAllTypes_OneofString: + n += proto.SizeVarint(113<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.OneofString))) + n += len(x.OneofString) + case *TestAllTypes_OneofBytes: + n += proto.SizeVarint(114<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.OneofBytes))) + n += len(x.OneofBytes) + case *TestAllTypes_OneofBool: + n += proto.SizeVarint(115<<3 | proto.WireVarint) + n += 1 + case *TestAllTypes_OneofUint64: + n += proto.SizeVarint(116<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.OneofUint64)) + case *TestAllTypes_OneofFloat: + n += proto.SizeVarint(117<<3 | proto.WireFixed32) + n += 4 + case *TestAllTypes_OneofDouble: + n += proto.SizeVarint(118<<3 | proto.WireFixed64) + n += 8 + case *TestAllTypes_OneofEnum: + n += proto.SizeVarint(119<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.OneofEnum)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type TestAllTypes_NestedMessage struct { + A int32 `protobuf:"varint,1,opt,name=a" json:"a,omitempty"` + Corecursive *TestAllTypes `protobuf:"bytes,2,opt,name=corecursive" json:"corecursive,omitempty"` +} + +func (m *TestAllTypes_NestedMessage) Reset() { *m = TestAllTypes_NestedMessage{} } +func (m *TestAllTypes_NestedMessage) String() string { return proto.CompactTextString(m) } +func (*TestAllTypes_NestedMessage) ProtoMessage() {} +func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *TestAllTypes_NestedMessage) GetA() int32 { + if m != nil { + return m.A + } + return 0 +} + +func (m *TestAllTypes_NestedMessage) GetCorecursive() *TestAllTypes { + if m != nil { + return m.Corecursive + } + return nil +} + +type ForeignMessage struct { + C int32 `protobuf:"varint,1,opt,name=c" json:"c,omitempty"` +} + +func (m *ForeignMessage) Reset() { *m = ForeignMessage{} } +func (m *ForeignMessage) String() string { return proto.CompactTextString(m) } +func (*ForeignMessage) ProtoMessage() {} +func (*ForeignMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *ForeignMessage) GetC() int32 { + if m != nil { + return m.C + } + return 0 +} + +func init() { + proto.RegisterType((*ConformanceRequest)(nil), "conformance.ConformanceRequest") + proto.RegisterType((*ConformanceResponse)(nil), "conformance.ConformanceResponse") + proto.RegisterType((*TestAllTypes)(nil), "conformance.TestAllTypes") + proto.RegisterType((*TestAllTypes_NestedMessage)(nil), "conformance.TestAllTypes.NestedMessage") + proto.RegisterType((*ForeignMessage)(nil), "conformance.ForeignMessage") + proto.RegisterEnum("conformance.WireFormat", WireFormat_name, WireFormat_value) + proto.RegisterEnum("conformance.ForeignEnum", ForeignEnum_name, ForeignEnum_value) + proto.RegisterEnum("conformance.TestAllTypes_NestedEnum", TestAllTypes_NestedEnum_name, TestAllTypes_NestedEnum_value) +} + +func init() { proto.RegisterFile("conformance_proto/conformance.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2737 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x5a, 0xd9, 0x72, 0xdb, 0xc8, + 0xd5, 0x16, 0x08, 0x59, 0x4b, 0x93, 0x92, 0xa8, 0xd6, 0xd6, 0x96, 0x5d, 0x63, 0x58, 0xb2, 0x7f, + 0xd3, 0xf6, 0x8c, 0xac, 0x05, 0x86, 0x65, 0xcf, 0x3f, 0x8e, 0x45, 0x9b, 0xb4, 0xe4, 0x8c, 0x25, + 0x17, 0x64, 0x8d, 0xab, 0x9c, 0x0b, 0x06, 0xa6, 0x20, 0x15, 0xc7, 0x24, 0xc1, 0x01, 0x48, 0x4f, + 0x94, 0xcb, 0xbc, 0x41, 0xf6, 0x7d, 0xbd, 0xcf, 0x7a, 0x93, 0xa4, 0x92, 0xab, 0x54, 0x6e, 0xb2, + 0x27, 0x95, 0x3d, 0x79, 0x85, 0xbc, 0x43, 0x52, 0xbd, 0xa2, 0xbb, 0x01, 0x50, 0xf4, 0x54, 0x0d, + 0x25, 0x1e, 0x7c, 0xfd, 0x9d, 0xd3, 0xe7, 0x1c, 0x7c, 0x2d, 0x1c, 0x18, 0x2c, 0xd7, 0x83, 0xf6, + 0x51, 0x10, 0xb6, 0xbc, 0x76, 0xdd, 0xaf, 0x75, 0xc2, 0xa0, 0x1b, 0xdc, 0x90, 0x2c, 0x2b, 0xc4, + 0x02, 0xf3, 0x92, 0x69, 0xf1, 0xec, 0x71, 0x10, 0x1c, 0x37, 0xfd, 0x1b, 0xe4, 0xd2, 0x8b, 0xde, + 0xd1, 0x0d, 0xaf, 0x7d, 0x42, 0x71, 0x8b, 0x6f, 0xe8, 0x97, 0x0e, 0x7b, 0xa1, 0xd7, 0x6d, 0x04, + 0x6d, 0x76, 0xdd, 0xd2, 0xaf, 0x1f, 0x35, 0xfc, 0xe6, 0x61, 0xad, 0xe5, 0x45, 0x2f, 0x19, 0xe2, + 0xbc, 0x8e, 0x88, 0xba, 0x61, 0xaf, 0xde, 0x65, 0x57, 0x2f, 0xe8, 0x57, 0xbb, 0x8d, 0x96, 0x1f, + 0x75, 0xbd, 0x56, 0x27, 0x2b, 0x80, 0x0f, 0x43, 0xaf, 0xd3, 0xf1, 0xc3, 0x88, 0x5e, 0x5f, 0xfa, + 0x85, 0x01, 0xe0, 0xfd, 0x78, 0x2f, 0xae, 0xff, 0x41, 0xcf, 0x8f, 0xba, 0xf0, 0x3a, 0x28, 0xf2, + 0x15, 0xb5, 0x8e, 0x77, 0xd2, 0x0c, 0xbc, 0x43, 0x64, 0x58, 0x46, 0xa9, 0xb0, 0x3d, 0xe4, 0x4e, + 0xf1, 0x2b, 0x4f, 0xe8, 0x05, 0xb8, 0x0c, 0x0a, 0xef, 0x47, 0x41, 0x5b, 0x00, 0x73, 0x96, 0x51, + 0x1a, 0xdf, 0x1e, 0x72, 0xf3, 0xd8, 0xca, 0x41, 0x7b, 0x60, 0x21, 0xa4, 0xe4, 0xfe, 0x61, 0x2d, + 0xe8, 0x75, 0x3b, 0xbd, 0x6e, 0x8d, 0x78, 0xed, 0x22, 0xd3, 0x32, 0x4a, 0x93, 0xeb, 0x0b, 0x2b, + 0x72, 0x9a, 0x9f, 0x35, 0x42, 0xbf, 0x4a, 0x2e, 0xbb, 0x73, 0x62, 0xdd, 0x1e, 0x59, 0x46, 0xcd, + 0xe5, 0x71, 0x30, 0xca, 0x1c, 0x2e, 0x7d, 0x2a, 0x07, 0x66, 0x94, 0x4d, 0x44, 0x9d, 0xa0, 0x1d, + 0xf9, 0xf0, 0x22, 0xc8, 0x77, 0xbc, 0x30, 0xf2, 0x6b, 0x7e, 0x18, 0x06, 0x21, 0xd9, 0x00, 0x8e, + 0x0b, 0x10, 0x63, 0x05, 0xdb, 0xe0, 0x55, 0x30, 0x15, 0xf9, 0x61, 0xc3, 0x6b, 0x36, 0x3e, 0xc9, + 0x61, 0x23, 0x0c, 0x36, 0x29, 0x2e, 0x50, 0xe8, 0x65, 0x30, 0x11, 0xf6, 0xda, 0x38, 0xc1, 0x0c, + 0xc8, 0xf7, 0x59, 0x60, 0x66, 0x0a, 0x4b, 0x4b, 0x9d, 0x39, 0x68, 0xea, 0x86, 0xd3, 0x52, 0xb7, + 0x08, 0x46, 0xa3, 0x97, 0x8d, 0x4e, 0xc7, 0x3f, 0x44, 0x67, 0xd8, 0x75, 0x6e, 0x28, 0x8f, 0x81, + 0x91, 0xd0, 0x8f, 0x7a, 0xcd, 0xee, 0xd2, 0x7f, 0xaa, 0xa0, 0xf0, 0xd4, 0x8f, 0xba, 0x5b, 0xcd, + 0xe6, 0xd3, 0x93, 0x8e, 0x1f, 0xc1, 0xcb, 0x60, 0x32, 0xe8, 0xe0, 0x5e, 0xf3, 0x9a, 0xb5, 0x46, + 0xbb, 0xbb, 0xb1, 0x4e, 0x12, 0x70, 0xc6, 0x9d, 0xe0, 0xd6, 0x1d, 0x6c, 0xd4, 0x61, 0x8e, 0x4d, + 0xf6, 0x65, 0x2a, 0x30, 0xc7, 0x86, 0x57, 0xc0, 0x94, 0x80, 0xf5, 0x28, 0x1d, 0xde, 0xd5, 0x84, + 0x2b, 0x56, 0x1f, 0x10, 0x6b, 0x02, 0xe8, 0xd8, 0x64, 0x57, 0xc3, 0x2a, 0x50, 0x63, 0x8c, 0x28, + 0x23, 0xde, 0xde, 0x74, 0x0c, 0xdc, 0x4f, 0x32, 0x46, 0x94, 0x11, 0xd7, 0x08, 0xaa, 0x40, 0xc7, + 0x86, 0x57, 0x41, 0x51, 0x00, 0x8f, 0x1a, 0x9f, 0xf0, 0x0f, 0x37, 0xd6, 0xd1, 0xa8, 0x65, 0x94, + 0x46, 0x5d, 0x41, 0x50, 0xa5, 0xe6, 0x24, 0xd4, 0xb1, 0xd1, 0x98, 0x65, 0x94, 0x46, 0x34, 0xa8, + 0x63, 0xc3, 0xeb, 0x60, 0x3a, 0x76, 0xcf, 0x69, 0xc7, 0x2d, 0xa3, 0x34, 0xe5, 0x0a, 0x8e, 0x7d, + 0x66, 0x4f, 0x01, 0x3b, 0x36, 0x02, 0x96, 0x51, 0x2a, 0xea, 0x60, 0xc7, 0x56, 0x52, 0x7f, 0xd4, + 0x0c, 0xbc, 0x2e, 0xca, 0x5b, 0x46, 0x29, 0x17, 0xa7, 0xbe, 0x8a, 0x8d, 0xca, 0xfe, 0x0f, 0x83, + 0xde, 0x8b, 0xa6, 0x8f, 0x0a, 0x96, 0x51, 0x32, 0xe2, 0xfd, 0x3f, 0x20, 0x56, 0xb8, 0x0c, 0xc4, + 0xca, 0xda, 0x8b, 0x20, 0x68, 0xa2, 0x09, 0xcb, 0x28, 0x8d, 0xb9, 0x05, 0x6e, 0x2c, 0x07, 0x41, + 0x53, 0xcd, 0x66, 0x37, 0x6c, 0xb4, 0x8f, 0xd1, 0x24, 0xee, 0x2a, 0x29, 0x9b, 0xc4, 0xaa, 0x44, + 0xf7, 0xe2, 0xa4, 0xeb, 0x47, 0x68, 0x0a, 0xb7, 0x71, 0x1c, 0x5d, 0x19, 0x1b, 0x61, 0x0d, 0x2c, + 0x08, 0x58, 0x9b, 0xde, 0xde, 0x2d, 0x3f, 0x8a, 0xbc, 0x63, 0x1f, 0x41, 0xcb, 0x28, 0xe5, 0xd7, + 0xaf, 0x28, 0x37, 0xb6, 0xdc, 0xa2, 0x2b, 0xbb, 0x04, 0xff, 0x98, 0xc2, 0xdd, 0x39, 0xce, 0xa3, + 0x98, 0xe1, 0x01, 0x40, 0x71, 0x96, 0x82, 0xd0, 0x6f, 0x1c, 0xb7, 0x85, 0x87, 0x19, 0xe2, 0xe1, + 0x9c, 0xe2, 0xa1, 0x4a, 0x31, 0x9c, 0x75, 0x5e, 0x24, 0x53, 0xb1, 0xc3, 0xf7, 0xc0, 0xac, 0x1e, + 0xb7, 0xdf, 0xee, 0xb5, 0xd0, 0x1c, 0x51, 0xa3, 0x4b, 0xa7, 0x05, 0x5d, 0x69, 0xf7, 0x5a, 0x2e, + 0x54, 0x23, 0xc6, 0x36, 0xf8, 0x2e, 0x98, 0x4b, 0x84, 0x4b, 0x88, 0xe7, 0x09, 0x31, 0x4a, 0x8b, + 0x95, 0x90, 0xcd, 0x68, 0x81, 0x12, 0x36, 0x47, 0x62, 0xa3, 0xd5, 0xaa, 0x75, 0x1a, 0x7e, 0xdd, + 0x47, 0x08, 0xd7, 0xac, 0x9c, 0x1b, 0xcb, 0xc5, 0xeb, 0x68, 0xdd, 0x9e, 0xe0, 0xcb, 0xf0, 0x8a, + 0xd4, 0x0a, 0xf5, 0x20, 0x3c, 0x44, 0x67, 0x19, 0xde, 0x88, 0xdb, 0xe1, 0x7e, 0x10, 0x1e, 0xc2, + 0x2a, 0x98, 0x0e, 0xfd, 0x7a, 0x2f, 0x8c, 0x1a, 0xaf, 0x7c, 0x91, 0xd6, 0x73, 0x24, 0xad, 0x67, + 0x33, 0x73, 0xe0, 0x16, 0xc5, 0x1a, 0x9e, 0xce, 0xcb, 0x60, 0x32, 0xf4, 0x3b, 0xbe, 0x87, 0xf3, + 0x48, 0x6f, 0xe6, 0x0b, 0x96, 0x89, 0xd5, 0x86, 0x5b, 0x85, 0xda, 0xc8, 0x30, 0xc7, 0x46, 0x96, + 0x65, 0x62, 0xb5, 0x91, 0x60, 0x54, 0x1b, 0x04, 0x8c, 0xa9, 0xcd, 0x45, 0xcb, 0xc4, 0x6a, 0xc3, + 0xcd, 0xb1, 0xda, 0x28, 0x40, 0xc7, 0x46, 0x4b, 0x96, 0x89, 0xd5, 0x46, 0x06, 0x6a, 0x8c, 0x4c, + 0x6d, 0x96, 0x2d, 0x13, 0xab, 0x0d, 0x37, 0xef, 0x27, 0x19, 0x99, 0xda, 0x5c, 0xb2, 0x4c, 0xac, + 0x36, 0x32, 0x90, 0xaa, 0x8d, 0x00, 0x72, 0x59, 0xb8, 0x6c, 0x99, 0x58, 0x6d, 0xb8, 0x5d, 0x52, + 0x1b, 0x15, 0xea, 0xd8, 0xe8, 0xff, 0x2c, 0x13, 0xab, 0x8d, 0x02, 0xa5, 0x6a, 0x13, 0xbb, 0xe7, + 0xb4, 0x57, 0x2c, 0x13, 0xab, 0x8d, 0x08, 0x40, 0x52, 0x1b, 0x0d, 0xec, 0xd8, 0xa8, 0x64, 0x99, + 0x58, 0x6d, 0x54, 0x30, 0x55, 0x9b, 0x38, 0x08, 0xa2, 0x36, 0x57, 0x2d, 0x13, 0xab, 0x8d, 0x08, + 0x81, 0xab, 0x8d, 0x80, 0x31, 0xb5, 0xb9, 0x66, 0x99, 0x58, 0x6d, 0xb8, 0x39, 0x56, 0x1b, 0x01, + 0x24, 0x6a, 0x73, 0xdd, 0x32, 0xb1, 0xda, 0x70, 0x23, 0x57, 0x9b, 0x38, 0x42, 0xaa, 0x36, 0x6f, + 0x5a, 0x26, 0x56, 0x1b, 0x11, 0x9f, 0x50, 0x9b, 0x98, 0x8d, 0xa8, 0xcd, 0x5b, 0x96, 0x89, 0xd5, + 0x46, 0xd0, 0x71, 0xb5, 0x11, 0x30, 0x4d, 0x6d, 0x56, 0x2d, 0xf3, 0xb5, 0xd4, 0x86, 0xf3, 0x24, + 0xd4, 0x26, 0xce, 0x92, 0xa6, 0x36, 0x6b, 0xc4, 0x43, 0x7f, 0xb5, 0x11, 0xc9, 0x4c, 0xa8, 0x8d, + 0x1e, 0x37, 0x11, 0x85, 0x0d, 0xcb, 0x1c, 0x5c, 0x6d, 0xd4, 0x88, 0xb9, 0xda, 0x24, 0xc2, 0x25, + 0xc4, 0x36, 0x21, 0xee, 0xa3, 0x36, 0x5a, 0xa0, 0x5c, 0x6d, 0xb4, 0x6a, 0x31, 0xb5, 0x71, 0x70, + 0xcd, 0xa8, 0xda, 0xa8, 0x75, 0x13, 0x6a, 0x23, 0xd6, 0x11, 0xb5, 0xb9, 0xc5, 0xf0, 0x46, 0xdc, + 0x0e, 0x44, 0x6d, 0x9e, 0x82, 0xa9, 0x96, 0xd7, 0xa1, 0x02, 0xc1, 0x64, 0x62, 0x93, 0x24, 0xf5, + 0xcd, 0xec, 0x0c, 0x3c, 0xf6, 0x3a, 0x44, 0x3b, 0xc8, 0x47, 0xa5, 0xdd, 0x0d, 0x4f, 0xdc, 0x89, + 0x96, 0x6c, 0x93, 0x58, 0x1d, 0x9b, 0xa9, 0xca, 0xed, 0xc1, 0x58, 0x1d, 0x9b, 0x7c, 0x28, 0xac, + 0xcc, 0x06, 0x9f, 0x83, 0x69, 0xcc, 0x4a, 0xe5, 0x87, 0xab, 0xd0, 0x1d, 0xc2, 0xbb, 0xd2, 0x97, + 0x97, 0x4a, 0x13, 0xfd, 0xa4, 0xcc, 0x38, 0x3c, 0xd9, 0x2a, 0x73, 0x3b, 0x36, 0x17, 0xae, 0xb7, + 0x07, 0xe4, 0x76, 0x6c, 0xfa, 0xa9, 0x72, 0x73, 0x2b, 0xe7, 0xa6, 0x22, 0xc7, 0xb5, 0xee, 0xff, + 0x07, 0xe0, 0xa6, 0x02, 0xb8, 0xaf, 0xc5, 0x2d, 0x5b, 0x65, 0x6e, 0xc7, 0xe6, 0xf2, 0xf8, 0xce, + 0x80, 0xdc, 0x8e, 0xbd, 0xaf, 0xc5, 0x2d, 0x5b, 0xe1, 0xc7, 0xc1, 0x0c, 0xe6, 0x66, 0xda, 0x26, + 0x24, 0xf5, 0x2e, 0x61, 0x5f, 0xed, 0xcb, 0xce, 0x74, 0x96, 0xfd, 0xa0, 0xfc, 0x38, 0x50, 0xd5, + 0xae, 0x78, 0x70, 0x6c, 0xa1, 0xc4, 0x1f, 0x19, 0xd4, 0x83, 0x63, 0xb3, 0x1f, 0x9a, 0x07, 0x61, + 0x87, 0x47, 0x60, 0x8e, 0xe4, 0x87, 0x6f, 0x42, 0x28, 0xf8, 0x3d, 0xe2, 0x63, 0xbd, 0x7f, 0x8e, + 0x18, 0x98, 0xff, 0xa4, 0x5e, 0x70, 0xc8, 0xfa, 0x15, 0xd5, 0x0f, 0xae, 0x04, 0xdf, 0xcb, 0xd6, + 0xc0, 0x7e, 0x1c, 0x9b, 0xff, 0xd4, 0xfd, 0xc4, 0x57, 0xd4, 0xfb, 0x95, 0x1e, 0x1a, 0xe5, 0x41, + 0xef, 0x57, 0x72, 0x9c, 0x68, 0xf7, 0x2b, 0x3d, 0x62, 0x9e, 0x81, 0x62, 0xcc, 0xca, 0xce, 0x98, + 0xfb, 0x84, 0xf6, 0xad, 0xd3, 0x69, 0xe9, 0xe9, 0x43, 0x79, 0x27, 0x5b, 0x8a, 0x11, 0xee, 0x02, + 0xec, 0x89, 0x9c, 0x46, 0xf4, 0x48, 0x7a, 0x40, 0x58, 0xaf, 0xf5, 0x65, 0xc5, 0xe7, 0x14, 0xfe, + 0x9f, 0x52, 0xe6, 0x5b, 0xb1, 0x45, 0xb4, 0x3b, 0x95, 0x42, 0x76, 0x7e, 0x55, 0x06, 0x69, 0x77, + 0x02, 0xa5, 0x9f, 0x52, 0xbb, 0x4b, 0x56, 0x9e, 0x04, 0xc6, 0x4d, 0x8f, 0xbc, 0xea, 0x00, 0x49, + 0xa0, 0xcb, 0xc9, 0x69, 0x18, 0x27, 0x41, 0x32, 0xc2, 0x0e, 0x38, 0x2b, 0x11, 0x6b, 0x87, 0xe4, + 0x43, 0xe2, 0xe1, 0xe6, 0x00, 0x1e, 0x94, 0x63, 0x91, 0x7a, 0x9a, 0x6f, 0xa5, 0x5e, 0x84, 0x11, + 0x58, 0x94, 0x3c, 0xea, 0xa7, 0xe6, 0x36, 0x71, 0xe9, 0x0c, 0xe0, 0x52, 0x3d, 0x33, 0xa9, 0xcf, + 0x85, 0x56, 0xfa, 0x55, 0x78, 0x0c, 0xe6, 0x93, 0xdb, 0x24, 0x47, 0xdf, 0xce, 0x20, 0xf7, 0x80, + 0xb4, 0x0d, 0x7c, 0xf4, 0x49, 0xf7, 0x80, 0x76, 0x05, 0xbe, 0x0f, 0x16, 0x52, 0x76, 0x47, 0x3c, + 0x3d, 0x22, 0x9e, 0x36, 0x06, 0xdf, 0x5a, 0xec, 0x6a, 0xb6, 0x95, 0x72, 0x09, 0x2e, 0x83, 0x42, + 0xd0, 0xf6, 0x83, 0x23, 0x7e, 0xdc, 0x04, 0xf8, 0x11, 0x7b, 0x7b, 0xc8, 0xcd, 0x13, 0x2b, 0x3b, + 0x3c, 0x3e, 0x06, 0x66, 0x29, 0x48, 0xab, 0x6d, 0xe7, 0xb5, 0x1e, 0xb7, 0xb6, 0x87, 0x5c, 0x48, + 0x68, 0xd4, 0x5a, 0x8a, 0x08, 0x58, 0xb7, 0x7f, 0xc0, 0x27, 0x12, 0xc4, 0xca, 0x7a, 0xf7, 0x22, + 0xa0, 0x5f, 0x59, 0xdb, 0x86, 0x6c, 0xbc, 0x01, 0x88, 0x91, 0x76, 0xe1, 0x05, 0x00, 0x18, 0x04, + 0xdf, 0x87, 0x11, 0x7e, 0x10, 0xdd, 0x1e, 0x72, 0xc7, 0x29, 0x02, 0xdf, 0x5b, 0xca, 0x56, 0x1d, + 0x1b, 0x75, 0x2d, 0xa3, 0x34, 0xac, 0x6c, 0xd5, 0xb1, 0x63, 0x47, 0x54, 0x7b, 0x7a, 0xf8, 0xf1, + 0x58, 0x38, 0xa2, 0x62, 0x22, 0x78, 0x98, 0x90, 0xbc, 0xc2, 0x8f, 0xc6, 0x82, 0x87, 0x09, 0x43, + 0x85, 0x47, 0x43, 0xca, 0xf6, 0xe1, 0xe0, 0x8f, 0x78, 0x22, 0x66, 0x52, 0x9e, 0x3d, 0xe9, 0x69, + 0x8c, 0x88, 0x0c, 0x9b, 0xa6, 0xa1, 0x5f, 0x19, 0x24, 0xf7, 0x8b, 0x2b, 0x74, 0xdc, 0xb6, 0xc2, + 0xe7, 0x3c, 0x2b, 0x78, 0xab, 0xef, 0x79, 0xcd, 0x9e, 0x1f, 0x3f, 0xa6, 0x61, 0xd3, 0x33, 0xba, + 0x0e, 0xba, 0x60, 0x5e, 0x9d, 0xd1, 0x08, 0xc6, 0x5f, 0x1b, 0xec, 0xd1, 0x56, 0x67, 0x24, 0x7a, + 0x47, 0x29, 0x67, 0x95, 0x49, 0x4e, 0x06, 0xa7, 0x63, 0x0b, 0xce, 0xdf, 0xf4, 0xe1, 0x74, 0xec, + 0x24, 0xa7, 0x63, 0x73, 0xce, 0x03, 0xe9, 0x21, 0xbf, 0xa7, 0x06, 0xfa, 0x5b, 0x4a, 0x7a, 0x3e, + 0x41, 0x7a, 0x20, 0x45, 0x3a, 0xa7, 0x0e, 0x89, 0xb2, 0x68, 0xa5, 0x58, 0x7f, 0xd7, 0x8f, 0x96, + 0x07, 0x3b, 0xa7, 0x8e, 0x94, 0xd2, 0x32, 0x40, 0x1a, 0x47, 0xb0, 0xfe, 0x3e, 0x2b, 0x03, 0xa4, + 0x97, 0xb4, 0x0c, 0x10, 0x5b, 0x5a, 0xa8, 0xb4, 0xd3, 0x04, 0xe9, 0x1f, 0xb2, 0x42, 0xa5, 0xcd, + 0xa7, 0x85, 0x4a, 0x8d, 0x69, 0xb4, 0x4c, 0x61, 0x38, 0xed, 0x1f, 0xb3, 0x68, 0xe9, 0x4d, 0xa8, + 0xd1, 0x52, 0x63, 0x5a, 0x06, 0xc8, 0x3d, 0x2a, 0x58, 0xff, 0x94, 0x95, 0x01, 0x72, 0xdb, 0x6a, + 0x19, 0x20, 0x36, 0xce, 0xb9, 0x27, 0x3d, 0x1c, 0x28, 0xcd, 0xff, 0x67, 0x83, 0xc8, 0x60, 0xdf, + 0xe6, 0x97, 0x1f, 0x0a, 0xa5, 0x20, 0xd5, 0x91, 0x81, 0x60, 0xfc, 0x8b, 0xc1, 0x9e, 0xb4, 0xfa, + 0x35, 0xbf, 0x32, 0x58, 0xc8, 0xe0, 0x94, 0x1a, 0xea, 0xaf, 0x7d, 0x38, 0x45, 0xf3, 0x2b, 0x53, + 0x08, 0xa9, 0x46, 0xda, 0x30, 0x42, 0x90, 0xfe, 0x8d, 0x92, 0x9e, 0xd2, 0xfc, 0xea, 0xcc, 0x22, + 0x8b, 0x56, 0x8a, 0xf5, 0xef, 0xfd, 0x68, 0x45, 0xf3, 0xab, 0x13, 0x8e, 0xb4, 0x0c, 0xa8, 0xcd, + 0xff, 0x8f, 0xac, 0x0c, 0xc8, 0xcd, 0xaf, 0x0c, 0x03, 0xd2, 0x42, 0xd5, 0x9a, 0xff, 0x9f, 0x59, + 0xa1, 0x2a, 0xcd, 0xaf, 0x8e, 0x0e, 0xd2, 0x68, 0xb5, 0xe6, 0xff, 0x57, 0x16, 0xad, 0xd2, 0xfc, + 0xea, 0xb3, 0x68, 0x5a, 0x06, 0xd4, 0xe6, 0xff, 0x77, 0x56, 0x06, 0xe4, 0xe6, 0x57, 0x06, 0x0e, + 0x9c, 0xf3, 0xa1, 0x34, 0xd7, 0xe5, 0xef, 0x70, 0xd0, 0x77, 0x73, 0x6c, 0x4e, 0x96, 0xd8, 0x3b, + 0x43, 0xc4, 0x33, 0x5f, 0x6e, 0x81, 0x8f, 0x80, 0x18, 0x1a, 0xd6, 0xc4, 0xcb, 0x1a, 0xf4, 0xbd, + 0x5c, 0xc6, 0xf9, 0xf1, 0x94, 0x43, 0x5c, 0xe1, 0x5f, 0x98, 0xe0, 0x47, 0xc1, 0x8c, 0x34, 0xc4, + 0xe6, 0x2f, 0x8e, 0xd0, 0xf7, 0xb3, 0xc8, 0xaa, 0x18, 0xf3, 0xd8, 0x8b, 0x5e, 0xc6, 0x64, 0xc2, + 0x04, 0xb7, 0xd4, 0xb9, 0x70, 0xaf, 0xde, 0x45, 0x3f, 0xa0, 0x44, 0x0b, 0x69, 0x45, 0xe8, 0xd5, + 0xbb, 0xca, 0xc4, 0xb8, 0x57, 0xef, 0xc2, 0x4d, 0x20, 0x66, 0x8b, 0x35, 0xaf, 0x7d, 0x82, 0x7e, + 0x48, 0xd7, 0xcf, 0x26, 0xd6, 0x6f, 0xb5, 0x4f, 0xdc, 0x3c, 0x87, 0x6e, 0xb5, 0x4f, 0xe0, 0x5d, + 0x69, 0xd6, 0xfc, 0x0a, 0x97, 0x01, 0xfd, 0x88, 0xae, 0x9d, 0x4f, 0xac, 0xa5, 0x55, 0x12, 0xd3, + 0x4d, 0xf2, 0x15, 0x97, 0x27, 0x6e, 0x50, 0x5e, 0x9e, 0x1f, 0xe7, 0x48, 0xb5, 0xfb, 0x95, 0x47, + 0xf4, 0xa5, 0x54, 0x1e, 0x41, 0x14, 0x97, 0xe7, 0x27, 0xb9, 0x0c, 0x85, 0x93, 0xca, 0xc3, 0x97, + 0xc5, 0xe5, 0x91, 0xb9, 0x48, 0x79, 0x48, 0x75, 0x7e, 0x9a, 0xc5, 0x25, 0x55, 0x27, 0x1e, 0x0a, + 0xb2, 0x55, 0xb8, 0x3a, 0xf2, 0xad, 0x82, 0xab, 0xf3, 0x4b, 0x4a, 0x94, 0x5d, 0x1d, 0xe9, 0xee, + 0x60, 0xd5, 0x11, 0x14, 0xb8, 0x3a, 0x3f, 0xa3, 0xeb, 0x33, 0xaa, 0xc3, 0xa1, 0xac, 0x3a, 0x62, + 0x25, 0xad, 0xce, 0xcf, 0xe9, 0xda, 0xcc, 0xea, 0x70, 0x38, 0xad, 0xce, 0x05, 0x00, 0xc8, 0xfe, + 0xdb, 0x5e, 0xcb, 0x5f, 0x43, 0x9f, 0x36, 0xc9, 0x6b, 0x28, 0xc9, 0x04, 0x2d, 0x90, 0xa7, 0xfd, + 0x8b, 0xbf, 0xae, 0xa3, 0xcf, 0xc8, 0x88, 0x5d, 0x6c, 0x82, 0x17, 0x41, 0xa1, 0x16, 0x43, 0x36, + 0xd0, 0x67, 0x19, 0xa4, 0xca, 0x21, 0x1b, 0x70, 0x09, 0x4c, 0x50, 0x04, 0x81, 0xd8, 0x35, 0xf4, + 0x39, 0x9d, 0x86, 0xfc, 0x3d, 0x49, 0xbe, 0xad, 0x62, 0xc8, 0x4d, 0xf4, 0x79, 0x8a, 0x90, 0x6d, + 0x70, 0x99, 0xd3, 0xac, 0x12, 0x1e, 0x07, 0x7d, 0x41, 0x01, 0x61, 0x1e, 0x47, 0xec, 0x08, 0x7f, + 0xbb, 0x85, 0xbe, 0xa8, 0x3b, 0xba, 0x85, 0x01, 0x22, 0xb4, 0x4d, 0xf4, 0x25, 0x3d, 0xda, 0xcd, + 0x78, 0xcb, 0xf8, 0xeb, 0x6d, 0xf4, 0x65, 0x9d, 0xe2, 0x36, 0x5c, 0x02, 0x85, 0xaa, 0x40, 0xac, + 0xad, 0xa2, 0xaf, 0xb0, 0x38, 0x04, 0xc9, 0xda, 0x2a, 0xc1, 0xec, 0x54, 0xde, 0x7d, 0x50, 0xdb, + 0xdd, 0x7a, 0x5c, 0x59, 0x5b, 0x43, 0x5f, 0xe5, 0x18, 0x6c, 0xa4, 0xb6, 0x18, 0x43, 0x72, 0xbd, + 0x8e, 0xbe, 0xa6, 0x60, 0x88, 0x0d, 0x5e, 0x02, 0x93, 0x35, 0x29, 0xbf, 0x6b, 0x1b, 0xe8, 0xeb, + 0x09, 0x6f, 0x1b, 0x14, 0x55, 0x8d, 0x51, 0x36, 0xfa, 0x46, 0x02, 0x65, 0xc7, 0x09, 0xa4, 0xa0, + 0x9b, 0xe8, 0x9b, 0x72, 0x02, 0x09, 0x48, 0xca, 0x32, 0xdd, 0x9d, 0x83, 0xbe, 0x95, 0x00, 0x39, + 0xd8, 0x9f, 0x14, 0xd3, 0xad, 0x5a, 0x0d, 0x7d, 0x3b, 0x81, 0xba, 0x85, 0x51, 0x52, 0x4c, 0x9b, + 0xb5, 0x1a, 0xfa, 0x4e, 0x22, 0xaa, 0xcd, 0xc5, 0xe7, 0x60, 0x42, 0x7d, 0xd0, 0x29, 0x00, 0xc3, + 0x63, 0x6f, 0x44, 0x0d, 0x0f, 0xbe, 0x0d, 0xf2, 0xf5, 0x40, 0xbc, 0xd4, 0x40, 0xb9, 0xd3, 0x5e, + 0x80, 0xc8, 0xe8, 0xc5, 0x7b, 0x00, 0x26, 0x87, 0x94, 0xb0, 0x08, 0xcc, 0x97, 0xfe, 0x09, 0x73, + 0x81, 0x7f, 0x85, 0xb3, 0xe0, 0x0c, 0xbd, 0x7d, 0x72, 0xc4, 0x46, 0xbf, 0xdc, 0xc9, 0x6d, 0x1a, + 0x31, 0x83, 0x3c, 0x90, 0x94, 0x19, 0xcc, 0x14, 0x06, 0x53, 0x66, 0x28, 0x83, 0xd9, 0xb4, 0xd1, + 0xa3, 0xcc, 0x31, 0x91, 0xc2, 0x31, 0x91, 0xce, 0xa1, 0x8c, 0x18, 0x65, 0x8e, 0xe1, 0x14, 0x8e, + 0xe1, 0x24, 0x47, 0x62, 0x94, 0x28, 0x73, 0x4c, 0xa7, 0x70, 0x4c, 0xa7, 0x73, 0x28, 0x23, 0x43, + 0x99, 0x03, 0xa6, 0x70, 0x40, 0x99, 0xe3, 0x01, 0x98, 0x4f, 0x1f, 0x0c, 0xca, 0x2c, 0xa3, 0x29, + 0x2c, 0xa3, 0x19, 0x2c, 0xea, 0xf0, 0x4f, 0x66, 0x19, 0x49, 0x61, 0x19, 0x91, 0x59, 0xaa, 0x00, + 0x65, 0x8d, 0xf7, 0x64, 0x9e, 0xa9, 0x14, 0x9e, 0xa9, 0x2c, 0x1e, 0x6d, 0x7c, 0x27, 0xf3, 0x14, + 0x53, 0x78, 0x8a, 0xa9, 0xdd, 0x26, 0x0f, 0xe9, 0x4e, 0xeb, 0xd7, 0x9c, 0xcc, 0xb0, 0x05, 0x66, + 0x52, 0xe6, 0x71, 0xa7, 0x51, 0x18, 0x32, 0xc5, 0x5d, 0x50, 0xd4, 0x87, 0x6f, 0xf2, 0xfa, 0xb1, + 0x94, 0xf5, 0x63, 0x29, 0x4d, 0xa2, 0x0f, 0xda, 0x64, 0x8e, 0xf1, 0x14, 0x8e, 0xf1, 0xe4, 0x36, + 0xf4, 0x89, 0xda, 0x69, 0x14, 0x05, 0x99, 0x22, 0x04, 0xe7, 0xfa, 0x8c, 0xcc, 0x52, 0xa8, 0xde, + 0x91, 0xa9, 0x5e, 0xe3, 0x7d, 0x95, 0xe4, 0xf3, 0x18, 0x9c, 0xef, 0x37, 0x33, 0x4b, 0x71, 0xba, + 0xa6, 0x3a, 0xed, 0xfb, 0x0a, 0x4b, 0x72, 0xd4, 0xa4, 0x0d, 0x97, 0x36, 0x2b, 0x4b, 0x71, 0x72, + 0x47, 0x76, 0x32, 0xe8, 0x4b, 0x2d, 0xc9, 0x9b, 0x07, 0xce, 0x66, 0xce, 0xcb, 0x52, 0xdc, 0xad, + 0xa8, 0xee, 0xb2, 0x5f, 0x75, 0xc5, 0x2e, 0x96, 0x6e, 0x03, 0x20, 0x4d, 0xf6, 0x46, 0x81, 0x59, + 0xdd, 0xdb, 0x2b, 0x0e, 0xe1, 0x5f, 0xca, 0x5b, 0x6e, 0xd1, 0xa0, 0xbf, 0x3c, 0x2f, 0xe6, 0xb0, + 0xbb, 0xdd, 0xca, 0xc3, 0xe2, 0x7f, 0xf9, 0x7f, 0x46, 0x79, 0x42, 0x8c, 0xa2, 0xf0, 0xa9, 0xb2, + 0xf4, 0x06, 0x98, 0xd4, 0x06, 0x92, 0x05, 0x60, 0xd4, 0xf9, 0x81, 0x52, 0xbf, 0x76, 0x13, 0x80, + 0xf8, 0xdf, 0x30, 0xc1, 0x29, 0x90, 0x3f, 0xd8, 0xdd, 0x7f, 0x52, 0xb9, 0xbf, 0x53, 0xdd, 0xa9, + 0x3c, 0x28, 0x0e, 0xc1, 0x02, 0x18, 0x7b, 0xe2, 0xee, 0x3d, 0xdd, 0x2b, 0x1f, 0x54, 0x8b, 0x06, + 0x1c, 0x03, 0xc3, 0x8f, 0xf6, 0xf7, 0x76, 0x8b, 0xb9, 0x6b, 0xf7, 0x40, 0x5e, 0x9e, 0x07, 0x4e, + 0x81, 0x7c, 0x75, 0xcf, 0xad, 0xec, 0x3c, 0xdc, 0xad, 0xd1, 0x48, 0x25, 0x03, 0x8d, 0x58, 0x31, + 0x3c, 0x2f, 0xe6, 0xca, 0x17, 0xc1, 0x85, 0x7a, 0xd0, 0x4a, 0xfc, 0x61, 0x26, 0x25, 0xe7, 0xc5, + 0x08, 0xb1, 0x6e, 0xfc, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x33, 0xc2, 0x0c, 0xb6, 0xeb, 0x26, 0x00, + 0x00, +} diff --git a/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.proto b/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.proto new file mode 100644 index 0000000..95a8fd1 --- /dev/null +++ b/vendor/github.com/golang/protobuf/_conformance/conformance_proto/conformance.proto @@ -0,0 +1,285 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; +package conformance; +option java_package = "com.google.protobuf.conformance"; + +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/field_mask.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; + +// This defines the conformance testing protocol. This protocol exists between +// the conformance test suite itself and the code being tested. For each test, +// the suite will send a ConformanceRequest message and expect a +// ConformanceResponse message. +// +// You can either run the tests in two different ways: +// +// 1. in-process (using the interface in conformance_test.h). +// +// 2. as a sub-process communicating over a pipe. Information about how to +// do this is in conformance_test_runner.cc. +// +// Pros/cons of the two approaches: +// +// - running as a sub-process is much simpler for languages other than C/C++. +// +// - running as a sub-process may be more tricky in unusual environments like +// iOS apps, where fork/stdin/stdout are not available. + +enum WireFormat { + UNSPECIFIED = 0; + PROTOBUF = 1; + JSON = 2; +} + +// Represents a single test case's input. The testee should: +// +// 1. parse this proto (which should always succeed) +// 2. parse the protobuf or JSON payload in "payload" (which may fail) +// 3. if the parse succeeded, serialize the message in the requested format. +message ConformanceRequest { + // The payload (whether protobuf of JSON) is always for a TestAllTypes proto + // (see below). + oneof payload { + bytes protobuf_payload = 1; + string json_payload = 2; + } + + // Which format should the testee serialize its message to? + WireFormat requested_output_format = 3; +} + +// Represents a single test case's output. +message ConformanceResponse { + oneof result { + // This string should be set to indicate parsing failed. The string can + // provide more information about the parse error if it is available. + // + // Setting this string does not necessarily mean the testee failed the + // test. Some of the test cases are intentionally invalid input. + string parse_error = 1; + + // If the input was successfully parsed but errors occurred when + // serializing it to the requested output format, set the error message in + // this field. + string serialize_error = 6; + + // This should be set if some other error occurred. This will always + // indicate that the test failed. The string can provide more information + // about the failure. + string runtime_error = 2; + + // If the input was successfully parsed and the requested output was + // protobuf, serialize it to protobuf and set it in this field. + bytes protobuf_payload = 3; + + // If the input was successfully parsed and the requested output was JSON, + // serialize to JSON and set it in this field. + string json_payload = 4; + + // For when the testee skipped the test, likely because a certain feature + // wasn't supported, like JSON input/output. + string skipped = 5; + } +} + +// This proto includes every type of field in both singular and repeated +// forms. +message TestAllTypes { + message NestedMessage { + int32 a = 1; + TestAllTypes corecursive = 2; + } + + enum NestedEnum { + FOO = 0; + BAR = 1; + BAZ = 2; + NEG = -1; // Intentionally negative. + } + + // Singular + int32 optional_int32 = 1; + int64 optional_int64 = 2; + uint32 optional_uint32 = 3; + uint64 optional_uint64 = 4; + sint32 optional_sint32 = 5; + sint64 optional_sint64 = 6; + fixed32 optional_fixed32 = 7; + fixed64 optional_fixed64 = 8; + sfixed32 optional_sfixed32 = 9; + sfixed64 optional_sfixed64 = 10; + float optional_float = 11; + double optional_double = 12; + bool optional_bool = 13; + string optional_string = 14; + bytes optional_bytes = 15; + + NestedMessage optional_nested_message = 18; + ForeignMessage optional_foreign_message = 19; + + NestedEnum optional_nested_enum = 21; + ForeignEnum optional_foreign_enum = 22; + + string optional_string_piece = 24 [ctype=STRING_PIECE]; + string optional_cord = 25 [ctype=CORD]; + + TestAllTypes recursive_message = 27; + + // Repeated + repeated int32 repeated_int32 = 31; + repeated int64 repeated_int64 = 32; + repeated uint32 repeated_uint32 = 33; + repeated uint64 repeated_uint64 = 34; + repeated sint32 repeated_sint32 = 35; + repeated sint64 repeated_sint64 = 36; + repeated fixed32 repeated_fixed32 = 37; + repeated fixed64 repeated_fixed64 = 38; + repeated sfixed32 repeated_sfixed32 = 39; + repeated sfixed64 repeated_sfixed64 = 40; + repeated float repeated_float = 41; + repeated double repeated_double = 42; + repeated bool repeated_bool = 43; + repeated string repeated_string = 44; + repeated bytes repeated_bytes = 45; + + repeated NestedMessage repeated_nested_message = 48; + repeated ForeignMessage repeated_foreign_message = 49; + + repeated NestedEnum repeated_nested_enum = 51; + repeated ForeignEnum repeated_foreign_enum = 52; + + repeated string repeated_string_piece = 54 [ctype=STRING_PIECE]; + repeated string repeated_cord = 55 [ctype=CORD]; + + // Map + map < int32, int32> map_int32_int32 = 56; + map < int64, int64> map_int64_int64 = 57; + map < uint32, uint32> map_uint32_uint32 = 58; + map < uint64, uint64> map_uint64_uint64 = 59; + map < sint32, sint32> map_sint32_sint32 = 60; + map < sint64, sint64> map_sint64_sint64 = 61; + map < fixed32, fixed32> map_fixed32_fixed32 = 62; + map < fixed64, fixed64> map_fixed64_fixed64 = 63; + map map_sfixed32_sfixed32 = 64; + map map_sfixed64_sfixed64 = 65; + map < int32, float> map_int32_float = 66; + map < int32, double> map_int32_double = 67; + map < bool, bool> map_bool_bool = 68; + map < string, string> map_string_string = 69; + map < string, bytes> map_string_bytes = 70; + map < string, NestedMessage> map_string_nested_message = 71; + map < string, ForeignMessage> map_string_foreign_message = 72; + map < string, NestedEnum> map_string_nested_enum = 73; + map < string, ForeignEnum> map_string_foreign_enum = 74; + + oneof oneof_field { + uint32 oneof_uint32 = 111; + NestedMessage oneof_nested_message = 112; + string oneof_string = 113; + bytes oneof_bytes = 114; + bool oneof_bool = 115; + uint64 oneof_uint64 = 116; + float oneof_float = 117; + double oneof_double = 118; + NestedEnum oneof_enum = 119; + } + + // Well-known types + google.protobuf.BoolValue optional_bool_wrapper = 201; + google.protobuf.Int32Value optional_int32_wrapper = 202; + google.protobuf.Int64Value optional_int64_wrapper = 203; + google.protobuf.UInt32Value optional_uint32_wrapper = 204; + google.protobuf.UInt64Value optional_uint64_wrapper = 205; + google.protobuf.FloatValue optional_float_wrapper = 206; + google.protobuf.DoubleValue optional_double_wrapper = 207; + google.protobuf.StringValue optional_string_wrapper = 208; + google.protobuf.BytesValue optional_bytes_wrapper = 209; + + repeated google.protobuf.BoolValue repeated_bool_wrapper = 211; + repeated google.protobuf.Int32Value repeated_int32_wrapper = 212; + repeated google.protobuf.Int64Value repeated_int64_wrapper = 213; + repeated google.protobuf.UInt32Value repeated_uint32_wrapper = 214; + repeated google.protobuf.UInt64Value repeated_uint64_wrapper = 215; + repeated google.protobuf.FloatValue repeated_float_wrapper = 216; + repeated google.protobuf.DoubleValue repeated_double_wrapper = 217; + repeated google.protobuf.StringValue repeated_string_wrapper = 218; + repeated google.protobuf.BytesValue repeated_bytes_wrapper = 219; + + google.protobuf.Duration optional_duration = 301; + google.protobuf.Timestamp optional_timestamp = 302; + google.protobuf.FieldMask optional_field_mask = 303; + google.protobuf.Struct optional_struct = 304; + google.protobuf.Any optional_any = 305; + google.protobuf.Value optional_value = 306; + + repeated google.protobuf.Duration repeated_duration = 311; + repeated google.protobuf.Timestamp repeated_timestamp = 312; + repeated google.protobuf.FieldMask repeated_fieldmask = 313; + repeated google.protobuf.Struct repeated_struct = 324; + repeated google.protobuf.Any repeated_any = 315; + repeated google.protobuf.Value repeated_value = 316; + + // Test field-name-to-JSON-name convention. + // (protobuf says names can be any valid C/C++ identifier.) + int32 fieldname1 = 401; + int32 field_name2 = 402; + int32 _field_name3 = 403; + int32 field__name4_ = 404; + int32 field0name5 = 405; + int32 field_0_name6 = 406; + int32 fieldName7 = 407; + int32 FieldName8 = 408; + int32 field_Name9 = 409; + int32 Field_Name10 = 410; + int32 FIELD_NAME11 = 411; + int32 FIELD_name12 = 412; + int32 __field_name13 = 413; + int32 __Field_name14 = 414; + int32 field__name15 = 415; + int32 field__Name16 = 416; + int32 field_name17__ = 417; + int32 Field_name18__ = 418; +} + +message ForeignMessage { + int32 c = 1; +} + +enum ForeignEnum { + FOREIGN_FOO = 0; + FOREIGN_BAR = 1; + FOREIGN_BAZ = 2; +} diff --git a/vendor/github.com/golang/protobuf/descriptor/descriptor.go b/vendor/github.com/golang/protobuf/descriptor/descriptor.go new file mode 100644 index 0000000..ac7e51b --- /dev/null +++ b/vendor/github.com/golang/protobuf/descriptor/descriptor.go @@ -0,0 +1,93 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Package descriptor provides functions for obtaining protocol buffer +// descriptors for generated Go types. +// +// These functions cannot go in package proto because they depend on the +// generated protobuf descriptor messages, which themselves depend on proto. +package descriptor + +import ( + "bytes" + "compress/gzip" + "fmt" + "io/ioutil" + + "github.com/golang/protobuf/proto" + protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor" +) + +// extractFile extracts a FileDescriptorProto from a gzip'd buffer. +func extractFile(gz []byte) (*protobuf.FileDescriptorProto, error) { + r, err := gzip.NewReader(bytes.NewReader(gz)) + if err != nil { + return nil, fmt.Errorf("failed to open gzip reader: %v", err) + } + defer r.Close() + + b, err := ioutil.ReadAll(r) + if err != nil { + return nil, fmt.Errorf("failed to uncompress descriptor: %v", err) + } + + fd := new(protobuf.FileDescriptorProto) + if err := proto.Unmarshal(b, fd); err != nil { + return nil, fmt.Errorf("malformed FileDescriptorProto: %v", err) + } + + return fd, nil +} + +// Message is a proto.Message with a method to return its descriptor. +// +// Message types generated by the protocol compiler always satisfy +// the Message interface. +type Message interface { + proto.Message + Descriptor() ([]byte, []int) +} + +// ForMessage returns a FileDescriptorProto and a DescriptorProto from within it +// describing the given message. +func ForMessage(msg Message) (fd *protobuf.FileDescriptorProto, md *protobuf.DescriptorProto) { + gz, path := msg.Descriptor() + fd, err := extractFile(gz) + if err != nil { + panic(fmt.Sprintf("invalid FileDescriptorProto for %T: %v", msg, err)) + } + + md = fd.MessageType[path[0]] + for _, i := range path[1:] { + md = md.NestedType[i] + } + return fd, md +} diff --git a/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go b/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go new file mode 100644 index 0000000..27b0729 --- /dev/null +++ b/vendor/github.com/golang/protobuf/descriptor/descriptor_test.go @@ -0,0 +1,32 @@ +package descriptor_test + +import ( + "fmt" + "testing" + + "github.com/golang/protobuf/descriptor" + tpb "github.com/golang/protobuf/proto/testdata" + protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor" +) + +func TestMessage(t *testing.T) { + var msg *protobuf.DescriptorProto + fd, md := descriptor.ForMessage(msg) + if pkg, want := fd.GetPackage(), "google.protobuf"; pkg != want { + t.Errorf("descriptor.ForMessage(%T).GetPackage() = %q; want %q", msg, pkg, want) + } + if name, want := md.GetName(), "DescriptorProto"; name != want { + t.Fatalf("descriptor.ForMessage(%T).GetName() = %q; want %q", msg, name, want) + } +} + +func Example_Options() { + var msg *tpb.MyMessageSet + _, md := descriptor.ForMessage(msg) + if md.GetOptions().GetMessageSetWireFormat() { + fmt.Printf("%v uses option message_set_wire_format.\n", md.GetName()) + } + + // Output: + // MyMessageSet uses option message_set_wire_format. +} diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go b/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go new file mode 100644 index 0000000..110ae13 --- /dev/null +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb.go @@ -0,0 +1,1083 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2015 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Package jsonpb provides marshaling and unmarshaling between protocol buffers and JSON. +It follows the specification at https://developers.google.com/protocol-buffers/docs/proto3#json. + +This package produces a different output than the standard "encoding/json" package, +which does not operate correctly on protocol buffers. +*/ +package jsonpb + +import ( + "bytes" + "encoding/json" + "errors" + "fmt" + "io" + "math" + "reflect" + "sort" + "strconv" + "strings" + "time" + + "github.com/golang/protobuf/proto" + + stpb "github.com/golang/protobuf/ptypes/struct" +) + +// Marshaler is a configurable object for converting between +// protocol buffer objects and a JSON representation for them. +type Marshaler struct { + // Whether to render enum values as integers, as opposed to string values. + EnumsAsInts bool + + // Whether to render fields with zero values. + EmitDefaults bool + + // A string to indent each level by. The presence of this field will + // also cause a space to appear between the field separator and + // value, and for newlines to be appear between fields and array + // elements. + Indent string + + // Whether to use the original (.proto) name for fields. + OrigName bool + + // A custom URL resolver to use when marshaling Any messages to JSON. + // If unset, the default resolution strategy is to extract the + // fully-qualified type name from the type URL and pass that to + // proto.MessageType(string). + AnyResolver AnyResolver +} + +// AnyResolver takes a type URL, present in an Any message, and resolves it into +// an instance of the associated message. +type AnyResolver interface { + Resolve(typeUrl string) (proto.Message, error) +} + +func defaultResolveAny(typeUrl string) (proto.Message, error) { + // Only the part of typeUrl after the last slash is relevant. + mname := typeUrl + if slash := strings.LastIndex(mname, "/"); slash >= 0 { + mname = mname[slash+1:] + } + mt := proto.MessageType(mname) + if mt == nil { + return nil, fmt.Errorf("unknown message type %q", mname) + } + return reflect.New(mt.Elem()).Interface().(proto.Message), nil +} + +// JSONPBMarshaler is implemented by protobuf messages that customize the +// way they are marshaled to JSON. Messages that implement this should +// also implement JSONPBUnmarshaler so that the custom format can be +// parsed. +type JSONPBMarshaler interface { + MarshalJSONPB(*Marshaler) ([]byte, error) +} + +// JSONPBUnmarshaler is implemented by protobuf messages that customize +// the way they are unmarshaled from JSON. Messages that implement this +// should also implement JSONPBMarshaler so that the custom format can be +// produced. +type JSONPBUnmarshaler interface { + UnmarshalJSONPB(*Unmarshaler, []byte) error +} + +// Marshal marshals a protocol buffer into JSON. +func (m *Marshaler) Marshal(out io.Writer, pb proto.Message) error { + writer := &errWriter{writer: out} + return m.marshalObject(writer, pb, "", "") +} + +// MarshalToString converts a protocol buffer object to JSON string. +func (m *Marshaler) MarshalToString(pb proto.Message) (string, error) { + var buf bytes.Buffer + if err := m.Marshal(&buf, pb); err != nil { + return "", err + } + return buf.String(), nil +} + +type int32Slice []int32 + +var nonFinite = map[string]float64{ + `"NaN"`: math.NaN(), + `"Infinity"`: math.Inf(1), + `"-Infinity"`: math.Inf(-1), +} + +// For sorting extensions ids to ensure stable output. +func (s int32Slice) Len() int { return len(s) } +func (s int32Slice) Less(i, j int) bool { return s[i] < s[j] } +func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +type wkt interface { + XXX_WellKnownType() string +} + +// marshalObject writes a struct to the Writer. +func (m *Marshaler) marshalObject(out *errWriter, v proto.Message, indent, typeURL string) error { + if jsm, ok := v.(JSONPBMarshaler); ok { + b, err := jsm.MarshalJSONPB(m) + if err != nil { + return err + } + if typeURL != "" { + // we are marshaling this object to an Any type + var js map[string]*json.RawMessage + if err = json.Unmarshal(b, &js); err != nil { + return fmt.Errorf("type %T produced invalid JSON: %v", v, err) + } + turl, err := json.Marshal(typeURL) + if err != nil { + return fmt.Errorf("failed to marshal type URL %q to JSON: %v", typeURL, err) + } + js["@type"] = (*json.RawMessage)(&turl) + if b, err = json.Marshal(js); err != nil { + return err + } + } + + out.write(string(b)) + return out.err + } + + s := reflect.ValueOf(v).Elem() + + // Handle well-known types. + if wkt, ok := v.(wkt); ok { + switch wkt.XXX_WellKnownType() { + case "DoubleValue", "FloatValue", "Int64Value", "UInt64Value", + "Int32Value", "UInt32Value", "BoolValue", "StringValue", "BytesValue": + // "Wrappers use the same representation in JSON + // as the wrapped primitive type, ..." + sprop := proto.GetProperties(s.Type()) + return m.marshalValue(out, sprop.Prop[0], s.Field(0), indent) + case "Any": + // Any is a bit more involved. + return m.marshalAny(out, v, indent) + case "Duration": + // "Generated output always contains 3, 6, or 9 fractional digits, + // depending on required precision." + s, ns := s.Field(0).Int(), s.Field(1).Int() + d := time.Duration(s)*time.Second + time.Duration(ns)*time.Nanosecond + x := fmt.Sprintf("%.9f", d.Seconds()) + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, "000") + out.write(`"`) + out.write(x) + out.write(`s"`) + return out.err + case "Struct", "ListValue": + // Let marshalValue handle the `Struct.fields` map or the `ListValue.values` slice. + // TODO: pass the correct Properties if needed. + return m.marshalValue(out, &proto.Properties{}, s.Field(0), indent) + case "Timestamp": + // "RFC 3339, where generated output will always be Z-normalized + // and uses 3, 6 or 9 fractional digits." + s, ns := s.Field(0).Int(), s.Field(1).Int() + t := time.Unix(s, ns).UTC() + // time.RFC3339Nano isn't exactly right (we need to get 3/6/9 fractional digits). + x := t.Format("2006-01-02T15:04:05.000000000") + x = strings.TrimSuffix(x, "000") + x = strings.TrimSuffix(x, "000") + out.write(`"`) + out.write(x) + out.write(`Z"`) + return out.err + case "Value": + // Value has a single oneof. + kind := s.Field(0) + if kind.IsNil() { + // "absence of any variant indicates an error" + return errors.New("nil Value") + } + // oneof -> *T -> T -> T.F + x := kind.Elem().Elem().Field(0) + // TODO: pass the correct Properties if needed. + return m.marshalValue(out, &proto.Properties{}, x, indent) + } + } + + out.write("{") + if m.Indent != "" { + out.write("\n") + } + + firstField := true + + if typeURL != "" { + if err := m.marshalTypeURL(out, indent, typeURL); err != nil { + return err + } + firstField = false + } + + for i := 0; i < s.NumField(); i++ { + value := s.Field(i) + valueField := s.Type().Field(i) + if strings.HasPrefix(valueField.Name, "XXX_") { + continue + } + + // IsNil will panic on most value kinds. + switch value.Kind() { + case reflect.Chan, reflect.Func, reflect.Interface: + if value.IsNil() { + continue + } + } + + if !m.EmitDefaults { + switch value.Kind() { + case reflect.Bool: + if !value.Bool() { + continue + } + case reflect.Int32, reflect.Int64: + if value.Int() == 0 { + continue + } + case reflect.Uint32, reflect.Uint64: + if value.Uint() == 0 { + continue + } + case reflect.Float32, reflect.Float64: + if value.Float() == 0 { + continue + } + case reflect.String: + if value.Len() == 0 { + continue + } + case reflect.Map, reflect.Ptr, reflect.Slice: + if value.IsNil() { + continue + } + } + } + + // Oneof fields need special handling. + if valueField.Tag.Get("protobuf_oneof") != "" { + // value is an interface containing &T{real_value}. + sv := value.Elem().Elem() // interface -> *T -> T + value = sv.Field(0) + valueField = sv.Type().Field(0) + } + prop := jsonProperties(valueField, m.OrigName) + if !firstField { + m.writeSep(out) + } + if err := m.marshalField(out, prop, value, indent); err != nil { + return err + } + firstField = false + } + + // Handle proto2 extensions. + if ep, ok := v.(proto.Message); ok { + extensions := proto.RegisteredExtensions(v) + // Sort extensions for stable output. + ids := make([]int32, 0, len(extensions)) + for id, desc := range extensions { + if !proto.HasExtension(ep, desc) { + continue + } + ids = append(ids, id) + } + sort.Sort(int32Slice(ids)) + for _, id := range ids { + desc := extensions[id] + if desc == nil { + // unknown extension + continue + } + ext, extErr := proto.GetExtension(ep, desc) + if extErr != nil { + return extErr + } + value := reflect.ValueOf(ext) + var prop proto.Properties + prop.Parse(desc.Tag) + prop.JSONName = fmt.Sprintf("[%s]", desc.Name) + if !firstField { + m.writeSep(out) + } + if err := m.marshalField(out, &prop, value, indent); err != nil { + return err + } + firstField = false + } + + } + + if m.Indent != "" { + out.write("\n") + out.write(indent) + } + out.write("}") + return out.err +} + +func (m *Marshaler) writeSep(out *errWriter) { + if m.Indent != "" { + out.write(",\n") + } else { + out.write(",") + } +} + +func (m *Marshaler) marshalAny(out *errWriter, any proto.Message, indent string) error { + // "If the Any contains a value that has a special JSON mapping, + // it will be converted as follows: {"@type": xxx, "value": yyy}. + // Otherwise, the value will be converted into a JSON object, + // and the "@type" field will be inserted to indicate the actual data type." + v := reflect.ValueOf(any).Elem() + turl := v.Field(0).String() + val := v.Field(1).Bytes() + + var msg proto.Message + var err error + if m.AnyResolver != nil { + msg, err = m.AnyResolver.Resolve(turl) + } else { + msg, err = defaultResolveAny(turl) + } + if err != nil { + return err + } + + if err := proto.Unmarshal(val, msg); err != nil { + return err + } + + if _, ok := msg.(wkt); ok { + out.write("{") + if m.Indent != "" { + out.write("\n") + } + if err := m.marshalTypeURL(out, indent, turl); err != nil { + return err + } + m.writeSep(out) + if m.Indent != "" { + out.write(indent) + out.write(m.Indent) + out.write(`"value": `) + } else { + out.write(`"value":`) + } + if err := m.marshalObject(out, msg, indent+m.Indent, ""); err != nil { + return err + } + if m.Indent != "" { + out.write("\n") + out.write(indent) + } + out.write("}") + return out.err + } + + return m.marshalObject(out, msg, indent, turl) +} + +func (m *Marshaler) marshalTypeURL(out *errWriter, indent, typeURL string) error { + if m.Indent != "" { + out.write(indent) + out.write(m.Indent) + } + out.write(`"@type":`) + if m.Indent != "" { + out.write(" ") + } + b, err := json.Marshal(typeURL) + if err != nil { + return err + } + out.write(string(b)) + return out.err +} + +// marshalField writes field description and value to the Writer. +func (m *Marshaler) marshalField(out *errWriter, prop *proto.Properties, v reflect.Value, indent string) error { + if m.Indent != "" { + out.write(indent) + out.write(m.Indent) + } + out.write(`"`) + out.write(prop.JSONName) + out.write(`":`) + if m.Indent != "" { + out.write(" ") + } + if err := m.marshalValue(out, prop, v, indent); err != nil { + return err + } + return nil +} + +// marshalValue writes the value to the Writer. +func (m *Marshaler) marshalValue(out *errWriter, prop *proto.Properties, v reflect.Value, indent string) error { + var err error + v = reflect.Indirect(v) + + // Handle nil pointer + if v.Kind() == reflect.Invalid { + out.write("null") + return out.err + } + + // Handle repeated elements. + if v.Kind() == reflect.Slice && v.Type().Elem().Kind() != reflect.Uint8 { + out.write("[") + comma := "" + for i := 0; i < v.Len(); i++ { + sliceVal := v.Index(i) + out.write(comma) + if m.Indent != "" { + out.write("\n") + out.write(indent) + out.write(m.Indent) + out.write(m.Indent) + } + if err := m.marshalValue(out, prop, sliceVal, indent+m.Indent); err != nil { + return err + } + comma = "," + } + if m.Indent != "" { + out.write("\n") + out.write(indent) + out.write(m.Indent) + } + out.write("]") + return out.err + } + + // Handle well-known types. + // Most are handled up in marshalObject (because 99% are messages). + if wkt, ok := v.Interface().(wkt); ok { + switch wkt.XXX_WellKnownType() { + case "NullValue": + out.write("null") + return out.err + } + } + + // Handle enumerations. + if !m.EnumsAsInts && prop.Enum != "" { + // Unknown enum values will are stringified by the proto library as their + // value. Such values should _not_ be quoted or they will be interpreted + // as an enum string instead of their value. + enumStr := v.Interface().(fmt.Stringer).String() + var valStr string + if v.Kind() == reflect.Ptr { + valStr = strconv.Itoa(int(v.Elem().Int())) + } else { + valStr = strconv.Itoa(int(v.Int())) + } + isKnownEnum := enumStr != valStr + if isKnownEnum { + out.write(`"`) + } + out.write(enumStr) + if isKnownEnum { + out.write(`"`) + } + return out.err + } + + // Handle nested messages. + if v.Kind() == reflect.Struct { + return m.marshalObject(out, v.Addr().Interface().(proto.Message), indent+m.Indent, "") + } + + // Handle maps. + // Since Go randomizes map iteration, we sort keys for stable output. + if v.Kind() == reflect.Map { + out.write(`{`) + keys := v.MapKeys() + sort.Sort(mapKeys(keys)) + for i, k := range keys { + if i > 0 { + out.write(`,`) + } + if m.Indent != "" { + out.write("\n") + out.write(indent) + out.write(m.Indent) + out.write(m.Indent) + } + + b, err := json.Marshal(k.Interface()) + if err != nil { + return err + } + s := string(b) + + // If the JSON is not a string value, encode it again to make it one. + if !strings.HasPrefix(s, `"`) { + b, err := json.Marshal(s) + if err != nil { + return err + } + s = string(b) + } + + out.write(s) + out.write(`:`) + if m.Indent != "" { + out.write(` `) + } + + if err := m.marshalValue(out, prop, v.MapIndex(k), indent+m.Indent); err != nil { + return err + } + } + if m.Indent != "" { + out.write("\n") + out.write(indent) + out.write(m.Indent) + } + out.write(`}`) + return out.err + } + + // Handle non-finite floats, e.g. NaN, Infinity and -Infinity. + if v.Kind() == reflect.Float32 || v.Kind() == reflect.Float64 { + f := v.Float() + var sval string + switch { + case math.IsInf(f, 1): + sval = `"Infinity"` + case math.IsInf(f, -1): + sval = `"-Infinity"` + case math.IsNaN(f): + sval = `"NaN"` + } + if sval != "" { + out.write(sval) + return out.err + } + } + + // Default handling defers to the encoding/json library. + b, err := json.Marshal(v.Interface()) + if err != nil { + return err + } + needToQuote := string(b[0]) != `"` && (v.Kind() == reflect.Int64 || v.Kind() == reflect.Uint64) + if needToQuote { + out.write(`"`) + } + out.write(string(b)) + if needToQuote { + out.write(`"`) + } + return out.err +} + +// Unmarshaler is a configurable object for converting from a JSON +// representation to a protocol buffer object. +type Unmarshaler struct { + // Whether to allow messages to contain unknown fields, as opposed to + // failing to unmarshal. + AllowUnknownFields bool + + // A custom URL resolver to use when unmarshaling Any messages from JSON. + // If unset, the default resolution strategy is to extract the + // fully-qualified type name from the type URL and pass that to + // proto.MessageType(string). + AnyResolver AnyResolver +} + +// UnmarshalNext unmarshals the next protocol buffer from a JSON object stream. +// This function is lenient and will decode any options permutations of the +// related Marshaler. +func (u *Unmarshaler) UnmarshalNext(dec *json.Decoder, pb proto.Message) error { + inputValue := json.RawMessage{} + if err := dec.Decode(&inputValue); err != nil { + return err + } + return u.unmarshalValue(reflect.ValueOf(pb).Elem(), inputValue, nil) +} + +// Unmarshal unmarshals a JSON object stream into a protocol +// buffer. This function is lenient and will decode any options +// permutations of the related Marshaler. +func (u *Unmarshaler) Unmarshal(r io.Reader, pb proto.Message) error { + dec := json.NewDecoder(r) + return u.UnmarshalNext(dec, pb) +} + +// UnmarshalNext unmarshals the next protocol buffer from a JSON object stream. +// This function is lenient and will decode any options permutations of the +// related Marshaler. +func UnmarshalNext(dec *json.Decoder, pb proto.Message) error { + return new(Unmarshaler).UnmarshalNext(dec, pb) +} + +// Unmarshal unmarshals a JSON object stream into a protocol +// buffer. This function is lenient and will decode any options +// permutations of the related Marshaler. +func Unmarshal(r io.Reader, pb proto.Message) error { + return new(Unmarshaler).Unmarshal(r, pb) +} + +// UnmarshalString will populate the fields of a protocol buffer based +// on a JSON string. This function is lenient and will decode any options +// permutations of the related Marshaler. +func UnmarshalString(str string, pb proto.Message) error { + return new(Unmarshaler).Unmarshal(strings.NewReader(str), pb) +} + +// unmarshalValue converts/copies a value into the target. +// prop may be nil. +func (u *Unmarshaler) unmarshalValue(target reflect.Value, inputValue json.RawMessage, prop *proto.Properties) error { + targetType := target.Type() + + // Allocate memory for pointer fields. + if targetType.Kind() == reflect.Ptr { + // If input value is "null" and target is a pointer type, then the field should be treated as not set + // UNLESS the target is structpb.Value, in which case it should be set to structpb.NullValue. + _, isJSONPBUnmarshaler := target.Interface().(JSONPBUnmarshaler) + if string(inputValue) == "null" && targetType != reflect.TypeOf(&stpb.Value{}) && !isJSONPBUnmarshaler { + return nil + } + target.Set(reflect.New(targetType.Elem())) + + return u.unmarshalValue(target.Elem(), inputValue, prop) + } + + if jsu, ok := target.Addr().Interface().(JSONPBUnmarshaler); ok { + return jsu.UnmarshalJSONPB(u, []byte(inputValue)) + } + + // Handle well-known types that are not pointers. + if w, ok := target.Addr().Interface().(wkt); ok { + switch w.XXX_WellKnownType() { + case "DoubleValue", "FloatValue", "Int64Value", "UInt64Value", + "Int32Value", "UInt32Value", "BoolValue", "StringValue", "BytesValue": + return u.unmarshalValue(target.Field(0), inputValue, prop) + case "Any": + // Use json.RawMessage pointer type instead of value to support pre-1.8 version. + // 1.8 changed RawMessage.MarshalJSON from pointer type to value type, see + // https://github.com/golang/go/issues/14493 + var jsonFields map[string]*json.RawMessage + if err := json.Unmarshal(inputValue, &jsonFields); err != nil { + return err + } + + val, ok := jsonFields["@type"] + if !ok || val == nil { + return errors.New("Any JSON doesn't have '@type'") + } + + var turl string + if err := json.Unmarshal([]byte(*val), &turl); err != nil { + return fmt.Errorf("can't unmarshal Any's '@type': %q", *val) + } + target.Field(0).SetString(turl) + + var m proto.Message + var err error + if u.AnyResolver != nil { + m, err = u.AnyResolver.Resolve(turl) + } else { + m, err = defaultResolveAny(turl) + } + if err != nil { + return err + } + + if _, ok := m.(wkt); ok { + val, ok := jsonFields["value"] + if !ok { + return errors.New("Any JSON doesn't have 'value'") + } + + if err := u.unmarshalValue(reflect.ValueOf(m).Elem(), *val, nil); err != nil { + return fmt.Errorf("can't unmarshal Any nested proto %T: %v", m, err) + } + } else { + delete(jsonFields, "@type") + nestedProto, err := json.Marshal(jsonFields) + if err != nil { + return fmt.Errorf("can't generate JSON for Any's nested proto to be unmarshaled: %v", err) + } + + if err = u.unmarshalValue(reflect.ValueOf(m).Elem(), nestedProto, nil); err != nil { + return fmt.Errorf("can't unmarshal Any nested proto %T: %v", m, err) + } + } + + b, err := proto.Marshal(m) + if err != nil { + return fmt.Errorf("can't marshal proto %T into Any.Value: %v", m, err) + } + target.Field(1).SetBytes(b) + + return nil + case "Duration": + unq, err := strconv.Unquote(string(inputValue)) + if err != nil { + return err + } + + d, err := time.ParseDuration(unq) + if err != nil { + return fmt.Errorf("bad Duration: %v", err) + } + + ns := d.Nanoseconds() + s := ns / 1e9 + ns %= 1e9 + target.Field(0).SetInt(s) + target.Field(1).SetInt(ns) + return nil + case "Timestamp": + unq, err := strconv.Unquote(string(inputValue)) + if err != nil { + return err + } + + t, err := time.Parse(time.RFC3339Nano, unq) + if err != nil { + return fmt.Errorf("bad Timestamp: %v", err) + } + + target.Field(0).SetInt(t.Unix()) + target.Field(1).SetInt(int64(t.Nanosecond())) + return nil + case "Struct": + var m map[string]json.RawMessage + if err := json.Unmarshal(inputValue, &m); err != nil { + return fmt.Errorf("bad StructValue: %v", err) + } + + target.Field(0).Set(reflect.ValueOf(map[string]*stpb.Value{})) + for k, jv := range m { + pv := &stpb.Value{} + if err := u.unmarshalValue(reflect.ValueOf(pv).Elem(), jv, prop); err != nil { + return fmt.Errorf("bad value in StructValue for key %q: %v", k, err) + } + target.Field(0).SetMapIndex(reflect.ValueOf(k), reflect.ValueOf(pv)) + } + return nil + case "ListValue": + var s []json.RawMessage + if err := json.Unmarshal(inputValue, &s); err != nil { + return fmt.Errorf("bad ListValue: %v", err) + } + + target.Field(0).Set(reflect.ValueOf(make([]*stpb.Value, len(s), len(s)))) + for i, sv := range s { + if err := u.unmarshalValue(target.Field(0).Index(i), sv, prop); err != nil { + return err + } + } + return nil + case "Value": + ivStr := string(inputValue) + if ivStr == "null" { + target.Field(0).Set(reflect.ValueOf(&stpb.Value_NullValue{})) + } else if v, err := strconv.ParseFloat(ivStr, 0); err == nil { + target.Field(0).Set(reflect.ValueOf(&stpb.Value_NumberValue{v})) + } else if v, err := strconv.Unquote(ivStr); err == nil { + target.Field(0).Set(reflect.ValueOf(&stpb.Value_StringValue{v})) + } else if v, err := strconv.ParseBool(ivStr); err == nil { + target.Field(0).Set(reflect.ValueOf(&stpb.Value_BoolValue{v})) + } else if err := json.Unmarshal(inputValue, &[]json.RawMessage{}); err == nil { + lv := &stpb.ListValue{} + target.Field(0).Set(reflect.ValueOf(&stpb.Value_ListValue{lv})) + return u.unmarshalValue(reflect.ValueOf(lv).Elem(), inputValue, prop) + } else if err := json.Unmarshal(inputValue, &map[string]json.RawMessage{}); err == nil { + sv := &stpb.Struct{} + target.Field(0).Set(reflect.ValueOf(&stpb.Value_StructValue{sv})) + return u.unmarshalValue(reflect.ValueOf(sv).Elem(), inputValue, prop) + } else { + return fmt.Errorf("unrecognized type for Value %q", ivStr) + } + return nil + } + } + + // Handle enums, which have an underlying type of int32, + // and may appear as strings. + // The case of an enum appearing as a number is handled + // at the bottom of this function. + if inputValue[0] == '"' && prop != nil && prop.Enum != "" { + vmap := proto.EnumValueMap(prop.Enum) + // Don't need to do unquoting; valid enum names + // are from a limited character set. + s := inputValue[1 : len(inputValue)-1] + n, ok := vmap[string(s)] + if !ok { + return fmt.Errorf("unknown value %q for enum %s", s, prop.Enum) + } + if target.Kind() == reflect.Ptr { // proto2 + target.Set(reflect.New(targetType.Elem())) + target = target.Elem() + } + target.SetInt(int64(n)) + return nil + } + + // Handle nested messages. + if targetType.Kind() == reflect.Struct { + var jsonFields map[string]json.RawMessage + if err := json.Unmarshal(inputValue, &jsonFields); err != nil { + return err + } + + consumeField := func(prop *proto.Properties) (json.RawMessage, bool) { + // Be liberal in what names we accept; both orig_name and camelName are okay. + fieldNames := acceptedJSONFieldNames(prop) + + vOrig, okOrig := jsonFields[fieldNames.orig] + vCamel, okCamel := jsonFields[fieldNames.camel] + if !okOrig && !okCamel { + return nil, false + } + // If, for some reason, both are present in the data, favour the camelName. + var raw json.RawMessage + if okOrig { + raw = vOrig + delete(jsonFields, fieldNames.orig) + } + if okCamel { + raw = vCamel + delete(jsonFields, fieldNames.camel) + } + return raw, true + } + + sprops := proto.GetProperties(targetType) + for i := 0; i < target.NumField(); i++ { + ft := target.Type().Field(i) + if strings.HasPrefix(ft.Name, "XXX_") { + continue + } + + valueForField, ok := consumeField(sprops.Prop[i]) + if !ok { + continue + } + + if err := u.unmarshalValue(target.Field(i), valueForField, sprops.Prop[i]); err != nil { + return err + } + } + // Check for any oneof fields. + if len(jsonFields) > 0 { + for _, oop := range sprops.OneofTypes { + raw, ok := consumeField(oop.Prop) + if !ok { + continue + } + nv := reflect.New(oop.Type.Elem()) + target.Field(oop.Field).Set(nv) + if err := u.unmarshalValue(nv.Elem().Field(0), raw, oop.Prop); err != nil { + return err + } + } + } + // Handle proto2 extensions. + if len(jsonFields) > 0 { + if ep, ok := target.Addr().Interface().(proto.Message); ok { + for _, ext := range proto.RegisteredExtensions(ep) { + name := fmt.Sprintf("[%s]", ext.Name) + raw, ok := jsonFields[name] + if !ok { + continue + } + delete(jsonFields, name) + nv := reflect.New(reflect.TypeOf(ext.ExtensionType).Elem()) + if err := u.unmarshalValue(nv.Elem(), raw, nil); err != nil { + return err + } + if err := proto.SetExtension(ep, ext, nv.Interface()); err != nil { + return err + } + } + } + } + if !u.AllowUnknownFields && len(jsonFields) > 0 { + // Pick any field to be the scapegoat. + var f string + for fname := range jsonFields { + f = fname + break + } + return fmt.Errorf("unknown field %q in %v", f, targetType) + } + return nil + } + + // Handle arrays (which aren't encoded bytes) + if targetType.Kind() == reflect.Slice && targetType.Elem().Kind() != reflect.Uint8 { + var slc []json.RawMessage + if err := json.Unmarshal(inputValue, &slc); err != nil { + return err + } + if slc != nil { + l := len(slc) + target.Set(reflect.MakeSlice(targetType, l, l)) + for i := 0; i < l; i++ { + if err := u.unmarshalValue(target.Index(i), slc[i], prop); err != nil { + return err + } + } + } + return nil + } + + // Handle maps (whose keys are always strings) + if targetType.Kind() == reflect.Map { + var mp map[string]json.RawMessage + if err := json.Unmarshal(inputValue, &mp); err != nil { + return err + } + if mp != nil { + target.Set(reflect.MakeMap(targetType)) + var keyprop, valprop *proto.Properties + if prop != nil { + // These could still be nil if the protobuf metadata is broken somehow. + // TODO: This won't work because the fields are unexported. + // We should probably just reparse them. + //keyprop, valprop = prop.mkeyprop, prop.mvalprop + } + for ks, raw := range mp { + // Unmarshal map key. The core json library already decoded the key into a + // string, so we handle that specially. Other types were quoted post-serialization. + var k reflect.Value + if targetType.Key().Kind() == reflect.String { + k = reflect.ValueOf(ks) + } else { + k = reflect.New(targetType.Key()).Elem() + if err := u.unmarshalValue(k, json.RawMessage(ks), keyprop); err != nil { + return err + } + } + + // Unmarshal map value. + v := reflect.New(targetType.Elem()).Elem() + if err := u.unmarshalValue(v, raw, valprop); err != nil { + return err + } + target.SetMapIndex(k, v) + } + } + return nil + } + + // 64-bit integers can be encoded as strings. In this case we drop + // the quotes and proceed as normal. + isNum := targetType.Kind() == reflect.Int64 || targetType.Kind() == reflect.Uint64 + if isNum && strings.HasPrefix(string(inputValue), `"`) { + inputValue = inputValue[1 : len(inputValue)-1] + } + + // Non-finite numbers can be encoded as strings. + isFloat := targetType.Kind() == reflect.Float32 || targetType.Kind() == reflect.Float64 + if isFloat { + if num, ok := nonFinite[string(inputValue)]; ok { + target.SetFloat(num) + return nil + } + } + + // Use the encoding/json for parsing other value types. + return json.Unmarshal(inputValue, target.Addr().Interface()) +} + +// jsonProperties returns parsed proto.Properties for the field and corrects JSONName attribute. +func jsonProperties(f reflect.StructField, origName bool) *proto.Properties { + var prop proto.Properties + prop.Init(f.Type, f.Name, f.Tag.Get("protobuf"), &f) + if origName || prop.JSONName == "" { + prop.JSONName = prop.OrigName + } + return &prop +} + +type fieldNames struct { + orig, camel string +} + +func acceptedJSONFieldNames(prop *proto.Properties) fieldNames { + opts := fieldNames{orig: prop.OrigName, camel: prop.OrigName} + if prop.JSONName != "" { + opts.camel = prop.JSONName + } + return opts +} + +// Writer wrapper inspired by https://blog.golang.org/errors-are-values +type errWriter struct { + writer io.Writer + err error +} + +func (w *errWriter) write(str string) { + if w.err != nil { + return + } + _, w.err = w.writer.Write([]byte(str)) +} + +// Map fields may have key types of non-float scalars, strings and enums. +// The easiest way to sort them in some deterministic order is to use fmt. +// If this turns out to be inefficient we can always consider other options, +// such as doing a Schwartzian transform. +// +// Numeric keys are sorted in numeric order per +// https://developers.google.com/protocol-buffers/docs/proto#maps. +type mapKeys []reflect.Value + +func (s mapKeys) Len() int { return len(s) } +func (s mapKeys) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s mapKeys) Less(i, j int) bool { + if k := s[i].Kind(); k == s[j].Kind() { + switch k { + case reflect.Int32, reflect.Int64: + return s[i].Int() < s[j].Int() + case reflect.Uint32, reflect.Uint64: + return s[i].Uint() < s[j].Uint() + } + } + return fmt.Sprint(s[i].Interface()) < fmt.Sprint(s[j].Interface()) +} diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go new file mode 100644 index 0000000..2428d05 --- /dev/null +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test.go @@ -0,0 +1,896 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2015 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package jsonpb + +import ( + "bytes" + "encoding/json" + "io" + "math" + "reflect" + "strings" + "testing" + + "github.com/golang/protobuf/proto" + + pb "github.com/golang/protobuf/jsonpb/jsonpb_test_proto" + proto3pb "github.com/golang/protobuf/proto/proto3_proto" + "github.com/golang/protobuf/ptypes" + anypb "github.com/golang/protobuf/ptypes/any" + durpb "github.com/golang/protobuf/ptypes/duration" + stpb "github.com/golang/protobuf/ptypes/struct" + tspb "github.com/golang/protobuf/ptypes/timestamp" + wpb "github.com/golang/protobuf/ptypes/wrappers" +) + +var ( + marshaler = Marshaler{} + + marshalerAllOptions = Marshaler{ + Indent: " ", + } + + simpleObject = &pb.Simple{ + OInt32: proto.Int32(-32), + OInt64: proto.Int64(-6400000000), + OUint32: proto.Uint32(32), + OUint64: proto.Uint64(6400000000), + OSint32: proto.Int32(-13), + OSint64: proto.Int64(-2600000000), + OFloat: proto.Float32(3.14), + ODouble: proto.Float64(6.02214179e23), + OBool: proto.Bool(true), + OString: proto.String("hello \"there\""), + OBytes: []byte("beep boop"), + } + + simpleObjectJSON = `{` + + `"oBool":true,` + + `"oInt32":-32,` + + `"oInt64":"-6400000000",` + + `"oUint32":32,` + + `"oUint64":"6400000000",` + + `"oSint32":-13,` + + `"oSint64":"-2600000000",` + + `"oFloat":3.14,` + + `"oDouble":6.02214179e+23,` + + `"oString":"hello \"there\"",` + + `"oBytes":"YmVlcCBib29w"` + + `}` + + simpleObjectPrettyJSON = `{ + "oBool": true, + "oInt32": -32, + "oInt64": "-6400000000", + "oUint32": 32, + "oUint64": "6400000000", + "oSint32": -13, + "oSint64": "-2600000000", + "oFloat": 3.14, + "oDouble": 6.02214179e+23, + "oString": "hello \"there\"", + "oBytes": "YmVlcCBib29w" +}` + + repeatsObject = &pb.Repeats{ + RBool: []bool{true, false, true}, + RInt32: []int32{-3, -4, -5}, + RInt64: []int64{-123456789, -987654321}, + RUint32: []uint32{1, 2, 3}, + RUint64: []uint64{6789012345, 3456789012}, + RSint32: []int32{-1, -2, -3}, + RSint64: []int64{-6789012345, -3456789012}, + RFloat: []float32{3.14, 6.28}, + RDouble: []float64{299792458 * 1e20, 6.62606957e-34}, + RString: []string{"happy", "days"}, + RBytes: [][]byte{[]byte("skittles"), []byte("m&m's")}, + } + + repeatsObjectJSON = `{` + + `"rBool":[true,false,true],` + + `"rInt32":[-3,-4,-5],` + + `"rInt64":["-123456789","-987654321"],` + + `"rUint32":[1,2,3],` + + `"rUint64":["6789012345","3456789012"],` + + `"rSint32":[-1,-2,-3],` + + `"rSint64":["-6789012345","-3456789012"],` + + `"rFloat":[3.14,6.28],` + + `"rDouble":[2.99792458e+28,6.62606957e-34],` + + `"rString":["happy","days"],` + + `"rBytes":["c2tpdHRsZXM=","bSZtJ3M="]` + + `}` + + repeatsObjectPrettyJSON = `{ + "rBool": [ + true, + false, + true + ], + "rInt32": [ + -3, + -4, + -5 + ], + "rInt64": [ + "-123456789", + "-987654321" + ], + "rUint32": [ + 1, + 2, + 3 + ], + "rUint64": [ + "6789012345", + "3456789012" + ], + "rSint32": [ + -1, + -2, + -3 + ], + "rSint64": [ + "-6789012345", + "-3456789012" + ], + "rFloat": [ + 3.14, + 6.28 + ], + "rDouble": [ + 2.99792458e+28, + 6.62606957e-34 + ], + "rString": [ + "happy", + "days" + ], + "rBytes": [ + "c2tpdHRsZXM=", + "bSZtJ3M=" + ] +}` + + innerSimple = &pb.Simple{OInt32: proto.Int32(-32)} + innerSimple2 = &pb.Simple{OInt64: proto.Int64(25)} + innerRepeats = &pb.Repeats{RString: []string{"roses", "red"}} + innerRepeats2 = &pb.Repeats{RString: []string{"violets", "blue"}} + complexObject = &pb.Widget{ + Color: pb.Widget_GREEN.Enum(), + RColor: []pb.Widget_Color{pb.Widget_RED, pb.Widget_GREEN, pb.Widget_BLUE}, + Simple: innerSimple, + RSimple: []*pb.Simple{innerSimple, innerSimple2}, + Repeats: innerRepeats, + RRepeats: []*pb.Repeats{innerRepeats, innerRepeats2}, + } + + complexObjectJSON = `{"color":"GREEN",` + + `"rColor":["RED","GREEN","BLUE"],` + + `"simple":{"oInt32":-32},` + + `"rSimple":[{"oInt32":-32},{"oInt64":"25"}],` + + `"repeats":{"rString":["roses","red"]},` + + `"rRepeats":[{"rString":["roses","red"]},{"rString":["violets","blue"]}]` + + `}` + + complexObjectPrettyJSON = `{ + "color": "GREEN", + "rColor": [ + "RED", + "GREEN", + "BLUE" + ], + "simple": { + "oInt32": -32 + }, + "rSimple": [ + { + "oInt32": -32 + }, + { + "oInt64": "25" + } + ], + "repeats": { + "rString": [ + "roses", + "red" + ] + }, + "rRepeats": [ + { + "rString": [ + "roses", + "red" + ] + }, + { + "rString": [ + "violets", + "blue" + ] + } + ] +}` + + colorPrettyJSON = `{ + "color": 2 +}` + + colorListPrettyJSON = `{ + "color": 1000, + "rColor": [ + "RED" + ] +}` + + nummyPrettyJSON = `{ + "nummy": { + "1": 2, + "3": 4 + } +}` + + objjyPrettyJSON = `{ + "objjy": { + "1": { + "dub": 1 + } + } +}` + realNumber = &pb.Real{Value: proto.Float64(3.14159265359)} + realNumberName = "Pi" + complexNumber = &pb.Complex{Imaginary: proto.Float64(0.5772156649)} + realNumberJSON = `{` + + `"value":3.14159265359,` + + `"[jsonpb.Complex.real_extension]":{"imaginary":0.5772156649},` + + `"[jsonpb.name]":"Pi"` + + `}` + + anySimple = &pb.KnownTypes{ + An: &anypb.Any{ + TypeUrl: "something.example.com/jsonpb.Simple", + Value: []byte{ + // &pb.Simple{OBool:true} + 1 << 3, 1, + }, + }, + } + anySimpleJSON = `{"an":{"@type":"something.example.com/jsonpb.Simple","oBool":true}}` + anySimplePrettyJSON = `{ + "an": { + "@type": "something.example.com/jsonpb.Simple", + "oBool": true + } +}` + + anyWellKnown = &pb.KnownTypes{ + An: &anypb.Any{ + TypeUrl: "type.googleapis.com/google.protobuf.Duration", + Value: []byte{ + // &durpb.Duration{Seconds: 1, Nanos: 212000000 } + 1 << 3, 1, // seconds + 2 << 3, 0x80, 0xba, 0x8b, 0x65, // nanos + }, + }, + } + anyWellKnownJSON = `{"an":{"@type":"type.googleapis.com/google.protobuf.Duration","value":"1.212s"}}` + anyWellKnownPrettyJSON = `{ + "an": { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } +}` + + nonFinites = &pb.NonFinites{ + FNan: proto.Float32(float32(math.NaN())), + FPinf: proto.Float32(float32(math.Inf(1))), + FNinf: proto.Float32(float32(math.Inf(-1))), + DNan: proto.Float64(float64(math.NaN())), + DPinf: proto.Float64(float64(math.Inf(1))), + DNinf: proto.Float64(float64(math.Inf(-1))), + } + nonFinitesJSON = `{` + + `"fNan":"NaN",` + + `"fPinf":"Infinity",` + + `"fNinf":"-Infinity",` + + `"dNan":"NaN",` + + `"dPinf":"Infinity",` + + `"dNinf":"-Infinity"` + + `}` +) + +func init() { + if err := proto.SetExtension(realNumber, pb.E_Name, &realNumberName); err != nil { + panic(err) + } + if err := proto.SetExtension(realNumber, pb.E_Complex_RealExtension, complexNumber); err != nil { + panic(err) + } +} + +var marshalingTests = []struct { + desc string + marshaler Marshaler + pb proto.Message + json string +}{ + {"simple flat object", marshaler, simpleObject, simpleObjectJSON}, + {"simple pretty object", marshalerAllOptions, simpleObject, simpleObjectPrettyJSON}, + {"non-finite floats fields object", marshaler, nonFinites, nonFinitesJSON}, + {"repeated fields flat object", marshaler, repeatsObject, repeatsObjectJSON}, + {"repeated fields pretty object", marshalerAllOptions, repeatsObject, repeatsObjectPrettyJSON}, + {"nested message/enum flat object", marshaler, complexObject, complexObjectJSON}, + {"nested message/enum pretty object", marshalerAllOptions, complexObject, complexObjectPrettyJSON}, + {"enum-string flat object", Marshaler{}, + &pb.Widget{Color: pb.Widget_BLUE.Enum()}, `{"color":"BLUE"}`}, + {"enum-value pretty object", Marshaler{EnumsAsInts: true, Indent: " "}, + &pb.Widget{Color: pb.Widget_BLUE.Enum()}, colorPrettyJSON}, + {"unknown enum value object", marshalerAllOptions, + &pb.Widget{Color: pb.Widget_Color(1000).Enum(), RColor: []pb.Widget_Color{pb.Widget_RED}}, colorListPrettyJSON}, + {"repeated proto3 enum", Marshaler{}, + &proto3pb.Message{RFunny: []proto3pb.Message_Humour{ + proto3pb.Message_PUNS, + proto3pb.Message_SLAPSTICK, + }}, + `{"rFunny":["PUNS","SLAPSTICK"]}`}, + {"repeated proto3 enum as int", Marshaler{EnumsAsInts: true}, + &proto3pb.Message{RFunny: []proto3pb.Message_Humour{ + proto3pb.Message_PUNS, + proto3pb.Message_SLAPSTICK, + }}, + `{"rFunny":[1,2]}`}, + {"empty value", marshaler, &pb.Simple3{}, `{}`}, + {"empty value emitted", Marshaler{EmitDefaults: true}, &pb.Simple3{}, `{"dub":0}`}, + {"empty repeated emitted", Marshaler{EmitDefaults: true}, &pb.SimpleSlice3{}, `{"slices":[]}`}, + {"empty map emitted", Marshaler{EmitDefaults: true}, &pb.SimpleMap3{}, `{"stringy":{}}`}, + {"nested struct null", Marshaler{EmitDefaults: true}, &pb.SimpleNull3{}, `{"simple":null}`}, + {"map", marshaler, &pb.Mappy{Nummy: map[int64]int32{1: 2, 3: 4}}, `{"nummy":{"1":2,"3":4}}`}, + {"map", marshalerAllOptions, &pb.Mappy{Nummy: map[int64]int32{1: 2, 3: 4}}, nummyPrettyJSON}, + {"map", marshaler, + &pb.Mappy{Strry: map[string]string{`"one"`: "two", "three": "four"}}, + `{"strry":{"\"one\"":"two","three":"four"}}`}, + {"map", marshaler, + &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: {Dub: 1}}}, `{"objjy":{"1":{"dub":1}}}`}, + {"map", marshalerAllOptions, + &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: {Dub: 1}}}, objjyPrettyJSON}, + {"map", marshaler, &pb.Mappy{Buggy: map[int64]string{1234: "yup"}}, + `{"buggy":{"1234":"yup"}}`}, + {"map", marshaler, &pb.Mappy{Booly: map[bool]bool{false: true}}, `{"booly":{"false":true}}`}, + // TODO: This is broken. + //{"map", marshaler, &pb.Mappy{Enumy: map[string]pb.Numeral{"XIV": pb.Numeral_ROMAN}}, `{"enumy":{"XIV":"ROMAN"}`}, + {"map", Marshaler{EnumsAsInts: true}, &pb.Mappy{Enumy: map[string]pb.Numeral{"XIV": pb.Numeral_ROMAN}}, `{"enumy":{"XIV":2}}`}, + {"map", marshaler, &pb.Mappy{S32Booly: map[int32]bool{1: true, 3: false, 10: true, 12: false}}, `{"s32booly":{"1":true,"3":false,"10":true,"12":false}}`}, + {"map", marshaler, &pb.Mappy{S64Booly: map[int64]bool{1: true, 3: false, 10: true, 12: false}}, `{"s64booly":{"1":true,"3":false,"10":true,"12":false}}`}, + {"map", marshaler, &pb.Mappy{U32Booly: map[uint32]bool{1: true, 3: false, 10: true, 12: false}}, `{"u32booly":{"1":true,"3":false,"10":true,"12":false}}`}, + {"map", marshaler, &pb.Mappy{U64Booly: map[uint64]bool{1: true, 3: false, 10: true, 12: false}}, `{"u64booly":{"1":true,"3":false,"10":true,"12":false}}`}, + {"proto2 map", marshaler, &pb.Maps{MInt64Str: map[int64]string{213: "cat"}}, + `{"mInt64Str":{"213":"cat"}}`}, + {"proto2 map", marshaler, + &pb.Maps{MBoolSimple: map[bool]*pb.Simple{true: {OInt32: proto.Int32(1)}}}, + `{"mBoolSimple":{"true":{"oInt32":1}}}`}, + {"oneof, not set", marshaler, &pb.MsgWithOneof{}, `{}`}, + {"oneof, set", marshaler, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_Title{"Grand Poobah"}}, `{"title":"Grand Poobah"}`}, + {"force orig_name", Marshaler{OrigName: true}, &pb.Simple{OInt32: proto.Int32(4)}, + `{"o_int32":4}`}, + {"proto2 extension", marshaler, realNumber, realNumberJSON}, + {"Any with message", marshaler, anySimple, anySimpleJSON}, + {"Any with message and indent", marshalerAllOptions, anySimple, anySimplePrettyJSON}, + {"Any with WKT", marshaler, anyWellKnown, anyWellKnownJSON}, + {"Any with WKT and indent", marshalerAllOptions, anyWellKnown, anyWellKnownPrettyJSON}, + {"Duration", marshaler, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}, `{"dur":"3.000s"}`}, + {"Struct", marshaler, &pb.KnownTypes{St: &stpb.Struct{ + Fields: map[string]*stpb.Value{ + "one": {Kind: &stpb.Value_StringValue{"loneliest number"}}, + "two": {Kind: &stpb.Value_NullValue{stpb.NullValue_NULL_VALUE}}, + }, + }}, `{"st":{"one":"loneliest number","two":null}}`}, + {"empty ListValue", marshaler, &pb.KnownTypes{Lv: &stpb.ListValue{}}, `{"lv":[]}`}, + {"basic ListValue", marshaler, &pb.KnownTypes{Lv: &stpb.ListValue{Values: []*stpb.Value{ + {Kind: &stpb.Value_StringValue{"x"}}, + {Kind: &stpb.Value_NullValue{}}, + {Kind: &stpb.Value_NumberValue{3}}, + {Kind: &stpb.Value_BoolValue{true}}, + }}}, `{"lv":["x",null,3,true]}`}, + {"Timestamp", marshaler, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 14e8, Nanos: 21e6}}, `{"ts":"2014-05-13T16:53:20.021Z"}`}, + {"number Value", marshaler, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_NumberValue{1}}}, `{"val":1}`}, + {"null Value", marshaler, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_NullValue{stpb.NullValue_NULL_VALUE}}}, `{"val":null}`}, + {"string number value", marshaler, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_StringValue{"9223372036854775807"}}}, `{"val":"9223372036854775807"}`}, + {"list of lists Value", marshaler, &pb.KnownTypes{Val: &stpb.Value{ + Kind: &stpb.Value_ListValue{&stpb.ListValue{ + Values: []*stpb.Value{ + {Kind: &stpb.Value_StringValue{"x"}}, + {Kind: &stpb.Value_ListValue{&stpb.ListValue{ + Values: []*stpb.Value{ + {Kind: &stpb.Value_ListValue{&stpb.ListValue{ + Values: []*stpb.Value{{Kind: &stpb.Value_StringValue{"y"}}}, + }}}, + {Kind: &stpb.Value_StringValue{"z"}}, + }, + }}}, + }, + }}, + }}, `{"val":["x",[["y"],"z"]]}`}, + + {"DoubleValue", marshaler, &pb.KnownTypes{Dbl: &wpb.DoubleValue{Value: 1.2}}, `{"dbl":1.2}`}, + {"FloatValue", marshaler, &pb.KnownTypes{Flt: &wpb.FloatValue{Value: 1.2}}, `{"flt":1.2}`}, + {"Int64Value", marshaler, &pb.KnownTypes{I64: &wpb.Int64Value{Value: -3}}, `{"i64":"-3"}`}, + {"UInt64Value", marshaler, &pb.KnownTypes{U64: &wpb.UInt64Value{Value: 3}}, `{"u64":"3"}`}, + {"Int32Value", marshaler, &pb.KnownTypes{I32: &wpb.Int32Value{Value: -4}}, `{"i32":-4}`}, + {"UInt32Value", marshaler, &pb.KnownTypes{U32: &wpb.UInt32Value{Value: 4}}, `{"u32":4}`}, + {"BoolValue", marshaler, &pb.KnownTypes{Bool: &wpb.BoolValue{Value: true}}, `{"bool":true}`}, + {"StringValue", marshaler, &pb.KnownTypes{Str: &wpb.StringValue{Value: "plush"}}, `{"str":"plush"}`}, + {"BytesValue", marshaler, &pb.KnownTypes{Bytes: &wpb.BytesValue{Value: []byte("wow")}}, `{"bytes":"d293"}`}, +} + +func TestMarshaling(t *testing.T) { + for _, tt := range marshalingTests { + json, err := tt.marshaler.MarshalToString(tt.pb) + if err != nil { + t.Errorf("%s: marshaling error: %v", tt.desc, err) + } else if tt.json != json { + t.Errorf("%s: got [%v] want [%v]", tt.desc, json, tt.json) + } + } +} + +func TestMarshalJSONPBMarshaler(t *testing.T) { + rawJson := `{ "foo": "bar", "baz": [0, 1, 2, 3] }` + msg := dynamicMessage{rawJson: rawJson} + str, err := new(Marshaler).MarshalToString(&msg) + if err != nil { + t.Errorf("an unexpected error occurred when marshalling JSONPBMarshaler: %v", err) + } + if str != rawJson { + t.Errorf("marshalling JSON produced incorrect output: got %s, wanted %s", str, rawJson) + } +} + +func TestMarshalAnyJSONPBMarshaler(t *testing.T) { + msg := dynamicMessage{rawJson: `{ "foo": "bar", "baz": [0, 1, 2, 3] }`} + a, err := ptypes.MarshalAny(&msg) + if err != nil { + t.Errorf("an unexpected error occurred when marshalling to Any: %v", err) + } + str, err := new(Marshaler).MarshalToString(a) + if err != nil { + t.Errorf("an unexpected error occurred when marshalling Any to JSON: %v", err) + } + // after custom marshaling, it's round-tripped through JSON decoding/encoding already, + // so the keys are sorted, whitespace is compacted, and "@type" key has been added + expected := `{"@type":"type.googleapis.com/` + dynamicMessageName + `","baz":[0,1,2,3],"foo":"bar"}` + if str != expected { + t.Errorf("marshalling JSON produced incorrect output: got %s, wanted %s", str, expected) + } +} + +var unmarshalingTests = []struct { + desc string + unmarshaler Unmarshaler + json string + pb proto.Message +}{ + {"simple flat object", Unmarshaler{}, simpleObjectJSON, simpleObject}, + {"simple pretty object", Unmarshaler{}, simpleObjectPrettyJSON, simpleObject}, + {"repeated fields flat object", Unmarshaler{}, repeatsObjectJSON, repeatsObject}, + {"repeated fields pretty object", Unmarshaler{}, repeatsObjectPrettyJSON, repeatsObject}, + {"nested message/enum flat object", Unmarshaler{}, complexObjectJSON, complexObject}, + {"nested message/enum pretty object", Unmarshaler{}, complexObjectPrettyJSON, complexObject}, + {"enum-string object", Unmarshaler{}, `{"color":"BLUE"}`, &pb.Widget{Color: pb.Widget_BLUE.Enum()}}, + {"enum-value object", Unmarshaler{}, "{\n \"color\": 2\n}", &pb.Widget{Color: pb.Widget_BLUE.Enum()}}, + {"unknown field with allowed option", Unmarshaler{AllowUnknownFields: true}, `{"unknown": "foo"}`, new(pb.Simple)}, + {"proto3 enum string", Unmarshaler{}, `{"hilarity":"PUNS"}`, &proto3pb.Message{Hilarity: proto3pb.Message_PUNS}}, + {"proto3 enum value", Unmarshaler{}, `{"hilarity":1}`, &proto3pb.Message{Hilarity: proto3pb.Message_PUNS}}, + {"unknown enum value object", + Unmarshaler{}, + "{\n \"color\": 1000,\n \"r_color\": [\n \"RED\"\n ]\n}", + &pb.Widget{Color: pb.Widget_Color(1000).Enum(), RColor: []pb.Widget_Color{pb.Widget_RED}}}, + {"repeated proto3 enum", Unmarshaler{}, `{"rFunny":["PUNS","SLAPSTICK"]}`, + &proto3pb.Message{RFunny: []proto3pb.Message_Humour{ + proto3pb.Message_PUNS, + proto3pb.Message_SLAPSTICK, + }}}, + {"repeated proto3 enum as int", Unmarshaler{}, `{"rFunny":[1,2]}`, + &proto3pb.Message{RFunny: []proto3pb.Message_Humour{ + proto3pb.Message_PUNS, + proto3pb.Message_SLAPSTICK, + }}}, + {"repeated proto3 enum as mix of strings and ints", Unmarshaler{}, `{"rFunny":["PUNS",2]}`, + &proto3pb.Message{RFunny: []proto3pb.Message_Humour{ + proto3pb.Message_PUNS, + proto3pb.Message_SLAPSTICK, + }}}, + {"unquoted int64 object", Unmarshaler{}, `{"oInt64":-314}`, &pb.Simple{OInt64: proto.Int64(-314)}}, + {"unquoted uint64 object", Unmarshaler{}, `{"oUint64":123}`, &pb.Simple{OUint64: proto.Uint64(123)}}, + {"NaN", Unmarshaler{}, `{"oDouble":"NaN"}`, &pb.Simple{ODouble: proto.Float64(math.NaN())}}, + {"Inf", Unmarshaler{}, `{"oFloat":"Infinity"}`, &pb.Simple{OFloat: proto.Float32(float32(math.Inf(1)))}}, + {"-Inf", Unmarshaler{}, `{"oDouble":"-Infinity"}`, &pb.Simple{ODouble: proto.Float64(math.Inf(-1))}}, + {"map", Unmarshaler{}, `{"nummy":{"1":2,"3":4}}`, &pb.Mappy{Nummy: map[int64]int32{1: 2, 3: 4}}}, + {"map", Unmarshaler{}, `{"strry":{"\"one\"":"two","three":"four"}}`, &pb.Mappy{Strry: map[string]string{`"one"`: "two", "three": "four"}}}, + {"map", Unmarshaler{}, `{"objjy":{"1":{"dub":1}}}`, &pb.Mappy{Objjy: map[int32]*pb.Simple3{1: {Dub: 1}}}}, + {"proto2 extension", Unmarshaler{}, realNumberJSON, realNumber}, + {"Any with message", Unmarshaler{}, anySimpleJSON, anySimple}, + {"Any with message and indent", Unmarshaler{}, anySimplePrettyJSON, anySimple}, + {"Any with WKT", Unmarshaler{}, anyWellKnownJSON, anyWellKnown}, + {"Any with WKT and indent", Unmarshaler{}, anyWellKnownPrettyJSON, anyWellKnown}, + // TODO: This is broken. + //{"map", Unmarshaler{}, `{"enumy":{"XIV":"ROMAN"}`, &pb.Mappy{Enumy: map[string]pb.Numeral{"XIV": pb.Numeral_ROMAN}}}, + {"map", Unmarshaler{}, `{"enumy":{"XIV":2}}`, &pb.Mappy{Enumy: map[string]pb.Numeral{"XIV": pb.Numeral_ROMAN}}}, + {"oneof", Unmarshaler{}, `{"salary":31000}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_Salary{31000}}}, + {"oneof spec name", Unmarshaler{}, `{"Country":"Australia"}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_Country{"Australia"}}}, + {"oneof orig_name", Unmarshaler{}, `{"Country":"Australia"}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_Country{"Australia"}}}, + {"oneof spec name2", Unmarshaler{}, `{"homeAddress":"Australia"}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_HomeAddress{"Australia"}}}, + {"oneof orig_name2", Unmarshaler{}, `{"home_address":"Australia"}`, &pb.MsgWithOneof{Union: &pb.MsgWithOneof_HomeAddress{"Australia"}}}, + {"orig_name input", Unmarshaler{}, `{"o_bool":true}`, &pb.Simple{OBool: proto.Bool(true)}}, + {"camelName input", Unmarshaler{}, `{"oBool":true}`, &pb.Simple{OBool: proto.Bool(true)}}, + + {"Duration", Unmarshaler{}, `{"dur":"3.000s"}`, &pb.KnownTypes{Dur: &durpb.Duration{Seconds: 3}}}, + {"null Duration", Unmarshaler{}, `{"dur":null}`, &pb.KnownTypes{Dur: nil}}, + {"Timestamp", Unmarshaler{}, `{"ts":"2014-05-13T16:53:20.021Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: 14e8, Nanos: 21e6}}}, + {"PreEpochTimestamp", Unmarshaler{}, `{"ts":"1969-12-31T23:59:58.999999995Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -2, Nanos: 999999995}}}, + {"ZeroTimeTimestamp", Unmarshaler{}, `{"ts":"0001-01-01T00:00:00Z"}`, &pb.KnownTypes{Ts: &tspb.Timestamp{Seconds: -62135596800, Nanos: 0}}}, + {"null Timestamp", Unmarshaler{}, `{"ts":null}`, &pb.KnownTypes{Ts: nil}}, + {"null Struct", Unmarshaler{}, `{"st": null}`, &pb.KnownTypes{St: nil}}, + {"empty Struct", Unmarshaler{}, `{"st": {}}`, &pb.KnownTypes{St: &stpb.Struct{}}}, + {"basic Struct", Unmarshaler{}, `{"st": {"a": "x", "b": null, "c": 3, "d": true}}`, &pb.KnownTypes{St: &stpb.Struct{Fields: map[string]*stpb.Value{ + "a": {Kind: &stpb.Value_StringValue{"x"}}, + "b": {Kind: &stpb.Value_NullValue{}}, + "c": {Kind: &stpb.Value_NumberValue{3}}, + "d": {Kind: &stpb.Value_BoolValue{true}}, + }}}}, + {"nested Struct", Unmarshaler{}, `{"st": {"a": {"b": 1, "c": [{"d": true}, "f"]}}}`, &pb.KnownTypes{St: &stpb.Struct{Fields: map[string]*stpb.Value{ + "a": {Kind: &stpb.Value_StructValue{&stpb.Struct{Fields: map[string]*stpb.Value{ + "b": {Kind: &stpb.Value_NumberValue{1}}, + "c": {Kind: &stpb.Value_ListValue{&stpb.ListValue{Values: []*stpb.Value{ + {Kind: &stpb.Value_StructValue{&stpb.Struct{Fields: map[string]*stpb.Value{"d": {Kind: &stpb.Value_BoolValue{true}}}}}}, + {Kind: &stpb.Value_StringValue{"f"}}, + }}}}, + }}}}, + }}}}, + {"null ListValue", Unmarshaler{}, `{"lv": null}`, &pb.KnownTypes{Lv: nil}}, + {"empty ListValue", Unmarshaler{}, `{"lv": []}`, &pb.KnownTypes{Lv: &stpb.ListValue{}}}, + {"basic ListValue", Unmarshaler{}, `{"lv": ["x", null, 3, true]}`, &pb.KnownTypes{Lv: &stpb.ListValue{Values: []*stpb.Value{ + {Kind: &stpb.Value_StringValue{"x"}}, + {Kind: &stpb.Value_NullValue{}}, + {Kind: &stpb.Value_NumberValue{3}}, + {Kind: &stpb.Value_BoolValue{true}}, + }}}}, + {"number Value", Unmarshaler{}, `{"val":1}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_NumberValue{1}}}}, + {"null Value", Unmarshaler{}, `{"val":null}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_NullValue{stpb.NullValue_NULL_VALUE}}}}, + {"bool Value", Unmarshaler{}, `{"val":true}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_BoolValue{true}}}}, + {"string Value", Unmarshaler{}, `{"val":"x"}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_StringValue{"x"}}}}, + {"string number value", Unmarshaler{}, `{"val":"9223372036854775807"}`, &pb.KnownTypes{Val: &stpb.Value{Kind: &stpb.Value_StringValue{"9223372036854775807"}}}}, + {"list of lists Value", Unmarshaler{}, `{"val":["x", [["y"], "z"]]}`, &pb.KnownTypes{Val: &stpb.Value{ + Kind: &stpb.Value_ListValue{&stpb.ListValue{ + Values: []*stpb.Value{ + {Kind: &stpb.Value_StringValue{"x"}}, + {Kind: &stpb.Value_ListValue{&stpb.ListValue{ + Values: []*stpb.Value{ + {Kind: &stpb.Value_ListValue{&stpb.ListValue{ + Values: []*stpb.Value{{Kind: &stpb.Value_StringValue{"y"}}}, + }}}, + {Kind: &stpb.Value_StringValue{"z"}}, + }, + }}}, + }, + }}}}}, + + {"DoubleValue", Unmarshaler{}, `{"dbl":1.2}`, &pb.KnownTypes{Dbl: &wpb.DoubleValue{Value: 1.2}}}, + {"FloatValue", Unmarshaler{}, `{"flt":1.2}`, &pb.KnownTypes{Flt: &wpb.FloatValue{Value: 1.2}}}, + {"Int64Value", Unmarshaler{}, `{"i64":"-3"}`, &pb.KnownTypes{I64: &wpb.Int64Value{Value: -3}}}, + {"UInt64Value", Unmarshaler{}, `{"u64":"3"}`, &pb.KnownTypes{U64: &wpb.UInt64Value{Value: 3}}}, + {"Int32Value", Unmarshaler{}, `{"i32":-4}`, &pb.KnownTypes{I32: &wpb.Int32Value{Value: -4}}}, + {"UInt32Value", Unmarshaler{}, `{"u32":4}`, &pb.KnownTypes{U32: &wpb.UInt32Value{Value: 4}}}, + {"BoolValue", Unmarshaler{}, `{"bool":true}`, &pb.KnownTypes{Bool: &wpb.BoolValue{Value: true}}}, + {"StringValue", Unmarshaler{}, `{"str":"plush"}`, &pb.KnownTypes{Str: &wpb.StringValue{Value: "plush"}}}, + {"BytesValue", Unmarshaler{}, `{"bytes":"d293"}`, &pb.KnownTypes{Bytes: &wpb.BytesValue{Value: []byte("wow")}}}, + + // Ensure that `null` as a value ends up with a nil pointer instead of a [type]Value struct. + {"null DoubleValue", Unmarshaler{}, `{"dbl":null}`, &pb.KnownTypes{Dbl: nil}}, + {"null FloatValue", Unmarshaler{}, `{"flt":null}`, &pb.KnownTypes{Flt: nil}}, + {"null Int64Value", Unmarshaler{}, `{"i64":null}`, &pb.KnownTypes{I64: nil}}, + {"null UInt64Value", Unmarshaler{}, `{"u64":null}`, &pb.KnownTypes{U64: nil}}, + {"null Int32Value", Unmarshaler{}, `{"i32":null}`, &pb.KnownTypes{I32: nil}}, + {"null UInt32Value", Unmarshaler{}, `{"u32":null}`, &pb.KnownTypes{U32: nil}}, + {"null BoolValue", Unmarshaler{}, `{"bool":null}`, &pb.KnownTypes{Bool: nil}}, + {"null StringValue", Unmarshaler{}, `{"str":null}`, &pb.KnownTypes{Str: nil}}, + {"null BytesValue", Unmarshaler{}, `{"bytes":null}`, &pb.KnownTypes{Bytes: nil}}, +} + +func TestUnmarshaling(t *testing.T) { + for _, tt := range unmarshalingTests { + // Make a new instance of the type of our expected object. + p := reflect.New(reflect.TypeOf(tt.pb).Elem()).Interface().(proto.Message) + + err := tt.unmarshaler.Unmarshal(strings.NewReader(tt.json), p) + if err != nil { + t.Errorf("%s: %v", tt.desc, err) + continue + } + + // For easier diffs, compare text strings of the protos. + exp := proto.MarshalTextString(tt.pb) + act := proto.MarshalTextString(p) + if string(exp) != string(act) { + t.Errorf("%s: got [%s] want [%s]", tt.desc, act, exp) + } + } +} + +func TestUnmarshalNullArray(t *testing.T) { + var repeats pb.Repeats + if err := UnmarshalString(`{"rBool":null}`, &repeats); err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(repeats, pb.Repeats{}) { + t.Errorf("got non-nil fields in [%#v]", repeats) + } +} + +func TestUnmarshalNullObject(t *testing.T) { + var maps pb.Maps + if err := UnmarshalString(`{"mInt64Str":null}`, &maps); err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(maps, pb.Maps{}) { + t.Errorf("got non-nil fields in [%#v]", maps) + } +} + +func TestUnmarshalNext(t *testing.T) { + // We only need to check against a few, not all of them. + tests := unmarshalingTests[:5] + + // Create a buffer with many concatenated JSON objects. + var b bytes.Buffer + for _, tt := range tests { + b.WriteString(tt.json) + } + + dec := json.NewDecoder(&b) + for _, tt := range tests { + // Make a new instance of the type of our expected object. + p := reflect.New(reflect.TypeOf(tt.pb).Elem()).Interface().(proto.Message) + + err := tt.unmarshaler.UnmarshalNext(dec, p) + if err != nil { + t.Errorf("%s: %v", tt.desc, err) + continue + } + + // For easier diffs, compare text strings of the protos. + exp := proto.MarshalTextString(tt.pb) + act := proto.MarshalTextString(p) + if string(exp) != string(act) { + t.Errorf("%s: got [%s] want [%s]", tt.desc, act, exp) + } + } + + p := &pb.Simple{} + err := new(Unmarshaler).UnmarshalNext(dec, p) + if err != io.EOF { + t.Errorf("eof: got %v, expected io.EOF", err) + } +} + +var unmarshalingShouldError = []struct { + desc string + in string + pb proto.Message +}{ + {"a value", "666", new(pb.Simple)}, + {"gibberish", "{adskja123;l23=-=", new(pb.Simple)}, + {"unknown field", `{"unknown": "foo"}`, new(pb.Simple)}, + {"unknown enum name", `{"hilarity":"DAVE"}`, new(proto3pb.Message)}, +} + +func TestUnmarshalingBadInput(t *testing.T) { + for _, tt := range unmarshalingShouldError { + err := UnmarshalString(tt.in, tt.pb) + if err == nil { + t.Errorf("an error was expected when parsing %q instead of an object", tt.desc) + } + } +} + +type funcResolver func(turl string) (proto.Message, error) + +func (fn funcResolver) Resolve(turl string) (proto.Message, error) { + return fn(turl) +} + +func TestAnyWithCustomResolver(t *testing.T) { + var resolvedTypeUrls []string + resolver := funcResolver(func(turl string) (proto.Message, error) { + resolvedTypeUrls = append(resolvedTypeUrls, turl) + return new(pb.Simple), nil + }) + msg := &pb.Simple{ + OBytes: []byte{1, 2, 3, 4}, + OBool: proto.Bool(true), + OString: proto.String("foobar"), + OInt64: proto.Int64(1020304), + } + msgBytes, err := proto.Marshal(msg) + if err != nil { + t.Errorf("an unexpected error occurred when marshaling message: %v", err) + } + // make an Any with a type URL that won't resolve w/out custom resolver + any := &anypb.Any{ + TypeUrl: "https://foobar.com/some.random.MessageKind", + Value: msgBytes, + } + + m := Marshaler{AnyResolver: resolver} + js, err := m.MarshalToString(any) + if err != nil { + t.Errorf("an unexpected error occurred when marshaling any to JSON: %v", err) + } + if len(resolvedTypeUrls) != 1 { + t.Errorf("custom resolver was not invoked during marshaling") + } else if resolvedTypeUrls[0] != "https://foobar.com/some.random.MessageKind" { + t.Errorf("custom resolver was invoked with wrong URL: got %q, wanted %q", resolvedTypeUrls[0], "https://foobar.com/some.random.MessageKind") + } + wanted := `{"@type":"https://foobar.com/some.random.MessageKind","oBool":true,"oInt64":"1020304","oString":"foobar","oBytes":"AQIDBA=="}` + if js != wanted { + t.Errorf("marshalling JSON produced incorrect output: got %s, wanted %s", js, wanted) + } + + u := Unmarshaler{AnyResolver: resolver} + roundTrip := &anypb.Any{} + err = u.Unmarshal(bytes.NewReader([]byte(js)), roundTrip) + if err != nil { + t.Errorf("an unexpected error occurred when unmarshaling any from JSON: %v", err) + } + if len(resolvedTypeUrls) != 2 { + t.Errorf("custom resolver was not invoked during marshaling") + } else if resolvedTypeUrls[1] != "https://foobar.com/some.random.MessageKind" { + t.Errorf("custom resolver was invoked with wrong URL: got %q, wanted %q", resolvedTypeUrls[1], "https://foobar.com/some.random.MessageKind") + } + if !proto.Equal(any, roundTrip) { + t.Errorf("message contents not set correctly after unmarshalling JSON: got %s, wanted %s", roundTrip, any) + } +} + +func TestUnmarshalJSONPBUnmarshaler(t *testing.T) { + rawJson := `{ "foo": "bar", "baz": [0, 1, 2, 3] }` + var msg dynamicMessage + if err := Unmarshal(strings.NewReader(rawJson), &msg); err != nil { + t.Errorf("an unexpected error occurred when parsing into JSONPBUnmarshaler: %v", err) + } + if msg.rawJson != rawJson { + t.Errorf("message contents not set correctly after unmarshalling JSON: got %s, wanted %s", msg.rawJson, rawJson) + } +} + +func TestUnmarshalNullWithJSONPBUnmarshaler(t *testing.T) { + rawJson := `{"stringField":null}` + var ptrFieldMsg ptrFieldMessage + if err := Unmarshal(strings.NewReader(rawJson), &ptrFieldMsg); err != nil { + t.Errorf("unmarshal error: %v", err) + } + + want := ptrFieldMessage{StringField: &stringField{IsSet: true, StringValue: "null"}} + if !proto.Equal(&ptrFieldMsg, &want) { + t.Errorf("unmarshal result StringField: got %v, want %v", ptrFieldMsg, want) + } +} + +func TestUnmarshalAnyJSONPBUnmarshaler(t *testing.T) { + rawJson := `{ "@type": "blah.com/` + dynamicMessageName + `", "foo": "bar", "baz": [0, 1, 2, 3] }` + var got anypb.Any + if err := Unmarshal(strings.NewReader(rawJson), &got); err != nil { + t.Errorf("an unexpected error occurred when parsing into JSONPBUnmarshaler: %v", err) + } + + dm := &dynamicMessage{rawJson: `{"baz":[0,1,2,3],"foo":"bar"}`} + var want anypb.Any + if b, err := proto.Marshal(dm); err != nil { + t.Errorf("an unexpected error occurred when marshaling message: %v", err) + } else { + want.TypeUrl = "blah.com/" + dynamicMessageName + want.Value = b + } + + if !proto.Equal(&got, &want) { + t.Errorf("message contents not set correctly after unmarshalling JSON: got %s, wanted %s", got, want) + } +} + +const ( + dynamicMessageName = "google.protobuf.jsonpb.testing.dynamicMessage" +) + +func init() { + // we register the custom type below so that we can use it in Any types + proto.RegisterType((*dynamicMessage)(nil), dynamicMessageName) +} + +type ptrFieldMessage struct { + StringField *stringField `protobuf:"bytes,1,opt,name=stringField"` +} + +func (m *ptrFieldMessage) Reset() { +} + +func (m *ptrFieldMessage) String() string { + return m.StringField.StringValue +} + +func (m *ptrFieldMessage) ProtoMessage() { +} + +type stringField struct { + IsSet bool `protobuf:"varint,1,opt,name=isSet"` + StringValue string `protobuf:"bytes,2,opt,name=stringValue"` +} + +func (s *stringField) Reset() { +} + +func (s *stringField) String() string { + return s.StringValue +} + +func (s *stringField) ProtoMessage() { +} + +func (s *stringField) UnmarshalJSONPB(jum *Unmarshaler, js []byte) error { + s.IsSet = true + s.StringValue = string(js) + return nil +} + +// dynamicMessage implements protobuf.Message but is not a normal generated message type. +// It provides implementations of JSONPBMarshaler and JSONPBUnmarshaler for JSON support. +type dynamicMessage struct { + rawJson string `protobuf:"bytes,1,opt,name=rawJson"` +} + +func (m *dynamicMessage) Reset() { + m.rawJson = "{}" +} + +func (m *dynamicMessage) String() string { + return m.rawJson +} + +func (m *dynamicMessage) ProtoMessage() { +} + +func (m *dynamicMessage) MarshalJSONPB(jm *Marshaler) ([]byte, error) { + return []byte(m.rawJson), nil +} + +func (m *dynamicMessage) UnmarshalJSONPB(jum *Unmarshaler, js []byte) error { + m.rawJson = string(js) + return nil +} diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/Makefile b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/Makefile new file mode 100644 index 0000000..eeda8ae --- /dev/null +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/Makefile @@ -0,0 +1,33 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2015 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +regenerate: + protoc --go_out=Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any,Mgoogle/protobuf/duration.proto=github.com/golang/protobuf/ptypes/duration,Mgoogle/protobuf/struct.proto=github.com/golang/protobuf/ptypes/struct,Mgoogle/protobuf/timestamp.proto=github.com/golang/protobuf/ptypes/timestamp,Mgoogle/protobuf/wrappers.proto=github.com/golang/protobuf/ptypes/wrappers:. *.proto diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go new file mode 100644 index 0000000..ebb180e --- /dev/null +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.pb.go @@ -0,0 +1,266 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: more_test_objects.proto + +/* +Package jsonpb is a generated protocol buffer package. + +It is generated from these files: + more_test_objects.proto + test_objects.proto + +It has these top-level messages: + Simple3 + SimpleSlice3 + SimpleMap3 + SimpleNull3 + Mappy + Simple + NonFinites + Repeats + Widget + Maps + MsgWithOneof + Real + Complex + KnownTypes +*/ +package jsonpb + +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 + +type Numeral int32 + +const ( + Numeral_UNKNOWN Numeral = 0 + Numeral_ARABIC Numeral = 1 + Numeral_ROMAN Numeral = 2 +) + +var Numeral_name = map[int32]string{ + 0: "UNKNOWN", + 1: "ARABIC", + 2: "ROMAN", +} +var Numeral_value = map[string]int32{ + "UNKNOWN": 0, + "ARABIC": 1, + "ROMAN": 2, +} + +func (x Numeral) String() string { + return proto.EnumName(Numeral_name, int32(x)) +} +func (Numeral) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type Simple3 struct { + Dub float64 `protobuf:"fixed64,1,opt,name=dub" json:"dub,omitempty"` +} + +func (m *Simple3) Reset() { *m = Simple3{} } +func (m *Simple3) String() string { return proto.CompactTextString(m) } +func (*Simple3) ProtoMessage() {} +func (*Simple3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Simple3) GetDub() float64 { + if m != nil { + return m.Dub + } + return 0 +} + +type SimpleSlice3 struct { + Slices []string `protobuf:"bytes,1,rep,name=slices" json:"slices,omitempty"` +} + +func (m *SimpleSlice3) Reset() { *m = SimpleSlice3{} } +func (m *SimpleSlice3) String() string { return proto.CompactTextString(m) } +func (*SimpleSlice3) ProtoMessage() {} +func (*SimpleSlice3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *SimpleSlice3) GetSlices() []string { + if m != nil { + return m.Slices + } + return nil +} + +type SimpleMap3 struct { + Stringy map[string]string `protobuf:"bytes,1,rep,name=stringy" json:"stringy,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *SimpleMap3) Reset() { *m = SimpleMap3{} } +func (m *SimpleMap3) String() string { return proto.CompactTextString(m) } +func (*SimpleMap3) ProtoMessage() {} +func (*SimpleMap3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *SimpleMap3) GetStringy() map[string]string { + if m != nil { + return m.Stringy + } + return nil +} + +type SimpleNull3 struct { + Simple *Simple3 `protobuf:"bytes,1,opt,name=simple" json:"simple,omitempty"` +} + +func (m *SimpleNull3) Reset() { *m = SimpleNull3{} } +func (m *SimpleNull3) String() string { return proto.CompactTextString(m) } +func (*SimpleNull3) ProtoMessage() {} +func (*SimpleNull3) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *SimpleNull3) GetSimple() *Simple3 { + if m != nil { + return m.Simple + } + return nil +} + +type Mappy struct { + Nummy map[int64]int32 `protobuf:"bytes,1,rep,name=nummy" json:"nummy,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + Strry map[string]string `protobuf:"bytes,2,rep,name=strry" json:"strry,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Objjy map[int32]*Simple3 `protobuf:"bytes,3,rep,name=objjy" json:"objjy,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Buggy map[int64]string `protobuf:"bytes,4,rep,name=buggy" json:"buggy,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Booly map[bool]bool `protobuf:"bytes,5,rep,name=booly" json:"booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + Enumy map[string]Numeral `protobuf:"bytes,6,rep,name=enumy" json:"enumy,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=jsonpb.Numeral"` + S32Booly map[int32]bool `protobuf:"bytes,7,rep,name=s32booly" json:"s32booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + S64Booly map[int64]bool `protobuf:"bytes,8,rep,name=s64booly" json:"s64booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + U32Booly map[uint32]bool `protobuf:"bytes,9,rep,name=u32booly" json:"u32booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` + U64Booly map[uint64]bool `protobuf:"bytes,10,rep,name=u64booly" json:"u64booly,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` +} + +func (m *Mappy) Reset() { *m = Mappy{} } +func (m *Mappy) String() string { return proto.CompactTextString(m) } +func (*Mappy) ProtoMessage() {} +func (*Mappy) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *Mappy) GetNummy() map[int64]int32 { + if m != nil { + return m.Nummy + } + return nil +} + +func (m *Mappy) GetStrry() map[string]string { + if m != nil { + return m.Strry + } + return nil +} + +func (m *Mappy) GetObjjy() map[int32]*Simple3 { + if m != nil { + return m.Objjy + } + return nil +} + +func (m *Mappy) GetBuggy() map[int64]string { + if m != nil { + return m.Buggy + } + return nil +} + +func (m *Mappy) GetBooly() map[bool]bool { + if m != nil { + return m.Booly + } + return nil +} + +func (m *Mappy) GetEnumy() map[string]Numeral { + if m != nil { + return m.Enumy + } + return nil +} + +func (m *Mappy) GetS32Booly() map[int32]bool { + if m != nil { + return m.S32Booly + } + return nil +} + +func (m *Mappy) GetS64Booly() map[int64]bool { + if m != nil { + return m.S64Booly + } + return nil +} + +func (m *Mappy) GetU32Booly() map[uint32]bool { + if m != nil { + return m.U32Booly + } + return nil +} + +func (m *Mappy) GetU64Booly() map[uint64]bool { + if m != nil { + return m.U64Booly + } + return nil +} + +func init() { + proto.RegisterType((*Simple3)(nil), "jsonpb.Simple3") + proto.RegisterType((*SimpleSlice3)(nil), "jsonpb.SimpleSlice3") + proto.RegisterType((*SimpleMap3)(nil), "jsonpb.SimpleMap3") + proto.RegisterType((*SimpleNull3)(nil), "jsonpb.SimpleNull3") + proto.RegisterType((*Mappy)(nil), "jsonpb.Mappy") + proto.RegisterEnum("jsonpb.Numeral", Numeral_name, Numeral_value) +} + +func init() { proto.RegisterFile("more_test_objects.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 526 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xdd, 0x6b, 0xdb, 0x3c, + 0x14, 0x87, 0x5f, 0x27, 0xf5, 0xd7, 0x49, 0xfb, 0x2e, 0x88, 0xb1, 0x99, 0xf4, 0x62, 0xc5, 0xb0, + 0xad, 0x0c, 0xe6, 0x8b, 0x78, 0x74, 0x5d, 0x77, 0x95, 0x8e, 0x5e, 0x94, 0x11, 0x07, 0x1c, 0xc2, + 0x2e, 0x4b, 0xdc, 0x99, 0x90, 0xcc, 0x5f, 0xd8, 0xd6, 0xc0, 0xd7, 0xfb, 0xbb, 0x07, 0xe3, 0x48, + 0x72, 0x2d, 0x07, 0x85, 0x6c, 0x77, 0x52, 0x7e, 0xcf, 0xe3, 0x73, 0x24, 0x1d, 0x02, 0x2f, 0xd3, + 0xbc, 0x8c, 0x1f, 0xea, 0xb8, 0xaa, 0x1f, 0xf2, 0x68, 0x17, 0x3f, 0xd6, 0x95, 0x57, 0x94, 0x79, + 0x9d, 0x13, 0x63, 0x57, 0xe5, 0x59, 0x11, 0xb9, 0xe7, 0x60, 0x2e, 0xb7, 0x69, 0x91, 0xc4, 0x3e, + 0x19, 0xc3, 0xf0, 0x3b, 0x8d, 0x1c, 0xed, 0x42, 0xbb, 0xd4, 0x42, 0x5c, 0xba, 0x6f, 0xe0, 0x94, + 0x87, 0xcb, 0x64, 0xfb, 0x18, 0xfb, 0xe4, 0x05, 0x18, 0x15, 0xae, 0x2a, 0x47, 0xbb, 0x18, 0x5e, + 0xda, 0xa1, 0xd8, 0xb9, 0xbf, 0x34, 0x00, 0x0e, 0xce, 0xd7, 0x85, 0x4f, 0x3e, 0x81, 0x59, 0xd5, + 0xe5, 0x36, 0xdb, 0x34, 0x8c, 0x1b, 0x4d, 0x5f, 0x79, 0xbc, 0x9a, 0xd7, 0x41, 0xde, 0x92, 0x13, + 0x77, 0x59, 0x5d, 0x36, 0x61, 0xcb, 0x4f, 0x6e, 0xe0, 0x54, 0x0e, 0xb0, 0xa7, 0x1f, 0x71, 0xc3, + 0x7a, 0xb2, 0x43, 0x5c, 0x92, 0xe7, 0xa0, 0xff, 0x5c, 0x27, 0x34, 0x76, 0x06, 0xec, 0x37, 0xbe, + 0xb9, 0x19, 0x5c, 0x6b, 0xee, 0x15, 0x8c, 0xf8, 0xf7, 0x03, 0x9a, 0x24, 0x3e, 0x79, 0x0b, 0x46, + 0xc5, 0xb6, 0xcc, 0x1e, 0x4d, 0x9f, 0xf5, 0x9b, 0xf0, 0x43, 0x11, 0xbb, 0xbf, 0x2d, 0xd0, 0xe7, + 0xeb, 0xa2, 0x68, 0x88, 0x07, 0x7a, 0x46, 0xd3, 0xb4, 0x6d, 0xdb, 0x69, 0x0d, 0x96, 0x7a, 0x01, + 0x46, 0xbc, 0x5f, 0x8e, 0x21, 0x5f, 0xd5, 0x65, 0xd9, 0x38, 0x03, 0x15, 0xbf, 0xc4, 0x48, 0xf0, + 0x0c, 0x43, 0x3e, 0x8f, 0x76, 0xbb, 0xc6, 0x19, 0xaa, 0xf8, 0x05, 0x46, 0x82, 0x67, 0x18, 0xf2, + 0x11, 0xdd, 0x6c, 0x1a, 0xe7, 0x44, 0xc5, 0xdf, 0x62, 0x24, 0x78, 0x86, 0x31, 0x3e, 0xcf, 0x93, + 0xc6, 0xd1, 0x95, 0x3c, 0x46, 0x2d, 0x8f, 0x6b, 0xe4, 0xe3, 0x8c, 0xa6, 0x8d, 0x63, 0xa8, 0xf8, + 0x3b, 0x8c, 0x04, 0xcf, 0x30, 0xf2, 0x11, 0xac, 0xca, 0x9f, 0xf2, 0x12, 0x26, 0x53, 0xce, 0xf7, + 0x8e, 0x2c, 0x52, 0x6e, 0x3d, 0xc1, 0x4c, 0xbc, 0xfa, 0xc0, 0x45, 0x4b, 0x29, 0x8a, 0xb4, 0x15, + 0xc5, 0x16, 0x45, 0xda, 0x56, 0xb4, 0x55, 0xe2, 0xaa, 0x5f, 0x91, 0x4a, 0x15, 0x69, 0x5b, 0x11, + 0x94, 0x62, 0xbf, 0x62, 0x0b, 0x4f, 0xae, 0x01, 0xba, 0x87, 0x96, 0xe7, 0x6f, 0xa8, 0x98, 0x3f, + 0x5d, 0x9a, 0x3f, 0x34, 0xbb, 0x27, 0xff, 0x97, 0xc9, 0x9d, 0xdc, 0x03, 0x74, 0x8f, 0x2f, 0x9b, + 0x3a, 0x37, 0x5f, 0xcb, 0xa6, 0x62, 0x92, 0xfb, 0x4d, 0x74, 0x73, 0x71, 0xac, 0x7d, 0x7b, 0xdf, + 0x7c, 0xba, 0x10, 0xd9, 0xb4, 0x14, 0xa6, 0xb5, 0xd7, 0x7e, 0x37, 0x2b, 0x8a, 0x83, 0xf7, 0xda, + 0xff, 0xbf, 0x6b, 0x3f, 0xa0, 0x69, 0x5c, 0xae, 0x13, 0xf9, 0x53, 0x9f, 0xe1, 0xac, 0x37, 0x43, + 0x8a, 0xcb, 0x38, 0xdc, 0x07, 0xca, 0xf2, 0xab, 0x1e, 0x3b, 0xfe, 0xbe, 0xbc, 0x3a, 0x54, 0xf9, + 0xec, 0x6f, 0xe4, 0x43, 0x95, 0x4f, 0x8e, 0xc8, 0xef, 0xde, 0x83, 0x29, 0x6e, 0x82, 0x8c, 0xc0, + 0x5c, 0x05, 0x5f, 0x83, 0xc5, 0xb7, 0x60, 0xfc, 0x1f, 0x01, 0x30, 0x66, 0xe1, 0xec, 0xf6, 0xfe, + 0xcb, 0x58, 0x23, 0x36, 0xe8, 0xe1, 0x62, 0x3e, 0x0b, 0xc6, 0x83, 0xc8, 0x60, 0x7f, 0xe0, 0xfe, + 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x84, 0x34, 0xaf, 0xdb, 0x05, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto new file mode 100644 index 0000000..d254fa5 --- /dev/null +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/more_test_objects.proto @@ -0,0 +1,69 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2015 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package jsonpb; + +message Simple3 { + double dub = 1; +} + +message SimpleSlice3 { + repeated string slices = 1; +} + +message SimpleMap3 { + map stringy = 1; +} + +message SimpleNull3 { + Simple3 simple = 1; +} + +enum Numeral { + UNKNOWN = 0; + ARABIC = 1; + ROMAN = 2; +} + +message Mappy { + map nummy = 1; + map strry = 2; + map objjy = 3; + map buggy = 4; + map booly = 5; + map enumy = 6; + map s32booly = 7; + map s64booly = 8; + map u32booly = 9; + map u64booly = 10; +} diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go new file mode 100644 index 0000000..d413d74 --- /dev/null +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.pb.go @@ -0,0 +1,852 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: test_objects.proto + +package jsonpb + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/golang/protobuf/ptypes/any" +import google_protobuf1 "github.com/golang/protobuf/ptypes/duration" +import google_protobuf2 "github.com/golang/protobuf/ptypes/struct" +import google_protobuf3 "github.com/golang/protobuf/ptypes/timestamp" +import google_protobuf4 "github.com/golang/protobuf/ptypes/wrappers" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +type Widget_Color int32 + +const ( + Widget_RED Widget_Color = 0 + Widget_GREEN Widget_Color = 1 + Widget_BLUE Widget_Color = 2 +) + +var Widget_Color_name = map[int32]string{ + 0: "RED", + 1: "GREEN", + 2: "BLUE", +} +var Widget_Color_value = map[string]int32{ + "RED": 0, + "GREEN": 1, + "BLUE": 2, +} + +func (x Widget_Color) Enum() *Widget_Color { + p := new(Widget_Color) + *p = x + return p +} +func (x Widget_Color) String() string { + return proto.EnumName(Widget_Color_name, int32(x)) +} +func (x *Widget_Color) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Widget_Color_value, data, "Widget_Color") + if err != nil { + return err + } + *x = Widget_Color(value) + return nil +} +func (Widget_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor1, []int{3, 0} } + +// Test message for holding primitive types. +type Simple struct { + OBool *bool `protobuf:"varint,1,opt,name=o_bool,json=oBool" json:"o_bool,omitempty"` + OInt32 *int32 `protobuf:"varint,2,opt,name=o_int32,json=oInt32" json:"o_int32,omitempty"` + OInt64 *int64 `protobuf:"varint,3,opt,name=o_int64,json=oInt64" json:"o_int64,omitempty"` + OUint32 *uint32 `protobuf:"varint,4,opt,name=o_uint32,json=oUint32" json:"o_uint32,omitempty"` + OUint64 *uint64 `protobuf:"varint,5,opt,name=o_uint64,json=oUint64" json:"o_uint64,omitempty"` + OSint32 *int32 `protobuf:"zigzag32,6,opt,name=o_sint32,json=oSint32" json:"o_sint32,omitempty"` + OSint64 *int64 `protobuf:"zigzag64,7,opt,name=o_sint64,json=oSint64" json:"o_sint64,omitempty"` + OFloat *float32 `protobuf:"fixed32,8,opt,name=o_float,json=oFloat" json:"o_float,omitempty"` + ODouble *float64 `protobuf:"fixed64,9,opt,name=o_double,json=oDouble" json:"o_double,omitempty"` + OString *string `protobuf:"bytes,10,opt,name=o_string,json=oString" json:"o_string,omitempty"` + OBytes []byte `protobuf:"bytes,11,opt,name=o_bytes,json=oBytes" json:"o_bytes,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Simple) Reset() { *m = Simple{} } +func (m *Simple) String() string { return proto.CompactTextString(m) } +func (*Simple) ProtoMessage() {} +func (*Simple) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Simple) GetOBool() bool { + if m != nil && m.OBool != nil { + return *m.OBool + } + return false +} + +func (m *Simple) GetOInt32() int32 { + if m != nil && m.OInt32 != nil { + return *m.OInt32 + } + return 0 +} + +func (m *Simple) GetOInt64() int64 { + if m != nil && m.OInt64 != nil { + return *m.OInt64 + } + return 0 +} + +func (m *Simple) GetOUint32() uint32 { + if m != nil && m.OUint32 != nil { + return *m.OUint32 + } + return 0 +} + +func (m *Simple) GetOUint64() uint64 { + if m != nil && m.OUint64 != nil { + return *m.OUint64 + } + return 0 +} + +func (m *Simple) GetOSint32() int32 { + if m != nil && m.OSint32 != nil { + return *m.OSint32 + } + return 0 +} + +func (m *Simple) GetOSint64() int64 { + if m != nil && m.OSint64 != nil { + return *m.OSint64 + } + return 0 +} + +func (m *Simple) GetOFloat() float32 { + if m != nil && m.OFloat != nil { + return *m.OFloat + } + return 0 +} + +func (m *Simple) GetODouble() float64 { + if m != nil && m.ODouble != nil { + return *m.ODouble + } + return 0 +} + +func (m *Simple) GetOString() string { + if m != nil && m.OString != nil { + return *m.OString + } + return "" +} + +func (m *Simple) GetOBytes() []byte { + if m != nil { + return m.OBytes + } + return nil +} + +// Test message for holding special non-finites primitives. +type NonFinites struct { + FNan *float32 `protobuf:"fixed32,1,opt,name=f_nan,json=fNan" json:"f_nan,omitempty"` + FPinf *float32 `protobuf:"fixed32,2,opt,name=f_pinf,json=fPinf" json:"f_pinf,omitempty"` + FNinf *float32 `protobuf:"fixed32,3,opt,name=f_ninf,json=fNinf" json:"f_ninf,omitempty"` + DNan *float64 `protobuf:"fixed64,4,opt,name=d_nan,json=dNan" json:"d_nan,omitempty"` + DPinf *float64 `protobuf:"fixed64,5,opt,name=d_pinf,json=dPinf" json:"d_pinf,omitempty"` + DNinf *float64 `protobuf:"fixed64,6,opt,name=d_ninf,json=dNinf" json:"d_ninf,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *NonFinites) Reset() { *m = NonFinites{} } +func (m *NonFinites) String() string { return proto.CompactTextString(m) } +func (*NonFinites) ProtoMessage() {} +func (*NonFinites) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *NonFinites) GetFNan() float32 { + if m != nil && m.FNan != nil { + return *m.FNan + } + return 0 +} + +func (m *NonFinites) GetFPinf() float32 { + if m != nil && m.FPinf != nil { + return *m.FPinf + } + return 0 +} + +func (m *NonFinites) GetFNinf() float32 { + if m != nil && m.FNinf != nil { + return *m.FNinf + } + return 0 +} + +func (m *NonFinites) GetDNan() float64 { + if m != nil && m.DNan != nil { + return *m.DNan + } + return 0 +} + +func (m *NonFinites) GetDPinf() float64 { + if m != nil && m.DPinf != nil { + return *m.DPinf + } + return 0 +} + +func (m *NonFinites) GetDNinf() float64 { + if m != nil && m.DNinf != nil { + return *m.DNinf + } + return 0 +} + +// Test message for holding repeated primitives. +type Repeats struct { + RBool []bool `protobuf:"varint,1,rep,name=r_bool,json=rBool" json:"r_bool,omitempty"` + RInt32 []int32 `protobuf:"varint,2,rep,name=r_int32,json=rInt32" json:"r_int32,omitempty"` + RInt64 []int64 `protobuf:"varint,3,rep,name=r_int64,json=rInt64" json:"r_int64,omitempty"` + RUint32 []uint32 `protobuf:"varint,4,rep,name=r_uint32,json=rUint32" json:"r_uint32,omitempty"` + RUint64 []uint64 `protobuf:"varint,5,rep,name=r_uint64,json=rUint64" json:"r_uint64,omitempty"` + RSint32 []int32 `protobuf:"zigzag32,6,rep,name=r_sint32,json=rSint32" json:"r_sint32,omitempty"` + RSint64 []int64 `protobuf:"zigzag64,7,rep,name=r_sint64,json=rSint64" json:"r_sint64,omitempty"` + RFloat []float32 `protobuf:"fixed32,8,rep,name=r_float,json=rFloat" json:"r_float,omitempty"` + RDouble []float64 `protobuf:"fixed64,9,rep,name=r_double,json=rDouble" json:"r_double,omitempty"` + RString []string `protobuf:"bytes,10,rep,name=r_string,json=rString" json:"r_string,omitempty"` + RBytes [][]byte `protobuf:"bytes,11,rep,name=r_bytes,json=rBytes" json:"r_bytes,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Repeats) Reset() { *m = Repeats{} } +func (m *Repeats) String() string { return proto.CompactTextString(m) } +func (*Repeats) ProtoMessage() {} +func (*Repeats) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func (m *Repeats) GetRBool() []bool { + if m != nil { + return m.RBool + } + return nil +} + +func (m *Repeats) GetRInt32() []int32 { + if m != nil { + return m.RInt32 + } + return nil +} + +func (m *Repeats) GetRInt64() []int64 { + if m != nil { + return m.RInt64 + } + return nil +} + +func (m *Repeats) GetRUint32() []uint32 { + if m != nil { + return m.RUint32 + } + return nil +} + +func (m *Repeats) GetRUint64() []uint64 { + if m != nil { + return m.RUint64 + } + return nil +} + +func (m *Repeats) GetRSint32() []int32 { + if m != nil { + return m.RSint32 + } + return nil +} + +func (m *Repeats) GetRSint64() []int64 { + if m != nil { + return m.RSint64 + } + return nil +} + +func (m *Repeats) GetRFloat() []float32 { + if m != nil { + return m.RFloat + } + return nil +} + +func (m *Repeats) GetRDouble() []float64 { + if m != nil { + return m.RDouble + } + return nil +} + +func (m *Repeats) GetRString() []string { + if m != nil { + return m.RString + } + return nil +} + +func (m *Repeats) GetRBytes() [][]byte { + if m != nil { + return m.RBytes + } + return nil +} + +// Test message for holding enums and nested messages. +type Widget struct { + Color *Widget_Color `protobuf:"varint,1,opt,name=color,enum=jsonpb.Widget_Color" json:"color,omitempty"` + RColor []Widget_Color `protobuf:"varint,2,rep,name=r_color,json=rColor,enum=jsonpb.Widget_Color" json:"r_color,omitempty"` + Simple *Simple `protobuf:"bytes,10,opt,name=simple" json:"simple,omitempty"` + RSimple []*Simple `protobuf:"bytes,11,rep,name=r_simple,json=rSimple" json:"r_simple,omitempty"` + Repeats *Repeats `protobuf:"bytes,20,opt,name=repeats" json:"repeats,omitempty"` + RRepeats []*Repeats `protobuf:"bytes,21,rep,name=r_repeats,json=rRepeats" json:"r_repeats,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Widget) Reset() { *m = Widget{} } +func (m *Widget) String() string { return proto.CompactTextString(m) } +func (*Widget) ProtoMessage() {} +func (*Widget) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{3} } + +func (m *Widget) GetColor() Widget_Color { + if m != nil && m.Color != nil { + return *m.Color + } + return Widget_RED +} + +func (m *Widget) GetRColor() []Widget_Color { + if m != nil { + return m.RColor + } + return nil +} + +func (m *Widget) GetSimple() *Simple { + if m != nil { + return m.Simple + } + return nil +} + +func (m *Widget) GetRSimple() []*Simple { + if m != nil { + return m.RSimple + } + return nil +} + +func (m *Widget) GetRepeats() *Repeats { + if m != nil { + return m.Repeats + } + return nil +} + +func (m *Widget) GetRRepeats() []*Repeats { + if m != nil { + return m.RRepeats + } + return nil +} + +type Maps struct { + MInt64Str map[int64]string `protobuf:"bytes,1,rep,name=m_int64_str,json=mInt64Str" json:"m_int64_str,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + MBoolSimple map[bool]*Simple `protobuf:"bytes,2,rep,name=m_bool_simple,json=mBoolSimple" json:"m_bool_simple,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Maps) Reset() { *m = Maps{} } +func (m *Maps) String() string { return proto.CompactTextString(m) } +func (*Maps) ProtoMessage() {} +func (*Maps) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{4} } + +func (m *Maps) GetMInt64Str() map[int64]string { + if m != nil { + return m.MInt64Str + } + return nil +} + +func (m *Maps) GetMBoolSimple() map[bool]*Simple { + if m != nil { + return m.MBoolSimple + } + return nil +} + +type MsgWithOneof struct { + // Types that are valid to be assigned to Union: + // *MsgWithOneof_Title + // *MsgWithOneof_Salary + // *MsgWithOneof_Country + // *MsgWithOneof_HomeAddress + Union isMsgWithOneof_Union `protobuf_oneof:"union"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MsgWithOneof) Reset() { *m = MsgWithOneof{} } +func (m *MsgWithOneof) String() string { return proto.CompactTextString(m) } +func (*MsgWithOneof) ProtoMessage() {} +func (*MsgWithOneof) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{5} } + +type isMsgWithOneof_Union interface { + isMsgWithOneof_Union() +} + +type MsgWithOneof_Title struct { + Title string `protobuf:"bytes,1,opt,name=title,oneof"` +} +type MsgWithOneof_Salary struct { + Salary int64 `protobuf:"varint,2,opt,name=salary,oneof"` +} +type MsgWithOneof_Country struct { + Country string `protobuf:"bytes,3,opt,name=Country,oneof"` +} +type MsgWithOneof_HomeAddress struct { + HomeAddress string `protobuf:"bytes,4,opt,name=home_address,json=homeAddress,oneof"` +} + +func (*MsgWithOneof_Title) isMsgWithOneof_Union() {} +func (*MsgWithOneof_Salary) isMsgWithOneof_Union() {} +func (*MsgWithOneof_Country) isMsgWithOneof_Union() {} +func (*MsgWithOneof_HomeAddress) isMsgWithOneof_Union() {} + +func (m *MsgWithOneof) GetUnion() isMsgWithOneof_Union { + if m != nil { + return m.Union + } + return nil +} + +func (m *MsgWithOneof) GetTitle() string { + if x, ok := m.GetUnion().(*MsgWithOneof_Title); ok { + return x.Title + } + return "" +} + +func (m *MsgWithOneof) GetSalary() int64 { + if x, ok := m.GetUnion().(*MsgWithOneof_Salary); ok { + return x.Salary + } + return 0 +} + +func (m *MsgWithOneof) GetCountry() string { + if x, ok := m.GetUnion().(*MsgWithOneof_Country); ok { + return x.Country + } + return "" +} + +func (m *MsgWithOneof) GetHomeAddress() string { + if x, ok := m.GetUnion().(*MsgWithOneof_HomeAddress); ok { + return x.HomeAddress + } + return "" +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*MsgWithOneof) 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 _MsgWithOneof_OneofMarshaler, _MsgWithOneof_OneofUnmarshaler, _MsgWithOneof_OneofSizer, []interface{}{ + (*MsgWithOneof_Title)(nil), + (*MsgWithOneof_Salary)(nil), + (*MsgWithOneof_Country)(nil), + (*MsgWithOneof_HomeAddress)(nil), + } +} + +func _MsgWithOneof_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*MsgWithOneof) + // union + switch x := m.Union.(type) { + case *MsgWithOneof_Title: + b.EncodeVarint(1<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Title) + case *MsgWithOneof_Salary: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Salary)) + case *MsgWithOneof_Country: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Country) + case *MsgWithOneof_HomeAddress: + b.EncodeVarint(4<<3 | proto.WireBytes) + b.EncodeStringBytes(x.HomeAddress) + case nil: + default: + return fmt.Errorf("MsgWithOneof.Union has unexpected type %T", x) + } + return nil +} + +func _MsgWithOneof_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*MsgWithOneof) + switch tag { + case 1: // union.title + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Union = &MsgWithOneof_Title{x} + return true, err + case 2: // union.salary + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &MsgWithOneof_Salary{int64(x)} + return true, err + case 3: // union.Country + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Union = &MsgWithOneof_Country{x} + return true, err + case 4: // union.home_address + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Union = &MsgWithOneof_HomeAddress{x} + return true, err + default: + return false, nil + } +} + +func _MsgWithOneof_OneofSizer(msg proto.Message) (n int) { + m := msg.(*MsgWithOneof) + // union + switch x := m.Union.(type) { + case *MsgWithOneof_Title: + n += proto.SizeVarint(1<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Title))) + n += len(x.Title) + case *MsgWithOneof_Salary: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Salary)) + case *MsgWithOneof_Country: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Country))) + n += len(x.Country) + case *MsgWithOneof_HomeAddress: + n += proto.SizeVarint(4<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.HomeAddress))) + n += len(x.HomeAddress) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type Real struct { + Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Real) Reset() { *m = Real{} } +func (m *Real) String() string { return proto.CompactTextString(m) } +func (*Real) ProtoMessage() {} +func (*Real) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{6} } + +var extRange_Real = []proto.ExtensionRange{ + {100, 536870911}, +} + +func (*Real) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_Real +} + +func (m *Real) GetValue() float64 { + if m != nil && m.Value != nil { + return *m.Value + } + return 0 +} + +type Complex struct { + Imaginary *float64 `protobuf:"fixed64,1,opt,name=imaginary" json:"imaginary,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Complex) Reset() { *m = Complex{} } +func (m *Complex) String() string { return proto.CompactTextString(m) } +func (*Complex) ProtoMessage() {} +func (*Complex) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} } + +var extRange_Complex = []proto.ExtensionRange{ + {100, 536870911}, +} + +func (*Complex) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_Complex +} + +func (m *Complex) GetImaginary() float64 { + if m != nil && m.Imaginary != nil { + return *m.Imaginary + } + return 0 +} + +var E_Complex_RealExtension = &proto.ExtensionDesc{ + ExtendedType: (*Real)(nil), + ExtensionType: (*Complex)(nil), + Field: 123, + Name: "jsonpb.Complex.real_extension", + Tag: "bytes,123,opt,name=real_extension,json=realExtension", + Filename: "test_objects.proto", +} + +type KnownTypes struct { + An *google_protobuf.Any `protobuf:"bytes,14,opt,name=an" json:"an,omitempty"` + Dur *google_protobuf1.Duration `protobuf:"bytes,1,opt,name=dur" json:"dur,omitempty"` + St *google_protobuf2.Struct `protobuf:"bytes,12,opt,name=st" json:"st,omitempty"` + Ts *google_protobuf3.Timestamp `protobuf:"bytes,2,opt,name=ts" json:"ts,omitempty"` + Lv *google_protobuf2.ListValue `protobuf:"bytes,15,opt,name=lv" json:"lv,omitempty"` + Val *google_protobuf2.Value `protobuf:"bytes,16,opt,name=val" json:"val,omitempty"` + Dbl *google_protobuf4.DoubleValue `protobuf:"bytes,3,opt,name=dbl" json:"dbl,omitempty"` + Flt *google_protobuf4.FloatValue `protobuf:"bytes,4,opt,name=flt" json:"flt,omitempty"` + I64 *google_protobuf4.Int64Value `protobuf:"bytes,5,opt,name=i64" json:"i64,omitempty"` + U64 *google_protobuf4.UInt64Value `protobuf:"bytes,6,opt,name=u64" json:"u64,omitempty"` + I32 *google_protobuf4.Int32Value `protobuf:"bytes,7,opt,name=i32" json:"i32,omitempty"` + U32 *google_protobuf4.UInt32Value `protobuf:"bytes,8,opt,name=u32" json:"u32,omitempty"` + Bool *google_protobuf4.BoolValue `protobuf:"bytes,9,opt,name=bool" json:"bool,omitempty"` + Str *google_protobuf4.StringValue `protobuf:"bytes,10,opt,name=str" json:"str,omitempty"` + Bytes *google_protobuf4.BytesValue `protobuf:"bytes,11,opt,name=bytes" json:"bytes,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *KnownTypes) Reset() { *m = KnownTypes{} } +func (m *KnownTypes) String() string { return proto.CompactTextString(m) } +func (*KnownTypes) ProtoMessage() {} +func (*KnownTypes) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} } + +func (m *KnownTypes) GetAn() *google_protobuf.Any { + if m != nil { + return m.An + } + return nil +} + +func (m *KnownTypes) GetDur() *google_protobuf1.Duration { + if m != nil { + return m.Dur + } + return nil +} + +func (m *KnownTypes) GetSt() *google_protobuf2.Struct { + if m != nil { + return m.St + } + return nil +} + +func (m *KnownTypes) GetTs() *google_protobuf3.Timestamp { + if m != nil { + return m.Ts + } + return nil +} + +func (m *KnownTypes) GetLv() *google_protobuf2.ListValue { + if m != nil { + return m.Lv + } + return nil +} + +func (m *KnownTypes) GetVal() *google_protobuf2.Value { + if m != nil { + return m.Val + } + return nil +} + +func (m *KnownTypes) GetDbl() *google_protobuf4.DoubleValue { + if m != nil { + return m.Dbl + } + return nil +} + +func (m *KnownTypes) GetFlt() *google_protobuf4.FloatValue { + if m != nil { + return m.Flt + } + return nil +} + +func (m *KnownTypes) GetI64() *google_protobuf4.Int64Value { + if m != nil { + return m.I64 + } + return nil +} + +func (m *KnownTypes) GetU64() *google_protobuf4.UInt64Value { + if m != nil { + return m.U64 + } + return nil +} + +func (m *KnownTypes) GetI32() *google_protobuf4.Int32Value { + if m != nil { + return m.I32 + } + return nil +} + +func (m *KnownTypes) GetU32() *google_protobuf4.UInt32Value { + if m != nil { + return m.U32 + } + return nil +} + +func (m *KnownTypes) GetBool() *google_protobuf4.BoolValue { + if m != nil { + return m.Bool + } + return nil +} + +func (m *KnownTypes) GetStr() *google_protobuf4.StringValue { + if m != nil { + return m.Str + } + return nil +} + +func (m *KnownTypes) GetBytes() *google_protobuf4.BytesValue { + if m != nil { + return m.Bytes + } + return nil +} + +var E_Name = &proto.ExtensionDesc{ + ExtendedType: (*Real)(nil), + ExtensionType: (*string)(nil), + Field: 124, + Name: "jsonpb.name", + Tag: "bytes,124,opt,name=name", + Filename: "test_objects.proto", +} + +func init() { + proto.RegisterType((*Simple)(nil), "jsonpb.Simple") + proto.RegisterType((*NonFinites)(nil), "jsonpb.NonFinites") + proto.RegisterType((*Repeats)(nil), "jsonpb.Repeats") + proto.RegisterType((*Widget)(nil), "jsonpb.Widget") + proto.RegisterType((*Maps)(nil), "jsonpb.Maps") + proto.RegisterType((*MsgWithOneof)(nil), "jsonpb.MsgWithOneof") + proto.RegisterType((*Real)(nil), "jsonpb.Real") + proto.RegisterType((*Complex)(nil), "jsonpb.Complex") + proto.RegisterType((*KnownTypes)(nil), "jsonpb.KnownTypes") + proto.RegisterEnum("jsonpb.Widget_Color", Widget_Color_name, Widget_Color_value) + proto.RegisterExtension(E_Complex_RealExtension) + proto.RegisterExtension(E_Name) +} + +func init() { proto.RegisterFile("test_objects.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 1160 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x95, 0x41, 0x73, 0xdb, 0x44, + 0x14, 0xc7, 0x23, 0xc9, 0x92, 0xed, 0x75, 0x92, 0x9a, 0x6d, 0xda, 0x2a, 0x26, 0x80, 0xc6, 0x94, + 0x22, 0x0a, 0x75, 0x07, 0xc7, 0xe3, 0x61, 0x0a, 0x97, 0xa4, 0x71, 0x29, 0x43, 0x13, 0x98, 0x4d, + 0x43, 0x8f, 0x1e, 0x39, 0x5a, 0xbb, 0x2a, 0xf2, 0xae, 0x67, 0x77, 0x95, 0xd4, 0x03, 0x87, 0x9c, + 0x39, 0x32, 0x7c, 0x05, 0xf8, 0x08, 0x1c, 0xf8, 0x74, 0xcc, 0xdb, 0x95, 0xac, 0xc4, 0x8e, 0x4f, + 0xf1, 0x7b, 0xef, 0xff, 0xfe, 0x59, 0xed, 0x6f, 0x77, 0x1f, 0xc2, 0x8a, 0x4a, 0x35, 0xe4, 0xa3, + 0x77, 0xf4, 0x5c, 0xc9, 0xce, 0x4c, 0x70, 0xc5, 0xb1, 0xf7, 0x4e, 0x72, 0x36, 0x1b, 0xb5, 0x76, + 0x27, 0x9c, 0x4f, 0x52, 0xfa, 0x54, 0x67, 0x47, 0xd9, 0xf8, 0x69, 0xc4, 0xe6, 0x46, 0xd2, 0xfa, + 0x78, 0xb9, 0x14, 0x67, 0x22, 0x52, 0x09, 0x67, 0x79, 0x7d, 0x6f, 0xb9, 0x2e, 0x95, 0xc8, 0xce, + 0x55, 0x5e, 0xfd, 0x64, 0xb9, 0xaa, 0x92, 0x29, 0x95, 0x2a, 0x9a, 0xce, 0xd6, 0xd9, 0x5f, 0x8a, + 0x68, 0x36, 0xa3, 0x22, 0x5f, 0x61, 0xfb, 0x6f, 0x1b, 0x79, 0xa7, 0xc9, 0x74, 0x96, 0x52, 0x7c, + 0x0f, 0x79, 0x7c, 0x38, 0xe2, 0x3c, 0xf5, 0xad, 0xc0, 0x0a, 0x6b, 0xc4, 0xe5, 0x87, 0x9c, 0xa7, + 0xf8, 0x01, 0xaa, 0xf2, 0x61, 0xc2, 0xd4, 0x7e, 0xd7, 0xb7, 0x03, 0x2b, 0x74, 0x89, 0xc7, 0x7f, + 0x80, 0x68, 0x51, 0xe8, 0xf7, 0x7c, 0x27, 0xb0, 0x42, 0xc7, 0x14, 0xfa, 0x3d, 0xbc, 0x8b, 0x6a, + 0x7c, 0x98, 0x99, 0x96, 0x4a, 0x60, 0x85, 0x5b, 0xa4, 0xca, 0xcf, 0x74, 0x58, 0x96, 0xfa, 0x3d, + 0xdf, 0x0d, 0xac, 0xb0, 0x92, 0x97, 0x8a, 0x2e, 0x69, 0xba, 0xbc, 0xc0, 0x0a, 0x3f, 0x20, 0x55, + 0x7e, 0x7a, 0xad, 0x4b, 0x9a, 0xae, 0x6a, 0x60, 0x85, 0x38, 0x2f, 0xf5, 0x7b, 0x66, 0x11, 0xe3, + 0x94, 0x47, 0xca, 0xaf, 0x05, 0x56, 0x68, 0x13, 0x8f, 0xbf, 0x80, 0xc8, 0xf4, 0xc4, 0x3c, 0x1b, + 0xa5, 0xd4, 0xaf, 0x07, 0x56, 0x68, 0x91, 0x2a, 0x3f, 0xd2, 0x61, 0x6e, 0xa7, 0x44, 0xc2, 0x26, + 0x3e, 0x0a, 0xac, 0xb0, 0x0e, 0x76, 0x3a, 0x34, 0x76, 0xa3, 0xb9, 0xa2, 0xd2, 0x6f, 0x04, 0x56, + 0xb8, 0x49, 0x3c, 0x7e, 0x08, 0x51, 0xfb, 0x4f, 0x0b, 0xa1, 0x13, 0xce, 0x5e, 0x24, 0x2c, 0x51, + 0x54, 0xe2, 0xbb, 0xc8, 0x1d, 0x0f, 0x59, 0xc4, 0xf4, 0x56, 0xd9, 0xa4, 0x32, 0x3e, 0x89, 0x18, + 0x6c, 0xe0, 0x78, 0x38, 0x4b, 0xd8, 0x58, 0x6f, 0x94, 0x4d, 0xdc, 0xf1, 0xcf, 0x09, 0x1b, 0x9b, + 0x34, 0x83, 0xb4, 0x93, 0xa7, 0x4f, 0x20, 0x7d, 0x17, 0xb9, 0xb1, 0xb6, 0xa8, 0xe8, 0xd5, 0x55, + 0xe2, 0xdc, 0x22, 0x36, 0x16, 0xae, 0xce, 0xba, 0x71, 0x61, 0x11, 0x1b, 0x0b, 0x2f, 0x4f, 0x83, + 0x45, 0xfb, 0x1f, 0x1b, 0x55, 0x09, 0x9d, 0xd1, 0x48, 0x49, 0x90, 0x88, 0x82, 0x9e, 0x03, 0xf4, + 0x44, 0x41, 0x4f, 0x2c, 0xe8, 0x39, 0x40, 0x4f, 0x2c, 0xe8, 0x89, 0x05, 0x3d, 0x07, 0xe8, 0x89, + 0x05, 0x3d, 0x51, 0xd2, 0x73, 0x80, 0x9e, 0x28, 0xe9, 0x89, 0x92, 0x9e, 0x03, 0xf4, 0x44, 0x49, + 0x4f, 0x94, 0xf4, 0x1c, 0xa0, 0x27, 0x4e, 0xaf, 0x75, 0x2d, 0xe8, 0x39, 0x40, 0x4f, 0x94, 0xf4, + 0xc4, 0x82, 0x9e, 0x03, 0xf4, 0xc4, 0x82, 0x9e, 0x28, 0xe9, 0x39, 0x40, 0x4f, 0x94, 0xf4, 0x44, + 0x49, 0xcf, 0x01, 0x7a, 0xa2, 0xa4, 0x27, 0x16, 0xf4, 0x1c, 0xa0, 0x27, 0x0c, 0xbd, 0x7f, 0x6d, + 0xe4, 0xbd, 0x49, 0xe2, 0x09, 0x55, 0xf8, 0x31, 0x72, 0xcf, 0x79, 0xca, 0x85, 0x26, 0xb7, 0xdd, + 0xdd, 0xe9, 0x98, 0x2b, 0xda, 0x31, 0xe5, 0xce, 0x73, 0xa8, 0x11, 0x23, 0xc1, 0x4f, 0xc0, 0xcf, + 0xa8, 0x61, 0xf3, 0xd6, 0xa9, 0x3d, 0xa1, 0xff, 0xe2, 0x47, 0xc8, 0x93, 0xfa, 0x2a, 0xe9, 0x53, + 0xd5, 0xe8, 0x6e, 0x17, 0x6a, 0x73, 0xc1, 0x48, 0x5e, 0xc5, 0x5f, 0x98, 0x0d, 0xd1, 0x4a, 0x58, + 0xe7, 0xaa, 0x12, 0x36, 0x28, 0x97, 0x56, 0x85, 0x01, 0xec, 0xef, 0x68, 0xcf, 0x3b, 0x85, 0x32, + 0xe7, 0x4e, 0x8a, 0x3a, 0xfe, 0x0a, 0xd5, 0xc5, 0xb0, 0x10, 0xdf, 0xd3, 0xb6, 0x2b, 0xe2, 0x9a, + 0xc8, 0x7f, 0xb5, 0x3f, 0x43, 0xae, 0x59, 0x74, 0x15, 0x39, 0x64, 0x70, 0xd4, 0xdc, 0xc0, 0x75, + 0xe4, 0x7e, 0x4f, 0x06, 0x83, 0x93, 0xa6, 0x85, 0x6b, 0xa8, 0x72, 0xf8, 0xea, 0x6c, 0xd0, 0xb4, + 0xdb, 0x7f, 0xd9, 0xa8, 0x72, 0x1c, 0xcd, 0x24, 0xfe, 0x16, 0x35, 0xa6, 0xe6, 0xb8, 0xc0, 0xde, + 0xeb, 0x33, 0xd6, 0xe8, 0x7e, 0x58, 0xf8, 0x83, 0xa4, 0x73, 0xac, 0xcf, 0xcf, 0xa9, 0x12, 0x03, + 0xa6, 0xc4, 0x9c, 0xd4, 0xa7, 0x45, 0x8c, 0x0f, 0xd0, 0xd6, 0x54, 0x9f, 0xcd, 0xe2, 0xab, 0x6d, + 0xdd, 0xfe, 0xd1, 0xcd, 0x76, 0x38, 0xaf, 0xe6, 0xb3, 0x8d, 0x41, 0x63, 0x5a, 0x66, 0x5a, 0xdf, + 0xa1, 0xed, 0x9b, 0xfe, 0xb8, 0x89, 0x9c, 0x5f, 0xe9, 0x5c, 0x63, 0x74, 0x08, 0xfc, 0xc4, 0x3b, + 0xc8, 0xbd, 0x88, 0xd2, 0x8c, 0xea, 0xeb, 0x57, 0x27, 0x26, 0x78, 0x66, 0x7f, 0x63, 0xb5, 0x4e, + 0x50, 0x73, 0xd9, 0xfe, 0x7a, 0x7f, 0xcd, 0xf4, 0x3f, 0xbc, 0xde, 0xbf, 0x0a, 0xa5, 0xf4, 0x6b, + 0xff, 0x61, 0xa1, 0xcd, 0x63, 0x39, 0x79, 0x93, 0xa8, 0xb7, 0x3f, 0x31, 0xca, 0xc7, 0xf8, 0x3e, + 0x72, 0x55, 0xa2, 0x52, 0xaa, 0xed, 0xea, 0x2f, 0x37, 0x88, 0x09, 0xb1, 0x8f, 0x3c, 0x19, 0xa5, + 0x91, 0x98, 0x6b, 0x4f, 0xe7, 0xe5, 0x06, 0xc9, 0x63, 0xdc, 0x42, 0xd5, 0xe7, 0x3c, 0x83, 0x95, + 0xe8, 0x67, 0x01, 0x7a, 0x8a, 0x04, 0xfe, 0x14, 0x6d, 0xbe, 0xe5, 0x53, 0x3a, 0x8c, 0xe2, 0x58, + 0x50, 0x29, 0xf5, 0x0b, 0x01, 0x82, 0x06, 0x64, 0x0f, 0x4c, 0xf2, 0xb0, 0x8a, 0xdc, 0x8c, 0x25, + 0x9c, 0xb5, 0x1f, 0xa1, 0x0a, 0xa1, 0x51, 0x5a, 0x7e, 0xbe, 0x65, 0xde, 0x08, 0x1d, 0x3c, 0xae, + 0xd5, 0xe2, 0xe6, 0xd5, 0xd5, 0xd5, 0x95, 0xdd, 0xbe, 0x84, 0xff, 0x08, 0x5f, 0xf2, 0x1e, 0xef, + 0xa1, 0x7a, 0x32, 0x8d, 0x26, 0x09, 0x83, 0x95, 0x19, 0x79, 0x99, 0x28, 0x5b, 0xba, 0x47, 0x68, + 0x5b, 0xd0, 0x28, 0x1d, 0xd2, 0xf7, 0x8a, 0x32, 0x99, 0x70, 0x86, 0x37, 0xcb, 0x23, 0x15, 0xa5, + 0xfe, 0x6f, 0x37, 0xcf, 0x64, 0x6e, 0x4f, 0xb6, 0xa0, 0x69, 0x50, 0xf4, 0xb4, 0xff, 0x73, 0x11, + 0xfa, 0x91, 0xf1, 0x4b, 0xf6, 0x7a, 0x3e, 0xa3, 0x12, 0x3f, 0x44, 0x76, 0xc4, 0xfc, 0x6d, 0xdd, + 0xba, 0xd3, 0x31, 0xf3, 0xa9, 0x53, 0xcc, 0xa7, 0xce, 0x01, 0x9b, 0x13, 0x3b, 0x62, 0xf8, 0x4b, + 0xe4, 0xc4, 0x99, 0xb9, 0xa5, 0x8d, 0xee, 0xee, 0x8a, 0xec, 0x28, 0x9f, 0x92, 0x04, 0x54, 0xf8, + 0x73, 0x64, 0x4b, 0xe5, 0x6f, 0x6a, 0xed, 0x83, 0x15, 0xed, 0xa9, 0x9e, 0x98, 0xc4, 0x96, 0x70, + 0xfb, 0x6d, 0x25, 0x73, 0xbe, 0xad, 0x15, 0xe1, 0xeb, 0x62, 0x78, 0x12, 0x5b, 0x49, 0xd0, 0xa6, + 0x17, 0xfe, 0x9d, 0x35, 0xda, 0x57, 0x89, 0x54, 0xbf, 0xc0, 0x0e, 0x13, 0x3b, 0xbd, 0xc0, 0x21, + 0x72, 0x2e, 0xa2, 0xd4, 0x6f, 0x6a, 0xf1, 0xfd, 0x15, 0xb1, 0x11, 0x82, 0x04, 0x77, 0x90, 0x13, + 0x8f, 0x52, 0xcd, 0xbc, 0xd1, 0xdd, 0x5b, 0xfd, 0x2e, 0xfd, 0xc8, 0xe5, 0xfa, 0x78, 0x94, 0xe2, + 0x27, 0xc8, 0x19, 0xa7, 0x4a, 0x1f, 0x01, 0xb8, 0x70, 0xcb, 0x7a, 0xfd, 0x5c, 0xe6, 0xf2, 0x71, + 0xaa, 0x40, 0x9e, 0xe4, 0xb3, 0xf5, 0x36, 0xb9, 0xbe, 0x42, 0xb9, 0x3c, 0xe9, 0xf7, 0x60, 0x35, + 0x59, 0xbf, 0xa7, 0xa7, 0xca, 0x6d, 0xab, 0x39, 0xbb, 0xae, 0xcf, 0xfa, 0x3d, 0x6d, 0xbf, 0xdf, + 0xd5, 0x43, 0x78, 0x8d, 0xfd, 0x7e, 0xb7, 0xb0, 0xdf, 0xef, 0x6a, 0xfb, 0xfd, 0xae, 0x9e, 0xcc, + 0xeb, 0xec, 0x17, 0xfa, 0x4c, 0xeb, 0x2b, 0x7a, 0x84, 0xd5, 0xd7, 0x6c, 0x3a, 0xdc, 0x61, 0x23, + 0xd7, 0x3a, 0xf0, 0x87, 0xd7, 0x08, 0xad, 0xf1, 0x37, 0x63, 0x21, 0xf7, 0x97, 0x4a, 0xe0, 0xaf, + 0x91, 0x5b, 0x0e, 0xf7, 0xdb, 0x3e, 0x40, 0x8f, 0x0b, 0xd3, 0x60, 0x94, 0xcf, 0x02, 0x54, 0x61, + 0xd1, 0x94, 0x2e, 0x1d, 0xfc, 0xdf, 0xf5, 0x0b, 0xa3, 0x2b, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, + 0xd5, 0x39, 0x32, 0x09, 0xf9, 0x09, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto new file mode 100644 index 0000000..0d2fc1f --- /dev/null +++ b/vendor/github.com/golang/protobuf/jsonpb/jsonpb_test_proto/test_objects.proto @@ -0,0 +1,147 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2015 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/struct.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/wrappers.proto"; + +package jsonpb; + +// Test message for holding primitive types. +message Simple { + optional bool o_bool = 1; + optional int32 o_int32 = 2; + optional int64 o_int64 = 3; + optional uint32 o_uint32 = 4; + optional uint64 o_uint64 = 5; + optional sint32 o_sint32 = 6; + optional sint64 o_sint64 = 7; + optional float o_float = 8; + optional double o_double = 9; + optional string o_string = 10; + optional bytes o_bytes = 11; +} + +// Test message for holding special non-finites primitives. +message NonFinites { + optional float f_nan = 1; + optional float f_pinf = 2; + optional float f_ninf = 3; + optional double d_nan = 4; + optional double d_pinf = 5; + optional double d_ninf = 6; +} + +// Test message for holding repeated primitives. +message Repeats { + repeated bool r_bool = 1; + repeated int32 r_int32 = 2; + repeated int64 r_int64 = 3; + repeated uint32 r_uint32 = 4; + repeated uint64 r_uint64 = 5; + repeated sint32 r_sint32 = 6; + repeated sint64 r_sint64 = 7; + repeated float r_float = 8; + repeated double r_double = 9; + repeated string r_string = 10; + repeated bytes r_bytes = 11; +} + +// Test message for holding enums and nested messages. +message Widget { + enum Color { + RED = 0; + GREEN = 1; + BLUE = 2; + }; + optional Color color = 1; + repeated Color r_color = 2; + + optional Simple simple = 10; + repeated Simple r_simple = 11; + + optional Repeats repeats = 20; + repeated Repeats r_repeats = 21; +} + +message Maps { + map m_int64_str = 1; + map m_bool_simple = 2; +} + +message MsgWithOneof { + oneof union { + string title = 1; + int64 salary = 2; + string Country = 3; + string home_address = 4; + } +} + +message Real { + optional double value = 1; + extensions 100 to max; +} + +extend Real { + optional string name = 124; +} + +message Complex { + extend Real { + optional Complex real_extension = 123; + } + optional double imaginary = 1; + extensions 100 to max; +} + +message KnownTypes { + optional google.protobuf.Any an = 14; + optional google.protobuf.Duration dur = 1; + optional google.protobuf.Struct st = 12; + optional google.protobuf.Timestamp ts = 2; + optional google.protobuf.ListValue lv = 15; + optional google.protobuf.Value val = 16; + + optional google.protobuf.DoubleValue dbl = 3; + optional google.protobuf.FloatValue flt = 4; + optional google.protobuf.Int64Value i64 = 5; + optional google.protobuf.UInt64Value u64 = 6; + optional google.protobuf.Int32Value i32 = 7; + optional google.protobuf.UInt32Value u32 = 8; + optional google.protobuf.BoolValue bool = 9; + optional google.protobuf.StringValue str = 10; + optional google.protobuf.BytesValue bytes = 11; +} diff --git a/vendor/github.com/golang/protobuf/proto/Makefile b/vendor/github.com/golang/protobuf/proto/Makefile index f1f0656..e2e0651 100644 --- a/vendor/github.com/golang/protobuf/proto/Makefile +++ b/vendor/github.com/golang/protobuf/proto/Makefile @@ -39,5 +39,5 @@ test: install generate-test-pbs generate-test-pbs: make install make -C testdata - protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata:. proto3_proto/proto3.proto + protoc --go_out=Mtestdata/test.proto=github.com/golang/protobuf/proto/testdata,Mgoogle/protobuf/any.proto=github.com/golang/protobuf/ptypes/any:. proto3_proto/proto3.proto make diff --git a/vendor/github.com/golang/protobuf/proto/all_test.go b/vendor/github.com/golang/protobuf/proto/all_test.go index 5a9b6a4..41451a4 100644 --- a/vendor/github.com/golang/protobuf/proto/all_test.go +++ b/vendor/github.com/golang/protobuf/proto/all_test.go @@ -401,17 +401,18 @@ type fakeMarshaler struct { err error } -func (f fakeMarshaler) Marshal() ([]byte, error) { - return f.b, f.err +func (f *fakeMarshaler) Marshal() ([]byte, error) { return f.b, f.err } +func (f *fakeMarshaler) String() string { return fmt.Sprintf("Bytes: %v Error: %v", f.b, f.err) } +func (f *fakeMarshaler) ProtoMessage() {} +func (f *fakeMarshaler) Reset() {} + +type msgWithFakeMarshaler struct { + M *fakeMarshaler `protobuf:"bytes,1,opt,name=fake"` } -func (f fakeMarshaler) String() string { - return fmt.Sprintf("Bytes: %v Error: %v", f.b, f.err) -} - -func (f fakeMarshaler) ProtoMessage() {} - -func (f fakeMarshaler) Reset() {} +func (m *msgWithFakeMarshaler) String() string { return CompactTextString(m) } +func (m *msgWithFakeMarshaler) ProtoMessage() {} +func (m *msgWithFakeMarshaler) Reset() {} // Simple tests for proto messages that implement the Marshaler interface. func TestMarshalerEncoding(t *testing.T) { @@ -419,36 +420,65 @@ func TestMarshalerEncoding(t *testing.T) { name string m Message want []byte - wantErr error + errType reflect.Type }{ { name: "Marshaler that fails", - m: fakeMarshaler{ + m: &fakeMarshaler{ err: errors.New("some marshal err"), b: []byte{5, 6, 7}, }, - // Since there's an error, nothing should be written to buffer. - want: nil, - wantErr: errors.New("some marshal err"), + // Since the Marshal method returned bytes, they should be written to the + // buffer. (For efficiency, we assume that Marshal implementations are + // always correct w.r.t. RequiredNotSetError and output.) + want: []byte{5, 6, 7}, + errType: reflect.TypeOf(errors.New("some marshal err")), + }, + { + name: "Marshaler that fails with RequiredNotSetError", + m: &msgWithFakeMarshaler{ + M: &fakeMarshaler{ + err: &RequiredNotSetError{}, + b: []byte{5, 6, 7}, + }, + }, + // Since there's an error that can be continued after, + // the buffer should be written. + want: []byte{ + 10, 3, // for &msgWithFakeMarshaler + 5, 6, 7, // for &fakeMarshaler + }, + errType: reflect.TypeOf(&RequiredNotSetError{}), }, { name: "Marshaler that succeeds", - m: fakeMarshaler{ + m: &fakeMarshaler{ b: []byte{0, 1, 2, 3, 4, 127, 255}, }, - want: []byte{0, 1, 2, 3, 4, 127, 255}, - wantErr: nil, + want: []byte{0, 1, 2, 3, 4, 127, 255}, }, } for _, test := range tests { b := NewBuffer(nil) err := b.Marshal(test.m) - if !reflect.DeepEqual(test.wantErr, err) { - t.Errorf("%s: got err %v wanted %v", test.name, err, test.wantErr) + if reflect.TypeOf(err) != test.errType { + t.Errorf("%s: got err %T(%v) wanted %T", test.name, err, err, test.errType) } if !reflect.DeepEqual(test.want, b.Bytes()) { t.Errorf("%s: got bytes %v wanted %v", test.name, b.Bytes(), test.want) } + if size := Size(test.m); size != len(b.Bytes()) { + t.Errorf("%s: Size(_) = %v, but marshaled to %v bytes", test.name, size, len(b.Bytes())) + } + + m, mErr := Marshal(test.m) + if !bytes.Equal(b.Bytes(), m) { + t.Errorf("%s: Marshal returned %v, but (*Buffer).Marshal wrote %v", test.name, m, b.Bytes()) + } + if !reflect.DeepEqual(err, mErr) { + t.Errorf("%s: Marshal err = %q, but (*Buffer).Marshal returned %q", + test.name, fmt.Sprint(mErr), fmt.Sprint(err)) + } } } @@ -1281,7 +1311,7 @@ func TestEnum(t *testing.T) { // We don't care what the value actually is, just as long as it doesn't crash. func TestPrintingNilEnumFields(t *testing.T) { pb := new(GoEnum) - fmt.Sprintf("%+v", pb) + _ = fmt.Sprintf("%+v", pb) } // Verify that absent required fields cause Marshal/Unmarshal to return errors. @@ -1290,7 +1320,7 @@ func TestRequiredFieldEnforcement(t *testing.T) { _, err := Marshal(pb) if err == nil { t.Error("marshal: expected error, got nil") - } else if strings.Index(err.Error(), "Label") < 0 { + } else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "Label") { t.Errorf("marshal: bad error type: %v", err) } @@ -1301,16 +1331,42 @@ func TestRequiredFieldEnforcement(t *testing.T) { err = Unmarshal(buf, pb) if err == nil { t.Error("unmarshal: expected error, got nil") - } else if strings.Index(err.Error(), "{Unknown}") < 0 { + } else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "{Unknown}") { + t.Errorf("unmarshal: bad error type: %v", err) + } +} + +// Verify that absent required fields in groups cause Marshal/Unmarshal to return errors. +func TestRequiredFieldEnforcementGroups(t *testing.T) { + pb := &GoTestRequiredGroupField{Group: &GoTestRequiredGroupField_Group{}} + if _, err := Marshal(pb); err == nil { + t.Error("marshal: expected error, got nil") + } else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "Group.Field") { + t.Errorf("marshal: bad error type: %v", err) + } + + buf := []byte{11, 12} + if err := Unmarshal(buf, pb); err == nil { + t.Error("unmarshal: expected error, got nil") + } else if _, ok := err.(*RequiredNotSetError); !ok || !strings.Contains(err.Error(), "Group.{Unknown}") { t.Errorf("unmarshal: bad error type: %v", err) } } func TestTypedNilMarshal(t *testing.T) { // A typed nil should return ErrNil and not crash. - _, err := Marshal((*GoEnum)(nil)) - if err != ErrNil { - t.Errorf("Marshal: got err %v, want ErrNil", err) + { + var m *GoEnum + if _, err := Marshal(m); err != ErrNil { + t.Errorf("Marshal(%#v): got %v, want ErrNil", m, err) + } + } + + { + m := &Communique{Union: &Communique_Msg{nil}} + if _, err := Marshal(m); err == nil || err == ErrNil { + t.Errorf("Marshal(%#v): got %v, want errOneofHasNil", m, err) + } } } @@ -1926,14 +1982,153 @@ func TestMapFieldRoundTrips(t *testing.T) { } func TestMapFieldWithNil(t *testing.T) { - m := &MessageWithMap{ + m1 := &MessageWithMap{ MsgMapping: map[int64]*FloatingPoint{ 1: nil, }, } + b, err := Marshal(m1) + if err != nil { + t.Fatalf("Marshal: %v", err) + } + m2 := new(MessageWithMap) + if err := Unmarshal(b, m2); err != nil { + t.Fatalf("Unmarshal: %v, got these bytes: %v", err, b) + } + if v, ok := m2.MsgMapping[1]; !ok { + t.Error("msg_mapping[1] not present") + } else if v != nil { + t.Errorf("msg_mapping[1] not nil: %v", v) + } +} + +func TestMapFieldWithNilBytes(t *testing.T) { + m1 := &MessageWithMap{ + ByteMapping: map[bool][]byte{ + false: []byte{}, + true: nil, + }, + } + n := Size(m1) + b, err := Marshal(m1) + if err != nil { + t.Fatalf("Marshal: %v", err) + } + if n != len(b) { + t.Errorf("Size(m1) = %d; want len(Marshal(m1)) = %d", n, len(b)) + } + m2 := new(MessageWithMap) + if err := Unmarshal(b, m2); err != nil { + t.Fatalf("Unmarshal: %v, got these bytes: %v", err, b) + } + if v, ok := m2.ByteMapping[false]; !ok { + t.Error("byte_mapping[false] not present") + } else if len(v) != 0 { + t.Errorf("byte_mapping[false] not empty: %#v", v) + } + if v, ok := m2.ByteMapping[true]; !ok { + t.Error("byte_mapping[true] not present") + } else if len(v) != 0 { + t.Errorf("byte_mapping[true] not empty: %#v", v) + } +} + +func TestDecodeMapFieldMissingKey(t *testing.T) { + b := []byte{ + 0x0A, 0x03, // message, tag 1 (name_mapping), of length 3 bytes + // no key + 0x12, 0x01, 0x6D, // string value of length 1 byte, value "m" + } + got := &MessageWithMap{} + err := Unmarshal(b, got) + if err != nil { + t.Fatalf("failed to marshal map with missing key: %v", err) + } + want := &MessageWithMap{NameMapping: map[int32]string{0: "m"}} + if !Equal(got, want) { + t.Errorf("Unmarshaled map with no key was not as expected. got: %v, want %v", got, want) + } +} + +func TestDecodeMapFieldMissingValue(t *testing.T) { + b := []byte{ + 0x0A, 0x02, // message, tag 1 (name_mapping), of length 2 bytes + 0x08, 0x01, // varint key, value 1 + // no value + } + got := &MessageWithMap{} + err := Unmarshal(b, got) + if err != nil { + t.Fatalf("failed to marshal map with missing value: %v", err) + } + want := &MessageWithMap{NameMapping: map[int32]string{1: ""}} + if !Equal(got, want) { + t.Errorf("Unmarshaled map with no value was not as expected. got: %v, want %v", got, want) + } +} + +func TestOneof(t *testing.T) { + m := &Communique{} b, err := Marshal(m) - if err == nil { - t.Fatalf("Marshal of bad map should have failed, got these bytes: %v", b) + if err != nil { + t.Fatalf("Marshal of empty message with oneof: %v", err) + } + if len(b) != 0 { + t.Errorf("Marshal of empty message yielded too many bytes: %v", b) + } + + m = &Communique{ + Union: &Communique_Name{"Barry"}, + } + + // Round-trip. + b, err = Marshal(m) + if err != nil { + t.Fatalf("Marshal of message with oneof: %v", err) + } + if len(b) != 7 { // name tag/wire (1) + name len (1) + name (5) + t.Errorf("Incorrect marshal of message with oneof: %v", b) + } + m.Reset() + if err := Unmarshal(b, m); err != nil { + t.Fatalf("Unmarshal of message with oneof: %v", err) + } + if x, ok := m.Union.(*Communique_Name); !ok || x.Name != "Barry" { + t.Errorf("After round trip, Union = %+v", m.Union) + } + if name := m.GetName(); name != "Barry" { + t.Errorf("After round trip, GetName = %q, want %q", name, "Barry") + } + + // Let's try with a message in the oneof. + m.Union = &Communique_Msg{&Strings{StringField: String("deep deep string")}} + b, err = Marshal(m) + if err != nil { + t.Fatalf("Marshal of message with oneof set to message: %v", err) + } + if len(b) != 20 { // msg tag/wire (1) + msg len (1) + msg (1 + 1 + 16) + t.Errorf("Incorrect marshal of message with oneof set to message: %v", b) + } + m.Reset() + if err := Unmarshal(b, m); err != nil { + t.Fatalf("Unmarshal of message with oneof set to message: %v", err) + } + ss, ok := m.Union.(*Communique_Msg) + if !ok || ss.Msg.GetStringField() != "deep deep string" { + t.Errorf("After round trip with oneof set to message, Union = %+v", m.Union) + } +} + +func TestInefficientPackedBool(t *testing.T) { + // https://github.com/golang/protobuf/issues/76 + inp := []byte{ + 0x12, 0x02, // 0x12 = 2<<3|2; 2 bytes + // Usually a bool should take a single byte, + // but it is permitted to be any varint. + 0xb9, 0x30, + } + if err := Unmarshal(inp, new(MoreRepeated)); err != nil { + t.Error(err) } } diff --git a/vendor/github.com/golang/protobuf/proto/any_test.go b/vendor/github.com/golang/protobuf/proto/any_test.go new file mode 100644 index 0000000..1a3c22e --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/any_test.go @@ -0,0 +1,300 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package proto_test + +import ( + "strings" + "testing" + + "github.com/golang/protobuf/proto" + + pb "github.com/golang/protobuf/proto/proto3_proto" + testpb "github.com/golang/protobuf/proto/testdata" + anypb "github.com/golang/protobuf/ptypes/any" +) + +var ( + expandedMarshaler = proto.TextMarshaler{ExpandAny: true} + expandedCompactMarshaler = proto.TextMarshaler{Compact: true, ExpandAny: true} +) + +// anyEqual reports whether two messages which may be google.protobuf.Any or may +// contain google.protobuf.Any fields are equal. We can't use proto.Equal for +// comparison, because semantically equivalent messages may be marshaled to +// binary in different tag order. Instead, trust that TextMarshaler with +// ExpandAny option works and compare the text marshaling results. +func anyEqual(got, want proto.Message) bool { + // if messages are proto.Equal, no need to marshal. + if proto.Equal(got, want) { + return true + } + g := expandedMarshaler.Text(got) + w := expandedMarshaler.Text(want) + return g == w +} + +type golden struct { + m proto.Message + t, c string +} + +var goldenMessages = makeGolden() + +func makeGolden() []golden { + nested := &pb.Nested{Bunny: "Monty"} + nb, err := proto.Marshal(nested) + if err != nil { + panic(err) + } + m1 := &pb.Message{ + Name: "David", + ResultCount: 47, + Anything: &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(nested), Value: nb}, + } + m2 := &pb.Message{ + Name: "David", + ResultCount: 47, + Anything: &anypb.Any{TypeUrl: "http://[::1]/type.googleapis.com/" + proto.MessageName(nested), Value: nb}, + } + m3 := &pb.Message{ + Name: "David", + ResultCount: 47, + Anything: &anypb.Any{TypeUrl: `type.googleapis.com/"/` + proto.MessageName(nested), Value: nb}, + } + m4 := &pb.Message{ + Name: "David", + ResultCount: 47, + Anything: &anypb.Any{TypeUrl: "type.googleapis.com/a/path/" + proto.MessageName(nested), Value: nb}, + } + m5 := &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(nested), Value: nb} + + any1 := &testpb.MyMessage{Count: proto.Int32(47), Name: proto.String("David")} + proto.SetExtension(any1, testpb.E_Ext_More, &testpb.Ext{Data: proto.String("foo")}) + proto.SetExtension(any1, testpb.E_Ext_Text, proto.String("bar")) + any1b, err := proto.Marshal(any1) + if err != nil { + panic(err) + } + any2 := &testpb.MyMessage{Count: proto.Int32(42), Bikeshed: testpb.MyMessage_GREEN.Enum(), RepBytes: [][]byte{[]byte("roboto")}} + proto.SetExtension(any2, testpb.E_Ext_More, &testpb.Ext{Data: proto.String("baz")}) + any2b, err := proto.Marshal(any2) + if err != nil { + panic(err) + } + m6 := &pb.Message{ + Name: "David", + ResultCount: 47, + Anything: &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(any1), Value: any1b}, + ManyThings: []*anypb.Any{ + &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(any2), Value: any2b}, + &anypb.Any{TypeUrl: "type.googleapis.com/" + proto.MessageName(any1), Value: any1b}, + }, + } + + const ( + m1Golden = ` +name: "David" +result_count: 47 +anything: < + [type.googleapis.com/proto3_proto.Nested]: < + bunny: "Monty" + > +> +` + m2Golden = ` +name: "David" +result_count: 47 +anything: < + ["http://[::1]/type.googleapis.com/proto3_proto.Nested"]: < + bunny: "Monty" + > +> +` + m3Golden = ` +name: "David" +result_count: 47 +anything: < + ["type.googleapis.com/\"/proto3_proto.Nested"]: < + bunny: "Monty" + > +> +` + m4Golden = ` +name: "David" +result_count: 47 +anything: < + [type.googleapis.com/a/path/proto3_proto.Nested]: < + bunny: "Monty" + > +> +` + m5Golden = ` +[type.googleapis.com/proto3_proto.Nested]: < + bunny: "Monty" +> +` + m6Golden = ` +name: "David" +result_count: 47 +anything: < + [type.googleapis.com/testdata.MyMessage]: < + count: 47 + name: "David" + [testdata.Ext.more]: < + data: "foo" + > + [testdata.Ext.text]: "bar" + > +> +many_things: < + [type.googleapis.com/testdata.MyMessage]: < + count: 42 + bikeshed: GREEN + rep_bytes: "roboto" + [testdata.Ext.more]: < + data: "baz" + > + > +> +many_things: < + [type.googleapis.com/testdata.MyMessage]: < + count: 47 + name: "David" + [testdata.Ext.more]: < + data: "foo" + > + [testdata.Ext.text]: "bar" + > +> +` + ) + return []golden{ + {m1, strings.TrimSpace(m1Golden) + "\n", strings.TrimSpace(compact(m1Golden)) + " "}, + {m2, strings.TrimSpace(m2Golden) + "\n", strings.TrimSpace(compact(m2Golden)) + " "}, + {m3, strings.TrimSpace(m3Golden) + "\n", strings.TrimSpace(compact(m3Golden)) + " "}, + {m4, strings.TrimSpace(m4Golden) + "\n", strings.TrimSpace(compact(m4Golden)) + " "}, + {m5, strings.TrimSpace(m5Golden) + "\n", strings.TrimSpace(compact(m5Golden)) + " "}, + {m6, strings.TrimSpace(m6Golden) + "\n", strings.TrimSpace(compact(m6Golden)) + " "}, + } +} + +func TestMarshalGolden(t *testing.T) { + for _, tt := range goldenMessages { + if got, want := expandedMarshaler.Text(tt.m), tt.t; got != want { + t.Errorf("message %v: got:\n%s\nwant:\n%s", tt.m, got, want) + } + if got, want := expandedCompactMarshaler.Text(tt.m), tt.c; got != want { + t.Errorf("message %v: got:\n`%s`\nwant:\n`%s`", tt.m, got, want) + } + } +} + +func TestUnmarshalGolden(t *testing.T) { + for _, tt := range goldenMessages { + want := tt.m + got := proto.Clone(tt.m) + got.Reset() + if err := proto.UnmarshalText(tt.t, got); err != nil { + t.Errorf("failed to unmarshal\n%s\nerror: %v", tt.t, err) + } + if !anyEqual(got, want) { + t.Errorf("message:\n%s\ngot:\n%s\nwant:\n%s", tt.t, got, want) + } + got.Reset() + if err := proto.UnmarshalText(tt.c, got); err != nil { + t.Errorf("failed to unmarshal\n%s\nerror: %v", tt.c, err) + } + if !anyEqual(got, want) { + t.Errorf("message:\n%s\ngot:\n%s\nwant:\n%s", tt.c, got, want) + } + } +} + +func TestMarshalUnknownAny(t *testing.T) { + m := &pb.Message{ + Anything: &anypb.Any{ + TypeUrl: "foo", + Value: []byte("bar"), + }, + } + want := `anything: < + type_url: "foo" + value: "bar" +> +` + got := expandedMarshaler.Text(m) + if got != want { + t.Errorf("got\n`%s`\nwant\n`%s`", got, want) + } +} + +func TestAmbiguousAny(t *testing.T) { + pb := &anypb.Any{} + err := proto.UnmarshalText(` + type_url: "ttt/proto3_proto.Nested" + value: "\n\x05Monty" + `, pb) + t.Logf("result: %v (error: %v)", expandedMarshaler.Text(pb), err) + if err != nil { + t.Errorf("failed to parse ambiguous Any message: %v", err) + } +} + +func TestUnmarshalOverwriteAny(t *testing.T) { + pb := &anypb.Any{} + err := proto.UnmarshalText(` + [type.googleapis.com/a/path/proto3_proto.Nested]: < + bunny: "Monty" + > + [type.googleapis.com/a/path/proto3_proto.Nested]: < + bunny: "Rabbit of Caerbannog" + > + `, pb) + want := `line 7: Any message unpacked multiple times, or "type_url" already set` + if err.Error() != want { + t.Errorf("incorrect error.\nHave: %v\nWant: %v", err.Error(), want) + } +} + +func TestUnmarshalAnyMixAndMatch(t *testing.T) { + pb := &anypb.Any{} + err := proto.UnmarshalText(` + value: "\n\x05Monty" + [type.googleapis.com/a/path/proto3_proto.Nested]: < + bunny: "Rabbit of Caerbannog" + > + `, pb) + want := `line 5: Any message unpacked multiple times, or "value" already set` + if err.Error() != want { + t.Errorf("incorrect error.\nHave: %v\nWant: %v", err.Error(), want) + } +} diff --git a/vendor/github.com/golang/protobuf/proto/clone.go b/vendor/github.com/golang/protobuf/proto/clone.go index 6c6a7d9..e392575 100644 --- a/vendor/github.com/golang/protobuf/proto/clone.go +++ b/vendor/github.com/golang/protobuf/proto/clone.go @@ -30,7 +30,7 @@ // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Protocol buffer deep copy and merge. -// TODO: MessageSet and RawMessage. +// TODO: RawMessage. package proto @@ -75,17 +75,24 @@ func Merge(dst, src Message) { } func mergeStruct(out, in reflect.Value) { + sprop := GetProperties(in.Type()) for i := 0; i < in.NumField(); i++ { f := in.Type().Field(i) if strings.HasPrefix(f.Name, "XXX_") { continue } - mergeAny(out.Field(i), in.Field(i)) + mergeAny(out.Field(i), in.Field(i), false, sprop.Prop[i]) } - if emIn, ok := in.Addr().Interface().(extendableProto); ok { - emOut := out.Addr().Interface().(extendableProto) - mergeExtension(emOut.ExtensionMap(), emIn.ExtensionMap()) + if emIn, ok := extendable(in.Addr().Interface()); ok { + emOut, _ := extendable(out.Addr().Interface()) + mIn, muIn := emIn.extensionsRead() + if mIn != nil { + mOut := emOut.extensionsWrite() + muIn.Lock() + mergeExtension(mOut, mIn) + muIn.Unlock() + } } uf := in.FieldByName("XXX_unrecognized") @@ -98,7 +105,10 @@ func mergeStruct(out, in reflect.Value) { } } -func mergeAny(out, in reflect.Value) { +// mergeAny performs a merge between two values of the same type. +// viaPtr indicates whether the values were indirected through a pointer (implying proto2). +// prop is set if this is a struct field (it may be nil). +func mergeAny(out, in reflect.Value, viaPtr bool, prop *Properties) { if in.Type() == protoMessageType { if !in.IsNil() { if out.IsNil() { @@ -112,7 +122,21 @@ func mergeAny(out, in reflect.Value) { switch in.Kind() { case reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int32, reflect.Int64, reflect.String, reflect.Uint32, reflect.Uint64: + if !viaPtr && isProto3Zero(in) { + return + } out.Set(in) + case reflect.Interface: + // Probably a oneof field; copy non-nil values. + if in.IsNil() { + return + } + // Allocate destination if it is not set, or set to a different type. + // Otherwise we will merge as normal. + if out.IsNil() || out.Elem().Type() != in.Elem().Type() { + out.Set(reflect.New(in.Elem().Elem().Type())) // interface -> *T -> T -> new(T) + } + mergeAny(out.Elem(), in.Elem(), false, nil) case reflect.Map: if in.Len() == 0 { return @@ -127,7 +151,7 @@ func mergeAny(out, in reflect.Value) { switch elemKind { case reflect.Ptr: val = reflect.New(in.Type().Elem().Elem()) - mergeAny(val, in.MapIndex(key)) + mergeAny(val, in.MapIndex(key), false, nil) case reflect.Slice: val = in.MapIndex(key) val = reflect.ValueOf(append([]byte{}, val.Bytes()...)) @@ -143,13 +167,21 @@ func mergeAny(out, in reflect.Value) { if out.IsNil() { out.Set(reflect.New(in.Elem().Type())) } - mergeAny(out.Elem(), in.Elem()) + mergeAny(out.Elem(), in.Elem(), true, nil) case reflect.Slice: if in.IsNil() { return } if in.Type().Elem().Kind() == reflect.Uint8 { // []byte is a scalar bytes field, not a repeated field. + + // Edge case: if this is in a proto3 message, a zero length + // bytes field is considered the zero value, and should not + // be merged. + if prop != nil && prop.proto3 && in.Len() == 0 { + return + } + // Make a deep copy. // Append to []byte{} instead of []byte(nil) so that we never end up // with a nil result. @@ -167,7 +199,7 @@ func mergeAny(out, in reflect.Value) { default: for i := 0; i < n; i++ { x := reflect.Indirect(reflect.New(in.Type().Elem())) - mergeAny(x, in.Index(i)) + mergeAny(x, in.Index(i), false, nil) out.Set(reflect.Append(out, x)) } } @@ -184,7 +216,7 @@ func mergeExtension(out, in map[int32]Extension) { eOut := Extension{desc: eIn.desc} if eIn.value != nil { v := reflect.New(reflect.TypeOf(eIn.value)).Elem() - mergeAny(v, reflect.ValueOf(eIn.value)) + mergeAny(v, reflect.ValueOf(eIn.value), false, nil) eOut.value = v.Interface() } if eIn.enc != nil { diff --git a/vendor/github.com/golang/protobuf/proto/clone_test.go b/vendor/github.com/golang/protobuf/proto/clone_test.go index 9db0fb6..f607ff4 100644 --- a/vendor/github.com/golang/protobuf/proto/clone_test.go +++ b/vendor/github.com/golang/protobuf/proto/clone_test.go @@ -36,6 +36,7 @@ import ( "github.com/golang/protobuf/proto" + proto3pb "github.com/golang/protobuf/proto/proto3_proto" pb "github.com/golang/protobuf/proto/testdata" ) @@ -194,6 +195,9 @@ var mergeTests = []struct { NameMapping: map[int32]string{6: "Nigel"}, MsgMapping: map[int64]*pb.FloatingPoint{ 0x4001: &pb.FloatingPoint{F: proto.Float64(2.0)}, + 0x4002: &pb.FloatingPoint{ + F: proto.Float64(2.0), + }, }, ByteMapping: map[bool][]byte{true: []byte("wowsa")}, }, @@ -202,6 +206,12 @@ var mergeTests = []struct { 6: "Bruce", // should be overwritten 7: "Andrew", }, + MsgMapping: map[int64]*pb.FloatingPoint{ + 0x4002: &pb.FloatingPoint{ + F: proto.Float64(3.0), + Exact: proto.Bool(true), + }, // the entire message should be overwritten + }, }, want: &pb.MessageWithMap{ NameMapping: map[int32]string{ @@ -210,10 +220,73 @@ var mergeTests = []struct { }, MsgMapping: map[int64]*pb.FloatingPoint{ 0x4001: &pb.FloatingPoint{F: proto.Float64(2.0)}, + 0x4002: &pb.FloatingPoint{ + F: proto.Float64(2.0), + }, }, ByteMapping: map[bool][]byte{true: []byte("wowsa")}, }, }, + // proto3 shouldn't merge zero values, + // in the same way that proto2 shouldn't merge nils. + { + src: &proto3pb.Message{ + Name: "Aaron", + Data: []byte(""), // zero value, but not nil + }, + dst: &proto3pb.Message{ + HeightInCm: 176, + Data: []byte("texas!"), + }, + want: &proto3pb.Message{ + Name: "Aaron", + HeightInCm: 176, + Data: []byte("texas!"), + }, + }, + // Oneof fields should merge by assignment. + { + src: &pb.Communique{ + Union: &pb.Communique_Number{41}, + }, + dst: &pb.Communique{ + Union: &pb.Communique_Name{"Bobby Tables"}, + }, + want: &pb.Communique{ + Union: &pb.Communique_Number{41}, + }, + }, + // Oneof nil is the same as not set. + { + src: &pb.Communique{}, + dst: &pb.Communique{ + Union: &pb.Communique_Name{"Bobby Tables"}, + }, + want: &pb.Communique{ + Union: &pb.Communique_Name{"Bobby Tables"}, + }, + }, + { + src: &proto3pb.Message{ + Terrain: map[string]*proto3pb.Nested{ + "kay_a": &proto3pb.Nested{Cute: true}, // replace + "kay_b": &proto3pb.Nested{Bunny: "rabbit"}, // insert + }, + }, + dst: &proto3pb.Message{ + Terrain: map[string]*proto3pb.Nested{ + "kay_a": &proto3pb.Nested{Bunny: "lost"}, // replaced + "kay_c": &proto3pb.Nested{Bunny: "bunny"}, // keep + }, + }, + want: &proto3pb.Message{ + Terrain: map[string]*proto3pb.Nested{ + "kay_a": &proto3pb.Nested{Cute: true}, + "kay_b": &proto3pb.Nested{Bunny: "rabbit"}, + "kay_c": &proto3pb.Nested{Bunny: "bunny"}, + }, + }, + }, } func TestMerge(t *testing.T) { diff --git a/vendor/github.com/golang/protobuf/proto/decode.go b/vendor/github.com/golang/protobuf/proto/decode.go index 312e604..aa20729 100644 --- a/vendor/github.com/golang/protobuf/proto/decode.go +++ b/vendor/github.com/golang/protobuf/proto/decode.go @@ -46,6 +46,10 @@ import ( // errOverflow is returned when an integer is too large to be represented. var errOverflow = errors.New("proto: integer overflow") +// ErrInternalBadWireType is returned by generated code when an incorrect +// wire type is encountered. It does not get returned to user code. +var ErrInternalBadWireType = errors.New("proto: internal error: bad wiretype for oneof") + // The fundamental decoders that interpret bytes on the wire. // Those that take integer types all return uint64 and are // therefore of type valueDecoder. @@ -57,7 +61,6 @@ var errOverflow = errors.New("proto: integer overflow") // int32, int64, uint32, uint64, bool, and enum // protocol buffer types. func DecodeVarint(buf []byte) (x uint64, n int) { - // x, n already 0 for shift := uint(0); shift < 64; shift += 7 { if n >= len(buf) { return 0, 0 @@ -74,13 +77,7 @@ func DecodeVarint(buf []byte) (x uint64, n int) { return 0, 0 } -// DecodeVarint reads a varint-encoded integer from the Buffer. -// This is the format for the -// int32, int64, uint32, uint64, bool, and enum -// protocol buffer types. -func (p *Buffer) DecodeVarint() (x uint64, err error) { - // x, err already 0 - +func (p *Buffer) decodeVarintSlow() (x uint64, err error) { i := p.index l := len(p.buf) @@ -103,6 +100,107 @@ func (p *Buffer) DecodeVarint() (x uint64, err error) { return } +// DecodeVarint reads a varint-encoded integer from the Buffer. +// This is the format for the +// int32, int64, uint32, uint64, bool, and enum +// protocol buffer types. +func (p *Buffer) DecodeVarint() (x uint64, err error) { + i := p.index + buf := p.buf + + if i >= len(buf) { + return 0, io.ErrUnexpectedEOF + } else if buf[i] < 0x80 { + p.index++ + return uint64(buf[i]), nil + } else if len(buf)-i < 10 { + return p.decodeVarintSlow() + } + + var b uint64 + // we already checked the first byte + x = uint64(buf[i]) - 0x80 + i++ + + b = uint64(buf[i]) + i++ + x += b << 7 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 7 + + b = uint64(buf[i]) + i++ + x += b << 14 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 14 + + b = uint64(buf[i]) + i++ + x += b << 21 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 21 + + b = uint64(buf[i]) + i++ + x += b << 28 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 28 + + b = uint64(buf[i]) + i++ + x += b << 35 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 35 + + b = uint64(buf[i]) + i++ + x += b << 42 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 42 + + b = uint64(buf[i]) + i++ + x += b << 49 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 49 + + b = uint64(buf[i]) + i++ + x += b << 56 + if b&0x80 == 0 { + goto done + } + x -= 0x80 << 56 + + b = uint64(buf[i]) + i++ + x += b << 63 + if b&0x80 == 0 { + goto done + } + // x -= 0x80 << 63 // Always zero. + + return 0, errOverflow + +done: + p.index = i + return x, nil +} + // DecodeFixed64 reads a 64-bit integer from the Buffer. // This is the format for the // fixed64, sfixed64, and double protocol buffer types. @@ -314,10 +412,30 @@ func UnmarshalMerge(buf []byte, pb Message) error { return NewBuffer(buf).Unmarshal(pb) } +// DecodeMessage reads a count-delimited message from the Buffer. +func (p *Buffer) DecodeMessage(pb Message) error { + enc, err := p.DecodeRawBytes(false) + if err != nil { + return err + } + return NewBuffer(enc).Unmarshal(pb) +} + +// DecodeGroup reads a tag-delimited group from the Buffer. +func (p *Buffer) DecodeGroup(pb Message) error { + typ, base, err := getbase(pb) + if err != nil { + return err + } + return p.unmarshalType(typ.Elem(), GetProperties(typ.Elem()), true, base) +} + // Unmarshal parses the protocol buffer representation in the // Buffer and places the decoded result in pb. If the struct // underlying pb does not match the data in the buffer, the results can be // unpredictable. +// +// Unlike proto.Unmarshal, this does not reset pb before starting to unmarshal. func (p *Buffer) Unmarshal(pb Message) error { // If the object can unmarshal itself, let it. if u, ok := pb.(Unmarshaler); ok { @@ -356,6 +474,11 @@ func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group wire := int(u & 0x7) if wire == WireEndGroup { if is_group { + if required > 0 { + // Not enough information to determine the exact field. + // (See below.) + return &RequiredNotSetError{"{Unknown}"} + } return nil // input is satisfied } return fmt.Errorf("proto: %s: wiretype end group for non-group", st) @@ -368,15 +491,30 @@ func (o *Buffer) unmarshalType(st reflect.Type, prop *StructProperties, is_group if !ok { // Maybe it's an extension? if prop.extendable { - if e := structPointer_Interface(base, st).(extendableProto); isExtensionField(e, int32(tag)) { + if e, _ := extendable(structPointer_Interface(base, st)); isExtensionField(e, int32(tag)) { if err = o.skip(st, tag, wire); err == nil { - ext := e.ExtensionMap()[int32(tag)] // may be missing + extmap := e.extensionsWrite() + ext := extmap[int32(tag)] // may be missing ext.enc = append(ext.enc, o.buf[oi:o.index]...) - e.ExtensionMap()[int32(tag)] = ext + extmap[int32(tag)] = ext } continue } } + // Maybe it's a oneof? + if prop.oneofUnmarshaler != nil { + m := structPointer_Interface(base, st).(Message) + // First return value indicates whether tag is a oneof field. + ok, err = prop.oneofUnmarshaler(m, tag, wire, o) + if err == ErrInternalBadWireType { + // Map the error to something more descriptive. + // Do the formatting here to save generated code space. + err = fmt.Errorf("bad wiretype for oneof field in %T", m) + } + if ok { + continue + } + } err = o.skipAndSave(st, tag, wire, base, prop.unrecField) continue } @@ -561,9 +699,13 @@ func (o *Buffer) dec_slice_packed_bool(p *Properties, base structPointer) error return err } nb := int(nn) // number of bytes of encoded bools + fin := o.index + nb + if fin < o.index { + return errOverflow + } y := *v - for i := 0; i < nb; i++ { + for o.index < fin { u, err := p.valDec(o) if err != nil { return err @@ -675,7 +817,7 @@ func (o *Buffer) dec_new_map(p *Properties, base structPointer) error { oi := o.index // index at the end of this map entry o.index -= len(raw) // move buffer back to start of map entry - mptr := structPointer_Map(base, p.field, p.mtype) // *map[K]V + mptr := structPointer_NewAt(base, p.field, p.mtype) // *map[K]V if mptr.Elem().IsNil() { mptr.Elem().Set(reflect.MakeMap(mptr.Type().Elem())) } @@ -728,10 +870,11 @@ func (o *Buffer) dec_new_map(p *Properties, base structPointer) error { } } keyelem, valelem := keyptr.Elem(), valptr.Elem() - if !keyelem.IsValid() || !valelem.IsValid() { - // We did not decode the key or the value in the map entry. - // Either way, it's an invalid map entry. - return fmt.Errorf("proto: bad map data: missing key/val") + if !keyelem.IsValid() { + keyelem = reflect.Zero(p.mtype.Key()) + } + if !valelem.IsValid() { + valelem = reflect.Zero(p.mtype.Elem()) } v.SetMapIndex(keyelem, valelem) diff --git a/vendor/github.com/golang/protobuf/proto/decode_test.go b/vendor/github.com/golang/protobuf/proto/decode_test.go new file mode 100644 index 0000000..2c4c31d --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/decode_test.go @@ -0,0 +1,258 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build go1.7 + +package proto_test + +import ( + "fmt" + "testing" + + "github.com/golang/protobuf/proto" + tpb "github.com/golang/protobuf/proto/proto3_proto" +) + +var ( + bytesBlackhole []byte + msgBlackhole = new(tpb.Message) +) + +// BenchmarkVarint32ArraySmall shows the performance on an array of small int32 fields (1 and +// 2 bytes long). +func BenchmarkVarint32ArraySmall(b *testing.B) { + for i := uint(1); i <= 10; i++ { + dist := genInt32Dist([7]int{0, 3, 1}, 1<2GB. + ErrTooLarge = errors.New("proto: message encodes to over 2 GB") ) // The fundamental encoders that put bytes on the wire. @@ -74,6 +82,10 @@ var ( const maxVarintBytes = 10 // maximum length of a varint +// maxMarshalSize is the largest allowed size of an encoded protobuf, +// since C++ and Java use signed int32s for the size. +const maxMarshalSize = 1<<31 - 1 + // EncodeVarint returns the varint encoding of x. // This is the format for the // int32, int64, uint32, uint64, bool, and enum @@ -105,6 +117,11 @@ func (p *Buffer) EncodeVarint(x uint64) error { return nil } +// SizeVarint returns the varint encoding size of an integer. +func SizeVarint(x uint64) int { + return sizeVarint(x) +} + func sizeVarint(x uint64) (n int) { for { n++ @@ -157,11 +174,11 @@ func sizeFixed32(x uint64) int { // This is the format used for the sint64 protocol buffer type. func (p *Buffer) EncodeZigzag64(x uint64) error { // use signed number to get arithmetic right shift. - return p.EncodeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + return p.EncodeVarint((x << 1) ^ uint64((int64(x) >> 63))) } func sizeZigzag64(x uint64) int { - return sizeVarint(uint64((x << 1) ^ uint64((int64(x) >> 63)))) + return sizeVarint((x << 1) ^ uint64((int64(x) >> 63))) } // EncodeZigzag32 writes a zigzag-encoded 32-bit integer @@ -217,10 +234,6 @@ func Marshal(pb Message) ([]byte, error) { } p := NewBuffer(nil) err := p.Marshal(pb) - var state errorState - if err != nil && !state.shouldContinue(err, nil) { - return nil, err - } if p.buf == nil && err == nil { // Return a non-nil slice on success. return []byte{}, nil @@ -228,6 +241,20 @@ func Marshal(pb Message) ([]byte, error) { return p.buf, err } +// EncodeMessage writes the protocol buffer to the Buffer, +// prefixed by a varint-encoded length. +func (p *Buffer) EncodeMessage(pb Message) error { + t, base, err := getbase(pb) + if structPointer_IsNil(base) { + return ErrNil + } + if err == nil { + var state errorState + err = p.enc_len_struct(GetProperties(t.Elem()), base, &state) + } + return err +} + // Marshal takes the protocol buffer // and encodes it into the wire format, writing the result to the // Buffer. @@ -235,11 +262,8 @@ func (p *Buffer) Marshal(pb Message) error { // Can the object marshal itself? if m, ok := pb.(Marshaler); ok { data, err := m.Marshal() - if err != nil { - return err - } p.buf = append(p.buf, data...) - return nil + return err } t, base, err := getbase(pb) @@ -251,9 +275,12 @@ func (p *Buffer) Marshal(pb Message) error { } if collectStats { - stats.Encode++ + (stats).Encode++ // Parens are to work around a goimports bug. } + if len(p.buf) > maxMarshalSize { + return ErrTooLarge + } return err } @@ -275,7 +302,7 @@ func Size(pb Message) (n int) { } if collectStats { - stats.Size++ + (stats).Size++ // Parens are to work around a goimports bug. } return @@ -318,7 +345,7 @@ func size_bool(p *Properties, base structPointer) int { func size_proto3_bool(p *Properties, base structPointer) int { v := *structPointer_BoolVal(base, p.field) - if !v { + if !v && !p.oneof { return 0 } return len(p.tagcode) + 1 // each bool takes exactly one byte @@ -361,7 +388,7 @@ func size_int32(p *Properties, base structPointer) (n int) { func size_proto3_int32(p *Properties, base structPointer) (n int) { v := structPointer_Word32Val(base, p.field) x := int32(word32Val_Get(v)) // permit sign extension to use full 64-bit range - if x == 0 { + if x == 0 && !p.oneof { return 0 } n += len(p.tagcode) @@ -407,7 +434,7 @@ func size_uint32(p *Properties, base structPointer) (n int) { func size_proto3_uint32(p *Properties, base structPointer) (n int) { v := structPointer_Word32Val(base, p.field) x := word32Val_Get(v) - if x == 0 { + if x == 0 && !p.oneof { return 0 } n += len(p.tagcode) @@ -452,7 +479,7 @@ func size_int64(p *Properties, base structPointer) (n int) { func size_proto3_int64(p *Properties, base structPointer) (n int) { v := structPointer_Word64Val(base, p.field) x := word64Val_Get(v) - if x == 0 { + if x == 0 && !p.oneof { return 0 } n += len(p.tagcode) @@ -495,7 +522,7 @@ func size_string(p *Properties, base structPointer) (n int) { func size_proto3_string(p *Properties, base structPointer) (n int) { v := *structPointer_StringVal(base, p.field) - if v == "" { + if v == "" && !p.oneof { return 0 } n += len(p.tagcode) @@ -529,7 +556,7 @@ func (o *Buffer) enc_struct_message(p *Properties, base structPointer) error { } o.buf = append(o.buf, p.tagcode...) o.EncodeRawBytes(data) - return nil + return state.err } o.buf = append(o.buf, p.tagcode...) @@ -667,7 +694,7 @@ func (o *Buffer) enc_proto3_slice_byte(p *Properties, base structPointer) error func size_slice_byte(p *Properties, base structPointer) (n int) { s := *structPointer_Bytes(base, p.field) - if s == nil { + if s == nil && !p.oneof { return 0 } n += len(p.tagcode) @@ -677,7 +704,7 @@ func size_slice_byte(p *Properties, base structPointer) (n int) { func size_proto3_slice_byte(p *Properties, base structPointer) (n int) { s := *structPointer_Bytes(base, p.field) - if len(s) == 0 { + if len(s) == 0 && !p.oneof { return 0 } n += len(p.tagcode) @@ -980,7 +1007,6 @@ func size_slice_struct_message(p *Properties, base structPointer) (n int) { if p.isMarshaler { m := structPointer_Interface(structp, p.stype).(Marshaler) data, _ := m.Marshal() - n += len(p.tagcode) n += sizeRawBytes(data) continue } @@ -1039,10 +1065,32 @@ func size_slice_struct_group(p *Properties, base structPointer) (n int) { // Encode an extension map. func (o *Buffer) enc_map(p *Properties, base structPointer) error { - v := *structPointer_ExtMap(base, p.field) - if err := encodeExtensionMap(v); err != nil { + exts := structPointer_ExtMap(base, p.field) + if err := encodeExtensionsMap(*exts); err != nil { return err } + + return o.enc_map_body(*exts) +} + +func (o *Buffer) enc_exts(p *Properties, base structPointer) error { + exts := structPointer_Extensions(base, p.field) + + v, mu := exts.extensionsRead() + if v == nil { + return nil + } + + mu.Lock() + defer mu.Unlock() + if err := encodeExtensionsMap(v); err != nil { + return err + } + + return o.enc_map_body(v) +} + +func (o *Buffer) enc_map_body(v map[int32]Extension) error { // Fast-path for common cases: zero or one extensions. if len(v) <= 1 { for _, e := range v { @@ -1065,8 +1113,13 @@ func (o *Buffer) enc_map(p *Properties, base structPointer) error { } func size_map(p *Properties, base structPointer) int { - v := *structPointer_ExtMap(base, p.field) - return sizeExtensionMap(v) + v := structPointer_ExtMap(base, p.field) + return extensionsMapSize(*v) +} + +func size_exts(p *Properties, base structPointer) int { + v := structPointer_Extensions(base, p.field) + return extensionsSize(v) } // Encode a map field. @@ -1084,7 +1137,7 @@ func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { repeated MapFieldEntry map_field = N; */ - v := structPointer_Map(base, p.field, p.mtype).Elem() // map[K]V + v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V if v.Len() == 0 { return nil } @@ -1095,22 +1148,16 @@ func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { if err := p.mkeyprop.enc(o, p.mkeyprop, keybase); err != nil { return err } - if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil { + if err := p.mvalprop.enc(o, p.mvalprop, valbase); err != nil && err != ErrNil { return err } return nil } - keys := v.MapKeys() - sort.Sort(mapKeys(keys)) - for _, key := range keys { + // Don't sort map keys. It is not required by the spec, and C++ doesn't do it. + for _, key := range v.MapKeys() { val := v.MapIndex(key) - // The only illegal map entry values are nil message pointers. - if val.Kind() == reflect.Ptr && val.IsNil() { - return errors.New("proto: map has nil element") - } - keycopy.Set(key) valcopy.Set(val) @@ -1123,7 +1170,7 @@ func (o *Buffer) enc_new_map(p *Properties, base structPointer) error { } func size_new_map(p *Properties, base structPointer) int { - v := structPointer_Map(base, p.field, p.mtype).Elem() // map[K]V + v := structPointer_NewAt(base, p.field, p.mtype).Elem() // map[K]V keycopy, valcopy, keybase, valbase := mapEncodeScratch(p.mtype) @@ -1198,12 +1245,28 @@ func (o *Buffer) enc_struct(prop *StructProperties, base structPointer) error { return err } } + if len(o.buf) > maxMarshalSize { + return ErrTooLarge + } + } + } + + // Do oneof fields. + if prop.oneofMarshaler != nil { + m := structPointer_Interface(base, prop.stype).(Message) + if err := prop.oneofMarshaler(m, o); err == ErrNil { + return errOneofHasNil + } else if err != nil { + return err } } // Add unrecognized fields at the end. if prop.unrecField.IsValid() { v := *structPointer_Bytes(base, prop.unrecField) + if len(o.buf)+len(v) > maxMarshalSize { + return ErrTooLarge + } if len(v) > 0 { o.buf = append(o.buf, v...) } @@ -1226,6 +1289,12 @@ func size_struct(prop *StructProperties, base structPointer) (n int) { n += len(v) } + // Factor in any oneof fields. + if prop.oneofSizer != nil { + m := structPointer_Interface(base, prop.stype).(Message) + n += prop.oneofSizer(m) + } + return } diff --git a/vendor/github.com/golang/protobuf/proto/encode_test.go b/vendor/github.com/golang/protobuf/proto/encode_test.go new file mode 100644 index 0000000..a720947 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/encode_test.go @@ -0,0 +1,85 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// +build go1.7 + +package proto_test + +import ( + "strconv" + "testing" + + "github.com/golang/protobuf/proto" + tpb "github.com/golang/protobuf/proto/proto3_proto" + "github.com/golang/protobuf/ptypes" +) + +var ( + blackhole []byte +) + +// BenchmarkAny creates increasingly large arbitrary Any messages. The type is always the +// same. +func BenchmarkAny(b *testing.B) { + data := make([]byte, 1<<20) + quantum := 1 << 10 + for i := uint(0); i <= 10; i++ { + b.Run(strconv.Itoa(quantum<= len(o.buf) { + if o.index >= len(o.buf) { break } } @@ -333,10 +473,9 @@ func decodeExtension(b []byte, extension *ExtensionDesc) (interface{}, error) { // GetExtensions returns a slice of the extensions present in pb that are also listed in es. // The returned slice has the same length as es; missing extensions will appear as nil elements. func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, err error) { - epb, ok := pb.(extendableProto) + epb, ok := extendable(pb) if !ok { - err = errors.New("proto: not an extendable proto") - return + return nil, errors.New("proto: not an extendable proto") } extensions = make([]interface{}, len(es)) for i, e := range es { @@ -351,9 +490,44 @@ func GetExtensions(pb Message, es []*ExtensionDesc) (extensions []interface{}, e return } +// ExtensionDescs returns a new slice containing pb's extension descriptors, in undefined order. +// For non-registered extensions, ExtensionDescs returns an incomplete descriptor containing +// just the Field field, which defines the extension's field number. +func ExtensionDescs(pb Message) ([]*ExtensionDesc, error) { + epb, ok := extendable(pb) + if !ok { + return nil, fmt.Errorf("proto: %T is not an extendable proto.Message", pb) + } + registeredExtensions := RegisteredExtensions(pb) + + emap, mu := epb.extensionsRead() + if emap == nil { + return nil, nil + } + mu.Lock() + defer mu.Unlock() + extensions := make([]*ExtensionDesc, 0, len(emap)) + for extid, e := range emap { + desc := e.desc + if desc == nil { + desc = registeredExtensions[extid] + if desc == nil { + desc = &ExtensionDesc{Field: extid} + } + } + + extensions = append(extensions, desc) + } + return extensions, nil +} + // SetExtension sets the specified extension of pb to the specified value. -func SetExtension(pb extendableProto, extension *ExtensionDesc, value interface{}) error { - if err := checkExtensionTypes(pb, extension); err != nil { +func SetExtension(pb Message, extension *ExtensionDesc, value interface{}) error { + epb, ok := extendable(pb) + if !ok { + return errors.New("proto: not an extendable proto") + } + if err := checkExtensionTypes(epb, extension); err != nil { return err } typ := reflect.TypeOf(extension.ExtensionType) @@ -369,10 +543,23 @@ func SetExtension(pb extendableProto, extension *ExtensionDesc, value interface{ return fmt.Errorf("proto: SetExtension called with nil value of type %T", value) } - pb.ExtensionMap()[extension.Field] = Extension{desc: extension, value: value} + extmap := epb.extensionsWrite() + extmap[extension.Field] = Extension{desc: extension, value: value} return nil } +// ClearAllExtensions clears all extensions from pb. +func ClearAllExtensions(pb Message) { + epb, ok := extendable(pb) + if !ok { + return + } + m := epb.extensionsWrite() + for k := range m { + delete(m, k) + } +} + // A global registry of extensions. // The generated code will register the generated descriptors by calling RegisterExtension. diff --git a/vendor/github.com/golang/protobuf/proto/extensions_test.go b/vendor/github.com/golang/protobuf/proto/extensions_test.go index 7255276..b6d9114 100644 --- a/vendor/github.com/golang/protobuf/proto/extensions_test.go +++ b/vendor/github.com/golang/protobuf/proto/extensions_test.go @@ -32,19 +32,22 @@ package proto_test import ( + "bytes" "fmt" "reflect" + "sort" "testing" "github.com/golang/protobuf/proto" pb "github.com/golang/protobuf/proto/testdata" + "golang.org/x/sync/errgroup" ) func TestGetExtensionsWithMissingExtensions(t *testing.T) { msg := &pb.MyMessage{} ext1 := &pb.Ext{} if err := proto.SetExtension(msg, pb.E_Ext_More, ext1); err != nil { - t.Fatalf("Could not set ext1: %s", ext1) + t.Fatalf("Could not set ext1: %s", err) } exts, err := proto.GetExtensions(msg, []*proto.ExtensionDesc{ pb.E_Ext_More, @@ -61,6 +64,58 @@ func TestGetExtensionsWithMissingExtensions(t *testing.T) { } } +func TestExtensionDescsWithMissingExtensions(t *testing.T) { + msg := &pb.MyMessage{Count: proto.Int32(0)} + extdesc1 := pb.E_Ext_More + if descs, err := proto.ExtensionDescs(msg); len(descs) != 0 || err != nil { + t.Errorf("proto.ExtensionDescs: got %d descs, error %v; want 0, nil", len(descs), err) + } + + ext1 := &pb.Ext{} + if err := proto.SetExtension(msg, extdesc1, ext1); err != nil { + t.Fatalf("Could not set ext1: %s", err) + } + extdesc2 := &proto.ExtensionDesc{ + ExtendedType: (*pb.MyMessage)(nil), + ExtensionType: (*bool)(nil), + Field: 123456789, + Name: "a.b", + Tag: "varint,123456789,opt", + } + ext2 := proto.Bool(false) + if err := proto.SetExtension(msg, extdesc2, ext2); err != nil { + t.Fatalf("Could not set ext2: %s", err) + } + + b, err := proto.Marshal(msg) + if err != nil { + t.Fatalf("Could not marshal msg: %v", err) + } + if err := proto.Unmarshal(b, msg); err != nil { + t.Fatalf("Could not unmarshal into msg: %v", err) + } + + descs, err := proto.ExtensionDescs(msg) + if err != nil { + t.Fatalf("proto.ExtensionDescs: got error %v", err) + } + sortExtDescs(descs) + wantDescs := []*proto.ExtensionDesc{extdesc1, &proto.ExtensionDesc{Field: extdesc2.Field}} + if !reflect.DeepEqual(descs, wantDescs) { + t.Errorf("proto.ExtensionDescs(msg) sorted extension ids: got %+v, want %+v", descs, wantDescs) + } +} + +type ExtensionDescSlice []*proto.ExtensionDesc + +func (s ExtensionDescSlice) Len() int { return len(s) } +func (s ExtensionDescSlice) Less(i, j int) bool { return s[i].Field < s[j].Field } +func (s ExtensionDescSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func sortExtDescs(s []*proto.ExtensionDesc) { + sort.Sort(ExtensionDescSlice(s)) +} + func TestGetExtensionStability(t *testing.T) { check := func(m *pb.MyMessage) bool { ext1, err := proto.GetExtension(m, pb.E_Ext_More) @@ -290,3 +345,192 @@ func TestNilExtension(t *testing.T) { // Note: if the behavior of Marshal is ever changed to ignore nil extensions, update // this test to verify that E_Ext_Text is properly propagated through marshal->unmarshal. } + +func TestMarshalUnmarshalRepeatedExtension(t *testing.T) { + // Add a repeated extension to the result. + tests := []struct { + name string + ext []*pb.ComplexExtension + }{ + { + "two fields", + []*pb.ComplexExtension{ + {First: proto.Int32(7)}, + {Second: proto.Int32(11)}, + }, + }, + { + "repeated field", + []*pb.ComplexExtension{ + {Third: []int32{1000}}, + {Third: []int32{2000}}, + }, + }, + { + "two fields and repeated field", + []*pb.ComplexExtension{ + {Third: []int32{1000}}, + {First: proto.Int32(9)}, + {Second: proto.Int32(21)}, + {Third: []int32{2000}}, + }, + }, + } + for _, test := range tests { + // Marshal message with a repeated extension. + msg1 := new(pb.OtherMessage) + err := proto.SetExtension(msg1, pb.E_RComplex, test.ext) + if err != nil { + t.Fatalf("[%s] Error setting extension: %v", test.name, err) + } + b, err := proto.Marshal(msg1) + if err != nil { + t.Fatalf("[%s] Error marshaling message: %v", test.name, err) + } + + // Unmarshal and read the merged proto. + msg2 := new(pb.OtherMessage) + err = proto.Unmarshal(b, msg2) + if err != nil { + t.Fatalf("[%s] Error unmarshaling message: %v", test.name, err) + } + e, err := proto.GetExtension(msg2, pb.E_RComplex) + if err != nil { + t.Fatalf("[%s] Error getting extension: %v", test.name, err) + } + ext := e.([]*pb.ComplexExtension) + if ext == nil { + t.Fatalf("[%s] Invalid extension", test.name) + } + if !reflect.DeepEqual(ext, test.ext) { + t.Errorf("[%s] Wrong value for ComplexExtension: got: %v want: %v\n", test.name, ext, test.ext) + } + } +} + +func TestUnmarshalRepeatingNonRepeatedExtension(t *testing.T) { + // We may see multiple instances of the same extension in the wire + // format. For example, the proto compiler may encode custom options in + // this way. Here, we verify that we merge the extensions together. + tests := []struct { + name string + ext []*pb.ComplexExtension + }{ + { + "two fields", + []*pb.ComplexExtension{ + {First: proto.Int32(7)}, + {Second: proto.Int32(11)}, + }, + }, + { + "repeated field", + []*pb.ComplexExtension{ + {Third: []int32{1000}}, + {Third: []int32{2000}}, + }, + }, + { + "two fields and repeated field", + []*pb.ComplexExtension{ + {Third: []int32{1000}}, + {First: proto.Int32(9)}, + {Second: proto.Int32(21)}, + {Third: []int32{2000}}, + }, + }, + } + for _, test := range tests { + var buf bytes.Buffer + var want pb.ComplexExtension + + // Generate a serialized representation of a repeated extension + // by catenating bytes together. + for i, e := range test.ext { + // Merge to create the wanted proto. + proto.Merge(&want, e) + + // serialize the message + msg := new(pb.OtherMessage) + err := proto.SetExtension(msg, pb.E_Complex, e) + if err != nil { + t.Fatalf("[%s] Error setting extension %d: %v", test.name, i, err) + } + b, err := proto.Marshal(msg) + if err != nil { + t.Fatalf("[%s] Error marshaling message %d: %v", test.name, i, err) + } + buf.Write(b) + } + + // Unmarshal and read the merged proto. + msg2 := new(pb.OtherMessage) + err := proto.Unmarshal(buf.Bytes(), msg2) + if err != nil { + t.Fatalf("[%s] Error unmarshaling message: %v", test.name, err) + } + e, err := proto.GetExtension(msg2, pb.E_Complex) + if err != nil { + t.Fatalf("[%s] Error getting extension: %v", test.name, err) + } + ext := e.(*pb.ComplexExtension) + if ext == nil { + t.Fatalf("[%s] Invalid extension", test.name) + } + if !reflect.DeepEqual(*ext, want) { + t.Errorf("[%s] Wrong value for ComplexExtension: got: %s want: %s\n", test.name, ext, want) + } + } +} + +func TestClearAllExtensions(t *testing.T) { + // unregistered extension + desc := &proto.ExtensionDesc{ + ExtendedType: (*pb.MyMessage)(nil), + ExtensionType: (*bool)(nil), + Field: 101010100, + Name: "emptyextension", + Tag: "varint,0,opt", + } + m := &pb.MyMessage{} + if proto.HasExtension(m, desc) { + t.Errorf("proto.HasExtension(%s): got true, want false", proto.MarshalTextString(m)) + } + if err := proto.SetExtension(m, desc, proto.Bool(true)); err != nil { + t.Errorf("proto.SetExtension(m, desc, true): got error %q, want nil", err) + } + if !proto.HasExtension(m, desc) { + t.Errorf("proto.HasExtension(%s): got false, want true", proto.MarshalTextString(m)) + } + proto.ClearAllExtensions(m) + if proto.HasExtension(m, desc) { + t.Errorf("proto.HasExtension(%s): got true, want false", proto.MarshalTextString(m)) + } +} + +func TestMarshalRace(t *testing.T) { + // unregistered extension + desc := &proto.ExtensionDesc{ + ExtendedType: (*pb.MyMessage)(nil), + ExtensionType: (*bool)(nil), + Field: 101010100, + Name: "emptyextension", + Tag: "varint,0,opt", + } + + m := &pb.MyMessage{Count: proto.Int32(4)} + if err := proto.SetExtension(m, desc, proto.Bool(true)); err != nil { + t.Errorf("proto.SetExtension(m, desc, true): got error %q, want nil", err) + } + + var g errgroup.Group + for n := 3; n > 0; n-- { + g.Go(func() error { + _, err := proto.Marshal(m) + return err + }) + } + if err := g.Wait(); err != nil { + t.Fatal(err) + } +} diff --git a/vendor/github.com/golang/protobuf/proto/lib.go b/vendor/github.com/golang/protobuf/proto/lib.go index 89ca42a..1c22550 100644 --- a/vendor/github.com/golang/protobuf/proto/lib.go +++ b/vendor/github.com/golang/protobuf/proto/lib.go @@ -66,8 +66,15 @@ for a protocol buffer variable v: that contain it (if any) followed by the CamelCased name of the extension field itself. HasExtension, ClearExtension, GetExtension and SetExtension are functions for manipulating extensions. + - Oneof field sets are given a single field in their message, + with distinguished wrapper types for each possible field value. - Marshal and Unmarshal are functions to encode and decode the wire format. +When the .proto file specifies `syntax="proto3"`, there are some differences: + + - Non-repeated fields of non-message type are values instead of pointers. + - Enum types do not get an Enum method. + The simplest way to describe this is to see an example. Given file test.proto, containing @@ -82,6 +89,10 @@ Given file test.proto, containing optional group OptionalGroup = 4 { required string RequiredField = 5; } + oneof union { + int32 number = 6; + string name = 7; + } } The resulting file, test.pb.go, is: @@ -120,15 +131,40 @@ The resulting file, test.pb.go, is: } type Test struct { - Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` - Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` - Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` - Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` - XXX_unrecognized []byte `json:"-"` + Label *string `protobuf:"bytes,1,req,name=label" json:"label,omitempty"` + Type *int32 `protobuf:"varint,2,opt,name=type,def=77" json:"type,omitempty"` + Reps []int64 `protobuf:"varint,3,rep,name=reps" json:"reps,omitempty"` + Optionalgroup *Test_OptionalGroup `protobuf:"group,4,opt,name=OptionalGroup" json:"optionalgroup,omitempty"` + // Types that are valid to be assigned to Union: + // *Test_Number + // *Test_Name + Union isTest_Union `protobuf_oneof:"union"` + XXX_unrecognized []byte `json:"-"` } func (m *Test) Reset() { *m = Test{} } func (m *Test) String() string { return proto.CompactTextString(m) } - func (*Test) ProtoMessage() {} + func (*Test) ProtoMessage() {} + + type isTest_Union interface { + isTest_Union() + } + + type Test_Number struct { + Number int32 `protobuf:"varint,6,opt,name=number"` + } + type Test_Name struct { + Name string `protobuf:"bytes,7,opt,name=name"` + } + + func (*Test_Number) isTest_Union() {} + func (*Test_Name) isTest_Union() {} + + func (m *Test) GetUnion() isTest_Union { + if m != nil { + return m.Union + } + return nil + } const Default_Test_Type int32 = 77 func (m *Test) GetLabel() string { @@ -165,13 +201,27 @@ The resulting file, test.pb.go, is: return "" } + func (m *Test) GetNumber() int32 { + if x, ok := m.GetUnion().(*Test_Number); ok { + return x.Number + } + return 0 + } + + func (m *Test) GetName() string { + if x, ok := m.GetUnion().(*Test_Name); ok { + return x.Name + } + return "" + } + func init() { proto.RegisterEnum("example.FOO", FOO_name, FOO_value) } To create and play with a Test object: -package main + package main import ( "log" @@ -184,9 +234,11 @@ package main test := &pb.Test{ Label: proto.String("hello"), Type: proto.Int32(17), + Reps: []int64{1, 2, 3}, Optionalgroup: &pb.Test_OptionalGroup{ RequiredField: proto.String("good bye"), }, + Union: &pb.Test_Name{"fred"}, } data, err := proto.Marshal(test) if err != nil { @@ -201,6 +253,11 @@ package main if test.GetLabel() != newTest.GetLabel() { log.Fatalf("data mismatch %q != %q", test.GetLabel(), newTest.GetLabel()) } + // Use a type switch to determine which oneof was set. + switch u := test.Union.(type) { + case *pb.Test_Number: // u.Number contains the number. + case *pb.Test_Name: // u.Name contains the string. + } // etc. } */ @@ -211,6 +268,7 @@ import ( "fmt" "log" "reflect" + "sort" "strconv" "sync" ) @@ -249,7 +307,7 @@ func GetStats() Stats { return stats } // temporary Buffer and are fine for most applications. type Buffer struct { buf []byte // encode/decode byte stream - index int // write point + index int // read point // pools of basic types to amortize allocation. bools []bool @@ -459,7 +517,6 @@ out: break out } fmt.Printf("%3d: t=%3d fix64 %d\n", index, tag, u) - break case WireVarint: u, err = p.DecodeVarint() @@ -470,19 +527,11 @@ out: fmt.Printf("%3d: t=%3d varint %d\n", index, tag, u) case WireStartGroup: - if err != nil { - fmt.Printf("%3d: t=%3d start err %v\n", index, tag, err) - break out - } fmt.Printf("%3d: t=%3d start\n", index, tag) depth++ case WireEndGroup: depth-- - if err != nil { - fmt.Printf("%3d: t=%3d end err %v\n", index, tag, err) - break out - } fmt.Printf("%3d: t=%3d end\n", index, tag) } } @@ -787,10 +836,62 @@ func fieldDefault(ft reflect.Type, prop *Properties) (sf *scalarField, nestedMes // If this turns out to be inefficient we can always consider other options, // such as doing a Schwartzian transform. -type mapKeys []reflect.Value +func mapKeys(vs []reflect.Value) sort.Interface { + s := mapKeySorter{ + vs: vs, + // default Less function: textual comparison + less: func(a, b reflect.Value) bool { + return fmt.Sprint(a.Interface()) < fmt.Sprint(b.Interface()) + }, + } -func (s mapKeys) Len() int { return len(s) } -func (s mapKeys) Swap(i, j int) { s[i], s[j] = s[j], s[i] } -func (s mapKeys) Less(i, j int) bool { - return fmt.Sprint(s[i].Interface()) < fmt.Sprint(s[j].Interface()) + // Type specialization per https://developers.google.com/protocol-buffers/docs/proto#maps; + // numeric keys are sorted numerically. + if len(vs) == 0 { + return s + } + switch vs[0].Kind() { + case reflect.Int32, reflect.Int64: + s.less = func(a, b reflect.Value) bool { return a.Int() < b.Int() } + case reflect.Uint32, reflect.Uint64: + s.less = func(a, b reflect.Value) bool { return a.Uint() < b.Uint() } + } + + return s } + +type mapKeySorter struct { + vs []reflect.Value + less func(a, b reflect.Value) bool +} + +func (s mapKeySorter) Len() int { return len(s.vs) } +func (s mapKeySorter) Swap(i, j int) { s.vs[i], s.vs[j] = s.vs[j], s.vs[i] } +func (s mapKeySorter) Less(i, j int) bool { + return s.less(s.vs[i], s.vs[j]) +} + +// isProto3Zero reports whether v is a zero proto3 value. +func isProto3Zero(v reflect.Value) bool { + switch v.Kind() { + case reflect.Bool: + return !v.Bool() + case reflect.Int32, reflect.Int64: + return v.Int() == 0 + case reflect.Uint32, reflect.Uint64: + return v.Uint() == 0 + case reflect.Float32, reflect.Float64: + return v.Float() == 0 + case reflect.String: + return v.String() == "" + } + return false +} + +// ProtoPackageIsVersion2 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const ProtoPackageIsVersion2 = true + +// ProtoPackageIsVersion1 is referenced from generated protocol buffer files +// to assert that that code is compatible with this version of the proto package. +const ProtoPackageIsVersion1 = true diff --git a/vendor/github.com/golang/protobuf/proto/map_test.go b/vendor/github.com/golang/protobuf/proto/map_test.go new file mode 100644 index 0000000..313e879 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/map_test.go @@ -0,0 +1,46 @@ +package proto_test + +import ( + "fmt" + "testing" + + "github.com/golang/protobuf/proto" + ppb "github.com/golang/protobuf/proto/proto3_proto" +) + +func marshalled() []byte { + m := &ppb.IntMaps{} + for i := 0; i < 1000; i++ { + m.Maps = append(m.Maps, &ppb.IntMap{ + Rtt: map[int32]int32{1: 2}, + }) + } + b, err := proto.Marshal(m) + if err != nil { + panic(fmt.Sprintf("Can't marshal %+v: %v", m, err)) + } + return b +} + +func BenchmarkConcurrentMapUnmarshal(b *testing.B) { + in := marshalled() + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + var out ppb.IntMaps + if err := proto.Unmarshal(in, &out); err != nil { + b.Errorf("Can't unmarshal ppb.IntMaps: %v", err) + } + } + }) +} + +func BenchmarkSequentialMapUnmarshal(b *testing.B) { + in := marshalled() + b.ResetTimer() + for i := 0; i < b.N; i++ { + var out ppb.IntMaps + if err := proto.Unmarshal(in, &out); err != nil { + b.Errorf("Can't unmarshal ppb.IntMaps: %v", err) + } + } +} diff --git a/vendor/github.com/golang/protobuf/proto/message_set.go b/vendor/github.com/golang/protobuf/proto/message_set.go index 9d912bc..fd982de 100644 --- a/vendor/github.com/golang/protobuf/proto/message_set.go +++ b/vendor/github.com/golang/protobuf/proto/message_set.go @@ -44,11 +44,11 @@ import ( "sort" ) -// ErrNoMessageTypeId occurs when a protocol buffer does not have a message type ID. +// errNoMessageTypeID occurs when a protocol buffer does not have a message type ID. // A message type ID is required for storing a protocol buffer in a message set. -var ErrNoMessageTypeId = errors.New("proto does not have a message type ID") +var errNoMessageTypeID = errors.New("proto does not have a message type ID") -// The first two types (_MessageSet_Item and MessageSet) +// The first two types (_MessageSet_Item and messageSet) // model what the protocol compiler produces for the following protocol message: // message MessageSet { // repeated group Item = 1 { @@ -58,27 +58,20 @@ var ErrNoMessageTypeId = errors.New("proto does not have a message type ID") // } // That is the MessageSet wire format. We can't use a proto to generate these // because that would introduce a circular dependency between it and this package. -// -// When a proto1 proto has a field that looks like: -// optional message info = 3; -// the protocol compiler produces a field in the generated struct that looks like: -// Info *_proto_.MessageSet `protobuf:"bytes,3,opt,name=info"` -// The package is automatically inserted so there is no need for that proto file to -// import this package. type _MessageSet_Item struct { TypeId *int32 `protobuf:"varint,2,req,name=type_id"` Message []byte `protobuf:"bytes,3,req,name=message"` } -type MessageSet struct { +type messageSet struct { Item []*_MessageSet_Item `protobuf:"group,1,rep"` XXX_unrecognized []byte // TODO: caching? } -// Make sure MessageSet is a Message. -var _ Message = (*MessageSet)(nil) +// Make sure messageSet is a Message. +var _ Message = (*messageSet)(nil) // messageTypeIder is an interface satisfied by a protocol buffer type // that may be stored in a MessageSet. @@ -86,7 +79,7 @@ type messageTypeIder interface { MessageTypeId() int32 } -func (ms *MessageSet) find(pb Message) *_MessageSet_Item { +func (ms *messageSet) find(pb Message) *_MessageSet_Item { mti, ok := pb.(messageTypeIder) if !ok { return nil @@ -100,24 +93,24 @@ func (ms *MessageSet) find(pb Message) *_MessageSet_Item { return nil } -func (ms *MessageSet) Has(pb Message) bool { +func (ms *messageSet) Has(pb Message) bool { if ms.find(pb) != nil { return true } return false } -func (ms *MessageSet) Unmarshal(pb Message) error { +func (ms *messageSet) Unmarshal(pb Message) error { if item := ms.find(pb); item != nil { return Unmarshal(item.Message, pb) } if _, ok := pb.(messageTypeIder); !ok { - return ErrNoMessageTypeId + return errNoMessageTypeID } return nil // TODO: return error instead? } -func (ms *MessageSet) Marshal(pb Message) error { +func (ms *messageSet) Marshal(pb Message) error { msg, err := Marshal(pb) if err != nil { return err @@ -130,7 +123,7 @@ func (ms *MessageSet) Marshal(pb Message) error { mti, ok := pb.(messageTypeIder) if !ok { - return ErrNoMessageTypeId + return errNoMessageTypeID } mtid := mti.MessageTypeId() @@ -141,9 +134,9 @@ func (ms *MessageSet) Marshal(pb Message) error { return nil } -func (ms *MessageSet) Reset() { *ms = MessageSet{} } -func (ms *MessageSet) String() string { return CompactTextString(ms) } -func (*MessageSet) ProtoMessage() {} +func (ms *messageSet) Reset() { *ms = messageSet{} } +func (ms *messageSet) String() string { return CompactTextString(ms) } +func (*messageSet) ProtoMessage() {} // Support for the message_set_wire_format message option. @@ -156,9 +149,21 @@ func skipVarint(buf []byte) []byte { // MarshalMessageSet encodes the extension map represented by m in the message set wire format. // It is called by generated Marshal methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { - if err := encodeExtensionMap(m); err != nil { - return nil, err +func MarshalMessageSet(exts interface{}) ([]byte, error) { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + if err := encodeExtensions(exts); err != nil { + return nil, err + } + m, _ = exts.extensionsRead() + case map[int32]Extension: + if err := encodeExtensionsMap(exts); err != nil { + return nil, err + } + m = exts + default: + return nil, errors.New("proto: not an extension map") } // Sort extension IDs to provide a deterministic encoding. @@ -169,7 +174,7 @@ func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { } sort.Ints(ids) - ms := &MessageSet{Item: make([]*_MessageSet_Item, 0, len(m))} + ms := &messageSet{Item: make([]*_MessageSet_Item, 0, len(m))} for _, id := range ids { e := m[int32(id)] // Remove the wire type and field number varint, as well as the length varint. @@ -185,8 +190,18 @@ func MarshalMessageSet(m map[int32]Extension) ([]byte, error) { // UnmarshalMessageSet decodes the extension map encoded in buf in the message set wire format. // It is called by generated Unmarshal methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSet(buf []byte, m map[int32]Extension) error { - ms := new(MessageSet) +func UnmarshalMessageSet(buf []byte, exts interface{}) error { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + m = exts.extensionsWrite() + case map[int32]Extension: + m = exts + default: + return errors.New("proto: not an extension map") + } + + ms := new(messageSet) if err := Unmarshal(buf, ms); err != nil { return err } @@ -216,7 +231,16 @@ func UnmarshalMessageSet(buf []byte, m map[int32]Extension) error { // MarshalMessageSetJSON encodes the extension map represented by m in JSON format. // It is called by generated MarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func MarshalMessageSetJSON(m map[int32]Extension) ([]byte, error) { +func MarshalMessageSetJSON(exts interface{}) ([]byte, error) { + var m map[int32]Extension + switch exts := exts.(type) { + case *XXX_InternalExtensions: + m, _ = exts.extensionsRead() + case map[int32]Extension: + m = exts + default: + return nil, errors.New("proto: not an extension map") + } var b bytes.Buffer b.WriteByte('{') @@ -259,7 +283,7 @@ func MarshalMessageSetJSON(m map[int32]Extension) ([]byte, error) { // UnmarshalMessageSetJSON decodes the extension map encoded in buf in JSON format. // It is called by generated UnmarshalJSON methods on protocol buffer messages with the message_set_wire_format option. -func UnmarshalMessageSetJSON(buf []byte, m map[int32]Extension) error { +func UnmarshalMessageSetJSON(buf []byte, exts interface{}) error { // Common-case fast path. if len(buf) == 0 || bytes.Equal(buf, []byte("{}")) { return nil diff --git a/vendor/github.com/golang/protobuf/proto/message_set_test.go b/vendor/github.com/golang/protobuf/proto/message_set_test.go index 7c29bcc..353a3ea 100644 --- a/vendor/github.com/golang/protobuf/proto/message_set_test.go +++ b/vendor/github.com/golang/protobuf/proto/message_set_test.go @@ -38,7 +38,7 @@ import ( func TestUnmarshalMessageSetWithDuplicate(t *testing.T) { // Check that a repeated message set entry will be concatenated. - in := &MessageSet{ + in := &messageSet{ Item: []*_MessageSet_Item{ {TypeId: Int32(12345), Message: []byte("hoo")}, {TypeId: Int32(12345), Message: []byte("hah")}, @@ -50,13 +50,13 @@ func TestUnmarshalMessageSetWithDuplicate(t *testing.T) { } t.Logf("Marshaled bytes: %q", b) - m := make(map[int32]Extension) - if err := UnmarshalMessageSet(b, m); err != nil { + var extensions XXX_InternalExtensions + if err := UnmarshalMessageSet(b, &extensions); err != nil { t.Fatalf("UnmarshalMessageSet: %v", err) } - ext, ok := m[12345] + ext, ok := extensions.p.extensionMap[12345] if !ok { - t.Fatalf("Didn't retrieve extension 12345; map is %v", m) + t.Fatalf("Didn't retrieve extension 12345; map is %v", extensions.p.extensionMap) } // Skip wire type/field number and length varints. got := skipVarint(skipVarint(ext.enc)) diff --git a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go index c68b125..fb512e2 100644 --- a/vendor/github.com/golang/protobuf/proto/pointer_reflect.go +++ b/vendor/github.com/golang/protobuf/proto/pointer_reflect.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build appengine +// +build appengine js // This file contains an implementation of proto field accesses using package reflect. // It is slower than the code in pointer_unsafe.go but it avoids package unsafe and can @@ -139,13 +139,18 @@ func structPointer_StringSlice(p structPointer, f field) *[]string { return structPointer_ifield(p, f).(*[]string) } +// Extensions returns the address of an extension map field in the struct. +func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { + return structPointer_ifield(p, f).(*XXX_InternalExtensions) +} + // ExtMap returns the address of an extension map field in the struct. func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { return structPointer_ifield(p, f).(*map[int32]Extension) } -// Map returns the reflect.Value for the address of a map field in the struct. -func structPointer_Map(p structPointer, f field, typ reflect.Type) reflect.Value { +// NewAt returns the reflect.Value for a pointer to a field in the struct. +func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value { return structPointer_field(p, f).Addr() } diff --git a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go index 48bc0fa..6b5567d 100644 --- a/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go +++ b/vendor/github.com/golang/protobuf/proto/pointer_unsafe.go @@ -29,7 +29,7 @@ // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +build !appengine +// +build !appengine,!js // This file contains the implementation of the proto field accesses using package unsafe. @@ -126,12 +126,16 @@ func structPointer_StringSlice(p structPointer, f field) *[]string { } // ExtMap returns the address of an extension map field in the struct. +func structPointer_Extensions(p structPointer, f field) *XXX_InternalExtensions { + return (*XXX_InternalExtensions)(unsafe.Pointer(uintptr(p) + uintptr(f))) +} + func structPointer_ExtMap(p structPointer, f field) *map[int32]Extension { return (*map[int32]Extension)(unsafe.Pointer(uintptr(p) + uintptr(f))) } -// Map returns the reflect.Value for the address of a map field in the struct. -func structPointer_Map(p structPointer, f field, typ reflect.Type) reflect.Value { +// NewAt returns the reflect.Value for a pointer to a field in the struct. +func structPointer_NewAt(p structPointer, f field, typ reflect.Type) reflect.Value { return reflect.NewAt(typ, unsafe.Pointer(uintptr(p)+uintptr(f))) } diff --git a/vendor/github.com/golang/protobuf/proto/properties.go b/vendor/github.com/golang/protobuf/proto/properties.go index d74844a..ec2289c 100644 --- a/vendor/github.com/golang/protobuf/proto/properties.go +++ b/vendor/github.com/golang/protobuf/proto/properties.go @@ -37,6 +37,7 @@ package proto import ( "fmt" + "log" "os" "reflect" "sort" @@ -84,6 +85,15 @@ type decoder func(p *Buffer, prop *Properties, base structPointer) error // A valueDecoder decodes a single integer in a particular encoding. type valueDecoder func(o *Buffer) (x uint64, err error) +// A oneofMarshaler does the marshaling for all oneof fields in a message. +type oneofMarshaler func(Message, *Buffer) error + +// A oneofUnmarshaler does the unmarshaling for a oneof field in a message. +type oneofUnmarshaler func(Message, int, int, *Buffer) (bool, error) + +// A oneofSizer does the sizing for all oneof fields in a message. +type oneofSizer func(Message) int + // tagMap is an optimization over map[int]int for typical protocol buffer // use-cases. Encoded protocol buffers are often in tag order with small tag // numbers. @@ -132,6 +142,22 @@ type StructProperties struct { order []int // list of struct field numbers in tag order unrecField field // field id of the XXX_unrecognized []byte field extendable bool // is this an extendable proto + + oneofMarshaler oneofMarshaler + oneofUnmarshaler oneofUnmarshaler + oneofSizer oneofSizer + stype reflect.Type + + // OneofTypes contains information about the oneof fields in this message. + // It is keyed by the original name of a field. + OneofTypes map[string]*OneofProperties +} + +// OneofProperties represents information about a specific field in a oneof. +type OneofProperties struct { + Type reflect.Type // pointer to generated struct type for this oneof field + Field int // struct field number of the containing oneof in the message + Prop *Properties } // Implement the sorting interface so we can sort the fields in tag order, as recommended by the spec. @@ -147,6 +173,7 @@ func (sp *StructProperties) Swap(i, j int) { sp.order[i], sp.order[j] = sp.order type Properties struct { Name string // name of the field, for error messages OrigName string // original name before protocol compiler (always set) + JSONName string // name to use for JSON; determined by protoc Wire string WireType int Tag int @@ -156,6 +183,7 @@ type Properties struct { Packed bool // relevant for repeated primitives only Enum string // set for enum types only proto3 bool // whether this is known to be a proto3 field; set for []byte only + oneof bool // whether this is a oneof field Default string // default value HasDefault bool // whether an explicit default was provided @@ -202,12 +230,16 @@ func (p *Properties) String() string { if p.Packed { s += ",packed" } - if p.OrigName != p.Name { - s += ",name=" + p.OrigName + s += ",name=" + p.OrigName + if p.JSONName != p.OrigName { + s += ",json=" + p.JSONName } if p.proto3 { s += ",proto3" } + if p.oneof { + s += ",oneof" + } if len(p.Enum) > 0 { s += ",enum=" + p.Enum } @@ -280,10 +312,14 @@ func (p *Properties) Parse(s string) { p.Packed = true case strings.HasPrefix(f, "name="): p.OrigName = f[5:] + case strings.HasPrefix(f, "json="): + p.JSONName = f[5:] case strings.HasPrefix(f, "enum="): p.Enum = f[5:] case f == "proto3": p.proto3 = true + case f == "oneof": + p.oneof = true case strings.HasPrefix(f, "def="): p.HasDefault = true p.Default = f[4:] // rest of string @@ -437,17 +473,13 @@ func (p *Properties) setEncAndDec(typ reflect.Type, f *reflect.StructField, lock p.dec = (*Buffer).dec_slice_int64 p.packedDec = (*Buffer).dec_slice_packed_int64 case reflect.Uint8: - p.enc = (*Buffer).enc_slice_byte p.dec = (*Buffer).dec_slice_byte - p.size = size_slice_byte - // This is a []byte, which is either a bytes field, - // or the value of a map field. In the latter case, - // we always encode an empty []byte, so we should not - // use the proto3 enc/size funcs. - // f == nil iff this is the key/value of a map field. - if p.proto3 && f != nil { + if p.proto3 { p.enc = (*Buffer).enc_proto3_slice_byte p.size = size_proto3_slice_byte + } else { + p.enc = (*Buffer).enc_slice_byte + p.size = size_slice_byte } case reflect.Float32, reflect.Float64: switch t2.Bits() { @@ -646,7 +678,8 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { propertiesMap[t] = prop // build properties - prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) + prop.extendable = reflect.PtrTo(t).Implements(extendableProtoType) || + reflect.PtrTo(t).Implements(extendableProtoV1Type) prop.unrecField = invalidField prop.Prop = make([]*Properties, t.NumField()) prop.order = make([]int, t.NumField()) @@ -657,14 +690,22 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { name := f.Name p.init(f.Type, name, f.Tag.Get("protobuf"), &f, false) - if f.Name == "XXX_extensions" { // special case + if f.Name == "XXX_InternalExtensions" { // special case + p.enc = (*Buffer).enc_exts + p.dec = nil // not needed + p.size = size_exts + } else if f.Name == "XXX_extensions" { // special case p.enc = (*Buffer).enc_map p.dec = nil // not needed p.size = size_map - } - if f.Name == "XXX_unrecognized" { // special case + } else if f.Name == "XXX_unrecognized" { // special case prop.unrecField = toField(&f) } + oneof := f.Tag.Get("protobuf_oneof") // special case + if oneof != "" { + // Oneof fields don't use the traditional protobuf tag. + p.OrigName = oneof + } prop.Prop[i] = p prop.order[i] = i if debug { @@ -674,7 +715,7 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { } print("\n") } - if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") { + if p.enc == nil && !strings.HasPrefix(f.Name, "XXX_") && oneof == "" { fmt.Fprintln(os.Stderr, "proto: no encoder for", f.Name, f.Type.String(), "[GetProperties]") } } @@ -682,6 +723,41 @@ func getPropertiesLocked(t reflect.Type) *StructProperties { // Re-order prop.order. sort.Sort(prop) + type oneofMessage interface { + XXX_OneofFuncs() (func(Message, *Buffer) error, func(Message, int, int, *Buffer) (bool, error), func(Message) int, []interface{}) + } + if om, ok := reflect.Zero(reflect.PtrTo(t)).Interface().(oneofMessage); ok { + var oots []interface{} + prop.oneofMarshaler, prop.oneofUnmarshaler, prop.oneofSizer, oots = om.XXX_OneofFuncs() + prop.stype = t + + // Interpret oneof metadata. + prop.OneofTypes = make(map[string]*OneofProperties) + for _, oot := range oots { + oop := &OneofProperties{ + Type: reflect.ValueOf(oot).Type(), // *T + Prop: new(Properties), + } + sft := oop.Type.Elem().Field(0) + oop.Prop.Name = sft.Name + oop.Prop.Parse(sft.Tag.Get("protobuf")) + // There will be exactly one interface field that + // this new value is assignable to. + for i := 0; i < t.NumField(); i++ { + f := t.Field(i) + if f.Type.Kind() != reflect.Interface { + continue + } + if !oop.Type.AssignableTo(f.Type) { + continue + } + oop.Field = i + break + } + prop.OneofTypes[oop.Prop.OrigName] = oop + } + } + // build required counts // build tags reqCount := 0 @@ -740,3 +816,57 @@ func RegisterEnum(typeName string, unusedNameMap map[int32]string, valueMap map[ } enumValueMaps[typeName] = valueMap } + +// EnumValueMap returns the mapping from names to integers of the +// enum type enumType, or a nil if not found. +func EnumValueMap(enumType string) map[string]int32 { + return enumValueMaps[enumType] +} + +// A registry of all linked message types. +// The string is a fully-qualified proto name ("pkg.Message"). +var ( + protoTypes = make(map[string]reflect.Type) + revProtoTypes = make(map[reflect.Type]string) +) + +// RegisterType is called from generated code and maps from the fully qualified +// proto name to the type (pointer to struct) of the protocol buffer. +func RegisterType(x Message, name string) { + if _, ok := protoTypes[name]; ok { + // TODO: Some day, make this a panic. + log.Printf("proto: duplicate proto type registered: %s", name) + return + } + t := reflect.TypeOf(x) + protoTypes[name] = t + revProtoTypes[t] = name +} + +// MessageName returns the fully-qualified proto name for the given message type. +func MessageName(x Message) string { + type xname interface { + XXX_MessageName() string + } + if m, ok := x.(xname); ok { + return m.XXX_MessageName() + } + return revProtoTypes[reflect.TypeOf(x)] +} + +// MessageType returns the message type (pointer to struct) for a named message. +func MessageType(name string) reflect.Type { return protoTypes[name] } + +// A registry of all linked proto files. +var ( + protoFiles = make(map[string][]byte) // file name => fileDescriptor +) + +// RegisterFile is called from generated code and maps from the +// full file name of a .proto file to its compressed FileDescriptorProto. +func RegisterFile(filename string, fileDescriptor []byte) { + protoFiles[filename] = fileDescriptor +} + +// FileDescriptor returns the compressed FileDescriptorProto for a .proto file. +func FileDescriptor(filename string) []byte { return protoFiles[filename] } diff --git a/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go b/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go index 37c7782..cc4d048 100644 --- a/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go +++ b/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.pb.go @@ -12,14 +12,27 @@ It has these top-level messages: Message Nested MessageWithMap + IntMap + IntMaps */ package proto3_proto import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/golang/protobuf/ptypes/any" import testdata "github.com/golang/protobuf/proto/testdata" // 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 Message_Humour int32 @@ -46,25 +59,96 @@ var Message_Humour_value = map[string]int32{ func (x Message_Humour) String() string { return proto.EnumName(Message_Humour_name, int32(x)) } +func (Message_Humour) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } type Message struct { Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` Hilarity Message_Humour `protobuf:"varint,2,opt,name=hilarity,enum=proto3_proto.Message_Humour" json:"hilarity,omitempty"` - HeightInCm uint32 `protobuf:"varint,3,opt,name=height_in_cm" json:"height_in_cm,omitempty"` + HeightInCm uint32 `protobuf:"varint,3,opt,name=height_in_cm,json=heightInCm" json:"height_in_cm,omitempty"` Data []byte `protobuf:"bytes,4,opt,name=data,proto3" json:"data,omitempty"` - ResultCount int64 `protobuf:"varint,7,opt,name=result_count" json:"result_count,omitempty"` - TrueScotsman bool `protobuf:"varint,8,opt,name=true_scotsman" json:"true_scotsman,omitempty"` + ResultCount int64 `protobuf:"varint,7,opt,name=result_count,json=resultCount" json:"result_count,omitempty"` + TrueScotsman bool `protobuf:"varint,8,opt,name=true_scotsman,json=trueScotsman" json:"true_scotsman,omitempty"` Score float32 `protobuf:"fixed32,9,opt,name=score" json:"score,omitempty"` - Key []uint64 `protobuf:"varint,5,rep,name=key" json:"key,omitempty"` + Key []uint64 `protobuf:"varint,5,rep,packed,name=key" json:"key,omitempty"` + ShortKey []int32 `protobuf:"varint,19,rep,packed,name=short_key,json=shortKey" json:"short_key,omitempty"` Nested *Nested `protobuf:"bytes,6,opt,name=nested" json:"nested,omitempty"` + RFunny []Message_Humour `protobuf:"varint,16,rep,packed,name=r_funny,json=rFunny,enum=proto3_proto.Message_Humour" json:"r_funny,omitempty"` Terrain map[string]*Nested `protobuf:"bytes,10,rep,name=terrain" json:"terrain,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` - Proto2Field *testdata.SubDefaults `protobuf:"bytes,11,opt,name=proto2_field" json:"proto2_field,omitempty"` - Proto2Value map[string]*testdata.SubDefaults `protobuf:"bytes,13,rep,name=proto2_value" json:"proto2_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Proto2Field *testdata.SubDefaults `protobuf:"bytes,11,opt,name=proto2_field,json=proto2Field" json:"proto2_field,omitempty"` + Proto2Value map[string]*testdata.SubDefaults `protobuf:"bytes,13,rep,name=proto2_value,json=proto2Value" json:"proto2_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Anything *google_protobuf.Any `protobuf:"bytes,14,opt,name=anything" json:"anything,omitempty"` + ManyThings []*google_protobuf.Any `protobuf:"bytes,15,rep,name=many_things,json=manyThings" json:"many_things,omitempty"` + Submessage *Message `protobuf:"bytes,17,opt,name=submessage" json:"submessage,omitempty"` + Children []*Message `protobuf:"bytes,18,rep,name=children" json:"children,omitempty"` } -func (m *Message) Reset() { *m = Message{} } -func (m *Message) String() string { return proto.CompactTextString(m) } -func (*Message) ProtoMessage() {} +func (m *Message) Reset() { *m = Message{} } +func (m *Message) String() string { return proto.CompactTextString(m) } +func (*Message) ProtoMessage() {} +func (*Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Message) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Message) GetHilarity() Message_Humour { + if m != nil { + return m.Hilarity + } + return Message_UNKNOWN +} + +func (m *Message) GetHeightInCm() uint32 { + if m != nil { + return m.HeightInCm + } + return 0 +} + +func (m *Message) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +func (m *Message) GetResultCount() int64 { + if m != nil { + return m.ResultCount + } + return 0 +} + +func (m *Message) GetTrueScotsman() bool { + if m != nil { + return m.TrueScotsman + } + return false +} + +func (m *Message) GetScore() float32 { + if m != nil { + return m.Score + } + return 0 +} + +func (m *Message) GetKey() []uint64 { + if m != nil { + return m.Key + } + return nil +} + +func (m *Message) GetShortKey() []int32 { + if m != nil { + return m.ShortKey + } + return nil +} func (m *Message) GetNested() *Nested { if m != nil { @@ -73,6 +157,13 @@ func (m *Message) GetNested() *Nested { return nil } +func (m *Message) GetRFunny() []Message_Humour { + if m != nil { + return m.RFunny + } + return nil +} + func (m *Message) GetTerrain() map[string]*Nested { if m != nil { return m.Terrain @@ -94,21 +185,66 @@ func (m *Message) GetProto2Value() map[string]*testdata.SubDefaults { return nil } +func (m *Message) GetAnything() *google_protobuf.Any { + if m != nil { + return m.Anything + } + return nil +} + +func (m *Message) GetManyThings() []*google_protobuf.Any { + if m != nil { + return m.ManyThings + } + return nil +} + +func (m *Message) GetSubmessage() *Message { + if m != nil { + return m.Submessage + } + return nil +} + +func (m *Message) GetChildren() []*Message { + if m != nil { + return m.Children + } + return nil +} + type Nested struct { Bunny string `protobuf:"bytes,1,opt,name=bunny" json:"bunny,omitempty"` + Cute bool `protobuf:"varint,2,opt,name=cute" json:"cute,omitempty"` } -func (m *Nested) Reset() { *m = Nested{} } -func (m *Nested) String() string { return proto.CompactTextString(m) } -func (*Nested) ProtoMessage() {} +func (m *Nested) Reset() { *m = Nested{} } +func (m *Nested) String() string { return proto.CompactTextString(m) } +func (*Nested) ProtoMessage() {} +func (*Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *Nested) GetBunny() string { + if m != nil { + return m.Bunny + } + return "" +} + +func (m *Nested) GetCute() bool { + if m != nil { + return m.Cute + } + return false +} type MessageWithMap struct { - ByteMapping map[bool][]byte `protobuf:"bytes,1,rep,name=byte_mapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"` + ByteMapping map[bool][]byte `protobuf:"bytes,1,rep,name=byte_mapping,json=byteMapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value,proto3"` } -func (m *MessageWithMap) Reset() { *m = MessageWithMap{} } -func (m *MessageWithMap) String() string { return proto.CompactTextString(m) } -func (*MessageWithMap) ProtoMessage() {} +func (m *MessageWithMap) Reset() { *m = MessageWithMap{} } +func (m *MessageWithMap) String() string { return proto.CompactTextString(m) } +func (*MessageWithMap) ProtoMessage() {} +func (*MessageWithMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } func (m *MessageWithMap) GetByteMapping() map[bool][]byte { if m != nil { @@ -117,6 +253,95 @@ func (m *MessageWithMap) GetByteMapping() map[bool][]byte { return nil } +type IntMap struct { + Rtt map[int32]int32 `protobuf:"bytes,1,rep,name=rtt" json:"rtt,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` +} + +func (m *IntMap) Reset() { *m = IntMap{} } +func (m *IntMap) String() string { return proto.CompactTextString(m) } +func (*IntMap) ProtoMessage() {} +func (*IntMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *IntMap) GetRtt() map[int32]int32 { + if m != nil { + return m.Rtt + } + return nil +} + +type IntMaps struct { + Maps []*IntMap `protobuf:"bytes,1,rep,name=maps" json:"maps,omitempty"` +} + +func (m *IntMaps) Reset() { *m = IntMaps{} } +func (m *IntMaps) String() string { return proto.CompactTextString(m) } +func (*IntMaps) ProtoMessage() {} +func (*IntMaps) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *IntMaps) GetMaps() []*IntMap { + if m != nil { + return m.Maps + } + return nil +} + func init() { + proto.RegisterType((*Message)(nil), "proto3_proto.Message") + proto.RegisterType((*Nested)(nil), "proto3_proto.Nested") + proto.RegisterType((*MessageWithMap)(nil), "proto3_proto.MessageWithMap") + proto.RegisterType((*IntMap)(nil), "proto3_proto.IntMap") + proto.RegisterType((*IntMaps)(nil), "proto3_proto.IntMaps") proto.RegisterEnum("proto3_proto.Message_Humour", Message_Humour_name, Message_Humour_value) } + +func init() { proto.RegisterFile("proto3_proto/proto3.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 733 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x84, 0x53, 0x6d, 0x6f, 0xf3, 0x34, + 0x14, 0x25, 0x4d, 0x5f, 0xd2, 0x9b, 0x74, 0x0b, 0x5e, 0x91, 0xbc, 0x02, 0x52, 0x28, 0x12, 0x8a, + 0x78, 0x49, 0xa1, 0xd3, 0xd0, 0x84, 0x10, 0x68, 0x1b, 0x9b, 0xa8, 0xd6, 0x95, 0xca, 0xdd, 0x98, + 0xf8, 0x14, 0xa5, 0xad, 0xdb, 0x46, 0x34, 0x4e, 0x49, 0x1c, 0xa4, 0xfc, 0x1d, 0xfe, 0x28, 0x8f, + 0x6c, 0xa7, 0x5d, 0x36, 0x65, 0xcf, 0xf3, 0x29, 0xf6, 0xf1, 0xb9, 0xf7, 0x9c, 0x1c, 0x5f, 0xc3, + 0xe9, 0x2e, 0x89, 0x79, 0x7c, 0xe6, 0xcb, 0xcf, 0x40, 0x6d, 0x3c, 0xf9, 0x41, 0x56, 0xf9, 0xa8, + 0x77, 0xba, 0x8e, 0xe3, 0xf5, 0x96, 0x2a, 0xca, 0x3c, 0x5b, 0x0d, 0x02, 0x96, 0x2b, 0x62, 0xef, + 0x84, 0xd3, 0x94, 0x2f, 0x03, 0x1e, 0x0c, 0xc4, 0x42, 0x81, 0xfd, 0xff, 0x5b, 0xd0, 0xba, 0xa7, + 0x69, 0x1a, 0xac, 0x29, 0x42, 0x50, 0x67, 0x41, 0x44, 0xb1, 0xe6, 0x68, 0x6e, 0x9b, 0xc8, 0x35, + 0xba, 0x00, 0x63, 0x13, 0x6e, 0x83, 0x24, 0xe4, 0x39, 0xae, 0x39, 0x9a, 0x7b, 0x34, 0xfc, 0xcc, + 0x2b, 0x0b, 0x7a, 0x45, 0xb1, 0xf7, 0x7b, 0x16, 0xc5, 0x59, 0x42, 0x0e, 0x6c, 0xe4, 0x80, 0xb5, + 0xa1, 0xe1, 0x7a, 0xc3, 0xfd, 0x90, 0xf9, 0x8b, 0x08, 0xeb, 0x8e, 0xe6, 0x76, 0x08, 0x28, 0x6c, + 0xc4, 0xae, 0x23, 0xa1, 0x27, 0xec, 0xe0, 0xba, 0xa3, 0xb9, 0x16, 0x91, 0x6b, 0xf4, 0x05, 0x58, + 0x09, 0x4d, 0xb3, 0x2d, 0xf7, 0x17, 0x71, 0xc6, 0x38, 0x6e, 0x39, 0x9a, 0xab, 0x13, 0x53, 0x61, + 0xd7, 0x02, 0x42, 0x5f, 0x42, 0x87, 0x27, 0x19, 0xf5, 0xd3, 0x45, 0xcc, 0xd3, 0x28, 0x60, 0xd8, + 0x70, 0x34, 0xd7, 0x20, 0x96, 0x00, 0x67, 0x05, 0x86, 0xba, 0xd0, 0x48, 0x17, 0x71, 0x42, 0x71, + 0xdb, 0xd1, 0xdc, 0x1a, 0x51, 0x1b, 0x64, 0x83, 0xfe, 0x37, 0xcd, 0x71, 0xc3, 0xd1, 0xdd, 0x3a, + 0x11, 0x4b, 0xf4, 0x29, 0xb4, 0xd3, 0x4d, 0x9c, 0x70, 0x5f, 0xe0, 0x27, 0x8e, 0xee, 0x36, 0x88, + 0x21, 0x81, 0x3b, 0x9a, 0xa3, 0x6f, 0xa1, 0xc9, 0x68, 0xca, 0xe9, 0x12, 0x37, 0x1d, 0xcd, 0x35, + 0x87, 0xdd, 0x97, 0xbf, 0x3e, 0x91, 0x67, 0xa4, 0xe0, 0xa0, 0x73, 0x68, 0x25, 0xfe, 0x2a, 0x63, + 0x2c, 0xc7, 0xb6, 0xa3, 0x7f, 0x30, 0xa9, 0x66, 0x72, 0x2b, 0xb8, 0xe8, 0x67, 0x68, 0x71, 0x9a, + 0x24, 0x41, 0xc8, 0x30, 0x38, 0xba, 0x6b, 0x0e, 0xfb, 0xd5, 0x65, 0x0f, 0x8a, 0x74, 0xc3, 0x78, + 0x92, 0x93, 0x7d, 0x09, 0xba, 0x00, 0x75, 0xff, 0x43, 0x7f, 0x15, 0xd2, 0xed, 0x12, 0x9b, 0xd2, + 0xe8, 0x27, 0xde, 0xfe, 0xae, 0xbd, 0x59, 0x36, 0xff, 0x8d, 0xae, 0x82, 0x6c, 0xcb, 0x53, 0x62, + 0x2a, 0xea, 0xad, 0x60, 0xa2, 0xd1, 0xa1, 0xf2, 0xdf, 0x60, 0x9b, 0x51, 0xdc, 0x91, 0xe2, 0x5f, + 0x55, 0x8b, 0x4f, 0x25, 0xf3, 0x4f, 0x41, 0x54, 0x06, 0x8a, 0x56, 0x12, 0x41, 0xdf, 0x83, 0x11, + 0xb0, 0x9c, 0x6f, 0x42, 0xb6, 0xc6, 0x47, 0x45, 0x52, 0x6a, 0x0e, 0xbd, 0xfd, 0x1c, 0x7a, 0x97, + 0x2c, 0x27, 0x07, 0x16, 0x3a, 0x07, 0x33, 0x0a, 0x58, 0xee, 0xcb, 0x5d, 0x8a, 0x8f, 0xa5, 0x76, + 0x75, 0x11, 0x08, 0xe2, 0x83, 0xe4, 0xa1, 0x73, 0x80, 0x34, 0x9b, 0x47, 0xca, 0x14, 0xfe, 0xb8, + 0xf8, 0xd7, 0x2a, 0xc7, 0xa4, 0x44, 0x44, 0x3f, 0x80, 0xb1, 0xd8, 0x84, 0xdb, 0x65, 0x42, 0x19, + 0x46, 0x52, 0xea, 0x8d, 0xa2, 0x03, 0xad, 0x37, 0x05, 0xab, 0x1c, 0xf8, 0x7e, 0x72, 0xd4, 0xd3, + 0x90, 0x93, 0xf3, 0x35, 0x34, 0x54, 0x70, 0xb5, 0xf7, 0xcc, 0x86, 0xa2, 0xfc, 0x54, 0xbb, 0xd0, + 0x7a, 0x8f, 0x60, 0xbf, 0x4e, 0xb1, 0xa2, 0xeb, 0x37, 0x2f, 0xbb, 0xbe, 0x71, 0x91, 0xcf, 0x6d, + 0xfb, 0xbf, 0x42, 0x53, 0x0d, 0x14, 0x32, 0xa1, 0xf5, 0x38, 0xb9, 0x9b, 0xfc, 0xf1, 0x34, 0xb1, + 0x3f, 0x42, 0x06, 0xd4, 0xa7, 0x8f, 0x93, 0x99, 0xad, 0xa1, 0x0e, 0xb4, 0x67, 0xe3, 0xcb, 0xe9, + 0xec, 0x61, 0x74, 0x7d, 0x67, 0xd7, 0xd0, 0x31, 0x98, 0x57, 0xa3, 0xf1, 0xd8, 0xbf, 0xba, 0x1c, + 0x8d, 0x6f, 0xfe, 0xb2, 0xf5, 0xfe, 0x10, 0x9a, 0xca, 0xac, 0x78, 0x33, 0x73, 0x39, 0xbe, 0xca, + 0x8f, 0xda, 0x88, 0x57, 0xba, 0xc8, 0xb8, 0x32, 0x64, 0x10, 0xb9, 0xee, 0xff, 0xa7, 0xc1, 0x51, + 0x91, 0xd9, 0x53, 0xc8, 0x37, 0xf7, 0xc1, 0x0e, 0x4d, 0xc1, 0x9a, 0xe7, 0x9c, 0xfa, 0x51, 0xb0, + 0xdb, 0x89, 0x39, 0xd0, 0x64, 0xce, 0xdf, 0x55, 0xe6, 0x5c, 0xd4, 0x78, 0x57, 0x39, 0xa7, 0xf7, + 0x8a, 0x5f, 0x4c, 0xd5, 0xfc, 0x19, 0xe9, 0xfd, 0x02, 0xf6, 0x6b, 0x42, 0x39, 0x30, 0x43, 0x05, + 0xd6, 0x2d, 0x07, 0x66, 0x95, 0x93, 0xf9, 0x07, 0x9a, 0x23, 0xc6, 0x85, 0xb7, 0x01, 0xe8, 0x09, + 0xe7, 0x85, 0xa5, 0xcf, 0x5f, 0x5a, 0x52, 0x14, 0x8f, 0x70, 0xae, 0x2c, 0x08, 0x66, 0xef, 0x47, + 0x30, 0xf6, 0x40, 0x59, 0xb2, 0x51, 0x21, 0xd9, 0x28, 0x4b, 0x9e, 0x41, 0x4b, 0xf5, 0x4b, 0x91, + 0x0b, 0xf5, 0x28, 0xd8, 0xa5, 0x85, 0x68, 0xb7, 0x4a, 0x94, 0x48, 0xc6, 0xbc, 0xa9, 0x8e, 0xde, + 0x05, 0x00, 0x00, 0xff, 0xff, 0x75, 0x38, 0xad, 0x84, 0xe4, 0x05, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto b/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto index e2311d9..2048655 100644 --- a/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto +++ b/vendor/github.com/golang/protobuf/proto/proto3_proto/proto3.proto @@ -31,6 +31,7 @@ syntax = "proto3"; +import "google/protobuf/any.proto"; import "testdata/test.proto"; package proto3_proto; @@ -52,17 +53,35 @@ message Message { float score = 9; repeated uint64 key = 5; + repeated int32 short_key = 19; Nested nested = 6; + repeated Humour r_funny = 16; map terrain = 10; testdata.SubDefaults proto2_field = 11; map proto2_value = 13; + + google.protobuf.Any anything = 14; + repeated google.protobuf.Any many_things = 15; + + Message submessage = 17; + repeated Message children = 18; } message Nested { string bunny = 1; + bool cute = 2; } message MessageWithMap { map byte_mapping = 1; } + + +message IntMap { + map rtt = 1; +} + +message IntMaps { + repeated IntMap maps = 1; +} diff --git a/vendor/github.com/golang/protobuf/proto/proto3_test.go b/vendor/github.com/golang/protobuf/proto/proto3_test.go index 462f805..735837f 100644 --- a/vendor/github.com/golang/protobuf/proto/proto3_test.go +++ b/vendor/github.com/golang/protobuf/proto/proto3_test.go @@ -93,6 +93,16 @@ func TestRoundTripProto3(t *testing.T) { } } +func TestGettersForBasicTypesExist(t *testing.T) { + var m pb.Message + if got := m.GetNested().GetBunny(); got != "" { + t.Errorf("m.GetNested().GetBunny() = %q, want empty string", got) + } + if got := m.GetNested().GetCute(); got { + t.Errorf("m.GetNested().GetCute() = %t, want false", got) + } +} + func TestProto3SetDefaults(t *testing.T) { in := &pb.Message{ Terrain: map[string]*pb.Nested{ diff --git a/vendor/github.com/golang/protobuf/proto/size_test.go b/vendor/github.com/golang/protobuf/proto/size_test.go index db5614f..af1034d 100644 --- a/vendor/github.com/golang/protobuf/proto/size_test.go +++ b/vendor/github.com/golang/protobuf/proto/size_test.go @@ -124,6 +124,28 @@ var SizeTests = []struct { {"map field with big entry", &pb.MessageWithMap{NameMapping: map[int32]string{8: strings.Repeat("x", 125)}}}, {"map field with big key and val", &pb.MessageWithMap{StrToStr: map[string]string{strings.Repeat("x", 70): strings.Repeat("y", 70)}}}, {"map field with big numeric key", &pb.MessageWithMap{NameMapping: map[int32]string{0xf00d: "om nom nom"}}}, + + {"oneof not set", &pb.Oneof{}}, + {"oneof bool", &pb.Oneof{Union: &pb.Oneof_F_Bool{true}}}, + {"oneof zero int32", &pb.Oneof{Union: &pb.Oneof_F_Int32{0}}}, + {"oneof big int32", &pb.Oneof{Union: &pb.Oneof_F_Int32{1 << 20}}}, + {"oneof int64", &pb.Oneof{Union: &pb.Oneof_F_Int64{42}}}, + {"oneof fixed32", &pb.Oneof{Union: &pb.Oneof_F_Fixed32{43}}}, + {"oneof fixed64", &pb.Oneof{Union: &pb.Oneof_F_Fixed64{44}}}, + {"oneof uint32", &pb.Oneof{Union: &pb.Oneof_F_Uint32{45}}}, + {"oneof uint64", &pb.Oneof{Union: &pb.Oneof_F_Uint64{46}}}, + {"oneof float", &pb.Oneof{Union: &pb.Oneof_F_Float{47.1}}}, + {"oneof double", &pb.Oneof{Union: &pb.Oneof_F_Double{48.9}}}, + {"oneof string", &pb.Oneof{Union: &pb.Oneof_F_String{"Rhythmic Fman"}}}, + {"oneof bytes", &pb.Oneof{Union: &pb.Oneof_F_Bytes{[]byte("let go")}}}, + {"oneof sint32", &pb.Oneof{Union: &pb.Oneof_F_Sint32{50}}}, + {"oneof sint64", &pb.Oneof{Union: &pb.Oneof_F_Sint64{51}}}, + {"oneof enum", &pb.Oneof{Union: &pb.Oneof_F_Enum{pb.MyMessage_BLUE}}}, + {"message for oneof", &pb.GoTestField{Label: String("k"), Type: String("v")}}, + {"oneof message", &pb.Oneof{Union: &pb.Oneof_F_Message{&pb.GoTestField{Label: String("k"), Type: String("v")}}}}, + {"oneof group", &pb.Oneof{Union: &pb.Oneof_FGroup{&pb.Oneof_F_Group{X: Int32(52)}}}}, + {"oneof largest tag", &pb.Oneof{Union: &pb.Oneof_F_Largest_Tag{1}}}, + {"multiple oneofs", &pb.Oneof{Union: &pb.Oneof_F_Int32{1}, Tormato: &pb.Oneof_Value{2}}}, } func TestSize(t *testing.T) { diff --git a/vendor/github.com/golang/protobuf/proto/testdata/Makefile b/vendor/github.com/golang/protobuf/proto/testdata/Makefile new file mode 100644 index 0000000..fc28862 --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/testdata/Makefile @@ -0,0 +1,50 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +include ../../Make.protobuf + +all: regenerate + +regenerate: + rm -f test.pb.go + make test.pb.go + +# The following rules are just aids to development. Not needed for typical testing. + +diff: regenerate + git diff test.pb.go + +restore: + cp test.pb.go.golden test.pb.go + +preserve: + cp test.pb.go test.pb.go.golden diff --git a/vendor/github.com/golang/protobuf/proto/testdata/golden_test.go b/vendor/github.com/golang/protobuf/proto/testdata/golden_test.go new file mode 100644 index 0000000..7172d0e --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/testdata/golden_test.go @@ -0,0 +1,86 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2012 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Verify that the compiler output for test.proto is unchanged. + +package testdata + +import ( + "crypto/sha1" + "fmt" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "testing" +) + +// sum returns in string form (for easy comparison) the SHA-1 hash of the named file. +func sum(t *testing.T, name string) string { + data, err := ioutil.ReadFile(name) + if err != nil { + t.Fatal(err) + } + t.Logf("sum(%q): length is %d", name, len(data)) + hash := sha1.New() + _, err = hash.Write(data) + if err != nil { + t.Fatal(err) + } + return fmt.Sprintf("% x", hash.Sum(nil)) +} + +func run(t *testing.T, name string, args ...string) { + cmd := exec.Command(name, args...) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err := cmd.Run() + if err != nil { + t.Fatal(err) + } +} + +func TestGolden(t *testing.T) { + // Compute the original checksum. + goldenSum := sum(t, "test.pb.go") + // Run the proto compiler. + run(t, "protoc", "--go_out="+os.TempDir(), "test.proto") + newFile := filepath.Join(os.TempDir(), "test.pb.go") + defer os.Remove(newFile) + // Compute the new checksum. + newSum := sum(t, newFile) + // Verify + if newSum != goldenSum { + run(t, "diff", "-u", "test.pb.go", newFile) + t.Fatal("Code generated by protoc-gen-go has changed; update test.pb.go") + } +} diff --git a/vendor/github.com/golang/protobuf/proto/testdata/test.pb.go b/vendor/github.com/golang/protobuf/proto/testdata/test.pb.go new file mode 100644 index 0000000..e980d1a --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/testdata/test.pb.go @@ -0,0 +1,4147 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: test.proto + +/* +Package testdata is a generated protocol buffer package. + +It is generated from these files: + test.proto + +It has these top-level messages: + GoEnum + GoTestField + GoTest + GoTestRequiredGroupField + GoSkipTest + NonPackedTest + PackedTest + MaxTag + OldMessage + NewMessage + InnerMessage + OtherMessage + RequiredInnerMessage + MyMessage + Ext + ComplexExtension + DefaultsMessage + MyMessageSet + Empty + MessageList + Strings + Defaults + SubDefaults + RepeatedEnum + MoreRepeated + GroupOld + GroupNew + FloatingPoint + MessageWithMap + Oneof + Communique +*/ +package testdata + +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 + +type FOO int32 + +const ( + FOO_FOO1 FOO = 1 +) + +var FOO_name = map[int32]string{ + 1: "FOO1", +} +var FOO_value = map[string]int32{ + "FOO1": 1, +} + +func (x FOO) Enum() *FOO { + p := new(FOO) + *p = x + return p +} +func (x FOO) String() string { + return proto.EnumName(FOO_name, int32(x)) +} +func (x *FOO) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FOO_value, data, "FOO") + if err != nil { + return err + } + *x = FOO(value) + return nil +} +func (FOO) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +// An enum, for completeness. +type GoTest_KIND int32 + +const ( + GoTest_VOID GoTest_KIND = 0 + // Basic types + GoTest_BOOL GoTest_KIND = 1 + GoTest_BYTES GoTest_KIND = 2 + GoTest_FINGERPRINT GoTest_KIND = 3 + GoTest_FLOAT GoTest_KIND = 4 + GoTest_INT GoTest_KIND = 5 + GoTest_STRING GoTest_KIND = 6 + GoTest_TIME GoTest_KIND = 7 + // Groupings + GoTest_TUPLE GoTest_KIND = 8 + GoTest_ARRAY GoTest_KIND = 9 + GoTest_MAP GoTest_KIND = 10 + // Table types + GoTest_TABLE GoTest_KIND = 11 + // Functions + GoTest_FUNCTION GoTest_KIND = 12 +) + +var GoTest_KIND_name = map[int32]string{ + 0: "VOID", + 1: "BOOL", + 2: "BYTES", + 3: "FINGERPRINT", + 4: "FLOAT", + 5: "INT", + 6: "STRING", + 7: "TIME", + 8: "TUPLE", + 9: "ARRAY", + 10: "MAP", + 11: "TABLE", + 12: "FUNCTION", +} +var GoTest_KIND_value = map[string]int32{ + "VOID": 0, + "BOOL": 1, + "BYTES": 2, + "FINGERPRINT": 3, + "FLOAT": 4, + "INT": 5, + "STRING": 6, + "TIME": 7, + "TUPLE": 8, + "ARRAY": 9, + "MAP": 10, + "TABLE": 11, + "FUNCTION": 12, +} + +func (x GoTest_KIND) Enum() *GoTest_KIND { + p := new(GoTest_KIND) + *p = x + return p +} +func (x GoTest_KIND) String() string { + return proto.EnumName(GoTest_KIND_name, int32(x)) +} +func (x *GoTest_KIND) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(GoTest_KIND_value, data, "GoTest_KIND") + if err != nil { + return err + } + *x = GoTest_KIND(value) + return nil +} +func (GoTest_KIND) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +type MyMessage_Color int32 + +const ( + MyMessage_RED MyMessage_Color = 0 + MyMessage_GREEN MyMessage_Color = 1 + MyMessage_BLUE MyMessage_Color = 2 +) + +var MyMessage_Color_name = map[int32]string{ + 0: "RED", + 1: "GREEN", + 2: "BLUE", +} +var MyMessage_Color_value = map[string]int32{ + "RED": 0, + "GREEN": 1, + "BLUE": 2, +} + +func (x MyMessage_Color) Enum() *MyMessage_Color { + p := new(MyMessage_Color) + *p = x + return p +} +func (x MyMessage_Color) String() string { + return proto.EnumName(MyMessage_Color_name, int32(x)) +} +func (x *MyMessage_Color) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(MyMessage_Color_value, data, "MyMessage_Color") + if err != nil { + return err + } + *x = MyMessage_Color(value) + return nil +} +func (MyMessage_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{13, 0} } + +type DefaultsMessage_DefaultsEnum int32 + +const ( + DefaultsMessage_ZERO DefaultsMessage_DefaultsEnum = 0 + DefaultsMessage_ONE DefaultsMessage_DefaultsEnum = 1 + DefaultsMessage_TWO DefaultsMessage_DefaultsEnum = 2 +) + +var DefaultsMessage_DefaultsEnum_name = map[int32]string{ + 0: "ZERO", + 1: "ONE", + 2: "TWO", +} +var DefaultsMessage_DefaultsEnum_value = map[string]int32{ + "ZERO": 0, + "ONE": 1, + "TWO": 2, +} + +func (x DefaultsMessage_DefaultsEnum) Enum() *DefaultsMessage_DefaultsEnum { + p := new(DefaultsMessage_DefaultsEnum) + *p = x + return p +} +func (x DefaultsMessage_DefaultsEnum) String() string { + return proto.EnumName(DefaultsMessage_DefaultsEnum_name, int32(x)) +} +func (x *DefaultsMessage_DefaultsEnum) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(DefaultsMessage_DefaultsEnum_value, data, "DefaultsMessage_DefaultsEnum") + if err != nil { + return err + } + *x = DefaultsMessage_DefaultsEnum(value) + return nil +} +func (DefaultsMessage_DefaultsEnum) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{16, 0} +} + +type Defaults_Color int32 + +const ( + Defaults_RED Defaults_Color = 0 + Defaults_GREEN Defaults_Color = 1 + Defaults_BLUE Defaults_Color = 2 +) + +var Defaults_Color_name = map[int32]string{ + 0: "RED", + 1: "GREEN", + 2: "BLUE", +} +var Defaults_Color_value = map[string]int32{ + "RED": 0, + "GREEN": 1, + "BLUE": 2, +} + +func (x Defaults_Color) Enum() *Defaults_Color { + p := new(Defaults_Color) + *p = x + return p +} +func (x Defaults_Color) String() string { + return proto.EnumName(Defaults_Color_name, int32(x)) +} +func (x *Defaults_Color) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Defaults_Color_value, data, "Defaults_Color") + if err != nil { + return err + } + *x = Defaults_Color(value) + return nil +} +func (Defaults_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{21, 0} } + +type RepeatedEnum_Color int32 + +const ( + RepeatedEnum_RED RepeatedEnum_Color = 1 +) + +var RepeatedEnum_Color_name = map[int32]string{ + 1: "RED", +} +var RepeatedEnum_Color_value = map[string]int32{ + "RED": 1, +} + +func (x RepeatedEnum_Color) Enum() *RepeatedEnum_Color { + p := new(RepeatedEnum_Color) + *p = x + return p +} +func (x RepeatedEnum_Color) String() string { + return proto.EnumName(RepeatedEnum_Color_name, int32(x)) +} +func (x *RepeatedEnum_Color) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(RepeatedEnum_Color_value, data, "RepeatedEnum_Color") + if err != nil { + return err + } + *x = RepeatedEnum_Color(value) + return nil +} +func (RepeatedEnum_Color) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{23, 0} } + +type GoEnum struct { + Foo *FOO `protobuf:"varint,1,req,name=foo,enum=testdata.FOO" json:"foo,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoEnum) Reset() { *m = GoEnum{} } +func (m *GoEnum) String() string { return proto.CompactTextString(m) } +func (*GoEnum) ProtoMessage() {} +func (*GoEnum) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *GoEnum) GetFoo() FOO { + if m != nil && m.Foo != nil { + return *m.Foo + } + return FOO_FOO1 +} + +type GoTestField struct { + Label *string `protobuf:"bytes,1,req,name=Label" json:"Label,omitempty"` + Type *string `protobuf:"bytes,2,req,name=Type" json:"Type,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoTestField) Reset() { *m = GoTestField{} } +func (m *GoTestField) String() string { return proto.CompactTextString(m) } +func (*GoTestField) ProtoMessage() {} +func (*GoTestField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *GoTestField) GetLabel() string { + if m != nil && m.Label != nil { + return *m.Label + } + return "" +} + +func (m *GoTestField) GetType() string { + if m != nil && m.Type != nil { + return *m.Type + } + return "" +} + +type GoTest struct { + // Some typical parameters + Kind *GoTest_KIND `protobuf:"varint,1,req,name=Kind,enum=testdata.GoTest_KIND" json:"Kind,omitempty"` + Table *string `protobuf:"bytes,2,opt,name=Table" json:"Table,omitempty"` + Param *int32 `protobuf:"varint,3,opt,name=Param" json:"Param,omitempty"` + // Required, repeated and optional foreign fields. + RequiredField *GoTestField `protobuf:"bytes,4,req,name=RequiredField" json:"RequiredField,omitempty"` + RepeatedField []*GoTestField `protobuf:"bytes,5,rep,name=RepeatedField" json:"RepeatedField,omitempty"` + OptionalField *GoTestField `protobuf:"bytes,6,opt,name=OptionalField" json:"OptionalField,omitempty"` + // Required fields of all basic types + F_BoolRequired *bool `protobuf:"varint,10,req,name=F_Bool_required,json=FBoolRequired" json:"F_Bool_required,omitempty"` + F_Int32Required *int32 `protobuf:"varint,11,req,name=F_Int32_required,json=FInt32Required" json:"F_Int32_required,omitempty"` + F_Int64Required *int64 `protobuf:"varint,12,req,name=F_Int64_required,json=FInt64Required" json:"F_Int64_required,omitempty"` + F_Fixed32Required *uint32 `protobuf:"fixed32,13,req,name=F_Fixed32_required,json=FFixed32Required" json:"F_Fixed32_required,omitempty"` + F_Fixed64Required *uint64 `protobuf:"fixed64,14,req,name=F_Fixed64_required,json=FFixed64Required" json:"F_Fixed64_required,omitempty"` + F_Uint32Required *uint32 `protobuf:"varint,15,req,name=F_Uint32_required,json=FUint32Required" json:"F_Uint32_required,omitempty"` + F_Uint64Required *uint64 `protobuf:"varint,16,req,name=F_Uint64_required,json=FUint64Required" json:"F_Uint64_required,omitempty"` + F_FloatRequired *float32 `protobuf:"fixed32,17,req,name=F_Float_required,json=FFloatRequired" json:"F_Float_required,omitempty"` + F_DoubleRequired *float64 `protobuf:"fixed64,18,req,name=F_Double_required,json=FDoubleRequired" json:"F_Double_required,omitempty"` + F_StringRequired *string `protobuf:"bytes,19,req,name=F_String_required,json=FStringRequired" json:"F_String_required,omitempty"` + F_BytesRequired []byte `protobuf:"bytes,101,req,name=F_Bytes_required,json=FBytesRequired" json:"F_Bytes_required,omitempty"` + F_Sint32Required *int32 `protobuf:"zigzag32,102,req,name=F_Sint32_required,json=FSint32Required" json:"F_Sint32_required,omitempty"` + F_Sint64Required *int64 `protobuf:"zigzag64,103,req,name=F_Sint64_required,json=FSint64Required" json:"F_Sint64_required,omitempty"` + // Repeated fields of all basic types + F_BoolRepeated []bool `protobuf:"varint,20,rep,name=F_Bool_repeated,json=FBoolRepeated" json:"F_Bool_repeated,omitempty"` + F_Int32Repeated []int32 `protobuf:"varint,21,rep,name=F_Int32_repeated,json=FInt32Repeated" json:"F_Int32_repeated,omitempty"` + F_Int64Repeated []int64 `protobuf:"varint,22,rep,name=F_Int64_repeated,json=FInt64Repeated" json:"F_Int64_repeated,omitempty"` + F_Fixed32Repeated []uint32 `protobuf:"fixed32,23,rep,name=F_Fixed32_repeated,json=FFixed32Repeated" json:"F_Fixed32_repeated,omitempty"` + F_Fixed64Repeated []uint64 `protobuf:"fixed64,24,rep,name=F_Fixed64_repeated,json=FFixed64Repeated" json:"F_Fixed64_repeated,omitempty"` + F_Uint32Repeated []uint32 `protobuf:"varint,25,rep,name=F_Uint32_repeated,json=FUint32Repeated" json:"F_Uint32_repeated,omitempty"` + F_Uint64Repeated []uint64 `protobuf:"varint,26,rep,name=F_Uint64_repeated,json=FUint64Repeated" json:"F_Uint64_repeated,omitempty"` + F_FloatRepeated []float32 `protobuf:"fixed32,27,rep,name=F_Float_repeated,json=FFloatRepeated" json:"F_Float_repeated,omitempty"` + F_DoubleRepeated []float64 `protobuf:"fixed64,28,rep,name=F_Double_repeated,json=FDoubleRepeated" json:"F_Double_repeated,omitempty"` + F_StringRepeated []string `protobuf:"bytes,29,rep,name=F_String_repeated,json=FStringRepeated" json:"F_String_repeated,omitempty"` + F_BytesRepeated [][]byte `protobuf:"bytes,201,rep,name=F_Bytes_repeated,json=FBytesRepeated" json:"F_Bytes_repeated,omitempty"` + F_Sint32Repeated []int32 `protobuf:"zigzag32,202,rep,name=F_Sint32_repeated,json=FSint32Repeated" json:"F_Sint32_repeated,omitempty"` + F_Sint64Repeated []int64 `protobuf:"zigzag64,203,rep,name=F_Sint64_repeated,json=FSint64Repeated" json:"F_Sint64_repeated,omitempty"` + // Optional fields of all basic types + F_BoolOptional *bool `protobuf:"varint,30,opt,name=F_Bool_optional,json=FBoolOptional" json:"F_Bool_optional,omitempty"` + F_Int32Optional *int32 `protobuf:"varint,31,opt,name=F_Int32_optional,json=FInt32Optional" json:"F_Int32_optional,omitempty"` + F_Int64Optional *int64 `protobuf:"varint,32,opt,name=F_Int64_optional,json=FInt64Optional" json:"F_Int64_optional,omitempty"` + F_Fixed32Optional *uint32 `protobuf:"fixed32,33,opt,name=F_Fixed32_optional,json=FFixed32Optional" json:"F_Fixed32_optional,omitempty"` + F_Fixed64Optional *uint64 `protobuf:"fixed64,34,opt,name=F_Fixed64_optional,json=FFixed64Optional" json:"F_Fixed64_optional,omitempty"` + F_Uint32Optional *uint32 `protobuf:"varint,35,opt,name=F_Uint32_optional,json=FUint32Optional" json:"F_Uint32_optional,omitempty"` + F_Uint64Optional *uint64 `protobuf:"varint,36,opt,name=F_Uint64_optional,json=FUint64Optional" json:"F_Uint64_optional,omitempty"` + F_FloatOptional *float32 `protobuf:"fixed32,37,opt,name=F_Float_optional,json=FFloatOptional" json:"F_Float_optional,omitempty"` + F_DoubleOptional *float64 `protobuf:"fixed64,38,opt,name=F_Double_optional,json=FDoubleOptional" json:"F_Double_optional,omitempty"` + F_StringOptional *string `protobuf:"bytes,39,opt,name=F_String_optional,json=FStringOptional" json:"F_String_optional,omitempty"` + F_BytesOptional []byte `protobuf:"bytes,301,opt,name=F_Bytes_optional,json=FBytesOptional" json:"F_Bytes_optional,omitempty"` + F_Sint32Optional *int32 `protobuf:"zigzag32,302,opt,name=F_Sint32_optional,json=FSint32Optional" json:"F_Sint32_optional,omitempty"` + F_Sint64Optional *int64 `protobuf:"zigzag64,303,opt,name=F_Sint64_optional,json=FSint64Optional" json:"F_Sint64_optional,omitempty"` + // Default-valued fields of all basic types + F_BoolDefaulted *bool `protobuf:"varint,40,opt,name=F_Bool_defaulted,json=FBoolDefaulted,def=1" json:"F_Bool_defaulted,omitempty"` + F_Int32Defaulted *int32 `protobuf:"varint,41,opt,name=F_Int32_defaulted,json=FInt32Defaulted,def=32" json:"F_Int32_defaulted,omitempty"` + F_Int64Defaulted *int64 `protobuf:"varint,42,opt,name=F_Int64_defaulted,json=FInt64Defaulted,def=64" json:"F_Int64_defaulted,omitempty"` + F_Fixed32Defaulted *uint32 `protobuf:"fixed32,43,opt,name=F_Fixed32_defaulted,json=FFixed32Defaulted,def=320" json:"F_Fixed32_defaulted,omitempty"` + F_Fixed64Defaulted *uint64 `protobuf:"fixed64,44,opt,name=F_Fixed64_defaulted,json=FFixed64Defaulted,def=640" json:"F_Fixed64_defaulted,omitempty"` + F_Uint32Defaulted *uint32 `protobuf:"varint,45,opt,name=F_Uint32_defaulted,json=FUint32Defaulted,def=3200" json:"F_Uint32_defaulted,omitempty"` + F_Uint64Defaulted *uint64 `protobuf:"varint,46,opt,name=F_Uint64_defaulted,json=FUint64Defaulted,def=6400" json:"F_Uint64_defaulted,omitempty"` + F_FloatDefaulted *float32 `protobuf:"fixed32,47,opt,name=F_Float_defaulted,json=FFloatDefaulted,def=314159" json:"F_Float_defaulted,omitempty"` + F_DoubleDefaulted *float64 `protobuf:"fixed64,48,opt,name=F_Double_defaulted,json=FDoubleDefaulted,def=271828" json:"F_Double_defaulted,omitempty"` + F_StringDefaulted *string `protobuf:"bytes,49,opt,name=F_String_defaulted,json=FStringDefaulted,def=hello, \"world!\"\n" json:"F_String_defaulted,omitempty"` + F_BytesDefaulted []byte `protobuf:"bytes,401,opt,name=F_Bytes_defaulted,json=FBytesDefaulted,def=Bignose" json:"F_Bytes_defaulted,omitempty"` + F_Sint32Defaulted *int32 `protobuf:"zigzag32,402,opt,name=F_Sint32_defaulted,json=FSint32Defaulted,def=-32" json:"F_Sint32_defaulted,omitempty"` + F_Sint64Defaulted *int64 `protobuf:"zigzag64,403,opt,name=F_Sint64_defaulted,json=FSint64Defaulted,def=-64" json:"F_Sint64_defaulted,omitempty"` + // Packed repeated fields (no string or bytes). + F_BoolRepeatedPacked []bool `protobuf:"varint,50,rep,packed,name=F_Bool_repeated_packed,json=FBoolRepeatedPacked" json:"F_Bool_repeated_packed,omitempty"` + F_Int32RepeatedPacked []int32 `protobuf:"varint,51,rep,packed,name=F_Int32_repeated_packed,json=FInt32RepeatedPacked" json:"F_Int32_repeated_packed,omitempty"` + F_Int64RepeatedPacked []int64 `protobuf:"varint,52,rep,packed,name=F_Int64_repeated_packed,json=FInt64RepeatedPacked" json:"F_Int64_repeated_packed,omitempty"` + F_Fixed32RepeatedPacked []uint32 `protobuf:"fixed32,53,rep,packed,name=F_Fixed32_repeated_packed,json=FFixed32RepeatedPacked" json:"F_Fixed32_repeated_packed,omitempty"` + F_Fixed64RepeatedPacked []uint64 `protobuf:"fixed64,54,rep,packed,name=F_Fixed64_repeated_packed,json=FFixed64RepeatedPacked" json:"F_Fixed64_repeated_packed,omitempty"` + F_Uint32RepeatedPacked []uint32 `protobuf:"varint,55,rep,packed,name=F_Uint32_repeated_packed,json=FUint32RepeatedPacked" json:"F_Uint32_repeated_packed,omitempty"` + F_Uint64RepeatedPacked []uint64 `protobuf:"varint,56,rep,packed,name=F_Uint64_repeated_packed,json=FUint64RepeatedPacked" json:"F_Uint64_repeated_packed,omitempty"` + F_FloatRepeatedPacked []float32 `protobuf:"fixed32,57,rep,packed,name=F_Float_repeated_packed,json=FFloatRepeatedPacked" json:"F_Float_repeated_packed,omitempty"` + F_DoubleRepeatedPacked []float64 `protobuf:"fixed64,58,rep,packed,name=F_Double_repeated_packed,json=FDoubleRepeatedPacked" json:"F_Double_repeated_packed,omitempty"` + F_Sint32RepeatedPacked []int32 `protobuf:"zigzag32,502,rep,packed,name=F_Sint32_repeated_packed,json=FSint32RepeatedPacked" json:"F_Sint32_repeated_packed,omitempty"` + F_Sint64RepeatedPacked []int64 `protobuf:"zigzag64,503,rep,packed,name=F_Sint64_repeated_packed,json=FSint64RepeatedPacked" json:"F_Sint64_repeated_packed,omitempty"` + Requiredgroup *GoTest_RequiredGroup `protobuf:"group,70,req,name=RequiredGroup,json=requiredgroup" json:"requiredgroup,omitempty"` + Repeatedgroup []*GoTest_RepeatedGroup `protobuf:"group,80,rep,name=RepeatedGroup,json=repeatedgroup" json:"repeatedgroup,omitempty"` + Optionalgroup *GoTest_OptionalGroup `protobuf:"group,90,opt,name=OptionalGroup,json=optionalgroup" json:"optionalgroup,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoTest) Reset() { *m = GoTest{} } +func (m *GoTest) String() string { return proto.CompactTextString(m) } +func (*GoTest) ProtoMessage() {} +func (*GoTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +const Default_GoTest_F_BoolDefaulted bool = true +const Default_GoTest_F_Int32Defaulted int32 = 32 +const Default_GoTest_F_Int64Defaulted int64 = 64 +const Default_GoTest_F_Fixed32Defaulted uint32 = 320 +const Default_GoTest_F_Fixed64Defaulted uint64 = 640 +const Default_GoTest_F_Uint32Defaulted uint32 = 3200 +const Default_GoTest_F_Uint64Defaulted uint64 = 6400 +const Default_GoTest_F_FloatDefaulted float32 = 314159 +const Default_GoTest_F_DoubleDefaulted float64 = 271828 +const Default_GoTest_F_StringDefaulted string = "hello, \"world!\"\n" + +var Default_GoTest_F_BytesDefaulted []byte = []byte("Bignose") + +const Default_GoTest_F_Sint32Defaulted int32 = -32 +const Default_GoTest_F_Sint64Defaulted int64 = -64 + +func (m *GoTest) GetKind() GoTest_KIND { + if m != nil && m.Kind != nil { + return *m.Kind + } + return GoTest_VOID +} + +func (m *GoTest) GetTable() string { + if m != nil && m.Table != nil { + return *m.Table + } + return "" +} + +func (m *GoTest) GetParam() int32 { + if m != nil && m.Param != nil { + return *m.Param + } + return 0 +} + +func (m *GoTest) GetRequiredField() *GoTestField { + if m != nil { + return m.RequiredField + } + return nil +} + +func (m *GoTest) GetRepeatedField() []*GoTestField { + if m != nil { + return m.RepeatedField + } + return nil +} + +func (m *GoTest) GetOptionalField() *GoTestField { + if m != nil { + return m.OptionalField + } + return nil +} + +func (m *GoTest) GetF_BoolRequired() bool { + if m != nil && m.F_BoolRequired != nil { + return *m.F_BoolRequired + } + return false +} + +func (m *GoTest) GetF_Int32Required() int32 { + if m != nil && m.F_Int32Required != nil { + return *m.F_Int32Required + } + return 0 +} + +func (m *GoTest) GetF_Int64Required() int64 { + if m != nil && m.F_Int64Required != nil { + return *m.F_Int64Required + } + return 0 +} + +func (m *GoTest) GetF_Fixed32Required() uint32 { + if m != nil && m.F_Fixed32Required != nil { + return *m.F_Fixed32Required + } + return 0 +} + +func (m *GoTest) GetF_Fixed64Required() uint64 { + if m != nil && m.F_Fixed64Required != nil { + return *m.F_Fixed64Required + } + return 0 +} + +func (m *GoTest) GetF_Uint32Required() uint32 { + if m != nil && m.F_Uint32Required != nil { + return *m.F_Uint32Required + } + return 0 +} + +func (m *GoTest) GetF_Uint64Required() uint64 { + if m != nil && m.F_Uint64Required != nil { + return *m.F_Uint64Required + } + return 0 +} + +func (m *GoTest) GetF_FloatRequired() float32 { + if m != nil && m.F_FloatRequired != nil { + return *m.F_FloatRequired + } + return 0 +} + +func (m *GoTest) GetF_DoubleRequired() float64 { + if m != nil && m.F_DoubleRequired != nil { + return *m.F_DoubleRequired + } + return 0 +} + +func (m *GoTest) GetF_StringRequired() string { + if m != nil && m.F_StringRequired != nil { + return *m.F_StringRequired + } + return "" +} + +func (m *GoTest) GetF_BytesRequired() []byte { + if m != nil { + return m.F_BytesRequired + } + return nil +} + +func (m *GoTest) GetF_Sint32Required() int32 { + if m != nil && m.F_Sint32Required != nil { + return *m.F_Sint32Required + } + return 0 +} + +func (m *GoTest) GetF_Sint64Required() int64 { + if m != nil && m.F_Sint64Required != nil { + return *m.F_Sint64Required + } + return 0 +} + +func (m *GoTest) GetF_BoolRepeated() []bool { + if m != nil { + return m.F_BoolRepeated + } + return nil +} + +func (m *GoTest) GetF_Int32Repeated() []int32 { + if m != nil { + return m.F_Int32Repeated + } + return nil +} + +func (m *GoTest) GetF_Int64Repeated() []int64 { + if m != nil { + return m.F_Int64Repeated + } + return nil +} + +func (m *GoTest) GetF_Fixed32Repeated() []uint32 { + if m != nil { + return m.F_Fixed32Repeated + } + return nil +} + +func (m *GoTest) GetF_Fixed64Repeated() []uint64 { + if m != nil { + return m.F_Fixed64Repeated + } + return nil +} + +func (m *GoTest) GetF_Uint32Repeated() []uint32 { + if m != nil { + return m.F_Uint32Repeated + } + return nil +} + +func (m *GoTest) GetF_Uint64Repeated() []uint64 { + if m != nil { + return m.F_Uint64Repeated + } + return nil +} + +func (m *GoTest) GetF_FloatRepeated() []float32 { + if m != nil { + return m.F_FloatRepeated + } + return nil +} + +func (m *GoTest) GetF_DoubleRepeated() []float64 { + if m != nil { + return m.F_DoubleRepeated + } + return nil +} + +func (m *GoTest) GetF_StringRepeated() []string { + if m != nil { + return m.F_StringRepeated + } + return nil +} + +func (m *GoTest) GetF_BytesRepeated() [][]byte { + if m != nil { + return m.F_BytesRepeated + } + return nil +} + +func (m *GoTest) GetF_Sint32Repeated() []int32 { + if m != nil { + return m.F_Sint32Repeated + } + return nil +} + +func (m *GoTest) GetF_Sint64Repeated() []int64 { + if m != nil { + return m.F_Sint64Repeated + } + return nil +} + +func (m *GoTest) GetF_BoolOptional() bool { + if m != nil && m.F_BoolOptional != nil { + return *m.F_BoolOptional + } + return false +} + +func (m *GoTest) GetF_Int32Optional() int32 { + if m != nil && m.F_Int32Optional != nil { + return *m.F_Int32Optional + } + return 0 +} + +func (m *GoTest) GetF_Int64Optional() int64 { + if m != nil && m.F_Int64Optional != nil { + return *m.F_Int64Optional + } + return 0 +} + +func (m *GoTest) GetF_Fixed32Optional() uint32 { + if m != nil && m.F_Fixed32Optional != nil { + return *m.F_Fixed32Optional + } + return 0 +} + +func (m *GoTest) GetF_Fixed64Optional() uint64 { + if m != nil && m.F_Fixed64Optional != nil { + return *m.F_Fixed64Optional + } + return 0 +} + +func (m *GoTest) GetF_Uint32Optional() uint32 { + if m != nil && m.F_Uint32Optional != nil { + return *m.F_Uint32Optional + } + return 0 +} + +func (m *GoTest) GetF_Uint64Optional() uint64 { + if m != nil && m.F_Uint64Optional != nil { + return *m.F_Uint64Optional + } + return 0 +} + +func (m *GoTest) GetF_FloatOptional() float32 { + if m != nil && m.F_FloatOptional != nil { + return *m.F_FloatOptional + } + return 0 +} + +func (m *GoTest) GetF_DoubleOptional() float64 { + if m != nil && m.F_DoubleOptional != nil { + return *m.F_DoubleOptional + } + return 0 +} + +func (m *GoTest) GetF_StringOptional() string { + if m != nil && m.F_StringOptional != nil { + return *m.F_StringOptional + } + return "" +} + +func (m *GoTest) GetF_BytesOptional() []byte { + if m != nil { + return m.F_BytesOptional + } + return nil +} + +func (m *GoTest) GetF_Sint32Optional() int32 { + if m != nil && m.F_Sint32Optional != nil { + return *m.F_Sint32Optional + } + return 0 +} + +func (m *GoTest) GetF_Sint64Optional() int64 { + if m != nil && m.F_Sint64Optional != nil { + return *m.F_Sint64Optional + } + return 0 +} + +func (m *GoTest) GetF_BoolDefaulted() bool { + if m != nil && m.F_BoolDefaulted != nil { + return *m.F_BoolDefaulted + } + return Default_GoTest_F_BoolDefaulted +} + +func (m *GoTest) GetF_Int32Defaulted() int32 { + if m != nil && m.F_Int32Defaulted != nil { + return *m.F_Int32Defaulted + } + return Default_GoTest_F_Int32Defaulted +} + +func (m *GoTest) GetF_Int64Defaulted() int64 { + if m != nil && m.F_Int64Defaulted != nil { + return *m.F_Int64Defaulted + } + return Default_GoTest_F_Int64Defaulted +} + +func (m *GoTest) GetF_Fixed32Defaulted() uint32 { + if m != nil && m.F_Fixed32Defaulted != nil { + return *m.F_Fixed32Defaulted + } + return Default_GoTest_F_Fixed32Defaulted +} + +func (m *GoTest) GetF_Fixed64Defaulted() uint64 { + if m != nil && m.F_Fixed64Defaulted != nil { + return *m.F_Fixed64Defaulted + } + return Default_GoTest_F_Fixed64Defaulted +} + +func (m *GoTest) GetF_Uint32Defaulted() uint32 { + if m != nil && m.F_Uint32Defaulted != nil { + return *m.F_Uint32Defaulted + } + return Default_GoTest_F_Uint32Defaulted +} + +func (m *GoTest) GetF_Uint64Defaulted() uint64 { + if m != nil && m.F_Uint64Defaulted != nil { + return *m.F_Uint64Defaulted + } + return Default_GoTest_F_Uint64Defaulted +} + +func (m *GoTest) GetF_FloatDefaulted() float32 { + if m != nil && m.F_FloatDefaulted != nil { + return *m.F_FloatDefaulted + } + return Default_GoTest_F_FloatDefaulted +} + +func (m *GoTest) GetF_DoubleDefaulted() float64 { + if m != nil && m.F_DoubleDefaulted != nil { + return *m.F_DoubleDefaulted + } + return Default_GoTest_F_DoubleDefaulted +} + +func (m *GoTest) GetF_StringDefaulted() string { + if m != nil && m.F_StringDefaulted != nil { + return *m.F_StringDefaulted + } + return Default_GoTest_F_StringDefaulted +} + +func (m *GoTest) GetF_BytesDefaulted() []byte { + if m != nil && m.F_BytesDefaulted != nil { + return m.F_BytesDefaulted + } + return append([]byte(nil), Default_GoTest_F_BytesDefaulted...) +} + +func (m *GoTest) GetF_Sint32Defaulted() int32 { + if m != nil && m.F_Sint32Defaulted != nil { + return *m.F_Sint32Defaulted + } + return Default_GoTest_F_Sint32Defaulted +} + +func (m *GoTest) GetF_Sint64Defaulted() int64 { + if m != nil && m.F_Sint64Defaulted != nil { + return *m.F_Sint64Defaulted + } + return Default_GoTest_F_Sint64Defaulted +} + +func (m *GoTest) GetF_BoolRepeatedPacked() []bool { + if m != nil { + return m.F_BoolRepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_Int32RepeatedPacked() []int32 { + if m != nil { + return m.F_Int32RepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_Int64RepeatedPacked() []int64 { + if m != nil { + return m.F_Int64RepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_Fixed32RepeatedPacked() []uint32 { + if m != nil { + return m.F_Fixed32RepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_Fixed64RepeatedPacked() []uint64 { + if m != nil { + return m.F_Fixed64RepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_Uint32RepeatedPacked() []uint32 { + if m != nil { + return m.F_Uint32RepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_Uint64RepeatedPacked() []uint64 { + if m != nil { + return m.F_Uint64RepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_FloatRepeatedPacked() []float32 { + if m != nil { + return m.F_FloatRepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_DoubleRepeatedPacked() []float64 { + if m != nil { + return m.F_DoubleRepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_Sint32RepeatedPacked() []int32 { + if m != nil { + return m.F_Sint32RepeatedPacked + } + return nil +} + +func (m *GoTest) GetF_Sint64RepeatedPacked() []int64 { + if m != nil { + return m.F_Sint64RepeatedPacked + } + return nil +} + +func (m *GoTest) GetRequiredgroup() *GoTest_RequiredGroup { + if m != nil { + return m.Requiredgroup + } + return nil +} + +func (m *GoTest) GetRepeatedgroup() []*GoTest_RepeatedGroup { + if m != nil { + return m.Repeatedgroup + } + return nil +} + +func (m *GoTest) GetOptionalgroup() *GoTest_OptionalGroup { + if m != nil { + return m.Optionalgroup + } + return nil +} + +// Required, repeated, and optional groups. +type GoTest_RequiredGroup struct { + RequiredField *string `protobuf:"bytes,71,req,name=RequiredField" json:"RequiredField,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoTest_RequiredGroup) Reset() { *m = GoTest_RequiredGroup{} } +func (m *GoTest_RequiredGroup) String() string { return proto.CompactTextString(m) } +func (*GoTest_RequiredGroup) ProtoMessage() {} +func (*GoTest_RequiredGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *GoTest_RequiredGroup) GetRequiredField() string { + if m != nil && m.RequiredField != nil { + return *m.RequiredField + } + return "" +} + +type GoTest_RepeatedGroup struct { + RequiredField *string `protobuf:"bytes,81,req,name=RequiredField" json:"RequiredField,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoTest_RepeatedGroup) Reset() { *m = GoTest_RepeatedGroup{} } +func (m *GoTest_RepeatedGroup) String() string { return proto.CompactTextString(m) } +func (*GoTest_RepeatedGroup) ProtoMessage() {} +func (*GoTest_RepeatedGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 1} } + +func (m *GoTest_RepeatedGroup) GetRequiredField() string { + if m != nil && m.RequiredField != nil { + return *m.RequiredField + } + return "" +} + +type GoTest_OptionalGroup struct { + RequiredField *string `protobuf:"bytes,91,req,name=RequiredField" json:"RequiredField,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoTest_OptionalGroup) Reset() { *m = GoTest_OptionalGroup{} } +func (m *GoTest_OptionalGroup) String() string { return proto.CompactTextString(m) } +func (*GoTest_OptionalGroup) ProtoMessage() {} +func (*GoTest_OptionalGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 2} } + +func (m *GoTest_OptionalGroup) GetRequiredField() string { + if m != nil && m.RequiredField != nil { + return *m.RequiredField + } + return "" +} + +// For testing a group containing a required field. +type GoTestRequiredGroupField struct { + Group *GoTestRequiredGroupField_Group `protobuf:"group,1,req,name=Group,json=group" json:"group,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoTestRequiredGroupField) Reset() { *m = GoTestRequiredGroupField{} } +func (m *GoTestRequiredGroupField) String() string { return proto.CompactTextString(m) } +func (*GoTestRequiredGroupField) ProtoMessage() {} +func (*GoTestRequiredGroupField) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *GoTestRequiredGroupField) GetGroup() *GoTestRequiredGroupField_Group { + if m != nil { + return m.Group + } + return nil +} + +type GoTestRequiredGroupField_Group struct { + Field *int32 `protobuf:"varint,2,req,name=Field" json:"Field,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoTestRequiredGroupField_Group) Reset() { *m = GoTestRequiredGroupField_Group{} } +func (m *GoTestRequiredGroupField_Group) String() string { return proto.CompactTextString(m) } +func (*GoTestRequiredGroupField_Group) ProtoMessage() {} +func (*GoTestRequiredGroupField_Group) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{3, 0} +} + +func (m *GoTestRequiredGroupField_Group) GetField() int32 { + if m != nil && m.Field != nil { + return *m.Field + } + return 0 +} + +// For testing skipping of unrecognized fields. +// Numbers are all big, larger than tag numbers in GoTestField, +// the message used in the corresponding test. +type GoSkipTest struct { + SkipInt32 *int32 `protobuf:"varint,11,req,name=skip_int32,json=skipInt32" json:"skip_int32,omitempty"` + SkipFixed32 *uint32 `protobuf:"fixed32,12,req,name=skip_fixed32,json=skipFixed32" json:"skip_fixed32,omitempty"` + SkipFixed64 *uint64 `protobuf:"fixed64,13,req,name=skip_fixed64,json=skipFixed64" json:"skip_fixed64,omitempty"` + SkipString *string `protobuf:"bytes,14,req,name=skip_string,json=skipString" json:"skip_string,omitempty"` + Skipgroup *GoSkipTest_SkipGroup `protobuf:"group,15,req,name=SkipGroup,json=skipgroup" json:"skipgroup,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoSkipTest) Reset() { *m = GoSkipTest{} } +func (m *GoSkipTest) String() string { return proto.CompactTextString(m) } +func (*GoSkipTest) ProtoMessage() {} +func (*GoSkipTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *GoSkipTest) GetSkipInt32() int32 { + if m != nil && m.SkipInt32 != nil { + return *m.SkipInt32 + } + return 0 +} + +func (m *GoSkipTest) GetSkipFixed32() uint32 { + if m != nil && m.SkipFixed32 != nil { + return *m.SkipFixed32 + } + return 0 +} + +func (m *GoSkipTest) GetSkipFixed64() uint64 { + if m != nil && m.SkipFixed64 != nil { + return *m.SkipFixed64 + } + return 0 +} + +func (m *GoSkipTest) GetSkipString() string { + if m != nil && m.SkipString != nil { + return *m.SkipString + } + return "" +} + +func (m *GoSkipTest) GetSkipgroup() *GoSkipTest_SkipGroup { + if m != nil { + return m.Skipgroup + } + return nil +} + +type GoSkipTest_SkipGroup struct { + GroupInt32 *int32 `protobuf:"varint,16,req,name=group_int32,json=groupInt32" json:"group_int32,omitempty"` + GroupString *string `protobuf:"bytes,17,req,name=group_string,json=groupString" json:"group_string,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GoSkipTest_SkipGroup) Reset() { *m = GoSkipTest_SkipGroup{} } +func (m *GoSkipTest_SkipGroup) String() string { return proto.CompactTextString(m) } +func (*GoSkipTest_SkipGroup) ProtoMessage() {} +func (*GoSkipTest_SkipGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } + +func (m *GoSkipTest_SkipGroup) GetGroupInt32() int32 { + if m != nil && m.GroupInt32 != nil { + return *m.GroupInt32 + } + return 0 +} + +func (m *GoSkipTest_SkipGroup) GetGroupString() string { + if m != nil && m.GroupString != nil { + return *m.GroupString + } + return "" +} + +// For testing packed/non-packed decoder switching. +// A serialized instance of one should be deserializable as the other. +type NonPackedTest struct { + A []int32 `protobuf:"varint,1,rep,name=a" json:"a,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *NonPackedTest) Reset() { *m = NonPackedTest{} } +func (m *NonPackedTest) String() string { return proto.CompactTextString(m) } +func (*NonPackedTest) ProtoMessage() {} +func (*NonPackedTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *NonPackedTest) GetA() []int32 { + if m != nil { + return m.A + } + return nil +} + +type PackedTest struct { + B []int32 `protobuf:"varint,1,rep,packed,name=b" json:"b,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *PackedTest) Reset() { *m = PackedTest{} } +func (m *PackedTest) String() string { return proto.CompactTextString(m) } +func (*PackedTest) ProtoMessage() {} +func (*PackedTest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *PackedTest) GetB() []int32 { + if m != nil { + return m.B + } + return nil +} + +type MaxTag struct { + // Maximum possible tag number. + LastField *string `protobuf:"bytes,536870911,opt,name=last_field,json=lastField" json:"last_field,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MaxTag) Reset() { *m = MaxTag{} } +func (m *MaxTag) String() string { return proto.CompactTextString(m) } +func (*MaxTag) ProtoMessage() {} +func (*MaxTag) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *MaxTag) GetLastField() string { + if m != nil && m.LastField != nil { + return *m.LastField + } + return "" +} + +type OldMessage struct { + Nested *OldMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"` + Num *int32 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OldMessage) Reset() { *m = OldMessage{} } +func (m *OldMessage) String() string { return proto.CompactTextString(m) } +func (*OldMessage) ProtoMessage() {} +func (*OldMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *OldMessage) GetNested() *OldMessage_Nested { + if m != nil { + return m.Nested + } + return nil +} + +func (m *OldMessage) GetNum() int32 { + if m != nil && m.Num != nil { + return *m.Num + } + return 0 +} + +type OldMessage_Nested struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OldMessage_Nested) Reset() { *m = OldMessage_Nested{} } +func (m *OldMessage_Nested) String() string { return proto.CompactTextString(m) } +func (*OldMessage_Nested) ProtoMessage() {} +func (*OldMessage_Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8, 0} } + +func (m *OldMessage_Nested) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +// NewMessage is wire compatible with OldMessage; +// imagine it as a future version. +type NewMessage struct { + Nested *NewMessage_Nested `protobuf:"bytes,1,opt,name=nested" json:"nested,omitempty"` + // This is an int32 in OldMessage. + Num *int64 `protobuf:"varint,2,opt,name=num" json:"num,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *NewMessage) Reset() { *m = NewMessage{} } +func (m *NewMessage) String() string { return proto.CompactTextString(m) } +func (*NewMessage) ProtoMessage() {} +func (*NewMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *NewMessage) GetNested() *NewMessage_Nested { + if m != nil { + return m.Nested + } + return nil +} + +func (m *NewMessage) GetNum() int64 { + if m != nil && m.Num != nil { + return *m.Num + } + return 0 +} + +type NewMessage_Nested struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + FoodGroup *string `protobuf:"bytes,2,opt,name=food_group,json=foodGroup" json:"food_group,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *NewMessage_Nested) Reset() { *m = NewMessage_Nested{} } +func (m *NewMessage_Nested) String() string { return proto.CompactTextString(m) } +func (*NewMessage_Nested) ProtoMessage() {} +func (*NewMessage_Nested) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} } + +func (m *NewMessage_Nested) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *NewMessage_Nested) GetFoodGroup() string { + if m != nil && m.FoodGroup != nil { + return *m.FoodGroup + } + return "" +} + +type InnerMessage struct { + Host *string `protobuf:"bytes,1,req,name=host" json:"host,omitempty"` + Port *int32 `protobuf:"varint,2,opt,name=port,def=4000" json:"port,omitempty"` + Connected *bool `protobuf:"varint,3,opt,name=connected" json:"connected,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *InnerMessage) Reset() { *m = InnerMessage{} } +func (m *InnerMessage) String() string { return proto.CompactTextString(m) } +func (*InnerMessage) ProtoMessage() {} +func (*InnerMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +const Default_InnerMessage_Port int32 = 4000 + +func (m *InnerMessage) GetHost() string { + if m != nil && m.Host != nil { + return *m.Host + } + return "" +} + +func (m *InnerMessage) GetPort() int32 { + if m != nil && m.Port != nil { + return *m.Port + } + return Default_InnerMessage_Port +} + +func (m *InnerMessage) GetConnected() bool { + if m != nil && m.Connected != nil { + return *m.Connected + } + return false +} + +type OtherMessage struct { + Key *int64 `protobuf:"varint,1,opt,name=key" json:"key,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + Weight *float32 `protobuf:"fixed32,3,opt,name=weight" json:"weight,omitempty"` + Inner *InnerMessage `protobuf:"bytes,4,opt,name=inner" json:"inner,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OtherMessage) Reset() { *m = OtherMessage{} } +func (m *OtherMessage) String() string { return proto.CompactTextString(m) } +func (*OtherMessage) ProtoMessage() {} +func (*OtherMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +var extRange_OtherMessage = []proto.ExtensionRange{ + {100, 536870911}, +} + +func (*OtherMessage) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_OtherMessage +} + +func (m *OtherMessage) GetKey() int64 { + if m != nil && m.Key != nil { + return *m.Key + } + return 0 +} + +func (m *OtherMessage) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +func (m *OtherMessage) GetWeight() float32 { + if m != nil && m.Weight != nil { + return *m.Weight + } + return 0 +} + +func (m *OtherMessage) GetInner() *InnerMessage { + if m != nil { + return m.Inner + } + return nil +} + +type RequiredInnerMessage struct { + LeoFinallyWonAnOscar *InnerMessage `protobuf:"bytes,1,req,name=leo_finally_won_an_oscar,json=leoFinallyWonAnOscar" json:"leo_finally_won_an_oscar,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *RequiredInnerMessage) Reset() { *m = RequiredInnerMessage{} } +func (m *RequiredInnerMessage) String() string { return proto.CompactTextString(m) } +func (*RequiredInnerMessage) ProtoMessage() {} +func (*RequiredInnerMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *RequiredInnerMessage) GetLeoFinallyWonAnOscar() *InnerMessage { + if m != nil { + return m.LeoFinallyWonAnOscar + } + return nil +} + +type MyMessage struct { + Count *int32 `protobuf:"varint,1,req,name=count" json:"count,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Quote *string `protobuf:"bytes,3,opt,name=quote" json:"quote,omitempty"` + Pet []string `protobuf:"bytes,4,rep,name=pet" json:"pet,omitempty"` + Inner *InnerMessage `protobuf:"bytes,5,opt,name=inner" json:"inner,omitempty"` + Others []*OtherMessage `protobuf:"bytes,6,rep,name=others" json:"others,omitempty"` + WeMustGoDeeper *RequiredInnerMessage `protobuf:"bytes,13,opt,name=we_must_go_deeper,json=weMustGoDeeper" json:"we_must_go_deeper,omitempty"` + RepInner []*InnerMessage `protobuf:"bytes,12,rep,name=rep_inner,json=repInner" json:"rep_inner,omitempty"` + Bikeshed *MyMessage_Color `protobuf:"varint,7,opt,name=bikeshed,enum=testdata.MyMessage_Color" json:"bikeshed,omitempty"` + Somegroup *MyMessage_SomeGroup `protobuf:"group,8,opt,name=SomeGroup,json=somegroup" json:"somegroup,omitempty"` + // This field becomes [][]byte in the generated code. + RepBytes [][]byte `protobuf:"bytes,10,rep,name=rep_bytes,json=repBytes" json:"rep_bytes,omitempty"` + Bigfloat *float64 `protobuf:"fixed64,11,opt,name=bigfloat" json:"bigfloat,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MyMessage) Reset() { *m = MyMessage{} } +func (m *MyMessage) String() string { return proto.CompactTextString(m) } +func (*MyMessage) ProtoMessage() {} +func (*MyMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +var extRange_MyMessage = []proto.ExtensionRange{ + {100, 536870911}, +} + +func (*MyMessage) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_MyMessage +} + +func (m *MyMessage) GetCount() int32 { + if m != nil && m.Count != nil { + return *m.Count + } + return 0 +} + +func (m *MyMessage) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *MyMessage) GetQuote() string { + if m != nil && m.Quote != nil { + return *m.Quote + } + return "" +} + +func (m *MyMessage) GetPet() []string { + if m != nil { + return m.Pet + } + return nil +} + +func (m *MyMessage) GetInner() *InnerMessage { + if m != nil { + return m.Inner + } + return nil +} + +func (m *MyMessage) GetOthers() []*OtherMessage { + if m != nil { + return m.Others + } + return nil +} + +func (m *MyMessage) GetWeMustGoDeeper() *RequiredInnerMessage { + if m != nil { + return m.WeMustGoDeeper + } + return nil +} + +func (m *MyMessage) GetRepInner() []*InnerMessage { + if m != nil { + return m.RepInner + } + return nil +} + +func (m *MyMessage) GetBikeshed() MyMessage_Color { + if m != nil && m.Bikeshed != nil { + return *m.Bikeshed + } + return MyMessage_RED +} + +func (m *MyMessage) GetSomegroup() *MyMessage_SomeGroup { + if m != nil { + return m.Somegroup + } + return nil +} + +func (m *MyMessage) GetRepBytes() [][]byte { + if m != nil { + return m.RepBytes + } + return nil +} + +func (m *MyMessage) GetBigfloat() float64 { + if m != nil && m.Bigfloat != nil { + return *m.Bigfloat + } + return 0 +} + +type MyMessage_SomeGroup struct { + GroupField *int32 `protobuf:"varint,9,opt,name=group_field,json=groupField" json:"group_field,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MyMessage_SomeGroup) Reset() { *m = MyMessage_SomeGroup{} } +func (m *MyMessage_SomeGroup) String() string { return proto.CompactTextString(m) } +func (*MyMessage_SomeGroup) ProtoMessage() {} +func (*MyMessage_SomeGroup) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13, 0} } + +func (m *MyMessage_SomeGroup) GetGroupField() int32 { + if m != nil && m.GroupField != nil { + return *m.GroupField + } + return 0 +} + +type Ext struct { + Data *string `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Ext) Reset() { *m = Ext{} } +func (m *Ext) String() string { return proto.CompactTextString(m) } +func (*Ext) ProtoMessage() {} +func (*Ext) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *Ext) GetData() string { + if m != nil && m.Data != nil { + return *m.Data + } + return "" +} + +var E_Ext_More = &proto.ExtensionDesc{ + ExtendedType: (*MyMessage)(nil), + ExtensionType: (*Ext)(nil), + Field: 103, + Name: "testdata.Ext.more", + Tag: "bytes,103,opt,name=more", + Filename: "test.proto", +} + +var E_Ext_Text = &proto.ExtensionDesc{ + ExtendedType: (*MyMessage)(nil), + ExtensionType: (*string)(nil), + Field: 104, + Name: "testdata.Ext.text", + Tag: "bytes,104,opt,name=text", + Filename: "test.proto", +} + +var E_Ext_Number = &proto.ExtensionDesc{ + ExtendedType: (*MyMessage)(nil), + ExtensionType: (*int32)(nil), + Field: 105, + Name: "testdata.Ext.number", + Tag: "varint,105,opt,name=number", + Filename: "test.proto", +} + +type ComplexExtension struct { + First *int32 `protobuf:"varint,1,opt,name=first" json:"first,omitempty"` + Second *int32 `protobuf:"varint,2,opt,name=second" json:"second,omitempty"` + Third []int32 `protobuf:"varint,3,rep,name=third" json:"third,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ComplexExtension) Reset() { *m = ComplexExtension{} } +func (m *ComplexExtension) String() string { return proto.CompactTextString(m) } +func (*ComplexExtension) ProtoMessage() {} +func (*ComplexExtension) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *ComplexExtension) GetFirst() int32 { + if m != nil && m.First != nil { + return *m.First + } + return 0 +} + +func (m *ComplexExtension) GetSecond() int32 { + if m != nil && m.Second != nil { + return *m.Second + } + return 0 +} + +func (m *ComplexExtension) GetThird() []int32 { + if m != nil { + return m.Third + } + return nil +} + +type DefaultsMessage struct { + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DefaultsMessage) Reset() { *m = DefaultsMessage{} } +func (m *DefaultsMessage) String() string { return proto.CompactTextString(m) } +func (*DefaultsMessage) ProtoMessage() {} +func (*DefaultsMessage) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +var extRange_DefaultsMessage = []proto.ExtensionRange{ + {100, 536870911}, +} + +func (*DefaultsMessage) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_DefaultsMessage +} + +type MyMessageSet struct { + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MyMessageSet) Reset() { *m = MyMessageSet{} } +func (m *MyMessageSet) String() string { return proto.CompactTextString(m) } +func (*MyMessageSet) ProtoMessage() {} +func (*MyMessageSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *MyMessageSet) Marshal() ([]byte, error) { + return proto.MarshalMessageSet(&m.XXX_InternalExtensions) +} +func (m *MyMessageSet) Unmarshal(buf []byte) error { + return proto.UnmarshalMessageSet(buf, &m.XXX_InternalExtensions) +} +func (m *MyMessageSet) MarshalJSON() ([]byte, error) { + return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions) +} +func (m *MyMessageSet) UnmarshalJSON(buf []byte) error { + return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions) +} + +// ensure MyMessageSet satisfies proto.Marshaler and proto.Unmarshaler +var _ proto.Marshaler = (*MyMessageSet)(nil) +var _ proto.Unmarshaler = (*MyMessageSet)(nil) + +var extRange_MyMessageSet = []proto.ExtensionRange{ + {100, 2147483646}, +} + +func (*MyMessageSet) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_MyMessageSet +} + +type Empty struct { + XXX_unrecognized []byte `json:"-"` +} + +func (m *Empty) Reset() { *m = Empty{} } +func (m *Empty) String() string { return proto.CompactTextString(m) } +func (*Empty) ProtoMessage() {} +func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +type MessageList struct { + Message []*MessageList_Message `protobuf:"group,1,rep,name=Message,json=message" json:"message,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MessageList) Reset() { *m = MessageList{} } +func (m *MessageList) String() string { return proto.CompactTextString(m) } +func (*MessageList) ProtoMessage() {} +func (*MessageList) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *MessageList) GetMessage() []*MessageList_Message { + if m != nil { + return m.Message + } + return nil +} + +type MessageList_Message struct { + Name *string `protobuf:"bytes,2,req,name=name" json:"name,omitempty"` + Count *int32 `protobuf:"varint,3,req,name=count" json:"count,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MessageList_Message) Reset() { *m = MessageList_Message{} } +func (m *MessageList_Message) String() string { return proto.CompactTextString(m) } +func (*MessageList_Message) ProtoMessage() {} +func (*MessageList_Message) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19, 0} } + +func (m *MessageList_Message) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *MessageList_Message) GetCount() int32 { + if m != nil && m.Count != nil { + return *m.Count + } + return 0 +} + +type Strings struct { + StringField *string `protobuf:"bytes,1,opt,name=string_field,json=stringField" json:"string_field,omitempty"` + BytesField []byte `protobuf:"bytes,2,opt,name=bytes_field,json=bytesField" json:"bytes_field,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Strings) Reset() { *m = Strings{} } +func (m *Strings) String() string { return proto.CompactTextString(m) } +func (*Strings) ProtoMessage() {} +func (*Strings) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *Strings) GetStringField() string { + if m != nil && m.StringField != nil { + return *m.StringField + } + return "" +} + +func (m *Strings) GetBytesField() []byte { + if m != nil { + return m.BytesField + } + return nil +} + +type Defaults struct { + // Default-valued fields of all basic types. + // Same as GoTest, but copied here to make testing easier. + F_Bool *bool `protobuf:"varint,1,opt,name=F_Bool,json=FBool,def=1" json:"F_Bool,omitempty"` + F_Int32 *int32 `protobuf:"varint,2,opt,name=F_Int32,json=FInt32,def=32" json:"F_Int32,omitempty"` + F_Int64 *int64 `protobuf:"varint,3,opt,name=F_Int64,json=FInt64,def=64" json:"F_Int64,omitempty"` + F_Fixed32 *uint32 `protobuf:"fixed32,4,opt,name=F_Fixed32,json=FFixed32,def=320" json:"F_Fixed32,omitempty"` + F_Fixed64 *uint64 `protobuf:"fixed64,5,opt,name=F_Fixed64,json=FFixed64,def=640" json:"F_Fixed64,omitempty"` + F_Uint32 *uint32 `protobuf:"varint,6,opt,name=F_Uint32,json=FUint32,def=3200" json:"F_Uint32,omitempty"` + F_Uint64 *uint64 `protobuf:"varint,7,opt,name=F_Uint64,json=FUint64,def=6400" json:"F_Uint64,omitempty"` + F_Float *float32 `protobuf:"fixed32,8,opt,name=F_Float,json=FFloat,def=314159" json:"F_Float,omitempty"` + F_Double *float64 `protobuf:"fixed64,9,opt,name=F_Double,json=FDouble,def=271828" json:"F_Double,omitempty"` + F_String *string `protobuf:"bytes,10,opt,name=F_String,json=FString,def=hello, \"world!\"\n" json:"F_String,omitempty"` + F_Bytes []byte `protobuf:"bytes,11,opt,name=F_Bytes,json=FBytes,def=Bignose" json:"F_Bytes,omitempty"` + F_Sint32 *int32 `protobuf:"zigzag32,12,opt,name=F_Sint32,json=FSint32,def=-32" json:"F_Sint32,omitempty"` + F_Sint64 *int64 `protobuf:"zigzag64,13,opt,name=F_Sint64,json=FSint64,def=-64" json:"F_Sint64,omitempty"` + F_Enum *Defaults_Color `protobuf:"varint,14,opt,name=F_Enum,json=FEnum,enum=testdata.Defaults_Color,def=1" json:"F_Enum,omitempty"` + // More fields with crazy defaults. + F_Pinf *float32 `protobuf:"fixed32,15,opt,name=F_Pinf,json=FPinf,def=inf" json:"F_Pinf,omitempty"` + F_Ninf *float32 `protobuf:"fixed32,16,opt,name=F_Ninf,json=FNinf,def=-inf" json:"F_Ninf,omitempty"` + F_Nan *float32 `protobuf:"fixed32,17,opt,name=F_Nan,json=FNan,def=nan" json:"F_Nan,omitempty"` + // Sub-message. + Sub *SubDefaults `protobuf:"bytes,18,opt,name=sub" json:"sub,omitempty"` + // Redundant but explicit defaults. + StrZero *string `protobuf:"bytes,19,opt,name=str_zero,json=strZero,def=" json:"str_zero,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Defaults) Reset() { *m = Defaults{} } +func (m *Defaults) String() string { return proto.CompactTextString(m) } +func (*Defaults) ProtoMessage() {} +func (*Defaults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +const Default_Defaults_F_Bool bool = true +const Default_Defaults_F_Int32 int32 = 32 +const Default_Defaults_F_Int64 int64 = 64 +const Default_Defaults_F_Fixed32 uint32 = 320 +const Default_Defaults_F_Fixed64 uint64 = 640 +const Default_Defaults_F_Uint32 uint32 = 3200 +const Default_Defaults_F_Uint64 uint64 = 6400 +const Default_Defaults_F_Float float32 = 314159 +const Default_Defaults_F_Double float64 = 271828 +const Default_Defaults_F_String string = "hello, \"world!\"\n" + +var Default_Defaults_F_Bytes []byte = []byte("Bignose") + +const Default_Defaults_F_Sint32 int32 = -32 +const Default_Defaults_F_Sint64 int64 = -64 +const Default_Defaults_F_Enum Defaults_Color = Defaults_GREEN + +var Default_Defaults_F_Pinf float32 = float32(math.Inf(1)) +var Default_Defaults_F_Ninf float32 = float32(math.Inf(-1)) +var Default_Defaults_F_Nan float32 = float32(math.NaN()) + +func (m *Defaults) GetF_Bool() bool { + if m != nil && m.F_Bool != nil { + return *m.F_Bool + } + return Default_Defaults_F_Bool +} + +func (m *Defaults) GetF_Int32() int32 { + if m != nil && m.F_Int32 != nil { + return *m.F_Int32 + } + return Default_Defaults_F_Int32 +} + +func (m *Defaults) GetF_Int64() int64 { + if m != nil && m.F_Int64 != nil { + return *m.F_Int64 + } + return Default_Defaults_F_Int64 +} + +func (m *Defaults) GetF_Fixed32() uint32 { + if m != nil && m.F_Fixed32 != nil { + return *m.F_Fixed32 + } + return Default_Defaults_F_Fixed32 +} + +func (m *Defaults) GetF_Fixed64() uint64 { + if m != nil && m.F_Fixed64 != nil { + return *m.F_Fixed64 + } + return Default_Defaults_F_Fixed64 +} + +func (m *Defaults) GetF_Uint32() uint32 { + if m != nil && m.F_Uint32 != nil { + return *m.F_Uint32 + } + return Default_Defaults_F_Uint32 +} + +func (m *Defaults) GetF_Uint64() uint64 { + if m != nil && m.F_Uint64 != nil { + return *m.F_Uint64 + } + return Default_Defaults_F_Uint64 +} + +func (m *Defaults) GetF_Float() float32 { + if m != nil && m.F_Float != nil { + return *m.F_Float + } + return Default_Defaults_F_Float +} + +func (m *Defaults) GetF_Double() float64 { + if m != nil && m.F_Double != nil { + return *m.F_Double + } + return Default_Defaults_F_Double +} + +func (m *Defaults) GetF_String() string { + if m != nil && m.F_String != nil { + return *m.F_String + } + return Default_Defaults_F_String +} + +func (m *Defaults) GetF_Bytes() []byte { + if m != nil && m.F_Bytes != nil { + return m.F_Bytes + } + return append([]byte(nil), Default_Defaults_F_Bytes...) +} + +func (m *Defaults) GetF_Sint32() int32 { + if m != nil && m.F_Sint32 != nil { + return *m.F_Sint32 + } + return Default_Defaults_F_Sint32 +} + +func (m *Defaults) GetF_Sint64() int64 { + if m != nil && m.F_Sint64 != nil { + return *m.F_Sint64 + } + return Default_Defaults_F_Sint64 +} + +func (m *Defaults) GetF_Enum() Defaults_Color { + if m != nil && m.F_Enum != nil { + return *m.F_Enum + } + return Default_Defaults_F_Enum +} + +func (m *Defaults) GetF_Pinf() float32 { + if m != nil && m.F_Pinf != nil { + return *m.F_Pinf + } + return Default_Defaults_F_Pinf +} + +func (m *Defaults) GetF_Ninf() float32 { + if m != nil && m.F_Ninf != nil { + return *m.F_Ninf + } + return Default_Defaults_F_Ninf +} + +func (m *Defaults) GetF_Nan() float32 { + if m != nil && m.F_Nan != nil { + return *m.F_Nan + } + return Default_Defaults_F_Nan +} + +func (m *Defaults) GetSub() *SubDefaults { + if m != nil { + return m.Sub + } + return nil +} + +func (m *Defaults) GetStrZero() string { + if m != nil && m.StrZero != nil { + return *m.StrZero + } + return "" +} + +type SubDefaults struct { + N *int64 `protobuf:"varint,1,opt,name=n,def=7" json:"n,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *SubDefaults) Reset() { *m = SubDefaults{} } +func (m *SubDefaults) String() string { return proto.CompactTextString(m) } +func (*SubDefaults) ProtoMessage() {} +func (*SubDefaults) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +const Default_SubDefaults_N int64 = 7 + +func (m *SubDefaults) GetN() int64 { + if m != nil && m.N != nil { + return *m.N + } + return Default_SubDefaults_N +} + +type RepeatedEnum struct { + Color []RepeatedEnum_Color `protobuf:"varint,1,rep,name=color,enum=testdata.RepeatedEnum_Color" json:"color,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *RepeatedEnum) Reset() { *m = RepeatedEnum{} } +func (m *RepeatedEnum) String() string { return proto.CompactTextString(m) } +func (*RepeatedEnum) ProtoMessage() {} +func (*RepeatedEnum) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} } + +func (m *RepeatedEnum) GetColor() []RepeatedEnum_Color { + if m != nil { + return m.Color + } + return nil +} + +type MoreRepeated struct { + Bools []bool `protobuf:"varint,1,rep,name=bools" json:"bools,omitempty"` + BoolsPacked []bool `protobuf:"varint,2,rep,packed,name=bools_packed,json=boolsPacked" json:"bools_packed,omitempty"` + Ints []int32 `protobuf:"varint,3,rep,name=ints" json:"ints,omitempty"` + IntsPacked []int32 `protobuf:"varint,4,rep,packed,name=ints_packed,json=intsPacked" json:"ints_packed,omitempty"` + Int64SPacked []int64 `protobuf:"varint,7,rep,packed,name=int64s_packed,json=int64sPacked" json:"int64s_packed,omitempty"` + Strings []string `protobuf:"bytes,5,rep,name=strings" json:"strings,omitempty"` + Fixeds []uint32 `protobuf:"fixed32,6,rep,name=fixeds" json:"fixeds,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MoreRepeated) Reset() { *m = MoreRepeated{} } +func (m *MoreRepeated) String() string { return proto.CompactTextString(m) } +func (*MoreRepeated) ProtoMessage() {} +func (*MoreRepeated) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} } + +func (m *MoreRepeated) GetBools() []bool { + if m != nil { + return m.Bools + } + return nil +} + +func (m *MoreRepeated) GetBoolsPacked() []bool { + if m != nil { + return m.BoolsPacked + } + return nil +} + +func (m *MoreRepeated) GetInts() []int32 { + if m != nil { + return m.Ints + } + return nil +} + +func (m *MoreRepeated) GetIntsPacked() []int32 { + if m != nil { + return m.IntsPacked + } + return nil +} + +func (m *MoreRepeated) GetInt64SPacked() []int64 { + if m != nil { + return m.Int64SPacked + } + return nil +} + +func (m *MoreRepeated) GetStrings() []string { + if m != nil { + return m.Strings + } + return nil +} + +func (m *MoreRepeated) GetFixeds() []uint32 { + if m != nil { + return m.Fixeds + } + return nil +} + +type GroupOld struct { + G *GroupOld_G `protobuf:"group,101,opt,name=G,json=g" json:"g,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GroupOld) Reset() { *m = GroupOld{} } +func (m *GroupOld) String() string { return proto.CompactTextString(m) } +func (*GroupOld) ProtoMessage() {} +func (*GroupOld) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} } + +func (m *GroupOld) GetG() *GroupOld_G { + if m != nil { + return m.G + } + return nil +} + +type GroupOld_G struct { + X *int32 `protobuf:"varint,2,opt,name=x" json:"x,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GroupOld_G) Reset() { *m = GroupOld_G{} } +func (m *GroupOld_G) String() string { return proto.CompactTextString(m) } +func (*GroupOld_G) ProtoMessage() {} +func (*GroupOld_G) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25, 0} } + +func (m *GroupOld_G) GetX() int32 { + if m != nil && m.X != nil { + return *m.X + } + return 0 +} + +type GroupNew struct { + G *GroupNew_G `protobuf:"group,101,opt,name=G,json=g" json:"g,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GroupNew) Reset() { *m = GroupNew{} } +func (m *GroupNew) String() string { return proto.CompactTextString(m) } +func (*GroupNew) ProtoMessage() {} +func (*GroupNew) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} } + +func (m *GroupNew) GetG() *GroupNew_G { + if m != nil { + return m.G + } + return nil +} + +type GroupNew_G struct { + X *int32 `protobuf:"varint,2,opt,name=x" json:"x,omitempty"` + Y *int32 `protobuf:"varint,3,opt,name=y" json:"y,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GroupNew_G) Reset() { *m = GroupNew_G{} } +func (m *GroupNew_G) String() string { return proto.CompactTextString(m) } +func (*GroupNew_G) ProtoMessage() {} +func (*GroupNew_G) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26, 0} } + +func (m *GroupNew_G) GetX() int32 { + if m != nil && m.X != nil { + return *m.X + } + return 0 +} + +func (m *GroupNew_G) GetY() int32 { + if m != nil && m.Y != nil { + return *m.Y + } + return 0 +} + +type FloatingPoint struct { + F *float64 `protobuf:"fixed64,1,req,name=f" json:"f,omitempty"` + Exact *bool `protobuf:"varint,2,opt,name=exact" json:"exact,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FloatingPoint) Reset() { *m = FloatingPoint{} } +func (m *FloatingPoint) String() string { return proto.CompactTextString(m) } +func (*FloatingPoint) ProtoMessage() {} +func (*FloatingPoint) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} } + +func (m *FloatingPoint) GetF() float64 { + if m != nil && m.F != nil { + return *m.F + } + return 0 +} + +func (m *FloatingPoint) GetExact() bool { + if m != nil && m.Exact != nil { + return *m.Exact + } + return false +} + +type MessageWithMap struct { + NameMapping map[int32]string `protobuf:"bytes,1,rep,name=name_mapping,json=nameMapping" json:"name_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + MsgMapping map[int64]*FloatingPoint `protobuf:"bytes,2,rep,name=msg_mapping,json=msgMapping" json:"msg_mapping,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + ByteMapping map[bool][]byte `protobuf:"bytes,3,rep,name=byte_mapping,json=byteMapping" json:"byte_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + StrToStr map[string]string `protobuf:"bytes,4,rep,name=str_to_str,json=strToStr" json:"str_to_str,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MessageWithMap) Reset() { *m = MessageWithMap{} } +func (m *MessageWithMap) String() string { return proto.CompactTextString(m) } +func (*MessageWithMap) ProtoMessage() {} +func (*MessageWithMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{28} } + +func (m *MessageWithMap) GetNameMapping() map[int32]string { + if m != nil { + return m.NameMapping + } + return nil +} + +func (m *MessageWithMap) GetMsgMapping() map[int64]*FloatingPoint { + if m != nil { + return m.MsgMapping + } + return nil +} + +func (m *MessageWithMap) GetByteMapping() map[bool][]byte { + if m != nil { + return m.ByteMapping + } + return nil +} + +func (m *MessageWithMap) GetStrToStr() map[string]string { + if m != nil { + return m.StrToStr + } + return nil +} + +type Oneof struct { + // Types that are valid to be assigned to Union: + // *Oneof_F_Bool + // *Oneof_F_Int32 + // *Oneof_F_Int64 + // *Oneof_F_Fixed32 + // *Oneof_F_Fixed64 + // *Oneof_F_Uint32 + // *Oneof_F_Uint64 + // *Oneof_F_Float + // *Oneof_F_Double + // *Oneof_F_String + // *Oneof_F_Bytes + // *Oneof_F_Sint32 + // *Oneof_F_Sint64 + // *Oneof_F_Enum + // *Oneof_F_Message + // *Oneof_FGroup + // *Oneof_F_Largest_Tag + Union isOneof_Union `protobuf_oneof:"union"` + // Types that are valid to be assigned to Tormato: + // *Oneof_Value + Tormato isOneof_Tormato `protobuf_oneof:"tormato"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Oneof) Reset() { *m = Oneof{} } +func (m *Oneof) String() string { return proto.CompactTextString(m) } +func (*Oneof) ProtoMessage() {} +func (*Oneof) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} } + +type isOneof_Union interface { + isOneof_Union() +} +type isOneof_Tormato interface { + isOneof_Tormato() +} + +type Oneof_F_Bool struct { + F_Bool bool `protobuf:"varint,1,opt,name=F_Bool,json=FBool,oneof"` +} +type Oneof_F_Int32 struct { + F_Int32 int32 `protobuf:"varint,2,opt,name=F_Int32,json=FInt32,oneof"` +} +type Oneof_F_Int64 struct { + F_Int64 int64 `protobuf:"varint,3,opt,name=F_Int64,json=FInt64,oneof"` +} +type Oneof_F_Fixed32 struct { + F_Fixed32 uint32 `protobuf:"fixed32,4,opt,name=F_Fixed32,json=FFixed32,oneof"` +} +type Oneof_F_Fixed64 struct { + F_Fixed64 uint64 `protobuf:"fixed64,5,opt,name=F_Fixed64,json=FFixed64,oneof"` +} +type Oneof_F_Uint32 struct { + F_Uint32 uint32 `protobuf:"varint,6,opt,name=F_Uint32,json=FUint32,oneof"` +} +type Oneof_F_Uint64 struct { + F_Uint64 uint64 `protobuf:"varint,7,opt,name=F_Uint64,json=FUint64,oneof"` +} +type Oneof_F_Float struct { + F_Float float32 `protobuf:"fixed32,8,opt,name=F_Float,json=FFloat,oneof"` +} +type Oneof_F_Double struct { + F_Double float64 `protobuf:"fixed64,9,opt,name=F_Double,json=FDouble,oneof"` +} +type Oneof_F_String struct { + F_String string `protobuf:"bytes,10,opt,name=F_String,json=FString,oneof"` +} +type Oneof_F_Bytes struct { + F_Bytes []byte `protobuf:"bytes,11,opt,name=F_Bytes,json=FBytes,oneof"` +} +type Oneof_F_Sint32 struct { + F_Sint32 int32 `protobuf:"zigzag32,12,opt,name=F_Sint32,json=FSint32,oneof"` +} +type Oneof_F_Sint64 struct { + F_Sint64 int64 `protobuf:"zigzag64,13,opt,name=F_Sint64,json=FSint64,oneof"` +} +type Oneof_F_Enum struct { + F_Enum MyMessage_Color `protobuf:"varint,14,opt,name=F_Enum,json=FEnum,enum=testdata.MyMessage_Color,oneof"` +} +type Oneof_F_Message struct { + F_Message *GoTestField `protobuf:"bytes,15,opt,name=F_Message,json=FMessage,oneof"` +} +type Oneof_FGroup struct { + FGroup *Oneof_F_Group `protobuf:"group,16,opt,name=F_Group,json=fGroup,oneof"` +} +type Oneof_F_Largest_Tag struct { + F_Largest_Tag int32 `protobuf:"varint,536870911,opt,name=F_Largest_Tag,json=FLargestTag,oneof"` +} +type Oneof_Value struct { + Value int32 `protobuf:"varint,100,opt,name=value,oneof"` +} + +func (*Oneof_F_Bool) isOneof_Union() {} +func (*Oneof_F_Int32) isOneof_Union() {} +func (*Oneof_F_Int64) isOneof_Union() {} +func (*Oneof_F_Fixed32) isOneof_Union() {} +func (*Oneof_F_Fixed64) isOneof_Union() {} +func (*Oneof_F_Uint32) isOneof_Union() {} +func (*Oneof_F_Uint64) isOneof_Union() {} +func (*Oneof_F_Float) isOneof_Union() {} +func (*Oneof_F_Double) isOneof_Union() {} +func (*Oneof_F_String) isOneof_Union() {} +func (*Oneof_F_Bytes) isOneof_Union() {} +func (*Oneof_F_Sint32) isOneof_Union() {} +func (*Oneof_F_Sint64) isOneof_Union() {} +func (*Oneof_F_Enum) isOneof_Union() {} +func (*Oneof_F_Message) isOneof_Union() {} +func (*Oneof_FGroup) isOneof_Union() {} +func (*Oneof_F_Largest_Tag) isOneof_Union() {} +func (*Oneof_Value) isOneof_Tormato() {} + +func (m *Oneof) GetUnion() isOneof_Union { + if m != nil { + return m.Union + } + return nil +} +func (m *Oneof) GetTormato() isOneof_Tormato { + if m != nil { + return m.Tormato + } + return nil +} + +func (m *Oneof) GetF_Bool() bool { + if x, ok := m.GetUnion().(*Oneof_F_Bool); ok { + return x.F_Bool + } + return false +} + +func (m *Oneof) GetF_Int32() int32 { + if x, ok := m.GetUnion().(*Oneof_F_Int32); ok { + return x.F_Int32 + } + return 0 +} + +func (m *Oneof) GetF_Int64() int64 { + if x, ok := m.GetUnion().(*Oneof_F_Int64); ok { + return x.F_Int64 + } + return 0 +} + +func (m *Oneof) GetF_Fixed32() uint32 { + if x, ok := m.GetUnion().(*Oneof_F_Fixed32); ok { + return x.F_Fixed32 + } + return 0 +} + +func (m *Oneof) GetF_Fixed64() uint64 { + if x, ok := m.GetUnion().(*Oneof_F_Fixed64); ok { + return x.F_Fixed64 + } + return 0 +} + +func (m *Oneof) GetF_Uint32() uint32 { + if x, ok := m.GetUnion().(*Oneof_F_Uint32); ok { + return x.F_Uint32 + } + return 0 +} + +func (m *Oneof) GetF_Uint64() uint64 { + if x, ok := m.GetUnion().(*Oneof_F_Uint64); ok { + return x.F_Uint64 + } + return 0 +} + +func (m *Oneof) GetF_Float() float32 { + if x, ok := m.GetUnion().(*Oneof_F_Float); ok { + return x.F_Float + } + return 0 +} + +func (m *Oneof) GetF_Double() float64 { + if x, ok := m.GetUnion().(*Oneof_F_Double); ok { + return x.F_Double + } + return 0 +} + +func (m *Oneof) GetF_String() string { + if x, ok := m.GetUnion().(*Oneof_F_String); ok { + return x.F_String + } + return "" +} + +func (m *Oneof) GetF_Bytes() []byte { + if x, ok := m.GetUnion().(*Oneof_F_Bytes); ok { + return x.F_Bytes + } + return nil +} + +func (m *Oneof) GetF_Sint32() int32 { + if x, ok := m.GetUnion().(*Oneof_F_Sint32); ok { + return x.F_Sint32 + } + return 0 +} + +func (m *Oneof) GetF_Sint64() int64 { + if x, ok := m.GetUnion().(*Oneof_F_Sint64); ok { + return x.F_Sint64 + } + return 0 +} + +func (m *Oneof) GetF_Enum() MyMessage_Color { + if x, ok := m.GetUnion().(*Oneof_F_Enum); ok { + return x.F_Enum + } + return MyMessage_RED +} + +func (m *Oneof) GetF_Message() *GoTestField { + if x, ok := m.GetUnion().(*Oneof_F_Message); ok { + return x.F_Message + } + return nil +} + +func (m *Oneof) GetFGroup() *Oneof_F_Group { + if x, ok := m.GetUnion().(*Oneof_FGroup); ok { + return x.FGroup + } + return nil +} + +func (m *Oneof) GetF_Largest_Tag() int32 { + if x, ok := m.GetUnion().(*Oneof_F_Largest_Tag); ok { + return x.F_Largest_Tag + } + return 0 +} + +func (m *Oneof) GetValue() int32 { + if x, ok := m.GetTormato().(*Oneof_Value); ok { + return x.Value + } + return 0 +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Oneof) 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 _Oneof_OneofMarshaler, _Oneof_OneofUnmarshaler, _Oneof_OneofSizer, []interface{}{ + (*Oneof_F_Bool)(nil), + (*Oneof_F_Int32)(nil), + (*Oneof_F_Int64)(nil), + (*Oneof_F_Fixed32)(nil), + (*Oneof_F_Fixed64)(nil), + (*Oneof_F_Uint32)(nil), + (*Oneof_F_Uint64)(nil), + (*Oneof_F_Float)(nil), + (*Oneof_F_Double)(nil), + (*Oneof_F_String)(nil), + (*Oneof_F_Bytes)(nil), + (*Oneof_F_Sint32)(nil), + (*Oneof_F_Sint64)(nil), + (*Oneof_F_Enum)(nil), + (*Oneof_F_Message)(nil), + (*Oneof_FGroup)(nil), + (*Oneof_F_Largest_Tag)(nil), + (*Oneof_Value)(nil), + } +} + +func _Oneof_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Oneof) + // union + switch x := m.Union.(type) { + case *Oneof_F_Bool: + t := uint64(0) + if x.F_Bool { + t = 1 + } + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Oneof_F_Int32: + b.EncodeVarint(2<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.F_Int32)) + case *Oneof_F_Int64: + b.EncodeVarint(3<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.F_Int64)) + case *Oneof_F_Fixed32: + b.EncodeVarint(4<<3 | proto.WireFixed32) + b.EncodeFixed32(uint64(x.F_Fixed32)) + case *Oneof_F_Fixed64: + b.EncodeVarint(5<<3 | proto.WireFixed64) + b.EncodeFixed64(uint64(x.F_Fixed64)) + case *Oneof_F_Uint32: + b.EncodeVarint(6<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.F_Uint32)) + case *Oneof_F_Uint64: + b.EncodeVarint(7<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.F_Uint64)) + case *Oneof_F_Float: + b.EncodeVarint(8<<3 | proto.WireFixed32) + b.EncodeFixed32(uint64(math.Float32bits(x.F_Float))) + case *Oneof_F_Double: + b.EncodeVarint(9<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.F_Double)) + case *Oneof_F_String: + b.EncodeVarint(10<<3 | proto.WireBytes) + b.EncodeStringBytes(x.F_String) + case *Oneof_F_Bytes: + b.EncodeVarint(11<<3 | proto.WireBytes) + b.EncodeRawBytes(x.F_Bytes) + case *Oneof_F_Sint32: + b.EncodeVarint(12<<3 | proto.WireVarint) + b.EncodeZigzag32(uint64(x.F_Sint32)) + case *Oneof_F_Sint64: + b.EncodeVarint(13<<3 | proto.WireVarint) + b.EncodeZigzag64(uint64(x.F_Sint64)) + case *Oneof_F_Enum: + b.EncodeVarint(14<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.F_Enum)) + case *Oneof_F_Message: + b.EncodeVarint(15<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.F_Message); err != nil { + return err + } + case *Oneof_FGroup: + b.EncodeVarint(16<<3 | proto.WireStartGroup) + if err := b.Marshal(x.FGroup); err != nil { + return err + } + b.EncodeVarint(16<<3 | proto.WireEndGroup) + case *Oneof_F_Largest_Tag: + b.EncodeVarint(536870911<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.F_Largest_Tag)) + case nil: + default: + return fmt.Errorf("Oneof.Union has unexpected type %T", x) + } + // tormato + switch x := m.Tormato.(type) { + case *Oneof_Value: + b.EncodeVarint(100<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Value)) + case nil: + default: + return fmt.Errorf("Oneof.Tormato has unexpected type %T", x) + } + return nil +} + +func _Oneof_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Oneof) + switch tag { + case 1: // union.F_Bool + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Oneof_F_Bool{x != 0} + return true, err + case 2: // union.F_Int32 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Oneof_F_Int32{int32(x)} + return true, err + case 3: // union.F_Int64 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Oneof_F_Int64{int64(x)} + return true, err + case 4: // union.F_Fixed32 + if wire != proto.WireFixed32 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed32() + m.Union = &Oneof_F_Fixed32{uint32(x)} + return true, err + case 5: // union.F_Fixed64 + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Union = &Oneof_F_Fixed64{x} + return true, err + case 6: // union.F_Uint32 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Oneof_F_Uint32{uint32(x)} + return true, err + case 7: // union.F_Uint64 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Oneof_F_Uint64{x} + return true, err + case 8: // union.F_Float + if wire != proto.WireFixed32 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed32() + m.Union = &Oneof_F_Float{math.Float32frombits(uint32(x))} + return true, err + case 9: // union.F_Double + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Union = &Oneof_F_Double{math.Float64frombits(x)} + return true, err + case 10: // union.F_String + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Union = &Oneof_F_String{x} + return true, err + case 11: // union.F_Bytes + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Union = &Oneof_F_Bytes{x} + return true, err + case 12: // union.F_Sint32 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeZigzag32() + m.Union = &Oneof_F_Sint32{int32(x)} + return true, err + case 13: // union.F_Sint64 + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeZigzag64() + m.Union = &Oneof_F_Sint64{int64(x)} + return true, err + case 14: // union.F_Enum + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Oneof_F_Enum{MyMessage_Color(x)} + return true, err + case 15: // union.F_Message + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(GoTestField) + err := b.DecodeMessage(msg) + m.Union = &Oneof_F_Message{msg} + return true, err + case 16: // union.f_group + if wire != proto.WireStartGroup { + return true, proto.ErrInternalBadWireType + } + msg := new(Oneof_F_Group) + err := b.DecodeGroup(msg) + m.Union = &Oneof_FGroup{msg} + return true, err + case 536870911: // union.F_Largest_Tag + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Oneof_F_Largest_Tag{int32(x)} + return true, err + case 100: // tormato.value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Tormato = &Oneof_Value{int32(x)} + return true, err + default: + return false, nil + } +} + +func _Oneof_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Oneof) + // union + switch x := m.Union.(type) { + case *Oneof_F_Bool: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += 1 + case *Oneof_F_Int32: + n += proto.SizeVarint(2<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.F_Int32)) + case *Oneof_F_Int64: + n += proto.SizeVarint(3<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.F_Int64)) + case *Oneof_F_Fixed32: + n += proto.SizeVarint(4<<3 | proto.WireFixed32) + n += 4 + case *Oneof_F_Fixed64: + n += proto.SizeVarint(5<<3 | proto.WireFixed64) + n += 8 + case *Oneof_F_Uint32: + n += proto.SizeVarint(6<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.F_Uint32)) + case *Oneof_F_Uint64: + n += proto.SizeVarint(7<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.F_Uint64)) + case *Oneof_F_Float: + n += proto.SizeVarint(8<<3 | proto.WireFixed32) + n += 4 + case *Oneof_F_Double: + n += proto.SizeVarint(9<<3 | proto.WireFixed64) + n += 8 + case *Oneof_F_String: + n += proto.SizeVarint(10<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.F_String))) + n += len(x.F_String) + case *Oneof_F_Bytes: + n += proto.SizeVarint(11<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.F_Bytes))) + n += len(x.F_Bytes) + case *Oneof_F_Sint32: + n += proto.SizeVarint(12<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64((uint32(x.F_Sint32) << 1) ^ uint32((int32(x.F_Sint32) >> 31)))) + case *Oneof_F_Sint64: + n += proto.SizeVarint(13<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(uint64(x.F_Sint64<<1) ^ uint64((int64(x.F_Sint64) >> 63)))) + case *Oneof_F_Enum: + n += proto.SizeVarint(14<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.F_Enum)) + case *Oneof_F_Message: + s := proto.Size(x.F_Message) + n += proto.SizeVarint(15<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Oneof_FGroup: + n += proto.SizeVarint(16<<3 | proto.WireStartGroup) + n += proto.Size(x.FGroup) + n += proto.SizeVarint(16<<3 | proto.WireEndGroup) + case *Oneof_F_Largest_Tag: + n += proto.SizeVarint(536870911<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.F_Largest_Tag)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + // tormato + switch x := m.Tormato.(type) { + case *Oneof_Value: + n += proto.SizeVarint(100<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Value)) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type Oneof_F_Group struct { + X *int32 `protobuf:"varint,17,opt,name=x" json:"x,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Oneof_F_Group) Reset() { *m = Oneof_F_Group{} } +func (m *Oneof_F_Group) String() string { return proto.CompactTextString(m) } +func (*Oneof_F_Group) ProtoMessage() {} +func (*Oneof_F_Group) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29, 0} } + +func (m *Oneof_F_Group) GetX() int32 { + if m != nil && m.X != nil { + return *m.X + } + return 0 +} + +type Communique struct { + MakeMeCry *bool `protobuf:"varint,1,opt,name=make_me_cry,json=makeMeCry" json:"make_me_cry,omitempty"` + // This is a oneof, called "union". + // + // Types that are valid to be assigned to Union: + // *Communique_Number + // *Communique_Name + // *Communique_Data + // *Communique_TempC + // *Communique_Col + // *Communique_Msg + Union isCommunique_Union `protobuf_oneof:"union"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Communique) Reset() { *m = Communique{} } +func (m *Communique) String() string { return proto.CompactTextString(m) } +func (*Communique) ProtoMessage() {} +func (*Communique) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} } + +type isCommunique_Union interface { + isCommunique_Union() +} + +type Communique_Number struct { + Number int32 `protobuf:"varint,5,opt,name=number,oneof"` +} +type Communique_Name struct { + Name string `protobuf:"bytes,6,opt,name=name,oneof"` +} +type Communique_Data struct { + Data []byte `protobuf:"bytes,7,opt,name=data,oneof"` +} +type Communique_TempC struct { + TempC float64 `protobuf:"fixed64,8,opt,name=temp_c,json=tempC,oneof"` +} +type Communique_Col struct { + Col MyMessage_Color `protobuf:"varint,9,opt,name=col,enum=testdata.MyMessage_Color,oneof"` +} +type Communique_Msg struct { + Msg *Strings `protobuf:"bytes,10,opt,name=msg,oneof"` +} + +func (*Communique_Number) isCommunique_Union() {} +func (*Communique_Name) isCommunique_Union() {} +func (*Communique_Data) isCommunique_Union() {} +func (*Communique_TempC) isCommunique_Union() {} +func (*Communique_Col) isCommunique_Union() {} +func (*Communique_Msg) isCommunique_Union() {} + +func (m *Communique) GetUnion() isCommunique_Union { + if m != nil { + return m.Union + } + return nil +} + +func (m *Communique) GetMakeMeCry() bool { + if m != nil && m.MakeMeCry != nil { + return *m.MakeMeCry + } + return false +} + +func (m *Communique) GetNumber() int32 { + if x, ok := m.GetUnion().(*Communique_Number); ok { + return x.Number + } + return 0 +} + +func (m *Communique) GetName() string { + if x, ok := m.GetUnion().(*Communique_Name); ok { + return x.Name + } + return "" +} + +func (m *Communique) GetData() []byte { + if x, ok := m.GetUnion().(*Communique_Data); ok { + return x.Data + } + return nil +} + +func (m *Communique) GetTempC() float64 { + if x, ok := m.GetUnion().(*Communique_TempC); ok { + return x.TempC + } + return 0 +} + +func (m *Communique) GetCol() MyMessage_Color { + if x, ok := m.GetUnion().(*Communique_Col); ok { + return x.Col + } + return MyMessage_RED +} + +func (m *Communique) GetMsg() *Strings { + if x, ok := m.GetUnion().(*Communique_Msg); ok { + return x.Msg + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Communique) 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 _Communique_OneofMarshaler, _Communique_OneofUnmarshaler, _Communique_OneofSizer, []interface{}{ + (*Communique_Number)(nil), + (*Communique_Name)(nil), + (*Communique_Data)(nil), + (*Communique_TempC)(nil), + (*Communique_Col)(nil), + (*Communique_Msg)(nil), + } +} + +func _Communique_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Communique) + // union + switch x := m.Union.(type) { + case *Communique_Number: + b.EncodeVarint(5<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Number)) + case *Communique_Name: + b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Name) + case *Communique_Data: + b.EncodeVarint(7<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Data) + case *Communique_TempC: + b.EncodeVarint(8<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.TempC)) + case *Communique_Col: + b.EncodeVarint(9<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Col)) + case *Communique_Msg: + b.EncodeVarint(10<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Msg); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Communique.Union has unexpected type %T", x) + } + return nil +} + +func _Communique_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Communique) + switch tag { + case 5: // union.number + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Communique_Number{int32(x)} + return true, err + case 6: // union.name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Union = &Communique_Name{x} + return true, err + case 7: // union.data + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Union = &Communique_Data{x} + return true, err + case 8: // union.temp_c + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Union = &Communique_TempC{math.Float64frombits(x)} + return true, err + case 9: // union.col + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Communique_Col{MyMessage_Color(x)} + return true, err + case 10: // union.msg + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Strings) + err := b.DecodeMessage(msg) + m.Union = &Communique_Msg{msg} + return true, err + default: + return false, nil + } +} + +func _Communique_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Communique) + // union + switch x := m.Union.(type) { + case *Communique_Number: + n += proto.SizeVarint(5<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Number)) + case *Communique_Name: + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Name))) + n += len(x.Name) + case *Communique_Data: + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Data))) + n += len(x.Data) + case *Communique_TempC: + n += proto.SizeVarint(8<<3 | proto.WireFixed64) + n += 8 + case *Communique_Col: + n += proto.SizeVarint(9<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Col)) + case *Communique_Msg: + s := proto.Size(x.Msg) + n += proto.SizeVarint(10<<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 +} + +var E_Greeting = &proto.ExtensionDesc{ + ExtendedType: (*MyMessage)(nil), + ExtensionType: ([]string)(nil), + Field: 106, + Name: "testdata.greeting", + Tag: "bytes,106,rep,name=greeting", + Filename: "test.proto", +} + +var E_Complex = &proto.ExtensionDesc{ + ExtendedType: (*OtherMessage)(nil), + ExtensionType: (*ComplexExtension)(nil), + Field: 200, + Name: "testdata.complex", + Tag: "bytes,200,opt,name=complex", + Filename: "test.proto", +} + +var E_RComplex = &proto.ExtensionDesc{ + ExtendedType: (*OtherMessage)(nil), + ExtensionType: ([]*ComplexExtension)(nil), + Field: 201, + Name: "testdata.r_complex", + Tag: "bytes,201,rep,name=r_complex,json=rComplex", + Filename: "test.proto", +} + +var E_NoDefaultDouble = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*float64)(nil), + Field: 101, + Name: "testdata.no_default_double", + Tag: "fixed64,101,opt,name=no_default_double,json=noDefaultDouble", + Filename: "test.proto", +} + +var E_NoDefaultFloat = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*float32)(nil), + Field: 102, + Name: "testdata.no_default_float", + Tag: "fixed32,102,opt,name=no_default_float,json=noDefaultFloat", + Filename: "test.proto", +} + +var E_NoDefaultInt32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int32)(nil), + Field: 103, + Name: "testdata.no_default_int32", + Tag: "varint,103,opt,name=no_default_int32,json=noDefaultInt32", + Filename: "test.proto", +} + +var E_NoDefaultInt64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int64)(nil), + Field: 104, + Name: "testdata.no_default_int64", + Tag: "varint,104,opt,name=no_default_int64,json=noDefaultInt64", + Filename: "test.proto", +} + +var E_NoDefaultUint32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*uint32)(nil), + Field: 105, + Name: "testdata.no_default_uint32", + Tag: "varint,105,opt,name=no_default_uint32,json=noDefaultUint32", + Filename: "test.proto", +} + +var E_NoDefaultUint64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*uint64)(nil), + Field: 106, + Name: "testdata.no_default_uint64", + Tag: "varint,106,opt,name=no_default_uint64,json=noDefaultUint64", + Filename: "test.proto", +} + +var E_NoDefaultSint32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int32)(nil), + Field: 107, + Name: "testdata.no_default_sint32", + Tag: "zigzag32,107,opt,name=no_default_sint32,json=noDefaultSint32", + Filename: "test.proto", +} + +var E_NoDefaultSint64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int64)(nil), + Field: 108, + Name: "testdata.no_default_sint64", + Tag: "zigzag64,108,opt,name=no_default_sint64,json=noDefaultSint64", + Filename: "test.proto", +} + +var E_NoDefaultFixed32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*uint32)(nil), + Field: 109, + Name: "testdata.no_default_fixed32", + Tag: "fixed32,109,opt,name=no_default_fixed32,json=noDefaultFixed32", + Filename: "test.proto", +} + +var E_NoDefaultFixed64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*uint64)(nil), + Field: 110, + Name: "testdata.no_default_fixed64", + Tag: "fixed64,110,opt,name=no_default_fixed64,json=noDefaultFixed64", + Filename: "test.proto", +} + +var E_NoDefaultSfixed32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int32)(nil), + Field: 111, + Name: "testdata.no_default_sfixed32", + Tag: "fixed32,111,opt,name=no_default_sfixed32,json=noDefaultSfixed32", + Filename: "test.proto", +} + +var E_NoDefaultSfixed64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int64)(nil), + Field: 112, + Name: "testdata.no_default_sfixed64", + Tag: "fixed64,112,opt,name=no_default_sfixed64,json=noDefaultSfixed64", + Filename: "test.proto", +} + +var E_NoDefaultBool = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*bool)(nil), + Field: 113, + Name: "testdata.no_default_bool", + Tag: "varint,113,opt,name=no_default_bool,json=noDefaultBool", + Filename: "test.proto", +} + +var E_NoDefaultString = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*string)(nil), + Field: 114, + Name: "testdata.no_default_string", + Tag: "bytes,114,opt,name=no_default_string,json=noDefaultString", + Filename: "test.proto", +} + +var E_NoDefaultBytes = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: ([]byte)(nil), + Field: 115, + Name: "testdata.no_default_bytes", + Tag: "bytes,115,opt,name=no_default_bytes,json=noDefaultBytes", + Filename: "test.proto", +} + +var E_NoDefaultEnum = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*DefaultsMessage_DefaultsEnum)(nil), + Field: 116, + Name: "testdata.no_default_enum", + Tag: "varint,116,opt,name=no_default_enum,json=noDefaultEnum,enum=testdata.DefaultsMessage_DefaultsEnum", + Filename: "test.proto", +} + +var E_DefaultDouble = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*float64)(nil), + Field: 201, + Name: "testdata.default_double", + Tag: "fixed64,201,opt,name=default_double,json=defaultDouble,def=3.1415", + Filename: "test.proto", +} + +var E_DefaultFloat = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*float32)(nil), + Field: 202, + Name: "testdata.default_float", + Tag: "fixed32,202,opt,name=default_float,json=defaultFloat,def=3.14", + Filename: "test.proto", +} + +var E_DefaultInt32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int32)(nil), + Field: 203, + Name: "testdata.default_int32", + Tag: "varint,203,opt,name=default_int32,json=defaultInt32,def=42", + Filename: "test.proto", +} + +var E_DefaultInt64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int64)(nil), + Field: 204, + Name: "testdata.default_int64", + Tag: "varint,204,opt,name=default_int64,json=defaultInt64,def=43", + Filename: "test.proto", +} + +var E_DefaultUint32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*uint32)(nil), + Field: 205, + Name: "testdata.default_uint32", + Tag: "varint,205,opt,name=default_uint32,json=defaultUint32,def=44", + Filename: "test.proto", +} + +var E_DefaultUint64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*uint64)(nil), + Field: 206, + Name: "testdata.default_uint64", + Tag: "varint,206,opt,name=default_uint64,json=defaultUint64,def=45", + Filename: "test.proto", +} + +var E_DefaultSint32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int32)(nil), + Field: 207, + Name: "testdata.default_sint32", + Tag: "zigzag32,207,opt,name=default_sint32,json=defaultSint32,def=46", + Filename: "test.proto", +} + +var E_DefaultSint64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int64)(nil), + Field: 208, + Name: "testdata.default_sint64", + Tag: "zigzag64,208,opt,name=default_sint64,json=defaultSint64,def=47", + Filename: "test.proto", +} + +var E_DefaultFixed32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*uint32)(nil), + Field: 209, + Name: "testdata.default_fixed32", + Tag: "fixed32,209,opt,name=default_fixed32,json=defaultFixed32,def=48", + Filename: "test.proto", +} + +var E_DefaultFixed64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*uint64)(nil), + Field: 210, + Name: "testdata.default_fixed64", + Tag: "fixed64,210,opt,name=default_fixed64,json=defaultFixed64,def=49", + Filename: "test.proto", +} + +var E_DefaultSfixed32 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int32)(nil), + Field: 211, + Name: "testdata.default_sfixed32", + Tag: "fixed32,211,opt,name=default_sfixed32,json=defaultSfixed32,def=50", + Filename: "test.proto", +} + +var E_DefaultSfixed64 = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*int64)(nil), + Field: 212, + Name: "testdata.default_sfixed64", + Tag: "fixed64,212,opt,name=default_sfixed64,json=defaultSfixed64,def=51", + Filename: "test.proto", +} + +var E_DefaultBool = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*bool)(nil), + Field: 213, + Name: "testdata.default_bool", + Tag: "varint,213,opt,name=default_bool,json=defaultBool,def=1", + Filename: "test.proto", +} + +var E_DefaultString = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*string)(nil), + Field: 214, + Name: "testdata.default_string", + Tag: "bytes,214,opt,name=default_string,json=defaultString,def=Hello, string", + Filename: "test.proto", +} + +var E_DefaultBytes = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: ([]byte)(nil), + Field: 215, + Name: "testdata.default_bytes", + Tag: "bytes,215,opt,name=default_bytes,json=defaultBytes,def=Hello, bytes", + Filename: "test.proto", +} + +var E_DefaultEnum = &proto.ExtensionDesc{ + ExtendedType: (*DefaultsMessage)(nil), + ExtensionType: (*DefaultsMessage_DefaultsEnum)(nil), + Field: 216, + Name: "testdata.default_enum", + Tag: "varint,216,opt,name=default_enum,json=defaultEnum,enum=testdata.DefaultsMessage_DefaultsEnum,def=1", + Filename: "test.proto", +} + +var E_X201 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 201, + Name: "testdata.x201", + Tag: "bytes,201,opt,name=x201", + Filename: "test.proto", +} + +var E_X202 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 202, + Name: "testdata.x202", + Tag: "bytes,202,opt,name=x202", + Filename: "test.proto", +} + +var E_X203 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 203, + Name: "testdata.x203", + Tag: "bytes,203,opt,name=x203", + Filename: "test.proto", +} + +var E_X204 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 204, + Name: "testdata.x204", + Tag: "bytes,204,opt,name=x204", + Filename: "test.proto", +} + +var E_X205 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 205, + Name: "testdata.x205", + Tag: "bytes,205,opt,name=x205", + Filename: "test.proto", +} + +var E_X206 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 206, + Name: "testdata.x206", + Tag: "bytes,206,opt,name=x206", + Filename: "test.proto", +} + +var E_X207 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 207, + Name: "testdata.x207", + Tag: "bytes,207,opt,name=x207", + Filename: "test.proto", +} + +var E_X208 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 208, + Name: "testdata.x208", + Tag: "bytes,208,opt,name=x208", + Filename: "test.proto", +} + +var E_X209 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 209, + Name: "testdata.x209", + Tag: "bytes,209,opt,name=x209", + Filename: "test.proto", +} + +var E_X210 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 210, + Name: "testdata.x210", + Tag: "bytes,210,opt,name=x210", + Filename: "test.proto", +} + +var E_X211 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 211, + Name: "testdata.x211", + Tag: "bytes,211,opt,name=x211", + Filename: "test.proto", +} + +var E_X212 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 212, + Name: "testdata.x212", + Tag: "bytes,212,opt,name=x212", + Filename: "test.proto", +} + +var E_X213 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 213, + Name: "testdata.x213", + Tag: "bytes,213,opt,name=x213", + Filename: "test.proto", +} + +var E_X214 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 214, + Name: "testdata.x214", + Tag: "bytes,214,opt,name=x214", + Filename: "test.proto", +} + +var E_X215 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 215, + Name: "testdata.x215", + Tag: "bytes,215,opt,name=x215", + Filename: "test.proto", +} + +var E_X216 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 216, + Name: "testdata.x216", + Tag: "bytes,216,opt,name=x216", + Filename: "test.proto", +} + +var E_X217 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 217, + Name: "testdata.x217", + Tag: "bytes,217,opt,name=x217", + Filename: "test.proto", +} + +var E_X218 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 218, + Name: "testdata.x218", + Tag: "bytes,218,opt,name=x218", + Filename: "test.proto", +} + +var E_X219 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 219, + Name: "testdata.x219", + Tag: "bytes,219,opt,name=x219", + Filename: "test.proto", +} + +var E_X220 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 220, + Name: "testdata.x220", + Tag: "bytes,220,opt,name=x220", + Filename: "test.proto", +} + +var E_X221 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 221, + Name: "testdata.x221", + Tag: "bytes,221,opt,name=x221", + Filename: "test.proto", +} + +var E_X222 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 222, + Name: "testdata.x222", + Tag: "bytes,222,opt,name=x222", + Filename: "test.proto", +} + +var E_X223 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 223, + Name: "testdata.x223", + Tag: "bytes,223,opt,name=x223", + Filename: "test.proto", +} + +var E_X224 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 224, + Name: "testdata.x224", + Tag: "bytes,224,opt,name=x224", + Filename: "test.proto", +} + +var E_X225 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 225, + Name: "testdata.x225", + Tag: "bytes,225,opt,name=x225", + Filename: "test.proto", +} + +var E_X226 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 226, + Name: "testdata.x226", + Tag: "bytes,226,opt,name=x226", + Filename: "test.proto", +} + +var E_X227 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 227, + Name: "testdata.x227", + Tag: "bytes,227,opt,name=x227", + Filename: "test.proto", +} + +var E_X228 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 228, + Name: "testdata.x228", + Tag: "bytes,228,opt,name=x228", + Filename: "test.proto", +} + +var E_X229 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 229, + Name: "testdata.x229", + Tag: "bytes,229,opt,name=x229", + Filename: "test.proto", +} + +var E_X230 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 230, + Name: "testdata.x230", + Tag: "bytes,230,opt,name=x230", + Filename: "test.proto", +} + +var E_X231 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 231, + Name: "testdata.x231", + Tag: "bytes,231,opt,name=x231", + Filename: "test.proto", +} + +var E_X232 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 232, + Name: "testdata.x232", + Tag: "bytes,232,opt,name=x232", + Filename: "test.proto", +} + +var E_X233 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 233, + Name: "testdata.x233", + Tag: "bytes,233,opt,name=x233", + Filename: "test.proto", +} + +var E_X234 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 234, + Name: "testdata.x234", + Tag: "bytes,234,opt,name=x234", + Filename: "test.proto", +} + +var E_X235 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 235, + Name: "testdata.x235", + Tag: "bytes,235,opt,name=x235", + Filename: "test.proto", +} + +var E_X236 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 236, + Name: "testdata.x236", + Tag: "bytes,236,opt,name=x236", + Filename: "test.proto", +} + +var E_X237 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 237, + Name: "testdata.x237", + Tag: "bytes,237,opt,name=x237", + Filename: "test.proto", +} + +var E_X238 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 238, + Name: "testdata.x238", + Tag: "bytes,238,opt,name=x238", + Filename: "test.proto", +} + +var E_X239 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 239, + Name: "testdata.x239", + Tag: "bytes,239,opt,name=x239", + Filename: "test.proto", +} + +var E_X240 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 240, + Name: "testdata.x240", + Tag: "bytes,240,opt,name=x240", + Filename: "test.proto", +} + +var E_X241 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 241, + Name: "testdata.x241", + Tag: "bytes,241,opt,name=x241", + Filename: "test.proto", +} + +var E_X242 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 242, + Name: "testdata.x242", + Tag: "bytes,242,opt,name=x242", + Filename: "test.proto", +} + +var E_X243 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 243, + Name: "testdata.x243", + Tag: "bytes,243,opt,name=x243", + Filename: "test.proto", +} + +var E_X244 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 244, + Name: "testdata.x244", + Tag: "bytes,244,opt,name=x244", + Filename: "test.proto", +} + +var E_X245 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 245, + Name: "testdata.x245", + Tag: "bytes,245,opt,name=x245", + Filename: "test.proto", +} + +var E_X246 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 246, + Name: "testdata.x246", + Tag: "bytes,246,opt,name=x246", + Filename: "test.proto", +} + +var E_X247 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 247, + Name: "testdata.x247", + Tag: "bytes,247,opt,name=x247", + Filename: "test.proto", +} + +var E_X248 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 248, + Name: "testdata.x248", + Tag: "bytes,248,opt,name=x248", + Filename: "test.proto", +} + +var E_X249 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 249, + Name: "testdata.x249", + Tag: "bytes,249,opt,name=x249", + Filename: "test.proto", +} + +var E_X250 = &proto.ExtensionDesc{ + ExtendedType: (*MyMessageSet)(nil), + ExtensionType: (*Empty)(nil), + Field: 250, + Name: "testdata.x250", + Tag: "bytes,250,opt,name=x250", + Filename: "test.proto", +} + +func init() { + proto.RegisterType((*GoEnum)(nil), "testdata.GoEnum") + proto.RegisterType((*GoTestField)(nil), "testdata.GoTestField") + proto.RegisterType((*GoTest)(nil), "testdata.GoTest") + proto.RegisterType((*GoTest_RequiredGroup)(nil), "testdata.GoTest.RequiredGroup") + proto.RegisterType((*GoTest_RepeatedGroup)(nil), "testdata.GoTest.RepeatedGroup") + proto.RegisterType((*GoTest_OptionalGroup)(nil), "testdata.GoTest.OptionalGroup") + proto.RegisterType((*GoTestRequiredGroupField)(nil), "testdata.GoTestRequiredGroupField") + proto.RegisterType((*GoTestRequiredGroupField_Group)(nil), "testdata.GoTestRequiredGroupField.Group") + proto.RegisterType((*GoSkipTest)(nil), "testdata.GoSkipTest") + proto.RegisterType((*GoSkipTest_SkipGroup)(nil), "testdata.GoSkipTest.SkipGroup") + proto.RegisterType((*NonPackedTest)(nil), "testdata.NonPackedTest") + proto.RegisterType((*PackedTest)(nil), "testdata.PackedTest") + proto.RegisterType((*MaxTag)(nil), "testdata.MaxTag") + proto.RegisterType((*OldMessage)(nil), "testdata.OldMessage") + proto.RegisterType((*OldMessage_Nested)(nil), "testdata.OldMessage.Nested") + proto.RegisterType((*NewMessage)(nil), "testdata.NewMessage") + proto.RegisterType((*NewMessage_Nested)(nil), "testdata.NewMessage.Nested") + proto.RegisterType((*InnerMessage)(nil), "testdata.InnerMessage") + proto.RegisterType((*OtherMessage)(nil), "testdata.OtherMessage") + proto.RegisterType((*RequiredInnerMessage)(nil), "testdata.RequiredInnerMessage") + proto.RegisterType((*MyMessage)(nil), "testdata.MyMessage") + proto.RegisterType((*MyMessage_SomeGroup)(nil), "testdata.MyMessage.SomeGroup") + proto.RegisterType((*Ext)(nil), "testdata.Ext") + proto.RegisterType((*ComplexExtension)(nil), "testdata.ComplexExtension") + proto.RegisterType((*DefaultsMessage)(nil), "testdata.DefaultsMessage") + proto.RegisterType((*MyMessageSet)(nil), "testdata.MyMessageSet") + proto.RegisterType((*Empty)(nil), "testdata.Empty") + proto.RegisterType((*MessageList)(nil), "testdata.MessageList") + proto.RegisterType((*MessageList_Message)(nil), "testdata.MessageList.Message") + proto.RegisterType((*Strings)(nil), "testdata.Strings") + proto.RegisterType((*Defaults)(nil), "testdata.Defaults") + proto.RegisterType((*SubDefaults)(nil), "testdata.SubDefaults") + proto.RegisterType((*RepeatedEnum)(nil), "testdata.RepeatedEnum") + proto.RegisterType((*MoreRepeated)(nil), "testdata.MoreRepeated") + proto.RegisterType((*GroupOld)(nil), "testdata.GroupOld") + proto.RegisterType((*GroupOld_G)(nil), "testdata.GroupOld.G") + proto.RegisterType((*GroupNew)(nil), "testdata.GroupNew") + proto.RegisterType((*GroupNew_G)(nil), "testdata.GroupNew.G") + proto.RegisterType((*FloatingPoint)(nil), "testdata.FloatingPoint") + proto.RegisterType((*MessageWithMap)(nil), "testdata.MessageWithMap") + proto.RegisterType((*Oneof)(nil), "testdata.Oneof") + proto.RegisterType((*Oneof_F_Group)(nil), "testdata.Oneof.F_Group") + proto.RegisterType((*Communique)(nil), "testdata.Communique") + proto.RegisterEnum("testdata.FOO", FOO_name, FOO_value) + proto.RegisterEnum("testdata.GoTest_KIND", GoTest_KIND_name, GoTest_KIND_value) + proto.RegisterEnum("testdata.MyMessage_Color", MyMessage_Color_name, MyMessage_Color_value) + proto.RegisterEnum("testdata.DefaultsMessage_DefaultsEnum", DefaultsMessage_DefaultsEnum_name, DefaultsMessage_DefaultsEnum_value) + proto.RegisterEnum("testdata.Defaults_Color", Defaults_Color_name, Defaults_Color_value) + proto.RegisterEnum("testdata.RepeatedEnum_Color", RepeatedEnum_Color_name, RepeatedEnum_Color_value) + proto.RegisterExtension(E_Ext_More) + proto.RegisterExtension(E_Ext_Text) + proto.RegisterExtension(E_Ext_Number) + proto.RegisterExtension(E_Greeting) + proto.RegisterExtension(E_Complex) + proto.RegisterExtension(E_RComplex) + proto.RegisterExtension(E_NoDefaultDouble) + proto.RegisterExtension(E_NoDefaultFloat) + proto.RegisterExtension(E_NoDefaultInt32) + proto.RegisterExtension(E_NoDefaultInt64) + proto.RegisterExtension(E_NoDefaultUint32) + proto.RegisterExtension(E_NoDefaultUint64) + proto.RegisterExtension(E_NoDefaultSint32) + proto.RegisterExtension(E_NoDefaultSint64) + proto.RegisterExtension(E_NoDefaultFixed32) + proto.RegisterExtension(E_NoDefaultFixed64) + proto.RegisterExtension(E_NoDefaultSfixed32) + proto.RegisterExtension(E_NoDefaultSfixed64) + proto.RegisterExtension(E_NoDefaultBool) + proto.RegisterExtension(E_NoDefaultString) + proto.RegisterExtension(E_NoDefaultBytes) + proto.RegisterExtension(E_NoDefaultEnum) + proto.RegisterExtension(E_DefaultDouble) + proto.RegisterExtension(E_DefaultFloat) + proto.RegisterExtension(E_DefaultInt32) + proto.RegisterExtension(E_DefaultInt64) + proto.RegisterExtension(E_DefaultUint32) + proto.RegisterExtension(E_DefaultUint64) + proto.RegisterExtension(E_DefaultSint32) + proto.RegisterExtension(E_DefaultSint64) + proto.RegisterExtension(E_DefaultFixed32) + proto.RegisterExtension(E_DefaultFixed64) + proto.RegisterExtension(E_DefaultSfixed32) + proto.RegisterExtension(E_DefaultSfixed64) + proto.RegisterExtension(E_DefaultBool) + proto.RegisterExtension(E_DefaultString) + proto.RegisterExtension(E_DefaultBytes) + proto.RegisterExtension(E_DefaultEnum) + proto.RegisterExtension(E_X201) + proto.RegisterExtension(E_X202) + proto.RegisterExtension(E_X203) + proto.RegisterExtension(E_X204) + proto.RegisterExtension(E_X205) + proto.RegisterExtension(E_X206) + proto.RegisterExtension(E_X207) + proto.RegisterExtension(E_X208) + proto.RegisterExtension(E_X209) + proto.RegisterExtension(E_X210) + proto.RegisterExtension(E_X211) + proto.RegisterExtension(E_X212) + proto.RegisterExtension(E_X213) + proto.RegisterExtension(E_X214) + proto.RegisterExtension(E_X215) + proto.RegisterExtension(E_X216) + proto.RegisterExtension(E_X217) + proto.RegisterExtension(E_X218) + proto.RegisterExtension(E_X219) + proto.RegisterExtension(E_X220) + proto.RegisterExtension(E_X221) + proto.RegisterExtension(E_X222) + proto.RegisterExtension(E_X223) + proto.RegisterExtension(E_X224) + proto.RegisterExtension(E_X225) + proto.RegisterExtension(E_X226) + proto.RegisterExtension(E_X227) + proto.RegisterExtension(E_X228) + proto.RegisterExtension(E_X229) + proto.RegisterExtension(E_X230) + proto.RegisterExtension(E_X231) + proto.RegisterExtension(E_X232) + proto.RegisterExtension(E_X233) + proto.RegisterExtension(E_X234) + proto.RegisterExtension(E_X235) + proto.RegisterExtension(E_X236) + proto.RegisterExtension(E_X237) + proto.RegisterExtension(E_X238) + proto.RegisterExtension(E_X239) + proto.RegisterExtension(E_X240) + proto.RegisterExtension(E_X241) + proto.RegisterExtension(E_X242) + proto.RegisterExtension(E_X243) + proto.RegisterExtension(E_X244) + proto.RegisterExtension(E_X245) + proto.RegisterExtension(E_X246) + proto.RegisterExtension(E_X247) + proto.RegisterExtension(E_X248) + proto.RegisterExtension(E_X249) + proto.RegisterExtension(E_X250) +} + +func init() { proto.RegisterFile("test.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 4453 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x5a, 0xc9, 0x77, 0xdb, 0x48, + 0x7a, 0x37, 0xc0, 0xfd, 0x23, 0x25, 0x42, 0x65, 0xb5, 0x9b, 0x96, 0xbc, 0xc0, 0x9c, 0xe9, 0x6e, + 0x7a, 0xd3, 0x48, 0x20, 0x44, 0xdb, 0x74, 0xa7, 0xdf, 0xf3, 0x42, 0xca, 0x7a, 0x63, 0x89, 0x0a, + 0xa4, 0xee, 0x7e, 0xd3, 0x39, 0xf0, 0x51, 0x22, 0x44, 0xb3, 0x4d, 0x02, 0x34, 0x09, 0xc5, 0x52, + 0x72, 0xe9, 0x4b, 0x72, 0xcd, 0x76, 0xc9, 0x35, 0xa7, 0x9c, 0x92, 0xbc, 0x97, 0x7f, 0x22, 0xe9, + 0xee, 0x59, 0x7b, 0xd6, 0xac, 0x93, 0x7d, 0x99, 0xec, 0xdb, 0x4c, 0x92, 0x4b, 0xcf, 0xab, 0xaf, + 0x0a, 0x40, 0x01, 0x24, 0x20, 0xf9, 0x24, 0x56, 0xd5, 0xef, 0xf7, 0xd5, 0xf6, 0xab, 0xef, 0xab, + 0xaf, 0x20, 0x00, 0xc7, 0x9c, 0x38, 0x2b, 0xa3, 0xb1, 0xed, 0xd8, 0x24, 0x4b, 0x7f, 0x77, 0x3b, + 0x4e, 0xa7, 0x7c, 0x1d, 0xd2, 0x1b, 0x76, 0xc3, 0x3a, 0x1a, 0x92, 0xab, 0x90, 0x38, 0xb4, 0xed, + 0x92, 0xa4, 0xca, 0x95, 0x79, 0x6d, 0x6e, 0xc5, 0x45, 0xac, 0x34, 0x5b, 0x2d, 0x83, 0xb6, 0x94, + 0xef, 0x40, 0x7e, 0xc3, 0xde, 0x33, 0x27, 0x4e, 0xb3, 0x6f, 0x0e, 0xba, 0x64, 0x11, 0x52, 0x4f, + 0x3b, 0xfb, 0xe6, 0x00, 0x19, 0x39, 0x83, 0x15, 0x08, 0x81, 0xe4, 0xde, 0xc9, 0xc8, 0x2c, 0xc9, + 0x58, 0x89, 0xbf, 0xcb, 0xbf, 0x72, 0x85, 0x76, 0x42, 0x99, 0xe4, 0x3a, 0x24, 0xbf, 0xdc, 0xb7, + 0xba, 0xbc, 0x97, 0xd7, 0xfc, 0x5e, 0x58, 0xfb, 0xca, 0x97, 0x37, 0xb7, 0x1f, 0x1b, 0x08, 0xa1, + 0xf6, 0xf7, 0x3a, 0xfb, 0x03, 0x6a, 0x4a, 0xa2, 0xf6, 0xb1, 0x40, 0x6b, 0x77, 0x3a, 0xe3, 0xce, + 0xb0, 0x94, 0x50, 0xa5, 0x4a, 0xca, 0x60, 0x05, 0x72, 0x1f, 0xe6, 0x0c, 0xf3, 0xc5, 0x51, 0x7f, + 0x6c, 0x76, 0x71, 0x70, 0xa5, 0xa4, 0x2a, 0x57, 0xf2, 0xd3, 0xf6, 0xb1, 0xd1, 0x08, 0x62, 0x19, + 0x79, 0x64, 0x76, 0x1c, 0x97, 0x9c, 0x52, 0x13, 0xb1, 0x64, 0x01, 0x4b, 0xc9, 0xad, 0x91, 0xd3, + 0xb7, 0xad, 0xce, 0x80, 0x91, 0xd3, 0xaa, 0x14, 0x43, 0x0e, 0x60, 0xc9, 0x9b, 0x50, 0x6c, 0xb6, + 0x1f, 0xda, 0xf6, 0xa0, 0x3d, 0xe6, 0x23, 0x2a, 0x81, 0x2a, 0x57, 0xb2, 0xc6, 0x5c, 0x93, 0xd6, + 0xba, 0xc3, 0x24, 0x15, 0x50, 0x9a, 0xed, 0x4d, 0xcb, 0xa9, 0x6a, 0x3e, 0x30, 0xaf, 0xca, 0x95, + 0x94, 0x31, 0xdf, 0xc4, 0xea, 0x29, 0x64, 0x4d, 0xf7, 0x91, 0x05, 0x55, 0xae, 0x24, 0x18, 0xb2, + 0xa6, 0x7b, 0xc8, 0x5b, 0x40, 0x9a, 0xed, 0x66, 0xff, 0xd8, 0xec, 0x8a, 0x56, 0xe7, 0x54, 0xb9, + 0x92, 0x31, 0x94, 0x26, 0x6f, 0x98, 0x81, 0x16, 0x2d, 0xcf, 0xab, 0x72, 0x25, 0xed, 0xa2, 0x05, + 0xdb, 0x37, 0x60, 0xa1, 0xd9, 0x7e, 0xb7, 0x1f, 0x1c, 0x70, 0x51, 0x95, 0x2b, 0x73, 0x46, 0xb1, + 0xc9, 0xea, 0xa7, 0xb1, 0xa2, 0x61, 0x45, 0x95, 0x2b, 0x49, 0x8e, 0x15, 0xec, 0xe2, 0xec, 0x9a, + 0x03, 0xbb, 0xe3, 0xf8, 0xd0, 0x05, 0x55, 0xae, 0xc8, 0xc6, 0x7c, 0x13, 0xab, 0x83, 0x56, 0x1f, + 0xdb, 0x47, 0xfb, 0x03, 0xd3, 0x87, 0x12, 0x55, 0xae, 0x48, 0x46, 0xb1, 0xc9, 0xea, 0x83, 0xd8, + 0x5d, 0x67, 0xdc, 0xb7, 0x7a, 0x3e, 0xf6, 0x3c, 0xea, 0xb7, 0xd8, 0x64, 0xf5, 0xc1, 0x11, 0x3c, + 0x3c, 0x71, 0xcc, 0x89, 0x0f, 0x35, 0x55, 0xb9, 0x52, 0x30, 0xe6, 0x9b, 0x58, 0x1d, 0xb2, 0x1a, + 0x5a, 0x83, 0x43, 0x55, 0xae, 0x2c, 0x50, 0xab, 0x33, 0xd6, 0x60, 0x37, 0xb4, 0x06, 0x3d, 0x55, + 0xae, 0x10, 0x8e, 0x15, 0xd6, 0x40, 0xd4, 0x0c, 0x13, 0x62, 0x69, 0x51, 0x4d, 0x08, 0x9a, 0x61, + 0x95, 0x41, 0xcd, 0x70, 0xe0, 0x6b, 0x6a, 0x42, 0xd4, 0x4c, 0x08, 0x89, 0x9d, 0x73, 0xe4, 0x05, + 0x35, 0x21, 0x6a, 0x86, 0x23, 0x43, 0x9a, 0xe1, 0xd8, 0xd7, 0xd5, 0x44, 0x50, 0x33, 0x53, 0x68, + 0xd1, 0x72, 0x49, 0x4d, 0x04, 0x35, 0xc3, 0xd1, 0x41, 0xcd, 0x70, 0xf0, 0x45, 0x35, 0x11, 0xd0, + 0x4c, 0x18, 0x2b, 0x1a, 0x5e, 0x52, 0x13, 0x01, 0xcd, 0x88, 0xb3, 0x73, 0x35, 0xc3, 0xa1, 0xcb, + 0x6a, 0x42, 0xd4, 0x8c, 0x68, 0xd5, 0xd3, 0x0c, 0x87, 0x5e, 0x52, 0x13, 0x01, 0xcd, 0x88, 0x58, + 0x4f, 0x33, 0x1c, 0x7b, 0x59, 0x4d, 0x04, 0x34, 0xc3, 0xb1, 0xd7, 0x45, 0xcd, 0x70, 0xe8, 0xc7, + 0x92, 0x9a, 0x10, 0x45, 0xc3, 0xa1, 0x37, 0x03, 0xa2, 0xe1, 0xd8, 0x4f, 0x28, 0x56, 0x54, 0x4d, + 0x18, 0x2c, 0xae, 0xc2, 0xa7, 0x14, 0x2c, 0xca, 0x86, 0x83, 0x7d, 0xd9, 0xd8, 0xdc, 0x05, 0x95, + 0xae, 0xa8, 0x92, 0x27, 0x1b, 0xd7, 0x2f, 0x89, 0xb2, 0xf1, 0x80, 0x57, 0xd1, 0xd5, 0x72, 0xd9, + 0x4c, 0x21, 0x6b, 0xba, 0x8f, 0x54, 0x55, 0xc9, 0x97, 0x8d, 0x87, 0x0c, 0xc8, 0xc6, 0xc3, 0x5e, + 0x53, 0x25, 0x51, 0x36, 0x33, 0xd0, 0xa2, 0xe5, 0xb2, 0x2a, 0x89, 0xb2, 0xf1, 0xd0, 0xa2, 0x6c, + 0x3c, 0xf0, 0x17, 0x54, 0x49, 0x90, 0xcd, 0x34, 0x56, 0x34, 0xfc, 0x45, 0x55, 0x12, 0x64, 0x13, + 0x9c, 0x1d, 0x93, 0x8d, 0x07, 0x7d, 0x43, 0x95, 0x7c, 0xd9, 0x04, 0xad, 0x72, 0xd9, 0x78, 0xd0, + 0x37, 0x55, 0x49, 0x90, 0x4d, 0x10, 0xcb, 0x65, 0xe3, 0x61, 0xdf, 0xc2, 0xf8, 0xe6, 0xca, 0xc6, + 0xc3, 0x0a, 0xb2, 0xf1, 0xa0, 0xbf, 0x43, 0x63, 0xa1, 0x27, 0x1b, 0x0f, 0x2a, 0xca, 0xc6, 0xc3, + 0xfe, 0x2e, 0xc5, 0xfa, 0xb2, 0x99, 0x06, 0x8b, 0xab, 0xf0, 0x7b, 0x14, 0xec, 0xcb, 0xc6, 0x03, + 0xaf, 0xe0, 0x20, 0xa8, 0x6c, 0xba, 0xe6, 0x61, 0xe7, 0x68, 0x40, 0x25, 0x56, 0xa1, 0xba, 0xa9, + 0x27, 0x9d, 0xf1, 0x91, 0x49, 0x47, 0x62, 0xdb, 0x83, 0xc7, 0x6e, 0x1b, 0x59, 0xa1, 0xc6, 0x99, + 0x7c, 0x7c, 0xc2, 0x75, 0xaa, 0x9f, 0xba, 0x5c, 0xd5, 0x8c, 0x22, 0xd3, 0xd0, 0x34, 0xbe, 0xa6, + 0x0b, 0xf8, 0x1b, 0x54, 0x45, 0x75, 0xb9, 0xa6, 0x33, 0x7c, 0x4d, 0xf7, 0xf1, 0x55, 0x38, 0xef, + 0x4b, 0xc9, 0x67, 0xdc, 0xa4, 0x5a, 0xaa, 0x27, 0xaa, 0xda, 0xaa, 0xb1, 0xe0, 0x0a, 0x6a, 0x16, + 0x29, 0xd0, 0xcd, 0x2d, 0x2a, 0xa9, 0x7a, 0xa2, 0xa6, 0x7b, 0x24, 0xb1, 0x27, 0x8d, 0xca, 0x90, + 0x0b, 0xcb, 0xe7, 0xdc, 0xa6, 0xca, 0xaa, 0x27, 0xab, 0xda, 0xea, 0xaa, 0xa1, 0x70, 0x7d, 0xcd, + 0xe0, 0x04, 0xfa, 0x59, 0xa1, 0x0a, 0xab, 0x27, 0x6b, 0xba, 0xc7, 0x09, 0xf6, 0xb3, 0xe0, 0x0a, + 0xcd, 0xa7, 0x7c, 0x89, 0x2a, 0xad, 0x9e, 0xae, 0xae, 0xe9, 0x6b, 0xeb, 0xf7, 0x8c, 0x22, 0x53, + 0x9c, 0xcf, 0xd1, 0x69, 0x3f, 0x5c, 0x72, 0x3e, 0x69, 0x95, 0x6a, 0xae, 0x9e, 0xd6, 0xee, 0xac, + 0xdd, 0xd5, 0xee, 0x1a, 0x0a, 0xd7, 0x9e, 0xcf, 0x7a, 0x87, 0xb2, 0xb8, 0xf8, 0x7c, 0xd6, 0x1a, + 0x55, 0x5f, 0x5d, 0x79, 0x66, 0x0e, 0x06, 0xf6, 0x2d, 0xb5, 0xfc, 0xd2, 0x1e, 0x0f, 0xba, 0xd7, + 0xca, 0x60, 0x28, 0x5c, 0x8f, 0x62, 0xaf, 0x0b, 0xae, 0x20, 0x7d, 0xfa, 0xaf, 0xd1, 0x7b, 0x58, + 0xa1, 0x9e, 0x79, 0xd8, 0xef, 0x59, 0xf6, 0xc4, 0x34, 0x8a, 0x4c, 0x9a, 0xa1, 0x35, 0xd9, 0x0d, + 0xaf, 0xe3, 0xaf, 0x53, 0xda, 0x42, 0x3d, 0x71, 0xbb, 0xaa, 0xd1, 0x9e, 0x66, 0xad, 0xe3, 0x6e, + 0x78, 0x1d, 0x7f, 0x83, 0x72, 0x48, 0x3d, 0x71, 0xbb, 0xa6, 0x73, 0x8e, 0xb8, 0x8e, 0x77, 0xe0, + 0x42, 0x28, 0x2e, 0xb6, 0x47, 0x9d, 0x83, 0xe7, 0x66, 0xb7, 0xa4, 0xd1, 0xf0, 0xf8, 0x50, 0x56, + 0x24, 0xe3, 0x7c, 0x20, 0x44, 0xee, 0x60, 0x33, 0xb9, 0x07, 0xaf, 0x87, 0x03, 0xa5, 0xcb, 0xac, + 0xd2, 0x78, 0x89, 0xcc, 0xc5, 0x60, 0xcc, 0x0c, 0x51, 0x05, 0x07, 0xec, 0x52, 0x75, 0x1a, 0x40, + 0x7d, 0xaa, 0xef, 0x89, 0x39, 0xf5, 0x67, 0xe0, 0xe2, 0x74, 0x28, 0x75, 0xc9, 0xeb, 0x34, 0xa2, + 0x22, 0xf9, 0x42, 0x38, 0xaa, 0x4e, 0xd1, 0x67, 0xf4, 0x5d, 0xa3, 0x21, 0x56, 0xa4, 0x4f, 0xf5, + 0x7e, 0x1f, 0x4a, 0x53, 0xc1, 0xd6, 0x65, 0xdf, 0xa1, 0x31, 0x17, 0xd9, 0xaf, 0x85, 0xe2, 0x6e, + 0x98, 0x3c, 0xa3, 0xeb, 0xbb, 0x34, 0x08, 0x0b, 0xe4, 0xa9, 0x9e, 0x71, 0xc9, 0x82, 0xe1, 0xd8, + 0xe5, 0xde, 0xa3, 0x51, 0x99, 0x2f, 0x59, 0x20, 0x32, 0x8b, 0xfd, 0x86, 0xe2, 0xb3, 0xcb, 0xad, + 0xd3, 0x30, 0xcd, 0xfb, 0x0d, 0x86, 0x6a, 0x4e, 0x7e, 0x9b, 0x92, 0x77, 0x67, 0xcf, 0xf8, 0xc7, + 0x09, 0x1a, 0x60, 0x39, 0x7b, 0x77, 0xd6, 0x94, 0x3d, 0xf6, 0x8c, 0x29, 0xff, 0x84, 0xb2, 0x89, + 0xc0, 0x9e, 0x9a, 0xf3, 0x63, 0x98, 0x73, 0x6f, 0x75, 0xbd, 0xb1, 0x7d, 0x34, 0x2a, 0x35, 0x55, + 0xb9, 0x02, 0xda, 0x95, 0xa9, 0xec, 0xc7, 0xbd, 0xe4, 0x6d, 0x50, 0x94, 0x11, 0x24, 0x31, 0x2b, + 0xcc, 0x2e, 0xb3, 0xb2, 0xa3, 0x26, 0x22, 0xac, 0x30, 0x94, 0x67, 0x45, 0x20, 0x51, 0x2b, 0xae, + 0xd3, 0x67, 0x56, 0x3e, 0x50, 0xa5, 0x99, 0x56, 0xdc, 0x10, 0xc0, 0xad, 0x04, 0x48, 0x4b, 0xeb, + 0x7e, 0xbe, 0x85, 0xed, 0xe4, 0x8b, 0xe1, 0x04, 0x6c, 0x03, 0xef, 0xcf, 0xc1, 0x4a, 0x46, 0x13, + 0x06, 0x37, 0x4d, 0xfb, 0xd9, 0x08, 0x5a, 0x60, 0x34, 0xd3, 0xb4, 0x9f, 0x9b, 0x41, 0x2b, 0xff, + 0xa6, 0x04, 0x49, 0x9a, 0x4f, 0x92, 0x2c, 0x24, 0xdf, 0x6b, 0x6d, 0x3e, 0x56, 0xce, 0xd1, 0x5f, + 0x0f, 0x5b, 0xad, 0xa7, 0x8a, 0x44, 0x72, 0x90, 0x7a, 0xf8, 0x95, 0xbd, 0xc6, 0xae, 0x22, 0x93, + 0x22, 0xe4, 0x9b, 0x9b, 0xdb, 0x1b, 0x0d, 0x63, 0xc7, 0xd8, 0xdc, 0xde, 0x53, 0x12, 0xb4, 0xad, + 0xf9, 0xb4, 0xf5, 0x60, 0x4f, 0x49, 0x92, 0x0c, 0x24, 0x68, 0x5d, 0x8a, 0x00, 0xa4, 0x77, 0xf7, + 0x8c, 0xcd, 0xed, 0x0d, 0x25, 0x4d, 0xad, 0xec, 0x6d, 0x6e, 0x35, 0x94, 0x0c, 0x45, 0xee, 0xbd, + 0xbb, 0xf3, 0xb4, 0xa1, 0x64, 0xe9, 0xcf, 0x07, 0x86, 0xf1, 0xe0, 0x2b, 0x4a, 0x8e, 0x92, 0xb6, + 0x1e, 0xec, 0x28, 0x80, 0xcd, 0x0f, 0x1e, 0x3e, 0x6d, 0x28, 0x79, 0x52, 0x80, 0x6c, 0xf3, 0xdd, + 0xed, 0x47, 0x7b, 0x9b, 0xad, 0x6d, 0xa5, 0x50, 0x3e, 0x81, 0x12, 0x5b, 0xe6, 0xc0, 0x2a, 0xb2, + 0xa4, 0xf0, 0x1d, 0x48, 0xb1, 0x9d, 0x91, 0x50, 0x25, 0x95, 0xf0, 0xce, 0x4c, 0x53, 0x56, 0xd8, + 0x1e, 0x31, 0xda, 0xd2, 0x65, 0x48, 0xb1, 0x55, 0x5a, 0x84, 0x14, 0x5b, 0x1d, 0x19, 0x53, 0x45, + 0x56, 0x28, 0xff, 0x96, 0x0c, 0xb0, 0x61, 0xef, 0x3e, 0xef, 0x8f, 0x30, 0x21, 0xbf, 0x0c, 0x30, + 0x79, 0xde, 0x1f, 0xb5, 0x51, 0xf5, 0x3c, 0xa9, 0xcc, 0xd1, 0x1a, 0xf4, 0x77, 0xe4, 0x1a, 0x14, + 0xb0, 0xf9, 0x90, 0x79, 0x21, 0xcc, 0x25, 0x33, 0x46, 0x9e, 0xd6, 0x71, 0xc7, 0x14, 0x84, 0xd4, + 0x74, 0x4c, 0x21, 0xd3, 0x02, 0xa4, 0xa6, 0x93, 0xab, 0x80, 0xc5, 0xf6, 0x04, 0x23, 0x0a, 0xa6, + 0x8d, 0x39, 0x03, 0xfb, 0x65, 0x31, 0x86, 0xbc, 0x0d, 0xd8, 0x27, 0x9b, 0x77, 0x71, 0xfa, 0x74, + 0xb8, 0xc3, 0x5d, 0xa1, 0x3f, 0xd8, 0x6c, 0x7d, 0xc2, 0x52, 0x0b, 0x72, 0x5e, 0x3d, 0xed, 0x0b, + 0x6b, 0xf9, 0x8c, 0x14, 0x9c, 0x11, 0x60, 0x95, 0x37, 0x25, 0x06, 0xe0, 0xa3, 0x59, 0xc0, 0xd1, + 0x30, 0x12, 0x1b, 0x4e, 0xf9, 0x32, 0xcc, 0x6d, 0xdb, 0x16, 0x3b, 0xbd, 0xb8, 0x4a, 0x05, 0x90, + 0x3a, 0x25, 0x09, 0xb3, 0x27, 0xa9, 0x53, 0xbe, 0x02, 0x20, 0xb4, 0x29, 0x20, 0xed, 0xb3, 0x36, + 0xf4, 0x01, 0xd2, 0x7e, 0xf9, 0x26, 0xa4, 0xb7, 0x3a, 0xc7, 0x7b, 0x9d, 0x1e, 0xb9, 0x06, 0x30, + 0xe8, 0x4c, 0x9c, 0xf6, 0x21, 0xee, 0xc3, 0xe7, 0x9f, 0x7f, 0xfe, 0xb9, 0x84, 0x97, 0xbd, 0x1c, + 0xad, 0x65, 0xfb, 0xf1, 0x02, 0xa0, 0x35, 0xe8, 0x6e, 0x99, 0x93, 0x49, 0xa7, 0x67, 0x92, 0x2a, + 0xa4, 0x2d, 0x73, 0x42, 0xa3, 0x9d, 0x84, 0xef, 0x08, 0xcb, 0xfe, 0x2a, 0xf8, 0xa8, 0x95, 0x6d, + 0x84, 0x18, 0x1c, 0x4a, 0x14, 0x48, 0x58, 0x47, 0x43, 0x7c, 0x27, 0x49, 0x19, 0xf4, 0xe7, 0xd2, + 0x25, 0x48, 0x33, 0x0c, 0x21, 0x90, 0xb4, 0x3a, 0x43, 0xb3, 0xc4, 0xfa, 0xc5, 0xdf, 0xe5, 0x5f, + 0x95, 0x00, 0xb6, 0xcd, 0x97, 0x67, 0xe8, 0xd3, 0x47, 0xc5, 0xf4, 0x99, 0x60, 0x7d, 0xde, 0x8f, + 0xeb, 0x93, 0xea, 0xec, 0xd0, 0xb6, 0xbb, 0x6d, 0xb6, 0xc5, 0xec, 0x49, 0x27, 0x47, 0x6b, 0x70, + 0xd7, 0xca, 0x1f, 0x40, 0x61, 0xd3, 0xb2, 0xcc, 0xb1, 0x3b, 0x26, 0x02, 0xc9, 0x67, 0xf6, 0xc4, + 0xe1, 0x6f, 0x4b, 0xf8, 0x9b, 0x94, 0x20, 0x39, 0xb2, 0xc7, 0x0e, 0x9b, 0x67, 0x3d, 0xa9, 0xaf, + 0xae, 0xae, 0x1a, 0x58, 0x43, 0x2e, 0x41, 0xee, 0xc0, 0xb6, 0x2c, 0xf3, 0x80, 0x4e, 0x22, 0x81, + 0x69, 0x8d, 0x5f, 0x51, 0xfe, 0x65, 0x09, 0x0a, 0x2d, 0xe7, 0x99, 0x6f, 0x5c, 0x81, 0xc4, 0x73, + 0xf3, 0x04, 0x87, 0x97, 0x30, 0xe8, 0x4f, 0x7a, 0x54, 0x7e, 0xbe, 0x33, 0x38, 0x62, 0x6f, 0x4d, + 0x05, 0x83, 0x15, 0xc8, 0x05, 0x48, 0xbf, 0x34, 0xfb, 0xbd, 0x67, 0x0e, 0xda, 0x94, 0x0d, 0x5e, + 0x22, 0xb7, 0x20, 0xd5, 0xa7, 0x83, 0x2d, 0x25, 0x71, 0xbd, 0x2e, 0xf8, 0xeb, 0x25, 0xce, 0xc1, + 0x60, 0xa0, 0x1b, 0xd9, 0x6c, 0x57, 0xf9, 0xe8, 0xa3, 0x8f, 0x3e, 0x92, 0xcb, 0x87, 0xb0, 0xe8, + 0x1e, 0xde, 0xc0, 0x64, 0xb7, 0xa1, 0x34, 0x30, 0xed, 0xf6, 0x61, 0xdf, 0xea, 0x0c, 0x06, 0x27, + 0xed, 0x97, 0xb6, 0xd5, 0xee, 0x58, 0x6d, 0x7b, 0x72, 0xd0, 0x19, 0xe3, 0x02, 0x44, 0x77, 0xb1, + 0x38, 0x30, 0xed, 0x26, 0xa3, 0xbd, 0x6f, 0x5b, 0x0f, 0xac, 0x16, 0xe5, 0x94, 0xff, 0x20, 0x09, + 0xb9, 0xad, 0x13, 0xd7, 0xfa, 0x22, 0xa4, 0x0e, 0xec, 0x23, 0x8b, 0xad, 0x65, 0xca, 0x60, 0x05, + 0x6f, 0x8f, 0x64, 0x61, 0x8f, 0x16, 0x21, 0xf5, 0xe2, 0xc8, 0x76, 0x4c, 0x9c, 0x6e, 0xce, 0x60, + 0x05, 0xba, 0x5a, 0x23, 0xd3, 0x29, 0x25, 0x31, 0xb9, 0xa5, 0x3f, 0xfd, 0xf9, 0xa7, 0xce, 0x30, + 0x7f, 0xb2, 0x02, 0x69, 0x9b, 0xae, 0xfe, 0xa4, 0x94, 0xc6, 0x77, 0x35, 0x01, 0x2e, 0xee, 0x8a, + 0xc1, 0x51, 0x64, 0x13, 0x16, 0x5e, 0x9a, 0xed, 0xe1, 0xd1, 0xc4, 0x69, 0xf7, 0xec, 0x76, 0xd7, + 0x34, 0x47, 0xe6, 0xb8, 0x34, 0x87, 0x3d, 0x09, 0x3e, 0x61, 0xd6, 0x42, 0x1a, 0xf3, 0x2f, 0xcd, + 0xad, 0xa3, 0x89, 0xb3, 0x61, 0x3f, 0x46, 0x16, 0xa9, 0x42, 0x6e, 0x6c, 0x52, 0x4f, 0x40, 0x07, + 0x5b, 0x08, 0xf7, 0x1e, 0xa0, 0x66, 0xc7, 0xe6, 0x08, 0x2b, 0xc8, 0x3a, 0x64, 0xf7, 0xfb, 0xcf, + 0xcd, 0xc9, 0x33, 0xb3, 0x5b, 0xca, 0xa8, 0x52, 0x65, 0x5e, 0xbb, 0xe8, 0x73, 0xbc, 0x65, 0x5d, + 0x79, 0x64, 0x0f, 0xec, 0xb1, 0xe1, 0x41, 0xc9, 0x7d, 0xc8, 0x4d, 0xec, 0xa1, 0xc9, 0xf4, 0x9d, + 0xc5, 0xa0, 0x7a, 0x79, 0x16, 0x6f, 0xd7, 0x1e, 0x9a, 0xae, 0x07, 0x73, 0xf1, 0x64, 0x99, 0x0d, + 0x74, 0x9f, 0x5e, 0x9d, 0x4b, 0x80, 0x4f, 0x03, 0x74, 0x40, 0x78, 0x95, 0x26, 0x4b, 0x74, 0x40, + 0xbd, 0x43, 0x7a, 0x23, 0x2a, 0xe5, 0x31, 0xaf, 0xf4, 0xca, 0x4b, 0xb7, 0x20, 0xe7, 0x19, 0xf4, + 0x5d, 0x1f, 0x73, 0x37, 0x39, 0xf4, 0x07, 0xcc, 0xf5, 0x31, 0x5f, 0xf3, 0x06, 0xa4, 0x70, 0xd8, + 0x34, 0x42, 0x19, 0x0d, 0x1a, 0x10, 0x73, 0x90, 0xda, 0x30, 0x1a, 0x8d, 0x6d, 0x45, 0xc2, 0xd8, + 0xf8, 0xf4, 0xdd, 0x86, 0x22, 0x0b, 0x8a, 0xfd, 0x6d, 0x09, 0x12, 0x8d, 0x63, 0x54, 0x0b, 0x9d, + 0x86, 0x7b, 0xa2, 0xe9, 0x6f, 0xad, 0x06, 0xc9, 0xa1, 0x3d, 0x36, 0xc9, 0xf9, 0x19, 0xb3, 0x2c, + 0xf5, 0x70, 0xbf, 0x84, 0x57, 0xe4, 0xc6, 0xb1, 0x63, 0x20, 0x5e, 0x7b, 0x0b, 0x92, 0x8e, 0x79, + 0xec, 0xcc, 0xe6, 0x3d, 0x63, 0x1d, 0x50, 0x80, 0x76, 0x13, 0xd2, 0xd6, 0xd1, 0x70, 0xdf, 0x1c, + 0xcf, 0x86, 0xf6, 0x71, 0x7a, 0x1c, 0x52, 0x7e, 0x0f, 0x94, 0x47, 0xf6, 0x70, 0x34, 0x30, 0x8f, + 0x1b, 0xc7, 0x8e, 0x69, 0x4d, 0xfa, 0xb6, 0x45, 0xf5, 0x7c, 0xd8, 0x1f, 0xa3, 0x17, 0xc1, 0xb7, + 0x62, 0x2c, 0xd0, 0x53, 0x3d, 0x31, 0x0f, 0x6c, 0xab, 0xcb, 0x1d, 0x26, 0x2f, 0x51, 0xb4, 0xf3, + 0xac, 0x3f, 0xa6, 0x0e, 0x84, 0xfa, 0x79, 0x56, 0x28, 0x6f, 0x40, 0x91, 0xe7, 0x18, 0x13, 0xde, + 0x71, 0xf9, 0x06, 0x14, 0xdc, 0x2a, 0x7c, 0x38, 0xcf, 0x42, 0xf2, 0x83, 0x86, 0xd1, 0x52, 0xce, + 0xd1, 0x65, 0x6d, 0x6d, 0x37, 0x14, 0x89, 0xfe, 0xd8, 0x7b, 0xbf, 0x15, 0x58, 0xca, 0x4b, 0x50, + 0xf0, 0xc6, 0xbe, 0x6b, 0x3a, 0xd8, 0x42, 0x03, 0x42, 0xa6, 0x2e, 0x67, 0xa5, 0x72, 0x06, 0x52, + 0x8d, 0xe1, 0xc8, 0x39, 0x29, 0xff, 0x22, 0xe4, 0x39, 0xe8, 0x69, 0x7f, 0xe2, 0x90, 0x3b, 0x90, + 0x19, 0xf2, 0xf9, 0x4a, 0x78, 0xdd, 0x13, 0x35, 0xe5, 0xe3, 0xdc, 0xdf, 0x86, 0x8b, 0x5e, 0xaa, + 0x42, 0x46, 0xf0, 0xa5, 0xfc, 0xa8, 0xcb, 0xe2, 0x51, 0x67, 0x4e, 0x21, 0x21, 0x38, 0x85, 0xf2, + 0x16, 0x64, 0x58, 0x04, 0x9c, 0x60, 0x54, 0x67, 0xa9, 0x22, 0x13, 0x13, 0xdb, 0xf9, 0x3c, 0xab, + 0x63, 0x17, 0x95, 0xab, 0x90, 0x47, 0xc1, 0x72, 0x04, 0x73, 0x9d, 0x80, 0x55, 0x4c, 0x6e, 0xbf, + 0x9f, 0x82, 0xac, 0xbb, 0x52, 0x64, 0x19, 0xd2, 0x2c, 0x3f, 0x43, 0x53, 0xee, 0xfb, 0x41, 0x0a, + 0x33, 0x32, 0xb2, 0x0c, 0x19, 0x9e, 0x83, 0x71, 0xef, 0x2e, 0x57, 0x35, 0x23, 0xcd, 0x72, 0x2e, + 0xaf, 0xb1, 0xa6, 0xa3, 0x63, 0x62, 0x2f, 0x03, 0x69, 0x96, 0x55, 0x11, 0x15, 0x72, 0x5e, 0x1e, + 0x85, 0xfe, 0x98, 0x3f, 0x03, 0x64, 0xdd, 0xc4, 0x49, 0x40, 0xd4, 0x74, 0xf4, 0x58, 0x3c, 0xe7, + 0xcf, 0x36, 0xfd, 0xeb, 0x49, 0xd6, 0xcd, 0x86, 0xf0, 0xf9, 0xde, 0x4d, 0xf0, 0x33, 0x3c, 0xff, + 0xf1, 0x01, 0x35, 0x1d, 0x5d, 0x82, 0x9b, 0xcd, 0x67, 0x78, 0x8e, 0x43, 0xae, 0xd2, 0x21, 0x62, + 0xce, 0x82, 0x47, 0xdf, 0x4f, 0xdd, 0xd3, 0x2c, 0x93, 0x21, 0xd7, 0xa8, 0x05, 0x96, 0x98, 0xe0, + 0xb9, 0xf4, 0xf3, 0xf4, 0x0c, 0xcf, 0x57, 0xc8, 0x4d, 0x0a, 0x61, 0xcb, 0x5f, 0x82, 0x88, 0xa4, + 0x3c, 0xc3, 0x93, 0x72, 0xa2, 0xd2, 0x0e, 0xd1, 0x3d, 0xa0, 0x4b, 0x10, 0x12, 0xf0, 0x34, 0x4b, + 0xc0, 0xc9, 0x15, 0x34, 0xc7, 0x26, 0x55, 0xf0, 0x93, 0xed, 0x0c, 0x4f, 0x70, 0xfc, 0x76, 0xbc, + 0xb2, 0x79, 0x89, 0x75, 0x86, 0xa7, 0x30, 0xa4, 0x46, 0xf7, 0x8b, 0xea, 0xbb, 0x34, 0x8f, 0x4e, + 0xb0, 0xe4, 0x0b, 0xcf, 0xdd, 0x53, 0xe6, 0x03, 0xeb, 0xcc, 0x83, 0x18, 0xa9, 0x26, 0x9e, 0x86, + 0x25, 0xca, 0xdb, 0xe9, 0x5b, 0x87, 0xa5, 0x22, 0xae, 0x44, 0xa2, 0x6f, 0x1d, 0x1a, 0xa9, 0x26, + 0xad, 0x61, 0x1a, 0xd8, 0xa6, 0x6d, 0x0a, 0xb6, 0x25, 0x6f, 0xb3, 0x46, 0x5a, 0x45, 0x4a, 0x90, + 0x6a, 0xb6, 0xb7, 0x3b, 0x56, 0x69, 0x81, 0xf1, 0xac, 0x8e, 0x65, 0x24, 0x9b, 0xdb, 0x1d, 0x8b, + 0xbc, 0x05, 0x89, 0xc9, 0xd1, 0x7e, 0x89, 0x84, 0xbf, 0xac, 0xec, 0x1e, 0xed, 0xbb, 0x43, 0x31, + 0x28, 0x82, 0x2c, 0x43, 0x76, 0xe2, 0x8c, 0xdb, 0xbf, 0x60, 0x8e, 0xed, 0xd2, 0x79, 0x5c, 0xc2, + 0x73, 0x46, 0x66, 0xe2, 0x8c, 0x3f, 0x30, 0xc7, 0xf6, 0x19, 0x9d, 0x5f, 0xf9, 0x0a, 0xe4, 0x05, + 0xbb, 0xa4, 0x08, 0x92, 0xc5, 0x6e, 0x0a, 0x75, 0xe9, 0x8e, 0x21, 0x59, 0xe5, 0x3d, 0x28, 0xb8, + 0x39, 0x0c, 0xce, 0x57, 0xa3, 0x27, 0x69, 0x60, 0x8f, 0xf1, 0x7c, 0xce, 0x6b, 0x97, 0xc4, 0x10, + 0xe5, 0xc3, 0x78, 0xb8, 0x60, 0xd0, 0xb2, 0x12, 0x1a, 0x8a, 0x54, 0xfe, 0xa1, 0x04, 0x85, 0x2d, + 0x7b, 0xec, 0x3f, 0x30, 0x2f, 0x42, 0x6a, 0xdf, 0xb6, 0x07, 0x13, 0x34, 0x9b, 0x35, 0x58, 0x81, + 0xbc, 0x01, 0x05, 0xfc, 0xe1, 0xe6, 0x9e, 0xb2, 0xf7, 0xb4, 0x91, 0xc7, 0x7a, 0x9e, 0x70, 0x12, + 0x48, 0xf6, 0x2d, 0x67, 0xc2, 0x3d, 0x19, 0xfe, 0x26, 0x5f, 0x80, 0x3c, 0xfd, 0xeb, 0x32, 0x93, + 0xde, 0x85, 0x15, 0x68, 0x35, 0x27, 0xbe, 0x05, 0x73, 0xb8, 0xfb, 0x1e, 0x2c, 0xe3, 0x3d, 0x63, + 0x14, 0x58, 0x03, 0x07, 0x96, 0x20, 0xc3, 0x5c, 0xc1, 0x04, 0xbf, 0x96, 0xe5, 0x0c, 0xb7, 0x48, + 0xdd, 0x2b, 0x66, 0x02, 0x2c, 0xdc, 0x67, 0x0c, 0x5e, 0x2a, 0x3f, 0x80, 0x2c, 0x46, 0xa9, 0xd6, + 0xa0, 0x4b, 0xca, 0x20, 0xf5, 0x4a, 0x26, 0xc6, 0xc8, 0x45, 0xe1, 0x9a, 0xcf, 0x9b, 0x57, 0x36, + 0x0c, 0xa9, 0xb7, 0xb4, 0x00, 0xd2, 0x06, 0xbd, 0x77, 0x1f, 0x73, 0x37, 0x2d, 0x1d, 0x97, 0x5b, + 0xdc, 0xc4, 0xb6, 0xf9, 0x32, 0xce, 0xc4, 0xb6, 0xf9, 0x92, 0x99, 0xb8, 0x3a, 0x65, 0x82, 0x96, + 0x4e, 0xf8, 0xa7, 0x43, 0xe9, 0xa4, 0x5c, 0x85, 0x39, 0x3c, 0x9e, 0x7d, 0xab, 0xb7, 0x63, 0xf7, + 0x2d, 0xbc, 0xe7, 0x1f, 0xe2, 0x3d, 0x49, 0x32, 0xa4, 0x43, 0xba, 0x07, 0xe6, 0x71, 0xe7, 0x80, + 0xdd, 0x38, 0xb3, 0x06, 0x2b, 0x94, 0x3f, 0x4b, 0xc2, 0x3c, 0x77, 0xad, 0xef, 0xf7, 0x9d, 0x67, + 0x5b, 0x9d, 0x11, 0x79, 0x0a, 0x05, 0xea, 0x55, 0xdb, 0xc3, 0xce, 0x68, 0x44, 0x8f, 0xaf, 0x84, + 0x57, 0x8d, 0xeb, 0x53, 0xae, 0x9a, 0xe3, 0x57, 0xb6, 0x3b, 0x43, 0x73, 0x8b, 0x61, 0x1b, 0x96, + 0x33, 0x3e, 0x31, 0xf2, 0x96, 0x5f, 0x43, 0x36, 0x21, 0x3f, 0x9c, 0xf4, 0x3c, 0x63, 0x32, 0x1a, + 0xab, 0x44, 0x1a, 0xdb, 0x9a, 0xf4, 0x02, 0xb6, 0x60, 0xe8, 0x55, 0xd0, 0x81, 0x51, 0x7f, 0xec, + 0xd9, 0x4a, 0x9c, 0x32, 0x30, 0xea, 0x3a, 0x82, 0x03, 0xdb, 0xf7, 0x6b, 0xc8, 0x63, 0x00, 0x7a, + 0xbc, 0x1c, 0x9b, 0xa6, 0x4e, 0xa8, 0xa0, 0xbc, 0xf6, 0x66, 0xa4, 0xad, 0x5d, 0x67, 0xbc, 0x67, + 0xef, 0x3a, 0x63, 0x66, 0x88, 0x1e, 0x4c, 0x2c, 0x2e, 0xbd, 0x03, 0x4a, 0x78, 0xfe, 0xe2, 0x8d, + 0x3c, 0x35, 0xe3, 0x46, 0x9e, 0xe3, 0x37, 0xf2, 0xba, 0x7c, 0x57, 0x5a, 0x7a, 0x0f, 0x8a, 0xa1, + 0x29, 0x8b, 0x74, 0xc2, 0xe8, 0xb7, 0x45, 0x7a, 0x5e, 0x7b, 0x5d, 0xf8, 0x9c, 0x2d, 0x6e, 0xb8, + 0x68, 0xf7, 0x1d, 0x50, 0xc2, 0xd3, 0x17, 0x0d, 0x67, 0x63, 0x32, 0x05, 0xe4, 0xdf, 0x87, 0xb9, + 0xc0, 0x94, 0x45, 0x72, 0xee, 0x94, 0x49, 0x95, 0x7f, 0x29, 0x05, 0xa9, 0x96, 0x65, 0xda, 0x87, + 0xe4, 0xf5, 0x60, 0x9c, 0x7c, 0x72, 0xce, 0x8d, 0x91, 0x17, 0x43, 0x31, 0xf2, 0xc9, 0x39, 0x2f, + 0x42, 0x5e, 0x0c, 0x45, 0x48, 0xb7, 0xa9, 0xa6, 0x93, 0xcb, 0x53, 0xf1, 0xf1, 0xc9, 0x39, 0x21, + 0x38, 0x5e, 0x9e, 0x0a, 0x8e, 0x7e, 0x73, 0x4d, 0xa7, 0x0e, 0x35, 0x18, 0x19, 0x9f, 0x9c, 0xf3, + 0xa3, 0xe2, 0x72, 0x38, 0x2a, 0x7a, 0x8d, 0x35, 0x9d, 0x0d, 0x49, 0x88, 0x88, 0x38, 0x24, 0x16, + 0x0b, 0x97, 0xc3, 0xb1, 0x10, 0x79, 0x3c, 0x0a, 0x2e, 0x87, 0xa3, 0x20, 0x36, 0xf2, 0xa8, 0x77, + 0x31, 0x14, 0xf5, 0xd0, 0x28, 0x0b, 0x77, 0xcb, 0xe1, 0x70, 0xc7, 0x78, 0xc2, 0x48, 0xc5, 0x58, + 0xe7, 0x35, 0xd6, 0x74, 0xa2, 0x85, 0x02, 0x5d, 0xf4, 0x6d, 0x1f, 0xf7, 0x02, 0x9d, 0xbe, 0x4e, + 0x97, 0xcd, 0xbd, 0x88, 0x16, 0x63, 0xbe, 0xf8, 0xe3, 0x6a, 0xba, 0x17, 0x31, 0x0d, 0x32, 0x87, + 0x3c, 0x01, 0x56, 0xd0, 0x73, 0x09, 0xb2, 0xc4, 0xcd, 0x5f, 0x69, 0xb6, 0xd1, 0x83, 0xd1, 0x79, + 0x1d, 0xb2, 0x3b, 0x7d, 0x05, 0xe6, 0x9a, 0xed, 0xa7, 0x9d, 0x71, 0xcf, 0x9c, 0x38, 0xed, 0xbd, + 0x4e, 0xcf, 0x7b, 0x44, 0xa0, 0xfb, 0x9f, 0x6f, 0xf2, 0x96, 0xbd, 0x4e, 0x8f, 0x5c, 0x70, 0xc5, + 0xd5, 0xc5, 0x56, 0x89, 0xcb, 0x6b, 0xe9, 0x75, 0xba, 0x68, 0xcc, 0x18, 0xfa, 0xc2, 0x05, 0xee, + 0x0b, 0x1f, 0x66, 0x20, 0x75, 0x64, 0xf5, 0x6d, 0xeb, 0x61, 0x0e, 0x32, 0x8e, 0x3d, 0x1e, 0x76, + 0x1c, 0xbb, 0xfc, 0x23, 0x09, 0xe0, 0x91, 0x3d, 0x1c, 0x1e, 0x59, 0xfd, 0x17, 0x47, 0x26, 0xb9, + 0x02, 0xf9, 0x61, 0xe7, 0xb9, 0xd9, 0x1e, 0x9a, 0xed, 0x83, 0xb1, 0x7b, 0x0e, 0x72, 0xb4, 0x6a, + 0xcb, 0x7c, 0x34, 0x3e, 0x21, 0x25, 0xf7, 0x8a, 0x8e, 0xda, 0x41, 0x49, 0xf2, 0x2b, 0xfb, 0x22, + 0xbf, 0x74, 0xa6, 0xf9, 0x1e, 0xba, 0xd7, 0x4e, 0x96, 0x47, 0x64, 0xf8, 0xee, 0x61, 0x89, 0x4a, + 0xde, 0x31, 0x87, 0xa3, 0xf6, 0x01, 0x4a, 0x85, 0xca, 0x21, 0x45, 0xcb, 0x8f, 0xc8, 0x6d, 0x48, + 0x1c, 0xd8, 0x03, 0x14, 0xc9, 0x29, 0xfb, 0x42, 0x71, 0xe4, 0x0d, 0x48, 0x0c, 0x27, 0x4c, 0x36, + 0x79, 0x6d, 0x41, 0xb8, 0x27, 0xb0, 0xd0, 0x44, 0x61, 0xc3, 0x49, 0xcf, 0x9b, 0xf7, 0x8d, 0x22, + 0x24, 0x9a, 0xad, 0x16, 0x8d, 0xfd, 0xcd, 0x56, 0x6b, 0x4d, 0x91, 0xea, 0x5f, 0x82, 0x6c, 0x6f, + 0x6c, 0x9a, 0xd4, 0x3d, 0xcc, 0xce, 0x39, 0x3e, 0xc4, 0x58, 0xe7, 0x81, 0xea, 0x5b, 0x90, 0x39, + 0x60, 0x59, 0x07, 0x89, 0x48, 0x6b, 0x4b, 0x7f, 0xc8, 0x1e, 0x55, 0x96, 0xfc, 0xe6, 0x70, 0x9e, + 0x62, 0xb8, 0x36, 0xea, 0x3b, 0x90, 0x1b, 0xb7, 0x4f, 0x33, 0xf8, 0x31, 0x8b, 0x2e, 0x71, 0x06, + 0xb3, 0x63, 0x5e, 0x55, 0x6f, 0xc0, 0x82, 0x65, 0xbb, 0xdf, 0x50, 0xda, 0x5d, 0x76, 0xc6, 0x2e, + 0x4e, 0x5f, 0xe5, 0x5c, 0xe3, 0x26, 0xfb, 0x6e, 0x69, 0xd9, 0xbc, 0x81, 0x9d, 0xca, 0xfa, 0x23, + 0x50, 0x04, 0x33, 0x98, 0x7a, 0xc6, 0x59, 0x39, 0x64, 0x1f, 0x4a, 0x3d, 0x2b, 0x78, 0xee, 0x43, + 0x46, 0xd8, 0xc9, 0x8c, 0x31, 0xd2, 0x63, 0x5f, 0x9d, 0x3d, 0x23, 0xe8, 0xea, 0xa6, 0x8d, 0x50, + 0x5f, 0x13, 0x6d, 0xe4, 0x19, 0xfb, 0x20, 0x2d, 0x1a, 0xa9, 0xe9, 0xa1, 0x55, 0x39, 0x3a, 0x75, + 0x28, 0x7d, 0xf6, 0x3d, 0xd9, 0xb3, 0xc2, 0x1c, 0xe0, 0x0c, 0x33, 0xf1, 0x83, 0xf9, 0x90, 0x7d, + 0x6a, 0x0e, 0x98, 0x99, 0x1a, 0xcd, 0xe4, 0xd4, 0xd1, 0x3c, 0x67, 0xdf, 0x75, 0x3d, 0x33, 0xbb, + 0xb3, 0x46, 0x33, 0x39, 0x75, 0x34, 0x03, 0xf6, 0xc5, 0x37, 0x60, 0xa6, 0xa6, 0xd7, 0x37, 0x80, + 0x88, 0x5b, 0xcd, 0xe3, 0x44, 0x8c, 0x9d, 0x21, 0xfb, 0x8e, 0xef, 0x6f, 0x36, 0xa3, 0xcc, 0x32, + 0x14, 0x3f, 0x20, 0x8b, 0x7d, 0xe2, 0x0f, 0x1a, 0xaa, 0xe9, 0xf5, 0x4d, 0x38, 0x2f, 0x4e, 0xec, + 0x0c, 0x43, 0xb2, 0x55, 0xa9, 0x52, 0x34, 0x16, 0xfc, 0xa9, 0x71, 0xce, 0x4c, 0x53, 0xf1, 0x83, + 0x1a, 0xa9, 0x52, 0x45, 0x99, 0x32, 0x55, 0xd3, 0xeb, 0x0f, 0xa0, 0x28, 0x98, 0xda, 0xc7, 0x08, + 0x1d, 0x6d, 0xe6, 0x05, 0xfb, 0x5f, 0x0b, 0xcf, 0x0c, 0x8d, 0xe8, 0xe1, 0x1d, 0xe3, 0x31, 0x2e, + 0xda, 0xc8, 0x98, 0xfd, 0xa3, 0x80, 0x3f, 0x16, 0x64, 0x84, 0x8e, 0x04, 0xe6, 0xdf, 0x71, 0x56, + 0x26, 0xec, 0x5f, 0x08, 0xfc, 0xa1, 0x50, 0x42, 0xbd, 0x1f, 0x98, 0x8e, 0x49, 0x83, 0x5c, 0x8c, + 0x0d, 0x07, 0x3d, 0xf2, 0x9b, 0x91, 0x80, 0x15, 0xf1, 0x81, 0x44, 0x98, 0x36, 0x2d, 0xd6, 0x37, + 0x61, 0xfe, 0xec, 0x0e, 0xe9, 0x63, 0x89, 0x65, 0xcb, 0xd5, 0x15, 0x9a, 0x50, 0x1b, 0x73, 0xdd, + 0x80, 0x5f, 0x6a, 0xc0, 0xdc, 0x99, 0x9d, 0xd2, 0x27, 0x12, 0xcb, 0x39, 0xa9, 0x25, 0xa3, 0xd0, + 0x0d, 0x7a, 0xa6, 0xb9, 0x33, 0xbb, 0xa5, 0x4f, 0x25, 0xf6, 0x40, 0xa1, 0x6b, 0x9e, 0x11, 0xd7, + 0x33, 0xcd, 0x9d, 0xd9, 0x2d, 0x7d, 0x95, 0x65, 0x94, 0xb2, 0x5e, 0x15, 0x8d, 0xa0, 0x2f, 0x98, + 0x3f, 0xbb, 0x5b, 0xfa, 0x9a, 0x84, 0x8f, 0x15, 0xb2, 0xae, 0x7b, 0xeb, 0xe2, 0x79, 0xa6, 0xf9, + 0xb3, 0xbb, 0xa5, 0xaf, 0x4b, 0xf8, 0xa4, 0x21, 0xeb, 0xeb, 0x01, 0x33, 0xc1, 0xd1, 0x9c, 0xee, + 0x96, 0xbe, 0x21, 0xe1, 0x2b, 0x83, 0xac, 0xd7, 0x3c, 0x33, 0xbb, 0x53, 0xa3, 0x39, 0xdd, 0x2d, + 0x7d, 0x13, 0x6f, 0xf1, 0x75, 0x59, 0xbf, 0x13, 0x30, 0x83, 0x9e, 0xa9, 0xf8, 0x0a, 0x6e, 0xe9, + 0x5b, 0x12, 0x3e, 0x06, 0xc9, 0xfa, 0x5d, 0xc3, 0xed, 0xdd, 0xf7, 0x4c, 0xc5, 0x57, 0x70, 0x4b, + 0x9f, 0x49, 0xf8, 0x66, 0x24, 0xeb, 0xf7, 0x82, 0x86, 0xd0, 0x33, 0x29, 0xaf, 0xe2, 0x96, 0xbe, + 0x4d, 0x2d, 0x15, 0xeb, 0xf2, 0xfa, 0xaa, 0xe1, 0x0e, 0x40, 0xf0, 0x4c, 0xca, 0xab, 0xb8, 0xa5, + 0xef, 0x50, 0x53, 0x4a, 0x5d, 0x5e, 0x5f, 0x0b, 0x99, 0xaa, 0xe9, 0xf5, 0x47, 0x50, 0x38, 0xab, + 0x5b, 0xfa, 0xae, 0xf8, 0x16, 0x97, 0xef, 0x0a, 0xbe, 0x69, 0x47, 0xd8, 0xb3, 0x53, 0x1d, 0xd3, + 0xf7, 0x30, 0xc7, 0xa9, 0xcf, 0x3d, 0x61, 0xef, 0x55, 0x8c, 0xe0, 0x6f, 0x1f, 0x73, 0x53, 0x5b, + 0xfe, 0xf9, 0x38, 0xd5, 0x47, 0x7d, 0x5f, 0xc2, 0x47, 0xad, 0x02, 0x37, 0x88, 0x78, 0xef, 0xa4, + 0x30, 0x87, 0xf5, 0xa1, 0x3f, 0xcb, 0xd3, 0xbc, 0xd5, 0x0f, 0xa4, 0x57, 0x71, 0x57, 0xf5, 0x44, + 0x6b, 0xbb, 0xe1, 0x2d, 0x06, 0xd6, 0xbc, 0x0d, 0xc9, 0x63, 0x6d, 0x75, 0x4d, 0xbc, 0x92, 0x89, + 0x6f, 0xb9, 0xcc, 0x49, 0xe5, 0xb5, 0xa2, 0xf0, 0xdc, 0x3d, 0x1c, 0x39, 0x27, 0x06, 0xb2, 0x38, + 0x5b, 0x8b, 0x64, 0x7f, 0x12, 0xc3, 0xd6, 0x38, 0xbb, 0x1a, 0xc9, 0xfe, 0x34, 0x86, 0x5d, 0xe5, + 0x6c, 0x3d, 0x92, 0xfd, 0xd5, 0x18, 0xb6, 0xce, 0xd9, 0xeb, 0x91, 0xec, 0xaf, 0xc5, 0xb0, 0xd7, + 0x39, 0xbb, 0x16, 0xc9, 0xfe, 0x7a, 0x0c, 0xbb, 0xc6, 0xd9, 0x77, 0x22, 0xd9, 0xdf, 0x88, 0x61, + 0xdf, 0xe1, 0xec, 0xbb, 0x91, 0xec, 0x6f, 0xc6, 0xb0, 0xef, 0x72, 0xf6, 0xbd, 0x48, 0xf6, 0xb7, + 0x62, 0xd8, 0xf7, 0x18, 0x7b, 0x6d, 0x35, 0x92, 0xfd, 0x59, 0x34, 0x7b, 0x6d, 0x95, 0xb3, 0xa3, + 0xb5, 0xf6, 0xed, 0x18, 0x36, 0xd7, 0xda, 0x5a, 0xb4, 0xd6, 0xbe, 0x13, 0xc3, 0xe6, 0x5a, 0x5b, + 0x8b, 0xd6, 0xda, 0x77, 0x63, 0xd8, 0x5c, 0x6b, 0x6b, 0xd1, 0x5a, 0xfb, 0x5e, 0x0c, 0x9b, 0x6b, + 0x6d, 0x2d, 0x5a, 0x6b, 0xdf, 0x8f, 0x61, 0x73, 0xad, 0xad, 0x45, 0x6b, 0xed, 0x07, 0x31, 0x6c, + 0xae, 0xb5, 0xb5, 0x68, 0xad, 0xfd, 0x51, 0x0c, 0x9b, 0x6b, 0x6d, 0x2d, 0x5a, 0x6b, 0x7f, 0x1c, + 0xc3, 0xe6, 0x5a, 0x5b, 0x8b, 0xd6, 0xda, 0x9f, 0xc4, 0xb0, 0xb9, 0xd6, 0xb4, 0x68, 0xad, 0xfd, + 0x69, 0x34, 0x5b, 0xe3, 0x5a, 0xd3, 0xa2, 0xb5, 0xf6, 0x67, 0x31, 0x6c, 0xae, 0x35, 0x2d, 0x5a, + 0x6b, 0x7f, 0x1e, 0xc3, 0xe6, 0x5a, 0xd3, 0xa2, 0xb5, 0xf6, 0xc3, 0x18, 0x36, 0xd7, 0x9a, 0x16, + 0xad, 0xb5, 0xbf, 0x88, 0x61, 0x73, 0xad, 0x69, 0xd1, 0x5a, 0xfb, 0xcb, 0x18, 0x36, 0xd7, 0x9a, + 0x16, 0xad, 0xb5, 0xbf, 0x8a, 0x61, 0x73, 0xad, 0x69, 0xd1, 0x5a, 0xfb, 0xeb, 0x18, 0x36, 0xd7, + 0x9a, 0x16, 0xad, 0xb5, 0xbf, 0x89, 0x61, 0x73, 0xad, 0x69, 0xd1, 0x5a, 0xfb, 0xdb, 0x18, 0x36, + 0xd7, 0x5a, 0x35, 0x5a, 0x6b, 0x7f, 0x17, 0xcd, 0xae, 0x72, 0xad, 0x55, 0xa3, 0xb5, 0xf6, 0xf7, + 0x31, 0x6c, 0xae, 0xb5, 0x6a, 0xb4, 0xd6, 0xfe, 0x21, 0x86, 0xcd, 0xb5, 0x56, 0x8d, 0xd6, 0xda, + 0x3f, 0xc6, 0xb0, 0xb9, 0xd6, 0xaa, 0xd1, 0x5a, 0xfb, 0x51, 0x0c, 0x9b, 0x6b, 0xad, 0x1a, 0xad, + 0xb5, 0x7f, 0x8a, 0x61, 0x73, 0xad, 0x55, 0xa3, 0xb5, 0xf6, 0xcf, 0x31, 0x6c, 0xae, 0xb5, 0x6a, + 0xb4, 0xd6, 0xfe, 0x25, 0x86, 0xcd, 0xb5, 0x56, 0x8d, 0xd6, 0xda, 0xbf, 0xc6, 0xb0, 0xb9, 0xd6, + 0xaa, 0xd1, 0x5a, 0xfb, 0xb7, 0x18, 0x36, 0xd7, 0x9a, 0x1e, 0xad, 0xb5, 0x7f, 0x8f, 0x66, 0xeb, + 0x5c, 0x6b, 0x7a, 0xb4, 0xd6, 0xfe, 0x23, 0x86, 0xcd, 0xb5, 0xa6, 0x47, 0x6b, 0xed, 0x3f, 0x63, + 0xd8, 0x5c, 0x6b, 0x7a, 0xb4, 0xd6, 0xfe, 0x2b, 0x86, 0xcd, 0xb5, 0xa6, 0x47, 0x6b, 0xed, 0xbf, + 0x63, 0xd8, 0x5c, 0x6b, 0x7a, 0xb4, 0xd6, 0xfe, 0x27, 0x86, 0xcd, 0xb5, 0xa6, 0x47, 0x6b, 0xed, + 0xc7, 0x31, 0x6c, 0xae, 0x35, 0x3d, 0x5a, 0x6b, 0x3f, 0x89, 0x61, 0x73, 0xad, 0xe9, 0xd1, 0x5a, + 0xfb, 0xdf, 0x18, 0x36, 0xd7, 0x9a, 0x1e, 0xad, 0xb5, 0xff, 0x8b, 0x61, 0x73, 0xad, 0xad, 0x47, + 0x6b, 0xed, 0xff, 0xa3, 0xd9, 0xeb, 0xab, 0x3f, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x00, 0xcd, + 0x32, 0x57, 0x39, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/proto/testdata/test.proto b/vendor/github.com/golang/protobuf/proto/testdata/test.proto new file mode 100644 index 0000000..70e3cfc --- /dev/null +++ b/vendor/github.com/golang/protobuf/proto/testdata/test.proto @@ -0,0 +1,548 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A feature-rich test file for the protocol compiler and libraries. + +syntax = "proto2"; + +package testdata; + +enum FOO { FOO1 = 1; }; + +message GoEnum { + required FOO foo = 1; +} + +message GoTestField { + required string Label = 1; + required string Type = 2; +} + +message GoTest { + // An enum, for completeness. + enum KIND { + VOID = 0; + + // Basic types + BOOL = 1; + BYTES = 2; + FINGERPRINT = 3; + FLOAT = 4; + INT = 5; + STRING = 6; + TIME = 7; + + // Groupings + TUPLE = 8; + ARRAY = 9; + MAP = 10; + + // Table types + TABLE = 11; + + // Functions + FUNCTION = 12; // last tag + }; + + // Some typical parameters + required KIND Kind = 1; + optional string Table = 2; + optional int32 Param = 3; + + // Required, repeated and optional foreign fields. + required GoTestField RequiredField = 4; + repeated GoTestField RepeatedField = 5; + optional GoTestField OptionalField = 6; + + // Required fields of all basic types + required bool F_Bool_required = 10; + required int32 F_Int32_required = 11; + required int64 F_Int64_required = 12; + required fixed32 F_Fixed32_required = 13; + required fixed64 F_Fixed64_required = 14; + required uint32 F_Uint32_required = 15; + required uint64 F_Uint64_required = 16; + required float F_Float_required = 17; + required double F_Double_required = 18; + required string F_String_required = 19; + required bytes F_Bytes_required = 101; + required sint32 F_Sint32_required = 102; + required sint64 F_Sint64_required = 103; + + // Repeated fields of all basic types + repeated bool F_Bool_repeated = 20; + repeated int32 F_Int32_repeated = 21; + repeated int64 F_Int64_repeated = 22; + repeated fixed32 F_Fixed32_repeated = 23; + repeated fixed64 F_Fixed64_repeated = 24; + repeated uint32 F_Uint32_repeated = 25; + repeated uint64 F_Uint64_repeated = 26; + repeated float F_Float_repeated = 27; + repeated double F_Double_repeated = 28; + repeated string F_String_repeated = 29; + repeated bytes F_Bytes_repeated = 201; + repeated sint32 F_Sint32_repeated = 202; + repeated sint64 F_Sint64_repeated = 203; + + // Optional fields of all basic types + optional bool F_Bool_optional = 30; + optional int32 F_Int32_optional = 31; + optional int64 F_Int64_optional = 32; + optional fixed32 F_Fixed32_optional = 33; + optional fixed64 F_Fixed64_optional = 34; + optional uint32 F_Uint32_optional = 35; + optional uint64 F_Uint64_optional = 36; + optional float F_Float_optional = 37; + optional double F_Double_optional = 38; + optional string F_String_optional = 39; + optional bytes F_Bytes_optional = 301; + optional sint32 F_Sint32_optional = 302; + optional sint64 F_Sint64_optional = 303; + + // Default-valued fields of all basic types + optional bool F_Bool_defaulted = 40 [default=true]; + optional int32 F_Int32_defaulted = 41 [default=32]; + optional int64 F_Int64_defaulted = 42 [default=64]; + optional fixed32 F_Fixed32_defaulted = 43 [default=320]; + optional fixed64 F_Fixed64_defaulted = 44 [default=640]; + optional uint32 F_Uint32_defaulted = 45 [default=3200]; + optional uint64 F_Uint64_defaulted = 46 [default=6400]; + optional float F_Float_defaulted = 47 [default=314159.]; + optional double F_Double_defaulted = 48 [default=271828.]; + optional string F_String_defaulted = 49 [default="hello, \"world!\"\n"]; + optional bytes F_Bytes_defaulted = 401 [default="Bignose"]; + optional sint32 F_Sint32_defaulted = 402 [default = -32]; + optional sint64 F_Sint64_defaulted = 403 [default = -64]; + + // Packed repeated fields (no string or bytes). + repeated bool F_Bool_repeated_packed = 50 [packed=true]; + repeated int32 F_Int32_repeated_packed = 51 [packed=true]; + repeated int64 F_Int64_repeated_packed = 52 [packed=true]; + repeated fixed32 F_Fixed32_repeated_packed = 53 [packed=true]; + repeated fixed64 F_Fixed64_repeated_packed = 54 [packed=true]; + repeated uint32 F_Uint32_repeated_packed = 55 [packed=true]; + repeated uint64 F_Uint64_repeated_packed = 56 [packed=true]; + repeated float F_Float_repeated_packed = 57 [packed=true]; + repeated double F_Double_repeated_packed = 58 [packed=true]; + repeated sint32 F_Sint32_repeated_packed = 502 [packed=true]; + repeated sint64 F_Sint64_repeated_packed = 503 [packed=true]; + + // Required, repeated, and optional groups. + required group RequiredGroup = 70 { + required string RequiredField = 71; + }; + + repeated group RepeatedGroup = 80 { + required string RequiredField = 81; + }; + + optional group OptionalGroup = 90 { + required string RequiredField = 91; + }; +} + +// For testing a group containing a required field. +message GoTestRequiredGroupField { + required group Group = 1 { + required int32 Field = 2; + }; +} + +// For testing skipping of unrecognized fields. +// Numbers are all big, larger than tag numbers in GoTestField, +// the message used in the corresponding test. +message GoSkipTest { + required int32 skip_int32 = 11; + required fixed32 skip_fixed32 = 12; + required fixed64 skip_fixed64 = 13; + required string skip_string = 14; + required group SkipGroup = 15 { + required int32 group_int32 = 16; + required string group_string = 17; + } +} + +// For testing packed/non-packed decoder switching. +// A serialized instance of one should be deserializable as the other. +message NonPackedTest { + repeated int32 a = 1; +} + +message PackedTest { + repeated int32 b = 1 [packed=true]; +} + +message MaxTag { + // Maximum possible tag number. + optional string last_field = 536870911; +} + +message OldMessage { + message Nested { + optional string name = 1; + } + optional Nested nested = 1; + + optional int32 num = 2; +} + +// NewMessage is wire compatible with OldMessage; +// imagine it as a future version. +message NewMessage { + message Nested { + optional string name = 1; + optional string food_group = 2; + } + optional Nested nested = 1; + + // This is an int32 in OldMessage. + optional int64 num = 2; +} + +// Smaller tests for ASCII formatting. + +message InnerMessage { + required string host = 1; + optional int32 port = 2 [default=4000]; + optional bool connected = 3; +} + +message OtherMessage { + optional int64 key = 1; + optional bytes value = 2; + optional float weight = 3; + optional InnerMessage inner = 4; + + extensions 100 to max; +} + +message RequiredInnerMessage { + required InnerMessage leo_finally_won_an_oscar = 1; +} + +message MyMessage { + required int32 count = 1; + optional string name = 2; + optional string quote = 3; + repeated string pet = 4; + optional InnerMessage inner = 5; + repeated OtherMessage others = 6; + optional RequiredInnerMessage we_must_go_deeper = 13; + repeated InnerMessage rep_inner = 12; + + enum Color { + RED = 0; + GREEN = 1; + BLUE = 2; + }; + optional Color bikeshed = 7; + + optional group SomeGroup = 8 { + optional int32 group_field = 9; + } + + // This field becomes [][]byte in the generated code. + repeated bytes rep_bytes = 10; + + optional double bigfloat = 11; + + extensions 100 to max; +} + +message Ext { + extend MyMessage { + optional Ext more = 103; + optional string text = 104; + optional int32 number = 105; + } + + optional string data = 1; +} + +extend MyMessage { + repeated string greeting = 106; +} + +message ComplexExtension { + optional int32 first = 1; + optional int32 second = 2; + repeated int32 third = 3; +} + +extend OtherMessage { + optional ComplexExtension complex = 200; + repeated ComplexExtension r_complex = 201; +} + +message DefaultsMessage { + enum DefaultsEnum { + ZERO = 0; + ONE = 1; + TWO = 2; + }; + extensions 100 to max; +} + +extend DefaultsMessage { + optional double no_default_double = 101; + optional float no_default_float = 102; + optional int32 no_default_int32 = 103; + optional int64 no_default_int64 = 104; + optional uint32 no_default_uint32 = 105; + optional uint64 no_default_uint64 = 106; + optional sint32 no_default_sint32 = 107; + optional sint64 no_default_sint64 = 108; + optional fixed32 no_default_fixed32 = 109; + optional fixed64 no_default_fixed64 = 110; + optional sfixed32 no_default_sfixed32 = 111; + optional sfixed64 no_default_sfixed64 = 112; + optional bool no_default_bool = 113; + optional string no_default_string = 114; + optional bytes no_default_bytes = 115; + optional DefaultsMessage.DefaultsEnum no_default_enum = 116; + + optional double default_double = 201 [default = 3.1415]; + optional float default_float = 202 [default = 3.14]; + optional int32 default_int32 = 203 [default = 42]; + optional int64 default_int64 = 204 [default = 43]; + optional uint32 default_uint32 = 205 [default = 44]; + optional uint64 default_uint64 = 206 [default = 45]; + optional sint32 default_sint32 = 207 [default = 46]; + optional sint64 default_sint64 = 208 [default = 47]; + optional fixed32 default_fixed32 = 209 [default = 48]; + optional fixed64 default_fixed64 = 210 [default = 49]; + optional sfixed32 default_sfixed32 = 211 [default = 50]; + optional sfixed64 default_sfixed64 = 212 [default = 51]; + optional bool default_bool = 213 [default = true]; + optional string default_string = 214 [default = "Hello, string"]; + optional bytes default_bytes = 215 [default = "Hello, bytes"]; + optional DefaultsMessage.DefaultsEnum default_enum = 216 [default = ONE]; +} + +message MyMessageSet { + option message_set_wire_format = true; + extensions 100 to max; +} + +message Empty { +} + +extend MyMessageSet { + optional Empty x201 = 201; + optional Empty x202 = 202; + optional Empty x203 = 203; + optional Empty x204 = 204; + optional Empty x205 = 205; + optional Empty x206 = 206; + optional Empty x207 = 207; + optional Empty x208 = 208; + optional Empty x209 = 209; + optional Empty x210 = 210; + optional Empty x211 = 211; + optional Empty x212 = 212; + optional Empty x213 = 213; + optional Empty x214 = 214; + optional Empty x215 = 215; + optional Empty x216 = 216; + optional Empty x217 = 217; + optional Empty x218 = 218; + optional Empty x219 = 219; + optional Empty x220 = 220; + optional Empty x221 = 221; + optional Empty x222 = 222; + optional Empty x223 = 223; + optional Empty x224 = 224; + optional Empty x225 = 225; + optional Empty x226 = 226; + optional Empty x227 = 227; + optional Empty x228 = 228; + optional Empty x229 = 229; + optional Empty x230 = 230; + optional Empty x231 = 231; + optional Empty x232 = 232; + optional Empty x233 = 233; + optional Empty x234 = 234; + optional Empty x235 = 235; + optional Empty x236 = 236; + optional Empty x237 = 237; + optional Empty x238 = 238; + optional Empty x239 = 239; + optional Empty x240 = 240; + optional Empty x241 = 241; + optional Empty x242 = 242; + optional Empty x243 = 243; + optional Empty x244 = 244; + optional Empty x245 = 245; + optional Empty x246 = 246; + optional Empty x247 = 247; + optional Empty x248 = 248; + optional Empty x249 = 249; + optional Empty x250 = 250; +} + +message MessageList { + repeated group Message = 1 { + required string name = 2; + required int32 count = 3; + } +} + +message Strings { + optional string string_field = 1; + optional bytes bytes_field = 2; +} + +message Defaults { + enum Color { + RED = 0; + GREEN = 1; + BLUE = 2; + } + + // Default-valued fields of all basic types. + // Same as GoTest, but copied here to make testing easier. + optional bool F_Bool = 1 [default=true]; + optional int32 F_Int32 = 2 [default=32]; + optional int64 F_Int64 = 3 [default=64]; + optional fixed32 F_Fixed32 = 4 [default=320]; + optional fixed64 F_Fixed64 = 5 [default=640]; + optional uint32 F_Uint32 = 6 [default=3200]; + optional uint64 F_Uint64 = 7 [default=6400]; + optional float F_Float = 8 [default=314159.]; + optional double F_Double = 9 [default=271828.]; + optional string F_String = 10 [default="hello, \"world!\"\n"]; + optional bytes F_Bytes = 11 [default="Bignose"]; + optional sint32 F_Sint32 = 12 [default=-32]; + optional sint64 F_Sint64 = 13 [default=-64]; + optional Color F_Enum = 14 [default=GREEN]; + + // More fields with crazy defaults. + optional float F_Pinf = 15 [default=inf]; + optional float F_Ninf = 16 [default=-inf]; + optional float F_Nan = 17 [default=nan]; + + // Sub-message. + optional SubDefaults sub = 18; + + // Redundant but explicit defaults. + optional string str_zero = 19 [default=""]; +} + +message SubDefaults { + optional int64 n = 1 [default=7]; +} + +message RepeatedEnum { + enum Color { + RED = 1; + } + repeated Color color = 1; +} + +message MoreRepeated { + repeated bool bools = 1; + repeated bool bools_packed = 2 [packed=true]; + repeated int32 ints = 3; + repeated int32 ints_packed = 4 [packed=true]; + repeated int64 int64s_packed = 7 [packed=true]; + repeated string strings = 5; + repeated fixed32 fixeds = 6; +} + +// GroupOld and GroupNew have the same wire format. +// GroupNew has a new field inside a group. + +message GroupOld { + optional group G = 101 { + optional int32 x = 2; + } +} + +message GroupNew { + optional group G = 101 { + optional int32 x = 2; + optional int32 y = 3; + } +} + +message FloatingPoint { + required double f = 1; + optional bool exact = 2; +} + +message MessageWithMap { + map name_mapping = 1; + map msg_mapping = 2; + map byte_mapping = 3; + map str_to_str = 4; +} + +message Oneof { + oneof union { + bool F_Bool = 1; + int32 F_Int32 = 2; + int64 F_Int64 = 3; + fixed32 F_Fixed32 = 4; + fixed64 F_Fixed64 = 5; + uint32 F_Uint32 = 6; + uint64 F_Uint64 = 7; + float F_Float = 8; + double F_Double = 9; + string F_String = 10; + bytes F_Bytes = 11; + sint32 F_Sint32 = 12; + sint64 F_Sint64 = 13; + MyMessage.Color F_Enum = 14; + GoTestField F_Message = 15; + group F_Group = 16 { + optional int32 x = 17; + } + int32 F_Largest_Tag = 536870911; + } + + oneof tormato { + int32 value = 100; + } +} + +message Communique { + optional bool make_me_cry = 1; + + // This is a oneof, called "union". + oneof union { + int32 number = 5; + string name = 6; + bytes data = 7; + double temp_c = 8; + MyMessage.Color col = 9; + Strings msg = 10; + } +} diff --git a/vendor/github.com/golang/protobuf/proto/text.go b/vendor/github.com/golang/protobuf/proto/text.go index 754bdd5..965876b 100644 --- a/vendor/github.com/golang/protobuf/proto/text.go +++ b/vendor/github.com/golang/protobuf/proto/text.go @@ -37,6 +37,7 @@ import ( "bufio" "bytes" "encoding" + "errors" "fmt" "io" "log" @@ -153,7 +154,7 @@ func (w *textWriter) indent() { w.ind++ } func (w *textWriter) unindent() { if w.ind == 0 { - log.Printf("proto: textWriter unindented too far") + log.Print("proto: textWriter unindented too far") return } w.ind-- @@ -169,20 +170,98 @@ func writeName(w *textWriter, props *Properties) error { return nil } -var ( - messageSetType = reflect.TypeOf((*MessageSet)(nil)).Elem() -) - // raw is the interface satisfied by RawMessage. type raw interface { Bytes() []byte } -func writeStruct(w *textWriter, sv reflect.Value) error { - if sv.Type() == messageSetType { - return writeMessageSet(w, sv.Addr().Interface().(*MessageSet)) +func requiresQuotes(u string) bool { + // When type URL contains any characters except [0-9A-Za-z./\-]*, it must be quoted. + for _, ch := range u { + switch { + case ch == '.' || ch == '/' || ch == '_': + continue + case '0' <= ch && ch <= '9': + continue + case 'A' <= ch && ch <= 'Z': + continue + case 'a' <= ch && ch <= 'z': + continue + default: + return true + } + } + return false +} + +// isAny reports whether sv is a google.protobuf.Any message +func isAny(sv reflect.Value) bool { + type wkt interface { + XXX_WellKnownType() string + } + t, ok := sv.Addr().Interface().(wkt) + return ok && t.XXX_WellKnownType() == "Any" +} + +// writeProto3Any writes an expanded google.protobuf.Any message. +// +// It returns (false, nil) if sv value can't be unmarshaled (e.g. because +// required messages are not linked in). +// +// It returns (true, error) when sv was written in expanded format or an error +// was encountered. +func (tm *TextMarshaler) writeProto3Any(w *textWriter, sv reflect.Value) (bool, error) { + turl := sv.FieldByName("TypeUrl") + val := sv.FieldByName("Value") + if !turl.IsValid() || !val.IsValid() { + return true, errors.New("proto: invalid google.protobuf.Any message") } + b, ok := val.Interface().([]byte) + if !ok { + return true, errors.New("proto: invalid google.protobuf.Any message") + } + + parts := strings.Split(turl.String(), "/") + mt := MessageType(parts[len(parts)-1]) + if mt == nil { + return false, nil + } + m := reflect.New(mt.Elem()) + if err := Unmarshal(b, m.Interface().(Message)); err != nil { + return false, nil + } + w.Write([]byte("[")) + u := turl.String() + if requiresQuotes(u) { + writeString(w, u) + } else { + w.Write([]byte(u)) + } + if w.compact { + w.Write([]byte("]:<")) + } else { + w.Write([]byte("]: <\n")) + w.ind++ + } + if err := tm.writeStruct(w, m.Elem()); err != nil { + return true, err + } + if w.compact { + w.Write([]byte("> ")) + } else { + w.ind-- + w.Write([]byte(">\n")) + } + return true, nil +} + +func (tm *TextMarshaler) writeStruct(w *textWriter, sv reflect.Value) error { + if tm.ExpandAny && isAny(sv) { + if canExpand, err := tm.writeProto3Any(w, sv); canExpand { + return err + } + } st := sv.Type() sprops := GetProperties(st) for i := 0; i < sv.NumField(); i++ { @@ -234,7 +313,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error { } continue } - if err := writeAny(w, v, props); err != nil { + if err := tm.writeAny(w, v, props); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -245,7 +324,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error { } if fv.Kind() == reflect.Map { // Map fields are rendered as a repeated struct with key/value fields. - keys := fv.MapKeys() // TODO: should we sort these for deterministic output? + keys := fv.MapKeys() sort.Sort(mapKeys(keys)) for _, key := range keys { val := fv.MapIndex(key) @@ -276,7 +355,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error { return err } } - if err := writeAny(w, key, props.mkeyprop); err != nil { + if err := tm.writeAny(w, key, props.mkeyprop); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -293,7 +372,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error { return err } } - if err := writeAny(w, val, props.mvalprop); err != nil { + if err := tm.writeAny(w, val, props.mvalprop); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -317,26 +396,34 @@ func writeStruct(w *textWriter, sv reflect.Value) error { } if fv.Kind() != reflect.Ptr && fv.Kind() != reflect.Slice { // proto3 non-repeated scalar field; skip if zero value - switch fv.Kind() { - case reflect.Bool: - if !fv.Bool() { + if isProto3Zero(fv) { + continue + } + } + + if fv.Kind() == reflect.Interface { + // Check if it is a oneof. + if st.Field(i).Tag.Get("protobuf_oneof") != "" { + // fv is nil, or holds a pointer to generated struct. + // That generated struct has exactly one field, + // which has a protobuf struct tag. + if fv.IsNil() { continue } - case reflect.Int32, reflect.Int64: - if fv.Int() == 0 { - continue - } - case reflect.Uint32, reflect.Uint64: - if fv.Uint() == 0 { - continue - } - case reflect.Float32, reflect.Float64: - if fv.Float() == 0 { - continue - } - case reflect.String: - if fv.String() == "" { - continue + inner := fv.Elem().Elem() // interface -> *T -> T + tag := inner.Type().Field(0).Tag.Get("protobuf") + props = new(Properties) // Overwrite the outer props var, but not its pointee. + props.Parse(tag) + // Write the value in the oneof, not the oneof itself. + fv = inner.Field(0) + + // Special case to cope with malformed messages gracefully: + // If the value in the oneof is a nil pointer, don't panic + // in writeAny. + if fv.Kind() == reflect.Ptr && fv.IsNil() { + // Use errors.New so writeAny won't render quotes. + msg := errors.New("/* nil */") + fv = reflect.ValueOf(&msg).Elem() } } } @@ -357,7 +444,7 @@ func writeStruct(w *textWriter, sv reflect.Value) error { } // Enums have a String method, so writeAny will work fine. - if err := writeAny(w, fv, props); err != nil { + if err := tm.writeAny(w, fv, props); err != nil { return err } @@ -368,8 +455,8 @@ func writeStruct(w *textWriter, sv reflect.Value) error { // Extensions (the XXX_extensions field). pv := sv.Addr() - if pv.Type().Implements(extendableProtoType) { - if err := writeExtensions(w, pv); err != nil { + if _, ok := extendable(pv.Interface()); ok { + if err := tm.writeExtensions(w, pv); err != nil { return err } } @@ -399,7 +486,7 @@ func writeRaw(w *textWriter, b []byte) error { } // writeAny writes an arbitrary field. -func writeAny(w *textWriter, v reflect.Value, props *Properties) error { +func (tm *TextMarshaler) writeAny(w *textWriter, v reflect.Value, props *Properties) error { v = reflect.Indirect(v) // Floats have special cases. @@ -426,7 +513,7 @@ func writeAny(w *textWriter, v reflect.Value, props *Properties) error { switch v.Kind() { case reflect.Slice: // Should only be a []byte; repeated fields are handled in writeStruct. - if err := writeString(w, string(v.Interface().([]byte))); err != nil { + if err := writeString(w, string(v.Bytes())); err != nil { return err } case reflect.String: @@ -448,15 +535,15 @@ func writeAny(w *textWriter, v reflect.Value, props *Properties) error { } } w.indent() - if tm, ok := v.Interface().(encoding.TextMarshaler); ok { - text, err := tm.MarshalText() + if etm, ok := v.Interface().(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() if err != nil { return err } if _, err = w.Write(text); err != nil { return err } - } else if err := writeStruct(w, v); err != nil { + } else if err := tm.writeStruct(w, v); err != nil { return err } w.unindent() @@ -516,44 +603,6 @@ func writeString(w *textWriter, s string) error { return w.WriteByte('"') } -func writeMessageSet(w *textWriter, ms *MessageSet) error { - for _, item := range ms.Item { - id := *item.TypeId - if msd, ok := messageSetMap[id]; ok { - // Known message set type. - if _, err := fmt.Fprintf(w, "[%s]: <\n", msd.name); err != nil { - return err - } - w.indent() - - pb := reflect.New(msd.t.Elem()) - if err := Unmarshal(item.Message, pb.Interface().(Message)); err != nil { - if _, err := fmt.Fprintf(w, "/* bad message: %v */\n", err); err != nil { - return err - } - } else { - if err := writeStruct(w, pb.Elem()); err != nil { - return err - } - } - } else { - // Unknown type. - if _, err := fmt.Fprintf(w, "[%d]: <\n", id); err != nil { - return err - } - w.indent() - if err := writeUnknownStruct(w, item.Message); err != nil { - return err - } - } - w.unindent() - if _, err := w.Write(gtNewline); err != nil { - return err - } - } - return nil -} - func writeUnknownStruct(w *textWriter, data []byte) (err error) { if !w.compact { if _, err := fmt.Fprintf(w, "/* %d unknown bytes */\n", len(data)); err != nil { @@ -638,19 +687,24 @@ func (s int32Slice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } // writeExtensions writes all the extensions in pv. // pv is assumed to be a pointer to a protocol message struct that is extendable. -func writeExtensions(w *textWriter, pv reflect.Value) error { +func (tm *TextMarshaler) writeExtensions(w *textWriter, pv reflect.Value) error { emap := extensionMaps[pv.Type().Elem()] - ep := pv.Interface().(extendableProto) + ep, _ := extendable(pv.Interface()) // Order the extensions by ID. // This isn't strictly necessary, but it will give us // canonical output, which will also make testing easier. - m := ep.ExtensionMap() + m, mu := ep.extensionsRead() + if m == nil { + return nil + } + mu.Lock() ids := make([]int32, 0, len(m)) for id := range m { ids = append(ids, id) } sort.Sort(int32Slice(ids)) + mu.Unlock() for _, extNum := range ids { ext := m[extNum] @@ -673,13 +727,13 @@ func writeExtensions(w *textWriter, pv reflect.Value) error { // Repeated extensions will appear as a slice. if !desc.repeated() { - if err := writeExtension(w, desc.Name, pb); err != nil { + if err := tm.writeExtension(w, desc.Name, pb); err != nil { return err } } else { v := reflect.ValueOf(pb) for i := 0; i < v.Len(); i++ { - if err := writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { + if err := tm.writeExtension(w, desc.Name, v.Index(i).Interface()); err != nil { return err } } @@ -688,7 +742,7 @@ func writeExtensions(w *textWriter, pv reflect.Value) error { return nil } -func writeExtension(w *textWriter, name string, pb interface{}) error { +func (tm *TextMarshaler) writeExtension(w *textWriter, name string, pb interface{}) error { if _, err := fmt.Fprintf(w, "[%s]:", name); err != nil { return err } @@ -697,7 +751,7 @@ func writeExtension(w *textWriter, name string, pb interface{}) error { return err } } - if err := writeAny(w, reflect.ValueOf(pb), nil); err != nil { + if err := tm.writeAny(w, reflect.ValueOf(pb), nil); err != nil { return err } if err := w.WriteByte('\n'); err != nil { @@ -722,7 +776,15 @@ func (w *textWriter) writeIndent() { w.complete = false } -func marshalText(w io.Writer, pb Message, compact bool) error { +// TextMarshaler is a configurable text format marshaler. +type TextMarshaler struct { + Compact bool // use compact text format (one line). + ExpandAny bool // expand google.protobuf.Any messages of known types +} + +// Marshal writes a given protocol buffer in text format. +// The only errors returned are from w. +func (tm *TextMarshaler) Marshal(w io.Writer, pb Message) error { val := reflect.ValueOf(pb) if pb == nil || val.IsNil() { w.Write([]byte("")) @@ -737,11 +799,11 @@ func marshalText(w io.Writer, pb Message, compact bool) error { aw := &textWriter{ w: ww, complete: true, - compact: compact, + compact: tm.Compact, } - if tm, ok := pb.(encoding.TextMarshaler); ok { - text, err := tm.MarshalText() + if etm, ok := pb.(encoding.TextMarshaler); ok { + text, err := etm.MarshalText() if err != nil { return err } @@ -755,7 +817,7 @@ func marshalText(w io.Writer, pb Message, compact bool) error { } // Dereference the received pointer so we don't have outer < and >. v := reflect.Indirect(val) - if err := writeStruct(aw, v); err != nil { + if err := tm.writeStruct(aw, v); err != nil { return err } if bw != nil { @@ -764,25 +826,29 @@ func marshalText(w io.Writer, pb Message, compact bool) error { return nil } +// Text is the same as Marshal, but returns the string directly. +func (tm *TextMarshaler) Text(pb Message) string { + var buf bytes.Buffer + tm.Marshal(&buf, pb) + return buf.String() +} + +var ( + defaultTextMarshaler = TextMarshaler{} + compactTextMarshaler = TextMarshaler{Compact: true} +) + +// TODO: consider removing some of the Marshal functions below. + // MarshalText writes a given protocol buffer in text format. // The only errors returned are from w. -func MarshalText(w io.Writer, pb Message) error { - return marshalText(w, pb, false) -} +func MarshalText(w io.Writer, pb Message) error { return defaultTextMarshaler.Marshal(w, pb) } // MarshalTextString is the same as MarshalText, but returns the string directly. -func MarshalTextString(pb Message) string { - var buf bytes.Buffer - marshalText(&buf, pb, false) - return buf.String() -} +func MarshalTextString(pb Message) string { return defaultTextMarshaler.Text(pb) } // CompactText writes a given protocol buffer in compact text format (one line). -func CompactText(w io.Writer, pb Message) error { return marshalText(w, pb, true) } +func CompactText(w io.Writer, pb Message) error { return compactTextMarshaler.Marshal(w, pb) } // CompactTextString is the same as CompactText, but returns the string directly. -func CompactTextString(pb Message) string { - var buf bytes.Buffer - marshalText(&buf, pb, true) - return buf.String() -} +func CompactTextString(pb Message) string { return compactTextMarshaler.Text(pb) } diff --git a/vendor/github.com/golang/protobuf/proto/text_parser.go b/vendor/github.com/golang/protobuf/proto/text_parser.go index 5c466d5..5e14513 100644 --- a/vendor/github.com/golang/protobuf/proto/text_parser.go +++ b/vendor/github.com/golang/protobuf/proto/text_parser.go @@ -44,6 +44,9 @@ import ( "unicode/utf8" ) +// Error string emitted when deserializing Any and fields are already set +const anyRepeatedlyUnpacked = "Any message unpacked multiple times, or %q already set" + type ParseError struct { Message string Line int // 1-based line number @@ -119,6 +122,14 @@ func isWhitespace(c byte) bool { return false } +func isQuote(c byte) bool { + switch c { + case '"', '\'': + return true + } + return false +} + func (p *textParser) skipWhitespace() { i := 0 for i < len(p.s) && (isWhitespace(p.s[i]) || p.s[i] == '#') { @@ -155,7 +166,7 @@ func (p *textParser) advance() { p.cur.offset, p.cur.line = p.offset, p.line p.cur.unquoted = "" switch p.s[0] { - case '<', '>', '{', '}', ':', '[', ']', ';', ',': + case '<', '>', '{', '}', ':', '[', ']', ';', ',', '/': // Single symbol p.cur.value, p.s = p.s[0:1], p.s[1:len(p.s)] case '"', '\'': @@ -174,7 +185,7 @@ func (p *textParser) advance() { } unq, err := unquoteC(p.s[1:i], rune(p.s[0])) if err != nil { - p.errorf("invalid quoted string %v", p.s[0:i+1]) + p.errorf("invalid quoted string %s: %v", p.s[0:i+1], err) return } p.cur.value, p.s = p.s[0:i+1], p.s[i+1:len(p.s)] @@ -333,13 +344,13 @@ func (p *textParser) next() *token { p.advance() if p.done { p.cur.value = "" - } else if len(p.cur.value) > 0 && p.cur.value[0] == '"' { + } else if len(p.cur.value) > 0 && isQuote(p.cur.value[0]) { // Look for multiple quoted strings separated by whitespace, // and concatenate them. cat := p.cur for { p.skipWhitespace() - if p.done || p.s[0] != '"' { + if p.done || !isQuote(p.s[0]) { break } p.advance() @@ -385,8 +396,7 @@ func (p *textParser) missingRequiredFieldError(sv reflect.Value) *RequiredNotSet } // Returns the index in the struct for the named field, as well as the parsed tag properties. -func structFieldByName(st reflect.Type, name string) (int, *Properties, bool) { - sprops := GetProperties(st) +func structFieldByName(sprops *StructProperties, name string) (int, *Properties, bool) { i, ok := sprops.decoderOrigNames[name] if ok { return i, sprops.Prop[i], true @@ -438,12 +448,16 @@ func (p *textParser) checkForColon(props *Properties, typ reflect.Type) *ParseEr func (p *textParser) readStruct(sv reflect.Value, terminator string) error { st := sv.Type() - reqCount := GetProperties(st).reqCount + sprops := GetProperties(st) + reqCount := sprops.reqCount var reqFieldErr error fieldSet := make(map[string]bool) // A struct is a sequence of "name: value", terminated by one of // '>' or '}', or the end of the input. A name may also be - // "[extension]". + // "[extension]" or "[type/url]". + // + // The whole struct can also be an expanded Any message, like: + // [type/url] < ... struct contents ... > for { tok := p.next() if tok.err != nil { @@ -453,33 +467,74 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { break } if tok.value == "[" { - // Looks like an extension. + // Looks like an extension or an Any. // // TODO: Check whether we need to handle // namespace rooted names (e.g. ".something.Foo"). - tok = p.next() - if tok.err != nil { - return tok.err + extName, err := p.consumeExtName() + if err != nil { + return err } + + if s := strings.LastIndex(extName, "/"); s >= 0 { + // If it contains a slash, it's an Any type URL. + messageName := extName[s+1:] + mt := MessageType(messageName) + if mt == nil { + return p.errorf("unrecognized message %q in google.protobuf.Any", messageName) + } + tok = p.next() + if tok.err != nil { + return tok.err + } + // consume an optional colon + if tok.value == ":" { + tok = p.next() + if tok.err != nil { + return tok.err + } + } + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + v := reflect.New(mt.Elem()) + if pe := p.readStruct(v.Elem(), terminator); pe != nil { + return pe + } + b, err := Marshal(v.Interface().(Message)) + if err != nil { + return p.errorf("failed to marshal message of type %q: %v", messageName, err) + } + if fieldSet["type_url"] { + return p.errorf(anyRepeatedlyUnpacked, "type_url") + } + if fieldSet["value"] { + return p.errorf(anyRepeatedlyUnpacked, "value") + } + sv.FieldByName("TypeUrl").SetString(extName) + sv.FieldByName("Value").SetBytes(b) + fieldSet["type_url"] = true + fieldSet["value"] = true + continue + } + var desc *ExtensionDesc // This could be faster, but it's functional. // TODO: Do something smarter than a linear scan. for _, d := range RegisteredExtensions(reflect.New(st).Interface().(Message)) { - if d.Name == tok.value { + if d.Name == extName { desc = d break } } if desc == nil { - return p.errorf("unrecognized extension %q", tok.value) - } - // Check the extension terminator. - tok = p.next() - if tok.err != nil { - return tok.err - } - if tok.value != "]" { - return p.errorf("unrecognized extension terminator %q", tok.value) + return p.errorf("unrecognized extension %q", extName) } props := &Properties{} @@ -506,7 +561,7 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { } reqFieldErr = err } - ep := sv.Addr().Interface().(extendableProto) + ep := sv.Addr().Interface().(Message) if !rep { SetExtension(ep, desc, ext.Interface()) } else { @@ -520,95 +575,120 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { sl = reflect.Append(sl, ext) SetExtension(ep, desc, sl.Interface()) } - } else { - // This is a normal, non-extension field. - name := tok.value - fi, props, ok := structFieldByName(st, name) - if !ok { - return p.errorf("unknown field name %q in %v", name, st) + if err := p.consumeOptionalSeparator(); err != nil { + return err } + continue + } - dst := sv.Field(fi) - - if dst.Kind() == reflect.Map { - // Consume any colon. - if err := p.checkForColon(props, dst.Type()); err != nil { - return err - } - - // Construct the map if it doesn't already exist. - if dst.IsNil() { - dst.Set(reflect.MakeMap(dst.Type())) - } - key := reflect.New(dst.Type().Key()).Elem() - val := reflect.New(dst.Type().Elem()).Elem() - - // The map entry should be this sequence of tokens: - // < key : KEY value : VALUE > - // Technically the "key" and "value" could come in any order, - // but in practice they won't. - - tok := p.next() - var terminator string - switch tok.value { - case "<": - terminator = ">" - case "{": - terminator = "}" - default: - return p.errorf("expected '{' or '<', found %q", tok.value) - } - if err := p.consumeToken("key"); err != nil { - return err - } - if err := p.consumeToken(":"); err != nil { - return err - } - if err := p.readAny(key, props.mkeyprop); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - if err := p.consumeToken("value"); err != nil { - return err - } - if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil { - return err - } - if err := p.readAny(val, props.mvalprop); err != nil { - return err - } - if err := p.consumeOptionalSeparator(); err != nil { - return err - } - if err := p.consumeToken(terminator); err != nil { - return err - } - - dst.SetMapIndex(key, val) - continue + // This is a normal, non-extension field. + name := tok.value + var dst reflect.Value + fi, props, ok := structFieldByName(sprops, name) + if ok { + dst = sv.Field(fi) + } else if oop, ok := sprops.OneofTypes[name]; ok { + // It is a oneof. + props = oop.Prop + nv := reflect.New(oop.Type.Elem()) + dst = nv.Elem().Field(0) + field := sv.Field(oop.Field) + if !field.IsNil() { + return p.errorf("field '%s' would overwrite already parsed oneof '%s'", name, sv.Type().Field(oop.Field).Name) } + field.Set(nv) + } + if !dst.IsValid() { + return p.errorf("unknown field name %q in %v", name, st) + } - // Check that it's not already set if it's not a repeated field. - if !props.Repeated && fieldSet[name] { - return p.errorf("non-repeated field %q was repeated", name) - } - - if err := p.checkForColon(props, st.Field(fi).Type); err != nil { + if dst.Kind() == reflect.Map { + // Consume any colon. + if err := p.checkForColon(props, dst.Type()); err != nil { return err } - // Parse into the field. - fieldSet[name] = true - if err := p.readAny(dst, props); err != nil { - if _, ok := err.(*RequiredNotSetError); !ok { - return err - } - reqFieldErr = err - } else if props.Required { - reqCount-- + // Construct the map if it doesn't already exist. + if dst.IsNil() { + dst.Set(reflect.MakeMap(dst.Type())) } + key := reflect.New(dst.Type().Key()).Elem() + val := reflect.New(dst.Type().Elem()).Elem() + + // The map entry should be this sequence of tokens: + // < key : KEY value : VALUE > + // However, implementations may omit key or value, and technically + // we should support them in any order. See b/28924776 for a time + // this went wrong. + + tok := p.next() + var terminator string + switch tok.value { + case "<": + terminator = ">" + case "{": + terminator = "}" + default: + return p.errorf("expected '{' or '<', found %q", tok.value) + } + for { + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == terminator { + break + } + switch tok.value { + case "key": + if err := p.consumeToken(":"); err != nil { + return err + } + if err := p.readAny(key, props.mkeyprop); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + case "value": + if err := p.checkForColon(props.mvalprop, dst.Type().Elem()); err != nil { + return err + } + if err := p.readAny(val, props.mvalprop); err != nil { + return err + } + if err := p.consumeOptionalSeparator(); err != nil { + return err + } + default: + p.back() + return p.errorf(`expected "key", "value", or %q, found %q`, terminator, tok.value) + } + } + + dst.SetMapIndex(key, val) + continue + } + + // Check that it's not already set if it's not a repeated field. + if !props.Repeated && fieldSet[name] { + return p.errorf("non-repeated field %q was repeated", name) + } + + if err := p.checkForColon(props, dst.Type()); err != nil { + return err + } + + // Parse into the field. + fieldSet[name] = true + if err := p.readAny(dst, props); err != nil { + if _, ok := err.(*RequiredNotSetError); !ok { + return err + } + reqFieldErr = err + } + if props.Required { + reqCount-- } if err := p.consumeOptionalSeparator(); err != nil { @@ -623,6 +703,35 @@ func (p *textParser) readStruct(sv reflect.Value, terminator string) error { return reqFieldErr } +// consumeExtName consumes extension name or expanded Any type URL and the +// following ']'. It returns the name or URL consumed. +func (p *textParser) consumeExtName() (string, error) { + tok := p.next() + if tok.err != nil { + return "", tok.err + } + + // If extension name or type url is quoted, it's a single token. + if len(tok.value) > 2 && isQuote(tok.value[0]) && tok.value[len(tok.value)-1] == tok.value[0] { + name, err := unquoteC(tok.value[1:len(tok.value)-1], rune(tok.value[0])) + if err != nil { + return "", err + } + return name, p.consumeToken("]") + } + + // Consume everything up to "]" + var parts []string + for tok.value != "]" { + parts = append(parts, tok.value) + tok = p.next() + if tok.err != nil { + return "", p.errorf("unrecognized type_url or extension name: %s", tok.err) + } + } + return strings.Join(parts, ""), nil +} + // consumeOptionalSeparator consumes an optional semicolon or comma. // It is used in readStruct to provide backward compatibility. func (p *textParser) consumeOptionalSeparator() error { @@ -660,25 +769,39 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { fv.Set(reflect.ValueOf(bytes)) return nil } - // Repeated field. May already exist. - flen := fv.Len() - if flen == fv.Cap() { - nav := reflect.MakeSlice(at, flen, 2*flen+1) - reflect.Copy(nav, fv) - fv.Set(nav) + // Repeated field. + if tok.value == "[" { + // Repeated field with list notation, like [1,2,3]. + for { + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + err := p.readAny(fv.Index(fv.Len()-1), props) + if err != nil { + return err + } + tok := p.next() + if tok.err != nil { + return tok.err + } + if tok.value == "]" { + break + } + if tok.value != "," { + return p.errorf("Expected ']' or ',' found %q", tok.value) + } + } + return nil } - fv.SetLen(flen + 1) - - // Read one. + // One value of the repeated field. p.back() - return p.readAny(fv.Index(flen), props) + fv.Set(reflect.Append(fv, reflect.New(at.Elem()).Elem())) + return p.readAny(fv.Index(fv.Len()-1), props) case reflect.Bool: - // Either "true", "false", 1 or 0. + // true/1/t/True or false/f/0/False. switch tok.value { - case "true", "1": + case "true", "1", "t", "True": fv.SetBool(true) return nil - case "false", "0": + case "false", "0", "f", "False": fv.SetBool(false) return nil } @@ -742,7 +865,7 @@ func (p *textParser) readAny(v reflect.Value, props *Properties) error { return p.readStruct(fv, terminator) case reflect.Uint32: if x, err := strconv.ParseUint(tok.value, 0, 32); err == nil { - fv.SetUint(uint64(x)) + fv.SetUint(x) return nil } case reflect.Uint64: diff --git a/vendor/github.com/golang/protobuf/proto/text_parser_test.go b/vendor/github.com/golang/protobuf/proto/text_parser_test.go index cfc0db6..8f7cb4d 100644 --- a/vendor/github.com/golang/protobuf/proto/text_parser_test.go +++ b/vendor/github.com/golang/protobuf/proto/text_parser_test.go @@ -95,7 +95,7 @@ var unMarshalTextTests = []UnmarshalTextTest{ }, }, - // Quoted string concatenation + // Quoted string concatenation with double quotes { in: `count:42 name: "My name is "` + "\n" + `"elsewhere"`, out: &MyMessage{ @@ -104,6 +104,31 @@ var unMarshalTextTests = []UnmarshalTextTest{ }, }, + // Quoted string concatenation with single quotes + { + in: "count:42 name: 'My name is '\n'elsewhere'", + out: &MyMessage{ + Count: Int32(42), + Name: String("My name is elsewhere"), + }, + }, + + // Quoted string concatenations with mixed quotes + { + in: "count:42 name: 'My name is '\n\"elsewhere\"", + out: &MyMessage{ + Count: Int32(42), + Name: String("My name is elsewhere"), + }, + }, + { + in: "count:42 name: \"My name is \"\n'elsewhere'", + out: &MyMessage{ + Count: Int32(42), + Name: String("My name is elsewhere"), + }, + }, + // Quoted string with escaped apostrophe { in: `count:42 name: "HOLIDAY - New Year\'s Day"`, @@ -152,7 +177,7 @@ var unMarshalTextTests = []UnmarshalTextTest{ // Bad quoted string { in: `inner: < host: "\0" >` + "\n", - err: `line 1.15: invalid quoted string "\0"`, + err: `line 1.15: invalid quoted string "\0": \0 requires 2 following digits`, }, // Number too large for int64 @@ -256,6 +281,15 @@ var unMarshalTextTests = []UnmarshalTextTest{ }, }, + // Repeated field with list notation + { + in: `count:42 pet: ["horsey", "bunny"]`, + out: &MyMessage{ + Count: Int32(42), + Pet: []string{"horsey", "bunny"}, + }, + }, + // Repeated message with/without colon and <>/{} { in: `count:42 others:{} others{} others:<> others:{}`, @@ -302,6 +336,16 @@ var unMarshalTextTests = []UnmarshalTextTest{ }, }, + // Missing required field in a required submessage + { + in: `count: 42 we_must_go_deeper < leo_finally_won_an_oscar <> >`, + err: `proto: required field "testdata.InnerMessage.host" not set`, + out: &MyMessage{ + Count: Int32(42), + WeMustGoDeeper: &RequiredInnerMessage{LeoFinallyWonAnOscar: &InnerMessage{}}, + }, + }, + // Repeated non-repeated field { in: `name: "Rob" name: "Russ"`, @@ -336,6 +380,95 @@ var unMarshalTextTests = []UnmarshalTextTest{ }, }, + // Boolean false + { + in: `count:42 inner { host: "example.com" connected: false }`, + out: &MyMessage{ + Count: Int32(42), + Inner: &InnerMessage{ + Host: String("example.com"), + Connected: Bool(false), + }, + }, + }, + // Boolean true + { + in: `count:42 inner { host: "example.com" connected: true }`, + out: &MyMessage{ + Count: Int32(42), + Inner: &InnerMessage{ + Host: String("example.com"), + Connected: Bool(true), + }, + }, + }, + // Boolean 0 + { + in: `count:42 inner { host: "example.com" connected: 0 }`, + out: &MyMessage{ + Count: Int32(42), + Inner: &InnerMessage{ + Host: String("example.com"), + Connected: Bool(false), + }, + }, + }, + // Boolean 1 + { + in: `count:42 inner { host: "example.com" connected: 1 }`, + out: &MyMessage{ + Count: Int32(42), + Inner: &InnerMessage{ + Host: String("example.com"), + Connected: Bool(true), + }, + }, + }, + // Boolean f + { + in: `count:42 inner { host: "example.com" connected: f }`, + out: &MyMessage{ + Count: Int32(42), + Inner: &InnerMessage{ + Host: String("example.com"), + Connected: Bool(false), + }, + }, + }, + // Boolean t + { + in: `count:42 inner { host: "example.com" connected: t }`, + out: &MyMessage{ + Count: Int32(42), + Inner: &InnerMessage{ + Host: String("example.com"), + Connected: Bool(true), + }, + }, + }, + // Boolean False + { + in: `count:42 inner { host: "example.com" connected: False }`, + out: &MyMessage{ + Count: Int32(42), + Inner: &InnerMessage{ + Host: String("example.com"), + Connected: Bool(false), + }, + }, + }, + // Boolean True + { + in: `count:42 inner { host: "example.com" connected: True }`, + out: &MyMessage{ + Count: Int32(42), + Inner: &InnerMessage{ + Host: String("example.com"), + Connected: Bool(true), + }, + }, + }, + // Extension buildExtStructTest(`count: 42 [testdata.Ext.more]:`), buildExtStructTest(`count: 42 [testdata.Ext.more] {data:"Hello, world!"}`), @@ -464,7 +597,10 @@ func TestMapParsing(t *testing.T) { const in = `name_mapping: name_mapping:` + `msg_mapping:,>` + // separating commas are okay `msg_mapping>` + // no colon after "value" - `byte_mapping:` + `msg_mapping:>` + // omitted key + `msg_mapping:` + // omitted value + `byte_mapping:` + + `byte_mapping:<>` // omitted key and value want := &MessageWithMap{ NameMapping: map[int32]string{ 1: "Beatles", @@ -473,9 +609,12 @@ func TestMapParsing(t *testing.T) { MsgMapping: map[int64]*FloatingPoint{ -4: {F: Float64(2.0)}, -2: {F: Float64(4.0)}, + 0: {F: Float64(5.0)}, + 1: nil, }, ByteMapping: map[bool][]byte{ - true: []byte("so be it"), + false: nil, + true: []byte("so be it"), }, } if err := UnmarshalText(in, m); err != nil { @@ -486,6 +625,29 @@ func TestMapParsing(t *testing.T) { } } +func TestOneofParsing(t *testing.T) { + const in = `name:"Shrek"` + m := new(Communique) + want := &Communique{Union: &Communique_Name{"Shrek"}} + if err := UnmarshalText(in, m); err != nil { + t.Fatal(err) + } + if !Equal(m, want) { + t.Errorf("\n got %v\nwant %v", m, want) + } + + const inOverwrite = `name:"Shrek" number:42` + m = new(Communique) + testErr := "line 1.13: field 'number' would overwrite already parsed oneof 'Union'" + if err := UnmarshalText(inOverwrite, m); err == nil { + t.Errorf("TestOneofParsing: Didn't get expected error: %v", testErr) + } else if err.Error() != testErr { + t.Errorf("TestOneofParsing: Incorrect error.\nHave: %v\nWant: %v", + err.Error(), testErr) + } + +} + var benchInput string func init() { diff --git a/vendor/github.com/golang/protobuf/proto/text_test.go b/vendor/github.com/golang/protobuf/proto/text_test.go index 39861d1..3eabaca 100644 --- a/vendor/github.com/golang/protobuf/proto/text_test.go +++ b/vendor/github.com/golang/protobuf/proto/text_test.go @@ -208,6 +208,30 @@ func TestMarshalTextUnknownEnum(t *testing.T) { } } +func TestTextOneof(t *testing.T) { + tests := []struct { + m proto.Message + want string + }{ + // zero message + {&pb.Communique{}, ``}, + // scalar field + {&pb.Communique{Union: &pb.Communique_Number{4}}, `number:4`}, + // message field + {&pb.Communique{Union: &pb.Communique_Msg{ + &pb.Strings{StringField: proto.String("why hello!")}, + }}, `msg:`}, + // bad oneof (should not panic) + {&pb.Communique{Union: &pb.Communique_Msg{nil}}, `msg:/* nil */`}, + } + for _, test := range tests { + got := strings.TrimSpace(test.m.String()) + if got != test.want { + t.Errorf("\n got %s\nwant %s", got, test.want) + } + } +} + func BenchmarkMarshalTextBuffered(b *testing.B) { buf := new(bytes.Buffer) m := newTestMessage() @@ -421,10 +445,19 @@ func TestProto3Text(t *testing.T) { {&proto3pb.Message{Name: "Rob", HeightInCm: 175}, `name:"Rob" height_in_cm:175`}, // empty map {&pb.MessageWithMap{}, ``}, - // non-empty map; current map format is the same as a repeated struct + // non-empty map; map format is the same as a repeated struct, + // and they are sorted by key (numerically for numeric keys). { - &pb.MessageWithMap{NameMapping: map[int32]string{1234: "Feist"}}, - `name_mapping:`, + &pb.MessageWithMap{NameMapping: map[int32]string{ + -1: "Negatory", + 7: "Lucky", + 1234: "Feist", + 6345789: "Otis", + }}, + `name_mapping: ` + + `name_mapping: ` + + `name_mapping: ` + + `name_mapping:`, }, // map with nil value; not well-defined, but we shouldn't crash { diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/Makefile new file mode 100644 index 0000000..a42cc37 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/Makefile @@ -0,0 +1,33 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +test: + cd testdata && make test diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile new file mode 100644 index 0000000..f706871 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/Makefile @@ -0,0 +1,37 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Not stored here, but descriptor.proto is in https://github.com/google/protobuf/ +# at src/google/protobuf/descriptor.proto +regenerate: + @echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION + cp $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto . + protoc --go_out=../../../../.. -I$(HOME)/src/protobuf/include $(HOME)/src/protobuf/include/google/protobuf/descriptor.proto diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go new file mode 100644 index 0000000..c6a91bc --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.pb.go @@ -0,0 +1,2215 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/descriptor.proto + +/* +Package descriptor is a generated protocol buffer package. + +It is generated from these files: + google/protobuf/descriptor.proto + +It has these top-level messages: + FileDescriptorSet + FileDescriptorProto + DescriptorProto + ExtensionRangeOptions + FieldDescriptorProto + OneofDescriptorProto + EnumDescriptorProto + EnumValueDescriptorProto + ServiceDescriptorProto + MethodDescriptorProto + FileOptions + MessageOptions + FieldOptions + OneofOptions + EnumOptions + EnumValueOptions + ServiceOptions + MethodOptions + UninterpretedOption + SourceCodeInfo + GeneratedCodeInfo +*/ +package descriptor + +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 + +type FieldDescriptorProto_Type int32 + +const ( + // 0 is reserved for errors. + // Order is weird for historical reasons. + FieldDescriptorProto_TYPE_DOUBLE FieldDescriptorProto_Type = 1 + FieldDescriptorProto_TYPE_FLOAT FieldDescriptorProto_Type = 2 + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + FieldDescriptorProto_TYPE_INT64 FieldDescriptorProto_Type = 3 + FieldDescriptorProto_TYPE_UINT64 FieldDescriptorProto_Type = 4 + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + FieldDescriptorProto_TYPE_INT32 FieldDescriptorProto_Type = 5 + FieldDescriptorProto_TYPE_FIXED64 FieldDescriptorProto_Type = 6 + FieldDescriptorProto_TYPE_FIXED32 FieldDescriptorProto_Type = 7 + FieldDescriptorProto_TYPE_BOOL FieldDescriptorProto_Type = 8 + FieldDescriptorProto_TYPE_STRING FieldDescriptorProto_Type = 9 + // Tag-delimited aggregate. + // Group type is deprecated and not supported in proto3. However, Proto3 + // implementations should still be able to parse the group wire format and + // treat group fields as unknown fields. + FieldDescriptorProto_TYPE_GROUP FieldDescriptorProto_Type = 10 + FieldDescriptorProto_TYPE_MESSAGE FieldDescriptorProto_Type = 11 + // New in version 2. + FieldDescriptorProto_TYPE_BYTES FieldDescriptorProto_Type = 12 + FieldDescriptorProto_TYPE_UINT32 FieldDescriptorProto_Type = 13 + FieldDescriptorProto_TYPE_ENUM FieldDescriptorProto_Type = 14 + FieldDescriptorProto_TYPE_SFIXED32 FieldDescriptorProto_Type = 15 + FieldDescriptorProto_TYPE_SFIXED64 FieldDescriptorProto_Type = 16 + FieldDescriptorProto_TYPE_SINT32 FieldDescriptorProto_Type = 17 + FieldDescriptorProto_TYPE_SINT64 FieldDescriptorProto_Type = 18 +) + +var FieldDescriptorProto_Type_name = map[int32]string{ + 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 FieldDescriptorProto_Type_value = map[string]int32{ + "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 FieldDescriptorProto_Type) Enum() *FieldDescriptorProto_Type { + p := new(FieldDescriptorProto_Type) + *p = x + return p +} +func (x FieldDescriptorProto_Type) String() string { + return proto.EnumName(FieldDescriptorProto_Type_name, int32(x)) +} +func (x *FieldDescriptorProto_Type) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Type_value, data, "FieldDescriptorProto_Type") + if err != nil { + return err + } + *x = FieldDescriptorProto_Type(value) + return nil +} +func (FieldDescriptorProto_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4, 0} } + +type FieldDescriptorProto_Label int32 + +const ( + // 0 is reserved for errors + FieldDescriptorProto_LABEL_OPTIONAL FieldDescriptorProto_Label = 1 + FieldDescriptorProto_LABEL_REQUIRED FieldDescriptorProto_Label = 2 + FieldDescriptorProto_LABEL_REPEATED FieldDescriptorProto_Label = 3 +) + +var FieldDescriptorProto_Label_name = map[int32]string{ + 1: "LABEL_OPTIONAL", + 2: "LABEL_REQUIRED", + 3: "LABEL_REPEATED", +} +var FieldDescriptorProto_Label_value = map[string]int32{ + "LABEL_OPTIONAL": 1, + "LABEL_REQUIRED": 2, + "LABEL_REPEATED": 3, +} + +func (x FieldDescriptorProto_Label) Enum() *FieldDescriptorProto_Label { + p := new(FieldDescriptorProto_Label) + *p = x + return p +} +func (x FieldDescriptorProto_Label) String() string { + return proto.EnumName(FieldDescriptorProto_Label_name, int32(x)) +} +func (x *FieldDescriptorProto_Label) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FieldDescriptorProto_Label_value, data, "FieldDescriptorProto_Label") + if err != nil { + return err + } + *x = FieldDescriptorProto_Label(value) + return nil +} +func (FieldDescriptorProto_Label) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{4, 1} +} + +// Generated classes can be optimized for speed or code size. +type FileOptions_OptimizeMode int32 + +const ( + FileOptions_SPEED FileOptions_OptimizeMode = 1 + // etc. + FileOptions_CODE_SIZE FileOptions_OptimizeMode = 2 + FileOptions_LITE_RUNTIME FileOptions_OptimizeMode = 3 +) + +var FileOptions_OptimizeMode_name = map[int32]string{ + 1: "SPEED", + 2: "CODE_SIZE", + 3: "LITE_RUNTIME", +} +var FileOptions_OptimizeMode_value = map[string]int32{ + "SPEED": 1, + "CODE_SIZE": 2, + "LITE_RUNTIME": 3, +} + +func (x FileOptions_OptimizeMode) Enum() *FileOptions_OptimizeMode { + p := new(FileOptions_OptimizeMode) + *p = x + return p +} +func (x FileOptions_OptimizeMode) String() string { + return proto.EnumName(FileOptions_OptimizeMode_name, int32(x)) +} +func (x *FileOptions_OptimizeMode) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FileOptions_OptimizeMode_value, data, "FileOptions_OptimizeMode") + if err != nil { + return err + } + *x = FileOptions_OptimizeMode(value) + return nil +} +func (FileOptions_OptimizeMode) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{10, 0} } + +type FieldOptions_CType int32 + +const ( + // Default mode. + FieldOptions_STRING FieldOptions_CType = 0 + FieldOptions_CORD FieldOptions_CType = 1 + FieldOptions_STRING_PIECE FieldOptions_CType = 2 +) + +var FieldOptions_CType_name = map[int32]string{ + 0: "STRING", + 1: "CORD", + 2: "STRING_PIECE", +} +var FieldOptions_CType_value = map[string]int32{ + "STRING": 0, + "CORD": 1, + "STRING_PIECE": 2, +} + +func (x FieldOptions_CType) Enum() *FieldOptions_CType { + p := new(FieldOptions_CType) + *p = x + return p +} +func (x FieldOptions_CType) String() string { + return proto.EnumName(FieldOptions_CType_name, int32(x)) +} +func (x *FieldOptions_CType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FieldOptions_CType_value, data, "FieldOptions_CType") + if err != nil { + return err + } + *x = FieldOptions_CType(value) + return nil +} +func (FieldOptions_CType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 0} } + +type FieldOptions_JSType int32 + +const ( + // Use the default type. + FieldOptions_JS_NORMAL FieldOptions_JSType = 0 + // Use JavaScript strings. + FieldOptions_JS_STRING FieldOptions_JSType = 1 + // Use JavaScript numbers. + FieldOptions_JS_NUMBER FieldOptions_JSType = 2 +) + +var FieldOptions_JSType_name = map[int32]string{ + 0: "JS_NORMAL", + 1: "JS_STRING", + 2: "JS_NUMBER", +} +var FieldOptions_JSType_value = map[string]int32{ + "JS_NORMAL": 0, + "JS_STRING": 1, + "JS_NUMBER": 2, +} + +func (x FieldOptions_JSType) Enum() *FieldOptions_JSType { + p := new(FieldOptions_JSType) + *p = x + return p +} +func (x FieldOptions_JSType) String() string { + return proto.EnumName(FieldOptions_JSType_name, int32(x)) +} +func (x *FieldOptions_JSType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(FieldOptions_JSType_value, data, "FieldOptions_JSType") + if err != nil { + return err + } + *x = FieldOptions_JSType(value) + return nil +} +func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{12, 1} } + +// Is this method side-effect-free (or safe in HTTP parlance), or idempotent, +// or neither? HTTP based RPC implementation may choose GET verb for safe +// methods, and PUT verb for idempotent methods instead of the default POST. +type MethodOptions_IdempotencyLevel int32 + +const ( + MethodOptions_IDEMPOTENCY_UNKNOWN MethodOptions_IdempotencyLevel = 0 + MethodOptions_NO_SIDE_EFFECTS MethodOptions_IdempotencyLevel = 1 + MethodOptions_IDEMPOTENT MethodOptions_IdempotencyLevel = 2 +) + +var MethodOptions_IdempotencyLevel_name = map[int32]string{ + 0: "IDEMPOTENCY_UNKNOWN", + 1: "NO_SIDE_EFFECTS", + 2: "IDEMPOTENT", +} +var MethodOptions_IdempotencyLevel_value = map[string]int32{ + "IDEMPOTENCY_UNKNOWN": 0, + "NO_SIDE_EFFECTS": 1, + "IDEMPOTENT": 2, +} + +func (x MethodOptions_IdempotencyLevel) Enum() *MethodOptions_IdempotencyLevel { + p := new(MethodOptions_IdempotencyLevel) + *p = x + return p +} +func (x MethodOptions_IdempotencyLevel) String() string { + return proto.EnumName(MethodOptions_IdempotencyLevel_name, int32(x)) +} +func (x *MethodOptions_IdempotencyLevel) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(MethodOptions_IdempotencyLevel_value, data, "MethodOptions_IdempotencyLevel") + if err != nil { + return err + } + *x = MethodOptions_IdempotencyLevel(value) + return nil +} +func (MethodOptions_IdempotencyLevel) EnumDescriptor() ([]byte, []int) { + return fileDescriptor0, []int{17, 0} +} + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +type FileDescriptorSet struct { + File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FileDescriptorSet) Reset() { *m = FileDescriptorSet{} } +func (m *FileDescriptorSet) String() string { return proto.CompactTextString(m) } +func (*FileDescriptorSet) ProtoMessage() {} +func (*FileDescriptorSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *FileDescriptorSet) GetFile() []*FileDescriptorProto { + if m != nil { + return m.File + } + return nil +} + +// Describes a complete .proto file. +type FileDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"` + // Names of files imported by this file. + Dependency []string `protobuf:"bytes,3,rep,name=dependency" json:"dependency,omitempty"` + // Indexes of the public imported files in the dependency list above. + PublicDependency []int32 `protobuf:"varint,10,rep,name=public_dependency,json=publicDependency" json:"public_dependency,omitempty"` + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + WeakDependency []int32 `protobuf:"varint,11,rep,name=weak_dependency,json=weakDependency" json:"weak_dependency,omitempty"` + // All top-level definitions in this file. + MessageType []*DescriptorProto `protobuf:"bytes,4,rep,name=message_type,json=messageType" json:"message_type,omitempty"` + EnumType []*EnumDescriptorProto `protobuf:"bytes,5,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` + Service []*ServiceDescriptorProto `protobuf:"bytes,6,rep,name=service" json:"service,omitempty"` + Extension []*FieldDescriptorProto `protobuf:"bytes,7,rep,name=extension" json:"extension,omitempty"` + Options *FileOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` + // This field contains optional information about the original source code. + // You may safely remove this entire field without harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + SourceCodeInfo *SourceCodeInfo `protobuf:"bytes,9,opt,name=source_code_info,json=sourceCodeInfo" json:"source_code_info,omitempty"` + // The syntax of the proto file. + // The supported values are "proto2" and "proto3". + Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FileDescriptorProto) Reset() { *m = FileDescriptorProto{} } +func (m *FileDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*FileDescriptorProto) ProtoMessage() {} +func (*FileDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *FileDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *FileDescriptorProto) GetPackage() string { + if m != nil && m.Package != nil { + return *m.Package + } + return "" +} + +func (m *FileDescriptorProto) GetDependency() []string { + if m != nil { + return m.Dependency + } + return nil +} + +func (m *FileDescriptorProto) GetPublicDependency() []int32 { + if m != nil { + return m.PublicDependency + } + return nil +} + +func (m *FileDescriptorProto) GetWeakDependency() []int32 { + if m != nil { + return m.WeakDependency + } + return nil +} + +func (m *FileDescriptorProto) GetMessageType() []*DescriptorProto { + if m != nil { + return m.MessageType + } + return nil +} + +func (m *FileDescriptorProto) GetEnumType() []*EnumDescriptorProto { + if m != nil { + return m.EnumType + } + return nil +} + +func (m *FileDescriptorProto) GetService() []*ServiceDescriptorProto { + if m != nil { + return m.Service + } + return nil +} + +func (m *FileDescriptorProto) GetExtension() []*FieldDescriptorProto { + if m != nil { + return m.Extension + } + return nil +} + +func (m *FileDescriptorProto) GetOptions() *FileOptions { + if m != nil { + return m.Options + } + return nil +} + +func (m *FileDescriptorProto) GetSourceCodeInfo() *SourceCodeInfo { + if m != nil { + return m.SourceCodeInfo + } + return nil +} + +func (m *FileDescriptorProto) GetSyntax() string { + if m != nil && m.Syntax != nil { + return *m.Syntax + } + return "" +} + +// Describes a message type. +type DescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Field []*FieldDescriptorProto `protobuf:"bytes,2,rep,name=field" json:"field,omitempty"` + Extension []*FieldDescriptorProto `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"` + NestedType []*DescriptorProto `protobuf:"bytes,3,rep,name=nested_type,json=nestedType" json:"nested_type,omitempty"` + EnumType []*EnumDescriptorProto `protobuf:"bytes,4,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` + ExtensionRange []*DescriptorProto_ExtensionRange `protobuf:"bytes,5,rep,name=extension_range,json=extensionRange" json:"extension_range,omitempty"` + OneofDecl []*OneofDescriptorProto `protobuf:"bytes,8,rep,name=oneof_decl,json=oneofDecl" json:"oneof_decl,omitempty"` + Options *MessageOptions `protobuf:"bytes,7,opt,name=options" json:"options,omitempty"` + ReservedRange []*DescriptorProto_ReservedRange `protobuf:"bytes,9,rep,name=reserved_range,json=reservedRange" json:"reserved_range,omitempty"` + // Reserved field names, which may not be used by fields in the same message. + // A given name may only be reserved once. + ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DescriptorProto) Reset() { *m = DescriptorProto{} } +func (m *DescriptorProto) String() string { return proto.CompactTextString(m) } +func (*DescriptorProto) ProtoMessage() {} +func (*DescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *DescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *DescriptorProto) GetField() []*FieldDescriptorProto { + if m != nil { + return m.Field + } + return nil +} + +func (m *DescriptorProto) GetExtension() []*FieldDescriptorProto { + if m != nil { + return m.Extension + } + return nil +} + +func (m *DescriptorProto) GetNestedType() []*DescriptorProto { + if m != nil { + return m.NestedType + } + return nil +} + +func (m *DescriptorProto) GetEnumType() []*EnumDescriptorProto { + if m != nil { + return m.EnumType + } + return nil +} + +func (m *DescriptorProto) GetExtensionRange() []*DescriptorProto_ExtensionRange { + if m != nil { + return m.ExtensionRange + } + return nil +} + +func (m *DescriptorProto) GetOneofDecl() []*OneofDescriptorProto { + if m != nil { + return m.OneofDecl + } + return nil +} + +func (m *DescriptorProto) GetOptions() *MessageOptions { + if m != nil { + return m.Options + } + return nil +} + +func (m *DescriptorProto) GetReservedRange() []*DescriptorProto_ReservedRange { + if m != nil { + return m.ReservedRange + } + return nil +} + +func (m *DescriptorProto) GetReservedName() []string { + if m != nil { + return m.ReservedName + } + return nil +} + +type DescriptorProto_ExtensionRange struct { + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` + Options *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DescriptorProto_ExtensionRange) Reset() { *m = DescriptorProto_ExtensionRange{} } +func (m *DescriptorProto_ExtensionRange) String() string { return proto.CompactTextString(m) } +func (*DescriptorProto_ExtensionRange) ProtoMessage() {} +func (*DescriptorProto_ExtensionRange) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{2, 0} +} + +func (m *DescriptorProto_ExtensionRange) GetStart() int32 { + if m != nil && m.Start != nil { + return *m.Start + } + return 0 +} + +func (m *DescriptorProto_ExtensionRange) GetEnd() int32 { + if m != nil && m.End != nil { + return *m.End + } + return 0 +} + +func (m *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions { + if m != nil { + return m.Options + } + return nil +} + +// Range of reserved tag numbers. Reserved tag numbers may not be used by +// fields or extension ranges in the same message. Reserved ranges may +// not overlap. +type DescriptorProto_ReservedRange struct { + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DescriptorProto_ReservedRange) Reset() { *m = DescriptorProto_ReservedRange{} } +func (m *DescriptorProto_ReservedRange) String() string { return proto.CompactTextString(m) } +func (*DescriptorProto_ReservedRange) ProtoMessage() {} +func (*DescriptorProto_ReservedRange) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{2, 1} +} + +func (m *DescriptorProto_ReservedRange) GetStart() int32 { + if m != nil && m.Start != nil { + return *m.Start + } + return 0 +} + +func (m *DescriptorProto_ReservedRange) GetEnd() int32 { + if m != nil && m.End != nil { + return *m.End + } + return 0 +} + +type ExtensionRangeOptions struct { + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ExtensionRangeOptions) Reset() { *m = ExtensionRangeOptions{} } +func (m *ExtensionRangeOptions) String() string { return proto.CompactTextString(m) } +func (*ExtensionRangeOptions) ProtoMessage() {} +func (*ExtensionRangeOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +var extRange_ExtensionRangeOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*ExtensionRangeOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_ExtensionRangeOptions +} + +func (m *ExtensionRangeOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +// Describes a field within a message. +type FieldDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Number *int32 `protobuf:"varint,3,opt,name=number" json:"number,omitempty"` + Label *FieldDescriptorProto_Label `protobuf:"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label" json:"label,omitempty"` + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + Type *FieldDescriptorProto_Type `protobuf:"varint,5,opt,name=type,enum=google.protobuf.FieldDescriptorProto_Type" json:"type,omitempty"` + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + TypeName *string `protobuf:"bytes,6,opt,name=type_name,json=typeName" json:"type_name,omitempty"` + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + Extendee *string `protobuf:"bytes,2,opt,name=extendee" json:"extendee,omitempty"` + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + // TODO(kenton): Base-64 encode? + DefaultValue *string `protobuf:"bytes,7,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. + OneofIndex *int32 `protobuf:"varint,9,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"` + // JSON name of this field. The value is set by protocol compiler. If the + // user has set a "json_name" option on this field, that option's value + // will be used. Otherwise, it's deduced from the field's name by converting + // it to camelCase. + JsonName *string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"` + Options *FieldOptions `protobuf:"bytes,8,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FieldDescriptorProto) Reset() { *m = FieldDescriptorProto{} } +func (m *FieldDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*FieldDescriptorProto) ProtoMessage() {} +func (*FieldDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *FieldDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *FieldDescriptorProto) GetNumber() int32 { + if m != nil && m.Number != nil { + return *m.Number + } + return 0 +} + +func (m *FieldDescriptorProto) GetLabel() FieldDescriptorProto_Label { + if m != nil && m.Label != nil { + return *m.Label + } + return FieldDescriptorProto_LABEL_OPTIONAL +} + +func (m *FieldDescriptorProto) GetType() FieldDescriptorProto_Type { + if m != nil && m.Type != nil { + return *m.Type + } + return FieldDescriptorProto_TYPE_DOUBLE +} + +func (m *FieldDescriptorProto) GetTypeName() string { + if m != nil && m.TypeName != nil { + return *m.TypeName + } + return "" +} + +func (m *FieldDescriptorProto) GetExtendee() string { + if m != nil && m.Extendee != nil { + return *m.Extendee + } + return "" +} + +func (m *FieldDescriptorProto) GetDefaultValue() string { + if m != nil && m.DefaultValue != nil { + return *m.DefaultValue + } + return "" +} + +func (m *FieldDescriptorProto) GetOneofIndex() int32 { + if m != nil && m.OneofIndex != nil { + return *m.OneofIndex + } + return 0 +} + +func (m *FieldDescriptorProto) GetJsonName() string { + if m != nil && m.JsonName != nil { + return *m.JsonName + } + return "" +} + +func (m *FieldDescriptorProto) GetOptions() *FieldOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes a oneof. +type OneofDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OneofDescriptorProto) Reset() { *m = OneofDescriptorProto{} } +func (m *OneofDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*OneofDescriptorProto) ProtoMessage() {} +func (*OneofDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *OneofDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *OneofDescriptorProto) GetOptions() *OneofOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes an enum type. +type EnumDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` + Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnumDescriptorProto) Reset() { *m = EnumDescriptorProto{} } +func (m *EnumDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*EnumDescriptorProto) ProtoMessage() {} +func (*EnumDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *EnumDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *EnumDescriptorProto) GetValue() []*EnumValueDescriptorProto { + if m != nil { + return m.Value + } + return nil +} + +func (m *EnumDescriptorProto) GetOptions() *EnumOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes a value within an enum. +type EnumValueDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` + Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnumValueDescriptorProto) Reset() { *m = EnumValueDescriptorProto{} } +func (m *EnumValueDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*EnumValueDescriptorProto) ProtoMessage() {} +func (*EnumValueDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *EnumValueDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *EnumValueDescriptorProto) GetNumber() int32 { + if m != nil && m.Number != nil { + return *m.Number + } + return 0 +} + +func (m *EnumValueDescriptorProto) GetOptions() *EnumValueOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes a service. +type ServiceDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"` + Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ServiceDescriptorProto) Reset() { *m = ServiceDescriptorProto{} } +func (m *ServiceDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*ServiceDescriptorProto) ProtoMessage() {} +func (*ServiceDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *ServiceDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *ServiceDescriptorProto) GetMethod() []*MethodDescriptorProto { + if m != nil { + return m.Method + } + return nil +} + +func (m *ServiceDescriptorProto) GetOptions() *ServiceOptions { + if m != nil { + return m.Options + } + return nil +} + +// Describes a method of a service. +type MethodDescriptorProto struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + InputType *string `protobuf:"bytes,2,opt,name=input_type,json=inputType" json:"input_type,omitempty"` + OutputType *string `protobuf:"bytes,3,opt,name=output_type,json=outputType" json:"output_type,omitempty"` + Options *MethodOptions `protobuf:"bytes,4,opt,name=options" json:"options,omitempty"` + // Identifies if client streams multiple client messages + ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"` + // Identifies if server streams multiple server messages + ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MethodDescriptorProto) Reset() { *m = MethodDescriptorProto{} } +func (m *MethodDescriptorProto) String() string { return proto.CompactTextString(m) } +func (*MethodDescriptorProto) ProtoMessage() {} +func (*MethodDescriptorProto) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +const Default_MethodDescriptorProto_ClientStreaming bool = false +const Default_MethodDescriptorProto_ServerStreaming bool = false + +func (m *MethodDescriptorProto) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *MethodDescriptorProto) GetInputType() string { + if m != nil && m.InputType != nil { + return *m.InputType + } + return "" +} + +func (m *MethodDescriptorProto) GetOutputType() string { + if m != nil && m.OutputType != nil { + return *m.OutputType + } + return "" +} + +func (m *MethodDescriptorProto) GetOptions() *MethodOptions { + if m != nil { + return m.Options + } + return nil +} + +func (m *MethodDescriptorProto) GetClientStreaming() bool { + if m != nil && m.ClientStreaming != nil { + return *m.ClientStreaming + } + return Default_MethodDescriptorProto_ClientStreaming +} + +func (m *MethodDescriptorProto) GetServerStreaming() bool { + if m != nil && m.ServerStreaming != nil { + return *m.ServerStreaming + } + return Default_MethodDescriptorProto_ServerStreaming +} + +type FileOptions struct { + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + JavaPackage *string `protobuf:"bytes,1,opt,name=java_package,json=javaPackage" json:"java_package,omitempty"` + // If set, all the classes from the .proto file are wrapped in a single + // outer class with the given name. This applies to both Proto1 + // (equivalent to the old "--one_java_file" option) and Proto2 (where + // a .proto always translates to a single class, but you may want to + // explicitly choose the class name). + JavaOuterClassname *string `protobuf:"bytes,8,opt,name=java_outer_classname,json=javaOuterClassname" json:"java_outer_classname,omitempty"` + // If set true, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the outer class + // named by java_outer_classname. However, the outer class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + JavaMultipleFiles *bool `protobuf:"varint,10,opt,name=java_multiple_files,json=javaMultipleFiles,def=0" json:"java_multiple_files,omitempty"` + // This option does nothing. + JavaGenerateEqualsAndHash *bool `protobuf:"varint,20,opt,name=java_generate_equals_and_hash,json=javaGenerateEqualsAndHash" json:"java_generate_equals_and_hash,omitempty"` + // If set true, then the Java2 code generator will generate code that + // throws an exception whenever an attempt is made to assign a non-UTF-8 + // byte sequence to a string field. + // Message reflection will do the same. + // However, an extension field still accepts non-UTF-8 byte sequences. + // This option has no effect on when used with the lite runtime. + JavaStringCheckUtf8 *bool `protobuf:"varint,27,opt,name=java_string_check_utf8,json=javaStringCheckUtf8,def=0" json:"java_string_check_utf8,omitempty"` + OptimizeFor *FileOptions_OptimizeMode `protobuf:"varint,9,opt,name=optimize_for,json=optimizeFor,enum=google.protobuf.FileOptions_OptimizeMode,def=1" json:"optimize_for,omitempty"` + // Sets the Go package where structs generated from this .proto will be + // placed. If omitted, the Go package will be derived from the following: + // - The basename of the package import path, if provided. + // - Otherwise, the package statement in the .proto file, if present. + // - Otherwise, the basename of the .proto file, without extension. + GoPackage *string `protobuf:"bytes,11,opt,name=go_package,json=goPackage" json:"go_package,omitempty"` + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of google.protobuf. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + CcGenericServices *bool `protobuf:"varint,16,opt,name=cc_generic_services,json=ccGenericServices,def=0" json:"cc_generic_services,omitempty"` + JavaGenericServices *bool `protobuf:"varint,17,opt,name=java_generic_services,json=javaGenericServices,def=0" json:"java_generic_services,omitempty"` + PyGenericServices *bool `protobuf:"varint,18,opt,name=py_generic_services,json=pyGenericServices,def=0" json:"py_generic_services,omitempty"` + PhpGenericServices *bool `protobuf:"varint,42,opt,name=php_generic_services,json=phpGenericServices,def=0" json:"php_generic_services,omitempty"` + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + Deprecated *bool `protobuf:"varint,23,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // Enables the use of arenas for the proto messages in this file. This applies + // only to generated classes for C++. + CcEnableArenas *bool `protobuf:"varint,31,opt,name=cc_enable_arenas,json=ccEnableArenas,def=0" json:"cc_enable_arenas,omitempty"` + // Sets the objective c class prefix which is prepended to all objective c + // generated classes from this .proto. There is no default. + ObjcClassPrefix *string `protobuf:"bytes,36,opt,name=objc_class_prefix,json=objcClassPrefix" json:"objc_class_prefix,omitempty"` + // Namespace for generated classes; defaults to the package. + CsharpNamespace *string `protobuf:"bytes,37,opt,name=csharp_namespace,json=csharpNamespace" json:"csharp_namespace,omitempty"` + // By default Swift generators will take the proto package and CamelCase it + // replacing '.' with underscore and use that to prefix the types/symbols + // defined. When this options is provided, they will use this value instead + // to prefix the types/symbols defined. + SwiftPrefix *string `protobuf:"bytes,39,opt,name=swift_prefix,json=swiftPrefix" json:"swift_prefix,omitempty"` + // Sets the php class prefix which is prepended to all php generated classes + // from this .proto. Default is empty. + PhpClassPrefix *string `protobuf:"bytes,40,opt,name=php_class_prefix,json=phpClassPrefix" json:"php_class_prefix,omitempty"` + // Use this option to change the namespace of php generated classes. Default + // is empty. When this option is empty, the package name will be used for + // determining the namespace. + PhpNamespace *string `protobuf:"bytes,41,opt,name=php_namespace,json=phpNamespace" json:"php_namespace,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FileOptions) Reset() { *m = FileOptions{} } +func (m *FileOptions) String() string { return proto.CompactTextString(m) } +func (*FileOptions) ProtoMessage() {} +func (*FileOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +var extRange_FileOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*FileOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_FileOptions +} + +const Default_FileOptions_JavaMultipleFiles bool = false +const Default_FileOptions_JavaStringCheckUtf8 bool = false +const Default_FileOptions_OptimizeFor FileOptions_OptimizeMode = FileOptions_SPEED +const Default_FileOptions_CcGenericServices bool = false +const Default_FileOptions_JavaGenericServices bool = false +const Default_FileOptions_PyGenericServices bool = false +const Default_FileOptions_PhpGenericServices bool = false +const Default_FileOptions_Deprecated bool = false +const Default_FileOptions_CcEnableArenas bool = false + +func (m *FileOptions) GetJavaPackage() string { + if m != nil && m.JavaPackage != nil { + return *m.JavaPackage + } + return "" +} + +func (m *FileOptions) GetJavaOuterClassname() string { + if m != nil && m.JavaOuterClassname != nil { + return *m.JavaOuterClassname + } + return "" +} + +func (m *FileOptions) GetJavaMultipleFiles() bool { + if m != nil && m.JavaMultipleFiles != nil { + return *m.JavaMultipleFiles + } + return Default_FileOptions_JavaMultipleFiles +} + +func (m *FileOptions) GetJavaGenerateEqualsAndHash() bool { + if m != nil && m.JavaGenerateEqualsAndHash != nil { + return *m.JavaGenerateEqualsAndHash + } + return false +} + +func (m *FileOptions) GetJavaStringCheckUtf8() bool { + if m != nil && m.JavaStringCheckUtf8 != nil { + return *m.JavaStringCheckUtf8 + } + return Default_FileOptions_JavaStringCheckUtf8 +} + +func (m *FileOptions) GetOptimizeFor() FileOptions_OptimizeMode { + if m != nil && m.OptimizeFor != nil { + return *m.OptimizeFor + } + return Default_FileOptions_OptimizeFor +} + +func (m *FileOptions) GetGoPackage() string { + if m != nil && m.GoPackage != nil { + return *m.GoPackage + } + return "" +} + +func (m *FileOptions) GetCcGenericServices() bool { + if m != nil && m.CcGenericServices != nil { + return *m.CcGenericServices + } + return Default_FileOptions_CcGenericServices +} + +func (m *FileOptions) GetJavaGenericServices() bool { + if m != nil && m.JavaGenericServices != nil { + return *m.JavaGenericServices + } + return Default_FileOptions_JavaGenericServices +} + +func (m *FileOptions) GetPyGenericServices() bool { + if m != nil && m.PyGenericServices != nil { + return *m.PyGenericServices + } + return Default_FileOptions_PyGenericServices +} + +func (m *FileOptions) GetPhpGenericServices() bool { + if m != nil && m.PhpGenericServices != nil { + return *m.PhpGenericServices + } + return Default_FileOptions_PhpGenericServices +} + +func (m *FileOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_FileOptions_Deprecated +} + +func (m *FileOptions) GetCcEnableArenas() bool { + if m != nil && m.CcEnableArenas != nil { + return *m.CcEnableArenas + } + return Default_FileOptions_CcEnableArenas +} + +func (m *FileOptions) GetObjcClassPrefix() string { + if m != nil && m.ObjcClassPrefix != nil { + return *m.ObjcClassPrefix + } + return "" +} + +func (m *FileOptions) GetCsharpNamespace() string { + if m != nil && m.CsharpNamespace != nil { + return *m.CsharpNamespace + } + return "" +} + +func (m *FileOptions) GetSwiftPrefix() string { + if m != nil && m.SwiftPrefix != nil { + return *m.SwiftPrefix + } + return "" +} + +func (m *FileOptions) GetPhpClassPrefix() string { + if m != nil && m.PhpClassPrefix != nil { + return *m.PhpClassPrefix + } + return "" +} + +func (m *FileOptions) GetPhpNamespace() string { + if m != nil && m.PhpNamespace != nil { + return *m.PhpNamespace + } + return "" +} + +func (m *FileOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type MessageOptions struct { + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + MessageSetWireFormat *bool `protobuf:"varint,1,opt,name=message_set_wire_format,json=messageSetWireFormat,def=0" json:"message_set_wire_format,omitempty"` + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + NoStandardDescriptorAccessor *bool `protobuf:"varint,2,opt,name=no_standard_descriptor_accessor,json=noStandardDescriptorAccessor,def=0" json:"no_standard_descriptor_accessor,omitempty"` + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // Whether the message is an automatically generated map entry type for the + // maps field. + // + // For maps fields: + // map map_field = 1; + // The parsed descriptor looks like: + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; + // + // Implementations may choose not to generate the map_entry=true message, but + // use a native map in the target language to hold the keys and values. + // The reflection APIs in such implementions still need to work as + // if the field is a repeated message field. + // + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + MapEntry *bool `protobuf:"varint,7,opt,name=map_entry,json=mapEntry" json:"map_entry,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MessageOptions) Reset() { *m = MessageOptions{} } +func (m *MessageOptions) String() string { return proto.CompactTextString(m) } +func (*MessageOptions) ProtoMessage() {} +func (*MessageOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +var extRange_MessageOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*MessageOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_MessageOptions +} + +const Default_MessageOptions_MessageSetWireFormat bool = false +const Default_MessageOptions_NoStandardDescriptorAccessor bool = false +const Default_MessageOptions_Deprecated bool = false + +func (m *MessageOptions) GetMessageSetWireFormat() bool { + if m != nil && m.MessageSetWireFormat != nil { + return *m.MessageSetWireFormat + } + return Default_MessageOptions_MessageSetWireFormat +} + +func (m *MessageOptions) GetNoStandardDescriptorAccessor() bool { + if m != nil && m.NoStandardDescriptorAccessor != nil { + return *m.NoStandardDescriptorAccessor + } + return Default_MessageOptions_NoStandardDescriptorAccessor +} + +func (m *MessageOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_MessageOptions_Deprecated +} + +func (m *MessageOptions) GetMapEntry() bool { + if m != nil && m.MapEntry != nil { + return *m.MapEntry + } + return false +} + +func (m *MessageOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type FieldOptions struct { + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is not yet implemented in the open source + // release -- sorry, we'll try to include it in a future version! + Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"` + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. In proto3, only explicit setting it to + // false will avoid using packed encoding. + Packed *bool `protobuf:"varint,2,opt,name=packed" json:"packed,omitempty"` + // The jstype option determines the JavaScript type used for values of the + // field. The option is permitted only for 64 bit integral and fixed types + // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + // is represented as JavaScript string, which avoids loss of precision that + // can happen when a large value is converted to a floating point JavaScript. + // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + // use the JavaScript "number" type. The behavior of the default option + // JS_NORMAL is implementation dependent. + // + // This option is an enum to permit additional types to be added, e.g. + // goog.math.Integer. + Jstype *FieldOptions_JSType `protobuf:"varint,6,opt,name=jstype,enum=google.protobuf.FieldOptions_JSType,def=0" json:"jstype,omitempty"` + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // + // Note that implementations may choose not to check required fields within + // a lazy sub-message. That is, calling IsInitialized() on the outer message + // may return true even if the inner message has missing required fields. + // This is necessary because otherwise the inner message would have to be + // parsed in order to perform the check, defeating the purpose of lazy + // parsing. An implementation which chooses not to check required fields + // must be consistent about it. That is, for any particular sub-message, the + // implementation must either *always* check its required fields, or *never* + // check its required fields, regardless of whether or not the message has + // been parsed. + Lazy *bool `protobuf:"varint,5,opt,name=lazy,def=0" json:"lazy,omitempty"` + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // For Google-internal migration only. Do not use. + Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *FieldOptions) Reset() { *m = FieldOptions{} } +func (m *FieldOptions) String() string { return proto.CompactTextString(m) } +func (*FieldOptions) ProtoMessage() {} +func (*FieldOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +var extRange_FieldOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*FieldOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_FieldOptions +} + +const Default_FieldOptions_Ctype FieldOptions_CType = FieldOptions_STRING +const Default_FieldOptions_Jstype FieldOptions_JSType = FieldOptions_JS_NORMAL +const Default_FieldOptions_Lazy bool = false +const Default_FieldOptions_Deprecated bool = false +const Default_FieldOptions_Weak bool = false + +func (m *FieldOptions) GetCtype() FieldOptions_CType { + if m != nil && m.Ctype != nil { + return *m.Ctype + } + return Default_FieldOptions_Ctype +} + +func (m *FieldOptions) GetPacked() bool { + if m != nil && m.Packed != nil { + return *m.Packed + } + return false +} + +func (m *FieldOptions) GetJstype() FieldOptions_JSType { + if m != nil && m.Jstype != nil { + return *m.Jstype + } + return Default_FieldOptions_Jstype +} + +func (m *FieldOptions) GetLazy() bool { + if m != nil && m.Lazy != nil { + return *m.Lazy + } + return Default_FieldOptions_Lazy +} + +func (m *FieldOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_FieldOptions_Deprecated +} + +func (m *FieldOptions) GetWeak() bool { + if m != nil && m.Weak != nil { + return *m.Weak + } + return Default_FieldOptions_Weak +} + +func (m *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type OneofOptions struct { + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OneofOptions) Reset() { *m = OneofOptions{} } +func (m *OneofOptions) String() string { return proto.CompactTextString(m) } +func (*OneofOptions) ProtoMessage() {} +func (*OneofOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +var extRange_OneofOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*OneofOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_OneofOptions +} + +func (m *OneofOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type EnumOptions struct { + // Set this option to true to allow mapping different tag names to the same + // value. + AllowAlias *bool `protobuf:"varint,2,opt,name=allow_alias,json=allowAlias" json:"allow_alias,omitempty"` + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnumOptions) Reset() { *m = EnumOptions{} } +func (m *EnumOptions) String() string { return proto.CompactTextString(m) } +func (*EnumOptions) ProtoMessage() {} +func (*EnumOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +var extRange_EnumOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*EnumOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_EnumOptions +} + +const Default_EnumOptions_Deprecated bool = false + +func (m *EnumOptions) GetAllowAlias() bool { + if m != nil && m.AllowAlias != nil { + return *m.AllowAlias + } + return false +} + +func (m *EnumOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_EnumOptions_Deprecated +} + +func (m *EnumOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type EnumValueOptions struct { + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnumValueOptions) Reset() { *m = EnumValueOptions{} } +func (m *EnumValueOptions) String() string { return proto.CompactTextString(m) } +func (*EnumValueOptions) ProtoMessage() {} +func (*EnumValueOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +var extRange_EnumValueOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*EnumValueOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_EnumValueOptions +} + +const Default_EnumValueOptions_Deprecated bool = false + +func (m *EnumValueOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_EnumValueOptions_Deprecated +} + +func (m *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type ServiceOptions struct { + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ServiceOptions) Reset() { *m = ServiceOptions{} } +func (m *ServiceOptions) String() string { return proto.CompactTextString(m) } +func (*ServiceOptions) ProtoMessage() {} +func (*ServiceOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +var extRange_ServiceOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*ServiceOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_ServiceOptions +} + +const Default_ServiceOptions_Deprecated bool = false + +func (m *ServiceOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_ServiceOptions_Deprecated +} + +func (m *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +type MethodOptions struct { + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"` + // The parser stores options it doesn't recognize here. See above. + UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *MethodOptions) Reset() { *m = MethodOptions{} } +func (m *MethodOptions) String() string { return proto.CompactTextString(m) } +func (*MethodOptions) ProtoMessage() {} +func (*MethodOptions) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +var extRange_MethodOptions = []proto.ExtensionRange{ + {1000, 536870911}, +} + +func (*MethodOptions) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_MethodOptions +} + +const Default_MethodOptions_Deprecated bool = false +const Default_MethodOptions_IdempotencyLevel MethodOptions_IdempotencyLevel = MethodOptions_IDEMPOTENCY_UNKNOWN + +func (m *MethodOptions) GetDeprecated() bool { + if m != nil && m.Deprecated != nil { + return *m.Deprecated + } + return Default_MethodOptions_Deprecated +} + +func (m *MethodOptions) GetIdempotencyLevel() MethodOptions_IdempotencyLevel { + if m != nil && m.IdempotencyLevel != nil { + return *m.IdempotencyLevel + } + return Default_MethodOptions_IdempotencyLevel +} + +func (m *MethodOptions) GetUninterpretedOption() []*UninterpretedOption { + if m != nil { + return m.UninterpretedOption + } + return nil +} + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +type UninterpretedOption struct { + Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"` + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"` + PositiveIntValue *uint64 `protobuf:"varint,4,opt,name=positive_int_value,json=positiveIntValue" json:"positive_int_value,omitempty"` + NegativeIntValue *int64 `protobuf:"varint,5,opt,name=negative_int_value,json=negativeIntValue" json:"negative_int_value,omitempty"` + DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` + StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` + AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *UninterpretedOption) Reset() { *m = UninterpretedOption{} } +func (m *UninterpretedOption) String() string { return proto.CompactTextString(m) } +func (*UninterpretedOption) ProtoMessage() {} +func (*UninterpretedOption) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *UninterpretedOption) GetName() []*UninterpretedOption_NamePart { + if m != nil { + return m.Name + } + return nil +} + +func (m *UninterpretedOption) GetIdentifierValue() string { + if m != nil && m.IdentifierValue != nil { + return *m.IdentifierValue + } + return "" +} + +func (m *UninterpretedOption) GetPositiveIntValue() uint64 { + if m != nil && m.PositiveIntValue != nil { + return *m.PositiveIntValue + } + return 0 +} + +func (m *UninterpretedOption) GetNegativeIntValue() int64 { + if m != nil && m.NegativeIntValue != nil { + return *m.NegativeIntValue + } + return 0 +} + +func (m *UninterpretedOption) GetDoubleValue() float64 { + if m != nil && m.DoubleValue != nil { + return *m.DoubleValue + } + return 0 +} + +func (m *UninterpretedOption) GetStringValue() []byte { + if m != nil { + return m.StringValue + } + return nil +} + +func (m *UninterpretedOption) GetAggregateValue() string { + if m != nil && m.AggregateValue != nil { + return *m.AggregateValue + } + return "" +} + +// The name of the uninterpreted option. Each string represents a segment in +// a dot-separated name. is_extension is true iff a segment represents an +// extension (denoted with parentheses in options specs in .proto files). +// E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents +// "foo.(bar.baz).qux". +type UninterpretedOption_NamePart struct { + NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"` + IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *UninterpretedOption_NamePart) Reset() { *m = UninterpretedOption_NamePart{} } +func (m *UninterpretedOption_NamePart) String() string { return proto.CompactTextString(m) } +func (*UninterpretedOption_NamePart) ProtoMessage() {} +func (*UninterpretedOption_NamePart) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{18, 0} +} + +func (m *UninterpretedOption_NamePart) GetNamePart() string { + if m != nil && m.NamePart != nil { + return *m.NamePart + } + return "" +} + +func (m *UninterpretedOption_NamePart) GetIsExtension() bool { + if m != nil && m.IsExtension != nil { + return *m.IsExtension + } + return false +} + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +type SourceCodeInfo struct { + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // message Foo { + // optional string foo = 1; + // } + // Let's look at just the field definition: + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // We have the following locations: + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendent. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *SourceCodeInfo) Reset() { *m = SourceCodeInfo{} } +func (m *SourceCodeInfo) String() string { return proto.CompactTextString(m) } +func (*SourceCodeInfo) ProtoMessage() {} +func (*SourceCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location { + if m != nil { + return m.Location + } + return nil +} + +type SourceCodeInfo_Location struct { + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition. For + // example, this path: + // [ 4, 3, 2, 7, 1 ] + // refers to: + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // This is because FileDescriptorProto.message_type has field number 4: + // repeated DescriptorProto message_type = 4; + // and DescriptorProto.field has field number 2: + // repeated FieldDescriptorProto field = 2; + // and FieldDescriptorProto.name has field number 1: + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // [ 4, 3, 2, 7 ] + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + Span []int32 `protobuf:"varint,2,rep,packed,name=span" json:"span,omitempty"` + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // leading_detached_comments will keep paragraphs of comments that appear + // before (but not connected to) the current element. Each paragraph, + // separated by empty lines, will be one comment element in the repeated + // field. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to qux. + // // + // // Another line attached to qux. + // optional double qux = 4; + // + // // Detached comment for corge. This is not leading or trailing comments + // // to qux or corge because there are blank lines separating it from + // // both. + // + // // Detached comment for corge paragraph 2. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + // + // // ignored detached comments. + LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"` + TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"` + LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *SourceCodeInfo_Location) Reset() { *m = SourceCodeInfo_Location{} } +func (m *SourceCodeInfo_Location) String() string { return proto.CompactTextString(m) } +func (*SourceCodeInfo_Location) ProtoMessage() {} +func (*SourceCodeInfo_Location) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19, 0} } + +func (m *SourceCodeInfo_Location) GetPath() []int32 { + if m != nil { + return m.Path + } + return nil +} + +func (m *SourceCodeInfo_Location) GetSpan() []int32 { + if m != nil { + return m.Span + } + return nil +} + +func (m *SourceCodeInfo_Location) GetLeadingComments() string { + if m != nil && m.LeadingComments != nil { + return *m.LeadingComments + } + return "" +} + +func (m *SourceCodeInfo_Location) GetTrailingComments() string { + if m != nil && m.TrailingComments != nil { + return *m.TrailingComments + } + return "" +} + +func (m *SourceCodeInfo_Location) GetLeadingDetachedComments() []string { + if m != nil { + return m.LeadingDetachedComments + } + return nil +} + +// Describes the relationship between generated code and its original source +// file. A GeneratedCodeInfo message is associated with only one generated +// source file, but may contain references to different source .proto files. +type GeneratedCodeInfo struct { + // An Annotation connects some span of text in generated code to an element + // of its generating .proto file. + Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GeneratedCodeInfo) Reset() { *m = GeneratedCodeInfo{} } +func (m *GeneratedCodeInfo) String() string { return proto.CompactTextString(m) } +func (*GeneratedCodeInfo) ProtoMessage() {} +func (*GeneratedCodeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation { + if m != nil { + return m.Annotation + } + return nil +} + +type GeneratedCodeInfo_Annotation struct { + // Identifies the element in the original source .proto file. This field + // is formatted the same as SourceCodeInfo.Location.path. + Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` + // Identifies the filesystem path to the original source .proto. + SourceFile *string `protobuf:"bytes,2,opt,name=source_file,json=sourceFile" json:"source_file,omitempty"` + // Identifies the starting offset in bytes in the generated code + // that relates to the identified object. + Begin *int32 `protobuf:"varint,3,opt,name=begin" json:"begin,omitempty"` + // Identifies the ending offset in bytes in the generated code that + // relates to the identified offset. The end offset should be one past + // the last relevant byte (so the length of the text = end - begin). + End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GeneratedCodeInfo_Annotation) Reset() { *m = GeneratedCodeInfo_Annotation{} } +func (m *GeneratedCodeInfo_Annotation) String() string { return proto.CompactTextString(m) } +func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} +func (*GeneratedCodeInfo_Annotation) Descriptor() ([]byte, []int) { + return fileDescriptor0, []int{20, 0} +} + +func (m *GeneratedCodeInfo_Annotation) GetPath() []int32 { + if m != nil { + return m.Path + } + return nil +} + +func (m *GeneratedCodeInfo_Annotation) GetSourceFile() string { + if m != nil && m.SourceFile != nil { + return *m.SourceFile + } + return "" +} + +func (m *GeneratedCodeInfo_Annotation) GetBegin() int32 { + if m != nil && m.Begin != nil { + return *m.Begin + } + return 0 +} + +func (m *GeneratedCodeInfo_Annotation) GetEnd() int32 { + if m != nil && m.End != nil { + return *m.End + } + return 0 +} + +func init() { + proto.RegisterType((*FileDescriptorSet)(nil), "google.protobuf.FileDescriptorSet") + proto.RegisterType((*FileDescriptorProto)(nil), "google.protobuf.FileDescriptorProto") + proto.RegisterType((*DescriptorProto)(nil), "google.protobuf.DescriptorProto") + proto.RegisterType((*DescriptorProto_ExtensionRange)(nil), "google.protobuf.DescriptorProto.ExtensionRange") + proto.RegisterType((*DescriptorProto_ReservedRange)(nil), "google.protobuf.DescriptorProto.ReservedRange") + proto.RegisterType((*ExtensionRangeOptions)(nil), "google.protobuf.ExtensionRangeOptions") + proto.RegisterType((*FieldDescriptorProto)(nil), "google.protobuf.FieldDescriptorProto") + proto.RegisterType((*OneofDescriptorProto)(nil), "google.protobuf.OneofDescriptorProto") + proto.RegisterType((*EnumDescriptorProto)(nil), "google.protobuf.EnumDescriptorProto") + proto.RegisterType((*EnumValueDescriptorProto)(nil), "google.protobuf.EnumValueDescriptorProto") + proto.RegisterType((*ServiceDescriptorProto)(nil), "google.protobuf.ServiceDescriptorProto") + proto.RegisterType((*MethodDescriptorProto)(nil), "google.protobuf.MethodDescriptorProto") + proto.RegisterType((*FileOptions)(nil), "google.protobuf.FileOptions") + proto.RegisterType((*MessageOptions)(nil), "google.protobuf.MessageOptions") + proto.RegisterType((*FieldOptions)(nil), "google.protobuf.FieldOptions") + proto.RegisterType((*OneofOptions)(nil), "google.protobuf.OneofOptions") + proto.RegisterType((*EnumOptions)(nil), "google.protobuf.EnumOptions") + proto.RegisterType((*EnumValueOptions)(nil), "google.protobuf.EnumValueOptions") + proto.RegisterType((*ServiceOptions)(nil), "google.protobuf.ServiceOptions") + proto.RegisterType((*MethodOptions)(nil), "google.protobuf.MethodOptions") + proto.RegisterType((*UninterpretedOption)(nil), "google.protobuf.UninterpretedOption") + proto.RegisterType((*UninterpretedOption_NamePart)(nil), "google.protobuf.UninterpretedOption.NamePart") + proto.RegisterType((*SourceCodeInfo)(nil), "google.protobuf.SourceCodeInfo") + proto.RegisterType((*SourceCodeInfo_Location)(nil), "google.protobuf.SourceCodeInfo.Location") + proto.RegisterType((*GeneratedCodeInfo)(nil), "google.protobuf.GeneratedCodeInfo") + proto.RegisterType((*GeneratedCodeInfo_Annotation)(nil), "google.protobuf.GeneratedCodeInfo.Annotation") + proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Type", FieldDescriptorProto_Type_name, FieldDescriptorProto_Type_value) + proto.RegisterEnum("google.protobuf.FieldDescriptorProto_Label", FieldDescriptorProto_Label_name, FieldDescriptorProto_Label_value) + proto.RegisterEnum("google.protobuf.FileOptions_OptimizeMode", FileOptions_OptimizeMode_name, FileOptions_OptimizeMode_value) + proto.RegisterEnum("google.protobuf.FieldOptions_CType", FieldOptions_CType_name, FieldOptions_CType_value) + proto.RegisterEnum("google.protobuf.FieldOptions_JSType", FieldOptions_JSType_name, FieldOptions_JSType_value) + proto.RegisterEnum("google.protobuf.MethodOptions_IdempotencyLevel", MethodOptions_IdempotencyLevel_name, MethodOptions_IdempotencyLevel_value) +} + +func init() { proto.RegisterFile("google/protobuf/descriptor.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2519 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0xdd, 0x6e, 0x1b, 0xc7, + 0x15, 0x0e, 0x7f, 0x45, 0x1e, 0x52, 0xd4, 0x68, 0xa4, 0xd8, 0x6b, 0xe5, 0xc7, 0x32, 0xf3, 0x63, + 0xd9, 0x69, 0xa8, 0x40, 0xb1, 0x1d, 0x47, 0x29, 0xd2, 0x52, 0xe4, 0x5a, 0xa1, 0x4a, 0x91, 0xec, + 0x92, 0x6a, 0x7e, 0x6e, 0x16, 0xa3, 0xdd, 0x21, 0xb9, 0xf6, 0x72, 0x77, 0xb3, 0xbb, 0xb4, 0xad, + 0xa0, 0x17, 0x06, 0x7a, 0x55, 0xa0, 0x0f, 0x50, 0x14, 0x45, 0x2f, 0x72, 0x13, 0xa0, 0x0f, 0x50, + 0x20, 0x77, 0x7d, 0x82, 0x02, 0x79, 0x83, 0xa2, 0x28, 0xd0, 0x3e, 0x46, 0x31, 0x33, 0xbb, 0xcb, + 0x5d, 0xfe, 0xc4, 0x6a, 0x80, 0x38, 0x57, 0xe4, 0x7c, 0xe7, 0x3b, 0x67, 0xce, 0x9c, 0x39, 0x33, + 0x73, 0x66, 0x16, 0x76, 0x47, 0xb6, 0x3d, 0x32, 0xe9, 0xbe, 0xe3, 0xda, 0xbe, 0x7d, 0x3e, 0x1d, + 0xee, 0xeb, 0xd4, 0xd3, 0x5c, 0xc3, 0xf1, 0x6d, 0xb7, 0xc6, 0x31, 0xbc, 0x21, 0x18, 0xb5, 0x90, + 0x51, 0x3d, 0x85, 0xcd, 0x07, 0x86, 0x49, 0x9b, 0x11, 0xb1, 0x4f, 0x7d, 0x7c, 0x1f, 0xb2, 0x43, + 0xc3, 0xa4, 0x52, 0x6a, 0x37, 0xb3, 0x57, 0x3a, 0x78, 0xb3, 0x36, 0xa7, 0x54, 0x4b, 0x6a, 0xf4, + 0x18, 0xac, 0x70, 0x8d, 0xea, 0xbf, 0xb3, 0xb0, 0xb5, 0x44, 0x8a, 0x31, 0x64, 0x2d, 0x32, 0x61, + 0x16, 0x53, 0x7b, 0x45, 0x85, 0xff, 0xc7, 0x12, 0xac, 0x39, 0x44, 0x7b, 0x44, 0x46, 0x54, 0x4a, + 0x73, 0x38, 0x6c, 0xe2, 0xd7, 0x01, 0x74, 0xea, 0x50, 0x4b, 0xa7, 0x96, 0x76, 0x21, 0x65, 0x76, + 0x33, 0x7b, 0x45, 0x25, 0x86, 0xe0, 0x77, 0x60, 0xd3, 0x99, 0x9e, 0x9b, 0x86, 0xa6, 0xc6, 0x68, + 0xb0, 0x9b, 0xd9, 0xcb, 0x29, 0x48, 0x08, 0x9a, 0x33, 0xf2, 0x4d, 0xd8, 0x78, 0x42, 0xc9, 0xa3, + 0x38, 0xb5, 0xc4, 0xa9, 0x15, 0x06, 0xc7, 0x88, 0x0d, 0x28, 0x4f, 0xa8, 0xe7, 0x91, 0x11, 0x55, + 0xfd, 0x0b, 0x87, 0x4a, 0x59, 0x3e, 0xfa, 0xdd, 0x85, 0xd1, 0xcf, 0x8f, 0xbc, 0x14, 0x68, 0x0d, + 0x2e, 0x1c, 0x8a, 0xeb, 0x50, 0xa4, 0xd6, 0x74, 0x22, 0x2c, 0xe4, 0x56, 0xc4, 0x4f, 0xb6, 0xa6, + 0x93, 0x79, 0x2b, 0x05, 0xa6, 0x16, 0x98, 0x58, 0xf3, 0xa8, 0xfb, 0xd8, 0xd0, 0xa8, 0x94, 0xe7, + 0x06, 0x6e, 0x2e, 0x18, 0xe8, 0x0b, 0xf9, 0xbc, 0x8d, 0x50, 0x0f, 0x37, 0xa0, 0x48, 0x9f, 0xfa, + 0xd4, 0xf2, 0x0c, 0xdb, 0x92, 0xd6, 0xb8, 0x91, 0xb7, 0x96, 0xcc, 0x22, 0x35, 0xf5, 0x79, 0x13, + 0x33, 0x3d, 0x7c, 0x0f, 0xd6, 0x6c, 0xc7, 0x37, 0x6c, 0xcb, 0x93, 0x0a, 0xbb, 0xa9, 0xbd, 0xd2, + 0xc1, 0xab, 0x4b, 0x13, 0xa1, 0x2b, 0x38, 0x4a, 0x48, 0xc6, 0x2d, 0x40, 0x9e, 0x3d, 0x75, 0x35, + 0xaa, 0x6a, 0xb6, 0x4e, 0x55, 0xc3, 0x1a, 0xda, 0x52, 0x91, 0x1b, 0xb8, 0xbe, 0x38, 0x10, 0x4e, + 0x6c, 0xd8, 0x3a, 0x6d, 0x59, 0x43, 0x5b, 0xa9, 0x78, 0x89, 0x36, 0xbe, 0x02, 0x79, 0xef, 0xc2, + 0xf2, 0xc9, 0x53, 0xa9, 0xcc, 0x33, 0x24, 0x68, 0x55, 0xbf, 0xcd, 0xc3, 0xc6, 0x65, 0x52, 0xec, + 0x23, 0xc8, 0x0d, 0xd9, 0x28, 0xa5, 0xf4, 0xff, 0x13, 0x03, 0xa1, 0x93, 0x0c, 0x62, 0xfe, 0x07, + 0x06, 0xb1, 0x0e, 0x25, 0x8b, 0x7a, 0x3e, 0xd5, 0x45, 0x46, 0x64, 0x2e, 0x99, 0x53, 0x20, 0x94, + 0x16, 0x53, 0x2a, 0xfb, 0x83, 0x52, 0xea, 0x33, 0xd8, 0x88, 0x5c, 0x52, 0x5d, 0x62, 0x8d, 0xc2, + 0xdc, 0xdc, 0x7f, 0x9e, 0x27, 0x35, 0x39, 0xd4, 0x53, 0x98, 0x9a, 0x52, 0xa1, 0x89, 0x36, 0x6e, + 0x02, 0xd8, 0x16, 0xb5, 0x87, 0xaa, 0x4e, 0x35, 0x53, 0x2a, 0xac, 0x88, 0x52, 0x97, 0x51, 0x16, + 0xa2, 0x64, 0x0b, 0x54, 0x33, 0xf1, 0x87, 0xb3, 0x54, 0x5b, 0x5b, 0x91, 0x29, 0xa7, 0x62, 0x91, + 0x2d, 0x64, 0xdb, 0x19, 0x54, 0x5c, 0xca, 0xf2, 0x9e, 0xea, 0xc1, 0xc8, 0x8a, 0xdc, 0x89, 0xda, + 0x73, 0x47, 0xa6, 0x04, 0x6a, 0x62, 0x60, 0xeb, 0x6e, 0xbc, 0x89, 0xdf, 0x80, 0x08, 0x50, 0x79, + 0x5a, 0x01, 0xdf, 0x85, 0xca, 0x21, 0xd8, 0x21, 0x13, 0xba, 0xf3, 0x15, 0x54, 0x92, 0xe1, 0xc1, + 0xdb, 0x90, 0xf3, 0x7c, 0xe2, 0xfa, 0x3c, 0x0b, 0x73, 0x8a, 0x68, 0x60, 0x04, 0x19, 0x6a, 0xe9, + 0x7c, 0x97, 0xcb, 0x29, 0xec, 0x2f, 0xfe, 0xe5, 0x6c, 0xc0, 0x19, 0x3e, 0xe0, 0xb7, 0x17, 0x67, + 0x34, 0x61, 0x79, 0x7e, 0xdc, 0x3b, 0x1f, 0xc0, 0x7a, 0x62, 0x00, 0x97, 0xed, 0xba, 0xfa, 0x5b, + 0x78, 0x79, 0xa9, 0x69, 0xfc, 0x19, 0x6c, 0x4f, 0x2d, 0xc3, 0xf2, 0xa9, 0xeb, 0xb8, 0x94, 0x65, + 0xac, 0xe8, 0x4a, 0xfa, 0xcf, 0xda, 0x8a, 0x9c, 0x3b, 0x8b, 0xb3, 0x85, 0x15, 0x65, 0x6b, 0xba, + 0x08, 0xde, 0x2e, 0x16, 0xfe, 0xbb, 0x86, 0x9e, 0x3d, 0x7b, 0xf6, 0x2c, 0x5d, 0xfd, 0x63, 0x1e, + 0xb6, 0x97, 0xad, 0x99, 0xa5, 0xcb, 0xf7, 0x0a, 0xe4, 0xad, 0xe9, 0xe4, 0x9c, 0xba, 0x3c, 0x48, + 0x39, 0x25, 0x68, 0xe1, 0x3a, 0xe4, 0x4c, 0x72, 0x4e, 0x4d, 0x29, 0xbb, 0x9b, 0xda, 0xab, 0x1c, + 0xbc, 0x73, 0xa9, 0x55, 0x59, 0x6b, 0x33, 0x15, 0x45, 0x68, 0xe2, 0x8f, 0x21, 0x1b, 0x6c, 0xd1, + 0xcc, 0xc2, 0xed, 0xcb, 0x59, 0x60, 0x6b, 0x49, 0xe1, 0x7a, 0xf8, 0x15, 0x28, 0xb2, 0x5f, 0x91, + 0x1b, 0x79, 0xee, 0x73, 0x81, 0x01, 0x2c, 0x2f, 0xf0, 0x0e, 0x14, 0xf8, 0x32, 0xd1, 0x69, 0x78, + 0xb4, 0x45, 0x6d, 0x96, 0x58, 0x3a, 0x1d, 0x92, 0xa9, 0xe9, 0xab, 0x8f, 0x89, 0x39, 0xa5, 0x3c, + 0xe1, 0x8b, 0x4a, 0x39, 0x00, 0x7f, 0xc3, 0x30, 0x7c, 0x1d, 0x4a, 0x62, 0x55, 0x19, 0x96, 0x4e, + 0x9f, 0xf2, 0xdd, 0x33, 0xa7, 0x88, 0x85, 0xd6, 0x62, 0x08, 0xeb, 0xfe, 0xa1, 0x67, 0x5b, 0x61, + 0x6a, 0xf2, 0x2e, 0x18, 0xc0, 0xbb, 0xff, 0x60, 0x7e, 0xe3, 0x7e, 0x6d, 0xf9, 0xf0, 0xe6, 0x73, + 0xaa, 0xfa, 0xb7, 0x34, 0x64, 0xf9, 0x7e, 0xb1, 0x01, 0xa5, 0xc1, 0xe7, 0x3d, 0x59, 0x6d, 0x76, + 0xcf, 0x8e, 0xda, 0x32, 0x4a, 0xe1, 0x0a, 0x00, 0x07, 0x1e, 0xb4, 0xbb, 0xf5, 0x01, 0x4a, 0x47, + 0xed, 0x56, 0x67, 0x70, 0xef, 0x0e, 0xca, 0x44, 0x0a, 0x67, 0x02, 0xc8, 0xc6, 0x09, 0xef, 0x1f, + 0xa0, 0x1c, 0x46, 0x50, 0x16, 0x06, 0x5a, 0x9f, 0xc9, 0xcd, 0x7b, 0x77, 0x50, 0x3e, 0x89, 0xbc, + 0x7f, 0x80, 0xd6, 0xf0, 0x3a, 0x14, 0x39, 0x72, 0xd4, 0xed, 0xb6, 0x51, 0x21, 0xb2, 0xd9, 0x1f, + 0x28, 0xad, 0xce, 0x31, 0x2a, 0x46, 0x36, 0x8f, 0x95, 0xee, 0x59, 0x0f, 0x41, 0x64, 0xe1, 0x54, + 0xee, 0xf7, 0xeb, 0xc7, 0x32, 0x2a, 0x45, 0x8c, 0xa3, 0xcf, 0x07, 0x72, 0x1f, 0x95, 0x13, 0x6e, + 0xbd, 0x7f, 0x80, 0xd6, 0xa3, 0x2e, 0xe4, 0xce, 0xd9, 0x29, 0xaa, 0xe0, 0x4d, 0x58, 0x17, 0x5d, + 0x84, 0x4e, 0x6c, 0xcc, 0x41, 0xf7, 0xee, 0x20, 0x34, 0x73, 0x44, 0x58, 0xd9, 0x4c, 0x00, 0xf7, + 0xee, 0x20, 0x5c, 0x6d, 0x40, 0x8e, 0x67, 0x17, 0xc6, 0x50, 0x69, 0xd7, 0x8f, 0xe4, 0xb6, 0xda, + 0xed, 0x0d, 0x5a, 0xdd, 0x4e, 0xbd, 0x8d, 0x52, 0x33, 0x4c, 0x91, 0x7f, 0x7d, 0xd6, 0x52, 0xe4, + 0x26, 0x4a, 0xc7, 0xb1, 0x9e, 0x5c, 0x1f, 0xc8, 0x4d, 0x94, 0xa9, 0x6a, 0xb0, 0xbd, 0x6c, 0x9f, + 0x5c, 0xba, 0x32, 0x62, 0x53, 0x9c, 0x5e, 0x31, 0xc5, 0xdc, 0xd6, 0xc2, 0x14, 0x7f, 0x9d, 0x82, + 0xad, 0x25, 0x67, 0xc5, 0xd2, 0x4e, 0x7e, 0x01, 0x39, 0x91, 0xa2, 0xe2, 0xf4, 0xbc, 0xb5, 0xf4, + 0xd0, 0xe1, 0x09, 0xbb, 0x70, 0x82, 0x72, 0xbd, 0x78, 0x05, 0x91, 0x59, 0x51, 0x41, 0x30, 0x13, + 0x0b, 0x4e, 0xfe, 0x2e, 0x05, 0xd2, 0x2a, 0xdb, 0xcf, 0xd9, 0x28, 0xd2, 0x89, 0x8d, 0xe2, 0xa3, + 0x79, 0x07, 0x6e, 0xac, 0x1e, 0xc3, 0x82, 0x17, 0xdf, 0xa4, 0xe0, 0xca, 0xf2, 0x42, 0x6b, 0xa9, + 0x0f, 0x1f, 0x43, 0x7e, 0x42, 0xfd, 0xb1, 0x1d, 0x16, 0x1b, 0x6f, 0x2f, 0x39, 0xc2, 0x98, 0x78, + 0x3e, 0x56, 0x81, 0x56, 0xfc, 0x0c, 0xcc, 0xac, 0xaa, 0x96, 0x84, 0x37, 0x0b, 0x9e, 0xfe, 0x3e, + 0x0d, 0x2f, 0x2f, 0x35, 0xbe, 0xd4, 0xd1, 0xd7, 0x00, 0x0c, 0xcb, 0x99, 0xfa, 0xa2, 0xa0, 0x10, + 0xfb, 0x53, 0x91, 0x23, 0x7c, 0xed, 0xb3, 0xbd, 0x67, 0xea, 0x47, 0xf2, 0x0c, 0x97, 0x83, 0x80, + 0x38, 0xe1, 0xfe, 0xcc, 0xd1, 0x2c, 0x77, 0xf4, 0xf5, 0x15, 0x23, 0x5d, 0x38, 0xab, 0xdf, 0x03, + 0xa4, 0x99, 0x06, 0xb5, 0x7c, 0xd5, 0xf3, 0x5d, 0x4a, 0x26, 0x86, 0x35, 0xe2, 0x1b, 0x70, 0xe1, + 0x30, 0x37, 0x24, 0xa6, 0x47, 0x95, 0x0d, 0x21, 0xee, 0x87, 0x52, 0xa6, 0xc1, 0xcf, 0x38, 0x37, + 0xa6, 0x91, 0x4f, 0x68, 0x08, 0x71, 0xa4, 0x51, 0xfd, 0xb6, 0x00, 0xa5, 0x58, 0x59, 0x8a, 0x6f, + 0x40, 0xf9, 0x21, 0x79, 0x4c, 0xd4, 0xf0, 0xaa, 0x21, 0x22, 0x51, 0x62, 0x58, 0x2f, 0xb8, 0x6e, + 0xbc, 0x07, 0xdb, 0x9c, 0x62, 0x4f, 0x7d, 0xea, 0xaa, 0x9a, 0x49, 0x3c, 0x8f, 0x07, 0xad, 0xc0, + 0xa9, 0x98, 0xc9, 0xba, 0x4c, 0xd4, 0x08, 0x25, 0xf8, 0x2e, 0x6c, 0x71, 0x8d, 0xc9, 0xd4, 0xf4, + 0x0d, 0xc7, 0xa4, 0x2a, 0xbb, 0xfc, 0x78, 0x7c, 0x23, 0x8e, 0x3c, 0xdb, 0x64, 0x8c, 0xd3, 0x80, + 0xc0, 0x3c, 0xf2, 0x70, 0x13, 0x5e, 0xe3, 0x6a, 0x23, 0x6a, 0x51, 0x97, 0xf8, 0x54, 0xa5, 0x5f, + 0x4e, 0x89, 0xe9, 0xa9, 0xc4, 0xd2, 0xd5, 0x31, 0xf1, 0xc6, 0xd2, 0x36, 0x33, 0x70, 0x94, 0x96, + 0x52, 0xca, 0x35, 0x46, 0x3c, 0x0e, 0x78, 0x32, 0xa7, 0xd5, 0x2d, 0xfd, 0x13, 0xe2, 0x8d, 0xf1, + 0x21, 0x5c, 0xe1, 0x56, 0x3c, 0xdf, 0x35, 0xac, 0x91, 0xaa, 0x8d, 0xa9, 0xf6, 0x48, 0x9d, 0xfa, + 0xc3, 0xfb, 0xd2, 0x2b, 0xf1, 0xfe, 0xb9, 0x87, 0x7d, 0xce, 0x69, 0x30, 0xca, 0x99, 0x3f, 0xbc, + 0x8f, 0xfb, 0x50, 0x66, 0x93, 0x31, 0x31, 0xbe, 0xa2, 0xea, 0xd0, 0x76, 0xf9, 0xc9, 0x52, 0x59, + 0xb2, 0xb2, 0x63, 0x11, 0xac, 0x75, 0x03, 0x85, 0x53, 0x5b, 0xa7, 0x87, 0xb9, 0x7e, 0x4f, 0x96, + 0x9b, 0x4a, 0x29, 0xb4, 0xf2, 0xc0, 0x76, 0x59, 0x42, 0x8d, 0xec, 0x28, 0xc0, 0x25, 0x91, 0x50, + 0x23, 0x3b, 0x0c, 0xef, 0x5d, 0xd8, 0xd2, 0x34, 0x31, 0x66, 0x43, 0x53, 0x83, 0x2b, 0x8a, 0x27, + 0xa1, 0x44, 0xb0, 0x34, 0xed, 0x58, 0x10, 0x82, 0x1c, 0xf7, 0xf0, 0x87, 0xf0, 0xf2, 0x2c, 0x58, + 0x71, 0xc5, 0xcd, 0x85, 0x51, 0xce, 0xab, 0xde, 0x85, 0x2d, 0xe7, 0x62, 0x51, 0x11, 0x27, 0x7a, + 0x74, 0x2e, 0xe6, 0xd5, 0x3e, 0x80, 0x6d, 0x67, 0xec, 0x2c, 0xea, 0xdd, 0x8e, 0xeb, 0x61, 0x67, + 0xec, 0xcc, 0x2b, 0xbe, 0xc5, 0xef, 0xab, 0x2e, 0xd5, 0x88, 0x4f, 0x75, 0xe9, 0x6a, 0x9c, 0x1e, + 0x13, 0xe0, 0x7d, 0x40, 0x9a, 0xa6, 0x52, 0x8b, 0x9c, 0x9b, 0x54, 0x25, 0x2e, 0xb5, 0x88, 0x27, + 0x5d, 0x8f, 0x93, 0x2b, 0x9a, 0x26, 0x73, 0x69, 0x9d, 0x0b, 0xf1, 0x6d, 0xd8, 0xb4, 0xcf, 0x1f, + 0x6a, 0x22, 0x25, 0x55, 0xc7, 0xa5, 0x43, 0xe3, 0xa9, 0xf4, 0x26, 0x8f, 0xef, 0x06, 0x13, 0xf0, + 0x84, 0xec, 0x71, 0x18, 0xdf, 0x02, 0xa4, 0x79, 0x63, 0xe2, 0x3a, 0xbc, 0x26, 0xf0, 0x1c, 0xa2, + 0x51, 0xe9, 0x2d, 0x41, 0x15, 0x78, 0x27, 0x84, 0xd9, 0x92, 0xf0, 0x9e, 0x18, 0x43, 0x3f, 0xb4, + 0x78, 0x53, 0x2c, 0x09, 0x8e, 0x05, 0xd6, 0xf6, 0x00, 0xb1, 0x50, 0x24, 0x3a, 0xde, 0xe3, 0xb4, + 0x8a, 0x33, 0x76, 0xe2, 0xfd, 0xbe, 0x01, 0xeb, 0x8c, 0x39, 0xeb, 0xf4, 0x96, 0xa8, 0x67, 0x9c, + 0x71, 0xac, 0xc7, 0x1f, 0xad, 0xb4, 0xac, 0x1e, 0x42, 0x39, 0x9e, 0x9f, 0xb8, 0x08, 0x22, 0x43, + 0x51, 0x8a, 0x9d, 0xf5, 0x8d, 0x6e, 0x93, 0x9d, 0xd2, 0x5f, 0xc8, 0x28, 0xcd, 0xaa, 0x85, 0x76, + 0x6b, 0x20, 0xab, 0xca, 0x59, 0x67, 0xd0, 0x3a, 0x95, 0x51, 0x26, 0x56, 0x96, 0x9e, 0x64, 0x0b, + 0x6f, 0xa3, 0x9b, 0xd5, 0xef, 0xd2, 0x50, 0x49, 0xde, 0x33, 0xf0, 0xcf, 0xe1, 0x6a, 0xf8, 0x28, + 0xe0, 0x51, 0x5f, 0x7d, 0x62, 0xb8, 0x7c, 0xe1, 0x4c, 0x88, 0xa8, 0xb3, 0xa3, 0xa9, 0xdb, 0x0e, + 0x58, 0x7d, 0xea, 0x7f, 0x6a, 0xb8, 0x6c, 0x59, 0x4c, 0x88, 0x8f, 0xdb, 0x70, 0xdd, 0xb2, 0x55, + 0xcf, 0x27, 0x96, 0x4e, 0x5c, 0x5d, 0x9d, 0x3d, 0xc7, 0xa8, 0x44, 0xd3, 0xa8, 0xe7, 0xd9, 0xe2, + 0xc0, 0x8a, 0xac, 0xbc, 0x6a, 0xd9, 0xfd, 0x80, 0x3c, 0xdb, 0xc9, 0xeb, 0x01, 0x75, 0x2e, 0xcd, + 0x32, 0xab, 0xd2, 0xec, 0x15, 0x28, 0x4e, 0x88, 0xa3, 0x52, 0xcb, 0x77, 0x2f, 0x78, 0x75, 0x59, + 0x50, 0x0a, 0x13, 0xe2, 0xc8, 0xac, 0xfd, 0x42, 0x8a, 0xfc, 0x93, 0x6c, 0xa1, 0x80, 0x8a, 0x27, + 0xd9, 0x42, 0x11, 0x41, 0xf5, 0x5f, 0x19, 0x28, 0xc7, 0xab, 0x4d, 0x56, 0xbc, 0x6b, 0xfc, 0x64, + 0x49, 0xf1, 0xbd, 0xe7, 0x8d, 0xef, 0xad, 0x4d, 0x6b, 0x0d, 0x76, 0xe4, 0x1c, 0xe6, 0x45, 0x0d, + 0xa8, 0x08, 0x4d, 0x76, 0xdc, 0xb3, 0xdd, 0x86, 0x8a, 0x7b, 0x4d, 0x41, 0x09, 0x5a, 0xf8, 0x18, + 0xf2, 0x0f, 0x3d, 0x6e, 0x3b, 0xcf, 0x6d, 0xbf, 0xf9, 0xfd, 0xb6, 0x4f, 0xfa, 0xdc, 0x78, 0xf1, + 0xa4, 0xaf, 0x76, 0xba, 0xca, 0x69, 0xbd, 0xad, 0x04, 0xea, 0xf8, 0x1a, 0x64, 0x4d, 0xf2, 0xd5, + 0x45, 0xf2, 0x70, 0xe2, 0xd0, 0x65, 0x27, 0xe1, 0x1a, 0x64, 0x9f, 0x50, 0xf2, 0x28, 0x79, 0x24, + 0x70, 0xe8, 0x47, 0x5c, 0x0c, 0xfb, 0x90, 0xe3, 0xf1, 0xc2, 0x00, 0x41, 0xc4, 0xd0, 0x4b, 0xb8, + 0x00, 0xd9, 0x46, 0x57, 0x61, 0x0b, 0x02, 0x41, 0x59, 0xa0, 0x6a, 0xaf, 0x25, 0x37, 0x64, 0x94, + 0xae, 0xde, 0x85, 0xbc, 0x08, 0x02, 0x5b, 0x2c, 0x51, 0x18, 0xd0, 0x4b, 0x41, 0x33, 0xb0, 0x91, + 0x0a, 0xa5, 0x67, 0xa7, 0x47, 0xb2, 0x82, 0xd2, 0xc9, 0xa9, 0xce, 0xa2, 0x5c, 0xd5, 0x83, 0x72, + 0xbc, 0xdc, 0x7c, 0x31, 0x57, 0xc9, 0xbf, 0xa7, 0xa0, 0x14, 0x2b, 0x1f, 0x59, 0xe1, 0x42, 0x4c, + 0xd3, 0x7e, 0xa2, 0x12, 0xd3, 0x20, 0x5e, 0x90, 0x1a, 0xc0, 0xa1, 0x3a, 0x43, 0x2e, 0x3b, 0x75, + 0x2f, 0x68, 0x89, 0xe4, 0x50, 0xbe, 0xfa, 0x97, 0x14, 0xa0, 0xf9, 0x02, 0x74, 0xce, 0xcd, 0xd4, + 0x4f, 0xe9, 0x66, 0xf5, 0xcf, 0x29, 0xa8, 0x24, 0xab, 0xce, 0x39, 0xf7, 0x6e, 0xfc, 0xa4, 0xee, + 0xfd, 0x33, 0x0d, 0xeb, 0x89, 0x5a, 0xf3, 0xb2, 0xde, 0x7d, 0x09, 0x9b, 0x86, 0x4e, 0x27, 0x8e, + 0xed, 0x53, 0x4b, 0xbb, 0x50, 0x4d, 0xfa, 0x98, 0x9a, 0x52, 0x95, 0x6f, 0x1a, 0xfb, 0xdf, 0x5f, + 0xcd, 0xd6, 0x5a, 0x33, 0xbd, 0x36, 0x53, 0x3b, 0xdc, 0x6a, 0x35, 0xe5, 0xd3, 0x5e, 0x77, 0x20, + 0x77, 0x1a, 0x9f, 0xab, 0x67, 0x9d, 0x5f, 0x75, 0xba, 0x9f, 0x76, 0x14, 0x64, 0xcc, 0xd1, 0x7e, + 0xc4, 0x65, 0xdf, 0x03, 0x34, 0xef, 0x14, 0xbe, 0x0a, 0xcb, 0xdc, 0x42, 0x2f, 0xe1, 0x2d, 0xd8, + 0xe8, 0x74, 0xd5, 0x7e, 0xab, 0x29, 0xab, 0xf2, 0x83, 0x07, 0x72, 0x63, 0xd0, 0x17, 0xd7, 0xfb, + 0x88, 0x3d, 0x48, 0x2c, 0xf0, 0xea, 0x9f, 0x32, 0xb0, 0xb5, 0xc4, 0x13, 0x5c, 0x0f, 0x6e, 0x16, + 0xe2, 0xb2, 0xf3, 0xee, 0x65, 0xbc, 0xaf, 0xb1, 0x82, 0xa0, 0x47, 0x5c, 0x3f, 0xb8, 0x88, 0xdc, + 0x02, 0x16, 0x25, 0xcb, 0x37, 0x86, 0x06, 0x75, 0x83, 0xd7, 0x10, 0x71, 0xdd, 0xd8, 0x98, 0xe1, + 0xe2, 0x41, 0xe4, 0x67, 0x80, 0x1d, 0xdb, 0x33, 0x7c, 0xe3, 0x31, 0x55, 0x0d, 0x2b, 0x7c, 0x3a, + 0x61, 0xd7, 0x8f, 0xac, 0x82, 0x42, 0x49, 0xcb, 0xf2, 0x23, 0xb6, 0x45, 0x47, 0x64, 0x8e, 0xcd, + 0x36, 0xf3, 0x8c, 0x82, 0x42, 0x49, 0xc4, 0xbe, 0x01, 0x65, 0xdd, 0x9e, 0xb2, 0x9a, 0x4c, 0xf0, + 0xd8, 0xd9, 0x91, 0x52, 0x4a, 0x02, 0x8b, 0x28, 0x41, 0xb5, 0x3d, 0x7b, 0xb3, 0x29, 0x2b, 0x25, + 0x81, 0x09, 0xca, 0x4d, 0xd8, 0x20, 0xa3, 0x91, 0xcb, 0x8c, 0x87, 0x86, 0xc4, 0xfd, 0xa1, 0x12, + 0xc1, 0x9c, 0xb8, 0x73, 0x02, 0x85, 0x30, 0x0e, 0xec, 0xa8, 0x66, 0x91, 0x50, 0x1d, 0xf1, 0x6e, + 0x97, 0xde, 0x2b, 0x2a, 0x05, 0x2b, 0x14, 0xde, 0x80, 0xb2, 0xe1, 0xa9, 0xb3, 0x27, 0xe8, 0xf4, + 0x6e, 0x7a, 0xaf, 0xa0, 0x94, 0x0c, 0x2f, 0x7a, 0xbe, 0xab, 0x7e, 0x93, 0x86, 0x4a, 0xf2, 0x09, + 0x1d, 0x37, 0xa1, 0x60, 0xda, 0x1a, 0xe1, 0xa9, 0x25, 0xbe, 0xdf, 0xec, 0x3d, 0xe7, 0xd5, 0xbd, + 0xd6, 0x0e, 0xf8, 0x4a, 0xa4, 0xb9, 0xf3, 0x8f, 0x14, 0x14, 0x42, 0x18, 0x5f, 0x81, 0xac, 0x43, + 0xfc, 0x31, 0x37, 0x97, 0x3b, 0x4a, 0xa3, 0x94, 0xc2, 0xdb, 0x0c, 0xf7, 0x1c, 0x62, 0xf1, 0x14, + 0x08, 0x70, 0xd6, 0x66, 0xf3, 0x6a, 0x52, 0xa2, 0xf3, 0xcb, 0x89, 0x3d, 0x99, 0x50, 0xcb, 0xf7, + 0xc2, 0x79, 0x0d, 0xf0, 0x46, 0x00, 0xe3, 0x77, 0x60, 0xd3, 0x77, 0x89, 0x61, 0x26, 0xb8, 0x59, + 0xce, 0x45, 0xa1, 0x20, 0x22, 0x1f, 0xc2, 0xb5, 0xd0, 0xae, 0x4e, 0x7d, 0xa2, 0x8d, 0xa9, 0x3e, + 0x53, 0xca, 0xf3, 0xf7, 0xd9, 0xab, 0x01, 0xa1, 0x19, 0xc8, 0x43, 0xdd, 0xea, 0x77, 0x29, 0xd8, + 0x0c, 0xaf, 0x53, 0x7a, 0x14, 0xac, 0x53, 0x00, 0x62, 0x59, 0xb6, 0x1f, 0x0f, 0xd7, 0x62, 0x2a, + 0x2f, 0xe8, 0xd5, 0xea, 0x91, 0x92, 0x12, 0x33, 0xb0, 0x33, 0x01, 0x98, 0x49, 0x56, 0x86, 0xed, + 0x3a, 0x94, 0x82, 0xef, 0x23, 0xfc, 0x23, 0x9b, 0xb8, 0x80, 0x83, 0x80, 0xd8, 0xbd, 0x0b, 0x6f, + 0x43, 0xee, 0x9c, 0x8e, 0x0c, 0x2b, 0x78, 0xf5, 0x14, 0x8d, 0xf0, 0x25, 0x37, 0x1b, 0xbd, 0xe4, + 0x1e, 0xfd, 0x21, 0x05, 0x5b, 0x9a, 0x3d, 0x99, 0xf7, 0xf7, 0x08, 0xcd, 0xbd, 0x02, 0x78, 0x9f, + 0xa4, 0xbe, 0xf8, 0x78, 0x64, 0xf8, 0xe3, 0xe9, 0x79, 0x4d, 0xb3, 0x27, 0xfb, 0x23, 0xdb, 0x24, + 0xd6, 0x68, 0xf6, 0x95, 0x90, 0xff, 0xd1, 0xde, 0x1d, 0x51, 0xeb, 0xdd, 0x91, 0x1d, 0xfb, 0x66, + 0xf8, 0xd1, 0xec, 0xef, 0xd7, 0xe9, 0xcc, 0x71, 0xef, 0xe8, 0xaf, 0xe9, 0x9d, 0x63, 0xd1, 0x57, + 0x2f, 0x8c, 0x8d, 0x42, 0x87, 0x26, 0xd5, 0xd8, 0x78, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x0c, + 0xab, 0xb6, 0x37, 0x7e, 0x1c, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto new file mode 100644 index 0000000..4d4fb37 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/descriptor/descriptor.proto @@ -0,0 +1,849 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// Based on original Protocol Buffers design by +// Sanjay Ghemawat, Jeff Dean, and others. +// +// The messages in this file describe the definitions found in .proto files. +// A valid .proto file can be translated directly to a FileDescriptorProto +// without any other information (e.g. without reading its imports). + + +syntax = "proto2"; + +package google.protobuf; +option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DescriptorProtos"; +option csharp_namespace = "Google.Protobuf.Reflection"; +option objc_class_prefix = "GPB"; + +// descriptor.proto must be optimized for speed because reflection-based +// algorithms don't work during bootstrapping. +option optimize_for = SPEED; + +// The protocol compiler can output a FileDescriptorSet containing the .proto +// files it parses. +message FileDescriptorSet { + repeated FileDescriptorProto file = 1; +} + +// Describes a complete .proto file. +message FileDescriptorProto { + optional string name = 1; // file name, relative to root of source tree + optional string package = 2; // e.g. "foo", "foo.bar", etc. + + // Names of files imported by this file. + repeated string dependency = 3; + // Indexes of the public imported files in the dependency list above. + repeated int32 public_dependency = 10; + // Indexes of the weak imported files in the dependency list. + // For Google-internal migration only. Do not use. + repeated int32 weak_dependency = 11; + + // All top-level definitions in this file. + repeated DescriptorProto message_type = 4; + repeated EnumDescriptorProto enum_type = 5; + repeated ServiceDescriptorProto service = 6; + repeated FieldDescriptorProto extension = 7; + + optional FileOptions options = 8; + + // This field contains optional information about the original source code. + // You may safely remove this entire field without harming runtime + // functionality of the descriptors -- the information is needed only by + // development tools. + optional SourceCodeInfo source_code_info = 9; + + // The syntax of the proto file. + // The supported values are "proto2" and "proto3". + optional string syntax = 12; +} + +// Describes a message type. +message DescriptorProto { + optional string name = 1; + + repeated FieldDescriptorProto field = 2; + repeated FieldDescriptorProto extension = 6; + + repeated DescriptorProto nested_type = 3; + repeated EnumDescriptorProto enum_type = 4; + + message ExtensionRange { + optional int32 start = 1; + optional int32 end = 2; + + optional ExtensionRangeOptions options = 3; + } + repeated ExtensionRange extension_range = 5; + + repeated OneofDescriptorProto oneof_decl = 8; + + optional MessageOptions options = 7; + + // Range of reserved tag numbers. Reserved tag numbers may not be used by + // fields or extension ranges in the same message. Reserved ranges may + // not overlap. + message ReservedRange { + optional int32 start = 1; // Inclusive. + optional int32 end = 2; // Exclusive. + } + repeated ReservedRange reserved_range = 9; + // Reserved field names, which may not be used by fields in the same message. + // A given name may only be reserved once. + repeated string reserved_name = 10; +} + +message ExtensionRangeOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +// Describes a field within a message. +message FieldDescriptorProto { + enum Type { + // 0 is reserved for errors. + // Order is weird for historical reasons. + TYPE_DOUBLE = 1; + TYPE_FLOAT = 2; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if + // negative values are likely. + TYPE_INT64 = 3; + TYPE_UINT64 = 4; + // Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if + // negative values are likely. + TYPE_INT32 = 5; + TYPE_FIXED64 = 6; + TYPE_FIXED32 = 7; + TYPE_BOOL = 8; + TYPE_STRING = 9; + // Tag-delimited aggregate. + // Group type is deprecated and not supported in proto3. However, Proto3 + // implementations should still be able to parse the group wire format and + // treat group fields as unknown fields. + TYPE_GROUP = 10; + TYPE_MESSAGE = 11; // Length-delimited aggregate. + + // New in version 2. + TYPE_BYTES = 12; + TYPE_UINT32 = 13; + TYPE_ENUM = 14; + TYPE_SFIXED32 = 15; + TYPE_SFIXED64 = 16; + TYPE_SINT32 = 17; // Uses ZigZag encoding. + TYPE_SINT64 = 18; // Uses ZigZag encoding. + }; + + enum Label { + // 0 is reserved for errors + LABEL_OPTIONAL = 1; + LABEL_REQUIRED = 2; + LABEL_REPEATED = 3; + }; + + optional string name = 1; + optional int32 number = 3; + optional Label label = 4; + + // If type_name is set, this need not be set. If both this and type_name + // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP. + optional Type type = 5; + + // For message and enum types, this is the name of the type. If the name + // starts with a '.', it is fully-qualified. Otherwise, C++-like scoping + // rules are used to find the type (i.e. first the nested types within this + // message are searched, then within the parent, on up to the root + // namespace). + optional string type_name = 6; + + // For extensions, this is the name of the type being extended. It is + // resolved in the same manner as type_name. + optional string extendee = 2; + + // For numeric types, contains the original text representation of the value. + // For booleans, "true" or "false". + // For strings, contains the default text contents (not escaped in any way). + // For bytes, contains the C escaped value. All bytes >= 128 are escaped. + // TODO(kenton): Base-64 encode? + optional string default_value = 7; + + // If set, gives the index of a oneof in the containing type's oneof_decl + // list. This field is a member of that oneof. + optional int32 oneof_index = 9; + + // JSON name of this field. The value is set by protocol compiler. If the + // user has set a "json_name" option on this field, that option's value + // will be used. Otherwise, it's deduced from the field's name by converting + // it to camelCase. + optional string json_name = 10; + + optional FieldOptions options = 8; +} + +// Describes a oneof. +message OneofDescriptorProto { + optional string name = 1; + optional OneofOptions options = 2; +} + +// Describes an enum type. +message EnumDescriptorProto { + optional string name = 1; + + repeated EnumValueDescriptorProto value = 2; + + optional EnumOptions options = 3; +} + +// Describes a value within an enum. +message EnumValueDescriptorProto { + optional string name = 1; + optional int32 number = 2; + + optional EnumValueOptions options = 3; +} + +// Describes a service. +message ServiceDescriptorProto { + optional string name = 1; + repeated MethodDescriptorProto method = 2; + + optional ServiceOptions options = 3; +} + +// Describes a method of a service. +message MethodDescriptorProto { + optional string name = 1; + + // Input and output type names. These are resolved in the same way as + // FieldDescriptorProto.type_name, but must refer to a message type. + optional string input_type = 2; + optional string output_type = 3; + + optional MethodOptions options = 4; + + // Identifies if client streams multiple client messages + optional bool client_streaming = 5 [default=false]; + // Identifies if server streams multiple server messages + optional bool server_streaming = 6 [default=false]; +} + + +// =================================================================== +// Options + +// Each of the definitions above may have "options" attached. These are +// just annotations which may cause code to be generated slightly differently +// or may contain hints for code that manipulates protocol messages. +// +// Clients may define custom options as extensions of the *Options messages. +// These extensions may not yet be known at parsing time, so the parser cannot +// store the values in them. Instead it stores them in a field in the *Options +// message called uninterpreted_option. This field must have the same name +// across all *Options messages. We then use this field to populate the +// extensions when we build a descriptor, at which point all protos have been +// parsed and so all extensions are known. +// +// Extension numbers for custom options may be chosen as follows: +// * For options which will only be used within a single application or +// organization, or for experimental options, use field numbers 50000 +// through 99999. It is up to you to ensure that you do not use the +// same number for multiple options. +// * For options which will be published and used publicly by multiple +// independent entities, e-mail protobuf-global-extension-registry@google.com +// to reserve extension numbers. Simply provide your project name (e.g. +// Objective-C plugin) and your project website (if available) -- there's no +// need to explain how you intend to use them. Usually you only need one +// extension number. You can declare multiple options with only one extension +// number by putting them in a sub-message. See the Custom Options section of +// the docs for examples: +// https://developers.google.com/protocol-buffers/docs/proto#options +// If this turns out to be popular, a web service will be set up +// to automatically assign option numbers. + + +message FileOptions { + + // Sets the Java package where classes generated from this .proto will be + // placed. By default, the proto package is used, but this is often + // inappropriate because proto packages do not normally start with backwards + // domain names. + optional string java_package = 1; + + + // If set, all the classes from the .proto file are wrapped in a single + // outer class with the given name. This applies to both Proto1 + // (equivalent to the old "--one_java_file" option) and Proto2 (where + // a .proto always translates to a single class, but you may want to + // explicitly choose the class name). + optional string java_outer_classname = 8; + + // If set true, then the Java code generator will generate a separate .java + // file for each top-level message, enum, and service defined in the .proto + // file. Thus, these types will *not* be nested inside the outer class + // named by java_outer_classname. However, the outer class will still be + // generated to contain the file's getDescriptor() method as well as any + // top-level extensions defined in the file. + optional bool java_multiple_files = 10 [default=false]; + + // This option does nothing. + optional bool java_generate_equals_and_hash = 20 [deprecated=true]; + + // If set true, then the Java2 code generator will generate code that + // throws an exception whenever an attempt is made to assign a non-UTF-8 + // byte sequence to a string field. + // Message reflection will do the same. + // However, an extension field still accepts non-UTF-8 byte sequences. + // This option has no effect on when used with the lite runtime. + optional bool java_string_check_utf8 = 27 [default=false]; + + + // Generated classes can be optimized for speed or code size. + enum OptimizeMode { + SPEED = 1; // Generate complete code for parsing, serialization, + // etc. + CODE_SIZE = 2; // Use ReflectionOps to implement these methods. + LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime. + } + optional OptimizeMode optimize_for = 9 [default=SPEED]; + + // Sets the Go package where structs generated from this .proto will be + // placed. If omitted, the Go package will be derived from the following: + // - The basename of the package import path, if provided. + // - Otherwise, the package statement in the .proto file, if present. + // - Otherwise, the basename of the .proto file, without extension. + optional string go_package = 11; + + + + // Should generic services be generated in each language? "Generic" services + // are not specific to any particular RPC system. They are generated by the + // main code generators in each language (without additional plugins). + // Generic services were the only kind of service generation supported by + // early versions of google.protobuf. + // + // Generic services are now considered deprecated in favor of using plugins + // that generate code specific to your particular RPC system. Therefore, + // these default to false. Old code which depends on generic services should + // explicitly set them to true. + optional bool cc_generic_services = 16 [default=false]; + optional bool java_generic_services = 17 [default=false]; + optional bool py_generic_services = 18 [default=false]; + optional bool php_generic_services = 42 [default=false]; + + // Is this file deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for everything in the file, or it will be completely ignored; in the very + // least, this is a formalization for deprecating files. + optional bool deprecated = 23 [default=false]; + + // Enables the use of arenas for the proto messages in this file. This applies + // only to generated classes for C++. + optional bool cc_enable_arenas = 31 [default=false]; + + + // Sets the objective c class prefix which is prepended to all objective c + // generated classes from this .proto. There is no default. + optional string objc_class_prefix = 36; + + // Namespace for generated classes; defaults to the package. + optional string csharp_namespace = 37; + + // By default Swift generators will take the proto package and CamelCase it + // replacing '.' with underscore and use that to prefix the types/symbols + // defined. When this options is provided, they will use this value instead + // to prefix the types/symbols defined. + optional string swift_prefix = 39; + + // Sets the php class prefix which is prepended to all php generated classes + // from this .proto. Default is empty. + optional string php_class_prefix = 40; + + // Use this option to change the namespace of php generated classes. Default + // is empty. When this option is empty, the package name will be used for + // determining the namespace. + optional string php_namespace = 41; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; + + reserved 38; +} + +message MessageOptions { + // Set true to use the old proto1 MessageSet wire format for extensions. + // This is provided for backwards-compatibility with the MessageSet wire + // format. You should not use this for any other reason: It's less + // efficient, has fewer features, and is more complicated. + // + // The message must be defined exactly as follows: + // message Foo { + // option message_set_wire_format = true; + // extensions 4 to max; + // } + // Note that the message cannot have any defined fields; MessageSets only + // have extensions. + // + // All extensions of your type must be singular messages; e.g. they cannot + // be int32s, enums, or repeated messages. + // + // Because this is an option, the above two restrictions are not enforced by + // the protocol compiler. + optional bool message_set_wire_format = 1 [default=false]; + + // Disables the generation of the standard "descriptor()" accessor, which can + // conflict with a field of the same name. This is meant to make migration + // from proto1 easier; new code should avoid fields named "descriptor". + optional bool no_standard_descriptor_accessor = 2 [default=false]; + + // Is this message deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the message, or it will be completely ignored; in the very least, + // this is a formalization for deprecating messages. + optional bool deprecated = 3 [default=false]; + + // Whether the message is an automatically generated map entry type for the + // maps field. + // + // For maps fields: + // map map_field = 1; + // The parsed descriptor looks like: + // message MapFieldEntry { + // option map_entry = true; + // optional KeyType key = 1; + // optional ValueType value = 2; + // } + // repeated MapFieldEntry map_field = 1; + // + // Implementations may choose not to generate the map_entry=true message, but + // use a native map in the target language to hold the keys and values. + // The reflection APIs in such implementions still need to work as + // if the field is a repeated message field. + // + // NOTE: Do not set the option in .proto files. Always use the maps syntax + // instead. The option should only be implicitly set by the proto compiler + // parser. + optional bool map_entry = 7; + + reserved 8; // javalite_serializable + reserved 9; // javanano_as_lite + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message FieldOptions { + // The ctype option instructs the C++ code generator to use a different + // representation of the field than it normally would. See the specific + // options below. This option is not yet implemented in the open source + // release -- sorry, we'll try to include it in a future version! + optional CType ctype = 1 [default = STRING]; + enum CType { + // Default mode. + STRING = 0; + + CORD = 1; + + STRING_PIECE = 2; + } + // The packed option can be enabled for repeated primitive fields to enable + // a more efficient representation on the wire. Rather than repeatedly + // writing the tag and type for each element, the entire array is encoded as + // a single length-delimited blob. In proto3, only explicit setting it to + // false will avoid using packed encoding. + optional bool packed = 2; + + // The jstype option determines the JavaScript type used for values of the + // field. The option is permitted only for 64 bit integral and fixed types + // (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING + // is represented as JavaScript string, which avoids loss of precision that + // can happen when a large value is converted to a floating point JavaScript. + // Specifying JS_NUMBER for the jstype causes the generated JavaScript code to + // use the JavaScript "number" type. The behavior of the default option + // JS_NORMAL is implementation dependent. + // + // This option is an enum to permit additional types to be added, e.g. + // goog.math.Integer. + optional JSType jstype = 6 [default = JS_NORMAL]; + enum JSType { + // Use the default type. + JS_NORMAL = 0; + + // Use JavaScript strings. + JS_STRING = 1; + + // Use JavaScript numbers. + JS_NUMBER = 2; + } + + // Should this field be parsed lazily? Lazy applies only to message-type + // fields. It means that when the outer message is initially parsed, the + // inner message's contents will not be parsed but instead stored in encoded + // form. The inner message will actually be parsed when it is first accessed. + // + // This is only a hint. Implementations are free to choose whether to use + // eager or lazy parsing regardless of the value of this option. However, + // setting this option true suggests that the protocol author believes that + // using lazy parsing on this field is worth the additional bookkeeping + // overhead typically needed to implement it. + // + // This option does not affect the public interface of any generated code; + // all method signatures remain the same. Furthermore, thread-safety of the + // interface is not affected by this option; const methods remain safe to + // call from multiple threads concurrently, while non-const methods continue + // to require exclusive access. + // + // + // Note that implementations may choose not to check required fields within + // a lazy sub-message. That is, calling IsInitialized() on the outer message + // may return true even if the inner message has missing required fields. + // This is necessary because otherwise the inner message would have to be + // parsed in order to perform the check, defeating the purpose of lazy + // parsing. An implementation which chooses not to check required fields + // must be consistent about it. That is, for any particular sub-message, the + // implementation must either *always* check its required fields, or *never* + // check its required fields, regardless of whether or not the message has + // been parsed. + optional bool lazy = 5 [default=false]; + + // Is this field deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for accessors, or it will be completely ignored; in the very least, this + // is a formalization for deprecating fields. + optional bool deprecated = 3 [default=false]; + + // For Google-internal migration only. Do not use. + optional bool weak = 10 [default=false]; + + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; + + reserved 4; // removed jtype +} + +message OneofOptions { + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumOptions { + + // Set this option to true to allow mapping different tag names to the same + // value. + optional bool allow_alias = 2; + + // Is this enum deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum, or it will be completely ignored; in the very least, this + // is a formalization for deprecating enums. + optional bool deprecated = 3 [default=false]; + + reserved 5; // javanano_as_lite + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message EnumValueOptions { + // Is this enum value deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the enum value, or it will be completely ignored; in the very least, + // this is a formalization for deprecating enum values. + optional bool deprecated = 1 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message ServiceOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this service deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the service, or it will be completely ignored; in the very least, + // this is a formalization for deprecating services. + optional bool deprecated = 33 [default=false]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + +message MethodOptions { + + // Note: Field numbers 1 through 32 are reserved for Google's internal RPC + // framework. We apologize for hoarding these numbers to ourselves, but + // we were already using them long before we decided to release Protocol + // Buffers. + + // Is this method deprecated? + // Depending on the target platform, this can emit Deprecated annotations + // for the method, or it will be completely ignored; in the very least, + // this is a formalization for deprecating methods. + optional bool deprecated = 33 [default=false]; + + // Is this method side-effect-free (or safe in HTTP parlance), or idempotent, + // or neither? HTTP based RPC implementation may choose GET verb for safe + // methods, and PUT verb for idempotent methods instead of the default POST. + enum IdempotencyLevel { + IDEMPOTENCY_UNKNOWN = 0; + NO_SIDE_EFFECTS = 1; // implies idempotent + IDEMPOTENT = 2; // idempotent, but may have side effects + } + optional IdempotencyLevel idempotency_level = + 34 [default=IDEMPOTENCY_UNKNOWN]; + + // The parser stores options it doesn't recognize here. See above. + repeated UninterpretedOption uninterpreted_option = 999; + + // Clients can define custom options in extensions of this message. See above. + extensions 1000 to max; +} + + +// A message representing a option the parser does not recognize. This only +// appears in options protos created by the compiler::Parser class. +// DescriptorPool resolves these when building Descriptor objects. Therefore, +// options protos in descriptor objects (e.g. returned by Descriptor::options(), +// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions +// in them. +message UninterpretedOption { + // The name of the uninterpreted option. Each string represents a segment in + // a dot-separated name. is_extension is true iff a segment represents an + // extension (denoted with parentheses in options specs in .proto files). + // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents + // "foo.(bar.baz).qux". + message NamePart { + required string name_part = 1; + required bool is_extension = 2; + } + repeated NamePart name = 2; + + // The value of the uninterpreted option, in whatever type the tokenizer + // identified it as during parsing. Exactly one of these should be set. + optional string identifier_value = 3; + optional uint64 positive_int_value = 4; + optional int64 negative_int_value = 5; + optional double double_value = 6; + optional bytes string_value = 7; + optional string aggregate_value = 8; +} + +// =================================================================== +// Optional source code info + +// Encapsulates information about the original source file from which a +// FileDescriptorProto was generated. +message SourceCodeInfo { + // A Location identifies a piece of source code in a .proto file which + // corresponds to a particular definition. This information is intended + // to be useful to IDEs, code indexers, documentation generators, and similar + // tools. + // + // For example, say we have a file like: + // message Foo { + // optional string foo = 1; + // } + // Let's look at just the field definition: + // optional string foo = 1; + // ^ ^^ ^^ ^ ^^^ + // a bc de f ghi + // We have the following locations: + // span path represents + // [a,i) [ 4, 0, 2, 0 ] The whole field definition. + // [a,b) [ 4, 0, 2, 0, 4 ] The label (optional). + // [c,d) [ 4, 0, 2, 0, 5 ] The type (string). + // [e,f) [ 4, 0, 2, 0, 1 ] The name (foo). + // [g,h) [ 4, 0, 2, 0, 3 ] The number (1). + // + // Notes: + // - A location may refer to a repeated field itself (i.e. not to any + // particular index within it). This is used whenever a set of elements are + // logically enclosed in a single code segment. For example, an entire + // extend block (possibly containing multiple extension definitions) will + // have an outer location whose path refers to the "extensions" repeated + // field without an index. + // - Multiple locations may have the same path. This happens when a single + // logical declaration is spread out across multiple places. The most + // obvious example is the "extend" block again -- there may be multiple + // extend blocks in the same scope, each of which will have the same path. + // - A location's span is not always a subset of its parent's span. For + // example, the "extendee" of an extension declaration appears at the + // beginning of the "extend" block and is shared by all extensions within + // the block. + // - Just because a location's span is a subset of some other location's span + // does not mean that it is a descendent. For example, a "group" defines + // both a type and a field in a single declaration. Thus, the locations + // corresponding to the type and field and their components will overlap. + // - Code which tries to interpret locations should probably be designed to + // ignore those that it doesn't understand, as more types of locations could + // be recorded in the future. + repeated Location location = 1; + message Location { + // Identifies which part of the FileDescriptorProto was defined at this + // location. + // + // Each element is a field number or an index. They form a path from + // the root FileDescriptorProto to the place where the definition. For + // example, this path: + // [ 4, 3, 2, 7, 1 ] + // refers to: + // file.message_type(3) // 4, 3 + // .field(7) // 2, 7 + // .name() // 1 + // This is because FileDescriptorProto.message_type has field number 4: + // repeated DescriptorProto message_type = 4; + // and DescriptorProto.field has field number 2: + // repeated FieldDescriptorProto field = 2; + // and FieldDescriptorProto.name has field number 1: + // optional string name = 1; + // + // Thus, the above path gives the location of a field name. If we removed + // the last element: + // [ 4, 3, 2, 7 ] + // this path refers to the whole field declaration (from the beginning + // of the label to the terminating semicolon). + repeated int32 path = 1 [packed=true]; + + // Always has exactly three or four elements: start line, start column, + // end line (optional, otherwise assumed same as start line), end column. + // These are packed into a single field for efficiency. Note that line + // and column numbers are zero-based -- typically you will want to add + // 1 to each before displaying to a user. + repeated int32 span = 2 [packed=true]; + + // If this SourceCodeInfo represents a complete declaration, these are any + // comments appearing before and after the declaration which appear to be + // attached to the declaration. + // + // A series of line comments appearing on consecutive lines, with no other + // tokens appearing on those lines, will be treated as a single comment. + // + // leading_detached_comments will keep paragraphs of comments that appear + // before (but not connected to) the current element. Each paragraph, + // separated by empty lines, will be one comment element in the repeated + // field. + // + // Only the comment content is provided; comment markers (e.g. //) are + // stripped out. For block comments, leading whitespace and an asterisk + // will be stripped from the beginning of each line other than the first. + // Newlines are included in the output. + // + // Examples: + // + // optional int32 foo = 1; // Comment attached to foo. + // // Comment attached to bar. + // optional int32 bar = 2; + // + // optional string baz = 3; + // // Comment attached to baz. + // // Another line attached to baz. + // + // // Comment attached to qux. + // // + // // Another line attached to qux. + // optional double qux = 4; + // + // // Detached comment for corge. This is not leading or trailing comments + // // to qux or corge because there are blank lines separating it from + // // both. + // + // // Detached comment for corge paragraph 2. + // + // optional string corge = 5; + // /* Block comment attached + // * to corge. Leading asterisks + // * will be removed. */ + // /* Block comment attached to + // * grault. */ + // optional int32 grault = 6; + // + // // ignored detached comments. + optional string leading_comments = 3; + optional string trailing_comments = 4; + repeated string leading_detached_comments = 6; + } +} + +// Describes the relationship between generated code and its original source +// file. A GeneratedCodeInfo message is associated with only one generated +// source file, but may contain references to different source .proto files. +message GeneratedCodeInfo { + // An Annotation connects some span of text in generated code to an element + // of its generating .proto file. + repeated Annotation annotation = 1; + message Annotation { + // Identifies the element in the original source .proto file. This field + // is formatted the same as SourceCodeInfo.Location.path. + repeated int32 path = 1 [packed=true]; + + // Identifies the filesystem path to the original source .proto. + optional string source_file = 2; + + // Identifies the starting offset in bytes in the generated code + // that relates to the identified object. + optional int32 begin = 3; + + // Identifies the ending offset in bytes in the generated code that + // relates to the identified offset. The end offset should be one past + // the last relevant byte (so the length of the text = end - begin). + optional int32 end = 4; + } +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/doc.go b/vendor/github.com/golang/protobuf/protoc-gen-go/doc.go new file mode 100644 index 0000000..0d6055d --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/doc.go @@ -0,0 +1,51 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* + A plugin for the Google protocol buffer compiler to generate Go code. + Run it by building this program and putting it in your path with the name + protoc-gen-go + That word 'go' at the end becomes part of the option string set for the + protocol compiler, so once the protocol compiler (protoc) is installed + you can run + protoc --go_out=output_directory input_directory/file.proto + to generate Go bindings for the protocol defined by file.proto. + With that input, the output will be written to + output_directory/file.pb.go + + The generated code is documented in the package comment for + the library. + + See the README and documentation for protocol buffers to learn more: + https://developers.google.com/protocol-buffers/ + +*/ +package documentation diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/Makefile new file mode 100644 index 0000000..b5715c3 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/Makefile @@ -0,0 +1,40 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +include $(GOROOT)/src/Make.inc + +TARG=github.com/golang/protobuf/compiler/generator +GOFILES=\ + generator.go\ + +DEPS=../descriptor ../plugin ../../proto + +include $(GOROOT)/src/Make.pkg diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go new file mode 100644 index 0000000..60d5246 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/generator.go @@ -0,0 +1,2866 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* + The code generator for the plugin for the Google protocol buffer compiler. + It generates Go code from the protocol buffer description files read by the + main routine. +*/ +package generator + +import ( + "bufio" + "bytes" + "compress/gzip" + "fmt" + "go/parser" + "go/printer" + "go/token" + "log" + "os" + "path" + "strconv" + "strings" + "unicode" + "unicode/utf8" + + "github.com/golang/protobuf/proto" + + "github.com/golang/protobuf/protoc-gen-go/descriptor" + plugin "github.com/golang/protobuf/protoc-gen-go/plugin" +) + +// generatedCodeVersion indicates a version of the generated code. +// It is incremented whenever an incompatibility between the generated code and +// proto package is introduced; the generated code references +// a constant, proto.ProtoPackageIsVersionN (where N is generatedCodeVersion). +const generatedCodeVersion = 2 + +// A Plugin provides functionality to add to the output during Go code generation, +// such as to produce RPC stubs. +type Plugin interface { + // Name identifies the plugin. + Name() string + // Init is called once after data structures are built but before + // code generation begins. + Init(g *Generator) + // Generate produces the code generated by the plugin for this file, + // except for the imports, by calling the generator's methods P, In, and Out. + Generate(file *FileDescriptor) + // GenerateImports produces the import declarations for this file. + // It is called after Generate. + GenerateImports(file *FileDescriptor) +} + +var plugins []Plugin + +// RegisterPlugin installs a (second-order) plugin to be run when the Go output is generated. +// It is typically called during initialization. +func RegisterPlugin(p Plugin) { + plugins = append(plugins, p) +} + +// Each type we import as a protocol buffer (other than FileDescriptorProto) needs +// a pointer to the FileDescriptorProto that represents it. These types achieve that +// wrapping by placing each Proto inside a struct with the pointer to its File. The +// structs have the same names as their contents, with "Proto" removed. +// FileDescriptor is used to store the things that it points to. + +// The file and package name method are common to messages and enums. +type common struct { + file *descriptor.FileDescriptorProto // File this object comes from. +} + +// PackageName is name in the package clause in the generated file. +func (c *common) PackageName() string { return uniquePackageOf(c.file) } + +func (c *common) File() *descriptor.FileDescriptorProto { return c.file } + +func fileIsProto3(file *descriptor.FileDescriptorProto) bool { + return file.GetSyntax() == "proto3" +} + +func (c *common) proto3() bool { return fileIsProto3(c.file) } + +// Descriptor represents a protocol buffer message. +type Descriptor struct { + common + *descriptor.DescriptorProto + parent *Descriptor // The containing message, if any. + nested []*Descriptor // Inner messages, if any. + enums []*EnumDescriptor // Inner enums, if any. + ext []*ExtensionDescriptor // Extensions, if any. + typename []string // Cached typename vector. + index int // The index into the container, whether the file or another message. + path string // The SourceCodeInfo path as comma-separated integers. + group bool +} + +// TypeName returns the elements of the dotted type name. +// The package name is not part of this name. +func (d *Descriptor) TypeName() []string { + if d.typename != nil { + return d.typename + } + n := 0 + for parent := d; parent != nil; parent = parent.parent { + n++ + } + s := make([]string, n, n) + for parent := d; parent != nil; parent = parent.parent { + n-- + s[n] = parent.GetName() + } + d.typename = s + return s +} + +// EnumDescriptor describes an enum. If it's at top level, its parent will be nil. +// Otherwise it will be the descriptor of the message in which it is defined. +type EnumDescriptor struct { + common + *descriptor.EnumDescriptorProto + parent *Descriptor // The containing message, if any. + typename []string // Cached typename vector. + index int // The index into the container, whether the file or a message. + path string // The SourceCodeInfo path as comma-separated integers. +} + +// TypeName returns the elements of the dotted type name. +// The package name is not part of this name. +func (e *EnumDescriptor) TypeName() (s []string) { + if e.typename != nil { + return e.typename + } + name := e.GetName() + if e.parent == nil { + s = make([]string, 1) + } else { + pname := e.parent.TypeName() + s = make([]string, len(pname)+1) + copy(s, pname) + } + s[len(s)-1] = name + e.typename = s + return s +} + +// Everything but the last element of the full type name, CamelCased. +// The values of type Foo.Bar are call Foo_value1... not Foo_Bar_value1... . +func (e *EnumDescriptor) prefix() string { + if e.parent == nil { + // If the enum is not part of a message, the prefix is just the type name. + return CamelCase(*e.Name) + "_" + } + typeName := e.TypeName() + return CamelCaseSlice(typeName[0:len(typeName)-1]) + "_" +} + +// The integer value of the named constant in this enumerated type. +func (e *EnumDescriptor) integerValueAsString(name string) string { + for _, c := range e.Value { + if c.GetName() == name { + return fmt.Sprint(c.GetNumber()) + } + } + log.Fatal("cannot find value for enum constant") + return "" +} + +// ExtensionDescriptor describes an extension. If it's at top level, its parent will be nil. +// Otherwise it will be the descriptor of the message in which it is defined. +type ExtensionDescriptor struct { + common + *descriptor.FieldDescriptorProto + parent *Descriptor // The containing message, if any. +} + +// TypeName returns the elements of the dotted type name. +// The package name is not part of this name. +func (e *ExtensionDescriptor) TypeName() (s []string) { + name := e.GetName() + if e.parent == nil { + // top-level extension + s = make([]string, 1) + } else { + pname := e.parent.TypeName() + s = make([]string, len(pname)+1) + copy(s, pname) + } + s[len(s)-1] = name + return s +} + +// DescName returns the variable name used for the generated descriptor. +func (e *ExtensionDescriptor) DescName() string { + // The full type name. + typeName := e.TypeName() + // Each scope of the extension is individually CamelCased, and all are joined with "_" with an "E_" prefix. + for i, s := range typeName { + typeName[i] = CamelCase(s) + } + return "E_" + strings.Join(typeName, "_") +} + +// ImportedDescriptor describes a type that has been publicly imported from another file. +type ImportedDescriptor struct { + common + o Object +} + +func (id *ImportedDescriptor) TypeName() []string { return id.o.TypeName() } + +// FileDescriptor describes an protocol buffer descriptor file (.proto). +// It includes slices of all the messages and enums defined within it. +// Those slices are constructed by WrapTypes. +type FileDescriptor struct { + *descriptor.FileDescriptorProto + desc []*Descriptor // All the messages defined in this file. + enum []*EnumDescriptor // All the enums defined in this file. + ext []*ExtensionDescriptor // All the top-level extensions defined in this file. + imp []*ImportedDescriptor // All types defined in files publicly imported by this file. + + // Comments, stored as a map of path (comma-separated integers) to the comment. + comments map[string]*descriptor.SourceCodeInfo_Location + + // The full list of symbols that are exported, + // as a map from the exported object to its symbols. + // This is used for supporting public imports. + exported map[Object][]symbol + + index int // The index of this file in the list of files to generate code for + + proto3 bool // whether to generate proto3 code for this file +} + +// PackageName is the package name we'll use in the generated code to refer to this file. +func (d *FileDescriptor) PackageName() string { return uniquePackageOf(d.FileDescriptorProto) } + +// VarName is the variable name we'll use in the generated code to refer +// to the compressed bytes of this descriptor. It is not exported, so +// it is only valid inside the generated package. +func (d *FileDescriptor) VarName() string { return fmt.Sprintf("fileDescriptor%d", d.index) } + +// goPackageOption interprets the file's go_package option. +// If there is no go_package, it returns ("", "", false). +// If there's a simple name, it returns ("", pkg, true). +// If the option implies an import path, it returns (impPath, pkg, true). +func (d *FileDescriptor) goPackageOption() (impPath, pkg string, ok bool) { + pkg = d.GetOptions().GetGoPackage() + if pkg == "" { + return + } + ok = true + // The presence of a slash implies there's an import path. + slash := strings.LastIndex(pkg, "/") + if slash < 0 { + return + } + impPath, pkg = pkg, pkg[slash+1:] + // A semicolon-delimited suffix overrides the package name. + sc := strings.IndexByte(impPath, ';') + if sc < 0 { + return + } + impPath, pkg = impPath[:sc], impPath[sc+1:] + return +} + +// goPackageName returns the Go package name to use in the +// generated Go file. The result explicit reports whether the name +// came from an option go_package statement. If explicit is false, +// the name was derived from the protocol buffer's package statement +// or the input file name. +func (d *FileDescriptor) goPackageName() (name string, explicit bool) { + // Does the file have a "go_package" option? + if _, pkg, ok := d.goPackageOption(); ok { + return pkg, true + } + + // Does the file have a package clause? + if pkg := d.GetPackage(); pkg != "" { + return pkg, false + } + // Use the file base name. + return baseName(d.GetName()), false +} + +// goFileName returns the output name for the generated Go file. +func (d *FileDescriptor) goFileName() string { + name := *d.Name + if ext := path.Ext(name); ext == ".proto" || ext == ".protodevel" { + name = name[:len(name)-len(ext)] + } + name += ".pb.go" + + // Does the file have a "go_package" option? + // If it does, it may override the filename. + if impPath, _, ok := d.goPackageOption(); ok && impPath != "" { + // Replace the existing dirname with the declared import path. + _, name = path.Split(name) + name = path.Join(impPath, name) + return name + } + + return name +} + +func (d *FileDescriptor) addExport(obj Object, sym symbol) { + d.exported[obj] = append(d.exported[obj], sym) +} + +// symbol is an interface representing an exported Go symbol. +type symbol interface { + // GenerateAlias should generate an appropriate alias + // for the symbol from the named package. + GenerateAlias(g *Generator, pkg string) +} + +type messageSymbol struct { + sym string + hasExtensions, isMessageSet bool + hasOneof bool + getters []getterSymbol +} + +type getterSymbol struct { + name string + typ string + typeName string // canonical name in proto world; empty for proto.Message and similar + genType bool // whether typ contains a generated type (message/group/enum) +} + +func (ms *messageSymbol) GenerateAlias(g *Generator, pkg string) { + remoteSym := pkg + "." + ms.sym + + g.P("type ", ms.sym, " ", remoteSym) + g.P("func (m *", ms.sym, ") Reset() { (*", remoteSym, ")(m).Reset() }") + g.P("func (m *", ms.sym, ") String() string { return (*", remoteSym, ")(m).String() }") + g.P("func (*", ms.sym, ") ProtoMessage() {}") + if ms.hasExtensions { + g.P("func (*", ms.sym, ") ExtensionRangeArray() []", g.Pkg["proto"], ".ExtensionRange ", + "{ return (*", remoteSym, ")(nil).ExtensionRangeArray() }") + if ms.isMessageSet { + g.P("func (m *", ms.sym, ") Marshal() ([]byte, error) ", + "{ return (*", remoteSym, ")(m).Marshal() }") + g.P("func (m *", ms.sym, ") Unmarshal(buf []byte) error ", + "{ return (*", remoteSym, ")(m).Unmarshal(buf) }") + } + } + if ms.hasOneof { + // Oneofs and public imports do not mix well. + // We can make them work okay for the binary format, + // but they're going to break weirdly for text/JSON. + enc := "_" + ms.sym + "_OneofMarshaler" + dec := "_" + ms.sym + "_OneofUnmarshaler" + size := "_" + ms.sym + "_OneofSizer" + encSig := "(msg " + g.Pkg["proto"] + ".Message, b *" + g.Pkg["proto"] + ".Buffer) error" + decSig := "(msg " + g.Pkg["proto"] + ".Message, tag, wire int, b *" + g.Pkg["proto"] + ".Buffer) (bool, error)" + sizeSig := "(msg " + g.Pkg["proto"] + ".Message) int" + g.P("func (m *", ms.sym, ") XXX_OneofFuncs() (func", encSig, ", func", decSig, ", func", sizeSig, ", []interface{}) {") + g.P("return ", enc, ", ", dec, ", ", size, ", nil") + g.P("}") + + g.P("func ", enc, encSig, " {") + g.P("m := msg.(*", ms.sym, ")") + g.P("m0 := (*", remoteSym, ")(m)") + g.P("enc, _, _, _ := m0.XXX_OneofFuncs()") + g.P("return enc(m0, b)") + g.P("}") + + g.P("func ", dec, decSig, " {") + g.P("m := msg.(*", ms.sym, ")") + g.P("m0 := (*", remoteSym, ")(m)") + g.P("_, dec, _, _ := m0.XXX_OneofFuncs()") + g.P("return dec(m0, tag, wire, b)") + g.P("}") + + g.P("func ", size, sizeSig, " {") + g.P("m := msg.(*", ms.sym, ")") + g.P("m0 := (*", remoteSym, ")(m)") + g.P("_, _, size, _ := m0.XXX_OneofFuncs()") + g.P("return size(m0)") + g.P("}") + } + for _, get := range ms.getters { + + if get.typeName != "" { + g.RecordTypeUse(get.typeName) + } + typ := get.typ + val := "(*" + remoteSym + ")(m)." + get.name + "()" + if get.genType { + // typ will be "*pkg.T" (message/group) or "pkg.T" (enum) + // or "map[t]*pkg.T" (map to message/enum). + // The first two of those might have a "[]" prefix if it is repeated. + // Drop any package qualifier since we have hoisted the type into this package. + rep := strings.HasPrefix(typ, "[]") + if rep { + typ = typ[2:] + } + isMap := strings.HasPrefix(typ, "map[") + star := typ[0] == '*' + if !isMap { // map types handled lower down + typ = typ[strings.Index(typ, ".")+1:] + } + if star { + typ = "*" + typ + } + if rep { + // Go does not permit conversion between slice types where both + // element types are named. That means we need to generate a bit + // of code in this situation. + // typ is the element type. + // val is the expression to get the slice from the imported type. + + ctyp := typ // conversion type expression; "Foo" or "(*Foo)" + if star { + ctyp = "(" + typ + ")" + } + + g.P("func (m *", ms.sym, ") ", get.name, "() []", typ, " {") + g.In() + g.P("o := ", val) + g.P("if o == nil {") + g.In() + g.P("return nil") + g.Out() + g.P("}") + g.P("s := make([]", typ, ", len(o))") + g.P("for i, x := range o {") + g.In() + g.P("s[i] = ", ctyp, "(x)") + g.Out() + g.P("}") + g.P("return s") + g.Out() + g.P("}") + continue + } + if isMap { + // Split map[keyTyp]valTyp. + bra, ket := strings.Index(typ, "["), strings.Index(typ, "]") + keyTyp, valTyp := typ[bra+1:ket], typ[ket+1:] + // Drop any package qualifier. + // Only the value type may be foreign. + star := valTyp[0] == '*' + valTyp = valTyp[strings.Index(valTyp, ".")+1:] + if star { + valTyp = "*" + valTyp + } + + typ := "map[" + keyTyp + "]" + valTyp + g.P("func (m *", ms.sym, ") ", get.name, "() ", typ, " {") + g.P("o := ", val) + g.P("if o == nil { return nil }") + g.P("s := make(", typ, ", len(o))") + g.P("for k, v := range o {") + g.P("s[k] = (", valTyp, ")(v)") + g.P("}") + g.P("return s") + g.P("}") + continue + } + // Convert imported type into the forwarding type. + val = "(" + typ + ")(" + val + ")" + } + + g.P("func (m *", ms.sym, ") ", get.name, "() ", typ, " { return ", val, " }") + } + +} + +type enumSymbol struct { + name string + proto3 bool // Whether this came from a proto3 file. +} + +func (es enumSymbol) GenerateAlias(g *Generator, pkg string) { + s := es.name + g.P("type ", s, " ", pkg, ".", s) + g.P("var ", s, "_name = ", pkg, ".", s, "_name") + g.P("var ", s, "_value = ", pkg, ".", s, "_value") + g.P("func (x ", s, ") String() string { return (", pkg, ".", s, ")(x).String() }") + if !es.proto3 { + g.P("func (x ", s, ") Enum() *", s, "{ return (*", s, ")((", pkg, ".", s, ")(x).Enum()) }") + g.P("func (x *", s, ") UnmarshalJSON(data []byte) error { return (*", pkg, ".", s, ")(x).UnmarshalJSON(data) }") + } +} + +type constOrVarSymbol struct { + sym string + typ string // either "const" or "var" + cast string // if non-empty, a type cast is required (used for enums) +} + +func (cs constOrVarSymbol) GenerateAlias(g *Generator, pkg string) { + v := pkg + "." + cs.sym + if cs.cast != "" { + v = cs.cast + "(" + v + ")" + } + g.P(cs.typ, " ", cs.sym, " = ", v) +} + +// Object is an interface abstracting the abilities shared by enums, messages, extensions and imported objects. +type Object interface { + PackageName() string // The name we use in our output (a_b_c), possibly renamed for uniqueness. + TypeName() []string + File() *descriptor.FileDescriptorProto +} + +// Each package name we generate must be unique. The package we're generating +// gets its own name but every other package must have a unique name that does +// not conflict in the code we generate. These names are chosen globally (although +// they don't have to be, it simplifies things to do them globally). +func uniquePackageOf(fd *descriptor.FileDescriptorProto) string { + s, ok := uniquePackageName[fd] + if !ok { + log.Fatal("internal error: no package name defined for " + fd.GetName()) + } + return s +} + +// Generator is the type whose methods generate the output, stored in the associated response structure. +type Generator struct { + *bytes.Buffer + + Request *plugin.CodeGeneratorRequest // The input. + Response *plugin.CodeGeneratorResponse // The output. + + Param map[string]string // Command-line parameters. + PackageImportPath string // Go import path of the package we're generating code for + ImportPrefix string // String to prefix to imported package file names. + ImportMap map[string]string // Mapping from .proto file name to import path + + Pkg map[string]string // The names under which we import support packages + + packageName string // What we're calling ourselves. + allFiles []*FileDescriptor // All files in the tree + allFilesByName map[string]*FileDescriptor // All files by filename. + genFiles []*FileDescriptor // Those files we will generate output for. + file *FileDescriptor // The file we are compiling now. + usedPackages map[string]bool // Names of packages used in current file. + typeNameToObject map[string]Object // Key is a fully-qualified name in input syntax. + init []string // Lines to emit in the init function. + indent string + writeOutput bool +} + +// New creates a new generator and allocates the request and response protobufs. +func New() *Generator { + g := new(Generator) + g.Buffer = new(bytes.Buffer) + g.Request = new(plugin.CodeGeneratorRequest) + g.Response = new(plugin.CodeGeneratorResponse) + return g +} + +// Error reports a problem, including an error, and exits the program. +func (g *Generator) Error(err error, msgs ...string) { + s := strings.Join(msgs, " ") + ":" + err.Error() + log.Print("protoc-gen-go: error:", s) + os.Exit(1) +} + +// Fail reports a problem and exits the program. +func (g *Generator) Fail(msgs ...string) { + s := strings.Join(msgs, " ") + log.Print("protoc-gen-go: error:", s) + os.Exit(1) +} + +// CommandLineParameters breaks the comma-separated list of key=value pairs +// in the parameter (a member of the request protobuf) into a key/value map. +// It then sets file name mappings defined by those entries. +func (g *Generator) CommandLineParameters(parameter string) { + g.Param = make(map[string]string) + for _, p := range strings.Split(parameter, ",") { + if i := strings.Index(p, "="); i < 0 { + g.Param[p] = "" + } else { + g.Param[p[0:i]] = p[i+1:] + } + } + + g.ImportMap = make(map[string]string) + pluginList := "none" // Default list of plugin names to enable (empty means all). + for k, v := range g.Param { + switch k { + case "import_prefix": + g.ImportPrefix = v + case "import_path": + g.PackageImportPath = v + case "plugins": + pluginList = v + default: + if len(k) > 0 && k[0] == 'M' { + g.ImportMap[k[1:]] = v + } + } + } + if pluginList != "" { + // Amend the set of plugins. + enabled := make(map[string]bool) + for _, name := range strings.Split(pluginList, "+") { + enabled[name] = true + } + var nplugins []Plugin + for _, p := range plugins { + if enabled[p.Name()] { + nplugins = append(nplugins, p) + } + } + plugins = nplugins + } +} + +// DefaultPackageName returns the package name printed for the object. +// If its file is in a different package, it returns the package name we're using for this file, plus ".". +// Otherwise it returns the empty string. +func (g *Generator) DefaultPackageName(obj Object) string { + pkg := obj.PackageName() + if pkg == g.packageName { + return "" + } + return pkg + "." +} + +// For each input file, the unique package name to use, underscored. +var uniquePackageName = make(map[*descriptor.FileDescriptorProto]string) + +// Package names already registered. Key is the name from the .proto file; +// value is the name that appears in the generated code. +var pkgNamesInUse = make(map[string]bool) + +// Create and remember a guaranteed unique package name for this file descriptor. +// Pkg is the candidate name. If f is nil, it's a builtin package like "proto" and +// has no file descriptor. +func RegisterUniquePackageName(pkg string, f *FileDescriptor) string { + // Convert dots to underscores before finding a unique alias. + pkg = strings.Map(badToUnderscore, pkg) + + for i, orig := 1, pkg; pkgNamesInUse[pkg]; i++ { + // It's a duplicate; must rename. + pkg = orig + strconv.Itoa(i) + } + // Install it. + pkgNamesInUse[pkg] = true + if f != nil { + uniquePackageName[f.FileDescriptorProto] = pkg + } + return pkg +} + +var isGoKeyword = map[string]bool{ + "break": true, + "case": true, + "chan": true, + "const": true, + "continue": true, + "default": true, + "else": true, + "defer": true, + "fallthrough": true, + "for": true, + "func": true, + "go": true, + "goto": true, + "if": true, + "import": true, + "interface": true, + "map": true, + "package": true, + "range": true, + "return": true, + "select": true, + "struct": true, + "switch": true, + "type": true, + "var": true, +} + +// defaultGoPackage returns the package name to use, +// derived from the import path of the package we're building code for. +func (g *Generator) defaultGoPackage() string { + p := g.PackageImportPath + if i := strings.LastIndex(p, "/"); i >= 0 { + p = p[i+1:] + } + if p == "" { + return "" + } + + p = strings.Map(badToUnderscore, p) + // Identifier must not be keyword: insert _. + if isGoKeyword[p] { + p = "_" + p + } + // Identifier must not begin with digit: insert _. + if r, _ := utf8.DecodeRuneInString(p); unicode.IsDigit(r) { + p = "_" + p + } + return p +} + +// SetPackageNames sets the package name for this run. +// The package name must agree across all files being generated. +// It also defines unique package names for all imported files. +func (g *Generator) SetPackageNames() { + // Register the name for this package. It will be the first name + // registered so is guaranteed to be unmodified. + pkg, explicit := g.genFiles[0].goPackageName() + + // Check all files for an explicit go_package option. + for _, f := range g.genFiles { + thisPkg, thisExplicit := f.goPackageName() + if thisExplicit { + if !explicit { + // Let this file's go_package option serve for all input files. + pkg, explicit = thisPkg, true + } else if thisPkg != pkg { + g.Fail("inconsistent package names:", thisPkg, pkg) + } + } + } + + // If we don't have an explicit go_package option but we have an + // import path, use that. + if !explicit { + p := g.defaultGoPackage() + if p != "" { + pkg, explicit = p, true + } + } + + // If there was no go_package and no import path to use, + // double-check that all the inputs have the same implicit + // Go package name. + if !explicit { + for _, f := range g.genFiles { + thisPkg, _ := f.goPackageName() + if thisPkg != pkg { + g.Fail("inconsistent package names:", thisPkg, pkg) + } + } + } + + g.packageName = RegisterUniquePackageName(pkg, g.genFiles[0]) + + // Register the support package names. They might collide with the + // name of a package we import. + g.Pkg = map[string]string{ + "fmt": RegisterUniquePackageName("fmt", nil), + "math": RegisterUniquePackageName("math", nil), + "proto": RegisterUniquePackageName("proto", nil), + } + +AllFiles: + for _, f := range g.allFiles { + for _, genf := range g.genFiles { + if f == genf { + // In this package already. + uniquePackageName[f.FileDescriptorProto] = g.packageName + continue AllFiles + } + } + // The file is a dependency, so we want to ignore its go_package option + // because that is only relevant for its specific generated output. + pkg := f.GetPackage() + if pkg == "" { + pkg = baseName(*f.Name) + } + RegisterUniquePackageName(pkg, f) + } +} + +// WrapTypes walks the incoming data, wrapping DescriptorProtos, EnumDescriptorProtos +// and FileDescriptorProtos into file-referenced objects within the Generator. +// It also creates the list of files to generate and so should be called before GenerateAllFiles. +func (g *Generator) WrapTypes() { + g.allFiles = make([]*FileDescriptor, 0, len(g.Request.ProtoFile)) + g.allFilesByName = make(map[string]*FileDescriptor, len(g.allFiles)) + for _, f := range g.Request.ProtoFile { + // We must wrap the descriptors before we wrap the enums + descs := wrapDescriptors(f) + g.buildNestedDescriptors(descs) + enums := wrapEnumDescriptors(f, descs) + g.buildNestedEnums(descs, enums) + exts := wrapExtensions(f) + fd := &FileDescriptor{ + FileDescriptorProto: f, + desc: descs, + enum: enums, + ext: exts, + exported: make(map[Object][]symbol), + proto3: fileIsProto3(f), + } + extractComments(fd) + g.allFiles = append(g.allFiles, fd) + g.allFilesByName[f.GetName()] = fd + } + for _, fd := range g.allFiles { + fd.imp = wrapImported(fd.FileDescriptorProto, g) + } + + g.genFiles = make([]*FileDescriptor, 0, len(g.Request.FileToGenerate)) + for _, fileName := range g.Request.FileToGenerate { + fd := g.allFilesByName[fileName] + if fd == nil { + g.Fail("could not find file named", fileName) + } + fd.index = len(g.genFiles) + g.genFiles = append(g.genFiles, fd) + } +} + +// Scan the descriptors in this file. For each one, build the slice of nested descriptors +func (g *Generator) buildNestedDescriptors(descs []*Descriptor) { + for _, desc := range descs { + if len(desc.NestedType) != 0 { + for _, nest := range descs { + if nest.parent == desc { + desc.nested = append(desc.nested, nest) + } + } + if len(desc.nested) != len(desc.NestedType) { + g.Fail("internal error: nesting failure for", desc.GetName()) + } + } + } +} + +func (g *Generator) buildNestedEnums(descs []*Descriptor, enums []*EnumDescriptor) { + for _, desc := range descs { + if len(desc.EnumType) != 0 { + for _, enum := range enums { + if enum.parent == desc { + desc.enums = append(desc.enums, enum) + } + } + if len(desc.enums) != len(desc.EnumType) { + g.Fail("internal error: enum nesting failure for", desc.GetName()) + } + } + } +} + +// Construct the Descriptor +func newDescriptor(desc *descriptor.DescriptorProto, parent *Descriptor, file *descriptor.FileDescriptorProto, index int) *Descriptor { + d := &Descriptor{ + common: common{file}, + DescriptorProto: desc, + parent: parent, + index: index, + } + if parent == nil { + d.path = fmt.Sprintf("%d,%d", messagePath, index) + } else { + d.path = fmt.Sprintf("%s,%d,%d", parent.path, messageMessagePath, index) + } + + // The only way to distinguish a group from a message is whether + // the containing message has a TYPE_GROUP field that matches. + if parent != nil { + parts := d.TypeName() + if file.Package != nil { + parts = append([]string{*file.Package}, parts...) + } + exp := "." + strings.Join(parts, ".") + for _, field := range parent.Field { + if field.GetType() == descriptor.FieldDescriptorProto_TYPE_GROUP && field.GetTypeName() == exp { + d.group = true + break + } + } + } + + for _, field := range desc.Extension { + d.ext = append(d.ext, &ExtensionDescriptor{common{file}, field, d}) + } + + return d +} + +// Return a slice of all the Descriptors defined within this file +func wrapDescriptors(file *descriptor.FileDescriptorProto) []*Descriptor { + sl := make([]*Descriptor, 0, len(file.MessageType)+10) + for i, desc := range file.MessageType { + sl = wrapThisDescriptor(sl, desc, nil, file, i) + } + return sl +} + +// Wrap this Descriptor, recursively +func wrapThisDescriptor(sl []*Descriptor, desc *descriptor.DescriptorProto, parent *Descriptor, file *descriptor.FileDescriptorProto, index int) []*Descriptor { + sl = append(sl, newDescriptor(desc, parent, file, index)) + me := sl[len(sl)-1] + for i, nested := range desc.NestedType { + sl = wrapThisDescriptor(sl, nested, me, file, i) + } + return sl +} + +// Construct the EnumDescriptor +func newEnumDescriptor(desc *descriptor.EnumDescriptorProto, parent *Descriptor, file *descriptor.FileDescriptorProto, index int) *EnumDescriptor { + ed := &EnumDescriptor{ + common: common{file}, + EnumDescriptorProto: desc, + parent: parent, + index: index, + } + if parent == nil { + ed.path = fmt.Sprintf("%d,%d", enumPath, index) + } else { + ed.path = fmt.Sprintf("%s,%d,%d", parent.path, messageEnumPath, index) + } + return ed +} + +// Return a slice of all the EnumDescriptors defined within this file +func wrapEnumDescriptors(file *descriptor.FileDescriptorProto, descs []*Descriptor) []*EnumDescriptor { + sl := make([]*EnumDescriptor, 0, len(file.EnumType)+10) + // Top-level enums. + for i, enum := range file.EnumType { + sl = append(sl, newEnumDescriptor(enum, nil, file, i)) + } + // Enums within messages. Enums within embedded messages appear in the outer-most message. + for _, nested := range descs { + for i, enum := range nested.EnumType { + sl = append(sl, newEnumDescriptor(enum, nested, file, i)) + } + } + return sl +} + +// Return a slice of all the top-level ExtensionDescriptors defined within this file. +func wrapExtensions(file *descriptor.FileDescriptorProto) []*ExtensionDescriptor { + var sl []*ExtensionDescriptor + for _, field := range file.Extension { + sl = append(sl, &ExtensionDescriptor{common{file}, field, nil}) + } + return sl +} + +// Return a slice of all the types that are publicly imported into this file. +func wrapImported(file *descriptor.FileDescriptorProto, g *Generator) (sl []*ImportedDescriptor) { + for _, index := range file.PublicDependency { + df := g.fileByName(file.Dependency[index]) + for _, d := range df.desc { + if d.GetOptions().GetMapEntry() { + continue + } + sl = append(sl, &ImportedDescriptor{common{file}, d}) + } + for _, e := range df.enum { + sl = append(sl, &ImportedDescriptor{common{file}, e}) + } + for _, ext := range df.ext { + sl = append(sl, &ImportedDescriptor{common{file}, ext}) + } + } + return +} + +func extractComments(file *FileDescriptor) { + file.comments = make(map[string]*descriptor.SourceCodeInfo_Location) + for _, loc := range file.GetSourceCodeInfo().GetLocation() { + if loc.LeadingComments == nil { + continue + } + var p []string + for _, n := range loc.Path { + p = append(p, strconv.Itoa(int(n))) + } + file.comments[strings.Join(p, ",")] = loc + } +} + +// BuildTypeNameMap builds the map from fully qualified type names to objects. +// The key names for the map come from the input data, which puts a period at the beginning. +// It should be called after SetPackageNames and before GenerateAllFiles. +func (g *Generator) BuildTypeNameMap() { + g.typeNameToObject = make(map[string]Object) + for _, f := range g.allFiles { + // The names in this loop are defined by the proto world, not us, so the + // package name may be empty. If so, the dotted package name of X will + // be ".X"; otherwise it will be ".pkg.X". + dottedPkg := "." + f.GetPackage() + if dottedPkg != "." { + dottedPkg += "." + } + for _, enum := range f.enum { + name := dottedPkg + dottedSlice(enum.TypeName()) + g.typeNameToObject[name] = enum + } + for _, desc := range f.desc { + name := dottedPkg + dottedSlice(desc.TypeName()) + g.typeNameToObject[name] = desc + } + } +} + +// ObjectNamed, given a fully-qualified input type name as it appears in the input data, +// returns the descriptor for the message or enum with that name. +func (g *Generator) ObjectNamed(typeName string) Object { + o, ok := g.typeNameToObject[typeName] + if !ok { + g.Fail("can't find object with type", typeName) + } + + // If the file of this object isn't a direct dependency of the current file, + // or in the current file, then this object has been publicly imported into + // a dependency of the current file. + // We should return the ImportedDescriptor object for it instead. + direct := *o.File().Name == *g.file.Name + if !direct { + for _, dep := range g.file.Dependency { + if *g.fileByName(dep).Name == *o.File().Name { + direct = true + break + } + } + } + if !direct { + found := false + Loop: + for _, dep := range g.file.Dependency { + df := g.fileByName(*g.fileByName(dep).Name) + for _, td := range df.imp { + if td.o == o { + // Found it! + o = td + found = true + break Loop + } + } + } + if !found { + log.Printf("protoc-gen-go: WARNING: failed finding publicly imported dependency for %v, used in %v", typeName, *g.file.Name) + } + } + + return o +} + +// P prints the arguments to the generated output. It handles strings and int32s, plus +// handling indirections because they may be *string, etc. +func (g *Generator) P(str ...interface{}) { + if !g.writeOutput { + return + } + g.WriteString(g.indent) + for _, v := range str { + switch s := v.(type) { + case string: + g.WriteString(s) + case *string: + g.WriteString(*s) + case bool: + fmt.Fprintf(g, "%t", s) + case *bool: + fmt.Fprintf(g, "%t", *s) + case int: + fmt.Fprintf(g, "%d", s) + case *int32: + fmt.Fprintf(g, "%d", *s) + case *int64: + fmt.Fprintf(g, "%d", *s) + case float64: + fmt.Fprintf(g, "%g", s) + case *float64: + fmt.Fprintf(g, "%g", *s) + default: + g.Fail(fmt.Sprintf("unknown type in printer: %T", v)) + } + } + g.WriteByte('\n') +} + +// addInitf stores the given statement to be printed inside the file's init function. +// The statement is given as a format specifier and arguments. +func (g *Generator) addInitf(stmt string, a ...interface{}) { + g.init = append(g.init, fmt.Sprintf(stmt, a...)) +} + +// In Indents the output one tab stop. +func (g *Generator) In() { g.indent += "\t" } + +// Out unindents the output one tab stop. +func (g *Generator) Out() { + if len(g.indent) > 0 { + g.indent = g.indent[1:] + } +} + +// GenerateAllFiles generates the output for all the files we're outputting. +func (g *Generator) GenerateAllFiles() { + // Initialize the plugins + for _, p := range plugins { + p.Init(g) + } + // Generate the output. The generator runs for every file, even the files + // that we don't generate output for, so that we can collate the full list + // of exported symbols to support public imports. + genFileMap := make(map[*FileDescriptor]bool, len(g.genFiles)) + for _, file := range g.genFiles { + genFileMap[file] = true + } + for _, file := range g.allFiles { + g.Reset() + g.writeOutput = genFileMap[file] + g.generate(file) + if !g.writeOutput { + continue + } + g.Response.File = append(g.Response.File, &plugin.CodeGeneratorResponse_File{ + Name: proto.String(file.goFileName()), + Content: proto.String(g.String()), + }) + } +} + +// Run all the plugins associated with the file. +func (g *Generator) runPlugins(file *FileDescriptor) { + for _, p := range plugins { + p.Generate(file) + } +} + +// FileOf return the FileDescriptor for this FileDescriptorProto. +func (g *Generator) FileOf(fd *descriptor.FileDescriptorProto) *FileDescriptor { + for _, file := range g.allFiles { + if file.FileDescriptorProto == fd { + return file + } + } + g.Fail("could not find file in table:", fd.GetName()) + return nil +} + +// Fill the response protocol buffer with the generated output for all the files we're +// supposed to generate. +func (g *Generator) generate(file *FileDescriptor) { + g.file = g.FileOf(file.FileDescriptorProto) + g.usedPackages = make(map[string]bool) + + if g.file.index == 0 { + // For one file in the package, assert version compatibility. + g.P("// This is a compile-time assertion to ensure that this generated file") + g.P("// is compatible with the proto package it is being compiled against.") + g.P("// A compilation error at this line likely means your copy of the") + g.P("// proto package needs to be updated.") + g.P("const _ = ", g.Pkg["proto"], ".ProtoPackageIsVersion", generatedCodeVersion, " // please upgrade the proto package") + g.P() + } + for _, td := range g.file.imp { + g.generateImported(td) + } + for _, enum := range g.file.enum { + g.generateEnum(enum) + } + for _, desc := range g.file.desc { + // Don't generate virtual messages for maps. + if desc.GetOptions().GetMapEntry() { + continue + } + g.generateMessage(desc) + } + for _, ext := range g.file.ext { + g.generateExtension(ext) + } + g.generateInitFunction() + + // Run the plugins before the imports so we know which imports are necessary. + g.runPlugins(file) + + g.generateFileDescriptor(file) + + // Generate header and imports last, though they appear first in the output. + rem := g.Buffer + g.Buffer = new(bytes.Buffer) + g.generateHeader() + g.generateImports() + if !g.writeOutput { + return + } + g.Write(rem.Bytes()) + + // Reformat generated code. + fset := token.NewFileSet() + raw := g.Bytes() + ast, err := parser.ParseFile(fset, "", g, parser.ParseComments) + if err != nil { + // Print out the bad code with line numbers. + // This should never happen in practice, but it can while changing generated code, + // so consider this a debugging aid. + var src bytes.Buffer + s := bufio.NewScanner(bytes.NewReader(raw)) + for line := 1; s.Scan(); line++ { + fmt.Fprintf(&src, "%5d\t%s\n", line, s.Bytes()) + } + g.Fail("bad Go source code was generated:", err.Error(), "\n"+src.String()) + } + g.Reset() + err = (&printer.Config{Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8}).Fprint(g, fset, ast) + if err != nil { + g.Fail("generated Go source code could not be reformatted:", err.Error()) + } +} + +// Generate the header, including package definition +func (g *Generator) generateHeader() { + g.P("// Code generated by protoc-gen-go. DO NOT EDIT.") + g.P("// source: ", g.file.Name) + g.P() + + name := g.file.PackageName() + + if g.file.index == 0 { + // Generate package docs for the first file in the package. + g.P("/*") + g.P("Package ", name, " is a generated protocol buffer package.") + g.P() + if loc, ok := g.file.comments[strconv.Itoa(packagePath)]; ok { + // not using g.PrintComments because this is a /* */ comment block. + text := strings.TrimSuffix(loc.GetLeadingComments(), "\n") + for _, line := range strings.Split(text, "\n") { + line = strings.TrimPrefix(line, " ") + // ensure we don't escape from the block comment + line = strings.Replace(line, "*/", "* /", -1) + g.P(line) + } + g.P() + } + var topMsgs []string + g.P("It is generated from these files:") + for _, f := range g.genFiles { + g.P("\t", f.Name) + for _, msg := range f.desc { + if msg.parent != nil { + continue + } + topMsgs = append(topMsgs, CamelCaseSlice(msg.TypeName())) + } + } + g.P() + g.P("It has these top-level messages:") + for _, msg := range topMsgs { + g.P("\t", msg) + } + g.P("*/") + } + + g.P("package ", name) + g.P() +} + +// PrintComments prints any comments from the source .proto file. +// The path is a comma-separated list of integers. +// It returns an indication of whether any comments were printed. +// See descriptor.proto for its format. +func (g *Generator) PrintComments(path string) bool { + if !g.writeOutput { + return false + } + if loc, ok := g.file.comments[path]; ok { + text := strings.TrimSuffix(loc.GetLeadingComments(), "\n") + for _, line := range strings.Split(text, "\n") { + g.P("// ", strings.TrimPrefix(line, " ")) + } + return true + } + return false +} + +func (g *Generator) fileByName(filename string) *FileDescriptor { + return g.allFilesByName[filename] +} + +// weak returns whether the ith import of the current file is a weak import. +func (g *Generator) weak(i int32) bool { + for _, j := range g.file.WeakDependency { + if j == i { + return true + } + } + return false +} + +// Generate the imports +func (g *Generator) generateImports() { + // We almost always need a proto import. Rather than computing when we + // do, which is tricky when there's a plugin, just import it and + // reference it later. The same argument applies to the fmt and math packages. + g.P("import " + g.Pkg["proto"] + " " + strconv.Quote(g.ImportPrefix+"github.com/golang/protobuf/proto")) + g.P("import " + g.Pkg["fmt"] + ` "fmt"`) + g.P("import " + g.Pkg["math"] + ` "math"`) + for i, s := range g.file.Dependency { + fd := g.fileByName(s) + // Do not import our own package. + if fd.PackageName() == g.packageName { + continue + } + filename := fd.goFileName() + // By default, import path is the dirname of the Go filename. + importPath := path.Dir(filename) + if substitution, ok := g.ImportMap[s]; ok { + importPath = substitution + } + importPath = g.ImportPrefix + importPath + // Skip weak imports. + if g.weak(int32(i)) { + g.P("// skipping weak import ", fd.PackageName(), " ", strconv.Quote(importPath)) + continue + } + // We need to import all the dependencies, even if we don't reference them, + // because other code and tools depend on having the full transitive closure + // of protocol buffer types in the binary. + pname := fd.PackageName() + if _, ok := g.usedPackages[pname]; !ok { + pname = "_" + } + g.P("import ", pname, " ", strconv.Quote(importPath)) + } + g.P() + // TODO: may need to worry about uniqueness across plugins + for _, p := range plugins { + p.GenerateImports(g.file) + g.P() + } + g.P("// Reference imports to suppress errors if they are not otherwise used.") + g.P("var _ = ", g.Pkg["proto"], ".Marshal") + g.P("var _ = ", g.Pkg["fmt"], ".Errorf") + g.P("var _ = ", g.Pkg["math"], ".Inf") + g.P() +} + +func (g *Generator) generateImported(id *ImportedDescriptor) { + // Don't generate public import symbols for files that we are generating + // code for, since those symbols will already be in this package. + // We can't simply avoid creating the ImportedDescriptor objects, + // because g.genFiles isn't populated at that stage. + tn := id.TypeName() + sn := tn[len(tn)-1] + df := g.FileOf(id.o.File()) + filename := *df.Name + for _, fd := range g.genFiles { + if *fd.Name == filename { + g.P("// Ignoring public import of ", sn, " from ", filename) + g.P() + return + } + } + g.P("// ", sn, " from public import ", filename) + g.usedPackages[df.PackageName()] = true + + for _, sym := range df.exported[id.o] { + sym.GenerateAlias(g, df.PackageName()) + } + + g.P() +} + +// Generate the enum definitions for this EnumDescriptor. +func (g *Generator) generateEnum(enum *EnumDescriptor) { + // The full type name + typeName := enum.TypeName() + // The full type name, CamelCased. + ccTypeName := CamelCaseSlice(typeName) + ccPrefix := enum.prefix() + + g.PrintComments(enum.path) + g.P("type ", ccTypeName, " int32") + g.file.addExport(enum, enumSymbol{ccTypeName, enum.proto3()}) + g.P("const (") + g.In() + for i, e := range enum.Value { + g.PrintComments(fmt.Sprintf("%s,%d,%d", enum.path, enumValuePath, i)) + + name := ccPrefix + *e.Name + g.P(name, " ", ccTypeName, " = ", e.Number) + g.file.addExport(enum, constOrVarSymbol{name, "const", ccTypeName}) + } + g.Out() + g.P(")") + g.P("var ", ccTypeName, "_name = map[int32]string{") + g.In() + generated := make(map[int32]bool) // avoid duplicate values + for _, e := range enum.Value { + duplicate := "" + if _, present := generated[*e.Number]; present { + duplicate = "// Duplicate value: " + } + g.P(duplicate, e.Number, ": ", strconv.Quote(*e.Name), ",") + generated[*e.Number] = true + } + g.Out() + g.P("}") + g.P("var ", ccTypeName, "_value = map[string]int32{") + g.In() + for _, e := range enum.Value { + g.P(strconv.Quote(*e.Name), ": ", e.Number, ",") + } + g.Out() + g.P("}") + + if !enum.proto3() { + g.P("func (x ", ccTypeName, ") Enum() *", ccTypeName, " {") + g.In() + g.P("p := new(", ccTypeName, ")") + g.P("*p = x") + g.P("return p") + g.Out() + g.P("}") + } + + g.P("func (x ", ccTypeName, ") String() string {") + g.In() + g.P("return ", g.Pkg["proto"], ".EnumName(", ccTypeName, "_name, int32(x))") + g.Out() + g.P("}") + + if !enum.proto3() { + g.P("func (x *", ccTypeName, ") UnmarshalJSON(data []byte) error {") + g.In() + g.P("value, err := ", g.Pkg["proto"], ".UnmarshalJSONEnum(", ccTypeName, `_value, data, "`, ccTypeName, `")`) + g.P("if err != nil {") + g.In() + g.P("return err") + g.Out() + g.P("}") + g.P("*x = ", ccTypeName, "(value)") + g.P("return nil") + g.Out() + g.P("}") + } + + var indexes []string + for m := enum.parent; m != nil; m = m.parent { + // XXX: skip groups? + indexes = append([]string{strconv.Itoa(m.index)}, indexes...) + } + indexes = append(indexes, strconv.Itoa(enum.index)) + g.P("func (", ccTypeName, ") EnumDescriptor() ([]byte, []int) { return ", g.file.VarName(), ", []int{", strings.Join(indexes, ", "), "} }") + if enum.file.GetPackage() == "google.protobuf" && enum.GetName() == "NullValue" { + g.P("func (", ccTypeName, `) XXX_WellKnownType() string { return "`, enum.GetName(), `" }`) + } + + g.P() +} + +// The tag is a string like "varint,2,opt,name=fieldname,def=7" that +// identifies details of the field for the protocol buffer marshaling and unmarshaling +// code. The fields are: +// wire encoding +// protocol tag number +// opt,req,rep for optional, required, or repeated +// packed whether the encoding is "packed" (optional; repeated primitives only) +// name= the original declared name +// enum= the name of the enum type if it is an enum-typed field. +// proto3 if this field is in a proto3 message +// def= string representation of the default value, if any. +// The default value must be in a representation that can be used at run-time +// to generate the default value. Thus bools become 0 and 1, for instance. +func (g *Generator) goTag(message *Descriptor, field *descriptor.FieldDescriptorProto, wiretype string) string { + optrepreq := "" + switch { + case isOptional(field): + optrepreq = "opt" + case isRequired(field): + optrepreq = "req" + case isRepeated(field): + optrepreq = "rep" + } + var defaultValue string + if dv := field.DefaultValue; dv != nil { // set means an explicit default + defaultValue = *dv + // Some types need tweaking. + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_BOOL: + if defaultValue == "true" { + defaultValue = "1" + } else { + defaultValue = "0" + } + case descriptor.FieldDescriptorProto_TYPE_STRING, + descriptor.FieldDescriptorProto_TYPE_BYTES: + // Nothing to do. Quoting is done for the whole tag. + case descriptor.FieldDescriptorProto_TYPE_ENUM: + // For enums we need to provide the integer constant. + obj := g.ObjectNamed(field.GetTypeName()) + if id, ok := obj.(*ImportedDescriptor); ok { + // It is an enum that was publicly imported. + // We need the underlying type. + obj = id.o + } + enum, ok := obj.(*EnumDescriptor) + if !ok { + log.Printf("obj is a %T", obj) + if id, ok := obj.(*ImportedDescriptor); ok { + log.Printf("id.o is a %T", id.o) + } + g.Fail("unknown enum type", CamelCaseSlice(obj.TypeName())) + } + defaultValue = enum.integerValueAsString(defaultValue) + } + defaultValue = ",def=" + defaultValue + } + enum := "" + if *field.Type == descriptor.FieldDescriptorProto_TYPE_ENUM { + // We avoid using obj.PackageName(), because we want to use the + // original (proto-world) package name. + obj := g.ObjectNamed(field.GetTypeName()) + if id, ok := obj.(*ImportedDescriptor); ok { + obj = id.o + } + enum = ",enum=" + if pkg := obj.File().GetPackage(); pkg != "" { + enum += pkg + "." + } + enum += CamelCaseSlice(obj.TypeName()) + } + packed := "" + if (field.Options != nil && field.Options.GetPacked()) || + // Per https://developers.google.com/protocol-buffers/docs/proto3#simple: + // "In proto3, repeated fields of scalar numeric types use packed encoding by default." + (message.proto3() && (field.Options == nil || field.Options.Packed == nil) && + isRepeated(field) && isScalar(field)) { + packed = ",packed" + } + fieldName := field.GetName() + name := fieldName + if *field.Type == descriptor.FieldDescriptorProto_TYPE_GROUP { + // We must use the type name for groups instead of + // the field name to preserve capitalization. + // type_name in FieldDescriptorProto is fully-qualified, + // but we only want the local part. + name = *field.TypeName + if i := strings.LastIndex(name, "."); i >= 0 { + name = name[i+1:] + } + } + if json := field.GetJsonName(); json != "" && json != name { + // TODO: escaping might be needed, in which case + // perhaps this should be in its own "json" tag. + name += ",json=" + json + } + name = ",name=" + name + if message.proto3() { + // We only need the extra tag for []byte fields; + // no need to add noise for the others. + if *field.Type == descriptor.FieldDescriptorProto_TYPE_BYTES { + name += ",proto3" + } + + } + oneof := "" + if field.OneofIndex != nil { + oneof = ",oneof" + } + return strconv.Quote(fmt.Sprintf("%s,%d,%s%s%s%s%s%s", + wiretype, + field.GetNumber(), + optrepreq, + packed, + name, + enum, + oneof, + defaultValue)) +} + +func needsStar(typ descriptor.FieldDescriptorProto_Type) bool { + switch typ { + case descriptor.FieldDescriptorProto_TYPE_GROUP: + return false + case descriptor.FieldDescriptorProto_TYPE_MESSAGE: + return false + case descriptor.FieldDescriptorProto_TYPE_BYTES: + return false + } + return true +} + +// TypeName is the printed name appropriate for an item. If the object is in the current file, +// TypeName drops the package name and underscores the rest. +// Otherwise the object is from another package; and the result is the underscored +// package name followed by the item name. +// The result always has an initial capital. +func (g *Generator) TypeName(obj Object) string { + return g.DefaultPackageName(obj) + CamelCaseSlice(obj.TypeName()) +} + +// TypeNameWithPackage is like TypeName, but always includes the package +// name even if the object is in our own package. +func (g *Generator) TypeNameWithPackage(obj Object) string { + return obj.PackageName() + CamelCaseSlice(obj.TypeName()) +} + +// GoType returns a string representing the type name, and the wire type +func (g *Generator) GoType(message *Descriptor, field *descriptor.FieldDescriptorProto) (typ string, wire string) { + // TODO: Options. + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_DOUBLE: + typ, wire = "float64", "fixed64" + case descriptor.FieldDescriptorProto_TYPE_FLOAT: + typ, wire = "float32", "fixed32" + case descriptor.FieldDescriptorProto_TYPE_INT64: + typ, wire = "int64", "varint" + case descriptor.FieldDescriptorProto_TYPE_UINT64: + typ, wire = "uint64", "varint" + case descriptor.FieldDescriptorProto_TYPE_INT32: + typ, wire = "int32", "varint" + case descriptor.FieldDescriptorProto_TYPE_UINT32: + typ, wire = "uint32", "varint" + case descriptor.FieldDescriptorProto_TYPE_FIXED64: + typ, wire = "uint64", "fixed64" + case descriptor.FieldDescriptorProto_TYPE_FIXED32: + typ, wire = "uint32", "fixed32" + case descriptor.FieldDescriptorProto_TYPE_BOOL: + typ, wire = "bool", "varint" + case descriptor.FieldDescriptorProto_TYPE_STRING: + typ, wire = "string", "bytes" + case descriptor.FieldDescriptorProto_TYPE_GROUP: + desc := g.ObjectNamed(field.GetTypeName()) + typ, wire = "*"+g.TypeName(desc), "group" + case descriptor.FieldDescriptorProto_TYPE_MESSAGE: + desc := g.ObjectNamed(field.GetTypeName()) + typ, wire = "*"+g.TypeName(desc), "bytes" + case descriptor.FieldDescriptorProto_TYPE_BYTES: + typ, wire = "[]byte", "bytes" + case descriptor.FieldDescriptorProto_TYPE_ENUM: + desc := g.ObjectNamed(field.GetTypeName()) + typ, wire = g.TypeName(desc), "varint" + case descriptor.FieldDescriptorProto_TYPE_SFIXED32: + typ, wire = "int32", "fixed32" + case descriptor.FieldDescriptorProto_TYPE_SFIXED64: + typ, wire = "int64", "fixed64" + case descriptor.FieldDescriptorProto_TYPE_SINT32: + typ, wire = "int32", "zigzag32" + case descriptor.FieldDescriptorProto_TYPE_SINT64: + typ, wire = "int64", "zigzag64" + default: + g.Fail("unknown type for", field.GetName()) + } + if isRepeated(field) { + typ = "[]" + typ + } else if message != nil && message.proto3() { + return + } else if field.OneofIndex != nil && message != nil { + return + } else if needsStar(*field.Type) { + typ = "*" + typ + } + return +} + +func (g *Generator) RecordTypeUse(t string) { + if obj, ok := g.typeNameToObject[t]; ok { + // Call ObjectNamed to get the true object to record the use. + obj = g.ObjectNamed(t) + g.usedPackages[obj.PackageName()] = true + } +} + +// Method names that may be generated. Fields with these names get an +// underscore appended. Any change to this set is a potential incompatible +// API change because it changes generated field names. +var methodNames = [...]string{ + "Reset", + "String", + "ProtoMessage", + "Marshal", + "Unmarshal", + "ExtensionRangeArray", + "ExtensionMap", + "Descriptor", +} + +// Names of messages in the `google.protobuf` package for which +// we will generate XXX_WellKnownType methods. +var wellKnownTypes = map[string]bool{ + "Any": true, + "Duration": true, + "Empty": true, + "Struct": true, + "Timestamp": true, + + "Value": true, + "ListValue": true, + "DoubleValue": true, + "FloatValue": true, + "Int64Value": true, + "UInt64Value": true, + "Int32Value": true, + "UInt32Value": true, + "BoolValue": true, + "StringValue": true, + "BytesValue": true, +} + +// Generate the type and default constant definitions for this Descriptor. +func (g *Generator) generateMessage(message *Descriptor) { + // The full type name + typeName := message.TypeName() + // The full type name, CamelCased. + ccTypeName := CamelCaseSlice(typeName) + + usedNames := make(map[string]bool) + for _, n := range methodNames { + usedNames[n] = true + } + fieldNames := make(map[*descriptor.FieldDescriptorProto]string) + fieldGetterNames := make(map[*descriptor.FieldDescriptorProto]string) + fieldTypes := make(map[*descriptor.FieldDescriptorProto]string) + mapFieldTypes := make(map[*descriptor.FieldDescriptorProto]string) + + oneofFieldName := make(map[int32]string) // indexed by oneof_index field of FieldDescriptorProto + oneofDisc := make(map[int32]string) // name of discriminator method + oneofTypeName := make(map[*descriptor.FieldDescriptorProto]string) // without star + oneofInsertPoints := make(map[int32]int) // oneof_index => offset of g.Buffer + + g.PrintComments(message.path) + g.P("type ", ccTypeName, " struct {") + g.In() + + // allocNames finds a conflict-free variation of the given strings, + // consistently mutating their suffixes. + // It returns the same number of strings. + allocNames := func(ns ...string) []string { + Loop: + for { + for _, n := range ns { + if usedNames[n] { + for i := range ns { + ns[i] += "_" + } + continue Loop + } + } + for _, n := range ns { + usedNames[n] = true + } + return ns + } + } + + for i, field := range message.Field { + // Allocate the getter and the field at the same time so name + // collisions create field/method consistent names. + // TODO: This allocation occurs based on the order of the fields + // in the proto file, meaning that a change in the field + // ordering can change generated Method/Field names. + base := CamelCase(*field.Name) + ns := allocNames(base, "Get"+base) + fieldName, fieldGetterName := ns[0], ns[1] + typename, wiretype := g.GoType(message, field) + jsonName := *field.Name + tag := fmt.Sprintf("protobuf:%s json:%q", g.goTag(message, field, wiretype), jsonName+",omitempty") + + fieldNames[field] = fieldName + fieldGetterNames[field] = fieldGetterName + + oneof := field.OneofIndex != nil + if oneof && oneofFieldName[*field.OneofIndex] == "" { + odp := message.OneofDecl[int(*field.OneofIndex)] + fname := allocNames(CamelCase(odp.GetName()))[0] + + // This is the first field of a oneof we haven't seen before. + // Generate the union field. + com := g.PrintComments(fmt.Sprintf("%s,%d,%d", message.path, messageOneofPath, *field.OneofIndex)) + if com { + g.P("//") + } + g.P("// Types that are valid to be assigned to ", fname, ":") + // Generate the rest of this comment later, + // when we've computed any disambiguation. + oneofInsertPoints[*field.OneofIndex] = g.Buffer.Len() + + dname := "is" + ccTypeName + "_" + fname + oneofFieldName[*field.OneofIndex] = fname + oneofDisc[*field.OneofIndex] = dname + tag := `protobuf_oneof:"` + odp.GetName() + `"` + g.P(fname, " ", dname, " `", tag, "`") + } + + if *field.Type == descriptor.FieldDescriptorProto_TYPE_MESSAGE { + desc := g.ObjectNamed(field.GetTypeName()) + if d, ok := desc.(*Descriptor); ok && d.GetOptions().GetMapEntry() { + // Figure out the Go types and tags for the key and value types. + keyField, valField := d.Field[0], d.Field[1] + keyType, keyWire := g.GoType(d, keyField) + valType, valWire := g.GoType(d, valField) + keyTag, valTag := g.goTag(d, keyField, keyWire), g.goTag(d, valField, valWire) + + // We don't use stars, except for message-typed values. + // Message and enum types are the only two possibly foreign types used in maps, + // so record their use. They are not permitted as map keys. + keyType = strings.TrimPrefix(keyType, "*") + switch *valField.Type { + case descriptor.FieldDescriptorProto_TYPE_ENUM: + valType = strings.TrimPrefix(valType, "*") + g.RecordTypeUse(valField.GetTypeName()) + case descriptor.FieldDescriptorProto_TYPE_MESSAGE: + g.RecordTypeUse(valField.GetTypeName()) + default: + valType = strings.TrimPrefix(valType, "*") + } + + typename = fmt.Sprintf("map[%s]%s", keyType, valType) + mapFieldTypes[field] = typename // record for the getter generation + + tag += fmt.Sprintf(" protobuf_key:%s protobuf_val:%s", keyTag, valTag) + } + } + + fieldTypes[field] = typename + + if oneof { + tname := ccTypeName + "_" + fieldName + // It is possible for this to collide with a message or enum + // nested in this message. Check for collisions. + for { + ok := true + for _, desc := range message.nested { + if CamelCaseSlice(desc.TypeName()) == tname { + ok = false + break + } + } + for _, enum := range message.enums { + if CamelCaseSlice(enum.TypeName()) == tname { + ok = false + break + } + } + if !ok { + tname += "_" + continue + } + break + } + + oneofTypeName[field] = tname + continue + } + + g.PrintComments(fmt.Sprintf("%s,%d,%d", message.path, messageFieldPath, i)) + g.P(fieldName, "\t", typename, "\t`", tag, "`") + g.RecordTypeUse(field.GetTypeName()) + } + if len(message.ExtensionRange) > 0 { + g.P(g.Pkg["proto"], ".XXX_InternalExtensions `json:\"-\"`") + } + if !message.proto3() { + g.P("XXX_unrecognized\t[]byte `json:\"-\"`") + } + g.Out() + g.P("}") + + // Update g.Buffer to list valid oneof types. + // We do this down here, after we've disambiguated the oneof type names. + // We go in reverse order of insertion point to avoid invalidating offsets. + for oi := int32(len(message.OneofDecl)); oi >= 0; oi-- { + ip := oneofInsertPoints[oi] + all := g.Buffer.Bytes() + rem := all[ip:] + g.Buffer = bytes.NewBuffer(all[:ip:ip]) // set cap so we don't scribble on rem + for _, field := range message.Field { + if field.OneofIndex == nil || *field.OneofIndex != oi { + continue + } + g.P("//\t*", oneofTypeName[field]) + } + g.Buffer.Write(rem) + } + + // Reset, String and ProtoMessage methods. + g.P("func (m *", ccTypeName, ") Reset() { *m = ", ccTypeName, "{} }") + g.P("func (m *", ccTypeName, ") String() string { return ", g.Pkg["proto"], ".CompactTextString(m) }") + g.P("func (*", ccTypeName, ") ProtoMessage() {}") + var indexes []string + for m := message; m != nil; m = m.parent { + indexes = append([]string{strconv.Itoa(m.index)}, indexes...) + } + g.P("func (*", ccTypeName, ") Descriptor() ([]byte, []int) { return ", g.file.VarName(), ", []int{", strings.Join(indexes, ", "), "} }") + // TODO: Revisit the decision to use a XXX_WellKnownType method + // if we change proto.MessageName to work with multiple equivalents. + if message.file.GetPackage() == "google.protobuf" && wellKnownTypes[message.GetName()] { + g.P("func (*", ccTypeName, `) XXX_WellKnownType() string { return "`, message.GetName(), `" }`) + } + + // Extension support methods + var hasExtensions, isMessageSet bool + if len(message.ExtensionRange) > 0 { + hasExtensions = true + // message_set_wire_format only makes sense when extensions are defined. + if opts := message.Options; opts != nil && opts.GetMessageSetWireFormat() { + isMessageSet = true + g.P() + g.P("func (m *", ccTypeName, ") Marshal() ([]byte, error) {") + g.In() + g.P("return ", g.Pkg["proto"], ".MarshalMessageSet(&m.XXX_InternalExtensions)") + g.Out() + g.P("}") + g.P("func (m *", ccTypeName, ") Unmarshal(buf []byte) error {") + g.In() + g.P("return ", g.Pkg["proto"], ".UnmarshalMessageSet(buf, &m.XXX_InternalExtensions)") + g.Out() + g.P("}") + g.P("func (m *", ccTypeName, ") MarshalJSON() ([]byte, error) {") + g.In() + g.P("return ", g.Pkg["proto"], ".MarshalMessageSetJSON(&m.XXX_InternalExtensions)") + g.Out() + g.P("}") + g.P("func (m *", ccTypeName, ") UnmarshalJSON(buf []byte) error {") + g.In() + g.P("return ", g.Pkg["proto"], ".UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions)") + g.Out() + g.P("}") + g.P("// ensure ", ccTypeName, " satisfies proto.Marshaler and proto.Unmarshaler") + g.P("var _ ", g.Pkg["proto"], ".Marshaler = (*", ccTypeName, ")(nil)") + g.P("var _ ", g.Pkg["proto"], ".Unmarshaler = (*", ccTypeName, ")(nil)") + } + + g.P() + g.P("var extRange_", ccTypeName, " = []", g.Pkg["proto"], ".ExtensionRange{") + g.In() + for _, r := range message.ExtensionRange { + end := fmt.Sprint(*r.End - 1) // make range inclusive on both ends + g.P("{", r.Start, ", ", end, "},") + } + g.Out() + g.P("}") + g.P("func (*", ccTypeName, ") ExtensionRangeArray() []", g.Pkg["proto"], ".ExtensionRange {") + g.In() + g.P("return extRange_", ccTypeName) + g.Out() + g.P("}") + } + + // Default constants + defNames := make(map[*descriptor.FieldDescriptorProto]string) + for _, field := range message.Field { + def := field.GetDefaultValue() + if def == "" { + continue + } + fieldname := "Default_" + ccTypeName + "_" + CamelCase(*field.Name) + defNames[field] = fieldname + typename, _ := g.GoType(message, field) + if typename[0] == '*' { + typename = typename[1:] + } + kind := "const " + switch { + case typename == "bool": + case typename == "string": + def = strconv.Quote(def) + case typename == "[]byte": + def = "[]byte(" + strconv.Quote(unescape(def)) + ")" + kind = "var " + case def == "inf", def == "-inf", def == "nan": + // These names are known to, and defined by, the protocol language. + switch def { + case "inf": + def = "math.Inf(1)" + case "-inf": + def = "math.Inf(-1)" + case "nan": + def = "math.NaN()" + } + if *field.Type == descriptor.FieldDescriptorProto_TYPE_FLOAT { + def = "float32(" + def + ")" + } + kind = "var " + case *field.Type == descriptor.FieldDescriptorProto_TYPE_ENUM: + // Must be an enum. Need to construct the prefixed name. + obj := g.ObjectNamed(field.GetTypeName()) + var enum *EnumDescriptor + if id, ok := obj.(*ImportedDescriptor); ok { + // The enum type has been publicly imported. + enum, _ = id.o.(*EnumDescriptor) + } else { + enum, _ = obj.(*EnumDescriptor) + } + if enum == nil { + log.Printf("don't know how to generate constant for %s", fieldname) + continue + } + def = g.DefaultPackageName(obj) + enum.prefix() + def + } + g.P(kind, fieldname, " ", typename, " = ", def) + g.file.addExport(message, constOrVarSymbol{fieldname, kind, ""}) + } + g.P() + + // Oneof per-field types, discriminants and getters. + // + // Generate unexported named types for the discriminant interfaces. + // We shouldn't have to do this, but there was (~19 Aug 2015) a compiler/linker bug + // that was triggered by using anonymous interfaces here. + // TODO: Revisit this and consider reverting back to anonymous interfaces. + for oi := range message.OneofDecl { + dname := oneofDisc[int32(oi)] + g.P("type ", dname, " interface { ", dname, "() }") + } + g.P() + for _, field := range message.Field { + if field.OneofIndex == nil { + continue + } + _, wiretype := g.GoType(message, field) + tag := "protobuf:" + g.goTag(message, field, wiretype) + g.P("type ", oneofTypeName[field], " struct{ ", fieldNames[field], " ", fieldTypes[field], " `", tag, "` }") + g.RecordTypeUse(field.GetTypeName()) + } + g.P() + for _, field := range message.Field { + if field.OneofIndex == nil { + continue + } + g.P("func (*", oneofTypeName[field], ") ", oneofDisc[*field.OneofIndex], "() {}") + } + g.P() + for oi := range message.OneofDecl { + fname := oneofFieldName[int32(oi)] + g.P("func (m *", ccTypeName, ") Get", fname, "() ", oneofDisc[int32(oi)], " {") + g.P("if m != nil { return m.", fname, " }") + g.P("return nil") + g.P("}") + } + g.P() + + // Field getters + var getters []getterSymbol + for _, field := range message.Field { + oneof := field.OneofIndex != nil + + fname := fieldNames[field] + typename, _ := g.GoType(message, field) + if t, ok := mapFieldTypes[field]; ok { + typename = t + } + mname := fieldGetterNames[field] + star := "" + if needsStar(*field.Type) && typename[0] == '*' { + typename = typename[1:] + star = "*" + } + + // Only export getter symbols for basic types, + // and for messages and enums in the same package. + // Groups are not exported. + // Foreign types can't be hoisted through a public import because + // the importer may not already be importing the defining .proto. + // As an example, imagine we have an import tree like this: + // A.proto -> B.proto -> C.proto + // If A publicly imports B, we need to generate the getters from B in A's output, + // but if one such getter returns something from C then we cannot do that + // because A is not importing C already. + var getter, genType bool + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_GROUP: + getter = false + case descriptor.FieldDescriptorProto_TYPE_MESSAGE, descriptor.FieldDescriptorProto_TYPE_ENUM: + // Only export getter if its return type is in this package. + getter = g.ObjectNamed(field.GetTypeName()).PackageName() == message.PackageName() + genType = true + default: + getter = true + } + if getter { + getters = append(getters, getterSymbol{ + name: mname, + typ: typename, + typeName: field.GetTypeName(), + genType: genType, + }) + } + + g.P("func (m *", ccTypeName, ") "+mname+"() "+typename+" {") + g.In() + def, hasDef := defNames[field] + typeDefaultIsNil := false // whether this field type's default value is a literal nil unless specified + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_BYTES: + typeDefaultIsNil = !hasDef + case descriptor.FieldDescriptorProto_TYPE_GROUP, descriptor.FieldDescriptorProto_TYPE_MESSAGE: + typeDefaultIsNil = true + } + if isRepeated(field) { + typeDefaultIsNil = true + } + if typeDefaultIsNil && !oneof { + // A bytes field with no explicit default needs less generated code, + // as does a message or group field, or a repeated field. + g.P("if m != nil {") + g.In() + g.P("return m." + fname) + g.Out() + g.P("}") + g.P("return nil") + g.Out() + g.P("}") + g.P() + continue + } + if !oneof { + if message.proto3() { + g.P("if m != nil {") + } else { + g.P("if m != nil && m." + fname + " != nil {") + } + g.In() + g.P("return " + star + "m." + fname) + g.Out() + g.P("}") + } else { + uname := oneofFieldName[*field.OneofIndex] + tname := oneofTypeName[field] + g.P("if x, ok := m.Get", uname, "().(*", tname, "); ok {") + g.P("return x.", fname) + g.P("}") + } + if hasDef { + if *field.Type != descriptor.FieldDescriptorProto_TYPE_BYTES { + g.P("return " + def) + } else { + // The default is a []byte var. + // Make a copy when returning it to be safe. + g.P("return append([]byte(nil), ", def, "...)") + } + } else { + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_BOOL: + g.P("return false") + case descriptor.FieldDescriptorProto_TYPE_STRING: + g.P(`return ""`) + case descriptor.FieldDescriptorProto_TYPE_GROUP, + descriptor.FieldDescriptorProto_TYPE_MESSAGE, + descriptor.FieldDescriptorProto_TYPE_BYTES: + // This is only possible for oneof fields. + g.P("return nil") + case descriptor.FieldDescriptorProto_TYPE_ENUM: + // The default default for an enum is the first value in the enum, + // not zero. + obj := g.ObjectNamed(field.GetTypeName()) + var enum *EnumDescriptor + if id, ok := obj.(*ImportedDescriptor); ok { + // The enum type has been publicly imported. + enum, _ = id.o.(*EnumDescriptor) + } else { + enum, _ = obj.(*EnumDescriptor) + } + if enum == nil { + log.Printf("don't know how to generate getter for %s", field.GetName()) + continue + } + if len(enum.Value) == 0 { + g.P("return 0 // empty enum") + } else { + first := enum.Value[0].GetName() + g.P("return ", g.DefaultPackageName(obj)+enum.prefix()+first) + } + default: + g.P("return 0") + } + } + g.Out() + g.P("}") + g.P() + } + + if !message.group { + ms := &messageSymbol{ + sym: ccTypeName, + hasExtensions: hasExtensions, + isMessageSet: isMessageSet, + hasOneof: len(message.OneofDecl) > 0, + getters: getters, + } + g.file.addExport(message, ms) + } + + // Oneof functions + if len(message.OneofDecl) > 0 { + fieldWire := make(map[*descriptor.FieldDescriptorProto]string) + + // method + enc := "_" + ccTypeName + "_OneofMarshaler" + dec := "_" + ccTypeName + "_OneofUnmarshaler" + size := "_" + ccTypeName + "_OneofSizer" + encSig := "(msg " + g.Pkg["proto"] + ".Message, b *" + g.Pkg["proto"] + ".Buffer) error" + decSig := "(msg " + g.Pkg["proto"] + ".Message, tag, wire int, b *" + g.Pkg["proto"] + ".Buffer) (bool, error)" + sizeSig := "(msg " + g.Pkg["proto"] + ".Message) (n int)" + + g.P("// XXX_OneofFuncs is for the internal use of the proto package.") + g.P("func (*", ccTypeName, ") XXX_OneofFuncs() (func", encSig, ", func", decSig, ", func", sizeSig, ", []interface{}) {") + g.P("return ", enc, ", ", dec, ", ", size, ", []interface{}{") + for _, field := range message.Field { + if field.OneofIndex == nil { + continue + } + g.P("(*", oneofTypeName[field], ")(nil),") + } + g.P("}") + g.P("}") + g.P() + + // marshaler + g.P("func ", enc, encSig, " {") + g.P("m := msg.(*", ccTypeName, ")") + for oi, odp := range message.OneofDecl { + g.P("// ", odp.GetName()) + fname := oneofFieldName[int32(oi)] + g.P("switch x := m.", fname, ".(type) {") + for _, field := range message.Field { + if field.OneofIndex == nil || int(*field.OneofIndex) != oi { + continue + } + g.P("case *", oneofTypeName[field], ":") + var wire, pre, post string + val := "x." + fieldNames[field] // overridden for TYPE_BOOL + canFail := false // only TYPE_MESSAGE and TYPE_GROUP can fail + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_DOUBLE: + wire = "WireFixed64" + pre = "b.EncodeFixed64(" + g.Pkg["math"] + ".Float64bits(" + post = "))" + case descriptor.FieldDescriptorProto_TYPE_FLOAT: + wire = "WireFixed32" + pre = "b.EncodeFixed32(uint64(" + g.Pkg["math"] + ".Float32bits(" + post = ")))" + case descriptor.FieldDescriptorProto_TYPE_INT64, + descriptor.FieldDescriptorProto_TYPE_UINT64: + wire = "WireVarint" + pre, post = "b.EncodeVarint(uint64(", "))" + case descriptor.FieldDescriptorProto_TYPE_INT32, + descriptor.FieldDescriptorProto_TYPE_UINT32, + descriptor.FieldDescriptorProto_TYPE_ENUM: + wire = "WireVarint" + pre, post = "b.EncodeVarint(uint64(", "))" + case descriptor.FieldDescriptorProto_TYPE_FIXED64, + descriptor.FieldDescriptorProto_TYPE_SFIXED64: + wire = "WireFixed64" + pre, post = "b.EncodeFixed64(uint64(", "))" + case descriptor.FieldDescriptorProto_TYPE_FIXED32, + descriptor.FieldDescriptorProto_TYPE_SFIXED32: + wire = "WireFixed32" + pre, post = "b.EncodeFixed32(uint64(", "))" + case descriptor.FieldDescriptorProto_TYPE_BOOL: + // bool needs special handling. + g.P("t := uint64(0)") + g.P("if ", val, " { t = 1 }") + val = "t" + wire = "WireVarint" + pre, post = "b.EncodeVarint(", ")" + case descriptor.FieldDescriptorProto_TYPE_STRING: + wire = "WireBytes" + pre, post = "b.EncodeStringBytes(", ")" + case descriptor.FieldDescriptorProto_TYPE_GROUP: + wire = "WireStartGroup" + pre, post = "b.Marshal(", ")" + canFail = true + case descriptor.FieldDescriptorProto_TYPE_MESSAGE: + wire = "WireBytes" + pre, post = "b.EncodeMessage(", ")" + canFail = true + case descriptor.FieldDescriptorProto_TYPE_BYTES: + wire = "WireBytes" + pre, post = "b.EncodeRawBytes(", ")" + case descriptor.FieldDescriptorProto_TYPE_SINT32: + wire = "WireVarint" + pre, post = "b.EncodeZigzag32(uint64(", "))" + case descriptor.FieldDescriptorProto_TYPE_SINT64: + wire = "WireVarint" + pre, post = "b.EncodeZigzag64(uint64(", "))" + default: + g.Fail("unhandled oneof field type ", field.Type.String()) + } + fieldWire[field] = wire + g.P("b.EncodeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".", wire, ")") + if !canFail { + g.P(pre, val, post) + } else { + g.P("if err := ", pre, val, post, "; err != nil {") + g.P("return err") + g.P("}") + } + if *field.Type == descriptor.FieldDescriptorProto_TYPE_GROUP { + g.P("b.EncodeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".WireEndGroup)") + } + } + g.P("case nil:") + g.P("default: return ", g.Pkg["fmt"], `.Errorf("`, ccTypeName, ".", fname, ` has unexpected type %T", x)`) + g.P("}") + } + g.P("return nil") + g.P("}") + g.P() + + // unmarshaler + g.P("func ", dec, decSig, " {") + g.P("m := msg.(*", ccTypeName, ")") + g.P("switch tag {") + for _, field := range message.Field { + if field.OneofIndex == nil { + continue + } + odp := message.OneofDecl[int(*field.OneofIndex)] + g.P("case ", field.Number, ": // ", odp.GetName(), ".", *field.Name) + g.P("if wire != ", g.Pkg["proto"], ".", fieldWire[field], " {") + g.P("return true, ", g.Pkg["proto"], ".ErrInternalBadWireType") + g.P("}") + lhs := "x, err" // overridden for TYPE_MESSAGE and TYPE_GROUP + var dec, cast, cast2 string + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_DOUBLE: + dec, cast = "b.DecodeFixed64()", g.Pkg["math"]+".Float64frombits" + case descriptor.FieldDescriptorProto_TYPE_FLOAT: + dec, cast, cast2 = "b.DecodeFixed32()", "uint32", g.Pkg["math"]+".Float32frombits" + case descriptor.FieldDescriptorProto_TYPE_INT64: + dec, cast = "b.DecodeVarint()", "int64" + case descriptor.FieldDescriptorProto_TYPE_UINT64: + dec = "b.DecodeVarint()" + case descriptor.FieldDescriptorProto_TYPE_INT32: + dec, cast = "b.DecodeVarint()", "int32" + case descriptor.FieldDescriptorProto_TYPE_FIXED64: + dec = "b.DecodeFixed64()" + case descriptor.FieldDescriptorProto_TYPE_FIXED32: + dec, cast = "b.DecodeFixed32()", "uint32" + case descriptor.FieldDescriptorProto_TYPE_BOOL: + dec = "b.DecodeVarint()" + // handled specially below + case descriptor.FieldDescriptorProto_TYPE_STRING: + dec = "b.DecodeStringBytes()" + case descriptor.FieldDescriptorProto_TYPE_GROUP: + g.P("msg := new(", fieldTypes[field][1:], ")") // drop star + lhs = "err" + dec = "b.DecodeGroup(msg)" + // handled specially below + case descriptor.FieldDescriptorProto_TYPE_MESSAGE: + g.P("msg := new(", fieldTypes[field][1:], ")") // drop star + lhs = "err" + dec = "b.DecodeMessage(msg)" + // handled specially below + case descriptor.FieldDescriptorProto_TYPE_BYTES: + dec = "b.DecodeRawBytes(true)" + case descriptor.FieldDescriptorProto_TYPE_UINT32: + dec, cast = "b.DecodeVarint()", "uint32" + case descriptor.FieldDescriptorProto_TYPE_ENUM: + dec, cast = "b.DecodeVarint()", fieldTypes[field] + case descriptor.FieldDescriptorProto_TYPE_SFIXED32: + dec, cast = "b.DecodeFixed32()", "int32" + case descriptor.FieldDescriptorProto_TYPE_SFIXED64: + dec, cast = "b.DecodeFixed64()", "int64" + case descriptor.FieldDescriptorProto_TYPE_SINT32: + dec, cast = "b.DecodeZigzag32()", "int32" + case descriptor.FieldDescriptorProto_TYPE_SINT64: + dec, cast = "b.DecodeZigzag64()", "int64" + default: + g.Fail("unhandled oneof field type ", field.Type.String()) + } + g.P(lhs, " := ", dec) + val := "x" + if cast != "" { + val = cast + "(" + val + ")" + } + if cast2 != "" { + val = cast2 + "(" + val + ")" + } + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_BOOL: + val += " != 0" + case descriptor.FieldDescriptorProto_TYPE_GROUP, + descriptor.FieldDescriptorProto_TYPE_MESSAGE: + val = "msg" + } + g.P("m.", oneofFieldName[*field.OneofIndex], " = &", oneofTypeName[field], "{", val, "}") + g.P("return true, err") + } + g.P("default: return false, nil") + g.P("}") + g.P("}") + g.P() + + // sizer + g.P("func ", size, sizeSig, " {") + g.P("m := msg.(*", ccTypeName, ")") + for oi, odp := range message.OneofDecl { + g.P("// ", odp.GetName()) + fname := oneofFieldName[int32(oi)] + g.P("switch x := m.", fname, ".(type) {") + for _, field := range message.Field { + if field.OneofIndex == nil || int(*field.OneofIndex) != oi { + continue + } + g.P("case *", oneofTypeName[field], ":") + val := "x." + fieldNames[field] + var wire, varint, fixed string + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_DOUBLE: + wire = "WireFixed64" + fixed = "8" + case descriptor.FieldDescriptorProto_TYPE_FLOAT: + wire = "WireFixed32" + fixed = "4" + case descriptor.FieldDescriptorProto_TYPE_INT64, + descriptor.FieldDescriptorProto_TYPE_UINT64, + descriptor.FieldDescriptorProto_TYPE_INT32, + descriptor.FieldDescriptorProto_TYPE_UINT32, + descriptor.FieldDescriptorProto_TYPE_ENUM: + wire = "WireVarint" + varint = val + case descriptor.FieldDescriptorProto_TYPE_FIXED64, + descriptor.FieldDescriptorProto_TYPE_SFIXED64: + wire = "WireFixed64" + fixed = "8" + case descriptor.FieldDescriptorProto_TYPE_FIXED32, + descriptor.FieldDescriptorProto_TYPE_SFIXED32: + wire = "WireFixed32" + fixed = "4" + case descriptor.FieldDescriptorProto_TYPE_BOOL: + wire = "WireVarint" + fixed = "1" + case descriptor.FieldDescriptorProto_TYPE_STRING: + wire = "WireBytes" + fixed = "len(" + val + ")" + varint = fixed + case descriptor.FieldDescriptorProto_TYPE_GROUP: + wire = "WireStartGroup" + fixed = g.Pkg["proto"] + ".Size(" + val + ")" + case descriptor.FieldDescriptorProto_TYPE_MESSAGE: + wire = "WireBytes" + g.P("s := ", g.Pkg["proto"], ".Size(", val, ")") + fixed = "s" + varint = fixed + case descriptor.FieldDescriptorProto_TYPE_BYTES: + wire = "WireBytes" + fixed = "len(" + val + ")" + varint = fixed + case descriptor.FieldDescriptorProto_TYPE_SINT32: + wire = "WireVarint" + varint = "(uint32(" + val + ") << 1) ^ uint32((int32(" + val + ") >> 31))" + case descriptor.FieldDescriptorProto_TYPE_SINT64: + wire = "WireVarint" + varint = "uint64(" + val + " << 1) ^ uint64((int64(" + val + ") >> 63))" + default: + g.Fail("unhandled oneof field type ", field.Type.String()) + } + g.P("n += ", g.Pkg["proto"], ".SizeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".", wire, ")") + if varint != "" { + g.P("n += ", g.Pkg["proto"], ".SizeVarint(uint64(", varint, "))") + } + if fixed != "" { + g.P("n += ", fixed) + } + if *field.Type == descriptor.FieldDescriptorProto_TYPE_GROUP { + g.P("n += ", g.Pkg["proto"], ".SizeVarint(", field.Number, "<<3|", g.Pkg["proto"], ".WireEndGroup)") + } + } + g.P("case nil:") + g.P("default:") + g.P("panic(", g.Pkg["fmt"], ".Sprintf(\"proto: unexpected type %T in oneof\", x))") + g.P("}") + } + g.P("return n") + g.P("}") + g.P() + } + + for _, ext := range message.ext { + g.generateExtension(ext) + } + + fullName := strings.Join(message.TypeName(), ".") + if g.file.Package != nil { + fullName = *g.file.Package + "." + fullName + } + + g.addInitf("%s.RegisterType((*%s)(nil), %q)", g.Pkg["proto"], ccTypeName, fullName) +} + +var escapeChars = [256]byte{ + 'a': '\a', 'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t', 'v': '\v', '\\': '\\', '"': '"', '\'': '\'', '?': '?', +} + +// unescape reverses the "C" escaping that protoc does for default values of bytes fields. +// It is best effort in that it effectively ignores malformed input. Seemingly invalid escape +// sequences are conveyed, unmodified, into the decoded result. +func unescape(s string) string { + // NB: Sadly, we can't use strconv.Unquote because protoc will escape both + // single and double quotes, but strconv.Unquote only allows one or the + // other (based on actual surrounding quotes of its input argument). + + var out []byte + for len(s) > 0 { + // regular character, or too short to be valid escape + if s[0] != '\\' || len(s) < 2 { + out = append(out, s[0]) + s = s[1:] + } else if c := escapeChars[s[1]]; c != 0 { + // escape sequence + out = append(out, c) + s = s[2:] + } else if s[1] == 'x' || s[1] == 'X' { + // hex escape, e.g. "\x80 + if len(s) < 4 { + // too short to be valid + out = append(out, s[:2]...) + s = s[2:] + continue + } + v, err := strconv.ParseUint(s[2:4], 16, 8) + if err != nil { + out = append(out, s[:4]...) + } else { + out = append(out, byte(v)) + } + s = s[4:] + } else if '0' <= s[1] && s[1] <= '7' { + // octal escape, can vary from 1 to 3 octal digits; e.g., "\0" "\40" or "\164" + // so consume up to 2 more bytes or up to end-of-string + n := len(s[1:]) - len(strings.TrimLeft(s[1:], "01234567")) + if n > 3 { + n = 3 + } + v, err := strconv.ParseUint(s[1:1+n], 8, 8) + if err != nil { + out = append(out, s[:1+n]...) + } else { + out = append(out, byte(v)) + } + s = s[1+n:] + } else { + // bad escape, just propagate the slash as-is + out = append(out, s[0]) + s = s[1:] + } + } + + return string(out) +} + +func (g *Generator) generateExtension(ext *ExtensionDescriptor) { + ccTypeName := ext.DescName() + + extObj := g.ObjectNamed(*ext.Extendee) + var extDesc *Descriptor + if id, ok := extObj.(*ImportedDescriptor); ok { + // This is extending a publicly imported message. + // We need the underlying type for goTag. + extDesc = id.o.(*Descriptor) + } else { + extDesc = extObj.(*Descriptor) + } + extendedType := "*" + g.TypeName(extObj) // always use the original + field := ext.FieldDescriptorProto + fieldType, wireType := g.GoType(ext.parent, field) + tag := g.goTag(extDesc, field, wireType) + g.RecordTypeUse(*ext.Extendee) + if n := ext.FieldDescriptorProto.TypeName; n != nil { + // foreign extension type + g.RecordTypeUse(*n) + } + + typeName := ext.TypeName() + + // Special case for proto2 message sets: If this extension is extending + // proto2_bridge.MessageSet, and its final name component is "message_set_extension", + // then drop that last component. + mset := false + if extendedType == "*proto2_bridge.MessageSet" && typeName[len(typeName)-1] == "message_set_extension" { + typeName = typeName[:len(typeName)-1] + mset = true + } + + // For text formatting, the package must be exactly what the .proto file declares, + // ignoring overrides such as the go_package option, and with no dot/underscore mapping. + extName := strings.Join(typeName, ".") + if g.file.Package != nil { + extName = *g.file.Package + "." + extName + } + + g.P("var ", ccTypeName, " = &", g.Pkg["proto"], ".ExtensionDesc{") + g.In() + g.P("ExtendedType: (", extendedType, ")(nil),") + g.P("ExtensionType: (", fieldType, ")(nil),") + g.P("Field: ", field.Number, ",") + g.P(`Name: "`, extName, `",`) + g.P("Tag: ", tag, ",") + g.P(`Filename: "`, g.file.GetName(), `",`) + + g.Out() + g.P("}") + g.P() + + if mset { + // Generate a bit more code to register with message_set.go. + g.addInitf("%s.RegisterMessageSetType((%s)(nil), %d, %q)", g.Pkg["proto"], fieldType, *field.Number, extName) + } + + g.file.addExport(ext, constOrVarSymbol{ccTypeName, "var", ""}) +} + +func (g *Generator) generateInitFunction() { + for _, enum := range g.file.enum { + g.generateEnumRegistration(enum) + } + for _, d := range g.file.desc { + for _, ext := range d.ext { + g.generateExtensionRegistration(ext) + } + } + for _, ext := range g.file.ext { + g.generateExtensionRegistration(ext) + } + if len(g.init) == 0 { + return + } + g.P("func init() {") + g.In() + for _, l := range g.init { + g.P(l) + } + g.Out() + g.P("}") + g.init = nil +} + +func (g *Generator) generateFileDescriptor(file *FileDescriptor) { + // Make a copy and trim source_code_info data. + // TODO: Trim this more when we know exactly what we need. + pb := proto.Clone(file.FileDescriptorProto).(*descriptor.FileDescriptorProto) + pb.SourceCodeInfo = nil + + b, err := proto.Marshal(pb) + if err != nil { + g.Fail(err.Error()) + } + + var buf bytes.Buffer + w, _ := gzip.NewWriterLevel(&buf, gzip.BestCompression) + w.Write(b) + w.Close() + b = buf.Bytes() + + v := file.VarName() + g.P() + g.P("func init() { ", g.Pkg["proto"], ".RegisterFile(", strconv.Quote(*file.Name), ", ", v, ") }") + g.P("var ", v, " = []byte{") + g.In() + g.P("// ", len(b), " bytes of a gzipped FileDescriptorProto") + for len(b) > 0 { + n := 16 + if n > len(b) { + n = len(b) + } + + s := "" + for _, c := range b[:n] { + s += fmt.Sprintf("0x%02x,", c) + } + g.P(s) + + b = b[n:] + } + g.Out() + g.P("}") +} + +func (g *Generator) generateEnumRegistration(enum *EnumDescriptor) { + // // We always print the full (proto-world) package name here. + pkg := enum.File().GetPackage() + if pkg != "" { + pkg += "." + } + // The full type name + typeName := enum.TypeName() + // The full type name, CamelCased. + ccTypeName := CamelCaseSlice(typeName) + g.addInitf("%s.RegisterEnum(%q, %[3]s_name, %[3]s_value)", g.Pkg["proto"], pkg+ccTypeName, ccTypeName) +} + +func (g *Generator) generateExtensionRegistration(ext *ExtensionDescriptor) { + g.addInitf("%s.RegisterExtension(%s)", g.Pkg["proto"], ext.DescName()) +} + +// And now lots of helper functions. + +// Is c an ASCII lower-case letter? +func isASCIILower(c byte) bool { + return 'a' <= c && c <= 'z' +} + +// Is c an ASCII digit? +func isASCIIDigit(c byte) bool { + return '0' <= c && c <= '9' +} + +// CamelCase returns the CamelCased name. +// If there is an interior underscore followed by a lower case letter, +// drop the underscore and convert the letter to upper case. +// There is a remote possibility of this rewrite causing a name collision, +// but it's so remote we're prepared to pretend it's nonexistent - since the +// C++ generator lowercases names, it's extremely unlikely to have two fields +// with different capitalizations. +// In short, _my_field_name_2 becomes XMyFieldName_2. +func CamelCase(s string) string { + if s == "" { + return "" + } + t := make([]byte, 0, 32) + i := 0 + if s[0] == '_' { + // Need a capital letter; drop the '_'. + t = append(t, 'X') + i++ + } + // Invariant: if the next letter is lower case, it must be converted + // to upper case. + // That is, we process a word at a time, where words are marked by _ or + // upper case letter. Digits are treated as words. + for ; i < len(s); i++ { + c := s[i] + if c == '_' && i+1 < len(s) && isASCIILower(s[i+1]) { + continue // Skip the underscore in s. + } + if isASCIIDigit(c) { + t = append(t, c) + continue + } + // Assume we have a letter now - if not, it's a bogus identifier. + // The next word is a sequence of characters that must start upper case. + if isASCIILower(c) { + c ^= ' ' // Make it a capital letter. + } + t = append(t, c) // Guaranteed not lower case. + // Accept lower case sequence that follows. + for i+1 < len(s) && isASCIILower(s[i+1]) { + i++ + t = append(t, s[i]) + } + } + return string(t) +} + +// CamelCaseSlice is like CamelCase, but the argument is a slice of strings to +// be joined with "_". +func CamelCaseSlice(elem []string) string { return CamelCase(strings.Join(elem, "_")) } + +// dottedSlice turns a sliced name into a dotted name. +func dottedSlice(elem []string) string { return strings.Join(elem, ".") } + +// Is this field optional? +func isOptional(field *descriptor.FieldDescriptorProto) bool { + return field.Label != nil && *field.Label == descriptor.FieldDescriptorProto_LABEL_OPTIONAL +} + +// Is this field required? +func isRequired(field *descriptor.FieldDescriptorProto) bool { + return field.Label != nil && *field.Label == descriptor.FieldDescriptorProto_LABEL_REQUIRED +} + +// Is this field repeated? +func isRepeated(field *descriptor.FieldDescriptorProto) bool { + return field.Label != nil && *field.Label == descriptor.FieldDescriptorProto_LABEL_REPEATED +} + +// Is this field a scalar numeric type? +func isScalar(field *descriptor.FieldDescriptorProto) bool { + if field.Type == nil { + return false + } + switch *field.Type { + case descriptor.FieldDescriptorProto_TYPE_DOUBLE, + descriptor.FieldDescriptorProto_TYPE_FLOAT, + descriptor.FieldDescriptorProto_TYPE_INT64, + descriptor.FieldDescriptorProto_TYPE_UINT64, + descriptor.FieldDescriptorProto_TYPE_INT32, + descriptor.FieldDescriptorProto_TYPE_FIXED64, + descriptor.FieldDescriptorProto_TYPE_FIXED32, + descriptor.FieldDescriptorProto_TYPE_BOOL, + descriptor.FieldDescriptorProto_TYPE_UINT32, + descriptor.FieldDescriptorProto_TYPE_ENUM, + descriptor.FieldDescriptorProto_TYPE_SFIXED32, + descriptor.FieldDescriptorProto_TYPE_SFIXED64, + descriptor.FieldDescriptorProto_TYPE_SINT32, + descriptor.FieldDescriptorProto_TYPE_SINT64: + return true + default: + return false + } +} + +// badToUnderscore is the mapping function used to generate Go names from package names, +// which can be dotted in the input .proto file. It replaces non-identifier characters such as +// dot or dash with underscore. +func badToUnderscore(r rune) rune { + if unicode.IsLetter(r) || unicode.IsDigit(r) || r == '_' { + return r + } + return '_' +} + +// baseName returns the last path element of the name, with the last dotted suffix removed. +func baseName(name string) string { + // First, find the last element + if i := strings.LastIndex(name, "/"); i >= 0 { + name = name[i+1:] + } + // Now drop the suffix + if i := strings.LastIndex(name, "."); i >= 0 { + name = name[0:i] + } + return name +} + +// The SourceCodeInfo message describes the location of elements of a parsed +// .proto file by way of a "path", which is a sequence of integers that +// describe the route from a FileDescriptorProto to the relevant submessage. +// The path alternates between a field number of a repeated field, and an index +// into that repeated field. The constants below define the field numbers that +// are used. +// +// See descriptor.proto for more information about this. +const ( + // tag numbers in FileDescriptorProto + packagePath = 2 // package + messagePath = 4 // message_type + enumPath = 5 // enum_type + // tag numbers in DescriptorProto + messageFieldPath = 2 // field + messageMessagePath = 3 // nested_type + messageEnumPath = 4 // enum_type + messageOneofPath = 8 // oneof_decl + // tag numbers in EnumDescriptorProto + enumValuePath = 2 // value +) diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go new file mode 100644 index 0000000..76808f3 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/generator/name_test.go @@ -0,0 +1,114 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2013 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package generator + +import ( + "testing" + + "github.com/golang/protobuf/protoc-gen-go/descriptor" +) + +func TestCamelCase(t *testing.T) { + tests := []struct { + in, want string + }{ + {"one", "One"}, + {"one_two", "OneTwo"}, + {"_my_field_name_2", "XMyFieldName_2"}, + {"Something_Capped", "Something_Capped"}, + {"my_Name", "My_Name"}, + {"OneTwo", "OneTwo"}, + {"_", "X"}, + {"_a_", "XA_"}, + } + for _, tc := range tests { + if got := CamelCase(tc.in); got != tc.want { + t.Errorf("CamelCase(%q) = %q, want %q", tc.in, got, tc.want) + } + } +} + +func TestGoPackageOption(t *testing.T) { + tests := []struct { + in string + impPath, pkg string + ok bool + }{ + {"", "", "", false}, + {"foo", "", "foo", true}, + {"github.com/golang/bar", "github.com/golang/bar", "bar", true}, + {"github.com/golang/bar;baz", "github.com/golang/bar", "baz", true}, + } + for _, tc := range tests { + d := &FileDescriptor{ + FileDescriptorProto: &descriptor.FileDescriptorProto{ + Options: &descriptor.FileOptions{ + GoPackage: &tc.in, + }, + }, + } + impPath, pkg, ok := d.goPackageOption() + if impPath != tc.impPath || pkg != tc.pkg || ok != tc.ok { + t.Errorf("go_package = %q => (%q, %q, %t), want (%q, %q, %t)", tc.in, + impPath, pkg, ok, tc.impPath, tc.pkg, tc.ok) + } + } +} + +func TestUnescape(t *testing.T) { + tests := []struct { + in string + out string + }{ + // successful cases, including all kinds of escapes + {"", ""}, + {"foo bar baz frob nitz", "foo bar baz frob nitz"}, + {`\000\001\002\003\004\005\006\007`, string([]byte{0, 1, 2, 3, 4, 5, 6, 7})}, + {`\a\b\f\n\r\t\v\\\?\'\"`, string([]byte{'\a', '\b', '\f', '\n', '\r', '\t', '\v', '\\', '?', '\'', '"'})}, + {`\x10\x20\x30\x40\x50\x60\x70\x80`, string([]byte{16, 32, 48, 64, 80, 96, 112, 128})}, + // variable length octal escapes + {`\0\018\222\377\3\04\005\6\07`, string([]byte{0, 1, '8', 0222, 255, 3, 4, 5, 6, 7})}, + // malformed escape sequences left as is + {"foo \\g bar", "foo \\g bar"}, + {"foo \\xg0 bar", "foo \\xg0 bar"}, + {"\\", "\\"}, + {"\\x", "\\x"}, + {"\\xf", "\\xf"}, + {"\\777", "\\777"}, // overflows byte + } + for _, tc := range tests { + s := unescape(tc.in) + if s != tc.out { + t.Errorf("doUnescape(%q) = %q; should have been %q", tc.in, s, tc.out) + } + } +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go b/vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go new file mode 100644 index 0000000..2660e47 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/grpc/grpc.go @@ -0,0 +1,463 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2015 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Package grpc outputs gRPC service descriptions in Go code. +// It runs as a plugin for the Go protocol buffer compiler plugin. +// It is linked in to protoc-gen-go. +package grpc + +import ( + "fmt" + "path" + "strconv" + "strings" + + pb "github.com/golang/protobuf/protoc-gen-go/descriptor" + "github.com/golang/protobuf/protoc-gen-go/generator" +) + +// generatedCodeVersion indicates a version of the generated code. +// It is incremented whenever an incompatibility between the generated code and +// the grpc package is introduced; the generated code references +// a constant, grpc.SupportPackageIsVersionN (where N is generatedCodeVersion). +const generatedCodeVersion = 4 + +// Paths for packages used by code generated in this file, +// relative to the import_prefix of the generator.Generator. +const ( + contextPkgPath = "golang.org/x/net/context" + grpcPkgPath = "google.golang.org/grpc" +) + +func init() { + generator.RegisterPlugin(new(grpc)) +} + +// grpc is an implementation of the Go protocol buffer compiler's +// plugin architecture. It generates bindings for gRPC support. +type grpc struct { + gen *generator.Generator +} + +// Name returns the name of this plugin, "grpc". +func (g *grpc) Name() string { + return "grpc" +} + +// The names for packages imported in the generated code. +// They may vary from the final path component of the import path +// if the name is used by other packages. +var ( + contextPkg string + grpcPkg string +) + +// Init initializes the plugin. +func (g *grpc) Init(gen *generator.Generator) { + g.gen = gen + contextPkg = generator.RegisterUniquePackageName("context", nil) + grpcPkg = generator.RegisterUniquePackageName("grpc", nil) +} + +// Given a type name defined in a .proto, return its object. +// Also record that we're using it, to guarantee the associated import. +func (g *grpc) objectNamed(name string) generator.Object { + g.gen.RecordTypeUse(name) + return g.gen.ObjectNamed(name) +} + +// Given a type name defined in a .proto, return its name as we will print it. +func (g *grpc) typeName(str string) string { + return g.gen.TypeName(g.objectNamed(str)) +} + +// P forwards to g.gen.P. +func (g *grpc) P(args ...interface{}) { g.gen.P(args...) } + +// Generate generates code for the services in the given file. +func (g *grpc) Generate(file *generator.FileDescriptor) { + if len(file.FileDescriptorProto.Service) == 0 { + return + } + + g.P("// Reference imports to suppress errors if they are not otherwise used.") + g.P("var _ ", contextPkg, ".Context") + g.P("var _ ", grpcPkg, ".ClientConn") + g.P() + + // Assert version compatibility. + g.P("// This is a compile-time assertion to ensure that this generated file") + g.P("// is compatible with the grpc package it is being compiled against.") + g.P("const _ = ", grpcPkg, ".SupportPackageIsVersion", generatedCodeVersion) + g.P() + + for i, service := range file.FileDescriptorProto.Service { + g.generateService(file, service, i) + } +} + +// GenerateImports generates the import declaration for this file. +func (g *grpc) GenerateImports(file *generator.FileDescriptor) { + if len(file.FileDescriptorProto.Service) == 0 { + return + } + g.P("import (") + g.P(contextPkg, " ", strconv.Quote(path.Join(g.gen.ImportPrefix, contextPkgPath))) + g.P(grpcPkg, " ", strconv.Quote(path.Join(g.gen.ImportPrefix, grpcPkgPath))) + g.P(")") + g.P() +} + +// reservedClientName records whether a client name is reserved on the client side. +var reservedClientName = map[string]bool{ +// TODO: do we need any in gRPC? +} + +func unexport(s string) string { return strings.ToLower(s[:1]) + s[1:] } + +// generateService generates all the code for the named service. +func (g *grpc) generateService(file *generator.FileDescriptor, service *pb.ServiceDescriptorProto, index int) { + path := fmt.Sprintf("6,%d", index) // 6 means service. + + origServName := service.GetName() + fullServName := origServName + if pkg := file.GetPackage(); pkg != "" { + fullServName = pkg + "." + fullServName + } + servName := generator.CamelCase(origServName) + + g.P() + g.P("// Client API for ", servName, " service") + g.P() + + // Client interface. + g.P("type ", servName, "Client interface {") + for i, method := range service.Method { + g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service. + g.P(g.generateClientSignature(servName, method)) + } + g.P("}") + g.P() + + // Client structure. + g.P("type ", unexport(servName), "Client struct {") + g.P("cc *", grpcPkg, ".ClientConn") + g.P("}") + g.P() + + // NewClient factory. + g.P("func New", servName, "Client (cc *", grpcPkg, ".ClientConn) ", servName, "Client {") + g.P("return &", unexport(servName), "Client{cc}") + g.P("}") + g.P() + + var methodIndex, streamIndex int + serviceDescVar := "_" + servName + "_serviceDesc" + // Client method implementations. + for _, method := range service.Method { + var descExpr string + if !method.GetServerStreaming() && !method.GetClientStreaming() { + // Unary RPC method + descExpr = fmt.Sprintf("&%s.Methods[%d]", serviceDescVar, methodIndex) + methodIndex++ + } else { + // Streaming RPC method + descExpr = fmt.Sprintf("&%s.Streams[%d]", serviceDescVar, streamIndex) + streamIndex++ + } + g.generateClientMethod(servName, fullServName, serviceDescVar, method, descExpr) + } + + g.P("// Server API for ", servName, " service") + g.P() + + // Server interface. + serverType := servName + "Server" + g.P("type ", serverType, " interface {") + for i, method := range service.Method { + g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service. + g.P(g.generateServerSignature(servName, method)) + } + g.P("}") + g.P() + + // Server registration. + g.P("func Register", servName, "Server(s *", grpcPkg, ".Server, srv ", serverType, ") {") + g.P("s.RegisterService(&", serviceDescVar, `, srv)`) + g.P("}") + g.P() + + // Server handler implementations. + var handlerNames []string + for _, method := range service.Method { + hname := g.generateServerMethod(servName, fullServName, method) + handlerNames = append(handlerNames, hname) + } + + // Service descriptor. + g.P("var ", serviceDescVar, " = ", grpcPkg, ".ServiceDesc {") + g.P("ServiceName: ", strconv.Quote(fullServName), ",") + g.P("HandlerType: (*", serverType, ")(nil),") + g.P("Methods: []", grpcPkg, ".MethodDesc{") + for i, method := range service.Method { + if method.GetServerStreaming() || method.GetClientStreaming() { + continue + } + g.P("{") + g.P("MethodName: ", strconv.Quote(method.GetName()), ",") + g.P("Handler: ", handlerNames[i], ",") + g.P("},") + } + g.P("},") + g.P("Streams: []", grpcPkg, ".StreamDesc{") + for i, method := range service.Method { + if !method.GetServerStreaming() && !method.GetClientStreaming() { + continue + } + g.P("{") + g.P("StreamName: ", strconv.Quote(method.GetName()), ",") + g.P("Handler: ", handlerNames[i], ",") + if method.GetServerStreaming() { + g.P("ServerStreams: true,") + } + if method.GetClientStreaming() { + g.P("ClientStreams: true,") + } + g.P("},") + } + g.P("},") + g.P("Metadata: \"", file.GetName(), "\",") + g.P("}") + g.P() +} + +// generateClientSignature returns the client-side signature for a method. +func (g *grpc) generateClientSignature(servName string, method *pb.MethodDescriptorProto) string { + origMethName := method.GetName() + methName := generator.CamelCase(origMethName) + if reservedClientName[methName] { + methName += "_" + } + reqArg := ", in *" + g.typeName(method.GetInputType()) + if method.GetClientStreaming() { + reqArg = "" + } + respName := "*" + g.typeName(method.GetOutputType()) + if method.GetServerStreaming() || method.GetClientStreaming() { + respName = servName + "_" + generator.CamelCase(origMethName) + "Client" + } + return fmt.Sprintf("%s(ctx %s.Context%s, opts ...%s.CallOption) (%s, error)", methName, contextPkg, reqArg, grpcPkg, respName) +} + +func (g *grpc) generateClientMethod(servName, fullServName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string) { + sname := fmt.Sprintf("/%s/%s", fullServName, method.GetName()) + methName := generator.CamelCase(method.GetName()) + inType := g.typeName(method.GetInputType()) + outType := g.typeName(method.GetOutputType()) + + g.P("func (c *", unexport(servName), "Client) ", g.generateClientSignature(servName, method), "{") + if !method.GetServerStreaming() && !method.GetClientStreaming() { + g.P("out := new(", outType, ")") + // TODO: Pass descExpr to Invoke. + g.P("err := ", grpcPkg, `.Invoke(ctx, "`, sname, `", in, out, c.cc, opts...)`) + g.P("if err != nil { return nil, err }") + g.P("return out, nil") + g.P("}") + g.P() + return + } + streamType := unexport(servName) + methName + "Client" + g.P("stream, err := ", grpcPkg, ".NewClientStream(ctx, ", descExpr, `, c.cc, "`, sname, `", opts...)`) + g.P("if err != nil { return nil, err }") + g.P("x := &", streamType, "{stream}") + if !method.GetClientStreaming() { + g.P("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }") + g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }") + } + g.P("return x, nil") + g.P("}") + g.P() + + genSend := method.GetClientStreaming() + genRecv := method.GetServerStreaming() + genCloseAndRecv := !method.GetServerStreaming() + + // Stream auxiliary types and methods. + g.P("type ", servName, "_", methName, "Client interface {") + if genSend { + g.P("Send(*", inType, ") error") + } + if genRecv { + g.P("Recv() (*", outType, ", error)") + } + if genCloseAndRecv { + g.P("CloseAndRecv() (*", outType, ", error)") + } + g.P(grpcPkg, ".ClientStream") + g.P("}") + g.P() + + g.P("type ", streamType, " struct {") + g.P(grpcPkg, ".ClientStream") + g.P("}") + g.P() + + if genSend { + g.P("func (x *", streamType, ") Send(m *", inType, ") error {") + g.P("return x.ClientStream.SendMsg(m)") + g.P("}") + g.P() + } + if genRecv { + g.P("func (x *", streamType, ") Recv() (*", outType, ", error) {") + g.P("m := new(", outType, ")") + g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }") + g.P("return m, nil") + g.P("}") + g.P() + } + if genCloseAndRecv { + g.P("func (x *", streamType, ") CloseAndRecv() (*", outType, ", error) {") + g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }") + g.P("m := new(", outType, ")") + g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }") + g.P("return m, nil") + g.P("}") + g.P() + } +} + +// generateServerSignature returns the server-side signature for a method. +func (g *grpc) generateServerSignature(servName string, method *pb.MethodDescriptorProto) string { + origMethName := method.GetName() + methName := generator.CamelCase(origMethName) + if reservedClientName[methName] { + methName += "_" + } + + var reqArgs []string + ret := "error" + if !method.GetServerStreaming() && !method.GetClientStreaming() { + reqArgs = append(reqArgs, contextPkg+".Context") + ret = "(*" + g.typeName(method.GetOutputType()) + ", error)" + } + if !method.GetClientStreaming() { + reqArgs = append(reqArgs, "*"+g.typeName(method.GetInputType())) + } + if method.GetServerStreaming() || method.GetClientStreaming() { + reqArgs = append(reqArgs, servName+"_"+generator.CamelCase(origMethName)+"Server") + } + + return methName + "(" + strings.Join(reqArgs, ", ") + ") " + ret +} + +func (g *grpc) generateServerMethod(servName, fullServName string, method *pb.MethodDescriptorProto) string { + methName := generator.CamelCase(method.GetName()) + hname := fmt.Sprintf("_%s_%s_Handler", servName, methName) + inType := g.typeName(method.GetInputType()) + outType := g.typeName(method.GetOutputType()) + + if !method.GetServerStreaming() && !method.GetClientStreaming() { + g.P("func ", hname, "(srv interface{}, ctx ", contextPkg, ".Context, dec func(interface{}) error, interceptor ", grpcPkg, ".UnaryServerInterceptor) (interface{}, error) {") + g.P("in := new(", inType, ")") + g.P("if err := dec(in); err != nil { return nil, err }") + g.P("if interceptor == nil { return srv.(", servName, "Server).", methName, "(ctx, in) }") + g.P("info := &", grpcPkg, ".UnaryServerInfo{") + g.P("Server: srv,") + g.P("FullMethod: ", strconv.Quote(fmt.Sprintf("/%s/%s", fullServName, methName)), ",") + g.P("}") + g.P("handler := func(ctx ", contextPkg, ".Context, req interface{}) (interface{}, error) {") + g.P("return srv.(", servName, "Server).", methName, "(ctx, req.(*", inType, "))") + g.P("}") + g.P("return interceptor(ctx, in, info, handler)") + g.P("}") + g.P() + return hname + } + streamType := unexport(servName) + methName + "Server" + g.P("func ", hname, "(srv interface{}, stream ", grpcPkg, ".ServerStream) error {") + if !method.GetClientStreaming() { + g.P("m := new(", inType, ")") + g.P("if err := stream.RecvMsg(m); err != nil { return err }") + g.P("return srv.(", servName, "Server).", methName, "(m, &", streamType, "{stream})") + } else { + g.P("return srv.(", servName, "Server).", methName, "(&", streamType, "{stream})") + } + g.P("}") + g.P() + + genSend := method.GetServerStreaming() + genSendAndClose := !method.GetServerStreaming() + genRecv := method.GetClientStreaming() + + // Stream auxiliary types and methods. + g.P("type ", servName, "_", methName, "Server interface {") + if genSend { + g.P("Send(*", outType, ") error") + } + if genSendAndClose { + g.P("SendAndClose(*", outType, ") error") + } + if genRecv { + g.P("Recv() (*", inType, ", error)") + } + g.P(grpcPkg, ".ServerStream") + g.P("}") + g.P() + + g.P("type ", streamType, " struct {") + g.P(grpcPkg, ".ServerStream") + g.P("}") + g.P() + + if genSend { + g.P("func (x *", streamType, ") Send(m *", outType, ") error {") + g.P("return x.ServerStream.SendMsg(m)") + g.P("}") + g.P() + } + if genSendAndClose { + g.P("func (x *", streamType, ") SendAndClose(m *", outType, ") error {") + g.P("return x.ServerStream.SendMsg(m)") + g.P("}") + g.P() + } + if genRecv { + g.P("func (x *", streamType, ") Recv() (*", inType, ", error) {") + g.P("m := new(", inType, ")") + g.P("if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err }") + g.P("return m, nil") + g.P("}") + g.P() + } + + return hname +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/link_grpc.go b/vendor/github.com/golang/protobuf/protoc-gen-go/link_grpc.go new file mode 100644 index 0000000..532a550 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/link_grpc.go @@ -0,0 +1,34 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2015 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package main + +import _ "github.com/golang/protobuf/protoc-gen-go/grpc" diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/main.go b/vendor/github.com/golang/protobuf/protoc-gen-go/main.go new file mode 100644 index 0000000..8e2486d --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/main.go @@ -0,0 +1,98 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// protoc-gen-go is a plugin for the Google protocol buffer compiler to generate +// Go code. Run it by building this program and putting it in your path with +// the name +// protoc-gen-go +// That word 'go' at the end becomes part of the option string set for the +// protocol compiler, so once the protocol compiler (protoc) is installed +// you can run +// protoc --go_out=output_directory input_directory/file.proto +// to generate Go bindings for the protocol defined by file.proto. +// With that input, the output will be written to +// output_directory/file.pb.go +// +// The generated code is documented in the package comment for +// the library. +// +// See the README and documentation for protocol buffers to learn more: +// https://developers.google.com/protocol-buffers/ +package main + +import ( + "io/ioutil" + "os" + + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/protoc-gen-go/generator" +) + +func main() { + // Begin by allocating a generator. The request and response structures are stored there + // so we can do error handling easily - the response structure contains the field to + // report failure. + g := generator.New() + + data, err := ioutil.ReadAll(os.Stdin) + if err != nil { + g.Error(err, "reading input") + } + + if err := proto.Unmarshal(data, g.Request); err != nil { + g.Error(err, "parsing input proto") + } + + if len(g.Request.FileToGenerate) == 0 { + g.Fail("no files to generate") + } + + g.CommandLineParameters(g.Request.GetParameter()) + + // Create a wrapped version of the Descriptors and EnumDescriptors that + // point to the file that defines them. + g.WrapTypes() + + g.SetPackageNames() + g.BuildTypeNameMap() + + g.GenerateAllFiles() + + // Send back the results. + data, err = proto.Marshal(g.Response) + if err != nil { + g.Error(err, "failed to marshal output proto") + } + _, err = os.Stdout.Write(data) + if err != nil { + g.Error(err, "failed to write output proto") + } +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile new file mode 100644 index 0000000..bc0463d --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/Makefile @@ -0,0 +1,45 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# Not stored here, but plugin.proto is in https://github.com/google/protobuf/ +# at src/google/protobuf/compiler/plugin.proto +# Also we need to fix an import. +regenerate: + @echo WARNING! THIS RULE IS PROBABLY NOT RIGHT FOR YOUR INSTALLATION + cp $(HOME)/src/protobuf/include/google/protobuf/compiler/plugin.proto . + protoc --go_out=Mgoogle/protobuf/descriptor.proto=github.com/golang/protobuf/protoc-gen-go/descriptor:../../../../.. \ + -I$(HOME)/src/protobuf/include $(HOME)/src/protobuf/include/google/protobuf/compiler/plugin.proto + +restore: + cp plugin.pb.golden plugin.pb.go + +preserve: + cp plugin.pb.go plugin.pb.golden diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go new file mode 100644 index 0000000..c608a24 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.go @@ -0,0 +1,293 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/compiler/plugin.proto + +/* +Package plugin_go is a generated protocol buffer package. + +It is generated from these files: + google/protobuf/compiler/plugin.proto + +It has these top-level messages: + Version + CodeGeneratorRequest + CodeGeneratorResponse +*/ +package plugin_go + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor" + +// 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 + +// The version number of protocol compiler. +type Version struct { + Major *int32 `protobuf:"varint,1,opt,name=major" json:"major,omitempty"` + Minor *int32 `protobuf:"varint,2,opt,name=minor" json:"minor,omitempty"` + Patch *int32 `protobuf:"varint,3,opt,name=patch" json:"patch,omitempty"` + // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should + // be empty for mainline stable releases. + Suffix *string `protobuf:"bytes,4,opt,name=suffix" json:"suffix,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Version) Reset() { *m = Version{} } +func (m *Version) String() string { return proto.CompactTextString(m) } +func (*Version) ProtoMessage() {} +func (*Version) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *Version) GetMajor() int32 { + if m != nil && m.Major != nil { + return *m.Major + } + return 0 +} + +func (m *Version) GetMinor() int32 { + if m != nil && m.Minor != nil { + return *m.Minor + } + return 0 +} + +func (m *Version) GetPatch() int32 { + if m != nil && m.Patch != nil { + return *m.Patch + } + return 0 +} + +func (m *Version) GetSuffix() string { + if m != nil && m.Suffix != nil { + return *m.Suffix + } + return "" +} + +// An encoded CodeGeneratorRequest is written to the plugin's stdin. +type CodeGeneratorRequest struct { + // The .proto files that were explicitly listed on the command-line. The + // code generator should generate code only for these files. Each file's + // descriptor will be included in proto_file, below. + FileToGenerate []string `protobuf:"bytes,1,rep,name=file_to_generate,json=fileToGenerate" json:"file_to_generate,omitempty"` + // The generator parameter passed on the command-line. + Parameter *string `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"` + // FileDescriptorProtos for all files in files_to_generate and everything + // they import. The files will appear in topological order, so each file + // appears before any file that imports it. + // + // protoc guarantees that all proto_files will be written after + // the fields above, even though this is not technically guaranteed by the + // protobuf wire format. This theoretically could allow a plugin to stream + // in the FileDescriptorProtos and handle them one by one rather than read + // the entire set into memory at once. However, as of this writing, this + // is not similarly optimized on protoc's end -- it will store all fields in + // memory at once before sending them to the plugin. + // + // Type names of fields and extensions in the FileDescriptorProto are always + // fully qualified. + ProtoFile []*google_protobuf.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file,json=protoFile" json:"proto_file,omitempty"` + // The version number of protocol compiler. + CompilerVersion *Version `protobuf:"bytes,3,opt,name=compiler_version,json=compilerVersion" json:"compiler_version,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *CodeGeneratorRequest) Reset() { *m = CodeGeneratorRequest{} } +func (m *CodeGeneratorRequest) String() string { return proto.CompactTextString(m) } +func (*CodeGeneratorRequest) ProtoMessage() {} +func (*CodeGeneratorRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *CodeGeneratorRequest) GetFileToGenerate() []string { + if m != nil { + return m.FileToGenerate + } + return nil +} + +func (m *CodeGeneratorRequest) GetParameter() string { + if m != nil && m.Parameter != nil { + return *m.Parameter + } + return "" +} + +func (m *CodeGeneratorRequest) GetProtoFile() []*google_protobuf.FileDescriptorProto { + if m != nil { + return m.ProtoFile + } + return nil +} + +func (m *CodeGeneratorRequest) GetCompilerVersion() *Version { + if m != nil { + return m.CompilerVersion + } + return nil +} + +// The plugin writes an encoded CodeGeneratorResponse to stdout. +type CodeGeneratorResponse struct { + // Error message. If non-empty, code generation failed. The plugin process + // should exit with status code zero even if it reports an error in this way. + // + // This should be used to indicate errors in .proto files which prevent the + // code generator from generating correct code. Errors which indicate a + // problem in protoc itself -- such as the input CodeGeneratorRequest being + // unparseable -- should be reported by writing a message to stderr and + // exiting with a non-zero status code. + Error *string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` + File []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *CodeGeneratorResponse) Reset() { *m = CodeGeneratorResponse{} } +func (m *CodeGeneratorResponse) String() string { return proto.CompactTextString(m) } +func (*CodeGeneratorResponse) ProtoMessage() {} +func (*CodeGeneratorResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *CodeGeneratorResponse) GetError() string { + if m != nil && m.Error != nil { + return *m.Error + } + return "" +} + +func (m *CodeGeneratorResponse) GetFile() []*CodeGeneratorResponse_File { + if m != nil { + return m.File + } + return nil +} + +// Represents a single generated file. +type CodeGeneratorResponse_File struct { + // The file name, relative to the output directory. The name must not + // contain "." or ".." components and must be relative, not be absolute (so, + // the file cannot lie outside the output directory). "/" must be used as + // the path separator, not "\". + // + // If the name is omitted, the content will be appended to the previous + // file. This allows the generator to break large files into small chunks, + // and allows the generated text to be streamed back to protoc so that large + // files need not reside completely in memory at one time. Note that as of + // this writing protoc does not optimize for this -- it will read the entire + // CodeGeneratorResponse before writing files to disk. + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // If non-empty, indicates that the named file should already exist, and the + // content here is to be inserted into that file at a defined insertion + // point. This feature allows a code generator to extend the output + // produced by another code generator. The original generator may provide + // insertion points by placing special annotations in the file that look + // like: + // @@protoc_insertion_point(NAME) + // The annotation can have arbitrary text before and after it on the line, + // which allows it to be placed in a comment. NAME should be replaced with + // an identifier naming the point -- this is what other generators will use + // as the insertion_point. Code inserted at this point will be placed + // immediately above the line containing the insertion point (thus multiple + // insertions to the same point will come out in the order they were added). + // The double-@ is intended to make it unlikely that the generated code + // could contain things that look like insertion points by accident. + // + // For example, the C++ code generator places the following line in the + // .pb.h files that it generates: + // // @@protoc_insertion_point(namespace_scope) + // This line appears within the scope of the file's package namespace, but + // outside of any particular class. Another plugin can then specify the + // insertion_point "namespace_scope" to generate additional classes or + // other declarations that should be placed in this scope. + // + // Note that if the line containing the insertion point begins with + // whitespace, the same whitespace will be added to every line of the + // inserted text. This is useful for languages like Python, where + // indentation matters. In these languages, the insertion point comment + // should be indented the same amount as any inserted code will need to be + // in order to work correctly in that context. + // + // The code generator that generates the initial file and the one which + // inserts into it must both run as part of a single invocation of protoc. + // Code generators are executed in the order in which they appear on the + // command line. + // + // If |insertion_point| is present, |name| must also be present. + InsertionPoint *string `protobuf:"bytes,2,opt,name=insertion_point,json=insertionPoint" json:"insertion_point,omitempty"` + // The file contents. + Content *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *CodeGeneratorResponse_File) Reset() { *m = CodeGeneratorResponse_File{} } +func (m *CodeGeneratorResponse_File) String() string { return proto.CompactTextString(m) } +func (*CodeGeneratorResponse_File) ProtoMessage() {} +func (*CodeGeneratorResponse_File) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2, 0} } + +func (m *CodeGeneratorResponse_File) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +func (m *CodeGeneratorResponse_File) GetInsertionPoint() string { + if m != nil && m.InsertionPoint != nil { + return *m.InsertionPoint + } + return "" +} + +func (m *CodeGeneratorResponse_File) GetContent() string { + if m != nil && m.Content != nil { + return *m.Content + } + return "" +} + +func init() { + proto.RegisterType((*Version)(nil), "google.protobuf.compiler.Version") + proto.RegisterType((*CodeGeneratorRequest)(nil), "google.protobuf.compiler.CodeGeneratorRequest") + proto.RegisterType((*CodeGeneratorResponse)(nil), "google.protobuf.compiler.CodeGeneratorResponse") + proto.RegisterType((*CodeGeneratorResponse_File)(nil), "google.protobuf.compiler.CodeGeneratorResponse.File") +} + +func init() { proto.RegisterFile("google/protobuf/compiler/plugin.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 417 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xcf, 0x6a, 0x14, 0x41, + 0x10, 0xc6, 0x19, 0x77, 0x63, 0x98, 0x8a, 0x64, 0x43, 0x13, 0xa5, 0x09, 0x39, 0x8c, 0x8b, 0xe2, + 0x5c, 0x32, 0x0b, 0xc1, 0x8b, 0x78, 0x4b, 0x44, 0x3d, 0x78, 0x58, 0x1a, 0xf1, 0x20, 0xc8, 0x30, + 0x99, 0xd4, 0x74, 0x5a, 0x66, 0xba, 0xc6, 0xee, 0x1e, 0xf1, 0x49, 0x7d, 0x0f, 0xdf, 0x40, 0xfa, + 0xcf, 0x24, 0xb2, 0xb8, 0xa7, 0xee, 0xef, 0x57, 0xd5, 0xd5, 0x55, 0x1f, 0x05, 0x2f, 0x25, 0x91, + 0xec, 0x71, 0x33, 0x1a, 0x72, 0x74, 0x33, 0x75, 0x9b, 0x96, 0x86, 0x51, 0xf5, 0x68, 0x36, 0x63, + 0x3f, 0x49, 0xa5, 0xab, 0x10, 0x60, 0x3c, 0xa6, 0x55, 0x73, 0x5a, 0x35, 0xa7, 0x9d, 0x15, 0xbb, + 0x05, 0x6e, 0xd1, 0xb6, 0x46, 0x8d, 0x8e, 0x4c, 0xcc, 0x5e, 0xb7, 0x70, 0xf8, 0x05, 0x8d, 0x55, + 0xa4, 0xd9, 0x29, 0x1c, 0x0c, 0xcd, 0x77, 0x32, 0x3c, 0x2b, 0xb2, 0xf2, 0x40, 0x44, 0x11, 0xa8, + 0xd2, 0x64, 0xf8, 0xa3, 0x44, 0xbd, 0xf0, 0x74, 0x6c, 0x5c, 0x7b, 0xc7, 0x17, 0x91, 0x06, 0xc1, + 0x9e, 0xc1, 0x63, 0x3b, 0x75, 0x9d, 0xfa, 0xc5, 0x97, 0x45, 0x56, 0xe6, 0x22, 0xa9, 0xf5, 0x9f, + 0x0c, 0x4e, 0xaf, 0xe9, 0x16, 0x3f, 0xa0, 0x46, 0xd3, 0x38, 0x32, 0x02, 0x7f, 0x4c, 0x68, 0x1d, + 0x2b, 0xe1, 0xa4, 0x53, 0x3d, 0xd6, 0x8e, 0x6a, 0x19, 0x63, 0xc8, 0xb3, 0x62, 0x51, 0xe6, 0xe2, + 0xd8, 0xf3, 0xcf, 0x94, 0x5e, 0x20, 0x3b, 0x87, 0x7c, 0x6c, 0x4c, 0x33, 0xa0, 0xc3, 0xd8, 0x4a, + 0x2e, 0x1e, 0x00, 0xbb, 0x06, 0x08, 0xe3, 0xd4, 0xfe, 0x15, 0x5f, 0x15, 0x8b, 0xf2, 0xe8, 0xf2, + 0x45, 0xb5, 0x6b, 0xcb, 0x7b, 0xd5, 0xe3, 0xbb, 0x7b, 0x03, 0xb6, 0x1e, 0x8b, 0x3c, 0x44, 0x7d, + 0x84, 0x7d, 0x82, 0x93, 0xd9, 0xb8, 0xfa, 0x67, 0xf4, 0x24, 0x8c, 0x77, 0x74, 0xf9, 0xbc, 0xda, + 0xe7, 0x70, 0x95, 0xcc, 0x13, 0xab, 0x99, 0x24, 0xb0, 0xfe, 0x9d, 0xc1, 0xd3, 0x9d, 0x99, 0xed, + 0x48, 0xda, 0xa2, 0xf7, 0x0e, 0x8d, 0x49, 0x3e, 0xe7, 0x22, 0x0a, 0xf6, 0x11, 0x96, 0xff, 0x34, + 0xff, 0x7a, 0xff, 0x8f, 0xff, 0x2d, 0x1a, 0x66, 0x13, 0xa1, 0xc2, 0xd9, 0x37, 0x58, 0x86, 0x79, + 0x18, 0x2c, 0x75, 0x33, 0x60, 0xfa, 0x26, 0xdc, 0xd9, 0x2b, 0x58, 0x29, 0x6d, 0xd1, 0x38, 0x45, + 0xba, 0x1e, 0x49, 0x69, 0x97, 0xcc, 0x3c, 0xbe, 0xc7, 0x5b, 0x4f, 0x19, 0x87, 0xc3, 0x96, 0xb4, + 0x43, 0xed, 0xf8, 0x2a, 0x24, 0xcc, 0xf2, 0x4a, 0xc2, 0x79, 0x4b, 0xc3, 0xde, 0xfe, 0xae, 0x9e, + 0x6c, 0xc3, 0x6e, 0x06, 0x7b, 0xed, 0xd7, 0x37, 0x52, 0xb9, 0xbb, 0xe9, 0xc6, 0x87, 0x37, 0x92, + 0xfa, 0x46, 0xcb, 0x87, 0x65, 0x0c, 0x97, 0xf6, 0x42, 0xa2, 0xbe, 0x90, 0x94, 0x56, 0xfa, 0x6d, + 0x3c, 0x6a, 0x49, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x15, 0x40, 0xc5, 0xfe, 0x02, 0x00, + 0x00, +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden new file mode 100644 index 0000000..8953d0f --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.pb.golden @@ -0,0 +1,83 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/compiler/plugin.proto +// DO NOT EDIT! + +package google_protobuf_compiler + +import proto "github.com/golang/protobuf/proto" +import "math" +import google_protobuf "github.com/golang/protobuf/protoc-gen-go/descriptor" + +// Reference proto and math imports to suppress error if they are not otherwise used. +var _ = proto.GetString +var _ = math.Inf + +type CodeGeneratorRequest struct { + FileToGenerate []string `protobuf:"bytes,1,rep,name=file_to_generate" json:"file_to_generate,omitempty"` + Parameter *string `protobuf:"bytes,2,opt,name=parameter" json:"parameter,omitempty"` + ProtoFile []*google_protobuf.FileDescriptorProto `protobuf:"bytes,15,rep,name=proto_file" json:"proto_file,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (this *CodeGeneratorRequest) Reset() { *this = CodeGeneratorRequest{} } +func (this *CodeGeneratorRequest) String() string { return proto.CompactTextString(this) } +func (*CodeGeneratorRequest) ProtoMessage() {} + +func (this *CodeGeneratorRequest) GetParameter() string { + if this != nil && this.Parameter != nil { + return *this.Parameter + } + return "" +} + +type CodeGeneratorResponse struct { + Error *string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` + File []*CodeGeneratorResponse_File `protobuf:"bytes,15,rep,name=file" json:"file,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (this *CodeGeneratorResponse) Reset() { *this = CodeGeneratorResponse{} } +func (this *CodeGeneratorResponse) String() string { return proto.CompactTextString(this) } +func (*CodeGeneratorResponse) ProtoMessage() {} + +func (this *CodeGeneratorResponse) GetError() string { + if this != nil && this.Error != nil { + return *this.Error + } + return "" +} + +type CodeGeneratorResponse_File struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + InsertionPoint *string `protobuf:"bytes,2,opt,name=insertion_point" json:"insertion_point,omitempty"` + Content *string `protobuf:"bytes,15,opt,name=content" json:"content,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (this *CodeGeneratorResponse_File) Reset() { *this = CodeGeneratorResponse_File{} } +func (this *CodeGeneratorResponse_File) String() string { return proto.CompactTextString(this) } +func (*CodeGeneratorResponse_File) ProtoMessage() {} + +func (this *CodeGeneratorResponse_File) GetName() string { + if this != nil && this.Name != nil { + return *this.Name + } + return "" +} + +func (this *CodeGeneratorResponse_File) GetInsertionPoint() string { + if this != nil && this.InsertionPoint != nil { + return *this.InsertionPoint + } + return "" +} + +func (this *CodeGeneratorResponse_File) GetContent() string { + if this != nil && this.Content != nil { + return *this.Content + } + return "" +} + +func init() { +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto new file mode 100644 index 0000000..5b55745 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/plugin/plugin.proto @@ -0,0 +1,167 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: kenton@google.com (Kenton Varda) +// +// WARNING: The plugin interface is currently EXPERIMENTAL and is subject to +// change. +// +// protoc (aka the Protocol Compiler) can be extended via plugins. A plugin is +// just a program that reads a CodeGeneratorRequest from stdin and writes a +// CodeGeneratorResponse to stdout. +// +// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead +// of dealing with the raw protocol defined here. +// +// A plugin executable needs only to be placed somewhere in the path. The +// plugin should be named "protoc-gen-$NAME", and will then be used when the +// flag "--${NAME}_out" is passed to protoc. + +syntax = "proto2"; +package google.protobuf.compiler; +option java_package = "com.google.protobuf.compiler"; +option java_outer_classname = "PluginProtos"; + +option go_package = "github.com/golang/protobuf/protoc-gen-go/plugin;plugin_go"; + +import "google/protobuf/descriptor.proto"; + +// The version number of protocol compiler. +message Version { + optional int32 major = 1; + optional int32 minor = 2; + optional int32 patch = 3; + // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should + // be empty for mainline stable releases. + optional string suffix = 4; +} + +// An encoded CodeGeneratorRequest is written to the plugin's stdin. +message CodeGeneratorRequest { + // The .proto files that were explicitly listed on the command-line. The + // code generator should generate code only for these files. Each file's + // descriptor will be included in proto_file, below. + repeated string file_to_generate = 1; + + // The generator parameter passed on the command-line. + optional string parameter = 2; + + // FileDescriptorProtos for all files in files_to_generate and everything + // they import. The files will appear in topological order, so each file + // appears before any file that imports it. + // + // protoc guarantees that all proto_files will be written after + // the fields above, even though this is not technically guaranteed by the + // protobuf wire format. This theoretically could allow a plugin to stream + // in the FileDescriptorProtos and handle them one by one rather than read + // the entire set into memory at once. However, as of this writing, this + // is not similarly optimized on protoc's end -- it will store all fields in + // memory at once before sending them to the plugin. + // + // Type names of fields and extensions in the FileDescriptorProto are always + // fully qualified. + repeated FileDescriptorProto proto_file = 15; + + // The version number of protocol compiler. + optional Version compiler_version = 3; + +} + +// The plugin writes an encoded CodeGeneratorResponse to stdout. +message CodeGeneratorResponse { + // Error message. If non-empty, code generation failed. The plugin process + // should exit with status code zero even if it reports an error in this way. + // + // This should be used to indicate errors in .proto files which prevent the + // code generator from generating correct code. Errors which indicate a + // problem in protoc itself -- such as the input CodeGeneratorRequest being + // unparseable -- should be reported by writing a message to stderr and + // exiting with a non-zero status code. + optional string error = 1; + + // Represents a single generated file. + message File { + // The file name, relative to the output directory. The name must not + // contain "." or ".." components and must be relative, not be absolute (so, + // the file cannot lie outside the output directory). "/" must be used as + // the path separator, not "\". + // + // If the name is omitted, the content will be appended to the previous + // file. This allows the generator to break large files into small chunks, + // and allows the generated text to be streamed back to protoc so that large + // files need not reside completely in memory at one time. Note that as of + // this writing protoc does not optimize for this -- it will read the entire + // CodeGeneratorResponse before writing files to disk. + optional string name = 1; + + // If non-empty, indicates that the named file should already exist, and the + // content here is to be inserted into that file at a defined insertion + // point. This feature allows a code generator to extend the output + // produced by another code generator. The original generator may provide + // insertion points by placing special annotations in the file that look + // like: + // @@protoc_insertion_point(NAME) + // The annotation can have arbitrary text before and after it on the line, + // which allows it to be placed in a comment. NAME should be replaced with + // an identifier naming the point -- this is what other generators will use + // as the insertion_point. Code inserted at this point will be placed + // immediately above the line containing the insertion point (thus multiple + // insertions to the same point will come out in the order they were added). + // The double-@ is intended to make it unlikely that the generated code + // could contain things that look like insertion points by accident. + // + // For example, the C++ code generator places the following line in the + // .pb.h files that it generates: + // // @@protoc_insertion_point(namespace_scope) + // This line appears within the scope of the file's package namespace, but + // outside of any particular class. Another plugin can then specify the + // insertion_point "namespace_scope" to generate additional classes or + // other declarations that should be placed in this scope. + // + // Note that if the line containing the insertion point begins with + // whitespace, the same whitespace will be added to every line of the + // inserted text. This is useful for languages like Python, where + // indentation matters. In these languages, the insertion point comment + // should be indented the same amount as any inserted code will need to be + // in order to work correctly in that context. + // + // The code generator that generates the initial file and the one which + // inserts into it must both run as part of a single invocation of protoc. + // Code generators are executed in the order in which they appear on the + // command line. + // + // If |insertion_point| is present, |name| must also be present. + optional string insertion_point = 2; + + // The file contents. + optional string content = 15; + } + repeated File file = 15; +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile new file mode 100644 index 0000000..a0bf9fe --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/Makefile @@ -0,0 +1,73 @@ +# Go support for Protocol Buffers - Google's data interchange format +# +# Copyright 2010 The Go Authors. All rights reserved. +# https://github.com/golang/protobuf +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +all: + @echo run make test + +include ../../Make.protobuf + +test: golden testbuild + +#test: golden testbuild extension_test +# ./extension_test +# @echo PASS + +my_test/test.pb.go: my_test/test.proto + protoc --go_out=Mmulti/multi1.proto=github.com/golang/protobuf/protoc-gen-go/testdata/multi:. $< + +golden: + make -B my_test/test.pb.go + sed -i -e '/return.*fileDescriptor/d' my_test/test.pb.go + sed -i -e '/^var fileDescriptor/,/^}/d' my_test/test.pb.go + sed -i -e '/proto.RegisterFile.*fileDescriptor/d' my_test/test.pb.go + gofmt -w my_test/test.pb.go + diff -w my_test/test.pb.go my_test/test.pb.go.golden + +nuke: clean + +testbuild: regenerate + go test + +regenerate: + # Invoke protoc once to generate three independent .pb.go files in the same package. + protoc --go_out=. multi/multi1.proto multi/multi2.proto multi/multi3.proto + +#extension_test: extension_test.$O +# $(LD) -L. -o $@ $< + +#multi.a: multi3.pb.$O multi2.pb.$O multi1.pb.$O +# rm -f multi.a +# $(QUOTED_GOBIN)/gopack grc $@ $< + +#test.pb.go: imp.pb.go +#multi1.pb.go: multi2.pb.go multi3.pb.go +#main.$O: imp.pb.$O test.pb.$O multi.a +#extension_test.$O: extension_base.pb.$O extension_extra.pb.$O extension_user.pb.$O diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base.proto new file mode 100644 index 0000000..94acfc1 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_base.proto @@ -0,0 +1,46 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +package extension_base; + +message BaseMessage { + optional int32 height = 1; + extensions 4 to 9; + extensions 16 to max; +} + +// Another message that may be extended, using message_set_wire_format. +message OldStyleMessage { + option message_set_wire_format = true; + extensions 100 to max; +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra.proto new file mode 100644 index 0000000..fca7f60 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_extra.proto @@ -0,0 +1,38 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2011 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +package extension_extra; + +message ExtraMessage { + optional int32 width = 1; +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go new file mode 100644 index 0000000..86e9c11 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_test.go @@ -0,0 +1,210 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Test that we can use protocol buffers that use extensions. + +package testdata + +/* + +import ( + "bytes" + "regexp" + "testing" + + "github.com/golang/protobuf/proto" + base "extension_base.pb" + user "extension_user.pb" +) + +func TestSingleFieldExtension(t *testing.T) { + bm := &base.BaseMessage{ + Height: proto.Int32(178), + } + + // Use extension within scope of another type. + vol := proto.Uint32(11) + err := proto.SetExtension(bm, user.E_LoudMessage_Volume, vol) + if err != nil { + t.Fatal("Failed setting extension:", err) + } + buf, err := proto.Marshal(bm) + if err != nil { + t.Fatal("Failed encoding message with extension:", err) + } + bm_new := new(base.BaseMessage) + if err := proto.Unmarshal(buf, bm_new); err != nil { + t.Fatal("Failed decoding message with extension:", err) + } + if !proto.HasExtension(bm_new, user.E_LoudMessage_Volume) { + t.Fatal("Decoded message didn't contain extension.") + } + vol_out, err := proto.GetExtension(bm_new, user.E_LoudMessage_Volume) + if err != nil { + t.Fatal("Failed getting extension:", err) + } + if v := vol_out.(*uint32); *v != *vol { + t.Errorf("vol_out = %v, expected %v", *v, *vol) + } + proto.ClearExtension(bm_new, user.E_LoudMessage_Volume) + if proto.HasExtension(bm_new, user.E_LoudMessage_Volume) { + t.Fatal("Failed clearing extension.") + } +} + +func TestMessageExtension(t *testing.T) { + bm := &base.BaseMessage{ + Height: proto.Int32(179), + } + + // Use extension that is itself a message. + um := &user.UserMessage{ + Name: proto.String("Dave"), + Rank: proto.String("Major"), + } + err := proto.SetExtension(bm, user.E_LoginMessage_UserMessage, um) + if err != nil { + t.Fatal("Failed setting extension:", err) + } + buf, err := proto.Marshal(bm) + if err != nil { + t.Fatal("Failed encoding message with extension:", err) + } + bm_new := new(base.BaseMessage) + if err := proto.Unmarshal(buf, bm_new); err != nil { + t.Fatal("Failed decoding message with extension:", err) + } + if !proto.HasExtension(bm_new, user.E_LoginMessage_UserMessage) { + t.Fatal("Decoded message didn't contain extension.") + } + um_out, err := proto.GetExtension(bm_new, user.E_LoginMessage_UserMessage) + if err != nil { + t.Fatal("Failed getting extension:", err) + } + if n := um_out.(*user.UserMessage).Name; *n != *um.Name { + t.Errorf("um_out.Name = %q, expected %q", *n, *um.Name) + } + if r := um_out.(*user.UserMessage).Rank; *r != *um.Rank { + t.Errorf("um_out.Rank = %q, expected %q", *r, *um.Rank) + } + proto.ClearExtension(bm_new, user.E_LoginMessage_UserMessage) + if proto.HasExtension(bm_new, user.E_LoginMessage_UserMessage) { + t.Fatal("Failed clearing extension.") + } +} + +func TestTopLevelExtension(t *testing.T) { + bm := &base.BaseMessage{ + Height: proto.Int32(179), + } + + width := proto.Int32(17) + err := proto.SetExtension(bm, user.E_Width, width) + if err != nil { + t.Fatal("Failed setting extension:", err) + } + buf, err := proto.Marshal(bm) + if err != nil { + t.Fatal("Failed encoding message with extension:", err) + } + bm_new := new(base.BaseMessage) + if err := proto.Unmarshal(buf, bm_new); err != nil { + t.Fatal("Failed decoding message with extension:", err) + } + if !proto.HasExtension(bm_new, user.E_Width) { + t.Fatal("Decoded message didn't contain extension.") + } + width_out, err := proto.GetExtension(bm_new, user.E_Width) + if err != nil { + t.Fatal("Failed getting extension:", err) + } + if w := width_out.(*int32); *w != *width { + t.Errorf("width_out = %v, expected %v", *w, *width) + } + proto.ClearExtension(bm_new, user.E_Width) + if proto.HasExtension(bm_new, user.E_Width) { + t.Fatal("Failed clearing extension.") + } +} + +func TestMessageSetWireFormat(t *testing.T) { + osm := new(base.OldStyleMessage) + osp := &user.OldStyleParcel{ + Name: proto.String("Dave"), + Height: proto.Int32(178), + } + + err := proto.SetExtension(osm, user.E_OldStyleParcel_MessageSetExtension, osp) + if err != nil { + t.Fatal("Failed setting extension:", err) + } + + buf, err := proto.Marshal(osm) + if err != nil { + t.Fatal("Failed encoding message:", err) + } + + // Data generated from Python implementation. + expected := []byte{ + 11, 16, 209, 15, 26, 9, 10, 4, 68, 97, 118, 101, 16, 178, 1, 12, + } + + if !bytes.Equal(expected, buf) { + t.Errorf("Encoding mismatch.\nwant %+v\n got %+v", expected, buf) + } + + // Check that it is restored correctly. + osm = new(base.OldStyleMessage) + if err := proto.Unmarshal(buf, osm); err != nil { + t.Fatal("Failed decoding message:", err) + } + osp_out, err := proto.GetExtension(osm, user.E_OldStyleParcel_MessageSetExtension) + if err != nil { + t.Fatal("Failed getting extension:", err) + } + osp = osp_out.(*user.OldStyleParcel) + if *osp.Name != "Dave" || *osp.Height != 178 { + t.Errorf("Retrieved extension from decoded message is not correct: %+v", osp) + } +} + +func main() { + // simpler than rigging up gotest + testing.Main(regexp.MatchString, []testing.InternalTest{ + {"TestSingleFieldExtension", TestSingleFieldExtension}, + {"TestMessageExtension", TestMessageExtension}, + {"TestTopLevelExtension", TestTopLevelExtension}, + }, + []testing.InternalBenchmark{}, + []testing.InternalExample{}) +} + +*/ diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user.proto new file mode 100644 index 0000000..ff65873 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/extension_user.proto @@ -0,0 +1,100 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +import "extension_base.proto"; +import "extension_extra.proto"; + +package extension_user; + +message UserMessage { + optional string name = 1; + optional string rank = 2; +} + +// Extend with a message +extend extension_base.BaseMessage { + optional UserMessage user_message = 5; +} + +// Extend with a foreign message +extend extension_base.BaseMessage { + optional extension_extra.ExtraMessage extra_message = 9; +} + +// Extend with some primitive types +extend extension_base.BaseMessage { + optional int32 width = 6; + optional int64 area = 7; +} + +// Extend inside the scope of another type +message LoudMessage { + extend extension_base.BaseMessage { + optional uint32 volume = 8; + } + extensions 100 to max; +} + +// Extend inside the scope of another type, using a message. +message LoginMessage { + extend extension_base.BaseMessage { + optional UserMessage user_message = 16; + } +} + +// Extend with a repeated field +extend extension_base.BaseMessage { + repeated Detail detail = 17; +} + +message Detail { + optional string color = 1; +} + +// An extension of an extension +message Announcement { + optional string words = 1; + extend LoudMessage { + optional Announcement loud_ext = 100; + } +} + +// Something that can be put in a message set. +message OldStyleParcel { + extend extension_base.OldStyleMessage { + optional OldStyleParcel message_set_extension = 2001; + } + + required string name = 1; + optional int32 height = 2; +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/grpc.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/grpc.proto new file mode 100644 index 0000000..b8bc41a --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/grpc.proto @@ -0,0 +1,59 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2015 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package grpc.testing; + +message SimpleRequest { +} + +message SimpleResponse { +} + +message StreamMsg { +} + +message StreamMsg2 { +} + +service Test { + rpc UnaryCall(SimpleRequest) returns (SimpleResponse); + + // This RPC streams from the server only. + rpc Downstream(SimpleRequest) returns (stream StreamMsg); + + // This RPC streams from the client. + rpc Upstream(stream StreamMsg) returns (SimpleResponse); + + // This one streams in both directions. + rpc Bidi(stream StreamMsg) returns (stream StreamMsg2); +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.pb.go.golden b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.pb.go.golden new file mode 100644 index 0000000..784a4f8 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.pb.go.golden @@ -0,0 +1,113 @@ +// Code generated by protoc-gen-go. +// source: imp.proto +// DO NOT EDIT! + +package imp + +import proto "github.com/golang/protobuf/proto" +import "math" +import "os" +import imp1 "imp2.pb" + +// Reference proto & math imports to suppress error if they are not otherwise used. +var _ = proto.GetString +var _ = math.Inf + +// Types from public import imp2.proto +type PubliclyImportedMessage imp1.PubliclyImportedMessage + +func (this *PubliclyImportedMessage) Reset() { (*imp1.PubliclyImportedMessage)(this).Reset() } +func (this *PubliclyImportedMessage) String() string { + return (*imp1.PubliclyImportedMessage)(this).String() +} + +// PubliclyImportedMessage from public import imp.proto + +type ImportedMessage_Owner int32 + +const ( + ImportedMessage_DAVE ImportedMessage_Owner = 1 + ImportedMessage_MIKE ImportedMessage_Owner = 2 +) + +var ImportedMessage_Owner_name = map[int32]string{ + 1: "DAVE", + 2: "MIKE", +} +var ImportedMessage_Owner_value = map[string]int32{ + "DAVE": 1, + "MIKE": 2, +} + +// NewImportedMessage_Owner is deprecated. Use x.Enum() instead. +func NewImportedMessage_Owner(x ImportedMessage_Owner) *ImportedMessage_Owner { + e := ImportedMessage_Owner(x) + return &e +} +func (x ImportedMessage_Owner) Enum() *ImportedMessage_Owner { + p := new(ImportedMessage_Owner) + *p = x + return p +} +func (x ImportedMessage_Owner) String() string { + return proto.EnumName(ImportedMessage_Owner_name, int32(x)) +} + +type ImportedMessage struct { + Field *int64 `protobuf:"varint,1,req,name=field" json:"field,omitempty"` + XXX_extensions map[int32][]byte `json:",omitempty"` + XXX_unrecognized []byte `json:",omitempty"` +} + +func (this *ImportedMessage) Reset() { *this = ImportedMessage{} } +func (this *ImportedMessage) String() string { return proto.CompactTextString(this) } + +var extRange_ImportedMessage = []proto.ExtensionRange{ + proto.ExtensionRange{90, 100}, +} + +func (*ImportedMessage) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_ImportedMessage +} +func (this *ImportedMessage) ExtensionMap() map[int32][]byte { + if this.XXX_extensions == nil { + this.XXX_extensions = make(map[int32][]byte) + } + return this.XXX_extensions +} + +type ImportedExtendable struct { + XXX_extensions map[int32][]byte `json:",omitempty"` + XXX_unrecognized []byte `json:",omitempty"` +} + +func (this *ImportedExtendable) Reset() { *this = ImportedExtendable{} } +func (this *ImportedExtendable) String() string { return proto.CompactTextString(this) } + +func (this *ImportedExtendable) Marshal() ([]byte, error) { + return proto.MarshalMessageSet(this.ExtensionMap()) +} +func (this *ImportedExtendable) Unmarshal(buf []byte) error { + return proto.UnmarshalMessageSet(buf, this.ExtensionMap()) +} +// ensure ImportedExtendable satisfies proto.Marshaler and proto.Unmarshaler +var _ proto.Marshaler = (*ImportedExtendable)(nil) +var _ proto.Unmarshaler = (*ImportedExtendable)(nil) + +var extRange_ImportedExtendable = []proto.ExtensionRange{ + proto.ExtensionRange{100, 536870911}, +} + +func (*ImportedExtendable) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_ImportedExtendable +} +func (this *ImportedExtendable) ExtensionMap() map[int32][]byte { + if this.XXX_extensions == nil { + this.XXX_extensions = make(map[int32][]byte) + } + return this.XXX_extensions +} + +func init() { + proto.RegisterEnum("imp.ImportedMessage_Owner", ImportedMessage_Owner_name, ImportedMessage_Owner_value) +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.proto new file mode 100644 index 0000000..156e078 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp.proto @@ -0,0 +1,70 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +package imp; + +import "imp2.proto"; +import "imp3.proto"; + +message ImportedMessage { + required int64 field = 1; + + // The forwarded getters for these fields are fiddly to get right. + optional ImportedMessage2 local_msg = 2; + optional ForeignImportedMessage foreign_msg = 3; // in imp3.proto + optional Owner enum_field = 4; + oneof union { + int32 state = 9; + } + + repeated string name = 5; + repeated Owner boss = 6; + repeated ImportedMessage2 memo = 7; + + map msg_map = 8; + + enum Owner { + DAVE = 1; + MIKE = 2; + } + + extensions 90 to 100; +} + +message ImportedMessage2 { +} + +message ImportedExtendable { + option message_set_wire_format = true; + extensions 100 to max; +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp2.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp2.proto new file mode 100644 index 0000000..3bb0632 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp2.proto @@ -0,0 +1,43 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2011 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +package imp; + +message PubliclyImportedMessage { + optional int64 field = 1; +} + +enum PubliclyImportedEnum { + GLASSES = 1; + HAIR = 2; +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp3.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp3.proto new file mode 100644 index 0000000..58fc759 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/imp3.proto @@ -0,0 +1,38 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2012 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +package imp; + +message ForeignImportedMessage { + optional string tuber = 1; +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go new file mode 100644 index 0000000..f9b5ccf --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/main_test.go @@ -0,0 +1,46 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// A simple binary to link together the protocol buffers in this test. + +package testdata + +import ( + "testing" + + mytestpb "./my_test" + multipb "github.com/golang/protobuf/protoc-gen-go/testdata/multi" +) + +func TestLink(t *testing.T) { + _ = &multipb.Multi1{} + _ = &mytestpb.Request{} +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto new file mode 100644 index 0000000..0da6e0a --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi1.proto @@ -0,0 +1,44 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +import "multi/multi2.proto"; +import "multi/multi3.proto"; + +package multitest; + +message Multi1 { + required Multi2 multi2 = 1; + optional Multi2.Color color = 2; + optional Multi3.HatType hat_type = 3; +} + diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto new file mode 100644 index 0000000..e6bfc71 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi2.proto @@ -0,0 +1,46 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +package multitest; + +message Multi2 { + required int32 required_value = 1; + + enum Color { + BLUE = 1; + GREEN = 2; + RED = 3; + }; + optional Color color = 2; +} + diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto new file mode 100644 index 0000000..146c255 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/multi/multi3.proto @@ -0,0 +1,43 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +package multitest; + +message Multi3 { + enum HatType { + FEDORA = 1; + FEZ = 2; + }; + optional HatType hat_type = 1; +} + diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go new file mode 100644 index 0000000..1954e3f --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go @@ -0,0 +1,870 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: my_test/test.proto + +/* +Package my_test is a generated protocol buffer package. + +This package holds interesting messages. + +It is generated from these files: + my_test/test.proto + +It has these top-level messages: + Request + Reply + OtherBase + ReplyExtensions + OtherReplyExtensions + OldReply + Communique +*/ +package my_test + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/golang/protobuf/protoc-gen-go/testdata/multi" + +// 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 HatType int32 + +const ( + // deliberately skipping 0 + HatType_FEDORA HatType = 1 + HatType_FEZ HatType = 2 +) + +var HatType_name = map[int32]string{ + 1: "FEDORA", + 2: "FEZ", +} +var HatType_value = map[string]int32{ + "FEDORA": 1, + "FEZ": 2, +} + +func (x HatType) Enum() *HatType { + p := new(HatType) + *p = x + return p +} +func (x HatType) String() string { + return proto.EnumName(HatType_name, int32(x)) +} +func (x *HatType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(HatType_value, data, "HatType") + if err != nil { + return err + } + *x = HatType(value) + return nil +} + +// This enum represents days of the week. +type Days int32 + +const ( + Days_MONDAY Days = 1 + Days_TUESDAY Days = 2 + Days_LUNDI Days = 1 +) + +var Days_name = map[int32]string{ + 1: "MONDAY", + 2: "TUESDAY", + // Duplicate value: 1: "LUNDI", +} +var Days_value = map[string]int32{ + "MONDAY": 1, + "TUESDAY": 2, + "LUNDI": 1, +} + +func (x Days) Enum() *Days { + p := new(Days) + *p = x + return p +} +func (x Days) String() string { + return proto.EnumName(Days_name, int32(x)) +} +func (x *Days) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Days_value, data, "Days") + if err != nil { + return err + } + *x = Days(value) + return nil +} + +type Request_Color int32 + +const ( + Request_RED Request_Color = 0 + Request_GREEN Request_Color = 1 + Request_BLUE Request_Color = 2 +) + +var Request_Color_name = map[int32]string{ + 0: "RED", + 1: "GREEN", + 2: "BLUE", +} +var Request_Color_value = map[string]int32{ + "RED": 0, + "GREEN": 1, + "BLUE": 2, +} + +func (x Request_Color) Enum() *Request_Color { + p := new(Request_Color) + *p = x + return p +} +func (x Request_Color) String() string { + return proto.EnumName(Request_Color_name, int32(x)) +} +func (x *Request_Color) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Request_Color_value, data, "Request_Color") + if err != nil { + return err + } + *x = Request_Color(value) + return nil +} + +type Reply_Entry_Game int32 + +const ( + Reply_Entry_FOOTBALL Reply_Entry_Game = 1 + Reply_Entry_TENNIS Reply_Entry_Game = 2 +) + +var Reply_Entry_Game_name = map[int32]string{ + 1: "FOOTBALL", + 2: "TENNIS", +} +var Reply_Entry_Game_value = map[string]int32{ + "FOOTBALL": 1, + "TENNIS": 2, +} + +func (x Reply_Entry_Game) Enum() *Reply_Entry_Game { + p := new(Reply_Entry_Game) + *p = x + return p +} +func (x Reply_Entry_Game) String() string { + return proto.EnumName(Reply_Entry_Game_name, int32(x)) +} +func (x *Reply_Entry_Game) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Reply_Entry_Game_value, data, "Reply_Entry_Game") + if err != nil { + return err + } + *x = Reply_Entry_Game(value) + return nil +} + +// This is a message that might be sent somewhere. +type Request struct { + Key []int64 `protobuf:"varint,1,rep,name=key" json:"key,omitempty"` + // optional imp.ImportedMessage imported_message = 2; + Hue *Request_Color `protobuf:"varint,3,opt,name=hue,enum=my.test.Request_Color" json:"hue,omitempty"` + Hat *HatType `protobuf:"varint,4,opt,name=hat,enum=my.test.HatType,def=1" json:"hat,omitempty"` + // optional imp.ImportedMessage.Owner owner = 6; + Deadline *float32 `protobuf:"fixed32,7,opt,name=deadline,def=inf" json:"deadline,omitempty"` + Somegroup *Request_SomeGroup `protobuf:"group,8,opt,name=SomeGroup,json=somegroup" json:"somegroup,omitempty"` + // This is a map field. It will generate map[int32]string. + NameMapping map[int32]string `protobuf:"bytes,14,rep,name=name_mapping,json=nameMapping" json:"name_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // This is a map field whose value type is a message. + MsgMapping map[int64]*Reply `protobuf:"bytes,15,rep,name=msg_mapping,json=msgMapping" json:"msg_mapping,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Reset_ *int32 `protobuf:"varint,12,opt,name=reset" json:"reset,omitempty"` + // This field should not conflict with any getters. + GetKey_ *string `protobuf:"bytes,16,opt,name=get_key,json=getKey" json:"get_key,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Request) Reset() { *m = Request{} } +func (m *Request) String() string { return proto.CompactTextString(m) } +func (*Request) ProtoMessage() {} + +const Default_Request_Hat HatType = HatType_FEDORA + +var Default_Request_Deadline float32 = float32(math.Inf(1)) + +func (m *Request) GetKey() []int64 { + if m != nil { + return m.Key + } + return nil +} + +func (m *Request) GetHue() Request_Color { + if m != nil && m.Hue != nil { + return *m.Hue + } + return Request_RED +} + +func (m *Request) GetHat() HatType { + if m != nil && m.Hat != nil { + return *m.Hat + } + return Default_Request_Hat +} + +func (m *Request) GetDeadline() float32 { + if m != nil && m.Deadline != nil { + return *m.Deadline + } + return Default_Request_Deadline +} + +func (m *Request) GetSomegroup() *Request_SomeGroup { + if m != nil { + return m.Somegroup + } + return nil +} + +func (m *Request) GetNameMapping() map[int32]string { + if m != nil { + return m.NameMapping + } + return nil +} + +func (m *Request) GetMsgMapping() map[int64]*Reply { + if m != nil { + return m.MsgMapping + } + return nil +} + +func (m *Request) GetReset_() int32 { + if m != nil && m.Reset_ != nil { + return *m.Reset_ + } + return 0 +} + +func (m *Request) GetGetKey_() string { + if m != nil && m.GetKey_ != nil { + return *m.GetKey_ + } + return "" +} + +type Request_SomeGroup struct { + GroupField *int32 `protobuf:"varint,9,opt,name=group_field,json=groupField" json:"group_field,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Request_SomeGroup) Reset() { *m = Request_SomeGroup{} } +func (m *Request_SomeGroup) String() string { return proto.CompactTextString(m) } +func (*Request_SomeGroup) ProtoMessage() {} + +func (m *Request_SomeGroup) GetGroupField() int32 { + if m != nil && m.GroupField != nil { + return *m.GroupField + } + return 0 +} + +type Reply struct { + Found []*Reply_Entry `protobuf:"bytes,1,rep,name=found" json:"found,omitempty"` + CompactKeys []int32 `protobuf:"varint,2,rep,packed,name=compact_keys,json=compactKeys" json:"compact_keys,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Reply) Reset() { *m = Reply{} } +func (m *Reply) String() string { return proto.CompactTextString(m) } +func (*Reply) ProtoMessage() {} + +var extRange_Reply = []proto.ExtensionRange{ + {100, 536870911}, +} + +func (*Reply) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_Reply +} + +func (m *Reply) GetFound() []*Reply_Entry { + if m != nil { + return m.Found + } + return nil +} + +func (m *Reply) GetCompactKeys() []int32 { + if m != nil { + return m.CompactKeys + } + return nil +} + +type Reply_Entry struct { + KeyThatNeeds_1234Camel_CasIng *int64 `protobuf:"varint,1,req,name=key_that_needs_1234camel_CasIng,json=keyThatNeeds1234camelCasIng" json:"key_that_needs_1234camel_CasIng,omitempty"` + Value *int64 `protobuf:"varint,2,opt,name=value,def=7" json:"value,omitempty"` + XMyFieldName_2 *int64 `protobuf:"varint,3,opt,name=_my_field_name_2,json=MyFieldName2" json:"_my_field_name_2,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Reply_Entry) Reset() { *m = Reply_Entry{} } +func (m *Reply_Entry) String() string { return proto.CompactTextString(m) } +func (*Reply_Entry) ProtoMessage() {} + +const Default_Reply_Entry_Value int64 = 7 + +func (m *Reply_Entry) GetKeyThatNeeds_1234Camel_CasIng() int64 { + if m != nil && m.KeyThatNeeds_1234Camel_CasIng != nil { + return *m.KeyThatNeeds_1234Camel_CasIng + } + return 0 +} + +func (m *Reply_Entry) GetValue() int64 { + if m != nil && m.Value != nil { + return *m.Value + } + return Default_Reply_Entry_Value +} + +func (m *Reply_Entry) GetXMyFieldName_2() int64 { + if m != nil && m.XMyFieldName_2 != nil { + return *m.XMyFieldName_2 + } + return 0 +} + +type OtherBase struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OtherBase) Reset() { *m = OtherBase{} } +func (m *OtherBase) String() string { return proto.CompactTextString(m) } +func (*OtherBase) ProtoMessage() {} + +var extRange_OtherBase = []proto.ExtensionRange{ + {100, 536870911}, +} + +func (*OtherBase) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_OtherBase +} + +func (m *OtherBase) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +type ReplyExtensions struct { + XXX_unrecognized []byte `json:"-"` +} + +func (m *ReplyExtensions) Reset() { *m = ReplyExtensions{} } +func (m *ReplyExtensions) String() string { return proto.CompactTextString(m) } +func (*ReplyExtensions) ProtoMessage() {} + +var E_ReplyExtensions_Time = &proto.ExtensionDesc{ + ExtendedType: (*Reply)(nil), + ExtensionType: (*float64)(nil), + Field: 101, + Name: "my.test.ReplyExtensions.time", + Tag: "fixed64,101,opt,name=time", + Filename: "my_test/test.proto", +} + +var E_ReplyExtensions_Carrot = &proto.ExtensionDesc{ + ExtendedType: (*Reply)(nil), + ExtensionType: (*ReplyExtensions)(nil), + Field: 105, + Name: "my.test.ReplyExtensions.carrot", + Tag: "bytes,105,opt,name=carrot", + Filename: "my_test/test.proto", +} + +var E_ReplyExtensions_Donut = &proto.ExtensionDesc{ + ExtendedType: (*OtherBase)(nil), + ExtensionType: (*ReplyExtensions)(nil), + Field: 101, + Name: "my.test.ReplyExtensions.donut", + Tag: "bytes,101,opt,name=donut", + Filename: "my_test/test.proto", +} + +type OtherReplyExtensions struct { + Key *int32 `protobuf:"varint,1,opt,name=key" json:"key,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OtherReplyExtensions) Reset() { *m = OtherReplyExtensions{} } +func (m *OtherReplyExtensions) String() string { return proto.CompactTextString(m) } +func (*OtherReplyExtensions) ProtoMessage() {} + +func (m *OtherReplyExtensions) GetKey() int32 { + if m != nil && m.Key != nil { + return *m.Key + } + return 0 +} + +type OldReply struct { + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OldReply) Reset() { *m = OldReply{} } +func (m *OldReply) String() string { return proto.CompactTextString(m) } +func (*OldReply) ProtoMessage() {} + +func (m *OldReply) Marshal() ([]byte, error) { + return proto.MarshalMessageSet(&m.XXX_InternalExtensions) +} +func (m *OldReply) Unmarshal(buf []byte) error { + return proto.UnmarshalMessageSet(buf, &m.XXX_InternalExtensions) +} +func (m *OldReply) MarshalJSON() ([]byte, error) { + return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions) +} +func (m *OldReply) UnmarshalJSON(buf []byte) error { + return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions) +} + +// ensure OldReply satisfies proto.Marshaler and proto.Unmarshaler +var _ proto.Marshaler = (*OldReply)(nil) +var _ proto.Unmarshaler = (*OldReply)(nil) + +var extRange_OldReply = []proto.ExtensionRange{ + {100, 2147483646}, +} + +func (*OldReply) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_OldReply +} + +type Communique struct { + MakeMeCry *bool `protobuf:"varint,1,opt,name=make_me_cry,json=makeMeCry" json:"make_me_cry,omitempty"` + // This is a oneof, called "union". + // + // Types that are valid to be assigned to Union: + // *Communique_Number + // *Communique_Name + // *Communique_Data + // *Communique_TempC + // *Communique_Height + // *Communique_Today + // *Communique_Maybe + // *Communique_Delta_ + // *Communique_Msg + // *Communique_Somegroup + Union isCommunique_Union `protobuf_oneof:"union"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Communique) Reset() { *m = Communique{} } +func (m *Communique) String() string { return proto.CompactTextString(m) } +func (*Communique) ProtoMessage() {} + +type isCommunique_Union interface { + isCommunique_Union() +} + +type Communique_Number struct { + Number int32 `protobuf:"varint,5,opt,name=number,oneof"` +} +type Communique_Name struct { + Name string `protobuf:"bytes,6,opt,name=name,oneof"` +} +type Communique_Data struct { + Data []byte `protobuf:"bytes,7,opt,name=data,oneof"` +} +type Communique_TempC struct { + TempC float64 `protobuf:"fixed64,8,opt,name=temp_c,json=tempC,oneof"` +} +type Communique_Height struct { + Height float32 `protobuf:"fixed32,9,opt,name=height,oneof"` +} +type Communique_Today struct { + Today Days `protobuf:"varint,10,opt,name=today,enum=my.test.Days,oneof"` +} +type Communique_Maybe struct { + Maybe bool `protobuf:"varint,11,opt,name=maybe,oneof"` +} +type Communique_Delta_ struct { + Delta int32 `protobuf:"zigzag32,12,opt,name=delta,oneof"` +} +type Communique_Msg struct { + Msg *Reply `protobuf:"bytes,13,opt,name=msg,oneof"` +} +type Communique_Somegroup struct { + Somegroup *Communique_SomeGroup `protobuf:"group,14,opt,name=SomeGroup,json=somegroup,oneof"` +} + +func (*Communique_Number) isCommunique_Union() {} +func (*Communique_Name) isCommunique_Union() {} +func (*Communique_Data) isCommunique_Union() {} +func (*Communique_TempC) isCommunique_Union() {} +func (*Communique_Height) isCommunique_Union() {} +func (*Communique_Today) isCommunique_Union() {} +func (*Communique_Maybe) isCommunique_Union() {} +func (*Communique_Delta_) isCommunique_Union() {} +func (*Communique_Msg) isCommunique_Union() {} +func (*Communique_Somegroup) isCommunique_Union() {} + +func (m *Communique) GetUnion() isCommunique_Union { + if m != nil { + return m.Union + } + return nil +} + +func (m *Communique) GetMakeMeCry() bool { + if m != nil && m.MakeMeCry != nil { + return *m.MakeMeCry + } + return false +} + +func (m *Communique) GetNumber() int32 { + if x, ok := m.GetUnion().(*Communique_Number); ok { + return x.Number + } + return 0 +} + +func (m *Communique) GetName() string { + if x, ok := m.GetUnion().(*Communique_Name); ok { + return x.Name + } + return "" +} + +func (m *Communique) GetData() []byte { + if x, ok := m.GetUnion().(*Communique_Data); ok { + return x.Data + } + return nil +} + +func (m *Communique) GetTempC() float64 { + if x, ok := m.GetUnion().(*Communique_TempC); ok { + return x.TempC + } + return 0 +} + +func (m *Communique) GetHeight() float32 { + if x, ok := m.GetUnion().(*Communique_Height); ok { + return x.Height + } + return 0 +} + +func (m *Communique) GetToday() Days { + if x, ok := m.GetUnion().(*Communique_Today); ok { + return x.Today + } + return Days_MONDAY +} + +func (m *Communique) GetMaybe() bool { + if x, ok := m.GetUnion().(*Communique_Maybe); ok { + return x.Maybe + } + return false +} + +func (m *Communique) GetDelta() int32 { + if x, ok := m.GetUnion().(*Communique_Delta_); ok { + return x.Delta + } + return 0 +} + +func (m *Communique) GetMsg() *Reply { + if x, ok := m.GetUnion().(*Communique_Msg); ok { + return x.Msg + } + return nil +} + +func (m *Communique) GetSomegroup() *Communique_SomeGroup { + if x, ok := m.GetUnion().(*Communique_Somegroup); ok { + return x.Somegroup + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Communique) 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 _Communique_OneofMarshaler, _Communique_OneofUnmarshaler, _Communique_OneofSizer, []interface{}{ + (*Communique_Number)(nil), + (*Communique_Name)(nil), + (*Communique_Data)(nil), + (*Communique_TempC)(nil), + (*Communique_Height)(nil), + (*Communique_Today)(nil), + (*Communique_Maybe)(nil), + (*Communique_Delta_)(nil), + (*Communique_Msg)(nil), + (*Communique_Somegroup)(nil), + } +} + +func _Communique_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Communique) + // union + switch x := m.Union.(type) { + case *Communique_Number: + b.EncodeVarint(5<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Number)) + case *Communique_Name: + b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Name) + case *Communique_Data: + b.EncodeVarint(7<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Data) + case *Communique_TempC: + b.EncodeVarint(8<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.TempC)) + case *Communique_Height: + b.EncodeVarint(9<<3 | proto.WireFixed32) + b.EncodeFixed32(uint64(math.Float32bits(x.Height))) + case *Communique_Today: + b.EncodeVarint(10<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Today)) + case *Communique_Maybe: + t := uint64(0) + if x.Maybe { + t = 1 + } + b.EncodeVarint(11<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Communique_Delta_: + b.EncodeVarint(12<<3 | proto.WireVarint) + b.EncodeZigzag32(uint64(x.Delta)) + case *Communique_Msg: + b.EncodeVarint(13<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Msg); err != nil { + return err + } + case *Communique_Somegroup: + b.EncodeVarint(14<<3 | proto.WireStartGroup) + if err := b.Marshal(x.Somegroup); err != nil { + return err + } + b.EncodeVarint(14<<3 | proto.WireEndGroup) + case nil: + default: + return fmt.Errorf("Communique.Union has unexpected type %T", x) + } + return nil +} + +func _Communique_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Communique) + switch tag { + case 5: // union.number + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Communique_Number{int32(x)} + return true, err + case 6: // union.name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Union = &Communique_Name{x} + return true, err + case 7: // union.data + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Union = &Communique_Data{x} + return true, err + case 8: // union.temp_c + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Union = &Communique_TempC{math.Float64frombits(x)} + return true, err + case 9: // union.height + if wire != proto.WireFixed32 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed32() + m.Union = &Communique_Height{math.Float32frombits(uint32(x))} + return true, err + case 10: // union.today + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Communique_Today{Days(x)} + return true, err + case 11: // union.maybe + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Communique_Maybe{x != 0} + return true, err + case 12: // union.delta + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeZigzag32() + m.Union = &Communique_Delta_{int32(x)} + return true, err + case 13: // union.msg + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Reply) + err := b.DecodeMessage(msg) + m.Union = &Communique_Msg{msg} + return true, err + case 14: // union.somegroup + if wire != proto.WireStartGroup { + return true, proto.ErrInternalBadWireType + } + msg := new(Communique_SomeGroup) + err := b.DecodeGroup(msg) + m.Union = &Communique_Somegroup{msg} + return true, err + default: + return false, nil + } +} + +func _Communique_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Communique) + // union + switch x := m.Union.(type) { + case *Communique_Number: + n += proto.SizeVarint(5<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Number)) + case *Communique_Name: + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Name))) + n += len(x.Name) + case *Communique_Data: + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Data))) + n += len(x.Data) + case *Communique_TempC: + n += proto.SizeVarint(8<<3 | proto.WireFixed64) + n += 8 + case *Communique_Height: + n += proto.SizeVarint(9<<3 | proto.WireFixed32) + n += 4 + case *Communique_Today: + n += proto.SizeVarint(10<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Today)) + case *Communique_Maybe: + n += proto.SizeVarint(11<<3 | proto.WireVarint) + n += 1 + case *Communique_Delta_: + n += proto.SizeVarint(12<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64((uint32(x.Delta) << 1) ^ uint32((int32(x.Delta) >> 31)))) + case *Communique_Msg: + s := proto.Size(x.Msg) + n += proto.SizeVarint(13<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Communique_Somegroup: + n += proto.SizeVarint(14<<3 | proto.WireStartGroup) + n += proto.Size(x.Somegroup) + n += proto.SizeVarint(14<<3 | proto.WireEndGroup) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type Communique_SomeGroup struct { + Member *string `protobuf:"bytes,15,opt,name=member" json:"member,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Communique_SomeGroup) Reset() { *m = Communique_SomeGroup{} } +func (m *Communique_SomeGroup) String() string { return proto.CompactTextString(m) } +func (*Communique_SomeGroup) ProtoMessage() {} + +func (m *Communique_SomeGroup) GetMember() string { + if m != nil && m.Member != nil { + return *m.Member + } + return "" +} + +type Communique_Delta struct { + XXX_unrecognized []byte `json:"-"` +} + +func (m *Communique_Delta) Reset() { *m = Communique_Delta{} } +func (m *Communique_Delta) String() string { return proto.CompactTextString(m) } +func (*Communique_Delta) ProtoMessage() {} + +var E_Tag = &proto.ExtensionDesc{ + ExtendedType: (*Reply)(nil), + ExtensionType: (*string)(nil), + Field: 103, + Name: "my.test.tag", + Tag: "bytes,103,opt,name=tag", + Filename: "my_test/test.proto", +} + +var E_Donut = &proto.ExtensionDesc{ + ExtendedType: (*Reply)(nil), + ExtensionType: (*OtherReplyExtensions)(nil), + Field: 106, + Name: "my.test.donut", + Tag: "bytes,106,opt,name=donut", + Filename: "my_test/test.proto", +} + +func init() { + proto.RegisterType((*Request)(nil), "my.test.Request") + proto.RegisterType((*Request_SomeGroup)(nil), "my.test.Request.SomeGroup") + proto.RegisterType((*Reply)(nil), "my.test.Reply") + proto.RegisterType((*Reply_Entry)(nil), "my.test.Reply.Entry") + proto.RegisterType((*OtherBase)(nil), "my.test.OtherBase") + proto.RegisterType((*ReplyExtensions)(nil), "my.test.ReplyExtensions") + proto.RegisterType((*OtherReplyExtensions)(nil), "my.test.OtherReplyExtensions") + proto.RegisterType((*OldReply)(nil), "my.test.OldReply") + proto.RegisterType((*Communique)(nil), "my.test.Communique") + proto.RegisterType((*Communique_SomeGroup)(nil), "my.test.Communique.SomeGroup") + proto.RegisterType((*Communique_Delta)(nil), "my.test.Communique.Delta") + proto.RegisterEnum("my.test.HatType", HatType_name, HatType_value) + proto.RegisterEnum("my.test.Days", Days_name, Days_value) + proto.RegisterEnum("my.test.Request_Color", Request_Color_name, Request_Color_value) + proto.RegisterEnum("my.test.Reply_Entry_Game", Reply_Entry_Game_name, Reply_Entry_Game_value) + proto.RegisterExtension(E_ReplyExtensions_Time) + proto.RegisterExtension(E_ReplyExtensions_Carrot) + proto.RegisterExtension(E_ReplyExtensions_Donut) + proto.RegisterExtension(E_Tag) + proto.RegisterExtension(E_Donut) +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden new file mode 100644 index 0000000..1954e3f --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.pb.go.golden @@ -0,0 +1,870 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: my_test/test.proto + +/* +Package my_test is a generated protocol buffer package. + +This package holds interesting messages. + +It is generated from these files: + my_test/test.proto + +It has these top-level messages: + Request + Reply + OtherBase + ReplyExtensions + OtherReplyExtensions + OldReply + Communique +*/ +package my_test + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import _ "github.com/golang/protobuf/protoc-gen-go/testdata/multi" + +// 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 HatType int32 + +const ( + // deliberately skipping 0 + HatType_FEDORA HatType = 1 + HatType_FEZ HatType = 2 +) + +var HatType_name = map[int32]string{ + 1: "FEDORA", + 2: "FEZ", +} +var HatType_value = map[string]int32{ + "FEDORA": 1, + "FEZ": 2, +} + +func (x HatType) Enum() *HatType { + p := new(HatType) + *p = x + return p +} +func (x HatType) String() string { + return proto.EnumName(HatType_name, int32(x)) +} +func (x *HatType) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(HatType_value, data, "HatType") + if err != nil { + return err + } + *x = HatType(value) + return nil +} + +// This enum represents days of the week. +type Days int32 + +const ( + Days_MONDAY Days = 1 + Days_TUESDAY Days = 2 + Days_LUNDI Days = 1 +) + +var Days_name = map[int32]string{ + 1: "MONDAY", + 2: "TUESDAY", + // Duplicate value: 1: "LUNDI", +} +var Days_value = map[string]int32{ + "MONDAY": 1, + "TUESDAY": 2, + "LUNDI": 1, +} + +func (x Days) Enum() *Days { + p := new(Days) + *p = x + return p +} +func (x Days) String() string { + return proto.EnumName(Days_name, int32(x)) +} +func (x *Days) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Days_value, data, "Days") + if err != nil { + return err + } + *x = Days(value) + return nil +} + +type Request_Color int32 + +const ( + Request_RED Request_Color = 0 + Request_GREEN Request_Color = 1 + Request_BLUE Request_Color = 2 +) + +var Request_Color_name = map[int32]string{ + 0: "RED", + 1: "GREEN", + 2: "BLUE", +} +var Request_Color_value = map[string]int32{ + "RED": 0, + "GREEN": 1, + "BLUE": 2, +} + +func (x Request_Color) Enum() *Request_Color { + p := new(Request_Color) + *p = x + return p +} +func (x Request_Color) String() string { + return proto.EnumName(Request_Color_name, int32(x)) +} +func (x *Request_Color) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Request_Color_value, data, "Request_Color") + if err != nil { + return err + } + *x = Request_Color(value) + return nil +} + +type Reply_Entry_Game int32 + +const ( + Reply_Entry_FOOTBALL Reply_Entry_Game = 1 + Reply_Entry_TENNIS Reply_Entry_Game = 2 +) + +var Reply_Entry_Game_name = map[int32]string{ + 1: "FOOTBALL", + 2: "TENNIS", +} +var Reply_Entry_Game_value = map[string]int32{ + "FOOTBALL": 1, + "TENNIS": 2, +} + +func (x Reply_Entry_Game) Enum() *Reply_Entry_Game { + p := new(Reply_Entry_Game) + *p = x + return p +} +func (x Reply_Entry_Game) String() string { + return proto.EnumName(Reply_Entry_Game_name, int32(x)) +} +func (x *Reply_Entry_Game) UnmarshalJSON(data []byte) error { + value, err := proto.UnmarshalJSONEnum(Reply_Entry_Game_value, data, "Reply_Entry_Game") + if err != nil { + return err + } + *x = Reply_Entry_Game(value) + return nil +} + +// This is a message that might be sent somewhere. +type Request struct { + Key []int64 `protobuf:"varint,1,rep,name=key" json:"key,omitempty"` + // optional imp.ImportedMessage imported_message = 2; + Hue *Request_Color `protobuf:"varint,3,opt,name=hue,enum=my.test.Request_Color" json:"hue,omitempty"` + Hat *HatType `protobuf:"varint,4,opt,name=hat,enum=my.test.HatType,def=1" json:"hat,omitempty"` + // optional imp.ImportedMessage.Owner owner = 6; + Deadline *float32 `protobuf:"fixed32,7,opt,name=deadline,def=inf" json:"deadline,omitempty"` + Somegroup *Request_SomeGroup `protobuf:"group,8,opt,name=SomeGroup,json=somegroup" json:"somegroup,omitempty"` + // This is a map field. It will generate map[int32]string. + NameMapping map[int32]string `protobuf:"bytes,14,rep,name=name_mapping,json=nameMapping" json:"name_mapping,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // This is a map field whose value type is a message. + MsgMapping map[int64]*Reply `protobuf:"bytes,15,rep,name=msg_mapping,json=msgMapping" json:"msg_mapping,omitempty" protobuf_key:"zigzag64,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + Reset_ *int32 `protobuf:"varint,12,opt,name=reset" json:"reset,omitempty"` + // This field should not conflict with any getters. + GetKey_ *string `protobuf:"bytes,16,opt,name=get_key,json=getKey" json:"get_key,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Request) Reset() { *m = Request{} } +func (m *Request) String() string { return proto.CompactTextString(m) } +func (*Request) ProtoMessage() {} + +const Default_Request_Hat HatType = HatType_FEDORA + +var Default_Request_Deadline float32 = float32(math.Inf(1)) + +func (m *Request) GetKey() []int64 { + if m != nil { + return m.Key + } + return nil +} + +func (m *Request) GetHue() Request_Color { + if m != nil && m.Hue != nil { + return *m.Hue + } + return Request_RED +} + +func (m *Request) GetHat() HatType { + if m != nil && m.Hat != nil { + return *m.Hat + } + return Default_Request_Hat +} + +func (m *Request) GetDeadline() float32 { + if m != nil && m.Deadline != nil { + return *m.Deadline + } + return Default_Request_Deadline +} + +func (m *Request) GetSomegroup() *Request_SomeGroup { + if m != nil { + return m.Somegroup + } + return nil +} + +func (m *Request) GetNameMapping() map[int32]string { + if m != nil { + return m.NameMapping + } + return nil +} + +func (m *Request) GetMsgMapping() map[int64]*Reply { + if m != nil { + return m.MsgMapping + } + return nil +} + +func (m *Request) GetReset_() int32 { + if m != nil && m.Reset_ != nil { + return *m.Reset_ + } + return 0 +} + +func (m *Request) GetGetKey_() string { + if m != nil && m.GetKey_ != nil { + return *m.GetKey_ + } + return "" +} + +type Request_SomeGroup struct { + GroupField *int32 `protobuf:"varint,9,opt,name=group_field,json=groupField" json:"group_field,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Request_SomeGroup) Reset() { *m = Request_SomeGroup{} } +func (m *Request_SomeGroup) String() string { return proto.CompactTextString(m) } +func (*Request_SomeGroup) ProtoMessage() {} + +func (m *Request_SomeGroup) GetGroupField() int32 { + if m != nil && m.GroupField != nil { + return *m.GroupField + } + return 0 +} + +type Reply struct { + Found []*Reply_Entry `protobuf:"bytes,1,rep,name=found" json:"found,omitempty"` + CompactKeys []int32 `protobuf:"varint,2,rep,packed,name=compact_keys,json=compactKeys" json:"compact_keys,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Reply) Reset() { *m = Reply{} } +func (m *Reply) String() string { return proto.CompactTextString(m) } +func (*Reply) ProtoMessage() {} + +var extRange_Reply = []proto.ExtensionRange{ + {100, 536870911}, +} + +func (*Reply) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_Reply +} + +func (m *Reply) GetFound() []*Reply_Entry { + if m != nil { + return m.Found + } + return nil +} + +func (m *Reply) GetCompactKeys() []int32 { + if m != nil { + return m.CompactKeys + } + return nil +} + +type Reply_Entry struct { + KeyThatNeeds_1234Camel_CasIng *int64 `protobuf:"varint,1,req,name=key_that_needs_1234camel_CasIng,json=keyThatNeeds1234camelCasIng" json:"key_that_needs_1234camel_CasIng,omitempty"` + Value *int64 `protobuf:"varint,2,opt,name=value,def=7" json:"value,omitempty"` + XMyFieldName_2 *int64 `protobuf:"varint,3,opt,name=_my_field_name_2,json=MyFieldName2" json:"_my_field_name_2,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Reply_Entry) Reset() { *m = Reply_Entry{} } +func (m *Reply_Entry) String() string { return proto.CompactTextString(m) } +func (*Reply_Entry) ProtoMessage() {} + +const Default_Reply_Entry_Value int64 = 7 + +func (m *Reply_Entry) GetKeyThatNeeds_1234Camel_CasIng() int64 { + if m != nil && m.KeyThatNeeds_1234Camel_CasIng != nil { + return *m.KeyThatNeeds_1234Camel_CasIng + } + return 0 +} + +func (m *Reply_Entry) GetValue() int64 { + if m != nil && m.Value != nil { + return *m.Value + } + return Default_Reply_Entry_Value +} + +func (m *Reply_Entry) GetXMyFieldName_2() int64 { + if m != nil && m.XMyFieldName_2 != nil { + return *m.XMyFieldName_2 + } + return 0 +} + +type OtherBase struct { + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OtherBase) Reset() { *m = OtherBase{} } +func (m *OtherBase) String() string { return proto.CompactTextString(m) } +func (*OtherBase) ProtoMessage() {} + +var extRange_OtherBase = []proto.ExtensionRange{ + {100, 536870911}, +} + +func (*OtherBase) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_OtherBase +} + +func (m *OtherBase) GetName() string { + if m != nil && m.Name != nil { + return *m.Name + } + return "" +} + +type ReplyExtensions struct { + XXX_unrecognized []byte `json:"-"` +} + +func (m *ReplyExtensions) Reset() { *m = ReplyExtensions{} } +func (m *ReplyExtensions) String() string { return proto.CompactTextString(m) } +func (*ReplyExtensions) ProtoMessage() {} + +var E_ReplyExtensions_Time = &proto.ExtensionDesc{ + ExtendedType: (*Reply)(nil), + ExtensionType: (*float64)(nil), + Field: 101, + Name: "my.test.ReplyExtensions.time", + Tag: "fixed64,101,opt,name=time", + Filename: "my_test/test.proto", +} + +var E_ReplyExtensions_Carrot = &proto.ExtensionDesc{ + ExtendedType: (*Reply)(nil), + ExtensionType: (*ReplyExtensions)(nil), + Field: 105, + Name: "my.test.ReplyExtensions.carrot", + Tag: "bytes,105,opt,name=carrot", + Filename: "my_test/test.proto", +} + +var E_ReplyExtensions_Donut = &proto.ExtensionDesc{ + ExtendedType: (*OtherBase)(nil), + ExtensionType: (*ReplyExtensions)(nil), + Field: 101, + Name: "my.test.ReplyExtensions.donut", + Tag: "bytes,101,opt,name=donut", + Filename: "my_test/test.proto", +} + +type OtherReplyExtensions struct { + Key *int32 `protobuf:"varint,1,opt,name=key" json:"key,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OtherReplyExtensions) Reset() { *m = OtherReplyExtensions{} } +func (m *OtherReplyExtensions) String() string { return proto.CompactTextString(m) } +func (*OtherReplyExtensions) ProtoMessage() {} + +func (m *OtherReplyExtensions) GetKey() int32 { + if m != nil && m.Key != nil { + return *m.Key + } + return 0 +} + +type OldReply struct { + proto.XXX_InternalExtensions `json:"-"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *OldReply) Reset() { *m = OldReply{} } +func (m *OldReply) String() string { return proto.CompactTextString(m) } +func (*OldReply) ProtoMessage() {} + +func (m *OldReply) Marshal() ([]byte, error) { + return proto.MarshalMessageSet(&m.XXX_InternalExtensions) +} +func (m *OldReply) Unmarshal(buf []byte) error { + return proto.UnmarshalMessageSet(buf, &m.XXX_InternalExtensions) +} +func (m *OldReply) MarshalJSON() ([]byte, error) { + return proto.MarshalMessageSetJSON(&m.XXX_InternalExtensions) +} +func (m *OldReply) UnmarshalJSON(buf []byte) error { + return proto.UnmarshalMessageSetJSON(buf, &m.XXX_InternalExtensions) +} + +// ensure OldReply satisfies proto.Marshaler and proto.Unmarshaler +var _ proto.Marshaler = (*OldReply)(nil) +var _ proto.Unmarshaler = (*OldReply)(nil) + +var extRange_OldReply = []proto.ExtensionRange{ + {100, 2147483646}, +} + +func (*OldReply) ExtensionRangeArray() []proto.ExtensionRange { + return extRange_OldReply +} + +type Communique struct { + MakeMeCry *bool `protobuf:"varint,1,opt,name=make_me_cry,json=makeMeCry" json:"make_me_cry,omitempty"` + // This is a oneof, called "union". + // + // Types that are valid to be assigned to Union: + // *Communique_Number + // *Communique_Name + // *Communique_Data + // *Communique_TempC + // *Communique_Height + // *Communique_Today + // *Communique_Maybe + // *Communique_Delta_ + // *Communique_Msg + // *Communique_Somegroup + Union isCommunique_Union `protobuf_oneof:"union"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Communique) Reset() { *m = Communique{} } +func (m *Communique) String() string { return proto.CompactTextString(m) } +func (*Communique) ProtoMessage() {} + +type isCommunique_Union interface { + isCommunique_Union() +} + +type Communique_Number struct { + Number int32 `protobuf:"varint,5,opt,name=number,oneof"` +} +type Communique_Name struct { + Name string `protobuf:"bytes,6,opt,name=name,oneof"` +} +type Communique_Data struct { + Data []byte `protobuf:"bytes,7,opt,name=data,oneof"` +} +type Communique_TempC struct { + TempC float64 `protobuf:"fixed64,8,opt,name=temp_c,json=tempC,oneof"` +} +type Communique_Height struct { + Height float32 `protobuf:"fixed32,9,opt,name=height,oneof"` +} +type Communique_Today struct { + Today Days `protobuf:"varint,10,opt,name=today,enum=my.test.Days,oneof"` +} +type Communique_Maybe struct { + Maybe bool `protobuf:"varint,11,opt,name=maybe,oneof"` +} +type Communique_Delta_ struct { + Delta int32 `protobuf:"zigzag32,12,opt,name=delta,oneof"` +} +type Communique_Msg struct { + Msg *Reply `protobuf:"bytes,13,opt,name=msg,oneof"` +} +type Communique_Somegroup struct { + Somegroup *Communique_SomeGroup `protobuf:"group,14,opt,name=SomeGroup,json=somegroup,oneof"` +} + +func (*Communique_Number) isCommunique_Union() {} +func (*Communique_Name) isCommunique_Union() {} +func (*Communique_Data) isCommunique_Union() {} +func (*Communique_TempC) isCommunique_Union() {} +func (*Communique_Height) isCommunique_Union() {} +func (*Communique_Today) isCommunique_Union() {} +func (*Communique_Maybe) isCommunique_Union() {} +func (*Communique_Delta_) isCommunique_Union() {} +func (*Communique_Msg) isCommunique_Union() {} +func (*Communique_Somegroup) isCommunique_Union() {} + +func (m *Communique) GetUnion() isCommunique_Union { + if m != nil { + return m.Union + } + return nil +} + +func (m *Communique) GetMakeMeCry() bool { + if m != nil && m.MakeMeCry != nil { + return *m.MakeMeCry + } + return false +} + +func (m *Communique) GetNumber() int32 { + if x, ok := m.GetUnion().(*Communique_Number); ok { + return x.Number + } + return 0 +} + +func (m *Communique) GetName() string { + if x, ok := m.GetUnion().(*Communique_Name); ok { + return x.Name + } + return "" +} + +func (m *Communique) GetData() []byte { + if x, ok := m.GetUnion().(*Communique_Data); ok { + return x.Data + } + return nil +} + +func (m *Communique) GetTempC() float64 { + if x, ok := m.GetUnion().(*Communique_TempC); ok { + return x.TempC + } + return 0 +} + +func (m *Communique) GetHeight() float32 { + if x, ok := m.GetUnion().(*Communique_Height); ok { + return x.Height + } + return 0 +} + +func (m *Communique) GetToday() Days { + if x, ok := m.GetUnion().(*Communique_Today); ok { + return x.Today + } + return Days_MONDAY +} + +func (m *Communique) GetMaybe() bool { + if x, ok := m.GetUnion().(*Communique_Maybe); ok { + return x.Maybe + } + return false +} + +func (m *Communique) GetDelta() int32 { + if x, ok := m.GetUnion().(*Communique_Delta_); ok { + return x.Delta + } + return 0 +} + +func (m *Communique) GetMsg() *Reply { + if x, ok := m.GetUnion().(*Communique_Msg); ok { + return x.Msg + } + return nil +} + +func (m *Communique) GetSomegroup() *Communique_SomeGroup { + if x, ok := m.GetUnion().(*Communique_Somegroup); ok { + return x.Somegroup + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Communique) 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 _Communique_OneofMarshaler, _Communique_OneofUnmarshaler, _Communique_OneofSizer, []interface{}{ + (*Communique_Number)(nil), + (*Communique_Name)(nil), + (*Communique_Data)(nil), + (*Communique_TempC)(nil), + (*Communique_Height)(nil), + (*Communique_Today)(nil), + (*Communique_Maybe)(nil), + (*Communique_Delta_)(nil), + (*Communique_Msg)(nil), + (*Communique_Somegroup)(nil), + } +} + +func _Communique_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Communique) + // union + switch x := m.Union.(type) { + case *Communique_Number: + b.EncodeVarint(5<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Number)) + case *Communique_Name: + b.EncodeVarint(6<<3 | proto.WireBytes) + b.EncodeStringBytes(x.Name) + case *Communique_Data: + b.EncodeVarint(7<<3 | proto.WireBytes) + b.EncodeRawBytes(x.Data) + case *Communique_TempC: + b.EncodeVarint(8<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.TempC)) + case *Communique_Height: + b.EncodeVarint(9<<3 | proto.WireFixed32) + b.EncodeFixed32(uint64(math.Float32bits(x.Height))) + case *Communique_Today: + b.EncodeVarint(10<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.Today)) + case *Communique_Maybe: + t := uint64(0) + if x.Maybe { + t = 1 + } + b.EncodeVarint(11<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Communique_Delta_: + b.EncodeVarint(12<<3 | proto.WireVarint) + b.EncodeZigzag32(uint64(x.Delta)) + case *Communique_Msg: + b.EncodeVarint(13<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Msg); err != nil { + return err + } + case *Communique_Somegroup: + b.EncodeVarint(14<<3 | proto.WireStartGroup) + if err := b.Marshal(x.Somegroup); err != nil { + return err + } + b.EncodeVarint(14<<3 | proto.WireEndGroup) + case nil: + default: + return fmt.Errorf("Communique.Union has unexpected type %T", x) + } + return nil +} + +func _Communique_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Communique) + switch tag { + case 5: // union.number + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Communique_Number{int32(x)} + return true, err + case 6: // union.name + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Union = &Communique_Name{x} + return true, err + case 7: // union.data + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeRawBytes(true) + m.Union = &Communique_Data{x} + return true, err + case 8: // union.temp_c + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Union = &Communique_TempC{math.Float64frombits(x)} + return true, err + case 9: // union.height + if wire != proto.WireFixed32 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed32() + m.Union = &Communique_Height{math.Float32frombits(uint32(x))} + return true, err + case 10: // union.today + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Communique_Today{Days(x)} + return true, err + case 11: // union.maybe + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Union = &Communique_Maybe{x != 0} + return true, err + case 12: // union.delta + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeZigzag32() + m.Union = &Communique_Delta_{int32(x)} + return true, err + case 13: // union.msg + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Reply) + err := b.DecodeMessage(msg) + m.Union = &Communique_Msg{msg} + return true, err + case 14: // union.somegroup + if wire != proto.WireStartGroup { + return true, proto.ErrInternalBadWireType + } + msg := new(Communique_SomeGroup) + err := b.DecodeGroup(msg) + m.Union = &Communique_Somegroup{msg} + return true, err + default: + return false, nil + } +} + +func _Communique_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Communique) + // union + switch x := m.Union.(type) { + case *Communique_Number: + n += proto.SizeVarint(5<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Number)) + case *Communique_Name: + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Name))) + n += len(x.Name) + case *Communique_Data: + n += proto.SizeVarint(7<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.Data))) + n += len(x.Data) + case *Communique_TempC: + n += proto.SizeVarint(8<<3 | proto.WireFixed64) + n += 8 + case *Communique_Height: + n += proto.SizeVarint(9<<3 | proto.WireFixed32) + n += 4 + case *Communique_Today: + n += proto.SizeVarint(10<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.Today)) + case *Communique_Maybe: + n += proto.SizeVarint(11<<3 | proto.WireVarint) + n += 1 + case *Communique_Delta_: + n += proto.SizeVarint(12<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64((uint32(x.Delta) << 1) ^ uint32((int32(x.Delta) >> 31)))) + case *Communique_Msg: + s := proto.Size(x.Msg) + n += proto.SizeVarint(13<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Communique_Somegroup: + n += proto.SizeVarint(14<<3 | proto.WireStartGroup) + n += proto.Size(x.Somegroup) + n += proto.SizeVarint(14<<3 | proto.WireEndGroup) + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +type Communique_SomeGroup struct { + Member *string `protobuf:"bytes,15,opt,name=member" json:"member,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *Communique_SomeGroup) Reset() { *m = Communique_SomeGroup{} } +func (m *Communique_SomeGroup) String() string { return proto.CompactTextString(m) } +func (*Communique_SomeGroup) ProtoMessage() {} + +func (m *Communique_SomeGroup) GetMember() string { + if m != nil && m.Member != nil { + return *m.Member + } + return "" +} + +type Communique_Delta struct { + XXX_unrecognized []byte `json:"-"` +} + +func (m *Communique_Delta) Reset() { *m = Communique_Delta{} } +func (m *Communique_Delta) String() string { return proto.CompactTextString(m) } +func (*Communique_Delta) ProtoMessage() {} + +var E_Tag = &proto.ExtensionDesc{ + ExtendedType: (*Reply)(nil), + ExtensionType: (*string)(nil), + Field: 103, + Name: "my.test.tag", + Tag: "bytes,103,opt,name=tag", + Filename: "my_test/test.proto", +} + +var E_Donut = &proto.ExtensionDesc{ + ExtendedType: (*Reply)(nil), + ExtensionType: (*OtherReplyExtensions)(nil), + Field: 106, + Name: "my.test.donut", + Tag: "bytes,106,opt,name=donut", + Filename: "my_test/test.proto", +} + +func init() { + proto.RegisterType((*Request)(nil), "my.test.Request") + proto.RegisterType((*Request_SomeGroup)(nil), "my.test.Request.SomeGroup") + proto.RegisterType((*Reply)(nil), "my.test.Reply") + proto.RegisterType((*Reply_Entry)(nil), "my.test.Reply.Entry") + proto.RegisterType((*OtherBase)(nil), "my.test.OtherBase") + proto.RegisterType((*ReplyExtensions)(nil), "my.test.ReplyExtensions") + proto.RegisterType((*OtherReplyExtensions)(nil), "my.test.OtherReplyExtensions") + proto.RegisterType((*OldReply)(nil), "my.test.OldReply") + proto.RegisterType((*Communique)(nil), "my.test.Communique") + proto.RegisterType((*Communique_SomeGroup)(nil), "my.test.Communique.SomeGroup") + proto.RegisterType((*Communique_Delta)(nil), "my.test.Communique.Delta") + proto.RegisterEnum("my.test.HatType", HatType_name, HatType_value) + proto.RegisterEnum("my.test.Days", Days_name, Days_value) + proto.RegisterEnum("my.test.Request_Color", Request_Color_name, Request_Color_value) + proto.RegisterEnum("my.test.Reply_Entry_Game", Reply_Entry_Game_name, Reply_Entry_Game_value) + proto.RegisterExtension(E_ReplyExtensions_Time) + proto.RegisterExtension(E_ReplyExtensions_Carrot) + proto.RegisterExtension(E_ReplyExtensions_Donut) + proto.RegisterExtension(E_Tag) + proto.RegisterExtension(E_Donut) +} diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto new file mode 100644 index 0000000..8e70946 --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/my_test/test.proto @@ -0,0 +1,156 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2010 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto2"; + +// This package holds interesting messages. +package my.test; // dotted package name + +//import "imp.proto"; +import "multi/multi1.proto"; // unused import + +enum HatType { + // deliberately skipping 0 + FEDORA = 1; + FEZ = 2; +} + +// This enum represents days of the week. +enum Days { + option allow_alias = true; + + MONDAY = 1; + TUESDAY = 2; + LUNDI = 1; // same value as MONDAY +} + +// This is a message that might be sent somewhere. +message Request { + enum Color { + RED = 0; + GREEN = 1; + BLUE = 2; + } + repeated int64 key = 1; +// optional imp.ImportedMessage imported_message = 2; + optional Color hue = 3; // no default + optional HatType hat = 4 [default=FEDORA]; +// optional imp.ImportedMessage.Owner owner = 6; + optional float deadline = 7 [default=inf]; + optional group SomeGroup = 8 { + optional int32 group_field = 9; + } + + // These foreign types are in imp2.proto, + // which is publicly imported by imp.proto. +// optional imp.PubliclyImportedMessage pub = 10; +// optional imp.PubliclyImportedEnum pub_enum = 13 [default=HAIR]; + + + // This is a map field. It will generate map[int32]string. + map name_mapping = 14; + // This is a map field whose value type is a message. + map msg_mapping = 15; + + optional int32 reset = 12; + // This field should not conflict with any getters. + optional string get_key = 16; +} + +message Reply { + message Entry { + required int64 key_that_needs_1234camel_CasIng = 1; + optional int64 value = 2 [default=7]; + optional int64 _my_field_name_2 = 3; + enum Game { + FOOTBALL = 1; + TENNIS = 2; + } + } + repeated Entry found = 1; + repeated int32 compact_keys = 2 [packed=true]; + extensions 100 to max; +} + +message OtherBase { + optional string name = 1; + extensions 100 to max; +} + +message ReplyExtensions { + extend Reply { + optional double time = 101; + optional ReplyExtensions carrot = 105; + } + extend OtherBase { + optional ReplyExtensions donut = 101; + } +} + +message OtherReplyExtensions { + optional int32 key = 1; +} + +// top-level extension +extend Reply { + optional string tag = 103; + optional OtherReplyExtensions donut = 106; +// optional imp.ImportedMessage elephant = 107; // extend with message from another file. +} + +message OldReply { + // Extensions will be encoded in MessageSet wire format. + option message_set_wire_format = true; + extensions 100 to max; +} + +message Communique { + optional bool make_me_cry = 1; + + // This is a oneof, called "union". + oneof union { + int32 number = 5; + string name = 6; + bytes data = 7; + double temp_c = 8; + float height = 9; + Days today = 10; + bool maybe = 11; + sint32 delta = 12; // name will conflict with Delta below + Reply msg = 13; + group SomeGroup = 14 { + optional string member = 15; + } + } + + message Delta {} +} + diff --git a/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/proto3.proto b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/proto3.proto new file mode 100644 index 0000000..869b9af --- /dev/null +++ b/vendor/github.com/golang/protobuf/protoc-gen-go/testdata/proto3.proto @@ -0,0 +1,53 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2014 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package proto3; + +message Request { + enum Flavour { + SWEET = 0; + SOUR = 1; + UMAMI = 2; + GOPHERLICIOUS = 3; + } + string name = 1; + repeated int64 key = 2; + Flavour taste = 3; + Book book = 4; + repeated int64 unpacked = 5 [packed=false]; +} + +message Book { + string title = 1; + bytes raw_data = 2; +} diff --git a/vendor/github.com/golang/protobuf/ptypes/any.go b/vendor/github.com/golang/protobuf/ptypes/any.go new file mode 100644 index 0000000..b2af97f --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/any.go @@ -0,0 +1,139 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package ptypes + +// This file implements functions to marshal proto.Message to/from +// google.protobuf.Any message. + +import ( + "fmt" + "reflect" + "strings" + + "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes/any" +) + +const googleApis = "type.googleapis.com/" + +// AnyMessageName returns the name of the message contained in a google.protobuf.Any message. +// +// Note that regular type assertions should be done using the Is +// function. AnyMessageName is provided for less common use cases like filtering a +// sequence of Any messages based on a set of allowed message type names. +func AnyMessageName(any *any.Any) (string, error) { + if any == nil { + return "", fmt.Errorf("message is nil") + } + slash := strings.LastIndex(any.TypeUrl, "/") + if slash < 0 { + return "", fmt.Errorf("message type url %q is invalid", any.TypeUrl) + } + return any.TypeUrl[slash+1:], nil +} + +// MarshalAny takes the protocol buffer and encodes it into google.protobuf.Any. +func MarshalAny(pb proto.Message) (*any.Any, error) { + value, err := proto.Marshal(pb) + if err != nil { + return nil, err + } + return &any.Any{TypeUrl: googleApis + proto.MessageName(pb), Value: value}, nil +} + +// DynamicAny is a value that can be passed to UnmarshalAny to automatically +// allocate a proto.Message for the type specified in a google.protobuf.Any +// message. The allocated message is stored in the embedded proto.Message. +// +// Example: +// +// var x ptypes.DynamicAny +// if err := ptypes.UnmarshalAny(a, &x); err != nil { ... } +// fmt.Printf("unmarshaled message: %v", x.Message) +type DynamicAny struct { + proto.Message +} + +// Empty returns a new proto.Message of the type specified in a +// google.protobuf.Any message. It returns an error if corresponding message +// type isn't linked in. +func Empty(any *any.Any) (proto.Message, error) { + aname, err := AnyMessageName(any) + if err != nil { + return nil, err + } + + t := proto.MessageType(aname) + if t == nil { + return nil, fmt.Errorf("any: message type %q isn't linked in", aname) + } + return reflect.New(t.Elem()).Interface().(proto.Message), nil +} + +// UnmarshalAny parses the protocol buffer representation in a google.protobuf.Any +// message and places the decoded result in pb. It returns an error if type of +// contents of Any message does not match type of pb message. +// +// pb can be a proto.Message, or a *DynamicAny. +func UnmarshalAny(any *any.Any, pb proto.Message) error { + if d, ok := pb.(*DynamicAny); ok { + if d.Message == nil { + var err error + d.Message, err = Empty(any) + if err != nil { + return err + } + } + return UnmarshalAny(any, d.Message) + } + + aname, err := AnyMessageName(any) + if err != nil { + return err + } + + mname := proto.MessageName(pb) + if aname != mname { + return fmt.Errorf("mismatched message type: got %q want %q", aname, mname) + } + return proto.Unmarshal(any.Value, pb) +} + +// Is returns true if any value contains a given message type. +func Is(any *any.Any, pb proto.Message) bool { + aname, err := AnyMessageName(any) + if err != nil { + return false + } + + return aname == proto.MessageName(pb) +} diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go new file mode 100644 index 0000000..f346017 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/any/any.pb.go @@ -0,0 +1,178 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/any.proto + +/* +Package any is a generated protocol buffer package. + +It is generated from these files: + google/protobuf/any.proto + +It has these top-level messages: + Any +*/ +package any + +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 protocol buffer message along with a +// URL that describes the type of the serialized message. +// +// Protobuf library provides support to pack/unpack Any values in the form +// of utility functions or additional generated methods of the Any type. +// +// Example 1: Pack and unpack a message in C++. +// +// Foo foo = ...; +// Any any; +// any.PackFrom(foo); +// ... +// if (any.UnpackTo(&foo)) { +// ... +// } +// +// Example 2: Pack and unpack a message in Java. +// +// Foo foo = ...; +// Any any = Any.pack(foo); +// ... +// if (any.is(Foo.class)) { +// foo = any.unpack(Foo.class); +// } +// +// Example 3: Pack and unpack a message in Python. +// +// foo = Foo(...) +// any = Any() +// any.Pack(foo) +// ... +// if any.Is(Foo.DESCRIPTOR): +// any.Unpack(foo) +// ... +// +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := ptypes.MarshalAny(foo) +// ... +// foo := &pb.Foo{} +// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// ... +// } +// +// The pack methods provided by protobuf library will by default use +// 'type.googleapis.com/full.type.name' as the type URL and the unpack +// methods only use the fully qualified type name after the last '/' +// in the type URL, for example "foo.bar.com/x/y.z" will yield type +// name "y.z". +// +// +// 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 protocol buffer message. + // + // For URLs which use the scheme `http`, `https`, or no scheme, the + // following restrictions and interpretations apply: + // + // * If no scheme 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`). + // The name should be in a canonical form (e.g., leading "." is + // not accepted). + // * 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.) + // + // Schemes other than `http`, `https` (or the empty scheme) might be + // used with implementation specific semantics. + // + TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl" json:"type_url,omitempty"` + // Must be a valid serialized protocol buffer 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 (m *Any) GetTypeUrl() string { + if m != nil { + return m.TypeUrl + } + return "" +} + +func (m *Any) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +func init() { + proto.RegisterType((*Any)(nil), "google.protobuf.Any") +} + +func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 185 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x49, 0x81, 0x51, 0x83, 0x27, 0x08, 0xc2, 0x71, 0xca, 0xe7, 0x12, 0x4e, 0xce, + 0xcf, 0xd5, 0x43, 0x33, 0xce, 0x89, 0xc3, 0x31, 0xaf, 0x32, 0x00, 0xc4, 0x09, 0x60, 0x8c, 0x52, + 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, + 0x4b, 0x47, 0xb8, 0xa8, 0x00, 0x64, 0x7a, 0x31, 0xc8, 0x61, 0x8b, 0x98, 0x98, 0xdd, 0x03, 0x9c, + 0x56, 0x31, 0xc9, 0xb9, 0x43, 0x8c, 0x0a, 0x80, 0x2a, 0xd1, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce, + 0xcb, 0x2f, 0xcf, 0x0b, 0x01, 0x29, 0x4d, 0x62, 0x03, 0xeb, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, + 0xff, 0x13, 0xf8, 0xe8, 0x42, 0xdd, 0x00, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/ptypes/any/any.proto b/vendor/github.com/golang/protobuf/ptypes/any/any.proto new file mode 100644 index 0000000..c748667 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/any/any.proto @@ -0,0 +1,149 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option go_package = "github.com/golang/protobuf/ptypes/any"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "AnyProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// `Any` contains an arbitrary serialized protocol buffer message along with a +// URL that describes the type of the serialized message. +// +// Protobuf library provides support to pack/unpack Any values in the form +// of utility functions or additional generated methods of the Any type. +// +// Example 1: Pack and unpack a message in C++. +// +// Foo foo = ...; +// Any any; +// any.PackFrom(foo); +// ... +// if (any.UnpackTo(&foo)) { +// ... +// } +// +// Example 2: Pack and unpack a message in Java. +// +// Foo foo = ...; +// Any any = Any.pack(foo); +// ... +// if (any.is(Foo.class)) { +// foo = any.unpack(Foo.class); +// } +// +// Example 3: Pack and unpack a message in Python. +// +// foo = Foo(...) +// any = Any() +// any.Pack(foo) +// ... +// if any.Is(Foo.DESCRIPTOR): +// any.Unpack(foo) +// ... +// +// Example 4: Pack and unpack a message in Go +// +// foo := &pb.Foo{...} +// any, err := ptypes.MarshalAny(foo) +// ... +// foo := &pb.Foo{} +// if err := ptypes.UnmarshalAny(any, foo); err != nil { +// ... +// } +// +// The pack methods provided by protobuf library will by default use +// 'type.googleapis.com/full.type.name' as the type URL and the unpack +// methods only use the fully qualified type name after the last '/' +// in the type URL, for example "foo.bar.com/x/y.z" will yield type +// name "y.z". +// +// +// 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" +// } +// +message Any { + // A URL/resource name whose content describes the type of the + // serialized protocol buffer message. + // + // For URLs which use the scheme `http`, `https`, or no scheme, the + // following restrictions and interpretations apply: + // + // * If no scheme 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`). + // The name should be in a canonical form (e.g., leading "." is + // not accepted). + // * 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.) + // + // Schemes other than `http`, `https` (or the empty scheme) might be + // used with implementation specific semantics. + // + string type_url = 1; + + // Must be a valid serialized protocol buffer of the above specified type. + bytes value = 2; +} diff --git a/vendor/github.com/golang/protobuf/ptypes/any_test.go b/vendor/github.com/golang/protobuf/ptypes/any_test.go new file mode 100644 index 0000000..ed675b4 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/any_test.go @@ -0,0 +1,113 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package ptypes + +import ( + "testing" + + "github.com/golang/protobuf/proto" + pb "github.com/golang/protobuf/protoc-gen-go/descriptor" + "github.com/golang/protobuf/ptypes/any" +) + +func TestMarshalUnmarshal(t *testing.T) { + orig := &any.Any{Value: []byte("test")} + + packed, err := MarshalAny(orig) + if err != nil { + t.Errorf("MarshalAny(%+v): got: _, %v exp: _, nil", orig, err) + } + + unpacked := &any.Any{} + err = UnmarshalAny(packed, unpacked) + if err != nil || !proto.Equal(unpacked, orig) { + t.Errorf("got: %v, %+v; want nil, %+v", err, unpacked, orig) + } +} + +func TestIs(t *testing.T) { + a, err := MarshalAny(&pb.FileDescriptorProto{}) + if err != nil { + t.Fatal(err) + } + if Is(a, &pb.DescriptorProto{}) { + t.Error("FileDescriptorProto is not a DescriptorProto, but Is says it is") + } + if !Is(a, &pb.FileDescriptorProto{}) { + t.Error("FileDescriptorProto is indeed a FileDescriptorProto, but Is says it is not") + } +} + +func TestIsDifferentUrlPrefixes(t *testing.T) { + m := &pb.FileDescriptorProto{} + a := &any.Any{TypeUrl: "foo/bar/" + proto.MessageName(m)} + if !Is(a, m) { + t.Errorf("message with type url %q didn't satisfy Is for type %q", a.TypeUrl, proto.MessageName(m)) + } +} + +func TestUnmarshalDynamic(t *testing.T) { + want := &pb.FileDescriptorProto{Name: proto.String("foo")} + a, err := MarshalAny(want) + if err != nil { + t.Fatal(err) + } + var got DynamicAny + if err := UnmarshalAny(a, &got); err != nil { + t.Fatal(err) + } + if !proto.Equal(got.Message, want) { + t.Errorf("invalid result from UnmarshalAny, got %q want %q", got.Message, want) + } +} + +func TestEmpty(t *testing.T) { + want := &pb.FileDescriptorProto{} + a, err := MarshalAny(want) + if err != nil { + t.Fatal(err) + } + got, err := Empty(a) + if err != nil { + t.Fatal(err) + } + if !proto.Equal(got, want) { + t.Errorf("unequal empty message, got %q, want %q", got, want) + } + + // that's a valid type_url for a message which shouldn't be linked into this + // test binary. We want an error. + a.TypeUrl = "type.googleapis.com/google.protobuf.FieldMask" + if _, err := Empty(a); err == nil { + t.Errorf("got no error for an attempt to create a message of type %q, which shouldn't be linked in", a.TypeUrl) + } +} diff --git a/vendor/github.com/golang/protobuf/ptypes/doc.go b/vendor/github.com/golang/protobuf/ptypes/doc.go new file mode 100644 index 0000000..c0d595d --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/doc.go @@ -0,0 +1,35 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +/* +Package ptypes contains code for interacting with well-known types. +*/ +package ptypes diff --git a/vendor/github.com/golang/protobuf/ptypes/duration.go b/vendor/github.com/golang/protobuf/ptypes/duration.go new file mode 100644 index 0000000..65cb0f8 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/duration.go @@ -0,0 +1,102 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package ptypes + +// This file implements conversions between google.protobuf.Duration +// and time.Duration. + +import ( + "errors" + "fmt" + "time" + + durpb "github.com/golang/protobuf/ptypes/duration" +) + +const ( + // Range of a durpb.Duration in seconds, as specified in + // google/protobuf/duration.proto. This is about 10,000 years in seconds. + maxSeconds = int64(10000 * 365.25 * 24 * 60 * 60) + minSeconds = -maxSeconds +) + +// validateDuration determines whether the durpb.Duration is valid according to the +// definition in google/protobuf/duration.proto. A valid durpb.Duration +// may still be too large to fit into a time.Duration (the range of durpb.Duration +// is about 10,000 years, and the range of time.Duration is about 290). +func validateDuration(d *durpb.Duration) error { + if d == nil { + return errors.New("duration: nil Duration") + } + if d.Seconds < minSeconds || d.Seconds > maxSeconds { + return fmt.Errorf("duration: %v: seconds out of range", d) + } + if d.Nanos <= -1e9 || d.Nanos >= 1e9 { + return fmt.Errorf("duration: %v: nanos out of range", d) + } + // Seconds and Nanos must have the same sign, unless d.Nanos is zero. + if (d.Seconds < 0 && d.Nanos > 0) || (d.Seconds > 0 && d.Nanos < 0) { + return fmt.Errorf("duration: %v: seconds and nanos have different signs", d) + } + return nil +} + +// Duration converts a durpb.Duration to a time.Duration. Duration +// returns an error if the durpb.Duration is invalid or is too large to be +// represented in a time.Duration. +func Duration(p *durpb.Duration) (time.Duration, error) { + if err := validateDuration(p); err != nil { + return 0, err + } + d := time.Duration(p.Seconds) * time.Second + if int64(d/time.Second) != p.Seconds { + return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p) + } + if p.Nanos != 0 { + d += time.Duration(p.Nanos) + if (d < 0) != (p.Nanos < 0) { + return 0, fmt.Errorf("duration: %v is out of range for time.Duration", p) + } + } + return d, nil +} + +// DurationProto converts a time.Duration to a durpb.Duration. +func DurationProto(d time.Duration) *durpb.Duration { + nanos := d.Nanoseconds() + secs := nanos / 1e9 + nanos -= secs * 1e9 + return &durpb.Duration{ + Seconds: secs, + Nanos: int32(nanos), + } +} diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go new file mode 100644 index 0000000..b2410a0 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/duration/duration.pb.go @@ -0,0 +1,144 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/duration.proto + +/* +Package duration is a generated protocol buffer package. + +It is generated from these files: + google/protobuf/duration.proto + +It has these top-level messages: + Duration +*/ +package duration + +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 + +// 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. +// +// # Examples +// +// 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; +// } +// +// Example 3: Compute Duration from datetime.timedelta in Python. +// +// td = datetime.timedelta(days=3, minutes=10) +// duration = Duration() +// duration.FromTimedelta(td) +// +// # JSON Mapping +// +// In JSON format, the Duration type is encoded as a string rather than an +// object, where the string ends in the suffix "s" (indicating seconds) and +// is preceded by the number of seconds, with nanoseconds expressed as +// fractional seconds. For example, 3 seconds with 0 nanoseconds should be +// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should +// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 +// microsecond should be expressed in JSON format as "3.000001s". +// +// +type Duration struct { + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. Note: these bounds are computed from: + // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + 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 fileDescriptor0, []int{0} } +func (*Duration) XXX_WellKnownType() string { return "Duration" } + +func (m *Duration) GetSeconds() int64 { + if m != nil { + return m.Seconds + } + return 0 +} + +func (m *Duration) GetNanos() int32 { + if m != nil { + return m.Nanos + } + return 0 +} + +func init() { + proto.RegisterType((*Duration)(nil), "google.protobuf.Duration") +} + +func init() { proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 190 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x93, 0x02, 0xa3, 0x06, 0x6b, 0x10, 0x84, 0xe3, 0x54, 0xc3, 0x25, 0x9c, 0x9c, + 0x9f, 0xab, 0x87, 0x66, 0xa4, 0x13, 0x2f, 0xcc, 0xc0, 0x00, 0x90, 0x48, 0x00, 0x63, 0x94, 0x56, + 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7a, 0x7e, 0x4e, 0x62, 0x5e, + 0x3a, 0xc2, 0x7d, 0x05, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x70, 0x67, 0xfe, 0x60, 0x64, 0x5c, 0xc4, + 0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e, 0x00, 0x54, 0xa9, 0x5e, 0x78, + 0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b, 0x12, 0x1b, 0xd8, 0x0c, 0x63, + 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0x84, 0x30, 0xff, 0xf3, 0x00, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto b/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto new file mode 100644 index 0000000..975fce4 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/duration/duration.proto @@ -0,0 +1,117 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/duration"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "DurationProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// 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. +// +// # Examples +// +// 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; +// } +// +// Example 3: Compute Duration from datetime.timedelta in Python. +// +// td = datetime.timedelta(days=3, minutes=10) +// duration = Duration() +// duration.FromTimedelta(td) +// +// # JSON Mapping +// +// In JSON format, the Duration type is encoded as a string rather than an +// object, where the string ends in the suffix "s" (indicating seconds) and +// is preceded by the number of seconds, with nanoseconds expressed as +// fractional seconds. For example, 3 seconds with 0 nanoseconds should be +// encoded in JSON format as "3s", while 3 seconds and 1 nanosecond should +// be expressed in JSON format as "3.000000001s", and 3 seconds and 1 +// microsecond should be expressed in JSON format as "3.000001s". +// +// +message Duration { + + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. Note: these bounds are computed from: + // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years + int64 seconds = 1; + + // 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. + int32 nanos = 2; +} diff --git a/vendor/github.com/golang/protobuf/ptypes/duration_test.go b/vendor/github.com/golang/protobuf/ptypes/duration_test.go new file mode 100644 index 0000000..e00491a --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/duration_test.go @@ -0,0 +1,121 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package ptypes + +import ( + "math" + "testing" + "time" + + "github.com/golang/protobuf/proto" + durpb "github.com/golang/protobuf/ptypes/duration" +) + +const ( + minGoSeconds = math.MinInt64 / int64(1e9) + maxGoSeconds = math.MaxInt64 / int64(1e9) +) + +var durationTests = []struct { + proto *durpb.Duration + isValid bool + inRange bool + dur time.Duration +}{ + // The zero duration. + {&durpb.Duration{Seconds: 0, Nanos: 0}, true, true, 0}, + // Some ordinary non-zero durations. + {&durpb.Duration{Seconds: 100, Nanos: 0}, true, true, 100 * time.Second}, + {&durpb.Duration{Seconds: -100, Nanos: 0}, true, true, -100 * time.Second}, + {&durpb.Duration{Seconds: 100, Nanos: 987}, true, true, 100*time.Second + 987}, + {&durpb.Duration{Seconds: -100, Nanos: -987}, true, true, -(100*time.Second + 987)}, + // The largest duration representable in Go. + {&durpb.Duration{Seconds: maxGoSeconds, Nanos: int32(math.MaxInt64 - 1e9*maxGoSeconds)}, true, true, math.MaxInt64}, + // The smallest duration representable in Go. + {&durpb.Duration{Seconds: minGoSeconds, Nanos: int32(math.MinInt64 - 1e9*minGoSeconds)}, true, true, math.MinInt64}, + {nil, false, false, 0}, + {&durpb.Duration{Seconds: -100, Nanos: 987}, false, false, 0}, + {&durpb.Duration{Seconds: 100, Nanos: -987}, false, false, 0}, + {&durpb.Duration{Seconds: math.MinInt64, Nanos: 0}, false, false, 0}, + {&durpb.Duration{Seconds: math.MaxInt64, Nanos: 0}, false, false, 0}, + // The largest valid duration. + {&durpb.Duration{Seconds: maxSeconds, Nanos: 1e9 - 1}, true, false, 0}, + // The smallest valid duration. + {&durpb.Duration{Seconds: minSeconds, Nanos: -(1e9 - 1)}, true, false, 0}, + // The smallest invalid duration above the valid range. + {&durpb.Duration{Seconds: maxSeconds + 1, Nanos: 0}, false, false, 0}, + // The largest invalid duration below the valid range. + {&durpb.Duration{Seconds: minSeconds - 1, Nanos: -(1e9 - 1)}, false, false, 0}, + // One nanosecond past the largest duration representable in Go. + {&durpb.Duration{Seconds: maxGoSeconds, Nanos: int32(math.MaxInt64-1e9*maxGoSeconds) + 1}, true, false, 0}, + // One nanosecond past the smallest duration representable in Go. + {&durpb.Duration{Seconds: minGoSeconds, Nanos: int32(math.MinInt64-1e9*minGoSeconds) - 1}, true, false, 0}, + // One second past the largest duration representable in Go. + {&durpb.Duration{Seconds: maxGoSeconds + 1, Nanos: int32(math.MaxInt64 - 1e9*maxGoSeconds)}, true, false, 0}, + // One second past the smallest duration representable in Go. + {&durpb.Duration{Seconds: minGoSeconds - 1, Nanos: int32(math.MinInt64 - 1e9*minGoSeconds)}, true, false, 0}, +} + +func TestValidateDuration(t *testing.T) { + for _, test := range durationTests { + err := validateDuration(test.proto) + gotValid := (err == nil) + if gotValid != test.isValid { + t.Errorf("validateDuration(%v) = %t, want %t", test.proto, gotValid, test.isValid) + } + } +} + +func TestDuration(t *testing.T) { + for _, test := range durationTests { + got, err := Duration(test.proto) + gotOK := (err == nil) + wantOK := test.isValid && test.inRange + if gotOK != wantOK { + t.Errorf("Duration(%v) ok = %t, want %t", test.proto, gotOK, wantOK) + } + if err == nil && got != test.dur { + t.Errorf("Duration(%v) = %v, want %v", test.proto, got, test.dur) + } + } +} + +func TestDurationProto(t *testing.T) { + for _, test := range durationTests { + if test.isValid && test.inRange { + got := DurationProto(test.dur) + if !proto.Equal(got, test.proto) { + t.Errorf("DurationProto(%v) = %v, want %v", test.dur, got, test.proto) + } + } + } +} diff --git a/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go b/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go new file mode 100644 index 0000000..e877b72 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/empty/empty.pb.go @@ -0,0 +1,66 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/empty.proto + +/* +Package empty is a generated protocol buffer package. + +It is generated from these files: + google/protobuf/empty.proto + +It has these top-level messages: + Empty +*/ +package empty + +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 + +// 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 fileDescriptor0, []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", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 148 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x19, 0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x9a, 0xbc, 0x13, 0x17, 0x58, 0x36, + 0x00, 0xc4, 0x0d, 0x60, 0x8c, 0x52, 0x4f, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, + 0xd5, 0x4f, 0xcf, 0xcf, 0x49, 0xcc, 0x4b, 0x47, 0x58, 0x53, 0x50, 0x52, 0x59, 0x90, 0x5a, 0x0c, + 0xb1, 0xed, 0x07, 0x23, 0xe3, 0x22, 0x26, 0x66, 0xf7, 0x00, 0xa7, 0x55, 0x4c, 0x72, 0xee, 0x10, + 0x13, 0x03, 0xa0, 0xea, 0xf4, 0xc2, 0x53, 0x73, 0x72, 0xbc, 0xf3, 0xf2, 0xcb, 0xf3, 0x42, 0x40, + 0xea, 0x93, 0xd8, 0xc0, 0x06, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x64, 0xd4, 0xb3, 0xa6, + 0xb7, 0x00, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto b/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto new file mode 100644 index 0000000..03cacd2 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/empty/empty.proto @@ -0,0 +1,52 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option go_package = "github.com/golang/protobuf/ptypes/empty"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "EmptyProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; +option cc_enable_arenas = true; + +// 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 `{}`. +message Empty {} diff --git a/vendor/github.com/golang/protobuf/ptypes/regen.sh b/vendor/github.com/golang/protobuf/ptypes/regen.sh new file mode 100755 index 0000000..b50a941 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/regen.sh @@ -0,0 +1,43 @@ +#!/bin/bash -e +# +# This script fetches and rebuilds the "well-known types" protocol buffers. +# To run this you will need protoc and goprotobuf installed; +# see https://github.com/golang/protobuf for instructions. +# You also need Go and Git installed. + +PKG=github.com/golang/protobuf/ptypes +UPSTREAM=https://github.com/google/protobuf +UPSTREAM_SUBDIR=src/google/protobuf +PROTO_FILES=(any duration empty struct timestamp wrappers) + +function die() { + echo 1>&2 $* + exit 1 +} + +# Sanity check that the right tools are accessible. +for tool in go git protoc protoc-gen-go; do + q=$(which $tool) || die "didn't find $tool" + echo 1>&2 "$tool: $q" +done + +tmpdir=$(mktemp -d -t regen-wkt.XXXXXX) +trap 'rm -rf $tmpdir' EXIT + +echo -n 1>&2 "finding package dir... " +pkgdir=$(go list -f '{{.Dir}}' $PKG) +echo 1>&2 $pkgdir +base=$(echo $pkgdir | sed "s,/$PKG\$,,") +echo 1>&2 "base: $base" +cd "$base" + +echo 1>&2 "fetching latest protos... " +git clone -q $UPSTREAM $tmpdir + +for file in ${PROTO_FILES[@]}; do + echo 1>&2 "* $file" + protoc --go_out=. -I$tmpdir/src $tmpdir/src/google/protobuf/$file.proto || die + cp $tmpdir/src/google/protobuf/$file.proto $PKG/$file +done + +echo 1>&2 "All OK" diff --git a/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go b/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go new file mode 100644 index 0000000..4cfe608 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/struct/struct.pb.go @@ -0,0 +1,380 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/struct.proto + +/* +Package structpb is a generated protocol buffer package. + +It is generated from these files: + google/protobuf/struct.proto + +It has these top-level messages: + Struct + Value + ListValue +*/ +package structpb + +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 + +// `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 fileDescriptor0, []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 { + // Unordered 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 fileDescriptor0, []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 fileDescriptor0, []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 fileDescriptor0, []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", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 417 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x41, 0x8b, 0xd3, 0x40, + 0x14, 0xc7, 0x3b, 0xc9, 0x36, 0x98, 0x17, 0x59, 0x97, 0x11, 0xb4, 0xac, 0xa2, 0xa1, 0x7b, 0x09, + 0x22, 0x29, 0xd6, 0x8b, 0x18, 0x2f, 0x06, 0xd6, 0x5d, 0x30, 0x2c, 0x31, 0xba, 0x15, 0xbc, 0x94, + 0x26, 0x4d, 0x63, 0xe8, 0x74, 0x26, 0x24, 0x33, 0x4a, 0x8f, 0x7e, 0x0b, 0xcf, 0x1e, 0x3d, 0xfa, + 0xe9, 0x3c, 0xca, 0xcc, 0x24, 0xa9, 0xb4, 0xf4, 0x94, 0xbc, 0xf7, 0x7e, 0xef, 0x3f, 0xef, 0xff, + 0x66, 0xe0, 0x71, 0xc1, 0x58, 0x41, 0xf2, 0x49, 0x55, 0x33, 0xce, 0x52, 0xb1, 0x9a, 0x34, 0xbc, + 0x16, 0x19, 0xf7, 0x55, 0x8c, 0xef, 0xe9, 0xaa, 0xdf, 0x55, 0xc7, 0x3f, 0x11, 0x58, 0x1f, 0x15, + 0x81, 0x03, 0xb0, 0x56, 0x65, 0x4e, 0x96, 0xcd, 0x08, 0xb9, 0xa6, 0xe7, 0x4c, 0x2f, 0xfc, 0x3d, + 0xd8, 0xd7, 0xa0, 0xff, 0x4e, 0x51, 0x97, 0x94, 0xd7, 0xdb, 0xa4, 0x6d, 0x39, 0xff, 0x00, 0xce, + 0x7f, 0x69, 0x7c, 0x06, 0xe6, 0x3a, 0xdf, 0x8e, 0x90, 0x8b, 0x3c, 0x3b, 0x91, 0xbf, 0xf8, 0x39, + 0x0c, 0xbf, 0x2d, 0x88, 0xc8, 0x47, 0x86, 0x8b, 0x3c, 0x67, 0xfa, 0xe0, 0x40, 0x7c, 0x26, 0xab, + 0x89, 0x86, 0x5e, 0x1b, 0xaf, 0xd0, 0xf8, 0x8f, 0x01, 0x43, 0x95, 0xc4, 0x01, 0x00, 0x15, 0x84, + 0xcc, 0xb5, 0x80, 0x14, 0x3d, 0x9d, 0x9e, 0x1f, 0x08, 0xdc, 0x08, 0x42, 0x14, 0x7f, 0x3d, 0x48, + 0x6c, 0xda, 0x05, 0xf8, 0x02, 0xee, 0x52, 0xb1, 0x49, 0xf3, 0x7a, 0xbe, 0x3b, 0x1f, 0x5d, 0x0f, + 0x12, 0x47, 0x67, 0x7b, 0xa8, 0xe1, 0x75, 0x49, 0x8b, 0x16, 0x32, 0xe5, 0xe0, 0x12, 0xd2, 0x59, + 0x0d, 0x3d, 0x05, 0x48, 0x19, 0xeb, 0xc6, 0x38, 0x71, 0x91, 0x77, 0x47, 0x1e, 0x25, 0x73, 0x1a, + 0x78, 0xa3, 0x54, 0x44, 0xc6, 0x5b, 0x64, 0xa8, 0xac, 0x3e, 0x3c, 0xb2, 0xc7, 0x56, 0x5e, 0x64, + 0xbc, 0x77, 0x49, 0xca, 0xa6, 0xeb, 0xb5, 0x54, 0xef, 0xa1, 0xcb, 0xa8, 0x6c, 0x78, 0xef, 0x92, + 0x74, 0x41, 0x68, 0xc1, 0xc9, 0xba, 0xa4, 0xcb, 0x71, 0x00, 0x76, 0x4f, 0x60, 0x1f, 0x2c, 0x25, + 0xd6, 0xdd, 0xe8, 0xb1, 0xa5, 0xb7, 0xd4, 0xb3, 0x47, 0x60, 0xf7, 0x4b, 0xc4, 0xa7, 0x00, 0x37, + 0xb7, 0x51, 0x34, 0x9f, 0xbd, 0x8d, 0x6e, 0x2f, 0xcf, 0x06, 0xe1, 0x0f, 0x04, 0xf7, 0x33, 0xb6, + 0xd9, 0x97, 0x08, 0x1d, 0xed, 0x26, 0x96, 0x71, 0x8c, 0xbe, 0xbc, 0x28, 0x4a, 0xfe, 0x55, 0xa4, + 0x7e, 0xc6, 0x36, 0x93, 0x82, 0x91, 0x05, 0x2d, 0x76, 0x4f, 0xb1, 0xe2, 0xdb, 0x2a, 0x6f, 0xda, + 0x17, 0x19, 0xe8, 0x4f, 0x95, 0xfe, 0x45, 0xe8, 0x97, 0x61, 0x5e, 0xc5, 0xe1, 0x6f, 0xe3, 0xc9, + 0x95, 0x16, 0x8f, 0xbb, 0xf9, 0x3e, 0xe7, 0x84, 0xbc, 0xa7, 0xec, 0x3b, 0xfd, 0x24, 0x3b, 0x53, + 0x4b, 0x49, 0xbd, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe8, 0x1b, 0x59, 0xf8, 0xe5, 0x02, 0x00, + 0x00, +} diff --git a/vendor/github.com/golang/protobuf/ptypes/struct/struct.proto b/vendor/github.com/golang/protobuf/ptypes/struct/struct.proto new file mode 100644 index 0000000..7d7808e --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/struct/struct.proto @@ -0,0 +1,96 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/struct;structpb"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "StructProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + + +// `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. +message Struct { + // Unordered map of dynamically typed values. + map fields = 1; +} + +// `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. +message Value { + // The kind of value. + oneof kind { + // Represents a null value. + NullValue null_value = 1; + // Represents a double value. + double number_value = 2; + // Represents a string value. + string string_value = 3; + // Represents a boolean value. + bool bool_value = 4; + // Represents a structured value. + Struct struct_value = 5; + // Represents a repeated `Value`. + ListValue list_value = 6; + } +} + +// `NullValue` is a singleton enumeration to represent the null value for the +// `Value` type union. +// +// The JSON representation for `NullValue` is JSON `null`. +enum NullValue { + // Null value. + NULL_VALUE = 0; +} + +// `ListValue` is a wrapper around a repeated field of values. +// +// The JSON representation for `ListValue` is JSON array. +message ListValue { + // Repeated field of dynamically typed values. + repeated Value values = 1; +} diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp.go b/vendor/github.com/golang/protobuf/ptypes/timestamp.go new file mode 100644 index 0000000..47f10db --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp.go @@ -0,0 +1,134 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package ptypes + +// This file implements operations on google.protobuf.Timestamp. + +import ( + "errors" + "fmt" + "time" + + tspb "github.com/golang/protobuf/ptypes/timestamp" +) + +const ( + // Seconds field of the earliest valid Timestamp. + // This is time.Date(1, 1, 1, 0, 0, 0, 0, time.UTC).Unix(). + minValidSeconds = -62135596800 + // Seconds field just after the latest valid Timestamp. + // This is time.Date(10000, 1, 1, 0, 0, 0, 0, time.UTC).Unix(). + maxValidSeconds = 253402300800 +) + +// validateTimestamp determines whether a Timestamp is valid. +// A valid timestamp represents a time in the range +// [0001-01-01, 10000-01-01) and has a Nanos field +// in the range [0, 1e9). +// +// If the Timestamp is valid, validateTimestamp returns nil. +// Otherwise, it returns an error that describes +// the problem. +// +// Every valid Timestamp can be represented by a time.Time, but the converse is not true. +func validateTimestamp(ts *tspb.Timestamp) error { + if ts == nil { + return errors.New("timestamp: nil Timestamp") + } + if ts.Seconds < minValidSeconds { + return fmt.Errorf("timestamp: %v before 0001-01-01", ts) + } + if ts.Seconds >= maxValidSeconds { + return fmt.Errorf("timestamp: %v after 10000-01-01", ts) + } + if ts.Nanos < 0 || ts.Nanos >= 1e9 { + return fmt.Errorf("timestamp: %v: nanos not in range [0, 1e9)", ts) + } + return nil +} + +// Timestamp converts a google.protobuf.Timestamp proto to a time.Time. +// It returns an error if the argument is invalid. +// +// Unlike most Go functions, if Timestamp returns an error, the first return value +// is not the zero time.Time. Instead, it is the value obtained from the +// time.Unix function when passed the contents of the Timestamp, in the UTC +// locale. This may or may not be a meaningful time; many invalid Timestamps +// do map to valid time.Times. +// +// A nil Timestamp returns an error. The first return value in that case is +// undefined. +func Timestamp(ts *tspb.Timestamp) (time.Time, error) { + // Don't return the zero value on error, because corresponds to a valid + // timestamp. Instead return whatever time.Unix gives us. + var t time.Time + if ts == nil { + t = time.Unix(0, 0).UTC() // treat nil like the empty Timestamp + } else { + t = time.Unix(ts.Seconds, int64(ts.Nanos)).UTC() + } + return t, validateTimestamp(ts) +} + +// TimestampNow returns a google.protobuf.Timestamp for the current time. +func TimestampNow() *tspb.Timestamp { + ts, err := TimestampProto(time.Now()) + if err != nil { + panic("ptypes: time.Now() out of Timestamp range") + } + return ts +} + +// TimestampProto converts the time.Time to a google.protobuf.Timestamp proto. +// It returns an error if the resulting Timestamp is invalid. +func TimestampProto(t time.Time) (*tspb.Timestamp, error) { + seconds := t.Unix() + nanos := int32(t.Sub(time.Unix(seconds, 0))) + ts := &tspb.Timestamp{ + Seconds: seconds, + Nanos: nanos, + } + if err := validateTimestamp(ts); err != nil { + return nil, err + } + return ts, nil +} + +// TimestampString returns the RFC 3339 string for valid Timestamps. For invalid +// Timestamps, it returns an error message in parentheses. +func TimestampString(ts *tspb.Timestamp) string { + t, err := Timestamp(ts) + if err != nil { + return fmt.Sprintf("(%v)", err) + } + return t.Format(time.RFC3339Nano) +} diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go new file mode 100644 index 0000000..e23e4a2 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.pb.go @@ -0,0 +1,160 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/timestamp.proto + +/* +Package timestamp is a generated protocol buffer package. + +It is generated from these files: + google/protobuf/timestamp.proto + +It has these top-level messages: + Timestamp +*/ +package timestamp + +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 + +// 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). +// +// # Examples +// +// 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. +// +// timestamp = Timestamp() +// timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required, though only UTC (as indicated by "Z") is presently supported. +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString] +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) +// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one +// can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()) +// to obtain a formatter capable of generating timestamps in this format. +// +// +type Timestamp struct { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be 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 fileDescriptor0, []int{0} } +func (*Timestamp) XXX_WellKnownType() string { return "Timestamp" } + +func (m *Timestamp) GetSeconds() int64 { + if m != nil { + return m.Seconds + } + return 0 +} + +func (m *Timestamp) GetNanos() int32 { + if m != nil { + return m.Nanos + } + return 0 +} + +func init() { + proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp") +} + +func init() { proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 191 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x0a, 0x8c, 0x1a, 0xac, 0x41, 0x10, 0x8e, 0x53, 0x1d, 0x97, 0x70, + 0x72, 0x7e, 0xae, 0x1e, 0x9a, 0x99, 0x4e, 0x7c, 0x70, 0x13, 0x03, 0x40, 0x42, 0x01, 0x8c, 0x51, + 0xda, 0xe9, 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xe9, 0xf9, 0x39, 0x89, + 0x79, 0xe9, 0x08, 0x27, 0x16, 0x94, 0x54, 0x16, 0xa4, 0x16, 0x23, 0x5c, 0xfa, 0x83, 0x91, 0x71, + 0x11, 0x13, 0xb3, 0x7b, 0x80, 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xc9, 0x01, 0x50, 0xb5, 0x7a, + 0xe1, 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x20, 0x3d, 0x49, 0x6c, 0x60, 0x43, + 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x77, 0x4a, 0x07, 0xf7, 0x00, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto new file mode 100644 index 0000000..b7cbd17 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp/timestamp.proto @@ -0,0 +1,133 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/timestamp"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "TimestampProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// 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). +// +// # Examples +// +// 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. +// +// timestamp = Timestamp() +// timestamp.GetCurrentTime() +// +// # JSON Mapping +// +// In JSON format, the Timestamp type is encoded as a string in the +// [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the +// format is "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" +// where {year} is always expressed using four digits while {month}, {day}, +// {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional +// seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution), +// are optional. The "Z" suffix indicates the timezone ("UTC"); the timezone +// is required, though only UTC (as indicated by "Z") is presently supported. +// +// For example, "2017-01-15T01:30:15.01Z" encodes 15.01 seconds past +// 01:30 UTC on January 15, 2017. +// +// In JavaScript, one can convert a Date object to this format using the +// standard [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString] +// method. In Python, a standard `datetime.datetime` object can be converted +// to this format using [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) +// with the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one +// can use the Joda Time's [`ISODateTimeFormat.dateTime()`]( +// http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()) +// to obtain a formatter capable of generating timestamps in this format. +// +// +message Timestamp { + + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + int64 seconds = 1; + + // 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. + int32 nanos = 2; +} diff --git a/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go b/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go new file mode 100644 index 0000000..6e3c969 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/timestamp_test.go @@ -0,0 +1,153 @@ +// Go support for Protocol Buffers - Google's data interchange format +// +// Copyright 2016 The Go Authors. All rights reserved. +// https://github.com/golang/protobuf +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package ptypes + +import ( + "math" + "testing" + "time" + + "github.com/golang/protobuf/proto" + tspb "github.com/golang/protobuf/ptypes/timestamp" +) + +var tests = []struct { + ts *tspb.Timestamp + valid bool + t time.Time +}{ + // The timestamp representing the Unix epoch date. + {&tspb.Timestamp{Seconds: 0, Nanos: 0}, true, utcDate(1970, 1, 1)}, + // The smallest representable timestamp. + {&tspb.Timestamp{Seconds: math.MinInt64, Nanos: math.MinInt32}, false, + time.Unix(math.MinInt64, math.MinInt32).UTC()}, + // The smallest representable timestamp with non-negative nanos. + {&tspb.Timestamp{Seconds: math.MinInt64, Nanos: 0}, false, time.Unix(math.MinInt64, 0).UTC()}, + // The earliest valid timestamp. + {&tspb.Timestamp{Seconds: minValidSeconds, Nanos: 0}, true, utcDate(1, 1, 1)}, + //"0001-01-01T00:00:00Z"}, + // The largest representable timestamp. + {&tspb.Timestamp{Seconds: math.MaxInt64, Nanos: math.MaxInt32}, false, + time.Unix(math.MaxInt64, math.MaxInt32).UTC()}, + // The largest representable timestamp with nanos in range. + {&tspb.Timestamp{Seconds: math.MaxInt64, Nanos: 1e9 - 1}, false, + time.Unix(math.MaxInt64, 1e9-1).UTC()}, + // The largest valid timestamp. + {&tspb.Timestamp{Seconds: maxValidSeconds - 1, Nanos: 1e9 - 1}, true, + time.Date(9999, 12, 31, 23, 59, 59, 1e9-1, time.UTC)}, + // The smallest invalid timestamp that is larger than the valid range. + {&tspb.Timestamp{Seconds: maxValidSeconds, Nanos: 0}, false, time.Unix(maxValidSeconds, 0).UTC()}, + // A date before the epoch. + {&tspb.Timestamp{Seconds: -281836800, Nanos: 0}, true, utcDate(1961, 1, 26)}, + // A date after the epoch. + {&tspb.Timestamp{Seconds: 1296000000, Nanos: 0}, true, utcDate(2011, 1, 26)}, + // A date after the epoch, in the middle of the day. + {&tspb.Timestamp{Seconds: 1296012345, Nanos: 940483}, true, + time.Date(2011, 1, 26, 3, 25, 45, 940483, time.UTC)}, +} + +func TestValidateTimestamp(t *testing.T) { + for _, s := range tests { + got := validateTimestamp(s.ts) + if (got == nil) != s.valid { + t.Errorf("validateTimestamp(%v) = %v, want %v", s.ts, got, s.valid) + } + } +} + +func TestTimestamp(t *testing.T) { + for _, s := range tests { + got, err := Timestamp(s.ts) + if (err == nil) != s.valid { + t.Errorf("Timestamp(%v) error = %v, but valid = %t", s.ts, err, s.valid) + } else if s.valid && got != s.t { + t.Errorf("Timestamp(%v) = %v, want %v", s.ts, got, s.t) + } + } + // Special case: a nil Timestamp is an error, but returns the 0 Unix time. + got, err := Timestamp(nil) + want := time.Unix(0, 0).UTC() + if got != want { + t.Errorf("Timestamp(nil) = %v, want %v", got, want) + } + if err == nil { + t.Errorf("Timestamp(nil) error = nil, expected error") + } +} + +func TestTimestampProto(t *testing.T) { + for _, s := range tests { + got, err := TimestampProto(s.t) + if (err == nil) != s.valid { + t.Errorf("TimestampProto(%v) error = %v, but valid = %t", s.t, err, s.valid) + } else if s.valid && !proto.Equal(got, s.ts) { + t.Errorf("TimestampProto(%v) = %v, want %v", s.t, got, s.ts) + } + } + // No corresponding special case here: no time.Time results in a nil Timestamp. +} + +func TestTimestampString(t *testing.T) { + for _, test := range []struct { + ts *tspb.Timestamp + want string + }{ + // Not much testing needed because presumably time.Format is + // well-tested. + {&tspb.Timestamp{Seconds: 0, Nanos: 0}, "1970-01-01T00:00:00Z"}, + {&tspb.Timestamp{Seconds: minValidSeconds - 1, Nanos: 0}, "(timestamp: seconds:-62135596801 before 0001-01-01)"}, + } { + got := TimestampString(test.ts) + if got != test.want { + t.Errorf("TimestampString(%v) = %q, want %q", test.ts, got, test.want) + } + } +} + +func utcDate(year, month, day int) time.Time { + return time.Date(year, time.Month(month), day, 0, 0, 0, 0, time.UTC) +} + +func TestTimestampNow(t *testing.T) { + // Bracket the expected time. + before := time.Now() + ts := TimestampNow() + after := time.Now() + + tm, err := Timestamp(ts) + if err != nil { + t.Errorf("between %v and %v\nTimestampNow() = %v\nwhich is invalid (%v)", before, after, ts, err) + } + if tm.Before(before) || tm.After(after) { + t.Errorf("between %v and %v\nTimestamp(TimestampNow()) = %v", before, after, tm) + } +} diff --git a/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go b/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go new file mode 100644 index 0000000..0ed59bf --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.pb.go @@ -0,0 +1,260 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: google/protobuf/wrappers.proto + +/* +Package wrappers is a generated protocol buffer package. + +It is generated from these files: + google/protobuf/wrappers.proto + +It has these top-level messages: + DoubleValue + FloatValue + Int64Value + UInt64Value + Int32Value + UInt32Value + BoolValue + StringValue + BytesValue +*/ +package wrappers + +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 + +// 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 fileDescriptor0, []int{0} } +func (*DoubleValue) XXX_WellKnownType() string { return "DoubleValue" } + +func (m *DoubleValue) GetValue() float64 { + if m != nil { + return m.Value + } + return 0 +} + +// 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 fileDescriptor0, []int{1} } +func (*FloatValue) XXX_WellKnownType() string { return "FloatValue" } + +func (m *FloatValue) GetValue() float32 { + if m != nil { + return m.Value + } + return 0 +} + +// 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 fileDescriptor0, []int{2} } +func (*Int64Value) XXX_WellKnownType() string { return "Int64Value" } + +func (m *Int64Value) GetValue() int64 { + if m != nil { + return m.Value + } + return 0 +} + +// 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 fileDescriptor0, []int{3} } +func (*UInt64Value) XXX_WellKnownType() string { return "UInt64Value" } + +func (m *UInt64Value) GetValue() uint64 { + if m != nil { + return m.Value + } + return 0 +} + +// 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 fileDescriptor0, []int{4} } +func (*Int32Value) XXX_WellKnownType() string { return "Int32Value" } + +func (m *Int32Value) GetValue() int32 { + if m != nil { + return m.Value + } + return 0 +} + +// 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 fileDescriptor0, []int{5} } +func (*UInt32Value) XXX_WellKnownType() string { return "UInt32Value" } + +func (m *UInt32Value) GetValue() uint32 { + if m != nil { + return m.Value + } + return 0 +} + +// 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 fileDescriptor0, []int{6} } +func (*BoolValue) XXX_WellKnownType() string { return "BoolValue" } + +func (m *BoolValue) GetValue() bool { + if m != nil { + return m.Value + } + return false +} + +// 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 fileDescriptor0, []int{7} } +func (*StringValue) XXX_WellKnownType() string { return "StringValue" } + +func (m *StringValue) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +// 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 fileDescriptor0, []int{8} } +func (*BytesValue) XXX_WellKnownType() string { return "BytesValue" } + +func (m *BytesValue) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +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", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 259 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x94, 0xb9, 0xb8, 0x43, 0x71, 0x29, 0x62, 0x41, 0x35, 0xc8, 0xd8, + 0x08, 0x8b, 0x1a, 0x56, 0x34, 0x83, 0xb0, 0x2a, 0xe2, 0x85, 0x29, 0x52, 0xe4, 0xe2, 0x74, 0xca, + 0xcf, 0xcf, 0xc1, 0xa2, 0x84, 0x03, 0xc9, 0x9c, 0xe0, 0x92, 0xa2, 0xcc, 0xbc, 0x74, 0x2c, 0x8a, + 0x38, 0x91, 0x1c, 0xe4, 0x54, 0x59, 0x92, 0x5a, 0x8c, 0x45, 0x0d, 0x0f, 0x54, 0x8d, 0x53, 0x0d, + 0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x5a, 0xe8, 0x3a, 0xf1, 0x86, 0x43, 0x83, 0x3f, 0x00, 0x24, + 0x12, 0xc0, 0x18, 0xa5, 0x95, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x9f, + 0x9e, 0x9f, 0x93, 0x98, 0x97, 0x8e, 0x88, 0xaa, 0x82, 0x92, 0xca, 0x82, 0xd4, 0x62, 0x78, 0x8c, + 0xfd, 0x60, 0x64, 0x5c, 0xc4, 0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0x62, 0x6e, + 0x00, 0x54, 0xa9, 0x5e, 0x78, 0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0x48, 0x4b, + 0x12, 0x1b, 0xd8, 0x0c, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0x6c, 0xb9, 0xb8, 0xfe, + 0x01, 0x00, 0x00, +} diff --git a/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto b/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto new file mode 100644 index 0000000..0194763 --- /dev/null +++ b/vendor/github.com/golang/protobuf/ptypes/wrappers/wrappers.proto @@ -0,0 +1,118 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// https://developers.google.com/protocol-buffers/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Wrappers for primitive (non-message) types. These types are useful +// for embedding primitives in the `google.protobuf.Any` type and for places +// where we need to distinguish between the absence of a primitive +// typed field and its default value. + +syntax = "proto3"; + +package google.protobuf; + +option csharp_namespace = "Google.Protobuf.WellKnownTypes"; +option cc_enable_arenas = true; +option go_package = "github.com/golang/protobuf/ptypes/wrappers"; +option java_package = "com.google.protobuf"; +option java_outer_classname = "WrappersProto"; +option java_multiple_files = true; +option objc_class_prefix = "GPB"; + +// Wrapper message for `double`. +// +// The JSON representation for `DoubleValue` is JSON number. +message DoubleValue { + // The double value. + double value = 1; +} + +// Wrapper message for `float`. +// +// The JSON representation for `FloatValue` is JSON number. +message FloatValue { + // The float value. + float value = 1; +} + +// Wrapper message for `int64`. +// +// The JSON representation for `Int64Value` is JSON string. +message Int64Value { + // The int64 value. + int64 value = 1; +} + +// Wrapper message for `uint64`. +// +// The JSON representation for `UInt64Value` is JSON string. +message UInt64Value { + // The uint64 value. + uint64 value = 1; +} + +// Wrapper message for `int32`. +// +// The JSON representation for `Int32Value` is JSON number. +message Int32Value { + // The int32 value. + int32 value = 1; +} + +// Wrapper message for `uint32`. +// +// The JSON representation for `UInt32Value` is JSON number. +message UInt32Value { + // The uint32 value. + uint32 value = 1; +} + +// Wrapper message for `bool`. +// +// The JSON representation for `BoolValue` is JSON `true` and `false`. +message BoolValue { + // The bool value. + bool value = 1; +} + +// Wrapper message for `string`. +// +// The JSON representation for `StringValue` is JSON string. +message StringValue { + // The string value. + string value = 1; +} + +// Wrapper message for `bytes`. +// +// The JSON representation for `BytesValue` is JSON string. +message BytesValue { + // The bytes value. + bytes value = 1; +} diff --git a/vendor/github.com/gorilla/context/.travis.yml b/vendor/github.com/gorilla/context/.travis.yml index 6796581..faca4da 100644 --- a/vendor/github.com/gorilla/context/.travis.yml +++ b/vendor/github.com/gorilla/context/.travis.yml @@ -1,9 +1,19 @@ language: go +sudo: false -go: - - 1.0 - - 1.1 - - 1.2 - - 1.3 - - 1.4 - - tip +matrix: + include: + - go: 1.3 + - go: 1.4 + - go: 1.5 + - go: 1.6 + - go: tip + +install: + - go get golang.org/x/tools/cmd/vet + +script: + - go get -t -v ./... + - diff -u <(echo -n) <(gofmt -d .) + - go tool vet . + - go test -v -race ./... diff --git a/vendor/github.com/gorilla/mux/.travis.yml b/vendor/github.com/gorilla/mux/.travis.yml index d87d465..ca377e6 100644 --- a/vendor/github.com/gorilla/mux/.travis.yml +++ b/vendor/github.com/gorilla/mux/.travis.yml @@ -1,7 +1,22 @@ language: go +sudo: false -go: - - 1.0 - - 1.1 - - 1.2 - - tip +matrix: + include: + - go: 1.2 + - go: 1.3 + - go: 1.4 + - go: 1.5 + - go: 1.6 + - go: 1.7 + - go: 1.8 + - go: tip + +install: + - # Skip + +script: + - go get -t -v ./... + - diff -u <(echo -n) <(gofmt -d .) + - go tool vet . + - go test -v -race ./... diff --git a/vendor/github.com/gorilla/mux/README.md b/vendor/github.com/gorilla/mux/README.md index e60301b..8dcd718 100644 --- a/vendor/github.com/gorilla/mux/README.md +++ b/vendor/github.com/gorilla/mux/README.md @@ -1,7 +1,383 @@ -mux +gorilla/mux === -[![Build Status](https://travis-ci.org/gorilla/mux.png?branch=master)](https://travis-ci.org/gorilla/mux) +[![GoDoc](https://godoc.org/github.com/gorilla/mux?status.svg)](https://godoc.org/github.com/gorilla/mux) +[![Build Status](https://travis-ci.org/gorilla/mux.svg?branch=master)](https://travis-ci.org/gorilla/mux) +[![Sourcegraph](https://sourcegraph.com/github.com/gorilla/mux/-/badge.svg)](https://sourcegraph.com/github.com/gorilla/mux?badge) -gorilla/mux is a powerful URL router and dispatcher. +![Gorilla Logo](http://www.gorillatoolkit.org/static/images/gorilla-icon-64.png) -Read the full documentation here: http://www.gorillatoolkit.org/pkg/mux +http://www.gorillatoolkit.org/pkg/mux + +Package `gorilla/mux` implements a request router and dispatcher for matching incoming requests to +their respective handler. + +The name mux stands for "HTTP request multiplexer". Like the standard `http.ServeMux`, `mux.Router` matches incoming requests against a list of registered routes and calls a handler for the route that matches the URL or other conditions. The main features are: + +* It implements the `http.Handler` interface so it is compatible with the standard `http.ServeMux`. +* Requests can be matched based on URL host, path, path prefix, schemes, header and query values, HTTP methods or using custom matchers. +* URL hosts, paths and query values can have variables with an optional regular expression. +* Registered URLs can be built, or "reversed", which helps maintaining references to resources. +* Routes can be used as subrouters: nested routes are only tested if the parent route matches. This is useful to define groups of routes that share common conditions like a host, a path prefix or other repeated attributes. As a bonus, this optimizes request matching. + +--- + +* [Install](#install) +* [Examples](#examples) +* [Matching Routes](#matching-routes) +* [Static Files](#static-files) +* [Registered URLs](#registered-urls) +* [Walking Routes](#walking-routes) +* [Full Example](#full-example) + +--- + +## Install + +With a [correctly configured](https://golang.org/doc/install#testing) Go toolchain: + +```sh +go get -u github.com/gorilla/mux +``` + +## Examples + +Let's start registering a couple of URL paths and handlers: + +```go +func main() { + r := mux.NewRouter() + r.HandleFunc("/", HomeHandler) + r.HandleFunc("/products", ProductsHandler) + r.HandleFunc("/articles", ArticlesHandler) + http.Handle("/", r) +} +``` + +Here we register three routes mapping URL paths to handlers. This is equivalent to how `http.HandleFunc()` works: if an incoming request URL matches one of the paths, the corresponding handler is called passing (`http.ResponseWriter`, `*http.Request`) as parameters. + +Paths can have variables. They are defined using the format `{name}` or `{name:pattern}`. If a regular expression pattern is not defined, the matched variable will be anything until the next slash. For example: + +```go +r := mux.NewRouter() +r.HandleFunc("/products/{key}", ProductHandler) +r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler) +r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler) +``` + +The names are used to create a map of route variables which can be retrieved calling `mux.Vars()`: + +```go +func ArticlesCategoryHandler(w http.ResponseWriter, r *http.Request) { + vars := mux.Vars(r) + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, "Category: %v\n", vars["category"]) +} +``` + +And this is all you need to know about the basic usage. More advanced options are explained below. + +### Matching Routes + +Routes can also be restricted to a domain or subdomain. Just define a host pattern to be matched. They can also have variables: + +```go +r := mux.NewRouter() +// Only matches if domain is "www.example.com". +r.Host("www.example.com") +// Matches a dynamic subdomain. +r.Host("{subdomain:[a-z]+}.domain.com") +``` + +There are several other matchers that can be added. To match path prefixes: + +```go +r.PathPrefix("/products/") +``` + +...or HTTP methods: + +```go +r.Methods("GET", "POST") +``` + +...or URL schemes: + +```go +r.Schemes("https") +``` + +...or header values: + +```go +r.Headers("X-Requested-With", "XMLHttpRequest") +``` + +...or query values: + +```go +r.Queries("key", "value") +``` + +...or to use a custom matcher function: + +```go +r.MatcherFunc(func(r *http.Request, rm *RouteMatch) bool { + return r.ProtoMajor == 0 +}) +``` + +...and finally, it is possible to combine several matchers in a single route: + +```go +r.HandleFunc("/products", ProductsHandler). + Host("www.example.com"). + Methods("GET"). + Schemes("http") +``` + +Setting the same matching conditions again and again can be boring, so we have a way to group several routes that share the same requirements. We call it "subrouting". + +For example, let's say we have several URLs that should only match when the host is `www.example.com`. Create a route for that host and get a "subrouter" from it: + +```go +r := mux.NewRouter() +s := r.Host("www.example.com").Subrouter() +``` + +Then register routes in the subrouter: + +```go +s.HandleFunc("/products/", ProductsHandler) +s.HandleFunc("/products/{key}", ProductHandler) +s.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler) +``` + +The three URL paths we registered above will only be tested if the domain is `www.example.com`, because the subrouter is tested first. This is not only convenient, but also optimizes request matching. You can create subrouters combining any attribute matchers accepted by a route. + +Subrouters can be used to create domain or path "namespaces": you define subrouters in a central place and then parts of the app can register its paths relatively to a given subrouter. + +There's one more thing about subroutes. When a subrouter has a path prefix, the inner routes use it as base for their paths: + +```go +r := mux.NewRouter() +s := r.PathPrefix("/products").Subrouter() +// "/products/" +s.HandleFunc("/", ProductsHandler) +// "/products/{key}/" +s.HandleFunc("/{key}/", ProductHandler) +// "/products/{key}/details" +s.HandleFunc("/{key}/details", ProductDetailsHandler) +``` +### Listing Routes + +Routes on a mux can be listed using the Router.Walk method—useful for generating documentation: + +```go +package main + +import ( + "fmt" + "net/http" + "strings" + + "github.com/gorilla/mux" +) + +func handler(w http.ResponseWriter, r *http.Request) { + return +} + +func main() { + r := mux.NewRouter() + r.HandleFunc("/", handler) + r.HandleFunc("/products", handler).Methods("POST") + r.HandleFunc("/articles", handler).Methods("GET") + r.HandleFunc("/articles/{id}", handler).Methods("GET", "PUT") + r.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error { + t, err := route.GetPathTemplate() + if err != nil { + return err + } + // p will contain regular expression is compatible with regular expression in Perl, Python, and other languages. + // for instance the regular expression for path '/articles/{id}' will be '^/articles/(?P[^/]+)$' + p, err := route.GetPathRegexp() + if err != nil { + return err + } + m, err := route.GetMethods() + if err != nil { + return err + } + fmt.Println(strings.Join(m, ","), t, p) + return nil + }) + http.Handle("/", r) +} +``` + +### Static Files + +Note that the path provided to `PathPrefix()` represents a "wildcard": calling +`PathPrefix("/static/").Handler(...)` means that the handler will be passed any +request that matches "/static/*". This makes it easy to serve static files with mux: + +```go +func main() { + var dir string + + flag.StringVar(&dir, "dir", ".", "the directory to serve files from. Defaults to the current dir") + flag.Parse() + r := mux.NewRouter() + + // This will serve files under http://localhost:8000/static/ + r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(dir)))) + + srv := &http.Server{ + Handler: r, + Addr: "127.0.0.1:8000", + // Good practice: enforce timeouts for servers you create! + WriteTimeout: 15 * time.Second, + ReadTimeout: 15 * time.Second, + } + + log.Fatal(srv.ListenAndServe()) +} +``` + +### Registered URLs + +Now let's see how to build registered URLs. + +Routes can be named. All routes that define a name can have their URLs built, or "reversed". We define a name calling `Name()` on a route. For example: + +```go +r := mux.NewRouter() +r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler). + Name("article") +``` + +To build a URL, get the route and call the `URL()` method, passing a sequence of key/value pairs for the route variables. For the previous route, we would do: + +```go +url, err := r.Get("article").URL("category", "technology", "id", "42") +``` + +...and the result will be a `url.URL` with the following path: + +``` +"/articles/technology/42" +``` + +This also works for host and query value variables: + +```go +r := mux.NewRouter() +r.Host("{subdomain}.domain.com"). + Path("/articles/{category}/{id:[0-9]+}"). + Queries("filter", "{filter}"). + HandlerFunc(ArticleHandler). + Name("article") + +// url.String() will be "http://news.domain.com/articles/technology/42?filter=gorilla" +url, err := r.Get("article").URL("subdomain", "news", + "category", "technology", + "id", "42", + "filter", "gorilla") +``` + +All variables defined in the route are required, and their values must conform to the corresponding patterns. These requirements guarantee that a generated URL will always match a registered route -- the only exception is for explicitly defined "build-only" routes which never match. + +Regex support also exists for matching Headers within a route. For example, we could do: + +```go +r.HeadersRegexp("Content-Type", "application/(text|json)") +``` + +...and the route will match both requests with a Content-Type of `application/json` as well as `application/text` + +There's also a way to build only the URL host or path for a route: use the methods `URLHost()` or `URLPath()` instead. For the previous route, we would do: + +```go +// "http://news.domain.com/" +host, err := r.Get("article").URLHost("subdomain", "news") + +// "/articles/technology/42" +path, err := r.Get("article").URLPath("category", "technology", "id", "42") +``` + +And if you use subrouters, host and path defined separately can be built as well: + +```go +r := mux.NewRouter() +s := r.Host("{subdomain}.domain.com").Subrouter() +s.Path("/articles/{category}/{id:[0-9]+}"). + HandlerFunc(ArticleHandler). + Name("article") + +// "http://news.domain.com/articles/technology/42" +url, err := r.Get("article").URL("subdomain", "news", + "category", "technology", + "id", "42") +``` + +### Walking Routes + +The `Walk` function on `mux.Router` can be used to visit all of the routes that are registered on a router. For example, +the following prints all of the registered routes: + +```go +r := mux.NewRouter() +r.HandleFunc("/", handler) +r.HandleFunc("/products", handler).Methods("POST") +r.HandleFunc("/articles", handler).Methods("GET") +r.HandleFunc("/articles/{id}", handler).Methods("GET", "PUT") +r.Walk(func(route *mux.Route, router *mux.Router, ancestors []*mux.Route) error { + t, err := route.GetPathTemplate() + if err != nil { + return err + } + // p will contain a regular expression that is compatible with regular expressions in Perl, Python, and other languages. + // For example, the regular expression for path '/articles/{id}' will be '^/articles/(?P[^/]+)$'. + p, err := route.GetPathRegexp() + if err != nil { + return err + } + m, err := route.GetMethods() + if err != nil { + return err + } + fmt.Println(strings.Join(m, ","), t, p) + return nil +}) +``` + +## Full Example + +Here's a complete, runnable example of a small `mux` based server: + +```go +package main + +import ( + "net/http" + "log" + "github.com/gorilla/mux" +) + +func YourHandler(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("Gorilla!\n")) +} + +func main() { + r := mux.NewRouter() + // Routes consist of a path and a handler function. + r.HandleFunc("/", YourHandler) + + // Bind to a port and pass our router in + log.Fatal(http.ListenAndServe(":8000", r)) +} +``` + +## License + +BSD licensed. See the LICENSE file for details. diff --git a/vendor/github.com/gorilla/mux/bench_test.go b/vendor/github.com/gorilla/mux/bench_test.go index c5f97b2..522156d 100644 --- a/vendor/github.com/gorilla/mux/bench_test.go +++ b/vendor/github.com/gorilla/mux/bench_test.go @@ -6,6 +6,7 @@ package mux import ( "net/http" + "net/http/httptest" "testing" ) @@ -19,3 +20,30 @@ func BenchmarkMux(b *testing.B) { router.ServeHTTP(nil, request) } } + +func BenchmarkMuxAlternativeInRegexp(b *testing.B) { + router := new(Router) + handler := func(w http.ResponseWriter, r *http.Request) {} + router.HandleFunc("/v1/{v1:(?:a|b)}", handler) + + requestA, _ := http.NewRequest("GET", "/v1/a", nil) + requestB, _ := http.NewRequest("GET", "/v1/b", nil) + for i := 0; i < b.N; i++ { + router.ServeHTTP(nil, requestA) + router.ServeHTTP(nil, requestB) + } +} + +func BenchmarkManyPathVariables(b *testing.B) { + router := new(Router) + handler := func(w http.ResponseWriter, r *http.Request) {} + router.HandleFunc("/v1/{v1}/{v2}/{v3}/{v4}/{v5}", handler) + + matchingRequest, _ := http.NewRequest("GET", "/v1/1/2/3/4/5", nil) + notMatchingRequest, _ := http.NewRequest("GET", "/v1/1/2/3/4", nil) + recorder := httptest.NewRecorder() + for i := 0; i < b.N; i++ { + router.ServeHTTP(nil, matchingRequest) + router.ServeHTTP(recorder, notMatchingRequest) + } +} diff --git a/vendor/github.com/gorilla/mux/context_gorilla.go b/vendor/github.com/gorilla/mux/context_gorilla.go new file mode 100644 index 0000000..d7adaa8 --- /dev/null +++ b/vendor/github.com/gorilla/mux/context_gorilla.go @@ -0,0 +1,26 @@ +// +build !go1.7 + +package mux + +import ( + "net/http" + + "github.com/gorilla/context" +) + +func contextGet(r *http.Request, key interface{}) interface{} { + return context.Get(r, key) +} + +func contextSet(r *http.Request, key, val interface{}) *http.Request { + if val == nil { + return r + } + + context.Set(r, key, val) + return r +} + +func contextClear(r *http.Request) { + context.Clear(r) +} diff --git a/vendor/github.com/gorilla/mux/context_gorilla_test.go b/vendor/github.com/gorilla/mux/context_gorilla_test.go new file mode 100644 index 0000000..ffaf384 --- /dev/null +++ b/vendor/github.com/gorilla/mux/context_gorilla_test.go @@ -0,0 +1,40 @@ +// +build !go1.7 + +package mux + +import ( + "net/http" + "testing" + + "github.com/gorilla/context" +) + +// Tests that the context is cleared or not cleared properly depending on +// the configuration of the router +func TestKeepContext(t *testing.T) { + func1 := func(w http.ResponseWriter, r *http.Request) {} + + r := NewRouter() + r.HandleFunc("/", func1).Name("func1") + + req, _ := http.NewRequest("GET", "http://localhost/", nil) + context.Set(req, "t", 1) + + res := new(http.ResponseWriter) + r.ServeHTTP(*res, req) + + if _, ok := context.GetOk(req, "t"); ok { + t.Error("Context should have been cleared at end of request") + } + + r.KeepContext = true + + req, _ = http.NewRequest("GET", "http://localhost/", nil) + context.Set(req, "t", 1) + + r.ServeHTTP(*res, req) + if _, ok := context.GetOk(req, "t"); !ok { + t.Error("Context should NOT have been cleared at end of request") + } + +} diff --git a/vendor/github.com/gorilla/mux/context_native.go b/vendor/github.com/gorilla/mux/context_native.go new file mode 100644 index 0000000..209cbea --- /dev/null +++ b/vendor/github.com/gorilla/mux/context_native.go @@ -0,0 +1,24 @@ +// +build go1.7 + +package mux + +import ( + "context" + "net/http" +) + +func contextGet(r *http.Request, key interface{}) interface{} { + return r.Context().Value(key) +} + +func contextSet(r *http.Request, key, val interface{}) *http.Request { + if val == nil { + return r + } + + return r.WithContext(context.WithValue(r.Context(), key, val)) +} + +func contextClear(r *http.Request) { + return +} diff --git a/vendor/github.com/gorilla/mux/context_native_test.go b/vendor/github.com/gorilla/mux/context_native_test.go new file mode 100644 index 0000000..c150edf --- /dev/null +++ b/vendor/github.com/gorilla/mux/context_native_test.go @@ -0,0 +1,32 @@ +// +build go1.7 + +package mux + +import ( + "context" + "net/http" + "testing" + "time" +) + +func TestNativeContextMiddleware(t *testing.T) { + withTimeout := func(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx, cancel := context.WithTimeout(r.Context(), time.Minute) + defer cancel() + h.ServeHTTP(w, r.WithContext(ctx)) + }) + } + + r := NewRouter() + r.Handle("/path/{foo}", withTimeout(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + vars := Vars(r) + if vars["foo"] != "bar" { + t.Fatal("Expected foo var to be set") + } + }))) + + rec := NewRecorder() + req := newRequest("GET", "/path/bar") + r.ServeHTTP(rec, req) +} diff --git a/vendor/github.com/gorilla/mux/doc.go b/vendor/github.com/gorilla/mux/doc.go index b2deed3..cce30b2 100644 --- a/vendor/github.com/gorilla/mux/doc.go +++ b/vendor/github.com/gorilla/mux/doc.go @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. /* -Package gorilla/mux implements a request router and dispatcher. +Package mux implements a request router and dispatcher. The name mux stands for "HTTP request multiplexer". Like the standard http.ServeMux, mux.Router matches incoming requests against a list of @@ -12,8 +12,8 @@ or other conditions. The main features are: * Requests can be matched based on URL host, path, path prefix, schemes, header and query values, HTTP methods or using custom matchers. - * URL hosts and paths can have variables with an optional regular - expression. + * URL hosts, paths and query values can have variables with an optional + regular expression. * Registered URLs can be built, or "reversed", which helps maintaining references to resources. * Routes can be used as subrouters: nested routes are only tested if the @@ -47,12 +47,21 @@ variable will be anything until the next slash. For example: r.HandleFunc("/articles/{category}/", ArticlesCategoryHandler) r.HandleFunc("/articles/{category}/{id:[0-9]+}", ArticleHandler) +Groups can be used inside patterns, as long as they are non-capturing (?:re). For example: + + r.HandleFunc("/articles/{category}/{sort:(?:asc|desc|new)}", ArticlesCategoryHandler) + The names are used to create a map of route variables which can be retrieved calling mux.Vars(): vars := mux.Vars(request) category := vars["category"] +Note that if any capturing groups are present, mux will panic() during parsing. To prevent +this, convert any capturing groups to non-capturing, e.g. change "/{sort:(asc|desc)}" to +"/{sort:(?:asc|desc)}". This is a change from prior versions which behaved unpredictably +when capturing groups were present. + And this is all you need to know about the basic usage. More advanced options are explained below. @@ -60,8 +69,8 @@ Routes can also be restricted to a domain or subdomain. Just define a host pattern to be matched. They can also have variables: r := mux.NewRouter() - // Only matches if domain is "www.domain.com". - r.Host("www.domain.com") + // Only matches if domain is "www.example.com". + r.Host("www.example.com") // Matches a dynamic subdomain. r.Host("{subdomain:[a-z]+}.domain.com") @@ -89,12 +98,12 @@ There are several other matchers that can be added. To match path prefixes: r.MatcherFunc(func(r *http.Request, rm *RouteMatch) bool { return r.ProtoMajor == 0 - }) + }) ...and finally, it is possible to combine several matchers in a single route: r.HandleFunc("/products", ProductsHandler). - Host("www.domain.com"). + Host("www.example.com"). Methods("GET"). Schemes("http") @@ -103,11 +112,11 @@ a way to group several routes that share the same requirements. We call it "subrouting". For example, let's say we have several URLs that should only match when the -host is "www.domain.com". Create a route for that host and get a "subrouter" +host is "www.example.com". Create a route for that host and get a "subrouter" from it: r := mux.NewRouter() - s := r.Host("www.domain.com").Subrouter() + s := r.Host("www.example.com").Subrouter() Then register routes in the subrouter: @@ -116,7 +125,7 @@ Then register routes in the subrouter: s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) The three URL paths we registered above will only be tested if the domain is -"www.domain.com", because the subrouter is tested first. This is not +"www.example.com", because the subrouter is tested first. This is not only convenient, but also optimizes request matching. You can create subrouters combining any attribute matchers accepted by a route. @@ -136,6 +145,31 @@ the inner routes use it as base for their paths: // "/products/{key}/details" s.HandleFunc("/{key}/details", ProductDetailsHandler) +Note that the path provided to PathPrefix() represents a "wildcard": calling +PathPrefix("/static/").Handler(...) means that the handler will be passed any +request that matches "/static/*". This makes it easy to serve static files with mux: + + func main() { + var dir string + + flag.StringVar(&dir, "dir", ".", "the directory to serve files from. Defaults to the current dir") + flag.Parse() + r := mux.NewRouter() + + // This will serve files under http://localhost:8000/static/ + r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir(dir)))) + + srv := &http.Server{ + Handler: r, + Addr: "127.0.0.1:8000", + // Good practice: enforce timeouts for servers you create! + WriteTimeout: 15 * time.Second, + ReadTimeout: 15 * time.Second, + } + + log.Fatal(srv.ListenAndServe()) + } + Now let's see how to build registered URLs. Routes can be named. All routes that define a name can have their URLs built, @@ -154,24 +188,33 @@ key/value pairs for the route variables. For the previous route, we would do: "/articles/technology/42" -This also works for host variables: +This also works for host and query value variables: r := mux.NewRouter() r.Host("{subdomain}.domain.com"). Path("/articles/{category}/{id:[0-9]+}"). + Queries("filter", "{filter}"). HandlerFunc(ArticleHandler). Name("article") - // url.String() will be "http://news.domain.com/articles/technology/42" + // url.String() will be "http://news.domain.com/articles/technology/42?filter=gorilla" url, err := r.Get("article").URL("subdomain", "news", - "category", "technology", - "id", "42") + "category", "technology", + "id", "42", + "filter", "gorilla") All variables defined in the route are required, and their values must conform to the corresponding patterns. These requirements guarantee that a generated URL will always match a registered route -- the only exception is for explicitly defined "build-only" routes which never match. +Regex support also exists for matching Headers within a route. For example, we could do: + + r.HeadersRegexp("Content-Type", "application/(text|json)") + +...and the route will match both requests with a Content-Type of `application/json` as well as +`application/text` + There's also a way to build only the URL host or path for a route: use the methods URLHost() or URLPath() instead. For the previous route, we would do: @@ -193,7 +236,7 @@ as well: // "http://news.domain.com/articles/technology/42" url, err := r.Get("article").URL("subdomain", "news", - "category", "technology", - "id", "42") + "category", "technology", + "id", "42") */ package mux diff --git a/vendor/github.com/gorilla/mux/mux.go b/vendor/github.com/gorilla/mux/mux.go index af31d23..fb69196 100644 --- a/vendor/github.com/gorilla/mux/mux.go +++ b/vendor/github.com/gorilla/mux/mux.go @@ -5,11 +5,16 @@ package mux import ( + "errors" "fmt" "net/http" "path" + "regexp" + "strings" +) - "github.com/gorilla/context" +var ( + ErrMethodMismatch = errors.New("method is not allowed") ) // NewRouter returns a new router instance. @@ -38,6 +43,10 @@ func NewRouter() *Router { type Router struct { // Configurable Handler to be used when no route matches. NotFoundHandler http.Handler + + // Configurable Handler to be used when the request method does not match the route. + MethodNotAllowedHandler http.Handler + // Parent route, if this is a subrouter. parent parentRoute // Routes to be matched, in order. @@ -46,8 +55,14 @@ type Router struct { namedRoutes map[string]*Route // See Router.StrictSlash(). This defines the flag for new routes. strictSlash bool - // If true, do not clear the request context after handling the request + // See Router.SkipClean(). This defines the flag for new routes. + skipClean bool + // If true, do not clear the request context after handling the request. + // This has no effect when go1.7+ is used, since the context is stored + // on the request itself. KeepContext bool + // see Router.UseEncodedPath(). This defines a flag for all routes. + useEncodedPath bool } // Match matches registered routes against the request. @@ -57,6 +72,17 @@ func (r *Router) Match(req *http.Request, match *RouteMatch) bool { return true } } + + if match.MatchErr == ErrMethodMismatch && r.MethodNotAllowedHandler != nil { + match.Handler = r.MethodNotAllowedHandler + return true + } + + // Closest match for a router (includes sub-routers) + if r.NotFoundHandler != nil { + match.Handler = r.NotFoundHandler + return true + } return false } @@ -65,35 +91,44 @@ func (r *Router) Match(req *http.Request, match *RouteMatch) bool { // When there is a match, the route variables can be retrieved calling // mux.Vars(request). func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { - // Clean path to canonical form and redirect. - if p := cleanPath(req.URL.Path); p != req.URL.Path { + if !r.skipClean { + path := req.URL.Path + if r.useEncodedPath { + path = getPath(req) + } + // Clean path to canonical form and redirect. + if p := cleanPath(path); p != path { - // Added 3 lines (Philip Schlump) - It was droping the query string and #whatever from query. - // This matches with fix in go 1.2 r.c. 4 for same problem. Go Issue: - // http://code.google.com/p/go/issues/detail?id=5252 - url := *req.URL - url.Path = p - p = url.String() + // Added 3 lines (Philip Schlump) - It was dropping the query string and #whatever from query. + // This matches with fix in go 1.2 r.c. 4 for same problem. Go Issue: + // http://code.google.com/p/go/issues/detail?id=5252 + url := *req.URL + url.Path = p + p = url.String() - w.Header().Set("Location", p) - w.WriteHeader(http.StatusMovedPermanently) - return + w.Header().Set("Location", p) + w.WriteHeader(http.StatusMovedPermanently) + return + } } var match RouteMatch var handler http.Handler if r.Match(req, &match) { handler = match.Handler - setVars(req, match.Vars) - setCurrentRoute(req, match.Route) + req = setVars(req, match.Vars) + req = setCurrentRoute(req, match.Route) } + + if handler == nil && match.MatchErr == ErrMethodMismatch { + handler = methodNotAllowedHandler() + } + if handler == nil { - handler = r.NotFoundHandler - if handler == nil { - handler = http.NotFoundHandler() - } + handler = http.NotFoundHandler() } + if !r.KeepContext { - defer context.Clear(req) + defer contextClear(req) } handler.ServeHTTP(w, req) } @@ -128,10 +163,45 @@ func (r *Router) StrictSlash(value bool) *Router { return r } +// SkipClean defines the path cleaning behaviour for new routes. The initial +// value is false. Users should be careful about which routes are not cleaned +// +// When true, if the route path is "/path//to", it will remain with the double +// slash. This is helpful if you have a route like: /fetch/http://xkcd.com/534/ +// +// When false, the path will be cleaned, so /fetch/http://xkcd.com/534/ will +// become /fetch/http/xkcd.com/534 +func (r *Router) SkipClean(value bool) *Router { + r.skipClean = value + return r +} + +// UseEncodedPath tells the router to match the encoded original path +// to the routes. +// For eg. "/path/foo%2Fbar/to" will match the path "/path/{var}/to". +// This behavior has the drawback of needing to match routes against +// r.RequestURI instead of r.URL.Path. Any modifications (such as http.StripPrefix) +// to r.URL.Path will not affect routing when this flag is on and thus may +// induce unintended behavior. +// +// If not called, the router will match the unencoded path to the routes. +// For eg. "/path/foo%2Fbar/to" will match the path "/path/foo/bar/to" +func (r *Router) UseEncodedPath() *Router { + r.useEncodedPath = true + return r +} + // ---------------------------------------------------------------------------- // parentRoute // ---------------------------------------------------------------------------- +func (r *Router) getBuildScheme() string { + if r.parent != nil { + return r.parent.getBuildScheme() + } + return "" +} + // getNamedRoutes returns the map where named routes are registered. func (r *Router) getNamedRoutes() map[string]*Route { if r.namedRoutes == nil { @@ -165,7 +235,7 @@ func (r *Router) buildVars(m map[string]string) map[string]string { // NewRoute registers an empty route. func (r *Router) NewRoute() *Route { - route := &Route{parent: r, strictSlash: r.strictSlash} + route := &Route{parent: r, strictSlash: r.strictSlash, skipClean: r.skipClean, useEncodedPath: r.useEncodedPath} r.routes = append(r.routes, route) return route } @@ -231,12 +301,59 @@ func (r *Router) Schemes(schemes ...string) *Route { return r.NewRoute().Schemes(schemes...) } -// BuildVars registers a new route with a custom function for modifying +// BuildVarsFunc registers a new route with a custom function for modifying // route variables before building a URL. func (r *Router) BuildVarsFunc(f BuildVarsFunc) *Route { return r.NewRoute().BuildVarsFunc(f) } +// Walk walks the router and all its sub-routers, calling walkFn for each route +// in the tree. The routes are walked in the order they were added. Sub-routers +// are explored depth-first. +func (r *Router) Walk(walkFn WalkFunc) error { + return r.walk(walkFn, []*Route{}) +} + +// SkipRouter is used as a return value from WalkFuncs to indicate that the +// router that walk is about to descend down to should be skipped. +var SkipRouter = errors.New("skip this router") + +// WalkFunc is the type of the function called for each route visited by Walk. +// At every invocation, it is given the current route, and the current router, +// and a list of ancestor routes that lead to the current route. +type WalkFunc func(route *Route, router *Router, ancestors []*Route) error + +func (r *Router) walk(walkFn WalkFunc, ancestors []*Route) error { + for _, t := range r.routes { + err := walkFn(t, r, ancestors) + if err == SkipRouter { + continue + } + if err != nil { + return err + } + for _, sr := range t.matchers { + if h, ok := sr.(*Router); ok { + ancestors = append(ancestors, t) + err := h.walk(walkFn, ancestors) + if err != nil { + return err + } + ancestors = ancestors[:len(ancestors)-1] + } + } + if h, ok := t.handler.(*Router); ok { + ancestors = append(ancestors, t) + err := h.walk(walkFn, ancestors) + if err != nil { + return err + } + ancestors = ancestors[:len(ancestors)-1] + } + } + return nil +} + // ---------------------------------------------------------------------------- // Context // ---------------------------------------------------------------------------- @@ -246,6 +363,11 @@ type RouteMatch struct { Route *Route Handler http.Handler Vars map[string]string + + // MatchErr is set to appropriate matching error + // It is set to ErrMethodMismatch if there is a mismatch in + // the request method and route method + MatchErr error } type contextKey int @@ -257,32 +379,58 @@ const ( // Vars returns the route variables for the current request, if any. func Vars(r *http.Request) map[string]string { - if rv := context.Get(r, varsKey); rv != nil { + if rv := contextGet(r, varsKey); rv != nil { return rv.(map[string]string) } return nil } // CurrentRoute returns the matched route for the current request, if any. +// This only works when called inside the handler of the matched route +// because the matched route is stored in the request context which is cleared +// after the handler returns, unless the KeepContext option is set on the +// Router. func CurrentRoute(r *http.Request) *Route { - if rv := context.Get(r, routeKey); rv != nil { + if rv := contextGet(r, routeKey); rv != nil { return rv.(*Route) } return nil } -func setVars(r *http.Request, val interface{}) { - context.Set(r, varsKey, val) +func setVars(r *http.Request, val interface{}) *http.Request { + return contextSet(r, varsKey, val) } -func setCurrentRoute(r *http.Request, val interface{}) { - context.Set(r, routeKey, val) +func setCurrentRoute(r *http.Request, val interface{}) *http.Request { + return contextSet(r, routeKey, val) } // ---------------------------------------------------------------------------- // Helpers // ---------------------------------------------------------------------------- +// getPath returns the escaped path if possible; doing what URL.EscapedPath() +// which was added in go1.5 does +func getPath(req *http.Request) string { + if req.RequestURI != "" { + // Extract the path from RequestURI (which is escaped unlike URL.Path) + // as detailed here as detailed in https://golang.org/pkg/net/url/#URL + // for < 1.5 server side workaround + // http://localhost/path/here?v=1 -> /path/here + path := req.RequestURI + path = strings.TrimPrefix(path, req.URL.Scheme+`://`) + path = strings.TrimPrefix(path, req.URL.Host) + if i := strings.LastIndex(path, "?"); i > -1 { + path = path[:i] + } + if i := strings.LastIndex(path, "#"); i > -1 { + path = path[:i] + } + return path + } + return req.URL.Path +} + // cleanPath returns the canonical path for p, eliminating . and .. elements. // Borrowed from the net/http package. func cleanPath(p string) string { @@ -298,6 +446,7 @@ func cleanPath(p string) string { if p[len(p)-1] == '/' && np != "/" { np += "/" } + return np } @@ -313,13 +462,24 @@ func uniqueVars(s1, s2 []string) error { return nil } -// mapFromPairs converts variadic string parameters to a string map. -func mapFromPairs(pairs ...string) (map[string]string, error) { +// checkPairs returns the count of strings passed in, and an error if +// the count is not an even number. +func checkPairs(pairs ...string) (int, error) { length := len(pairs) if length%2 != 0 { - return nil, fmt.Errorf( + return length, fmt.Errorf( "mux: number of parameters must be multiple of 2, got %v", pairs) } + return length, nil +} + +// mapFromPairsToString converts variadic string parameters to a +// string to string map. +func mapFromPairsToString(pairs ...string) (map[string]string, error) { + length, err := checkPairs(pairs...) + if err != nil { + return nil, err + } m := make(map[string]string, length/2) for i := 0; i < length; i += 2 { m[pairs[i]] = pairs[i+1] @@ -327,6 +487,24 @@ func mapFromPairs(pairs ...string) (map[string]string, error) { return m, nil } +// mapFromPairsToRegex converts variadic string parameters to a +// string to regex map. +func mapFromPairsToRegex(pairs ...string) (map[string]*regexp.Regexp, error) { + length, err := checkPairs(pairs...) + if err != nil { + return nil, err + } + m := make(map[string]*regexp.Regexp, length/2) + for i := 0; i < length; i += 2 { + regex, err := regexp.Compile(pairs[i+1]) + if err != nil { + return nil, err + } + m[pairs[i]] = regex + } + return m, nil +} + // matchInArray returns true if the given string value is in the array. func matchInArray(arr []string, value string) bool { for _, v := range arr { @@ -337,9 +515,8 @@ func matchInArray(arr []string, value string) bool { return false } -// matchMap returns true if the given key/value pairs exist in a given map. -func matchMap(toCheck map[string]string, toMatch map[string][]string, - canonicalKey bool) bool { +// matchMapWithString returns true if the given key/value pairs exist in a given map. +func matchMapWithString(toCheck map[string]string, toMatch map[string][]string, canonicalKey bool) bool { for k, v := range toCheck { // Check if key exists. if canonicalKey { @@ -364,3 +541,40 @@ func matchMap(toCheck map[string]string, toMatch map[string][]string, } return true } + +// matchMapWithRegex returns true if the given key/value pairs exist in a given map compiled against +// the given regex +func matchMapWithRegex(toCheck map[string]*regexp.Regexp, toMatch map[string][]string, canonicalKey bool) bool { + for k, v := range toCheck { + // Check if key exists. + if canonicalKey { + k = http.CanonicalHeaderKey(k) + } + if values := toMatch[k]; values == nil { + return false + } else if v != nil { + // If value was defined as an empty string we only check that the + // key exists. Otherwise we also check for equality. + valueExists := false + for _, value := range values { + if v.MatchString(value) { + valueExists = true + break + } + } + if !valueExists { + return false + } + } + } + return true +} + +// methodNotAllowed replies to the request with an HTTP status code 405. +func methodNotAllowed(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusMethodNotAllowed) +} + +// methodNotAllowedHandler returns a simple request handler +// that replies to each request with a status code 405. +func methodNotAllowedHandler() http.Handler { return http.HandlerFunc(methodNotAllowed) } diff --git a/vendor/github.com/gorilla/mux/mux_test.go b/vendor/github.com/gorilla/mux/mux_test.go index 075dedb..484fab4 100644 --- a/vendor/github.com/gorilla/mux/mux_test.go +++ b/vendor/github.com/gorilla/mux/mux_test.go @@ -5,20 +5,42 @@ package mux import ( + "bufio" + "bytes" + "errors" "fmt" "net/http" + "net/url" + "reflect" + "strings" "testing" - - "github.com/gorilla/context" ) +func (r *Route) GoString() string { + matchers := make([]string, len(r.matchers)) + for i, m := range r.matchers { + matchers[i] = fmt.Sprintf("%#v", m) + } + return fmt.Sprintf("&Route{matchers:[]matcher{%s}}", strings.Join(matchers, ", ")) +} + +func (r *routeRegexp) GoString() string { + return fmt.Sprintf("&routeRegexp{template: %q, matchHost: %t, matchQuery: %t, strictSlash: %t, regexp: regexp.MustCompile(%q), reverse: %q, varsN: %v, varsR: %v", r.template, r.matchHost, r.matchQuery, r.strictSlash, r.regexp.String(), r.reverse, r.varsN, r.varsR) +} + type routeTest struct { title string // title of the test route *Route // the route being tested request *http.Request // a request to test the route vars map[string]string // the expected vars of the match - host string // the expected host of the match - path string // the expected path of the match + scheme string // the expected scheme of the built URL + host string // the expected host of the built URL + path string // the expected path of the built URL + query string // the expected query string of the built URL + pathTemplate string // the expected path template of the route + hostTemplate string // the expected host template of the route + methods []string // the expected route methods + pathRegexp string // the expected path regexp shouldMatch bool // whether the request is expected to match the route at all shouldRedirect bool // whether the request should result in a redirect } @@ -100,71 +122,89 @@ func TestHost(t *testing.T) { shouldMatch: false, }, { - title: "Host route with pattern, match", - route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc"), - request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), - vars: map[string]string{"v1": "bbb"}, - host: "aaa.bbb.ccc", - path: "", - shouldMatch: true, + title: "Host route with pattern, match", + route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v1": "bbb"}, + host: "aaa.bbb.ccc", + path: "", + hostTemplate: `aaa.{v1:[a-z]{3}}.ccc`, + shouldMatch: true, }, { - title: "Host route with pattern, wrong host in request URL", - route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc"), - request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), - vars: map[string]string{"v1": "bbb"}, - host: "aaa.bbb.ccc", - path: "", - shouldMatch: false, + title: "Host route with pattern, additional capturing group, match", + route: new(Route).Host("aaa.{v1:[a-z]{2}(?:b|c)}.ccc"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v1": "bbb"}, + host: "aaa.bbb.ccc", + path: "", + hostTemplate: `aaa.{v1:[a-z]{2}(?:b|c)}.ccc`, + shouldMatch: true, }, { - title: "Host route with multiple patterns, match", - route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}"), - request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), - vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc"}, - host: "aaa.bbb.ccc", - path: "", - shouldMatch: true, + title: "Host route with pattern, wrong host in request URL", + route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc"), + request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), + vars: map[string]string{"v1": "bbb"}, + host: "aaa.bbb.ccc", + path: "", + hostTemplate: `aaa.{v1:[a-z]{3}}.ccc`, + shouldMatch: false, }, { - title: "Host route with multiple patterns, wrong host in request URL", - route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}"), - request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), - vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc"}, - host: "aaa.bbb.ccc", - path: "", - shouldMatch: false, + title: "Host route with multiple patterns, match", + route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc"}, + host: "aaa.bbb.ccc", + path: "", + hostTemplate: `{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}`, + shouldMatch: true, }, { - title: "Path route with single pattern with pipe, match", - route: new(Route).Path("/{category:a|b/c}"), - request: newRequest("GET", "http://localhost/a"), - vars: map[string]string{"category": "a"}, - host: "", - path: "/a", - shouldMatch: true, + title: "Host route with multiple patterns, wrong host in request URL", + route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}"), + request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), + vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc"}, + host: "aaa.bbb.ccc", + path: "", + hostTemplate: `{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}`, + shouldMatch: false, }, { - title: "Path route with single pattern with pipe, match", - route: new(Route).Path("/{category:a|b/c}"), - request: newRequest("GET", "http://localhost/b/c"), - vars: map[string]string{"category": "b/c"}, - host: "", - path: "/b/c", - shouldMatch: true, + title: "Host route with hyphenated name and pattern, match", + route: new(Route).Host("aaa.{v-1:[a-z]{3}}.ccc"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v-1": "bbb"}, + host: "aaa.bbb.ccc", + path: "", + hostTemplate: `aaa.{v-1:[a-z]{3}}.ccc`, + shouldMatch: true, }, { - title: "Path route with multiple patterns with pipe, match", - route: new(Route).Path("/{category:a|b/c}/{product}/{id:[0-9]+}"), - request: newRequest("GET", "http://localhost/a/product_name/1"), - vars: map[string]string{"category": "a", "product": "product_name", "id": "1"}, - host: "", - path: "/a/product_name/1", - shouldMatch: true, + title: "Host route with hyphenated name and pattern, additional capturing group, match", + route: new(Route).Host("aaa.{v-1:[a-z]{2}(?:b|c)}.ccc"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v-1": "bbb"}, + host: "aaa.bbb.ccc", + path: "", + hostTemplate: `aaa.{v-1:[a-z]{2}(?:b|c)}.ccc`, + shouldMatch: true, + }, + { + title: "Host route with multiple hyphenated names and patterns, match", + route: new(Route).Host("{v-1:[a-z]{3}}.{v-2:[a-z]{3}}.{v-3:[a-z]{3}}"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v-1": "aaa", "v-2": "bbb", "v-3": "ccc"}, + host: "aaa.bbb.ccc", + path: "", + hostTemplate: `{v-1:[a-z]{3}}.{v-2:[a-z]{3}}.{v-3:[a-z]{3}}`, + shouldMatch: true, }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) } } @@ -189,22 +229,50 @@ func TestPath(t *testing.T) { shouldMatch: true, }, { - title: "Path route, do not match with trailing slash in path", - route: new(Route).Path("/111/"), - request: newRequest("GET", "http://localhost/111"), - vars: map[string]string{}, - host: "", - path: "/111", - shouldMatch: false, + title: "Path route, do not match with trailing slash in path", + route: new(Route).Path("/111/"), + request: newRequest("GET", "http://localhost/111"), + vars: map[string]string{}, + host: "", + path: "/111", + pathTemplate: `/111/`, + pathRegexp: `^/111/$`, + shouldMatch: false, }, { - title: "Path route, do not match with trailing slash in request", - route: new(Route).Path("/111"), - request: newRequest("GET", "http://localhost/111/"), - vars: map[string]string{}, - host: "", - path: "/111/", - shouldMatch: false, + title: "Path route, do not match with trailing slash in request", + route: new(Route).Path("/111"), + request: newRequest("GET", "http://localhost/111/"), + vars: map[string]string{}, + host: "", + path: "/111/", + pathTemplate: `/111`, + shouldMatch: false, + }, + { + title: "Path route, match root with no host", + route: new(Route).Path("/"), + request: newRequest("GET", "/"), + vars: map[string]string{}, + host: "", + path: "/", + pathTemplate: `/`, + pathRegexp: `^/$`, + shouldMatch: true, + }, + { + title: "Path route, match root with no host, App Engine format", + route: new(Route).Path("/"), + request: func() *http.Request { + r := newRequest("GET", "http://localhost/") + r.RequestURI = "/" + return r + }(), + vars: map[string]string{}, + host: "", + path: "/", + pathTemplate: `/`, + shouldMatch: true, }, { title: "Path route, wrong path in request in request URL", @@ -216,45 +284,161 @@ func TestPath(t *testing.T) { shouldMatch: false, }, { - title: "Path route with pattern, match", - route: new(Route).Path("/111/{v1:[0-9]{3}}/333"), - request: newRequest("GET", "http://localhost/111/222/333"), - vars: map[string]string{"v1": "222"}, - host: "", - path: "/111/222/333", - shouldMatch: true, + title: "Path route with pattern, match", + route: new(Route).Path("/111/{v1:[0-9]{3}}/333"), + request: newRequest("GET", "http://localhost/111/222/333"), + vars: map[string]string{"v1": "222"}, + host: "", + path: "/111/222/333", + pathTemplate: `/111/{v1:[0-9]{3}}/333`, + shouldMatch: true, }, { - title: "Path route with pattern, URL in request does not match", - route: new(Route).Path("/111/{v1:[0-9]{3}}/333"), - request: newRequest("GET", "http://localhost/111/aaa/333"), - vars: map[string]string{"v1": "222"}, - host: "", - path: "/111/222/333", - shouldMatch: false, + title: "Path route with pattern, URL in request does not match", + route: new(Route).Path("/111/{v1:[0-9]{3}}/333"), + request: newRequest("GET", "http://localhost/111/aaa/333"), + vars: map[string]string{"v1": "222"}, + host: "", + path: "/111/222/333", + pathTemplate: `/111/{v1:[0-9]{3}}/333`, + pathRegexp: `^/111/(?P[0-9]{3})/333$`, + shouldMatch: false, }, { - title: "Path route with multiple patterns, match", - route: new(Route).Path("/{v1:[0-9]{3}}/{v2:[0-9]{3}}/{v3:[0-9]{3}}"), - request: newRequest("GET", "http://localhost/111/222/333"), - vars: map[string]string{"v1": "111", "v2": "222", "v3": "333"}, - host: "", - path: "/111/222/333", - shouldMatch: true, + title: "Path route with multiple patterns, match", + route: new(Route).Path("/{v1:[0-9]{3}}/{v2:[0-9]{3}}/{v3:[0-9]{3}}"), + request: newRequest("GET", "http://localhost/111/222/333"), + vars: map[string]string{"v1": "111", "v2": "222", "v3": "333"}, + host: "", + path: "/111/222/333", + pathTemplate: `/{v1:[0-9]{3}}/{v2:[0-9]{3}}/{v3:[0-9]{3}}`, + pathRegexp: `^/(?P[0-9]{3})/(?P[0-9]{3})/(?P[0-9]{3})$`, + shouldMatch: true, }, { - title: "Path route with multiple patterns, URL in request does not match", - route: new(Route).Path("/{v1:[0-9]{3}}/{v2:[0-9]{3}}/{v3:[0-9]{3}}"), - request: newRequest("GET", "http://localhost/111/aaa/333"), - vars: map[string]string{"v1": "111", "v2": "222", "v3": "333"}, - host: "", - path: "/111/222/333", - shouldMatch: false, + title: "Path route with multiple patterns, URL in request does not match", + route: new(Route).Path("/{v1:[0-9]{3}}/{v2:[0-9]{3}}/{v3:[0-9]{3}}"), + request: newRequest("GET", "http://localhost/111/aaa/333"), + vars: map[string]string{"v1": "111", "v2": "222", "v3": "333"}, + host: "", + path: "/111/222/333", + pathTemplate: `/{v1:[0-9]{3}}/{v2:[0-9]{3}}/{v3:[0-9]{3}}`, + pathRegexp: `^/(?P[0-9]{3})/(?P[0-9]{3})/(?P[0-9]{3})$`, + shouldMatch: false, + }, + { + title: "Path route with multiple patterns with pipe, match", + route: new(Route).Path("/{category:a|(?:b/c)}/{product}/{id:[0-9]+}"), + request: newRequest("GET", "http://localhost/a/product_name/1"), + vars: map[string]string{"category": "a", "product": "product_name", "id": "1"}, + host: "", + path: "/a/product_name/1", + pathTemplate: `/{category:a|(?:b/c)}/{product}/{id:[0-9]+}`, + pathRegexp: `^/(?Pa|(?:b/c))/(?P[^/]+)/(?P[0-9]+)$`, + shouldMatch: true, + }, + { + title: "Path route with hyphenated name and pattern, match", + route: new(Route).Path("/111/{v-1:[0-9]{3}}/333"), + request: newRequest("GET", "http://localhost/111/222/333"), + vars: map[string]string{"v-1": "222"}, + host: "", + path: "/111/222/333", + pathTemplate: `/111/{v-1:[0-9]{3}}/333`, + pathRegexp: `^/111/(?P[0-9]{3})/333$`, + shouldMatch: true, + }, + { + title: "Path route with multiple hyphenated names and patterns, match", + route: new(Route).Path("/{v-1:[0-9]{3}}/{v-2:[0-9]{3}}/{v-3:[0-9]{3}}"), + request: newRequest("GET", "http://localhost/111/222/333"), + vars: map[string]string{"v-1": "111", "v-2": "222", "v-3": "333"}, + host: "", + path: "/111/222/333", + pathTemplate: `/{v-1:[0-9]{3}}/{v-2:[0-9]{3}}/{v-3:[0-9]{3}}`, + pathRegexp: `^/(?P[0-9]{3})/(?P[0-9]{3})/(?P[0-9]{3})$`, + shouldMatch: true, + }, + { + title: "Path route with multiple hyphenated names and patterns with pipe, match", + route: new(Route).Path("/{product-category:a|(?:b/c)}/{product-name}/{product-id:[0-9]+}"), + request: newRequest("GET", "http://localhost/a/product_name/1"), + vars: map[string]string{"product-category": "a", "product-name": "product_name", "product-id": "1"}, + host: "", + path: "/a/product_name/1", + pathTemplate: `/{product-category:a|(?:b/c)}/{product-name}/{product-id:[0-9]+}`, + pathRegexp: `^/(?Pa|(?:b/c))/(?P[^/]+)/(?P[0-9]+)$`, + shouldMatch: true, + }, + { + title: "Path route with multiple hyphenated names and patterns with pipe and case insensitive, match", + route: new(Route).Path("/{type:(?i:daily|mini|variety)}-{date:\\d{4,4}-\\d{2,2}-\\d{2,2}}"), + request: newRequest("GET", "http://localhost/daily-2016-01-01"), + vars: map[string]string{"type": "daily", "date": "2016-01-01"}, + host: "", + path: "/daily-2016-01-01", + pathTemplate: `/{type:(?i:daily|mini|variety)}-{date:\d{4,4}-\d{2,2}-\d{2,2}}`, + pathRegexp: `^/(?P(?i:daily|mini|variety))-(?P\d{4,4}-\d{2,2}-\d{2,2})$`, + shouldMatch: true, + }, + { + title: "Path route with empty match right after other match", + route: new(Route).Path(`/{v1:[0-9]*}{v2:[a-z]*}/{v3:[0-9]*}`), + request: newRequest("GET", "http://localhost/111/222"), + vars: map[string]string{"v1": "111", "v2": "", "v3": "222"}, + host: "", + path: "/111/222", + pathTemplate: `/{v1:[0-9]*}{v2:[a-z]*}/{v3:[0-9]*}`, + pathRegexp: `^/(?P[0-9]*)(?P[a-z]*)/(?P[0-9]*)$`, + shouldMatch: true, + }, + { + title: "Path route with single pattern with pipe, match", + route: new(Route).Path("/{category:a|b/c}"), + request: newRequest("GET", "http://localhost/a"), + vars: map[string]string{"category": "a"}, + host: "", + path: "/a", + pathTemplate: `/{category:a|b/c}`, + shouldMatch: true, + }, + { + title: "Path route with single pattern with pipe, match", + route: new(Route).Path("/{category:a|b/c}"), + request: newRequest("GET", "http://localhost/b/c"), + vars: map[string]string{"category": "b/c"}, + host: "", + path: "/b/c", + pathTemplate: `/{category:a|b/c}`, + shouldMatch: true, + }, + { + title: "Path route with multiple patterns with pipe, match", + route: new(Route).Path("/{category:a|b/c}/{product}/{id:[0-9]+}"), + request: newRequest("GET", "http://localhost/a/product_name/1"), + vars: map[string]string{"category": "a", "product": "product_name", "id": "1"}, + host: "", + path: "/a/product_name/1", + pathTemplate: `/{category:a|b/c}/{product}/{id:[0-9]+}`, + shouldMatch: true, + }, + { + title: "Path route with multiple patterns with pipe, match", + route: new(Route).Path("/{category:a|b/c}/{product}/{id:[0-9]+}"), + request: newRequest("GET", "http://localhost/b/c/product_name/1"), + vars: map[string]string{"category": "b/c", "product": "product_name", "id": "1"}, + host: "", + path: "/b/c/product_name/1", + pathTemplate: `/{category:a|b/c}/{product}/{id:[0-9]+}`, + shouldMatch: true, }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) + testRegexp(t, test) } } @@ -288,108 +472,158 @@ func TestPathPrefix(t *testing.T) { shouldMatch: false, }, { - title: "PathPrefix route with pattern, match", - route: new(Route).PathPrefix("/111/{v1:[0-9]{3}}"), - request: newRequest("GET", "http://localhost/111/222/333"), - vars: map[string]string{"v1": "222"}, - host: "", - path: "/111/222", - shouldMatch: true, + title: "PathPrefix route with pattern, match", + route: new(Route).PathPrefix("/111/{v1:[0-9]{3}}"), + request: newRequest("GET", "http://localhost/111/222/333"), + vars: map[string]string{"v1": "222"}, + host: "", + path: "/111/222", + pathTemplate: `/111/{v1:[0-9]{3}}`, + shouldMatch: true, }, { - title: "PathPrefix route with pattern, URL prefix in request does not match", - route: new(Route).PathPrefix("/111/{v1:[0-9]{3}}"), - request: newRequest("GET", "http://localhost/111/aaa/333"), - vars: map[string]string{"v1": "222"}, - host: "", - path: "/111/222", - shouldMatch: false, + title: "PathPrefix route with pattern, URL prefix in request does not match", + route: new(Route).PathPrefix("/111/{v1:[0-9]{3}}"), + request: newRequest("GET", "http://localhost/111/aaa/333"), + vars: map[string]string{"v1": "222"}, + host: "", + path: "/111/222", + pathTemplate: `/111/{v1:[0-9]{3}}`, + shouldMatch: false, }, { - title: "PathPrefix route with multiple patterns, match", - route: new(Route).PathPrefix("/{v1:[0-9]{3}}/{v2:[0-9]{3}}"), - request: newRequest("GET", "http://localhost/111/222/333"), - vars: map[string]string{"v1": "111", "v2": "222"}, - host: "", - path: "/111/222", - shouldMatch: true, + title: "PathPrefix route with multiple patterns, match", + route: new(Route).PathPrefix("/{v1:[0-9]{3}}/{v2:[0-9]{3}}"), + request: newRequest("GET", "http://localhost/111/222/333"), + vars: map[string]string{"v1": "111", "v2": "222"}, + host: "", + path: "/111/222", + pathTemplate: `/{v1:[0-9]{3}}/{v2:[0-9]{3}}`, + shouldMatch: true, }, { - title: "PathPrefix route with multiple patterns, URL prefix in request does not match", - route: new(Route).PathPrefix("/{v1:[0-9]{3}}/{v2:[0-9]{3}}"), - request: newRequest("GET", "http://localhost/111/aaa/333"), - vars: map[string]string{"v1": "111", "v2": "222"}, - host: "", - path: "/111/222", - shouldMatch: false, + title: "PathPrefix route with multiple patterns, URL prefix in request does not match", + route: new(Route).PathPrefix("/{v1:[0-9]{3}}/{v2:[0-9]{3}}"), + request: newRequest("GET", "http://localhost/111/aaa/333"), + vars: map[string]string{"v1": "111", "v2": "222"}, + host: "", + path: "/111/222", + pathTemplate: `/{v1:[0-9]{3}}/{v2:[0-9]{3}}`, + shouldMatch: false, }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) } } -func TestHostPath(t *testing.T) { +func TestSchemeHostPath(t *testing.T) { tests := []routeTest{ { - title: "Host and Path route, match", - route: new(Route).Host("aaa.bbb.ccc").Path("/111/222/333"), - request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), - vars: map[string]string{}, - host: "", - path: "", - shouldMatch: true, + title: "Host and Path route, match", + route: new(Route).Host("aaa.bbb.ccc").Path("/111/222/333"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{}, + scheme: "http", + host: "aaa.bbb.ccc", + path: "/111/222/333", + pathTemplate: `/111/222/333`, + hostTemplate: `aaa.bbb.ccc`, + shouldMatch: true, }, { - title: "Host and Path route, wrong host in request URL", - route: new(Route).Host("aaa.bbb.ccc").Path("/111/222/333"), - request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), - vars: map[string]string{}, - host: "", - path: "", - shouldMatch: false, + title: "Scheme, Host, and Path route, match", + route: new(Route).Schemes("https").Host("aaa.bbb.ccc").Path("/111/222/333"), + request: newRequest("GET", "https://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{}, + scheme: "https", + host: "aaa.bbb.ccc", + path: "/111/222/333", + pathTemplate: `/111/222/333`, + hostTemplate: `aaa.bbb.ccc`, + shouldMatch: true, }, { - title: "Host and Path route with pattern, match", - route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc").Path("/111/{v2:[0-9]{3}}/333"), - request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), - vars: map[string]string{"v1": "bbb", "v2": "222"}, - host: "aaa.bbb.ccc", - path: "/111/222/333", - shouldMatch: true, + title: "Host and Path route, wrong host in request URL", + route: new(Route).Host("aaa.bbb.ccc").Path("/111/222/333"), + request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), + vars: map[string]string{}, + scheme: "http", + host: "aaa.bbb.ccc", + path: "/111/222/333", + pathTemplate: `/111/222/333`, + hostTemplate: `aaa.bbb.ccc`, + shouldMatch: false, }, { - title: "Host and Path route with pattern, URL in request does not match", - route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc").Path("/111/{v2:[0-9]{3}}/333"), - request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), - vars: map[string]string{"v1": "bbb", "v2": "222"}, - host: "aaa.bbb.ccc", - path: "/111/222/333", - shouldMatch: false, + title: "Host and Path route with pattern, match", + route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc").Path("/111/{v2:[0-9]{3}}/333"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v1": "bbb", "v2": "222"}, + scheme: "http", + host: "aaa.bbb.ccc", + path: "/111/222/333", + pathTemplate: `/111/{v2:[0-9]{3}}/333`, + hostTemplate: `aaa.{v1:[a-z]{3}}.ccc`, + shouldMatch: true, }, { - title: "Host and Path route with multiple patterns, match", - route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}").Path("/{v4:[0-9]{3}}/{v5:[0-9]{3}}/{v6:[0-9]{3}}"), - request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), - vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc", "v4": "111", "v5": "222", "v6": "333"}, - host: "aaa.bbb.ccc", - path: "/111/222/333", - shouldMatch: true, + title: "Scheme, Host, and Path route with host and path patterns, match", + route: new(Route).Schemes("ftp", "ssss").Host("aaa.{v1:[a-z]{3}}.ccc").Path("/111/{v2:[0-9]{3}}/333"), + request: newRequest("GET", "ssss://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v1": "bbb", "v2": "222"}, + scheme: "ftp", + host: "aaa.bbb.ccc", + path: "/111/222/333", + pathTemplate: `/111/{v2:[0-9]{3}}/333`, + hostTemplate: `aaa.{v1:[a-z]{3}}.ccc`, + shouldMatch: true, }, { - title: "Host and Path route with multiple patterns, URL in request does not match", - route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}").Path("/{v4:[0-9]{3}}/{v5:[0-9]{3}}/{v6:[0-9]{3}}"), - request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), - vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc", "v4": "111", "v5": "222", "v6": "333"}, - host: "aaa.bbb.ccc", - path: "/111/222/333", - shouldMatch: false, + title: "Host and Path route with pattern, URL in request does not match", + route: new(Route).Host("aaa.{v1:[a-z]{3}}.ccc").Path("/111/{v2:[0-9]{3}}/333"), + request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), + vars: map[string]string{"v1": "bbb", "v2": "222"}, + scheme: "http", + host: "aaa.bbb.ccc", + path: "/111/222/333", + pathTemplate: `/111/{v2:[0-9]{3}}/333`, + hostTemplate: `aaa.{v1:[a-z]{3}}.ccc`, + shouldMatch: false, + }, + { + title: "Host and Path route with multiple patterns, match", + route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}").Path("/{v4:[0-9]{3}}/{v5:[0-9]{3}}/{v6:[0-9]{3}}"), + request: newRequest("GET", "http://aaa.bbb.ccc/111/222/333"), + vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc", "v4": "111", "v5": "222", "v6": "333"}, + scheme: "http", + host: "aaa.bbb.ccc", + path: "/111/222/333", + pathTemplate: `/{v4:[0-9]{3}}/{v5:[0-9]{3}}/{v6:[0-9]{3}}`, + hostTemplate: `{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}`, + shouldMatch: true, + }, + { + title: "Host and Path route with multiple patterns, URL in request does not match", + route: new(Route).Host("{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}").Path("/{v4:[0-9]{3}}/{v5:[0-9]{3}}/{v6:[0-9]{3}}"), + request: newRequest("GET", "http://aaa.222.ccc/111/222/333"), + vars: map[string]string{"v1": "aaa", "v2": "bbb", "v3": "ccc", "v4": "111", "v5": "222", "v6": "333"}, + scheme: "http", + host: "aaa.bbb.ccc", + path: "/111/222/333", + pathTemplate: `/{v4:[0-9]{3}}/{v5:[0-9]{3}}/{v6:[0-9]{3}}`, + hostTemplate: `{v1:[a-z]{3}}.{v2:[a-z]{3}}.{v3:[a-z]{3}}`, + shouldMatch: false, }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) } } @@ -425,12 +659,30 @@ func TestHeaders(t *testing.T) { path: "", shouldMatch: false, }, + { + title: "Headers route, regex header values to match", + route: new(Route).Headers("foo", "ba[zr]"), + request: newRequestHeaders("GET", "http://localhost", map[string]string{"foo": "bar"}), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Headers route, regex header values to match", + route: new(Route).HeadersRegexp("foo", "ba[zr]"), + request: newRequestHeaders("GET", "http://localhost", map[string]string{"foo": "baz"}), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: true, + }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) } - } func TestMethods(t *testing.T) { @@ -442,6 +694,7 @@ func TestMethods(t *testing.T) { vars: map[string]string{}, host: "", path: "", + methods: []string{"GET", "POST"}, shouldMatch: true, }, { @@ -451,6 +704,7 @@ func TestMethods(t *testing.T) { vars: map[string]string{}, host: "", path: "", + methods: []string{"GET", "POST"}, shouldMatch: true, }, { @@ -460,12 +714,25 @@ func TestMethods(t *testing.T) { vars: map[string]string{}, host: "", path: "", + methods: []string{"GET", "POST"}, shouldMatch: false, }, + { + title: "Route without methods", + route: new(Route), + request: newRequest("PUT", "http://localhost"), + vars: map[string]string{}, + host: "", + path: "", + methods: []string{}, + shouldMatch: true, + }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) + testMethods(t, test) } } @@ -478,25 +745,32 @@ func TestQueries(t *testing.T) { vars: map[string]string{}, host: "", path: "", + query: "foo=bar&baz=ding", shouldMatch: true, }, { - title: "Queries route, match with a query string", - route: new(Route).Host("www.example.com").Path("/api").Queries("foo", "bar", "baz", "ding"), - request: newRequest("GET", "http://www.example.com/api?foo=bar&baz=ding"), - vars: map[string]string{}, - host: "", - path: "", - shouldMatch: true, + title: "Queries route, match with a query string", + route: new(Route).Host("www.example.com").Path("/api").Queries("foo", "bar", "baz", "ding"), + request: newRequest("GET", "http://www.example.com/api?foo=bar&baz=ding"), + vars: map[string]string{}, + host: "", + path: "", + query: "foo=bar&baz=ding", + pathTemplate: `/api`, + hostTemplate: `www.example.com`, + shouldMatch: true, }, { - title: "Queries route, match with a query string out of order", - route: new(Route).Host("www.example.com").Path("/api").Queries("foo", "bar", "baz", "ding"), - request: newRequest("GET", "http://www.example.com/api?baz=ding&foo=bar"), - vars: map[string]string{}, - host: "", - path: "", - shouldMatch: true, + title: "Queries route, match with a query string out of order", + route: new(Route).Host("www.example.com").Path("/api").Queries("foo", "bar", "baz", "ding"), + request: newRequest("GET", "http://www.example.com/api?baz=ding&foo=bar"), + vars: map[string]string{}, + host: "", + path: "", + query: "foo=bar&baz=ding", + pathTemplate: `/api`, + hostTemplate: `www.example.com`, + shouldMatch: true, }, { title: "Queries route, bad query", @@ -514,6 +788,7 @@ func TestQueries(t *testing.T) { vars: map[string]string{"v1": "bar"}, host: "", path: "", + query: "foo=bar", shouldMatch: true, }, { @@ -523,6 +798,7 @@ func TestQueries(t *testing.T) { vars: map[string]string{"v1": "bar", "v2": "ding"}, host: "", path: "", + query: "foo=bar&baz=ding", shouldMatch: true, }, { @@ -532,6 +808,7 @@ func TestQueries(t *testing.T) { vars: map[string]string{"v1": "10"}, host: "", path: "", + query: "foo=10", shouldMatch: true, }, { @@ -543,10 +820,176 @@ func TestQueries(t *testing.T) { path: "", shouldMatch: false, }, + { + title: "Queries route with regexp pattern with quantifier, match", + route: new(Route).Queries("foo", "{v1:[0-9]{1}}"), + request: newRequest("GET", "http://localhost?foo=1"), + vars: map[string]string{"v1": "1"}, + host: "", + path: "", + query: "foo=1", + shouldMatch: true, + }, + { + title: "Queries route with regexp pattern with quantifier, additional variable in query string, match", + route: new(Route).Queries("foo", "{v1:[0-9]{1}}"), + request: newRequest("GET", "http://localhost?bar=2&foo=1"), + vars: map[string]string{"v1": "1"}, + host: "", + path: "", + query: "foo=1", + shouldMatch: true, + }, + { + title: "Queries route with regexp pattern with quantifier, regexp does not match", + route: new(Route).Queries("foo", "{v1:[0-9]{1}}"), + request: newRequest("GET", "http://localhost?foo=12"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with regexp pattern with quantifier, additional capturing group", + route: new(Route).Queries("foo", "{v1:[0-9]{1}(?:a|b)}"), + request: newRequest("GET", "http://localhost?foo=1a"), + vars: map[string]string{"v1": "1a"}, + host: "", + path: "", + query: "foo=1a", + shouldMatch: true, + }, + { + title: "Queries route with regexp pattern with quantifier, additional variable in query string, regexp does not match", + route: new(Route).Queries("foo", "{v1:[0-9]{1}}"), + request: newRequest("GET", "http://localhost?foo=12"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with hyphenated name, match", + route: new(Route).Queries("foo", "{v-1}"), + request: newRequest("GET", "http://localhost?foo=bar"), + vars: map[string]string{"v-1": "bar"}, + host: "", + path: "", + query: "foo=bar", + shouldMatch: true, + }, + { + title: "Queries route with multiple hyphenated names, match", + route: new(Route).Queries("foo", "{v-1}", "baz", "{v-2}"), + request: newRequest("GET", "http://localhost?foo=bar&baz=ding"), + vars: map[string]string{"v-1": "bar", "v-2": "ding"}, + host: "", + path: "", + query: "foo=bar&baz=ding", + shouldMatch: true, + }, + { + title: "Queries route with hyphenate name and pattern, match", + route: new(Route).Queries("foo", "{v-1:[0-9]+}"), + request: newRequest("GET", "http://localhost?foo=10"), + vars: map[string]string{"v-1": "10"}, + host: "", + path: "", + query: "foo=10", + shouldMatch: true, + }, + { + title: "Queries route with hyphenated name and pattern with quantifier, additional capturing group", + route: new(Route).Queries("foo", "{v-1:[0-9]{1}(?:a|b)}"), + request: newRequest("GET", "http://localhost?foo=1a"), + vars: map[string]string{"v-1": "1a"}, + host: "", + path: "", + query: "foo=1a", + shouldMatch: true, + }, + { + title: "Queries route with empty value, should match", + route: new(Route).Queries("foo", ""), + request: newRequest("GET", "http://localhost?foo=bar"), + vars: map[string]string{}, + host: "", + path: "", + query: "foo=", + shouldMatch: true, + }, + { + title: "Queries route with empty value and no parameter in request, should not match", + route: new(Route).Queries("foo", ""), + request: newRequest("GET", "http://localhost"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with empty value and empty parameter in request, should match", + route: new(Route).Queries("foo", ""), + request: newRequest("GET", "http://localhost?foo="), + vars: map[string]string{}, + host: "", + path: "", + query: "foo=", + shouldMatch: true, + }, + { + title: "Queries route with overlapping value, should not match", + route: new(Route).Queries("foo", "bar"), + request: newRequest("GET", "http://localhost?foo=barfoo"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with no parameter in request, should not match", + route: new(Route).Queries("foo", "{bar}"), + request: newRequest("GET", "http://localhost"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with empty parameter in request, should match", + route: new(Route).Queries("foo", "{bar}"), + request: newRequest("GET", "http://localhost?foo="), + vars: map[string]string{"foo": ""}, + host: "", + path: "", + query: "foo=", + shouldMatch: true, + }, + { + title: "Queries route, bad submatch", + route: new(Route).Queries("foo", "bar", "baz", "ding"), + request: newRequest("GET", "http://localhost?fffoo=bar&baz=dingggg"), + vars: map[string]string{}, + host: "", + path: "", + shouldMatch: false, + }, + { + title: "Queries route with pattern, match, escaped value", + route: new(Route).Queries("foo", "{v1}"), + request: newRequest("GET", "http://localhost?foo=%25bar%26%20%2F%3D%3F"), + vars: map[string]string{"v1": "%bar& /=?"}, + host: "", + path: "", + query: "foo=%25bar%26+%2F%3D%3F", + shouldMatch: true, + }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) } } @@ -554,35 +997,49 @@ func TestSchemes(t *testing.T) { tests := []routeTest{ // Schemes { - title: "Schemes route, match https", - route: new(Route).Schemes("https", "ftp"), - request: newRequest("GET", "https://localhost"), - vars: map[string]string{}, - host: "", - path: "", + title: "Schemes route, default scheme, match http, build http", + route: new(Route).Host("localhost"), + request: newRequest("GET", "http://localhost"), + scheme: "http", + host: "localhost", shouldMatch: true, }, { - title: "Schemes route, match ftp", - route: new(Route).Schemes("https", "ftp"), + title: "Schemes route, match https, build https", + route: new(Route).Schemes("https", "ftp").Host("localhost"), + request: newRequest("GET", "https://localhost"), + scheme: "https", + host: "localhost", + shouldMatch: true, + }, + { + title: "Schemes route, match ftp, build https", + route: new(Route).Schemes("https", "ftp").Host("localhost"), request: newRequest("GET", "ftp://localhost"), - vars: map[string]string{}, - host: "", - path: "", + scheme: "https", + host: "localhost", + shouldMatch: true, + }, + { + title: "Schemes route, match ftp, build ftp", + route: new(Route).Schemes("ftp", "https").Host("localhost"), + request: newRequest("GET", "ftp://localhost"), + scheme: "ftp", + host: "localhost", shouldMatch: true, }, { title: "Schemes route, bad scheme", - route: new(Route).Schemes("https", "ftp"), + route: new(Route).Schemes("https", "ftp").Host("localhost"), request: newRequest("GET", "http://localhost"), - vars: map[string]string{}, - host: "", - path: "", + scheme: "https", + host: "localhost", shouldMatch: false, }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) } } @@ -617,6 +1074,7 @@ func TestMatcherFunc(t *testing.T) { for _, test := range tests { testRoute(t, test) + testTemplate(t, test) } } @@ -629,9 +1087,10 @@ func TestBuildVarsFunc(t *testing.T) { vars["v2"] = "a" return vars }), - request: newRequest("GET", "http://localhost/111/2"), - path: "/111/3a", - shouldMatch: true, + request: newRequest("GET", "http://localhost/111/2"), + path: "/111/3a", + pathTemplate: `/111/{v1:\d}{v2:.*}`, + shouldMatch: true, }, { title: "BuildVarsFunc set on route and parent route", @@ -642,58 +1101,148 @@ func TestBuildVarsFunc(t *testing.T) { vars["v2"] = "b" return vars }), - request: newRequest("GET", "http://localhost/1/a"), - path: "/2/b", - shouldMatch: true, + request: newRequest("GET", "http://localhost/1/a"), + path: "/2/b", + pathTemplate: `/{v1:\d}/{v2:\w}`, + shouldMatch: true, }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) } } func TestSubRouter(t *testing.T) { subrouter1 := new(Route).Host("{v1:[a-z]+}.google.com").Subrouter() subrouter2 := new(Route).PathPrefix("/foo/{v1}").Subrouter() + subrouter3 := new(Route).PathPrefix("/foo").Subrouter() + subrouter4 := new(Route).PathPrefix("/foo/bar").Subrouter() + subrouter5 := new(Route).PathPrefix("/{category}").Subrouter() tests := []routeTest{ { - route: subrouter1.Path("/{v2:[a-z]+}"), - request: newRequest("GET", "http://aaa.google.com/bbb"), - vars: map[string]string{"v1": "aaa", "v2": "bbb"}, - host: "aaa.google.com", - path: "/bbb", - shouldMatch: true, + route: subrouter1.Path("/{v2:[a-z]+}"), + request: newRequest("GET", "http://aaa.google.com/bbb"), + vars: map[string]string{"v1": "aaa", "v2": "bbb"}, + host: "aaa.google.com", + path: "/bbb", + pathTemplate: `/{v2:[a-z]+}`, + hostTemplate: `{v1:[a-z]+}.google.com`, + shouldMatch: true, }, { - route: subrouter1.Path("/{v2:[a-z]+}"), - request: newRequest("GET", "http://111.google.com/111"), - vars: map[string]string{"v1": "aaa", "v2": "bbb"}, - host: "aaa.google.com", - path: "/bbb", - shouldMatch: false, + route: subrouter1.Path("/{v2:[a-z]+}"), + request: newRequest("GET", "http://111.google.com/111"), + vars: map[string]string{"v1": "aaa", "v2": "bbb"}, + host: "aaa.google.com", + path: "/bbb", + pathTemplate: `/{v2:[a-z]+}`, + hostTemplate: `{v1:[a-z]+}.google.com`, + shouldMatch: false, }, { - route: subrouter2.Path("/baz/{v2}"), - request: newRequest("GET", "http://localhost/foo/bar/baz/ding"), - vars: map[string]string{"v1": "bar", "v2": "ding"}, - host: "", - path: "/foo/bar/baz/ding", - shouldMatch: true, + route: subrouter2.Path("/baz/{v2}"), + request: newRequest("GET", "http://localhost/foo/bar/baz/ding"), + vars: map[string]string{"v1": "bar", "v2": "ding"}, + host: "", + path: "/foo/bar/baz/ding", + pathTemplate: `/foo/{v1}/baz/{v2}`, + shouldMatch: true, }, { - route: subrouter2.Path("/baz/{v2}"), - request: newRequest("GET", "http://localhost/foo/bar"), - vars: map[string]string{"v1": "bar", "v2": "ding"}, - host: "", - path: "/foo/bar/baz/ding", - shouldMatch: false, + route: subrouter2.Path("/baz/{v2}"), + request: newRequest("GET", "http://localhost/foo/bar"), + vars: map[string]string{"v1": "bar", "v2": "ding"}, + host: "", + path: "/foo/bar/baz/ding", + pathTemplate: `/foo/{v1}/baz/{v2}`, + shouldMatch: false, + }, + { + route: subrouter3.Path("/"), + request: newRequest("GET", "http://localhost/foo/"), + vars: map[string]string{}, + host: "", + path: "/foo/", + pathTemplate: `/foo/`, + shouldMatch: true, + }, + { + route: subrouter3.Path(""), + request: newRequest("GET", "http://localhost/foo"), + vars: map[string]string{}, + host: "", + path: "/foo", + pathTemplate: `/foo`, + shouldMatch: true, + }, + + { + route: subrouter4.Path("/"), + request: newRequest("GET", "http://localhost/foo/bar/"), + vars: map[string]string{}, + host: "", + path: "/foo/bar/", + pathTemplate: `/foo/bar/`, + shouldMatch: true, + }, + { + route: subrouter4.Path(""), + request: newRequest("GET", "http://localhost/foo/bar"), + vars: map[string]string{}, + host: "", + path: "/foo/bar", + pathTemplate: `/foo/bar`, + shouldMatch: true, + }, + { + route: subrouter5.Path("/"), + request: newRequest("GET", "http://localhost/baz/"), + vars: map[string]string{"category": "baz"}, + host: "", + path: "/baz/", + pathTemplate: `/{category}/`, + shouldMatch: true, + }, + { + route: subrouter5.Path(""), + request: newRequest("GET", "http://localhost/baz"), + vars: map[string]string{"category": "baz"}, + host: "", + path: "/baz", + pathTemplate: `/{category}`, + shouldMatch: true, + }, + { + title: "Build with scheme on parent router", + route: new(Route).Schemes("ftp").Host("google.com").Subrouter().Path("/"), + request: newRequest("GET", "ftp://google.com/"), + scheme: "ftp", + host: "google.com", + path: "/", + pathTemplate: `/`, + hostTemplate: `google.com`, + shouldMatch: true, + }, + { + title: "Prefer scheme on child route when building URLs", + route: new(Route).Schemes("https", "ftp").Host("google.com").Subrouter().Schemes("ftp").Path("/"), + request: newRequest("GET", "ftp://google.com/"), + scheme: "ftp", + host: "google.com", + path: "/", + pathTemplate: `/`, + hostTemplate: `google.com`, + shouldMatch: true, }, } for _, test := range tests { testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) } } @@ -789,22 +1338,245 @@ func TestStrictSlash(t *testing.T) { for _, test := range tests { testRoute(t, test) + testTemplate(t, test) + testUseEscapedRoute(t, test) } } +func TestUseEncodedPath(t *testing.T) { + r := NewRouter() + r.UseEncodedPath() + + tests := []routeTest{ + { + title: "Router with useEncodedPath, URL with encoded slash does match", + route: r.NewRoute().Path("/v1/{v1}/v2"), + request: newRequest("GET", "http://localhost/v1/1%2F2/v2"), + vars: map[string]string{"v1": "1%2F2"}, + host: "", + path: "/v1/1%2F2/v2", + pathTemplate: `/v1/{v1}/v2`, + shouldMatch: true, + }, + { + title: "Router with useEncodedPath, URL with encoded slash doesn't match", + route: r.NewRoute().Path("/v1/1/2/v2"), + request: newRequest("GET", "http://localhost/v1/1%2F2/v2"), + vars: map[string]string{"v1": "1%2F2"}, + host: "", + path: "/v1/1%2F2/v2", + pathTemplate: `/v1/1/2/v2`, + shouldMatch: false, + }, + } + + for _, test := range tests { + testRoute(t, test) + testTemplate(t, test) + } +} + +func TestWalkSingleDepth(t *testing.T) { + r0 := NewRouter() + r1 := NewRouter() + r2 := NewRouter() + + r0.Path("/g") + r0.Path("/o") + r0.Path("/d").Handler(r1) + r0.Path("/r").Handler(r2) + r0.Path("/a") + + r1.Path("/z") + r1.Path("/i") + r1.Path("/l") + r1.Path("/l") + + r2.Path("/i") + r2.Path("/l") + r2.Path("/l") + + paths := []string{"g", "o", "r", "i", "l", "l", "a"} + depths := []int{0, 0, 0, 1, 1, 1, 0} + i := 0 + err := r0.Walk(func(route *Route, router *Router, ancestors []*Route) error { + matcher := route.matchers[0].(*routeRegexp) + if matcher.template == "/d" { + return SkipRouter + } + if len(ancestors) != depths[i] { + t.Errorf(`Expected depth of %d at i = %d; got "%d"`, depths[i], i, len(ancestors)) + } + if matcher.template != "/"+paths[i] { + t.Errorf(`Expected "/%s" at i = %d; got "%s"`, paths[i], i, matcher.template) + } + i++ + return nil + }) + if err != nil { + panic(err) + } + if i != len(paths) { + t.Errorf("Expected %d routes, found %d", len(paths), i) + } +} + +func TestWalkNested(t *testing.T) { + router := NewRouter() + + g := router.Path("/g").Subrouter() + o := g.PathPrefix("/o").Subrouter() + r := o.PathPrefix("/r").Subrouter() + i := r.PathPrefix("/i").Subrouter() + l1 := i.PathPrefix("/l").Subrouter() + l2 := l1.PathPrefix("/l").Subrouter() + l2.Path("/a") + + testCases := []struct { + path string + ancestors []*Route + }{ + {"/g", []*Route{}}, + {"/g/o", []*Route{g.parent.(*Route)}}, + {"/g/o/r", []*Route{g.parent.(*Route), o.parent.(*Route)}}, + {"/g/o/r/i", []*Route{g.parent.(*Route), o.parent.(*Route), r.parent.(*Route)}}, + {"/g/o/r/i/l", []*Route{g.parent.(*Route), o.parent.(*Route), r.parent.(*Route), i.parent.(*Route)}}, + {"/g/o/r/i/l/l", []*Route{g.parent.(*Route), o.parent.(*Route), r.parent.(*Route), i.parent.(*Route), l1.parent.(*Route)}}, + {"/g/o/r/i/l/l/a", []*Route{g.parent.(*Route), o.parent.(*Route), r.parent.(*Route), i.parent.(*Route), l1.parent.(*Route), l2.parent.(*Route)}}, + } + + idx := 0 + err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error { + path := testCases[idx].path + tpl := route.regexp.path.template + if tpl != path { + t.Errorf(`Expected %s got %s`, path, tpl) + } + currWantAncestors := testCases[idx].ancestors + if !reflect.DeepEqual(currWantAncestors, ancestors) { + t.Errorf(`Expected %+v got %+v`, currWantAncestors, ancestors) + } + idx++ + return nil + }) + if err != nil { + panic(err) + } + if idx != len(testCases) { + t.Errorf("Expected %d routes, found %d", len(testCases), idx) + } +} + +func TestWalkSubrouters(t *testing.T) { + router := NewRouter() + + g := router.Path("/g").Subrouter() + o := g.PathPrefix("/o").Subrouter() + o.Methods("GET") + o.Methods("PUT") + + // all 4 routes should be matched, but final 2 routes do not have path templates + paths := []string{"/g", "/g/o", "", ""} + idx := 0 + err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error { + path := paths[idx] + tpl, _ := route.GetPathTemplate() + if tpl != path { + t.Errorf(`Expected %s got %s`, path, tpl) + } + idx++ + return nil + }) + if err != nil { + panic(err) + } + if idx != len(paths) { + t.Errorf("Expected %d routes, found %d", len(paths), idx) + } +} + +func TestWalkErrorRoute(t *testing.T) { + router := NewRouter() + router.Path("/g") + expectedError := errors.New("error") + err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error { + return expectedError + }) + if err != expectedError { + t.Errorf("Expected %v routes, found %v", expectedError, err) + } +} + +func TestWalkErrorMatcher(t *testing.T) { + router := NewRouter() + expectedError := router.Path("/g").Subrouter().Path("").GetError() + err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error { + return route.GetError() + }) + if err != expectedError { + t.Errorf("Expected %v routes, found %v", expectedError, err) + } +} + +func TestWalkErrorHandler(t *testing.T) { + handler := NewRouter() + expectedError := handler.Path("/path").Subrouter().Path("").GetError() + router := NewRouter() + router.Path("/g").Handler(handler) + err := router.Walk(func(route *Route, router *Router, ancestors []*Route) error { + return route.GetError() + }) + if err != expectedError { + t.Errorf("Expected %v routes, found %v", expectedError, err) + } +} + +func TestSubrouterErrorHandling(t *testing.T) { + superRouterCalled := false + subRouterCalled := false + + router := NewRouter() + router.NotFoundHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + superRouterCalled = true + }) + subRouter := router.PathPrefix("/bign8").Subrouter() + subRouter.NotFoundHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + subRouterCalled = true + }) + + req, _ := http.NewRequest("GET", "http://localhost/bign8/was/here", nil) + router.ServeHTTP(NewRecorder(), req) + + if superRouterCalled { + t.Error("Super router 404 handler called when sub-router 404 handler is available.") + } + if !subRouterCalled { + t.Error("Sub-router 404 handler was not called.") + } +} + +// See: https://github.com/gorilla/mux/issues/200 +func TestPanicOnCapturingGroups(t *testing.T) { + defer func() { + if recover() == nil { + t.Errorf("(Test that capturing groups now fail fast) Expected panic, however test completed successfully.\n") + } + }() + NewRouter().NewRoute().Path("/{type:(promo|special)}/{promoId}.json") +} + // ---------------------------------------------------------------------------- // Helpers // ---------------------------------------------------------------------------- func getRouteTemplate(route *Route) string { - host, path := "none", "none" - if route.regexp != nil { - if route.regexp.host != nil { - host = route.regexp.host.template - } - if route.regexp.path != nil { - path = route.regexp.path.template - } + host, err := route.GetHostTemplate() + if err != nil { + host = "none" + } + path, err := route.GetPathTemplate() + if err != nil { + path = "none" } return fmt.Sprintf("Host: %v, Path: %v", host, path) } @@ -814,10 +1586,16 @@ func testRoute(t *testing.T, test routeTest) { route := test.route vars := test.vars shouldMatch := test.shouldMatch - host := test.host - path := test.path - url := test.host + test.path + query := test.query shouldRedirect := test.shouldRedirect + uri := url.URL{ + Scheme: test.scheme, + Host: test.host, + Path: test.path, + } + if uri.Scheme == "" { + uri.Scheme = "http" + } var match RouteMatch ok := route.Match(request, &match) @@ -830,28 +1608,58 @@ func testRoute(t *testing.T, test routeTest) { return } if shouldMatch { - if test.vars != nil && !stringMapEqual(test.vars, match.Vars) { + if vars != nil && !stringMapEqual(vars, match.Vars) { t.Errorf("(%v) Vars not equal: expected %v, got %v", test.title, vars, match.Vars) return } - if host != "" { - u, _ := test.route.URLHost(mapToPairs(match.Vars)...) - if host != u.Host { - t.Errorf("(%v) URLHost not equal: expected %v, got %v -- %v", test.title, host, u.Host, getRouteTemplate(route)) + if test.scheme != "" { + u, err := route.URL(mapToPairs(match.Vars)...) + if err != nil { + t.Fatalf("(%v) URL error: %v -- %v", test.title, err, getRouteTemplate(route)) + } + if uri.Scheme != u.Scheme { + t.Errorf("(%v) URLScheme not equal: expected %v, got %v", test.title, uri.Scheme, u.Scheme) return } } - if path != "" { - u, _ := route.URLPath(mapToPairs(match.Vars)...) - if path != u.Path { - t.Errorf("(%v) URLPath not equal: expected %v, got %v -- %v", test.title, path, u.Path, getRouteTemplate(route)) + if test.host != "" { + u, err := test.route.URLHost(mapToPairs(match.Vars)...) + if err != nil { + t.Fatalf("(%v) URLHost error: %v -- %v", test.title, err, getRouteTemplate(route)) + } + if uri.Scheme != u.Scheme { + t.Errorf("(%v) URLHost scheme not equal: expected %v, got %v -- %v", test.title, uri.Scheme, u.Scheme, getRouteTemplate(route)) + return + } + if uri.Host != u.Host { + t.Errorf("(%v) URLHost host not equal: expected %v, got %v -- %v", test.title, uri.Host, u.Host, getRouteTemplate(route)) return } } - if url != "" { + if test.path != "" { + u, err := route.URLPath(mapToPairs(match.Vars)...) + if err != nil { + t.Fatalf("(%v) URLPath error: %v -- %v", test.title, err, getRouteTemplate(route)) + } + if uri.Path != u.Path { + t.Errorf("(%v) URLPath not equal: expected %v, got %v -- %v", test.title, uri.Path, u.Path, getRouteTemplate(route)) + return + } + } + if test.host != "" && test.path != "" { + u, err := route.URL(mapToPairs(match.Vars)...) + if err != nil { + t.Fatalf("(%v) URL error: %v -- %v", test.title, err, getRouteTemplate(route)) + } + if expected, got := uri.String(), u.String(); expected != got { + t.Errorf("(%v) URL not equal: expected %v, got %v -- %v", test.title, expected, got, getRouteTemplate(route)) + return + } + } + if query != "" { u, _ := route.URL(mapToPairs(match.Vars)...) - if url != u.Host+u.Path { - t.Errorf("(%v) URL not equal: expected %v, got %v -- %v", test.title, url, u.Host+u.Path, getRouteTemplate(route)) + if query != u.RawQuery { + t.Errorf("(%v) URL query not equal: expected %v, got %v", test.title, query, u.RawQuery) return } } @@ -866,34 +1674,47 @@ func testRoute(t *testing.T, test routeTest) { } } -// Tests that the context is cleared or not cleared properly depending on -// the configuration of the router -func TestKeepContext(t *testing.T) { - func1 := func(w http.ResponseWriter, r *http.Request) {} +func testUseEscapedRoute(t *testing.T, test routeTest) { + test.route.useEncodedPath = true + testRoute(t, test) +} - r := NewRouter() - r.HandleFunc("/", func1).Name("func1") - - req, _ := http.NewRequest("GET", "http://localhost/", nil) - context.Set(req, "t", 1) - - res := new(http.ResponseWriter) - r.ServeHTTP(*res, req) - - if _, ok := context.GetOk(req, "t"); ok { - t.Error("Context should have been cleared at end of request") +func testTemplate(t *testing.T, test routeTest) { + route := test.route + pathTemplate := test.pathTemplate + if len(pathTemplate) == 0 { + pathTemplate = test.path + } + hostTemplate := test.hostTemplate + if len(hostTemplate) == 0 { + hostTemplate = test.host } - r.KeepContext = true - - req, _ = http.NewRequest("GET", "http://localhost/", nil) - context.Set(req, "t", 1) - - r.ServeHTTP(*res, req) - if _, ok := context.GetOk(req, "t"); !ok { - t.Error("Context should NOT have been cleared at end of request") + routePathTemplate, pathErr := route.GetPathTemplate() + if pathErr == nil && routePathTemplate != pathTemplate { + t.Errorf("(%v) GetPathTemplate not equal: expected %v, got %v", test.title, pathTemplate, routePathTemplate) } + routeHostTemplate, hostErr := route.GetHostTemplate() + if hostErr == nil && routeHostTemplate != hostTemplate { + t.Errorf("(%v) GetHostTemplate not equal: expected %v, got %v", test.title, hostTemplate, routeHostTemplate) + } +} + +func testMethods(t *testing.T, test routeTest) { + route := test.route + methods, _ := route.GetMethods() + if strings.Join(methods, ",") != strings.Join(test.methods, ",") { + t.Errorf("(%v) GetMethods not equal: expected %v, got %v", test.title, test.methods, methods) + } +} + +func testRegexp(t *testing.T, test routeTest) { + route := test.route + routePathRegexp, regexpErr := route.GetPathRegexp() + if test.pathRegexp != "" && regexpErr == nil && routePathRegexp != test.pathRegexp { + t.Errorf("(%v) GetPathRegexp not equal: expected %v, got %v", test.title, test.pathRegexp, routePathRegexp) + } } type TestA301ResponseWriter struct { @@ -936,6 +1757,24 @@ func Test301Redirect(t *testing.T) { } } +func TestSkipClean(t *testing.T) { + func1 := func(w http.ResponseWriter, r *http.Request) {} + func2 := func(w http.ResponseWriter, r *http.Request) {} + + r := NewRouter() + r.SkipClean(true) + r.HandleFunc("/api/", func2).Name("func2") + r.HandleFunc("/", func1).Name("func1") + + req, _ := http.NewRequest("GET", "http://localhost//api/?abc=def", nil) + res := NewRecorder() + r.ServeHTTP(res, req) + + if len(res.HeaderMap["Location"]) != 0 { + t.Errorf("Shouldn't redirect since skip clean is disabled") + } +} + // https://plus.google.com/101022900381697718949/posts/eWy6DjFJ6uW func TestSubrouterHeader(t *testing.T) { expected := "func1 response" @@ -993,11 +1832,81 @@ func stringMapEqual(m1, m2 map[string]string) bool { return true } -// newRequest is a helper function to create a new request with a method and url +// newRequest is a helper function to create a new request with a method and url. +// The request returned is a 'server' request as opposed to a 'client' one through +// simulated write onto the wire and read off of the wire. +// The differences between requests are detailed in the net/http package. func newRequest(method, url string) *http.Request { req, err := http.NewRequest(method, url, nil) if err != nil { panic(err) } + // extract the escaped original host+path from url + // http://localhost/path/here?v=1#frag -> //localhost/path/here + opaque := "" + if i := len(req.URL.Scheme); i > 0 { + opaque = url[i+1:] + } + + if i := strings.LastIndex(opaque, "?"); i > -1 { + opaque = opaque[:i] + } + if i := strings.LastIndex(opaque, "#"); i > -1 { + opaque = opaque[:i] + } + + // Escaped host+path workaround as detailed in https://golang.org/pkg/net/url/#URL + // for < 1.5 client side workaround + req.URL.Opaque = opaque + + // Simulate writing to wire + var buff bytes.Buffer + req.Write(&buff) + ioreader := bufio.NewReader(&buff) + + // Parse request off of 'wire' + req, err = http.ReadRequest(ioreader) + if err != nil { + panic(err) + } return req } + +func TestNoMatchMethodErrorHandler(t *testing.T) { + func1 := func(w http.ResponseWriter, r *http.Request) {} + + r := NewRouter() + r.HandleFunc("/", func1).Methods("GET", "POST") + + req, _ := http.NewRequest("PUT", "http://localhost/", nil) + match := new(RouteMatch) + matched := r.Match(req, match) + + if matched { + t.Error("Should not have matched route for methods") + } + + if match.MatchErr != ErrMethodMismatch { + t.Error("Should get ErrMethodMismatch error") + } + + resp := NewRecorder() + r.ServeHTTP(resp, req) + if resp.Code != 405 { + t.Errorf("Expecting code %v", 405) + } + + // Add matching route + r.HandleFunc("/", func1).Methods("PUT") + + match = new(RouteMatch) + matched = r.Match(req, match) + + if !matched { + t.Error("Should have matched route for methods") + } + + if match.MatchErr != nil { + t.Error("Should not have any matching error. Found:", match.MatchErr) + } +} diff --git a/vendor/github.com/gorilla/mux/old_test.go b/vendor/github.com/gorilla/mux/old_test.go index 1f7c190..3751e47 100644 --- a/vendor/github.com/gorilla/mux/old_test.go +++ b/vendor/github.com/gorilla/mux/old_test.go @@ -36,10 +36,6 @@ func NewRecorder() *ResponseRecorder { } } -// DefaultRemoteAddr is the default remote address to return in RemoteAddr if -// an explicit DefaultRemoteAddr isn't set on ResponseRecorder. -const DefaultRemoteAddr = "1.2.3.4" - // Header returns the response headers. func (rw *ResponseRecorder) Header() http.Header { return rw.HeaderMap @@ -125,12 +121,7 @@ func TestRouteMatchers(t *testing.T) { var routeMatch RouteMatch matched := router.Match(request, &routeMatch) if matched != shouldMatch { - // Need better messages. :) - if matched { - t.Errorf("Should match.") - } else { - t.Errorf("Should not match.") - } + t.Errorf("Expected: %v\nGot: %v\nRequest: %v %v", shouldMatch, matched, request.Method, url) } if matched { @@ -192,7 +183,6 @@ func TestRouteMatchers(t *testing.T) { match(true) // 2nd route -------------------------------------------------------------- - // Everything match. reset2() match(true) @@ -545,7 +535,7 @@ func TestMatchedRouteName(t *testing.T) { router := NewRouter() route := router.NewRoute().Path("/products/").Name(routeName) - url := "http://www.domain.com/products/" + url := "http://www.example.com/products/" request, _ := http.NewRequest("GET", url, nil) var rv RouteMatch ok := router.Match(request, &rv) @@ -563,10 +553,10 @@ func TestMatchedRouteName(t *testing.T) { func TestSubRouting(t *testing.T) { // Example from docs. router := NewRouter() - subrouter := router.NewRoute().Host("www.domain.com").Subrouter() + subrouter := router.NewRoute().Host("www.example.com").Subrouter() route := subrouter.NewRoute().Path("/products/").Name("products") - url := "http://www.domain.com/products/" + url := "http://www.example.com/products/" request, _ := http.NewRequest("GET", url, nil) var rv RouteMatch ok := router.Match(request, &rv) @@ -576,10 +566,10 @@ func TestSubRouting(t *testing.T) { } u, _ := router.Get("products").URL() - builtUrl := u.String() + builtURL := u.String() // Yay, subroute aware of the domain when building! - if builtUrl != url { - t.Errorf("Expected %q, got %q.", url, builtUrl) + if builtURL != url { + t.Errorf("Expected %q, got %q.", url, builtURL) } } @@ -691,7 +681,7 @@ func TestNewRegexp(t *testing.T) { } for pattern, paths := range tests { - p, _ = newRouteRegexp(pattern, false, false, false, false) + p, _ = newRouteRegexp(pattern, false, false, false, false, false) for path, result := range paths { matches = p.regexp.FindStringSubmatch(path) if result == nil { diff --git a/vendor/github.com/gorilla/mux/regexp.go b/vendor/github.com/gorilla/mux/regexp.go index aa30679..80d1f78 100644 --- a/vendor/github.com/gorilla/mux/regexp.go +++ b/vendor/github.com/gorilla/mux/regexp.go @@ -10,6 +10,7 @@ import ( "net/http" "net/url" "regexp" + "strconv" "strings" ) @@ -23,7 +24,7 @@ import ( // Previously we accepted only Python-like identifiers for variable // names ([a-zA-Z_][a-zA-Z0-9_]*), but currently the only restriction is that // name and pattern can't be empty, and names can't contain a colon. -func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash bool) (*routeRegexp, error) { +func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash, useEncodedPath bool) (*routeRegexp, error) { // Check if it is well-formed. idxs, errBraces := braceIndices(tpl) if errBraces != nil { @@ -34,8 +35,7 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash // Now let's parse it. defaultPattern := "[^/]+" if matchQuery { - defaultPattern = "[^?&]+" - matchPrefix = true + defaultPattern = ".*" } else if matchHost { defaultPattern = "[^.]+" matchPrefix = false @@ -53,9 +53,7 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash varsN := make([]string, len(idxs)/2) varsR := make([]*regexp.Regexp, len(idxs)/2) pattern := bytes.NewBufferString("") - if !matchQuery { - pattern.WriteByte('^') - } + pattern.WriteByte('^') reverse := bytes.NewBufferString("") var end int var err error @@ -75,9 +73,11 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash tpl[idxs[i]:end]) } // Build the regexp pattern. - fmt.Fprintf(pattern, "%s(%s)", regexp.QuoteMeta(raw), patt) + fmt.Fprintf(pattern, "%s(?P<%s>%s)", regexp.QuoteMeta(raw), varGroupName(i/2), patt) + // Build the reverse template. fmt.Fprintf(reverse, "%s%%s", raw) + // Append variable name and compiled pattern. varsN[i/2] = name varsR[i/2], err = regexp.Compile(fmt.Sprintf("^%s$", patt)) @@ -91,6 +91,12 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash if strictSlash { pattern.WriteString("[/]?") } + if matchQuery { + // Add the default pattern if the query value is empty + if queryVal := strings.SplitN(template, "=", 2)[1]; queryVal == "" { + pattern.WriteString(defaultPattern) + } + } if !matchPrefix { pattern.WriteByte('$') } @@ -103,16 +109,24 @@ func newRouteRegexp(tpl string, matchHost, matchPrefix, matchQuery, strictSlash if errCompile != nil { return nil, errCompile } + + // Check for capturing groups which used to work in older versions + if reg.NumSubexp() != len(idxs)/2 { + panic(fmt.Sprintf("route %s contains capture groups in its regexp. ", template) + + "Only non-capturing groups are accepted: e.g. (?:pattern) instead of (pattern)") + } + // Done! return &routeRegexp{ - template: template, - matchHost: matchHost, - matchQuery: matchQuery, - strictSlash: strictSlash, - regexp: reg, - reverse: reverse.String(), - varsN: varsN, - varsR: varsR, + template: template, + matchHost: matchHost, + matchQuery: matchQuery, + strictSlash: strictSlash, + useEncodedPath: useEncodedPath, + regexp: reg, + reverse: reverse.String(), + varsN: varsN, + varsR: varsR, }, nil } @@ -127,6 +141,9 @@ type routeRegexp struct { matchQuery bool // The strictSlash value defined on the route, but disabled if PathPrefix was used. strictSlash bool + // Determines whether to use encoded path from getPath function or unencoded + // req.URL.Path for path matching + useEncodedPath bool // Expanded regexp. regexp *regexp.Regexp // Reverse template. @@ -141,11 +158,15 @@ type routeRegexp struct { func (r *routeRegexp) Match(req *http.Request, match *RouteMatch) bool { if !r.matchHost { if r.matchQuery { - return r.regexp.MatchString(req.URL.RawQuery) - } else { - return r.regexp.MatchString(req.URL.Path) + return r.matchQueryString(req) } + path := req.URL.Path + if r.useEncodedPath { + path = getPath(req) + } + return r.regexp.MatchString(path) } + return r.regexp.MatchString(getHost(req)) } @@ -157,6 +178,9 @@ func (r *routeRegexp) url(values map[string]string) (string, error) { if !ok { return "", fmt.Errorf("mux: missing route variable %q", v) } + if r.matchQuery { + value = url.QueryEscape(value) + } urlValues[k] = value } rv := fmt.Sprintf(r.reverse, urlValues...) @@ -175,11 +199,31 @@ func (r *routeRegexp) url(values map[string]string) (string, error) { return rv, nil } +// getURLQuery returns a single query parameter from a request URL. +// For a URL with foo=bar&baz=ding, we return only the relevant key +// value pair for the routeRegexp. +func (r *routeRegexp) getURLQuery(req *http.Request) string { + if !r.matchQuery { + return "" + } + templateKey := strings.SplitN(r.template, "=", 2)[0] + for key, vals := range req.URL.Query() { + if key == templateKey && len(vals) > 0 { + return key + "=" + vals[0] + } + } + return "" +} + +func (r *routeRegexp) matchQueryString(req *http.Request) bool { + return r.regexp.MatchString(r.getURLQuery(req)) +} + // braceIndices returns the first level curly brace indices from a string. // It returns an error in case of unbalanced braces. func braceIndices(s string) ([]int, error) { var level, idx int - idxs := make([]int, 0) + var idxs []int for i := 0; i < len(s); i++ { switch s[i] { case '{': @@ -200,6 +244,11 @@ func braceIndices(s string) ([]int, error) { return idxs, nil } +// varGroupName builds a capturing group name for the indexed variable. +func varGroupName(idx int) string { + return "v" + strconv.Itoa(idx) +} + // ---------------------------------------------------------------------------- // routeRegexpGroup // ---------------------------------------------------------------------------- @@ -215,23 +264,24 @@ type routeRegexpGroup struct { func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) { // Store host variables. if v.host != nil { - hostVars := v.host.regexp.FindStringSubmatch(getHost(req)) - if hostVars != nil { - for k, v := range v.host.varsN { - m.Vars[v] = hostVars[k+1] - } + host := getHost(req) + matches := v.host.regexp.FindStringSubmatchIndex(host) + if len(matches) > 0 { + extractVars(host, matches, v.host.varsN, m.Vars) } } + path := req.URL.Path + if r.useEncodedPath { + path = getPath(req) + } // Store path variables. if v.path != nil { - pathVars := v.path.regexp.FindStringSubmatch(req.URL.Path) - if pathVars != nil { - for k, v := range v.path.varsN { - m.Vars[v] = pathVars[k+1] - } + matches := v.path.regexp.FindStringSubmatchIndex(path) + if len(matches) > 0 { + extractVars(path, matches, v.path.varsN, m.Vars) // Check if we should redirect. if v.path.strictSlash { - p1 := strings.HasSuffix(req.URL.Path, "/") + p1 := strings.HasSuffix(path, "/") p2 := strings.HasSuffix(v.path.template, "/") if p1 != p2 { u, _ := url.Parse(req.URL.String()) @@ -246,13 +296,11 @@ func (v *routeRegexpGroup) setMatch(req *http.Request, m *RouteMatch, r *Route) } } // Store query string variables. - rawQuery := req.URL.RawQuery for _, q := range v.queries { - queryVars := q.regexp.FindStringSubmatch(rawQuery) - if queryVars != nil { - for k, v := range q.varsN { - m.Vars[v] = queryVars[k+1] - } + queryURL := q.getURLQuery(req) + matches := q.regexp.FindStringSubmatchIndex(queryURL) + if len(matches) > 0 { + extractVars(queryURL, matches, q.varsN, m.Vars) } } } @@ -270,3 +318,9 @@ func getHost(r *http.Request) string { return host } + +func extractVars(input string, matches []int, names []string, output map[string]string) { + for i, name := range names { + output[name] = input[matches[2*i+2]:matches[2*i+3]] + } +} diff --git a/vendor/github.com/gorilla/mux/route.go b/vendor/github.com/gorilla/mux/route.go index d4f0146..6863adb 100644 --- a/vendor/github.com/gorilla/mux/route.go +++ b/vendor/github.com/gorilla/mux/route.go @@ -9,6 +9,7 @@ import ( "fmt" "net/http" "net/url" + "regexp" "strings" ) @@ -25,6 +26,13 @@ type Route struct { // If true, when the path pattern is "/path/", accessing "/path" will // redirect to the former and vice versa. strictSlash bool + // If true, when the path pattern is "/path//to", accessing "/path//to" + // will not redirect + skipClean bool + // If true, "/path/foo%2Fbar/to" will match the path "/path/{var}/to" + useEncodedPath bool + // The scheme used when building URLs. + buildScheme string // If true, this route never matches: it is only used to build URLs. buildOnly bool // The name used to build URLs. @@ -35,17 +43,36 @@ type Route struct { buildVarsFunc BuildVarsFunc } +func (r *Route) SkipClean() bool { + return r.skipClean +} + // Match matches the route against the request. func (r *Route) Match(req *http.Request, match *RouteMatch) bool { if r.buildOnly || r.err != nil { return false } + + var matchErr error + // Match everything. for _, m := range r.matchers { if matched := m.Match(req, match); !matched { + if _, ok := m.(methodMatcher); ok { + matchErr = ErrMethodMismatch + continue + } + matchErr = nil return false } } + + if matchErr != nil { + match.MatchErr = matchErr + return false + } + + match.MatchErr = nil // Yay, we have a match. Let's collect some info about it. if match.Route == nil { match.Route = r @@ -56,6 +83,7 @@ func (r *Route) Match(req *http.Request, match *RouteMatch) bool { if match.Vars == nil { match.Vars = make(map[string]string) } + // Set variables. if r.regexp != nil { r.regexp.setMatch(req, match, r) @@ -143,14 +171,14 @@ func (r *Route) addRegexpMatcher(tpl string, matchHost, matchPrefix, matchQuery } r.regexp = r.getRegexpGroup() if !matchHost && !matchQuery { - if len(tpl) == 0 || tpl[0] != '/' { + if len(tpl) > 0 && tpl[0] != '/' { return fmt.Errorf("mux: path must start with a slash, got %q", tpl) } if r.regexp.path != nil { tpl = strings.TrimRight(r.regexp.path.template, "/") + tpl } } - rr, err := newRouteRegexp(tpl, matchHost, matchPrefix, matchQuery, r.strictSlash) + rr, err := newRouteRegexp(tpl, matchHost, matchPrefix, matchQuery, r.strictSlash, r.useEncodedPath) if err != nil { return err } @@ -188,7 +216,7 @@ func (r *Route) addRegexpMatcher(tpl string, matchHost, matchPrefix, matchQuery type headerMatcher map[string]string func (m headerMatcher) Match(r *http.Request, match *RouteMatch) bool { - return matchMap(m, r.Header, true) + return matchMapWithString(m, r.Header, true) } // Headers adds a matcher for request header values. @@ -199,22 +227,46 @@ func (m headerMatcher) Match(r *http.Request, match *RouteMatch) bool { // "X-Requested-With", "XMLHttpRequest") // // The above route will only match if both request header values match. -// -// It the value is an empty string, it will match any value if the key is set. +// If the value is an empty string, it will match any value if the key is set. func (r *Route) Headers(pairs ...string) *Route { if r.err == nil { var headers map[string]string - headers, r.err = mapFromPairs(pairs...) + headers, r.err = mapFromPairsToString(pairs...) return r.addMatcher(headerMatcher(headers)) } return r } +// headerRegexMatcher matches the request against the route given a regex for the header +type headerRegexMatcher map[string]*regexp.Regexp + +func (m headerRegexMatcher) Match(r *http.Request, match *RouteMatch) bool { + return matchMapWithRegex(m, r.Header, true) +} + +// HeadersRegexp accepts a sequence of key/value pairs, where the value has regex +// support. For example: +// +// r := mux.NewRouter() +// r.HeadersRegexp("Content-Type", "application/(text|json)", +// "X-Requested-With", "XMLHttpRequest") +// +// The above route will only match if both the request header matches both regular expressions. +// It the value is an empty string, it will match any value if the key is set. +func (r *Route) HeadersRegexp(pairs ...string) *Route { + if r.err == nil { + var headers map[string]*regexp.Regexp + headers, r.err = mapFromPairsToRegex(pairs...) + return r.addMatcher(headerRegexMatcher(headers)) + } + return r +} + // Host ----------------------------------------------------------------------- // Host adds a matcher for the URL host. // It accepts a template with zero or more URL variables enclosed by {}. -// Variables can define an optional regexp pattern to me matched: +// Variables can define an optional regexp pattern to be matched: // // - {name} matches anything until the next dot. // @@ -223,7 +275,7 @@ func (r *Route) Headers(pairs ...string) *Route { // For example: // // r := mux.NewRouter() -// r.Host("www.domain.com") +// r.Host("www.example.com") // r.Host("{subdomain}.domain.com") // r.Host("{subdomain:[a-z]+}.domain.com") // @@ -239,6 +291,7 @@ func (r *Route) Host(tpl string) *Route { // MatcherFunc is the function signature used by custom matchers. type MatcherFunc func(*http.Request, *RouteMatch) bool +// Match returns the match for a given request. func (m MatcherFunc) Match(r *http.Request, match *RouteMatch) bool { return m(r, match) } @@ -272,7 +325,7 @@ func (r *Route) Methods(methods ...string) *Route { // Path adds a matcher for the URL path. // It accepts a template with zero or more URL variables enclosed by {}. The // template must start with a "/". -// Variables can define an optional regexp pattern to me matched: +// Variables can define an optional regexp pattern to be matched: // // - {name} matches anything until the next slash. // @@ -323,7 +376,7 @@ func (r *Route) PathPrefix(tpl string) *Route { // // It the value is an empty string, it will match any value if the key is set. // -// Variables can define an optional regexp pattern to me matched: +// Variables can define an optional regexp pattern to be matched: // // - {name} matches anything until the next slash. // @@ -336,7 +389,7 @@ func (r *Route) Queries(pairs ...string) *Route { return nil } for i := 0; i < length; i += 2 { - if r.err = r.addRegexpMatcher(pairs[i]+"="+pairs[i+1], false, true, true); r.err != nil { + if r.err = r.addRegexpMatcher(pairs[i]+"="+pairs[i+1], false, false, true); r.err != nil { return r } } @@ -359,6 +412,9 @@ func (r *Route) Schemes(schemes ...string) *Route { for k, v := range schemes { schemes[k] = strings.ToLower(v) } + if r.buildScheme == "" && len(schemes) > 0 { + r.buildScheme = schemes[0] + } return r.addMatcher(schemeMatcher(schemes)) } @@ -382,7 +438,7 @@ func (r *Route) BuildVarsFunc(f BuildVarsFunc) *Route { // It will test the inner routes only if the parent route matched. For example: // // r := mux.NewRouter() -// s := r.Host("www.domain.com").Subrouter() +// s := r.Host("www.example.com").Subrouter() // s.HandleFunc("/products/", ProductsHandler) // s.HandleFunc("/products/{key}", ProductHandler) // s.HandleFunc("/articles/{category}/{id:[0-9]+}"), ArticleHandler) @@ -442,22 +498,33 @@ func (r *Route) URL(pairs ...string) (*url.URL, error) { return nil, err } var scheme, host, path string + queries := make([]string, 0, len(r.regexp.queries)) if r.regexp.host != nil { - // Set a default scheme. - scheme = "http" if host, err = r.regexp.host.url(values); err != nil { return nil, err } + scheme = "http" + if s := r.getBuildScheme(); s != "" { + scheme = s + } } if r.regexp.path != nil { if path, err = r.regexp.path.url(values); err != nil { return nil, err } } + for _, q := range r.regexp.queries { + var query string + if query, err = q.url(values); err != nil { + return nil, err + } + queries = append(queries, query) + } return &url.URL{ - Scheme: scheme, - Host: host, - Path: path, + Scheme: scheme, + Host: host, + Path: path, + RawQuery: strings.Join(queries, "&"), }, nil } @@ -479,10 +546,14 @@ func (r *Route) URLHost(pairs ...string) (*url.URL, error) { if err != nil { return nil, err } - return &url.URL{ + u := &url.URL{ Scheme: "http", Host: host, - }, nil + } + if s := r.getBuildScheme(); s != "" { + u.Scheme = s + } + return u, nil } // URLPath builds the path part of the URL for a route. See Route.URL(). @@ -508,10 +579,70 @@ func (r *Route) URLPath(pairs ...string) (*url.URL, error) { }, nil } +// GetPathTemplate returns the template used to build the +// route match. +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An error will be returned if the route does not define a path. +func (r *Route) GetPathTemplate() (string, error) { + if r.err != nil { + return "", r.err + } + if r.regexp == nil || r.regexp.path == nil { + return "", errors.New("mux: route doesn't have a path") + } + return r.regexp.path.template, nil +} + +// GetPathRegexp returns the expanded regular expression used to match route path. +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An error will be returned if the route does not define a path. +func (r *Route) GetPathRegexp() (string, error) { + if r.err != nil { + return "", r.err + } + if r.regexp == nil || r.regexp.path == nil { + return "", errors.New("mux: route does not have a path") + } + return r.regexp.path.regexp.String(), nil +} + +// GetMethods returns the methods the route matches against +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An empty list will be returned if route does not have methods. +func (r *Route) GetMethods() ([]string, error) { + if r.err != nil { + return nil, r.err + } + for _, m := range r.matchers { + if methods, ok := m.(methodMatcher); ok { + return []string(methods), nil + } + } + return nil, nil +} + +// GetHostTemplate returns the template used to build the +// route match. +// This is useful for building simple REST API documentation and for instrumentation +// against third-party services. +// An error will be returned if the route does not define a host. +func (r *Route) GetHostTemplate() (string, error) { + if r.err != nil { + return "", r.err + } + if r.regexp == nil || r.regexp.host == nil { + return "", errors.New("mux: route doesn't have a host") + } + return r.regexp.host.template, nil +} + // prepareVars converts the route variable pairs into a map. If the route has a // BuildVarsFunc, it is invoked. func (r *Route) prepareVars(pairs ...string) (map[string]string, error) { - m, err := mapFromPairs(pairs...) + m, err := mapFromPairsToString(pairs...) if err != nil { return nil, err } @@ -534,11 +665,22 @@ func (r *Route) buildVars(m map[string]string) map[string]string { // parentRoute allows routes to know about parent host and path definitions. type parentRoute interface { + getBuildScheme() string getNamedRoutes() map[string]*Route getRegexpGroup() *routeRegexpGroup buildVars(map[string]string) map[string]string } +func (r *Route) getBuildScheme() string { + if r.buildScheme != "" { + return r.buildScheme + } + if r.parent != nil { + return r.parent.getBuildScheme() + } + return "" +} + // getNamedRoutes returns the map where named routes are registered. func (r *Route) getNamedRoutes() map[string]*Route { if r.parent == nil { diff --git a/vendor/github.com/robfig/cron/.travis.yml b/vendor/github.com/matttproud/golang_protobuf_extensions/.travis.yml similarity index 92% rename from vendor/github.com/robfig/cron/.travis.yml rename to vendor/github.com/matttproud/golang_protobuf_extensions/.travis.yml index 4f2ee4d..f1309c9 100644 --- a/vendor/github.com/robfig/cron/.travis.yml +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/.travis.yml @@ -1 +1,2 @@ language: go + diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE b/vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/LICENSE @@ -0,0 +1,201 @@ + 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 + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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/matttproud/golang_protobuf_extensions/NOTICE b/vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE new file mode 100644 index 0000000..5d8cb5b --- /dev/null +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/NOTICE @@ -0,0 +1 @@ +Copyright 2012 Matt T. Proud (matt.proud@gmail.com) diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/README.md b/vendor/github.com/matttproud/golang_protobuf_extensions/README.md new file mode 100644 index 0000000..751ee69 --- /dev/null +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/README.md @@ -0,0 +1,20 @@ +# Overview +This repository provides various Protocol Buffer extensions for the Go +language (golang), namely support for record length-delimited message +streaming. + +| Java | Go | +| ------------------------------ | --------------------- | +| MessageLite#parseDelimitedFrom | pbutil.ReadDelimited | +| MessageLite#writeDelimitedTo | pbutil.WriteDelimited | + +Because [Code Review 9102043](https://codereview.appspot.com/9102043/) is +destined to never be merged into mainline (i.e., never be promoted to formal +[goprotobuf features](https://github.com/golang/protobuf)), this repository +will live here in the wild. + +# Documentation +We have [generated Go Doc documentation](http://godoc.org/github.com/matttproud/golang_protobuf_extensions/pbutil) here. + +# Testing +[![Build Status](https://travis-ci.org/matttproud/golang_protobuf_extensions.png?branch=master)](https://travis-ci.org/matttproud/golang_protobuf_extensions) diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/ext/moved.go b/vendor/github.com/matttproud/golang_protobuf_extensions/ext/moved.go new file mode 100644 index 0000000..f31a0f0 --- /dev/null +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/ext/moved.go @@ -0,0 +1,2 @@ +// Package ext moved to a new location: github.com/matttproud/golang_protobuf_extensions/pbutil. +package ext diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbtest/deleted.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbtest/deleted.go new file mode 100644 index 0000000..73efcb1 --- /dev/null +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/pbtest/deleted.go @@ -0,0 +1,2 @@ +// Package pbtest is deleted for the time being, because upstream Protocol Buffer 3 may have rendered quick.Value-based blackbox generation impossible. +package pbtest diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/all_test.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/all_test.go index 094156e..5c46372 100644 --- a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/all_test.go +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/all_test.go @@ -16,18 +16,14 @@ package pbutil import ( "bytes" - "math/rand" - "reflect" "testing" - "testing/quick" - - "github.com/matttproud/golang_protobuf_extensions/pbtest" . "github.com/golang/protobuf/proto" . "github.com/golang/protobuf/proto/testdata" ) func TestWriteDelimited(t *testing.T) { + t.Parallel() for _, test := range []struct { msg Message buf []byte @@ -83,6 +79,7 @@ I expect it may. Let's hope you enjoy testing as much as we do.`), } func TestReadDelimited(t *testing.T) { + t.Parallel() for _, test := range []struct { buf []byte msg Message @@ -139,6 +136,7 @@ I expect it may. Let's hope you enjoy testing as much as we do.`), } func TestEndToEndValid(t *testing.T) { + t.Parallel() for _, test := range [][]Message{ {&Empty{}}, {&GoEnum{Foo: FOO_FOO1.Enum()}, &Empty{}, &GoEnum{Foo: FOO_FOO1.Enum()}}, @@ -177,144 +175,3 @@ I expect it may. Let's hope you enjoy testing as much as we do.`), } } } - -// rndMessage generates a random valid Protocol Buffer message. -func rndMessage(r *rand.Rand) Message { - var t reflect.Type - switch v := rand.Intn(23); v { - // TODO(br): Uncomment the elements below once fix is incorporated, except - // for the elements marked as patently incompatible. - // case 0: - // t = reflect.TypeOf(&GoEnum{}) - // break - // case 1: - // t = reflect.TypeOf(&GoTestField{}) - // break - case 2: - t = reflect.TypeOf(&GoTest{}) - break - // case 3: - // t = reflect.TypeOf(&GoSkipTest{}) - // break - // case 4: - // t = reflect.TypeOf(&NonPackedTest{}) - // break - // case 5: - // t = reflect.TypeOf(&PackedTest{}) - // break - case 6: - t = reflect.TypeOf(&MaxTag{}) - break - case 7: - t = reflect.TypeOf(&OldMessage{}) - break - case 8: - t = reflect.TypeOf(&NewMessage{}) - break - case 9: - t = reflect.TypeOf(&InnerMessage{}) - break - case 10: - t = reflect.TypeOf(&OtherMessage{}) - break - case 11: - // PATENTLY INVALID FOR FUZZ GENERATION - // t = reflect.TypeOf(&MyMessage{}) - break - // case 12: - // t = reflect.TypeOf(&Ext{}) - // break - case 13: - // PATENTLY INVALID FOR FUZZ GENERATION - // t = reflect.TypeOf(&MyMessageSet{}) - break - // case 14: - // t = reflect.TypeOf(&Empty{}) - // break - // case 15: - // t = reflect.TypeOf(&MessageList{}) - // break - // case 16: - // t = reflect.TypeOf(&Strings{}) - // break - // case 17: - // t = reflect.TypeOf(&Defaults{}) - // break - // case 17: - // t = reflect.TypeOf(&SubDefaults{}) - // break - // case 18: - // t = reflect.TypeOf(&RepeatedEnum{}) - // break - case 19: - t = reflect.TypeOf(&MoreRepeated{}) - break - // case 20: - // t = reflect.TypeOf(&GroupOld{}) - // break - // case 21: - // t = reflect.TypeOf(&GroupNew{}) - // break - case 22: - t = reflect.TypeOf(&FloatingPoint{}) - break - default: - // TODO(br): Replace with an unreachable once fixed. - t = reflect.TypeOf(&GoTest{}) - break - } - if t == nil { - t = reflect.TypeOf(&GoTest{}) - } - v, ok := quick.Value(t, r) - if !ok { - panic("attempt to generate illegal item; consult item 11") - } - if err := pbtest.SanitizeGenerated(v.Interface().(Message)); err != nil { - panic(err) - } - return v.Interface().(Message) -} - -// rndMessages generates several random Protocol Buffer messages. -func rndMessages(r *rand.Rand) []Message { - n := r.Intn(128) - out := make([]Message, 0, n) - for i := 0; i < n; i++ { - out = append(out, rndMessage(r)) - } - return out -} - -func TestFuzz(t *testing.T) { - rnd := rand.New(rand.NewSource(42)) - check := func() bool { - messages := rndMessages(rnd) - var buf bytes.Buffer - var written int - for i, msg := range messages { - n, err := WriteDelimited(&buf, msg) - if err != nil { - t.Fatalf("WriteDelimited(buf, %v[%d]) = ?, %v; wanted ?, nil", messages, i, err) - } - written += n - } - var read int - for i, msg := range messages { - out := Clone(msg) - out.Reset() - n, _ := ReadDelimited(&buf, out) - read += n - if !Equal(out, msg) { - t.Fatalf("out = %v; want %v[%d] = %#v", out, messages, i, msg) - } - } - if read != written { - t.Fatalf("%v read = %d; want %d", messages, read, written) - } - return true - } - if err := quick.Check(check, nil); err != nil { - t.Fatal(err) - } -} diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go index 66d9b54..258c063 100644 --- a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode.go @@ -38,7 +38,7 @@ var errInvalidVarint = errors.New("invalid varint32 encountered") func ReadDelimited(r io.Reader, m proto.Message) (n int, err error) { // Per AbstractParser#parsePartialDelimitedFrom with // CodedInputStream#readRawVarint32. - headerBuf := make([]byte, binary.MaxVarintLen32) + var headerBuf [binary.MaxVarintLen32]byte var bytesRead, varIntBytes int var messageLength uint64 for varIntBytes == 0 { // i.e. no varint has been decoded yet. diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode_test.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode_test.go new file mode 100644 index 0000000..364a7b7 --- /dev/null +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/decode_test.go @@ -0,0 +1,99 @@ +// Copyright 2016 Matt T. Proud +// +// 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 pbutil + +import ( + "bytes" + "io" + "testing" + "testing/iotest" +) + +func TestReadDelimitedIllegalVarint(t *testing.T) { + t.Parallel() + var tests = []struct { + in []byte + n int + err error + }{ + { + in: []byte{255, 255, 255, 255, 255}, + n: 5, + err: errInvalidVarint, + }, + { + in: []byte{255, 255, 255, 255, 255, 255}, + n: 5, + err: errInvalidVarint, + }, + } + for _, test := range tests { + n, err := ReadDelimited(bytes.NewReader(test.in), nil) + if got, want := n, test.n; got != want { + t.Errorf("ReadDelimited(%#v, nil) = %#v, ?; want = %v#, ?", test.in, got, want) + } + if got, want := err, test.err; got != want { + t.Errorf("ReadDelimited(%#v, nil) = ?, %#v; want = ?, %#v", test.in, got, want) + } + } +} + +func TestReadDelimitedPrematureHeader(t *testing.T) { + t.Parallel() + var data = []byte{128, 5} // 256 + 256 + 128 + n, err := ReadDelimited(bytes.NewReader(data[0:1]), nil) + if got, want := n, 1; got != want { + t.Errorf("ReadDelimited(%#v, nil) = %#v, ?; want = %v#, ?", data[0:1], got, want) + } + if got, want := err, io.EOF; got != want { + t.Errorf("ReadDelimited(%#v, nil) = ?, %#v; want = ?, %#v", data[0:1], got, want) + } +} + +func TestReadDelimitedPrematureBody(t *testing.T) { + t.Parallel() + var data = []byte{128, 5, 0, 0, 0} // 256 + 256 + 128 + n, err := ReadDelimited(bytes.NewReader(data[:]), nil) + if got, want := n, 5; got != want { + t.Errorf("ReadDelimited(%#v, nil) = %#v, ?; want = %v#, ?", data, got, want) + } + if got, want := err, io.ErrUnexpectedEOF; got != want { + t.Errorf("ReadDelimited(%#v, nil) = ?, %#v; want = ?, %#v", data, got, want) + } +} + +func TestReadDelimitedPrematureHeaderIncremental(t *testing.T) { + t.Parallel() + var data = []byte{128, 5} // 256 + 256 + 128 + n, err := ReadDelimited(iotest.OneByteReader(bytes.NewReader(data[0:1])), nil) + if got, want := n, 1; got != want { + t.Errorf("ReadDelimited(%#v, nil) = %#v, ?; want = %v#, ?", data[0:1], got, want) + } + if got, want := err, io.EOF; got != want { + t.Errorf("ReadDelimited(%#v, nil) = ?, %#v; want = ?, %#v", data[0:1], got, want) + } +} + +func TestReadDelimitedPrematureBodyIncremental(t *testing.T) { + t.Parallel() + var data = []byte{128, 5, 0, 0, 0} // 256 + 256 + 128 + n, err := ReadDelimited(iotest.OneByteReader(bytes.NewReader(data[:])), nil) + if got, want := n, 5; got != want { + t.Errorf("ReadDelimited(%#v, nil) = %#v, ?; want = %v#, ?", data, got, want) + } + if got, want := err, io.ErrUnexpectedEOF; got != want { + t.Errorf("ReadDelimited(%#v, nil) = ?, %#v; want = ?, %#v", data, got, want) + } +} diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go index 4b76ea9..8fb59ad 100644 --- a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode.go @@ -33,8 +33,8 @@ func WriteDelimited(w io.Writer, m proto.Message) (n int, err error) { return 0, err } - buf := make([]byte, binary.MaxVarintLen32) - encodedLength := binary.PutUvarint(buf, uint64(len(buffer))) + var buf [binary.MaxVarintLen32]byte + encodedLength := binary.PutUvarint(buf[:], uint64(len(buffer))) sync, err := w.Write(buf[:encodedLength]) if err != nil { diff --git a/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode_test.go b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode_test.go new file mode 100644 index 0000000..f92632b --- /dev/null +++ b/vendor/github.com/matttproud/golang_protobuf_extensions/pbutil/encode_test.go @@ -0,0 +1,67 @@ +// Copyright 2016 Matt T. Proud +// +// 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 pbutil + +import ( + "bytes" + "errors" + "testing" + + "github.com/golang/protobuf/proto" +) + +var errMarshal = errors.New("pbutil: can't marshal") + +type cantMarshal struct{ proto.Message } + +func (cantMarshal) Marshal() ([]byte, error) { return nil, errMarshal } + +var _ proto.Message = cantMarshal{} + +func TestWriteDelimitedMarshalErr(t *testing.T) { + t.Parallel() + var data cantMarshal + var buf bytes.Buffer + n, err := WriteDelimited(&buf, data) + if got, want := n, 0; got != want { + t.Errorf("WriteDelimited(buf, %#v) = %#v, ?; want = %v#, ?", data, got, want) + } + if got, want := err, errMarshal; got != want { + t.Errorf("WriteDelimited(buf, %#v) = ?, %#v; want = ?, %#v", data, got, want) + } +} + +type canMarshal struct{ proto.Message } + +func (canMarshal) Marshal() ([]byte, error) { return []byte{0, 1, 2, 3, 4, 5}, nil } + +var errWrite = errors.New("pbutil: can't write") + +type cantWrite struct{} + +func (cantWrite) Write([]byte) (int, error) { return 0, errWrite } + +func TestWriteDelimitedWriteErr(t *testing.T) { + t.Parallel() + var data canMarshal + var buf cantWrite + n, err := WriteDelimited(buf, data) + if got, want := n, 0; got != want { + t.Errorf("WriteDelimited(buf, %#v) = %#v, ?; want = %v#, ?", data, got, want) + } + if got, want := err, errWrite; got != want { + t.Errorf("WriteDelimited(buf, %#v) = ?, %#v; want = ?, %#v", data, got, want) + } +} diff --git a/vendor/github.com/prometheus/client_golang/.gitignore b/vendor/github.com/prometheus/client_golang/.gitignore new file mode 100644 index 0000000..f6fc2e8 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/.gitignore @@ -0,0 +1,26 @@ +# Compiled Object files, Static and Dynamic libs (Shared Objects) +*.o +*.a +*.so + +# Folders +_obj +_test + +# Architecture specific extensions/prefixes +*.[568vq] +[568vq].out + +*.cgo1.go +*.cgo2.c +_cgo_defun.c +_cgo_gotypes.go +_cgo_export.* + +_testmain.go + +*.exe + +*~ +*# +.build diff --git a/vendor/github.com/prometheus/client_golang/.travis.yml b/vendor/github.com/prometheus/client_golang/.travis.yml new file mode 100644 index 0000000..d83f31a --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/.travis.yml @@ -0,0 +1,9 @@ +sudo: false +language: go + +go: + - 1.5.4 + - 1.6.2 + +script: + - go test -short ./... diff --git a/vendor/github.com/prometheus/client_golang/AUTHORS.md b/vendor/github.com/prometheus/client_golang/AUTHORS.md new file mode 100644 index 0000000..c5275d5 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/AUTHORS.md @@ -0,0 +1,18 @@ +The Prometheus project was started by Matt T. Proud (emeritus) and +Julius Volz in 2012. + +Maintainers of this repository: + +* Björn Rabenstein + +The following individuals have contributed code to this repository +(listed in alphabetical order): + +* Bernerd Schaefer +* Björn Rabenstein +* Daniel Bornkessel +* Jeff Younker +* Julius Volz +* Matt T. Proud +* Tobias Schmidt + diff --git a/vendor/github.com/prometheus/client_golang/CHANGELOG.md b/vendor/github.com/prometheus/client_golang/CHANGELOG.md new file mode 100644 index 0000000..330788a --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/CHANGELOG.md @@ -0,0 +1,109 @@ +## 0.8.0 / 2016-08-17 +* [CHANGE] Registry is doing more consistency checks. This might break + existing setups that used to export inconsistent metrics. +* [CHANGE] Pushing to Pushgateway moved to package `push` and changed to allow + arbitrary grouping. +* [CHANGE] Removed `SelfCollector`. +* [CHANGE] Removed `PanicOnCollectError` and `EnableCollectChecks` methods. +* [CHANGE] Moved packages to the prometheus/common repo: `text`, `model`, + `extraction`. +* [CHANGE] Deprecated a number of functions. +* [FEATURE] Allow custom registries. Added `Registerer` and `Gatherer` + interfaces. +* [FEATURE] Separated HTTP exposition, allowing custom HTTP handlers (package + `promhttp`) and enabling the creation of other exposition mechanisms. +* [FEATURE] `MustRegister` is variadic now, allowing registration of many + collectors in one call. +* [FEATURE] Added HTTP API v1 package. +* [ENHANCEMENT] Numerous documentation improvements. +* [ENHANCEMENT] Improved metric sorting. +* [ENHANCEMENT] Inlined fnv64a hashing for improved performance. +* [ENHANCEMENT] Several test improvements. +* [BUGFIX] Handle collisions in MetricVec. + +## 0.7.0 / 2015-07-27 +* [CHANGE] Rename ExporterLabelPrefix to ExportedLabelPrefix. +* [BUGFIX] Closed gaps in metric consistency check. +* [BUGFIX] Validate LabelName/LabelSet on JSON unmarshaling. +* [ENHANCEMENT] Document the possibility to create "empty" metrics in + a metric vector. +* [ENHANCEMENT] Fix and clarify various doc comments and the README.md. +* [ENHANCEMENT] (Kind of) solve "The Proxy Problem" of http.InstrumentHandler. +* [ENHANCEMENT] Change responseWriterDelegator.written to int64. + +## 0.6.0 / 2015-06-01 +* [CHANGE] Rename process_goroutines to go_goroutines. +* [ENHANCEMENT] Validate label names during YAML decoding. +* [ENHANCEMENT] Add LabelName regular expression. +* [BUGFIX] Ensure alignment of struct members for 32-bit systems. + +## 0.5.0 / 2015-05-06 +* [BUGFIX] Removed a weakness in the fingerprinting aka signature code. + This makes fingerprinting slower and more allocation-heavy, but the + weakness was too severe to be tolerated. +* [CHANGE] As a result of the above, Metric.Fingerprint is now returning + a different fingerprint. To keep the same fingerprint, the new method + Metric.FastFingerprint was introduced, which will be used by the + Prometheus server for storage purposes (implying that a collision + detection has to be added, too). +* [ENHANCEMENT] The Metric.Equal and Metric.Before do not depend on + fingerprinting anymore, removing the possibility of an undetected + fingerprint collision. +* [FEATURE] The Go collector in the exposition library includes garbage + collection stats. +* [FEATURE] The exposition library allows to create constant "throw-away" + summaries and histograms. +* [CHANGE] A number of new reserved labels and prefixes. + +## 0.4.0 / 2015-04-08 +* [CHANGE] Return NaN when Summaries have no observations yet. +* [BUGFIX] Properly handle Summary decay upon Write(). +* [BUGFIX] Fix the documentation link to the consumption library. +* [FEATURE] Allow the metric family injection hook to merge with existing + metric families. +* [ENHANCEMENT] Removed cgo dependency and conditional compilation of procfs. +* [MAINTENANCE] Adjusted to changes in matttproud/golang_protobuf_extensions. + +## 0.3.2 / 2015-03-11 +* [BUGFIX] Fixed the receiver type of COWMetric.Set(). This method is + only used by the Prometheus server internally. +* [CLEANUP] Added licenses of vendored code left out by godep. + +## 0.3.1 / 2015-03-04 +* [ENHANCEMENT] Switched fingerprinting functions from own free list to + sync.Pool. +* [CHANGE] Makefile uses Go 1.4.2 now (only relevant for examples and tests). + +## 0.3.0 / 2015-03-03 +* [CHANGE] Changed the fingerprinting for metrics. THIS WILL INVALIDATE ALL + PERSISTED FINGERPRINTS. IF YOU COMPILE THE PROMETHEUS SERVER WITH THIS + VERSION, YOU HAVE TO WIPE THE PREVIOUSLY CREATED STORAGE. +* [CHANGE] LabelValuesToSignature removed. (Nobody had used it, and it was + arguably broken.) +* [CHANGE] Vendored dependencies. Those are only used by the Makefile. If + client_golang is used as a library, the vendoring will stay out of your way. +* [BUGFIX] Remove a weakness in the fingerprinting for metrics. (This made + the fingerprinting change above necessary.) +* [FEATURE] Added new fingerprinting functions SignatureForLabels and + SignatureWithoutLabels to be used by the Prometheus server. These functions + require fewer allocations than the ones currently used by the server. + +## 0.2.0 / 2015-02-23 +* [FEATURE] Introduce new Histagram metric type. +* [CHANGE] Ignore process collector errors for now (better error handling + pending). +* [CHANGE] Use clear error interface for process pidFn. +* [BUGFIX] Fix Go download links for several archs and OSes. +* [ENHANCEMENT] Massively improve Gauge and Counter performance. +* [ENHANCEMENT] Catch illegal label names for summaries in histograms. +* [ENHANCEMENT] Reduce allocations during fingerprinting. +* [ENHANCEMENT] Remove cgo dependency. procfs package will only be included if + both cgo is available and the build is for an OS with procfs. +* [CLEANUP] Clean up code style issues. +* [CLEANUP] Mark slow test as such and exclude them from travis. +* [CLEANUP] Update protobuf library package name. +* [CLEANUP] Updated vendoring of beorn7/perks. + +## 0.1.0 / 2015-02-02 +* [CLEANUP] Introduced semantic versioning and changelog. From now on, + changes will be reported in this file. diff --git a/vendor/github.com/prometheus/client_golang/CONTRIBUTING.md b/vendor/github.com/prometheus/client_golang/CONTRIBUTING.md new file mode 100644 index 0000000..5705f0f --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/CONTRIBUTING.md @@ -0,0 +1,18 @@ +# Contributing + +Prometheus uses GitHub to manage reviews of pull requests. + +* If you have a trivial fix or improvement, go ahead and create a pull + request, addressing (with `@...`) one or more of the maintainers + (see [AUTHORS.md](AUTHORS.md)) in the description of the pull request. + +* If you plan to do something more involved, first discuss your ideas + on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers). + This will avoid unnecessary work and surely give you and us a good deal + of inspiration. + +* Relevant coding style guidelines are the [Go Code Review + Comments](https://code.google.com/p/go-wiki/wiki/CodeReviewComments) + and the _Formatting and style_ section of Peter Bourgon's [Go: Best + Practices for Production + Environments](http://peter.bourgon.org/go-in-production/#formatting-and-style). diff --git a/vendor/github.com/prometheus/client_golang/LICENSE b/vendor/github.com/prometheus/client_golang/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/LICENSE @@ -0,0 +1,201 @@ + 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 + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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/prometheus/client_golang/NOTICE b/vendor/github.com/prometheus/client_golang/NOTICE new file mode 100644 index 0000000..dd878a3 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/NOTICE @@ -0,0 +1,23 @@ +Prometheus instrumentation library for Go applications +Copyright 2012-2015 The Prometheus Authors + +This product includes software developed at +SoundCloud Ltd. (http://soundcloud.com/). + + +The following components are included in this product: + +perks - a fork of https://github.com/bmizerany/perks +https://github.com/beorn7/perks +Copyright 2013-2015 Blake Mizerany, Björn Rabenstein +See https://github.com/beorn7/perks/blob/master/README.md for license details. + +Go support for Protocol Buffers - Google's data interchange format +http://github.com/golang/protobuf/ +Copyright 2010 The Go Authors +See source code for license details. + +Support for streaming Protocol Buffer messages for the Go language (golang). +https://github.com/matttproud/golang_protobuf_extensions +Copyright 2013 Matt T. Proud +Licensed under the Apache License, Version 2.0 diff --git a/vendor/github.com/prometheus/client_golang/README.md b/vendor/github.com/prometheus/client_golang/README.md new file mode 100644 index 0000000..557eacf --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/README.md @@ -0,0 +1,45 @@ +# Prometheus Go client library + +[![Build Status](https://travis-ci.org/prometheus/client_golang.svg?branch=master)](https://travis-ci.org/prometheus/client_golang) + +This is the [Go](http://golang.org) client library for +[Prometheus](http://prometheus.io). It has two separate parts, one for +instrumenting application code, and one for creating clients that talk to the +Prometheus HTTP API. + +## Instrumenting applications + +[![code-coverage](http://gocover.io/_badge/github.com/prometheus/client_golang/prometheus)](http://gocover.io/github.com/prometheus/client_golang/prometheus) [![go-doc](https://godoc.org/github.com/prometheus/client_golang/prometheus?status.svg)](https://godoc.org/github.com/prometheus/client_golang/prometheus) + +The +[`prometheus` directory](https://github.com/prometheus/client_golang/tree/master/prometheus) +contains the instrumentation library. See the +[best practices section](http://prometheus.io/docs/practices/naming/) of the +Prometheus documentation to learn more about instrumenting applications. + +The +[`examples` directory](https://github.com/prometheus/client_golang/tree/master/examples) +contains simple examples of instrumented code. + +## Client for the Prometheus HTTP API + +[![code-coverage](http://gocover.io/_badge/github.com/prometheus/client_golang/api/prometheus)](http://gocover.io/github.com/prometheus/client_golang/api/prometheus) [![go-doc](https://godoc.org/github.com/prometheus/client_golang/api/prometheus?status.svg)](https://godoc.org/github.com/prometheus/client_golang/api/prometheus) + +The +[`api/prometheus` directory](https://github.com/prometheus/client_golang/tree/master/api/prometheus) +contains the client for the +[Prometheus HTTP API](http://prometheus.io/docs/querying/api/). It allows you +to write Go applications that query time series data from a Prometheus server. + +## Where is `model`, `extraction`, and `text`? + +The `model` packages has been moved to +[`prometheus/common/model`](https://github.com/prometheus/common/tree/master/model). + +The `extraction` and `text` packages are now contained in +[`prometheus/common/expfmt`](https://github.com/prometheus/common/tree/master/expfmt). + +## Contributing and community + +See the [contributing guidelines](CONTRIBUTING.md) and the +[Community section](http://prometheus.io/community/) of the homepage. diff --git a/vendor/github.com/prometheus/client_golang/VERSION b/vendor/github.com/prometheus/client_golang/VERSION new file mode 100644 index 0000000..a3df0a6 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/VERSION @@ -0,0 +1 @@ +0.8.0 diff --git a/vendor/github.com/prometheus/client_golang/api/prometheus/api.go b/vendor/github.com/prometheus/client_golang/api/prometheus/api.go new file mode 100644 index 0000000..3028d74 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/api/prometheus/api.go @@ -0,0 +1,345 @@ +// Copyright 2015 The Prometheus 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 prometheus provides bindings to the Prometheus HTTP API: +// http://prometheus.io/docs/querying/api/ +package prometheus + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "net" + "net/http" + "net/url" + "path" + "strconv" + "strings" + "time" + + "github.com/prometheus/common/model" + "golang.org/x/net/context" + "golang.org/x/net/context/ctxhttp" +) + +const ( + statusAPIError = 422 + apiPrefix = "/api/v1" + + epQuery = "/query" + epQueryRange = "/query_range" + epLabelValues = "/label/:name/values" + epSeries = "/series" +) + +type ErrorType string + +const ( + // The different API error types. + ErrBadData ErrorType = "bad_data" + ErrTimeout = "timeout" + ErrCanceled = "canceled" + ErrExec = "execution" + ErrBadResponse = "bad_response" +) + +// Error is an error returned by the API. +type Error struct { + Type ErrorType + Msg string +} + +func (e *Error) Error() string { + return fmt.Sprintf("%s: %s", e.Type, e.Msg) +} + +// CancelableTransport is like net.Transport but provides +// per-request cancelation functionality. +type CancelableTransport interface { + http.RoundTripper + CancelRequest(req *http.Request) +} + +var DefaultTransport CancelableTransport = &http.Transport{ + Proxy: http.ProxyFromEnvironment, + Dial: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).Dial, + TLSHandshakeTimeout: 10 * time.Second, +} + +// Config defines configuration parameters for a new client. +type Config struct { + // The address of the Prometheus to connect to. + Address string + + // Transport is used by the Client to drive HTTP requests. If not + // provided, DefaultTransport will be used. + Transport CancelableTransport +} + +func (cfg *Config) transport() CancelableTransport { + if cfg.Transport == nil { + return DefaultTransport + } + return cfg.Transport +} + +type Client interface { + url(ep string, args map[string]string) *url.URL + do(context.Context, *http.Request) (*http.Response, []byte, error) +} + +// New returns a new Client. +// +// It is safe to use the returned Client from multiple goroutines. +func New(cfg Config) (Client, error) { + u, err := url.Parse(cfg.Address) + if err != nil { + return nil, err + } + u.Path = strings.TrimRight(u.Path, "/") + apiPrefix + + return &httpClient{ + endpoint: u, + transport: cfg.transport(), + }, nil +} + +type httpClient struct { + endpoint *url.URL + transport CancelableTransport +} + +func (c *httpClient) url(ep string, args map[string]string) *url.URL { + p := path.Join(c.endpoint.Path, ep) + + for arg, val := range args { + arg = ":" + arg + p = strings.Replace(p, arg, val, -1) + } + + u := *c.endpoint + u.Path = p + + return &u +} + +func (c *httpClient) do(ctx context.Context, req *http.Request) (*http.Response, []byte, error) { + resp, err := ctxhttp.Do(ctx, &http.Client{Transport: c.transport}, req) + + defer func() { + if resp != nil { + resp.Body.Close() + } + }() + + if err != nil { + return nil, nil, err + } + + var body []byte + done := make(chan struct{}) + go func() { + body, err = ioutil.ReadAll(resp.Body) + close(done) + }() + + select { + case <-ctx.Done(): + err = resp.Body.Close() + <-done + if err == nil { + err = ctx.Err() + } + case <-done: + } + + return resp, body, err +} + +// apiClient wraps a regular client and processes successful API responses. +// Successful also includes responses that errored at the API level. +type apiClient struct { + Client +} + +type apiResponse struct { + Status string `json:"status"` + Data json.RawMessage `json:"data"` + ErrorType ErrorType `json:"errorType"` + Error string `json:"error"` +} + +func (c apiClient) do(ctx context.Context, req *http.Request) (*http.Response, []byte, error) { + resp, body, err := c.Client.do(ctx, req) + if err != nil { + return resp, body, err + } + + code := resp.StatusCode + + if code/100 != 2 && code != statusAPIError { + return resp, body, &Error{ + Type: ErrBadResponse, + Msg: fmt.Sprintf("bad response code %d", resp.StatusCode), + } + } + + var result apiResponse + + if err = json.Unmarshal(body, &result); err != nil { + return resp, body, &Error{ + Type: ErrBadResponse, + Msg: err.Error(), + } + } + + if (code == statusAPIError) != (result.Status == "error") { + err = &Error{ + Type: ErrBadResponse, + Msg: "inconsistent body for response code", + } + } + + if code == statusAPIError && result.Status == "error" { + err = &Error{ + Type: result.ErrorType, + Msg: result.Error, + } + } + + return resp, []byte(result.Data), err +} + +// Range represents a sliced time range. +type Range struct { + // The boundaries of the time range. + Start, End time.Time + // The maximum time between two slices within the boundaries. + Step time.Duration +} + +// queryResult contains result data for a query. +type queryResult struct { + Type model.ValueType `json:"resultType"` + Result interface{} `json:"result"` + + // The decoded value. + v model.Value +} + +func (qr *queryResult) UnmarshalJSON(b []byte) error { + v := struct { + Type model.ValueType `json:"resultType"` + Result json.RawMessage `json:"result"` + }{} + + err := json.Unmarshal(b, &v) + if err != nil { + return err + } + + switch v.Type { + case model.ValScalar: + var sv model.Scalar + err = json.Unmarshal(v.Result, &sv) + qr.v = &sv + + case model.ValVector: + var vv model.Vector + err = json.Unmarshal(v.Result, &vv) + qr.v = vv + + case model.ValMatrix: + var mv model.Matrix + err = json.Unmarshal(v.Result, &mv) + qr.v = mv + + default: + err = fmt.Errorf("unexpected value type %q", v.Type) + } + return err +} + +// QueryAPI provides bindings the Prometheus's query API. +type QueryAPI interface { + // Query performs a query for the given time. + Query(ctx context.Context, query string, ts time.Time) (model.Value, error) + // Query performs a query for the given range. + QueryRange(ctx context.Context, query string, r Range) (model.Value, error) +} + +// NewQueryAPI returns a new QueryAPI for the client. +// +// It is safe to use the returned QueryAPI from multiple goroutines. +func NewQueryAPI(c Client) QueryAPI { + return &httpQueryAPI{client: apiClient{c}} +} + +type httpQueryAPI struct { + client Client +} + +func (h *httpQueryAPI) Query(ctx context.Context, query string, ts time.Time) (model.Value, error) { + u := h.client.url(epQuery, nil) + q := u.Query() + + q.Set("query", query) + q.Set("time", ts.Format(time.RFC3339Nano)) + + u.RawQuery = q.Encode() + + req, _ := http.NewRequest("GET", u.String(), nil) + + _, body, err := h.client.do(ctx, req) + if err != nil { + return nil, err + } + + var qres queryResult + err = json.Unmarshal(body, &qres) + + return model.Value(qres.v), err +} + +func (h *httpQueryAPI) QueryRange(ctx context.Context, query string, r Range) (model.Value, error) { + u := h.client.url(epQueryRange, nil) + q := u.Query() + + var ( + start = r.Start.Format(time.RFC3339Nano) + end = r.End.Format(time.RFC3339Nano) + step = strconv.FormatFloat(r.Step.Seconds(), 'f', 3, 64) + ) + + q.Set("query", query) + q.Set("start", start) + q.Set("end", end) + q.Set("step", step) + + u.RawQuery = q.Encode() + + req, _ := http.NewRequest("GET", u.String(), nil) + + _, body, err := h.client.do(ctx, req) + if err != nil { + return nil, err + } + + var qres queryResult + err = json.Unmarshal(body, &qres) + + return model.Value(qres.v), err +} diff --git a/vendor/github.com/prometheus/client_golang/api/prometheus/api_test.go b/vendor/github.com/prometheus/client_golang/api/prometheus/api_test.go new file mode 100644 index 0000000..87d3e40 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/api/prometheus/api_test.go @@ -0,0 +1,453 @@ +// Copyright 2015 The Prometheus 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 prometheus + +import ( + "encoding/json" + "fmt" + "net/http" + "net/url" + "reflect" + "testing" + "time" + + "github.com/prometheus/common/model" + "golang.org/x/net/context" +) + +func TestConfig(t *testing.T) { + c := Config{} + if c.transport() != DefaultTransport { + t.Fatalf("expected default transport for nil Transport field") + } +} + +func TestClientURL(t *testing.T) { + tests := []struct { + address string + endpoint string + args map[string]string + expected string + }{ + { + address: "http://localhost:9090", + endpoint: "/test", + expected: "http://localhost:9090/test", + }, + { + address: "http://localhost", + endpoint: "/test", + expected: "http://localhost/test", + }, + { + address: "http://localhost:9090", + endpoint: "test", + expected: "http://localhost:9090/test", + }, + { + address: "http://localhost:9090/prefix", + endpoint: "/test", + expected: "http://localhost:9090/prefix/test", + }, + { + address: "https://localhost:9090/", + endpoint: "/test/", + expected: "https://localhost:9090/test", + }, + { + address: "http://localhost:9090", + endpoint: "/test/:param", + args: map[string]string{ + "param": "content", + }, + expected: "http://localhost:9090/test/content", + }, + { + address: "http://localhost:9090", + endpoint: "/test/:param/more/:param", + args: map[string]string{ + "param": "content", + }, + expected: "http://localhost:9090/test/content/more/content", + }, + { + address: "http://localhost:9090", + endpoint: "/test/:param/more/:foo", + args: map[string]string{ + "param": "content", + "foo": "bar", + }, + expected: "http://localhost:9090/test/content/more/bar", + }, + { + address: "http://localhost:9090", + endpoint: "/test/:param", + args: map[string]string{ + "nonexistant": "content", + }, + expected: "http://localhost:9090/test/:param", + }, + } + + for _, test := range tests { + ep, err := url.Parse(test.address) + if err != nil { + t.Fatal(err) + } + + hclient := &httpClient{ + endpoint: ep, + transport: DefaultTransport, + } + + u := hclient.url(test.endpoint, test.args) + if u.String() != test.expected { + t.Errorf("unexpected result: got %s, want %s", u, test.expected) + continue + } + + // The apiClient must return exactly the same result as the httpClient. + aclient := &apiClient{hclient} + + u = aclient.url(test.endpoint, test.args) + if u.String() != test.expected { + t.Errorf("unexpected result: got %s, want %s", u, test.expected) + } + } +} + +type testClient struct { + *testing.T + + ch chan apiClientTest + req *http.Request +} + +type apiClientTest struct { + code int + response interface{} + expected string + err *Error +} + +func (c *testClient) url(ep string, args map[string]string) *url.URL { + return nil +} + +func (c *testClient) do(ctx context.Context, req *http.Request) (*http.Response, []byte, error) { + if ctx == nil { + c.Fatalf("context was not passed down") + } + if req != c.req { + c.Fatalf("request was not passed down") + } + + test := <-c.ch + + var b []byte + var err error + + switch v := test.response.(type) { + case string: + b = []byte(v) + default: + b, err = json.Marshal(v) + if err != nil { + c.Fatal(err) + } + } + + resp := &http.Response{ + StatusCode: test.code, + } + + return resp, b, nil +} + +func TestAPIClientDo(t *testing.T) { + tests := []apiClientTest{ + { + response: &apiResponse{ + Status: "error", + Data: json.RawMessage(`null`), + ErrorType: ErrBadData, + Error: "failed", + }, + err: &Error{ + Type: ErrBadData, + Msg: "failed", + }, + code: statusAPIError, + expected: `null`, + }, + { + response: &apiResponse{ + Status: "error", + Data: json.RawMessage(`"test"`), + ErrorType: ErrTimeout, + Error: "timed out", + }, + err: &Error{ + Type: ErrTimeout, + Msg: "timed out", + }, + code: statusAPIError, + expected: `test`, + }, + { + response: "bad json", + err: &Error{ + Type: ErrBadResponse, + Msg: "bad response code 400", + }, + code: http.StatusBadRequest, + }, + { + response: "bad json", + err: &Error{ + Type: ErrBadResponse, + Msg: "invalid character 'b' looking for beginning of value", + }, + code: statusAPIError, + }, + { + response: &apiResponse{ + Status: "success", + Data: json.RawMessage(`"test"`), + }, + err: &Error{ + Type: ErrBadResponse, + Msg: "inconsistent body for response code", + }, + code: statusAPIError, + }, + { + response: &apiResponse{ + Status: "success", + Data: json.RawMessage(`"test"`), + ErrorType: ErrTimeout, + Error: "timed out", + }, + err: &Error{ + Type: ErrBadResponse, + Msg: "inconsistent body for response code", + }, + code: statusAPIError, + }, + { + response: &apiResponse{ + Status: "error", + Data: json.RawMessage(`"test"`), + ErrorType: ErrTimeout, + Error: "timed out", + }, + err: &Error{ + Type: ErrBadResponse, + Msg: "inconsistent body for response code", + }, + code: http.StatusOK, + }, + } + + tc := &testClient{ + T: t, + ch: make(chan apiClientTest, 1), + req: &http.Request{}, + } + client := &apiClient{tc} + + for _, test := range tests { + + tc.ch <- test + + _, body, err := client.do(context.Background(), tc.req) + + if test.err != nil { + if err == nil { + t.Errorf("expected error %q but got none", test.err) + continue + } + if test.err.Error() != err.Error() { + t.Errorf("unexpected error: want %q, got %q", test.err, err) + } + continue + } + if err != nil { + t.Errorf("unexpeceted error %s", err) + continue + } + + want, got := test.expected, string(body) + if want != got { + t.Errorf("unexpected body: want %q, got %q", want, got) + } + } +} + +type apiTestClient struct { + *testing.T + curTest apiTest +} + +type apiTest struct { + do func() (interface{}, error) + inErr error + inRes interface{} + + reqPath string + reqParam url.Values + reqMethod string + res interface{} + err error +} + +func (c *apiTestClient) url(ep string, args map[string]string) *url.URL { + u := &url.URL{ + Host: "test:9090", + Path: apiPrefix + ep, + } + return u +} + +func (c *apiTestClient) do(ctx context.Context, req *http.Request) (*http.Response, []byte, error) { + + test := c.curTest + + if req.URL.Path != test.reqPath { + c.Errorf("unexpected request path: want %s, got %s", test.reqPath, req.URL.Path) + } + if req.Method != test.reqMethod { + c.Errorf("unexpected request method: want %s, got %s", test.reqMethod, req.Method) + } + + b, err := json.Marshal(test.inRes) + if err != nil { + c.Fatal(err) + } + + resp := &http.Response{} + if test.inErr != nil { + resp.StatusCode = statusAPIError + } else { + resp.StatusCode = http.StatusOK + } + + return resp, b, test.inErr +} + +func TestAPIs(t *testing.T) { + + testTime := time.Now() + + client := &apiTestClient{T: t} + + queryApi := &httpQueryAPI{ + client: client, + } + + doQuery := func(q string, ts time.Time) func() (interface{}, error) { + return func() (interface{}, error) { + return queryApi.Query(context.Background(), q, ts) + } + } + + doQueryRange := func(q string, rng Range) func() (interface{}, error) { + return func() (interface{}, error) { + return queryApi.QueryRange(context.Background(), q, rng) + } + } + + queryTests := []apiTest{ + { + do: doQuery("2", testTime), + inRes: &queryResult{ + Type: model.ValScalar, + Result: &model.Scalar{ + Value: 2, + Timestamp: model.TimeFromUnix(testTime.Unix()), + }, + }, + + reqMethod: "GET", + reqPath: "/api/v1/query", + reqParam: url.Values{ + "query": []string{"2"}, + "time": []string{testTime.Format(time.RFC3339Nano)}, + }, + res: &model.Scalar{ + Value: 2, + Timestamp: model.TimeFromUnix(testTime.Unix()), + }, + }, + { + do: doQuery("2", testTime), + inErr: fmt.Errorf("some error"), + + reqMethod: "GET", + reqPath: "/api/v1/query", + reqParam: url.Values{ + "query": []string{"2"}, + "time": []string{testTime.Format(time.RFC3339Nano)}, + }, + err: fmt.Errorf("some error"), + }, + + { + do: doQueryRange("2", Range{ + Start: testTime.Add(-time.Minute), + End: testTime, + Step: time.Minute, + }), + inErr: fmt.Errorf("some error"), + + reqMethod: "GET", + reqPath: "/api/v1/query_range", + reqParam: url.Values{ + "query": []string{"2"}, + "start": []string{testTime.Add(-time.Minute).Format(time.RFC3339Nano)}, + "end": []string{testTime.Format(time.RFC3339Nano)}, + "step": []string{time.Minute.String()}, + }, + err: fmt.Errorf("some error"), + }, + } + + var tests []apiTest + tests = append(tests, queryTests...) + + for _, test := range tests { + client.curTest = test + + res, err := test.do() + + if test.err != nil { + if err == nil { + t.Errorf("expected error %q but got none", test.err) + continue + } + if err.Error() != test.err.Error() { + t.Errorf("unexpected error: want %s, got %s", test.err, err) + } + continue + } + if err != nil { + t.Errorf("unexpected error: %s", err) + continue + } + + if !reflect.DeepEqual(res, test.res) { + t.Errorf("unexpected result: want %v, got %v", test.res, res) + } + } +} diff --git a/vendor/github.com/prometheus/client_golang/examples/random/main.go b/vendor/github.com/prometheus/client_golang/examples/random/main.go new file mode 100644 index 0000000..5639571 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/examples/random/main.go @@ -0,0 +1,103 @@ +// Copyright 2015 The Prometheus 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. + +// A simple example exposing fictional RPC latencies with different types of +// random distributions (uniform, normal, and exponential) as Prometheus +// metrics. +package main + +import ( + "flag" + "math" + "math/rand" + "net/http" + "time" + + "github.com/prometheus/client_golang/prometheus" +) + +var ( + addr = flag.String("listen-address", ":8080", "The address to listen on for HTTP requests.") + uniformDomain = flag.Float64("uniform.domain", 200, "The domain for the uniform distribution.") + normDomain = flag.Float64("normal.domain", 200, "The domain for the normal distribution.") + normMean = flag.Float64("normal.mean", 10, "The mean for the normal distribution.") + oscillationPeriod = flag.Duration("oscillation-period", 10*time.Minute, "The duration of the rate oscillation period.") +) + +var ( + // Create a summary to track fictional interservice RPC latencies for three + // distinct services with different latency distributions. These services are + // differentiated via a "service" label. + rpcDurations = prometheus.NewSummaryVec( + prometheus.SummaryOpts{ + Name: "rpc_durations_microseconds", + Help: "RPC latency distributions.", + }, + []string{"service"}, + ) + // The same as above, but now as a histogram, and only for the normal + // distribution. The buckets are targeted to the parameters of the + // normal distribution, with 20 buckets centered on the mean, each + // half-sigma wide. + rpcDurationsHistogram = prometheus.NewHistogram(prometheus.HistogramOpts{ + Name: "rpc_durations_histogram_microseconds", + Help: "RPC latency distributions.", + Buckets: prometheus.LinearBuckets(*normMean-5**normDomain, .5**normDomain, 20), + }) +) + +func init() { + // Register the summary and the histogram with Prometheus's default registry. + prometheus.MustRegister(rpcDurations) + prometheus.MustRegister(rpcDurationsHistogram) +} + +func main() { + flag.Parse() + + start := time.Now() + + oscillationFactor := func() float64 { + return 2 + math.Sin(math.Sin(2*math.Pi*float64(time.Since(start))/float64(*oscillationPeriod))) + } + + // Periodically record some sample latencies for the three services. + go func() { + for { + v := rand.Float64() * *uniformDomain + rpcDurations.WithLabelValues("uniform").Observe(v) + time.Sleep(time.Duration(100*oscillationFactor()) * time.Millisecond) + } + }() + + go func() { + for { + v := (rand.NormFloat64() * *normDomain) + *normMean + rpcDurations.WithLabelValues("normal").Observe(v) + rpcDurationsHistogram.Observe(v) + time.Sleep(time.Duration(75*oscillationFactor()) * time.Millisecond) + } + }() + + go func() { + for { + v := rand.ExpFloat64() + rpcDurations.WithLabelValues("exponential").Observe(v) + time.Sleep(time.Duration(50*oscillationFactor()) * time.Millisecond) + } + }() + + // Expose the registered metrics via HTTP. + http.Handle("/metrics", prometheus.Handler()) + http.ListenAndServe(*addr, nil) +} diff --git a/vendor/github.com/prometheus/client_golang/model/labelvalue.go b/vendor/github.com/prometheus/client_golang/examples/simple/main.go similarity index 54% rename from vendor/github.com/prometheus/client_golang/model/labelvalue.go rename to vendor/github.com/prometheus/client_golang/examples/simple/main.go index df2d14c..19620d2 100644 --- a/vendor/github.com/prometheus/client_golang/model/labelvalue.go +++ b/vendor/github.com/prometheus/client_golang/examples/simple/main.go @@ -1,4 +1,4 @@ -// Copyright 2013 The Prometheus Authors +// Copyright 2015 The Prometheus 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 @@ -11,26 +11,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -package model +// A minimal example of how to include Prometheus instrumentation. +package main import ( - "sort" + "flag" + "net/http" + + "github.com/prometheus/client_golang/prometheus" ) -// A LabelValue is an associated value for a LabelName. -type LabelValue string +var addr = flag.String("listen-address", ":8080", "The address to listen on for HTTP requests.") -// LabelValues is a sortable LabelValue slice. It implements sort.Interface. -type LabelValues []LabelValue - -func (l LabelValues) Len() int { - return len(l) -} - -func (l LabelValues) Less(i, j int) bool { - return sort.StringsAreSorted([]string{string(l[i]), string(l[j])}) -} - -func (l LabelValues) Swap(i, j int) { - l[i], l[j] = l[j], l[i] +func main() { + flag.Parse() + http.Handle("/metrics", prometheus.Handler()) + http.ListenAndServe(*addr, nil) } diff --git a/vendor/github.com/prometheus/client_golang/model/labelname_test.go b/vendor/github.com/prometheus/client_golang/model/labelname_test.go deleted file mode 100644 index 693228d..0000000 --- a/vendor/github.com/prometheus/client_golang/model/labelname_test.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2013 The Prometheus 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 model - -import ( - "sort" - "testing" -) - -func testLabelNames(t testing.TB) { - var scenarios = []struct { - in LabelNames - out LabelNames - }{ - { - in: LabelNames{"ZZZ", "zzz"}, - out: LabelNames{"ZZZ", "zzz"}, - }, - { - in: LabelNames{"aaa", "AAA"}, - out: LabelNames{"AAA", "aaa"}, - }, - } - - for i, scenario := range scenarios { - sort.Sort(scenario.in) - - for j, expected := range scenario.out { - if expected != scenario.in[j] { - t.Errorf("%d.%d expected %s, got %s", i, j, expected, scenario.in[j]) - } - } - } -} - -func TestLabelNames(t *testing.T) { - testLabelNames(t) -} - -func BenchmarkLabelNames(b *testing.B) { - for i := 0; i < b.N; i++ { - testLabelNames(b) - } -} diff --git a/vendor/github.com/prometheus/client_golang/model/labelset.go b/vendor/github.com/prometheus/client_golang/model/labelset.go deleted file mode 100644 index 382ab62..0000000 --- a/vendor/github.com/prometheus/client_golang/model/labelset.go +++ /dev/null @@ -1,83 +0,0 @@ -// Copyright 2013 The Prometheus 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 model - -import ( - "encoding/json" - "fmt" - "sort" - "strings" -) - -// A LabelSet is a collection of LabelName and LabelValue pairs. The LabelSet -// may be fully-qualified down to the point where it may resolve to a single -// Metric in the data store or not. All operations that occur within the realm -// of a LabelSet can emit a vector of Metric entities to which the LabelSet may -// match. -type LabelSet map[LabelName]LabelValue - -// Merge is a helper function to non-destructively merge two label sets. -func (l LabelSet) Merge(other LabelSet) LabelSet { - result := make(LabelSet, len(l)) - - for k, v := range l { - result[k] = v - } - - for k, v := range other { - result[k] = v - } - - return result -} - -func (l LabelSet) String() string { - labelStrings := make([]string, 0, len(l)) - for label, value := range l { - labelStrings = append(labelStrings, fmt.Sprintf("%s=%q", label, value)) - } - - switch len(labelStrings) { - case 0: - return "" - default: - sort.Strings(labelStrings) - return fmt.Sprintf("{%s}", strings.Join(labelStrings, ", ")) - } -} - -// MergeFromMetric merges Metric into this LabelSet. -func (l LabelSet) MergeFromMetric(m Metric) { - for k, v := range m { - l[k] = v - } -} - -// UnmarshalJSON implements the json.Unmarshaler interface. -func (l *LabelSet) UnmarshalJSON(b []byte) error { - var m map[LabelName]LabelValue - if err := json.Unmarshal(b, &m); err != nil { - return err - } - // encoding/json only unmarshals maps of the form map[string]T. It treats - // LabelName as a string and does not call its UnmarshalJSON method. - // Thus, we have to replicate the behavior here. - for ln := range m { - if !LabelNameRE.MatchString(string(ln)) { - return fmt.Errorf("%q is not a valid label name", ln) - } - } - *l = LabelSet(m) - return nil -} diff --git a/vendor/github.com/prometheus/client_golang/model/labelvalue_test.go b/vendor/github.com/prometheus/client_golang/model/labelvalue_test.go deleted file mode 100644 index 15904ed..0000000 --- a/vendor/github.com/prometheus/client_golang/model/labelvalue_test.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright 2013 The Prometheus 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 model - -import ( - "sort" - "testing" -) - -func testLabelValues(t testing.TB) { - var scenarios = []struct { - in LabelValues - out LabelValues - }{ - { - in: LabelValues{"ZZZ", "zzz"}, - out: LabelValues{"ZZZ", "zzz"}, - }, - { - in: LabelValues{"aaa", "AAA"}, - out: LabelValues{"AAA", "aaa"}, - }, - } - - for i, scenario := range scenarios { - sort.Sort(scenario.in) - - for j, expected := range scenario.out { - if expected != scenario.in[j] { - t.Errorf("%d.%d expected %s, got %s", i, j, expected, scenario.in[j]) - } - } - } -} - -func TestLabelValues(t *testing.T) { - testLabelValues(t) -} - -func BenchmarkLabelValues(b *testing.B) { - for i := 0; i < b.N; i++ { - testLabelValues(b) - } -} diff --git a/vendor/github.com/prometheus/client_golang/model/metric.go b/vendor/github.com/prometheus/client_golang/model/metric.go deleted file mode 100644 index 864c012..0000000 --- a/vendor/github.com/prometheus/client_golang/model/metric.go +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright 2013 The Prometheus 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 model - -import ( - "encoding/json" - "fmt" - "sort" - "strings" -) - -var separator = []byte{0} - -// A Metric is similar to a LabelSet, but the key difference is that a Metric is -// a singleton and refers to one and only one stream of samples. -type Metric map[LabelName]LabelValue - -// Equal compares the metrics. -func (m Metric) Equal(o Metric) bool { - if len(m) != len(o) { - return false - } - for ln, lv := range m { - olv, ok := o[ln] - if !ok { - return false - } - if olv != lv { - return false - } - } - return true -} - -// Before compares the metrics, using the following criteria: -// -// If m has fewer labels than o, it is before o. If it has more, it is not. -// -// If the number of labels is the same, the superset of all label names is -// sorted alphanumerically. The first differing label pair found in that order -// determines the outcome: If the label does not exist at all in m, then m is -// before o, and vice versa. Otherwise the label value is compared -// alphanumerically. -// -// If m and o are equal, the method returns false. -func (m Metric) Before(o Metric) bool { - if len(m) < len(o) { - return true - } - if len(m) > len(o) { - return false - } - - lns := make(LabelNames, 0, len(m)+len(o)) - for ln := range m { - lns = append(lns, ln) - } - for ln := range o { - lns = append(lns, ln) - } - // It's probably not worth it to de-dup lns. - sort.Sort(lns) - for _, ln := range lns { - mlv, ok := m[ln] - if !ok { - return true - } - olv, ok := o[ln] - if !ok { - return false - } - if mlv < olv { - return true - } - if mlv > olv { - return false - } - } - return false -} - -// String implements Stringer. -func (m Metric) String() string { - metricName, hasName := m[MetricNameLabel] - numLabels := len(m) - 1 - if !hasName { - numLabels = len(m) - } - labelStrings := make([]string, 0, numLabels) - for label, value := range m { - if label != MetricNameLabel { - labelStrings = append(labelStrings, fmt.Sprintf("%s=%q", label, value)) - } - } - - switch numLabels { - case 0: - if hasName { - return string(metricName) - } - return "{}" - default: - sort.Strings(labelStrings) - return fmt.Sprintf("%s{%s}", metricName, strings.Join(labelStrings, ", ")) - } -} - -// Fingerprint returns a Metric's Fingerprint. -func (m Metric) Fingerprint() Fingerprint { - return metricToFingerprint(m) -} - -// FastFingerprint returns a Metric's Fingerprint calculated by a faster hashing -// algorithm, which is, however, more susceptible to hash collisions. -func (m Metric) FastFingerprint() Fingerprint { - return metricToFastFingerprint(m) -} - -// Clone returns a copy of the Metric. -func (m Metric) Clone() Metric { - clone := Metric{} - for k, v := range m { - clone[k] = v - } - return clone -} - -// MergeFromLabelSet merges a label set into this Metric, prefixing a collision -// prefix to the label names merged from the label set where required. -func (m Metric) MergeFromLabelSet(labels LabelSet, collisionPrefix LabelName) { - for k, v := range labels { - if collisionPrefix != "" { - for { - if _, exists := m[k]; !exists { - break - } - k = collisionPrefix + k - } - } - - m[k] = v - } -} - -// COWMetric wraps a Metric to enable copy-on-write access patterns. -type COWMetric struct { - Copied bool - Metric Metric -} - -// Set sets a label name in the wrapped Metric to a given value and copies the -// Metric initially, if it is not already a copy. -func (m *COWMetric) Set(ln LabelName, lv LabelValue) { - m.doCOW() - m.Metric[ln] = lv -} - -// Delete deletes a given label name from the wrapped Metric and copies the -// Metric initially, if it is not already a copy. -func (m *COWMetric) Delete(ln LabelName) { - m.doCOW() - delete(m.Metric, ln) -} - -// doCOW copies the underlying Metric if it is not already a copy. -func (m *COWMetric) doCOW() { - if !m.Copied { - m.Metric = m.Metric.Clone() - m.Copied = true - } -} - -// String implements fmt.Stringer. -func (m COWMetric) String() string { - return m.Metric.String() -} - -// MarshalJSON implements json.Marshaler. -func (m COWMetric) MarshalJSON() ([]byte, error) { - return json.Marshal(m.Metric) -} diff --git a/vendor/github.com/prometheus/client_golang/model/sample.go b/vendor/github.com/prometheus/client_golang/model/sample.go deleted file mode 100644 index c13a44d..0000000 --- a/vendor/github.com/prometheus/client_golang/model/sample.go +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright 2013 The Prometheus 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 model - -// Sample is a sample value with a timestamp and a metric. -type Sample struct { - Metric Metric - Value SampleValue - Timestamp Timestamp -} - -// Equal compares first the metrics, then the timestamp, then the value. -func (s *Sample) Equal(o *Sample) bool { - if s == o { - return true - } - - if !s.Metric.Equal(o.Metric) { - return false - } - if !s.Timestamp.Equal(o.Timestamp) { - return false - } - if !s.Value.Equal(o.Value) { - return false - } - - return true -} - -// Samples is a sortable Sample slice. It implements sort.Interface. -type Samples []*Sample - -func (s Samples) Len() int { - return len(s) -} - -// Less compares first the metrics, then the timestamp. -func (s Samples) Less(i, j int) bool { - switch { - case s[i].Metric.Before(s[j].Metric): - return true - case s[j].Metric.Before(s[i].Metric): - return false - case s[i].Timestamp.Before(s[j].Timestamp): - return true - default: - return false - } -} - -func (s Samples) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -// Equal compares two sets of samples and returns true if they are equal. -func (s Samples) Equal(o Samples) bool { - if len(s) != len(o) { - return false - } - - for i, sample := range s { - if !sample.Equal(o[i]) { - return false - } - } - return true -} diff --git a/vendor/github.com/prometheus/client_golang/model/sample_test.go b/vendor/github.com/prometheus/client_golang/model/sample_test.go deleted file mode 100644 index d5e065d..0000000 --- a/vendor/github.com/prometheus/client_golang/model/sample_test.go +++ /dev/null @@ -1,114 +0,0 @@ -// Copyright 2013 The Prometheus 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 model - -import ( - "sort" - "testing" -) - -func TestSamplesSort(t *testing.T) { - input := Samples{ - &Sample{ - Metric: Metric{ - MetricNameLabel: "A", - }, - Timestamp: 1, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "A", - }, - Timestamp: 2, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "C", - }, - Timestamp: 1, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "C", - }, - Timestamp: 2, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "B", - }, - Timestamp: 1, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "B", - }, - Timestamp: 2, - }, - } - - expected := Samples{ - &Sample{ - Metric: Metric{ - MetricNameLabel: "A", - }, - Timestamp: 1, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "A", - }, - Timestamp: 2, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "B", - }, - Timestamp: 1, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "B", - }, - Timestamp: 2, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "C", - }, - Timestamp: 1, - }, - &Sample{ - Metric: Metric{ - MetricNameLabel: "C", - }, - Timestamp: 2, - }, - } - - sort.Sort(input) - - for i, actual := range input { - actualFp := actual.Metric.Fingerprint() - expectedFp := expected[i].Metric.Fingerprint() - - if !actualFp.Equal(expectedFp) { - t.Fatalf("%d. Incorrect fingerprint. Got %s; want %s", i, actualFp.String(), expectedFp.String()) - } - - if actual.Timestamp != expected[i].Timestamp { - t.Fatalf("%d. Incorrect timestamp. Got %s; want %s", i, actual.Timestamp, expected[i].Timestamp) - } - } -} diff --git a/vendor/github.com/prometheus/client_golang/model/timestamp.go b/vendor/github.com/prometheus/client_golang/model/timestamp.go deleted file mode 100644 index afffdcf..0000000 --- a/vendor/github.com/prometheus/client_golang/model/timestamp.go +++ /dev/null @@ -1,116 +0,0 @@ -// Copyright 2013 The Prometheus 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 model - -import ( - "math" - "strconv" - - native_time "time" -) - -// Timestamp is the number of milliseconds since the epoch -// (1970-01-01 00:00 UTC) excluding leap seconds. -type Timestamp int64 - -const ( - // MinimumTick is the minimum supported time resolution. This has to be - // at least native_time.Second in order for the code below to work. - MinimumTick = native_time.Millisecond - // second is the timestamp duration equivalent to one second. - second = int64(native_time.Second / MinimumTick) - // The number of nanoseconds per minimum tick. - nanosPerTick = int64(MinimumTick / native_time.Nanosecond) - - // Earliest is the earliest timestamp representable. Handy for - // initializing a high watermark. - Earliest = Timestamp(math.MinInt64) - // Latest is the latest timestamp representable. Handy for initializing - // a low watermark. - Latest = Timestamp(math.MaxInt64) -) - -// Equal reports whether two timestamps represent the same instant. -func (t Timestamp) Equal(o Timestamp) bool { - return t == o -} - -// Before reports whether the timestamp t is before o. -func (t Timestamp) Before(o Timestamp) bool { - return t < o -} - -// After reports whether the timestamp t is after o. -func (t Timestamp) After(o Timestamp) bool { - return t > o -} - -// Add returns the Timestamp t + d. -func (t Timestamp) Add(d native_time.Duration) Timestamp { - return t + Timestamp(d/MinimumTick) -} - -// Sub returns the Duration t - o. -func (t Timestamp) Sub(o Timestamp) native_time.Duration { - return native_time.Duration(t-o) * MinimumTick -} - -// Time returns the time.Time representation of t. -func (t Timestamp) Time() native_time.Time { - return native_time.Unix(int64(t)/second, (int64(t)%second)*nanosPerTick) -} - -// Unix returns t as a Unix time, the number of seconds elapsed -// since January 1, 1970 UTC. -func (t Timestamp) Unix() int64 { - return int64(t) / second -} - -// UnixNano returns t as a Unix time, the number of nanoseconds elapsed -// since January 1, 1970 UTC. -func (t Timestamp) UnixNano() int64 { - return int64(t) * nanosPerTick -} - -// String returns a string representation of the timestamp. -func (t Timestamp) String() string { - return strconv.FormatFloat(float64(t)/float64(second), 'f', -1, 64) -} - -// MarshalJSON implements the json.Marshaler interface. -func (t Timestamp) MarshalJSON() ([]byte, error) { - return []byte(t.String()), nil -} - -// Now returns the current time as a Timestamp. -func Now() Timestamp { - return TimestampFromTime(native_time.Now()) -} - -// TimestampFromTime returns the Timestamp equivalent to the time.Time t. -func TimestampFromTime(t native_time.Time) Timestamp { - return TimestampFromUnixNano(t.UnixNano()) -} - -// TimestampFromUnix returns the Timestamp equivalent to the Unix timestamp t -// provided in seconds. -func TimestampFromUnix(t int64) Timestamp { - return Timestamp(t * second) -} - -// TimestampFromUnixNano returns the Timestamp equivalent to the Unix timestamp -// t provided in nanoseconds. -func TimestampFromUnixNano(t int64) Timestamp { - return Timestamp(t / nanosPerTick) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/README.md b/vendor/github.com/prometheus/client_golang/prometheus/README.md index 81032be..44986bf 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/README.md +++ b/vendor/github.com/prometheus/client_golang/prometheus/README.md @@ -1,53 +1 @@ -# Overview -This is the [Prometheus](http://www.prometheus.io) telemetric -instrumentation client [Go](http://golang.org) client library. It -enable authors to define process-space metrics for their servers and -expose them through a web service interface for extraction, -aggregation, and a whole slew of other post processing techniques. - -# Installing - $ go get github.com/prometheus/client_golang/prometheus - -# Example -```go -package main - -import ( - "net/http" - - "github.com/prometheus/client_golang/prometheus" -) - -var ( - indexed = prometheus.NewCounter(prometheus.CounterOpts{ - Namespace: "my_company", - Subsystem: "indexer", - Name: "documents_indexed", - Help: "The number of documents indexed.", - }) - size = prometheus.NewGauge(prometheus.GaugeOpts{ - Namespace: "my_company", - Subsystem: "storage", - Name: "documents_total_size_bytes", - Help: "The total size of all documents in the storage.", - }) -) - -func main() { - http.Handle("/metrics", prometheus.Handler()) - - indexed.Inc() - size.Set(5) - - http.ListenAndServe(":8080", nil) -} - -func init() { - prometheus.MustRegister(indexed) - prometheus.MustRegister(size) -} -``` - -# Documentation - -[![GoDoc](https://godoc.org/github.com/prometheus/client_golang?status.png)](https://godoc.org/github.com/prometheus/client_golang) +See [![go-doc](https://godoc.org/github.com/prometheus/client_golang/prometheus?status.svg)](https://godoc.org/github.com/prometheus/client_golang/prometheus). diff --git a/vendor/github.com/prometheus/client_golang/prometheus/benchmark_test.go b/vendor/github.com/prometheus/client_golang/prometheus/benchmark_test.go index 6ae7333..a3d8669 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/benchmark_test.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/benchmark_test.go @@ -14,6 +14,7 @@ package prometheus import ( + "sync" "testing" ) @@ -32,6 +33,29 @@ func BenchmarkCounterWithLabelValues(b *testing.B) { } } +func BenchmarkCounterWithLabelValuesConcurrent(b *testing.B) { + m := NewCounterVec( + CounterOpts{ + Name: "benchmark_counter", + Help: "A counter to benchmark it.", + }, + []string{"one", "two", "three"}, + ) + b.ReportAllocs() + b.ResetTimer() + wg := sync.WaitGroup{} + for i := 0; i < 10; i++ { + wg.Add(1) + go func() { + for j := 0; j < b.N/10; j++ { + m.WithLabelValues("eins", "zwei", "drei").Inc() + } + wg.Done() + }() + } + wg.Wait() +} + func BenchmarkCounterWithMappedLabels(b *testing.B) { m := NewCounterVec( CounterOpts{ diff --git a/vendor/github.com/prometheus/client_golang/prometheus/collector.go b/vendor/github.com/prometheus/client_golang/prometheus/collector.go index c046880..623d3d8 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/collector.go @@ -15,15 +15,15 @@ package prometheus // Collector is the interface implemented by anything that can be used by // Prometheus to collect metrics. A Collector has to be registered for -// collection. See Register, MustRegister, RegisterOrGet, and MustRegisterOrGet. +// collection. See Registerer.Register. // -// The stock metrics provided by this package (like Gauge, Counter, Summary) are -// also Collectors (which only ever collect one metric, namely itself). An -// implementer of Collector may, however, collect multiple metrics in a -// coordinated fashion and/or create metrics on the fly. Examples for collectors -// already implemented in this library are the metric vectors (i.e. collection -// of multiple instances of the same Metric but with different label values) -// like GaugeVec or SummaryVec, and the ExpvarCollector. +// The stock metrics provided by this package (Gauge, Counter, Summary, +// Histogram, Untyped) are also Collectors (which only ever collect one metric, +// namely itself). An implementer of Collector may, however, collect multiple +// metrics in a coordinated fashion and/or create metrics on the fly. Examples +// for collectors already implemented in this library are the metric vectors +// (i.e. collection of multiple instances of the same Metric but with different +// label values) like GaugeVec or SummaryVec, and the ExpvarCollector. type Collector interface { // Describe sends the super-set of all possible descriptors of metrics // collected by this Collector to the provided channel and returns once @@ -37,39 +37,39 @@ type Collector interface { // executing this method, it must send an invalid descriptor (created // with NewInvalidDesc) to signal the error to the registry. Describe(chan<- *Desc) - // Collect is called by Prometheus when collecting metrics. The - // implementation sends each collected metric via the provided channel - // and returns once the last metric has been sent. The descriptor of - // each sent metric is one of those returned by Describe. Returned - // metrics that share the same descriptor must differ in their variable - // label values. This method may be called concurrently and must - // therefore be implemented in a concurrency safe way. Blocking occurs - // at the expense of total performance of rendering all registered - // metrics. Ideally, Collector implementations support concurrent - // readers. + // Collect is called by the Prometheus registry when collecting + // metrics. The implementation sends each collected metric via the + // provided channel and returns once the last metric has been sent. The + // descriptor of each sent metric is one of those returned by + // Describe. Returned metrics that share the same descriptor must differ + // in their variable label values. This method may be called + // concurrently and must therefore be implemented in a concurrency safe + // way. Blocking occurs at the expense of total performance of rendering + // all registered metrics. Ideally, Collector implementations support + // concurrent readers. Collect(chan<- Metric) } -// SelfCollector implements Collector for a single Metric so that that the -// Metric collects itself. Add it as an anonymous field to a struct that -// implements Metric, and call Init with the Metric itself as an argument. -type SelfCollector struct { +// selfCollector implements Collector for a single Metric so that the Metric +// collects itself. Add it as an anonymous field to a struct that implements +// Metric, and call init with the Metric itself as an argument. +type selfCollector struct { self Metric } -// Init provides the SelfCollector with a reference to the metric it is supposed +// init provides the selfCollector with a reference to the metric it is supposed // to collect. It is usually called within the factory function to create a // metric. See example. -func (c *SelfCollector) Init(self Metric) { +func (c *selfCollector) init(self Metric) { c.self = self } // Describe implements Collector. -func (c *SelfCollector) Describe(ch chan<- *Desc) { +func (c *selfCollector) Describe(ch chan<- *Desc) { ch <- c.self.Desc() } // Collect implements Collector. -func (c *SelfCollector) Collect(ch chan<- Metric) { +func (c *selfCollector) Collect(ch chan<- Metric) { ch <- c.self } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/counter.go b/vendor/github.com/prometheus/client_golang/prometheus/counter.go index a2952d1..ee37949 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/counter.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/counter.go @@ -15,7 +15,6 @@ package prometheus import ( "errors" - "hash/fnv" ) // Counter is a Metric that represents a single numerical value that only ever @@ -36,6 +35,9 @@ type Counter interface { // Prometheus metric. Do not use it for regular handling of a // Prometheus counter (as it can be used to break the contract of // monotonically increasing values). + // + // Deprecated: Use NewConstMetric to create a counter for an external + // value. A Counter should never be set. Set(float64) // Inc increments the counter by 1. Inc() @@ -56,7 +58,7 @@ func NewCounter(opts CounterOpts) Counter { opts.ConstLabels, ) result := &counter{value: value{desc: desc, valType: CounterValue, labelPairs: desc.constLabelPairs}} - result.Init(result) // Init self-collection. + result.init(result) // Init self-collection. return result } @@ -80,7 +82,7 @@ func (c *counter) Add(v float64) { // CounterVec embeds MetricVec. See there for a full list of methods with // detailed documentation. type CounterVec struct { - MetricVec + *MetricVec } // NewCounterVec creates a new CounterVec based on the provided CounterOpts and @@ -94,20 +96,15 @@ func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec { opts.ConstLabels, ) return &CounterVec{ - MetricVec: MetricVec{ - children: map[uint64]Metric{}, - desc: desc, - hash: fnv.New64a(), - newMetric: func(lvs ...string) Metric { - result := &counter{value: value{ - desc: desc, - valType: CounterValue, - labelPairs: makeLabelPairs(desc, lvs), - }} - result.Init(result) // Init self-collection. - return result - }, - }, + MetricVec: newMetricVec(desc, func(lvs ...string) Metric { + result := &counter{value: value{ + desc: desc, + valType: CounterValue, + labelPairs: makeLabelPairs(desc, lvs), + }} + result.init(result) // Init self-collection. + return result + }), } } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/desc.go b/vendor/github.com/prometheus/client_golang/prometheus/desc.go index 1fe10bc..77f4b30 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/desc.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/desc.go @@ -1,10 +1,21 @@ +// Copyright 2016 The Prometheus 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 prometheus import ( - "bytes" "errors" "fmt" - "hash/fnv" "regexp" "sort" "strings" @@ -12,14 +23,17 @@ import ( "github.com/golang/protobuf/proto" dto "github.com/prometheus/client_model/go" - - "github.com/prometheus/client_golang/model" ) var ( metricNameRE = regexp.MustCompile(`^[a-zA-Z_][a-zA-Z0-9_:]*$`) + labelNameRE = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$") ) +// reservedLabelPrefix is a prefix which is not legal in user-supplied +// label names. +const reservedLabelPrefix = "__" + // Labels represents a collection of label name -> value mappings. This type is // commonly used with the With(Labels) and GetMetricWith(Labels) methods of // metric vector Collectors, e.g.: @@ -128,31 +142,24 @@ func NewDesc(fqName, help string, variableLabels []string, constLabels Labels) * d.err = errors.New("duplicate label names") return d } - h := fnv.New64a() - var b bytes.Buffer // To copy string contents into, avoiding []byte allocations. + vh := hashNew() for _, val := range labelValues { - b.Reset() - b.WriteString(val) - b.WriteByte(model.SeparatorByte) - h.Write(b.Bytes()) + vh = hashAdd(vh, val) + vh = hashAddByte(vh, separatorByte) } - d.id = h.Sum64() + d.id = vh // Sort labelNames so that order doesn't matter for the hash. sort.Strings(labelNames) // Now hash together (in this order) the help string and the sorted // label names. - h.Reset() - b.Reset() - b.WriteString(help) - b.WriteByte(model.SeparatorByte) - h.Write(b.Bytes()) + lh := hashNew() + lh = hashAdd(lh, help) + lh = hashAddByte(lh, separatorByte) for _, labelName := range labelNames { - b.Reset() - b.WriteString(labelName) - b.WriteByte(model.SeparatorByte) - h.Write(b.Bytes()) + lh = hashAdd(lh, labelName) + lh = hashAddByte(lh, separatorByte) } - d.dimHash = h.Sum64() + d.dimHash = lh d.constLabelPairs = make([]*dto.LabelPair, 0, len(constLabels)) for n, v := range constLabels { @@ -193,6 +200,6 @@ func (d *Desc) String() string { } func checkLabelName(l string) bool { - return model.LabelNameRE.MatchString(l) && - !strings.HasPrefix(l, model.ReservedLabelPrefix) + return labelNameRE.MatchString(l) && + !strings.HasPrefix(l, reservedLabelPrefix) } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/doc.go b/vendor/github.com/prometheus/client_golang/prometheus/doc.go index 425fe87..b15a2d3 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/doc.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/doc.go @@ -11,18 +11,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package prometheus provides embeddable metric primitives for servers and -// standardized exposition of telemetry through a web services interface. +// Package prometheus provides metrics primitives to instrument code for +// monitoring. It also offers a registry for metrics. Sub-packages allow to +// expose the registered metrics via HTTP (package promhttp) or push them to a +// Pushgateway (package push). // // All exported functions and methods are safe to be used concurrently unless -// specified otherwise. +//specified otherwise. // -// To expose metrics registered with the Prometheus registry, an HTTP server -// needs to know about the Prometheus handler. The usual endpoint is "/metrics". +// A Basic Example // -// http.Handle("/metrics", prometheus.Handler()) -// -// As a starting point a very basic usage example: +// As a starting point, a very basic usage example: // // package main // @@ -30,6 +29,7 @@ // "net/http" // // "github.com/prometheus/client_golang/prometheus" +// "github.com/prometheus/client_golang/prometheus/promhttp" // ) // // var ( @@ -37,73 +37,145 @@ // Name: "cpu_temperature_celsius", // Help: "Current temperature of the CPU.", // }) -// hdFailures = prometheus.NewCounter(prometheus.CounterOpts{ -// Name: "hd_errors_total", -// Help: "Number of hard-disk errors.", -// }) +// hdFailures = prometheus.NewCounterVec( +// prometheus.CounterOpts{ +// Name: "hd_errors_total", +// Help: "Number of hard-disk errors.", +// }, +// []string{"device"}, +// ) // ) // // func init() { +// // Metrics have to be registered to be exposed: // prometheus.MustRegister(cpuTemp) // prometheus.MustRegister(hdFailures) // } // // func main() { // cpuTemp.Set(65.3) -// hdFailures.Inc() +// hdFailures.With(prometheus.Labels{"device":"/dev/sda"}).Inc() // -// http.Handle("/metrics", prometheus.Handler()) +// // The Handler function provides a default handler to expose metrics +// // via an HTTP server. "/metrics" is the usual endpoint for that. +// http.Handle("/metrics", promhttp.Handler()) // http.ListenAndServe(":8080", nil) // } // // -// This is a complete program that exports two metrics, a Gauge and a Counter. -// It also exports some stats about the HTTP usage of the /metrics -// endpoint. (See the Handler function for more detail.) +// This is a complete program that exports two metrics, a Gauge and a Counter, +// the latter with a label attached to turn it into a (one-dimensional) vector. // -// Two more advanced metric types are the Summary and Histogram. +// Metrics // -// In addition to the fundamental metric types Gauge, Counter, Summary, and -// Histogram, a very important part of the Prometheus data model is the -// partitioning of samples along dimensions called labels, which results in +// The number of exported identifiers in this package might appear a bit +// overwhelming. Hovever, in addition to the basic plumbing shown in the example +// above, you only need to understand the different metric types and their +// vector versions for basic usage. +// +// Above, you have already touched the Counter and the Gauge. There are two more +// advanced metric types: the Summary and Histogram. A more thorough description +// of those four metric types can be found in the Prometheus docs: +// https://prometheus.io/docs/concepts/metric_types/ +// +// A fifth "type" of metric is Untyped. It behaves like a Gauge, but signals the +// Prometheus server not to assume anything about its type. +// +// In addition to the fundamental metric types Gauge, Counter, Summary, +// Histogram, and Untyped, a very important part of the Prometheus data model is +// the partitioning of samples along dimensions called labels, which results in // metric vectors. The fundamental types are GaugeVec, CounterVec, SummaryVec, -// and HistogramVec. +// HistogramVec, and UntypedVec. // -// Those are all the parts needed for basic usage. Detailed documentation and -// examples are provided below. +// While only the fundamental metric types implement the Metric interface, both +// the metrics and their vector versions implement the Collector interface. A +// Collector manages the collection of a number of Metrics, but for convenience, +// a Metric can also “collect itself”. Note that Gauge, Counter, Summary, +// Histogram, and Untyped are interfaces themselves while GaugeVec, CounterVec, +// SummaryVec, HistogramVec, and UntypedVec are not. // -// Everything else this package offers is essentially for "power users" only. A -// few pointers to "power user features": +// To create instances of Metrics and their vector versions, you need a suitable +// …Opts struct, i.e. GaugeOpts, CounterOpts, SummaryOpts, +// HistogramOpts, or UntypedOpts. // -// All the various ...Opts structs have a ConstLabels field for labels that -// never change their value (which is only useful under special circumstances, -// see documentation of the Opts type). +// Custom Collectors and constant Metrics // -// The Untyped metric behaves like a Gauge, but signals the Prometheus server -// not to assume anything about its type. +// While you could create your own implementations of Metric, most likely you +// will only ever implement the Collector interface on your own. At a first +// glance, a custom Collector seems handy to bundle Metrics for common +// registration (with the prime example of the different metric vectors above, +// which bundle all the metrics of the same name but with different labels). // -// Functions to fine-tune how the metric registry works: EnableCollectChecks, -// PanicOnCollectError, Register, Unregister, SetMetricFamilyInjectionHook. +// There is a more involved use case, too: If you already have metrics +// available, created outside of the Prometheus context, you don't need the +// interface of the various Metric types. You essentially want to mirror the +// existing numbers into Prometheus Metrics during collection. An own +// implementation of the Collector interface is perfect for that. You can create +// Metric instances “on the fly” using NewConstMetric, NewConstHistogram, and +// NewConstSummary (and their respective Must… versions). That will happen in +// the Collect method. The Describe method has to return separate Desc +// instances, representative of the “throw-away” metrics to be created +// later. NewDesc comes in handy to create those Desc instances. // -// For custom metric collection, there are two entry points: Custom Metric -// implementations and custom Collector implementations. A Metric is the -// fundamental unit in the Prometheus data model: a sample at a point in time -// together with its meta-data (like its fully-qualified name and any number of -// pairs of label name and label value) that knows how to marshal itself into a -// data transfer object (aka DTO, implemented as a protocol buffer). A Collector -// gets registered with the Prometheus registry and manages the collection of -// one or more Metrics. Many parts of this package are building blocks for -// Metrics and Collectors. Desc is the metric descriptor, actually used by all -// metrics under the hood, and by Collectors to describe the Metrics to be -// collected, but only to be dealt with by users if they implement their own -// Metrics or Collectors. To create a Desc, the BuildFQName function will come -// in handy. Other useful components for Metric and Collector implementation -// include: LabelPairSorter to sort the DTO version of label pairs, -// NewConstMetric and MustNewConstMetric to create "throw away" Metrics at -// collection time, MetricVec to bundle custom Metrics into a metric vector -// Collector, SelfCollector to make a custom Metric collect itself. +// The Collector example illustrates the use case. You can also look at the +// source code of the processCollector (mirroring process metrics), the +// goCollector (mirroring Go metrics), or the expvarCollector (mirroring expvar +// metrics) as examples that are used in this package itself. // -// A good example for a custom Collector is the ExpVarCollector included in this -// package, which exports variables exported via the "expvar" package as -// Prometheus metrics. +// If you just need to call a function to get a single float value to collect as +// a metric, GaugeFunc, CounterFunc, or UntypedFunc might be interesting +// shortcuts. +// +// Advanced Uses of the Registry +// +// While MustRegister is the by far most common way of registering a Collector, +// sometimes you might want to handle the errors the registration might +// cause. As suggested by the name, MustRegister panics if an error occurs. With +// the Register function, the error is returned and can be handled. +// +// An error is returned if the registered Collector is incompatible or +// inconsistent with already registered metrics. The registry aims for +// consistency of the collected metrics according to the Prometheus data +// model. Inconsistencies are ideally detected at registration time, not at +// collect time. The former will usually be detected at start-up time of a +// program, while the latter will only happen at scrape time, possibly not even +// on the first scrape if the inconsistency only becomes relevant later. That is +// the main reason why a Collector and a Metric have to describe themselves to +// the registry. +// +// So far, everything we did operated on the so-called default registry, as it +// can be found in the global DefaultRegistry variable. With NewRegistry, you +// can create a custom registry, or you can even implement the Registerer or +// Gatherer interfaces yourself. The methods Register and Unregister work in +// the same way on a custom registry as the global functions Register and +// Unregister on the default registry. +// +// There are a number of uses for custom registries: You can use registries +// with special properties, see NewPedanticRegistry. You can avoid global state, +// as it is imposed by the DefaultRegistry. You can use multiple registries at +// the same time to expose different metrics in different ways. You can use +// separate registries for testing purposes. +// +// Also note that the DefaultRegistry comes registered with a Collector for Go +// runtime metrics (via NewGoCollector) and a Collector for process metrics (via +// NewProcessCollector). With a custom registry, you are in control and decide +// yourself about the Collectors to register. +// +// HTTP Exposition +// +// The Registry implements the Gatherer interface. The caller of the Gather +// method can then expose the gathered metrics in some way. Usually, the metrics +// are served via HTTP on the /metrics endpoint. That's happening in the example +// above. The tools to expose metrics via HTTP are in the promhttp +// sub-package. (The top-level functions in the prometheus package are +// deprecated.) +// +// Pushing to the Pushgateway +// +// Function for pushing to the Pushgateway can be found in the push sub-package. +// +// Other Means of Exposition +// +// More ways of exposing metrics can easily be added. Sending metrics to +// Graphite would be an example that will soon be implemented. package prometheus diff --git a/vendor/github.com/prometheus/client_golang/prometheus/example_clustermanager_test.go b/vendor/github.com/prometheus/client_golang/prometheus/example_clustermanager_test.go index 6f3e215..260c1b5 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/example_clustermanager_test.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/example_clustermanager_test.go @@ -13,11 +13,7 @@ package prometheus_test -import ( - "sync" - - "github.com/prometheus/client_golang/prometheus" -) +import "github.com/prometheus/client_golang/prometheus" // ClusterManager is an example for a system that might have been built without // Prometheus in mind. It models a central manager of jobs running in a @@ -29,10 +25,9 @@ import ( // make use of ConstLabels to be able to register each ClusterManager instance // with Prometheus. type ClusterManager struct { - Zone string - OOMCount *prometheus.CounterVec - RAMUsage *prometheus.GaugeVec - mtx sync.Mutex // Protects OOMCount and RAMUsage. + Zone string + OOMCountDesc *prometheus.Desc + RAMUsageDesc *prometheus.Desc // ... many more fields } @@ -55,76 +50,69 @@ func (c *ClusterManager) ReallyExpensiveAssessmentOfTheSystemState() ( return } -// Describe faces the interesting challenge that the two metric vectors that are -// used in this example are already Collectors themselves. However, thanks to -// the use of channels, it is really easy to "chain" Collectors. Here we simply -// call the Describe methods of the two metric vectors. +// Describe simply sends the two Descs in the struct to the channel. func (c *ClusterManager) Describe(ch chan<- *prometheus.Desc) { - c.OOMCount.Describe(ch) - c.RAMUsage.Describe(ch) + ch <- c.OOMCountDesc + ch <- c.RAMUsageDesc } // Collect first triggers the ReallyExpensiveAssessmentOfTheSystemState. Then it -// sets the retrieved values in the two metric vectors and then sends all their -// metrics to the channel (again using a chaining technique as in the Describe -// method). Since Collect could be called multiple times concurrently, that part -// is protected by a mutex. +// creates constant metrics for each host on the fly based on the returned data. +// +// Note that Collect could be called concurrently, so we depend on +// ReallyExpensiveAssessmentOfTheSystemState to be concurrency-safe. func (c *ClusterManager) Collect(ch chan<- prometheus.Metric) { oomCountByHost, ramUsageByHost := c.ReallyExpensiveAssessmentOfTheSystemState() - c.mtx.Lock() - defer c.mtx.Unlock() for host, oomCount := range oomCountByHost { - c.OOMCount.WithLabelValues(host).Set(float64(oomCount)) + ch <- prometheus.MustNewConstMetric( + c.OOMCountDesc, + prometheus.CounterValue, + float64(oomCount), + host, + ) } for host, ramUsage := range ramUsageByHost { - c.RAMUsage.WithLabelValues(host).Set(ramUsage) + ch <- prometheus.MustNewConstMetric( + c.RAMUsageDesc, + prometheus.GaugeValue, + ramUsage, + host, + ) } - c.OOMCount.Collect(ch) - c.RAMUsage.Collect(ch) - // All metrics in OOMCount and RAMUsage are sent to the channel now. We - // can safely reset the two metric vectors now, so that we can start - // fresh in the next Collect cycle. (Imagine a host disappears from the - // cluster. If we did not reset here, its Metric would stay in the - // metric vectors forever.) - c.OOMCount.Reset() - c.RAMUsage.Reset() } -// NewClusterManager creates the two metric vectors OOMCount and RAMUsage. Note +// NewClusterManager creates the two Descs OOMCountDesc and RAMUsageDesc. Note // that the zone is set as a ConstLabel. (It's different in each instance of the -// ClusterManager, but constant over the lifetime of an instance.) The reported -// values are partitioned by host, which is therefore a variable label. +// ClusterManager, but constant over the lifetime of an instance.) Then there is +// a variable label "host", since we want to partition the collected metrics by +// host. Since all Descs created in this way are consistent across instances, +// with a guaranteed distinction by the "zone" label, we can register different +// ClusterManager instances with the same registry. func NewClusterManager(zone string) *ClusterManager { return &ClusterManager{ Zone: zone, - OOMCount: prometheus.NewCounterVec( - prometheus.CounterOpts{ - Subsystem: "clustermanager", - Name: "oom_count", - Help: "number of OOM crashes", - ConstLabels: prometheus.Labels{"zone": zone}, - }, + OOMCountDesc: prometheus.NewDesc( + "clustermanager_oom_crashes_total", + "Number of OOM crashes.", []string{"host"}, + prometheus.Labels{"zone": zone}, ), - RAMUsage: prometheus.NewGaugeVec( - prometheus.GaugeOpts{ - Subsystem: "clustermanager", - Name: "ram_usage_bytes", - Help: "RAM usage as reported to the cluster manager", - ConstLabels: prometheus.Labels{"zone": zone}, - }, + RAMUsageDesc: prometheus.NewDesc( + "clustermanager_ram_usage_bytes", + "RAM usage as reported to the cluster manager.", []string{"host"}, + prometheus.Labels{"zone": zone}, ), } } -func ExampleCollector_clustermanager() { +func ExampleCollector() { workerDB := NewClusterManager("db") workerCA := NewClusterManager("ca") - prometheus.MustRegister(workerDB) - prometheus.MustRegister(workerCA) // Since we are dealing with custom Collector implementations, it might - // be a good idea to enable the collect checks in the registry. - prometheus.EnableCollectChecks(true) + // be a good idea to try it out with a pedantic registry. + reg := prometheus.NewPedanticRegistry() + reg.MustRegister(workerDB) + reg.MustRegister(workerCA) } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/example_memstats_test.go b/vendor/github.com/prometheus/client_golang/prometheus/example_memstats_test.go deleted file mode 100644 index a84d072..0000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/example_memstats_test.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2014 The Prometheus 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 prometheus_test - -import ( - "runtime" - - "github.com/prometheus/client_golang/prometheus" -) - -var ( - allocDesc = prometheus.NewDesc( - prometheus.BuildFQName("", "memstats", "alloc_bytes"), - "bytes allocated and still in use", - nil, nil, - ) - totalAllocDesc = prometheus.NewDesc( - prometheus.BuildFQName("", "memstats", "total_alloc_bytes"), - "bytes allocated (even if freed)", - nil, nil, - ) - numGCDesc = prometheus.NewDesc( - prometheus.BuildFQName("", "memstats", "num_gc_total"), - "number of GCs run", - nil, nil, - ) -) - -// MemStatsCollector is an example for a custom Collector that solves the -// problem of feeding into multiple metrics at the same time. The -// runtime.ReadMemStats should happen only once, and then the results need to be -// fed into a number of separate Metrics. In this example, only a few of the -// values reported by ReadMemStats are used. For each, there is a Desc provided -// as a var, so the MemStatsCollector itself needs nothing else in the -// struct. Only the methods need to be implemented. -type MemStatsCollector struct{} - -// Describe just sends the three Desc objects for the Metrics we intend to -// collect. -func (_ MemStatsCollector) Describe(ch chan<- *prometheus.Desc) { - ch <- allocDesc - ch <- totalAllocDesc - ch <- numGCDesc -} - -// Collect does the trick by calling ReadMemStats once and then constructing -// three different Metrics on the fly. -func (_ MemStatsCollector) Collect(ch chan<- prometheus.Metric) { - var ms runtime.MemStats - runtime.ReadMemStats(&ms) - ch <- prometheus.MustNewConstMetric( - allocDesc, - prometheus.GaugeValue, - float64(ms.Alloc), - ) - ch <- prometheus.MustNewConstMetric( - totalAllocDesc, - prometheus.GaugeValue, - float64(ms.TotalAlloc), - ) - ch <- prometheus.MustNewConstMetric( - numGCDesc, - prometheus.CounterValue, - float64(ms.NumGC), - ) - // To avoid new allocations on each collection, you could also keep - // metric objects around and return the same objects each time, just - // with new values set. -} - -func ExampleCollector_memstats() { - prometheus.MustRegister(&MemStatsCollector{}) - // Since we are dealing with custom Collector implementations, it might - // be a good idea to enable the collect checks in the registry. - prometheus.EnableCollectChecks(true) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/example_selfcollector_test.go b/vendor/github.com/prometheus/client_golang/prometheus/example_selfcollector_test.go deleted file mode 100644 index 608deeb..0000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/example_selfcollector_test.go +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2014 The Prometheus 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 prometheus_test - -import ( - "runtime" - - "github.com/golang/protobuf/proto" - - dto "github.com/prometheus/client_model/go" - - "github.com/prometheus/client_golang/prometheus" -) - -func NewCallbackMetric(desc *prometheus.Desc, callback func() float64) *CallbackMetric { - result := &CallbackMetric{desc: desc, callback: callback} - result.Init(result) // Initialize the SelfCollector. - return result -} - -// TODO: Come up with a better example. - -// CallbackMetric is an example for a user-defined Metric that exports the -// result of a function call as a metric of type "untyped" without any -// labels. It uses SelfCollector to turn the Metric into a Collector so that it -// can be registered with Prometheus. -// -// Note that this example is pretty much academic as the prometheus package -// already provides an UntypedFunc type. -type CallbackMetric struct { - prometheus.SelfCollector - - desc *prometheus.Desc - callback func() float64 -} - -func (cm *CallbackMetric) Desc() *prometheus.Desc { - return cm.desc -} - -func (cm *CallbackMetric) Write(m *dto.Metric) error { - m.Untyped = &dto.Untyped{Value: proto.Float64(cm.callback())} - return nil -} - -func ExampleSelfCollector() { - m := NewCallbackMetric( - prometheus.NewDesc( - "runtime_goroutines_count", - "Total number of goroutines that currently exist.", - nil, nil, // No labels, these must be nil. - ), - func() float64 { - return float64(runtime.NumGoroutine()) - }, - ) - prometheus.MustRegister(m) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/examples_test.go b/vendor/github.com/prometheus/client_golang/prometheus/examples_test.go index a28a801..f87f21a 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/examples_test.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/examples_test.go @@ -14,16 +14,16 @@ package prometheus_test import ( - "flag" + "bytes" "fmt" "math" "net/http" - "os" "runtime" "sort" - "time" + "strings" dto "github.com/prometheus/client_model/go" + "github.com/prometheus/common/expfmt" "github.com/golang/protobuf/proto" @@ -48,16 +48,12 @@ func ExampleGauge() { } func ExampleGaugeVec() { - binaryVersion := flag.String("binary_version", "debug", "Version of the binary: debug, canary, production.") - flag.Parse() - opsQueued := prometheus.NewGaugeVec( prometheus.GaugeOpts{ - Namespace: "our_company", - Subsystem: "blob_storage", - Name: "ops_queued", - Help: "Number of blob storage operations waiting to be processed, partitioned by user and type.", - ConstLabels: prometheus.Labels{"binary_version": *binaryVersion}, + Namespace: "our_company", + Subsystem: "blob_storage", + Name: "ops_queued", + Help: "Number of blob storage operations waiting to be processed, partitioned by user and type.", }, []string{ // Which user has requested the operation? @@ -125,14 +121,10 @@ func ExampleCounter() { } func ExampleCounterVec() { - binaryVersion := flag.String("environment", "test", "Execution environment: test, staging, production.") - flag.Parse() - httpReqs := prometheus.NewCounterVec( prometheus.CounterOpts{ - Name: "http_requests_total", - Help: "How many HTTP requests processed, partitioned by status code and HTTP method.", - ConstLabels: prometheus.Labels{"env": *binaryVersion}, + Name: "http_requests_total", + Help: "How many HTTP requests processed, partitioned by status code and HTTP method.", }, []string{"code", "method"}, ) @@ -392,70 +384,94 @@ func ExampleSummaryVec() { temps.WithLabelValues("lithobates-catesbeianus").Observe(32 + math.Floor(100*math.Cos(float64(i)*0.11))/10) } - // Just for demonstration, let's check the state of the summary vector - // by (ab)using its Collect method and the Write method of its elements - // (which is usually only used by Prometheus internally - code like the - // following will never appear in your own code). - metricChan := make(chan prometheus.Metric) - go func() { - defer close(metricChan) - temps.Collect(metricChan) - }() + // Create a Summary without any observations. + temps.WithLabelValues("leiopelma-hochstetteri") - metricStrings := []string{} - for metric := range metricChan { - dtoMetric := &dto.Metric{} - metric.Write(dtoMetric) - metricStrings = append(metricStrings, proto.MarshalTextString(dtoMetric)) + // Just for demonstration, let's check the state of the summary vector + // by registering it with a custom registry and then let it collect the + // metrics. + reg := prometheus.NewRegistry() + reg.MustRegister(temps) + + metricFamilies, err := reg.Gather() + if err != nil || len(metricFamilies) != 1 { + panic("unexpected behavior of custom test registry") } - sort.Strings(metricStrings) // For reproducible print order. - fmt.Println(metricStrings) + fmt.Println(proto.MarshalTextString(metricFamilies[0])) // Output: - // [label: < - // name: "species" - // value: "lithobates-catesbeianus" - // > - // summary: < - // sample_count: 1000 - // sample_sum: 31956.100000000017 - // quantile: < - // quantile: 0.5 - // value: 32.4 + // name: "pond_temperature_celsius" + // help: "The temperature of the frog pond." + // type: SUMMARY + // metric: < + // label: < + // name: "species" + // value: "leiopelma-hochstetteri" // > - // quantile: < - // quantile: 0.9 - // value: 41.4 - // > - // quantile: < - // quantile: 0.99 - // value: 41.9 + // summary: < + // sample_count: 0 + // sample_sum: 0 + // quantile: < + // quantile: 0.5 + // value: nan + // > + // quantile: < + // quantile: 0.9 + // value: nan + // > + // quantile: < + // quantile: 0.99 + // value: nan + // > // > // > - // label: < - // name: "species" - // value: "litoria-caerulea" - // > - // summary: < - // sample_count: 1000 - // sample_sum: 29969.50000000001 - // quantile: < - // quantile: 0.5 - // value: 31.1 + // metric: < + // label: < + // name: "species" + // value: "lithobates-catesbeianus" // > - // quantile: < - // quantile: 0.9 - // value: 41.3 - // > - // quantile: < - // quantile: 0.99 - // value: 41.9 + // summary: < + // sample_count: 1000 + // sample_sum: 31956.100000000017 + // quantile: < + // quantile: 0.5 + // value: 32.4 + // > + // quantile: < + // quantile: 0.9 + // value: 41.4 + // > + // quantile: < + // quantile: 0.99 + // value: 41.9 + // > + // > + // > + // metric: < + // label: < + // name: "species" + // value: "litoria-caerulea" + // > + // summary: < + // sample_count: 1000 + // sample_sum: 29969.50000000001 + // quantile: < + // quantile: 0.5 + // value: 31.1 + // > + // quantile: < + // quantile: 0.9 + // value: 41.3 + // > + // quantile: < + // quantile: 0.99 + // value: 41.9 + // > // > // > - // ] } -func ExampleConstSummary() { +func ExampleNewConstSummary() { desc := prometheus.NewDesc( "http_request_duration_seconds", "A summary of the HTTP request durations.", @@ -551,7 +567,7 @@ func ExampleHistogram() { // > } -func ExampleConstHistogram() { +func ExampleNewConstHistogram() { desc := prometheus.NewDesc( "http_request_duration_seconds", "A histogram of the HTTP request durations.", @@ -609,18 +625,127 @@ func ExampleConstHistogram() { // > } -func ExamplePushCollectors() { - hostname, _ := os.Hostname() - completionTime := prometheus.NewGauge(prometheus.GaugeOpts{ - Name: "db_backup_last_completion_time", - Help: "The timestamp of the last succesful completion of a DB backup.", +func ExampleAlreadyRegisteredError() { + reqCounter := prometheus.NewCounter(prometheus.CounterOpts{ + Name: "requests_total", + Help: "The total number of requests served.", }) - completionTime.Set(float64(time.Now().Unix())) - if err := prometheus.PushCollectors( - "db_backup", hostname, - "http://pushgateway:9091", - completionTime, - ); err != nil { - fmt.Println("Could not push completion time to Pushgateway:", err) + if err := prometheus.Register(reqCounter); err != nil { + if are, ok := err.(prometheus.AlreadyRegisteredError); ok { + // A counter for that metric has been registered before. + // Use the old counter from now on. + reqCounter = are.ExistingCollector.(prometheus.Counter) + } else { + // Something else went wrong! + panic(err) + } } } + +func ExampleGatherers() { + reg := prometheus.NewRegistry() + temp := prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Name: "temperature_kelvin", + Help: "Temperature in Kelvin.", + }, + []string{"location"}, + ) + reg.MustRegister(temp) + temp.WithLabelValues("outside").Set(273.14) + temp.WithLabelValues("inside").Set(298.44) + + var parser expfmt.TextParser + + text := ` +# TYPE humidity_percent gauge +# HELP humidity_percent Humidity in %. +humidity_percent{location="outside"} 45.4 +humidity_percent{location="inside"} 33.2 +# TYPE temperature_kelvin gauge +# HELP temperature_kelvin Temperature in Kelvin. +temperature_kelvin{location="somewhere else"} 4.5 +` + + parseText := func() ([]*dto.MetricFamily, error) { + parsed, err := parser.TextToMetricFamilies(strings.NewReader(text)) + if err != nil { + return nil, err + } + var result []*dto.MetricFamily + for _, mf := range parsed { + result = append(result, mf) + } + return result, nil + } + + gatherers := prometheus.Gatherers{ + reg, + prometheus.GathererFunc(parseText), + } + + gathering, err := gatherers.Gather() + if err != nil { + fmt.Println(err) + } + + out := &bytes.Buffer{} + for _, mf := range gathering { + if _, err := expfmt.MetricFamilyToText(out, mf); err != nil { + panic(err) + } + } + fmt.Print(out.String()) + fmt.Println("----------") + + // Note how the temperature_kelvin metric family has been merged from + // different sources. Now try + text = ` +# TYPE humidity_percent gauge +# HELP humidity_percent Humidity in %. +humidity_percent{location="outside"} 45.4 +humidity_percent{location="inside"} 33.2 +# TYPE temperature_kelvin gauge +# HELP temperature_kelvin Temperature in Kelvin. +# Duplicate metric: +temperature_kelvin{location="outside"} 265.3 + # Wrong labels: +temperature_kelvin 4.5 +` + + gathering, err = gatherers.Gather() + if err != nil { + fmt.Println(err) + } + // Note that still as many metrics as possible are returned: + out.Reset() + for _, mf := range gathering { + if _, err := expfmt.MetricFamilyToText(out, mf); err != nil { + panic(err) + } + } + fmt.Print(out.String()) + + // Output: + // # HELP humidity_percent Humidity in %. + // # TYPE humidity_percent gauge + // humidity_percent{location="inside"} 33.2 + // humidity_percent{location="outside"} 45.4 + // # HELP temperature_kelvin Temperature in Kelvin. + // # TYPE temperature_kelvin gauge + // temperature_kelvin{location="inside"} 298.44 + // temperature_kelvin{location="outside"} 273.14 + // temperature_kelvin{location="somewhere else"} 4.5 + // ---------- + // 2 error(s) occurred: + // * collected metric temperature_kelvin label: gauge: was collected before with the same name and label values + // * collected metric temperature_kelvin gauge: has label dimensions inconsistent with previously collected metrics in the same metric family + // # HELP humidity_percent Humidity in %. + // # TYPE humidity_percent gauge + // humidity_percent{location="inside"} 33.2 + // humidity_percent{location="outside"} 45.4 + // # HELP temperature_kelvin Temperature in Kelvin. + // # TYPE temperature_kelvin gauge + // temperature_kelvin{location="inside"} 298.44 + // temperature_kelvin{location="outside"} 273.14 +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/expvar.go b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go similarity index 81% rename from vendor/github.com/prometheus/client_golang/prometheus/expvar.go rename to vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go index 0f7630d..18a99d5 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/expvar.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector.go @@ -18,21 +18,21 @@ import ( "expvar" ) -// ExpvarCollector collects metrics from the expvar interface. It provides a -// quick way to expose numeric values that are already exported via expvar as -// Prometheus metrics. Note that the data models of expvar and Prometheus are -// fundamentally different, and that the ExpvarCollector is inherently -// slow. Thus, the ExpvarCollector is probably great for experiments and -// prototying, but you should seriously consider a more direct implementation of -// Prometheus metrics for monitoring production systems. -// -// Use NewExpvarCollector to create new instances. -type ExpvarCollector struct { +type expvarCollector struct { exports map[string]*Desc } -// NewExpvarCollector returns a newly allocated ExpvarCollector that still has -// to be registered with the Prometheus registry. +// NewExpvarCollector returns a newly allocated expvar Collector that still has +// to be registered with a Prometheus registry. +// +// An expvar Collector collects metrics from the expvar interface. It provides a +// quick way to expose numeric values that are already exported via expvar as +// Prometheus metrics. Note that the data models of expvar and Prometheus are +// fundamentally different, and that the expvar Collector is inherently slower +// than native Prometheus metrics. Thus, the expvar Collector is probably great +// for experiments and prototying, but you should seriously consider a more +// direct implementation of Prometheus metrics for monitoring production +// systems. // // The exports map has the following meaning: // @@ -59,21 +59,21 @@ type ExpvarCollector struct { // sample values. // // Anything that does not fit into the scheme above is silently ignored. -func NewExpvarCollector(exports map[string]*Desc) *ExpvarCollector { - return &ExpvarCollector{ +func NewExpvarCollector(exports map[string]*Desc) Collector { + return &expvarCollector{ exports: exports, } } // Describe implements Collector. -func (e *ExpvarCollector) Describe(ch chan<- *Desc) { +func (e *expvarCollector) Describe(ch chan<- *Desc) { for _, desc := range e.exports { ch <- desc } } // Collect implements Collector. -func (e *ExpvarCollector) Collect(ch chan<- Metric) { +func (e *expvarCollector) Collect(ch chan<- Metric) { for name, desc := range e.exports { var m Metric expVar := expvar.Get(name) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/expvar_test.go b/vendor/github.com/prometheus/client_golang/prometheus/expvar_collector_test.go similarity index 100% rename from vendor/github.com/prometheus/client_golang/prometheus/expvar_test.go rename to vendor/github.com/prometheus/client_golang/prometheus/expvar_collector_test.go diff --git a/vendor/github.com/prometheus/client_golang/prometheus/fnv.go b/vendor/github.com/prometheus/client_golang/prometheus/fnv.go new file mode 100644 index 0000000..e3b67df --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/fnv.go @@ -0,0 +1,29 @@ +package prometheus + +// Inline and byte-free variant of hash/fnv's fnv64a. + +const ( + offset64 = 14695981039346656037 + prime64 = 1099511628211 +) + +// hashNew initializies a new fnv64a hash value. +func hashNew() uint64 { + return offset64 +} + +// hashAdd adds a string to a fnv64a hash value, returning the updated hash. +func hashAdd(h uint64, s string) uint64 { + for i := 0; i < len(s); i++ { + h ^= uint64(s[i]) + h *= prime64 + } + return h +} + +// hashAddByte adds a byte to a fnv64a hash value, returning the updated hash. +func hashAddByte(h uint64, b byte) uint64 { + h ^= uint64(b) + h *= prime64 + return h +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go index ba8a402..8b70e51 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go @@ -13,8 +13,6 @@ package prometheus -import "hash/fnv" - // Gauge is a Metric that represents a single numerical value that can // arbitrarily go up and down. // @@ -60,7 +58,7 @@ func NewGauge(opts GaugeOpts) Gauge { // (e.g. number of operations queued, partitioned by user and operation // type). Create instances with NewGaugeVec. type GaugeVec struct { - MetricVec + *MetricVec } // NewGaugeVec creates a new GaugeVec based on the provided GaugeOpts and @@ -74,14 +72,9 @@ func NewGaugeVec(opts GaugeOpts, labelNames []string) *GaugeVec { opts.ConstLabels, ) return &GaugeVec{ - MetricVec: MetricVec{ - children: map[uint64]Metric{}, - desc: desc, - hash: fnv.New64a(), - newMetric: func(lvs ...string) Metric { - return newValue(desc, GaugeValue, 0, lvs...) - }, - }, + MetricVec: newMetricVec(desc, func(lvs ...string) Metric { + return newValue(desc, GaugeValue, 0, lvs...) + }), } } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go index 85fa20b..abc9d4e 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go @@ -1,6 +1,7 @@ package prometheus import ( + "fmt" "runtime" "runtime/debug" "time" @@ -9,27 +10,226 @@ import ( type goCollector struct { goroutines Gauge gcDesc *Desc + + // metrics to describe and collect + metrics memStatsMetrics } // NewGoCollector returns a collector which exports metrics about the current // go process. -func NewGoCollector() *goCollector { +func NewGoCollector() Collector { return &goCollector{ goroutines: NewGauge(GaugeOpts{ - Name: "go_goroutines", - Help: "Number of goroutines that currently exist.", + Namespace: "go", + Name: "goroutines", + Help: "Number of goroutines that currently exist.", }), gcDesc: NewDesc( "go_gc_duration_seconds", "A summary of the GC invocation durations.", nil, nil), + metrics: memStatsMetrics{ + { + desc: NewDesc( + memstatNamespace("alloc_bytes"), + "Number of bytes allocated and still in use.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Alloc) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("alloc_bytes_total"), + "Total number of bytes allocated, even if freed.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.TotalAlloc) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("sys_bytes"), + "Number of bytes obtained by system. Sum of all system allocations.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Sys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("lookups_total"), + "Total number of pointer lookups.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Lookups) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("mallocs_total"), + "Total number of mallocs.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Mallocs) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("frees_total"), + "Total number of frees.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.Frees) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("heap_alloc_bytes"), + "Number of heap bytes allocated and still in use.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapAlloc) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("heap_sys_bytes"), + "Number of heap bytes obtained from system.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("heap_idle_bytes"), + "Number of heap bytes waiting to be used.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapIdle) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("heap_inuse_bytes"), + "Number of heap bytes that are in use.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapInuse) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("heap_released_bytes_total"), + "Total number of heap bytes released to OS.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapReleased) }, + valType: CounterValue, + }, { + desc: NewDesc( + memstatNamespace("heap_objects"), + "Number of allocated objects.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.HeapObjects) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("stack_inuse_bytes"), + "Number of bytes in use by the stack allocator.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackInuse) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("stack_sys_bytes"), + "Number of bytes obtained from system for stack allocator.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.StackSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("mspan_inuse_bytes"), + "Number of bytes in use by mspan structures.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanInuse) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("mspan_sys_bytes"), + "Number of bytes used for mspan structures obtained from system.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.MSpanSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("mcache_inuse_bytes"), + "Number of bytes in use by mcache structures.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheInuse) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("mcache_sys_bytes"), + "Number of bytes used for mcache structures obtained from system.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.MCacheSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("buck_hash_sys_bytes"), + "Number of bytes used by the profiling bucket hash table.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.BuckHashSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("gc_sys_bytes"), + "Number of bytes used for garbage collection system metadata.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.GCSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("other_sys_bytes"), + "Number of bytes used for other system allocations.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.OtherSys) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("next_gc_bytes"), + "Number of heap bytes when next garbage collection will take place.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.NextGC) }, + valType: GaugeValue, + }, { + desc: NewDesc( + memstatNamespace("last_gc_time_seconds"), + "Number of seconds since 1970 of last garbage collection.", + nil, nil, + ), + eval: func(ms *runtime.MemStats) float64 { return float64(ms.LastGC) / 1e9 }, + valType: GaugeValue, + }, + }, } } +func memstatNamespace(s string) string { + return fmt.Sprintf("go_memstats_%s", s) +} + // Describe returns all descriptions of the collector. func (c *goCollector) Describe(ch chan<- *Desc) { ch <- c.goroutines.Desc() ch <- c.gcDesc + + for _, i := range c.metrics { + ch <- i.desc + } } // Collect returns the current state of all metrics of the collector. @@ -47,4 +247,17 @@ func (c *goCollector) Collect(ch chan<- Metric) { } quantiles[0.0] = stats.PauseQuantiles[0].Seconds() ch <- MustNewConstSummary(c.gcDesc, uint64(stats.NumGC), float64(stats.PauseTotal.Seconds()), quantiles) + + ms := &runtime.MemStats{} + runtime.ReadMemStats(ms) + for _, i := range c.metrics { + ch <- MustNewConstMetric(i.desc, i.valType, i.eval(ms)) + } +} + +// memStatsMetrics provide description, value, and value type for memstat metrics. +type memStatsMetrics []struct { + desc *Desc + eval func(*runtime.MemStats) float64 + valType ValueType } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_test.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_test.go index b75d28e..9a8858c 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector_test.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector_test.go @@ -50,6 +50,10 @@ func TestGoCollector(t *testing.T) { t.Errorf("want 1 new goroutine, got %d", diff) } + // GoCollector performs two sends per call. + // On line 27 we need to receive the second send + // to shut down cleanly. + <-ch return } case <-time.After(1 * time.Second): diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index a94bbaf..9719e8f 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -15,14 +15,12 @@ package prometheus import ( "fmt" - "hash/fnv" "math" "sort" "sync/atomic" "github.com/golang/protobuf/proto" - "github.com/prometheus/client_golang/model" dto "github.com/prometheus/client_model/go" ) @@ -49,15 +47,19 @@ type Histogram interface { Observe(float64) } +// bucketLabel is used for the label that defines the upper bound of a +// bucket of a histogram ("le" -> "less or equal"). +const bucketLabel = "le" + +// DefBuckets are the default Histogram buckets. The default buckets are +// tailored to broadly measure the response time (in seconds) of a network +// service. Most likely, however, you will be required to define buckets +// customized to your use case. var ( - // DefBuckets are the default Histogram buckets. The default buckets are - // tailored to broadly measure the response time (in seconds) of a - // network service. Most likely, however, you will be required to define - // buckets customized to your use case. DefBuckets = []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10} errBucketLabelNotAllowed = fmt.Errorf( - "%q is not allowed as label name in histograms", model.BucketLabel, + "%q is not allowed as label name in histograms", bucketLabel, ) ) @@ -171,12 +173,12 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr } for _, n := range desc.variableLabels { - if n == model.BucketLabel { + if n == bucketLabel { panic(errBucketLabelNotAllowed) } } for _, lp := range desc.constLabelPairs { - if lp.GetName() == model.BucketLabel { + if lp.GetName() == bucketLabel { panic(errBucketLabelNotAllowed) } } @@ -208,7 +210,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr // Finally we know the final length of h.upperBounds and can make counts. h.counts = make([]uint64, len(h.upperBounds)) - h.Init(h) // Init self-collection. + h.init(h) // Init self-collection. return h } @@ -220,7 +222,7 @@ type histogram struct { sumBits uint64 count uint64 - SelfCollector + selfCollector // Note that there is no mutex required. desc *Desc @@ -285,7 +287,7 @@ func (h *histogram) Write(out *dto.Metric) error { // (e.g. HTTP request latencies, partitioned by status code and method). Create // instances with NewHistogramVec. type HistogramVec struct { - MetricVec + *MetricVec } // NewHistogramVec creates a new HistogramVec based on the provided HistogramOpts and @@ -299,14 +301,9 @@ func NewHistogramVec(opts HistogramOpts, labelNames []string) *HistogramVec { opts.ConstLabels, ) return &HistogramVec{ - MetricVec: MetricVec{ - children: map[uint64]Metric{}, - desc: desc, - hash: fnv.New64a(), - newMetric: func(lvs ...string) Metric { - return newHistogram(desc, opts, lvs...) - }, - }, + MetricVec: newMetricVec(desc, func(lvs ...string) Metric { + return newHistogram(desc, opts, lvs...) + }), } } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram_test.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram_test.go index 855af46..d1242e0 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram_test.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram_test.go @@ -124,6 +124,10 @@ func BenchmarkHistogramWrite8(b *testing.B) { var testBuckets = []float64{-2, -1, -0.5, 0, 0.5, 1, 2, math.Inf(+1)} func TestHistogramConcurrency(t *testing.T) { + if testing.Short() { + t.Skip("Skipping test in short mode.") + } + rand.Seed(42) it := func(n uint32) bool { @@ -198,6 +202,10 @@ func TestHistogramConcurrency(t *testing.T) { } func TestHistogramVecConcurrency(t *testing.T) { + if testing.Short() { + t.Skip("Skipping test in short mode.") + } + rand.Seed(42) objectives := make([]float64, 0, len(DefObjectives)) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/http.go b/vendor/github.com/prometheus/client_golang/prometheus/http.go index eabe602..67ee5ac 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/http.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/http.go @@ -15,14 +15,114 @@ package prometheus import ( "bufio" + "bytes" + "compress/gzip" + "fmt" "io" "net" "net/http" "strconv" "strings" + "sync" "time" + + "github.com/prometheus/common/expfmt" ) +// TODO(beorn7): Remove this whole file. It is a partial mirror of +// promhttp/http.go (to avoid circular import chains) where everything HTTP +// related should live. The functions here are just for avoiding +// breakage. Everything is deprecated. + +const ( + contentTypeHeader = "Content-Type" + contentLengthHeader = "Content-Length" + contentEncodingHeader = "Content-Encoding" + acceptEncodingHeader = "Accept-Encoding" +) + +var bufPool sync.Pool + +func getBuf() *bytes.Buffer { + buf := bufPool.Get() + if buf == nil { + return &bytes.Buffer{} + } + return buf.(*bytes.Buffer) +} + +func giveBuf(buf *bytes.Buffer) { + buf.Reset() + bufPool.Put(buf) +} + +// Handler returns an HTTP handler for the DefaultGatherer. It is +// already instrumented with InstrumentHandler (using "prometheus" as handler +// name). +// +// Deprecated: Please note the issues described in the doc comment of +// InstrumentHandler. You might want to consider using promhttp.Handler instead +// (which is non instrumented). +func Handler() http.Handler { + return InstrumentHandler("prometheus", UninstrumentedHandler()) +} + +// UninstrumentedHandler returns an HTTP handler for the DefaultGatherer. +// +// Deprecated: Use promhttp.Handler instead. See there for further documentation. +func UninstrumentedHandler() http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + mfs, err := DefaultGatherer.Gather() + if err != nil { + http.Error(w, "An error has occurred during metrics collection:\n\n"+err.Error(), http.StatusInternalServerError) + return + } + + contentType := expfmt.Negotiate(req.Header) + buf := getBuf() + defer giveBuf(buf) + writer, encoding := decorateWriter(req, buf) + enc := expfmt.NewEncoder(writer, contentType) + var lastErr error + for _, mf := range mfs { + if err := enc.Encode(mf); err != nil { + lastErr = err + http.Error(w, "An error has occurred during metrics encoding:\n\n"+err.Error(), http.StatusInternalServerError) + return + } + } + if closer, ok := writer.(io.Closer); ok { + closer.Close() + } + if lastErr != nil && buf.Len() == 0 { + http.Error(w, "No metrics encoded, last error:\n\n"+err.Error(), http.StatusInternalServerError) + return + } + header := w.Header() + header.Set(contentTypeHeader, string(contentType)) + header.Set(contentLengthHeader, fmt.Sprint(buf.Len())) + if encoding != "" { + header.Set(contentEncodingHeader, encoding) + } + w.Write(buf.Bytes()) + }) +} + +// decorateWriter wraps a writer to handle gzip compression if requested. It +// returns the decorated writer and the appropriate "Content-Encoding" header +// (which is empty if no compression is enabled). +func decorateWriter(request *http.Request, writer io.Writer) (io.Writer, string) { + header := request.Header.Get(acceptEncodingHeader) + parts := strings.Split(header, ",") + for _, part := range parts { + part := strings.TrimSpace(part) + if part == "gzip" || strings.HasPrefix(part, "gzip;") { + return gzip.NewWriter(writer), "gzip" + } + } + return writer, "" +} + var instLabels = []string{"method", "code"} type nower interface { @@ -57,12 +157,34 @@ func nowSeries(t ...time.Time) nower { // has a constant label named "handler" with the provided handlerName as // value. http_requests_total is a metric vector partitioned by HTTP method // (label name "method") and HTTP status code (label name "code"). +// +// Deprecated: InstrumentHandler has several issues: +// +// - It uses Summaries rather than Histograms. Summaries are not useful if +// aggregation across multiple instances is required. +// +// - It uses microseconds as unit, which is deprecated and should be replaced by +// seconds. +// +// - The size of the request is calculated in a separate goroutine. Since this +// calculator requires access to the request header, it creates a race with +// any writes to the header performed during request handling. +// httputil.ReverseProxy is a prominent example for a handler +// performing such writes. +// +// Upcoming versions of this package will provide ways of instrumenting HTTP +// handlers that are more flexible and have fewer issues. Please prefer direct +// instrumentation in the meantime. func InstrumentHandler(handlerName string, handler http.Handler) http.HandlerFunc { return InstrumentHandlerFunc(handlerName, handler.ServeHTTP) } // InstrumentHandlerFunc wraps the given function for instrumentation. It -// otherwise works in the same way as InstrumentHandler. +// otherwise works in the same way as InstrumentHandler (and shares the same +// issues). +// +// Deprecated: InstrumentHandlerFunc is deprecated for the same reasons as +// InstrumentHandler is. func InstrumentHandlerFunc(handlerName string, handlerFunc func(http.ResponseWriter, *http.Request)) http.HandlerFunc { return InstrumentHandlerFuncWithOpts( SummaryOpts{ @@ -73,13 +195,13 @@ func InstrumentHandlerFunc(handlerName string, handlerFunc func(http.ResponseWri ) } -// InstrumentHandlerWithOpts works like InstrumentHandler but provides more -// flexibility (at the cost of a more complex call syntax). As -// InstrumentHandler, this function registers four metric collectors, but it -// uses the provided SummaryOpts to create them. However, the fields "Name" and -// "Help" in the SummaryOpts are ignored. "Name" is replaced by -// "requests_total", "request_duration_microseconds", "request_size_bytes", and -// "response_size_bytes", respectively. "Help" is replaced by an appropriate +// InstrumentHandlerWithOpts works like InstrumentHandler (and shares the same +// issues) but provides more flexibility (at the cost of a more complex call +// syntax). As InstrumentHandler, this function registers four metric +// collectors, but it uses the provided SummaryOpts to create them. However, the +// fields "Name" and "Help" in the SummaryOpts are ignored. "Name" is replaced +// by "requests_total", "request_duration_microseconds", "request_size_bytes", +// and "response_size_bytes", respectively. "Help" is replaced by an appropriate // help string. The names of the variable labels of the http_requests_total // CounterVec are "method" (get, post, etc.), and "code" (HTTP status code). // @@ -98,13 +220,20 @@ func InstrumentHandlerFunc(handlerName string, handlerFunc func(http.ResponseWri // cannot use SummaryOpts. Instead, a CounterOpts struct is created internally, // and all its fields are set to the equally named fields in the provided // SummaryOpts. +// +// Deprecated: InstrumentHandlerWithOpts is deprecated for the same reasons as +// InstrumentHandler is. func InstrumentHandlerWithOpts(opts SummaryOpts, handler http.Handler) http.HandlerFunc { return InstrumentHandlerFuncWithOpts(opts, handler.ServeHTTP) } -// InstrumentHandlerFuncWithOpts works like InstrumentHandlerFunc but provides -// more flexibility (at the cost of a more complex call syntax). See -// InstrumentHandlerWithOpts for details how the provided SummaryOpts are used. +// InstrumentHandlerFuncWithOpts works like InstrumentHandlerFunc (and shares +// the same issues) but provides more flexibility (at the cost of a more complex +// call syntax). See InstrumentHandlerWithOpts for details how the provided +// SummaryOpts are used. +// +// Deprecated: InstrumentHandlerFuncWithOpts is deprecated for the same reasons +// as InstrumentHandler is. func InstrumentHandlerFuncWithOpts(opts SummaryOpts, handlerFunc func(http.ResponseWriter, *http.Request)) http.HandlerFunc { reqCnt := NewCounterVec( CounterOpts{ diff --git a/vendor/github.com/prometheus/client_golang/prometheus/metric.go b/vendor/github.com/prometheus/client_golang/prometheus/metric.go index d8905de..d4063d9 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/metric.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/metric.go @@ -19,11 +19,11 @@ import ( dto "github.com/prometheus/client_model/go" ) +const separatorByte byte = 255 + // A Metric models a single sample value with its meta data being exported to -// Prometheus. Implementers of Metric in this package inclued Gauge, Counter, -// Untyped, and Summary. Users can implement their own Metric types, but that -// should be rarely needed. See the example for SelfCollector, which is also an -// example for a user-implemented Metric. +// Prometheus. Implementations of Metric in this package are Gauge, Counter, +// Histogram, Summary, and Untyped. type Metric interface { // Desc returns the descriptor for the Metric. This method idempotently // returns the same descriptor throughout the lifetime of the @@ -34,21 +34,23 @@ type Metric interface { // Write encodes the Metric into a "Metric" Protocol Buffer data // transmission object. // - // Implementers of custom Metric types must observe concurrency safety - // as reads of this metric may occur at any time, and any blocking - // occurs at the expense of total performance of rendering all - // registered metrics. Ideally Metric implementations should support - // concurrent readers. + // Metric implementations must observe concurrency safety as reads of + // this metric may occur at any time, and any blocking occurs at the + // expense of total performance of rendering all registered + // metrics. Ideally, Metric implementations should support concurrent + // readers. // - // The Prometheus client library attempts to minimize memory allocations - // and will provide a pre-existing reset dto.Metric pointer. Prometheus - // may recycle the dto.Metric proto message, so Metric implementations - // should just populate the provided dto.Metric and then should not keep - // any reference to it. - // - // While populating dto.Metric, labels must be sorted lexicographically. - // (Implementers may find LabelPairSorter useful for that.) + // While populating dto.Metric, it is the responsibility of the + // implementation to ensure validity of the Metric protobuf (like valid + // UTF-8 strings or syntactically valid metric and label names). It is + // recommended to sort labels lexicographically. (Implementers may find + // LabelPairSorter useful for that.) Callers of Write should still make + // sure of sorting if they depend on it. Write(*dto.Metric) error + // TODO(beorn7): The original rationale of passing in a pre-allocated + // dto.Metric protobuf to save allocations has disappeared. The + // signature of this method should be changed to "Write() (*dto.Metric, + // error)". } // Opts bundles the options for creating most Metric types. Each metric diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go index d8cf0ed..e31e62e 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector.go @@ -28,7 +28,7 @@ type processCollector struct { // NewProcessCollector returns a collector which exports the current state of // process metrics including cpu, memory and file descriptor usage as well as // the process start time for the given process id under the given namespace. -func NewProcessCollector(pid int, namespace string) *processCollector { +func NewProcessCollector(pid int, namespace string) Collector { return NewProcessCollectorPIDFn( func() (int, error) { return pid, nil }, namespace, @@ -43,7 +43,7 @@ func NewProcessCollector(pid int, namespace string) *processCollector { func NewProcessCollectorPIDFn( pidFn func() (int, error), namespace string, -) *processCollector { +) Collector { c := processCollector{ pidFn: pidFn, collectFn: func(chan<- Metric) {}, diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_test.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_test.go index 829715a..d3362da 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_test.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_test.go @@ -1,13 +1,12 @@ package prometheus import ( - "io/ioutil" - "net/http" - "net/http/httptest" + "bytes" "os" "regexp" "testing" + "github.com/prometheus/common/expfmt" "github.com/prometheus/procfs" ) @@ -16,39 +15,44 @@ func TestProcessCollector(t *testing.T) { t.Skipf("skipping TestProcessCollector, procfs not available: %s", err) } - registry := newRegistry() - registry.Register(NewProcessCollector(os.Getpid(), "")) - registry.Register(NewProcessCollectorPIDFn( - func() (int, error) { return os.Getpid(), nil }, "foobar")) + registry := NewRegistry() + if err := registry.Register(NewProcessCollector(os.Getpid(), "")); err != nil { + t.Fatal(err) + } + if err := registry.Register(NewProcessCollectorPIDFn( + func() (int, error) { return os.Getpid(), nil }, "foobar"), + ); err != nil { + t.Fatal(err) + } - s := httptest.NewServer(InstrumentHandler("prometheus", registry)) - defer s.Close() - r, err := http.Get(s.URL) + mfs, err := registry.Gather() if err != nil { t.Fatal(err) } - defer r.Body.Close() - body, err := ioutil.ReadAll(r.Body) - if err != nil { - t.Fatal(err) + + var buf bytes.Buffer + for _, mf := range mfs { + if _, err := expfmt.MetricFamilyToText(&buf, mf); err != nil { + t.Fatal(err) + } } for _, re := range []*regexp.Regexp{ regexp.MustCompile("process_cpu_seconds_total [0-9]"), - regexp.MustCompile("process_max_fds [0-9]{2,}"), + regexp.MustCompile("process_max_fds [1-9]"), regexp.MustCompile("process_open_fds [1-9]"), regexp.MustCompile("process_virtual_memory_bytes [1-9]"), regexp.MustCompile("process_resident_memory_bytes [1-9]"), regexp.MustCompile("process_start_time_seconds [0-9.]{10,}"), regexp.MustCompile("foobar_process_cpu_seconds_total [0-9]"), - regexp.MustCompile("foobar_process_max_fds [0-9]{2,}"), + regexp.MustCompile("foobar_process_max_fds [1-9]"), regexp.MustCompile("foobar_process_open_fds [1-9]"), regexp.MustCompile("foobar_process_virtual_memory_bytes [1-9]"), regexp.MustCompile("foobar_process_resident_memory_bytes [1-9]"), regexp.MustCompile("foobar_process_start_time_seconds [0-9.]{10,}"), } { - if !re.Match(body) { - t.Errorf("want body to match %s\n%s", re, body) + if !re.Match(buf.Bytes()) { + t.Errorf("want body to match %s\n%s", re, buf.String()) } } } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go new file mode 100644 index 0000000..b6dd5a2 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go @@ -0,0 +1,201 @@ +// Copyright 2016 The Prometheus 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. + +// Copyright (c) 2013, The Prometheus Authors +// All rights reserved. +// +// Use of this source code is governed by a BSD-style license that can be found +// in the LICENSE file. + +// Package promhttp contains functions to create http.Handler instances to +// expose Prometheus metrics via HTTP. In later versions of this package, it +// will also contain tooling to instrument instances of http.Handler and +// http.RoundTripper. +// +// promhttp.Handler acts on the prometheus.DefaultGatherer. With HandlerFor, +// you can create a handler for a custom registry or anything that implements +// the Gatherer interface. It also allows to create handlers that act +// differently on errors or allow to log errors. +package promhttp + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "net/http" + "strings" + "sync" + + "github.com/prometheus/common/expfmt" + + "github.com/prometheus/client_golang/prometheus" +) + +const ( + contentTypeHeader = "Content-Type" + contentLengthHeader = "Content-Length" + contentEncodingHeader = "Content-Encoding" + acceptEncodingHeader = "Accept-Encoding" +) + +var bufPool sync.Pool + +func getBuf() *bytes.Buffer { + buf := bufPool.Get() + if buf == nil { + return &bytes.Buffer{} + } + return buf.(*bytes.Buffer) +} + +func giveBuf(buf *bytes.Buffer) { + buf.Reset() + bufPool.Put(buf) +} + +// Handler returns an HTTP handler for the prometheus.DefaultGatherer. The +// Handler uses the default HandlerOpts, i.e. report the first error as an HTTP +// error, no error logging, and compression if requested by the client. +// +// If you want to create a Handler for the DefaultGatherer with different +// HandlerOpts, create it with HandlerFor with prometheus.DefaultGatherer and +// your desired HandlerOpts. +func Handler() http.Handler { + return HandlerFor(prometheus.DefaultGatherer, HandlerOpts{}) +} + +// HandlerFor returns an http.Handler for the provided Gatherer. The behavior +// of the Handler is defined by the provided HandlerOpts. +func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { + mfs, err := reg.Gather() + if err != nil { + if opts.ErrorLog != nil { + opts.ErrorLog.Println("error gathering metrics:", err) + } + switch opts.ErrorHandling { + case PanicOnError: + panic(err) + case ContinueOnError: + if len(mfs) == 0 { + http.Error(w, "No metrics gathered, last error:\n\n"+err.Error(), http.StatusInternalServerError) + return + } + case HTTPErrorOnError: + http.Error(w, "An error has occurred during metrics gathering:\n\n"+err.Error(), http.StatusInternalServerError) + return + } + } + + contentType := expfmt.Negotiate(req.Header) + buf := getBuf() + defer giveBuf(buf) + writer, encoding := decorateWriter(req, buf, opts.DisableCompression) + enc := expfmt.NewEncoder(writer, contentType) + var lastErr error + for _, mf := range mfs { + if err := enc.Encode(mf); err != nil { + lastErr = err + if opts.ErrorLog != nil { + opts.ErrorLog.Println("error encoding metric family:", err) + } + switch opts.ErrorHandling { + case PanicOnError: + panic(err) + case ContinueOnError: + // Handled later. + case HTTPErrorOnError: + http.Error(w, "An error has occurred during metrics encoding:\n\n"+err.Error(), http.StatusInternalServerError) + return + } + } + } + if closer, ok := writer.(io.Closer); ok { + closer.Close() + } + if lastErr != nil && buf.Len() == 0 { + http.Error(w, "No metrics encoded, last error:\n\n"+err.Error(), http.StatusInternalServerError) + return + } + header := w.Header() + header.Set(contentTypeHeader, string(contentType)) + header.Set(contentLengthHeader, fmt.Sprint(buf.Len())) + if encoding != "" { + header.Set(contentEncodingHeader, encoding) + } + w.Write(buf.Bytes()) + // TODO(beorn7): Consider streaming serving of metrics. + }) +} + +// HandlerErrorHandling defines how a Handler serving metrics will handle +// errors. +type HandlerErrorHandling int + +// These constants cause handlers serving metrics to behave as described if +// errors are encountered. +const ( + // Serve an HTTP status code 500 upon the first error + // encountered. Report the error message in the body. + HTTPErrorOnError HandlerErrorHandling = iota + // Ignore errors and try to serve as many metrics as possible. However, + // if no metrics can be served, serve an HTTP status code 500 and the + // last error message in the body. Only use this in deliberate "best + // effort" metrics collection scenarios. It is recommended to at least + // log errors (by providing an ErrorLog in HandlerOpts) to not mask + // errors completely. + ContinueOnError + // Panic upon the first error encountered (useful for "crash only" apps). + PanicOnError +) + +// Logger is the minimal interface HandlerOpts needs for logging. Note that +// log.Logger from the standard library implements this interface, and it is +// easy to implement by custom loggers, if they don't do so already anyway. +type Logger interface { + Println(v ...interface{}) +} + +// HandlerOpts specifies options how to serve metrics via an http.Handler. The +// zero value of HandlerOpts is a reasonable default. +type HandlerOpts struct { + // ErrorLog specifies an optional logger for errors collecting and + // serving metrics. If nil, errors are not logged at all. + ErrorLog Logger + // ErrorHandling defines how errors are handled. Note that errors are + // logged regardless of the configured ErrorHandling provided ErrorLog + // is not nil. + ErrorHandling HandlerErrorHandling + // If DisableCompression is true, the handler will never compress the + // response, even if requested by the client. + DisableCompression bool +} + +// decorateWriter wraps a writer to handle gzip compression if requested. It +// returns the decorated writer and the appropriate "Content-Encoding" header +// (which is empty if no compression is enabled). +func decorateWriter(request *http.Request, writer io.Writer, compressionDisabled bool) (io.Writer, string) { + if compressionDisabled { + return writer, "" + } + header := request.Header.Get(acceptEncodingHeader) + parts := strings.Split(header, ",") + for _, part := range parts { + part := strings.TrimSpace(part) + if part == "gzip" || strings.HasPrefix(part, "gzip;") { + return gzip.NewWriter(writer), "gzip" + } + } + return writer, "" +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http_test.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http_test.go new file mode 100644 index 0000000..d4a7d4a --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http_test.go @@ -0,0 +1,137 @@ +// Copyright 2016 The Prometheus 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. + +// Copyright (c) 2013, The Prometheus Authors +// All rights reserved. +// +// Use of this source code is governed by a BSD-style license that can be found +// in the LICENSE file. + +package promhttp + +import ( + "bytes" + "errors" + "log" + "net/http" + "net/http/httptest" + "testing" + + "github.com/prometheus/client_golang/prometheus" +) + +type errorCollector struct{} + +func (e errorCollector) Describe(ch chan<- *prometheus.Desc) { + ch <- prometheus.NewDesc("invalid_metric", "not helpful", nil, nil) +} + +func (e errorCollector) Collect(ch chan<- prometheus.Metric) { + ch <- prometheus.NewInvalidMetric( + prometheus.NewDesc("invalid_metric", "not helpful", nil, nil), + errors.New("collect error"), + ) +} + +func TestHandlerErrorHandling(t *testing.T) { + + // Create a registry that collects a MetricFamily with two elements, + // another with one, and reports an error. + reg := prometheus.NewRegistry() + + cnt := prometheus.NewCounter(prometheus.CounterOpts{ + Name: "the_count", + Help: "Ah-ah-ah! Thunder and lightning!", + }) + reg.MustRegister(cnt) + + cntVec := prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "name", + Help: "docstring", + ConstLabels: prometheus.Labels{"constname": "constvalue"}, + }, + []string{"labelname"}, + ) + cntVec.WithLabelValues("val1").Inc() + cntVec.WithLabelValues("val2").Inc() + reg.MustRegister(cntVec) + + reg.MustRegister(errorCollector{}) + + logBuf := &bytes.Buffer{} + logger := log.New(logBuf, "", 0) + + writer := httptest.NewRecorder() + request, _ := http.NewRequest("GET", "/", nil) + request.Header.Add("Accept", "test/plain") + + errorHandler := HandlerFor(reg, HandlerOpts{ + ErrorLog: logger, + ErrorHandling: HTTPErrorOnError, + }) + continueHandler := HandlerFor(reg, HandlerOpts{ + ErrorLog: logger, + ErrorHandling: ContinueOnError, + }) + panicHandler := HandlerFor(reg, HandlerOpts{ + ErrorLog: logger, + ErrorHandling: PanicOnError, + }) + wantMsg := `error gathering metrics: error collecting metric Desc{fqName: "invalid_metric", help: "not helpful", constLabels: {}, variableLabels: []}: collect error +` + wantErrorBody := `An error has occurred during metrics gathering: + +error collecting metric Desc{fqName: "invalid_metric", help: "not helpful", constLabels: {}, variableLabels: []}: collect error +` + wantOKBody := `# HELP name docstring +# TYPE name counter +name{constname="constvalue",labelname="val1"} 1 +name{constname="constvalue",labelname="val2"} 1 +# HELP the_count Ah-ah-ah! Thunder and lightning! +# TYPE the_count counter +the_count 0 +` + + errorHandler.ServeHTTP(writer, request) + if got, want := writer.Code, http.StatusInternalServerError; got != want { + t.Errorf("got HTTP status code %d, want %d", got, want) + } + if got := logBuf.String(); got != wantMsg { + t.Errorf("got log message:\n%s\nwant log mesage:\n%s\n", got, wantMsg) + } + if got := writer.Body.String(); got != wantErrorBody { + t.Errorf("got body:\n%s\nwant body:\n%s\n", got, wantErrorBody) + } + logBuf.Reset() + writer.Body.Reset() + writer.Code = http.StatusOK + + continueHandler.ServeHTTP(writer, request) + if got, want := writer.Code, http.StatusOK; got != want { + t.Errorf("got HTTP status code %d, want %d", got, want) + } + if got := logBuf.String(); got != wantMsg { + t.Errorf("got log message %q, want %q", got, wantMsg) + } + if got := writer.Body.String(); got != wantOKBody { + t.Errorf("got body %q, want %q", got, wantOKBody) + } + + defer func() { + if err := recover(); err == nil { + t.Error("expected panic from panicHandler") + } + }() + panicHandler.ServeHTTP(writer, request) +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/push.go b/vendor/github.com/prometheus/client_golang/prometheus/push.go deleted file mode 100644 index 1c33848..0000000 --- a/vendor/github.com/prometheus/client_golang/prometheus/push.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2015 The Prometheus 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. - -// Copyright (c) 2013, The Prometheus Authors -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be found -// in the LICENSE file. - -package prometheus - -// Push triggers a metric collection by the default registry and pushes all -// collected metrics to the Pushgateway specified by addr. See the Pushgateway -// documentation for detailed implications of the job and instance -// parameter. instance can be left empty. You can use just host:port or ip:port -// as url, in which case 'http://' is added automatically. You can also include -// the schema in the URL. However, do not include the '/metrics/jobs/...' part. -// -// Note that all previously pushed metrics with the same job and instance will -// be replaced with the metrics pushed by this call. (It uses HTTP method 'PUT' -// to push to the Pushgateway.) -func Push(job, instance, url string) error { - return defRegistry.Push(job, instance, url, "PUT") -} - -// PushAdd works like Push, but only previously pushed metrics with the same -// name (and the same job and instance) will be replaced. (It uses HTTP method -// 'POST' to push to the Pushgateway.) -func PushAdd(job, instance, url string) error { - return defRegistry.Push(job, instance, url, "POST") -} - -// PushCollectors works like Push, but it does not collect from the default -// registry. Instead, it collects from the provided collectors. It is a -// convenient way to push only a few metrics. -func PushCollectors(job, instance, url string, collectors ...Collector) error { - return pushCollectors(job, instance, url, "PUT", collectors...) -} - -// PushAddCollectors works like PushAdd, but it does not collect from the -// default registry. Instead, it collects from the provided collectors. It is a -// convenient way to push only a few metrics. -func PushAddCollectors(job, instance, url string, collectors ...Collector) error { - return pushCollectors(job, instance, url, "POST", collectors...) -} - -func pushCollectors(job, instance, url, method string, collectors ...Collector) error { - r := newRegistry() - for _, collector := range collectors { - if _, err := r.Register(collector); err != nil { - return err - } - } - return r.Push(job, instance, url, method) -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/push/examples_test.go b/vendor/github.com/prometheus/client_golang/prometheus/push/examples_test.go new file mode 100644 index 0000000..7f17ca2 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/push/examples_test.go @@ -0,0 +1,56 @@ +// Copyright 2016 The Prometheus 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 push_test + +import ( + "fmt" + "time" + + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/push" +) + +func ExampleCollectors() { + completionTime := prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "db_backup_last_completion_timestamp_seconds", + Help: "The timestamp of the last succesful completion of a DB backup.", + }) + completionTime.Set(float64(time.Now().Unix())) + if err := push.Collectors( + "db_backup", push.HostnameGroupingKey(), + "http://pushgateway:9091", + completionTime, + ); err != nil { + fmt.Println("Could not push completion time to Pushgateway:", err) + } +} + +func ExampleRegistry() { + registry := prometheus.NewRegistry() + + completionTime := prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "db_backup_last_completion_timestamp_seconds", + Help: "The timestamp of the last succesful completion of a DB backup.", + }) + registry.MustRegister(completionTime) + + completionTime.Set(float64(time.Now().Unix())) + if err := push.FromGatherer( + "db_backup", push.HostnameGroupingKey(), + "http://pushgateway:9091", + registry, + ); err != nil { + fmt.Println("Could not push completion time to Pushgateway:", err) + } +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/push/push.go b/vendor/github.com/prometheus/client_golang/prometheus/push/push.go new file mode 100644 index 0000000..ae40402 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/push/push.go @@ -0,0 +1,172 @@ +// Copyright 2015 The Prometheus 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. + +// Copyright (c) 2013, The Prometheus Authors +// All rights reserved. +// +// Use of this source code is governed by a BSD-style license that can be found +// in the LICENSE file. + +// Package push provides functions to push metrics to a Pushgateway. The metrics +// to push are either collected from a provided registry, or from explicitly +// listed collectors. +// +// See the documentation of the Pushgateway to understand the meaning of the +// grouping parameters and the differences between push.Registry and +// push.Collectors on the one hand and push.AddRegistry and push.AddCollectors +// on the other hand: https://github.com/prometheus/pushgateway +package push + +import ( + "bytes" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "os" + "strings" + + "github.com/prometheus/common/expfmt" + "github.com/prometheus/common/model" + + "github.com/prometheus/client_golang/prometheus" +) + +const contentTypeHeader = "Content-Type" + +// FromGatherer triggers a metric collection by the provided Gatherer (which is +// usually implemented by a prometheus.Registry) and pushes all gathered metrics +// to the Pushgateway specified by url, using the provided job name and the +// (optional) further grouping labels (the grouping map may be nil). See the +// Pushgateway documentation for detailed implications of the job and other +// grouping labels. Neither the job name nor any grouping label value may +// contain a "/". The metrics pushed must not contain a job label of their own +// nor any of the grouping labels. +// +// You can use just host:port or ip:port as url, in which case 'http://' is +// added automatically. You can also include the schema in the URL. However, do +// not include the '/metrics/jobs/...' part. +// +// Note that all previously pushed metrics with the same job and other grouping +// labels will be replaced with the metrics pushed by this call. (It uses HTTP +// method 'PUT' to push to the Pushgateway.) +func FromGatherer(job string, grouping map[string]string, url string, g prometheus.Gatherer) error { + return push(job, grouping, url, g, "PUT") +} + +// AddFromGatherer works like FromGatherer, but only previously pushed metrics +// with the same name (and the same job and other grouping labels) will be +// replaced. (It uses HTTP method 'POST' to push to the Pushgateway.) +func AddFromGatherer(job string, grouping map[string]string, url string, g prometheus.Gatherer) error { + return push(job, grouping, url, g, "POST") +} + +func push(job string, grouping map[string]string, pushURL string, g prometheus.Gatherer, method string) error { + if !strings.Contains(pushURL, "://") { + pushURL = "http://" + pushURL + } + if strings.HasSuffix(pushURL, "/") { + pushURL = pushURL[:len(pushURL)-1] + } + + if strings.Contains(job, "/") { + return fmt.Errorf("job contains '/': %s", job) + } + urlComponents := []string{url.QueryEscape(job)} + for ln, lv := range grouping { + if !model.LabelNameRE.MatchString(ln) { + return fmt.Errorf("grouping label has invalid name: %s", ln) + } + if strings.Contains(lv, "/") { + return fmt.Errorf("value of grouping label %s contains '/': %s", ln, lv) + } + urlComponents = append(urlComponents, ln, lv) + } + pushURL = fmt.Sprintf("%s/metrics/job/%s", pushURL, strings.Join(urlComponents, "/")) + + mfs, err := g.Gather() + if err != nil { + return err + } + buf := &bytes.Buffer{} + enc := expfmt.NewEncoder(buf, expfmt.FmtProtoDelim) + // Check for pre-existing grouping labels: + for _, mf := range mfs { + for _, m := range mf.GetMetric() { + for _, l := range m.GetLabel() { + if l.GetName() == "job" { + return fmt.Errorf("pushed metric %s (%s) already contains a job label", mf.GetName(), m) + } + if _, ok := grouping[l.GetName()]; ok { + return fmt.Errorf( + "pushed metric %s (%s) already contains grouping label %s", + mf.GetName(), m, l.GetName(), + ) + } + } + } + enc.Encode(mf) + } + req, err := http.NewRequest(method, pushURL, buf) + if err != nil { + return err + } + req.Header.Set(contentTypeHeader, string(expfmt.FmtProtoDelim)) + resp, err := http.DefaultClient.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode != 202 { + body, _ := ioutil.ReadAll(resp.Body) // Ignore any further error as this is for an error message only. + return fmt.Errorf("unexpected status code %d while pushing to %s: %s", resp.StatusCode, pushURL, body) + } + return nil +} + +// Collectors works like FromGatherer, but it does not use a Gatherer. Instead, +// it collects from the provided collectors directly. It is a convenient way to +// push only a few metrics. +func Collectors(job string, grouping map[string]string, url string, collectors ...prometheus.Collector) error { + return pushCollectors(job, grouping, url, "PUT", collectors...) +} + +// AddCollectors works like AddFromGatherer, but it does not use a Gatherer. +// Instead, it collects from the provided collectors directly. It is a +// convenient way to push only a few metrics. +func AddCollectors(job string, grouping map[string]string, url string, collectors ...prometheus.Collector) error { + return pushCollectors(job, grouping, url, "POST", collectors...) +} + +func pushCollectors(job string, grouping map[string]string, url, method string, collectors ...prometheus.Collector) error { + r := prometheus.NewRegistry() + for _, collector := range collectors { + if err := r.Register(collector); err != nil { + return err + } + } + return push(job, grouping, url, r, method) +} + +// HostnameGroupingKey returns a label map with the only entry +// {instance=""}. This can be conveniently used as the grouping +// parameter if metrics should be pushed with the hostname as label. The +// returned map is created upon each call so that the caller is free to add more +// labels to the map. +func HostnameGroupingKey() map[string]string { + hostname, err := os.Hostname() + if err != nil { + return map[string]string{"instance": "unknown"} + } + return map[string]string{"instance": hostname} +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/push/push_test.go b/vendor/github.com/prometheus/client_golang/prometheus/push/push_test.go new file mode 100644 index 0000000..28ed9b7 --- /dev/null +++ b/vendor/github.com/prometheus/client_golang/prometheus/push/push_test.go @@ -0,0 +1,176 @@ +// Copyright 2016 The Prometheus 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. + +// Copyright (c) 2013, The Prometheus Authors +// All rights reserved. +// +// Use of this source code is governed by a BSD-style license that can be found +// in the LICENSE file. + +package push + +import ( + "bytes" + "io/ioutil" + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/prometheus/common/expfmt" + + "github.com/prometheus/client_golang/prometheus" +) + +func TestPush(t *testing.T) { + + var ( + lastMethod string + lastBody []byte + lastPath string + ) + + host, err := os.Hostname() + if err != nil { + t.Error(err) + } + + // Fake a Pushgateway that always responds with 202. + pgwOK := httptest.NewServer( + http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + lastMethod = r.Method + var err error + lastBody, err = ioutil.ReadAll(r.Body) + if err != nil { + t.Fatal(err) + } + lastPath = r.URL.EscapedPath() + w.Header().Set("Content-Type", `text/plain; charset=utf-8`) + w.WriteHeader(http.StatusAccepted) + }), + ) + defer pgwOK.Close() + + // Fake a Pushgateway that always responds with 500. + pgwErr := httptest.NewServer( + http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + http.Error(w, "fake error", http.StatusInternalServerError) + }), + ) + defer pgwErr.Close() + + metric1 := prometheus.NewCounter(prometheus.CounterOpts{ + Name: "testname1", + Help: "testhelp1", + }) + metric2 := prometheus.NewGauge(prometheus.GaugeOpts{ + Name: "testname2", + Help: "testhelp2", + ConstLabels: prometheus.Labels{"foo": "bar", "dings": "bums"}, + }) + + reg := prometheus.NewRegistry() + reg.MustRegister(metric1) + reg.MustRegister(metric2) + + mfs, err := reg.Gather() + if err != nil { + t.Fatal(err) + } + + buf := &bytes.Buffer{} + enc := expfmt.NewEncoder(buf, expfmt.FmtProtoDelim) + + for _, mf := range mfs { + if err := enc.Encode(mf); err != nil { + t.Fatal(err) + } + } + wantBody := buf.Bytes() + + // PushCollectors, all good. + if err := Collectors("testjob", HostnameGroupingKey(), pgwOK.URL, metric1, metric2); err != nil { + t.Fatal(err) + } + if lastMethod != "PUT" { + t.Error("want method PUT for PushCollectors, got", lastMethod) + } + if bytes.Compare(lastBody, wantBody) != 0 { + t.Errorf("got body %v, want %v", lastBody, wantBody) + } + if lastPath != "/metrics/job/testjob/instance/"+host { + t.Error("unexpected path:", lastPath) + } + + // PushAddCollectors, with nil grouping, all good. + if err := AddCollectors("testjob", nil, pgwOK.URL, metric1, metric2); err != nil { + t.Fatal(err) + } + if lastMethod != "POST" { + t.Error("want method POST for PushAddCollectors, got", lastMethod) + } + if bytes.Compare(lastBody, wantBody) != 0 { + t.Errorf("got body %v, want %v", lastBody, wantBody) + } + if lastPath != "/metrics/job/testjob" { + t.Error("unexpected path:", lastPath) + } + + // PushCollectors with a broken PGW. + if err := Collectors("testjob", nil, pgwErr.URL, metric1, metric2); err == nil { + t.Error("push to broken Pushgateway succeeded") + } else { + if got, want := err.Error(), "unexpected status code 500 while pushing to "+pgwErr.URL+"/metrics/job/testjob: fake error\n"; got != want { + t.Errorf("got error %q, want %q", got, want) + } + } + + // PushCollectors with invalid grouping or job. + if err := Collectors("testjob", map[string]string{"foo": "bums"}, pgwErr.URL, metric1, metric2); err == nil { + t.Error("push with grouping contained in metrics succeeded") + } + if err := Collectors("test/job", nil, pgwErr.URL, metric1, metric2); err == nil { + t.Error("push with invalid job value succeeded") + } + if err := Collectors("testjob", map[string]string{"foo/bar": "bums"}, pgwErr.URL, metric1, metric2); err == nil { + t.Error("push with invalid grouping succeeded") + } + if err := Collectors("testjob", map[string]string{"foo-bar": "bums"}, pgwErr.URL, metric1, metric2); err == nil { + t.Error("push with invalid grouping succeeded") + } + + // Push registry, all good. + if err := FromGatherer("testjob", HostnameGroupingKey(), pgwOK.URL, reg); err != nil { + t.Fatal(err) + } + if lastMethod != "PUT" { + t.Error("want method PUT for Push, got", lastMethod) + } + if bytes.Compare(lastBody, wantBody) != 0 { + t.Errorf("got body %v, want %v", lastBody, wantBody) + } + + // PushAdd registry, all good. + if err := AddFromGatherer("testjob", map[string]string{"a": "x", "b": "y"}, pgwOK.URL, reg); err != nil { + t.Fatal(err) + } + if lastMethod != "POST" { + t.Error("want method POSTT for PushAdd, got", lastMethod) + } + if bytes.Compare(lastBody, wantBody) != 0 { + t.Errorf("got body %v, want %v", lastBody, wantBody) + } + if lastPath != "/metrics/job/testjob/a/x/b/y" && lastPath != "/metrics/job/testjob/b/y/a/x" { + t.Error("unexpected path:", lastPath) + } +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry.go b/vendor/github.com/prometheus/client_golang/prometheus/registry.go index 3223193..32a3986 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/registry.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/registry.go @@ -11,223 +11,287 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Copyright (c) 2013, The Prometheus Authors -// All rights reserved. -// -// Use of this source code is governed by a BSD-style license that can be found -// in the LICENSE file. - package prometheus import ( "bytes" - "compress/gzip" "errors" "fmt" - "hash/fnv" - "io" - "net/http" - "net/url" "os" "sort" - "strings" "sync" - "bitbucket.org/ww/goautoneg" "github.com/golang/protobuf/proto" dto "github.com/prometheus/client_model/go" - - "github.com/prometheus/client_golang/model" - "github.com/prometheus/client_golang/text" ) -var ( - defRegistry = newDefaultRegistry() - errAlreadyReg = errors.New("duplicate metrics collector registration attempted") -) - -// Constants relevant to the HTTP interface. const ( - // APIVersion is the version of the format of the exported data. This - // will match this library's version, which subscribes to the Semantic - // Versioning scheme. - APIVersion = "0.0.4" - - // DelimitedTelemetryContentType is the content type set on telemetry - // data responses in delimited protobuf format. - DelimitedTelemetryContentType = `application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited` - // TextTelemetryContentType is the content type set on telemetry data - // responses in text format. - TextTelemetryContentType = `text/plain; version=` + APIVersion - // ProtoTextTelemetryContentType is the content type set on telemetry - // data responses in protobuf text format. (Only used for debugging.) - ProtoTextTelemetryContentType = `application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=text` - // ProtoCompactTextTelemetryContentType is the content type set on - // telemetry data responses in protobuf compact text format. (Only used - // for debugging.) - ProtoCompactTextTelemetryContentType = `application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=compact-text` - - // Constants for object pools. - numBufs = 4 - numMetricFamilies = 1000 - numMetrics = 10000 - // Capacity for the channel to collect metrics and descriptors. capMetricChan = 1000 capDescChan = 10 - - contentTypeHeader = "Content-Type" - contentLengthHeader = "Content-Length" - contentEncodingHeader = "Content-Encoding" - - acceptEncodingHeader = "Accept-Encoding" - acceptHeader = "Accept" ) -// Handler returns the HTTP handler for the global Prometheus registry. It is -// already instrumented with InstrumentHandler (using "prometheus" as handler -// name). Usually the handler is used to handle the "/metrics" endpoint. -func Handler() http.Handler { - return InstrumentHandler("prometheus", defRegistry) +// DefaultRegisterer and DefaultGatherer are the implementations of the +// Registerer and Gatherer interface a number of convenience functions in this +// package act on. Initially, both variables point to the same Registry, which +// has a process collector (see NewProcessCollector) and a Go collector (see +// NewGoCollector) already registered. This approach to keep default instances +// as global state mirrors the approach of other packages in the Go standard +// library. Note that there are caveats. Change the variables with caution and +// only if you understand the consequences. Users who want to avoid global state +// altogether should not use the convenience function and act on custom +// instances instead. +var ( + defaultRegistry = NewRegistry() + DefaultRegisterer Registerer = defaultRegistry + DefaultGatherer Gatherer = defaultRegistry +) + +func init() { + MustRegister(NewProcessCollector(os.Getpid(), "")) + MustRegister(NewGoCollector()) } -// UninstrumentedHandler works in the same way as Handler, but the returned HTTP -// handler is not instrumented. This is useful if no instrumentation is desired -// (for whatever reason) or if the instrumentation has to happen with a -// different handler name (or with a different instrumentation approach -// altogether). See the InstrumentHandler example. -func UninstrumentedHandler() http.Handler { - return defRegistry -} - -// Register registers a new Collector to be included in metrics collection. It -// returns an error if the descriptors provided by the Collector are invalid or -// if they - in combination with descriptors of already registered Collectors - -// do not fulfill the consistency and uniqueness criteria described in the Desc -// documentation. -// -// Do not register the same Collector multiple times concurrently. (Registering -// the same Collector twice would result in an error anyway, but on top of that, -// it is not safe to do so concurrently.) -func Register(m Collector) error { - _, err := defRegistry.Register(m) - return err -} - -// MustRegister works like Register but panics where Register would have -// returned an error. -func MustRegister(m Collector) { - err := Register(m) - if err != nil { - panic(err) +// NewRegistry creates a new vanilla Registry without any Collectors +// pre-registered. +func NewRegistry() *Registry { + return &Registry{ + collectorsByID: map[uint64]Collector{}, + descIDs: map[uint64]struct{}{}, + dimHashesByName: map[string]uint64{}, } } -// RegisterOrGet works like Register but does not return an error if a Collector -// is registered that equals a previously registered Collector. (Two Collectors -// are considered equal if their Describe method yields the same set of -// descriptors.) Instead, the previously registered Collector is returned (which -// is helpful if the new and previously registered Collectors are equal but not -// identical, i.e. not pointers to the same object). +// NewPedanticRegistry returns a registry that checks during collection if each +// collected Metric is consistent with its reported Desc, and if the Desc has +// actually been registered with the registry. // -// As for Register, it is still not safe to call RegisterOrGet with the same -// Collector multiple times concurrently. -func RegisterOrGet(m Collector) (Collector, error) { - return defRegistry.RegisterOrGet(m) +// Usually, a Registry will be happy as long as the union of all collected +// Metrics is consistent and valid even if some metrics are not consistent with +// their own Desc or a Desc provided by their registered Collector. Well-behaved +// Collectors and Metrics will only provide consistent Descs. This Registry is +// useful to test the implementation of Collectors and Metrics. +func NewPedanticRegistry() *Registry { + r := NewRegistry() + r.pedanticChecksEnabled = true + return r } -// MustRegisterOrGet works like Register but panics where RegisterOrGet would -// have returned an error. -func MustRegisterOrGet(m Collector) Collector { - existing, err := RegisterOrGet(m) +// Registerer is the interface for the part of a registry in charge of +// registering and unregistering. Users of custom registries should use +// Registerer as type for registration purposes (rather then the Registry type +// directly). In that way, they are free to use custom Registerer implementation +// (e.g. for testing purposes). +type Registerer interface { + // Register registers a new Collector to be included in metrics + // collection. It returns an error if the descriptors provided by the + // Collector are invalid or if they — in combination with descriptors of + // already registered Collectors — do not fulfill the consistency and + // uniqueness criteria described in the documentation of metric.Desc. + // + // If the provided Collector is equal to a Collector already registered + // (which includes the case of re-registering the same Collector), the + // returned error is an instance of AlreadyRegisteredError, which + // contains the previously registered Collector. + // + // It is in general not safe to register the same Collector multiple + // times concurrently. + Register(Collector) error + // MustRegister works like Register but registers any number of + // Collectors and panics upon the first registration that causes an + // error. + MustRegister(...Collector) + // Unregister unregisters the Collector that equals the Collector passed + // in as an argument. (Two Collectors are considered equal if their + // Describe method yields the same set of descriptors.) The function + // returns whether a Collector was unregistered. + // + // Note that even after unregistering, it will not be possible to + // register a new Collector that is inconsistent with the unregistered + // Collector, e.g. a Collector collecting metrics with the same name but + // a different help string. The rationale here is that the same registry + // instance must only collect consistent metrics throughout its + // lifetime. + Unregister(Collector) bool +} + +// Gatherer is the interface for the part of a registry in charge of gathering +// the collected metrics into a number of MetricFamilies. The Gatherer interface +// comes with the same general implication as described for the Registerer +// interface. +type Gatherer interface { + // Gather calls the Collect method of the registered Collectors and then + // gathers the collected metrics into a lexicographically sorted slice + // of MetricFamily protobufs. Even if an error occurs, Gather attempts + // to gather as many metrics as possible. Hence, if a non-nil error is + // returned, the returned MetricFamily slice could be nil (in case of a + // fatal error that prevented any meaningful metric collection) or + // contain a number of MetricFamily protobufs, some of which might be + // incomplete, and some might be missing altogether. The returned error + // (which might be a MultiError) explains the details. In scenarios + // where complete collection is critical, the returned MetricFamily + // protobufs should be disregarded if the returned error is non-nil. + Gather() ([]*dto.MetricFamily, error) +} + +// Register registers the provided Collector with the DefaultRegisterer. +// +// Register is a shortcut for DefaultRegisterer.Register(c). See there for more +// details. +func Register(c Collector) error { + return DefaultRegisterer.Register(c) +} + +// MustRegister registers the provided Collectors with the DefaultRegisterer and +// panics if any error occurs. +// +// MustRegister is a shortcut for DefaultRegisterer.MustRegister(cs...). See +// there for more details. +func MustRegister(cs ...Collector) { + DefaultRegisterer.MustRegister(cs...) +} + +// RegisterOrGet registers the provided Collector with the DefaultRegisterer and +// returns the Collector, unless an equal Collector was registered before, in +// which case that Collector is returned. +// +// Deprecated: RegisterOrGet is merely a convenience function for the +// implementation as described in the documentation for +// AlreadyRegisteredError. As the use case is relatively rare, this function +// will be removed in a future version of this package to clean up the +// namespace. +func RegisterOrGet(c Collector) (Collector, error) { + if err := Register(c); err != nil { + if are, ok := err.(AlreadyRegisteredError); ok { + return are.ExistingCollector, nil + } + return nil, err + } + return c, nil +} + +// MustRegisterOrGet behaves like RegisterOrGet but panics instead of returning +// an error. +// +// Deprecated: This is deprecated for the same reason RegisterOrGet is. See +// there for details. +func MustRegisterOrGet(c Collector) Collector { + c, err := RegisterOrGet(c) if err != nil { panic(err) } - return existing + return c } -// Unregister unregisters the Collector that equals the Collector passed in as -// an argument. (Two Collectors are considered equal if their Describe method -// yields the same set of descriptors.) The function returns whether a Collector -// was unregistered. +// Unregister removes the registration of the provided Collector from the +// DefaultRegisterer. +// +// Unregister is a shortcut for DefaultRegisterer.Unregister(c). See there for +// more details. func Unregister(c Collector) bool { - return defRegistry.Unregister(c) + return DefaultRegisterer.Unregister(c) } -// SetMetricFamilyInjectionHook sets a function that is called whenever metrics -// are collected. The hook function must be set before metrics collection begins -// (i.e. call SetMetricFamilyInjectionHook before setting the HTTP handler.) The -// MetricFamily protobufs returned by the hook function are merged with the -// metrics collected in the usual way. +// GathererFunc turns a function into a Gatherer. +type GathererFunc func() ([]*dto.MetricFamily, error) + +// Gather implements Gatherer. +func (gf GathererFunc) Gather() ([]*dto.MetricFamily, error) { + return gf() +} + +// SetMetricFamilyInjectionHook replaces the DefaultGatherer with one that +// gathers from the previous DefaultGatherers but then merges the MetricFamily +// protobufs returned from the provided hook function with the MetricFamily +// protobufs returned from the original DefaultGatherer. // -// This is a way to directly inject MetricFamily protobufs managed and owned by -// the caller. The caller has full responsibility. As no registration of the -// injected metrics has happened, there is no descriptor to check against, and -// there are no registration-time checks. If collect-time checks are disabled -// (see function EnableCollectChecks), no sanity checks are performed on the -// returned protobufs at all. If collect-checks are enabled, type and uniqueness -// checks are performed, but no further consistency checks (which would require -// knowledge of a metric descriptor). -// -// Sorting concerns: The caller is responsible for sorting the label pairs in -// each metric. However, the order of metrics will be sorted by the registry as -// it is required anyway after merging with the metric families collected -// conventionally. -// -// The function must be callable at any time and concurrently. +// Deprecated: This function manipulates the DefaultGatherer variable. Consider +// the implications, i.e. don't do this concurrently with any uses of the +// DefaultGatherer. In the rare cases where you need to inject MetricFamily +// protobufs directly, it is recommended to use a custom Registry and combine it +// with a custom Gatherer using the Gatherers type (see +// there). SetMetricFamilyInjectionHook only exists for compatibility reasons +// with previous versions of this package. func SetMetricFamilyInjectionHook(hook func() []*dto.MetricFamily) { - defRegistry.metricFamilyInjectionHook = hook + DefaultGatherer = Gatherers{ + DefaultGatherer, + GathererFunc(func() ([]*dto.MetricFamily, error) { return hook(), nil }), + } } -// PanicOnCollectError sets the behavior whether a panic is caused upon an error -// while metrics are collected and served to the HTTP endpoint. By default, an -// internal server error (status code 500) is served with an error message. -func PanicOnCollectError(b bool) { - defRegistry.panicOnCollectError = b +// AlreadyRegisteredError is returned by the Register method if the Collector to +// be registered has already been registered before, or a different Collector +// that collects the same metrics has been registered before. Registration fails +// in that case, but you can detect from the kind of error what has +// happened. The error contains fields for the existing Collector and the +// (rejected) new Collector that equals the existing one. This can be used to +// find out if an equal Collector has been registered before and switch over to +// using the old one, as demonstrated in the example. +type AlreadyRegisteredError struct { + ExistingCollector, NewCollector Collector } -// EnableCollectChecks enables (or disables) additional consistency checks -// during metrics collection. These additional checks are not enabled by default -// because they inflict a performance penalty and the errors they check for can -// only happen if the used Metric and Collector types have internal programming -// errors. It can be helpful to enable these checks while working with custom -// Collectors or Metrics whose correctness is not well established yet. -func EnableCollectChecks(b bool) { - defRegistry.collectChecksEnabled = b +func (err AlreadyRegisteredError) Error() string { + return "duplicate metrics collector registration attempted" } -// encoder is a function that writes a dto.MetricFamily to an io.Writer in a -// certain encoding. It returns the number of bytes written and any error -// encountered. Note that pbutil.WriteDelimited and pbutil.MetricFamilyToText -// are encoders. -type encoder func(io.Writer, *dto.MetricFamily) (int, error) +// MultiError is a slice of errors implementing the error interface. It is used +// by a Gatherer to report multiple errors during MetricFamily gathering. +type MultiError []error -type registry struct { - mtx sync.RWMutex - collectorsByID map[uint64]Collector // ID is a hash of the descIDs. - descIDs map[uint64]struct{} - dimHashesByName map[string]uint64 - bufPool chan *bytes.Buffer - metricFamilyPool chan *dto.MetricFamily - metricPool chan *dto.Metric - metricFamilyInjectionHook func() []*dto.MetricFamily - - panicOnCollectError, collectChecksEnabled bool +func (errs MultiError) Error() string { + if len(errs) == 0 { + return "" + } + buf := &bytes.Buffer{} + fmt.Fprintf(buf, "%d error(s) occurred:", len(errs)) + for _, err := range errs { + fmt.Fprintf(buf, "\n* %s", err) + } + return buf.String() } -func (r *registry) Register(c Collector) (Collector, error) { - descChan := make(chan *Desc, capDescChan) +// MaybeUnwrap returns nil if len(errs) is 0. It returns the first and only +// contained error as error if len(errs is 1). In all other cases, it returns +// the MultiError directly. This is helpful for returning a MultiError in a way +// that only uses the MultiError if needed. +func (errs MultiError) MaybeUnwrap() error { + switch len(errs) { + case 0: + return nil + case 1: + return errs[0] + default: + return errs + } +} + +// Registry registers Prometheus collectors, collects their metrics, and gathers +// them into MetricFamilies for exposition. It implements both Registerer and +// Gatherer. The zero value is not usable. Create instances with NewRegistry or +// NewPedanticRegistry. +type Registry struct { + mtx sync.RWMutex + collectorsByID map[uint64]Collector // ID is a hash of the descIDs. + descIDs map[uint64]struct{} + dimHashesByName map[string]uint64 + pedanticChecksEnabled bool +} + +// Register implements Registerer. +func (r *Registry) Register(c Collector) error { + var ( + descChan = make(chan *Desc, capDescChan) + newDescIDs = map[uint64]struct{}{} + newDimHashesByName = map[string]uint64{} + collectorID uint64 // Just a sum of all desc IDs. + duplicateDescErr error + ) go func() { c.Describe(descChan) close(descChan) }() - - newDescIDs := map[uint64]struct{}{} - newDimHashesByName := map[string]uint64{} - var collectorID uint64 // Just a sum of all desc IDs. - var duplicateDescErr error - r.mtx.Lock() defer r.mtx.Unlock() // Coduct various tests... @@ -235,7 +299,7 @@ func (r *registry) Register(c Collector) (Collector, error) { // Is the descriptor valid at all? if desc.err != nil { - return c, fmt.Errorf("descriptor %s is invalid: %s", desc, desc.err) + return fmt.Errorf("descriptor %s is invalid: %s", desc, desc.err) } // Is the descID unique? @@ -256,13 +320,13 @@ func (r *registry) Register(c Collector) (Collector, error) { // First check existing descriptors... if dimHash, exists := r.dimHashesByName[desc.fqName]; exists { if dimHash != desc.dimHash { - return nil, fmt.Errorf("a previously registered descriptor with the same fully-qualified name as %s has different label names or a different help string", desc) + return fmt.Errorf("a previously registered descriptor with the same fully-qualified name as %s has different label names or a different help string", desc) } } else { // ...then check the new descriptors already seen. if dimHash, exists := newDimHashesByName[desc.fqName]; exists { if dimHash != desc.dimHash { - return nil, fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc) + return fmt.Errorf("descriptors reported by collector have inconsistent label names or help strings for the same fully-qualified name, offender is %s", desc) } } else { newDimHashesByName[desc.fqName] = desc.dimHash @@ -271,15 +335,18 @@ func (r *registry) Register(c Collector) (Collector, error) { } // Did anything happen at all? if len(newDescIDs) == 0 { - return nil, errors.New("collector has no descriptors") + return errors.New("collector has no descriptors") } if existing, exists := r.collectorsByID[collectorID]; exists { - return existing, errAlreadyReg + return AlreadyRegisteredError{ + ExistingCollector: existing, + NewCollector: c, + } } // If the collectorID is new, but at least one of the descs existed // before, we are in trouble. if duplicateDescErr != nil { - return nil, duplicateDescErr + return duplicateDescErr } // Only after all tests have passed, actually register. @@ -290,26 +357,20 @@ func (r *registry) Register(c Collector) (Collector, error) { for name, dimHash := range newDimHashesByName { r.dimHashesByName[name] = dimHash } - return c, nil + return nil } -func (r *registry) RegisterOrGet(m Collector) (Collector, error) { - existing, err := r.Register(m) - if err != nil && err != errAlreadyReg { - return nil, err - } - return existing, nil -} - -func (r *registry) Unregister(c Collector) bool { - descChan := make(chan *Desc, capDescChan) +// Unregister implements Registerer. +func (r *Registry) Unregister(c Collector) bool { + var ( + descChan = make(chan *Desc, capDescChan) + descIDs = map[uint64]struct{}{} + collectorID uint64 // Just a sum of the desc IDs. + ) go func() { c.Describe(descChan) close(descChan) }() - - descIDs := map[uint64]struct{}{} - var collectorID uint64 // Just a sum of the desc IDs. for desc := range descChan { if _, exists := descIDs[desc.id]; !exists { collectorID += desc.id @@ -336,69 +397,25 @@ func (r *registry) Unregister(c Collector) bool { return true } -func (r *registry) Push(job, instance, pushURL, method string) error { - if !strings.Contains(pushURL, "://") { - pushURL = "http://" + pushURL - } - pushURL = fmt.Sprintf("%s/metrics/jobs/%s", pushURL, url.QueryEscape(job)) - if instance != "" { - pushURL += "/instances/" + url.QueryEscape(instance) - } - buf := r.getBuf() - defer r.giveBuf(buf) - if _, err := r.writePB(buf, text.WriteProtoDelimited); err != nil { - if r.panicOnCollectError { +// MustRegister implements Registerer. +func (r *Registry) MustRegister(cs ...Collector) { + for _, c := range cs { + if err := r.Register(c); err != nil { panic(err) } - return err } - req, err := http.NewRequest(method, pushURL, buf) - if err != nil { - return err - } - req.Header.Set(contentTypeHeader, DelimitedTelemetryContentType) - resp, err := http.DefaultClient.Do(req) - if err != nil { - return err - } - defer resp.Body.Close() - if resp.StatusCode != 202 { - return fmt.Errorf("unexpected status code %d while pushing to %s", resp.StatusCode, pushURL) - } - return nil } -func (r *registry) ServeHTTP(w http.ResponseWriter, req *http.Request) { - enc, contentType := chooseEncoder(req) - buf := r.getBuf() - defer r.giveBuf(buf) - writer, encoding := decorateWriter(req, buf) - if _, err := r.writePB(writer, enc); err != nil { - if r.panicOnCollectError { - panic(err) - } - http.Error(w, "An error has occurred:\n\n"+err.Error(), http.StatusInternalServerError) - return - } - if closer, ok := writer.(io.Closer); ok { - closer.Close() - } - header := w.Header() - header.Set(contentTypeHeader, contentType) - header.Set(contentLengthHeader, fmt.Sprint(buf.Len())) - if encoding != "" { - header.Set(contentEncodingHeader, encoding) - } - w.Write(buf.Bytes()) -} - -func (r *registry) writePB(w io.Writer, writeEncoded encoder) (int, error) { - var metricHashes map[uint64]struct{} - if r.collectChecksEnabled { - metricHashes = make(map[uint64]struct{}) - } - metricChan := make(chan Metric, capMetricChan) - wg := sync.WaitGroup{} +// Gather implements Gatherer. +func (r *Registry) Gather() ([]*dto.MetricFamily, error) { + var ( + metricChan = make(chan Metric, capMetricChan) + metricHashes = map[uint64]struct{}{} + dimHashes = map[string]uint64{} + wg sync.WaitGroup + errs MultiError // The collected errors to return in the end. + registeredDescIDs map[uint64]struct{} // Only used for pedantic checks + ) r.mtx.RLock() metricFamiliesByName := make(map[string]*dto.MetricFamily, len(r.dimHashesByName)) @@ -416,6 +433,16 @@ func (r *registry) writePB(w io.Writer, writeEncoded encoder) (int, error) { collector.Collect(metricChan) }(collector) } + + // In case pedantic checks are enabled, we have to copy the map before + // giving up the RLock. + if r.pedanticChecksEnabled { + registeredDescIDs = make(map[uint64]struct{}, len(r.descIDs)) + for id := range r.descIDs { + registeredDescIDs[id] = struct{}{} + } + } + r.mtx.RUnlock() // Drain metricChan in case of premature return. @@ -430,97 +457,267 @@ func (r *registry) writePB(w io.Writer, writeEncoded encoder) (int, error) { // of metricFamiliesByName (and of metricHashes if checks are // enabled). Most likely not worth it. desc := metric.Desc() + dtoMetric := &dto.Metric{} + if err := metric.Write(dtoMetric); err != nil { + errs = append(errs, fmt.Errorf( + "error collecting metric %v: %s", desc, err, + )) + continue + } metricFamily, ok := metricFamiliesByName[desc.fqName] - if !ok { - metricFamily = r.getMetricFamily() - defer r.giveMetricFamily(metricFamily) + if ok { + if metricFamily.GetHelp() != desc.help { + errs = append(errs, fmt.Errorf( + "collected metric %s %s has help %q but should have %q", + desc.fqName, dtoMetric, desc.help, metricFamily.GetHelp(), + )) + continue + } + // TODO(beorn7): Simplify switch once Desc has type. + switch metricFamily.GetType() { + case dto.MetricType_COUNTER: + if dtoMetric.Counter == nil { + errs = append(errs, fmt.Errorf( + "collected metric %s %s should be a Counter", + desc.fqName, dtoMetric, + )) + continue + } + case dto.MetricType_GAUGE: + if dtoMetric.Gauge == nil { + errs = append(errs, fmt.Errorf( + "collected metric %s %s should be a Gauge", + desc.fqName, dtoMetric, + )) + continue + } + case dto.MetricType_SUMMARY: + if dtoMetric.Summary == nil { + errs = append(errs, fmt.Errorf( + "collected metric %s %s should be a Summary", + desc.fqName, dtoMetric, + )) + continue + } + case dto.MetricType_UNTYPED: + if dtoMetric.Untyped == nil { + errs = append(errs, fmt.Errorf( + "collected metric %s %s should be Untyped", + desc.fqName, dtoMetric, + )) + continue + } + case dto.MetricType_HISTOGRAM: + if dtoMetric.Histogram == nil { + errs = append(errs, fmt.Errorf( + "collected metric %s %s should be a Histogram", + desc.fqName, dtoMetric, + )) + continue + } + default: + panic("encountered MetricFamily with invalid type") + } + } else { + metricFamily = &dto.MetricFamily{} metricFamily.Name = proto.String(desc.fqName) metricFamily.Help = proto.String(desc.help) + // TODO(beorn7): Simplify switch once Desc has type. + switch { + case dtoMetric.Gauge != nil: + metricFamily.Type = dto.MetricType_GAUGE.Enum() + case dtoMetric.Counter != nil: + metricFamily.Type = dto.MetricType_COUNTER.Enum() + case dtoMetric.Summary != nil: + metricFamily.Type = dto.MetricType_SUMMARY.Enum() + case dtoMetric.Untyped != nil: + metricFamily.Type = dto.MetricType_UNTYPED.Enum() + case dtoMetric.Histogram != nil: + metricFamily.Type = dto.MetricType_HISTOGRAM.Enum() + default: + errs = append(errs, fmt.Errorf( + "empty metric collected: %s", dtoMetric, + )) + continue + } metricFamiliesByName[desc.fqName] = metricFamily } - dtoMetric := r.getMetric() - defer r.giveMetric(dtoMetric) - if err := metric.Write(dtoMetric); err != nil { - // TODO: Consider different means of error reporting so - // that a single erroneous metric could be skipped - // instead of blowing up the whole collection. - return 0, fmt.Errorf("error collecting metric %v: %s", desc, err) + if err := checkMetricConsistency(metricFamily, dtoMetric, metricHashes, dimHashes); err != nil { + errs = append(errs, err) + continue } - switch { - case metricFamily.Type != nil: - // Type already set. We are good. - case dtoMetric.Gauge != nil: - metricFamily.Type = dto.MetricType_GAUGE.Enum() - case dtoMetric.Counter != nil: - metricFamily.Type = dto.MetricType_COUNTER.Enum() - case dtoMetric.Summary != nil: - metricFamily.Type = dto.MetricType_SUMMARY.Enum() - case dtoMetric.Untyped != nil: - metricFamily.Type = dto.MetricType_UNTYPED.Enum() - case dtoMetric.Histogram != nil: - metricFamily.Type = dto.MetricType_HISTOGRAM.Enum() - default: - return 0, fmt.Errorf("empty metric collected: %s", dtoMetric) - } - if r.collectChecksEnabled { - if err := r.checkConsistency(metricFamily, dtoMetric, desc, metricHashes); err != nil { - return 0, err + if r.pedanticChecksEnabled { + // Is the desc registered at all? + if _, exist := registeredDescIDs[desc.id]; !exist { + errs = append(errs, fmt.Errorf( + "collected metric %s %s with unregistered descriptor %s", + metricFamily.GetName(), dtoMetric, desc, + )) + continue + } + if err := checkDescConsistency(metricFamily, dtoMetric, desc); err != nil { + errs = append(errs, err) + continue } } metricFamily.Metric = append(metricFamily.Metric, dtoMetric) } + return normalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() +} - if r.metricFamilyInjectionHook != nil { - for _, mf := range r.metricFamilyInjectionHook() { - existingMF, exists := metricFamiliesByName[mf.GetName()] - if !exists { - metricFamiliesByName[mf.GetName()] = mf - if r.collectChecksEnabled { - for _, m := range mf.Metric { - if err := r.checkConsistency(mf, m, nil, metricHashes); err != nil { - return 0, err - } - } +// Gatherers is a slice of Gatherer instances that implements the Gatherer +// interface itself. Its Gather method calls Gather on all Gatherers in the +// slice in order and returns the merged results. Errors returned from the +// Gather calles are all returned in a flattened MultiError. Duplicate and +// inconsistent Metrics are skipped (first occurrence in slice order wins) and +// reported in the returned error. +// +// Gatherers can be used to merge the Gather results from multiple +// Registries. It also provides a way to directly inject existing MetricFamily +// protobufs into the gathering by creating a custom Gatherer with a Gather +// method that simply returns the existing MetricFamily protobufs. Note that no +// registration is involved (in contrast to Collector registration), so +// obviously registration-time checks cannot happen. Any inconsistencies between +// the gathered MetricFamilies are reported as errors by the Gather method, and +// inconsistent Metrics are dropped. Invalid parts of the MetricFamilies +// (e.g. syntactically invalid metric or label names) will go undetected. +type Gatherers []Gatherer + +// Gather implements Gatherer. +func (gs Gatherers) Gather() ([]*dto.MetricFamily, error) { + var ( + metricFamiliesByName = map[string]*dto.MetricFamily{} + metricHashes = map[uint64]struct{}{} + dimHashes = map[string]uint64{} + errs MultiError // The collected errors to return in the end. + ) + + for i, g := range gs { + mfs, err := g.Gather() + if err != nil { + if multiErr, ok := err.(MultiError); ok { + for _, err := range multiErr { + errs = append(errs, fmt.Errorf("[from Gatherer #%d] %s", i+1, err)) } - continue + } else { + errs = append(errs, fmt.Errorf("[from Gatherer #%d] %s", i+1, err)) + } + } + for _, mf := range mfs { + existingMF, exists := metricFamiliesByName[mf.GetName()] + if exists { + if existingMF.GetHelp() != mf.GetHelp() { + errs = append(errs, fmt.Errorf( + "gathered metric family %s has help %q but should have %q", + mf.GetName(), mf.GetHelp(), existingMF.GetHelp(), + )) + continue + } + if existingMF.GetType() != mf.GetType() { + errs = append(errs, fmt.Errorf( + "gathered metric family %s has type %s but should have %s", + mf.GetName(), mf.GetType(), existingMF.GetType(), + )) + continue + } + } else { + existingMF = &dto.MetricFamily{} + existingMF.Name = mf.Name + existingMF.Help = mf.Help + existingMF.Type = mf.Type + metricFamiliesByName[mf.GetName()] = existingMF } for _, m := range mf.Metric { - if r.collectChecksEnabled { - if err := r.checkConsistency(existingMF, m, nil, metricHashes); err != nil { - return 0, err - } + if err := checkMetricConsistency(existingMF, m, metricHashes, dimHashes); err != nil { + errs = append(errs, err) + continue } existingMF.Metric = append(existingMF.Metric, m) } } } + return normalizeMetricFamilies(metricFamiliesByName), errs.MaybeUnwrap() +} - // Now that MetricFamilies are all set, sort their Metrics - // lexicographically by their label values. +// metricSorter is a sortable slice of *dto.Metric. +type metricSorter []*dto.Metric + +func (s metricSorter) Len() int { + return len(s) +} + +func (s metricSorter) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +func (s metricSorter) Less(i, j int) bool { + if len(s[i].Label) != len(s[j].Label) { + // This should not happen. The metrics are + // inconsistent. However, we have to deal with the fact, as + // people might use custom collectors or metric family injection + // to create inconsistent metrics. So let's simply compare the + // number of labels in this case. That will still yield + // reproducible sorting. + return len(s[i].Label) < len(s[j].Label) + } + for n, lp := range s[i].Label { + vi := lp.GetValue() + vj := s[j].Label[n].GetValue() + if vi != vj { + return vi < vj + } + } + + // We should never arrive here. Multiple metrics with the same + // label set in the same scrape will lead to undefined ingestion + // behavior. However, as above, we have to provide stable sorting + // here, even for inconsistent metrics. So sort equal metrics + // by their timestamp, with missing timestamps (implying "now") + // coming last. + if s[i].TimestampMs == nil { + return false + } + if s[j].TimestampMs == nil { + return true + } + return s[i].GetTimestampMs() < s[j].GetTimestampMs() +} + +// normalizeMetricFamilies returns a MetricFamily slice whith empty +// MetricFamilies pruned and the remaining MetricFamilies sorted by name within +// the slice, with the contained Metrics sorted within each MetricFamily. +func normalizeMetricFamilies(metricFamiliesByName map[string]*dto.MetricFamily) []*dto.MetricFamily { for _, mf := range metricFamiliesByName { sort.Sort(metricSorter(mf.Metric)) } - - // Write out MetricFamilies sorted by their name. names := make([]string, 0, len(metricFamiliesByName)) - for name := range metricFamiliesByName { - names = append(names, name) - } - sort.Strings(names) - - var written int - for _, name := range names { - w, err := writeEncoded(w, metricFamiliesByName[name]) - written += w - if err != nil { - return written, err + for name, mf := range metricFamiliesByName { + if len(mf.Metric) > 0 { + names = append(names, name) } } - return written, nil + sort.Strings(names) + result := make([]*dto.MetricFamily, 0, len(names)) + for _, name := range names { + result = append(result, metricFamiliesByName[name]) + } + return result } -func (r *registry) checkConsistency(metricFamily *dto.MetricFamily, dtoMetric *dto.Metric, desc *Desc, metricHashes map[uint64]struct{}) error { - +// checkMetricConsistency checks if the provided Metric is consistent with the +// provided MetricFamily. It also hashed the Metric labels and the MetricFamily +// name. If the resulting hash is alread in the provided metricHashes, an error +// is returned. If not, it is added to metricHashes. The provided dimHashes maps +// MetricFamily names to their dimHash (hashed sorted label names). If dimHashes +// doesn't yet contain a hash for the provided MetricFamily, it is +// added. Otherwise, an error is returned if the existing dimHashes in not equal +// the calculated dimHash. +func checkMetricConsistency( + metricFamily *dto.MetricFamily, + dtoMetric *dto.Metric, + metricHashes map[uint64]struct{}, + dimHashes map[string]uint64, +) error { // Type consistency with metric family. if metricFamily.GetType() == dto.MetricType_GAUGE && dtoMetric.Gauge == nil || metricFamily.GetType() == dto.MetricType_COUNTER && dtoMetric.Counter == nil || @@ -534,42 +731,45 @@ func (r *registry) checkConsistency(metricFamily *dto.MetricFamily, dtoMetric *d } // Is the metric unique (i.e. no other metric with the same name and the same label values)? - h := fnv.New64a() - var buf bytes.Buffer - buf.WriteString(metricFamily.GetName()) - buf.WriteByte(model.SeparatorByte) - h.Write(buf.Bytes()) + h := hashNew() + h = hashAdd(h, metricFamily.GetName()) + h = hashAddByte(h, separatorByte) + dh := hashNew() // Make sure label pairs are sorted. We depend on it for the consistency - // check. Label pairs must be sorted by contract. But the point of this - // method is to check for contract violations. So we better do the sort - // now. + // check. sort.Sort(LabelPairSorter(dtoMetric.Label)) for _, lp := range dtoMetric.Label { - buf.Reset() - buf.WriteString(lp.GetValue()) - buf.WriteByte(model.SeparatorByte) - h.Write(buf.Bytes()) + h = hashAdd(h, lp.GetValue()) + h = hashAddByte(h, separatorByte) + dh = hashAdd(dh, lp.GetName()) + dh = hashAddByte(dh, separatorByte) } - metricHash := h.Sum64() - if _, exists := metricHashes[metricHash]; exists { + if _, exists := metricHashes[h]; exists { return fmt.Errorf( "collected metric %s %s was collected before with the same name and label values", metricFamily.GetName(), dtoMetric, ) } - metricHashes[metricHash] = struct{}{} - - if desc == nil { - return nil // Nothing left to check if we have no desc. + if dimHash, ok := dimHashes[metricFamily.GetName()]; ok { + if dimHash != dh { + return fmt.Errorf( + "collected metric %s %s has label dimensions inconsistent with previously collected metrics in the same metric family", + metricFamily.GetName(), dtoMetric, + ) + } + } else { + dimHashes[metricFamily.GetName()] = dh } + metricHashes[h] = struct{}{} + return nil +} - // Desc consistency with metric family. - if metricFamily.GetName() != desc.fqName { - return fmt.Errorf( - "collected metric %s %s has name %q but should have %q", - metricFamily.GetName(), dtoMetric, metricFamily.GetName(), desc.fqName, - ) - } +func checkDescConsistency( + metricFamily *dto.MetricFamily, + dtoMetric *dto.Metric, + desc *Desc, +) error { + // Desc help consistency with metric family help. if metricFamily.GetHelp() != desc.help { return fmt.Errorf( "collected metric %s %s has help %q but should have %q", @@ -602,159 +802,5 @@ func (r *registry) checkConsistency(metricFamily *dto.MetricFamily, dtoMetric *d ) } } - - r.mtx.RLock() // Remaining checks need the read lock. - defer r.mtx.RUnlock() - - // Is the desc registered? - if _, exist := r.descIDs[desc.id]; !exist { - return fmt.Errorf( - "collected metric %s %s with unregistered descriptor %s", - metricFamily.GetName(), dtoMetric, desc, - ) - } - return nil } - -func (r *registry) getBuf() *bytes.Buffer { - select { - case buf := <-r.bufPool: - return buf - default: - return &bytes.Buffer{} - } -} - -func (r *registry) giveBuf(buf *bytes.Buffer) { - buf.Reset() - select { - case r.bufPool <- buf: - default: - } -} - -func (r *registry) getMetricFamily() *dto.MetricFamily { - select { - case mf := <-r.metricFamilyPool: - return mf - default: - return &dto.MetricFamily{} - } -} - -func (r *registry) giveMetricFamily(mf *dto.MetricFamily) { - mf.Reset() - select { - case r.metricFamilyPool <- mf: - default: - } -} - -func (r *registry) getMetric() *dto.Metric { - select { - case m := <-r.metricPool: - return m - default: - return &dto.Metric{} - } -} - -func (r *registry) giveMetric(m *dto.Metric) { - m.Reset() - select { - case r.metricPool <- m: - default: - } -} - -func newRegistry() *registry { - return ®istry{ - collectorsByID: map[uint64]Collector{}, - descIDs: map[uint64]struct{}{}, - dimHashesByName: map[string]uint64{}, - bufPool: make(chan *bytes.Buffer, numBufs), - metricFamilyPool: make(chan *dto.MetricFamily, numMetricFamilies), - metricPool: make(chan *dto.Metric, numMetrics), - } -} - -func newDefaultRegistry() *registry { - r := newRegistry() - r.Register(NewProcessCollector(os.Getpid(), "")) - r.Register(NewGoCollector()) - return r -} - -func chooseEncoder(req *http.Request) (encoder, string) { - accepts := goautoneg.ParseAccept(req.Header.Get(acceptHeader)) - for _, accept := range accepts { - switch { - case accept.Type == "application" && - accept.SubType == "vnd.google.protobuf" && - accept.Params["proto"] == "io.prometheus.client.MetricFamily": - switch accept.Params["encoding"] { - case "delimited": - return text.WriteProtoDelimited, DelimitedTelemetryContentType - case "text": - return text.WriteProtoText, ProtoTextTelemetryContentType - case "compact-text": - return text.WriteProtoCompactText, ProtoCompactTextTelemetryContentType - default: - continue - } - case accept.Type == "text" && - accept.SubType == "plain" && - (accept.Params["version"] == "0.0.4" || accept.Params["version"] == ""): - return text.MetricFamilyToText, TextTelemetryContentType - default: - continue - } - } - return text.MetricFamilyToText, TextTelemetryContentType -} - -// decorateWriter wraps a writer to handle gzip compression if requested. It -// returns the decorated writer and the appropriate "Content-Encoding" header -// (which is empty if no compression is enabled). -func decorateWriter(request *http.Request, writer io.Writer) (io.Writer, string) { - header := request.Header.Get(acceptEncodingHeader) - parts := strings.Split(header, ",") - for _, part := range parts { - part := strings.TrimSpace(part) - if part == "gzip" || strings.HasPrefix(part, "gzip;") { - return gzip.NewWriter(writer), "gzip" - } - } - return writer, "" -} - -type metricSorter []*dto.Metric - -func (s metricSorter) Len() int { - return len(s) -} - -func (s metricSorter) Swap(i, j int) { - s[i], s[j] = s[j], s[i] -} - -func (s metricSorter) Less(i, j int) bool { - if len(s[i].Label) != len(s[j].Label) { - // This should not happen. The metrics are - // inconsistent. However, we have to deal with the fact, as - // people might use custom collectors or metric family injection - // to create inconsistent metrics. So let's simply compare the - // number of labels in this case. That will still yield - // reproducible sorting. - return len(s[i].Label) < len(s[j].Label) - } - for n, lp := range s[i].Label { - vi := lp.GetValue() - vj := s[j].Label[n].GetValue() - if vi != vj { - return vi < vj - } - } - return true -} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/registry_test.go b/vendor/github.com/prometheus/client_golang/prometheus/registry_test.go index f30c90c..9dacb62 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/registry_test.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/registry_test.go @@ -17,41 +17,30 @@ // Use of this source code is governed by a BSD-style license that can be found // in the LICENSE file. -package prometheus +package prometheus_test import ( "bytes" - "encoding/binary" "net/http" + "net/http/httptest" "testing" - "github.com/golang/protobuf/proto" dto "github.com/prometheus/client_model/go" + + "github.com/golang/protobuf/proto" + "github.com/prometheus/common/expfmt" + + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promhttp" ) -type fakeResponseWriter struct { - header http.Header - body bytes.Buffer -} - -func (r *fakeResponseWriter) Header() http.Header { - return r.header -} - -func (r *fakeResponseWriter) Write(d []byte) (l int, err error) { - return r.body.Write(d) -} - -func (r *fakeResponseWriter) WriteHeader(c int) { -} - func testHandler(t testing.TB) { - metricVec := NewCounterVec( - CounterOpts{ + metricVec := prometheus.NewCounterVec( + prometheus.CounterOpts{ Name: "name", Help: "docstring", - ConstLabels: Labels{"constname": "constvalue"}, + ConstLabels: prometheus.Labels{"constname": "constvalue"}, }, []string{"labelname"}, ) @@ -59,8 +48,6 @@ func testHandler(t testing.TB) { metricVec.WithLabelValues("val1").Inc() metricVec.WithLabelValues("val2").Inc() - varintBuf := make([]byte, binary.MaxVarintLen32) - externalMetricFamily := &dto.MetricFamily{ Name: proto.String("externalname"), Help: proto.String("externaldocstring"), @@ -83,18 +70,9 @@ func testHandler(t testing.TB) { }, }, } - marshaledExternalMetricFamily, err := proto.Marshal(externalMetricFamily) - if err != nil { - t.Fatal(err) - } - var externalBuf bytes.Buffer - l := binary.PutUvarint(varintBuf, uint64(len(marshaledExternalMetricFamily))) - _, err = externalBuf.Write(varintBuf[:l]) - if err != nil { - t.Fatal(err) - } - _, err = externalBuf.Write(marshaledExternalMetricFamily) - if err != nil { + externalBuf := &bytes.Buffer{} + enc := expfmt.NewEncoder(externalBuf, expfmt.FmtProtoDelim) + if err := enc.Encode(externalMetricFamily); err != nil { t.Fatal(err) } externalMetricFamilyAsBytes := externalBuf.Bytes() @@ -160,18 +138,9 @@ metric: < }, }, } - marshaledExpectedMetricFamily, err := proto.Marshal(expectedMetricFamily) - if err != nil { - t.Fatal(err) - } - var buf bytes.Buffer - l = binary.PutUvarint(varintBuf, uint64(len(marshaledExpectedMetricFamily))) - _, err = buf.Write(varintBuf[:l]) - if err != nil { - t.Fatal(err) - } - _, err = buf.Write(marshaledExpectedMetricFamily) - if err != nil { + buf := &bytes.Buffer{} + enc = expfmt.NewEncoder(buf, expfmt.FmtProtoDelim) + if err := enc.Encode(expectedMetricFamily); err != nil { t.Fatal(err) } expectedMetricFamilyAsBytes := buf.Bytes() @@ -216,7 +185,7 @@ metric: < externalMetricFamilyWithSameName := &dto.MetricFamily{ Name: proto.String("name"), - Help: proto.String("inconsistent help string does not matter here"), + Help: proto.String("docstring"), Type: dto.MetricType_COUNTER.Enum(), Metric: []*dto.Metric{ { @@ -248,7 +217,7 @@ metric: < var scenarios = []struct { headers map[string]string out output - collector Collector + collector prometheus.Collector externalMF []*dto.MetricFamily }{ { // 0 @@ -485,21 +454,22 @@ metric: < }, } for i, scenario := range scenarios { - registry := newRegistry() - registry.collectChecksEnabled = true + registry := prometheus.NewPedanticRegistry() + gatherer := prometheus.Gatherer(registry) + if scenario.externalMF != nil { + gatherer = prometheus.Gatherers{ + registry, + prometheus.GathererFunc(func() ([]*dto.MetricFamily, error) { + return scenario.externalMF, nil + }), + } + } if scenario.collector != nil { registry.Register(scenario.collector) } - if scenario.externalMF != nil { - registry.metricFamilyInjectionHook = func() []*dto.MetricFamily { - return scenario.externalMF - } - } - writer := &fakeResponseWriter{ - header: http.Header{}, - } - handler := InstrumentHandler("prometheus", registry) + writer := httptest.NewRecorder() + handler := prometheus.InstrumentHandler("prometheus", promhttp.HandlerFor(gatherer, promhttp.HandlerOpts{})) request, _ := http.NewRequest("GET", "/", nil) for key, value := range scenario.headers { request.Header.Add(key, value) @@ -507,7 +477,7 @@ metric: < handler(writer, request) for key, value := range scenario.out.headers { - if writer.Header().Get(key) != value { + if writer.HeaderMap.Get(key) != value { t.Errorf( "%d. expected %q for header %q, got %q", i, value, key, writer.Header().Get(key), @@ -515,10 +485,10 @@ metric: < } } - if !bytes.Equal(scenario.out.body, writer.body.Bytes()) { + if !bytes.Equal(scenario.out.body, writer.Body.Bytes()) { t.Errorf( - "%d. expected %q for body, got %q", - i, scenario.out.body, writer.body.Bytes(), + "%d. expected body:\n%s\ngot body:\n%s\n", + i, scenario.out.body, writer.Body.Bytes(), ) } } @@ -533,3 +503,43 @@ func BenchmarkHandler(b *testing.B) { testHandler(b) } } + +func TestRegisterWithOrGet(t *testing.T) { + // Replace the default registerer just to be sure. This is bad, but this + // whole test will go away once RegisterOrGet is removed. + oldRegisterer := prometheus.DefaultRegisterer + defer func() { + prometheus.DefaultRegisterer = oldRegisterer + }() + prometheus.DefaultRegisterer = prometheus.NewRegistry() + original := prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "test", + Help: "help", + }, + []string{"foo", "bar"}, + ) + equalButNotSame := prometheus.NewCounterVec( + prometheus.CounterOpts{ + Name: "test", + Help: "help", + }, + []string{"foo", "bar"}, + ) + if err := prometheus.Register(original); err != nil { + t.Fatal(err) + } + if err := prometheus.Register(equalButNotSame); err == nil { + t.Fatal("expected error when registringe equal collector") + } + existing, err := prometheus.RegisterOrGet(equalButNotSame) + if err != nil { + t.Fatal(err) + } + if existing != original { + t.Error("expected original collector but got something else") + } + if existing == equalButNotSame { + t.Error("expected original callector but got new one") + } +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary.go b/vendor/github.com/prometheus/client_golang/prometheus/summary.go index 67fe43c..bce05bf 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/summary.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/summary.go @@ -15,7 +15,6 @@ package prometheus import ( "fmt" - "hash/fnv" "math" "sort" "sync" @@ -25,10 +24,12 @@ import ( "github.com/golang/protobuf/proto" dto "github.com/prometheus/client_model/go" - - "github.com/prometheus/client_golang/model" ) +// quantileLabel is used for the label that defines the quantile in a +// summary. +const quantileLabel = "quantile" + // A Summary captures individual observations from an event or sample stream and // summarizes them in a manner similar to traditional summary statistics: 1. sum // of observations, 2. observation count, 3. rank estimations. @@ -52,12 +53,12 @@ type Summary interface { Observe(float64) } +// DefObjectives are the default Summary quantile values. var ( - // DefObjectives are the default Summary quantile values. DefObjectives = map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001} errQuantileLabelNotAllowed = fmt.Errorf( - "%q is not allowed as label name in summaries", model.QuantileLabel, + "%q is not allowed as label name in summaries", quantileLabel, ) ) @@ -112,7 +113,9 @@ type SummaryOpts struct { ConstLabels Labels // Objectives defines the quantile rank estimates with their respective - // absolute error. The default value is DefObjectives. + // absolute error. If Objectives[q] = e, then the value reported + // for q will be the φ-quantile value for some φ between q-e and q+e. + // The default value is DefObjectives. Objectives map[float64]float64 // MaxAge defines the duration for which an observation stays relevant @@ -136,11 +139,11 @@ type SummaryOpts struct { BufCap uint32 } -// TODO: Great fuck-up with the sliding-window decay algorithm... The Merge -// method of perk/quantile is actually not working as advertised - and it might -// be unfixable, as the underlying algorithm is apparently not capable of -// merging summaries in the first place. To avoid using Merge, we are currently -// adding observations to _each_ age bucket, i.e. the effort to add a sample is +// Great fuck-up with the sliding-window decay algorithm... The Merge method of +// perk/quantile is actually not working as advertised - and it might be +// unfixable, as the underlying algorithm is apparently not capable of merging +// summaries in the first place. To avoid using Merge, we are currently adding +// observations to _each_ age bucket, i.e. the effort to add a sample is // essentially multiplied by the number of age buckets. When rotating age // buckets, we empty the previous head stream. On scrape time, we simply take // the quantiles from the head stream (no merging required). Result: More effort @@ -170,12 +173,12 @@ func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { } for _, n := range desc.variableLabels { - if n == model.QuantileLabel { + if n == quantileLabel { panic(errQuantileLabelNotAllowed) } } for _, lp := range desc.constLabelPairs { - if lp.GetName() == model.QuantileLabel { + if lp.GetName() == quantileLabel { panic(errQuantileLabelNotAllowed) } } @@ -224,12 +227,12 @@ func newSummary(desc *Desc, opts SummaryOpts, labelValues ...string) Summary { } sort.Float64s(s.sortedObjectives) - s.Init(s) // Init self-collection. + s.init(s) // Init self-collection. return s } type summary struct { - SelfCollector + selfCollector bufMtx sync.Mutex // Protects hotBuf and hotBufExpTime. mtx sync.Mutex // Protects every other moving part. @@ -387,7 +390,7 @@ func (s quantSort) Less(i, j int) bool { // (e.g. HTTP request latencies, partitioned by status code and method). Create // instances with NewSummaryVec. type SummaryVec struct { - MetricVec + *MetricVec } // NewSummaryVec creates a new SummaryVec based on the provided SummaryOpts and @@ -401,14 +404,9 @@ func NewSummaryVec(opts SummaryOpts, labelNames []string) *SummaryVec { opts.ConstLabels, ) return &SummaryVec{ - MetricVec: MetricVec{ - children: map[uint64]Metric{}, - desc: desc, - hash: fnv.New64a(), - newMetric: func(lvs ...string) Metric { - return newSummary(desc, opts, lvs...) - }, - }, + MetricVec: newMetricVec(desc, func(lvs ...string) Metric { + return newSummary(desc, opts, lvs...) + }), } } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/summary_test.go b/vendor/github.com/prometheus/client_golang/prometheus/summary_test.go index 0790cdf..c4575ff 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/summary_test.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/summary_test.go @@ -329,8 +329,8 @@ func TestSummaryDecay(t *testing.T) { } func getBounds(vars []float64, q, ε float64) (min, max float64) { - // TODO: This currently tolerates an error of up to 2*ε. The error must - // be at most ε, but for some reason, it's sometimes slightly + // TODO(beorn7): This currently tolerates an error of up to 2*ε. The + // error must be at most ε, but for some reason, it's sometimes slightly // higher. That's a bug. n := float64(len(vars)) lower := int((q - 2*ε) * n) diff --git a/vendor/github.com/prometheus/client_golang/prometheus/untyped.go b/vendor/github.com/prometheus/client_golang/prometheus/untyped.go index c65ab1c..5faf7e6 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/untyped.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/untyped.go @@ -13,8 +13,6 @@ package prometheus -import "hash/fnv" - // Untyped is a Metric that represents a single numerical value that can // arbitrarily go up and down. // @@ -58,7 +56,7 @@ func NewUntyped(opts UntypedOpts) Untyped { // labels. This is used if you want to count the same thing partitioned by // various dimensions. Create instances with NewUntypedVec. type UntypedVec struct { - MetricVec + *MetricVec } // NewUntypedVec creates a new UntypedVec based on the provided UntypedOpts and @@ -72,14 +70,9 @@ func NewUntypedVec(opts UntypedOpts, labelNames []string) *UntypedVec { opts.ConstLabels, ) return &UntypedVec{ - MetricVec: MetricVec{ - children: map[uint64]Metric{}, - desc: desc, - hash: fnv.New64a(), - newMetric: func(lvs ...string) Metric { - return newValue(desc, UntypedValue, 0, lvs...) - }, - }, + MetricVec: newMetricVec(desc, func(lvs ...string) Metric { + return newValue(desc, UntypedValue, 0, lvs...) + }), } } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/value.go b/vendor/github.com/prometheus/client_golang/prometheus/value.go index b54ac11..a944c37 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/value.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/value.go @@ -48,7 +48,7 @@ type value struct { // operations. http://golang.org/pkg/sync/atomic/#pkg-note-BUG valBits uint64 - SelfCollector + selfCollector desc *Desc valType ValueType @@ -68,7 +68,7 @@ func newValue(desc *Desc, valueType ValueType, val float64, labelValues ...strin valBits: math.Float64bits(val), labelPairs: makeLabelPairs(desc, labelValues), } - result.Init(result) + result.init(result) return result } @@ -113,7 +113,7 @@ func (v *value) Write(out *dto.Metric) error { // library to back the implementations of CounterFunc, GaugeFunc, and // UntypedFunc. type valueFunc struct { - SelfCollector + selfCollector desc *Desc valType ValueType @@ -134,7 +134,7 @@ func newValueFunc(desc *Desc, valueType ValueType, function func() float64) *val function: function, labelPairs: makeLabelPairs(desc, nil), } - result.Init(result) + result.init(result) return result } diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/vendor/github.com/prometheus/client_golang/prometheus/vec.go index aa49deb..7f3eef9 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/vec.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/vec.go @@ -14,10 +14,10 @@ package prometheus import ( - "bytes" "fmt" - "hash" "sync" + + "github.com/prometheus/common/model" ) // MetricVec is a Collector to bundle metrics of the same name that @@ -26,17 +26,32 @@ import ( // type. GaugeVec, CounterVec, SummaryVec, and UntypedVec are examples already // provided in this package. type MetricVec struct { - mtx sync.RWMutex // Protects not only children, but also hash and buf. - children map[uint64]Metric + mtx sync.RWMutex // Protects the children. + children map[uint64][]metricWithLabelValues desc *Desc - // hash is our own hash instance to avoid repeated allocations. - hash hash.Hash64 - // buf is used to copy string contents into it for hashing, - // again to avoid allocations. - buf bytes.Buffer + newMetric func(labelValues ...string) Metric + hashAdd func(h uint64, s string) uint64 // replace hash function for testing collision handling + hashAddByte func(h uint64, b byte) uint64 +} - newMetric func(labelValues ...string) Metric +// newMetricVec returns an initialized MetricVec. The concrete value is +// returned for embedding into another struct. +func newMetricVec(desc *Desc, newMetric func(lvs ...string) Metric) *MetricVec { + return &MetricVec{ + children: map[uint64][]metricWithLabelValues{}, + desc: desc, + newMetric: newMetric, + hashAdd: hashAdd, + hashAddByte: hashAddByte, + } +} + +// metricWithLabelValues provides the metric and its label values for +// disambiguation on hash collision. +type metricWithLabelValues struct { + values []string + metric Metric } // Describe implements Collector. The length of the returned slice @@ -50,14 +65,21 @@ func (m *MetricVec) Collect(ch chan<- Metric) { m.mtx.RLock() defer m.mtx.RUnlock() - for _, metric := range m.children { - ch <- metric + for _, metrics := range m.children { + for _, metric := range metrics { + ch <- metric.metric + } } } // GetMetricWithLabelValues returns the Metric for the given slice of label // values (same order as the VariableLabels in Desc). If that combination of // label values is accessed for the first time, a new Metric is created. +// +// It is possible to call this method without using the returned Metric to only +// create the new Metric but leave it at its start value (e.g. a Summary or +// Histogram without any observations). See also the SummaryVec example. +// // Keeping the Metric for later use is possible (and should be considered if // performance is critical), but keep in mind that Reset, DeleteLabelValues and // Delete can be used to delete the Metric from the MetricVec. In that case, the @@ -75,20 +97,19 @@ func (m *MetricVec) Collect(ch chan<- Metric) { // with a performance overhead (for creating and processing the Labels map). // See also the GaugeVec example. func (m *MetricVec) GetMetricWithLabelValues(lvs ...string) (Metric, error) { - m.mtx.Lock() - defer m.mtx.Unlock() - h, err := m.hashLabelValues(lvs) if err != nil { return nil, err } - return m.getOrCreateMetric(h, lvs...), nil + + return m.getOrCreateMetricWithLabelValues(h, lvs), nil } // GetMetricWith returns the Metric for the given Labels map (the label names // must match those of the VariableLabels in Desc). If that label map is -// accessed for the first time, a new Metric is created. Implications of keeping -// the Metric are the same as for GetMetricWithLabelValues. +// accessed for the first time, a new Metric is created. Implications of +// creating a Metric without using it and keeping the Metric for later use are +// the same as for GetMetricWithLabelValues. // // An error is returned if the number and names of the Labels are inconsistent // with those of the VariableLabels in Desc. @@ -97,18 +118,12 @@ func (m *MetricVec) GetMetricWithLabelValues(lvs ...string) (Metric, error) { // GetMetricWithLabelValues(...string). See there for pros and cons of the two // methods. func (m *MetricVec) GetMetricWith(labels Labels) (Metric, error) { - m.mtx.Lock() - defer m.mtx.Unlock() - h, err := m.hashLabels(labels) if err != nil { return nil, err } - lvs := make([]string, len(labels)) - for i, label := range m.desc.variableLabels { - lvs[i] = labels[label] - } - return m.getOrCreateMetric(h, lvs...), nil + + return m.getOrCreateMetricWithLabels(h, labels), nil } // WithLabelValues works as GetMetricWithLabelValues, but panics if an error @@ -156,11 +171,7 @@ func (m *MetricVec) DeleteLabelValues(lvs ...string) bool { if err != nil { return false } - if _, has := m.children[h]; !has { - return false - } - delete(m.children, h) - return true + return m.deleteByHashWithLabelValues(h, lvs) } // Delete deletes the metric where the variable labels are the same as those @@ -181,10 +192,50 @@ func (m *MetricVec) Delete(labels Labels) bool { if err != nil { return false } - if _, has := m.children[h]; !has { + + return m.deleteByHashWithLabels(h, labels) +} + +// deleteByHashWithLabelValues removes the metric from the hash bucket h. If +// there are multiple matches in the bucket, use lvs to select a metric and +// remove only that metric. +func (m *MetricVec) deleteByHashWithLabelValues(h uint64, lvs []string) bool { + metrics, ok := m.children[h] + if !ok { return false } - delete(m.children, h) + + i := m.findMetricWithLabelValues(metrics, lvs) + if i >= len(metrics) { + return false + } + + if len(metrics) > 1 { + m.children[h] = append(metrics[:i], metrics[i+1:]...) + } else { + delete(m.children, h) + } + return true +} + +// deleteByHashWithLabels removes the metric from the hash bucket h. If there +// are multiple matches in the bucket, use lvs to select a metric and remove +// only that metric. +func (m *MetricVec) deleteByHashWithLabels(h uint64, labels Labels) bool { + metrics, ok := m.children[h] + if !ok { + return false + } + i := m.findMetricWithLabels(metrics, labels) + if i >= len(metrics) { + return false + } + + if len(metrics) > 1 { + m.children[h] = append(metrics[:i], metrics[i+1:]...) + } else { + delete(m.children, h) + } return true } @@ -202,40 +253,152 @@ func (m *MetricVec) hashLabelValues(vals []string) (uint64, error) { if len(vals) != len(m.desc.variableLabels) { return 0, errInconsistentCardinality } - m.hash.Reset() + h := hashNew() for _, val := range vals { - m.buf.Reset() - m.buf.WriteString(val) - m.hash.Write(m.buf.Bytes()) + h = m.hashAdd(h, val) + h = m.hashAddByte(h, model.SeparatorByte) } - return m.hash.Sum64(), nil + return h, nil } func (m *MetricVec) hashLabels(labels Labels) (uint64, error) { if len(labels) != len(m.desc.variableLabels) { return 0, errInconsistentCardinality } - m.hash.Reset() + h := hashNew() for _, label := range m.desc.variableLabels { val, ok := labels[label] if !ok { return 0, fmt.Errorf("label name %q missing in label map", label) } - m.buf.Reset() - m.buf.WriteString(val) - m.hash.Write(m.buf.Bytes()) + h = m.hashAdd(h, val) + h = m.hashAddByte(h, model.SeparatorByte) } - return m.hash.Sum64(), nil + return h, nil } -func (m *MetricVec) getOrCreateMetric(hash uint64, labelValues ...string) Metric { - metric, ok := m.children[hash] +// getOrCreateMetricWithLabelValues retrieves the metric by hash and label value +// or creates it and returns the new one. +// +// This function holds the mutex. +func (m *MetricVec) getOrCreateMetricWithLabelValues(hash uint64, lvs []string) Metric { + m.mtx.RLock() + metric, ok := m.getMetricWithLabelValues(hash, lvs) + m.mtx.RUnlock() + if ok { + return metric + } + + m.mtx.Lock() + defer m.mtx.Unlock() + metric, ok = m.getMetricWithLabelValues(hash, lvs) if !ok { - // Copy labelValues. Otherwise, they would be allocated even if we don't go - // down this code path. - copiedLabelValues := append(make([]string, 0, len(labelValues)), labelValues...) - metric = m.newMetric(copiedLabelValues...) - m.children[hash] = metric + // Copy to avoid allocation in case wo don't go down this code path. + copiedLVs := make([]string, len(lvs)) + copy(copiedLVs, lvs) + metric = m.newMetric(copiedLVs...) + m.children[hash] = append(m.children[hash], metricWithLabelValues{values: copiedLVs, metric: metric}) } return metric } + +// getOrCreateMetricWithLabelValues retrieves the metric by hash and label value +// or creates it and returns the new one. +// +// This function holds the mutex. +func (m *MetricVec) getOrCreateMetricWithLabels(hash uint64, labels Labels) Metric { + m.mtx.RLock() + metric, ok := m.getMetricWithLabels(hash, labels) + m.mtx.RUnlock() + if ok { + return metric + } + + m.mtx.Lock() + defer m.mtx.Unlock() + metric, ok = m.getMetricWithLabels(hash, labels) + if !ok { + lvs := m.extractLabelValues(labels) + metric = m.newMetric(lvs...) + m.children[hash] = append(m.children[hash], metricWithLabelValues{values: lvs, metric: metric}) + } + return metric +} + +// getMetricWithLabelValues gets a metric while handling possible collisions in +// the hash space. Must be called while holding read mutex. +func (m *MetricVec) getMetricWithLabelValues(h uint64, lvs []string) (Metric, bool) { + metrics, ok := m.children[h] + if ok { + if i := m.findMetricWithLabelValues(metrics, lvs); i < len(metrics) { + return metrics[i].metric, true + } + } + return nil, false +} + +// getMetricWithLabels gets a metric while handling possible collisions in +// the hash space. Must be called while holding read mutex. +func (m *MetricVec) getMetricWithLabels(h uint64, labels Labels) (Metric, bool) { + metrics, ok := m.children[h] + if ok { + if i := m.findMetricWithLabels(metrics, labels); i < len(metrics) { + return metrics[i].metric, true + } + } + return nil, false +} + +// findMetricWithLabelValues returns the index of the matching metric or +// len(metrics) if not found. +func (m *MetricVec) findMetricWithLabelValues(metrics []metricWithLabelValues, lvs []string) int { + for i, metric := range metrics { + if m.matchLabelValues(metric.values, lvs) { + return i + } + } + return len(metrics) +} + +// findMetricWithLabels returns the index of the matching metric or len(metrics) +// if not found. +func (m *MetricVec) findMetricWithLabels(metrics []metricWithLabelValues, labels Labels) int { + for i, metric := range metrics { + if m.matchLabels(metric.values, labels) { + return i + } + } + return len(metrics) +} + +func (m *MetricVec) matchLabelValues(values []string, lvs []string) bool { + if len(values) != len(lvs) { + return false + } + for i, v := range values { + if v != lvs[i] { + return false + } + } + return true +} + +func (m *MetricVec) matchLabels(values []string, labels Labels) bool { + if len(labels) != len(values) { + return false + } + for i, k := range m.desc.variableLabels { + if values[i] != labels[k] { + return false + } + } + return true +} + +func (m *MetricVec) extractLabelValues(labels Labels) []string { + labelValues := make([]string, len(labels)) + for i, k := range m.desc.variableLabels { + labelValues[i] = labels[k] + } + return labelValues +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec_test.go b/vendor/github.com/prometheus/client_golang/prometheus/vec_test.go index 0e9431e..445a6b3 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/vec_test.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/vec_test.go @@ -14,21 +14,37 @@ package prometheus import ( - "hash/fnv" + "fmt" "testing" + + dto "github.com/prometheus/client_model/go" ) func TestDelete(t *testing.T) { - desc := NewDesc("test", "helpless", []string{"l1", "l2"}, nil) - vec := MetricVec{ - children: map[uint64]Metric{}, - desc: desc, - hash: fnv.New64a(), - newMetric: func(lvs ...string) Metric { - return newValue(desc, UntypedValue, 0, lvs...) + vec := NewUntypedVec( + UntypedOpts{ + Name: "test", + Help: "helpless", }, - } + []string{"l1", "l2"}, + ) + testDelete(t, vec) +} +func TestDeleteWithCollisions(t *testing.T) { + vec := NewUntypedVec( + UntypedOpts{ + Name: "test", + Help: "helpless", + }, + []string{"l1", "l2"}, + ) + vec.hashAdd = func(h uint64, s string) uint64 { return 1 } + vec.hashAddByte = func(h uint64, b byte) uint64 { return 1 } + testDelete(t, vec) +} + +func testDelete(t *testing.T, vec *UntypedVec) { if got, want := vec.Delete(Labels{"l1": "v1", "l2": "v2"}), false; got != want { t.Errorf("got %v, want %v", got, want) } @@ -59,29 +75,48 @@ func TestDelete(t *testing.T) { } func TestDeleteLabelValues(t *testing.T) { - desc := NewDesc("test", "helpless", []string{"l1", "l2"}, nil) - vec := MetricVec{ - children: map[uint64]Metric{}, - desc: desc, - hash: fnv.New64a(), - newMetric: func(lvs ...string) Metric { - return newValue(desc, UntypedValue, 0, lvs...) + vec := NewUntypedVec( + UntypedOpts{ + Name: "test", + Help: "helpless", }, - } + []string{"l1", "l2"}, + ) + testDeleteLabelValues(t, vec) +} +func TestDeleteLabelValuesWithCollisions(t *testing.T) { + vec := NewUntypedVec( + UntypedOpts{ + Name: "test", + Help: "helpless", + }, + []string{"l1", "l2"}, + ) + vec.hashAdd = func(h uint64, s string) uint64 { return 1 } + vec.hashAddByte = func(h uint64, b byte) uint64 { return 1 } + testDeleteLabelValues(t, vec) +} + +func testDeleteLabelValues(t *testing.T, vec *UntypedVec) { if got, want := vec.DeleteLabelValues("v1", "v2"), false; got != want { t.Errorf("got %v, want %v", got, want) } vec.With(Labels{"l1": "v1", "l2": "v2"}).(Untyped).Set(42) + vec.With(Labels{"l1": "v1", "l2": "v3"}).(Untyped).Set(42) // Add junk data for collision. if got, want := vec.DeleteLabelValues("v1", "v2"), true; got != want { t.Errorf("got %v, want %v", got, want) } if got, want := vec.DeleteLabelValues("v1", "v2"), false; got != want { t.Errorf("got %v, want %v", got, want) } + if got, want := vec.DeleteLabelValues("v1", "v3"), true; got != want { + t.Errorf("got %v, want %v", got, want) + } vec.With(Labels{"l1": "v1", "l2": "v2"}).(Untyped).Set(42) + // Delete out of order. if got, want := vec.DeleteLabelValues("v2", "v1"), false; got != want { t.Errorf("got %v, want %v", got, want) } @@ -89,3 +124,189 @@ func TestDeleteLabelValues(t *testing.T) { t.Errorf("got %v, want %v", got, want) } } + +func TestMetricVec(t *testing.T) { + vec := NewUntypedVec( + UntypedOpts{ + Name: "test", + Help: "helpless", + }, + []string{"l1", "l2"}, + ) + testMetricVec(t, vec) +} + +func TestMetricVecWithCollisions(t *testing.T) { + vec := NewUntypedVec( + UntypedOpts{ + Name: "test", + Help: "helpless", + }, + []string{"l1", "l2"}, + ) + vec.hashAdd = func(h uint64, s string) uint64 { return 1 } + vec.hashAddByte = func(h uint64, b byte) uint64 { return 1 } + testMetricVec(t, vec) +} + +func testMetricVec(t *testing.T, vec *UntypedVec) { + vec.Reset() // Actually test Reset now! + + var pair [2]string + // Keep track of metrics. + expected := map[[2]string]int{} + + for i := 0; i < 1000; i++ { + pair[0], pair[1] = fmt.Sprint(i%4), fmt.Sprint(i%5) // Varying combinations multiples. + expected[pair]++ + vec.WithLabelValues(pair[0], pair[1]).Inc() + + expected[[2]string{"v1", "v2"}]++ + vec.WithLabelValues("v1", "v2").(Untyped).Inc() + } + + var total int + for _, metrics := range vec.children { + for _, metric := range metrics { + total++ + copy(pair[:], metric.values) + + var metricOut dto.Metric + if err := metric.metric.Write(&metricOut); err != nil { + t.Fatal(err) + } + actual := *metricOut.Untyped.Value + + var actualPair [2]string + for i, label := range metricOut.Label { + actualPair[i] = *label.Value + } + + // Test output pair against metric.values to ensure we've selected + // the right one. We check this to ensure the below check means + // anything at all. + if actualPair != pair { + t.Fatalf("unexpected pair association in metric map: %v != %v", actualPair, pair) + } + + if actual != float64(expected[pair]) { + t.Fatalf("incorrect counter value for %v: %v != %v", pair, actual, expected[pair]) + } + } + } + + if total != len(expected) { + t.Fatalf("unexpected number of metrics: %v != %v", total, len(expected)) + } + + vec.Reset() + + if len(vec.children) > 0 { + t.Fatalf("reset failed") + } +} + +func TestCounterVecEndToEndWithCollision(t *testing.T) { + vec := NewCounterVec( + CounterOpts{ + Name: "test", + Help: "helpless", + }, + []string{"labelname"}, + ) + vec.WithLabelValues("77kepQFQ8Kl").Inc() + vec.WithLabelValues("!0IC=VloaY").Add(2) + + m := &dto.Metric{} + if err := vec.WithLabelValues("77kepQFQ8Kl").Write(m); err != nil { + t.Fatal(err) + } + if got, want := m.GetLabel()[0].GetValue(), "77kepQFQ8Kl"; got != want { + t.Errorf("got label value %q, want %q", got, want) + } + if got, want := m.GetCounter().GetValue(), 1.; got != want { + t.Errorf("got value %f, want %f", got, want) + } + m.Reset() + if err := vec.WithLabelValues("!0IC=VloaY").Write(m); err != nil { + t.Fatal(err) + } + if got, want := m.GetLabel()[0].GetValue(), "!0IC=VloaY"; got != want { + t.Errorf("got label value %q, want %q", got, want) + } + if got, want := m.GetCounter().GetValue(), 2.; got != want { + t.Errorf("got value %f, want %f", got, want) + } +} + +func BenchmarkMetricVecWithLabelValuesBasic(b *testing.B) { + benchmarkMetricVecWithLabelValues(b, map[string][]string{ + "l1": []string{"onevalue"}, + "l2": []string{"twovalue"}, + }) +} + +func BenchmarkMetricVecWithLabelValues2Keys10ValueCardinality(b *testing.B) { + benchmarkMetricVecWithLabelValuesCardinality(b, 2, 10) +} + +func BenchmarkMetricVecWithLabelValues4Keys10ValueCardinality(b *testing.B) { + benchmarkMetricVecWithLabelValuesCardinality(b, 4, 10) +} + +func BenchmarkMetricVecWithLabelValues2Keys100ValueCardinality(b *testing.B) { + benchmarkMetricVecWithLabelValuesCardinality(b, 2, 100) +} + +func BenchmarkMetricVecWithLabelValues10Keys100ValueCardinality(b *testing.B) { + benchmarkMetricVecWithLabelValuesCardinality(b, 10, 100) +} + +func BenchmarkMetricVecWithLabelValues10Keys1000ValueCardinality(b *testing.B) { + benchmarkMetricVecWithLabelValuesCardinality(b, 10, 1000) +} + +func benchmarkMetricVecWithLabelValuesCardinality(b *testing.B, nkeys, nvalues int) { + labels := map[string][]string{} + + for i := 0; i < nkeys; i++ { + var ( + k = fmt.Sprintf("key-%v", i) + vs = make([]string, 0, nvalues) + ) + for j := 0; j < nvalues; j++ { + vs = append(vs, fmt.Sprintf("value-%v", j)) + } + labels[k] = vs + } + + benchmarkMetricVecWithLabelValues(b, labels) +} + +func benchmarkMetricVecWithLabelValues(b *testing.B, labels map[string][]string) { + var keys []string + for k := range labels { // Map order dependent, who cares though. + keys = append(keys, k) + } + + values := make([]string, len(labels)) // Value cache for permutations. + vec := NewUntypedVec( + UntypedOpts{ + Name: "test", + Help: "helpless", + }, + keys, + ) + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + // Varies input across provide map entries based on key size. + for j, k := range keys { + candidates := labels[k] + values[j] = candidates[i%len(candidates)] + } + + vec.WithLabelValues(values...) + } +} diff --git a/vendor/github.com/prometheus/client_golang/text/proto.go b/vendor/github.com/prometheus/client_golang/text/proto.go deleted file mode 100644 index e82bbb3..0000000 --- a/vendor/github.com/prometheus/client_golang/text/proto.go +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2014 The Prometheus 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 text - -import ( - "fmt" - "io" - - "github.com/golang/protobuf/proto" - "github.com/matttproud/golang_protobuf_extensions/pbutil" - - dto "github.com/prometheus/client_model/go" -) - -// WriteProtoDelimited writes the MetricFamily to the writer in delimited -// protobuf format and returns the number of bytes written and any error -// encountered. -func WriteProtoDelimited(w io.Writer, p *dto.MetricFamily) (int, error) { - return pbutil.WriteDelimited(w, p) -} - -// WriteProtoText writes the MetricFamily to the writer in text format and -// returns the number of bytes written and any error encountered. -func WriteProtoText(w io.Writer, p *dto.MetricFamily) (int, error) { - return fmt.Fprintf(w, "%s\n", proto.MarshalTextString(p)) -} - -// WriteProtoCompactText writes the MetricFamily to the writer in compact text -// format and returns the number of bytes written and any error encountered. -func WriteProtoCompactText(w io.Writer, p *dto.MetricFamily) (int, error) { - return fmt.Fprintf(w, "%s\n", p) -} diff --git a/vendor/github.com/prometheus/client_model/.gitignore b/vendor/github.com/prometheus/client_model/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/vendor/github.com/prometheus/client_model/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/vendor/github.com/prometheus/client_model/CONTRIBUTING.md b/vendor/github.com/prometheus/client_model/CONTRIBUTING.md new file mode 100644 index 0000000..40503ed --- /dev/null +++ b/vendor/github.com/prometheus/client_model/CONTRIBUTING.md @@ -0,0 +1,18 @@ +# Contributing + +Prometheus uses GitHub to manage reviews of pull requests. + +* If you have a trivial fix or improvement, go ahead and create a pull request, + addressing (with `@...`) the maintainer of this repository (see + [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request. + +* If you plan to do something more involved, first discuss your ideas + on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers). + This will avoid unnecessary work and surely give you and us a good deal + of inspiration. + +* Relevant coding style guidelines are the [Go Code Review + Comments](https://code.google.com/p/go-wiki/wiki/CodeReviewComments) + and the _Formatting and style_ section of Peter Bourgon's [Go: Best + Practices for Production + Environments](http://peter.bourgon.org/go-in-production/#formatting-and-style). diff --git a/vendor/github.com/prometheus/client_model/LICENSE b/vendor/github.com/prometheus/client_model/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/LICENSE @@ -0,0 +1,201 @@ + 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 + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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/prometheus/client_model/MAINTAINERS.md b/vendor/github.com/prometheus/client_model/MAINTAINERS.md new file mode 100644 index 0000000..3ede55f --- /dev/null +++ b/vendor/github.com/prometheus/client_model/MAINTAINERS.md @@ -0,0 +1 @@ +* Björn Rabenstein diff --git a/vendor/github.com/prometheus/client_model/Makefile b/vendor/github.com/prometheus/client_model/Makefile new file mode 100644 index 0000000..9cc23b3 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/Makefile @@ -0,0 +1,61 @@ +# Copyright 2013 Prometheus Team +# 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. + +KEY_ID ?= _DEFINE_ME_ + +all: cpp go java python ruby + +SUFFIXES: + +cpp: cpp/metrics.pb.cc cpp/metrics.pb.h + +cpp/metrics.pb.cc: metrics.proto + protoc $< --cpp_out=cpp/ + +cpp/metrics.pb.h: metrics.proto + protoc $< --cpp_out=cpp/ + +go: go/metrics.pb.go + +go/metrics.pb.go: metrics.proto + protoc $< --go_out=go/ + +java: src/main/java/io/prometheus/client/Metrics.java pom.xml + mvn clean compile package + +src/main/java/io/prometheus/client/Metrics.java: metrics.proto + protoc $< --java_out=src/main/java + +python: python/prometheus/client/model/metrics_pb2.py + +python/prometheus/client/model/metrics_pb2.py: metrics.proto + protoc $< --python_out=python/prometheus/client/model + +ruby: + $(MAKE) -C ruby build + +clean: + -rm -rf cpp/* + -rm -rf go/* + -rm -rf java/* + -rm -rf python/* + -$(MAKE) -C ruby clean + -mvn clean + +maven-deploy-snapshot: java + mvn clean deploy -Dgpg.keyname=$(KEY_ID) -DperformRelease=true + +maven-deploy-release: java + mvn clean release:clean release:prepare release:perform -Dgpg.keyname=$(KEY_ID) -DperformRelease=true + +.PHONY: all clean cpp go java maven-deploy-snapshot maven-deploy-release python ruby diff --git a/vendor/github.com/prometheus/client_model/NOTICE b/vendor/github.com/prometheus/client_model/NOTICE new file mode 100644 index 0000000..20110e4 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/NOTICE @@ -0,0 +1,5 @@ +Data model artifacts for Prometheus. +Copyright 2012-2015 The Prometheus Authors + +This product includes software developed at +SoundCloud Ltd. (http://soundcloud.com/). diff --git a/vendor/github.com/prometheus/client_model/README.md b/vendor/github.com/prometheus/client_model/README.md new file mode 100644 index 0000000..a710042 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/README.md @@ -0,0 +1,26 @@ +# Background +Under most circumstances, manually downloading this repository should never +be required. + +# Prerequisites +# Base +* [Google Protocol Buffers](https://developers.google.com/protocol-buffers) + +## Java +* [Apache Maven](http://maven.apache.org) +* [Prometheus Maven Repository](https://github.com/prometheus/io.prometheus-maven-repository) checked out into ../io.prometheus-maven-repository + +## Go +* [Go](http://golang.org) +* [goprotobuf](https://code.google.com/p/goprotobuf) + +## Ruby +* [Ruby](https://www.ruby-lang.org) +* [bundler](https://rubygems.org/gems/bundler) + +# Building + $ make + +# Getting Started + * The Go source code is periodically indexed: [Go Protocol Buffer Model](http://godoc.org/github.com/prometheus/client_model/go). + * All of the core developers are accessible via the [Prometheus Developers Mailinglist](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers). diff --git a/vendor/github.com/prometheus/client_model/cpp/metrics.pb.cc b/vendor/github.com/prometheus/client_model/cpp/metrics.pb.cc new file mode 100644 index 0000000..1ff893b --- /dev/null +++ b/vendor/github.com/prometheus/client_model/cpp/metrics.pb.cc @@ -0,0 +1,3380 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: metrics.proto + +#define INTERNAL_SUPPRESS_PROTOBUF_FIELD_DEPRECATION +#include "metrics.pb.h" + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +// @@protoc_insertion_point(includes) + +namespace io { +namespace prometheus { +namespace client { + +namespace { + +const ::google::protobuf::Descriptor* LabelPair_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + LabelPair_reflection_ = NULL; +const ::google::protobuf::Descriptor* Gauge_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + Gauge_reflection_ = NULL; +const ::google::protobuf::Descriptor* Counter_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + Counter_reflection_ = NULL; +const ::google::protobuf::Descriptor* Quantile_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + Quantile_reflection_ = NULL; +const ::google::protobuf::Descriptor* Summary_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + Summary_reflection_ = NULL; +const ::google::protobuf::Descriptor* Untyped_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + Untyped_reflection_ = NULL; +const ::google::protobuf::Descriptor* Histogram_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + Histogram_reflection_ = NULL; +const ::google::protobuf::Descriptor* Bucket_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + Bucket_reflection_ = NULL; +const ::google::protobuf::Descriptor* Metric_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + Metric_reflection_ = NULL; +const ::google::protobuf::Descriptor* MetricFamily_descriptor_ = NULL; +const ::google::protobuf::internal::GeneratedMessageReflection* + MetricFamily_reflection_ = NULL; +const ::google::protobuf::EnumDescriptor* MetricType_descriptor_ = NULL; + +} // namespace + + +void protobuf_AssignDesc_metrics_2eproto() { + protobuf_AddDesc_metrics_2eproto(); + const ::google::protobuf::FileDescriptor* file = + ::google::protobuf::DescriptorPool::generated_pool()->FindFileByName( + "metrics.proto"); + GOOGLE_CHECK(file != NULL); + LabelPair_descriptor_ = file->message_type(0); + static const int LabelPair_offsets_[2] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LabelPair, name_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LabelPair, value_), + }; + LabelPair_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + LabelPair_descriptor_, + LabelPair::default_instance_, + LabelPair_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LabelPair, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(LabelPair, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(LabelPair)); + Gauge_descriptor_ = file->message_type(1); + static const int Gauge_offsets_[1] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Gauge, value_), + }; + Gauge_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + Gauge_descriptor_, + Gauge::default_instance_, + Gauge_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Gauge, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Gauge, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(Gauge)); + Counter_descriptor_ = file->message_type(2); + static const int Counter_offsets_[1] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Counter, value_), + }; + Counter_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + Counter_descriptor_, + Counter::default_instance_, + Counter_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Counter, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Counter, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(Counter)); + Quantile_descriptor_ = file->message_type(3); + static const int Quantile_offsets_[2] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Quantile, quantile_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Quantile, value_), + }; + Quantile_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + Quantile_descriptor_, + Quantile::default_instance_, + Quantile_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Quantile, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Quantile, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(Quantile)); + Summary_descriptor_ = file->message_type(4); + static const int Summary_offsets_[3] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, sample_count_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, sample_sum_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, quantile_), + }; + Summary_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + Summary_descriptor_, + Summary::default_instance_, + Summary_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Summary, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(Summary)); + Untyped_descriptor_ = file->message_type(5); + static const int Untyped_offsets_[1] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Untyped, value_), + }; + Untyped_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + Untyped_descriptor_, + Untyped::default_instance_, + Untyped_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Untyped, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Untyped, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(Untyped)); + Histogram_descriptor_ = file->message_type(6); + static const int Histogram_offsets_[3] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, sample_count_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, sample_sum_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, bucket_), + }; + Histogram_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + Histogram_descriptor_, + Histogram::default_instance_, + Histogram_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Histogram, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(Histogram)); + Bucket_descriptor_ = file->message_type(7); + static const int Bucket_offsets_[2] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Bucket, cumulative_count_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Bucket, upper_bound_), + }; + Bucket_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + Bucket_descriptor_, + Bucket::default_instance_, + Bucket_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Bucket, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Bucket, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(Bucket)); + Metric_descriptor_ = file->message_type(8); + static const int Metric_offsets_[7] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, label_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, gauge_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, counter_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, summary_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, untyped_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, histogram_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, timestamp_ms_), + }; + Metric_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + Metric_descriptor_, + Metric::default_instance_, + Metric_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(Metric, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(Metric)); + MetricFamily_descriptor_ = file->message_type(9); + static const int MetricFamily_offsets_[4] = { + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, name_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, help_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, type_), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, metric_), + }; + MetricFamily_reflection_ = + new ::google::protobuf::internal::GeneratedMessageReflection( + MetricFamily_descriptor_, + MetricFamily::default_instance_, + MetricFamily_offsets_, + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, _has_bits_[0]), + GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(MetricFamily, _unknown_fields_), + -1, + ::google::protobuf::DescriptorPool::generated_pool(), + ::google::protobuf::MessageFactory::generated_factory(), + sizeof(MetricFamily)); + MetricType_descriptor_ = file->enum_type(0); +} + +namespace { + +GOOGLE_PROTOBUF_DECLARE_ONCE(protobuf_AssignDescriptors_once_); +inline void protobuf_AssignDescriptorsOnce() { + ::google::protobuf::GoogleOnceInit(&protobuf_AssignDescriptors_once_, + &protobuf_AssignDesc_metrics_2eproto); +} + +void protobuf_RegisterTypes(const ::std::string&) { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + LabelPair_descriptor_, &LabelPair::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + Gauge_descriptor_, &Gauge::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + Counter_descriptor_, &Counter::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + Quantile_descriptor_, &Quantile::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + Summary_descriptor_, &Summary::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + Untyped_descriptor_, &Untyped::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + Histogram_descriptor_, &Histogram::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + Bucket_descriptor_, &Bucket::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + Metric_descriptor_, &Metric::default_instance()); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedMessage( + MetricFamily_descriptor_, &MetricFamily::default_instance()); +} + +} // namespace + +void protobuf_ShutdownFile_metrics_2eproto() { + delete LabelPair::default_instance_; + delete LabelPair_reflection_; + delete Gauge::default_instance_; + delete Gauge_reflection_; + delete Counter::default_instance_; + delete Counter_reflection_; + delete Quantile::default_instance_; + delete Quantile_reflection_; + delete Summary::default_instance_; + delete Summary_reflection_; + delete Untyped::default_instance_; + delete Untyped_reflection_; + delete Histogram::default_instance_; + delete Histogram_reflection_; + delete Bucket::default_instance_; + delete Bucket_reflection_; + delete Metric::default_instance_; + delete Metric_reflection_; + delete MetricFamily::default_instance_; + delete MetricFamily_reflection_; +} + +void protobuf_AddDesc_metrics_2eproto() { + static bool already_here = false; + if (already_here) return; + already_here = true; + GOOGLE_PROTOBUF_VERIFY_VERSION; + + ::google::protobuf::DescriptorPool::InternalAddGeneratedFile( + "\n\rmetrics.proto\022\024io.prometheus.client\"(\n" + "\tLabelPair\022\014\n\004name\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"" + "\026\n\005Gauge\022\r\n\005value\030\001 \001(\001\"\030\n\007Counter\022\r\n\005va" + "lue\030\001 \001(\001\"+\n\010Quantile\022\020\n\010quantile\030\001 \001(\001\022" + "\r\n\005value\030\002 \001(\001\"e\n\007Summary\022\024\n\014sample_coun" + "t\030\001 \001(\004\022\022\n\nsample_sum\030\002 \001(\001\0220\n\010quantile\030" + "\003 \003(\0132\036.io.prometheus.client.Quantile\"\030\n" + "\007Untyped\022\r\n\005value\030\001 \001(\001\"c\n\tHistogram\022\024\n\014" + "sample_count\030\001 \001(\004\022\022\n\nsample_sum\030\002 \001(\001\022," + "\n\006bucket\030\003 \003(\0132\034.io.prometheus.client.Bu" + "cket\"7\n\006Bucket\022\030\n\020cumulative_count\030\001 \001(\004" + "\022\023\n\013upper_bound\030\002 \001(\001\"\276\002\n\006Metric\022.\n\005labe" + "l\030\001 \003(\0132\037.io.prometheus.client.LabelPair" + "\022*\n\005gauge\030\002 \001(\0132\033.io.prometheus.client.G" + "auge\022.\n\007counter\030\003 \001(\0132\035.io.prometheus.cl" + "ient.Counter\022.\n\007summary\030\004 \001(\0132\035.io.prome" + "theus.client.Summary\022.\n\007untyped\030\005 \001(\0132\035." + "io.prometheus.client.Untyped\0222\n\thistogra" + "m\030\007 \001(\0132\037.io.prometheus.client.Histogram" + "\022\024\n\014timestamp_ms\030\006 \001(\003\"\210\001\n\014MetricFamily\022" + "\014\n\004name\030\001 \001(\t\022\014\n\004help\030\002 \001(\t\022.\n\004type\030\003 \001(" + "\0162 .io.prometheus.client.MetricType\022,\n\006m" + "etric\030\004 \003(\0132\034.io.prometheus.client.Metri" + "c*M\n\nMetricType\022\013\n\007COUNTER\020\000\022\t\n\005GAUGE\020\001\022" + "\013\n\007SUMMARY\020\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004" + "B\026\n\024io.prometheus.client", 1024); + ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile( + "metrics.proto", &protobuf_RegisterTypes); + LabelPair::default_instance_ = new LabelPair(); + Gauge::default_instance_ = new Gauge(); + Counter::default_instance_ = new Counter(); + Quantile::default_instance_ = new Quantile(); + Summary::default_instance_ = new Summary(); + Untyped::default_instance_ = new Untyped(); + Histogram::default_instance_ = new Histogram(); + Bucket::default_instance_ = new Bucket(); + Metric::default_instance_ = new Metric(); + MetricFamily::default_instance_ = new MetricFamily(); + LabelPair::default_instance_->InitAsDefaultInstance(); + Gauge::default_instance_->InitAsDefaultInstance(); + Counter::default_instance_->InitAsDefaultInstance(); + Quantile::default_instance_->InitAsDefaultInstance(); + Summary::default_instance_->InitAsDefaultInstance(); + Untyped::default_instance_->InitAsDefaultInstance(); + Histogram::default_instance_->InitAsDefaultInstance(); + Bucket::default_instance_->InitAsDefaultInstance(); + Metric::default_instance_->InitAsDefaultInstance(); + MetricFamily::default_instance_->InitAsDefaultInstance(); + ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_metrics_2eproto); +} + +// Force AddDescriptors() to be called at static initialization time. +struct StaticDescriptorInitializer_metrics_2eproto { + StaticDescriptorInitializer_metrics_2eproto() { + protobuf_AddDesc_metrics_2eproto(); + } +} static_descriptor_initializer_metrics_2eproto_; +const ::google::protobuf::EnumDescriptor* MetricType_descriptor() { + protobuf_AssignDescriptorsOnce(); + return MetricType_descriptor_; +} +bool MetricType_IsValid(int value) { + switch(value) { + case 0: + case 1: + case 2: + case 3: + case 4: + return true; + default: + return false; + } +} + + +// =================================================================== + +#ifndef _MSC_VER +const int LabelPair::kNameFieldNumber; +const int LabelPair::kValueFieldNumber; +#endif // !_MSC_VER + +LabelPair::LabelPair() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.LabelPair) +} + +void LabelPair::InitAsDefaultInstance() { +} + +LabelPair::LabelPair(const LabelPair& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.LabelPair) +} + +void LabelPair::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +LabelPair::~LabelPair() { + // @@protoc_insertion_point(destructor:io.prometheus.client.LabelPair) + SharedDtor(); +} + +void LabelPair::SharedDtor() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete value_; + } + if (this != default_instance_) { + } +} + +void LabelPair::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* LabelPair::descriptor() { + protobuf_AssignDescriptorsOnce(); + return LabelPair_descriptor_; +} + +const LabelPair& LabelPair::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +LabelPair* LabelPair::default_instance_ = NULL; + +LabelPair* LabelPair::New() const { + return new LabelPair; +} + +void LabelPair::Clear() { + if (_has_bits_[0 / 32] & 3) { + if (has_name()) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + } + if (has_value()) { + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_->clear(); + } + } + } + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool LabelPair::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.LabelPair) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional string name = 1; + case 1: { + if (tag == 10) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_name())); + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::PARSE, + "name"); + } else { + goto handle_unusual; + } + if (input->ExpectTag(18)) goto parse_value; + break; + } + + // optional string value = 2; + case 2: { + if (tag == 18) { + parse_value: + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_value())); + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->value().data(), this->value().length(), + ::google::protobuf::internal::WireFormat::PARSE, + "value"); + } else { + goto handle_unusual; + } + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.LabelPair) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.LabelPair) + return false; +#undef DO_ +} + +void LabelPair::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.LabelPair) + // optional string name = 1; + if (has_name()) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "name"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 1, this->name(), output); + } + + // optional string value = 2; + if (has_value()) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->value().data(), this->value().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "value"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 2, this->value(), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.LabelPair) +} + +::google::protobuf::uint8* LabelPair::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.LabelPair) + // optional string name = 1; + if (has_name()) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "name"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 1, this->name(), target); + } + + // optional string value = 2; + if (has_value()) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->value().data(), this->value().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "value"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 2, this->value(), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.LabelPair) + return target; +} + +int LabelPair::ByteSize() const { + int total_size = 0; + + if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) { + // optional string name = 1; + if (has_name()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->name()); + } + + // optional string value = 2; + if (has_value()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->value()); + } + + } + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void LabelPair::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const LabelPair* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void LabelPair::MergeFrom(const LabelPair& from) { + GOOGLE_CHECK_NE(&from, this); + if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { + if (from.has_name()) { + set_name(from.name()); + } + if (from.has_value()) { + set_value(from.value()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void LabelPair::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void LabelPair::CopyFrom(const LabelPair& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool LabelPair::IsInitialized() const { + + return true; +} + +void LabelPair::Swap(LabelPair* other) { + if (other != this) { + std::swap(name_, other->name_); + std::swap(value_, other->value_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata LabelPair::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = LabelPair_descriptor_; + metadata.reflection = LabelPair_reflection_; + return metadata; +} + + +// =================================================================== + +#ifndef _MSC_VER +const int Gauge::kValueFieldNumber; +#endif // !_MSC_VER + +Gauge::Gauge() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.Gauge) +} + +void Gauge::InitAsDefaultInstance() { +} + +Gauge::Gauge(const Gauge& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Gauge) +} + +void Gauge::SharedCtor() { + _cached_size_ = 0; + value_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +Gauge::~Gauge() { + // @@protoc_insertion_point(destructor:io.prometheus.client.Gauge) + SharedDtor(); +} + +void Gauge::SharedDtor() { + if (this != default_instance_) { + } +} + +void Gauge::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* Gauge::descriptor() { + protobuf_AssignDescriptorsOnce(); + return Gauge_descriptor_; +} + +const Gauge& Gauge::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +Gauge* Gauge::default_instance_ = NULL; + +Gauge* Gauge::New() const { + return new Gauge; +} + +void Gauge::Clear() { + value_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool Gauge::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.Gauge) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional double value = 1; + case 1: { + if (tag == 9) { + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>( + input, &value_))); + set_has_value(); + } else { + goto handle_unusual; + } + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.Gauge) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.Gauge) + return false; +#undef DO_ +} + +void Gauge::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.Gauge) + // optional double value = 1; + if (has_value()) { + ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->value(), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.Gauge) +} + +::google::protobuf::uint8* Gauge::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Gauge) + // optional double value = 1; + if (has_value()) { + target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->value(), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Gauge) + return target; +} + +int Gauge::ByteSize() const { + int total_size = 0; + + if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) { + // optional double value = 1; + if (has_value()) { + total_size += 1 + 8; + } + + } + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void Gauge::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const Gauge* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void Gauge::MergeFrom(const Gauge& from) { + GOOGLE_CHECK_NE(&from, this); + if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { + if (from.has_value()) { + set_value(from.value()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void Gauge::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void Gauge::CopyFrom(const Gauge& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool Gauge::IsInitialized() const { + + return true; +} + +void Gauge::Swap(Gauge* other) { + if (other != this) { + std::swap(value_, other->value_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata Gauge::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = Gauge_descriptor_; + metadata.reflection = Gauge_reflection_; + return metadata; +} + + +// =================================================================== + +#ifndef _MSC_VER +const int Counter::kValueFieldNumber; +#endif // !_MSC_VER + +Counter::Counter() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.Counter) +} + +void Counter::InitAsDefaultInstance() { +} + +Counter::Counter(const Counter& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Counter) +} + +void Counter::SharedCtor() { + _cached_size_ = 0; + value_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +Counter::~Counter() { + // @@protoc_insertion_point(destructor:io.prometheus.client.Counter) + SharedDtor(); +} + +void Counter::SharedDtor() { + if (this != default_instance_) { + } +} + +void Counter::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* Counter::descriptor() { + protobuf_AssignDescriptorsOnce(); + return Counter_descriptor_; +} + +const Counter& Counter::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +Counter* Counter::default_instance_ = NULL; + +Counter* Counter::New() const { + return new Counter; +} + +void Counter::Clear() { + value_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool Counter::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.Counter) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional double value = 1; + case 1: { + if (tag == 9) { + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>( + input, &value_))); + set_has_value(); + } else { + goto handle_unusual; + } + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.Counter) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.Counter) + return false; +#undef DO_ +} + +void Counter::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.Counter) + // optional double value = 1; + if (has_value()) { + ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->value(), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.Counter) +} + +::google::protobuf::uint8* Counter::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Counter) + // optional double value = 1; + if (has_value()) { + target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->value(), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Counter) + return target; +} + +int Counter::ByteSize() const { + int total_size = 0; + + if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) { + // optional double value = 1; + if (has_value()) { + total_size += 1 + 8; + } + + } + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void Counter::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const Counter* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void Counter::MergeFrom(const Counter& from) { + GOOGLE_CHECK_NE(&from, this); + if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { + if (from.has_value()) { + set_value(from.value()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void Counter::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void Counter::CopyFrom(const Counter& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool Counter::IsInitialized() const { + + return true; +} + +void Counter::Swap(Counter* other) { + if (other != this) { + std::swap(value_, other->value_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata Counter::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = Counter_descriptor_; + metadata.reflection = Counter_reflection_; + return metadata; +} + + +// =================================================================== + +#ifndef _MSC_VER +const int Quantile::kQuantileFieldNumber; +const int Quantile::kValueFieldNumber; +#endif // !_MSC_VER + +Quantile::Quantile() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.Quantile) +} + +void Quantile::InitAsDefaultInstance() { +} + +Quantile::Quantile(const Quantile& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Quantile) +} + +void Quantile::SharedCtor() { + _cached_size_ = 0; + quantile_ = 0; + value_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +Quantile::~Quantile() { + // @@protoc_insertion_point(destructor:io.prometheus.client.Quantile) + SharedDtor(); +} + +void Quantile::SharedDtor() { + if (this != default_instance_) { + } +} + +void Quantile::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* Quantile::descriptor() { + protobuf_AssignDescriptorsOnce(); + return Quantile_descriptor_; +} + +const Quantile& Quantile::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +Quantile* Quantile::default_instance_ = NULL; + +Quantile* Quantile::New() const { + return new Quantile; +} + +void Quantile::Clear() { +#define OFFSET_OF_FIELD_(f) (reinterpret_cast( \ + &reinterpret_cast(16)->f) - \ + reinterpret_cast(16)) + +#define ZR_(first, last) do { \ + size_t f = OFFSET_OF_FIELD_(first); \ + size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last); \ + ::memset(&first, 0, n); \ + } while (0) + + ZR_(quantile_, value_); + +#undef OFFSET_OF_FIELD_ +#undef ZR_ + + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool Quantile::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.Quantile) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional double quantile = 1; + case 1: { + if (tag == 9) { + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>( + input, &quantile_))); + set_has_quantile(); + } else { + goto handle_unusual; + } + if (input->ExpectTag(17)) goto parse_value; + break; + } + + // optional double value = 2; + case 2: { + if (tag == 17) { + parse_value: + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>( + input, &value_))); + set_has_value(); + } else { + goto handle_unusual; + } + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.Quantile) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.Quantile) + return false; +#undef DO_ +} + +void Quantile::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.Quantile) + // optional double quantile = 1; + if (has_quantile()) { + ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->quantile(), output); + } + + // optional double value = 2; + if (has_value()) { + ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->value(), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.Quantile) +} + +::google::protobuf::uint8* Quantile::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Quantile) + // optional double quantile = 1; + if (has_quantile()) { + target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->quantile(), target); + } + + // optional double value = 2; + if (has_value()) { + target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->value(), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Quantile) + return target; +} + +int Quantile::ByteSize() const { + int total_size = 0; + + if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) { + // optional double quantile = 1; + if (has_quantile()) { + total_size += 1 + 8; + } + + // optional double value = 2; + if (has_value()) { + total_size += 1 + 8; + } + + } + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void Quantile::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const Quantile* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void Quantile::MergeFrom(const Quantile& from) { + GOOGLE_CHECK_NE(&from, this); + if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { + if (from.has_quantile()) { + set_quantile(from.quantile()); + } + if (from.has_value()) { + set_value(from.value()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void Quantile::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void Quantile::CopyFrom(const Quantile& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool Quantile::IsInitialized() const { + + return true; +} + +void Quantile::Swap(Quantile* other) { + if (other != this) { + std::swap(quantile_, other->quantile_); + std::swap(value_, other->value_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata Quantile::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = Quantile_descriptor_; + metadata.reflection = Quantile_reflection_; + return metadata; +} + + +// =================================================================== + +#ifndef _MSC_VER +const int Summary::kSampleCountFieldNumber; +const int Summary::kSampleSumFieldNumber; +const int Summary::kQuantileFieldNumber; +#endif // !_MSC_VER + +Summary::Summary() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.Summary) +} + +void Summary::InitAsDefaultInstance() { +} + +Summary::Summary(const Summary& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Summary) +} + +void Summary::SharedCtor() { + _cached_size_ = 0; + sample_count_ = GOOGLE_ULONGLONG(0); + sample_sum_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +Summary::~Summary() { + // @@protoc_insertion_point(destructor:io.prometheus.client.Summary) + SharedDtor(); +} + +void Summary::SharedDtor() { + if (this != default_instance_) { + } +} + +void Summary::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* Summary::descriptor() { + protobuf_AssignDescriptorsOnce(); + return Summary_descriptor_; +} + +const Summary& Summary::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +Summary* Summary::default_instance_ = NULL; + +Summary* Summary::New() const { + return new Summary; +} + +void Summary::Clear() { +#define OFFSET_OF_FIELD_(f) (reinterpret_cast( \ + &reinterpret_cast(16)->f) - \ + reinterpret_cast(16)) + +#define ZR_(first, last) do { \ + size_t f = OFFSET_OF_FIELD_(first); \ + size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last); \ + ::memset(&first, 0, n); \ + } while (0) + + ZR_(sample_count_, sample_sum_); + +#undef OFFSET_OF_FIELD_ +#undef ZR_ + + quantile_.Clear(); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool Summary::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.Summary) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional uint64 sample_count = 1; + case 1: { + if (tag == 8) { + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>( + input, &sample_count_))); + set_has_sample_count(); + } else { + goto handle_unusual; + } + if (input->ExpectTag(17)) goto parse_sample_sum; + break; + } + + // optional double sample_sum = 2; + case 2: { + if (tag == 17) { + parse_sample_sum: + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>( + input, &sample_sum_))); + set_has_sample_sum(); + } else { + goto handle_unusual; + } + if (input->ExpectTag(26)) goto parse_quantile; + break; + } + + // repeated .io.prometheus.client.Quantile quantile = 3; + case 3: { + if (tag == 26) { + parse_quantile: + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, add_quantile())); + } else { + goto handle_unusual; + } + if (input->ExpectTag(26)) goto parse_quantile; + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.Summary) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.Summary) + return false; +#undef DO_ +} + +void Summary::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.Summary) + // optional uint64 sample_count = 1; + if (has_sample_count()) { + ::google::protobuf::internal::WireFormatLite::WriteUInt64(1, this->sample_count(), output); + } + + // optional double sample_sum = 2; + if (has_sample_sum()) { + ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->sample_sum(), output); + } + + // repeated .io.prometheus.client.Quantile quantile = 3; + for (int i = 0; i < this->quantile_size(); i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 3, this->quantile(i), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.Summary) +} + +::google::protobuf::uint8* Summary::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Summary) + // optional uint64 sample_count = 1; + if (has_sample_count()) { + target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(1, this->sample_count(), target); + } + + // optional double sample_sum = 2; + if (has_sample_sum()) { + target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->sample_sum(), target); + } + + // repeated .io.prometheus.client.Quantile quantile = 3; + for (int i = 0; i < this->quantile_size(); i++) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteMessageNoVirtualToArray( + 3, this->quantile(i), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Summary) + return target; +} + +int Summary::ByteSize() const { + int total_size = 0; + + if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) { + // optional uint64 sample_count = 1; + if (has_sample_count()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::UInt64Size( + this->sample_count()); + } + + // optional double sample_sum = 2; + if (has_sample_sum()) { + total_size += 1 + 8; + } + + } + // repeated .io.prometheus.client.Quantile quantile = 3; + total_size += 1 * this->quantile_size(); + for (int i = 0; i < this->quantile_size(); i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->quantile(i)); + } + + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void Summary::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const Summary* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void Summary::MergeFrom(const Summary& from) { + GOOGLE_CHECK_NE(&from, this); + quantile_.MergeFrom(from.quantile_); + if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { + if (from.has_sample_count()) { + set_sample_count(from.sample_count()); + } + if (from.has_sample_sum()) { + set_sample_sum(from.sample_sum()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void Summary::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void Summary::CopyFrom(const Summary& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool Summary::IsInitialized() const { + + return true; +} + +void Summary::Swap(Summary* other) { + if (other != this) { + std::swap(sample_count_, other->sample_count_); + std::swap(sample_sum_, other->sample_sum_); + quantile_.Swap(&other->quantile_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata Summary::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = Summary_descriptor_; + metadata.reflection = Summary_reflection_; + return metadata; +} + + +// =================================================================== + +#ifndef _MSC_VER +const int Untyped::kValueFieldNumber; +#endif // !_MSC_VER + +Untyped::Untyped() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.Untyped) +} + +void Untyped::InitAsDefaultInstance() { +} + +Untyped::Untyped(const Untyped& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Untyped) +} + +void Untyped::SharedCtor() { + _cached_size_ = 0; + value_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +Untyped::~Untyped() { + // @@protoc_insertion_point(destructor:io.prometheus.client.Untyped) + SharedDtor(); +} + +void Untyped::SharedDtor() { + if (this != default_instance_) { + } +} + +void Untyped::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* Untyped::descriptor() { + protobuf_AssignDescriptorsOnce(); + return Untyped_descriptor_; +} + +const Untyped& Untyped::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +Untyped* Untyped::default_instance_ = NULL; + +Untyped* Untyped::New() const { + return new Untyped; +} + +void Untyped::Clear() { + value_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool Untyped::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.Untyped) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional double value = 1; + case 1: { + if (tag == 9) { + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>( + input, &value_))); + set_has_value(); + } else { + goto handle_unusual; + } + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.Untyped) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.Untyped) + return false; +#undef DO_ +} + +void Untyped::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.Untyped) + // optional double value = 1; + if (has_value()) { + ::google::protobuf::internal::WireFormatLite::WriteDouble(1, this->value(), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.Untyped) +} + +::google::protobuf::uint8* Untyped::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Untyped) + // optional double value = 1; + if (has_value()) { + target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(1, this->value(), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Untyped) + return target; +} + +int Untyped::ByteSize() const { + int total_size = 0; + + if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) { + // optional double value = 1; + if (has_value()) { + total_size += 1 + 8; + } + + } + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void Untyped::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const Untyped* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void Untyped::MergeFrom(const Untyped& from) { + GOOGLE_CHECK_NE(&from, this); + if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { + if (from.has_value()) { + set_value(from.value()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void Untyped::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void Untyped::CopyFrom(const Untyped& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool Untyped::IsInitialized() const { + + return true; +} + +void Untyped::Swap(Untyped* other) { + if (other != this) { + std::swap(value_, other->value_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata Untyped::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = Untyped_descriptor_; + metadata.reflection = Untyped_reflection_; + return metadata; +} + + +// =================================================================== + +#ifndef _MSC_VER +const int Histogram::kSampleCountFieldNumber; +const int Histogram::kSampleSumFieldNumber; +const int Histogram::kBucketFieldNumber; +#endif // !_MSC_VER + +Histogram::Histogram() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.Histogram) +} + +void Histogram::InitAsDefaultInstance() { +} + +Histogram::Histogram(const Histogram& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Histogram) +} + +void Histogram::SharedCtor() { + _cached_size_ = 0; + sample_count_ = GOOGLE_ULONGLONG(0); + sample_sum_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +Histogram::~Histogram() { + // @@protoc_insertion_point(destructor:io.prometheus.client.Histogram) + SharedDtor(); +} + +void Histogram::SharedDtor() { + if (this != default_instance_) { + } +} + +void Histogram::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* Histogram::descriptor() { + protobuf_AssignDescriptorsOnce(); + return Histogram_descriptor_; +} + +const Histogram& Histogram::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +Histogram* Histogram::default_instance_ = NULL; + +Histogram* Histogram::New() const { + return new Histogram; +} + +void Histogram::Clear() { +#define OFFSET_OF_FIELD_(f) (reinterpret_cast( \ + &reinterpret_cast(16)->f) - \ + reinterpret_cast(16)) + +#define ZR_(first, last) do { \ + size_t f = OFFSET_OF_FIELD_(first); \ + size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last); \ + ::memset(&first, 0, n); \ + } while (0) + + ZR_(sample_count_, sample_sum_); + +#undef OFFSET_OF_FIELD_ +#undef ZR_ + + bucket_.Clear(); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool Histogram::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.Histogram) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional uint64 sample_count = 1; + case 1: { + if (tag == 8) { + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>( + input, &sample_count_))); + set_has_sample_count(); + } else { + goto handle_unusual; + } + if (input->ExpectTag(17)) goto parse_sample_sum; + break; + } + + // optional double sample_sum = 2; + case 2: { + if (tag == 17) { + parse_sample_sum: + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>( + input, &sample_sum_))); + set_has_sample_sum(); + } else { + goto handle_unusual; + } + if (input->ExpectTag(26)) goto parse_bucket; + break; + } + + // repeated .io.prometheus.client.Bucket bucket = 3; + case 3: { + if (tag == 26) { + parse_bucket: + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, add_bucket())); + } else { + goto handle_unusual; + } + if (input->ExpectTag(26)) goto parse_bucket; + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.Histogram) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.Histogram) + return false; +#undef DO_ +} + +void Histogram::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.Histogram) + // optional uint64 sample_count = 1; + if (has_sample_count()) { + ::google::protobuf::internal::WireFormatLite::WriteUInt64(1, this->sample_count(), output); + } + + // optional double sample_sum = 2; + if (has_sample_sum()) { + ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->sample_sum(), output); + } + + // repeated .io.prometheus.client.Bucket bucket = 3; + for (int i = 0; i < this->bucket_size(); i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 3, this->bucket(i), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.Histogram) +} + +::google::protobuf::uint8* Histogram::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Histogram) + // optional uint64 sample_count = 1; + if (has_sample_count()) { + target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(1, this->sample_count(), target); + } + + // optional double sample_sum = 2; + if (has_sample_sum()) { + target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->sample_sum(), target); + } + + // repeated .io.prometheus.client.Bucket bucket = 3; + for (int i = 0; i < this->bucket_size(); i++) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteMessageNoVirtualToArray( + 3, this->bucket(i), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Histogram) + return target; +} + +int Histogram::ByteSize() const { + int total_size = 0; + + if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) { + // optional uint64 sample_count = 1; + if (has_sample_count()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::UInt64Size( + this->sample_count()); + } + + // optional double sample_sum = 2; + if (has_sample_sum()) { + total_size += 1 + 8; + } + + } + // repeated .io.prometheus.client.Bucket bucket = 3; + total_size += 1 * this->bucket_size(); + for (int i = 0; i < this->bucket_size(); i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->bucket(i)); + } + + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void Histogram::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const Histogram* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void Histogram::MergeFrom(const Histogram& from) { + GOOGLE_CHECK_NE(&from, this); + bucket_.MergeFrom(from.bucket_); + if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { + if (from.has_sample_count()) { + set_sample_count(from.sample_count()); + } + if (from.has_sample_sum()) { + set_sample_sum(from.sample_sum()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void Histogram::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void Histogram::CopyFrom(const Histogram& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool Histogram::IsInitialized() const { + + return true; +} + +void Histogram::Swap(Histogram* other) { + if (other != this) { + std::swap(sample_count_, other->sample_count_); + std::swap(sample_sum_, other->sample_sum_); + bucket_.Swap(&other->bucket_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata Histogram::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = Histogram_descriptor_; + metadata.reflection = Histogram_reflection_; + return metadata; +} + + +// =================================================================== + +#ifndef _MSC_VER +const int Bucket::kCumulativeCountFieldNumber; +const int Bucket::kUpperBoundFieldNumber; +#endif // !_MSC_VER + +Bucket::Bucket() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.Bucket) +} + +void Bucket::InitAsDefaultInstance() { +} + +Bucket::Bucket(const Bucket& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Bucket) +} + +void Bucket::SharedCtor() { + _cached_size_ = 0; + cumulative_count_ = GOOGLE_ULONGLONG(0); + upper_bound_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +Bucket::~Bucket() { + // @@protoc_insertion_point(destructor:io.prometheus.client.Bucket) + SharedDtor(); +} + +void Bucket::SharedDtor() { + if (this != default_instance_) { + } +} + +void Bucket::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* Bucket::descriptor() { + protobuf_AssignDescriptorsOnce(); + return Bucket_descriptor_; +} + +const Bucket& Bucket::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +Bucket* Bucket::default_instance_ = NULL; + +Bucket* Bucket::New() const { + return new Bucket; +} + +void Bucket::Clear() { +#define OFFSET_OF_FIELD_(f) (reinterpret_cast( \ + &reinterpret_cast(16)->f) - \ + reinterpret_cast(16)) + +#define ZR_(first, last) do { \ + size_t f = OFFSET_OF_FIELD_(first); \ + size_t n = OFFSET_OF_FIELD_(last) - f + sizeof(last); \ + ::memset(&first, 0, n); \ + } while (0) + + ZR_(cumulative_count_, upper_bound_); + +#undef OFFSET_OF_FIELD_ +#undef ZR_ + + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool Bucket::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.Bucket) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional uint64 cumulative_count = 1; + case 1: { + if (tag == 8) { + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>( + input, &cumulative_count_))); + set_has_cumulative_count(); + } else { + goto handle_unusual; + } + if (input->ExpectTag(17)) goto parse_upper_bound; + break; + } + + // optional double upper_bound = 2; + case 2: { + if (tag == 17) { + parse_upper_bound: + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>( + input, &upper_bound_))); + set_has_upper_bound(); + } else { + goto handle_unusual; + } + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.Bucket) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.Bucket) + return false; +#undef DO_ +} + +void Bucket::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.Bucket) + // optional uint64 cumulative_count = 1; + if (has_cumulative_count()) { + ::google::protobuf::internal::WireFormatLite::WriteUInt64(1, this->cumulative_count(), output); + } + + // optional double upper_bound = 2; + if (has_upper_bound()) { + ::google::protobuf::internal::WireFormatLite::WriteDouble(2, this->upper_bound(), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.Bucket) +} + +::google::protobuf::uint8* Bucket::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Bucket) + // optional uint64 cumulative_count = 1; + if (has_cumulative_count()) { + target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(1, this->cumulative_count(), target); + } + + // optional double upper_bound = 2; + if (has_upper_bound()) { + target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(2, this->upper_bound(), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Bucket) + return target; +} + +int Bucket::ByteSize() const { + int total_size = 0; + + if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) { + // optional uint64 cumulative_count = 1; + if (has_cumulative_count()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::UInt64Size( + this->cumulative_count()); + } + + // optional double upper_bound = 2; + if (has_upper_bound()) { + total_size += 1 + 8; + } + + } + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void Bucket::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const Bucket* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void Bucket::MergeFrom(const Bucket& from) { + GOOGLE_CHECK_NE(&from, this); + if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { + if (from.has_cumulative_count()) { + set_cumulative_count(from.cumulative_count()); + } + if (from.has_upper_bound()) { + set_upper_bound(from.upper_bound()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void Bucket::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void Bucket::CopyFrom(const Bucket& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool Bucket::IsInitialized() const { + + return true; +} + +void Bucket::Swap(Bucket* other) { + if (other != this) { + std::swap(cumulative_count_, other->cumulative_count_); + std::swap(upper_bound_, other->upper_bound_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata Bucket::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = Bucket_descriptor_; + metadata.reflection = Bucket_reflection_; + return metadata; +} + + +// =================================================================== + +#ifndef _MSC_VER +const int Metric::kLabelFieldNumber; +const int Metric::kGaugeFieldNumber; +const int Metric::kCounterFieldNumber; +const int Metric::kSummaryFieldNumber; +const int Metric::kUntypedFieldNumber; +const int Metric::kHistogramFieldNumber; +const int Metric::kTimestampMsFieldNumber; +#endif // !_MSC_VER + +Metric::Metric() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.Metric) +} + +void Metric::InitAsDefaultInstance() { + gauge_ = const_cast< ::io::prometheus::client::Gauge*>(&::io::prometheus::client::Gauge::default_instance()); + counter_ = const_cast< ::io::prometheus::client::Counter*>(&::io::prometheus::client::Counter::default_instance()); + summary_ = const_cast< ::io::prometheus::client::Summary*>(&::io::prometheus::client::Summary::default_instance()); + untyped_ = const_cast< ::io::prometheus::client::Untyped*>(&::io::prometheus::client::Untyped::default_instance()); + histogram_ = const_cast< ::io::prometheus::client::Histogram*>(&::io::prometheus::client::Histogram::default_instance()); +} + +Metric::Metric(const Metric& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.Metric) +} + +void Metric::SharedCtor() { + _cached_size_ = 0; + gauge_ = NULL; + counter_ = NULL; + summary_ = NULL; + untyped_ = NULL; + histogram_ = NULL; + timestamp_ms_ = GOOGLE_LONGLONG(0); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +Metric::~Metric() { + // @@protoc_insertion_point(destructor:io.prometheus.client.Metric) + SharedDtor(); +} + +void Metric::SharedDtor() { + if (this != default_instance_) { + delete gauge_; + delete counter_; + delete summary_; + delete untyped_; + delete histogram_; + } +} + +void Metric::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* Metric::descriptor() { + protobuf_AssignDescriptorsOnce(); + return Metric_descriptor_; +} + +const Metric& Metric::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +Metric* Metric::default_instance_ = NULL; + +Metric* Metric::New() const { + return new Metric; +} + +void Metric::Clear() { + if (_has_bits_[0 / 32] & 126) { + if (has_gauge()) { + if (gauge_ != NULL) gauge_->::io::prometheus::client::Gauge::Clear(); + } + if (has_counter()) { + if (counter_ != NULL) counter_->::io::prometheus::client::Counter::Clear(); + } + if (has_summary()) { + if (summary_ != NULL) summary_->::io::prometheus::client::Summary::Clear(); + } + if (has_untyped()) { + if (untyped_ != NULL) untyped_->::io::prometheus::client::Untyped::Clear(); + } + if (has_histogram()) { + if (histogram_ != NULL) histogram_->::io::prometheus::client::Histogram::Clear(); + } + timestamp_ms_ = GOOGLE_LONGLONG(0); + } + label_.Clear(); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool Metric::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.Metric) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // repeated .io.prometheus.client.LabelPair label = 1; + case 1: { + if (tag == 10) { + parse_label: + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, add_label())); + } else { + goto handle_unusual; + } + if (input->ExpectTag(10)) goto parse_label; + if (input->ExpectTag(18)) goto parse_gauge; + break; + } + + // optional .io.prometheus.client.Gauge gauge = 2; + case 2: { + if (tag == 18) { + parse_gauge: + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, mutable_gauge())); + } else { + goto handle_unusual; + } + if (input->ExpectTag(26)) goto parse_counter; + break; + } + + // optional .io.prometheus.client.Counter counter = 3; + case 3: { + if (tag == 26) { + parse_counter: + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, mutable_counter())); + } else { + goto handle_unusual; + } + if (input->ExpectTag(34)) goto parse_summary; + break; + } + + // optional .io.prometheus.client.Summary summary = 4; + case 4: { + if (tag == 34) { + parse_summary: + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, mutable_summary())); + } else { + goto handle_unusual; + } + if (input->ExpectTag(42)) goto parse_untyped; + break; + } + + // optional .io.prometheus.client.Untyped untyped = 5; + case 5: { + if (tag == 42) { + parse_untyped: + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, mutable_untyped())); + } else { + goto handle_unusual; + } + if (input->ExpectTag(48)) goto parse_timestamp_ms; + break; + } + + // optional int64 timestamp_ms = 6; + case 6: { + if (tag == 48) { + parse_timestamp_ms: + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>( + input, ×tamp_ms_))); + set_has_timestamp_ms(); + } else { + goto handle_unusual; + } + if (input->ExpectTag(58)) goto parse_histogram; + break; + } + + // optional .io.prometheus.client.Histogram histogram = 7; + case 7: { + if (tag == 58) { + parse_histogram: + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, mutable_histogram())); + } else { + goto handle_unusual; + } + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.Metric) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.Metric) + return false; +#undef DO_ +} + +void Metric::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.Metric) + // repeated .io.prometheus.client.LabelPair label = 1; + for (int i = 0; i < this->label_size(); i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 1, this->label(i), output); + } + + // optional .io.prometheus.client.Gauge gauge = 2; + if (has_gauge()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 2, this->gauge(), output); + } + + // optional .io.prometheus.client.Counter counter = 3; + if (has_counter()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 3, this->counter(), output); + } + + // optional .io.prometheus.client.Summary summary = 4; + if (has_summary()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 4, this->summary(), output); + } + + // optional .io.prometheus.client.Untyped untyped = 5; + if (has_untyped()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 5, this->untyped(), output); + } + + // optional int64 timestamp_ms = 6; + if (has_timestamp_ms()) { + ::google::protobuf::internal::WireFormatLite::WriteInt64(6, this->timestamp_ms(), output); + } + + // optional .io.prometheus.client.Histogram histogram = 7; + if (has_histogram()) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 7, this->histogram(), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.Metric) +} + +::google::protobuf::uint8* Metric::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.Metric) + // repeated .io.prometheus.client.LabelPair label = 1; + for (int i = 0; i < this->label_size(); i++) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteMessageNoVirtualToArray( + 1, this->label(i), target); + } + + // optional .io.prometheus.client.Gauge gauge = 2; + if (has_gauge()) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteMessageNoVirtualToArray( + 2, this->gauge(), target); + } + + // optional .io.prometheus.client.Counter counter = 3; + if (has_counter()) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteMessageNoVirtualToArray( + 3, this->counter(), target); + } + + // optional .io.prometheus.client.Summary summary = 4; + if (has_summary()) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteMessageNoVirtualToArray( + 4, this->summary(), target); + } + + // optional .io.prometheus.client.Untyped untyped = 5; + if (has_untyped()) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteMessageNoVirtualToArray( + 5, this->untyped(), target); + } + + // optional int64 timestamp_ms = 6; + if (has_timestamp_ms()) { + target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(6, this->timestamp_ms(), target); + } + + // optional .io.prometheus.client.Histogram histogram = 7; + if (has_histogram()) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteMessageNoVirtualToArray( + 7, this->histogram(), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.Metric) + return target; +} + +int Metric::ByteSize() const { + int total_size = 0; + + if (_has_bits_[1 / 32] & (0xffu << (1 % 32))) { + // optional .io.prometheus.client.Gauge gauge = 2; + if (has_gauge()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->gauge()); + } + + // optional .io.prometheus.client.Counter counter = 3; + if (has_counter()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->counter()); + } + + // optional .io.prometheus.client.Summary summary = 4; + if (has_summary()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->summary()); + } + + // optional .io.prometheus.client.Untyped untyped = 5; + if (has_untyped()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->untyped()); + } + + // optional .io.prometheus.client.Histogram histogram = 7; + if (has_histogram()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->histogram()); + } + + // optional int64 timestamp_ms = 6; + if (has_timestamp_ms()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::Int64Size( + this->timestamp_ms()); + } + + } + // repeated .io.prometheus.client.LabelPair label = 1; + total_size += 1 * this->label_size(); + for (int i = 0; i < this->label_size(); i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->label(i)); + } + + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void Metric::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const Metric* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void Metric::MergeFrom(const Metric& from) { + GOOGLE_CHECK_NE(&from, this); + label_.MergeFrom(from.label_); + if (from._has_bits_[1 / 32] & (0xffu << (1 % 32))) { + if (from.has_gauge()) { + mutable_gauge()->::io::prometheus::client::Gauge::MergeFrom(from.gauge()); + } + if (from.has_counter()) { + mutable_counter()->::io::prometheus::client::Counter::MergeFrom(from.counter()); + } + if (from.has_summary()) { + mutable_summary()->::io::prometheus::client::Summary::MergeFrom(from.summary()); + } + if (from.has_untyped()) { + mutable_untyped()->::io::prometheus::client::Untyped::MergeFrom(from.untyped()); + } + if (from.has_histogram()) { + mutable_histogram()->::io::prometheus::client::Histogram::MergeFrom(from.histogram()); + } + if (from.has_timestamp_ms()) { + set_timestamp_ms(from.timestamp_ms()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void Metric::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void Metric::CopyFrom(const Metric& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool Metric::IsInitialized() const { + + return true; +} + +void Metric::Swap(Metric* other) { + if (other != this) { + label_.Swap(&other->label_); + std::swap(gauge_, other->gauge_); + std::swap(counter_, other->counter_); + std::swap(summary_, other->summary_); + std::swap(untyped_, other->untyped_); + std::swap(histogram_, other->histogram_); + std::swap(timestamp_ms_, other->timestamp_ms_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata Metric::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = Metric_descriptor_; + metadata.reflection = Metric_reflection_; + return metadata; +} + + +// =================================================================== + +#ifndef _MSC_VER +const int MetricFamily::kNameFieldNumber; +const int MetricFamily::kHelpFieldNumber; +const int MetricFamily::kTypeFieldNumber; +const int MetricFamily::kMetricFieldNumber; +#endif // !_MSC_VER + +MetricFamily::MetricFamily() + : ::google::protobuf::Message() { + SharedCtor(); + // @@protoc_insertion_point(constructor:io.prometheus.client.MetricFamily) +} + +void MetricFamily::InitAsDefaultInstance() { +} + +MetricFamily::MetricFamily(const MetricFamily& from) + : ::google::protobuf::Message() { + SharedCtor(); + MergeFrom(from); + // @@protoc_insertion_point(copy_constructor:io.prometheus.client.MetricFamily) +} + +void MetricFamily::SharedCtor() { + ::google::protobuf::internal::GetEmptyString(); + _cached_size_ = 0; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + help_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + type_ = 0; + ::memset(_has_bits_, 0, sizeof(_has_bits_)); +} + +MetricFamily::~MetricFamily() { + // @@protoc_insertion_point(destructor:io.prometheus.client.MetricFamily) + SharedDtor(); +} + +void MetricFamily::SharedDtor() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (help_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete help_; + } + if (this != default_instance_) { + } +} + +void MetricFamily::SetCachedSize(int size) const { + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); +} +const ::google::protobuf::Descriptor* MetricFamily::descriptor() { + protobuf_AssignDescriptorsOnce(); + return MetricFamily_descriptor_; +} + +const MetricFamily& MetricFamily::default_instance() { + if (default_instance_ == NULL) protobuf_AddDesc_metrics_2eproto(); + return *default_instance_; +} + +MetricFamily* MetricFamily::default_instance_ = NULL; + +MetricFamily* MetricFamily::New() const { + return new MetricFamily; +} + +void MetricFamily::Clear() { + if (_has_bits_[0 / 32] & 7) { + if (has_name()) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + } + if (has_help()) { + if (help_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + help_->clear(); + } + } + type_ = 0; + } + metric_.Clear(); + ::memset(_has_bits_, 0, sizeof(_has_bits_)); + mutable_unknown_fields()->Clear(); +} + +bool MetricFamily::MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input) { +#define DO_(EXPRESSION) if (!(EXPRESSION)) goto failure + ::google::protobuf::uint32 tag; + // @@protoc_insertion_point(parse_start:io.prometheus.client.MetricFamily) + for (;;) { + ::std::pair< ::google::protobuf::uint32, bool> p = input->ReadTagWithCutoff(127); + tag = p.first; + if (!p.second) goto handle_unusual; + switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) { + // optional string name = 1; + case 1: { + if (tag == 10) { + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_name())); + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::PARSE, + "name"); + } else { + goto handle_unusual; + } + if (input->ExpectTag(18)) goto parse_help; + break; + } + + // optional string help = 2; + case 2: { + if (tag == 18) { + parse_help: + DO_(::google::protobuf::internal::WireFormatLite::ReadString( + input, this->mutable_help())); + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->help().data(), this->help().length(), + ::google::protobuf::internal::WireFormat::PARSE, + "help"); + } else { + goto handle_unusual; + } + if (input->ExpectTag(24)) goto parse_type; + break; + } + + // optional .io.prometheus.client.MetricType type = 3; + case 3: { + if (tag == 24) { + parse_type: + int value; + DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive< + int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>( + input, &value))); + if (::io::prometheus::client::MetricType_IsValid(value)) { + set_type(static_cast< ::io::prometheus::client::MetricType >(value)); + } else { + mutable_unknown_fields()->AddVarint(3, value); + } + } else { + goto handle_unusual; + } + if (input->ExpectTag(34)) goto parse_metric; + break; + } + + // repeated .io.prometheus.client.Metric metric = 4; + case 4: { + if (tag == 34) { + parse_metric: + DO_(::google::protobuf::internal::WireFormatLite::ReadMessageNoVirtual( + input, add_metric())); + } else { + goto handle_unusual; + } + if (input->ExpectTag(34)) goto parse_metric; + if (input->ExpectAtEnd()) goto success; + break; + } + + default: { + handle_unusual: + if (tag == 0 || + ::google::protobuf::internal::WireFormatLite::GetTagWireType(tag) == + ::google::protobuf::internal::WireFormatLite::WIRETYPE_END_GROUP) { + goto success; + } + DO_(::google::protobuf::internal::WireFormat::SkipField( + input, tag, mutable_unknown_fields())); + break; + } + } + } +success: + // @@protoc_insertion_point(parse_success:io.prometheus.client.MetricFamily) + return true; +failure: + // @@protoc_insertion_point(parse_failure:io.prometheus.client.MetricFamily) + return false; +#undef DO_ +} + +void MetricFamily::SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const { + // @@protoc_insertion_point(serialize_start:io.prometheus.client.MetricFamily) + // optional string name = 1; + if (has_name()) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "name"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 1, this->name(), output); + } + + // optional string help = 2; + if (has_help()) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->help().data(), this->help().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "help"); + ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased( + 2, this->help(), output); + } + + // optional .io.prometheus.client.MetricType type = 3; + if (has_type()) { + ::google::protobuf::internal::WireFormatLite::WriteEnum( + 3, this->type(), output); + } + + // repeated .io.prometheus.client.Metric metric = 4; + for (int i = 0; i < this->metric_size(); i++) { + ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray( + 4, this->metric(i), output); + } + + if (!unknown_fields().empty()) { + ::google::protobuf::internal::WireFormat::SerializeUnknownFields( + unknown_fields(), output); + } + // @@protoc_insertion_point(serialize_end:io.prometheus.client.MetricFamily) +} + +::google::protobuf::uint8* MetricFamily::SerializeWithCachedSizesToArray( + ::google::protobuf::uint8* target) const { + // @@protoc_insertion_point(serialize_to_array_start:io.prometheus.client.MetricFamily) + // optional string name = 1; + if (has_name()) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->name().data(), this->name().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "name"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 1, this->name(), target); + } + + // optional string help = 2; + if (has_help()) { + ::google::protobuf::internal::WireFormat::VerifyUTF8StringNamedField( + this->help().data(), this->help().length(), + ::google::protobuf::internal::WireFormat::SERIALIZE, + "help"); + target = + ::google::protobuf::internal::WireFormatLite::WriteStringToArray( + 2, this->help(), target); + } + + // optional .io.prometheus.client.MetricType type = 3; + if (has_type()) { + target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray( + 3, this->type(), target); + } + + // repeated .io.prometheus.client.Metric metric = 4; + for (int i = 0; i < this->metric_size(); i++) { + target = ::google::protobuf::internal::WireFormatLite:: + WriteMessageNoVirtualToArray( + 4, this->metric(i), target); + } + + if (!unknown_fields().empty()) { + target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray( + unknown_fields(), target); + } + // @@protoc_insertion_point(serialize_to_array_end:io.prometheus.client.MetricFamily) + return target; +} + +int MetricFamily::ByteSize() const { + int total_size = 0; + + if (_has_bits_[0 / 32] & (0xffu << (0 % 32))) { + // optional string name = 1; + if (has_name()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->name()); + } + + // optional string help = 2; + if (has_help()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::StringSize( + this->help()); + } + + // optional .io.prometheus.client.MetricType type = 3; + if (has_type()) { + total_size += 1 + + ::google::protobuf::internal::WireFormatLite::EnumSize(this->type()); + } + + } + // repeated .io.prometheus.client.Metric metric = 4; + total_size += 1 * this->metric_size(); + for (int i = 0; i < this->metric_size(); i++) { + total_size += + ::google::protobuf::internal::WireFormatLite::MessageSizeNoVirtual( + this->metric(i)); + } + + if (!unknown_fields().empty()) { + total_size += + ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize( + unknown_fields()); + } + GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN(); + _cached_size_ = total_size; + GOOGLE_SAFE_CONCURRENT_WRITES_END(); + return total_size; +} + +void MetricFamily::MergeFrom(const ::google::protobuf::Message& from) { + GOOGLE_CHECK_NE(&from, this); + const MetricFamily* source = + ::google::protobuf::internal::dynamic_cast_if_available( + &from); + if (source == NULL) { + ::google::protobuf::internal::ReflectionOps::Merge(from, this); + } else { + MergeFrom(*source); + } +} + +void MetricFamily::MergeFrom(const MetricFamily& from) { + GOOGLE_CHECK_NE(&from, this); + metric_.MergeFrom(from.metric_); + if (from._has_bits_[0 / 32] & (0xffu << (0 % 32))) { + if (from.has_name()) { + set_name(from.name()); + } + if (from.has_help()) { + set_help(from.help()); + } + if (from.has_type()) { + set_type(from.type()); + } + } + mutable_unknown_fields()->MergeFrom(from.unknown_fields()); +} + +void MetricFamily::CopyFrom(const ::google::protobuf::Message& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +void MetricFamily::CopyFrom(const MetricFamily& from) { + if (&from == this) return; + Clear(); + MergeFrom(from); +} + +bool MetricFamily::IsInitialized() const { + + return true; +} + +void MetricFamily::Swap(MetricFamily* other) { + if (other != this) { + std::swap(name_, other->name_); + std::swap(help_, other->help_); + std::swap(type_, other->type_); + metric_.Swap(&other->metric_); + std::swap(_has_bits_[0], other->_has_bits_[0]); + _unknown_fields_.Swap(&other->_unknown_fields_); + std::swap(_cached_size_, other->_cached_size_); + } +} + +::google::protobuf::Metadata MetricFamily::GetMetadata() const { + protobuf_AssignDescriptorsOnce(); + ::google::protobuf::Metadata metadata; + metadata.descriptor = MetricFamily_descriptor_; + metadata.reflection = MetricFamily_reflection_; + return metadata; +} + + +// @@protoc_insertion_point(namespace_scope) + +} // namespace client +} // namespace prometheus +} // namespace io + +// @@protoc_insertion_point(global_scope) diff --git a/vendor/github.com/prometheus/client_model/cpp/metrics.pb.h b/vendor/github.com/prometheus/client_model/cpp/metrics.pb.h new file mode 100644 index 0000000..206ba37 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/cpp/metrics.pb.h @@ -0,0 +1,2072 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: metrics.proto + +#ifndef PROTOBUF_metrics_2eproto__INCLUDED +#define PROTOBUF_metrics_2eproto__INCLUDED + +#include + +#include + +#if GOOGLE_PROTOBUF_VERSION < 2006000 +#error This file was generated by a newer version of protoc which is +#error incompatible with your Protocol Buffer headers. Please update +#error your headers. +#endif +#if 2006001 < GOOGLE_PROTOBUF_MIN_PROTOC_VERSION +#error This file was generated by an older version of protoc which is +#error incompatible with your Protocol Buffer headers. Please +#error regenerate this file with a newer version of protoc. +#endif + +#include +#include +#include +#include +#include +#include +// @@protoc_insertion_point(includes) + +namespace io { +namespace prometheus { +namespace client { + +// Internal implementation detail -- do not call these. +void protobuf_AddDesc_metrics_2eproto(); +void protobuf_AssignDesc_metrics_2eproto(); +void protobuf_ShutdownFile_metrics_2eproto(); + +class LabelPair; +class Gauge; +class Counter; +class Quantile; +class Summary; +class Untyped; +class Histogram; +class Bucket; +class Metric; +class MetricFamily; + +enum MetricType { + COUNTER = 0, + GAUGE = 1, + SUMMARY = 2, + UNTYPED = 3, + HISTOGRAM = 4 +}; +bool MetricType_IsValid(int value); +const MetricType MetricType_MIN = COUNTER; +const MetricType MetricType_MAX = HISTOGRAM; +const int MetricType_ARRAYSIZE = MetricType_MAX + 1; + +const ::google::protobuf::EnumDescriptor* MetricType_descriptor(); +inline const ::std::string& MetricType_Name(MetricType value) { + return ::google::protobuf::internal::NameOfEnum( + MetricType_descriptor(), value); +} +inline bool MetricType_Parse( + const ::std::string& name, MetricType* value) { + return ::google::protobuf::internal::ParseNamedEnum( + MetricType_descriptor(), name, value); +} +// =================================================================== + +class LabelPair : public ::google::protobuf::Message { + public: + LabelPair(); + virtual ~LabelPair(); + + LabelPair(const LabelPair& from); + + inline LabelPair& operator=(const LabelPair& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const LabelPair& default_instance(); + + void Swap(LabelPair* other); + + // implements Message ---------------------------------------------- + + LabelPair* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const LabelPair& from); + void MergeFrom(const LabelPair& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // optional string value = 2; + inline bool has_value() const; + inline void clear_value(); + static const int kValueFieldNumber = 2; + inline const ::std::string& value() const; + inline void set_value(const ::std::string& value); + inline void set_value(const char* value); + inline void set_value(const char* value, size_t size); + inline ::std::string* mutable_value(); + inline ::std::string* release_value(); + inline void set_allocated_value(::std::string* value); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_value(); + inline void clear_has_value(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::std::string* value_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static LabelPair* default_instance_; +}; +// ------------------------------------------------------------------- + +class Gauge : public ::google::protobuf::Message { + public: + Gauge(); + virtual ~Gauge(); + + Gauge(const Gauge& from); + + inline Gauge& operator=(const Gauge& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const Gauge& default_instance(); + + void Swap(Gauge* other); + + // implements Message ---------------------------------------------- + + Gauge* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const Gauge& from); + void MergeFrom(const Gauge& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional double value = 1; + inline bool has_value() const; + inline void clear_value(); + static const int kValueFieldNumber = 1; + inline double value() const; + inline void set_value(double value); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge) + private: + inline void set_has_value(); + inline void clear_has_value(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + double value_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static Gauge* default_instance_; +}; +// ------------------------------------------------------------------- + +class Counter : public ::google::protobuf::Message { + public: + Counter(); + virtual ~Counter(); + + Counter(const Counter& from); + + inline Counter& operator=(const Counter& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const Counter& default_instance(); + + void Swap(Counter* other); + + // implements Message ---------------------------------------------- + + Counter* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const Counter& from); + void MergeFrom(const Counter& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional double value = 1; + inline bool has_value() const; + inline void clear_value(); + static const int kValueFieldNumber = 1; + inline double value() const; + inline void set_value(double value); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter) + private: + inline void set_has_value(); + inline void clear_has_value(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + double value_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static Counter* default_instance_; +}; +// ------------------------------------------------------------------- + +class Quantile : public ::google::protobuf::Message { + public: + Quantile(); + virtual ~Quantile(); + + Quantile(const Quantile& from); + + inline Quantile& operator=(const Quantile& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const Quantile& default_instance(); + + void Swap(Quantile* other); + + // implements Message ---------------------------------------------- + + Quantile* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const Quantile& from); + void MergeFrom(const Quantile& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional double quantile = 1; + inline bool has_quantile() const; + inline void clear_quantile(); + static const int kQuantileFieldNumber = 1; + inline double quantile() const; + inline void set_quantile(double value); + + // optional double value = 2; + inline bool has_value() const; + inline void clear_value(); + static const int kValueFieldNumber = 2; + inline double value() const; + inline void set_value(double value); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile) + private: + inline void set_has_quantile(); + inline void clear_has_quantile(); + inline void set_has_value(); + inline void clear_has_value(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + double quantile_; + double value_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static Quantile* default_instance_; +}; +// ------------------------------------------------------------------- + +class Summary : public ::google::protobuf::Message { + public: + Summary(); + virtual ~Summary(); + + Summary(const Summary& from); + + inline Summary& operator=(const Summary& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const Summary& default_instance(); + + void Swap(Summary* other); + + // implements Message ---------------------------------------------- + + Summary* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const Summary& from); + void MergeFrom(const Summary& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional uint64 sample_count = 1; + inline bool has_sample_count() const; + inline void clear_sample_count(); + static const int kSampleCountFieldNumber = 1; + inline ::google::protobuf::uint64 sample_count() const; + inline void set_sample_count(::google::protobuf::uint64 value); + + // optional double sample_sum = 2; + inline bool has_sample_sum() const; + inline void clear_sample_sum(); + static const int kSampleSumFieldNumber = 2; + inline double sample_sum() const; + inline void set_sample_sum(double value); + + // repeated .io.prometheus.client.Quantile quantile = 3; + inline int quantile_size() const; + inline void clear_quantile(); + static const int kQuantileFieldNumber = 3; + inline const ::io::prometheus::client::Quantile& quantile(int index) const; + inline ::io::prometheus::client::Quantile* mutable_quantile(int index); + inline ::io::prometheus::client::Quantile* add_quantile(); + inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile >& + quantile() const; + inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile >* + mutable_quantile(); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary) + private: + inline void set_has_sample_count(); + inline void clear_has_sample_count(); + inline void set_has_sample_sum(); + inline void clear_has_sample_sum(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::uint64 sample_count_; + double sample_sum_; + ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile > quantile_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static Summary* default_instance_; +}; +// ------------------------------------------------------------------- + +class Untyped : public ::google::protobuf::Message { + public: + Untyped(); + virtual ~Untyped(); + + Untyped(const Untyped& from); + + inline Untyped& operator=(const Untyped& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const Untyped& default_instance(); + + void Swap(Untyped* other); + + // implements Message ---------------------------------------------- + + Untyped* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const Untyped& from); + void MergeFrom(const Untyped& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional double value = 1; + inline bool has_value() const; + inline void clear_value(); + static const int kValueFieldNumber = 1; + inline double value() const; + inline void set_value(double value); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped) + private: + inline void set_has_value(); + inline void clear_has_value(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + double value_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static Untyped* default_instance_; +}; +// ------------------------------------------------------------------- + +class Histogram : public ::google::protobuf::Message { + public: + Histogram(); + virtual ~Histogram(); + + Histogram(const Histogram& from); + + inline Histogram& operator=(const Histogram& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const Histogram& default_instance(); + + void Swap(Histogram* other); + + // implements Message ---------------------------------------------- + + Histogram* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const Histogram& from); + void MergeFrom(const Histogram& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional uint64 sample_count = 1; + inline bool has_sample_count() const; + inline void clear_sample_count(); + static const int kSampleCountFieldNumber = 1; + inline ::google::protobuf::uint64 sample_count() const; + inline void set_sample_count(::google::protobuf::uint64 value); + + // optional double sample_sum = 2; + inline bool has_sample_sum() const; + inline void clear_sample_sum(); + static const int kSampleSumFieldNumber = 2; + inline double sample_sum() const; + inline void set_sample_sum(double value); + + // repeated .io.prometheus.client.Bucket bucket = 3; + inline int bucket_size() const; + inline void clear_bucket(); + static const int kBucketFieldNumber = 3; + inline const ::io::prometheus::client::Bucket& bucket(int index) const; + inline ::io::prometheus::client::Bucket* mutable_bucket(int index); + inline ::io::prometheus::client::Bucket* add_bucket(); + inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket >& + bucket() const; + inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket >* + mutable_bucket(); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram) + private: + inline void set_has_sample_count(); + inline void clear_has_sample_count(); + inline void set_has_sample_sum(); + inline void clear_has_sample_sum(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::uint64 sample_count_; + double sample_sum_; + ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket > bucket_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static Histogram* default_instance_; +}; +// ------------------------------------------------------------------- + +class Bucket : public ::google::protobuf::Message { + public: + Bucket(); + virtual ~Bucket(); + + Bucket(const Bucket& from); + + inline Bucket& operator=(const Bucket& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const Bucket& default_instance(); + + void Swap(Bucket* other); + + // implements Message ---------------------------------------------- + + Bucket* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const Bucket& from); + void MergeFrom(const Bucket& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional uint64 cumulative_count = 1; + inline bool has_cumulative_count() const; + inline void clear_cumulative_count(); + static const int kCumulativeCountFieldNumber = 1; + inline ::google::protobuf::uint64 cumulative_count() const; + inline void set_cumulative_count(::google::protobuf::uint64 value); + + // optional double upper_bound = 2; + inline bool has_upper_bound() const; + inline void clear_upper_bound(); + static const int kUpperBoundFieldNumber = 2; + inline double upper_bound() const; + inline void set_upper_bound(double value); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket) + private: + inline void set_has_cumulative_count(); + inline void clear_has_cumulative_count(); + inline void set_has_upper_bound(); + inline void clear_has_upper_bound(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::uint64 cumulative_count_; + double upper_bound_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static Bucket* default_instance_; +}; +// ------------------------------------------------------------------- + +class Metric : public ::google::protobuf::Message { + public: + Metric(); + virtual ~Metric(); + + Metric(const Metric& from); + + inline Metric& operator=(const Metric& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const Metric& default_instance(); + + void Swap(Metric* other); + + // implements Message ---------------------------------------------- + + Metric* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const Metric& from); + void MergeFrom(const Metric& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // repeated .io.prometheus.client.LabelPair label = 1; + inline int label_size() const; + inline void clear_label(); + static const int kLabelFieldNumber = 1; + inline const ::io::prometheus::client::LabelPair& label(int index) const; + inline ::io::prometheus::client::LabelPair* mutable_label(int index); + inline ::io::prometheus::client::LabelPair* add_label(); + inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair >& + label() const; + inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair >* + mutable_label(); + + // optional .io.prometheus.client.Gauge gauge = 2; + inline bool has_gauge() const; + inline void clear_gauge(); + static const int kGaugeFieldNumber = 2; + inline const ::io::prometheus::client::Gauge& gauge() const; + inline ::io::prometheus::client::Gauge* mutable_gauge(); + inline ::io::prometheus::client::Gauge* release_gauge(); + inline void set_allocated_gauge(::io::prometheus::client::Gauge* gauge); + + // optional .io.prometheus.client.Counter counter = 3; + inline bool has_counter() const; + inline void clear_counter(); + static const int kCounterFieldNumber = 3; + inline const ::io::prometheus::client::Counter& counter() const; + inline ::io::prometheus::client::Counter* mutable_counter(); + inline ::io::prometheus::client::Counter* release_counter(); + inline void set_allocated_counter(::io::prometheus::client::Counter* counter); + + // optional .io.prometheus.client.Summary summary = 4; + inline bool has_summary() const; + inline void clear_summary(); + static const int kSummaryFieldNumber = 4; + inline const ::io::prometheus::client::Summary& summary() const; + inline ::io::prometheus::client::Summary* mutable_summary(); + inline ::io::prometheus::client::Summary* release_summary(); + inline void set_allocated_summary(::io::prometheus::client::Summary* summary); + + // optional .io.prometheus.client.Untyped untyped = 5; + inline bool has_untyped() const; + inline void clear_untyped(); + static const int kUntypedFieldNumber = 5; + inline const ::io::prometheus::client::Untyped& untyped() const; + inline ::io::prometheus::client::Untyped* mutable_untyped(); + inline ::io::prometheus::client::Untyped* release_untyped(); + inline void set_allocated_untyped(::io::prometheus::client::Untyped* untyped); + + // optional .io.prometheus.client.Histogram histogram = 7; + inline bool has_histogram() const; + inline void clear_histogram(); + static const int kHistogramFieldNumber = 7; + inline const ::io::prometheus::client::Histogram& histogram() const; + inline ::io::prometheus::client::Histogram* mutable_histogram(); + inline ::io::prometheus::client::Histogram* release_histogram(); + inline void set_allocated_histogram(::io::prometheus::client::Histogram* histogram); + + // optional int64 timestamp_ms = 6; + inline bool has_timestamp_ms() const; + inline void clear_timestamp_ms(); + static const int kTimestampMsFieldNumber = 6; + inline ::google::protobuf::int64 timestamp_ms() const; + inline void set_timestamp_ms(::google::protobuf::int64 value); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric) + private: + inline void set_has_gauge(); + inline void clear_has_gauge(); + inline void set_has_counter(); + inline void clear_has_counter(); + inline void set_has_summary(); + inline void clear_has_summary(); + inline void set_has_untyped(); + inline void clear_has_untyped(); + inline void set_has_histogram(); + inline void clear_has_histogram(); + inline void set_has_timestamp_ms(); + inline void clear_has_timestamp_ms(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair > label_; + ::io::prometheus::client::Gauge* gauge_; + ::io::prometheus::client::Counter* counter_; + ::io::prometheus::client::Summary* summary_; + ::io::prometheus::client::Untyped* untyped_; + ::io::prometheus::client::Histogram* histogram_; + ::google::protobuf::int64 timestamp_ms_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static Metric* default_instance_; +}; +// ------------------------------------------------------------------- + +class MetricFamily : public ::google::protobuf::Message { + public: + MetricFamily(); + virtual ~MetricFamily(); + + MetricFamily(const MetricFamily& from); + + inline MetricFamily& operator=(const MetricFamily& from) { + CopyFrom(from); + return *this; + } + + inline const ::google::protobuf::UnknownFieldSet& unknown_fields() const { + return _unknown_fields_; + } + + inline ::google::protobuf::UnknownFieldSet* mutable_unknown_fields() { + return &_unknown_fields_; + } + + static const ::google::protobuf::Descriptor* descriptor(); + static const MetricFamily& default_instance(); + + void Swap(MetricFamily* other); + + // implements Message ---------------------------------------------- + + MetricFamily* New() const; + void CopyFrom(const ::google::protobuf::Message& from); + void MergeFrom(const ::google::protobuf::Message& from); + void CopyFrom(const MetricFamily& from); + void MergeFrom(const MetricFamily& from); + void Clear(); + bool IsInitialized() const; + + int ByteSize() const; + bool MergePartialFromCodedStream( + ::google::protobuf::io::CodedInputStream* input); + void SerializeWithCachedSizes( + ::google::protobuf::io::CodedOutputStream* output) const; + ::google::protobuf::uint8* SerializeWithCachedSizesToArray(::google::protobuf::uint8* output) const; + int GetCachedSize() const { return _cached_size_; } + private: + void SharedCtor(); + void SharedDtor(); + void SetCachedSize(int size) const; + public: + ::google::protobuf::Metadata GetMetadata() const; + + // nested types ---------------------------------------------------- + + // accessors ------------------------------------------------------- + + // optional string name = 1; + inline bool has_name() const; + inline void clear_name(); + static const int kNameFieldNumber = 1; + inline const ::std::string& name() const; + inline void set_name(const ::std::string& value); + inline void set_name(const char* value); + inline void set_name(const char* value, size_t size); + inline ::std::string* mutable_name(); + inline ::std::string* release_name(); + inline void set_allocated_name(::std::string* name); + + // optional string help = 2; + inline bool has_help() const; + inline void clear_help(); + static const int kHelpFieldNumber = 2; + inline const ::std::string& help() const; + inline void set_help(const ::std::string& value); + inline void set_help(const char* value); + inline void set_help(const char* value, size_t size); + inline ::std::string* mutable_help(); + inline ::std::string* release_help(); + inline void set_allocated_help(::std::string* help); + + // optional .io.prometheus.client.MetricType type = 3; + inline bool has_type() const; + inline void clear_type(); + static const int kTypeFieldNumber = 3; + inline ::io::prometheus::client::MetricType type() const; + inline void set_type(::io::prometheus::client::MetricType value); + + // repeated .io.prometheus.client.Metric metric = 4; + inline int metric_size() const; + inline void clear_metric(); + static const int kMetricFieldNumber = 4; + inline const ::io::prometheus::client::Metric& metric(int index) const; + inline ::io::prometheus::client::Metric* mutable_metric(int index); + inline ::io::prometheus::client::Metric* add_metric(); + inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric >& + metric() const; + inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric >* + mutable_metric(); + + // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily) + private: + inline void set_has_name(); + inline void clear_has_name(); + inline void set_has_help(); + inline void clear_has_help(); + inline void set_has_type(); + inline void clear_has_type(); + + ::google::protobuf::UnknownFieldSet _unknown_fields_; + + ::google::protobuf::uint32 _has_bits_[1]; + mutable int _cached_size_; + ::std::string* name_; + ::std::string* help_; + ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric > metric_; + int type_; + friend void protobuf_AddDesc_metrics_2eproto(); + friend void protobuf_AssignDesc_metrics_2eproto(); + friend void protobuf_ShutdownFile_metrics_2eproto(); + + void InitAsDefaultInstance(); + static MetricFamily* default_instance_; +}; +// =================================================================== + + +// =================================================================== + +// LabelPair + +// optional string name = 1; +inline bool LabelPair::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void LabelPair::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void LabelPair::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void LabelPair::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& LabelPair::name() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.LabelPair.name) + return *name_; +} +inline void LabelPair::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:io.prometheus.client.LabelPair.name) +} +inline void LabelPair::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:io.prometheus.client.LabelPair.name) +} +inline void LabelPair::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:io.prometheus.client.LabelPair.name) +} +inline ::std::string* LabelPair::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:io.prometheus.client.LabelPair.name) + return name_; +} +inline ::std::string* LabelPair::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void LabelPair::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.LabelPair.name) +} + +// optional string value = 2; +inline bool LabelPair::has_value() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void LabelPair::set_has_value() { + _has_bits_[0] |= 0x00000002u; +} +inline void LabelPair::clear_has_value() { + _has_bits_[0] &= ~0x00000002u; +} +inline void LabelPair::clear_value() { + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_->clear(); + } + clear_has_value(); +} +inline const ::std::string& LabelPair::value() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.LabelPair.value) + return *value_; +} +inline void LabelPair::set_value(const ::std::string& value) { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + value_->assign(value); + // @@protoc_insertion_point(field_set:io.prometheus.client.LabelPair.value) +} +inline void LabelPair::set_value(const char* value) { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + value_->assign(value); + // @@protoc_insertion_point(field_set_char:io.prometheus.client.LabelPair.value) +} +inline void LabelPair::set_value(const char* value, size_t size) { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + value_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:io.prometheus.client.LabelPair.value) +} +inline ::std::string* LabelPair::mutable_value() { + set_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + value_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:io.prometheus.client.LabelPair.value) + return value_; +} +inline ::std::string* LabelPair::release_value() { + clear_has_value(); + if (value_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = value_; + value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void LabelPair::set_allocated_value(::std::string* value) { + if (value_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete value_; + } + if (value) { + set_has_value(); + value_ = value; + } else { + clear_has_value(); + value_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.LabelPair.value) +} + +// ------------------------------------------------------------------- + +// Gauge + +// optional double value = 1; +inline bool Gauge::has_value() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void Gauge::set_has_value() { + _has_bits_[0] |= 0x00000001u; +} +inline void Gauge::clear_has_value() { + _has_bits_[0] &= ~0x00000001u; +} +inline void Gauge::clear_value() { + value_ = 0; + clear_has_value(); +} +inline double Gauge::value() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Gauge.value) + return value_; +} +inline void Gauge::set_value(double value) { + set_has_value(); + value_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Gauge.value) +} + +// ------------------------------------------------------------------- + +// Counter + +// optional double value = 1; +inline bool Counter::has_value() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void Counter::set_has_value() { + _has_bits_[0] |= 0x00000001u; +} +inline void Counter::clear_has_value() { + _has_bits_[0] &= ~0x00000001u; +} +inline void Counter::clear_value() { + value_ = 0; + clear_has_value(); +} +inline double Counter::value() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Counter.value) + return value_; +} +inline void Counter::set_value(double value) { + set_has_value(); + value_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Counter.value) +} + +// ------------------------------------------------------------------- + +// Quantile + +// optional double quantile = 1; +inline bool Quantile::has_quantile() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void Quantile::set_has_quantile() { + _has_bits_[0] |= 0x00000001u; +} +inline void Quantile::clear_has_quantile() { + _has_bits_[0] &= ~0x00000001u; +} +inline void Quantile::clear_quantile() { + quantile_ = 0; + clear_has_quantile(); +} +inline double Quantile::quantile() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Quantile.quantile) + return quantile_; +} +inline void Quantile::set_quantile(double value) { + set_has_quantile(); + quantile_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Quantile.quantile) +} + +// optional double value = 2; +inline bool Quantile::has_value() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void Quantile::set_has_value() { + _has_bits_[0] |= 0x00000002u; +} +inline void Quantile::clear_has_value() { + _has_bits_[0] &= ~0x00000002u; +} +inline void Quantile::clear_value() { + value_ = 0; + clear_has_value(); +} +inline double Quantile::value() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Quantile.value) + return value_; +} +inline void Quantile::set_value(double value) { + set_has_value(); + value_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Quantile.value) +} + +// ------------------------------------------------------------------- + +// Summary + +// optional uint64 sample_count = 1; +inline bool Summary::has_sample_count() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void Summary::set_has_sample_count() { + _has_bits_[0] |= 0x00000001u; +} +inline void Summary::clear_has_sample_count() { + _has_bits_[0] &= ~0x00000001u; +} +inline void Summary::clear_sample_count() { + sample_count_ = GOOGLE_ULONGLONG(0); + clear_has_sample_count(); +} +inline ::google::protobuf::uint64 Summary::sample_count() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Summary.sample_count) + return sample_count_; +} +inline void Summary::set_sample_count(::google::protobuf::uint64 value) { + set_has_sample_count(); + sample_count_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Summary.sample_count) +} + +// optional double sample_sum = 2; +inline bool Summary::has_sample_sum() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void Summary::set_has_sample_sum() { + _has_bits_[0] |= 0x00000002u; +} +inline void Summary::clear_has_sample_sum() { + _has_bits_[0] &= ~0x00000002u; +} +inline void Summary::clear_sample_sum() { + sample_sum_ = 0; + clear_has_sample_sum(); +} +inline double Summary::sample_sum() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Summary.sample_sum) + return sample_sum_; +} +inline void Summary::set_sample_sum(double value) { + set_has_sample_sum(); + sample_sum_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Summary.sample_sum) +} + +// repeated .io.prometheus.client.Quantile quantile = 3; +inline int Summary::quantile_size() const { + return quantile_.size(); +} +inline void Summary::clear_quantile() { + quantile_.Clear(); +} +inline const ::io::prometheus::client::Quantile& Summary::quantile(int index) const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Summary.quantile) + return quantile_.Get(index); +} +inline ::io::prometheus::client::Quantile* Summary::mutable_quantile(int index) { + // @@protoc_insertion_point(field_mutable:io.prometheus.client.Summary.quantile) + return quantile_.Mutable(index); +} +inline ::io::prometheus::client::Quantile* Summary::add_quantile() { + // @@protoc_insertion_point(field_add:io.prometheus.client.Summary.quantile) + return quantile_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile >& +Summary::quantile() const { + // @@protoc_insertion_point(field_list:io.prometheus.client.Summary.quantile) + return quantile_; +} +inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Quantile >* +Summary::mutable_quantile() { + // @@protoc_insertion_point(field_mutable_list:io.prometheus.client.Summary.quantile) + return &quantile_; +} + +// ------------------------------------------------------------------- + +// Untyped + +// optional double value = 1; +inline bool Untyped::has_value() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void Untyped::set_has_value() { + _has_bits_[0] |= 0x00000001u; +} +inline void Untyped::clear_has_value() { + _has_bits_[0] &= ~0x00000001u; +} +inline void Untyped::clear_value() { + value_ = 0; + clear_has_value(); +} +inline double Untyped::value() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Untyped.value) + return value_; +} +inline void Untyped::set_value(double value) { + set_has_value(); + value_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Untyped.value) +} + +// ------------------------------------------------------------------- + +// Histogram + +// optional uint64 sample_count = 1; +inline bool Histogram::has_sample_count() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void Histogram::set_has_sample_count() { + _has_bits_[0] |= 0x00000001u; +} +inline void Histogram::clear_has_sample_count() { + _has_bits_[0] &= ~0x00000001u; +} +inline void Histogram::clear_sample_count() { + sample_count_ = GOOGLE_ULONGLONG(0); + clear_has_sample_count(); +} +inline ::google::protobuf::uint64 Histogram::sample_count() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Histogram.sample_count) + return sample_count_; +} +inline void Histogram::set_sample_count(::google::protobuf::uint64 value) { + set_has_sample_count(); + sample_count_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Histogram.sample_count) +} + +// optional double sample_sum = 2; +inline bool Histogram::has_sample_sum() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void Histogram::set_has_sample_sum() { + _has_bits_[0] |= 0x00000002u; +} +inline void Histogram::clear_has_sample_sum() { + _has_bits_[0] &= ~0x00000002u; +} +inline void Histogram::clear_sample_sum() { + sample_sum_ = 0; + clear_has_sample_sum(); +} +inline double Histogram::sample_sum() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Histogram.sample_sum) + return sample_sum_; +} +inline void Histogram::set_sample_sum(double value) { + set_has_sample_sum(); + sample_sum_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Histogram.sample_sum) +} + +// repeated .io.prometheus.client.Bucket bucket = 3; +inline int Histogram::bucket_size() const { + return bucket_.size(); +} +inline void Histogram::clear_bucket() { + bucket_.Clear(); +} +inline const ::io::prometheus::client::Bucket& Histogram::bucket(int index) const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Histogram.bucket) + return bucket_.Get(index); +} +inline ::io::prometheus::client::Bucket* Histogram::mutable_bucket(int index) { + // @@protoc_insertion_point(field_mutable:io.prometheus.client.Histogram.bucket) + return bucket_.Mutable(index); +} +inline ::io::prometheus::client::Bucket* Histogram::add_bucket() { + // @@protoc_insertion_point(field_add:io.prometheus.client.Histogram.bucket) + return bucket_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket >& +Histogram::bucket() const { + // @@protoc_insertion_point(field_list:io.prometheus.client.Histogram.bucket) + return bucket_; +} +inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Bucket >* +Histogram::mutable_bucket() { + // @@protoc_insertion_point(field_mutable_list:io.prometheus.client.Histogram.bucket) + return &bucket_; +} + +// ------------------------------------------------------------------- + +// Bucket + +// optional uint64 cumulative_count = 1; +inline bool Bucket::has_cumulative_count() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void Bucket::set_has_cumulative_count() { + _has_bits_[0] |= 0x00000001u; +} +inline void Bucket::clear_has_cumulative_count() { + _has_bits_[0] &= ~0x00000001u; +} +inline void Bucket::clear_cumulative_count() { + cumulative_count_ = GOOGLE_ULONGLONG(0); + clear_has_cumulative_count(); +} +inline ::google::protobuf::uint64 Bucket::cumulative_count() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Bucket.cumulative_count) + return cumulative_count_; +} +inline void Bucket::set_cumulative_count(::google::protobuf::uint64 value) { + set_has_cumulative_count(); + cumulative_count_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Bucket.cumulative_count) +} + +// optional double upper_bound = 2; +inline bool Bucket::has_upper_bound() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void Bucket::set_has_upper_bound() { + _has_bits_[0] |= 0x00000002u; +} +inline void Bucket::clear_has_upper_bound() { + _has_bits_[0] &= ~0x00000002u; +} +inline void Bucket::clear_upper_bound() { + upper_bound_ = 0; + clear_has_upper_bound(); +} +inline double Bucket::upper_bound() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Bucket.upper_bound) + return upper_bound_; +} +inline void Bucket::set_upper_bound(double value) { + set_has_upper_bound(); + upper_bound_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Bucket.upper_bound) +} + +// ------------------------------------------------------------------- + +// Metric + +// repeated .io.prometheus.client.LabelPair label = 1; +inline int Metric::label_size() const { + return label_.size(); +} +inline void Metric::clear_label() { + label_.Clear(); +} +inline const ::io::prometheus::client::LabelPair& Metric::label(int index) const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.label) + return label_.Get(index); +} +inline ::io::prometheus::client::LabelPair* Metric::mutable_label(int index) { + // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.label) + return label_.Mutable(index); +} +inline ::io::prometheus::client::LabelPair* Metric::add_label() { + // @@protoc_insertion_point(field_add:io.prometheus.client.Metric.label) + return label_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair >& +Metric::label() const { + // @@protoc_insertion_point(field_list:io.prometheus.client.Metric.label) + return label_; +} +inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::LabelPair >* +Metric::mutable_label() { + // @@protoc_insertion_point(field_mutable_list:io.prometheus.client.Metric.label) + return &label_; +} + +// optional .io.prometheus.client.Gauge gauge = 2; +inline bool Metric::has_gauge() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void Metric::set_has_gauge() { + _has_bits_[0] |= 0x00000002u; +} +inline void Metric::clear_has_gauge() { + _has_bits_[0] &= ~0x00000002u; +} +inline void Metric::clear_gauge() { + if (gauge_ != NULL) gauge_->::io::prometheus::client::Gauge::Clear(); + clear_has_gauge(); +} +inline const ::io::prometheus::client::Gauge& Metric::gauge() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.gauge) + return gauge_ != NULL ? *gauge_ : *default_instance_->gauge_; +} +inline ::io::prometheus::client::Gauge* Metric::mutable_gauge() { + set_has_gauge(); + if (gauge_ == NULL) gauge_ = new ::io::prometheus::client::Gauge; + // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.gauge) + return gauge_; +} +inline ::io::prometheus::client::Gauge* Metric::release_gauge() { + clear_has_gauge(); + ::io::prometheus::client::Gauge* temp = gauge_; + gauge_ = NULL; + return temp; +} +inline void Metric::set_allocated_gauge(::io::prometheus::client::Gauge* gauge) { + delete gauge_; + gauge_ = gauge; + if (gauge) { + set_has_gauge(); + } else { + clear_has_gauge(); + } + // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.gauge) +} + +// optional .io.prometheus.client.Counter counter = 3; +inline bool Metric::has_counter() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void Metric::set_has_counter() { + _has_bits_[0] |= 0x00000004u; +} +inline void Metric::clear_has_counter() { + _has_bits_[0] &= ~0x00000004u; +} +inline void Metric::clear_counter() { + if (counter_ != NULL) counter_->::io::prometheus::client::Counter::Clear(); + clear_has_counter(); +} +inline const ::io::prometheus::client::Counter& Metric::counter() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.counter) + return counter_ != NULL ? *counter_ : *default_instance_->counter_; +} +inline ::io::prometheus::client::Counter* Metric::mutable_counter() { + set_has_counter(); + if (counter_ == NULL) counter_ = new ::io::prometheus::client::Counter; + // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.counter) + return counter_; +} +inline ::io::prometheus::client::Counter* Metric::release_counter() { + clear_has_counter(); + ::io::prometheus::client::Counter* temp = counter_; + counter_ = NULL; + return temp; +} +inline void Metric::set_allocated_counter(::io::prometheus::client::Counter* counter) { + delete counter_; + counter_ = counter; + if (counter) { + set_has_counter(); + } else { + clear_has_counter(); + } + // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.counter) +} + +// optional .io.prometheus.client.Summary summary = 4; +inline bool Metric::has_summary() const { + return (_has_bits_[0] & 0x00000008u) != 0; +} +inline void Metric::set_has_summary() { + _has_bits_[0] |= 0x00000008u; +} +inline void Metric::clear_has_summary() { + _has_bits_[0] &= ~0x00000008u; +} +inline void Metric::clear_summary() { + if (summary_ != NULL) summary_->::io::prometheus::client::Summary::Clear(); + clear_has_summary(); +} +inline const ::io::prometheus::client::Summary& Metric::summary() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.summary) + return summary_ != NULL ? *summary_ : *default_instance_->summary_; +} +inline ::io::prometheus::client::Summary* Metric::mutable_summary() { + set_has_summary(); + if (summary_ == NULL) summary_ = new ::io::prometheus::client::Summary; + // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.summary) + return summary_; +} +inline ::io::prometheus::client::Summary* Metric::release_summary() { + clear_has_summary(); + ::io::prometheus::client::Summary* temp = summary_; + summary_ = NULL; + return temp; +} +inline void Metric::set_allocated_summary(::io::prometheus::client::Summary* summary) { + delete summary_; + summary_ = summary; + if (summary) { + set_has_summary(); + } else { + clear_has_summary(); + } + // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.summary) +} + +// optional .io.prometheus.client.Untyped untyped = 5; +inline bool Metric::has_untyped() const { + return (_has_bits_[0] & 0x00000010u) != 0; +} +inline void Metric::set_has_untyped() { + _has_bits_[0] |= 0x00000010u; +} +inline void Metric::clear_has_untyped() { + _has_bits_[0] &= ~0x00000010u; +} +inline void Metric::clear_untyped() { + if (untyped_ != NULL) untyped_->::io::prometheus::client::Untyped::Clear(); + clear_has_untyped(); +} +inline const ::io::prometheus::client::Untyped& Metric::untyped() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.untyped) + return untyped_ != NULL ? *untyped_ : *default_instance_->untyped_; +} +inline ::io::prometheus::client::Untyped* Metric::mutable_untyped() { + set_has_untyped(); + if (untyped_ == NULL) untyped_ = new ::io::prometheus::client::Untyped; + // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.untyped) + return untyped_; +} +inline ::io::prometheus::client::Untyped* Metric::release_untyped() { + clear_has_untyped(); + ::io::prometheus::client::Untyped* temp = untyped_; + untyped_ = NULL; + return temp; +} +inline void Metric::set_allocated_untyped(::io::prometheus::client::Untyped* untyped) { + delete untyped_; + untyped_ = untyped; + if (untyped) { + set_has_untyped(); + } else { + clear_has_untyped(); + } + // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.untyped) +} + +// optional .io.prometheus.client.Histogram histogram = 7; +inline bool Metric::has_histogram() const { + return (_has_bits_[0] & 0x00000020u) != 0; +} +inline void Metric::set_has_histogram() { + _has_bits_[0] |= 0x00000020u; +} +inline void Metric::clear_has_histogram() { + _has_bits_[0] &= ~0x00000020u; +} +inline void Metric::clear_histogram() { + if (histogram_ != NULL) histogram_->::io::prometheus::client::Histogram::Clear(); + clear_has_histogram(); +} +inline const ::io::prometheus::client::Histogram& Metric::histogram() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.histogram) + return histogram_ != NULL ? *histogram_ : *default_instance_->histogram_; +} +inline ::io::prometheus::client::Histogram* Metric::mutable_histogram() { + set_has_histogram(); + if (histogram_ == NULL) histogram_ = new ::io::prometheus::client::Histogram; + // @@protoc_insertion_point(field_mutable:io.prometheus.client.Metric.histogram) + return histogram_; +} +inline ::io::prometheus::client::Histogram* Metric::release_histogram() { + clear_has_histogram(); + ::io::prometheus::client::Histogram* temp = histogram_; + histogram_ = NULL; + return temp; +} +inline void Metric::set_allocated_histogram(::io::prometheus::client::Histogram* histogram) { + delete histogram_; + histogram_ = histogram; + if (histogram) { + set_has_histogram(); + } else { + clear_has_histogram(); + } + // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.Metric.histogram) +} + +// optional int64 timestamp_ms = 6; +inline bool Metric::has_timestamp_ms() const { + return (_has_bits_[0] & 0x00000040u) != 0; +} +inline void Metric::set_has_timestamp_ms() { + _has_bits_[0] |= 0x00000040u; +} +inline void Metric::clear_has_timestamp_ms() { + _has_bits_[0] &= ~0x00000040u; +} +inline void Metric::clear_timestamp_ms() { + timestamp_ms_ = GOOGLE_LONGLONG(0); + clear_has_timestamp_ms(); +} +inline ::google::protobuf::int64 Metric::timestamp_ms() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.Metric.timestamp_ms) + return timestamp_ms_; +} +inline void Metric::set_timestamp_ms(::google::protobuf::int64 value) { + set_has_timestamp_ms(); + timestamp_ms_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.Metric.timestamp_ms) +} + +// ------------------------------------------------------------------- + +// MetricFamily + +// optional string name = 1; +inline bool MetricFamily::has_name() const { + return (_has_bits_[0] & 0x00000001u) != 0; +} +inline void MetricFamily::set_has_name() { + _has_bits_[0] |= 0x00000001u; +} +inline void MetricFamily::clear_has_name() { + _has_bits_[0] &= ~0x00000001u; +} +inline void MetricFamily::clear_name() { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_->clear(); + } + clear_has_name(); +} +inline const ::std::string& MetricFamily::name() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.MetricFamily.name) + return *name_; +} +inline void MetricFamily::set_name(const ::std::string& value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set:io.prometheus.client.MetricFamily.name) +} +inline void MetricFamily::set_name(const char* value) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(value); + // @@protoc_insertion_point(field_set_char:io.prometheus.client.MetricFamily.name) +} +inline void MetricFamily::set_name(const char* value, size_t size) { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + name_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:io.prometheus.client.MetricFamily.name) +} +inline ::std::string* MetricFamily::mutable_name() { + set_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + name_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:io.prometheus.client.MetricFamily.name) + return name_; +} +inline ::std::string* MetricFamily::release_name() { + clear_has_name(); + if (name_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = name_; + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void MetricFamily::set_allocated_name(::std::string* name) { + if (name_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete name_; + } + if (name) { + set_has_name(); + name_ = name; + } else { + clear_has_name(); + name_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.MetricFamily.name) +} + +// optional string help = 2; +inline bool MetricFamily::has_help() const { + return (_has_bits_[0] & 0x00000002u) != 0; +} +inline void MetricFamily::set_has_help() { + _has_bits_[0] |= 0x00000002u; +} +inline void MetricFamily::clear_has_help() { + _has_bits_[0] &= ~0x00000002u; +} +inline void MetricFamily::clear_help() { + if (help_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + help_->clear(); + } + clear_has_help(); +} +inline const ::std::string& MetricFamily::help() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.MetricFamily.help) + return *help_; +} +inline void MetricFamily::set_help(const ::std::string& value) { + set_has_help(); + if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + help_ = new ::std::string; + } + help_->assign(value); + // @@protoc_insertion_point(field_set:io.prometheus.client.MetricFamily.help) +} +inline void MetricFamily::set_help(const char* value) { + set_has_help(); + if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + help_ = new ::std::string; + } + help_->assign(value); + // @@protoc_insertion_point(field_set_char:io.prometheus.client.MetricFamily.help) +} +inline void MetricFamily::set_help(const char* value, size_t size) { + set_has_help(); + if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + help_ = new ::std::string; + } + help_->assign(reinterpret_cast(value), size); + // @@protoc_insertion_point(field_set_pointer:io.prometheus.client.MetricFamily.help) +} +inline ::std::string* MetricFamily::mutable_help() { + set_has_help(); + if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + help_ = new ::std::string; + } + // @@protoc_insertion_point(field_mutable:io.prometheus.client.MetricFamily.help) + return help_; +} +inline ::std::string* MetricFamily::release_help() { + clear_has_help(); + if (help_ == &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + return NULL; + } else { + ::std::string* temp = help_; + help_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + return temp; + } +} +inline void MetricFamily::set_allocated_help(::std::string* help) { + if (help_ != &::google::protobuf::internal::GetEmptyStringAlreadyInited()) { + delete help_; + } + if (help) { + set_has_help(); + help_ = help; + } else { + clear_has_help(); + help_ = const_cast< ::std::string*>(&::google::protobuf::internal::GetEmptyStringAlreadyInited()); + } + // @@protoc_insertion_point(field_set_allocated:io.prometheus.client.MetricFamily.help) +} + +// optional .io.prometheus.client.MetricType type = 3; +inline bool MetricFamily::has_type() const { + return (_has_bits_[0] & 0x00000004u) != 0; +} +inline void MetricFamily::set_has_type() { + _has_bits_[0] |= 0x00000004u; +} +inline void MetricFamily::clear_has_type() { + _has_bits_[0] &= ~0x00000004u; +} +inline void MetricFamily::clear_type() { + type_ = 0; + clear_has_type(); +} +inline ::io::prometheus::client::MetricType MetricFamily::type() const { + // @@protoc_insertion_point(field_get:io.prometheus.client.MetricFamily.type) + return static_cast< ::io::prometheus::client::MetricType >(type_); +} +inline void MetricFamily::set_type(::io::prometheus::client::MetricType value) { + assert(::io::prometheus::client::MetricType_IsValid(value)); + set_has_type(); + type_ = value; + // @@protoc_insertion_point(field_set:io.prometheus.client.MetricFamily.type) +} + +// repeated .io.prometheus.client.Metric metric = 4; +inline int MetricFamily::metric_size() const { + return metric_.size(); +} +inline void MetricFamily::clear_metric() { + metric_.Clear(); +} +inline const ::io::prometheus::client::Metric& MetricFamily::metric(int index) const { + // @@protoc_insertion_point(field_get:io.prometheus.client.MetricFamily.metric) + return metric_.Get(index); +} +inline ::io::prometheus::client::Metric* MetricFamily::mutable_metric(int index) { + // @@protoc_insertion_point(field_mutable:io.prometheus.client.MetricFamily.metric) + return metric_.Mutable(index); +} +inline ::io::prometheus::client::Metric* MetricFamily::add_metric() { + // @@protoc_insertion_point(field_add:io.prometheus.client.MetricFamily.metric) + return metric_.Add(); +} +inline const ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric >& +MetricFamily::metric() const { + // @@protoc_insertion_point(field_list:io.prometheus.client.MetricFamily.metric) + return metric_; +} +inline ::google::protobuf::RepeatedPtrField< ::io::prometheus::client::Metric >* +MetricFamily::mutable_metric() { + // @@protoc_insertion_point(field_mutable_list:io.prometheus.client.MetricFamily.metric) + return &metric_; +} + + +// @@protoc_insertion_point(namespace_scope) + +} // namespace client +} // namespace prometheus +} // namespace io + +#ifndef SWIG +namespace google { +namespace protobuf { + +template <> struct is_proto_enum< ::io::prometheus::client::MetricType> : ::google::protobuf::internal::true_type {}; +template <> +inline const EnumDescriptor* GetEnumDescriptor< ::io::prometheus::client::MetricType>() { + return ::io::prometheus::client::MetricType_descriptor(); +} + +} // namespace google +} // namespace protobuf +#endif // SWIG + +// @@protoc_insertion_point(global_scope) + +#endif // PROTOBUF_metrics_2eproto__INCLUDED diff --git a/vendor/github.com/prometheus/client_model/metrics.proto b/vendor/github.com/prometheus/client_model/metrics.proto new file mode 100644 index 0000000..0b84af9 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/metrics.proto @@ -0,0 +1,81 @@ +// Copyright 2013 Prometheus Team +// 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. + +syntax = "proto2"; + +package io.prometheus.client; +option java_package = "io.prometheus.client"; + +message LabelPair { + optional string name = 1; + optional string value = 2; +} + +enum MetricType { + COUNTER = 0; + GAUGE = 1; + SUMMARY = 2; + UNTYPED = 3; + HISTOGRAM = 4; +} + +message Gauge { + optional double value = 1; +} + +message Counter { + optional double value = 1; +} + +message Quantile { + optional double quantile = 1; + optional double value = 2; +} + +message Summary { + optional uint64 sample_count = 1; + optional double sample_sum = 2; + repeated Quantile quantile = 3; +} + +message Untyped { + optional double value = 1; +} + +message Histogram { + optional uint64 sample_count = 1; + optional double sample_sum = 2; + repeated Bucket bucket = 3; // Ordered in increasing order of upper_bound, +Inf bucket is optional. +} + +message Bucket { + optional uint64 cumulative_count = 1; // Cumulative in increasing order. + optional double upper_bound = 2; // Inclusive. +} + +message Metric { + repeated LabelPair label = 1; + optional Gauge gauge = 2; + optional Counter counter = 3; + optional Summary summary = 4; + optional Untyped untyped = 5; + optional Histogram histogram = 7; + optional int64 timestamp_ms = 6; +} + +message MetricFamily { + optional string name = 1; + optional string help = 2; + optional MetricType type = 3; + repeated Metric metric = 4; +} diff --git a/vendor/github.com/prometheus/client_model/pom.xml b/vendor/github.com/prometheus/client_model/pom.xml new file mode 100644 index 0000000..4d34c90 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/pom.xml @@ -0,0 +1,130 @@ + + + 4.0.0 + + io.prometheus.client + model + 0.0.3-SNAPSHOT + + + org.sonatype.oss + oss-parent + 7 + + + Prometheus Client Data Model + http://github.com/prometheus/client_model + + Prometheus Client Data Model: Generated Protocol Buffer Assets + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + scm:git:git@github.com:prometheus/client_model.git + scm:git:git@github.com:prometheus/client_model.git + git@github.com:prometheus/client_model.git + + + + + mtp + Matt T. Proud + matt.proud@gmail.com + + + + + + com.google.protobuf + protobuf-java + 2.5.0 + + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.8 + + UTF-8 + UTF-8 + true + + + + generate-javadoc-site-report + site + + javadoc + + + + attach-javadocs + + jar + + + + + + maven-compiler-plugin + + 1.6 + 1.6 + + 3.1 + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar + + + + + + + + + release-sign-artifacts + + + performRelease + true + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.4 + + + sign-artifacts + verify + + sign + + + + + + + + + diff --git a/vendor/github.com/prometheus/client_model/python/prometheus/__init__.py b/vendor/github.com/prometheus/client_model/python/prometheus/__init__.py new file mode 100644 index 0000000..617c0ce --- /dev/null +++ b/vendor/github.com/prometheus/client_model/python/prometheus/__init__.py @@ -0,0 +1,12 @@ + # Copyright 2013 Prometheus Team + # 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/prometheus/client_model/python/prometheus/client/__init__.py b/vendor/github.com/prometheus/client_model/python/prometheus/client/__init__.py new file mode 100644 index 0000000..617c0ce --- /dev/null +++ b/vendor/github.com/prometheus/client_model/python/prometheus/client/__init__.py @@ -0,0 +1,12 @@ + # Copyright 2013 Prometheus Team + # 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/prometheus/client_model/python/prometheus/client/model/__init__.py b/vendor/github.com/prometheus/client_model/python/prometheus/client/model/__init__.py new file mode 100644 index 0000000..d40327c --- /dev/null +++ b/vendor/github.com/prometheus/client_model/python/prometheus/client/model/__init__.py @@ -0,0 +1,14 @@ + # Copyright 2013 Prometheus Team + # 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. + +__all__ = ['metrics_pb2'] diff --git a/vendor/github.com/prometheus/client_model/python/prometheus/client/model/metrics_pb2.py b/vendor/github.com/prometheus/client_model/python/prometheus/client/model/metrics_pb2.py new file mode 100644 index 0000000..8c239ac --- /dev/null +++ b/vendor/github.com/prometheus/client_model/python/prometheus/client/model/metrics_pb2.py @@ -0,0 +1,575 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: metrics.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='metrics.proto', + package='io.prometheus.client', + serialized_pb=_b('\n\rmetrics.proto\x12\x14io.prometheus.client\"(\n\tLabelPair\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x16\n\x05Gauge\x12\r\n\x05value\x18\x01 \x01(\x01\"\x18\n\x07\x43ounter\x12\r\n\x05value\x18\x01 \x01(\x01\"+\n\x08Quantile\x12\x10\n\x08quantile\x18\x01 \x01(\x01\x12\r\n\x05value\x18\x02 \x01(\x01\"e\n\x07Summary\x12\x14\n\x0csample_count\x18\x01 \x01(\x04\x12\x12\n\nsample_sum\x18\x02 \x01(\x01\x12\x30\n\x08quantile\x18\x03 \x03(\x0b\x32\x1e.io.prometheus.client.Quantile\"\x18\n\x07Untyped\x12\r\n\x05value\x18\x01 \x01(\x01\"c\n\tHistogram\x12\x14\n\x0csample_count\x18\x01 \x01(\x04\x12\x12\n\nsample_sum\x18\x02 \x01(\x01\x12,\n\x06\x62ucket\x18\x03 \x03(\x0b\x32\x1c.io.prometheus.client.Bucket\"7\n\x06\x42ucket\x12\x18\n\x10\x63umulative_count\x18\x01 \x01(\x04\x12\x13\n\x0bupper_bound\x18\x02 \x01(\x01\"\xbe\x02\n\x06Metric\x12.\n\x05label\x18\x01 \x03(\x0b\x32\x1f.io.prometheus.client.LabelPair\x12*\n\x05gauge\x18\x02 \x01(\x0b\x32\x1b.io.prometheus.client.Gauge\x12.\n\x07\x63ounter\x18\x03 \x01(\x0b\x32\x1d.io.prometheus.client.Counter\x12.\n\x07summary\x18\x04 \x01(\x0b\x32\x1d.io.prometheus.client.Summary\x12.\n\x07untyped\x18\x05 \x01(\x0b\x32\x1d.io.prometheus.client.Untyped\x12\x32\n\thistogram\x18\x07 \x01(\x0b\x32\x1f.io.prometheus.client.Histogram\x12\x14\n\x0ctimestamp_ms\x18\x06 \x01(\x03\"\x88\x01\n\x0cMetricFamily\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04help\x18\x02 \x01(\t\x12.\n\x04type\x18\x03 \x01(\x0e\x32 .io.prometheus.client.MetricType\x12,\n\x06metric\x18\x04 \x03(\x0b\x32\x1c.io.prometheus.client.Metric*M\n\nMetricType\x12\x0b\n\x07\x43OUNTER\x10\x00\x12\t\n\x05GAUGE\x10\x01\x12\x0b\n\x07SUMMARY\x10\x02\x12\x0b\n\x07UNTYPED\x10\x03\x12\r\n\tHISTOGRAM\x10\x04\x42\x16\n\x14io.prometheus.client') +) +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +_METRICTYPE = _descriptor.EnumDescriptor( + name='MetricType', + full_name='io.prometheus.client.MetricType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='COUNTER', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='GAUGE', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SUMMARY', index=2, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UNTYPED', index=3, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='HISTOGRAM', index=4, number=4, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=923, + serialized_end=1000, +) +_sym_db.RegisterEnumDescriptor(_METRICTYPE) + +MetricType = enum_type_wrapper.EnumTypeWrapper(_METRICTYPE) +COUNTER = 0 +GAUGE = 1 +SUMMARY = 2 +UNTYPED = 3 +HISTOGRAM = 4 + + + +_LABELPAIR = _descriptor.Descriptor( + name='LabelPair', + full_name='io.prometheus.client.LabelPair', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='io.prometheus.client.LabelPair.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='io.prometheus.client.LabelPair.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=39, + serialized_end=79, +) + + +_GAUGE = _descriptor.Descriptor( + name='Gauge', + full_name='io.prometheus.client.Gauge', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='io.prometheus.client.Gauge.value', index=0, + number=1, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=81, + serialized_end=103, +) + + +_COUNTER = _descriptor.Descriptor( + name='Counter', + full_name='io.prometheus.client.Counter', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='io.prometheus.client.Counter.value', index=0, + number=1, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=105, + serialized_end=129, +) + + +_QUANTILE = _descriptor.Descriptor( + name='Quantile', + full_name='io.prometheus.client.Quantile', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='quantile', full_name='io.prometheus.client.Quantile.quantile', index=0, + number=1, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='io.prometheus.client.Quantile.value', index=1, + number=2, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=131, + serialized_end=174, +) + + +_SUMMARY = _descriptor.Descriptor( + name='Summary', + full_name='io.prometheus.client.Summary', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='sample_count', full_name='io.prometheus.client.Summary.sample_count', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='sample_sum', full_name='io.prometheus.client.Summary.sample_sum', index=1, + number=2, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='quantile', full_name='io.prometheus.client.Summary.quantile', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=176, + serialized_end=277, +) + + +_UNTYPED = _descriptor.Descriptor( + name='Untyped', + full_name='io.prometheus.client.Untyped', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='value', full_name='io.prometheus.client.Untyped.value', index=0, + number=1, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=279, + serialized_end=303, +) + + +_HISTOGRAM = _descriptor.Descriptor( + name='Histogram', + full_name='io.prometheus.client.Histogram', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='sample_count', full_name='io.prometheus.client.Histogram.sample_count', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='sample_sum', full_name='io.prometheus.client.Histogram.sample_sum', index=1, + number=2, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='bucket', full_name='io.prometheus.client.Histogram.bucket', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=305, + serialized_end=404, +) + + +_BUCKET = _descriptor.Descriptor( + name='Bucket', + full_name='io.prometheus.client.Bucket', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='cumulative_count', full_name='io.prometheus.client.Bucket.cumulative_count', index=0, + number=1, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='upper_bound', full_name='io.prometheus.client.Bucket.upper_bound', index=1, + number=2, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=406, + serialized_end=461, +) + + +_METRIC = _descriptor.Descriptor( + name='Metric', + full_name='io.prometheus.client.Metric', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='label', full_name='io.prometheus.client.Metric.label', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='gauge', full_name='io.prometheus.client.Metric.gauge', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='counter', full_name='io.prometheus.client.Metric.counter', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='summary', full_name='io.prometheus.client.Metric.summary', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='untyped', full_name='io.prometheus.client.Metric.untyped', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='histogram', full_name='io.prometheus.client.Metric.histogram', index=5, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='timestamp_ms', full_name='io.prometheus.client.Metric.timestamp_ms', index=6, + number=6, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=464, + serialized_end=782, +) + + +_METRICFAMILY = _descriptor.Descriptor( + name='MetricFamily', + full_name='io.prometheus.client.MetricFamily', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='io.prometheus.client.MetricFamily.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='help', full_name='io.prometheus.client.MetricFamily.help', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='type', full_name='io.prometheus.client.MetricFamily.type', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='metric', full_name='io.prometheus.client.MetricFamily.metric', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + oneofs=[ + ], + serialized_start=785, + serialized_end=921, +) + +_SUMMARY.fields_by_name['quantile'].message_type = _QUANTILE +_HISTOGRAM.fields_by_name['bucket'].message_type = _BUCKET +_METRIC.fields_by_name['label'].message_type = _LABELPAIR +_METRIC.fields_by_name['gauge'].message_type = _GAUGE +_METRIC.fields_by_name['counter'].message_type = _COUNTER +_METRIC.fields_by_name['summary'].message_type = _SUMMARY +_METRIC.fields_by_name['untyped'].message_type = _UNTYPED +_METRIC.fields_by_name['histogram'].message_type = _HISTOGRAM +_METRICFAMILY.fields_by_name['type'].enum_type = _METRICTYPE +_METRICFAMILY.fields_by_name['metric'].message_type = _METRIC +DESCRIPTOR.message_types_by_name['LabelPair'] = _LABELPAIR +DESCRIPTOR.message_types_by_name['Gauge'] = _GAUGE +DESCRIPTOR.message_types_by_name['Counter'] = _COUNTER +DESCRIPTOR.message_types_by_name['Quantile'] = _QUANTILE +DESCRIPTOR.message_types_by_name['Summary'] = _SUMMARY +DESCRIPTOR.message_types_by_name['Untyped'] = _UNTYPED +DESCRIPTOR.message_types_by_name['Histogram'] = _HISTOGRAM +DESCRIPTOR.message_types_by_name['Bucket'] = _BUCKET +DESCRIPTOR.message_types_by_name['Metric'] = _METRIC +DESCRIPTOR.message_types_by_name['MetricFamily'] = _METRICFAMILY +DESCRIPTOR.enum_types_by_name['MetricType'] = _METRICTYPE + +LabelPair = _reflection.GeneratedProtocolMessageType('LabelPair', (_message.Message,), dict( + DESCRIPTOR = _LABELPAIR, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair) + )) +_sym_db.RegisterMessage(LabelPair) + +Gauge = _reflection.GeneratedProtocolMessageType('Gauge', (_message.Message,), dict( + DESCRIPTOR = _GAUGE, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge) + )) +_sym_db.RegisterMessage(Gauge) + +Counter = _reflection.GeneratedProtocolMessageType('Counter', (_message.Message,), dict( + DESCRIPTOR = _COUNTER, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.Counter) + )) +_sym_db.RegisterMessage(Counter) + +Quantile = _reflection.GeneratedProtocolMessageType('Quantile', (_message.Message,), dict( + DESCRIPTOR = _QUANTILE, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile) + )) +_sym_db.RegisterMessage(Quantile) + +Summary = _reflection.GeneratedProtocolMessageType('Summary', (_message.Message,), dict( + DESCRIPTOR = _SUMMARY, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.Summary) + )) +_sym_db.RegisterMessage(Summary) + +Untyped = _reflection.GeneratedProtocolMessageType('Untyped', (_message.Message,), dict( + DESCRIPTOR = _UNTYPED, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped) + )) +_sym_db.RegisterMessage(Untyped) + +Histogram = _reflection.GeneratedProtocolMessageType('Histogram', (_message.Message,), dict( + DESCRIPTOR = _HISTOGRAM, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram) + )) +_sym_db.RegisterMessage(Histogram) + +Bucket = _reflection.GeneratedProtocolMessageType('Bucket', (_message.Message,), dict( + DESCRIPTOR = _BUCKET, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket) + )) +_sym_db.RegisterMessage(Bucket) + +Metric = _reflection.GeneratedProtocolMessageType('Metric', (_message.Message,), dict( + DESCRIPTOR = _METRIC, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.Metric) + )) +_sym_db.RegisterMessage(Metric) + +MetricFamily = _reflection.GeneratedProtocolMessageType('MetricFamily', (_message.Message,), dict( + DESCRIPTOR = _METRICFAMILY, + __module__ = 'metrics_pb2' + # @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily) + )) +_sym_db.RegisterMessage(MetricFamily) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\024io.prometheus.client')) +# @@protoc_insertion_point(module_scope) diff --git a/vendor/github.com/prometheus/client_model/ruby/.gitignore b/vendor/github.com/prometheus/client_model/ruby/.gitignore new file mode 100644 index 0000000..8442a47 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/.gitignore @@ -0,0 +1,5 @@ +*.gem +.bundle +Gemfile.lock +pkg +vendor/bundle diff --git a/vendor/github.com/prometheus/client_model/ruby/Gemfile b/vendor/github.com/prometheus/client_model/ruby/Gemfile new file mode 100644 index 0000000..1ff638c --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/Gemfile @@ -0,0 +1,4 @@ +source 'https://rubygems.org' + +# Specify your gem's dependencies in prometheus-client-model.gemspec +gemspec diff --git a/vendor/github.com/prometheus/client_model/ruby/LICENSE b/vendor/github.com/prometheus/client_model/ruby/LICENSE new file mode 100644 index 0000000..11069ed --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/LICENSE @@ -0,0 +1,201 @@ + 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 + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +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/prometheus/client_model/ruby/Makefile b/vendor/github.com/prometheus/client_model/ruby/Makefile new file mode 100644 index 0000000..09d544b --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/Makefile @@ -0,0 +1,17 @@ +VENDOR_BUNDLE = vendor/bundle + +build: $(VENDOR_BUNDLE)/.bundled + BEEFCAKE_NAMESPACE=Prometheus::Client protoc --beefcake_out lib/prometheus/client/model -I .. ../metrics.proto + +$(VENDOR_BUNDLE): + mkdir -p $@ + +$(VENDOR_BUNDLE)/.bundled: $(VENDOR_BUNDLE) Gemfile + bundle install --quiet --path $< + @touch $@ + +clean: + -rm -f lib/prometheus/client/model/metrics.pb.rb + -rm -rf $(VENDOR_BUNDLE) + +.PHONY: build clean diff --git a/vendor/github.com/prometheus/client_model/ruby/README.md b/vendor/github.com/prometheus/client_model/ruby/README.md new file mode 100644 index 0000000..c45fcc7 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/README.md @@ -0,0 +1,31 @@ +# Prometheus Ruby client model + +Data model artifacts for the [Prometheus Ruby client][1]. + +## Installation + + gem install prometheus-client-model + +## Usage + +Build the artifacts from the protobuf specification: + + make build + +While this Gem's main purpose is to define the Prometheus data types for the +[client][1], it's possible to use it without the client to decode a stream of +delimited protobuf messages: + +```ruby +require 'open-uri' +require 'prometheus/client/model' + +CONTENT_TYPE = 'application/vnd.google.protobuf; proto=io.prometheus.client.MetricFamily; encoding=delimited' + +stream = open('http://localhost:9090/metrics', 'Accept' => CONTENT_TYPE).read +while family = Prometheus::Client::MetricFamily.read_delimited(stream) + puts family +end +``` + +[1]: https://github.com/prometheus/client_ruby diff --git a/vendor/github.com/prometheus/client_model/ruby/Rakefile b/vendor/github.com/prometheus/client_model/ruby/Rakefile new file mode 100644 index 0000000..2995527 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/Rakefile @@ -0,0 +1 @@ +require "bundler/gem_tasks" diff --git a/vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model.rb b/vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model.rb new file mode 100644 index 0000000..b5303bf --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model.rb @@ -0,0 +1,2 @@ +require 'prometheus/client/model/metrics.pb' +require 'prometheus/client/model/version' diff --git a/vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model/metrics.pb.rb b/vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model/metrics.pb.rb new file mode 100644 index 0000000..a72114b --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model/metrics.pb.rb @@ -0,0 +1,111 @@ +## Generated from metrics.proto for io.prometheus.client +require "beefcake" + +module Prometheus + module Client + + module MetricType + COUNTER = 0 + GAUGE = 1 + SUMMARY = 2 + UNTYPED = 3 + HISTOGRAM = 4 + end + + class LabelPair + include Beefcake::Message + end + + class Gauge + include Beefcake::Message + end + + class Counter + include Beefcake::Message + end + + class Quantile + include Beefcake::Message + end + + class Summary + include Beefcake::Message + end + + class Untyped + include Beefcake::Message + end + + class Histogram + include Beefcake::Message + end + + class Bucket + include Beefcake::Message + end + + class Metric + include Beefcake::Message + end + + class MetricFamily + include Beefcake::Message + end + + class LabelPair + optional :name, :string, 1 + optional :value, :string, 2 + end + + class Gauge + optional :value, :double, 1 + end + + class Counter + optional :value, :double, 1 + end + + class Quantile + optional :quantile, :double, 1 + optional :value, :double, 2 + end + + class Summary + optional :sample_count, :uint64, 1 + optional :sample_sum, :double, 2 + repeated :quantile, Quantile, 3 + end + + class Untyped + optional :value, :double, 1 + end + + class Histogram + optional :sample_count, :uint64, 1 + optional :sample_sum, :double, 2 + repeated :bucket, Bucket, 3 + end + + class Bucket + optional :cumulative_count, :uint64, 1 + optional :upper_bound, :double, 2 + end + + class Metric + repeated :label, LabelPair, 1 + optional :gauge, Gauge, 2 + optional :counter, Counter, 3 + optional :summary, Summary, 4 + optional :untyped, Untyped, 5 + optional :histogram, Histogram, 7 + optional :timestamp_ms, :int64, 6 + end + + class MetricFamily + optional :name, :string, 1 + optional :help, :string, 2 + optional :type, MetricType, 3 + repeated :metric, Metric, 4 + end + end +end diff --git a/vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model/version.rb b/vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model/version.rb new file mode 100644 index 0000000..00b5e86 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/lib/prometheus/client/model/version.rb @@ -0,0 +1,7 @@ +module Prometheus + module Client + module Model + VERSION = '0.1.0' + end + end +end diff --git a/vendor/github.com/prometheus/client_model/ruby/prometheus-client-model.gemspec b/vendor/github.com/prometheus/client_model/ruby/prometheus-client-model.gemspec new file mode 100644 index 0000000..438ba12 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/ruby/prometheus-client-model.gemspec @@ -0,0 +1,22 @@ +# coding: utf-8 +lib = File.expand_path('../lib', __FILE__) +$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) +require 'prometheus/client/model/version' + +Gem::Specification.new do |spec| + spec.name = 'prometheus-client-model' + spec.version = Prometheus::Client::Model::VERSION + spec.authors = ['Tobias Schmidt'] + spec.email = ['tobidt@gmail.com'] + spec.summary = 'Data model artifacts for the Prometheus Ruby client' + spec.homepage = 'https://github.com/prometheus/client_model/tree/master/ruby' + spec.license = 'Apache 2.0' + + spec.files = %w[README.md LICENSE] + Dir.glob('{lib/**/*}') + spec.require_paths = ['lib'] + + spec.add_dependency 'beefcake', '>= 0.4.0' + + spec.add_development_dependency 'bundler', '~> 1.3' + spec.add_development_dependency 'rake' +end diff --git a/vendor/github.com/prometheus/client_model/setup.py b/vendor/github.com/prometheus/client_model/setup.py new file mode 100644 index 0000000..67b9f20 --- /dev/null +++ b/vendor/github.com/prometheus/client_model/setup.py @@ -0,0 +1,23 @@ +#!/usr/bin/python + +from setuptools import setup + +setup( + name = 'prometheus_client_model', + version = '0.0.1', + author = 'Matt T. Proud', + author_email = 'matt.proud@gmail.com', + description = 'Data model artifacts for the Prometheus client.', + license = 'Apache License 2.0', + url = 'http://github.com/prometheus/client_model', + packages = ['prometheus', 'prometheus/client', 'prometheus/client/model'], + package_dir = {'': 'python'}, + requires = ['protobuf(==2.4.1)'], + platforms = 'Platform Independent', + classifiers = ['Development Status :: 3 - Alpha', + 'Intended Audience :: Developers', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: Apache Software License', + 'Operating System :: OS Independent', + 'Topic :: Software Development :: Testing', + 'Topic :: System :: Monitoring']) diff --git a/vendor/github.com/prometheus/client_model/src/main/java/io/prometheus/client/Metrics.java b/vendor/github.com/prometheus/client_model/src/main/java/io/prometheus/client/Metrics.java new file mode 100644 index 0000000..fb6218e --- /dev/null +++ b/vendor/github.com/prometheus/client_model/src/main/java/io/prometheus/client/Metrics.java @@ -0,0 +1,7683 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: metrics.proto + +package io.prometheus.client; + +public final class Metrics { + private Metrics() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + /** + * Protobuf enum {@code io.prometheus.client.MetricType} + */ + public enum MetricType + implements com.google.protobuf.ProtocolMessageEnum { + /** + * COUNTER = 0; + */ + COUNTER(0, 0), + /** + * GAUGE = 1; + */ + GAUGE(1, 1), + /** + * SUMMARY = 2; + */ + SUMMARY(2, 2), + /** + * UNTYPED = 3; + */ + UNTYPED(3, 3), + /** + * HISTOGRAM = 4; + */ + HISTOGRAM(4, 4), + ; + + /** + * COUNTER = 0; + */ + public static final int COUNTER_VALUE = 0; + /** + * GAUGE = 1; + */ + public static final int GAUGE_VALUE = 1; + /** + * SUMMARY = 2; + */ + public static final int SUMMARY_VALUE = 2; + /** + * UNTYPED = 3; + */ + public static final int UNTYPED_VALUE = 3; + /** + * HISTOGRAM = 4; + */ + public static final int HISTOGRAM_VALUE = 4; + + + public final int getNumber() { return value; } + + public static MetricType valueOf(int value) { + switch (value) { + case 0: return COUNTER; + case 1: return GAUGE; + case 2: return SUMMARY; + case 3: return UNTYPED; + case 4: return HISTOGRAM; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static com.google.protobuf.Internal.EnumLiteMap + internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public MetricType findValueByNumber(int number) { + return MetricType.valueOf(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(index); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return io.prometheus.client.Metrics.getDescriptor().getEnumTypes().get(0); + } + + private static final MetricType[] VALUES = values(); + + public static MetricType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + return VALUES[desc.getIndex()]; + } + + private final int index; + private final int value; + + private MetricType(int index, int value) { + this.index = index; + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:io.prometheus.client.MetricType) + } + + public interface LabelPairOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.LabelPair) + com.google.protobuf.MessageOrBuilder { + + /** + * optional string name = 1; + */ + boolean hasName(); + /** + * optional string name = 1; + */ + java.lang.String getName(); + /** + * optional string name = 1; + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + * optional string value = 2; + */ + boolean hasValue(); + /** + * optional string value = 2; + */ + java.lang.String getValue(); + /** + * optional string value = 2; + */ + com.google.protobuf.ByteString + getValueBytes(); + } + /** + * Protobuf type {@code io.prometheus.client.LabelPair} + */ + public static final class LabelPair extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.LabelPair) + LabelPairOrBuilder { + // Use LabelPair.newBuilder() to construct. + private LabelPair(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private LabelPair(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final LabelPair defaultInstance; + public static LabelPair getDefaultInstance() { + return defaultInstance; + } + + public LabelPair getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private LabelPair( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + name_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + value_ = bs; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.LabelPair.class, io.prometheus.client.Metrics.LabelPair.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public LabelPair parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new LabelPair(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + private java.lang.Object name_; + /** + * optional string name = 1; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional string name = 1; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + /** + * optional string name = 1; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int VALUE_FIELD_NUMBER = 2; + private java.lang.Object value_; + /** + * optional string value = 2; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional string value = 2; + */ + public java.lang.String getValue() { + java.lang.Object ref = value_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + value_ = s; + } + return s; + } + } + /** + * optional string value = 2; + */ + public com.google.protobuf.ByteString + getValueBytes() { + java.lang.Object ref = value_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + value_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + name_ = ""; + value_ = ""; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getValueBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getValueBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.LabelPair parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.LabelPair parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.LabelPair parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.LabelPair parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.LabelPair parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.LabelPair parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.LabelPair parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.LabelPair parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.LabelPair parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.LabelPair parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.LabelPair prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.LabelPair} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.LabelPair) + io.prometheus.client.Metrics.LabelPairOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.LabelPair.class, io.prometheus.client.Metrics.LabelPair.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.LabelPair.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + value_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_LabelPair_descriptor; + } + + public io.prometheus.client.Metrics.LabelPair getDefaultInstanceForType() { + return io.prometheus.client.Metrics.LabelPair.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.LabelPair build() { + io.prometheus.client.Metrics.LabelPair result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.LabelPair buildPartial() { + io.prometheus.client.Metrics.LabelPair result = new io.prometheus.client.Metrics.LabelPair(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.name_ = name_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.value_ = value_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.LabelPair) { + return mergeFrom((io.prometheus.client.Metrics.LabelPair)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.LabelPair other) { + if (other == io.prometheus.client.Metrics.LabelPair.getDefaultInstance()) return this; + if (other.hasName()) { + bitField0_ |= 0x00000001; + name_ = other.name_; + onChanged(); + } + if (other.hasValue()) { + bitField0_ |= 0x00000002; + value_ = other.value_; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.LabelPair parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.LabelPair) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object name_ = ""; + /** + * optional string name = 1; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional string name = 1; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string name = 1; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string name = 1; + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + /** + * optional string name = 1; + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000001); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + * optional string name = 1; + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + + private java.lang.Object value_ = ""; + /** + * optional string value = 2; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional string value = 2; + */ + public java.lang.String getValue() { + java.lang.Object ref = value_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + value_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string value = 2; + */ + public com.google.protobuf.ByteString + getValueBytes() { + java.lang.Object ref = value_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + value_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string value = 2; + */ + public Builder setValue( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + value_ = value; + onChanged(); + return this; + } + /** + * optional string value = 2; + */ + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000002); + value_ = getDefaultInstance().getValue(); + onChanged(); + return this; + } + /** + * optional string value = 2; + */ + public Builder setValueBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + value_ = value; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.LabelPair) + } + + static { + defaultInstance = new LabelPair(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.LabelPair) + } + + public interface GaugeOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.Gauge) + com.google.protobuf.MessageOrBuilder { + + /** + * optional double value = 1; + */ + boolean hasValue(); + /** + * optional double value = 1; + */ + double getValue(); + } + /** + * Protobuf type {@code io.prometheus.client.Gauge} + */ + public static final class Gauge extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.Gauge) + GaugeOrBuilder { + // Use Gauge.newBuilder() to construct. + private Gauge(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Gauge(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Gauge defaultInstance; + public static Gauge getDefaultInstance() { + return defaultInstance; + } + + public Gauge getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Gauge( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 9: { + bitField0_ |= 0x00000001; + value_ = input.readDouble(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Gauge.class, io.prometheus.client.Metrics.Gauge.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public Gauge parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Gauge(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int VALUE_FIELD_NUMBER = 1; + private double value_; + /** + * optional double value = 1; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional double value = 1; + */ + public double getValue() { + return value_; + } + + private void initFields() { + value_ = 0D; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeDouble(1, value_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(1, value_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.Gauge parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Gauge parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Gauge parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Gauge parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Gauge parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Gauge parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Gauge parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.Gauge parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Gauge parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Gauge parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.Gauge prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.Gauge} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.Gauge) + io.prometheus.client.Metrics.GaugeOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Gauge.class, io.prometheus.client.Metrics.Gauge.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.Gauge.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + value_ = 0D; + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Gauge_descriptor; + } + + public io.prometheus.client.Metrics.Gauge getDefaultInstanceForType() { + return io.prometheus.client.Metrics.Gauge.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.Gauge build() { + io.prometheus.client.Metrics.Gauge result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.Gauge buildPartial() { + io.prometheus.client.Metrics.Gauge result = new io.prometheus.client.Metrics.Gauge(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.value_ = value_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.Gauge) { + return mergeFrom((io.prometheus.client.Metrics.Gauge)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.Gauge other) { + if (other == io.prometheus.client.Metrics.Gauge.getDefaultInstance()) return this; + if (other.hasValue()) { + setValue(other.getValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.Gauge parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.Gauge) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private double value_ ; + /** + * optional double value = 1; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional double value = 1; + */ + public double getValue() { + return value_; + } + /** + * optional double value = 1; + */ + public Builder setValue(double value) { + bitField0_ |= 0x00000001; + value_ = value; + onChanged(); + return this; + } + /** + * optional double value = 1; + */ + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000001); + value_ = 0D; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.Gauge) + } + + static { + defaultInstance = new Gauge(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Gauge) + } + + public interface CounterOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.Counter) + com.google.protobuf.MessageOrBuilder { + + /** + * optional double value = 1; + */ + boolean hasValue(); + /** + * optional double value = 1; + */ + double getValue(); + } + /** + * Protobuf type {@code io.prometheus.client.Counter} + */ + public static final class Counter extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.Counter) + CounterOrBuilder { + // Use Counter.newBuilder() to construct. + private Counter(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Counter(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Counter defaultInstance; + public static Counter getDefaultInstance() { + return defaultInstance; + } + + public Counter getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Counter( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 9: { + bitField0_ |= 0x00000001; + value_ = input.readDouble(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Counter.class, io.prometheus.client.Metrics.Counter.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public Counter parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Counter(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int VALUE_FIELD_NUMBER = 1; + private double value_; + /** + * optional double value = 1; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional double value = 1; + */ + public double getValue() { + return value_; + } + + private void initFields() { + value_ = 0D; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeDouble(1, value_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(1, value_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.Counter parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Counter parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Counter parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Counter parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Counter parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Counter parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Counter parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.Counter parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Counter parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Counter parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.Counter prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.Counter} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.Counter) + io.prometheus.client.Metrics.CounterOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Counter.class, io.prometheus.client.Metrics.Counter.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.Counter.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + value_ = 0D; + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Counter_descriptor; + } + + public io.prometheus.client.Metrics.Counter getDefaultInstanceForType() { + return io.prometheus.client.Metrics.Counter.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.Counter build() { + io.prometheus.client.Metrics.Counter result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.Counter buildPartial() { + io.prometheus.client.Metrics.Counter result = new io.prometheus.client.Metrics.Counter(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.value_ = value_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.Counter) { + return mergeFrom((io.prometheus.client.Metrics.Counter)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.Counter other) { + if (other == io.prometheus.client.Metrics.Counter.getDefaultInstance()) return this; + if (other.hasValue()) { + setValue(other.getValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.Counter parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.Counter) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private double value_ ; + /** + * optional double value = 1; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional double value = 1; + */ + public double getValue() { + return value_; + } + /** + * optional double value = 1; + */ + public Builder setValue(double value) { + bitField0_ |= 0x00000001; + value_ = value; + onChanged(); + return this; + } + /** + * optional double value = 1; + */ + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000001); + value_ = 0D; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.Counter) + } + + static { + defaultInstance = new Counter(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Counter) + } + + public interface QuantileOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.Quantile) + com.google.protobuf.MessageOrBuilder { + + /** + * optional double quantile = 1; + */ + boolean hasQuantile(); + /** + * optional double quantile = 1; + */ + double getQuantile(); + + /** + * optional double value = 2; + */ + boolean hasValue(); + /** + * optional double value = 2; + */ + double getValue(); + } + /** + * Protobuf type {@code io.prometheus.client.Quantile} + */ + public static final class Quantile extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.Quantile) + QuantileOrBuilder { + // Use Quantile.newBuilder() to construct. + private Quantile(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Quantile(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Quantile defaultInstance; + public static Quantile getDefaultInstance() { + return defaultInstance; + } + + public Quantile getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Quantile( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 9: { + bitField0_ |= 0x00000001; + quantile_ = input.readDouble(); + break; + } + case 17: { + bitField0_ |= 0x00000002; + value_ = input.readDouble(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Quantile.class, io.prometheus.client.Metrics.Quantile.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public Quantile parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Quantile(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int QUANTILE_FIELD_NUMBER = 1; + private double quantile_; + /** + * optional double quantile = 1; + */ + public boolean hasQuantile() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional double quantile = 1; + */ + public double getQuantile() { + return quantile_; + } + + public static final int VALUE_FIELD_NUMBER = 2; + private double value_; + /** + * optional double value = 2; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional double value = 2; + */ + public double getValue() { + return value_; + } + + private void initFields() { + quantile_ = 0D; + value_ = 0D; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeDouble(1, quantile_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeDouble(2, value_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(1, quantile_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(2, value_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.Quantile parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Quantile parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Quantile parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Quantile parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Quantile parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Quantile parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Quantile parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.Quantile parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Quantile parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Quantile parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.Quantile prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.Quantile} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.Quantile) + io.prometheus.client.Metrics.QuantileOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Quantile.class, io.prometheus.client.Metrics.Quantile.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.Quantile.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + quantile_ = 0D; + bitField0_ = (bitField0_ & ~0x00000001); + value_ = 0D; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Quantile_descriptor; + } + + public io.prometheus.client.Metrics.Quantile getDefaultInstanceForType() { + return io.prometheus.client.Metrics.Quantile.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.Quantile build() { + io.prometheus.client.Metrics.Quantile result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.Quantile buildPartial() { + io.prometheus.client.Metrics.Quantile result = new io.prometheus.client.Metrics.Quantile(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.quantile_ = quantile_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.value_ = value_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.Quantile) { + return mergeFrom((io.prometheus.client.Metrics.Quantile)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.Quantile other) { + if (other == io.prometheus.client.Metrics.Quantile.getDefaultInstance()) return this; + if (other.hasQuantile()) { + setQuantile(other.getQuantile()); + } + if (other.hasValue()) { + setValue(other.getValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.Quantile parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.Quantile) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private double quantile_ ; + /** + * optional double quantile = 1; + */ + public boolean hasQuantile() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional double quantile = 1; + */ + public double getQuantile() { + return quantile_; + } + /** + * optional double quantile = 1; + */ + public Builder setQuantile(double value) { + bitField0_ |= 0x00000001; + quantile_ = value; + onChanged(); + return this; + } + /** + * optional double quantile = 1; + */ + public Builder clearQuantile() { + bitField0_ = (bitField0_ & ~0x00000001); + quantile_ = 0D; + onChanged(); + return this; + } + + private double value_ ; + /** + * optional double value = 2; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional double value = 2; + */ + public double getValue() { + return value_; + } + /** + * optional double value = 2; + */ + public Builder setValue(double value) { + bitField0_ |= 0x00000002; + value_ = value; + onChanged(); + return this; + } + /** + * optional double value = 2; + */ + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000002); + value_ = 0D; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.Quantile) + } + + static { + defaultInstance = new Quantile(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Quantile) + } + + public interface SummaryOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.Summary) + com.google.protobuf.MessageOrBuilder { + + /** + * optional uint64 sample_count = 1; + */ + boolean hasSampleCount(); + /** + * optional uint64 sample_count = 1; + */ + long getSampleCount(); + + /** + * optional double sample_sum = 2; + */ + boolean hasSampleSum(); + /** + * optional double sample_sum = 2; + */ + double getSampleSum(); + + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + java.util.List + getQuantileList(); + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + io.prometheus.client.Metrics.Quantile getQuantile(int index); + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + int getQuantileCount(); + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + java.util.List + getQuantileOrBuilderList(); + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + io.prometheus.client.Metrics.QuantileOrBuilder getQuantileOrBuilder( + int index); + } + /** + * Protobuf type {@code io.prometheus.client.Summary} + */ + public static final class Summary extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.Summary) + SummaryOrBuilder { + // Use Summary.newBuilder() to construct. + private Summary(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Summary(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Summary defaultInstance; + public static Summary getDefaultInstance() { + return defaultInstance; + } + + public Summary getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Summary( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 8: { + bitField0_ |= 0x00000001; + sampleCount_ = input.readUInt64(); + break; + } + case 17: { + bitField0_ |= 0x00000002; + sampleSum_ = input.readDouble(); + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + quantile_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + quantile_.add(input.readMessage(io.prometheus.client.Metrics.Quantile.PARSER, extensionRegistry)); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + quantile_ = java.util.Collections.unmodifiableList(quantile_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Summary.class, io.prometheus.client.Metrics.Summary.Builder.class); + } + + public static com.google.protobuf.Parser
    PARSER = + new com.google.protobuf.AbstractParser() { + public Summary parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Summary(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int SAMPLE_COUNT_FIELD_NUMBER = 1; + private long sampleCount_; + /** + * optional uint64 sample_count = 1; + */ + public boolean hasSampleCount() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional uint64 sample_count = 1; + */ + public long getSampleCount() { + return sampleCount_; + } + + public static final int SAMPLE_SUM_FIELD_NUMBER = 2; + private double sampleSum_; + /** + * optional double sample_sum = 2; + */ + public boolean hasSampleSum() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional double sample_sum = 2; + */ + public double getSampleSum() { + return sampleSum_; + } + + public static final int QUANTILE_FIELD_NUMBER = 3; + private java.util.List quantile_; + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public java.util.List getQuantileList() { + return quantile_; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public java.util.List + getQuantileOrBuilderList() { + return quantile_; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public int getQuantileCount() { + return quantile_.size(); + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public io.prometheus.client.Metrics.Quantile getQuantile(int index) { + return quantile_.get(index); + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public io.prometheus.client.Metrics.QuantileOrBuilder getQuantileOrBuilder( + int index) { + return quantile_.get(index); + } + + private void initFields() { + sampleCount_ = 0L; + sampleSum_ = 0D; + quantile_ = java.util.Collections.emptyList(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeUInt64(1, sampleCount_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeDouble(2, sampleSum_); + } + for (int i = 0; i < quantile_.size(); i++) { + output.writeMessage(3, quantile_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(1, sampleCount_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(2, sampleSum_); + } + for (int i = 0; i < quantile_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, quantile_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.Summary parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Summary parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Summary parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Summary parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Summary parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Summary parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Summary parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.Summary parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Summary parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Summary parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.Summary prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.Summary} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.Summary) + io.prometheus.client.Metrics.SummaryOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Summary.class, io.prometheus.client.Metrics.Summary.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.Summary.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getQuantileFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + sampleCount_ = 0L; + bitField0_ = (bitField0_ & ~0x00000001); + sampleSum_ = 0D; + bitField0_ = (bitField0_ & ~0x00000002); + if (quantileBuilder_ == null) { + quantile_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + } else { + quantileBuilder_.clear(); + } + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Summary_descriptor; + } + + public io.prometheus.client.Metrics.Summary getDefaultInstanceForType() { + return io.prometheus.client.Metrics.Summary.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.Summary build() { + io.prometheus.client.Metrics.Summary result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.Summary buildPartial() { + io.prometheus.client.Metrics.Summary result = new io.prometheus.client.Metrics.Summary(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.sampleCount_ = sampleCount_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.sampleSum_ = sampleSum_; + if (quantileBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004)) { + quantile_ = java.util.Collections.unmodifiableList(quantile_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.quantile_ = quantile_; + } else { + result.quantile_ = quantileBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.Summary) { + return mergeFrom((io.prometheus.client.Metrics.Summary)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.Summary other) { + if (other == io.prometheus.client.Metrics.Summary.getDefaultInstance()) return this; + if (other.hasSampleCount()) { + setSampleCount(other.getSampleCount()); + } + if (other.hasSampleSum()) { + setSampleSum(other.getSampleSum()); + } + if (quantileBuilder_ == null) { + if (!other.quantile_.isEmpty()) { + if (quantile_.isEmpty()) { + quantile_ = other.quantile_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureQuantileIsMutable(); + quantile_.addAll(other.quantile_); + } + onChanged(); + } + } else { + if (!other.quantile_.isEmpty()) { + if (quantileBuilder_.isEmpty()) { + quantileBuilder_.dispose(); + quantileBuilder_ = null; + quantile_ = other.quantile_; + bitField0_ = (bitField0_ & ~0x00000004); + quantileBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getQuantileFieldBuilder() : null; + } else { + quantileBuilder_.addAllMessages(other.quantile_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.Summary parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.Summary) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private long sampleCount_ ; + /** + * optional uint64 sample_count = 1; + */ + public boolean hasSampleCount() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional uint64 sample_count = 1; + */ + public long getSampleCount() { + return sampleCount_; + } + /** + * optional uint64 sample_count = 1; + */ + public Builder setSampleCount(long value) { + bitField0_ |= 0x00000001; + sampleCount_ = value; + onChanged(); + return this; + } + /** + * optional uint64 sample_count = 1; + */ + public Builder clearSampleCount() { + bitField0_ = (bitField0_ & ~0x00000001); + sampleCount_ = 0L; + onChanged(); + return this; + } + + private double sampleSum_ ; + /** + * optional double sample_sum = 2; + */ + public boolean hasSampleSum() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional double sample_sum = 2; + */ + public double getSampleSum() { + return sampleSum_; + } + /** + * optional double sample_sum = 2; + */ + public Builder setSampleSum(double value) { + bitField0_ |= 0x00000002; + sampleSum_ = value; + onChanged(); + return this; + } + /** + * optional double sample_sum = 2; + */ + public Builder clearSampleSum() { + bitField0_ = (bitField0_ & ~0x00000002); + sampleSum_ = 0D; + onChanged(); + return this; + } + + private java.util.List quantile_ = + java.util.Collections.emptyList(); + private void ensureQuantileIsMutable() { + if (!((bitField0_ & 0x00000004) == 0x00000004)) { + quantile_ = new java.util.ArrayList(quantile_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.Quantile, io.prometheus.client.Metrics.Quantile.Builder, io.prometheus.client.Metrics.QuantileOrBuilder> quantileBuilder_; + + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public java.util.List getQuantileList() { + if (quantileBuilder_ == null) { + return java.util.Collections.unmodifiableList(quantile_); + } else { + return quantileBuilder_.getMessageList(); + } + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public int getQuantileCount() { + if (quantileBuilder_ == null) { + return quantile_.size(); + } else { + return quantileBuilder_.getCount(); + } + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public io.prometheus.client.Metrics.Quantile getQuantile(int index) { + if (quantileBuilder_ == null) { + return quantile_.get(index); + } else { + return quantileBuilder_.getMessage(index); + } + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public Builder setQuantile( + int index, io.prometheus.client.Metrics.Quantile value) { + if (quantileBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureQuantileIsMutable(); + quantile_.set(index, value); + onChanged(); + } else { + quantileBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public Builder setQuantile( + int index, io.prometheus.client.Metrics.Quantile.Builder builderForValue) { + if (quantileBuilder_ == null) { + ensureQuantileIsMutable(); + quantile_.set(index, builderForValue.build()); + onChanged(); + } else { + quantileBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public Builder addQuantile(io.prometheus.client.Metrics.Quantile value) { + if (quantileBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureQuantileIsMutable(); + quantile_.add(value); + onChanged(); + } else { + quantileBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public Builder addQuantile( + int index, io.prometheus.client.Metrics.Quantile value) { + if (quantileBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureQuantileIsMutable(); + quantile_.add(index, value); + onChanged(); + } else { + quantileBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public Builder addQuantile( + io.prometheus.client.Metrics.Quantile.Builder builderForValue) { + if (quantileBuilder_ == null) { + ensureQuantileIsMutable(); + quantile_.add(builderForValue.build()); + onChanged(); + } else { + quantileBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public Builder addQuantile( + int index, io.prometheus.client.Metrics.Quantile.Builder builderForValue) { + if (quantileBuilder_ == null) { + ensureQuantileIsMutable(); + quantile_.add(index, builderForValue.build()); + onChanged(); + } else { + quantileBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public Builder addAllQuantile( + java.lang.Iterable values) { + if (quantileBuilder_ == null) { + ensureQuantileIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, quantile_); + onChanged(); + } else { + quantileBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public Builder clearQuantile() { + if (quantileBuilder_ == null) { + quantile_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + quantileBuilder_.clear(); + } + return this; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public Builder removeQuantile(int index) { + if (quantileBuilder_ == null) { + ensureQuantileIsMutable(); + quantile_.remove(index); + onChanged(); + } else { + quantileBuilder_.remove(index); + } + return this; + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public io.prometheus.client.Metrics.Quantile.Builder getQuantileBuilder( + int index) { + return getQuantileFieldBuilder().getBuilder(index); + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public io.prometheus.client.Metrics.QuantileOrBuilder getQuantileOrBuilder( + int index) { + if (quantileBuilder_ == null) { + return quantile_.get(index); } else { + return quantileBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public java.util.List + getQuantileOrBuilderList() { + if (quantileBuilder_ != null) { + return quantileBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(quantile_); + } + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public io.prometheus.client.Metrics.Quantile.Builder addQuantileBuilder() { + return getQuantileFieldBuilder().addBuilder( + io.prometheus.client.Metrics.Quantile.getDefaultInstance()); + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public io.prometheus.client.Metrics.Quantile.Builder addQuantileBuilder( + int index) { + return getQuantileFieldBuilder().addBuilder( + index, io.prometheus.client.Metrics.Quantile.getDefaultInstance()); + } + /** + * repeated .io.prometheus.client.Quantile quantile = 3; + */ + public java.util.List + getQuantileBuilderList() { + return getQuantileFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.Quantile, io.prometheus.client.Metrics.Quantile.Builder, io.prometheus.client.Metrics.QuantileOrBuilder> + getQuantileFieldBuilder() { + if (quantileBuilder_ == null) { + quantileBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.Quantile, io.prometheus.client.Metrics.Quantile.Builder, io.prometheus.client.Metrics.QuantileOrBuilder>( + quantile_, + ((bitField0_ & 0x00000004) == 0x00000004), + getParentForChildren(), + isClean()); + quantile_ = null; + } + return quantileBuilder_; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.Summary) + } + + static { + defaultInstance = new Summary(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Summary) + } + + public interface UntypedOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.Untyped) + com.google.protobuf.MessageOrBuilder { + + /** + * optional double value = 1; + */ + boolean hasValue(); + /** + * optional double value = 1; + */ + double getValue(); + } + /** + * Protobuf type {@code io.prometheus.client.Untyped} + */ + public static final class Untyped extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.Untyped) + UntypedOrBuilder { + // Use Untyped.newBuilder() to construct. + private Untyped(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Untyped(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Untyped defaultInstance; + public static Untyped getDefaultInstance() { + return defaultInstance; + } + + public Untyped getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Untyped( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 9: { + bitField0_ |= 0x00000001; + value_ = input.readDouble(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Untyped.class, io.prometheus.client.Metrics.Untyped.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public Untyped parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Untyped(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int VALUE_FIELD_NUMBER = 1; + private double value_; + /** + * optional double value = 1; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional double value = 1; + */ + public double getValue() { + return value_; + } + + private void initFields() { + value_ = 0D; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeDouble(1, value_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(1, value_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.Untyped parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Untyped parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Untyped parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Untyped parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Untyped parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Untyped parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Untyped parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.Untyped parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Untyped parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Untyped parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.Untyped prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.Untyped} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.Untyped) + io.prometheus.client.Metrics.UntypedOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Untyped.class, io.prometheus.client.Metrics.Untyped.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.Untyped.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + value_ = 0D; + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Untyped_descriptor; + } + + public io.prometheus.client.Metrics.Untyped getDefaultInstanceForType() { + return io.prometheus.client.Metrics.Untyped.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.Untyped build() { + io.prometheus.client.Metrics.Untyped result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.Untyped buildPartial() { + io.prometheus.client.Metrics.Untyped result = new io.prometheus.client.Metrics.Untyped(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.value_ = value_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.Untyped) { + return mergeFrom((io.prometheus.client.Metrics.Untyped)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.Untyped other) { + if (other == io.prometheus.client.Metrics.Untyped.getDefaultInstance()) return this; + if (other.hasValue()) { + setValue(other.getValue()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.Untyped parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.Untyped) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private double value_ ; + /** + * optional double value = 1; + */ + public boolean hasValue() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional double value = 1; + */ + public double getValue() { + return value_; + } + /** + * optional double value = 1; + */ + public Builder setValue(double value) { + bitField0_ |= 0x00000001; + value_ = value; + onChanged(); + return this; + } + /** + * optional double value = 1; + */ + public Builder clearValue() { + bitField0_ = (bitField0_ & ~0x00000001); + value_ = 0D; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.Untyped) + } + + static { + defaultInstance = new Untyped(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Untyped) + } + + public interface HistogramOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.Histogram) + com.google.protobuf.MessageOrBuilder { + + /** + * optional uint64 sample_count = 1; + */ + boolean hasSampleCount(); + /** + * optional uint64 sample_count = 1; + */ + long getSampleCount(); + + /** + * optional double sample_sum = 2; + */ + boolean hasSampleSum(); + /** + * optional double sample_sum = 2; + */ + double getSampleSum(); + + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + java.util.List + getBucketList(); + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + io.prometheus.client.Metrics.Bucket getBucket(int index); + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + int getBucketCount(); + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + java.util.List + getBucketOrBuilderList(); + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + io.prometheus.client.Metrics.BucketOrBuilder getBucketOrBuilder( + int index); + } + /** + * Protobuf type {@code io.prometheus.client.Histogram} + */ + public static final class Histogram extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.Histogram) + HistogramOrBuilder { + // Use Histogram.newBuilder() to construct. + private Histogram(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Histogram(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Histogram defaultInstance; + public static Histogram getDefaultInstance() { + return defaultInstance; + } + + public Histogram getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Histogram( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 8: { + bitField0_ |= 0x00000001; + sampleCount_ = input.readUInt64(); + break; + } + case 17: { + bitField0_ |= 0x00000002; + sampleSum_ = input.readDouble(); + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + bucket_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + bucket_.add(input.readMessage(io.prometheus.client.Metrics.Bucket.PARSER, extensionRegistry)); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + bucket_ = java.util.Collections.unmodifiableList(bucket_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Histogram.class, io.prometheus.client.Metrics.Histogram.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public Histogram parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Histogram(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int SAMPLE_COUNT_FIELD_NUMBER = 1; + private long sampleCount_; + /** + * optional uint64 sample_count = 1; + */ + public boolean hasSampleCount() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional uint64 sample_count = 1; + */ + public long getSampleCount() { + return sampleCount_; + } + + public static final int SAMPLE_SUM_FIELD_NUMBER = 2; + private double sampleSum_; + /** + * optional double sample_sum = 2; + */ + public boolean hasSampleSum() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional double sample_sum = 2; + */ + public double getSampleSum() { + return sampleSum_; + } + + public static final int BUCKET_FIELD_NUMBER = 3; + private java.util.List bucket_; + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + public java.util.List getBucketList() { + return bucket_; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + public java.util.List + getBucketOrBuilderList() { + return bucket_; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + public int getBucketCount() { + return bucket_.size(); + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + public io.prometheus.client.Metrics.Bucket getBucket(int index) { + return bucket_.get(index); + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +     * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +     * 
    + */ + public io.prometheus.client.Metrics.BucketOrBuilder getBucketOrBuilder( + int index) { + return bucket_.get(index); + } + + private void initFields() { + sampleCount_ = 0L; + sampleSum_ = 0D; + bucket_ = java.util.Collections.emptyList(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeUInt64(1, sampleCount_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeDouble(2, sampleSum_); + } + for (int i = 0; i < bucket_.size(); i++) { + output.writeMessage(3, bucket_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(1, sampleCount_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(2, sampleSum_); + } + for (int i = 0; i < bucket_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, bucket_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.Histogram parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Histogram parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Histogram parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Histogram parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Histogram parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Histogram parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Histogram parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.Histogram parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Histogram parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Histogram parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.Histogram prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.Histogram} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.Histogram) + io.prometheus.client.Metrics.HistogramOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Histogram.class, io.prometheus.client.Metrics.Histogram.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.Histogram.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getBucketFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + sampleCount_ = 0L; + bitField0_ = (bitField0_ & ~0x00000001); + sampleSum_ = 0D; + bitField0_ = (bitField0_ & ~0x00000002); + if (bucketBuilder_ == null) { + bucket_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + } else { + bucketBuilder_.clear(); + } + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Histogram_descriptor; + } + + public io.prometheus.client.Metrics.Histogram getDefaultInstanceForType() { + return io.prometheus.client.Metrics.Histogram.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.Histogram build() { + io.prometheus.client.Metrics.Histogram result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.Histogram buildPartial() { + io.prometheus.client.Metrics.Histogram result = new io.prometheus.client.Metrics.Histogram(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.sampleCount_ = sampleCount_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.sampleSum_ = sampleSum_; + if (bucketBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004)) { + bucket_ = java.util.Collections.unmodifiableList(bucket_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.bucket_ = bucket_; + } else { + result.bucket_ = bucketBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.Histogram) { + return mergeFrom((io.prometheus.client.Metrics.Histogram)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.Histogram other) { + if (other == io.prometheus.client.Metrics.Histogram.getDefaultInstance()) return this; + if (other.hasSampleCount()) { + setSampleCount(other.getSampleCount()); + } + if (other.hasSampleSum()) { + setSampleSum(other.getSampleSum()); + } + if (bucketBuilder_ == null) { + if (!other.bucket_.isEmpty()) { + if (bucket_.isEmpty()) { + bucket_ = other.bucket_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureBucketIsMutable(); + bucket_.addAll(other.bucket_); + } + onChanged(); + } + } else { + if (!other.bucket_.isEmpty()) { + if (bucketBuilder_.isEmpty()) { + bucketBuilder_.dispose(); + bucketBuilder_ = null; + bucket_ = other.bucket_; + bitField0_ = (bitField0_ & ~0x00000004); + bucketBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getBucketFieldBuilder() : null; + } else { + bucketBuilder_.addAllMessages(other.bucket_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.Histogram parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.Histogram) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private long sampleCount_ ; + /** + * optional uint64 sample_count = 1; + */ + public boolean hasSampleCount() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional uint64 sample_count = 1; + */ + public long getSampleCount() { + return sampleCount_; + } + /** + * optional uint64 sample_count = 1; + */ + public Builder setSampleCount(long value) { + bitField0_ |= 0x00000001; + sampleCount_ = value; + onChanged(); + return this; + } + /** + * optional uint64 sample_count = 1; + */ + public Builder clearSampleCount() { + bitField0_ = (bitField0_ & ~0x00000001); + sampleCount_ = 0L; + onChanged(); + return this; + } + + private double sampleSum_ ; + /** + * optional double sample_sum = 2; + */ + public boolean hasSampleSum() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional double sample_sum = 2; + */ + public double getSampleSum() { + return sampleSum_; + } + /** + * optional double sample_sum = 2; + */ + public Builder setSampleSum(double value) { + bitField0_ |= 0x00000002; + sampleSum_ = value; + onChanged(); + return this; + } + /** + * optional double sample_sum = 2; + */ + public Builder clearSampleSum() { + bitField0_ = (bitField0_ & ~0x00000002); + sampleSum_ = 0D; + onChanged(); + return this; + } + + private java.util.List bucket_ = + java.util.Collections.emptyList(); + private void ensureBucketIsMutable() { + if (!((bitField0_ & 0x00000004) == 0x00000004)) { + bucket_ = new java.util.ArrayList(bucket_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.Bucket, io.prometheus.client.Metrics.Bucket.Builder, io.prometheus.client.Metrics.BucketOrBuilder> bucketBuilder_; + + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public java.util.List getBucketList() { + if (bucketBuilder_ == null) { + return java.util.Collections.unmodifiableList(bucket_); + } else { + return bucketBuilder_.getMessageList(); + } + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public int getBucketCount() { + if (bucketBuilder_ == null) { + return bucket_.size(); + } else { + return bucketBuilder_.getCount(); + } + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public io.prometheus.client.Metrics.Bucket getBucket(int index) { + if (bucketBuilder_ == null) { + return bucket_.get(index); + } else { + return bucketBuilder_.getMessage(index); + } + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public Builder setBucket( + int index, io.prometheus.client.Metrics.Bucket value) { + if (bucketBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureBucketIsMutable(); + bucket_.set(index, value); + onChanged(); + } else { + bucketBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public Builder setBucket( + int index, io.prometheus.client.Metrics.Bucket.Builder builderForValue) { + if (bucketBuilder_ == null) { + ensureBucketIsMutable(); + bucket_.set(index, builderForValue.build()); + onChanged(); + } else { + bucketBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public Builder addBucket(io.prometheus.client.Metrics.Bucket value) { + if (bucketBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureBucketIsMutable(); + bucket_.add(value); + onChanged(); + } else { + bucketBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public Builder addBucket( + int index, io.prometheus.client.Metrics.Bucket value) { + if (bucketBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureBucketIsMutable(); + bucket_.add(index, value); + onChanged(); + } else { + bucketBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public Builder addBucket( + io.prometheus.client.Metrics.Bucket.Builder builderForValue) { + if (bucketBuilder_ == null) { + ensureBucketIsMutable(); + bucket_.add(builderForValue.build()); + onChanged(); + } else { + bucketBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public Builder addBucket( + int index, io.prometheus.client.Metrics.Bucket.Builder builderForValue) { + if (bucketBuilder_ == null) { + ensureBucketIsMutable(); + bucket_.add(index, builderForValue.build()); + onChanged(); + } else { + bucketBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public Builder addAllBucket( + java.lang.Iterable values) { + if (bucketBuilder_ == null) { + ensureBucketIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, bucket_); + onChanged(); + } else { + bucketBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public Builder clearBucket() { + if (bucketBuilder_ == null) { + bucket_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + bucketBuilder_.clear(); + } + return this; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public Builder removeBucket(int index) { + if (bucketBuilder_ == null) { + ensureBucketIsMutable(); + bucket_.remove(index); + onChanged(); + } else { + bucketBuilder_.remove(index); + } + return this; + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public io.prometheus.client.Metrics.Bucket.Builder getBucketBuilder( + int index) { + return getBucketFieldBuilder().getBuilder(index); + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public io.prometheus.client.Metrics.BucketOrBuilder getBucketOrBuilder( + int index) { + if (bucketBuilder_ == null) { + return bucket_.get(index); } else { + return bucketBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public java.util.List + getBucketOrBuilderList() { + if (bucketBuilder_ != null) { + return bucketBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(bucket_); + } + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public io.prometheus.client.Metrics.Bucket.Builder addBucketBuilder() { + return getBucketFieldBuilder().addBuilder( + io.prometheus.client.Metrics.Bucket.getDefaultInstance()); + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public io.prometheus.client.Metrics.Bucket.Builder addBucketBuilder( + int index) { + return getBucketFieldBuilder().addBuilder( + index, io.prometheus.client.Metrics.Bucket.getDefaultInstance()); + } + /** + * repeated .io.prometheus.client.Bucket bucket = 3; + * + *
    +       * Ordered in increasing order of upper_bound, +Inf bucket is optional.
    +       * 
    + */ + public java.util.List + getBucketBuilderList() { + return getBucketFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.Bucket, io.prometheus.client.Metrics.Bucket.Builder, io.prometheus.client.Metrics.BucketOrBuilder> + getBucketFieldBuilder() { + if (bucketBuilder_ == null) { + bucketBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.Bucket, io.prometheus.client.Metrics.Bucket.Builder, io.prometheus.client.Metrics.BucketOrBuilder>( + bucket_, + ((bitField0_ & 0x00000004) == 0x00000004), + getParentForChildren(), + isClean()); + bucket_ = null; + } + return bucketBuilder_; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.Histogram) + } + + static { + defaultInstance = new Histogram(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Histogram) + } + + public interface BucketOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.Bucket) + com.google.protobuf.MessageOrBuilder { + + /** + * optional uint64 cumulative_count = 1; + * + *
    +     * Cumulative in increasing order.
    +     * 
    + */ + boolean hasCumulativeCount(); + /** + * optional uint64 cumulative_count = 1; + * + *
    +     * Cumulative in increasing order.
    +     * 
    + */ + long getCumulativeCount(); + + /** + * optional double upper_bound = 2; + * + *
    +     * Inclusive.
    +     * 
    + */ + boolean hasUpperBound(); + /** + * optional double upper_bound = 2; + * + *
    +     * Inclusive.
    +     * 
    + */ + double getUpperBound(); + } + /** + * Protobuf type {@code io.prometheus.client.Bucket} + */ + public static final class Bucket extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.Bucket) + BucketOrBuilder { + // Use Bucket.newBuilder() to construct. + private Bucket(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Bucket(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Bucket defaultInstance; + public static Bucket getDefaultInstance() { + return defaultInstance; + } + + public Bucket getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Bucket( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 8: { + bitField0_ |= 0x00000001; + cumulativeCount_ = input.readUInt64(); + break; + } + case 17: { + bitField0_ |= 0x00000002; + upperBound_ = input.readDouble(); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Bucket.class, io.prometheus.client.Metrics.Bucket.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public Bucket parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Bucket(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int CUMULATIVE_COUNT_FIELD_NUMBER = 1; + private long cumulativeCount_; + /** + * optional uint64 cumulative_count = 1; + * + *
    +     * Cumulative in increasing order.
    +     * 
    + */ + public boolean hasCumulativeCount() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional uint64 cumulative_count = 1; + * + *
    +     * Cumulative in increasing order.
    +     * 
    + */ + public long getCumulativeCount() { + return cumulativeCount_; + } + + public static final int UPPER_BOUND_FIELD_NUMBER = 2; + private double upperBound_; + /** + * optional double upper_bound = 2; + * + *
    +     * Inclusive.
    +     * 
    + */ + public boolean hasUpperBound() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional double upper_bound = 2; + * + *
    +     * Inclusive.
    +     * 
    + */ + public double getUpperBound() { + return upperBound_; + } + + private void initFields() { + cumulativeCount_ = 0L; + upperBound_ = 0D; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeUInt64(1, cumulativeCount_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeDouble(2, upperBound_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeUInt64Size(1, cumulativeCount_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeDoubleSize(2, upperBound_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.Bucket parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Bucket parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Bucket parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Bucket parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Bucket parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Bucket parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Bucket parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.Bucket parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Bucket parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Bucket parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.Bucket prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.Bucket} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.Bucket) + io.prometheus.client.Metrics.BucketOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Bucket.class, io.prometheus.client.Metrics.Bucket.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.Bucket.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + cumulativeCount_ = 0L; + bitField0_ = (bitField0_ & ~0x00000001); + upperBound_ = 0D; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Bucket_descriptor; + } + + public io.prometheus.client.Metrics.Bucket getDefaultInstanceForType() { + return io.prometheus.client.Metrics.Bucket.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.Bucket build() { + io.prometheus.client.Metrics.Bucket result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.Bucket buildPartial() { + io.prometheus.client.Metrics.Bucket result = new io.prometheus.client.Metrics.Bucket(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.cumulativeCount_ = cumulativeCount_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.upperBound_ = upperBound_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.Bucket) { + return mergeFrom((io.prometheus.client.Metrics.Bucket)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.Bucket other) { + if (other == io.prometheus.client.Metrics.Bucket.getDefaultInstance()) return this; + if (other.hasCumulativeCount()) { + setCumulativeCount(other.getCumulativeCount()); + } + if (other.hasUpperBound()) { + setUpperBound(other.getUpperBound()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.Bucket parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.Bucket) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private long cumulativeCount_ ; + /** + * optional uint64 cumulative_count = 1; + * + *
    +       * Cumulative in increasing order.
    +       * 
    + */ + public boolean hasCumulativeCount() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional uint64 cumulative_count = 1; + * + *
    +       * Cumulative in increasing order.
    +       * 
    + */ + public long getCumulativeCount() { + return cumulativeCount_; + } + /** + * optional uint64 cumulative_count = 1; + * + *
    +       * Cumulative in increasing order.
    +       * 
    + */ + public Builder setCumulativeCount(long value) { + bitField0_ |= 0x00000001; + cumulativeCount_ = value; + onChanged(); + return this; + } + /** + * optional uint64 cumulative_count = 1; + * + *
    +       * Cumulative in increasing order.
    +       * 
    + */ + public Builder clearCumulativeCount() { + bitField0_ = (bitField0_ & ~0x00000001); + cumulativeCount_ = 0L; + onChanged(); + return this; + } + + private double upperBound_ ; + /** + * optional double upper_bound = 2; + * + *
    +       * Inclusive.
    +       * 
    + */ + public boolean hasUpperBound() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional double upper_bound = 2; + * + *
    +       * Inclusive.
    +       * 
    + */ + public double getUpperBound() { + return upperBound_; + } + /** + * optional double upper_bound = 2; + * + *
    +       * Inclusive.
    +       * 
    + */ + public Builder setUpperBound(double value) { + bitField0_ |= 0x00000002; + upperBound_ = value; + onChanged(); + return this; + } + /** + * optional double upper_bound = 2; + * + *
    +       * Inclusive.
    +       * 
    + */ + public Builder clearUpperBound() { + bitField0_ = (bitField0_ & ~0x00000002); + upperBound_ = 0D; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.Bucket) + } + + static { + defaultInstance = new Bucket(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Bucket) + } + + public interface MetricOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.Metric) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + java.util.List + getLabelList(); + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + io.prometheus.client.Metrics.LabelPair getLabel(int index); + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + int getLabelCount(); + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + java.util.List + getLabelOrBuilderList(); + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + io.prometheus.client.Metrics.LabelPairOrBuilder getLabelOrBuilder( + int index); + + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + boolean hasGauge(); + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + io.prometheus.client.Metrics.Gauge getGauge(); + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + io.prometheus.client.Metrics.GaugeOrBuilder getGaugeOrBuilder(); + + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + boolean hasCounter(); + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + io.prometheus.client.Metrics.Counter getCounter(); + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + io.prometheus.client.Metrics.CounterOrBuilder getCounterOrBuilder(); + + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + boolean hasSummary(); + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + io.prometheus.client.Metrics.Summary getSummary(); + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + io.prometheus.client.Metrics.SummaryOrBuilder getSummaryOrBuilder(); + + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + boolean hasUntyped(); + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + io.prometheus.client.Metrics.Untyped getUntyped(); + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + io.prometheus.client.Metrics.UntypedOrBuilder getUntypedOrBuilder(); + + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + boolean hasHistogram(); + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + io.prometheus.client.Metrics.Histogram getHistogram(); + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + io.prometheus.client.Metrics.HistogramOrBuilder getHistogramOrBuilder(); + + /** + * optional int64 timestamp_ms = 6; + */ + boolean hasTimestampMs(); + /** + * optional int64 timestamp_ms = 6; + */ + long getTimestampMs(); + } + /** + * Protobuf type {@code io.prometheus.client.Metric} + */ + public static final class Metric extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.Metric) + MetricOrBuilder { + // Use Metric.newBuilder() to construct. + private Metric(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Metric(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Metric defaultInstance; + public static Metric getDefaultInstance() { + return defaultInstance; + } + + public Metric getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Metric( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 10: { + if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) { + label_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + label_.add(input.readMessage(io.prometheus.client.Metrics.LabelPair.PARSER, extensionRegistry)); + break; + } + case 18: { + io.prometheus.client.Metrics.Gauge.Builder subBuilder = null; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + subBuilder = gauge_.toBuilder(); + } + gauge_ = input.readMessage(io.prometheus.client.Metrics.Gauge.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(gauge_); + gauge_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000001; + break; + } + case 26: { + io.prometheus.client.Metrics.Counter.Builder subBuilder = null; + if (((bitField0_ & 0x00000002) == 0x00000002)) { + subBuilder = counter_.toBuilder(); + } + counter_ = input.readMessage(io.prometheus.client.Metrics.Counter.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(counter_); + counter_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000002; + break; + } + case 34: { + io.prometheus.client.Metrics.Summary.Builder subBuilder = null; + if (((bitField0_ & 0x00000004) == 0x00000004)) { + subBuilder = summary_.toBuilder(); + } + summary_ = input.readMessage(io.prometheus.client.Metrics.Summary.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(summary_); + summary_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000004; + break; + } + case 42: { + io.prometheus.client.Metrics.Untyped.Builder subBuilder = null; + if (((bitField0_ & 0x00000008) == 0x00000008)) { + subBuilder = untyped_.toBuilder(); + } + untyped_ = input.readMessage(io.prometheus.client.Metrics.Untyped.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(untyped_); + untyped_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000008; + break; + } + case 48: { + bitField0_ |= 0x00000020; + timestampMs_ = input.readInt64(); + break; + } + case 58: { + io.prometheus.client.Metrics.Histogram.Builder subBuilder = null; + if (((bitField0_ & 0x00000010) == 0x00000010)) { + subBuilder = histogram_.toBuilder(); + } + histogram_ = input.readMessage(io.prometheus.client.Metrics.Histogram.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(histogram_); + histogram_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000010; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) { + label_ = java.util.Collections.unmodifiableList(label_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Metric.class, io.prometheus.client.Metrics.Metric.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public Metric parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Metric(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int LABEL_FIELD_NUMBER = 1; + private java.util.List label_; + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public java.util.List getLabelList() { + return label_; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public java.util.List + getLabelOrBuilderList() { + return label_; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public int getLabelCount() { + return label_.size(); + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public io.prometheus.client.Metrics.LabelPair getLabel(int index) { + return label_.get(index); + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public io.prometheus.client.Metrics.LabelPairOrBuilder getLabelOrBuilder( + int index) { + return label_.get(index); + } + + public static final int GAUGE_FIELD_NUMBER = 2; + private io.prometheus.client.Metrics.Gauge gauge_; + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public boolean hasGauge() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public io.prometheus.client.Metrics.Gauge getGauge() { + return gauge_; + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public io.prometheus.client.Metrics.GaugeOrBuilder getGaugeOrBuilder() { + return gauge_; + } + + public static final int COUNTER_FIELD_NUMBER = 3; + private io.prometheus.client.Metrics.Counter counter_; + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public boolean hasCounter() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public io.prometheus.client.Metrics.Counter getCounter() { + return counter_; + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public io.prometheus.client.Metrics.CounterOrBuilder getCounterOrBuilder() { + return counter_; + } + + public static final int SUMMARY_FIELD_NUMBER = 4; + private io.prometheus.client.Metrics.Summary summary_; + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public boolean hasSummary() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public io.prometheus.client.Metrics.Summary getSummary() { + return summary_; + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public io.prometheus.client.Metrics.SummaryOrBuilder getSummaryOrBuilder() { + return summary_; + } + + public static final int UNTYPED_FIELD_NUMBER = 5; + private io.prometheus.client.Metrics.Untyped untyped_; + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public boolean hasUntyped() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public io.prometheus.client.Metrics.Untyped getUntyped() { + return untyped_; + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public io.prometheus.client.Metrics.UntypedOrBuilder getUntypedOrBuilder() { + return untyped_; + } + + public static final int HISTOGRAM_FIELD_NUMBER = 7; + private io.prometheus.client.Metrics.Histogram histogram_; + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public boolean hasHistogram() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public io.prometheus.client.Metrics.Histogram getHistogram() { + return histogram_; + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public io.prometheus.client.Metrics.HistogramOrBuilder getHistogramOrBuilder() { + return histogram_; + } + + public static final int TIMESTAMP_MS_FIELD_NUMBER = 6; + private long timestampMs_; + /** + * optional int64 timestamp_ms = 6; + */ + public boolean hasTimestampMs() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + /** + * optional int64 timestamp_ms = 6; + */ + public long getTimestampMs() { + return timestampMs_; + } + + private void initFields() { + label_ = java.util.Collections.emptyList(); + gauge_ = io.prometheus.client.Metrics.Gauge.getDefaultInstance(); + counter_ = io.prometheus.client.Metrics.Counter.getDefaultInstance(); + summary_ = io.prometheus.client.Metrics.Summary.getDefaultInstance(); + untyped_ = io.prometheus.client.Metrics.Untyped.getDefaultInstance(); + histogram_ = io.prometheus.client.Metrics.Histogram.getDefaultInstance(); + timestampMs_ = 0L; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + for (int i = 0; i < label_.size(); i++) { + output.writeMessage(1, label_.get(i)); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeMessage(2, gauge_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeMessage(3, counter_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeMessage(4, summary_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + output.writeMessage(5, untyped_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + output.writeInt64(6, timestampMs_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + output.writeMessage(7, histogram_); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < label_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, label_.get(i)); + } + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, gauge_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, counter_); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, summary_); + } + if (((bitField0_ & 0x00000008) == 0x00000008)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, untyped_); + } + if (((bitField0_ & 0x00000020) == 0x00000020)) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(6, timestampMs_); + } + if (((bitField0_ & 0x00000010) == 0x00000010)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(7, histogram_); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.Metric parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Metric parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Metric parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.Metric parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.Metric parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Metric parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Metric parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.Metric parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.Metric parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.Metric parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.Metric prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.Metric} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.Metric) + io.prometheus.client.Metrics.MetricOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.Metric.class, io.prometheus.client.Metrics.Metric.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.Metric.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getLabelFieldBuilder(); + getGaugeFieldBuilder(); + getCounterFieldBuilder(); + getSummaryFieldBuilder(); + getUntypedFieldBuilder(); + getHistogramFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + if (labelBuilder_ == null) { + label_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + labelBuilder_.clear(); + } + if (gaugeBuilder_ == null) { + gauge_ = io.prometheus.client.Metrics.Gauge.getDefaultInstance(); + } else { + gaugeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + if (counterBuilder_ == null) { + counter_ = io.prometheus.client.Metrics.Counter.getDefaultInstance(); + } else { + counterBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + if (summaryBuilder_ == null) { + summary_ = io.prometheus.client.Metrics.Summary.getDefaultInstance(); + } else { + summaryBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + if (untypedBuilder_ == null) { + untyped_ = io.prometheus.client.Metrics.Untyped.getDefaultInstance(); + } else { + untypedBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + if (histogramBuilder_ == null) { + histogram_ = io.prometheus.client.Metrics.Histogram.getDefaultInstance(); + } else { + histogramBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + timestampMs_ = 0L; + bitField0_ = (bitField0_ & ~0x00000040); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_Metric_descriptor; + } + + public io.prometheus.client.Metrics.Metric getDefaultInstanceForType() { + return io.prometheus.client.Metrics.Metric.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.Metric build() { + io.prometheus.client.Metrics.Metric result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.Metric buildPartial() { + io.prometheus.client.Metrics.Metric result = new io.prometheus.client.Metrics.Metric(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (labelBuilder_ == null) { + if (((bitField0_ & 0x00000001) == 0x00000001)) { + label_ = java.util.Collections.unmodifiableList(label_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.label_ = label_; + } else { + result.label_ = labelBuilder_.build(); + } + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000001; + } + if (gaugeBuilder_ == null) { + result.gauge_ = gauge_; + } else { + result.gauge_ = gaugeBuilder_.build(); + } + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000002; + } + if (counterBuilder_ == null) { + result.counter_ = counter_; + } else { + result.counter_ = counterBuilder_.build(); + } + if (((from_bitField0_ & 0x00000008) == 0x00000008)) { + to_bitField0_ |= 0x00000004; + } + if (summaryBuilder_ == null) { + result.summary_ = summary_; + } else { + result.summary_ = summaryBuilder_.build(); + } + if (((from_bitField0_ & 0x00000010) == 0x00000010)) { + to_bitField0_ |= 0x00000008; + } + if (untypedBuilder_ == null) { + result.untyped_ = untyped_; + } else { + result.untyped_ = untypedBuilder_.build(); + } + if (((from_bitField0_ & 0x00000020) == 0x00000020)) { + to_bitField0_ |= 0x00000010; + } + if (histogramBuilder_ == null) { + result.histogram_ = histogram_; + } else { + result.histogram_ = histogramBuilder_.build(); + } + if (((from_bitField0_ & 0x00000040) == 0x00000040)) { + to_bitField0_ |= 0x00000020; + } + result.timestampMs_ = timestampMs_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.Metric) { + return mergeFrom((io.prometheus.client.Metrics.Metric)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.Metric other) { + if (other == io.prometheus.client.Metrics.Metric.getDefaultInstance()) return this; + if (labelBuilder_ == null) { + if (!other.label_.isEmpty()) { + if (label_.isEmpty()) { + label_ = other.label_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureLabelIsMutable(); + label_.addAll(other.label_); + } + onChanged(); + } + } else { + if (!other.label_.isEmpty()) { + if (labelBuilder_.isEmpty()) { + labelBuilder_.dispose(); + labelBuilder_ = null; + label_ = other.label_; + bitField0_ = (bitField0_ & ~0x00000001); + labelBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getLabelFieldBuilder() : null; + } else { + labelBuilder_.addAllMessages(other.label_); + } + } + } + if (other.hasGauge()) { + mergeGauge(other.getGauge()); + } + if (other.hasCounter()) { + mergeCounter(other.getCounter()); + } + if (other.hasSummary()) { + mergeSummary(other.getSummary()); + } + if (other.hasUntyped()) { + mergeUntyped(other.getUntyped()); + } + if (other.hasHistogram()) { + mergeHistogram(other.getHistogram()); + } + if (other.hasTimestampMs()) { + setTimestampMs(other.getTimestampMs()); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.Metric parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.Metric) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List label_ = + java.util.Collections.emptyList(); + private void ensureLabelIsMutable() { + if (!((bitField0_ & 0x00000001) == 0x00000001)) { + label_ = new java.util.ArrayList(label_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.LabelPair, io.prometheus.client.Metrics.LabelPair.Builder, io.prometheus.client.Metrics.LabelPairOrBuilder> labelBuilder_; + + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public java.util.List getLabelList() { + if (labelBuilder_ == null) { + return java.util.Collections.unmodifiableList(label_); + } else { + return labelBuilder_.getMessageList(); + } + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public int getLabelCount() { + if (labelBuilder_ == null) { + return label_.size(); + } else { + return labelBuilder_.getCount(); + } + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public io.prometheus.client.Metrics.LabelPair getLabel(int index) { + if (labelBuilder_ == null) { + return label_.get(index); + } else { + return labelBuilder_.getMessage(index); + } + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public Builder setLabel( + int index, io.prometheus.client.Metrics.LabelPair value) { + if (labelBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLabelIsMutable(); + label_.set(index, value); + onChanged(); + } else { + labelBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public Builder setLabel( + int index, io.prometheus.client.Metrics.LabelPair.Builder builderForValue) { + if (labelBuilder_ == null) { + ensureLabelIsMutable(); + label_.set(index, builderForValue.build()); + onChanged(); + } else { + labelBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public Builder addLabel(io.prometheus.client.Metrics.LabelPair value) { + if (labelBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLabelIsMutable(); + label_.add(value); + onChanged(); + } else { + labelBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public Builder addLabel( + int index, io.prometheus.client.Metrics.LabelPair value) { + if (labelBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureLabelIsMutable(); + label_.add(index, value); + onChanged(); + } else { + labelBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public Builder addLabel( + io.prometheus.client.Metrics.LabelPair.Builder builderForValue) { + if (labelBuilder_ == null) { + ensureLabelIsMutable(); + label_.add(builderForValue.build()); + onChanged(); + } else { + labelBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public Builder addLabel( + int index, io.prometheus.client.Metrics.LabelPair.Builder builderForValue) { + if (labelBuilder_ == null) { + ensureLabelIsMutable(); + label_.add(index, builderForValue.build()); + onChanged(); + } else { + labelBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public Builder addAllLabel( + java.lang.Iterable values) { + if (labelBuilder_ == null) { + ensureLabelIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, label_); + onChanged(); + } else { + labelBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public Builder clearLabel() { + if (labelBuilder_ == null) { + label_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + labelBuilder_.clear(); + } + return this; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public Builder removeLabel(int index) { + if (labelBuilder_ == null) { + ensureLabelIsMutable(); + label_.remove(index); + onChanged(); + } else { + labelBuilder_.remove(index); + } + return this; + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public io.prometheus.client.Metrics.LabelPair.Builder getLabelBuilder( + int index) { + return getLabelFieldBuilder().getBuilder(index); + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public io.prometheus.client.Metrics.LabelPairOrBuilder getLabelOrBuilder( + int index) { + if (labelBuilder_ == null) { + return label_.get(index); } else { + return labelBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public java.util.List + getLabelOrBuilderList() { + if (labelBuilder_ != null) { + return labelBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(label_); + } + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public io.prometheus.client.Metrics.LabelPair.Builder addLabelBuilder() { + return getLabelFieldBuilder().addBuilder( + io.prometheus.client.Metrics.LabelPair.getDefaultInstance()); + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public io.prometheus.client.Metrics.LabelPair.Builder addLabelBuilder( + int index) { + return getLabelFieldBuilder().addBuilder( + index, io.prometheus.client.Metrics.LabelPair.getDefaultInstance()); + } + /** + * repeated .io.prometheus.client.LabelPair label = 1; + */ + public java.util.List + getLabelBuilderList() { + return getLabelFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.LabelPair, io.prometheus.client.Metrics.LabelPair.Builder, io.prometheus.client.Metrics.LabelPairOrBuilder> + getLabelFieldBuilder() { + if (labelBuilder_ == null) { + labelBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.LabelPair, io.prometheus.client.Metrics.LabelPair.Builder, io.prometheus.client.Metrics.LabelPairOrBuilder>( + label_, + ((bitField0_ & 0x00000001) == 0x00000001), + getParentForChildren(), + isClean()); + label_ = null; + } + return labelBuilder_; + } + + private io.prometheus.client.Metrics.Gauge gauge_ = io.prometheus.client.Metrics.Gauge.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Gauge, io.prometheus.client.Metrics.Gauge.Builder, io.prometheus.client.Metrics.GaugeOrBuilder> gaugeBuilder_; + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public boolean hasGauge() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public io.prometheus.client.Metrics.Gauge getGauge() { + if (gaugeBuilder_ == null) { + return gauge_; + } else { + return gaugeBuilder_.getMessage(); + } + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public Builder setGauge(io.prometheus.client.Metrics.Gauge value) { + if (gaugeBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + gauge_ = value; + onChanged(); + } else { + gaugeBuilder_.setMessage(value); + } + bitField0_ |= 0x00000002; + return this; + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public Builder setGauge( + io.prometheus.client.Metrics.Gauge.Builder builderForValue) { + if (gaugeBuilder_ == null) { + gauge_ = builderForValue.build(); + onChanged(); + } else { + gaugeBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000002; + return this; + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public Builder mergeGauge(io.prometheus.client.Metrics.Gauge value) { + if (gaugeBuilder_ == null) { + if (((bitField0_ & 0x00000002) == 0x00000002) && + gauge_ != io.prometheus.client.Metrics.Gauge.getDefaultInstance()) { + gauge_ = + io.prometheus.client.Metrics.Gauge.newBuilder(gauge_).mergeFrom(value).buildPartial(); + } else { + gauge_ = value; + } + onChanged(); + } else { + gaugeBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000002; + return this; + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public Builder clearGauge() { + if (gaugeBuilder_ == null) { + gauge_ = io.prometheus.client.Metrics.Gauge.getDefaultInstance(); + onChanged(); + } else { + gaugeBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public io.prometheus.client.Metrics.Gauge.Builder getGaugeBuilder() { + bitField0_ |= 0x00000002; + onChanged(); + return getGaugeFieldBuilder().getBuilder(); + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + public io.prometheus.client.Metrics.GaugeOrBuilder getGaugeOrBuilder() { + if (gaugeBuilder_ != null) { + return gaugeBuilder_.getMessageOrBuilder(); + } else { + return gauge_; + } + } + /** + * optional .io.prometheus.client.Gauge gauge = 2; + */ + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Gauge, io.prometheus.client.Metrics.Gauge.Builder, io.prometheus.client.Metrics.GaugeOrBuilder> + getGaugeFieldBuilder() { + if (gaugeBuilder_ == null) { + gaugeBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Gauge, io.prometheus.client.Metrics.Gauge.Builder, io.prometheus.client.Metrics.GaugeOrBuilder>( + getGauge(), + getParentForChildren(), + isClean()); + gauge_ = null; + } + return gaugeBuilder_; + } + + private io.prometheus.client.Metrics.Counter counter_ = io.prometheus.client.Metrics.Counter.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Counter, io.prometheus.client.Metrics.Counter.Builder, io.prometheus.client.Metrics.CounterOrBuilder> counterBuilder_; + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public boolean hasCounter() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public io.prometheus.client.Metrics.Counter getCounter() { + if (counterBuilder_ == null) { + return counter_; + } else { + return counterBuilder_.getMessage(); + } + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public Builder setCounter(io.prometheus.client.Metrics.Counter value) { + if (counterBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + counter_ = value; + onChanged(); + } else { + counterBuilder_.setMessage(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public Builder setCounter( + io.prometheus.client.Metrics.Counter.Builder builderForValue) { + if (counterBuilder_ == null) { + counter_ = builderForValue.build(); + onChanged(); + } else { + counterBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000004; + return this; + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public Builder mergeCounter(io.prometheus.client.Metrics.Counter value) { + if (counterBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004) && + counter_ != io.prometheus.client.Metrics.Counter.getDefaultInstance()) { + counter_ = + io.prometheus.client.Metrics.Counter.newBuilder(counter_).mergeFrom(value).buildPartial(); + } else { + counter_ = value; + } + onChanged(); + } else { + counterBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000004; + return this; + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public Builder clearCounter() { + if (counterBuilder_ == null) { + counter_ = io.prometheus.client.Metrics.Counter.getDefaultInstance(); + onChanged(); + } else { + counterBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000004); + return this; + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public io.prometheus.client.Metrics.Counter.Builder getCounterBuilder() { + bitField0_ |= 0x00000004; + onChanged(); + return getCounterFieldBuilder().getBuilder(); + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + public io.prometheus.client.Metrics.CounterOrBuilder getCounterOrBuilder() { + if (counterBuilder_ != null) { + return counterBuilder_.getMessageOrBuilder(); + } else { + return counter_; + } + } + /** + * optional .io.prometheus.client.Counter counter = 3; + */ + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Counter, io.prometheus.client.Metrics.Counter.Builder, io.prometheus.client.Metrics.CounterOrBuilder> + getCounterFieldBuilder() { + if (counterBuilder_ == null) { + counterBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Counter, io.prometheus.client.Metrics.Counter.Builder, io.prometheus.client.Metrics.CounterOrBuilder>( + getCounter(), + getParentForChildren(), + isClean()); + counter_ = null; + } + return counterBuilder_; + } + + private io.prometheus.client.Metrics.Summary summary_ = io.prometheus.client.Metrics.Summary.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Summary, io.prometheus.client.Metrics.Summary.Builder, io.prometheus.client.Metrics.SummaryOrBuilder> summaryBuilder_; + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public boolean hasSummary() { + return ((bitField0_ & 0x00000008) == 0x00000008); + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public io.prometheus.client.Metrics.Summary getSummary() { + if (summaryBuilder_ == null) { + return summary_; + } else { + return summaryBuilder_.getMessage(); + } + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public Builder setSummary(io.prometheus.client.Metrics.Summary value) { + if (summaryBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + summary_ = value; + onChanged(); + } else { + summaryBuilder_.setMessage(value); + } + bitField0_ |= 0x00000008; + return this; + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public Builder setSummary( + io.prometheus.client.Metrics.Summary.Builder builderForValue) { + if (summaryBuilder_ == null) { + summary_ = builderForValue.build(); + onChanged(); + } else { + summaryBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000008; + return this; + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public Builder mergeSummary(io.prometheus.client.Metrics.Summary value) { + if (summaryBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008) && + summary_ != io.prometheus.client.Metrics.Summary.getDefaultInstance()) { + summary_ = + io.prometheus.client.Metrics.Summary.newBuilder(summary_).mergeFrom(value).buildPartial(); + } else { + summary_ = value; + } + onChanged(); + } else { + summaryBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000008; + return this; + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public Builder clearSummary() { + if (summaryBuilder_ == null) { + summary_ = io.prometheus.client.Metrics.Summary.getDefaultInstance(); + onChanged(); + } else { + summaryBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000008); + return this; + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public io.prometheus.client.Metrics.Summary.Builder getSummaryBuilder() { + bitField0_ |= 0x00000008; + onChanged(); + return getSummaryFieldBuilder().getBuilder(); + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + public io.prometheus.client.Metrics.SummaryOrBuilder getSummaryOrBuilder() { + if (summaryBuilder_ != null) { + return summaryBuilder_.getMessageOrBuilder(); + } else { + return summary_; + } + } + /** + * optional .io.prometheus.client.Summary summary = 4; + */ + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Summary, io.prometheus.client.Metrics.Summary.Builder, io.prometheus.client.Metrics.SummaryOrBuilder> + getSummaryFieldBuilder() { + if (summaryBuilder_ == null) { + summaryBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Summary, io.prometheus.client.Metrics.Summary.Builder, io.prometheus.client.Metrics.SummaryOrBuilder>( + getSummary(), + getParentForChildren(), + isClean()); + summary_ = null; + } + return summaryBuilder_; + } + + private io.prometheus.client.Metrics.Untyped untyped_ = io.prometheus.client.Metrics.Untyped.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Untyped, io.prometheus.client.Metrics.Untyped.Builder, io.prometheus.client.Metrics.UntypedOrBuilder> untypedBuilder_; + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public boolean hasUntyped() { + return ((bitField0_ & 0x00000010) == 0x00000010); + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public io.prometheus.client.Metrics.Untyped getUntyped() { + if (untypedBuilder_ == null) { + return untyped_; + } else { + return untypedBuilder_.getMessage(); + } + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public Builder setUntyped(io.prometheus.client.Metrics.Untyped value) { + if (untypedBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + untyped_ = value; + onChanged(); + } else { + untypedBuilder_.setMessage(value); + } + bitField0_ |= 0x00000010; + return this; + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public Builder setUntyped( + io.prometheus.client.Metrics.Untyped.Builder builderForValue) { + if (untypedBuilder_ == null) { + untyped_ = builderForValue.build(); + onChanged(); + } else { + untypedBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000010; + return this; + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public Builder mergeUntyped(io.prometheus.client.Metrics.Untyped value) { + if (untypedBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010) && + untyped_ != io.prometheus.client.Metrics.Untyped.getDefaultInstance()) { + untyped_ = + io.prometheus.client.Metrics.Untyped.newBuilder(untyped_).mergeFrom(value).buildPartial(); + } else { + untyped_ = value; + } + onChanged(); + } else { + untypedBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000010; + return this; + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public Builder clearUntyped() { + if (untypedBuilder_ == null) { + untyped_ = io.prometheus.client.Metrics.Untyped.getDefaultInstance(); + onChanged(); + } else { + untypedBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000010); + return this; + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public io.prometheus.client.Metrics.Untyped.Builder getUntypedBuilder() { + bitField0_ |= 0x00000010; + onChanged(); + return getUntypedFieldBuilder().getBuilder(); + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + public io.prometheus.client.Metrics.UntypedOrBuilder getUntypedOrBuilder() { + if (untypedBuilder_ != null) { + return untypedBuilder_.getMessageOrBuilder(); + } else { + return untyped_; + } + } + /** + * optional .io.prometheus.client.Untyped untyped = 5; + */ + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Untyped, io.prometheus.client.Metrics.Untyped.Builder, io.prometheus.client.Metrics.UntypedOrBuilder> + getUntypedFieldBuilder() { + if (untypedBuilder_ == null) { + untypedBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Untyped, io.prometheus.client.Metrics.Untyped.Builder, io.prometheus.client.Metrics.UntypedOrBuilder>( + getUntyped(), + getParentForChildren(), + isClean()); + untyped_ = null; + } + return untypedBuilder_; + } + + private io.prometheus.client.Metrics.Histogram histogram_ = io.prometheus.client.Metrics.Histogram.getDefaultInstance(); + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Histogram, io.prometheus.client.Metrics.Histogram.Builder, io.prometheus.client.Metrics.HistogramOrBuilder> histogramBuilder_; + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public boolean hasHistogram() { + return ((bitField0_ & 0x00000020) == 0x00000020); + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public io.prometheus.client.Metrics.Histogram getHistogram() { + if (histogramBuilder_ == null) { + return histogram_; + } else { + return histogramBuilder_.getMessage(); + } + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public Builder setHistogram(io.prometheus.client.Metrics.Histogram value) { + if (histogramBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + histogram_ = value; + onChanged(); + } else { + histogramBuilder_.setMessage(value); + } + bitField0_ |= 0x00000020; + return this; + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public Builder setHistogram( + io.prometheus.client.Metrics.Histogram.Builder builderForValue) { + if (histogramBuilder_ == null) { + histogram_ = builderForValue.build(); + onChanged(); + } else { + histogramBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000020; + return this; + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public Builder mergeHistogram(io.prometheus.client.Metrics.Histogram value) { + if (histogramBuilder_ == null) { + if (((bitField0_ & 0x00000020) == 0x00000020) && + histogram_ != io.prometheus.client.Metrics.Histogram.getDefaultInstance()) { + histogram_ = + io.prometheus.client.Metrics.Histogram.newBuilder(histogram_).mergeFrom(value).buildPartial(); + } else { + histogram_ = value; + } + onChanged(); + } else { + histogramBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000020; + return this; + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public Builder clearHistogram() { + if (histogramBuilder_ == null) { + histogram_ = io.prometheus.client.Metrics.Histogram.getDefaultInstance(); + onChanged(); + } else { + histogramBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000020); + return this; + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public io.prometheus.client.Metrics.Histogram.Builder getHistogramBuilder() { + bitField0_ |= 0x00000020; + onChanged(); + return getHistogramFieldBuilder().getBuilder(); + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + public io.prometheus.client.Metrics.HistogramOrBuilder getHistogramOrBuilder() { + if (histogramBuilder_ != null) { + return histogramBuilder_.getMessageOrBuilder(); + } else { + return histogram_; + } + } + /** + * optional .io.prometheus.client.Histogram histogram = 7; + */ + private com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Histogram, io.prometheus.client.Metrics.Histogram.Builder, io.prometheus.client.Metrics.HistogramOrBuilder> + getHistogramFieldBuilder() { + if (histogramBuilder_ == null) { + histogramBuilder_ = new com.google.protobuf.SingleFieldBuilder< + io.prometheus.client.Metrics.Histogram, io.prometheus.client.Metrics.Histogram.Builder, io.prometheus.client.Metrics.HistogramOrBuilder>( + getHistogram(), + getParentForChildren(), + isClean()); + histogram_ = null; + } + return histogramBuilder_; + } + + private long timestampMs_ ; + /** + * optional int64 timestamp_ms = 6; + */ + public boolean hasTimestampMs() { + return ((bitField0_ & 0x00000040) == 0x00000040); + } + /** + * optional int64 timestamp_ms = 6; + */ + public long getTimestampMs() { + return timestampMs_; + } + /** + * optional int64 timestamp_ms = 6; + */ + public Builder setTimestampMs(long value) { + bitField0_ |= 0x00000040; + timestampMs_ = value; + onChanged(); + return this; + } + /** + * optional int64 timestamp_ms = 6; + */ + public Builder clearTimestampMs() { + bitField0_ = (bitField0_ & ~0x00000040); + timestampMs_ = 0L; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.Metric) + } + + static { + defaultInstance = new Metric(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.Metric) + } + + public interface MetricFamilyOrBuilder extends + // @@protoc_insertion_point(interface_extends:io.prometheus.client.MetricFamily) + com.google.protobuf.MessageOrBuilder { + + /** + * optional string name = 1; + */ + boolean hasName(); + /** + * optional string name = 1; + */ + java.lang.String getName(); + /** + * optional string name = 1; + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + * optional string help = 2; + */ + boolean hasHelp(); + /** + * optional string help = 2; + */ + java.lang.String getHelp(); + /** + * optional string help = 2; + */ + com.google.protobuf.ByteString + getHelpBytes(); + + /** + * optional .io.prometheus.client.MetricType type = 3; + */ + boolean hasType(); + /** + * optional .io.prometheus.client.MetricType type = 3; + */ + io.prometheus.client.Metrics.MetricType getType(); + + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + java.util.List + getMetricList(); + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + io.prometheus.client.Metrics.Metric getMetric(int index); + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + int getMetricCount(); + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + java.util.List + getMetricOrBuilderList(); + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + io.prometheus.client.Metrics.MetricOrBuilder getMetricOrBuilder( + int index); + } + /** + * Protobuf type {@code io.prometheus.client.MetricFamily} + */ + public static final class MetricFamily extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:io.prometheus.client.MetricFamily) + MetricFamilyOrBuilder { + // Use MetricFamily.newBuilder() to construct. + private MetricFamily(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private MetricFamily(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final MetricFamily defaultInstance; + public static MetricFamily getDefaultInstance() { + return defaultInstance; + } + + public MetricFamily getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private MetricFamily( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + name_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + help_ = bs; + break; + } + case 24: { + int rawValue = input.readEnum(); + io.prometheus.client.Metrics.MetricType value = io.prometheus.client.Metrics.MetricType.valueOf(rawValue); + if (value == null) { + unknownFields.mergeVarintField(3, rawValue); + } else { + bitField0_ |= 0x00000004; + type_ = value; + } + break; + } + case 34: { + if (!((mutable_bitField0_ & 0x00000008) == 0x00000008)) { + metric_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000008; + } + metric_.add(input.readMessage(io.prometheus.client.Metrics.Metric.PARSER, extensionRegistry)); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000008) == 0x00000008)) { + metric_ = java.util.Collections.unmodifiableList(metric_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.MetricFamily.class, io.prometheus.client.Metrics.MetricFamily.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public MetricFamily parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new MetricFamily(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + private java.lang.Object name_; + /** + * optional string name = 1; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional string name = 1; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + /** + * optional string name = 1; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int HELP_FIELD_NUMBER = 2; + private java.lang.Object help_; + /** + * optional string help = 2; + */ + public boolean hasHelp() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional string help = 2; + */ + public java.lang.String getHelp() { + java.lang.Object ref = help_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + help_ = s; + } + return s; + } + } + /** + * optional string help = 2; + */ + public com.google.protobuf.ByteString + getHelpBytes() { + java.lang.Object ref = help_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + help_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TYPE_FIELD_NUMBER = 3; + private io.prometheus.client.Metrics.MetricType type_; + /** + * optional .io.prometheus.client.MetricType type = 3; + */ + public boolean hasType() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .io.prometheus.client.MetricType type = 3; + */ + public io.prometheus.client.Metrics.MetricType getType() { + return type_; + } + + public static final int METRIC_FIELD_NUMBER = 4; + private java.util.List metric_; + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public java.util.List getMetricList() { + return metric_; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public java.util.List + getMetricOrBuilderList() { + return metric_; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public int getMetricCount() { + return metric_.size(); + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public io.prometheus.client.Metrics.Metric getMetric(int index) { + return metric_.get(index); + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public io.prometheus.client.Metrics.MetricOrBuilder getMetricOrBuilder( + int index) { + return metric_.get(index); + } + + private void initFields() { + name_ = ""; + help_ = ""; + type_ = io.prometheus.client.Metrics.MetricType.COUNTER; + metric_ = java.util.Collections.emptyList(); + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeBytes(1, getNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getHelpBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + output.writeEnum(3, type_.getNumber()); + } + for (int i = 0; i < metric_.size(); i++) { + output.writeMessage(4, metric_.get(i)); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, getNameBytes()); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getHelpBytes()); + } + if (((bitField0_ & 0x00000004) == 0x00000004)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(3, type_.getNumber()); + } + for (int i = 0; i < metric_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(4, metric_.get(i)); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static io.prometheus.client.Metrics.MetricFamily parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.MetricFamily parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.MetricFamily parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static io.prometheus.client.Metrics.MetricFamily parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static io.prometheus.client.Metrics.MetricFamily parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.MetricFamily parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.MetricFamily parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static io.prometheus.client.Metrics.MetricFamily parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static io.prometheus.client.Metrics.MetricFamily parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static io.prometheus.client.Metrics.MetricFamily parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(io.prometheus.client.Metrics.MetricFamily prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code io.prometheus.client.MetricFamily} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:io.prometheus.client.MetricFamily) + io.prometheus.client.Metrics.MetricFamilyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable + .ensureFieldAccessorsInitialized( + io.prometheus.client.Metrics.MetricFamily.class, io.prometheus.client.Metrics.MetricFamily.Builder.class); + } + + // Construct using io.prometheus.client.Metrics.MetricFamily.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getMetricFieldBuilder(); + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + help_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + type_ = io.prometheus.client.Metrics.MetricType.COUNTER; + bitField0_ = (bitField0_ & ~0x00000004); + if (metricBuilder_ == null) { + metric_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + } else { + metricBuilder_.clear(); + } + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return io.prometheus.client.Metrics.internal_static_io_prometheus_client_MetricFamily_descriptor; + } + + public io.prometheus.client.Metrics.MetricFamily getDefaultInstanceForType() { + return io.prometheus.client.Metrics.MetricFamily.getDefaultInstance(); + } + + public io.prometheus.client.Metrics.MetricFamily build() { + io.prometheus.client.Metrics.MetricFamily result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public io.prometheus.client.Metrics.MetricFamily buildPartial() { + io.prometheus.client.Metrics.MetricFamily result = new io.prometheus.client.Metrics.MetricFamily(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.name_ = name_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.help_ = help_; + if (((from_bitField0_ & 0x00000004) == 0x00000004)) { + to_bitField0_ |= 0x00000004; + } + result.type_ = type_; + if (metricBuilder_ == null) { + if (((bitField0_ & 0x00000008) == 0x00000008)) { + metric_ = java.util.Collections.unmodifiableList(metric_); + bitField0_ = (bitField0_ & ~0x00000008); + } + result.metric_ = metric_; + } else { + result.metric_ = metricBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof io.prometheus.client.Metrics.MetricFamily) { + return mergeFrom((io.prometheus.client.Metrics.MetricFamily)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(io.prometheus.client.Metrics.MetricFamily other) { + if (other == io.prometheus.client.Metrics.MetricFamily.getDefaultInstance()) return this; + if (other.hasName()) { + bitField0_ |= 0x00000001; + name_ = other.name_; + onChanged(); + } + if (other.hasHelp()) { + bitField0_ |= 0x00000002; + help_ = other.help_; + onChanged(); + } + if (other.hasType()) { + setType(other.getType()); + } + if (metricBuilder_ == null) { + if (!other.metric_.isEmpty()) { + if (metric_.isEmpty()) { + metric_ = other.metric_; + bitField0_ = (bitField0_ & ~0x00000008); + } else { + ensureMetricIsMutable(); + metric_.addAll(other.metric_); + } + onChanged(); + } + } else { + if (!other.metric_.isEmpty()) { + if (metricBuilder_.isEmpty()) { + metricBuilder_.dispose(); + metricBuilder_ = null; + metric_ = other.metric_; + bitField0_ = (bitField0_ & ~0x00000008); + metricBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getMetricFieldBuilder() : null; + } else { + metricBuilder_.addAllMessages(other.metric_); + } + } + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + io.prometheus.client.Metrics.MetricFamily parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (io.prometheus.client.Metrics.MetricFamily) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object name_ = ""; + /** + * optional string name = 1; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * optional string name = 1; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string name = 1; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string name = 1; + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + /** + * optional string name = 1; + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000001); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + * optional string name = 1; + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + + private java.lang.Object help_ = ""; + /** + * optional string help = 2; + */ + public boolean hasHelp() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * optional string help = 2; + */ + public java.lang.String getHelp() { + java.lang.Object ref = help_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + help_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string help = 2; + */ + public com.google.protobuf.ByteString + getHelpBytes() { + java.lang.Object ref = help_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + help_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string help = 2; + */ + public Builder setHelp( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + help_ = value; + onChanged(); + return this; + } + /** + * optional string help = 2; + */ + public Builder clearHelp() { + bitField0_ = (bitField0_ & ~0x00000002); + help_ = getDefaultInstance().getHelp(); + onChanged(); + return this; + } + /** + * optional string help = 2; + */ + public Builder setHelpBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + help_ = value; + onChanged(); + return this; + } + + private io.prometheus.client.Metrics.MetricType type_ = io.prometheus.client.Metrics.MetricType.COUNTER; + /** + * optional .io.prometheus.client.MetricType type = 3; + */ + public boolean hasType() { + return ((bitField0_ & 0x00000004) == 0x00000004); + } + /** + * optional .io.prometheus.client.MetricType type = 3; + */ + public io.prometheus.client.Metrics.MetricType getType() { + return type_; + } + /** + * optional .io.prometheus.client.MetricType type = 3; + */ + public Builder setType(io.prometheus.client.Metrics.MetricType value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000004; + type_ = value; + onChanged(); + return this; + } + /** + * optional .io.prometheus.client.MetricType type = 3; + */ + public Builder clearType() { + bitField0_ = (bitField0_ & ~0x00000004); + type_ = io.prometheus.client.Metrics.MetricType.COUNTER; + onChanged(); + return this; + } + + private java.util.List metric_ = + java.util.Collections.emptyList(); + private void ensureMetricIsMutable() { + if (!((bitField0_ & 0x00000008) == 0x00000008)) { + metric_ = new java.util.ArrayList(metric_); + bitField0_ |= 0x00000008; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.Metric, io.prometheus.client.Metrics.Metric.Builder, io.prometheus.client.Metrics.MetricOrBuilder> metricBuilder_; + + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public java.util.List getMetricList() { + if (metricBuilder_ == null) { + return java.util.Collections.unmodifiableList(metric_); + } else { + return metricBuilder_.getMessageList(); + } + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public int getMetricCount() { + if (metricBuilder_ == null) { + return metric_.size(); + } else { + return metricBuilder_.getCount(); + } + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public io.prometheus.client.Metrics.Metric getMetric(int index) { + if (metricBuilder_ == null) { + return metric_.get(index); + } else { + return metricBuilder_.getMessage(index); + } + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public Builder setMetric( + int index, io.prometheus.client.Metrics.Metric value) { + if (metricBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMetricIsMutable(); + metric_.set(index, value); + onChanged(); + } else { + metricBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public Builder setMetric( + int index, io.prometheus.client.Metrics.Metric.Builder builderForValue) { + if (metricBuilder_ == null) { + ensureMetricIsMutable(); + metric_.set(index, builderForValue.build()); + onChanged(); + } else { + metricBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public Builder addMetric(io.prometheus.client.Metrics.Metric value) { + if (metricBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMetricIsMutable(); + metric_.add(value); + onChanged(); + } else { + metricBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public Builder addMetric( + int index, io.prometheus.client.Metrics.Metric value) { + if (metricBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureMetricIsMutable(); + metric_.add(index, value); + onChanged(); + } else { + metricBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public Builder addMetric( + io.prometheus.client.Metrics.Metric.Builder builderForValue) { + if (metricBuilder_ == null) { + ensureMetricIsMutable(); + metric_.add(builderForValue.build()); + onChanged(); + } else { + metricBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public Builder addMetric( + int index, io.prometheus.client.Metrics.Metric.Builder builderForValue) { + if (metricBuilder_ == null) { + ensureMetricIsMutable(); + metric_.add(index, builderForValue.build()); + onChanged(); + } else { + metricBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public Builder addAllMetric( + java.lang.Iterable values) { + if (metricBuilder_ == null) { + ensureMetricIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, metric_); + onChanged(); + } else { + metricBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public Builder clearMetric() { + if (metricBuilder_ == null) { + metric_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000008); + onChanged(); + } else { + metricBuilder_.clear(); + } + return this; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public Builder removeMetric(int index) { + if (metricBuilder_ == null) { + ensureMetricIsMutable(); + metric_.remove(index); + onChanged(); + } else { + metricBuilder_.remove(index); + } + return this; + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public io.prometheus.client.Metrics.Metric.Builder getMetricBuilder( + int index) { + return getMetricFieldBuilder().getBuilder(index); + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public io.prometheus.client.Metrics.MetricOrBuilder getMetricOrBuilder( + int index) { + if (metricBuilder_ == null) { + return metric_.get(index); } else { + return metricBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public java.util.List + getMetricOrBuilderList() { + if (metricBuilder_ != null) { + return metricBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(metric_); + } + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public io.prometheus.client.Metrics.Metric.Builder addMetricBuilder() { + return getMetricFieldBuilder().addBuilder( + io.prometheus.client.Metrics.Metric.getDefaultInstance()); + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public io.prometheus.client.Metrics.Metric.Builder addMetricBuilder( + int index) { + return getMetricFieldBuilder().addBuilder( + index, io.prometheus.client.Metrics.Metric.getDefaultInstance()); + } + /** + * repeated .io.prometheus.client.Metric metric = 4; + */ + public java.util.List + getMetricBuilderList() { + return getMetricFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.Metric, io.prometheus.client.Metrics.Metric.Builder, io.prometheus.client.Metrics.MetricOrBuilder> + getMetricFieldBuilder() { + if (metricBuilder_ == null) { + metricBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + io.prometheus.client.Metrics.Metric, io.prometheus.client.Metrics.Metric.Builder, io.prometheus.client.Metrics.MetricOrBuilder>( + metric_, + ((bitField0_ & 0x00000008) == 0x00000008), + getParentForChildren(), + isClean()); + metric_ = null; + } + return metricBuilder_; + } + + // @@protoc_insertion_point(builder_scope:io.prometheus.client.MetricFamily) + } + + static { + defaultInstance = new MetricFamily(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:io.prometheus.client.MetricFamily) + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_LabelPair_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_LabelPair_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_Gauge_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_Gauge_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_Counter_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_Counter_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_Quantile_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_Quantile_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_Summary_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_Summary_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_Untyped_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_Untyped_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_Histogram_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_Histogram_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_Bucket_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_Bucket_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_Metric_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_Metric_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_io_prometheus_client_MetricFamily_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\rmetrics.proto\022\024io.prometheus.client\"(\n" + + "\tLabelPair\022\014\n\004name\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"" + + "\026\n\005Gauge\022\r\n\005value\030\001 \001(\001\"\030\n\007Counter\022\r\n\005va" + + "lue\030\001 \001(\001\"+\n\010Quantile\022\020\n\010quantile\030\001 \001(\001\022" + + "\r\n\005value\030\002 \001(\001\"e\n\007Summary\022\024\n\014sample_coun" + + "t\030\001 \001(\004\022\022\n\nsample_sum\030\002 \001(\001\0220\n\010quantile\030" + + "\003 \003(\0132\036.io.prometheus.client.Quantile\"\030\n" + + "\007Untyped\022\r\n\005value\030\001 \001(\001\"c\n\tHistogram\022\024\n\014" + + "sample_count\030\001 \001(\004\022\022\n\nsample_sum\030\002 \001(\001\022," + + "\n\006bucket\030\003 \003(\0132\034.io.prometheus.client.Bu", + "cket\"7\n\006Bucket\022\030\n\020cumulative_count\030\001 \001(\004" + + "\022\023\n\013upper_bound\030\002 \001(\001\"\276\002\n\006Metric\022.\n\005labe" + + "l\030\001 \003(\0132\037.io.prometheus.client.LabelPair" + + "\022*\n\005gauge\030\002 \001(\0132\033.io.prometheus.client.G" + + "auge\022.\n\007counter\030\003 \001(\0132\035.io.prometheus.cl" + + "ient.Counter\022.\n\007summary\030\004 \001(\0132\035.io.prome" + + "theus.client.Summary\022.\n\007untyped\030\005 \001(\0132\035." + + "io.prometheus.client.Untyped\0222\n\thistogra" + + "m\030\007 \001(\0132\037.io.prometheus.client.Histogram" + + "\022\024\n\014timestamp_ms\030\006 \001(\003\"\210\001\n\014MetricFamily\022", + "\014\n\004name\030\001 \001(\t\022\014\n\004help\030\002 \001(\t\022.\n\004type\030\003 \001(" + + "\0162 .io.prometheus.client.MetricType\022,\n\006m" + + "etric\030\004 \003(\0132\034.io.prometheus.client.Metri" + + "c*M\n\nMetricType\022\013\n\007COUNTER\020\000\022\t\n\005GAUGE\020\001\022" + + "\013\n\007SUMMARY\020\002\022\013\n\007UNTYPED\020\003\022\r\n\tHISTOGRAM\020\004" + + "B\026\n\024io.prometheus.client" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + internal_static_io_prometheus_client_LabelPair_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_io_prometheus_client_LabelPair_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_LabelPair_descriptor, + new java.lang.String[] { "Name", "Value", }); + internal_static_io_prometheus_client_Gauge_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_io_prometheus_client_Gauge_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_Gauge_descriptor, + new java.lang.String[] { "Value", }); + internal_static_io_prometheus_client_Counter_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_io_prometheus_client_Counter_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_Counter_descriptor, + new java.lang.String[] { "Value", }); + internal_static_io_prometheus_client_Quantile_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_io_prometheus_client_Quantile_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_Quantile_descriptor, + new java.lang.String[] { "Quantile", "Value", }); + internal_static_io_prometheus_client_Summary_descriptor = + getDescriptor().getMessageTypes().get(4); + internal_static_io_prometheus_client_Summary_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_Summary_descriptor, + new java.lang.String[] { "SampleCount", "SampleSum", "Quantile", }); + internal_static_io_prometheus_client_Untyped_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_io_prometheus_client_Untyped_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_Untyped_descriptor, + new java.lang.String[] { "Value", }); + internal_static_io_prometheus_client_Histogram_descriptor = + getDescriptor().getMessageTypes().get(6); + internal_static_io_prometheus_client_Histogram_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_Histogram_descriptor, + new java.lang.String[] { "SampleCount", "SampleSum", "Bucket", }); + internal_static_io_prometheus_client_Bucket_descriptor = + getDescriptor().getMessageTypes().get(7); + internal_static_io_prometheus_client_Bucket_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_Bucket_descriptor, + new java.lang.String[] { "CumulativeCount", "UpperBound", }); + internal_static_io_prometheus_client_Metric_descriptor = + getDescriptor().getMessageTypes().get(8); + internal_static_io_prometheus_client_Metric_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_Metric_descriptor, + new java.lang.String[] { "Label", "Gauge", "Counter", "Summary", "Untyped", "Histogram", "TimestampMs", }); + internal_static_io_prometheus_client_MetricFamily_descriptor = + getDescriptor().getMessageTypes().get(9); + internal_static_io_prometheus_client_MetricFamily_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_io_prometheus_client_MetricFamily_descriptor, + new java.lang.String[] { "Name", "Help", "Type", "Metric", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/vendor/github.com/prometheus/common/.travis.yml b/vendor/github.com/prometheus/common/.travis.yml new file mode 100644 index 0000000..2fe8e9a --- /dev/null +++ b/vendor/github.com/prometheus/common/.travis.yml @@ -0,0 +1,6 @@ +sudo: false + +language: go +go: + - 1.7.5 + - tip diff --git a/vendor/github.com/prometheus/common/CONTRIBUTING.md b/vendor/github.com/prometheus/common/CONTRIBUTING.md new file mode 100644 index 0000000..40503ed --- /dev/null +++ b/vendor/github.com/prometheus/common/CONTRIBUTING.md @@ -0,0 +1,18 @@ +# Contributing + +Prometheus uses GitHub to manage reviews of pull requests. + +* If you have a trivial fix or improvement, go ahead and create a pull request, + addressing (with `@...`) the maintainer of this repository (see + [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request. + +* If you plan to do something more involved, first discuss your ideas + on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers). + This will avoid unnecessary work and surely give you and us a good deal + of inspiration. + +* Relevant coding style guidelines are the [Go Code Review + Comments](https://code.google.com/p/go-wiki/wiki/CodeReviewComments) + and the _Formatting and style_ section of Peter Bourgon's [Go: Best + Practices for Production + Environments](http://peter.bourgon.org/go-in-production/#formatting-and-style). diff --git a/vendor/github.com/prometheus/common/LICENSE b/vendor/github.com/prometheus/common/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/vendor/github.com/prometheus/common/LICENSE @@ -0,0 +1,201 @@ + 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 + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + 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/prometheus/common/MAINTAINERS.md b/vendor/github.com/prometheus/common/MAINTAINERS.md new file mode 100644 index 0000000..1b31521 --- /dev/null +++ b/vendor/github.com/prometheus/common/MAINTAINERS.md @@ -0,0 +1 @@ +* Fabian Reinartz diff --git a/vendor/github.com/prometheus/common/NOTICE b/vendor/github.com/prometheus/common/NOTICE new file mode 100644 index 0000000..636a2c1 --- /dev/null +++ b/vendor/github.com/prometheus/common/NOTICE @@ -0,0 +1,5 @@ +Common libraries shared by Prometheus Go components. +Copyright 2015 The Prometheus Authors + +This product includes software developed at +SoundCloud Ltd. (http://soundcloud.com/). diff --git a/vendor/github.com/prometheus/common/README.md b/vendor/github.com/prometheus/common/README.md new file mode 100644 index 0000000..11a5849 --- /dev/null +++ b/vendor/github.com/prometheus/common/README.md @@ -0,0 +1,12 @@ +# Common +[![Build Status](https://travis-ci.org/prometheus/common.svg)](https://travis-ci.org/prometheus/common) + +This repository contains Go libraries that are shared across Prometheus +components and libraries. + +* **config**: Common configuration structures +* **expfmt**: Decoding and encoding for the exposition format +* **log**: A logging wrapper around [logrus](https://github.com/sirupsen/logrus) +* **model**: Shared data structures +* **route**: A routing wrapper around [httprouter](https://github.com/julienschmidt/httprouter) using `context.Context` +* **version**: Version informations and metric diff --git a/vendor/github.com/prometheus/common/config/config.go b/vendor/github.com/prometheus/common/config/config.go new file mode 100644 index 0000000..9195c34 --- /dev/null +++ b/vendor/github.com/prometheus/common/config/config.go @@ -0,0 +1,47 @@ +// Copyright 2016 The Prometheus 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 config + +import ( + "fmt" + "strings" +) + +func checkOverflow(m map[string]interface{}, ctx string) error { + if len(m) > 0 { + var keys []string + for k := range m { + keys = append(keys, k) + } + return fmt.Errorf("unknown fields in %s: %s", ctx, strings.Join(keys, ", ")) + } + return nil +} + +// Secret special type for storing secrets. +type Secret string + +// MarshalYAML implements the yaml.Marshaler interface for Secrets. +func (s Secret) MarshalYAML() (interface{}, error) { + if s != "" { + return "", nil + } + return nil, nil +} + +//UnmarshalYAML implements the yaml.Unmarshaler interface for Secrets. +func (s *Secret) UnmarshalYAML(unmarshal func(interface{}) error) error { + type plain Secret + return unmarshal((*plain)(s)) +} diff --git a/vendor/github.com/prometheus/common/config/http_config.go b/vendor/github.com/prometheus/common/config/http_config.go new file mode 100644 index 0000000..ff5837f --- /dev/null +++ b/vendor/github.com/prometheus/common/config/http_config.go @@ -0,0 +1,279 @@ +// Copyright 2016 The Prometheus 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 config + +import ( + "crypto/tls" + "crypto/x509" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "strings" + + yaml "gopkg.in/yaml.v2" +) + +// BasicAuth contains basic HTTP authentication credentials. +type BasicAuth struct { + Username string `yaml:"username"` + Password Secret `yaml:"password"` + + // Catches all undefined fields and must be empty after parsing. + XXX map[string]interface{} `yaml:",inline"` +} + +// URL is a custom URL type that allows validation at configuration load time. +type URL struct { + *url.URL +} + +// UnmarshalYAML implements the yaml.Unmarshaler interface for URLs. +func (u *URL) UnmarshalYAML(unmarshal func(interface{}) error) error { + var s string + if err := unmarshal(&s); err != nil { + return err + } + + urlp, err := url.Parse(s) + if err != nil { + return err + } + u.URL = urlp + return nil +} + +// MarshalYAML implements the yaml.Marshaler interface for URLs. +func (u URL) MarshalYAML() (interface{}, error) { + if u.URL != nil { + return u.String(), nil + } + return nil, nil +} + +// HTTPClientConfig configures an HTTP client. +type HTTPClientConfig struct { + // The HTTP basic authentication credentials for the targets. + BasicAuth *BasicAuth `yaml:"basic_auth,omitempty"` + // The bearer token for the targets. + BearerToken Secret `yaml:"bearer_token,omitempty"` + // The bearer token file for the targets. + BearerTokenFile string `yaml:"bearer_token_file,omitempty"` + // HTTP proxy server to use to connect to the targets. + ProxyURL URL `yaml:"proxy_url,omitempty"` + // TLSConfig to use to connect to the targets. + TLSConfig TLSConfig `yaml:"tls_config,omitempty"` + + // Catches all undefined fields and must be empty after parsing. + XXX map[string]interface{} `yaml:",inline"` +} + +func (c *HTTPClientConfig) validate() error { + if len(c.BearerToken) > 0 && len(c.BearerTokenFile) > 0 { + return fmt.Errorf("at most one of bearer_token & bearer_token_file must be configured") + } + if c.BasicAuth != nil && (len(c.BearerToken) > 0 || len(c.BearerTokenFile) > 0) { + return fmt.Errorf("at most one of basic_auth, bearer_token & bearer_token_file must be configured") + } + return nil +} + +// UnmarshalYAML implements the yaml.Unmarshaler interface +func (c *HTTPClientConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { + type plain HTTPClientConfig + err := unmarshal((*plain)(c)) + if err != nil { + return err + } + err = c.validate() + if err != nil { + return c.validate() + } + return checkOverflow(c.XXX, "http_client_config") +} + +// UnmarshalYAML implements the yaml.Unmarshaler interface. +func (a *BasicAuth) UnmarshalYAML(unmarshal func(interface{}) error) error { + type plain BasicAuth + err := unmarshal((*plain)(a)) + if err != nil { + return err + } + return checkOverflow(a.XXX, "basic_auth") +} + +// NewHTTPClientFromConfig returns a new HTTP client configured for the +// given config.HTTPClientConfig. +func NewHTTPClientFromConfig(cfg *HTTPClientConfig) (*http.Client, error) { + tlsConfig, err := NewTLSConfig(&cfg.TLSConfig) + if err != nil { + return nil, err + } + + // It's the caller's job to handle timeouts + var rt http.RoundTripper = &http.Transport{ + Proxy: http.ProxyURL(cfg.ProxyURL.URL), + DisableKeepAlives: true, + TLSClientConfig: tlsConfig, + } + + // If a bearer token is provided, create a round tripper that will set the + // Authorization header correctly on each request. + bearerToken := cfg.BearerToken + if len(bearerToken) == 0 && len(cfg.BearerTokenFile) > 0 { + b, err := ioutil.ReadFile(cfg.BearerTokenFile) + if err != nil { + return nil, fmt.Errorf("unable to read bearer token file %s: %s", cfg.BearerTokenFile, err) + } + bearerToken = Secret(strings.TrimSpace(string(b))) + } + + if len(bearerToken) > 0 { + rt = NewBearerAuthRoundTripper(bearerToken, rt) + } + + if cfg.BasicAuth != nil { + rt = NewBasicAuthRoundTripper(cfg.BasicAuth.Username, Secret(cfg.BasicAuth.Password), rt) + } + + // Return a new client with the configured round tripper. + return &http.Client{Transport: rt}, nil +} + +type bearerAuthRoundTripper struct { + bearerToken Secret + rt http.RoundTripper +} + +type basicAuthRoundTripper struct { + username string + password Secret + rt http.RoundTripper +} + +// NewBasicAuthRoundTripper will apply a BASIC auth authorization header to a request unless it has +// already been set. +func NewBasicAuthRoundTripper(username string, password Secret, rt http.RoundTripper) http.RoundTripper { + return &basicAuthRoundTripper{username, password, rt} +} + +func (rt *bearerAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + if len(req.Header.Get("Authorization")) == 0 { + req = cloneRequest(req) + req.Header.Set("Authorization", "Bearer "+string(rt.bearerToken)) + } + + return rt.rt.RoundTrip(req) +} + +// NewBearerAuthRoundTripper adds the provided bearer token to a request unless the authorization +// header has already been set. +func NewBearerAuthRoundTripper(bearer Secret, rt http.RoundTripper) http.RoundTripper { + return &bearerAuthRoundTripper{bearer, rt} +} + +func (rt *basicAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { + if len(req.Header.Get("Authorization")) != 0 { + return rt.RoundTrip(req) + } + req = cloneRequest(req) + req.SetBasicAuth(rt.username, string(rt.password)) + return rt.rt.RoundTrip(req) +} + +// cloneRequest returns a clone of the provided *http.Request. +// The clone is a shallow copy of the struct and its Header map. +func cloneRequest(r *http.Request) *http.Request { + // Shallow copy of the struct. + r2 := new(http.Request) + *r2 = *r + // Deep copy of the Header. + r2.Header = make(http.Header) + for k, s := range r.Header { + r2.Header[k] = s + } + return r2 +} + +// NewTLSConfig creates a new tls.Config from the given config.TLSConfig. +func NewTLSConfig(cfg *TLSConfig) (*tls.Config, error) { + tlsConfig := &tls.Config{InsecureSkipVerify: cfg.InsecureSkipVerify} + + // If a CA cert is provided then let's read it in so we can validate the + // scrape target's certificate properly. + if len(cfg.CAFile) > 0 { + caCertPool := x509.NewCertPool() + // Load CA cert. + caCert, err := ioutil.ReadFile(cfg.CAFile) + if err != nil { + return nil, fmt.Errorf("unable to use specified CA cert %s: %s", cfg.CAFile, err) + } + caCertPool.AppendCertsFromPEM(caCert) + tlsConfig.RootCAs = caCertPool + } + + if len(cfg.ServerName) > 0 { + tlsConfig.ServerName = cfg.ServerName + } + + // If a client cert & key is provided then configure TLS config accordingly. + if len(cfg.CertFile) > 0 && len(cfg.KeyFile) == 0 { + return nil, fmt.Errorf("client cert file %q specified without client key file", cfg.CertFile) + } else if len(cfg.KeyFile) > 0 && len(cfg.CertFile) == 0 { + return nil, fmt.Errorf("client key file %q specified without client cert file", cfg.KeyFile) + } else if len(cfg.CertFile) > 0 && len(cfg.KeyFile) > 0 { + cert, err := tls.LoadX509KeyPair(cfg.CertFile, cfg.KeyFile) + if err != nil { + return nil, fmt.Errorf("unable to use specified client cert (%s) & key (%s): %s", cfg.CertFile, cfg.KeyFile, err) + } + tlsConfig.Certificates = []tls.Certificate{cert} + } + tlsConfig.BuildNameToCertificate() + + return tlsConfig, nil +} + +// TLSConfig configures the options for TLS connections. +type TLSConfig struct { + // The CA cert to use for the targets. + CAFile string `yaml:"ca_file,omitempty"` + // The client cert file for the targets. + CertFile string `yaml:"cert_file,omitempty"` + // The client key file for the targets. + KeyFile string `yaml:"key_file,omitempty"` + // Used to verify the hostname for the targets. + ServerName string `yaml:"server_name,omitempty"` + // Disable target certificate validation. + InsecureSkipVerify bool `yaml:"insecure_skip_verify"` + + // Catches all undefined fields and must be empty after parsing. + XXX map[string]interface{} `yaml:",inline"` +} + +// UnmarshalYAML implements the yaml.Unmarshaler interface. +func (c *TLSConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { + type plain TLSConfig + if err := unmarshal((*plain)(c)); err != nil { + return err + } + return checkOverflow(c.XXX, "TLS config") +} + +func (c HTTPClientConfig) String() string { + b, err := yaml.Marshal(c) + if err != nil { + return fmt.Sprintf("", err) + } + return string(b) +} diff --git a/vendor/github.com/prometheus/common/config/http_config_test.go b/vendor/github.com/prometheus/common/config/http_config_test.go new file mode 100644 index 0000000..1e2490b --- /dev/null +++ b/vendor/github.com/prometheus/common/config/http_config_test.go @@ -0,0 +1,157 @@ +// Copyright 2015 The Prometheus 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 config + +import ( + "io/ioutil" + "net/http" + "net/url" + "strings" + "testing" + + yaml "gopkg.in/yaml.v2" +) + +var invalidHTTPClientConfigs = []struct { + httpClientConfigFile string + errMsg string +}{ + { + httpClientConfigFile: "testdata/http.conf.bearer-token-and-file-set.bad.yml", + errMsg: "at most one of bearer_token & bearer_token_file must be configured", + }, + { + httpClientConfigFile: "testdata/http.conf.empty.bad.yml", + errMsg: "at most one of basic_auth, bearer_token & bearer_token_file must be configured", + }, +} + +func TestAuthRoundTrippers(t *testing.T) { + + cfg, _, err := LoadHTTPConfigFile("testdata/http.conf.good.yml") + if err != nil { + t.Errorf("Error loading HTTP client config: %v", err) + } + + tlsConfig, err := NewTLSConfig(&cfg.TLSConfig) + if err != nil { + t.Errorf("Error creating new TLS config: %v", err) + } + + rt := &http.Transport{ + Proxy: http.ProxyURL(cfg.ProxyURL.URL), + DisableKeepAlives: true, + TLSClientConfig: tlsConfig, + } + req := new(http.Request) + + bearerAuthRoundTripper := NewBearerAuthRoundTripper("mysecret", rt) + bearerAuthRoundTripper.RoundTrip(req) + + basicAuthRoundTripper := NewBasicAuthRoundTripper("username", "password", rt) + basicAuthRoundTripper.RoundTrip(req) +} + +func TestHideHTTPClientConfigSecrets(t *testing.T) { + c, _, err := LoadHTTPConfigFile("testdata/http.conf.good.yml") + if err != nil { + t.Errorf("Error parsing %s: %s", "testdata/http.conf.good.yml", err) + } + + // String method must not reveal authentication credentials. + s := c.String() + if strings.Contains(s, "mysecret") { + t.Fatal("http client config's String method reveals authentication credentials.") + } +} + +func mustParseURL(u string) *URL { + parsed, err := url.Parse(u) + if err != nil { + panic(err) + } + return &URL{URL: parsed} +} + +func TestNewClientFromConfig(t *testing.T) { + cfg, _, err := LoadHTTPConfigFile("testdata/http.conf.good.yml") + if err != nil { + t.Errorf("Error loading HTTP client config: %v", err) + } + _, err = NewHTTPClientFromConfig(cfg) + if err != nil { + t.Errorf("Error creating new client from config: %v", err) + } +} + +func TestNewClientFromInvalidConfig(t *testing.T) { + cfg, _, err := LoadHTTPConfigFile("testdata/http.conf.invalid-bearer-token-file.bad.yml") + if err != nil { + t.Errorf("Error loading HTTP client config: %v", err) + } + _, err = NewHTTPClientFromConfig(cfg) + if err == nil { + t.Error("Expected error creating new client from invalid config but got none") + } + if !strings.Contains(err.Error(), "unable to read bearer token file file: open file: no such file or directory") { + t.Errorf("Expected error with config but got: %s", err.Error()) + } +} + +func TestValidateHTTPConfig(t *testing.T) { + cfg, _, err := LoadHTTPConfigFile("testdata/http.conf.good.yml") + if err != nil { + t.Errorf("Error loading HTTP client config: %v", err) + } + err = cfg.validate() + if err != nil { + t.Fatalf("Error validating %s: %s", "testdata/http.conf.good.yml", err) + } +} + +func TestInvalidHTTPConfigs(t *testing.T) { + for _, ee := range invalidHTTPClientConfigs { + _, _, err := LoadHTTPConfigFile(ee.httpClientConfigFile) + if err == nil { + t.Error("Expected error with config but got none") + continue + } + if !strings.Contains(err.Error(), ee.errMsg) { + t.Errorf("Expected error for invalid HTTP client configuration to contain %q but got: %s", ee.errMsg, err) + } + } +} + +// LoadHTTPConfig parses the YAML input s into a HTTPClientConfig. +func LoadHTTPConfig(s string) (*HTTPClientConfig, error) { + cfg := &HTTPClientConfig{} + err := yaml.Unmarshal([]byte(s), cfg) + if err != nil { + return nil, err + } + return cfg, nil +} + +// LoadHTTPConfigFile parses the given YAML file into a HTTPClientConfig. +func LoadHTTPConfigFile(filename string) (*HTTPClientConfig, []byte, error) { + content, err := ioutil.ReadFile(filename) + if err != nil { + return nil, nil, err + } + cfg, err := LoadHTTPConfig(string(content)) + if err != nil { + return nil, nil, err + } + return cfg, content, nil +} diff --git a/vendor/github.com/prometheus/common/config/testdata/http.conf.bearer-token-and-file-set.bad.yml b/vendor/github.com/prometheus/common/config/testdata/http.conf.bearer-token-and-file-set.bad.yml new file mode 100644 index 0000000..c613bac --- /dev/null +++ b/vendor/github.com/prometheus/common/config/testdata/http.conf.bearer-token-and-file-set.bad.yml @@ -0,0 +1,5 @@ +basic_auth: + username: username + password: "mysecret" +bearer_token: mysecret +bearer_token_file: file diff --git a/vendor/github.com/prometheus/common/config/testdata/http.conf.empty.bad.yml b/vendor/github.com/prometheus/common/config/testdata/http.conf.empty.bad.yml new file mode 100644 index 0000000..ea2811f --- /dev/null +++ b/vendor/github.com/prometheus/common/config/testdata/http.conf.empty.bad.yml @@ -0,0 +1,4 @@ +basic_auth: + username: username + password: mysecret +bearer_token_file: file diff --git a/vendor/github.com/prometheus/common/config/testdata/http.conf.good.yml b/vendor/github.com/prometheus/common/config/testdata/http.conf.good.yml new file mode 100644 index 0000000..46ca639 --- /dev/null +++ b/vendor/github.com/prometheus/common/config/testdata/http.conf.good.yml @@ -0,0 +1,4 @@ +basic_auth: + username: username + password: "mysecret" +proxy_url: "http://remote.host" diff --git a/vendor/github.com/prometheus/common/config/testdata/http.conf.invalid-bearer-token-file.bad.yml b/vendor/github.com/prometheus/common/config/testdata/http.conf.invalid-bearer-token-file.bad.yml new file mode 100644 index 0000000..4b1349b --- /dev/null +++ b/vendor/github.com/prometheus/common/config/testdata/http.conf.invalid-bearer-token-file.bad.yml @@ -0,0 +1 @@ +bearer_token_file: file diff --git a/vendor/github.com/prometheus/common/config/testdata/tls_config.cert_no_key.bad.yml b/vendor/github.com/prometheus/common/config/testdata/tls_config.cert_no_key.bad.yml new file mode 100644 index 0000000..7dfdc1e --- /dev/null +++ b/vendor/github.com/prometheus/common/config/testdata/tls_config.cert_no_key.bad.yml @@ -0,0 +1 @@ +cert_file: somefile diff --git a/vendor/github.com/prometheus/common/config/testdata/tls_config.empty.good.yml b/vendor/github.com/prometheus/common/config/testdata/tls_config.empty.good.yml new file mode 100644 index 0000000..e69de29 diff --git a/vendor/github.com/prometheus/common/config/testdata/tls_config.insecure.good.yml b/vendor/github.com/prometheus/common/config/testdata/tls_config.insecure.good.yml new file mode 100644 index 0000000..d054383 --- /dev/null +++ b/vendor/github.com/prometheus/common/config/testdata/tls_config.insecure.good.yml @@ -0,0 +1 @@ +insecure_skip_verify: true diff --git a/vendor/github.com/prometheus/common/config/testdata/tls_config.invalid_field.bad.yml b/vendor/github.com/prometheus/common/config/testdata/tls_config.invalid_field.bad.yml new file mode 100644 index 0000000..12cbaac --- /dev/null +++ b/vendor/github.com/prometheus/common/config/testdata/tls_config.invalid_field.bad.yml @@ -0,0 +1 @@ +something_invalid: true diff --git a/vendor/github.com/prometheus/common/config/testdata/tls_config.key_no_cert.bad.yml b/vendor/github.com/prometheus/common/config/testdata/tls_config.key_no_cert.bad.yml new file mode 100644 index 0000000..cec045e --- /dev/null +++ b/vendor/github.com/prometheus/common/config/testdata/tls_config.key_no_cert.bad.yml @@ -0,0 +1 @@ +key_file: somefile diff --git a/vendor/github.com/prometheus/common/config/tls_config_test.go b/vendor/github.com/prometheus/common/config/tls_config_test.go new file mode 100644 index 0000000..e2bd68e --- /dev/null +++ b/vendor/github.com/prometheus/common/config/tls_config_test.go @@ -0,0 +1,92 @@ +// Copyright 2016 The Prometheus 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 config + +import ( + "crypto/tls" + "io/ioutil" + "reflect" + "strings" + "testing" + + "gopkg.in/yaml.v2" +) + +// LoadTLSConfig parses the given YAML file into a tls.Config. +func LoadTLSConfig(filename string) (*tls.Config, error) { + content, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + cfg := &TLSConfig{} + if err = yaml.Unmarshal(content, cfg); err != nil { + return nil, err + } + return NewTLSConfig(cfg) +} + +var expectedTLSConfigs = []struct { + filename string + config *tls.Config +}{ + { + filename: "tls_config.empty.good.yml", + config: &tls.Config{}, + }, { + filename: "tls_config.insecure.good.yml", + config: &tls.Config{InsecureSkipVerify: true}, + }, +} + +func TestValidTLSConfig(t *testing.T) { + for _, cfg := range expectedTLSConfigs { + cfg.config.BuildNameToCertificate() + got, err := LoadTLSConfig("testdata/" + cfg.filename) + if err != nil { + t.Errorf("Error parsing %s: %s", cfg.filename, err) + } + if !reflect.DeepEqual(*got, *cfg.config) { + t.Fatalf("%v: unexpected config result: \n\n%v\n expected\n\n%v", cfg.filename, got, cfg.config) + } + } +} + +var expectedTLSConfigErrors = []struct { + filename string + errMsg string +}{ + { + filename: "tls_config.invalid_field.bad.yml", + errMsg: "unknown fields in", + }, { + filename: "tls_config.cert_no_key.bad.yml", + errMsg: "specified without client key file", + }, { + filename: "tls_config.key_no_cert.bad.yml", + errMsg: "specified without client cert file", + }, +} + +func TestBadTLSConfigs(t *testing.T) { + for _, ee := range expectedTLSConfigErrors { + _, err := LoadTLSConfig("testdata/" + ee.filename) + if err == nil { + t.Errorf("Expected error parsing %s but got none", ee.filename) + continue + } + if !strings.Contains(err.Error(), ee.errMsg) { + t.Errorf("Expected error for %s to contain %q but got: %s", ee.filename, ee.errMsg, err) + } + } +} diff --git a/vendor/github.com/prometheus/client_golang/text/bench_test.go b/vendor/github.com/prometheus/common/expfmt/bench_test.go similarity index 95% rename from vendor/github.com/prometheus/client_golang/text/bench_test.go rename to vendor/github.com/prometheus/common/expfmt/bench_test.go index c315eec..e539bfc 100644 --- a/vendor/github.com/prometheus/client_golang/text/bench_test.go +++ b/vendor/github.com/prometheus/common/expfmt/bench_test.go @@ -11,7 +11,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package text +package expfmt import ( "bytes" @@ -25,6 +25,8 @@ import ( dto "github.com/prometheus/client_model/go" ) +var parser TextParser + // Benchmarks to show how much penalty text format parsing actually inflicts. // // Example results on Linux 3.13.0, Intel(R) Core(TM) i7-4700MQ CPU @ 2.40GHz, go1.4. @@ -40,10 +42,6 @@ import ( // the difference becomes less relevant, only ~4x. // // The test data contains 248 samples. -// -// BenchmarkProcessor002ParseOnly in the extraction package is not quite -// comparable to the benchmarks here, but it gives an idea: JSON parsing is even -// slower than text parsing and needs a comparable amount of allocs. // BenchmarkParseText benchmarks the parsing of a text-format scrape into metric // family DTOs. diff --git a/vendor/github.com/prometheus/common/expfmt/decode.go b/vendor/github.com/prometheus/common/expfmt/decode.go new file mode 100644 index 0000000..a7a42d5 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/decode.go @@ -0,0 +1,429 @@ +// Copyright 2015 The Prometheus 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 expfmt + +import ( + "fmt" + "io" + "math" + "mime" + "net/http" + + dto "github.com/prometheus/client_model/go" + + "github.com/matttproud/golang_protobuf_extensions/pbutil" + "github.com/prometheus/common/model" +) + +// Decoder types decode an input stream into metric families. +type Decoder interface { + Decode(*dto.MetricFamily) error +} + +// DecodeOptions contains options used by the Decoder and in sample extraction. +type DecodeOptions struct { + // Timestamp is added to each value from the stream that has no explicit timestamp set. + Timestamp model.Time +} + +// ResponseFormat extracts the correct format from a HTTP response header. +// If no matching format can be found FormatUnknown is returned. +func ResponseFormat(h http.Header) Format { + ct := h.Get(hdrContentType) + + mediatype, params, err := mime.ParseMediaType(ct) + if err != nil { + return FmtUnknown + } + + const textType = "text/plain" + + switch mediatype { + case ProtoType: + if p, ok := params["proto"]; ok && p != ProtoProtocol { + return FmtUnknown + } + if e, ok := params["encoding"]; ok && e != "delimited" { + return FmtUnknown + } + return FmtProtoDelim + + case textType: + if v, ok := params["version"]; ok && v != TextVersion { + return FmtUnknown + } + return FmtText + } + + return FmtUnknown +} + +// NewDecoder returns a new decoder based on the given input format. +// If the input format does not imply otherwise, a text format decoder is returned. +func NewDecoder(r io.Reader, format Format) Decoder { + switch format { + case FmtProtoDelim: + return &protoDecoder{r: r} + } + return &textDecoder{r: r} +} + +// protoDecoder implements the Decoder interface for protocol buffers. +type protoDecoder struct { + r io.Reader +} + +// Decode implements the Decoder interface. +func (d *protoDecoder) Decode(v *dto.MetricFamily) error { + _, err := pbutil.ReadDelimited(d.r, v) + if err != nil { + return err + } + if !model.IsValidMetricName(model.LabelValue(v.GetName())) { + return fmt.Errorf("invalid metric name %q", v.GetName()) + } + for _, m := range v.GetMetric() { + if m == nil { + continue + } + for _, l := range m.GetLabel() { + if l == nil { + continue + } + if !model.LabelValue(l.GetValue()).IsValid() { + return fmt.Errorf("invalid label value %q", l.GetValue()) + } + if !model.LabelName(l.GetName()).IsValid() { + return fmt.Errorf("invalid label name %q", l.GetName()) + } + } + } + return nil +} + +// textDecoder implements the Decoder interface for the text protocol. +type textDecoder struct { + r io.Reader + p TextParser + fams []*dto.MetricFamily +} + +// Decode implements the Decoder interface. +func (d *textDecoder) Decode(v *dto.MetricFamily) error { + // TODO(fabxc): Wrap this as a line reader to make streaming safer. + if len(d.fams) == 0 { + // No cached metric families, read everything and parse metrics. + fams, err := d.p.TextToMetricFamilies(d.r) + if err != nil { + return err + } + if len(fams) == 0 { + return io.EOF + } + d.fams = make([]*dto.MetricFamily, 0, len(fams)) + for _, f := range fams { + d.fams = append(d.fams, f) + } + } + + *v = *d.fams[0] + d.fams = d.fams[1:] + + return nil +} + +// SampleDecoder wraps a Decoder to extract samples from the metric families +// decoded by the wrapped Decoder. +type SampleDecoder struct { + Dec Decoder + Opts *DecodeOptions + + f dto.MetricFamily +} + +// Decode calls the Decode method of the wrapped Decoder and then extracts the +// samples from the decoded MetricFamily into the provided model.Vector. +func (sd *SampleDecoder) Decode(s *model.Vector) error { + err := sd.Dec.Decode(&sd.f) + if err != nil { + return err + } + *s, err = extractSamples(&sd.f, sd.Opts) + return err +} + +// ExtractSamples builds a slice of samples from the provided metric +// families. If an error occurs during sample extraction, it continues to +// extract from the remaining metric families. The returned error is the last +// error that has occured. +func ExtractSamples(o *DecodeOptions, fams ...*dto.MetricFamily) (model.Vector, error) { + var ( + all model.Vector + lastErr error + ) + for _, f := range fams { + some, err := extractSamples(f, o) + if err != nil { + lastErr = err + continue + } + all = append(all, some...) + } + return all, lastErr +} + +func extractSamples(f *dto.MetricFamily, o *DecodeOptions) (model.Vector, error) { + switch f.GetType() { + case dto.MetricType_COUNTER: + return extractCounter(o, f), nil + case dto.MetricType_GAUGE: + return extractGauge(o, f), nil + case dto.MetricType_SUMMARY: + return extractSummary(o, f), nil + case dto.MetricType_UNTYPED: + return extractUntyped(o, f), nil + case dto.MetricType_HISTOGRAM: + return extractHistogram(o, f), nil + } + return nil, fmt.Errorf("expfmt.extractSamples: unknown metric family type %v", f.GetType()) +} + +func extractCounter(o *DecodeOptions, f *dto.MetricFamily) model.Vector { + samples := make(model.Vector, 0, len(f.Metric)) + + for _, m := range f.Metric { + if m.Counter == nil { + continue + } + + lset := make(model.LabelSet, len(m.Label)+1) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + lset[model.MetricNameLabel] = model.LabelValue(f.GetName()) + + smpl := &model.Sample{ + Metric: model.Metric(lset), + Value: model.SampleValue(m.Counter.GetValue()), + } + + if m.TimestampMs != nil { + smpl.Timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) + } else { + smpl.Timestamp = o.Timestamp + } + + samples = append(samples, smpl) + } + + return samples +} + +func extractGauge(o *DecodeOptions, f *dto.MetricFamily) model.Vector { + samples := make(model.Vector, 0, len(f.Metric)) + + for _, m := range f.Metric { + if m.Gauge == nil { + continue + } + + lset := make(model.LabelSet, len(m.Label)+1) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + lset[model.MetricNameLabel] = model.LabelValue(f.GetName()) + + smpl := &model.Sample{ + Metric: model.Metric(lset), + Value: model.SampleValue(m.Gauge.GetValue()), + } + + if m.TimestampMs != nil { + smpl.Timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) + } else { + smpl.Timestamp = o.Timestamp + } + + samples = append(samples, smpl) + } + + return samples +} + +func extractUntyped(o *DecodeOptions, f *dto.MetricFamily) model.Vector { + samples := make(model.Vector, 0, len(f.Metric)) + + for _, m := range f.Metric { + if m.Untyped == nil { + continue + } + + lset := make(model.LabelSet, len(m.Label)+1) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + lset[model.MetricNameLabel] = model.LabelValue(f.GetName()) + + smpl := &model.Sample{ + Metric: model.Metric(lset), + Value: model.SampleValue(m.Untyped.GetValue()), + } + + if m.TimestampMs != nil { + smpl.Timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) + } else { + smpl.Timestamp = o.Timestamp + } + + samples = append(samples, smpl) + } + + return samples +} + +func extractSummary(o *DecodeOptions, f *dto.MetricFamily) model.Vector { + samples := make(model.Vector, 0, len(f.Metric)) + + for _, m := range f.Metric { + if m.Summary == nil { + continue + } + + timestamp := o.Timestamp + if m.TimestampMs != nil { + timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) + } + + for _, q := range m.Summary.Quantile { + lset := make(model.LabelSet, len(m.Label)+2) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + // BUG(matt): Update other names to "quantile". + lset[model.LabelName(model.QuantileLabel)] = model.LabelValue(fmt.Sprint(q.GetQuantile())) + lset[model.MetricNameLabel] = model.LabelValue(f.GetName()) + + samples = append(samples, &model.Sample{ + Metric: model.Metric(lset), + Value: model.SampleValue(q.GetValue()), + Timestamp: timestamp, + }) + } + + lset := make(model.LabelSet, len(m.Label)+1) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_sum") + + samples = append(samples, &model.Sample{ + Metric: model.Metric(lset), + Value: model.SampleValue(m.Summary.GetSampleSum()), + Timestamp: timestamp, + }) + + lset = make(model.LabelSet, len(m.Label)+1) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_count") + + samples = append(samples, &model.Sample{ + Metric: model.Metric(lset), + Value: model.SampleValue(m.Summary.GetSampleCount()), + Timestamp: timestamp, + }) + } + + return samples +} + +func extractHistogram(o *DecodeOptions, f *dto.MetricFamily) model.Vector { + samples := make(model.Vector, 0, len(f.Metric)) + + for _, m := range f.Metric { + if m.Histogram == nil { + continue + } + + timestamp := o.Timestamp + if m.TimestampMs != nil { + timestamp = model.TimeFromUnixNano(*m.TimestampMs * 1000000) + } + + infSeen := false + + for _, q := range m.Histogram.Bucket { + lset := make(model.LabelSet, len(m.Label)+2) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + lset[model.LabelName(model.BucketLabel)] = model.LabelValue(fmt.Sprint(q.GetUpperBound())) + lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_bucket") + + if math.IsInf(q.GetUpperBound(), +1) { + infSeen = true + } + + samples = append(samples, &model.Sample{ + Metric: model.Metric(lset), + Value: model.SampleValue(q.GetCumulativeCount()), + Timestamp: timestamp, + }) + } + + lset := make(model.LabelSet, len(m.Label)+1) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_sum") + + samples = append(samples, &model.Sample{ + Metric: model.Metric(lset), + Value: model.SampleValue(m.Histogram.GetSampleSum()), + Timestamp: timestamp, + }) + + lset = make(model.LabelSet, len(m.Label)+1) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_count") + + count := &model.Sample{ + Metric: model.Metric(lset), + Value: model.SampleValue(m.Histogram.GetSampleCount()), + Timestamp: timestamp, + } + samples = append(samples, count) + + if !infSeen { + // Append an infinity bucket sample. + lset := make(model.LabelSet, len(m.Label)+2) + for _, p := range m.Label { + lset[model.LabelName(p.GetName())] = model.LabelValue(p.GetValue()) + } + lset[model.LabelName(model.BucketLabel)] = model.LabelValue("+Inf") + lset[model.MetricNameLabel] = model.LabelValue(f.GetName() + "_bucket") + + samples = append(samples, &model.Sample{ + Metric: model.Metric(lset), + Value: count.Value, + Timestamp: timestamp, + }) + } + } + + return samples +} diff --git a/vendor/github.com/prometheus/common/expfmt/decode_test.go b/vendor/github.com/prometheus/common/expfmt/decode_test.go new file mode 100644 index 0000000..82c1130 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/decode_test.go @@ -0,0 +1,435 @@ +// Copyright 2015 The Prometheus 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 expfmt + +import ( + "io" + "net/http" + "reflect" + "sort" + "strings" + "testing" + + "github.com/golang/protobuf/proto" + dto "github.com/prometheus/client_model/go" + + "github.com/prometheus/common/model" +) + +func TestTextDecoder(t *testing.T) { + var ( + ts = model.Now() + in = ` +# Only a quite simple scenario with two metric families. +# More complicated tests of the parser itself can be found in the text package. +# TYPE mf2 counter +mf2 3 +mf1{label="value1"} -3.14 123456 +mf1{label="value2"} 42 +mf2 4 +` + out = model.Vector{ + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "mf1", + "label": "value1", + }, + Value: -3.14, + Timestamp: 123456, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "mf1", + "label": "value2", + }, + Value: 42, + Timestamp: ts, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "mf2", + }, + Value: 3, + Timestamp: ts, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "mf2", + }, + Value: 4, + Timestamp: ts, + }, + } + ) + + dec := &SampleDecoder{ + Dec: &textDecoder{r: strings.NewReader(in)}, + Opts: &DecodeOptions{ + Timestamp: ts, + }, + } + var all model.Vector + for { + var smpls model.Vector + err := dec.Decode(&smpls) + if err == io.EOF { + break + } + if err != nil { + t.Fatal(err) + } + all = append(all, smpls...) + } + sort.Sort(all) + sort.Sort(out) + if !reflect.DeepEqual(all, out) { + t.Fatalf("output does not match") + } +} + +func TestProtoDecoder(t *testing.T) { + + var testTime = model.Now() + + scenarios := []struct { + in string + expected model.Vector + fail bool + }{ + { + in: "", + }, + { + in: "\x8f\x01\n\rrequest_count\x12\x12Number of requests\x18\x00\"0\n#\n\x0fsome_!abel_name\x12\x10some_label_value\x1a\t\t\x00\x00\x00\x00\x00\x00E\xc0\"6\n)\n\x12another_label_name\x12\x13another_label_value\x1a\t\t\x00\x00\x00\x00\x00\x00U@", + fail: true, + }, + { + in: "\x8f\x01\n\rrequest_count\x12\x12Number of requests\x18\x00\"0\n#\n\x0fsome_label_name\x12\x10some_label_value\x1a\t\t\x00\x00\x00\x00\x00\x00E\xc0\"6\n)\n\x12another_label_name\x12\x13another_label_value\x1a\t\t\x00\x00\x00\x00\x00\x00U@", + expected: model.Vector{ + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count", + "some_label_name": "some_label_value", + }, + Value: -42, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count", + "another_label_name": "another_label_value", + }, + Value: 84, + Timestamp: testTime, + }, + }, + }, + { + in: "\xb9\x01\n\rrequest_count\x12\x12Number of requests\x18\x02\"O\n#\n\x0fsome_label_name\x12\x10some_label_value\"(\x1a\x12\t\xaeG\xe1z\x14\xae\xef?\x11\x00\x00\x00\x00\x00\x00E\xc0\x1a\x12\t+\x87\x16\xd9\xce\xf7\xef?\x11\x00\x00\x00\x00\x00\x00U\xc0\"A\n)\n\x12another_label_name\x12\x13another_label_value\"\x14\x1a\x12\t\x00\x00\x00\x00\x00\x00\xe0?\x11\x00\x00\x00\x00\x00\x00$@", + expected: model.Vector{ + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count_count", + "some_label_name": "some_label_value", + }, + Value: 0, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count_sum", + "some_label_name": "some_label_value", + }, + Value: 0, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count", + "some_label_name": "some_label_value", + "quantile": "0.99", + }, + Value: -42, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count", + "some_label_name": "some_label_value", + "quantile": "0.999", + }, + Value: -84, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count_count", + "another_label_name": "another_label_value", + }, + Value: 0, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count_sum", + "another_label_name": "another_label_value", + }, + Value: 0, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count", + "another_label_name": "another_label_value", + "quantile": "0.5", + }, + Value: 10, + Timestamp: testTime, + }, + }, + }, + { + in: "\x8d\x01\n\x1drequest_duration_microseconds\x12\x15The response latency.\x18\x04\"S:Q\b\x85\x15\x11\xcd\xcc\xccL\x8f\xcb:A\x1a\v\b{\x11\x00\x00\x00\x00\x00\x00Y@\x1a\f\b\x9c\x03\x11\x00\x00\x00\x00\x00\x00^@\x1a\f\b\xd0\x04\x11\x00\x00\x00\x00\x00\x00b@\x1a\f\b\xf4\v\x11\x9a\x99\x99\x99\x99\x99e@\x1a\f\b\x85\x15\x11\x00\x00\x00\x00\x00\x00\xf0\u007f", + expected: model.Vector{ + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_duration_microseconds_bucket", + "le": "100", + }, + Value: 123, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_duration_microseconds_bucket", + "le": "120", + }, + Value: 412, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_duration_microseconds_bucket", + "le": "144", + }, + Value: 592, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_duration_microseconds_bucket", + "le": "172.8", + }, + Value: 1524, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_duration_microseconds_bucket", + "le": "+Inf", + }, + Value: 2693, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_duration_microseconds_sum", + }, + Value: 1756047.3, + Timestamp: testTime, + }, + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_duration_microseconds_count", + }, + Value: 2693, + Timestamp: testTime, + }, + }, + }, + { + // The metric type is unset in this protobuf, which needs to be handled + // correctly by the decoder. + in: "\x1c\n\rrequest_count\"\v\x1a\t\t\x00\x00\x00\x00\x00\x00\xf0?", + expected: model.Vector{ + &model.Sample{ + Metric: model.Metric{ + model.MetricNameLabel: "request_count", + }, + Value: 1, + Timestamp: testTime, + }, + }, + }, + } + + for i, scenario := range scenarios { + dec := &SampleDecoder{ + Dec: &protoDecoder{r: strings.NewReader(scenario.in)}, + Opts: &DecodeOptions{ + Timestamp: testTime, + }, + } + + var all model.Vector + for { + var smpls model.Vector + err := dec.Decode(&smpls) + if err == io.EOF { + break + } + if scenario.fail { + if err == nil { + t.Fatal("Expected error but got none") + } + break + } + if err != nil { + t.Fatal(err) + } + all = append(all, smpls...) + } + sort.Sort(all) + sort.Sort(scenario.expected) + if !reflect.DeepEqual(all, scenario.expected) { + t.Fatalf("%d. output does not match, want: %#v, got %#v", i, scenario.expected, all) + } + } +} + +func testDiscriminatorHTTPHeader(t testing.TB) { + var scenarios = []struct { + input map[string]string + output Format + err error + }{ + { + input: map[string]string{"Content-Type": `application/vnd.google.protobuf; proto="io.prometheus.client.MetricFamily"; encoding="delimited"`}, + output: FmtProtoDelim, + }, + { + input: map[string]string{"Content-Type": `application/vnd.google.protobuf; proto="illegal"; encoding="delimited"`}, + output: FmtUnknown, + }, + { + input: map[string]string{"Content-Type": `application/vnd.google.protobuf; proto="io.prometheus.client.MetricFamily"; encoding="illegal"`}, + output: FmtUnknown, + }, + { + input: map[string]string{"Content-Type": `text/plain; version=0.0.4`}, + output: FmtText, + }, + { + input: map[string]string{"Content-Type": `text/plain`}, + output: FmtText, + }, + { + input: map[string]string{"Content-Type": `text/plain; version=0.0.3`}, + output: FmtUnknown, + }, + } + + for i, scenario := range scenarios { + var header http.Header + + if len(scenario.input) > 0 { + header = http.Header{} + } + + for key, value := range scenario.input { + header.Add(key, value) + } + + actual := ResponseFormat(header) + + if scenario.output != actual { + t.Errorf("%d. expected %s, got %s", i, scenario.output, actual) + } + } +} + +func TestDiscriminatorHTTPHeader(t *testing.T) { + testDiscriminatorHTTPHeader(t) +} + +func BenchmarkDiscriminatorHTTPHeader(b *testing.B) { + for i := 0; i < b.N; i++ { + testDiscriminatorHTTPHeader(b) + } +} + +func TestExtractSamples(t *testing.T) { + var ( + goodMetricFamily1 = &dto.MetricFamily{ + Name: proto.String("foo"), + Help: proto.String("Help for foo."), + Type: dto.MetricType_COUNTER.Enum(), + Metric: []*dto.Metric{ + &dto.Metric{ + Counter: &dto.Counter{ + Value: proto.Float64(4711), + }, + }, + }, + } + goodMetricFamily2 = &dto.MetricFamily{ + Name: proto.String("bar"), + Help: proto.String("Help for bar."), + Type: dto.MetricType_GAUGE.Enum(), + Metric: []*dto.Metric{ + &dto.Metric{ + Gauge: &dto.Gauge{ + Value: proto.Float64(3.14), + }, + }, + }, + } + badMetricFamily = &dto.MetricFamily{ + Name: proto.String("bad"), + Help: proto.String("Help for bad."), + Type: dto.MetricType(42).Enum(), + Metric: []*dto.Metric{ + &dto.Metric{ + Gauge: &dto.Gauge{ + Value: proto.Float64(2.7), + }, + }, + }, + } + + opts = &DecodeOptions{ + Timestamp: 42, + } + ) + + got, err := ExtractSamples(opts, goodMetricFamily1, goodMetricFamily2) + if err != nil { + t.Error("Unexpected error from ExtractSamples:", err) + } + want := model.Vector{ + &model.Sample{Metric: model.Metric{model.MetricNameLabel: "foo"}, Value: 4711, Timestamp: 42}, + &model.Sample{Metric: model.Metric{model.MetricNameLabel: "bar"}, Value: 3.14, Timestamp: 42}, + } + if !reflect.DeepEqual(got, want) { + t.Errorf("unexpected samples extracted, got: %v, want: %v", got, want) + } + + got, err = ExtractSamples(opts, goodMetricFamily1, badMetricFamily, goodMetricFamily2) + if err == nil { + t.Error("Expected error from ExtractSamples") + } + if !reflect.DeepEqual(got, want) { + t.Errorf("unexpected samples extracted, got: %v, want: %v", got, want) + } +} diff --git a/vendor/github.com/prometheus/common/expfmt/encode.go b/vendor/github.com/prometheus/common/expfmt/encode.go new file mode 100644 index 0000000..11839ed --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/encode.go @@ -0,0 +1,88 @@ +// Copyright 2015 The Prometheus 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 expfmt + +import ( + "fmt" + "io" + "net/http" + + "github.com/golang/protobuf/proto" + "github.com/matttproud/golang_protobuf_extensions/pbutil" + "github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg" + + dto "github.com/prometheus/client_model/go" +) + +// Encoder types encode metric families into an underlying wire protocol. +type Encoder interface { + Encode(*dto.MetricFamily) error +} + +type encoder func(*dto.MetricFamily) error + +func (e encoder) Encode(v *dto.MetricFamily) error { + return e(v) +} + +// Negotiate returns the Content-Type based on the given Accept header. +// If no appropriate accepted type is found, FmtText is returned. +func Negotiate(h http.Header) Format { + for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) { + // Check for protocol buffer + if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol { + switch ac.Params["encoding"] { + case "delimited": + return FmtProtoDelim + case "text": + return FmtProtoText + case "compact-text": + return FmtProtoCompact + } + } + // Check for text format. + ver := ac.Params["version"] + if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") { + return FmtText + } + } + return FmtText +} + +// NewEncoder returns a new encoder based on content type negotiation. +func NewEncoder(w io.Writer, format Format) Encoder { + switch format { + case FmtProtoDelim: + return encoder(func(v *dto.MetricFamily) error { + _, err := pbutil.WriteDelimited(w, v) + return err + }) + case FmtProtoCompact: + return encoder(func(v *dto.MetricFamily) error { + _, err := fmt.Fprintln(w, v.String()) + return err + }) + case FmtProtoText: + return encoder(func(v *dto.MetricFamily) error { + _, err := fmt.Fprintln(w, proto.MarshalTextString(v)) + return err + }) + case FmtText: + return encoder(func(v *dto.MetricFamily) error { + _, err := MetricFamilyToText(w, v) + return err + }) + } + panic("expfmt.NewEncoder: unknown format") +} diff --git a/vendor/github.com/prometheus/common/expfmt/expfmt.go b/vendor/github.com/prometheus/common/expfmt/expfmt.go new file mode 100644 index 0000000..371ac75 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/expfmt.go @@ -0,0 +1,38 @@ +// Copyright 2015 The Prometheus 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 expfmt contains tools for reading and writing Prometheus metrics. +package expfmt + +// Format specifies the HTTP content type of the different wire protocols. +type Format string + +// Constants to assemble the Content-Type values for the different wire protocols. +const ( + TextVersion = "0.0.4" + ProtoType = `application/vnd.google.protobuf` + ProtoProtocol = `io.prometheus.client.MetricFamily` + ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" + + // The Content-Type values for the different wire protocols. + FmtUnknown Format = `` + FmtText Format = `text/plain; version=` + TextVersion + FmtProtoDelim Format = ProtoFmt + ` encoding=delimited` + FmtProtoText Format = ProtoFmt + ` encoding=text` + FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text` +) + +const ( + hdrContentType = "Content-Type" + hdrAccept = "Accept" +) diff --git a/vendor/github.com/prometheus/client_golang/model/samplevalue.go b/vendor/github.com/prometheus/common/expfmt/fuzz.go similarity index 51% rename from vendor/github.com/prometheus/client_golang/model/samplevalue.go rename to vendor/github.com/prometheus/common/expfmt/fuzz.go index 469c2c0..dc2eede 100644 --- a/vendor/github.com/prometheus/client_golang/model/samplevalue.go +++ b/vendor/github.com/prometheus/common/expfmt/fuzz.go @@ -1,4 +1,4 @@ -// Copyright 2013 The Prometheus Authors +// Copyright 2014 The Prometheus 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 @@ -11,27 +11,26 @@ // See the License for the specific language governing permissions and // limitations under the License. -package model +// Build only when actually fuzzing +// +build gofuzz -import ( - "fmt" - "strconv" -) +package expfmt -// A SampleValue is a representation of a value for a given sample at a given -// time. -type SampleValue float64 +import "bytes" -// Equal does a straight v==o. -func (v SampleValue) Equal(o SampleValue) bool { - return v == o -} - -// MarshalJSON implements json.Marshaler. -func (v SampleValue) MarshalJSON() ([]byte, error) { - return []byte(fmt.Sprintf(`"%s"`, v)), nil -} - -func (v SampleValue) String() string { - return strconv.FormatFloat(float64(v), 'f', -1, 64) +// Fuzz text metric parser with with github.com/dvyukov/go-fuzz: +// +// go-fuzz-build github.com/prometheus/common/expfmt +// go-fuzz -bin expfmt-fuzz.zip -workdir fuzz +// +// Further input samples should go in the folder fuzz/corpus. +func Fuzz(in []byte) int { + parser := TextParser{} + _, err := parser.TextToMetricFamilies(bytes.NewReader(in)) + + if err != nil { + return 0 + } + + return 1 } diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_0 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_0 new file mode 100644 index 0000000..139597f --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_0 @@ -0,0 +1,2 @@ + + diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_1 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_1 new file mode 100644 index 0000000..2ae8706 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_1 @@ -0,0 +1,6 @@ + +minimal_metric 1.234 +another_metric -3e3 103948 +# Even that: +no_labels{} 3 +# HELP line for non-existing metric will be ignored. diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_2 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_2 new file mode 100644 index 0000000..5c351db --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_2 @@ -0,0 +1,12 @@ + +# A normal comment. +# +# TYPE name counter +name{labelname="val1",basename="basevalue"} NaN +name {labelname="val2",basename="base\"v\\al\nue"} 0.23 1234567890 +# HELP name two-line\n doc str\\ing + + # HELP name2 doc str"ing 2 + # TYPE name2 gauge +name2{labelname="val2" ,basename = "basevalue2" } +Inf 54321 +name2{ labelname = "val1" , }-Inf diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_3 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_3 new file mode 100644 index 0000000..0b3c345 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_3 @@ -0,0 +1,22 @@ + +# TYPE my_summary summary +my_summary{n1="val1",quantile="0.5"} 110 +decoy -1 -2 +my_summary{n1="val1",quantile="0.9"} 140 1 +my_summary_count{n1="val1"} 42 +# Latest timestamp wins in case of a summary. +my_summary_sum{n1="val1"} 4711 2 +fake_sum{n1="val1"} 2001 +# TYPE another_summary summary +another_summary_count{n2="val2",n1="val1"} 20 +my_summary_count{n2="val2",n1="val1"} 5 5 +another_summary{n1="val1",n2="val2",quantile=".3"} -1.2 +my_summary_sum{n1="val2"} 08 15 +my_summary{n1="val3", quantile="0.2"} 4711 + my_summary{n1="val1",n2="val2",quantile="-12.34",} NaN +# some +# funny comments +# HELP +# HELP +# HELP my_summary +# HELP my_summary diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_4 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_4 new file mode 100644 index 0000000..bde0a38 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_4 @@ -0,0 +1,10 @@ + +# HELP request_duration_microseconds The response latency. +# TYPE request_duration_microseconds histogram +request_duration_microseconds_bucket{le="100"} 123 +request_duration_microseconds_bucket{le="120"} 412 +request_duration_microseconds_bucket{le="144"} 592 +request_duration_microseconds_bucket{le="172.8"} 1524 +request_duration_microseconds_bucket{le="+Inf"} 2693 +request_duration_microseconds_sum 1.7560473e+06 +request_duration_microseconds_count 2693 diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_0 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_0 new file mode 100644 index 0000000..4c67f9a --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_0 @@ -0,0 +1 @@ +bla 3.14 \ No newline at end of file diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_1 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_1 new file mode 100644 index 0000000..b853478 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_1 @@ -0,0 +1 @@ +metric{label="\t"} 3.14 \ No newline at end of file diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_10 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_10 new file mode 100644 index 0000000..b5fe5f5 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_10 @@ -0,0 +1 @@ +metric{label="bla"} 3.14 2 3 diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_11 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_11 new file mode 100644 index 0000000..57c7fbc --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_11 @@ -0,0 +1 @@ +metric{label="bla"} blubb diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_12 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_12 new file mode 100644 index 0000000..0a9df79 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_12 @@ -0,0 +1,3 @@ + +# HELP metric one +# HELP metric two diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_13 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_13 new file mode 100644 index 0000000..5bc7427 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_13 @@ -0,0 +1,3 @@ + +# TYPE metric counter +# TYPE metric untyped diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_14 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_14 new file mode 100644 index 0000000..a9a2426 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_14 @@ -0,0 +1,3 @@ + +metric 4.12 +# TYPE metric counter diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_15 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_15 new file mode 100644 index 0000000..7e95ca8 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_15 @@ -0,0 +1,2 @@ + +# TYPE metric bla diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_16 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_16 new file mode 100644 index 0000000..7825f88 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_16 @@ -0,0 +1,2 @@ + +# TYPE met-ric diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_17 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_17 new file mode 100644 index 0000000..8f35cae --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_17 @@ -0,0 +1 @@ +@invalidmetric{label="bla"} 3.14 2 \ No newline at end of file diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_18 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_18 new file mode 100644 index 0000000..7ca2cc2 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_18 @@ -0,0 +1 @@ +{label="bla"} 3.14 2 \ No newline at end of file diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_19 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_19 new file mode 100644 index 0000000..7a6ccc0 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_19 @@ -0,0 +1,3 @@ + +# TYPE metric histogram +metric_bucket{le="bla"} 3.14 diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_2 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_2 new file mode 100644 index 0000000..726d001 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_2 @@ -0,0 +1,3 @@ + +metric{label="new +line"} 3.14 diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_3 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_3 new file mode 100644 index 0000000..6aa9e30 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_3 @@ -0,0 +1 @@ +metric{@="bla"} 3.14 \ No newline at end of file diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_4 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_4 new file mode 100644 index 0000000..d112cb9 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_4 @@ -0,0 +1 @@ +metric{__name__="bla"} 3.14 \ No newline at end of file diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_5 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_5 new file mode 100644 index 0000000..b34554a --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_5 @@ -0,0 +1 @@ +metric{label+="bla"} 3.14 \ No newline at end of file diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_6 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_6 new file mode 100644 index 0000000..c4d7df3 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_6 @@ -0,0 +1 @@ +metric{label=bla} 3.14 \ No newline at end of file diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_7 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_7 new file mode 100644 index 0000000..97eafc4 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_7 @@ -0,0 +1,3 @@ + +# TYPE metric summary +metric{quantile="bla"} 3.14 diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_8 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_8 new file mode 100644 index 0000000..fc70649 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_8 @@ -0,0 +1 @@ +metric{label="bla"+} 3.14 \ No newline at end of file diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_9 b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_9 new file mode 100644 index 0000000..57b4879 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/from_test_parse_error_9 @@ -0,0 +1 @@ +metric{label="bla"} 3.14 2.72 diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/minimal b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/minimal new file mode 100644 index 0000000..be1e6a3 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/fuzz/corpus/minimal @@ -0,0 +1 @@ +m{} 0 diff --git a/vendor/github.com/prometheus/common/expfmt/testdata/json2 b/vendor/github.com/prometheus/common/expfmt/testdata/json2 new file mode 100644 index 0000000..b914c93 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/testdata/json2 @@ -0,0 +1,46 @@ +[ + { + "baseLabels": { + "__name__": "rpc_calls_total", + "job": "batch_job" + }, + "docstring": "RPC calls.", + "metric": { + "type": "counter", + "value": [ + { + "labels": { + "service": "zed" + }, + "value": 25 + }, + { + "labels": { + "service": "bar" + }, + "value": 24 + } + ] + } + }, + { + "baseLabels": { + "__name__": "rpc_latency_microseconds" + }, + "docstring": "RPC latency.", + "metric": { + "type": "histogram", + "value": [ + { + "labels": { + "service": "foo" + }, + "value": { + "0.010000": 15, + "0.990000": 17 + } + } + ] + } + } +] diff --git a/vendor/github.com/prometheus/common/expfmt/testdata/json2_bad b/vendor/github.com/prometheus/common/expfmt/testdata/json2_bad new file mode 100644 index 0000000..cc6ac97 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/testdata/json2_bad @@ -0,0 +1,46 @@ +[ + { + "baseLabels": { + "__name__": "rpc_calls_total", + "job": "batch_job" + }, + "docstring": "RPC calls.", + "metric": { + "type": "counter", + "value": [ + { + "labels": { + "servic|e": "zed" + }, + "value": 25 + }, + { + "labels": { + "service": "bar" + }, + "value": 24 + } + ] + } + }, + { + "baseLabels": { + "__name__": "rpc_latency_microseconds" + }, + "docstring": "RPC latency.", + "metric": { + "type": "histogram", + "value": [ + { + "labels": { + "service": "foo" + }, + "value": { + "0.010000": 15, + "0.990000": 17 + } + } + ] + } + } +] diff --git a/vendor/github.com/prometheus/common/expfmt/testdata/protobuf b/vendor/github.com/prometheus/common/expfmt/testdata/protobuf new file mode 100644 index 0000000000000000000000000000000000000000..b2d018a7c1e3687e4fa1e149808beb95a048b907 GIT binary patch literal 8239 zcmeHMO^h5z74F&f&urOoyd4LxH?}Fa6=&^uXV!rbfk?Jj4oWb=BzQ?cIJA4aYi1hH zbhoRjvpXgS6Cxp`pacmC@vBIH00~(>a>IfgIDkMxfIvcWgoJV+!ioeZ4!ruC?wXzT zuA&iKb`O@Ps=D5*_g;PPy|11^hjW@mgt6d-gz_Tn20hZtXg^r#bHdys&#Fq%7MSR<2RSSUqc^+-Fk#~NWp?`7QuFmXEbb+AnK6la-JnA58{G` zJjv3amvp-cBT<&d%zbXTL$H~`b0DNTeG(@e^DMgz|KM^j&}Ck$24ZOvF&w5b?vOBs zRYiK4Rh1Nq{;Y-`-cZS$P?j(rbVE+ks1FK8G&2gGS;DO7^+MXmSqrNr31PUEQLH~q z(l#bx)KRhAvETe!{QYBb zy7RTSUtGMBh_UNWym|G&^?xo-AKLNkzPDfgf&Y2b+*I)^1u4MRVID>a@4Iutraa?e z7n?DmJNUoZPz`0Uf4!aV5_%yNxm!T3A5$ zqTL;cWH6hHN>8A>&@OSkve=z$6Ar@V$!R4uF`}9TwwjJ zbpq#x|Cbti?}ie(ByIDK`=i>~bw)}c_@rUPZM~B`{1JgTVmXeoUQPi~0R_8VqYx%* zIe=IUppCN>@F1iRJ2+(Wmx4{)3IT2V0J{y+09Pm|)ldNkBRGYB;5L?sFCyYUb>vlJ zz6$LX{U7P_xI#r{%4KtsTU@yQusEftw#^vIC4pwM6$0N@xy>LQvh zt+lJ!reWS0pN&3?_LsZwY(iO+k8ktOp?k{B>rKWXzei&B!a_1X=|!(r`42G20-pu7?_>nTPrbqg$Y= zaa}8)w(VmSTn!U0I!&MlRs=->M<=lj^N!O-_gAD@?WirJX$u+EzCz*3O=UhT=R7)M zG7}{%iJ|?md6lD|)We$+E6$CtEOpQWo2YHNd$%DJH@{4`GD>}EQ(N!P_&=?olNCvJ zIH^u5$Oe)6ej!V-3uVCQehad$B6*l-JHSv0#k`-(R`))%5A6^?++7hRz#Eu87UID> zg^uXSdwU_UMI;T=hy)3+MUt2rtUckMMf;7FMUs~V06sqm-7O^kNBwtdXl}z3%RaSo z;P;I>uxe)C)p>8c
    wF-TJ({HHl+%sV4Iz9n8Gqdq<)0R5Mc?Dsv{N z12ccS?|ZYr6{z{0MQVThMh$&!1{{ za|CjTv0>zJT4-VOLn!1h_rX0r>UIniA8{pq=l^-ax)Q2IfpFx6z5w*50wu#FxyP0w zL81cwsCkHf!dHo42O?+<2+)xe-b*#`dEG2=C(k_0ysW-g;pr_RaPkWW#Cc!V3C1}s z#uU%=6Kl*)L{3Aj8^T>VHe|hq?|rcbx3E-V;*8LtP&!=u*a#h@XNGi;V?#QO^5E^o z^&Y&vcn;mw&VqJEvjU(SD4bK};+*R^N-2+bNOfIf!uKrnU# zuYBNw7*i~sp+8mQ00|G!1s7?uhDn|Y9;L$XDYD~Hba4KyGk;k6ZO!7o2)MrpfxW7d z9%Zn*GEWWoY(WwWPDXzP>^Bps3X)V*a6rWg?+V!epw6jt{}cNsR%FwnOM+6ppcN+F z0OB)v9o4})T}N;z!lpKmUS&1d1#Be@Csm_M>XTG*RLke`VWd(F_~r@&5vR CKJmZ+ literal 0 HcmV?d00001 diff --git a/vendor/github.com/prometheus/common/expfmt/testdata/protobuf.gz b/vendor/github.com/prometheus/common/expfmt/testdata/protobuf.gz new file mode 100644 index 0000000000000000000000000000000000000000..7622adb1c8a1166549e339920a5823cf5493d0a6 GIT binary patch literal 2097 zcmV-12+sE(iwFoAHid)vHwry&KEBu?IG@6G5K^8#imAXN ziq63wT<`*2W;4}5ETb;RPUztdaXg?(!gHFE^7l&v-91vtm@rPcuzg36(CvbPE{k#n zk1t@J1c3vxq83g`DB-vjF`O-=VH*?2?WD3BQ)9K0wFj%0jLCo1&%7}G;qR^#=pZmSlyIpe^dEli?-fluqw! z52vHR&j|(fGrMpSdeSJ4Pnf_OA6$n|I6v1<6p6>8I3}J>bX3~#q1pr0%4B|kWfPXh zdL}H5^-P$Lok4qZcX#8&&Xl*6h0M7{WvGM`rksd(xgY^P@yJ)PpaH==Cd%P(wyZH# zscoB{nE1($#l=T(PJ{!;Ba+j7XdBw( zMjkQ8@0y!Kx1p^aPy)U`ar3p}u=GbE5C|sCnh#Nx00Y0N>9| zr{AT^)}IaZ$&nI#61GLheAPHHpg0BRQ+lr@4}U=-jwHu!6vPbfB%q-0_s){6!~kL* zfHsaoIC6)9?_h_kuM{?M%Yp0M1=wwnMh{A}%>o~SL-=#FA58yUMYXcem!Z9coOjBj zDZ70MJr&LuwDP_`ji1My#Vtok5d@ge}cBbK=hWasLL| zRdC!q}ZUNHNzvQgYAPGu18bR2`Eyzg90Y?Y2E7sqt zXpaVDGSSU)U_5|ca*~(Q;0?&Sem~fNtPRMzVdno+$WkPKylM?dm}Ay}gmg@o0ApX) zazPKODegg58=XtyJT2cZ;iiDE`%j&oJ$*mUXv*n$rLxcZm0qaz=lvd8fkfV3a)jGa zkjBl0N3{Yir@@LQL$-P$K2HUqTue!N6`7HnZO|a;Sii{!4FY2UYOJllmMhQb_Q@4o zcBm@9MTD0~x-D6~==o|J9UfWMYC@X2kYVL(IWzBdXU-ceU$@W$%fZ# ztW++4f1!i!SVQezrP5GUP+zq&O#LBxf8Bb+Ku1R&M_NhQQO{F9J+y#K>n(`7ERzIf z2e6|Ii*Bq+-P_Slv`K!LTUWIvGQFyvShXqH z6;QL|F%5e&&snttfa2-Qgn%%|W$PfHzt**C(`ZLFzc~r@wQm~e^VbU+Lz_MK=opeh zM-NH*YP(|H0CL%_xf1VMe;U)SL>ljH>6q+EkeK2{-bpeK zF1V^)n$Lqb5V1^TweCWkO_RlE3^?;@PGXK9znj;h>h^SJSBb>QZ||1-eKz0ij2uh* zOs{KWeb#FX!QI9X+-+F3?-<~fg%V@Or4C6t|MVA!=%7xaPlxM0!E5t_I$WDSiFULj zyB)D80q6!)JXT!ZVieBE5qV?B?_xMBF7z(Wqn3-Nb0~nMfC*c6?0Tp2nbUGC?c(L_ z&y*T)7tjSKAzi^Fj+7f0{k>Giy=c$u`^SI3@Q$JNz6h8talqk5^s{HQezv?PvL}lV%q!#=sDv?ZLc(bJSl z<^3v}%E~Jq!`4Z;zB*W{uhQ9#0_!8m*eI}W!de>z*8f$3_12M{3j-3yE)K@E-4_Sr z8op@##z6P1k`@3|QO}MU@gv9Uf2rvXgSd>gc(7rlMHtIU4F|I7a8`vRnarojZv!uO zD8QF|i5NYy4w)5GpIcSOyl~6vsa4)3E0tHqw4|>; zWDO6*hXw<28o2cMD_wI!aa37zRYd|&3|y0!!}5(fzg2V4C(05g7%0d*T}0z1L{u$X bD-^Z%LVr9zyh@v4WE}qw(Kt;cFCYK_^s^0< literal 0 HcmV?d00001 diff --git a/vendor/github.com/prometheus/common/expfmt/testdata/text b/vendor/github.com/prometheus/common/expfmt/testdata/text new file mode 100644 index 0000000..f3d8c37 --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/testdata/text @@ -0,0 +1,322 @@ +# HELP http_request_duration_microseconds The HTTP request latencies in microseconds. +# TYPE http_request_duration_microseconds summary +http_request_duration_microseconds{handler="/",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/"} 0 +http_request_duration_microseconds_count{handler="/"} 0 +http_request_duration_microseconds{handler="/alerts",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/alerts",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/alerts",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/alerts"} 0 +http_request_duration_microseconds_count{handler="/alerts"} 0 +http_request_duration_microseconds{handler="/api/metrics",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/api/metrics",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/api/metrics",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/api/metrics"} 0 +http_request_duration_microseconds_count{handler="/api/metrics"} 0 +http_request_duration_microseconds{handler="/api/query",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/api/query",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/api/query",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/api/query"} 0 +http_request_duration_microseconds_count{handler="/api/query"} 0 +http_request_duration_microseconds{handler="/api/query_range",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/api/query_range",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/api/query_range",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/api/query_range"} 0 +http_request_duration_microseconds_count{handler="/api/query_range"} 0 +http_request_duration_microseconds{handler="/api/targets",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/api/targets",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/api/targets",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/api/targets"} 0 +http_request_duration_microseconds_count{handler="/api/targets"} 0 +http_request_duration_microseconds{handler="/consoles/",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/consoles/",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/consoles/",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/consoles/"} 0 +http_request_duration_microseconds_count{handler="/consoles/"} 0 +http_request_duration_microseconds{handler="/graph",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/graph",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/graph",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/graph"} 0 +http_request_duration_microseconds_count{handler="/graph"} 0 +http_request_duration_microseconds{handler="/heap",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/heap",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/heap",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/heap"} 0 +http_request_duration_microseconds_count{handler="/heap"} 0 +http_request_duration_microseconds{handler="/static/",quantile="0.5"} 0 +http_request_duration_microseconds{handler="/static/",quantile="0.9"} 0 +http_request_duration_microseconds{handler="/static/",quantile="0.99"} 0 +http_request_duration_microseconds_sum{handler="/static/"} 0 +http_request_duration_microseconds_count{handler="/static/"} 0 +http_request_duration_microseconds{handler="prometheus",quantile="0.5"} 1307.275 +http_request_duration_microseconds{handler="prometheus",quantile="0.9"} 1858.632 +http_request_duration_microseconds{handler="prometheus",quantile="0.99"} 3087.384 +http_request_duration_microseconds_sum{handler="prometheus"} 179886.5000000001 +http_request_duration_microseconds_count{handler="prometheus"} 119 +# HELP http_request_size_bytes The HTTP request sizes in bytes. +# TYPE http_request_size_bytes summary +http_request_size_bytes{handler="/",quantile="0.5"} 0 +http_request_size_bytes{handler="/",quantile="0.9"} 0 +http_request_size_bytes{handler="/",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/"} 0 +http_request_size_bytes_count{handler="/"} 0 +http_request_size_bytes{handler="/alerts",quantile="0.5"} 0 +http_request_size_bytes{handler="/alerts",quantile="0.9"} 0 +http_request_size_bytes{handler="/alerts",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/alerts"} 0 +http_request_size_bytes_count{handler="/alerts"} 0 +http_request_size_bytes{handler="/api/metrics",quantile="0.5"} 0 +http_request_size_bytes{handler="/api/metrics",quantile="0.9"} 0 +http_request_size_bytes{handler="/api/metrics",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/api/metrics"} 0 +http_request_size_bytes_count{handler="/api/metrics"} 0 +http_request_size_bytes{handler="/api/query",quantile="0.5"} 0 +http_request_size_bytes{handler="/api/query",quantile="0.9"} 0 +http_request_size_bytes{handler="/api/query",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/api/query"} 0 +http_request_size_bytes_count{handler="/api/query"} 0 +http_request_size_bytes{handler="/api/query_range",quantile="0.5"} 0 +http_request_size_bytes{handler="/api/query_range",quantile="0.9"} 0 +http_request_size_bytes{handler="/api/query_range",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/api/query_range"} 0 +http_request_size_bytes_count{handler="/api/query_range"} 0 +http_request_size_bytes{handler="/api/targets",quantile="0.5"} 0 +http_request_size_bytes{handler="/api/targets",quantile="0.9"} 0 +http_request_size_bytes{handler="/api/targets",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/api/targets"} 0 +http_request_size_bytes_count{handler="/api/targets"} 0 +http_request_size_bytes{handler="/consoles/",quantile="0.5"} 0 +http_request_size_bytes{handler="/consoles/",quantile="0.9"} 0 +http_request_size_bytes{handler="/consoles/",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/consoles/"} 0 +http_request_size_bytes_count{handler="/consoles/"} 0 +http_request_size_bytes{handler="/graph",quantile="0.5"} 0 +http_request_size_bytes{handler="/graph",quantile="0.9"} 0 +http_request_size_bytes{handler="/graph",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/graph"} 0 +http_request_size_bytes_count{handler="/graph"} 0 +http_request_size_bytes{handler="/heap",quantile="0.5"} 0 +http_request_size_bytes{handler="/heap",quantile="0.9"} 0 +http_request_size_bytes{handler="/heap",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/heap"} 0 +http_request_size_bytes_count{handler="/heap"} 0 +http_request_size_bytes{handler="/static/",quantile="0.5"} 0 +http_request_size_bytes{handler="/static/",quantile="0.9"} 0 +http_request_size_bytes{handler="/static/",quantile="0.99"} 0 +http_request_size_bytes_sum{handler="/static/"} 0 +http_request_size_bytes_count{handler="/static/"} 0 +http_request_size_bytes{handler="prometheus",quantile="0.5"} 291 +http_request_size_bytes{handler="prometheus",quantile="0.9"} 291 +http_request_size_bytes{handler="prometheus",quantile="0.99"} 291 +http_request_size_bytes_sum{handler="prometheus"} 34488 +http_request_size_bytes_count{handler="prometheus"} 119 +# HELP http_requests_total Total number of HTTP requests made. +# TYPE http_requests_total counter +http_requests_total{code="200",handler="prometheus",method="get"} 119 +# HELP http_response_size_bytes The HTTP response sizes in bytes. +# TYPE http_response_size_bytes summary +http_response_size_bytes{handler="/",quantile="0.5"} 0 +http_response_size_bytes{handler="/",quantile="0.9"} 0 +http_response_size_bytes{handler="/",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/"} 0 +http_response_size_bytes_count{handler="/"} 0 +http_response_size_bytes{handler="/alerts",quantile="0.5"} 0 +http_response_size_bytes{handler="/alerts",quantile="0.9"} 0 +http_response_size_bytes{handler="/alerts",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/alerts"} 0 +http_response_size_bytes_count{handler="/alerts"} 0 +http_response_size_bytes{handler="/api/metrics",quantile="0.5"} 0 +http_response_size_bytes{handler="/api/metrics",quantile="0.9"} 0 +http_response_size_bytes{handler="/api/metrics",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/api/metrics"} 0 +http_response_size_bytes_count{handler="/api/metrics"} 0 +http_response_size_bytes{handler="/api/query",quantile="0.5"} 0 +http_response_size_bytes{handler="/api/query",quantile="0.9"} 0 +http_response_size_bytes{handler="/api/query",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/api/query"} 0 +http_response_size_bytes_count{handler="/api/query"} 0 +http_response_size_bytes{handler="/api/query_range",quantile="0.5"} 0 +http_response_size_bytes{handler="/api/query_range",quantile="0.9"} 0 +http_response_size_bytes{handler="/api/query_range",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/api/query_range"} 0 +http_response_size_bytes_count{handler="/api/query_range"} 0 +http_response_size_bytes{handler="/api/targets",quantile="0.5"} 0 +http_response_size_bytes{handler="/api/targets",quantile="0.9"} 0 +http_response_size_bytes{handler="/api/targets",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/api/targets"} 0 +http_response_size_bytes_count{handler="/api/targets"} 0 +http_response_size_bytes{handler="/consoles/",quantile="0.5"} 0 +http_response_size_bytes{handler="/consoles/",quantile="0.9"} 0 +http_response_size_bytes{handler="/consoles/",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/consoles/"} 0 +http_response_size_bytes_count{handler="/consoles/"} 0 +http_response_size_bytes{handler="/graph",quantile="0.5"} 0 +http_response_size_bytes{handler="/graph",quantile="0.9"} 0 +http_response_size_bytes{handler="/graph",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/graph"} 0 +http_response_size_bytes_count{handler="/graph"} 0 +http_response_size_bytes{handler="/heap",quantile="0.5"} 0 +http_response_size_bytes{handler="/heap",quantile="0.9"} 0 +http_response_size_bytes{handler="/heap",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/heap"} 0 +http_response_size_bytes_count{handler="/heap"} 0 +http_response_size_bytes{handler="/static/",quantile="0.5"} 0 +http_response_size_bytes{handler="/static/",quantile="0.9"} 0 +http_response_size_bytes{handler="/static/",quantile="0.99"} 0 +http_response_size_bytes_sum{handler="/static/"} 0 +http_response_size_bytes_count{handler="/static/"} 0 +http_response_size_bytes{handler="prometheus",quantile="0.5"} 2049 +http_response_size_bytes{handler="prometheus",quantile="0.9"} 2058 +http_response_size_bytes{handler="prometheus",quantile="0.99"} 2064 +http_response_size_bytes_sum{handler="prometheus"} 247001 +http_response_size_bytes_count{handler="prometheus"} 119 +# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds. +# TYPE process_cpu_seconds_total counter +process_cpu_seconds_total 0.55 +# HELP go_goroutines Number of goroutines that currently exist. +# TYPE go_goroutines gauge +go_goroutines 70 +# HELP process_max_fds Maximum number of open file descriptors. +# TYPE process_max_fds gauge +process_max_fds 8192 +# HELP process_open_fds Number of open file descriptors. +# TYPE process_open_fds gauge +process_open_fds 29 +# HELP process_resident_memory_bytes Resident memory size in bytes. +# TYPE process_resident_memory_bytes gauge +process_resident_memory_bytes 5.3870592e+07 +# HELP process_start_time_seconds Start time of the process since unix epoch in seconds. +# TYPE process_start_time_seconds gauge +process_start_time_seconds 1.42236894836e+09 +# HELP process_virtual_memory_bytes Virtual memory size in bytes. +# TYPE process_virtual_memory_bytes gauge +process_virtual_memory_bytes 5.41478912e+08 +# HELP prometheus_dns_sd_lookup_failures_total The number of DNS-SD lookup failures. +# TYPE prometheus_dns_sd_lookup_failures_total counter +prometheus_dns_sd_lookup_failures_total 0 +# HELP prometheus_dns_sd_lookups_total The number of DNS-SD lookups. +# TYPE prometheus_dns_sd_lookups_total counter +prometheus_dns_sd_lookups_total 7 +# HELP prometheus_evaluator_duration_milliseconds The duration for all evaluations to execute. +# TYPE prometheus_evaluator_duration_milliseconds summary +prometheus_evaluator_duration_milliseconds{quantile="0.01"} 0 +prometheus_evaluator_duration_milliseconds{quantile="0.05"} 0 +prometheus_evaluator_duration_milliseconds{quantile="0.5"} 0 +prometheus_evaluator_duration_milliseconds{quantile="0.9"} 1 +prometheus_evaluator_duration_milliseconds{quantile="0.99"} 1 +prometheus_evaluator_duration_milliseconds_sum 12 +prometheus_evaluator_duration_milliseconds_count 23 +# HELP prometheus_local_storage_checkpoint_duration_milliseconds The duration (in milliseconds) it took to checkpoint in-memory metrics and head chunks. +# TYPE prometheus_local_storage_checkpoint_duration_milliseconds gauge +prometheus_local_storage_checkpoint_duration_milliseconds 0 +# HELP prometheus_local_storage_chunk_ops_total The total number of chunk operations by their type. +# TYPE prometheus_local_storage_chunk_ops_total counter +prometheus_local_storage_chunk_ops_total{type="create"} 598 +prometheus_local_storage_chunk_ops_total{type="persist"} 174 +prometheus_local_storage_chunk_ops_total{type="pin"} 920 +prometheus_local_storage_chunk_ops_total{type="transcode"} 415 +prometheus_local_storage_chunk_ops_total{type="unpin"} 920 +# HELP prometheus_local_storage_indexing_batch_latency_milliseconds Quantiles for batch indexing latencies in milliseconds. +# TYPE prometheus_local_storage_indexing_batch_latency_milliseconds summary +prometheus_local_storage_indexing_batch_latency_milliseconds{quantile="0.5"} 0 +prometheus_local_storage_indexing_batch_latency_milliseconds{quantile="0.9"} 0 +prometheus_local_storage_indexing_batch_latency_milliseconds{quantile="0.99"} 0 +prometheus_local_storage_indexing_batch_latency_milliseconds_sum 0 +prometheus_local_storage_indexing_batch_latency_milliseconds_count 1 +# HELP prometheus_local_storage_indexing_batch_sizes Quantiles for indexing batch sizes (number of metrics per batch). +# TYPE prometheus_local_storage_indexing_batch_sizes summary +prometheus_local_storage_indexing_batch_sizes{quantile="0.5"} 2 +prometheus_local_storage_indexing_batch_sizes{quantile="0.9"} 2 +prometheus_local_storage_indexing_batch_sizes{quantile="0.99"} 2 +prometheus_local_storage_indexing_batch_sizes_sum 2 +prometheus_local_storage_indexing_batch_sizes_count 1 +# HELP prometheus_local_storage_indexing_queue_capacity The capacity of the indexing queue. +# TYPE prometheus_local_storage_indexing_queue_capacity gauge +prometheus_local_storage_indexing_queue_capacity 16384 +# HELP prometheus_local_storage_indexing_queue_length The number of metrics waiting to be indexed. +# TYPE prometheus_local_storage_indexing_queue_length gauge +prometheus_local_storage_indexing_queue_length 0 +# HELP prometheus_local_storage_ingested_samples_total The total number of samples ingested. +# TYPE prometheus_local_storage_ingested_samples_total counter +prometheus_local_storage_ingested_samples_total 30473 +# HELP prometheus_local_storage_invalid_preload_requests_total The total number of preload requests referring to a non-existent series. This is an indication of outdated label indexes. +# TYPE prometheus_local_storage_invalid_preload_requests_total counter +prometheus_local_storage_invalid_preload_requests_total 0 +# HELP prometheus_local_storage_memory_chunkdescs The current number of chunk descriptors in memory. +# TYPE prometheus_local_storage_memory_chunkdescs gauge +prometheus_local_storage_memory_chunkdescs 1059 +# HELP prometheus_local_storage_memory_chunks The current number of chunks in memory, excluding cloned chunks (i.e. chunks without a descriptor). +# TYPE prometheus_local_storage_memory_chunks gauge +prometheus_local_storage_memory_chunks 1020 +# HELP prometheus_local_storage_memory_series The current number of series in memory. +# TYPE prometheus_local_storage_memory_series gauge +prometheus_local_storage_memory_series 424 +# HELP prometheus_local_storage_persist_latency_microseconds A summary of latencies for persisting each chunk. +# TYPE prometheus_local_storage_persist_latency_microseconds summary +prometheus_local_storage_persist_latency_microseconds{quantile="0.5"} 30.377 +prometheus_local_storage_persist_latency_microseconds{quantile="0.9"} 203.539 +prometheus_local_storage_persist_latency_microseconds{quantile="0.99"} 2626.463 +prometheus_local_storage_persist_latency_microseconds_sum 20424.415 +prometheus_local_storage_persist_latency_microseconds_count 174 +# HELP prometheus_local_storage_persist_queue_capacity The total capacity of the persist queue. +# TYPE prometheus_local_storage_persist_queue_capacity gauge +prometheus_local_storage_persist_queue_capacity 1024 +# HELP prometheus_local_storage_persist_queue_length The current number of chunks waiting in the persist queue. +# TYPE prometheus_local_storage_persist_queue_length gauge +prometheus_local_storage_persist_queue_length 0 +# HELP prometheus_local_storage_series_ops_total The total number of series operations by their type. +# TYPE prometheus_local_storage_series_ops_total counter +prometheus_local_storage_series_ops_total{type="create"} 2 +prometheus_local_storage_series_ops_total{type="maintenance_in_memory"} 11 +# HELP prometheus_notifications_latency_milliseconds Latency quantiles for sending alert notifications (not including dropped notifications). +# TYPE prometheus_notifications_latency_milliseconds summary +prometheus_notifications_latency_milliseconds{quantile="0.5"} 0 +prometheus_notifications_latency_milliseconds{quantile="0.9"} 0 +prometheus_notifications_latency_milliseconds{quantile="0.99"} 0 +prometheus_notifications_latency_milliseconds_sum 0 +prometheus_notifications_latency_milliseconds_count 0 +# HELP prometheus_notifications_queue_capacity The capacity of the alert notifications queue. +# TYPE prometheus_notifications_queue_capacity gauge +prometheus_notifications_queue_capacity 100 +# HELP prometheus_notifications_queue_length The number of alert notifications in the queue. +# TYPE prometheus_notifications_queue_length gauge +prometheus_notifications_queue_length 0 +# HELP prometheus_rule_evaluation_duration_milliseconds The duration for a rule to execute. +# TYPE prometheus_rule_evaluation_duration_milliseconds summary +prometheus_rule_evaluation_duration_milliseconds{rule_type="alerting",quantile="0.5"} 0 +prometheus_rule_evaluation_duration_milliseconds{rule_type="alerting",quantile="0.9"} 0 +prometheus_rule_evaluation_duration_milliseconds{rule_type="alerting",quantile="0.99"} 2 +prometheus_rule_evaluation_duration_milliseconds_sum{rule_type="alerting"} 12 +prometheus_rule_evaluation_duration_milliseconds_count{rule_type="alerting"} 115 +prometheus_rule_evaluation_duration_milliseconds{rule_type="recording",quantile="0.5"} 0 +prometheus_rule_evaluation_duration_milliseconds{rule_type="recording",quantile="0.9"} 0 +prometheus_rule_evaluation_duration_milliseconds{rule_type="recording",quantile="0.99"} 3 +prometheus_rule_evaluation_duration_milliseconds_sum{rule_type="recording"} 15 +prometheus_rule_evaluation_duration_milliseconds_count{rule_type="recording"} 115 +# HELP prometheus_rule_evaluation_failures_total The total number of rule evaluation failures. +# TYPE prometheus_rule_evaluation_failures_total counter +prometheus_rule_evaluation_failures_total 0 +# HELP prometheus_samples_queue_capacity Capacity of the queue for unwritten samples. +# TYPE prometheus_samples_queue_capacity gauge +prometheus_samples_queue_capacity 4096 +# HELP prometheus_samples_queue_length Current number of items in the queue for unwritten samples. Each item comprises all samples exposed by one target as one metric family (i.e. metrics of the same name). +# TYPE prometheus_samples_queue_length gauge +prometheus_samples_queue_length 0 +# HELP prometheus_target_interval_length_seconds Actual intervals between scrapes. +# TYPE prometheus_target_interval_length_seconds summary +prometheus_target_interval_length_seconds{interval="15s",quantile="0.01"} 14 +prometheus_target_interval_length_seconds{interval="15s",quantile="0.05"} 14 +prometheus_target_interval_length_seconds{interval="15s",quantile="0.5"} 15 +prometheus_target_interval_length_seconds{interval="15s",quantile="0.9"} 15 +prometheus_target_interval_length_seconds{interval="15s",quantile="0.99"} 15 +prometheus_target_interval_length_seconds_sum{interval="15s"} 175 +prometheus_target_interval_length_seconds_count{interval="15s"} 12 +prometheus_target_interval_length_seconds{interval="1s",quantile="0.01"} 0 +prometheus_target_interval_length_seconds{interval="1s",quantile="0.05"} 0 +prometheus_target_interval_length_seconds{interval="1s",quantile="0.5"} 0 +prometheus_target_interval_length_seconds{interval="1s",quantile="0.9"} 1 +prometheus_target_interval_length_seconds{interval="1s",quantile="0.99"} 1 +prometheus_target_interval_length_seconds_sum{interval="1s"} 55 +prometheus_target_interval_length_seconds_count{interval="1s"} 117 diff --git a/vendor/github.com/prometheus/common/expfmt/testdata/text.gz b/vendor/github.com/prometheus/common/expfmt/testdata/text.gz new file mode 100644 index 0000000000000000000000000000000000000000..b7658c84d7d63018b286611cec48a8362bd7c71d GIT binary patch literal 2598 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 "less or equal"). @@ -62,20 +80,37 @@ const ( QuantileLabel = "quantile" ) -// LabelNameRE is a regular expression matching valid label names. +// LabelNameRE is a regular expression matching valid label names. Note that the +// IsValid method of LabelName performs the same check but faster than a match +// with this regular expression. var LabelNameRE = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$") // A LabelName is a key for a LabelSet or Metric. It has a value associated // therewith. type LabelName string +// IsValid is true iff the label name matches the pattern of LabelNameRE. This +// method, however, does not use LabelNameRE for the check but a much faster +// hardcoded implementation. +func (ln LabelName) IsValid() bool { + if len(ln) == 0 { + return false + } + for i, b := range ln { + if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || (b >= '0' && b <= '9' && i > 0)) { + return false + } + } + return true +} + // UnmarshalYAML implements the yaml.Unmarshaler interface. func (ln *LabelName) UnmarshalYAML(unmarshal func(interface{}) error) error { var s string if err := unmarshal(&s); err != nil { return err } - if !LabelNameRE.MatchString(s) { + if !LabelName(s).IsValid() { return fmt.Errorf("%q is not a valid label name", s) } *ln = LabelName(s) @@ -88,7 +123,7 @@ func (ln *LabelName) UnmarshalJSON(b []byte) error { if err := json.Unmarshal(b, &s); err != nil { return err } - if !LabelNameRE.MatchString(s) { + if !LabelName(s).IsValid() { return fmt.Errorf("%q is not a valid label name", s) } *ln = LabelName(s) @@ -117,3 +152,59 @@ func (l LabelNames) String() string { } return strings.Join(labelStrings, ", ") } + +// A LabelValue is an associated value for a LabelName. +type LabelValue string + +// IsValid returns true iff the string is a valid UTF8. +func (lv LabelValue) IsValid() bool { + return utf8.ValidString(string(lv)) +} + +// LabelValues is a sortable LabelValue slice. It implements sort.Interface. +type LabelValues []LabelValue + +func (l LabelValues) Len() int { + return len(l) +} + +func (l LabelValues) Less(i, j int) bool { + return string(l[i]) < string(l[j]) +} + +func (l LabelValues) Swap(i, j int) { + l[i], l[j] = l[j], l[i] +} + +// LabelPair pairs a name with a value. +type LabelPair struct { + Name LabelName + Value LabelValue +} + +// LabelPairs is a sortable slice of LabelPair pointers. It implements +// sort.Interface. +type LabelPairs []*LabelPair + +func (l LabelPairs) Len() int { + return len(l) +} + +func (l LabelPairs) Less(i, j int) bool { + switch { + case l[i].Name > l[j].Name: + return false + case l[i].Name < l[j].Name: + return true + case l[i].Value > l[j].Value: + return false + case l[i].Value < l[j].Value: + return true + default: + return false + } +} + +func (l LabelPairs) Swap(i, j int) { + l[i], l[j] = l[j], l[i] +} diff --git a/vendor/github.com/prometheus/common/model/labels_test.go b/vendor/github.com/prometheus/common/model/labels_test.go new file mode 100644 index 0000000..e8df28f --- /dev/null +++ b/vendor/github.com/prometheus/common/model/labels_test.go @@ -0,0 +1,140 @@ +// Copyright 2013 The Prometheus 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 model + +import ( + "sort" + "testing" +) + +func testLabelNames(t testing.TB) { + var scenarios = []struct { + in LabelNames + out LabelNames + }{ + { + in: LabelNames{"ZZZ", "zzz"}, + out: LabelNames{"ZZZ", "zzz"}, + }, + { + in: LabelNames{"aaa", "AAA"}, + out: LabelNames{"AAA", "aaa"}, + }, + } + + for i, scenario := range scenarios { + sort.Sort(scenario.in) + + for j, expected := range scenario.out { + if expected != scenario.in[j] { + t.Errorf("%d.%d expected %s, got %s", i, j, expected, scenario.in[j]) + } + } + } +} + +func TestLabelNames(t *testing.T) { + testLabelNames(t) +} + +func BenchmarkLabelNames(b *testing.B) { + for i := 0; i < b.N; i++ { + testLabelNames(b) + } +} + +func testLabelValues(t testing.TB) { + var scenarios = []struct { + in LabelValues + out LabelValues + }{ + { + in: LabelValues{"ZZZ", "zzz"}, + out: LabelValues{"ZZZ", "zzz"}, + }, + { + in: LabelValues{"aaa", "AAA"}, + out: LabelValues{"AAA", "aaa"}, + }, + } + + for i, scenario := range scenarios { + sort.Sort(scenario.in) + + for j, expected := range scenario.out { + if expected != scenario.in[j] { + t.Errorf("%d.%d expected %s, got %s", i, j, expected, scenario.in[j]) + } + } + } +} + +func TestLabelValues(t *testing.T) { + testLabelValues(t) +} + +func BenchmarkLabelValues(b *testing.B) { + for i := 0; i < b.N; i++ { + testLabelValues(b) + } +} + +func TestLabelNameIsValid(t *testing.T) { + var scenarios = []struct { + ln LabelName + valid bool + }{ + { + ln: "Avalid_23name", + valid: true, + }, + { + ln: "_Avalid_23name", + valid: true, + }, + { + ln: "1valid_23name", + valid: false, + }, + { + ln: "avalid_23name", + valid: true, + }, + { + ln: "Ava:lid_23name", + valid: false, + }, + { + ln: "a lid_23name", + valid: false, + }, + { + ln: ":leading_colon", + valid: false, + }, + { + ln: "colon:in:the:middle", + valid: false, + }, + } + + for _, s := range scenarios { + if s.ln.IsValid() != s.valid { + t.Errorf("Expected %v for %q using IsValid method", s.valid, s.ln) + } + if LabelNameRE.MatchString(string(s.ln)) != s.valid { + t.Errorf("Expected %v for %q using regexp match", s.valid, s.ln) + } + } +} diff --git a/vendor/github.com/prometheus/common/model/labelset.go b/vendor/github.com/prometheus/common/model/labelset.go new file mode 100644 index 0000000..6eda08a --- /dev/null +++ b/vendor/github.com/prometheus/common/model/labelset.go @@ -0,0 +1,169 @@ +// Copyright 2013 The Prometheus 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 model + +import ( + "encoding/json" + "fmt" + "sort" + "strings" +) + +// A LabelSet is a collection of LabelName and LabelValue pairs. The LabelSet +// may be fully-qualified down to the point where it may resolve to a single +// Metric in the data store or not. All operations that occur within the realm +// of a LabelSet can emit a vector of Metric entities to which the LabelSet may +// match. +type LabelSet map[LabelName]LabelValue + +// Validate checks whether all names and values in the label set +// are valid. +func (ls LabelSet) Validate() error { + for ln, lv := range ls { + if !ln.IsValid() { + return fmt.Errorf("invalid name %q", ln) + } + if !lv.IsValid() { + return fmt.Errorf("invalid value %q", lv) + } + } + return nil +} + +// Equal returns true iff both label sets have exactly the same key/value pairs. +func (ls LabelSet) Equal(o LabelSet) bool { + if len(ls) != len(o) { + return false + } + for ln, lv := range ls { + olv, ok := o[ln] + if !ok { + return false + } + if olv != lv { + return false + } + } + return true +} + +// Before compares the metrics, using the following criteria: +// +// If m has fewer labels than o, it is before o. If it has more, it is not. +// +// If the number of labels is the same, the superset of all label names is +// sorted alphanumerically. The first differing label pair found in that order +// determines the outcome: If the label does not exist at all in m, then m is +// before o, and vice versa. Otherwise the label value is compared +// alphanumerically. +// +// If m and o are equal, the method returns false. +func (ls LabelSet) Before(o LabelSet) bool { + if len(ls) < len(o) { + return true + } + if len(ls) > len(o) { + return false + } + + lns := make(LabelNames, 0, len(ls)+len(o)) + for ln := range ls { + lns = append(lns, ln) + } + for ln := range o { + lns = append(lns, ln) + } + // It's probably not worth it to de-dup lns. + sort.Sort(lns) + for _, ln := range lns { + mlv, ok := ls[ln] + if !ok { + return true + } + olv, ok := o[ln] + if !ok { + return false + } + if mlv < olv { + return true + } + if mlv > olv { + return false + } + } + return false +} + +// Clone returns a copy of the label set. +func (ls LabelSet) Clone() LabelSet { + lsn := make(LabelSet, len(ls)) + for ln, lv := range ls { + lsn[ln] = lv + } + return lsn +} + +// Merge is a helper function to non-destructively merge two label sets. +func (l LabelSet) Merge(other LabelSet) LabelSet { + result := make(LabelSet, len(l)) + + for k, v := range l { + result[k] = v + } + + for k, v := range other { + result[k] = v + } + + return result +} + +func (l LabelSet) String() string { + lstrs := make([]string, 0, len(l)) + for l, v := range l { + lstrs = append(lstrs, fmt.Sprintf("%s=%q", l, v)) + } + + sort.Strings(lstrs) + return fmt.Sprintf("{%s}", strings.Join(lstrs, ", ")) +} + +// Fingerprint returns the LabelSet's fingerprint. +func (ls LabelSet) Fingerprint() Fingerprint { + return labelSetToFingerprint(ls) +} + +// FastFingerprint returns the LabelSet's Fingerprint calculated by a faster hashing +// algorithm, which is, however, more susceptible to hash collisions. +func (ls LabelSet) FastFingerprint() Fingerprint { + return labelSetToFastFingerprint(ls) +} + +// UnmarshalJSON implements the json.Unmarshaler interface. +func (l *LabelSet) UnmarshalJSON(b []byte) error { + var m map[LabelName]LabelValue + if err := json.Unmarshal(b, &m); err != nil { + return err + } + // encoding/json only unmarshals maps of the form map[string]T. It treats + // LabelName as a string and does not call its UnmarshalJSON method. + // Thus, we have to replicate the behavior here. + for ln := range m { + if !ln.IsValid() { + return fmt.Errorf("%q is not a valid label name", ln) + } + } + *l = LabelSet(m) + return nil +} diff --git a/vendor/github.com/prometheus/common/model/metric.go b/vendor/github.com/prometheus/common/model/metric.go new file mode 100644 index 0000000..f725090 --- /dev/null +++ b/vendor/github.com/prometheus/common/model/metric.go @@ -0,0 +1,103 @@ +// Copyright 2013 The Prometheus 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 model + +import ( + "fmt" + "regexp" + "sort" + "strings" +) + +var ( + separator = []byte{0} + // MetricNameRE is a regular expression matching valid metric + // names. Note that the IsValidMetricName function performs the same + // check but faster than a match with this regular expression. + MetricNameRE = regexp.MustCompile(`^[a-zA-Z_:][a-zA-Z0-9_:]*$`) +) + +// A Metric is similar to a LabelSet, but the key difference is that a Metric is +// a singleton and refers to one and only one stream of samples. +type Metric LabelSet + +// Equal compares the metrics. +func (m Metric) Equal(o Metric) bool { + return LabelSet(m).Equal(LabelSet(o)) +} + +// Before compares the metrics' underlying label sets. +func (m Metric) Before(o Metric) bool { + return LabelSet(m).Before(LabelSet(o)) +} + +// Clone returns a copy of the Metric. +func (m Metric) Clone() Metric { + clone := make(Metric, len(m)) + for k, v := range m { + clone[k] = v + } + return clone +} + +func (m Metric) String() string { + metricName, hasName := m[MetricNameLabel] + numLabels := len(m) - 1 + if !hasName { + numLabels = len(m) + } + labelStrings := make([]string, 0, numLabels) + for label, value := range m { + if label != MetricNameLabel { + labelStrings = append(labelStrings, fmt.Sprintf("%s=%q", label, value)) + } + } + + switch numLabels { + case 0: + if hasName { + return string(metricName) + } + return "{}" + default: + sort.Strings(labelStrings) + return fmt.Sprintf("%s{%s}", metricName, strings.Join(labelStrings, ", ")) + } +} + +// Fingerprint returns a Metric's Fingerprint. +func (m Metric) Fingerprint() Fingerprint { + return LabelSet(m).Fingerprint() +} + +// FastFingerprint returns a Metric's Fingerprint calculated by a faster hashing +// algorithm, which is, however, more susceptible to hash collisions. +func (m Metric) FastFingerprint() Fingerprint { + return LabelSet(m).FastFingerprint() +} + +// IsValidMetricName returns true iff name matches the pattern of MetricNameRE. +// This function, however, does not use MetricNameRE for the check but a much +// faster hardcoded implementation. +func IsValidMetricName(n LabelValue) bool { + if len(n) == 0 { + return false + } + for i, b := range n { + if !((b >= 'a' && b <= 'z') || (b >= 'A' && b <= 'Z') || b == '_' || b == ':' || (b >= '0' && b <= '9' && i > 0)) { + return false + } + } + return true +} diff --git a/vendor/github.com/prometheus/client_golang/model/metric_test.go b/vendor/github.com/prometheus/common/model/metric_test.go similarity index 59% rename from vendor/github.com/prometheus/client_golang/model/metric_test.go rename to vendor/github.com/prometheus/common/model/metric_test.go index 5dbc023..06f9de5 100644 --- a/vendor/github.com/prometheus/client_golang/model/metric_test.go +++ b/vendor/github.com/prometheus/common/model/metric_test.go @@ -17,17 +17,17 @@ import "testing" func testMetric(t testing.TB) { var scenarios = []struct { - input Metric + input LabelSet fingerprint Fingerprint fastFingerprint Fingerprint }{ { - input: Metric{}, + input: LabelSet{}, fingerprint: 14695981039346656037, fastFingerprint: 14695981039346656037, }, { - input: Metric{ + input: LabelSet{ "first_name": "electro", "occupation": "robot", "manufacturer": "westinghouse", @@ -36,14 +36,14 @@ func testMetric(t testing.TB) { fastFingerprint: 11310079640881077873, }, { - input: Metric{ + input: LabelSet{ "x": "y", }, fingerprint: 8241431561484471700, fastFingerprint: 13948396922932177635, }, { - input: Metric{ + input: LabelSet{ "a": "bb", "b": "c", }, @@ -51,7 +51,7 @@ func testMetric(t testing.TB) { fastFingerprint: 3198632812309449502, }, { - input: Metric{ + input: LabelSet{ "a": "b", "bb": "c", }, @@ -61,11 +61,13 @@ func testMetric(t testing.TB) { } for i, scenario := range scenarios { - if scenario.fingerprint != scenario.input.Fingerprint() { - t.Errorf("%d. expected %d, got %d", i, scenario.fingerprint, scenario.input.Fingerprint()) + input := Metric(scenario.input) + + if scenario.fingerprint != input.Fingerprint() { + t.Errorf("%d. expected %d, got %d", i, scenario.fingerprint, input.Fingerprint()) } - if scenario.fastFingerprint != scenario.input.FastFingerprint() { - t.Errorf("%d. expected %d, got %d", i, scenario.fastFingerprint, scenario.input.FastFingerprint()) + if scenario.fastFingerprint != input.FastFingerprint() { + t.Errorf("%d. expected %d, got %d", i, scenario.fastFingerprint, input.FastFingerprint()) } } } @@ -80,51 +82,51 @@ func BenchmarkMetric(b *testing.B) { } } -func TestCOWMetric(t *testing.T) { - testMetric := Metric{ - "to_delete": "test1", - "to_change": "test2", - } - - scenarios := []struct { - fn func(*COWMetric) - out Metric +func TestMetricNameIsValid(t *testing.T) { + var scenarios = []struct { + mn LabelValue + valid bool }{ { - fn: func(cm *COWMetric) { - cm.Delete("to_delete") - }, - out: Metric{ - "to_change": "test2", - }, + mn: "Avalid_23name", + valid: true, }, { - fn: func(cm *COWMetric) { - cm.Set("to_change", "changed") - }, - out: Metric{ - "to_delete": "test1", - "to_change": "changed", - }, + mn: "_Avalid_23name", + valid: true, + }, + { + mn: "1valid_23name", + valid: false, + }, + { + mn: "avalid_23name", + valid: true, + }, + { + mn: "Ava:lid_23name", + valid: true, + }, + { + mn: "a lid_23name", + valid: false, + }, + { + mn: ":leading_colon", + valid: true, + }, + { + mn: "colon:in:the:middle", + valid: true, }, } - for i, s := range scenarios { - orig := testMetric.Clone() - cm := &COWMetric{ - Metric: orig, + for _, s := range scenarios { + if IsValidMetricName(s.mn) != s.valid { + t.Errorf("Expected %v for %q using IsValidMetricName function", s.valid, s.mn) } - - s.fn(cm) - - // Test that the original metric was not modified. - if !orig.Equal(testMetric) { - t.Fatalf("%d. original metric changed; expected %v, got %v", i, testMetric, orig) - } - - // Test that the new metric has the right changes. - if !cm.Metric.Equal(s.out) { - t.Fatalf("%d. copied metric doesn't contain expected changes; expected %v, got %v", i, s.out, cm.Metric) + if MetricNameRE.MatchString(string(s.mn)) != s.valid { + t.Errorf("Expected %v for %q using regexp matching", s.valid, s.mn) } } } diff --git a/vendor/github.com/prometheus/client_golang/model/model.go b/vendor/github.com/prometheus/common/model/model.go similarity index 84% rename from vendor/github.com/prometheus/client_golang/model/model.go rename to vendor/github.com/prometheus/common/model/model.go index 189c5dc..a7b9691 100644 --- a/vendor/github.com/prometheus/client_golang/model/model.go +++ b/vendor/github.com/prometheus/common/model/model.go @@ -11,5 +11,6 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package model contains core representation of Prometheus client primitives. +// Package model contains common data structures that are shared across +// Prometheus components and libraries. package model diff --git a/vendor/github.com/prometheus/client_golang/model/signature.go b/vendor/github.com/prometheus/common/model/signature.go similarity index 57% rename from vendor/github.com/prometheus/client_golang/model/signature.go rename to vendor/github.com/prometheus/common/model/signature.go index 7bd58f4..8762b13 100644 --- a/vendor/github.com/prometheus/client_golang/model/signature.go +++ b/vendor/github.com/prometheus/common/model/signature.go @@ -14,11 +14,7 @@ package model import ( - "bytes" - "hash" - "hash/fnv" "sort" - "sync" ) // SeparatorByte is a byte that cannot occur in valid UTF-8 sequences and is @@ -28,30 +24,9 @@ const SeparatorByte byte = 255 var ( // cache the signature of an empty label set. - emptyLabelSignature = fnv.New64a().Sum64() - - hashAndBufPool sync.Pool + emptyLabelSignature = hashNew() ) -type hashAndBuf struct { - h hash.Hash64 - b bytes.Buffer -} - -func getHashAndBuf() *hashAndBuf { - hb := hashAndBufPool.Get() - if hb == nil { - return &hashAndBuf{h: fnv.New64a()} - } - return hb.(*hashAndBuf) -} - -func putHashAndBuf(hb *hashAndBuf) { - hb.h.Reset() - hb.b.Reset() - hashAndBufPool.Put(hb) -} - // LabelsToSignature returns a quasi-unique signature (i.e., fingerprint) for a // given label set. (Collisions are possible but unlikely if the number of label // sets the function is applied to is small.) @@ -66,67 +41,54 @@ func LabelsToSignature(labels map[string]string) uint64 { } sort.Strings(labelNames) - hb := getHashAndBuf() - defer putHashAndBuf(hb) - + sum := hashNew() for _, labelName := range labelNames { - hb.b.WriteString(labelName) - hb.b.WriteByte(SeparatorByte) - hb.b.WriteString(labels[labelName]) - hb.b.WriteByte(SeparatorByte) - hb.h.Write(hb.b.Bytes()) - hb.b.Reset() + sum = hashAdd(sum, labelName) + sum = hashAddByte(sum, SeparatorByte) + sum = hashAdd(sum, labels[labelName]) + sum = hashAddByte(sum, SeparatorByte) } - return hb.h.Sum64() + return sum } -// metricToFingerprint works exactly as LabelsToSignature but takes a Metric as +// labelSetToFingerprint works exactly as LabelsToSignature but takes a LabelSet as // parameter (rather than a label map) and returns a Fingerprint. -func metricToFingerprint(m Metric) Fingerprint { - if len(m) == 0 { +func labelSetToFingerprint(ls LabelSet) Fingerprint { + if len(ls) == 0 { return Fingerprint(emptyLabelSignature) } - labelNames := make(LabelNames, 0, len(m)) - for labelName := range m { + labelNames := make(LabelNames, 0, len(ls)) + for labelName := range ls { labelNames = append(labelNames, labelName) } sort.Sort(labelNames) - hb := getHashAndBuf() - defer putHashAndBuf(hb) - + sum := hashNew() for _, labelName := range labelNames { - hb.b.WriteString(string(labelName)) - hb.b.WriteByte(SeparatorByte) - hb.b.WriteString(string(m[labelName])) - hb.b.WriteByte(SeparatorByte) - hb.h.Write(hb.b.Bytes()) - hb.b.Reset() + sum = hashAdd(sum, string(labelName)) + sum = hashAddByte(sum, SeparatorByte) + sum = hashAdd(sum, string(ls[labelName])) + sum = hashAddByte(sum, SeparatorByte) } - return Fingerprint(hb.h.Sum64()) + return Fingerprint(sum) } -// metricToFastFingerprint works similar to metricToFingerprint but uses a +// labelSetToFastFingerprint works similar to labelSetToFingerprint but uses a // faster and less allocation-heavy hash function, which is more susceptible to // create hash collisions. Therefore, collision detection should be applied. -func metricToFastFingerprint(m Metric) Fingerprint { - if len(m) == 0 { +func labelSetToFastFingerprint(ls LabelSet) Fingerprint { + if len(ls) == 0 { return Fingerprint(emptyLabelSignature) } var result uint64 - hb := getHashAndBuf() - defer putHashAndBuf(hb) - - for labelName, labelValue := range m { - hb.b.WriteString(string(labelName)) - hb.b.WriteByte(SeparatorByte) - hb.b.WriteString(string(labelValue)) - hb.h.Write(hb.b.Bytes()) - result ^= hb.h.Sum64() - hb.h.Reset() - hb.b.Reset() + for labelName, labelValue := range ls { + sum := hashNew() + sum = hashAdd(sum, string(labelName)) + sum = hashAddByte(sum, SeparatorByte) + sum = hashAdd(sum, string(labelValue)) + result ^= sum } return Fingerprint(result) } @@ -135,25 +97,21 @@ func metricToFastFingerprint(m Metric) Fingerprint { // parameter (rather than a label map) and only includes the labels with the // specified LabelNames into the signature calculation. The labels passed in // will be sorted by this function. -func SignatureForLabels(m Metric, labels LabelNames) uint64 { - if len(m) == 0 || len(labels) == 0 { +func SignatureForLabels(m Metric, labels ...LabelName) uint64 { + if len(labels) == 0 { return emptyLabelSignature } - sort.Sort(labels) - - hb := getHashAndBuf() - defer putHashAndBuf(hb) + sort.Sort(LabelNames(labels)) + sum := hashNew() for _, label := range labels { - hb.b.WriteString(string(label)) - hb.b.WriteByte(SeparatorByte) - hb.b.WriteString(string(m[label])) - hb.b.WriteByte(SeparatorByte) - hb.h.Write(hb.b.Bytes()) - hb.b.Reset() + sum = hashAdd(sum, string(label)) + sum = hashAddByte(sum, SeparatorByte) + sum = hashAdd(sum, string(m[label])) + sum = hashAddByte(sum, SeparatorByte) } - return hb.h.Sum64() + return sum } // SignatureWithoutLabels works like LabelsToSignature but takes a Metric as @@ -175,16 +133,12 @@ func SignatureWithoutLabels(m Metric, labels map[LabelName]struct{}) uint64 { } sort.Sort(labelNames) - hb := getHashAndBuf() - defer putHashAndBuf(hb) - + sum := hashNew() for _, labelName := range labelNames { - hb.b.WriteString(string(labelName)) - hb.b.WriteByte(SeparatorByte) - hb.b.WriteString(string(m[labelName])) - hb.b.WriteByte(SeparatorByte) - hb.h.Write(hb.b.Bytes()) - hb.b.Reset() + sum = hashAdd(sum, string(labelName)) + sum = hashAddByte(sum, SeparatorByte) + sum = hashAdd(sum, string(m[labelName])) + sum = hashAddByte(sum, SeparatorByte) } - return hb.h.Sum64() + return sum } diff --git a/vendor/github.com/prometheus/client_golang/model/signature_test.go b/vendor/github.com/prometheus/common/model/signature_test.go similarity index 68% rename from vendor/github.com/prometheus/client_golang/model/signature_test.go rename to vendor/github.com/prometheus/common/model/signature_test.go index 01db531..d59c8a8 100644 --- a/vendor/github.com/prometheus/client_golang/model/signature_test.go +++ b/vendor/github.com/prometheus/common/model/signature_test.go @@ -45,21 +45,21 @@ func TestLabelsToSignature(t *testing.T) { func TestMetricToFingerprint(t *testing.T) { var scenarios = []struct { - in Metric + in LabelSet out Fingerprint }{ { - in: Metric{}, + in: LabelSet{}, out: 14695981039346656037, }, { - in: Metric{"name": "garland, briggs", "fear": "love is not enough"}, + in: LabelSet{"name": "garland, briggs", "fear": "love is not enough"}, out: 5799056148416392346, }, } for i, scenario := range scenarios { - actual := metricToFingerprint(scenario.in) + actual := labelSetToFingerprint(scenario.in) if actual != scenario.out { t.Errorf("%d. expected %d, got %d", i, scenario.out, actual) @@ -69,21 +69,21 @@ func TestMetricToFingerprint(t *testing.T) { func TestMetricToFastFingerprint(t *testing.T) { var scenarios = []struct { - in Metric + in LabelSet out Fingerprint }{ { - in: Metric{}, + in: LabelSet{}, out: 14695981039346656037, }, { - in: Metric{"name": "garland, briggs", "fear": "love is not enough"}, + in: LabelSet{"name": "garland, briggs", "fear": "love is not enough"}, out: 12952432476264840823, }, } for i, scenario := range scenarios { - actual := metricToFastFingerprint(scenario.in) + actual := labelSetToFastFingerprint(scenario.in) if actual != scenario.out { t.Errorf("%d. expected %d, got %d", i, scenario.out, actual) @@ -102,6 +102,16 @@ func TestSignatureForLabels(t *testing.T) { labels: nil, out: 14695981039346656037, }, + { + in: Metric{}, + labels: LabelNames{"empty"}, + out: 7187873163539638612, + }, + { + in: Metric{"name": "garland, briggs", "fear": "love is not enough"}, + labels: LabelNames{"empty"}, + out: 7187873163539638612, + }, { in: Metric{"name": "garland, briggs", "fear": "love is not enough"}, labels: LabelNames{"fear", "name"}, @@ -125,7 +135,7 @@ func TestSignatureForLabels(t *testing.T) { } for i, scenario := range scenarios { - actual := SignatureForLabels(scenario.in, scenario.labels) + actual := SignatureForLabels(scenario.in, scenario.labels...) if actual != scenario.out { t.Errorf("%d. expected %d, got %d", i, scenario.out, actual) @@ -199,10 +209,10 @@ func BenchmarkLabelToSignatureTriple(b *testing.B) { benchmarkLabelToSignature(b, map[string]string{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 13843036195897128121) } -func benchmarkMetricToFingerprint(b *testing.B, m Metric, e Fingerprint) { +func benchmarkMetricToFingerprint(b *testing.B, ls LabelSet, e Fingerprint) { for i := 0; i < b.N; i++ { - if a := metricToFingerprint(m); a != e { - b.Fatalf("expected signature of %d for %s, got %d", e, m, a) + if a := labelSetToFingerprint(ls); a != e { + b.Fatalf("expected signature of %d for %s, got %d", e, ls, a) } } } @@ -212,21 +222,21 @@ func BenchmarkMetricToFingerprintScalar(b *testing.B) { } func BenchmarkMetricToFingerprintSingle(b *testing.B) { - benchmarkMetricToFingerprint(b, Metric{"first-label": "first-label-value"}, 5146282821936882169) + benchmarkMetricToFingerprint(b, LabelSet{"first-label": "first-label-value"}, 5146282821936882169) } func BenchmarkMetricToFingerprintDouble(b *testing.B) { - benchmarkMetricToFingerprint(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value"}, 3195800080984914717) + benchmarkMetricToFingerprint(b, LabelSet{"first-label": "first-label-value", "second-label": "second-label-value"}, 3195800080984914717) } func BenchmarkMetricToFingerprintTriple(b *testing.B) { - benchmarkMetricToFingerprint(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 13843036195897128121) + benchmarkMetricToFingerprint(b, LabelSet{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 13843036195897128121) } -func benchmarkMetricToFastFingerprint(b *testing.B, m Metric, e Fingerprint) { +func benchmarkMetricToFastFingerprint(b *testing.B, ls LabelSet, e Fingerprint) { for i := 0; i < b.N; i++ { - if a := metricToFastFingerprint(m); a != e { - b.Fatalf("expected signature of %d for %s, got %d", e, m, a) + if a := labelSetToFastFingerprint(ls); a != e { + b.Fatalf("expected signature of %d for %s, got %d", e, ls, a) } } } @@ -236,18 +246,18 @@ func BenchmarkMetricToFastFingerprintScalar(b *testing.B) { } func BenchmarkMetricToFastFingerprintSingle(b *testing.B) { - benchmarkMetricToFastFingerprint(b, Metric{"first-label": "first-label-value"}, 5147259542624943964) + benchmarkMetricToFastFingerprint(b, LabelSet{"first-label": "first-label-value"}, 5147259542624943964) } func BenchmarkMetricToFastFingerprintDouble(b *testing.B) { - benchmarkMetricToFastFingerprint(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value"}, 18269973311206963528) + benchmarkMetricToFastFingerprint(b, LabelSet{"first-label": "first-label-value", "second-label": "second-label-value"}, 18269973311206963528) } func BenchmarkMetricToFastFingerprintTriple(b *testing.B) { - benchmarkMetricToFastFingerprint(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676) + benchmarkMetricToFastFingerprint(b, LabelSet{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676) } -func TestEmptyLabelSignature(t *testing.T) { +func BenchmarkEmptyLabelSignature(b *testing.B) { input := []map[string]string{nil, {}} var ms runtime.MemStats @@ -262,11 +272,11 @@ func TestEmptyLabelSignature(t *testing.T) { runtime.ReadMemStats(&ms) if got := ms.Alloc; alloc != got { - t.Fatal("expected LabelsToSignature with empty labels not to perform allocations") + b.Fatal("expected LabelsToSignature with empty labels not to perform allocations") } } -func benchmarkMetricToFastFingerprintConc(b *testing.B, m Metric, e Fingerprint, concLevel int) { +func benchmarkMetricToFastFingerprintConc(b *testing.B, ls LabelSet, e Fingerprint, concLevel int) { var start, end sync.WaitGroup start.Add(1) end.Add(concLevel) @@ -275,8 +285,8 @@ func benchmarkMetricToFastFingerprintConc(b *testing.B, m Metric, e Fingerprint, go func() { start.Wait() for j := b.N / concLevel; j >= 0; j-- { - if a := metricToFastFingerprint(m); a != e { - b.Fatalf("expected signature of %d for %s, got %d", e, m, a) + if a := labelSetToFastFingerprint(ls); a != e { + b.Fatalf("expected signature of %d for %s, got %d", e, ls, a) } } end.Done() @@ -288,17 +298,17 @@ func benchmarkMetricToFastFingerprintConc(b *testing.B, m Metric, e Fingerprint, } func BenchmarkMetricToFastFingerprintTripleConc1(b *testing.B) { - benchmarkMetricToFastFingerprintConc(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 1) + benchmarkMetricToFastFingerprintConc(b, LabelSet{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 1) } func BenchmarkMetricToFastFingerprintTripleConc2(b *testing.B) { - benchmarkMetricToFastFingerprintConc(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 2) + benchmarkMetricToFastFingerprintConc(b, LabelSet{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 2) } func BenchmarkMetricToFastFingerprintTripleConc4(b *testing.B) { - benchmarkMetricToFastFingerprintConc(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 4) + benchmarkMetricToFastFingerprintConc(b, LabelSet{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 4) } func BenchmarkMetricToFastFingerprintTripleConc8(b *testing.B) { - benchmarkMetricToFastFingerprintConc(b, Metric{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 8) + benchmarkMetricToFastFingerprintConc(b, LabelSet{"first-label": "first-label-value", "second-label": "second-label-value", "third-label": "third-label-value"}, 15738406913934009676, 8) } diff --git a/vendor/github.com/prometheus/common/model/silence.go b/vendor/github.com/prometheus/common/model/silence.go new file mode 100644 index 0000000..7538e29 --- /dev/null +++ b/vendor/github.com/prometheus/common/model/silence.go @@ -0,0 +1,106 @@ +// Copyright 2015 The Prometheus 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 model + +import ( + "encoding/json" + "fmt" + "regexp" + "time" +) + +// Matcher describes a matches the value of a given label. +type Matcher struct { + Name LabelName `json:"name"` + Value string `json:"value"` + IsRegex bool `json:"isRegex"` +} + +func (m *Matcher) UnmarshalJSON(b []byte) error { + type plain Matcher + if err := json.Unmarshal(b, (*plain)(m)); err != nil { + return err + } + + if len(m.Name) == 0 { + return fmt.Errorf("label name in matcher must not be empty") + } + if m.IsRegex { + if _, err := regexp.Compile(m.Value); err != nil { + return err + } + } + return nil +} + +// Validate returns true iff all fields of the matcher have valid values. +func (m *Matcher) Validate() error { + if !m.Name.IsValid() { + return fmt.Errorf("invalid name %q", m.Name) + } + if m.IsRegex { + if _, err := regexp.Compile(m.Value); err != nil { + return fmt.Errorf("invalid regular expression %q", m.Value) + } + } else if !LabelValue(m.Value).IsValid() || len(m.Value) == 0 { + return fmt.Errorf("invalid value %q", m.Value) + } + return nil +} + +// Silence defines the representation of a silence definiton +// in the Prometheus eco-system. +type Silence struct { + ID uint64 `json:"id,omitempty"` + + Matchers []*Matcher `json:"matchers"` + + StartsAt time.Time `json:"startsAt"` + EndsAt time.Time `json:"endsAt"` + + CreatedAt time.Time `json:"createdAt,omitempty"` + CreatedBy string `json:"createdBy"` + Comment string `json:"comment,omitempty"` +} + +// Validate returns true iff all fields of the silence have valid values. +func (s *Silence) Validate() error { + if len(s.Matchers) == 0 { + return fmt.Errorf("at least one matcher required") + } + for _, m := range s.Matchers { + if err := m.Validate(); err != nil { + return fmt.Errorf("invalid matcher: %s", err) + } + } + if s.StartsAt.IsZero() { + return fmt.Errorf("start time missing") + } + if s.EndsAt.IsZero() { + return fmt.Errorf("end time missing") + } + if s.EndsAt.Before(s.StartsAt) { + return fmt.Errorf("start time must be before end time") + } + if s.CreatedBy == "" { + return fmt.Errorf("creator information missing") + } + if s.Comment == "" { + return fmt.Errorf("comment missing") + } + if s.CreatedAt.IsZero() { + return fmt.Errorf("creation timestamp missing") + } + return nil +} diff --git a/vendor/github.com/prometheus/common/model/silence_test.go b/vendor/github.com/prometheus/common/model/silence_test.go new file mode 100644 index 0000000..8eaaf07 --- /dev/null +++ b/vendor/github.com/prometheus/common/model/silence_test.go @@ -0,0 +1,228 @@ +// Copyright 2015 The Prometheus 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 model + +import ( + "strings" + "testing" + "time" +) + +func TestMatcherValidate(t *testing.T) { + var cases = []struct { + matcher *Matcher + err string + }{ + { + matcher: &Matcher{ + Name: "name", + Value: "value", + }, + }, + { + matcher: &Matcher{ + Name: "name", + Value: "value", + IsRegex: true, + }, + }, + { + matcher: &Matcher{ + Name: "name!", + Value: "value", + }, + err: "invalid name", + }, + { + matcher: &Matcher{ + Name: "", + Value: "value", + }, + err: "invalid name", + }, + { + matcher: &Matcher{ + Name: "name", + Value: "value\xff", + }, + err: "invalid value", + }, + { + matcher: &Matcher{ + Name: "name", + Value: "", + }, + err: "invalid value", + }, + } + + for i, c := range cases { + err := c.matcher.Validate() + if err == nil { + if c.err == "" { + continue + } + t.Errorf("%d. Expected error %q but got none", i, c.err) + continue + } + if c.err == "" && err != nil { + t.Errorf("%d. Expected no error but got %q", i, err) + continue + } + if !strings.Contains(err.Error(), c.err) { + t.Errorf("%d. Expected error to contain %q but got %q", i, c.err, err) + } + } +} + +func TestSilenceValidate(t *testing.T) { + ts := time.Now() + + var cases = []struct { + sil *Silence + err string + }{ + { + sil: &Silence{ + Matchers: []*Matcher{ + {Name: "name", Value: "value"}, + }, + StartsAt: ts, + EndsAt: ts, + CreatedAt: ts, + CreatedBy: "name", + Comment: "comment", + }, + }, + { + sil: &Silence{ + Matchers: []*Matcher{ + {Name: "name", Value: "value"}, + {Name: "name", Value: "value"}, + {Name: "name", Value: "value"}, + {Name: "name", Value: "value", IsRegex: true}, + }, + StartsAt: ts, + EndsAt: ts, + CreatedAt: ts, + CreatedBy: "name", + Comment: "comment", + }, + }, + { + sil: &Silence{ + Matchers: []*Matcher{ + {Name: "name", Value: "value"}, + }, + StartsAt: ts, + EndsAt: ts.Add(-1 * time.Minute), + CreatedAt: ts, + CreatedBy: "name", + Comment: "comment", + }, + err: "start time must be before end time", + }, + { + sil: &Silence{ + Matchers: []*Matcher{ + {Name: "name", Value: "value"}, + }, + StartsAt: ts, + CreatedAt: ts, + CreatedBy: "name", + Comment: "comment", + }, + err: "end time missing", + }, + { + sil: &Silence{ + Matchers: []*Matcher{ + {Name: "name", Value: "value"}, + }, + EndsAt: ts, + CreatedAt: ts, + CreatedBy: "name", + Comment: "comment", + }, + err: "start time missing", + }, + { + sil: &Silence{ + Matchers: []*Matcher{ + {Name: "!name", Value: "value"}, + }, + StartsAt: ts, + EndsAt: ts, + CreatedAt: ts, + CreatedBy: "name", + Comment: "comment", + }, + err: "invalid matcher", + }, + { + sil: &Silence{ + Matchers: []*Matcher{ + {Name: "name", Value: "value"}, + }, + StartsAt: ts, + EndsAt: ts, + CreatedAt: ts, + CreatedBy: "name", + }, + err: "comment missing", + }, + { + sil: &Silence{ + Matchers: []*Matcher{ + {Name: "name", Value: "value"}, + }, + StartsAt: ts, + EndsAt: ts, + CreatedBy: "name", + Comment: "comment", + }, + err: "creation timestamp missing", + }, + { + sil: &Silence{ + Matchers: []*Matcher{ + {Name: "name", Value: "value"}, + }, + StartsAt: ts, + EndsAt: ts, + CreatedAt: ts, + Comment: "comment", + }, + err: "creator information missing", + }, + } + + for i, c := range cases { + err := c.sil.Validate() + if err == nil { + if c.err == "" { + continue + } + t.Errorf("%d. Expected error %q but got none", i, c.err) + continue + } + if c.err == "" && err != nil { + t.Errorf("%d. Expected no error but got %q", i, err) + continue + } + if !strings.Contains(err.Error(), c.err) { + t.Errorf("%d. Expected error to contain %q but got %q", i, c.err, err) + } + } +} diff --git a/vendor/github.com/prometheus/common/model/time.go b/vendor/github.com/prometheus/common/model/time.go new file mode 100644 index 0000000..7e87f1a --- /dev/null +++ b/vendor/github.com/prometheus/common/model/time.go @@ -0,0 +1,261 @@ +// Copyright 2013 The Prometheus 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 model + +import ( + "fmt" + "math" + "regexp" + "strconv" + "strings" + "time" +) + +const ( + // MinimumTick is the minimum supported time resolution. This has to be + // at least time.Second in order for the code below to work. + minimumTick = time.Millisecond + // second is the Time duration equivalent to one second. + second = int64(time.Second / minimumTick) + // The number of nanoseconds per minimum tick. + nanosPerTick = int64(minimumTick / time.Nanosecond) + + // Earliest is the earliest Time representable. Handy for + // initializing a high watermark. + Earliest = Time(math.MinInt64) + // Latest is the latest Time representable. Handy for initializing + // a low watermark. + Latest = Time(math.MaxInt64) +) + +// Time is the number of milliseconds since the epoch +// (1970-01-01 00:00 UTC) excluding leap seconds. +type Time int64 + +// Interval describes and interval between two timestamps. +type Interval struct { + Start, End Time +} + +// Now returns the current time as a Time. +func Now() Time { + return TimeFromUnixNano(time.Now().UnixNano()) +} + +// TimeFromUnix returns the Time equivalent to the Unix Time t +// provided in seconds. +func TimeFromUnix(t int64) Time { + return Time(t * second) +} + +// TimeFromUnixNano returns the Time equivalent to the Unix Time +// t provided in nanoseconds. +func TimeFromUnixNano(t int64) Time { + return Time(t / nanosPerTick) +} + +// Equal reports whether two Times represent the same instant. +func (t Time) Equal(o Time) bool { + return t == o +} + +// Before reports whether the Time t is before o. +func (t Time) Before(o Time) bool { + return t < o +} + +// After reports whether the Time t is after o. +func (t Time) After(o Time) bool { + return t > o +} + +// Add returns the Time t + d. +func (t Time) Add(d time.Duration) Time { + return t + Time(d/minimumTick) +} + +// Sub returns the Duration t - o. +func (t Time) Sub(o Time) time.Duration { + return time.Duration(t-o) * minimumTick +} + +// Time returns the time.Time representation of t. +func (t Time) Time() time.Time { + return time.Unix(int64(t)/second, (int64(t)%second)*nanosPerTick) +} + +// Unix returns t as a Unix time, the number of seconds elapsed +// since January 1, 1970 UTC. +func (t Time) Unix() int64 { + return int64(t) / second +} + +// UnixNano returns t as a Unix time, the number of nanoseconds elapsed +// since January 1, 1970 UTC. +func (t Time) UnixNano() int64 { + return int64(t) * nanosPerTick +} + +// The number of digits after the dot. +var dotPrecision = int(math.Log10(float64(second))) + +// String returns a string representation of the Time. +func (t Time) String() string { + return strconv.FormatFloat(float64(t)/float64(second), 'f', -1, 64) +} + +// MarshalJSON implements the json.Marshaler interface. +func (t Time) MarshalJSON() ([]byte, error) { + return []byte(t.String()), nil +} + +// UnmarshalJSON implements the json.Unmarshaler interface. +func (t *Time) UnmarshalJSON(b []byte) error { + p := strings.Split(string(b), ".") + switch len(p) { + case 1: + v, err := strconv.ParseInt(string(p[0]), 10, 64) + if err != nil { + return err + } + *t = Time(v * second) + + case 2: + v, err := strconv.ParseInt(string(p[0]), 10, 64) + if err != nil { + return err + } + v *= second + + prec := dotPrecision - len(p[1]) + if prec < 0 { + p[1] = p[1][:dotPrecision] + } else if prec > 0 { + p[1] = p[1] + strings.Repeat("0", prec) + } + + va, err := strconv.ParseInt(p[1], 10, 32) + if err != nil { + return err + } + + *t = Time(v + va) + + default: + return fmt.Errorf("invalid time %q", string(b)) + } + return nil +} + +// Duration wraps time.Duration. It is used to parse the custom duration format +// from YAML. +// This type should not propagate beyond the scope of input/output processing. +type Duration time.Duration + +// Set implements pflag/flag.Value +func (d *Duration) Set(s string) error { + var err error + *d, err = ParseDuration(s) + return err +} + +// Type implements pflag.Value +func (d *Duration) Type() string { + return "duration" +} + +var durationRE = regexp.MustCompile("^([0-9]+)(y|w|d|h|m|s|ms)$") + +// ParseDuration parses a string into a time.Duration, assuming that a year +// always has 365d, a week always has 7d, and a day always has 24h. +func ParseDuration(durationStr string) (Duration, error) { + matches := durationRE.FindStringSubmatch(durationStr) + if len(matches) != 3 { + return 0, fmt.Errorf("not a valid duration string: %q", durationStr) + } + var ( + n, _ = strconv.Atoi(matches[1]) + dur = time.Duration(n) * time.Millisecond + ) + switch unit := matches[2]; unit { + case "y": + dur *= 1000 * 60 * 60 * 24 * 365 + case "w": + dur *= 1000 * 60 * 60 * 24 * 7 + case "d": + dur *= 1000 * 60 * 60 * 24 + case "h": + dur *= 1000 * 60 * 60 + case "m": + dur *= 1000 * 60 + case "s": + dur *= 1000 + case "ms": + // Value already correct + default: + return 0, fmt.Errorf("invalid time unit in duration string: %q", unit) + } + return Duration(dur), nil +} + +func (d Duration) String() string { + var ( + ms = int64(time.Duration(d) / time.Millisecond) + unit = "ms" + ) + factors := map[string]int64{ + "y": 1000 * 60 * 60 * 24 * 365, + "w": 1000 * 60 * 60 * 24 * 7, + "d": 1000 * 60 * 60 * 24, + "h": 1000 * 60 * 60, + "m": 1000 * 60, + "s": 1000, + "ms": 1, + } + + switch int64(0) { + case ms % factors["y"]: + unit = "y" + case ms % factors["w"]: + unit = "w" + case ms % factors["d"]: + unit = "d" + case ms % factors["h"]: + unit = "h" + case ms % factors["m"]: + unit = "m" + case ms % factors["s"]: + unit = "s" + } + return fmt.Sprintf("%v%v", ms/factors[unit], unit) +} + +// MarshalYAML implements the yaml.Marshaler interface. +func (d Duration) MarshalYAML() (interface{}, error) { + return d.String(), nil +} + +// UnmarshalYAML implements the yaml.Unmarshaler interface. +func (d *Duration) UnmarshalYAML(unmarshal func(interface{}) error) error { + var s string + if err := unmarshal(&s); err != nil { + return err + } + dur, err := ParseDuration(s) + if err != nil { + return err + } + *d = dur + return nil +} diff --git a/vendor/github.com/prometheus/client_golang/model/timestamp_test.go b/vendor/github.com/prometheus/common/model/time_test.go similarity index 59% rename from vendor/github.com/prometheus/client_golang/model/timestamp_test.go rename to vendor/github.com/prometheus/common/model/time_test.go index fa028a4..45ffd87 100644 --- a/vendor/github.com/prometheus/client_golang/model/timestamp_test.go +++ b/vendor/github.com/prometheus/common/model/time_test.go @@ -15,13 +15,13 @@ package model import ( "testing" - native_time "time" + "time" ) func TestComparators(t *testing.T) { - t1a := TimestampFromUnix(0) - t1b := TimestampFromUnix(0) - t2 := TimestampFromUnix(2*second - 1) + t1a := TimeFromUnix(0) + t1b := TimeFromUnix(0) + t2 := TimeFromUnix(2*second - 1) if !t1a.Equal(t1b) { t.Fatalf("Expected %s to be equal to %s", t1a, t1b) @@ -45,21 +45,21 @@ func TestComparators(t *testing.T) { } } -func TestTimestampConversions(t *testing.T) { +func TestTimeConversions(t *testing.T) { unixSecs := int64(1136239445) unixNsecs := int64(123456789) - unixNano := unixSecs*1000000000 + unixNsecs + unixNano := unixSecs*1e9 + unixNsecs - t1 := native_time.Unix(unixSecs, unixNsecs-unixNsecs%nanosPerTick) - t2 := native_time.Unix(unixSecs, unixNsecs) + t1 := time.Unix(unixSecs, unixNsecs-unixNsecs%nanosPerTick) + t2 := time.Unix(unixSecs, unixNsecs) - ts := TimestampFromUnixNano(unixNano) + ts := TimeFromUnixNano(unixNano) if !ts.Time().Equal(t1) { t.Fatalf("Expected %s, got %s", t1, ts.Time()) } // Test available precision. - ts = TimestampFromTime(t2) + ts = TimeFromUnixNano(t2.UnixNano()) if !ts.Time().Equal(t1) { t.Fatalf("Expected %s, got %s", t1, ts.Time()) } @@ -70,10 +70,10 @@ func TestTimestampConversions(t *testing.T) { } func TestDuration(t *testing.T) { - duration := native_time.Second + native_time.Minute + native_time.Hour - goTime := native_time.Unix(1136239445, 0) + duration := time.Second + time.Minute + time.Hour + goTime := time.Unix(1136239445, 0) - ts := TimestampFromTime(goTime) + ts := TimeFromUnix(goTime.Unix()) if !goTime.Add(duration).Equal(ts.Add(duration).Time()) { t.Fatalf("Expected %s to be equal to %s", goTime.Add(duration), ts.Add(duration)) } @@ -84,3 +84,46 @@ func TestDuration(t *testing.T) { t.Fatalf("Expected %s to be equal to %s", delta, duration) } } + +func TestParseDuration(t *testing.T) { + var cases = []struct { + in string + out time.Duration + }{ + { + in: "324ms", + out: 324 * time.Millisecond, + }, { + in: "3s", + out: 3 * time.Second, + }, { + in: "5m", + out: 5 * time.Minute, + }, { + in: "1h", + out: time.Hour, + }, { + in: "4d", + out: 4 * 24 * time.Hour, + }, { + in: "3w", + out: 3 * 7 * 24 * time.Hour, + }, { + in: "10y", + out: 10 * 365 * 24 * time.Hour, + }, + } + + for _, c := range cases { + d, err := ParseDuration(c.in) + if err != nil { + t.Errorf("Unexpected error on input %q", c.in) + } + if time.Duration(d) != c.out { + t.Errorf("Expected %v but got %v", c.out, d) + } + if d.String() != c.in { + t.Errorf("Expected duration string %q but got %q", c.in, d.String()) + } + } +} diff --git a/vendor/github.com/prometheus/common/model/value.go b/vendor/github.com/prometheus/common/model/value.go new file mode 100644 index 0000000..c9ed3ff --- /dev/null +++ b/vendor/github.com/prometheus/common/model/value.go @@ -0,0 +1,416 @@ +// Copyright 2013 The Prometheus 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 model + +import ( + "encoding/json" + "fmt" + "math" + "sort" + "strconv" + "strings" +) + +var ( + // ZeroSamplePair is the pseudo zero-value of SamplePair used to signal a + // non-existing sample pair. It is a SamplePair with timestamp Earliest and + // value 0.0. Note that the natural zero value of SamplePair has a timestamp + // of 0, which is possible to appear in a real SamplePair and thus not + // suitable to signal a non-existing SamplePair. + ZeroSamplePair = SamplePair{Timestamp: Earliest} + + // ZeroSample is the pseudo zero-value of Sample used to signal a + // non-existing sample. It is a Sample with timestamp Earliest, value 0.0, + // and metric nil. Note that the natural zero value of Sample has a timestamp + // of 0, which is possible to appear in a real Sample and thus not suitable + // to signal a non-existing Sample. + ZeroSample = Sample{Timestamp: Earliest} +) + +// A SampleValue is a representation of a value for a given sample at a given +// time. +type SampleValue float64 + +// MarshalJSON implements json.Marshaler. +func (v SampleValue) MarshalJSON() ([]byte, error) { + return json.Marshal(v.String()) +} + +// UnmarshalJSON implements json.Unmarshaler. +func (v *SampleValue) UnmarshalJSON(b []byte) error { + if len(b) < 2 || b[0] != '"' || b[len(b)-1] != '"' { + return fmt.Errorf("sample value must be a quoted string") + } + f, err := strconv.ParseFloat(string(b[1:len(b)-1]), 64) + if err != nil { + return err + } + *v = SampleValue(f) + return nil +} + +// Equal returns true if the value of v and o is equal or if both are NaN. Note +// that v==o is false if both are NaN. If you want the conventional float +// behavior, use == to compare two SampleValues. +func (v SampleValue) Equal(o SampleValue) bool { + if v == o { + return true + } + return math.IsNaN(float64(v)) && math.IsNaN(float64(o)) +} + +func (v SampleValue) String() string { + return strconv.FormatFloat(float64(v), 'f', -1, 64) +} + +// SamplePair pairs a SampleValue with a Timestamp. +type SamplePair struct { + Timestamp Time + Value SampleValue +} + +// MarshalJSON implements json.Marshaler. +func (s SamplePair) MarshalJSON() ([]byte, error) { + t, err := json.Marshal(s.Timestamp) + if err != nil { + return nil, err + } + v, err := json.Marshal(s.Value) + if err != nil { + return nil, err + } + return []byte(fmt.Sprintf("[%s,%s]", t, v)), nil +} + +// UnmarshalJSON implements json.Unmarshaler. +func (s *SamplePair) UnmarshalJSON(b []byte) error { + v := [...]json.Unmarshaler{&s.Timestamp, &s.Value} + return json.Unmarshal(b, &v) +} + +// Equal returns true if this SamplePair and o have equal Values and equal +// Timestamps. The sematics of Value equality is defined by SampleValue.Equal. +func (s *SamplePair) Equal(o *SamplePair) bool { + return s == o || (s.Value.Equal(o.Value) && s.Timestamp.Equal(o.Timestamp)) +} + +func (s SamplePair) String() string { + return fmt.Sprintf("%s @[%s]", s.Value, s.Timestamp) +} + +// Sample is a sample pair associated with a metric. +type Sample struct { + Metric Metric `json:"metric"` + Value SampleValue `json:"value"` + Timestamp Time `json:"timestamp"` +} + +// Equal compares first the metrics, then the timestamp, then the value. The +// sematics of value equality is defined by SampleValue.Equal. +func (s *Sample) Equal(o *Sample) bool { + if s == o { + return true + } + + if !s.Metric.Equal(o.Metric) { + return false + } + if !s.Timestamp.Equal(o.Timestamp) { + return false + } + + return s.Value.Equal(o.Value) +} + +func (s Sample) String() string { + return fmt.Sprintf("%s => %s", s.Metric, SamplePair{ + Timestamp: s.Timestamp, + Value: s.Value, + }) +} + +// MarshalJSON implements json.Marshaler. +func (s Sample) MarshalJSON() ([]byte, error) { + v := struct { + Metric Metric `json:"metric"` + Value SamplePair `json:"value"` + }{ + Metric: s.Metric, + Value: SamplePair{ + Timestamp: s.Timestamp, + Value: s.Value, + }, + } + + return json.Marshal(&v) +} + +// UnmarshalJSON implements json.Unmarshaler. +func (s *Sample) UnmarshalJSON(b []byte) error { + v := struct { + Metric Metric `json:"metric"` + Value SamplePair `json:"value"` + }{ + Metric: s.Metric, + Value: SamplePair{ + Timestamp: s.Timestamp, + Value: s.Value, + }, + } + + if err := json.Unmarshal(b, &v); err != nil { + return err + } + + s.Metric = v.Metric + s.Timestamp = v.Value.Timestamp + s.Value = v.Value.Value + + return nil +} + +// Samples is a sortable Sample slice. It implements sort.Interface. +type Samples []*Sample + +func (s Samples) Len() int { + return len(s) +} + +// Less compares first the metrics, then the timestamp. +func (s Samples) Less(i, j int) bool { + switch { + case s[i].Metric.Before(s[j].Metric): + return true + case s[j].Metric.Before(s[i].Metric): + return false + case s[i].Timestamp.Before(s[j].Timestamp): + return true + default: + return false + } +} + +func (s Samples) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +// Equal compares two sets of samples and returns true if they are equal. +func (s Samples) Equal(o Samples) bool { + if len(s) != len(o) { + return false + } + + for i, sample := range s { + if !sample.Equal(o[i]) { + return false + } + } + return true +} + +// SampleStream is a stream of Values belonging to an attached COWMetric. +type SampleStream struct { + Metric Metric `json:"metric"` + Values []SamplePair `json:"values"` +} + +func (ss SampleStream) String() string { + vals := make([]string, len(ss.Values)) + for i, v := range ss.Values { + vals[i] = v.String() + } + return fmt.Sprintf("%s =>\n%s", ss.Metric, strings.Join(vals, "\n")) +} + +// Value is a generic interface for values resulting from a query evaluation. +type Value interface { + Type() ValueType + String() string +} + +func (Matrix) Type() ValueType { return ValMatrix } +func (Vector) Type() ValueType { return ValVector } +func (*Scalar) Type() ValueType { return ValScalar } +func (*String) Type() ValueType { return ValString } + +type ValueType int + +const ( + ValNone ValueType = iota + ValScalar + ValVector + ValMatrix + ValString +) + +// MarshalJSON implements json.Marshaler. +func (et ValueType) MarshalJSON() ([]byte, error) { + return json.Marshal(et.String()) +} + +func (et *ValueType) UnmarshalJSON(b []byte) error { + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + switch s { + case "": + *et = ValNone + case "scalar": + *et = ValScalar + case "vector": + *et = ValVector + case "matrix": + *et = ValMatrix + case "string": + *et = ValString + default: + return fmt.Errorf("unknown value type %q", s) + } + return nil +} + +func (e ValueType) String() string { + switch e { + case ValNone: + return "" + case ValScalar: + return "scalar" + case ValVector: + return "vector" + case ValMatrix: + return "matrix" + case ValString: + return "string" + } + panic("ValueType.String: unhandled value type") +} + +// Scalar is a scalar value evaluated at the set timestamp. +type Scalar struct { + Value SampleValue `json:"value"` + Timestamp Time `json:"timestamp"` +} + +func (s Scalar) String() string { + return fmt.Sprintf("scalar: %v @[%v]", s.Value, s.Timestamp) +} + +// MarshalJSON implements json.Marshaler. +func (s Scalar) MarshalJSON() ([]byte, error) { + v := strconv.FormatFloat(float64(s.Value), 'f', -1, 64) + return json.Marshal([...]interface{}{s.Timestamp, string(v)}) +} + +// UnmarshalJSON implements json.Unmarshaler. +func (s *Scalar) UnmarshalJSON(b []byte) error { + var f string + v := [...]interface{}{&s.Timestamp, &f} + + if err := json.Unmarshal(b, &v); err != nil { + return err + } + + value, err := strconv.ParseFloat(f, 64) + if err != nil { + return fmt.Errorf("error parsing sample value: %s", err) + } + s.Value = SampleValue(value) + return nil +} + +// String is a string value evaluated at the set timestamp. +type String struct { + Value string `json:"value"` + Timestamp Time `json:"timestamp"` +} + +func (s *String) String() string { + return s.Value +} + +// MarshalJSON implements json.Marshaler. +func (s String) MarshalJSON() ([]byte, error) { + return json.Marshal([]interface{}{s.Timestamp, s.Value}) +} + +// UnmarshalJSON implements json.Unmarshaler. +func (s *String) UnmarshalJSON(b []byte) error { + v := [...]interface{}{&s.Timestamp, &s.Value} + return json.Unmarshal(b, &v) +} + +// Vector is basically only an alias for Samples, but the +// contract is that in a Vector, all Samples have the same timestamp. +type Vector []*Sample + +func (vec Vector) String() string { + entries := make([]string, len(vec)) + for i, s := range vec { + entries[i] = s.String() + } + return strings.Join(entries, "\n") +} + +func (vec Vector) Len() int { return len(vec) } +func (vec Vector) Swap(i, j int) { vec[i], vec[j] = vec[j], vec[i] } + +// Less compares first the metrics, then the timestamp. +func (vec Vector) Less(i, j int) bool { + switch { + case vec[i].Metric.Before(vec[j].Metric): + return true + case vec[j].Metric.Before(vec[i].Metric): + return false + case vec[i].Timestamp.Before(vec[j].Timestamp): + return true + default: + return false + } +} + +// Equal compares two sets of samples and returns true if they are equal. +func (vec Vector) Equal(o Vector) bool { + if len(vec) != len(o) { + return false + } + + for i, sample := range vec { + if !sample.Equal(o[i]) { + return false + } + } + return true +} + +// Matrix is a list of time series. +type Matrix []*SampleStream + +func (m Matrix) Len() int { return len(m) } +func (m Matrix) Less(i, j int) bool { return m[i].Metric.Before(m[j].Metric) } +func (m Matrix) Swap(i, j int) { m[i], m[j] = m[j], m[i] } + +func (mat Matrix) String() string { + matCp := make(Matrix, len(mat)) + copy(matCp, mat) + sort.Sort(matCp) + + strs := make([]string, len(matCp)) + + for i, ss := range matCp { + strs[i] = ss.String() + } + + return strings.Join(strs, "\n") +} diff --git a/vendor/github.com/prometheus/common/model/value_test.go b/vendor/github.com/prometheus/common/model/value_test.go new file mode 100644 index 0000000..b97dcf8 --- /dev/null +++ b/vendor/github.com/prometheus/common/model/value_test.go @@ -0,0 +1,468 @@ +// Copyright 2013 The Prometheus 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 model + +import ( + "encoding/json" + "math" + "reflect" + "sort" + "testing" +) + +func TestEqualValues(t *testing.T) { + tests := map[string]struct { + in1, in2 SampleValue + want bool + }{ + "equal floats": { + in1: 3.14, + in2: 3.14, + want: true, + }, + "unequal floats": { + in1: 3.14, + in2: 3.1415, + want: false, + }, + "positive inifinities": { + in1: SampleValue(math.Inf(+1)), + in2: SampleValue(math.Inf(+1)), + want: true, + }, + "negative inifinities": { + in1: SampleValue(math.Inf(-1)), + in2: SampleValue(math.Inf(-1)), + want: true, + }, + "different inifinities": { + in1: SampleValue(math.Inf(+1)), + in2: SampleValue(math.Inf(-1)), + want: false, + }, + "number and infinity": { + in1: 42, + in2: SampleValue(math.Inf(+1)), + want: false, + }, + "number and NaN": { + in1: 42, + in2: SampleValue(math.NaN()), + want: false, + }, + "NaNs": { + in1: SampleValue(math.NaN()), + in2: SampleValue(math.NaN()), + want: true, // !!! + }, + } + + for name, test := range tests { + got := test.in1.Equal(test.in2) + if got != test.want { + t.Errorf("Comparing %s, %f and %f: got %t, want %t", name, test.in1, test.in2, got, test.want) + } + } +} + +func TestEqualSamples(t *testing.T) { + testSample := &Sample{} + + tests := map[string]struct { + in1, in2 *Sample + want bool + }{ + "equal pointers": { + in1: testSample, + in2: testSample, + want: true, + }, + "different metrics": { + in1: &Sample{Metric: Metric{"foo": "bar"}}, + in2: &Sample{Metric: Metric{"foo": "biz"}}, + want: false, + }, + "different timestamp": { + in1: &Sample{Timestamp: 0}, + in2: &Sample{Timestamp: 1}, + want: false, + }, + "different value": { + in1: &Sample{Value: 0}, + in2: &Sample{Value: 1}, + want: false, + }, + "equal samples": { + in1: &Sample{ + Metric: Metric{"foo": "bar"}, + Timestamp: 0, + Value: 1, + }, + in2: &Sample{ + Metric: Metric{"foo": "bar"}, + Timestamp: 0, + Value: 1, + }, + want: true, + }, + } + + for name, test := range tests { + got := test.in1.Equal(test.in2) + if got != test.want { + t.Errorf("Comparing %s, %v and %v: got %t, want %t", name, test.in1, test.in2, got, test.want) + } + } + +} + +func TestSamplePairJSON(t *testing.T) { + input := []struct { + plain string + value SamplePair + }{ + { + plain: `[1234.567,"123.1"]`, + value: SamplePair{ + Value: 123.1, + Timestamp: 1234567, + }, + }, + } + + for _, test := range input { + b, err := json.Marshal(test.value) + if err != nil { + t.Error(err) + continue + } + + if string(b) != test.plain { + t.Errorf("encoding error: expected %q, got %q", test.plain, b) + continue + } + + var sp SamplePair + err = json.Unmarshal(b, &sp) + if err != nil { + t.Error(err) + continue + } + + if sp != test.value { + t.Errorf("decoding error: expected %v, got %v", test.value, sp) + } + } +} + +func TestSampleJSON(t *testing.T) { + input := []struct { + plain string + value Sample + }{ + { + plain: `{"metric":{"__name__":"test_metric"},"value":[1234.567,"123.1"]}`, + value: Sample{ + Metric: Metric{ + MetricNameLabel: "test_metric", + }, + Value: 123.1, + Timestamp: 1234567, + }, + }, + } + + for _, test := range input { + b, err := json.Marshal(test.value) + if err != nil { + t.Error(err) + continue + } + + if string(b) != test.plain { + t.Errorf("encoding error: expected %q, got %q", test.plain, b) + continue + } + + var sv Sample + err = json.Unmarshal(b, &sv) + if err != nil { + t.Error(err) + continue + } + + if !reflect.DeepEqual(sv, test.value) { + t.Errorf("decoding error: expected %v, got %v", test.value, sv) + } + } +} + +func TestVectorJSON(t *testing.T) { + input := []struct { + plain string + value Vector + }{ + { + plain: `[]`, + value: Vector{}, + }, + { + plain: `[{"metric":{"__name__":"test_metric"},"value":[1234.567,"123.1"]}]`, + value: Vector{&Sample{ + Metric: Metric{ + MetricNameLabel: "test_metric", + }, + Value: 123.1, + Timestamp: 1234567, + }}, + }, + { + plain: `[{"metric":{"__name__":"test_metric"},"value":[1234.567,"123.1"]},{"metric":{"foo":"bar"},"value":[1.234,"+Inf"]}]`, + value: Vector{ + &Sample{ + Metric: Metric{ + MetricNameLabel: "test_metric", + }, + Value: 123.1, + Timestamp: 1234567, + }, + &Sample{ + Metric: Metric{ + "foo": "bar", + }, + Value: SampleValue(math.Inf(1)), + Timestamp: 1234, + }, + }, + }, + } + + for _, test := range input { + b, err := json.Marshal(test.value) + if err != nil { + t.Error(err) + continue + } + + if string(b) != test.plain { + t.Errorf("encoding error: expected %q, got %q", test.plain, b) + continue + } + + var vec Vector + err = json.Unmarshal(b, &vec) + if err != nil { + t.Error(err) + continue + } + + if !reflect.DeepEqual(vec, test.value) { + t.Errorf("decoding error: expected %v, got %v", test.value, vec) + } + } +} + +func TestScalarJSON(t *testing.T) { + input := []struct { + plain string + value Scalar + }{ + { + plain: `[123.456,"456"]`, + value: Scalar{ + Timestamp: 123456, + Value: 456, + }, + }, + { + plain: `[123123.456,"+Inf"]`, + value: Scalar{ + Timestamp: 123123456, + Value: SampleValue(math.Inf(1)), + }, + }, + { + plain: `[123123.456,"-Inf"]`, + value: Scalar{ + Timestamp: 123123456, + Value: SampleValue(math.Inf(-1)), + }, + }, + } + + for _, test := range input { + b, err := json.Marshal(test.value) + if err != nil { + t.Error(err) + continue + } + + if string(b) != test.plain { + t.Errorf("encoding error: expected %q, got %q", test.plain, b) + continue + } + + var sv Scalar + err = json.Unmarshal(b, &sv) + if err != nil { + t.Error(err) + continue + } + + if sv != test.value { + t.Errorf("decoding error: expected %v, got %v", test.value, sv) + } + } +} + +func TestStringJSON(t *testing.T) { + input := []struct { + plain string + value String + }{ + { + plain: `[123.456,"test"]`, + value: String{ + Timestamp: 123456, + Value: "test", + }, + }, + { + plain: `[123123.456,"台北"]`, + value: String{ + Timestamp: 123123456, + Value: "台北", + }, + }, + } + + for _, test := range input { + b, err := json.Marshal(test.value) + if err != nil { + t.Error(err) + continue + } + + if string(b) != test.plain { + t.Errorf("encoding error: expected %q, got %q", test.plain, b) + continue + } + + var sv String + err = json.Unmarshal(b, &sv) + if err != nil { + t.Error(err) + continue + } + + if sv != test.value { + t.Errorf("decoding error: expected %v, got %v", test.value, sv) + } + } +} + +func TestVectorSort(t *testing.T) { + input := Vector{ + &Sample{ + Metric: Metric{ + MetricNameLabel: "A", + }, + Timestamp: 1, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "A", + }, + Timestamp: 2, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "C", + }, + Timestamp: 1, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "C", + }, + Timestamp: 2, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "B", + }, + Timestamp: 1, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "B", + }, + Timestamp: 2, + }, + } + + expected := Vector{ + &Sample{ + Metric: Metric{ + MetricNameLabel: "A", + }, + Timestamp: 1, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "A", + }, + Timestamp: 2, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "B", + }, + Timestamp: 1, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "B", + }, + Timestamp: 2, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "C", + }, + Timestamp: 1, + }, + &Sample{ + Metric: Metric{ + MetricNameLabel: "C", + }, + Timestamp: 2, + }, + } + + sort.Sort(input) + + for i, actual := range input { + actualFp := actual.Metric.Fingerprint() + expectedFp := expected[i].Metric.Fingerprint() + + if actualFp != expectedFp { + t.Fatalf("%d. Incorrect fingerprint. Got %s; want %s", i, actualFp.String(), expectedFp.String()) + } + + if actual.Timestamp != expected[i].Timestamp { + t.Fatalf("%d. Incorrect timestamp. Got %s; want %s", i, actual.Timestamp, expected[i].Timestamp) + } + } +} diff --git a/vendor/github.com/prometheus/common/promlog/flag/flag.go b/vendor/github.com/prometheus/common/promlog/flag/flag.go new file mode 100644 index 0000000..b9d361e --- /dev/null +++ b/vendor/github.com/prometheus/common/promlog/flag/flag.go @@ -0,0 +1,33 @@ +// Copyright 2017 The Prometheus 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 flag + +import ( + "github.com/prometheus/common/promlog" + kingpin "gopkg.in/alecthomas/kingpin.v2" +) + +// LevelFlagName is the canonical flag name to configure the allowed log level +// within Prometheus projects. +const LevelFlagName = "log.level" + +// LevelFlagHelp is the help description for the log.level flag. +const LevelFlagHelp = "Only log messages with the given severity or above. One of: [debug, info, warn, error]" + +// AddFlags adds the flags used by this package to the Kingpin application. +// To use the default Kingpin application, call AddFlags(kingpin.CommandLine) +func AddFlags(a *kingpin.Application, logLevel *promlog.AllowedLevel) { + a.Flag(LevelFlagName, LevelFlagHelp). + Default("info").SetValue(logLevel) +} diff --git a/vendor/github.com/prometheus/common/promlog/log.go b/vendor/github.com/prometheus/common/promlog/log.go new file mode 100644 index 0000000..cf8307a --- /dev/null +++ b/vendor/github.com/prometheus/common/promlog/log.go @@ -0,0 +1,63 @@ +// Copyright 2017 The Prometheus 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 promlog defines standardised ways to initialize Go kit loggers +// across Prometheus components. +// It should typically only ever be imported by main packages. +package promlog + +import ( + "os" + + "github.com/go-kit/kit/log" + "github.com/go-kit/kit/log/level" + "github.com/pkg/errors" +) + +// AllowedLevel is a settable identifier for the minimum level a log entry +// must be have. +type AllowedLevel struct { + s string + o level.Option +} + +func (l *AllowedLevel) String() string { + return l.s +} + +// Set updates the value of the allowed level. +func (l *AllowedLevel) Set(s string) error { + switch s { + case "debug": + l.o = level.AllowDebug() + case "info": + l.o = level.AllowInfo() + case "warn": + l.o = level.AllowWarn() + case "error": + l.o = level.AllowError() + default: + return errors.Errorf("unrecognized log level %q", s) + } + l.s = s + return nil +} + +// New returns a new leveled oklog logger in the logfmt format. Each logged line will be annotated +// with a timestamp. The output always goes to stderr. +func New(al AllowedLevel) log.Logger { + l := log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr)) + l = level.NewFilter(l, al.o) + l = log.With(l, "ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller) + return l +} diff --git a/vendor/github.com/prometheus/common/route/route.go b/vendor/github.com/prometheus/common/route/route.go new file mode 100644 index 0000000..bb46881 --- /dev/null +++ b/vendor/github.com/prometheus/common/route/route.go @@ -0,0 +1,100 @@ +package route + +import ( + "net/http" + + "github.com/julienschmidt/httprouter" + "golang.org/x/net/context" +) + +type param string + +// Param returns param p for the context. +func Param(ctx context.Context, p string) string { + return ctx.Value(param(p)).(string) +} + +// WithParam returns a new context with param p set to v. +func WithParam(ctx context.Context, p, v string) context.Context { + return context.WithValue(ctx, param(p), v) +} + +// Router wraps httprouter.Router and adds support for prefixed sub-routers +// and per-request context injections. +type Router struct { + rtr *httprouter.Router + prefix string +} + +// New returns a new Router. +func New() *Router { + return &Router{ + rtr: httprouter.New(), + } +} + +// WithPrefix returns a router that prefixes all registered routes with prefix. +func (r *Router) WithPrefix(prefix string) *Router { + return &Router{rtr: r.rtr, prefix: r.prefix + prefix} +} + +// handle turns a HandlerFunc into an httprouter.Handle. +func (r *Router) handle(h http.HandlerFunc) httprouter.Handle { + return func(w http.ResponseWriter, req *http.Request, params httprouter.Params) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + + for _, p := range params { + ctx = context.WithValue(ctx, param(p.Key), p.Value) + } + h(w, req.WithContext(ctx)) + } +} + +// Get registers a new GET route. +func (r *Router) Get(path string, h http.HandlerFunc) { + r.rtr.GET(r.prefix+path, r.handle(h)) +} + +// Options registers a new OPTIONS route. +func (r *Router) Options(path string, h http.HandlerFunc) { + r.rtr.OPTIONS(r.prefix+path, r.handle(h)) +} + +// Del registers a new DELETE route. +func (r *Router) Del(path string, h http.HandlerFunc) { + r.rtr.DELETE(r.prefix+path, r.handle(h)) +} + +// Put registers a new PUT route. +func (r *Router) Put(path string, h http.HandlerFunc) { + r.rtr.PUT(r.prefix+path, r.handle(h)) +} + +// Post registers a new POST route. +func (r *Router) Post(path string, h http.HandlerFunc) { + r.rtr.POST(r.prefix+path, r.handle(h)) +} + +// Redirect takes an absolute path and sends an internal HTTP redirect for it, +// prefixed by the router's path prefix. Note that this method does not include +// functionality for handling relative paths or full URL redirects. +func (r *Router) Redirect(w http.ResponseWriter, req *http.Request, path string, code int) { + http.Redirect(w, req, r.prefix+path, code) +} + +// ServeHTTP implements http.Handler. +func (r *Router) ServeHTTP(w http.ResponseWriter, req *http.Request) { + r.rtr.ServeHTTP(w, req) +} + +// FileServe returns a new http.HandlerFunc that serves files from dir. +// Using routes must provide the *filepath parameter. +func FileServe(dir string) http.HandlerFunc { + fs := http.FileServer(http.Dir(dir)) + + return func(w http.ResponseWriter, r *http.Request) { + r.URL.Path = Param(r.Context(), "filepath") + fs.ServeHTTP(w, r) + } +} diff --git a/vendor/github.com/prometheus/common/route/route_test.go b/vendor/github.com/prometheus/common/route/route_test.go new file mode 100644 index 0000000..a9bb209 --- /dev/null +++ b/vendor/github.com/prometheus/common/route/route_test.go @@ -0,0 +1,44 @@ +package route + +import ( + "net/http" + "net/http/httptest" + "testing" +) + +func TestRedirect(t *testing.T) { + router := New().WithPrefix("/test/prefix") + w := httptest.NewRecorder() + r, err := http.NewRequest("GET", "http://localhost:9090/foo", nil) + if err != nil { + t.Fatalf("Error building test request: %s", err) + } + + router.Redirect(w, r, "/some/endpoint", http.StatusFound) + if w.Code != http.StatusFound { + t.Fatalf("Unexpected redirect status code: got %d, want %d", w.Code, http.StatusFound) + } + + want := "/test/prefix/some/endpoint" + got := w.Header()["Location"][0] + if want != got { + t.Fatalf("Unexpected redirect location: got %s, want %s", got, want) + } +} + +func TestContext(t *testing.T) { + router := New() + router.Get("/test/:foo/", func(w http.ResponseWriter, r *http.Request) { + want := "bar" + got := Param(r.Context(), "foo") + if want != got { + t.Fatalf("Unexpected context value: want %q, got %q", want, got) + } + }) + + r, err := http.NewRequest("GET", "http://localhost:9090/test/bar/", nil) + if err != nil { + t.Fatalf("Error building test request: %s", err) + } + router.ServeHTTP(nil, r) +} diff --git a/vendor/github.com/prometheus/common/version/info.go b/vendor/github.com/prometheus/common/version/info.go new file mode 100644 index 0000000..84489a5 --- /dev/null +++ b/vendor/github.com/prometheus/common/version/info.go @@ -0,0 +1,89 @@ +// Copyright 2016 The Prometheus 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 version + +import ( + "bytes" + "fmt" + "runtime" + "strings" + "text/template" + + "github.com/prometheus/client_golang/prometheus" +) + +// Build information. Populated at build-time. +var ( + Version string + Revision string + Branch string + BuildUser string + BuildDate string + GoVersion = runtime.Version() +) + +// NewCollector returns a collector which exports metrics about current version information. +func NewCollector(program string) *prometheus.GaugeVec { + buildInfo := prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Namespace: program, + Name: "build_info", + Help: fmt.Sprintf( + "A metric with a constant '1' value labeled by version, revision, branch, and goversion from which %s was built.", + program, + ), + }, + []string{"version", "revision", "branch", "goversion"}, + ) + buildInfo.WithLabelValues(Version, Revision, Branch, GoVersion).Set(1) + return buildInfo +} + +// versionInfoTmpl contains the template used by Info. +var versionInfoTmpl = ` +{{.program}}, version {{.version}} (branch: {{.branch}}, revision: {{.revision}}) + build user: {{.buildUser}} + build date: {{.buildDate}} + go version: {{.goVersion}} +` + +// Print returns version information. +func Print(program string) string { + m := map[string]string{ + "program": program, + "version": Version, + "revision": Revision, + "branch": Branch, + "buildUser": BuildUser, + "buildDate": BuildDate, + "goVersion": GoVersion, + } + t := template.Must(template.New("version").Parse(versionInfoTmpl)) + + var buf bytes.Buffer + if err := t.ExecuteTemplate(&buf, "version", m); err != nil { + panic(err) + } + return strings.TrimSpace(buf.String()) +} + +// Info returns version, branch and revision information. +func Info() string { + return fmt.Sprintf("(version=%s, branch=%s, revision=%s)", Version, Branch, Revision) +} + +// BuildContext returns goVersion, buildUser and buildDate information. +func BuildContext() string { + return fmt.Sprintf("(go=%s, user=%s, date=%s)", GoVersion, BuildUser, BuildDate) +} diff --git a/vendor/github.com/prometheus/procfs/.travis.yml b/vendor/github.com/prometheus/procfs/.travis.yml index b1e6743..ee09bb7 100644 --- a/vendor/github.com/prometheus/procfs/.travis.yml +++ b/vendor/github.com/prometheus/procfs/.travis.yml @@ -1,5 +1,5 @@ +sudo: false language: go go: - - 1.3 - - 1.4 - - tip + - 1.7.6 + - 1.8.3 diff --git a/vendor/github.com/prometheus/procfs/AUTHORS.md b/vendor/github.com/prometheus/procfs/AUTHORS.md deleted file mode 100644 index 8dde8e3..0000000 --- a/vendor/github.com/prometheus/procfs/AUTHORS.md +++ /dev/null @@ -1,12 +0,0 @@ -The Prometheus project was started by Matt T. Proud (emeritus) and -Julius Volz in 2012. - -Maintainers of this repository: - -* Tobias Schmidt - -The following individuals have contributed code to this repository -(listed in alphabetical order): - -* Ji-Hoon, Seol -* Tobias Schmidt diff --git a/vendor/github.com/prometheus/procfs/CONTRIBUTING.md b/vendor/github.com/prometheus/procfs/CONTRIBUTING.md index 5705f0f..40503ed 100644 --- a/vendor/github.com/prometheus/procfs/CONTRIBUTING.md +++ b/vendor/github.com/prometheus/procfs/CONTRIBUTING.md @@ -2,9 +2,9 @@ Prometheus uses GitHub to manage reviews of pull requests. -* If you have a trivial fix or improvement, go ahead and create a pull - request, addressing (with `@...`) one or more of the maintainers - (see [AUTHORS.md](AUTHORS.md)) in the description of the pull request. +* If you have a trivial fix or improvement, go ahead and create a pull request, + addressing (with `@...`) the maintainer of this repository (see + [MAINTAINERS.md](MAINTAINERS.md)) in the description of the pull request. * If you plan to do something more involved, first discuss your ideas on our [mailing list](https://groups.google.com/forum/?fromgroups#!forum/prometheus-developers). diff --git a/vendor/github.com/prometheus/procfs/MAINTAINERS.md b/vendor/github.com/prometheus/procfs/MAINTAINERS.md new file mode 100644 index 0000000..35993c4 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/MAINTAINERS.md @@ -0,0 +1 @@ +* Tobias Schmidt diff --git a/vendor/github.com/prometheus/procfs/Makefile b/vendor/github.com/prometheus/procfs/Makefile new file mode 100644 index 0000000..dd48afd --- /dev/null +++ b/vendor/github.com/prometheus/procfs/Makefile @@ -0,0 +1,18 @@ +ci: fmt lint test + +fmt: + ! gofmt -l *.go | read nothing + go vet + +lint: + go get github.com/golang/lint/golint + golint *.go + +test: sysfs/fixtures/.unpacked + go test -v ./... + +sysfs/fixtures/.unpacked: sysfs/fixtures.ttar + ./ttar -C sysfs -x -f sysfs/fixtures.ttar + touch $@ + +.PHONY: fmt lint test ci diff --git a/vendor/github.com/prometheus/procfs/README.md b/vendor/github.com/prometheus/procfs/README.md index 6e7ee6b..2095494 100644 --- a/vendor/github.com/prometheus/procfs/README.md +++ b/vendor/github.com/prometheus/procfs/README.md @@ -8,3 +8,4 @@ backwards-incompatible ways without warnings. Use it at your own risk. [![GoDoc](https://godoc.org/github.com/prometheus/procfs?status.png)](https://godoc.org/github.com/prometheus/procfs) [![Build Status](https://travis-ci.org/prometheus/procfs.svg?branch=master)](https://travis-ci.org/prometheus/procfs) +[![Go Report Card](https://goreportcard.com/badge/github.com/prometheus/procfs)](https://goreportcard.com/report/github.com/prometheus/procfs) diff --git a/vendor/github.com/prometheus/procfs/bcache/bcache.go b/vendor/github.com/prometheus/procfs/bcache/bcache.go new file mode 100644 index 0000000..1db178c --- /dev/null +++ b/vendor/github.com/prometheus/procfs/bcache/bcache.go @@ -0,0 +1,84 @@ +// Copyright 2017 The Prometheus 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 bcache provides access to statistics exposed by the bcache (Linux +// block cache). +package bcache + +// Stats contains bcache runtime statistics, parsed from /sys/fs/bcache/. +// +// The names and meanings of each statistic were taken from bcache.txt and +// files in drivers/md/bcache in the Linux kernel source. Counters are uint64 +// (in-kernel counters are mostly unsigned long). +type Stats struct { + // The name of the bcache used to source these statistics. + Name string + Bcache BcacheStats + Bdevs []BdevStats + Caches []CacheStats +} + +// BcacheStats contains statistics tied to a bcache ID. +type BcacheStats struct { + AverageKeySize uint64 + BtreeCacheSize uint64 + CacheAvailablePercent uint64 + Congested uint64 + RootUsagePercent uint64 + TreeDepth uint64 + Internal InternalStats + FiveMin PeriodStats + Total PeriodStats +} + +// BdevStats contains statistics for one backing device. +type BdevStats struct { + Name string + DirtyData uint64 + FiveMin PeriodStats + Total PeriodStats +} + +// CacheStats contains statistics for one cache device. +type CacheStats struct { + Name string + IOErrors uint64 + MetadataWritten uint64 + Written uint64 + Priority PriorityStats +} + +// PriorityStats contains statistics from the priority_stats file. +type PriorityStats struct { + UnusedPercent uint64 + MetadataPercent uint64 +} + +// InternalStats contains internal bcache statistics. +type InternalStats struct { + ActiveJournalEntries uint64 + BtreeNodes uint64 + BtreeReadAverageDurationNanoSeconds uint64 + CacheReadRaces uint64 +} + +// PeriodStats contains statistics for a time period (5 min or total). +type PeriodStats struct { + Bypassed uint64 + CacheBypassHits uint64 + CacheBypassMisses uint64 + CacheHits uint64 + CacheMissCollisions uint64 + CacheMisses uint64 + CacheReadaheads uint64 +} diff --git a/vendor/github.com/prometheus/procfs/bcache/get.go b/vendor/github.com/prometheus/procfs/bcache/get.go new file mode 100644 index 0000000..4d56f3d --- /dev/null +++ b/vendor/github.com/prometheus/procfs/bcache/get.go @@ -0,0 +1,330 @@ +// Copyright 2017 The Prometheus 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 bcache + +import ( + "bufio" + "fmt" + "io/ioutil" + "os" + "path" + "path/filepath" + "strconv" + "strings" +) + +// ParsePseudoFloat parses the peculiar format produced by bcache's bch_hprint. +func parsePseudoFloat(str string) (float64, error) { + ss := strings.Split(str, ".") + + intPart, err := strconv.ParseFloat(ss[0], 64) + if err != nil { + return 0, err + } + + if len(ss) == 1 { + // Pure integers are fine. + return intPart, nil + } + fracPart, err := strconv.ParseFloat(ss[1], 64) + if err != nil { + return 0, err + } + // fracPart is a number between 0 and 1023 divided by 100; it is off + // by a small amount. Unexpected bumps in time lines may occur because + // for bch_hprint .1 != .10 and .10 > .9 (at least up to Linux + // v4.12-rc3). + + // Restore the proper order: + fracPart = fracPart / 10.24 + return intPart + fracPart, nil +} + +// Dehumanize converts a human-readable byte slice into a uint64. +func dehumanize(hbytes []byte) (uint64, error) { + ll := len(hbytes) + if ll == 0 { + return 0, fmt.Errorf("zero-length reply") + } + lastByte := hbytes[ll-1] + mul := float64(1) + var ( + mant float64 + err error + ) + // If lastByte is beyond the range of ASCII digits, it must be a + // multiplier. + if lastByte > 57 { + // Remove multiplier from slice. + hbytes = hbytes[:len(hbytes)-1] + + const ( + _ = 1 << (10 * iota) + KiB + MiB + GiB + TiB + PiB + EiB + ZiB + YiB + ) + + multipliers := map[rune]float64{ + // Source for conversion rules: + // linux-kernel/drivers/md/bcache/util.c:bch_hprint() + 'k': KiB, + 'M': MiB, + 'G': GiB, + 'T': TiB, + 'P': PiB, + 'E': EiB, + 'Z': ZiB, + 'Y': YiB, + } + mul = float64(multipliers[rune(lastByte)]) + mant, err = parsePseudoFloat(string(hbytes)) + if err != nil { + return 0, err + } + } else { + // Not humanized by bch_hprint + mant, err = strconv.ParseFloat(string(hbytes), 64) + if err != nil { + return 0, err + } + } + res := uint64(mant * mul) + return res, nil +} + +type parser struct { + uuidPath string + subDir string + currentDir string + err error +} + +func (p *parser) setSubDir(pathElements ...string) { + p.subDir = path.Join(pathElements...) + p.currentDir = path.Join(p.uuidPath, p.subDir) +} + +func (p *parser) readValue(fileName string) uint64 { + if p.err != nil { + return 0 + } + path := path.Join(p.currentDir, fileName) + byt, err := ioutil.ReadFile(path) + if err != nil { + p.err = fmt.Errorf("failed to read: %s", path) + return 0 + } + // Remove trailing newline. + byt = byt[:len(byt)-1] + res, err := dehumanize(byt) + p.err = err + return res +} + +// ParsePriorityStats parses lines from the priority_stats file. +func parsePriorityStats(line string, ps *PriorityStats) (error) { + var ( + value uint64 + err error + ) + switch { + case strings.HasPrefix(line, "Unused:"): + fields := strings.Fields(line) + rawValue := fields[len(fields)-1] + valueStr := strings.TrimSuffix(rawValue, "%") + value, err = strconv.ParseUint(valueStr, 10, 64) + if err != nil { + return err + } + ps.UnusedPercent = value + case strings.HasPrefix(line, "Metadata:"): + fields := strings.Fields(line) + rawValue := fields[len(fields)-1] + valueStr := strings.TrimSuffix(rawValue, "%") + value, err = strconv.ParseUint(valueStr, 10, 64) + if err != nil { + return err + } + ps.MetadataPercent = value + } + return nil +} + +func (p *parser) getPriorityStats() PriorityStats { + var res PriorityStats + + if p.err != nil { + return res + } + + path := path.Join(p.currentDir, "priority_stats") + + file, err := os.Open(path) + if err != nil { + p.err = fmt.Errorf("failed to read: %s", path) + return res + } + defer file.Close() + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + err = parsePriorityStats(scanner.Text(), &res) + if err != nil { + p.err = fmt.Errorf("failed to parse: %s (%s)", path, err) + return res + } + } + if err := scanner.Err(); err != nil { + p.err = fmt.Errorf("failed to parse: %s (%s)", path, err) + return res + } + return res +} + +// GetStats collects from sysfs files data tied to one bcache ID. +func GetStats(uuidPath string) (*Stats, error) { + var bs Stats + + par := parser{uuidPath: uuidPath} + + // bcache stats + + // dir + par.setSubDir("") + bs.Bcache.AverageKeySize = par.readValue("average_key_size") + bs.Bcache.BtreeCacheSize = par.readValue("btree_cache_size") + bs.Bcache.CacheAvailablePercent = par.readValue("cache_available_percent") + bs.Bcache.Congested = par.readValue("congested") + bs.Bcache.RootUsagePercent = par.readValue("root_usage_percent") + bs.Bcache.TreeDepth = par.readValue("tree_depth") + + // bcache stats (internal) + + // dir /internal + par.setSubDir("internal") + bs.Bcache.Internal.ActiveJournalEntries = par.readValue("active_journal_entries") + bs.Bcache.Internal.BtreeNodes = par.readValue("btree_nodes") + bs.Bcache.Internal.BtreeReadAverageDurationNanoSeconds = par.readValue("btree_read_average_duration_us") + bs.Bcache.Internal.CacheReadRaces = par.readValue("cache_read_races") + + // bcache stats (period) + + // dir /stats_five_minute + par.setSubDir("stats_five_minute") + bs.Bcache.FiveMin.Bypassed = par.readValue("bypassed") + bs.Bcache.FiveMin.CacheHits = par.readValue("cache_hits") + + bs.Bcache.FiveMin.Bypassed = par.readValue("bypassed") + bs.Bcache.FiveMin.CacheBypassHits = par.readValue("cache_bypass_hits") + bs.Bcache.FiveMin.CacheBypassMisses = par.readValue("cache_bypass_misses") + bs.Bcache.FiveMin.CacheHits = par.readValue("cache_hits") + bs.Bcache.FiveMin.CacheMissCollisions = par.readValue("cache_miss_collisions") + bs.Bcache.FiveMin.CacheMisses = par.readValue("cache_misses") + bs.Bcache.FiveMin.CacheReadaheads = par.readValue("cache_readaheads") + + // dir /stats_total + par.setSubDir("stats_total") + bs.Bcache.Total.Bypassed = par.readValue("bypassed") + bs.Bcache.Total.CacheHits = par.readValue("cache_hits") + + bs.Bcache.Total.Bypassed = par.readValue("bypassed") + bs.Bcache.Total.CacheBypassHits = par.readValue("cache_bypass_hits") + bs.Bcache.Total.CacheBypassMisses = par.readValue("cache_bypass_misses") + bs.Bcache.Total.CacheHits = par.readValue("cache_hits") + bs.Bcache.Total.CacheMissCollisions = par.readValue("cache_miss_collisions") + bs.Bcache.Total.CacheMisses = par.readValue("cache_misses") + bs.Bcache.Total.CacheReadaheads = par.readValue("cache_readaheads") + + if par.err != nil { + return nil, par.err + } + + // bdev stats + + reg := path.Join(uuidPath, "bdev[0-9]*") + bdevDirs, err := filepath.Glob(reg) + if err != nil { + return nil, err + } + + bs.Bdevs = make([]BdevStats, len(bdevDirs)) + + for ii, bdevDir := range bdevDirs { + var bds = &bs.Bdevs[ii] + + bds.Name = filepath.Base(bdevDir) + + par.setSubDir(bds.Name) + bds.DirtyData = par.readValue("dirty_data") + + // dir //stats_five_minute + par.setSubDir(bds.Name, "stats_five_minute") + bds.FiveMin.Bypassed = par.readValue("bypassed") + bds.FiveMin.CacheBypassHits = par.readValue("cache_bypass_hits") + bds.FiveMin.CacheBypassMisses = par.readValue("cache_bypass_misses") + bds.FiveMin.CacheHits = par.readValue("cache_hits") + bds.FiveMin.CacheMissCollisions = par.readValue("cache_miss_collisions") + bds.FiveMin.CacheMisses = par.readValue("cache_misses") + bds.FiveMin.CacheReadaheads = par.readValue("cache_readaheads") + + // dir //stats_total + par.setSubDir("stats_total") + bds.Total.Bypassed = par.readValue("bypassed") + bds.Total.CacheBypassHits = par.readValue("cache_bypass_hits") + bds.Total.CacheBypassMisses = par.readValue("cache_bypass_misses") + bds.Total.CacheHits = par.readValue("cache_hits") + bds.Total.CacheMissCollisions = par.readValue("cache_miss_collisions") + bds.Total.CacheMisses = par.readValue("cache_misses") + bds.Total.CacheReadaheads = par.readValue("cache_readaheads") + } + + if par.err != nil { + return nil, par.err + } + + // cache stats + + reg = path.Join(uuidPath, "cache[0-9]*") + cacheDirs, err := filepath.Glob(reg) + if err != nil { + return nil, err + } + bs.Caches = make([]CacheStats, len(cacheDirs)) + + for ii, cacheDir := range cacheDirs { + var cs = &bs.Caches[ii] + cs.Name = filepath.Base(cacheDir) + + // dir is / + par.setSubDir(cs.Name) + cs.IOErrors = par.readValue("io_errors") + cs.MetadataWritten = par.readValue("metadata_written") + cs.Written = par.readValue("written") + + ps := par.getPriorityStats() + cs.Priority = ps + } + + if par.err != nil { + return nil, par.err + } + + return &bs, nil +} diff --git a/vendor/github.com/prometheus/procfs/bcache/get_test.go b/vendor/github.com/prometheus/procfs/bcache/get_test.go new file mode 100644 index 0000000..38c3df5 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/bcache/get_test.go @@ -0,0 +1,114 @@ +// Copyright 2017 The Prometheus 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 bcache + +import ( + "testing" + "math" +) + +func TestDehumanizeTests(t *testing.T) { + dehumanizeTests := []struct { + in []byte + out uint64 + invalid bool + }{ + { + in: []byte("542k"), + out: 555008, + }, + { + in: []byte("322M"), + out: 337641472, + }, + { + in: []byte("1.1k"), + out: 1124, + }, + { + in: []byte("1.9k"), + out: 1924, + }, + { + in: []byte("1.10k"), + out: 2024, + }, + { + in: []byte(""), + out: 0, + invalid: true, + }, + } + for _, tst := range dehumanizeTests { + got, err := dehumanize(tst.in) + if tst.invalid && err == nil { + t.Error("expected an error, but none occurred") + } + if !tst.invalid && err != nil { + t.Errorf("unexpected error: %v", err) + } + if got != tst.out { + t.Errorf("dehumanize: '%s', want %f, got %f", tst.in, tst.out, got) + } + } +} + +func TestParsePseudoFloatTests(t *testing.T) { + parsePseudoFloatTests := []struct { + in string + out float64 + }{ + { + in: "1.1", + out: float64(1.097656), + }, + { + in: "1.9", + out: float64(1.878906), + }, + { + in: "1.10", + out: float64(1.976562), + }, + } + for _, tst := range parsePseudoFloatTests { + got, err := parsePseudoFloat(tst.in) + if err != nil || math.Abs(got - tst.out) > 0.0001 { + t.Errorf("parsePseudoFloat: %s, want %f, got %f", tst.in, tst.out, got) + } + } +} + +func TestPriorityStats(t *testing.T) { + var want = PriorityStats{ + UnusedPercent: 99, + MetadataPercent: 5, + } + var ( + in string + gotErr error + got PriorityStats + ) + in = "Metadata: 5%" + gotErr = parsePriorityStats(in, &got) + if gotErr != nil || got.MetadataPercent != want.MetadataPercent { + t.Errorf("parsePriorityStats: '%s', want %f, got %f", in, want.MetadataPercent, got.MetadataPercent) + } + + in = "Unused: 99%" + gotErr = parsePriorityStats(in, &got) + if gotErr != nil || got.UnusedPercent != want.UnusedPercent { + t.Errorf("parsePriorityStats: '%s', want %f, got %f", in, want.UnusedPercent, got.UnusedPercent) + } +} diff --git a/vendor/github.com/prometheus/procfs/buddyinfo.go b/vendor/github.com/prometheus/procfs/buddyinfo.go new file mode 100644 index 0000000..680a984 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/buddyinfo.go @@ -0,0 +1,95 @@ +// Copyright 2017 The Prometheus 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 procfs + +import ( + "bufio" + "fmt" + "io" + "os" + "strconv" + "strings" +) + +// A BuddyInfo is the details parsed from /proc/buddyinfo. +// The data is comprised of an array of free fragments of each size. +// The sizes are 2^n*PAGE_SIZE, where n is the array index. +type BuddyInfo struct { + Node string + Zone string + Sizes []float64 +} + +// NewBuddyInfo reads the buddyinfo statistics. +func NewBuddyInfo() ([]BuddyInfo, error) { + fs, err := NewFS(DefaultMountPoint) + if err != nil { + return nil, err + } + + return fs.NewBuddyInfo() +} + +// NewBuddyInfo reads the buddyinfo statistics from the specified `proc` filesystem. +func (fs FS) NewBuddyInfo() ([]BuddyInfo, error) { + file, err := os.Open(fs.Path("buddyinfo")) + if err != nil { + return nil, err + } + defer file.Close() + + return parseBuddyInfo(file) +} + +func parseBuddyInfo(r io.Reader) ([]BuddyInfo, error) { + var ( + buddyInfo = []BuddyInfo{} + scanner = bufio.NewScanner(r) + bucketCount = -1 + ) + + for scanner.Scan() { + var err error + line := scanner.Text() + parts := strings.Fields(string(line)) + + if len(parts) < 4 { + return nil, fmt.Errorf("invalid number of fields when parsing buddyinfo") + } + + node := strings.TrimRight(parts[1], ",") + zone := strings.TrimRight(parts[3], ",") + arraySize := len(parts[4:]) + + if bucketCount == -1 { + bucketCount = arraySize + } else { + if bucketCount != arraySize { + return nil, fmt.Errorf("mismatch in number of buddyinfo buckets, previous count %d, new count %d", bucketCount, arraySize) + } + } + + sizes := make([]float64, arraySize) + for i := 0; i < arraySize; i++ { + sizes[i], err = strconv.ParseFloat(parts[i+4], 64) + if err != nil { + return nil, fmt.Errorf("invalid value in buddyinfo: %s", err) + } + } + + buddyInfo = append(buddyInfo, BuddyInfo{node, zone, sizes}) + } + + return buddyInfo, scanner.Err() +} diff --git a/vendor/github.com/prometheus/procfs/buddyinfo_test.go b/vendor/github.com/prometheus/procfs/buddyinfo_test.go new file mode 100644 index 0000000..bcf9355 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/buddyinfo_test.go @@ -0,0 +1,64 @@ +// Copyright 2017 The Prometheus 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 procfs + +import ( + "strings" + "testing" +) + +func TestBuddyInfo(t *testing.T) { + buddyInfo, err := FS("fixtures/buddyinfo/valid").NewBuddyInfo() + if err != nil { + t.Fatal(err) + } + + if want, got := "DMA", buddyInfo[0].Zone; want != got { + t.Errorf("want Node 0, Zone %s, got %s", want, got) + } + + if want, got := "Normal", buddyInfo[2].Zone; want != got { + t.Errorf("want Node 0, Zone %s, got %s", want, got) + } + + if want, got := 4381.0, buddyInfo[2].Sizes[0]; want != got { + t.Errorf("want Node 0, Zone Normal %f, got %f", want, got) + } + + if want, got := 572.0, buddyInfo[1].Sizes[1]; want != got { + t.Errorf("want Node 0, Zone DMA32 %f, got %f", want, got) + } +} + +func TestBuddyInfoShort(t *testing.T) { + _, err := FS("fixtures/buddyinfo/short").NewBuddyInfo() + if err == nil { + t.Errorf("expected error, but none occurred") + } + + if want, got := "invalid number of fields when parsing buddyinfo", err.Error(); want != got { + t.Errorf("wrong error returned, wanted %q, got %q", want, got) + } +} + +func TestBuddyInfoSizeMismatch(t *testing.T) { + _, err := FS("fixtures/buddyinfo/sizemismatch").NewBuddyInfo() + if err == nil { + t.Errorf("expected error, but none occurred") + } + + if want, got := "mismatch in number of buddyinfo buckets", err.Error(); !strings.HasPrefix(got, want) { + t.Errorf("wrong error returned, wanted prefix %q, got %q", want, got) + } +} diff --git a/vendor/github.com/prometheus/procfs/fixtures/26231/comm b/vendor/github.com/prometheus/procfs/fixtures/26231/comm new file mode 100644 index 0000000..f027e0d --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/26231/comm @@ -0,0 +1 @@ +vim diff --git a/vendor/github.com/prometheus/procfs/fixtures/26231/limits b/vendor/github.com/prometheus/procfs/fixtures/26231/limits index 23c6b68..8b40108 100644 --- a/vendor/github.com/prometheus/procfs/fixtures/26231/limits +++ b/vendor/github.com/prometheus/procfs/fixtures/26231/limits @@ -8,7 +8,7 @@ Max resident set unlimited unlimited bytes Max processes 62898 62898 processes Max open files 2048 4096 files Max locked memory 65536 65536 bytes -Max address space unlimited unlimited bytes +Max address space 8589934592 unlimited bytes Max file locks unlimited unlimited locks Max pending signals 62898 62898 signals Max msgqueue size 819200 819200 bytes diff --git a/vendor/github.com/prometheus/procfs/fixtures/26231/mountstats b/vendor/github.com/prometheus/procfs/fixtures/26231/mountstats new file mode 100644 index 0000000..a665c33 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/26231/mountstats @@ -0,0 +1,19 @@ +device rootfs mounted on / with fstype rootfs +device sysfs mounted on /sys with fstype sysfs +device proc mounted on /proc with fstype proc +device /dev/sda1 mounted on / with fstype ext4 +device 192.168.1.1:/srv/test mounted on /mnt/nfs/test with fstype nfs4 statvers=1.1 + opts: rw,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,acregmin=3,acregmax=60,acdirmin=30,acdirmax=60,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.5,local_lock=none + age: 13968 + caps: caps=0xfff7,wtmult=512,dtsize=32768,bsize=0,namlen=255 + nfsv4: bm0=0xfdffafff,bm1=0xf9be3e,bm2=0x0,acl=0x0,pnfs=not configured + sec: flavor=1,pseudoflavor=1 + events: 52 226 0 0 1 13 398 0 0 331 0 47 0 0 77 0 0 77 0 0 0 0 0 0 0 0 0 + bytes: 1207640230 0 0 0 1210214218 0 295483 0 + RPC iostats version: 1.0 p/v: 100003/4 (nfs) + xprt: tcp 832 0 1 0 11 6428 6428 0 12154 0 24 26 5726 + per-op statistics + NULL: 0 0 0 0 0 0 0 0 + READ: 1298 1298 0 207680 1210292152 6 79386 79407 + WRITE: 0 0 0 0 0 0 0 0 + diff --git a/vendor/github.com/prometheus/procfs/fixtures/26232/comm b/vendor/github.com/prometheus/procfs/fixtures/26232/comm new file mode 100644 index 0000000..62361ca --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/26232/comm @@ -0,0 +1 @@ +ata_sff diff --git a/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/short/buddyinfo b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/short/buddyinfo new file mode 100644 index 0000000..40e71ca --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/short/buddyinfo @@ -0,0 +1,3 @@ +Node 0, zone +Node 0, zone +Node 0, zone diff --git a/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/sizemismatch/buddyinfo b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/sizemismatch/buddyinfo new file mode 100644 index 0000000..9456361 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/sizemismatch/buddyinfo @@ -0,0 +1,3 @@ +Node 0, zone DMA 1 0 1 0 2 1 1 0 1 1 3 +Node 0, zone DMA32 759 572 791 475 194 45 12 0 0 0 0 0 +Node 0, zone Normal 4381 1093 185 1530 567 102 4 0 0 0 diff --git a/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/valid/buddyinfo b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/valid/buddyinfo new file mode 100644 index 0000000..f90594a --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/buddyinfo/valid/buddyinfo @@ -0,0 +1,3 @@ +Node 0, zone DMA 1 0 1 0 2 1 1 0 1 1 3 +Node 0, zone DMA32 759 572 791 475 194 45 12 0 0 0 0 +Node 0, zone Normal 4381 1093 185 1530 567 102 4 0 0 0 0 diff --git a/vendor/github.com/prometheus/procfs/fixtures/fs/xfs/stat b/vendor/github.com/prometheus/procfs/fixtures/fs/xfs/stat new file mode 100644 index 0000000..f7ca7f9 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/fs/xfs/stat @@ -0,0 +1,23 @@ +extent_alloc 92447 97589 92448 93751 +abt 0 0 0 0 +blk_map 1767055 188820 184891 92447 92448 2140766 0 +bmbt 0 0 0 0 +dir 185039 92447 92444 136422 +trans 706 944304 0 +ig 185045 58807 0 126238 0 33637 22 +log 2883 113448 9 17360 739 +push_ail 945014 0 134260 15483 0 3940 464 159985 0 40 +xstrat 92447 0 +rw 107739 94045 +attr 4 0 0 0 +icluster 8677 7849 135802 +vnodes 92601 0 0 0 92444 92444 92444 0 +buf 2666287 7122 2659202 3599 2 7085 0 10297 7085 +abtb2 184941 1277345 13257 13278 0 0 0 0 0 0 0 0 0 0 2746147 +abtc2 345295 2416764 172637 172658 0 0 0 0 0 0 0 0 0 0 21406023 +bmbt2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +ibt2 343004 1358467 0 0 0 0 0 0 0 0 0 0 0 0 0 +fibt2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +qm 0 0 0 0 0 0 0 0 +xpc 399724544 92823103 86219234 +debug 0 diff --git a/vendor/github.com/prometheus/procfs/fixtures/mdstat b/vendor/github.com/prometheus/procfs/fixtures/mdstat new file mode 100644 index 0000000..4430bde --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/mdstat @@ -0,0 +1,26 @@ +Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] +md3 : active raid6 sda1[8] sdh1[7] sdg1[6] sdf1[5] sde1[11] sdd1[3] sdc1[10] sdb1[9] + 5853468288 blocks super 1.2 level 6, 64k chunk, algorithm 2 [8/8] [UUUUUUUU] + +md127 : active raid1 sdi2[0] sdj2[1] + 312319552 blocks [2/2] [UU] + +md0 : active raid1 sdk[2](S) sdi1[0] sdj1[1] + 248896 blocks [2/2] [UU] + +md4 : inactive raid1 sda3[0] sdb3[1] + 4883648 blocks [2/2] [UU] + +md6 : active raid1 sdb2[2] sda2[0] + 195310144 blocks [2/1] [U_] + [=>...................] recovery = 8.5% (16775552/195310144) finish=17.0min speed=259783K/sec + +md8 : active raid1 sdb1[1] sda1[0] + 195310144 blocks [2/2] [UU] + [=>...................] resync = 8.5% (16775552/195310144) finish=17.0min speed=259783K/sec + +md7 : active raid6 sdb1[0] sde1[3] sdd1[2] sdc1[1] + 7813735424 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/3] [U_UU] + bitmap: 0/30 pages [0KB], 65536KB chunk + +unused devices: diff --git a/vendor/github.com/prometheus/procfs/fixtures/net/ip_vs b/vendor/github.com/prometheus/procfs/fixtures/net/ip_vs index 6a6a97d..5ee4bd2 100644 --- a/vendor/github.com/prometheus/procfs/fixtures/net/ip_vs +++ b/vendor/github.com/prometheus/procfs/fixtures/net/ip_vs @@ -1,14 +1,21 @@ IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn -TCP C0A80016:0CEA wlc - -> C0A85216:0CEA Tunnel 100 248 2 - -> C0A85318:0CEA Tunnel 100 248 2 - -> C0A85315:0CEA Tunnel 100 248 1 -TCP C0A80039:0CEA wlc - -> C0A85416:0CEA Tunnel 0 0 0 - -> C0A85215:0CEA Tunnel 100 1499 0 - -> C0A83215:0CEA Tunnel 100 1498 0 -TCP C0A80037:0CEA wlc - -> C0A8321A:0CEA Tunnel 0 0 0 - -> C0A83120:0CEA Tunnel 100 0 0 +TCP C0A80016:0CEA wlc + -> C0A85216:0CEA Tunnel 100 248 2 + -> C0A85318:0CEA Tunnel 100 248 2 + -> C0A85315:0CEA Tunnel 100 248 1 +TCP C0A80039:0CEA wlc + -> C0A85416:0CEA Tunnel 0 0 0 + -> C0A85215:0CEA Tunnel 100 1499 0 + -> C0A83215:0CEA Tunnel 100 1498 0 +TCP C0A80037:0CEA wlc + -> C0A8321A:0CEA Tunnel 0 0 0 + -> C0A83120:0CEA Tunnel 100 0 0 +TCP [2620:0000:0000:0000:0000:0000:0000:0001]:0050 sh + -> [2620:0000:0000:0000:0000:0000:0000:0002]:0050 Route 1 0 0 + -> [2620:0000:0000:0000:0000:0000:0000:0003]:0050 Route 1 0 0 + -> [2620:0000:0000:0000:0000:0000:0000:0004]:0050 Route 1 1 1 +FWM 10001000 wlc + -> C0A8321A:0CEA Route 0 0 1 + -> C0A83215:0CEA Route 0 0 2 diff --git a/vendor/github.com/prometheus/procfs/fixtures/net/xfrm_stat b/vendor/github.com/prometheus/procfs/fixtures/net/xfrm_stat new file mode 100644 index 0000000..d278ace --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/net/xfrm_stat @@ -0,0 +1,28 @@ +XfrmInError 1 +XfrmInBufferError 2 +XfrmInHdrError 4 +XfrmInNoStates 3 +XfrmInStateProtoError 40 +XfrmInStateModeError 100 +XfrmInStateSeqError 6000 +XfrmInStateExpired 4 +XfrmInStateMismatch 23451 +XfrmInStateInvalid 55555 +XfrmInTmplMismatch 51 +XfrmInNoPols 65432 +XfrmInPolBlock 100 +XfrmInPolError 10000 +XfrmOutError 1000000 +XfrmOutBundleGenError 43321 +XfrmOutBundleCheckError 555 +XfrmOutNoStates 869 +XfrmOutStateProtoError 4542 +XfrmOutStateModeError 4 +XfrmOutStateSeqError 543 +XfrmOutStateExpired 565 +XfrmOutPolBlock 43456 +XfrmOutPolDead 7656 +XfrmOutPolError 1454 +XfrmFwdHdrError 6654 +XfrmOutStateInvalid 28765 +XfrmAcquireError 24532 diff --git a/vendor/github.com/prometheus/procfs/fixtures/self b/vendor/github.com/prometheus/procfs/fixtures/self new file mode 120000 index 0000000..1eeedea --- /dev/null +++ b/vendor/github.com/prometheus/procfs/fixtures/self @@ -0,0 +1 @@ +26231 \ No newline at end of file diff --git a/vendor/github.com/prometheus/procfs/fixtures/stat b/vendor/github.com/prometheus/procfs/fixtures/stat index dabb96f..1582a8c 100644 --- a/vendor/github.com/prometheus/procfs/fixtures/stat +++ b/vendor/github.com/prometheus/procfs/fixtures/stat @@ -12,5 +12,5 @@ ctxt 38014093 btime 1418183276 processes 26442 procs_running 2 -procs_blocked 0 +procs_blocked 1 softirq 5057579 250191 1481983 1647 211099 186066 0 1783454 622196 12499 508444 diff --git a/vendor/github.com/prometheus/procfs/fs.go b/vendor/github.com/prometheus/procfs/fs.go index 6a8d97b..1754675 100644 --- a/vendor/github.com/prometheus/procfs/fs.go +++ b/vendor/github.com/prometheus/procfs/fs.go @@ -4,6 +4,8 @@ import ( "fmt" "os" "path" + + "github.com/prometheus/procfs/xfs" ) // FS represents the pseudo-filesystem proc, which provides an interface to @@ -27,14 +29,18 @@ func NewFS(mountPoint string) (FS, error) { return FS(mountPoint), nil } -func (fs FS) stat(p string) (os.FileInfo, error) { - return os.Stat(path.Join(string(fs), p)) +// Path returns the path of the given subsystem relative to the procfs root. +func (fs FS) Path(p ...string) string { + return path.Join(append([]string{string(fs)}, p...)...) } -func (fs FS) open(p string) (*os.File, error) { - return os.Open(path.Join(string(fs), p)) -} +// XFSStats retrieves XFS filesystem runtime statistics. +func (fs FS) XFSStats() (*xfs.Stats, error) { + f, err := os.Open(fs.Path("fs/xfs/stat")) + if err != nil { + return nil, err + } + defer f.Close() -func (fs FS) readlink(p string) (string, error) { - return os.Readlink(path.Join(string(fs), p)) + return xfs.ParseStats(f) } diff --git a/vendor/github.com/prometheus/procfs/fs_test.go b/vendor/github.com/prometheus/procfs/fs_test.go index 91f1c6c..e492cde 100644 --- a/vendor/github.com/prometheus/procfs/fs_test.go +++ b/vendor/github.com/prometheus/procfs/fs_test.go @@ -11,3 +11,16 @@ func TestNewFS(t *testing.T) { t.Error("want NewFS to fail if mount point is not a directory") } } + +func TestFSXFSStats(t *testing.T) { + stats, err := FS("fixtures").XFSStats() + if err != nil { + t.Fatalf("failed to parse XFS stats: %v", err) + } + + // Very lightweight test just to sanity check the path used + // to open XFS stats. Heavier tests in package xfs. + if want, got := uint32(92447), stats.ExtentAllocation.ExtentsAllocated; want != got { + t.Errorf("unexpected extents allocated:\nwant: %d\nhave: %d", want, got) + } +} diff --git a/vendor/github.com/prometheus/procfs/ipvs.go b/vendor/github.com/prometheus/procfs/ipvs.go index 26da500..696d114 100644 --- a/vendor/github.com/prometheus/procfs/ipvs.go +++ b/vendor/github.com/prometheus/procfs/ipvs.go @@ -8,6 +8,7 @@ import ( "io" "io/ioutil" "net" + "os" "strconv" "strings" ) @@ -32,6 +33,8 @@ type IPVSBackendStatus struct { LocalAddress net.IP // The local (virtual) port. LocalPort uint16 + // The local firewall mark + LocalMark string // The transport protocol (TCP, UDP). Proto string // The remote (real) IP address. @@ -58,7 +61,7 @@ func NewIPVSStats() (IPVSStats, error) { // NewIPVSStats reads the IPVS statistics from the specified `proc` filesystem. func (fs FS) NewIPVSStats() (IPVSStats, error) { - file, err := fs.open("net/ip_vs_stats") + file, err := os.Open(fs.Path("net/ip_vs_stats")) if err != nil { return IPVSStats{}, err } @@ -127,7 +130,7 @@ func NewIPVSBackendStatus() ([]IPVSBackendStatus, error) { // NewIPVSBackendStatus reads and returns the status of all (virtual,real) server pairs from the specified `proc` filesystem. func (fs FS) NewIPVSBackendStatus() ([]IPVSBackendStatus, error) { - file, err := fs.open("net/ip_vs") + file, err := os.Open(fs.Path("net/ip_vs")) if err != nil { return nil, err } @@ -141,6 +144,7 @@ func parseIPVSBackendStatus(file io.Reader) ([]IPVSBackendStatus, error) { status []IPVSBackendStatus scanner = bufio.NewScanner(file) proto string + localMark string localAddress net.IP localPort uint16 err error @@ -159,10 +163,19 @@ func parseIPVSBackendStatus(file io.Reader) ([]IPVSBackendStatus, error) { continue } proto = fields[0] + localMark = "" localAddress, localPort, err = parseIPPort(fields[1]) if err != nil { return nil, err } + case fields[0] == "FWM": + if len(fields) < 2 { + continue + } + proto = fields[0] + localMark = fields[1] + localAddress = nil + localPort = 0 case fields[0] == "->": if len(fields) < 6 { continue @@ -186,6 +199,7 @@ func parseIPVSBackendStatus(file io.Reader) ([]IPVSBackendStatus, error) { status = append(status, IPVSBackendStatus{ LocalAddress: localAddress, LocalPort: localPort, + LocalMark: localMark, RemoteAddress: remoteAddress, RemotePort: remotePort, Proto: proto, @@ -199,22 +213,31 @@ func parseIPVSBackendStatus(file io.Reader) ([]IPVSBackendStatus, error) { } func parseIPPort(s string) (net.IP, uint16, error) { - tmp := strings.SplitN(s, ":", 2) + var ( + ip net.IP + err error + ) - if len(tmp) != 2 { - return nil, 0, fmt.Errorf("invalid IP:Port: %s", s) + switch len(s) { + case 13: + ip, err = hex.DecodeString(s[0:8]) + if err != nil { + return nil, 0, err + } + case 46: + ip = net.ParseIP(s[1:40]) + if ip == nil { + return nil, 0, fmt.Errorf("invalid IPv6 address: %s", s[1:40]) + } + default: + return nil, 0, fmt.Errorf("unexpected IP:Port: %s", s) } - if len(tmp[0]) != 8 && len(tmp[0]) != 32 { - return nil, 0, fmt.Errorf("invalid IP: %s", tmp[0]) + portString := s[len(s)-4:] + if len(portString) != 4 { + return nil, 0, fmt.Errorf("unexpected port string format: %s", portString) } - - ip, err := hex.DecodeString(tmp[0]) - if err != nil { - return nil, 0, err - } - - port, err := strconv.ParseUint(tmp[1], 16, 16) + port, err := strconv.ParseUint(portString, 16, 16) if err != nil { return nil, 0, err } diff --git a/vendor/github.com/prometheus/procfs/ipvs_test.go b/vendor/github.com/prometheus/procfs/ipvs_test.go index 6036cde..13ceab8 100644 --- a/vendor/github.com/prometheus/procfs/ipvs_test.go +++ b/vendor/github.com/prometheus/procfs/ipvs_test.go @@ -14,7 +14,7 @@ var ( OutgoingBytes: 0, } expectedIPVSBackendStatuses = []IPVSBackendStatus{ - IPVSBackendStatus{ + { LocalAddress: net.ParseIP("192.168.0.22"), LocalPort: 3306, RemoteAddress: net.ParseIP("192.168.82.22"), @@ -24,7 +24,7 @@ var ( ActiveConn: 248, InactConn: 2, }, - IPVSBackendStatus{ + { LocalAddress: net.ParseIP("192.168.0.22"), LocalPort: 3306, RemoteAddress: net.ParseIP("192.168.83.24"), @@ -34,7 +34,7 @@ var ( ActiveConn: 248, InactConn: 2, }, - IPVSBackendStatus{ + { LocalAddress: net.ParseIP("192.168.0.22"), LocalPort: 3306, RemoteAddress: net.ParseIP("192.168.83.21"), @@ -44,7 +44,7 @@ var ( ActiveConn: 248, InactConn: 1, }, - IPVSBackendStatus{ + { LocalAddress: net.ParseIP("192.168.0.57"), LocalPort: 3306, RemoteAddress: net.ParseIP("192.168.84.22"), @@ -54,7 +54,7 @@ var ( ActiveConn: 0, InactConn: 0, }, - IPVSBackendStatus{ + { LocalAddress: net.ParseIP("192.168.0.57"), LocalPort: 3306, RemoteAddress: net.ParseIP("192.168.82.21"), @@ -64,7 +64,7 @@ var ( ActiveConn: 1499, InactConn: 0, }, - IPVSBackendStatus{ + { LocalAddress: net.ParseIP("192.168.0.57"), LocalPort: 3306, RemoteAddress: net.ParseIP("192.168.50.21"), @@ -74,7 +74,7 @@ var ( ActiveConn: 1498, InactConn: 0, }, - IPVSBackendStatus{ + { LocalAddress: net.ParseIP("192.168.0.55"), LocalPort: 3306, RemoteAddress: net.ParseIP("192.168.50.26"), @@ -84,7 +84,7 @@ var ( ActiveConn: 0, InactConn: 0, }, - IPVSBackendStatus{ + { LocalAddress: net.ParseIP("192.168.0.55"), LocalPort: 3306, RemoteAddress: net.ParseIP("192.168.49.32"), @@ -94,21 +94,65 @@ var ( ActiveConn: 0, InactConn: 0, }, + { + LocalAddress: net.ParseIP("2620::1"), + LocalPort: 80, + RemoteAddress: net.ParseIP("2620::2"), + RemotePort: 80, + Proto: "TCP", + Weight: 1, + ActiveConn: 0, + InactConn: 0, + }, + { + LocalAddress: net.ParseIP("2620::1"), + LocalPort: 80, + RemoteAddress: net.ParseIP("2620::3"), + RemotePort: 80, + Proto: "TCP", + Weight: 1, + ActiveConn: 0, + InactConn: 0, + }, + { + LocalAddress: net.ParseIP("2620::1"), + LocalPort: 80, + RemoteAddress: net.ParseIP("2620::4"), + RemotePort: 80, + Proto: "TCP", + Weight: 1, + ActiveConn: 1, + InactConn: 1, + }, + { + LocalMark: "10001000", + RemoteAddress: net.ParseIP("192.168.50.26"), + RemotePort: 3306, + Proto: "FWM", + Weight: 0, + ActiveConn: 0, + InactConn: 1, + }, + { + LocalMark: "10001000", + RemoteAddress: net.ParseIP("192.168.50.21"), + RemotePort: 3306, + Proto: "FWM", + Weight: 0, + ActiveConn: 0, + InactConn: 2, + }, } ) func TestIPVSStats(t *testing.T) { - fs, err := NewFS("fixtures") - if err != nil { - t.Fatal(err) - } - stats, err := fs.NewIPVSStats() + stats, err := FS("fixtures").NewIPVSStats() if err != nil { t.Fatal(err) } if stats != expectedIPVSStats { - t.Errorf("want %+v, got %+v", expectedIPVSStats, stats) + t.Errorf("want %+v, have %+v", expectedIPVSStats, stats) } } @@ -121,7 +165,7 @@ func TestParseIPPort(t *testing.T) { t.Fatal(err) } if !(gotIP.Equal(ip) && port == gotPort) { - t.Errorf("want %s:%d, got %s:%d", ip, port, gotIP, gotPort) + t.Errorf("want %s:%d, have %s:%d", ip, port, gotIP, gotPort) } } @@ -137,7 +181,7 @@ func TestParseIPPortInvalid(t *testing.T) { for _, s := range testcases { ip, port, err := parseIPPort(s) if ip != nil || port != uint16(0) || err == nil { - t.Errorf("Expected error for input %s, got ip = %s, port = %v, err = %v", s, ip, port, err) + t.Errorf("Expected error for input %s, have ip = %s, port = %v, err = %v", s, ip, port, err) } } } @@ -146,51 +190,48 @@ func TestParseIPPortIPv6(t *testing.T) { ip := net.ParseIP("dead:beef::1") port := uint16(8080) - gotIP, gotPort, err := parseIPPort("DEADBEEF000000000000000000000001:1F90") + gotIP, gotPort, err := parseIPPort("[DEAD:BEEF:0000:0000:0000:0000:0000:0001]:1F90") if err != nil { t.Fatal(err) } if !(gotIP.Equal(ip) && port == gotPort) { - t.Errorf("want %s:%d, got %s:%d", ip, port, gotIP, gotPort) + t.Errorf("want %s:%d, have %s:%d", ip, port, gotIP, gotPort) } - } func TestIPVSBackendStatus(t *testing.T) { - fs, err := NewFS("fixtures") + backendStats, err := FS("fixtures").NewIPVSBackendStatus() if err != nil { t.Fatal(err) } - - backendStats, err := fs.NewIPVSBackendStatus() - if err != nil { - t.Fatal(err) + if want, have := len(expectedIPVSBackendStatuses), len(backendStats); want != have { + t.Fatalf("want %d backend statuses, have %d", want, have) } for idx, expect := range expectedIPVSBackendStatuses { if !backendStats[idx].LocalAddress.Equal(expect.LocalAddress) { - t.Errorf("expected LocalAddress %s, got %s", expect.LocalAddress, backendStats[idx].LocalAddress) + t.Errorf("want LocalAddress %s, have %s", expect.LocalAddress, backendStats[idx].LocalAddress) } if backendStats[idx].LocalPort != expect.LocalPort { - t.Errorf("expected LocalPort %d, got %d", expect.LocalPort, backendStats[idx].LocalPort) + t.Errorf("want LocalPort %d, have %d", expect.LocalPort, backendStats[idx].LocalPort) } if !backendStats[idx].RemoteAddress.Equal(expect.RemoteAddress) { - t.Errorf("expected RemoteAddress %s, got %s", expect.RemoteAddress, backendStats[idx].RemoteAddress) + t.Errorf("want RemoteAddress %s, have %s", expect.RemoteAddress, backendStats[idx].RemoteAddress) } if backendStats[idx].RemotePort != expect.RemotePort { - t.Errorf("expected RemotePort %d, got %d", expect.RemotePort, backendStats[idx].RemotePort) + t.Errorf("want RemotePort %d, have %d", expect.RemotePort, backendStats[idx].RemotePort) } if backendStats[idx].Proto != expect.Proto { - t.Errorf("expected Proto %s, got %s", expect.Proto, backendStats[idx].Proto) + t.Errorf("want Proto %s, have %s", expect.Proto, backendStats[idx].Proto) } if backendStats[idx].Weight != expect.Weight { - t.Errorf("expected Weight %d, got %d", expect.Weight, backendStats[idx].Weight) + t.Errorf("want Weight %d, have %d", expect.Weight, backendStats[idx].Weight) } if backendStats[idx].ActiveConn != expect.ActiveConn { - t.Errorf("expected ActiveConn %d, got %d", expect.ActiveConn, backendStats[idx].ActiveConn) + t.Errorf("want ActiveConn %d, have %d", expect.ActiveConn, backendStats[idx].ActiveConn) } if backendStats[idx].InactConn != expect.InactConn { - t.Errorf("expected InactConn %d, got %d", expect.InactConn, backendStats[idx].InactConn) + t.Errorf("want InactConn %d, have %d", expect.InactConn, backendStats[idx].InactConn) } } } diff --git a/vendor/github.com/prometheus/procfs/mdstat.go b/vendor/github.com/prometheus/procfs/mdstat.go new file mode 100644 index 0000000..d7a248c --- /dev/null +++ b/vendor/github.com/prometheus/procfs/mdstat.go @@ -0,0 +1,138 @@ +package procfs + +import ( + "fmt" + "io/ioutil" + "regexp" + "strconv" + "strings" +) + +var ( + statuslineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[[U_]+\]`) + buildlineRE = regexp.MustCompile(`\((\d+)/\d+\)`) +) + +// MDStat holds info parsed from /proc/mdstat. +type MDStat struct { + // Name of the device. + Name string + // activity-state of the device. + ActivityState string + // Number of active disks. + DisksActive int64 + // Total number of disks the device consists of. + DisksTotal int64 + // Number of blocks the device holds. + BlocksTotal int64 + // Number of blocks on the device that are in sync. + BlocksSynced int64 +} + +// ParseMDStat parses an mdstat-file and returns a struct with the relevant infos. +func (fs FS) ParseMDStat() (mdstates []MDStat, err error) { + mdStatusFilePath := fs.Path("mdstat") + content, err := ioutil.ReadFile(mdStatusFilePath) + if err != nil { + return []MDStat{}, fmt.Errorf("error parsing %s: %s", mdStatusFilePath, err) + } + + mdStates := []MDStat{} + lines := strings.Split(string(content), "\n") + for i, l := range lines { + if l == "" { + continue + } + if l[0] == ' ' { + continue + } + if strings.HasPrefix(l, "Personalities") || strings.HasPrefix(l, "unused") { + continue + } + + mainLine := strings.Split(l, " ") + if len(mainLine) < 3 { + return mdStates, fmt.Errorf("error parsing mdline: %s", l) + } + mdName := mainLine[0] + activityState := mainLine[2] + + if len(lines) <= i+3 { + return mdStates, fmt.Errorf( + "error parsing %s: too few lines for md device %s", + mdStatusFilePath, + mdName, + ) + } + + active, total, size, err := evalStatusline(lines[i+1]) + if err != nil { + return mdStates, fmt.Errorf("error parsing %s: %s", mdStatusFilePath, err) + } + + // j is the line number of the syncing-line. + j := i + 2 + if strings.Contains(lines[i+2], "bitmap") { // skip bitmap line + j = i + 3 + } + + // If device is syncing at the moment, get the number of currently + // synced bytes, otherwise that number equals the size of the device. + syncedBlocks := size + if strings.Contains(lines[j], "recovery") || strings.Contains(lines[j], "resync") { + syncedBlocks, err = evalBuildline(lines[j]) + if err != nil { + return mdStates, fmt.Errorf("error parsing %s: %s", mdStatusFilePath, err) + } + } + + mdStates = append(mdStates, MDStat{ + Name: mdName, + ActivityState: activityState, + DisksActive: active, + DisksTotal: total, + BlocksTotal: size, + BlocksSynced: syncedBlocks, + }) + } + + return mdStates, nil +} + +func evalStatusline(statusline string) (active, total, size int64, err error) { + matches := statuslineRE.FindStringSubmatch(statusline) + if len(matches) != 4 { + return 0, 0, 0, fmt.Errorf("unexpected statusline: %s", statusline) + } + + size, err = strconv.ParseInt(matches[1], 10, 64) + if err != nil { + return 0, 0, 0, fmt.Errorf("unexpected statusline %s: %s", statusline, err) + } + + total, err = strconv.ParseInt(matches[2], 10, 64) + if err != nil { + return 0, 0, 0, fmt.Errorf("unexpected statusline %s: %s", statusline, err) + } + + active, err = strconv.ParseInt(matches[3], 10, 64) + if err != nil { + return 0, 0, 0, fmt.Errorf("unexpected statusline %s: %s", statusline, err) + } + + return active, total, size, nil +} + +func evalBuildline(buildline string) (syncedBlocks int64, err error) { + matches := buildlineRE.FindStringSubmatch(buildline) + if len(matches) != 2 { + return 0, fmt.Errorf("unexpected buildline: %s", buildline) + } + + syncedBlocks, err = strconv.ParseInt(matches[1], 10, 64) + if err != nil { + return 0, fmt.Errorf("%s in buildline: %s", err, buildline) + } + + return syncedBlocks, nil +} diff --git a/vendor/github.com/prometheus/procfs/mdstat_test.go b/vendor/github.com/prometheus/procfs/mdstat_test.go new file mode 100644 index 0000000..fa463c2 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/mdstat_test.go @@ -0,0 +1,31 @@ +package procfs + +import ( + "testing" +) + +func TestMDStat(t *testing.T) { + mdStates, err := FS("fixtures").ParseMDStat() + if err != nil { + t.Fatalf("parsing of reference-file failed entirely: %s", err) + } + + refs := map[string]MDStat{ + "md3": {"md3", "active", 8, 8, 5853468288, 5853468288}, + "md127": {"md127", "active", 2, 2, 312319552, 312319552}, + "md0": {"md0", "active", 2, 2, 248896, 248896}, + "md4": {"md4", "inactive", 2, 2, 4883648, 4883648}, + "md6": {"md6", "active", 1, 2, 195310144, 16775552}, + "md8": {"md8", "active", 2, 2, 195310144, 16775552}, + "md7": {"md7", "active", 3, 4, 7813735424, 7813735424}, + } + + if want, have := len(refs), len(mdStates); want != have { + t.Errorf("want %d parsed md-devices, have %d", want, have) + } + for _, md := range mdStates { + if want, have := refs[md.Name], md; want != have { + t.Errorf("%s: want %v, have %v", md.Name, want, have) + } + } +} diff --git a/vendor/github.com/prometheus/procfs/mountstats.go b/vendor/github.com/prometheus/procfs/mountstats.go new file mode 100644 index 0000000..6b2b0ba --- /dev/null +++ b/vendor/github.com/prometheus/procfs/mountstats.go @@ -0,0 +1,556 @@ +package procfs + +// While implementing parsing of /proc/[pid]/mountstats, this blog was used +// heavily as a reference: +// https://utcc.utoronto.ca/~cks/space/blog/linux/NFSMountstatsIndex +// +// Special thanks to Chris Siebenmann for all of his posts explaining the +// various statistics available for NFS. + +import ( + "bufio" + "fmt" + "io" + "strconv" + "strings" + "time" +) + +// Constants shared between multiple functions. +const ( + deviceEntryLen = 8 + + fieldBytesLen = 8 + fieldEventsLen = 27 + + statVersion10 = "1.0" + statVersion11 = "1.1" + + fieldTransport10Len = 10 + fieldTransport11Len = 13 +) + +// A Mount is a device mount parsed from /proc/[pid]/mountstats. +type Mount struct { + // Name of the device. + Device string + // The mount point of the device. + Mount string + // The filesystem type used by the device. + Type string + // If available additional statistics related to this Mount. + // Use a type assertion to determine if additional statistics are available. + Stats MountStats +} + +// A MountStats is a type which contains detailed statistics for a specific +// type of Mount. +type MountStats interface { + mountStats() +} + +// A MountStatsNFS is a MountStats implementation for NFSv3 and v4 mounts. +type MountStatsNFS struct { + // The version of statistics provided. + StatVersion string + // The age of the NFS mount. + Age time.Duration + // Statistics related to byte counters for various operations. + Bytes NFSBytesStats + // Statistics related to various NFS event occurrences. + Events NFSEventsStats + // Statistics broken down by filesystem operation. + Operations []NFSOperationStats + // Statistics about the NFS RPC transport. + Transport NFSTransportStats +} + +// mountStats implements MountStats. +func (m MountStatsNFS) mountStats() {} + +// A NFSBytesStats contains statistics about the number of bytes read and written +// by an NFS client to and from an NFS server. +type NFSBytesStats struct { + // Number of bytes read using the read() syscall. + Read uint64 + // Number of bytes written using the write() syscall. + Write uint64 + // Number of bytes read using the read() syscall in O_DIRECT mode. + DirectRead uint64 + // Number of bytes written using the write() syscall in O_DIRECT mode. + DirectWrite uint64 + // Number of bytes read from the NFS server, in total. + ReadTotal uint64 + // Number of bytes written to the NFS server, in total. + WriteTotal uint64 + // Number of pages read directly via mmap()'d files. + ReadPages uint64 + // Number of pages written directly via mmap()'d files. + WritePages uint64 +} + +// A NFSEventsStats contains statistics about NFS event occurrences. +type NFSEventsStats struct { + // Number of times cached inode attributes are re-validated from the server. + InodeRevalidate uint64 + // Number of times cached dentry nodes are re-validated from the server. + DnodeRevalidate uint64 + // Number of times an inode cache is cleared. + DataInvalidate uint64 + // Number of times cached inode attributes are invalidated. + AttributeInvalidate uint64 + // Number of times files or directories have been open()'d. + VFSOpen uint64 + // Number of times a directory lookup has occurred. + VFSLookup uint64 + // Number of times permissions have been checked. + VFSAccess uint64 + // Number of updates (and potential writes) to pages. + VFSUpdatePage uint64 + // Number of pages read directly via mmap()'d files. + VFSReadPage uint64 + // Number of times a group of pages have been read. + VFSReadPages uint64 + // Number of pages written directly via mmap()'d files. + VFSWritePage uint64 + // Number of times a group of pages have been written. + VFSWritePages uint64 + // Number of times directory entries have been read with getdents(). + VFSGetdents uint64 + // Number of times attributes have been set on inodes. + VFSSetattr uint64 + // Number of pending writes that have been forcefully flushed to the server. + VFSFlush uint64 + // Number of times fsync() has been called on directories and files. + VFSFsync uint64 + // Number of times locking has been attempted on a file. + VFSLock uint64 + // Number of times files have been closed and released. + VFSFileRelease uint64 + // Unknown. Possibly unused. + CongestionWait uint64 + // Number of times files have been truncated. + Truncation uint64 + // Number of times a file has been grown due to writes beyond its existing end. + WriteExtension uint64 + // Number of times a file was removed while still open by another process. + SillyRename uint64 + // Number of times the NFS server gave less data than expected while reading. + ShortRead uint64 + // Number of times the NFS server wrote less data than expected while writing. + ShortWrite uint64 + // Number of times the NFS server indicated EJUKEBOX; retrieving data from + // offline storage. + JukeboxDelay uint64 + // Number of NFS v4.1+ pNFS reads. + PNFSRead uint64 + // Number of NFS v4.1+ pNFS writes. + PNFSWrite uint64 +} + +// A NFSOperationStats contains statistics for a single operation. +type NFSOperationStats struct { + // The name of the operation. + Operation string + // Number of requests performed for this operation. + Requests uint64 + // Number of times an actual RPC request has been transmitted for this operation. + Transmissions uint64 + // Number of times a request has had a major timeout. + MajorTimeouts uint64 + // Number of bytes sent for this operation, including RPC headers and payload. + BytesSent uint64 + // Number of bytes received for this operation, including RPC headers and payload. + BytesReceived uint64 + // Duration all requests spent queued for transmission before they were sent. + CumulativeQueueTime time.Duration + // Duration it took to get a reply back after the request was transmitted. + CumulativeTotalResponseTime time.Duration + // Duration from when a request was enqueued to when it was completely handled. + CumulativeTotalRequestTime time.Duration +} + +// A NFSTransportStats contains statistics for the NFS mount RPC requests and +// responses. +type NFSTransportStats struct { + // The local port used for the NFS mount. + Port uint64 + // Number of times the client has had to establish a connection from scratch + // to the NFS server. + Bind uint64 + // Number of times the client has made a TCP connection to the NFS server. + Connect uint64 + // Duration (in jiffies, a kernel internal unit of time) the NFS mount has + // spent waiting for connections to the server to be established. + ConnectIdleTime uint64 + // Duration since the NFS mount last saw any RPC traffic. + IdleTime time.Duration + // Number of RPC requests for this mount sent to the NFS server. + Sends uint64 + // Number of RPC responses for this mount received from the NFS server. + Receives uint64 + // Number of times the NFS server sent a response with a transaction ID + // unknown to this client. + BadTransactionIDs uint64 + // A running counter, incremented on each request as the current difference + // ebetween sends and receives. + CumulativeActiveRequests uint64 + // A running counter, incremented on each request by the current backlog + // queue size. + CumulativeBacklog uint64 + + // Stats below only available with stat version 1.1. + + // Maximum number of simultaneously active RPC requests ever used. + MaximumRPCSlotsUsed uint64 + // A running counter, incremented on each request as the current size of the + // sending queue. + CumulativeSendingQueue uint64 + // A running counter, incremented on each request as the current size of the + // pending queue. + CumulativePendingQueue uint64 +} + +// parseMountStats parses a /proc/[pid]/mountstats file and returns a slice +// of Mount structures containing detailed information about each mount. +// If available, statistics for each mount are parsed as well. +func parseMountStats(r io.Reader) ([]*Mount, error) { + const ( + device = "device" + statVersionPrefix = "statvers=" + + nfs3Type = "nfs" + nfs4Type = "nfs4" + ) + + var mounts []*Mount + + s := bufio.NewScanner(r) + for s.Scan() { + // Only look for device entries in this function + ss := strings.Fields(string(s.Bytes())) + if len(ss) == 0 || ss[0] != device { + continue + } + + m, err := parseMount(ss) + if err != nil { + return nil, err + } + + // Does this mount also possess statistics information? + if len(ss) > deviceEntryLen { + // Only NFSv3 and v4 are supported for parsing statistics + if m.Type != nfs3Type && m.Type != nfs4Type { + return nil, fmt.Errorf("cannot parse MountStats for fstype %q", m.Type) + } + + statVersion := strings.TrimPrefix(ss[8], statVersionPrefix) + + stats, err := parseMountStatsNFS(s, statVersion) + if err != nil { + return nil, err + } + + m.Stats = stats + } + + mounts = append(mounts, m) + } + + return mounts, s.Err() +} + +// parseMount parses an entry in /proc/[pid]/mountstats in the format: +// device [device] mounted on [mount] with fstype [type] +func parseMount(ss []string) (*Mount, error) { + if len(ss) < deviceEntryLen { + return nil, fmt.Errorf("invalid device entry: %v", ss) + } + + // Check for specific words appearing at specific indices to ensure + // the format is consistent with what we expect + format := []struct { + i int + s string + }{ + {i: 0, s: "device"}, + {i: 2, s: "mounted"}, + {i: 3, s: "on"}, + {i: 5, s: "with"}, + {i: 6, s: "fstype"}, + } + + for _, f := range format { + if ss[f.i] != f.s { + return nil, fmt.Errorf("invalid device entry: %v", ss) + } + } + + return &Mount{ + Device: ss[1], + Mount: ss[4], + Type: ss[7], + }, nil +} + +// parseMountStatsNFS parses a MountStatsNFS by scanning additional information +// related to NFS statistics. +func parseMountStatsNFS(s *bufio.Scanner, statVersion string) (*MountStatsNFS, error) { + // Field indicators for parsing specific types of data + const ( + fieldAge = "age:" + fieldBytes = "bytes:" + fieldEvents = "events:" + fieldPerOpStats = "per-op" + fieldTransport = "xprt:" + ) + + stats := &MountStatsNFS{ + StatVersion: statVersion, + } + + for s.Scan() { + ss := strings.Fields(string(s.Bytes())) + if len(ss) == 0 { + break + } + if len(ss) < 2 { + return nil, fmt.Errorf("not enough information for NFS stats: %v", ss) + } + + switch ss[0] { + case fieldAge: + // Age integer is in seconds + d, err := time.ParseDuration(ss[1] + "s") + if err != nil { + return nil, err + } + + stats.Age = d + case fieldBytes: + bstats, err := parseNFSBytesStats(ss[1:]) + if err != nil { + return nil, err + } + + stats.Bytes = *bstats + case fieldEvents: + estats, err := parseNFSEventsStats(ss[1:]) + if err != nil { + return nil, err + } + + stats.Events = *estats + case fieldTransport: + if len(ss) < 3 { + return nil, fmt.Errorf("not enough information for NFS transport stats: %v", ss) + } + + tstats, err := parseNFSTransportStats(ss[2:], statVersion) + if err != nil { + return nil, err + } + + stats.Transport = *tstats + } + + // When encountering "per-operation statistics", we must break this + // loop and parse them separately to ensure we can terminate parsing + // before reaching another device entry; hence why this 'if' statement + // is not just another switch case + if ss[0] == fieldPerOpStats { + break + } + } + + if err := s.Err(); err != nil { + return nil, err + } + + // NFS per-operation stats appear last before the next device entry + perOpStats, err := parseNFSOperationStats(s) + if err != nil { + return nil, err + } + + stats.Operations = perOpStats + + return stats, nil +} + +// parseNFSBytesStats parses a NFSBytesStats line using an input set of +// integer fields. +func parseNFSBytesStats(ss []string) (*NFSBytesStats, error) { + if len(ss) != fieldBytesLen { + return nil, fmt.Errorf("invalid NFS bytes stats: %v", ss) + } + + ns := make([]uint64, 0, fieldBytesLen) + for _, s := range ss { + n, err := strconv.ParseUint(s, 10, 64) + if err != nil { + return nil, err + } + + ns = append(ns, n) + } + + return &NFSBytesStats{ + Read: ns[0], + Write: ns[1], + DirectRead: ns[2], + DirectWrite: ns[3], + ReadTotal: ns[4], + WriteTotal: ns[5], + ReadPages: ns[6], + WritePages: ns[7], + }, nil +} + +// parseNFSEventsStats parses a NFSEventsStats line using an input set of +// integer fields. +func parseNFSEventsStats(ss []string) (*NFSEventsStats, error) { + if len(ss) != fieldEventsLen { + return nil, fmt.Errorf("invalid NFS events stats: %v", ss) + } + + ns := make([]uint64, 0, fieldEventsLen) + for _, s := range ss { + n, err := strconv.ParseUint(s, 10, 64) + if err != nil { + return nil, err + } + + ns = append(ns, n) + } + + return &NFSEventsStats{ + InodeRevalidate: ns[0], + DnodeRevalidate: ns[1], + DataInvalidate: ns[2], + AttributeInvalidate: ns[3], + VFSOpen: ns[4], + VFSLookup: ns[5], + VFSAccess: ns[6], + VFSUpdatePage: ns[7], + VFSReadPage: ns[8], + VFSReadPages: ns[9], + VFSWritePage: ns[10], + VFSWritePages: ns[11], + VFSGetdents: ns[12], + VFSSetattr: ns[13], + VFSFlush: ns[14], + VFSFsync: ns[15], + VFSLock: ns[16], + VFSFileRelease: ns[17], + CongestionWait: ns[18], + Truncation: ns[19], + WriteExtension: ns[20], + SillyRename: ns[21], + ShortRead: ns[22], + ShortWrite: ns[23], + JukeboxDelay: ns[24], + PNFSRead: ns[25], + PNFSWrite: ns[26], + }, nil +} + +// parseNFSOperationStats parses a slice of NFSOperationStats by scanning +// additional information about per-operation statistics until an empty +// line is reached. +func parseNFSOperationStats(s *bufio.Scanner) ([]NFSOperationStats, error) { + const ( + // Number of expected fields in each per-operation statistics set + numFields = 9 + ) + + var ops []NFSOperationStats + + for s.Scan() { + ss := strings.Fields(string(s.Bytes())) + if len(ss) == 0 { + // Must break when reading a blank line after per-operation stats to + // enable top-level function to parse the next device entry + break + } + + if len(ss) != numFields { + return nil, fmt.Errorf("invalid NFS per-operations stats: %v", ss) + } + + // Skip string operation name for integers + ns := make([]uint64, 0, numFields-1) + for _, st := range ss[1:] { + n, err := strconv.ParseUint(st, 10, 64) + if err != nil { + return nil, err + } + + ns = append(ns, n) + } + + ops = append(ops, NFSOperationStats{ + Operation: strings.TrimSuffix(ss[0], ":"), + Requests: ns[0], + Transmissions: ns[1], + MajorTimeouts: ns[2], + BytesSent: ns[3], + BytesReceived: ns[4], + CumulativeQueueTime: time.Duration(ns[5]) * time.Millisecond, + CumulativeTotalResponseTime: time.Duration(ns[6]) * time.Millisecond, + CumulativeTotalRequestTime: time.Duration(ns[7]) * time.Millisecond, + }) + } + + return ops, s.Err() +} + +// parseNFSTransportStats parses a NFSTransportStats line using an input set of +// integer fields matched to a specific stats version. +func parseNFSTransportStats(ss []string, statVersion string) (*NFSTransportStats, error) { + switch statVersion { + case statVersion10: + if len(ss) != fieldTransport10Len { + return nil, fmt.Errorf("invalid NFS transport stats 1.0 statement: %v", ss) + } + case statVersion11: + if len(ss) != fieldTransport11Len { + return nil, fmt.Errorf("invalid NFS transport stats 1.1 statement: %v", ss) + } + default: + return nil, fmt.Errorf("unrecognized NFS transport stats version: %q", statVersion) + } + + // Allocate enough for v1.1 stats since zero value for v1.1 stats will be okay + // in a v1.0 response. + // + // Note: slice length must be set to length of v1.1 stats to avoid a panic when + // only v1.0 stats are present. + // See: https://github.com/prometheus/node_exporter/issues/571. + ns := make([]uint64, fieldTransport11Len) + for i, s := range ss { + n, err := strconv.ParseUint(s, 10, 64) + if err != nil { + return nil, err + } + + ns[i] = n + } + + return &NFSTransportStats{ + Port: ns[0], + Bind: ns[1], + Connect: ns[2], + ConnectIdleTime: ns[3], + IdleTime: time.Duration(ns[4]) * time.Second, + Sends: ns[5], + Receives: ns[6], + BadTransactionIDs: ns[7], + CumulativeActiveRequests: ns[8], + CumulativeBacklog: ns[9], + MaximumRPCSlotsUsed: ns[10], + CumulativeSendingQueue: ns[11], + CumulativePendingQueue: ns[12], + }, nil +} diff --git a/vendor/github.com/prometheus/procfs/mountstats_test.go b/vendor/github.com/prometheus/procfs/mountstats_test.go new file mode 100644 index 0000000..8f04f53 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/mountstats_test.go @@ -0,0 +1,273 @@ +package procfs + +import ( + "fmt" + "reflect" + "strings" + "testing" + "time" +) + +func TestMountStats(t *testing.T) { + tests := []struct { + name string + s string + mounts []*Mount + invalid bool + }{ + { + name: "no devices", + s: `hello`, + }, + { + name: "device has too few fields", + s: `device foo`, + invalid: true, + }, + { + name: "device incorrect format", + s: `device rootfs BAD on / with fstype rootfs`, + invalid: true, + }, + { + name: "device incorrect format", + s: `device rootfs mounted BAD / with fstype rootfs`, + invalid: true, + }, + { + name: "device incorrect format", + s: `device rootfs mounted on / BAD fstype rootfs`, + invalid: true, + }, + { + name: "device incorrect format", + s: `device rootfs mounted on / with BAD rootfs`, + invalid: true, + }, + { + name: "device rootfs cannot have stats", + s: `device rootfs mounted on / with fstype rootfs stats`, + invalid: true, + }, + { + name: "NFSv4 device with too little info", + s: "device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs4 statvers=1.1\nhello", + invalid: true, + }, + { + name: "NFSv4 device with bad bytes", + s: "device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs4 statvers=1.1\nbytes: 0", + invalid: true, + }, + { + name: "NFSv4 device with bad events", + s: "device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs4 statvers=1.1\nevents: 0", + invalid: true, + }, + { + name: "NFSv4 device with bad per-op stats", + s: "device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs4 statvers=1.1\nper-op statistics\nFOO 0", + invalid: true, + }, + { + name: "NFSv4 device with bad transport stats", + s: "device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs4 statvers=1.1\nxprt: tcp", + invalid: true, + }, + { + name: "NFSv4 device with bad transport version", + s: "device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs4 statvers=foo\nxprt: tcp 0", + invalid: true, + }, + { + name: "NFSv4 device with bad transport stats version 1.0", + s: "device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs4 statvers=1.0\nxprt: tcp 0 0 0 0 0 0 0 0 0 0 0 0 0", + invalid: true, + }, + { + name: "NFSv4 device with bad transport stats version 1.1", + s: "device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs4 statvers=1.1\nxprt: tcp 0 0 0 0 0 0 0 0 0 0", + invalid: true, + }, + { + name: "NFSv3 device with transport stats version 1.0 OK", + s: "device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs statvers=1.0\nxprt: tcp 1 2 3 4 5 6 7 8 9 10", + mounts: []*Mount{{ + Device: "192.168.1.1:/srv", + Mount: "/mnt/nfs", + Type: "nfs", + Stats: &MountStatsNFS{ + StatVersion: "1.0", + Transport: NFSTransportStats{ + Port: 1, + Bind: 2, + Connect: 3, + ConnectIdleTime: 4, + IdleTime: 5 * time.Second, + Sends: 6, + Receives: 7, + BadTransactionIDs: 8, + CumulativeActiveRequests: 9, + CumulativeBacklog: 10, + }, + }, + }}, + }, + { + name: "device rootfs OK", + s: `device rootfs mounted on / with fstype rootfs`, + mounts: []*Mount{{ + Device: "rootfs", + Mount: "/", + Type: "rootfs", + }}, + }, + { + name: "NFSv3 device with minimal stats OK", + s: `device 192.168.1.1:/srv mounted on /mnt/nfs with fstype nfs statvers=1.1`, + mounts: []*Mount{{ + Device: "192.168.1.1:/srv", + Mount: "/mnt/nfs", + Type: "nfs", + Stats: &MountStatsNFS{ + StatVersion: "1.1", + }, + }}, + }, + { + name: "fixtures OK", + mounts: []*Mount{ + { + Device: "rootfs", + Mount: "/", + Type: "rootfs", + }, + { + Device: "sysfs", + Mount: "/sys", + Type: "sysfs", + }, + { + Device: "proc", + Mount: "/proc", + Type: "proc", + }, + { + Device: "/dev/sda1", + Mount: "/", + Type: "ext4", + }, + { + Device: "192.168.1.1:/srv/test", + Mount: "/mnt/nfs/test", + Type: "nfs4", + Stats: &MountStatsNFS{ + StatVersion: "1.1", + Age: 13968 * time.Second, + Bytes: NFSBytesStats{ + Read: 1207640230, + ReadTotal: 1210214218, + ReadPages: 295483, + }, + Events: NFSEventsStats{ + InodeRevalidate: 52, + DnodeRevalidate: 226, + VFSOpen: 1, + VFSLookup: 13, + VFSAccess: 398, + VFSReadPages: 331, + VFSWritePages: 47, + VFSFlush: 77, + VFSFileRelease: 77, + }, + Operations: []NFSOperationStats{ + { + Operation: "NULL", + }, + { + Operation: "READ", + Requests: 1298, + Transmissions: 1298, + BytesSent: 207680, + BytesReceived: 1210292152, + CumulativeQueueTime: 6 * time.Millisecond, + CumulativeTotalResponseTime: 79386 * time.Millisecond, + CumulativeTotalRequestTime: 79407 * time.Millisecond, + }, + { + Operation: "WRITE", + }, + }, + Transport: NFSTransportStats{ + Port: 832, + Connect: 1, + IdleTime: 11 * time.Second, + Sends: 6428, + Receives: 6428, + CumulativeActiveRequests: 12154, + MaximumRPCSlotsUsed: 24, + CumulativeSendingQueue: 26, + CumulativePendingQueue: 5726, + }, + }, + }, + }, + }, + } + + for i, tt := range tests { + t.Logf("[%02d] test %q", i, tt.name) + + var mounts []*Mount + var err error + + if tt.s != "" { + mounts, err = parseMountStats(strings.NewReader(tt.s)) + } else { + proc, e := FS("fixtures").NewProc(26231) + if e != nil { + t.Fatalf("failed to create proc: %v", err) + } + + mounts, err = proc.MountStats() + } + + if tt.invalid && err == nil { + t.Error("expected an error, but none occurred") + } + if !tt.invalid && err != nil { + t.Errorf("unexpected error: %v", err) + } + + if want, have := tt.mounts, mounts; !reflect.DeepEqual(want, have) { + t.Errorf("mounts:\nwant:\n%v\nhave:\n%v", mountsStr(want), mountsStr(have)) + } + } +} + +func mountsStr(mounts []*Mount) string { + var out string + for i, m := range mounts { + out += fmt.Sprintf("[%d] %q on %q (%q)", i, m.Device, m.Mount, m.Type) + + stats, ok := m.Stats.(*MountStatsNFS) + if !ok { + out += "\n" + continue + } + + out += fmt.Sprintf("\n\t- v%s, age: %s", stats.StatVersion, stats.Age) + out += fmt.Sprintf("\n\t- bytes: %v", stats.Bytes) + out += fmt.Sprintf("\n\t- events: %v", stats.Events) + out += fmt.Sprintf("\n\t- transport: %v", stats.Transport) + out += fmt.Sprintf("\n\t- per-operation stats:") + + for _, o := range stats.Operations { + out += fmt.Sprintf("\n\t\t- %v", o) + } + + out += "\n" + } + + return out +} diff --git a/vendor/github.com/prometheus/procfs/proc.go b/vendor/github.com/prometheus/procfs/proc.go index ca5f12a..8717e1f 100644 --- a/vendor/github.com/prometheus/procfs/proc.go +++ b/vendor/github.com/prometheus/procfs/proc.go @@ -4,7 +4,6 @@ import ( "fmt" "io/ioutil" "os" - "path" "strconv" "strings" ) @@ -24,9 +23,13 @@ func (p Procs) Len() int { return len(p) } func (p Procs) Swap(i, j int) { p[i], p[j] = p[j], p[i] } func (p Procs) Less(i, j int) bool { return p[i].PID < p[j].PID } -// Self returns a process for the current process. +// Self returns a process for the current process read via /proc/self. func Self() (Proc, error) { - return NewProc(os.Getpid()) + fs, err := NewFS(DefaultMountPoint) + if err != nil { + return Proc{}, err + } + return fs.Self() } // NewProc returns a process for the given pid under /proc. @@ -35,32 +38,42 @@ func NewProc(pid int) (Proc, error) { if err != nil { return Proc{}, err } - return fs.NewProc(pid) } -// AllProcs returns a list of all currently avaible processes under /proc. +// AllProcs returns a list of all currently available processes under /proc. func AllProcs() (Procs, error) { fs, err := NewFS(DefaultMountPoint) if err != nil { return Procs{}, err } - return fs.AllProcs() } +// Self returns a process for the current process. +func (fs FS) Self() (Proc, error) { + p, err := os.Readlink(fs.Path("self")) + if err != nil { + return Proc{}, err + } + pid, err := strconv.Atoi(strings.Replace(p, string(fs), "", -1)) + if err != nil { + return Proc{}, err + } + return fs.NewProc(pid) +} + // NewProc returns a process for the given pid. func (fs FS) NewProc(pid int) (Proc, error) { - if _, err := fs.stat(strconv.Itoa(pid)); err != nil { + if _, err := os.Stat(fs.Path(strconv.Itoa(pid))); err != nil { return Proc{}, err } - return Proc{PID: pid, fs: fs}, nil } -// AllProcs returns a list of all currently avaible processes. +// AllProcs returns a list of all currently available processes. func (fs FS) AllProcs() (Procs, error) { - d, err := fs.open("") + d, err := os.Open(fs.Path()) if err != nil { return Procs{}, err } @@ -85,7 +98,7 @@ func (fs FS) AllProcs() (Procs, error) { // CmdLine returns the command line of a process. func (p Proc) CmdLine() ([]string, error) { - f, err := p.open("cmdline") + f, err := os.Open(p.path("cmdline")) if err != nil { return nil, err } @@ -103,10 +116,25 @@ func (p Proc) CmdLine() ([]string, error) { return strings.Split(string(data[:len(data)-1]), string(byte(0))), nil } +// Comm returns the command name of a process. +func (p Proc) Comm() (string, error) { + f, err := os.Open(p.path("comm")) + if err != nil { + return "", err + } + defer f.Close() + + data, err := ioutil.ReadAll(f) + if err != nil { + return "", err + } + + return strings.TrimSpace(string(data)), nil +} + // Executable returns the absolute path of the executable command of a process. func (p Proc) Executable() (string, error) { - exe, err := p.readlink("exe") - + exe, err := os.Readlink(p.path("exe")) if os.IsNotExist(err) { return "", nil } @@ -144,7 +172,7 @@ func (p Proc) FileDescriptorTargets() ([]string, error) { targets := make([]string, len(names)) for i, name := range names { - target, err := p.readlink("fd/" + name) + target, err := os.Readlink(p.path("fd", name)) if err == nil { targets[i] = target } @@ -164,8 +192,20 @@ func (p Proc) FileDescriptorsLen() (int, error) { return len(fds), nil } +// MountStats retrieves statistics and configuration for mount points in a +// process's namespace. +func (p Proc) MountStats() ([]*Mount, error) { + f, err := os.Open(p.path("mountstats")) + if err != nil { + return nil, err + } + defer f.Close() + + return parseMountStats(f) +} + func (p Proc) fileDescriptors() ([]string, error) { - d, err := p.open("fd") + d, err := os.Open(p.path("fd")) if err != nil { return nil, err } @@ -179,10 +219,6 @@ func (p Proc) fileDescriptors() ([]string, error) { return names, nil } -func (p Proc) open(pa string) (*os.File, error) { - return p.fs.open(path.Join(strconv.Itoa(p.PID), pa)) -} - -func (p Proc) readlink(pa string) (string, error) { - return p.fs.readlink(path.Join(strconv.Itoa(p.PID), pa)) +func (p Proc) path(pa ...string) string { + return p.fs.Path(append([]string{strconv.Itoa(p.PID)}, pa...)...) } diff --git a/vendor/github.com/prometheus/procfs/proc_io.go b/vendor/github.com/prometheus/procfs/proc_io.go index 7c6dc86..b4e31d7 100644 --- a/vendor/github.com/prometheus/procfs/proc_io.go +++ b/vendor/github.com/prometheus/procfs/proc_io.go @@ -3,6 +3,7 @@ package procfs import ( "fmt" "io/ioutil" + "os" ) // ProcIO models the content of /proc//io. @@ -29,7 +30,7 @@ type ProcIO struct { func (p Proc) NewIO() (ProcIO, error) { pio := ProcIO{} - f, err := p.open("io") + f, err := os.Open(p.path("io")) if err != nil { return pio, err } diff --git a/vendor/github.com/prometheus/procfs/proc_io_test.go b/vendor/github.com/prometheus/procfs/proc_io_test.go index 5ef524d..3aa1a12 100644 --- a/vendor/github.com/prometheus/procfs/proc_io_test.go +++ b/vendor/github.com/prometheus/procfs/proc_io_test.go @@ -3,12 +3,7 @@ package procfs import "testing" func TestProcIO(t *testing.T) { - fs, err := NewFS("fixtures") - if err != nil { - t.Fatal(err) - } - - p, err := fs.NewProc(26231) + p, err := FS("fixtures").NewProc(26231) if err != nil { t.Fatal(err) } @@ -18,32 +13,21 @@ func TestProcIO(t *testing.T) { t.Fatal(err) } - for _, test := range []struct { - name string - want uint64 - got uint64 - }{ - {name: "RChar", want: 750339, got: s.RChar}, - {name: "WChar", want: 818609, got: s.WChar}, - {name: "SyscR", want: 7405, got: s.SyscR}, - {name: "SyscW", want: 5245, got: s.SyscW}, - {name: "ReadBytes", want: 1024, got: s.ReadBytes}, - {name: "WriteBytes", want: 2048, got: s.WriteBytes}, - } { - if test.want != test.got { - t.Errorf("want %s %d, got %d", test.name, test.want, test.got) - } - } - for _, test := range []struct { name string want int64 - got int64 + have int64 }{ - {name: "CancelledWriteBytes", want: -1024, got: s.CancelledWriteBytes}, + {name: "RChar", want: 750339, have: int64(s.RChar)}, + {name: "WChar", want: 818609, have: int64(s.WChar)}, + {name: "SyscR", want: 7405, have: int64(s.SyscR)}, + {name: "SyscW", want: 5245, have: int64(s.SyscW)}, + {name: "ReadBytes", want: 1024, have: int64(s.ReadBytes)}, + {name: "WriteBytes", want: 2048, have: int64(s.WriteBytes)}, + {name: "CancelledWriteBytes", want: -1024, have: s.CancelledWriteBytes}, } { - if test.want != test.got { - t.Errorf("want %s %d, got %d", test.name, test.want, test.got) + if test.want != test.have { + t.Errorf("want %s %d, have %d", test.name, test.want, test.have) } } } diff --git a/vendor/github.com/prometheus/procfs/proc_limits.go b/vendor/github.com/prometheus/procfs/proc_limits.go index 9f080b9..b684a5b 100644 --- a/vendor/github.com/prometheus/procfs/proc_limits.go +++ b/vendor/github.com/prometheus/procfs/proc_limits.go @@ -3,29 +3,56 @@ package procfs import ( "bufio" "fmt" + "os" "regexp" "strconv" ) // ProcLimits represents the soft limits for each of the process's resource -// limits. +// limits. For more information see getrlimit(2): +// http://man7.org/linux/man-pages/man2/getrlimit.2.html. type ProcLimits struct { - CPUTime int - FileSize int - DataSize int - StackSize int - CoreFileSize int - ResidentSet int - Processes int - OpenFiles int - LockedMemory int - AddressSpace int - FileLocks int - PendingSignals int - MsqqueueSize int - NicePriority int - RealtimePriority int - RealtimeTimeout int + // CPU time limit in seconds. + CPUTime int64 + // Maximum size of files that the process may create. + FileSize int64 + // Maximum size of the process's data segment (initialized data, + // uninitialized data, and heap). + DataSize int64 + // Maximum size of the process stack in bytes. + StackSize int64 + // Maximum size of a core file. + CoreFileSize int64 + // Limit of the process's resident set in pages. + ResidentSet int64 + // Maximum number of processes that can be created for the real user ID of + // the calling process. + Processes int64 + // Value one greater than the maximum file descriptor number that can be + // opened by this process. + OpenFiles int64 + // Maximum number of bytes of memory that may be locked into RAM. + LockedMemory int64 + // Maximum size of the process's virtual memory address space in bytes. + AddressSpace int64 + // Limit on the combined number of flock(2) locks and fcntl(2) leases that + // this process may establish. + FileLocks int64 + // Limit of signals that may be queued for the real user ID of the calling + // process. + PendingSignals int64 + // Limit on the number of bytes that can be allocated for POSIX message + // queues for the real user ID of the calling process. + MsqqueueSize int64 + // Limit of the nice priority set using setpriority(2) or nice(2). + NicePriority int64 + // Limit of the real-time priority set using sched_setscheduler(2) or + // sched_setparam(2). + RealtimePriority int64 + // Limit (in microseconds) on the amount of CPU time that a process + // scheduled under a real-time scheduling policy may consume without making + // a blocking system call. + RealtimeTimeout int64 } const ( @@ -39,7 +66,7 @@ var ( // NewLimits returns the current soft limits of the process. func (p Proc) NewLimits() (ProcLimits, error) { - f, err := p.open("limits") + f, err := os.Open(p.path("limits")) if err != nil { return ProcLimits{}, err } @@ -60,7 +87,7 @@ func (p Proc) NewLimits() (ProcLimits, error) { case "Max cpu time": l.CPUTime, err = parseInt(fields[1]) case "Max file size": - l.FileLocks, err = parseInt(fields[1]) + l.FileSize, err = parseInt(fields[1]) case "Max data size": l.DataSize, err = parseInt(fields[1]) case "Max stack size": @@ -90,7 +117,6 @@ func (p Proc) NewLimits() (ProcLimits, error) { case "Max realtime timeout": l.RealtimeTimeout, err = parseInt(fields[1]) } - if err != nil { return ProcLimits{}, err } @@ -99,13 +125,13 @@ func (p Proc) NewLimits() (ProcLimits, error) { return l, s.Err() } -func parseInt(s string) (int, error) { +func parseInt(s string) (int64, error) { if s == limitsUnlimited { return -1, nil } - i, err := strconv.ParseInt(s, 10, 32) + i, err := strconv.ParseInt(s, 10, 64) if err != nil { return 0, fmt.Errorf("couldn't parse value %s: %s", s, err) } - return int(i), nil + return i, nil } diff --git a/vendor/github.com/prometheus/procfs/proc_limits_test.go b/vendor/github.com/prometheus/procfs/proc_limits_test.go index ca7a254..ac62a3b 100644 --- a/vendor/github.com/prometheus/procfs/proc_limits_test.go +++ b/vendor/github.com/prometheus/procfs/proc_limits_test.go @@ -3,12 +3,7 @@ package procfs import "testing" func TestNewLimits(t *testing.T) { - fs, err := NewFS("fixtures") - if err != nil { - t.Fatal(err) - } - - p, err := fs.NewProc(26231) + p, err := FS("fixtures").NewProc(26231) if err != nil { t.Fatal(err) } @@ -20,17 +15,17 @@ func TestNewLimits(t *testing.T) { for _, test := range []struct { name string - want int - got int + want int64 + have int64 }{ - {name: "cpu time", want: -1, got: l.CPUTime}, - {name: "open files", want: 2048, got: l.OpenFiles}, - {name: "msgqueue size", want: 819200, got: l.MsqqueueSize}, - {name: "nice priority", want: 0, got: l.NicePriority}, - {name: "address space", want: -1, got: l.AddressSpace}, + {name: "cpu time", want: -1, have: l.CPUTime}, + {name: "open files", want: 2048, have: l.OpenFiles}, + {name: "msgqueue size", want: 819200, have: l.MsqqueueSize}, + {name: "nice priority", want: 0, have: l.NicePriority}, + {name: "address space", want: 8589934592, have: l.AddressSpace}, } { - if test.want != test.got { - t.Errorf("want %s %d, got %d", test.name, test.want, test.got) + if test.want != test.have { + t.Errorf("want %s %d, have %d", test.name, test.want, test.have) } } } diff --git a/vendor/github.com/prometheus/procfs/proc_stat.go b/vendor/github.com/prometheus/procfs/proc_stat.go index 30a403b..724e271 100644 --- a/vendor/github.com/prometheus/procfs/proc_stat.go +++ b/vendor/github.com/prometheus/procfs/proc_stat.go @@ -7,15 +7,15 @@ import ( "os" ) -// Originally, this USER_HZ value was dynamically retrieved via a sysconf call which -// required cgo. However, that caused a lot of problems regarding +// Originally, this USER_HZ value was dynamically retrieved via a sysconf call +// which required cgo. However, that caused a lot of problems regarding // cross-compilation. Alternatives such as running a binary to determine the -// value, or trying to derive it in some other way were all problematic. -// After much research it was determined that USER_HZ is actually hardcoded to -// 100 on all Go-supported platforms as of the time of this writing. This is -// why we decided to hardcode it here as well. It is not impossible that there -// could be systems with exceptions, but they should be very exotic edge cases, -// and in that case, the worst outcome will be two misreported metrics. +// value, or trying to derive it in some other way were all problematic. After +// much research it was determined that USER_HZ is actually hardcoded to 100 on +// all Go-supported platforms as of the time of this writing. This is why we +// decided to hardcode it here as well. It is not impossible that there could +// be systems with exceptions, but they should be very exotic edge cases, and +// in that case, the worst outcome will be two misreported metrics. // // See also the following discussions: // @@ -91,7 +91,7 @@ type ProcStat struct { // NewStat returns the current status information of the process. func (p Proc) NewStat() (ProcStat, error) { - f, err := p.open("stat") + f, err := os.Open(p.path("stat")) if err != nil { return ProcStat{}, err } diff --git a/vendor/github.com/prometheus/procfs/proc_stat_test.go b/vendor/github.com/prometheus/procfs/proc_stat_test.go index e4d5cac..a2ebcde 100644 --- a/vendor/github.com/prometheus/procfs/proc_stat_test.go +++ b/vendor/github.com/prometheus/procfs/proc_stat_test.go @@ -1,14 +1,12 @@ package procfs -import "testing" +import ( + "os" + "testing" +) func TestProcStat(t *testing.T) { - fs, err := NewFS("fixtures") - if err != nil { - t.Fatal(err) - } - - p, err := fs.NewProc(26231) + p, err := FS("fixtures").NewProc(26231) if err != nil { t.Fatal(err) } @@ -21,17 +19,17 @@ func TestProcStat(t *testing.T) { for _, test := range []struct { name string want int - got int + have int }{ - {name: "pid", want: 26231, got: s.PID}, - {name: "user time", want: 1677, got: int(s.UTime)}, - {name: "system time", want: 44, got: int(s.STime)}, - {name: "start time", want: 82375, got: int(s.Starttime)}, - {name: "virtual memory size", want: 56274944, got: s.VSize}, - {name: "resident set size", want: 1981, got: s.RSS}, + {name: "pid", want: 26231, have: s.PID}, + {name: "user time", want: 1677, have: int(s.UTime)}, + {name: "system time", want: 44, have: int(s.STime)}, + {name: "start time", want: 82375, have: int(s.Starttime)}, + {name: "virtual memory size", want: 56274944, have: s.VSize}, + {name: "resident set size", want: 1981, have: s.RSS}, } { - if test.want != test.got { - t.Errorf("want %s %d, got %d", test.name, test.want, test.got) + if test.want != test.have { + t.Errorf("want %s %d, have %d", test.name, test.want, test.have) } } } @@ -41,16 +39,16 @@ func TestProcStatComm(t *testing.T) { if err != nil { t.Fatal(err) } - if want, got := "vim", s1.Comm; want != got { - t.Errorf("want comm %s, got %s", want, got) + if want, have := "vim", s1.Comm; want != have { + t.Errorf("want comm %s, have %s", want, have) } s2, err := testProcStat(584) if err != nil { t.Fatal(err) } - if want, got := "(a b ) ( c d) ", s2.Comm; want != got { - t.Errorf("want comm %s, got %s", want, got) + if want, have := "(a b ) ( c d) ", s2.Comm; want != have { + t.Errorf("want comm %s, have %s", want, have) } } @@ -60,8 +58,8 @@ func TestProcStatVirtualMemory(t *testing.T) { t.Fatal(err) } - if want, got := 56274944, s.VirtualMemory(); want != got { - t.Errorf("want virtual memory %d, got %d", want, got) + if want, have := 56274944, s.VirtualMemory(); want != have { + t.Errorf("want virtual memory %d, have %d", want, have) } } @@ -71,8 +69,8 @@ func TestProcStatResidentMemory(t *testing.T) { t.Fatal(err) } - if want, got := 1981*4096, s.ResidentMemory(); want != got { - t.Errorf("want resident memory %d, got %d", want, got) + if want, have := 1981*os.Getpagesize(), s.ResidentMemory(); want != have { + t.Errorf("want resident memory %d, have %d", want, have) } } @@ -86,8 +84,8 @@ func TestProcStatStartTime(t *testing.T) { if err != nil { t.Fatal(err) } - if want, got := 1418184099.75, time; want != got { - t.Errorf("want start time %f, got %f", want, got) + if want, have := 1418184099.75, time; want != have { + t.Errorf("want start time %f, have %f", want, have) } } @@ -97,13 +95,13 @@ func TestProcStatCPUTime(t *testing.T) { t.Fatal(err) } - if want, got := 17.21, s.CPUTime(); want != got { - t.Errorf("want cpu time %f, got %f", want, got) + if want, have := 17.21, s.CPUTime(); want != have { + t.Errorf("want cpu time %f, have %f", want, have) } } func testProcStat(pid int) (ProcStat, error) { - p, err := testProcess(pid) + p, err := FS("fixtures").NewProc(pid) if err != nil { return ProcStat{}, err } diff --git a/vendor/github.com/prometheus/procfs/proc_test.go b/vendor/github.com/prometheus/procfs/proc_test.go index 4d53c69..104b324 100644 --- a/vendor/github.com/prometheus/procfs/proc_test.go +++ b/vendor/github.com/prometheus/procfs/proc_test.go @@ -1,40 +1,37 @@ package procfs import ( - "os" "reflect" "sort" "testing" ) func TestSelf(t *testing.T) { - p1, err := NewProc(os.Getpid()) + fs := FS("fixtures") + + p1, err := fs.NewProc(26231) if err != nil { t.Fatal(err) } - p2, err := Self() + p2, err := fs.Self() if err != nil { t.Fatal(err) } if !reflect.DeepEqual(p1, p2) { - t.Errorf("want process %v to equal %v", p1, p2) + t.Errorf("want process %v, have %v", p1, p2) } } func TestAllProcs(t *testing.T) { - fs, err := NewFS("fixtures") - if err != nil { - t.Fatal(err) - } - procs, err := fs.AllProcs() + procs, err := FS("fixtures").AllProcs() if err != nil { t.Fatal(err) } sort.Sort(procs) for i, p := range []*Proc{{PID: 584}, {PID: 26231}} { - if want, got := p.PID, procs[i].PID; want != got { - t.Errorf("want processes %d, got %d", want, got) + if want, have := p.PID, procs[i].PID; want != have { + t.Errorf("want processes %d, have %d", want, have) } } } @@ -47,7 +44,7 @@ func TestCmdLine(t *testing.T) { {process: 26231, want: []string{"vim", "test.go", "+10"}}, {process: 26232, want: []string{}}, } { - p1, err := testProcess(tt.process) + p1, err := FS("fixtures").NewProc(tt.process) if err != nil { t.Fatal(err) } @@ -56,7 +53,29 @@ func TestCmdLine(t *testing.T) { t.Fatal(err) } if !reflect.DeepEqual(tt.want, c1) { - t.Errorf("want cmdline %v, got %v", tt.want, c1) + t.Errorf("want cmdline %v, have %v", tt.want, c1) + } + } +} + +func TestComm(t *testing.T) { + for _, tt := range []struct { + process int + want string + }{ + {process: 26231, want: "vim"}, + {process: 26232, want: "ata_sff"}, + } { + p1, err := FS("fixtures").NewProc(tt.process) + if err != nil { + t.Fatal(err) + } + c1, err := p1.Comm() + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(tt.want, c1) { + t.Errorf("want comm %v, have %v", tt.want, c1) } } } @@ -69,7 +88,7 @@ func TestExecutable(t *testing.T) { {process: 26231, want: "/usr/bin/vim"}, {process: 26232, want: ""}, } { - p, err := testProcess(tt.process) + p, err := FS("fixtures").NewProc(tt.process) if err != nil { t.Fatal(err) } @@ -78,13 +97,13 @@ func TestExecutable(t *testing.T) { t.Fatal(err) } if !reflect.DeepEqual(tt.want, exe) { - t.Errorf("want absolute path to cmdline %v, got %v", tt.want, exe) + t.Errorf("want absolute path to cmdline %v, have %v", tt.want, exe) } } } func TestFileDescriptors(t *testing.T) { - p1, err := testProcess(26231) + p1, err := FS("fixtures").NewProc(26231) if err != nil { t.Fatal(err) } @@ -94,37 +113,12 @@ func TestFileDescriptors(t *testing.T) { } sort.Sort(byUintptr(fds)) if want := []uintptr{0, 1, 2, 3, 10}; !reflect.DeepEqual(want, fds) { - t.Errorf("want fds %v, got %v", want, fds) - } - - p2, err := Self() - if err != nil { - t.Fatal(err) - } - - fdsBefore, err := p2.FileDescriptors() - if err != nil { - t.Fatal(err) - } - - s, err := os.Open("fixtures") - if err != nil { - t.Fatal(err) - } - defer s.Close() - - fdsAfter, err := p2.FileDescriptors() - if err != nil { - t.Fatal(err) - } - - if len(fdsBefore)+1 != len(fdsAfter) { - t.Errorf("want fds %v+1 to equal %v", fdsBefore, fdsAfter) + t.Errorf("want fds %v, have %v", want, fds) } } func TestFileDescriptorTargets(t *testing.T) { - p1, err := testProcess(26231) + p1, err := FS("fixtures").NewProc(26231) if err != nil { t.Fatal(err) } @@ -141,37 +135,12 @@ func TestFileDescriptorTargets(t *testing.T) { "../../symlinktargets/xyz", } if !reflect.DeepEqual(want, fds) { - t.Errorf("want fds %v, got %v", want, fds) - } - - p2, err := Self() - if err != nil { - t.Fatal(err) - } - - fdsBefore, err := p2.FileDescriptors() - if err != nil { - t.Fatal(err) - } - - s, err := os.Open("fixtures") - if err != nil { - t.Fatal(err) - } - defer s.Close() - - fdsAfter, err := p2.FileDescriptors() - if err != nil { - t.Fatal(err) - } - - if len(fdsBefore)+1 != len(fdsAfter) { - t.Errorf("want fds %v+1 to equal %v", fdsBefore, fdsAfter) + t.Errorf("want fds %v, have %v", want, fds) } } func TestFileDescriptorsLen(t *testing.T) { - p1, err := testProcess(26231) + p1, err := FS("fixtures").NewProc(26231) if err != nil { t.Fatal(err) } @@ -179,20 +148,11 @@ func TestFileDescriptorsLen(t *testing.T) { if err != nil { t.Fatal(err) } - if want, got := 5, l; want != got { - t.Errorf("want fds %d, got %d", want, got) + if want, have := 5, l; want != have { + t.Errorf("want fds %d, have %d", want, have) } } -func testProcess(pid int) (Proc, error) { - fs, err := NewFS("fixtures") - if err != nil { - return Proc{}, err - } - - return fs.NewProc(pid) -} - type byUintptr []uintptr func (a byUintptr) Len() int { return len(a) } diff --git a/vendor/github.com/prometheus/procfs/stat.go b/vendor/github.com/prometheus/procfs/stat.go index 26fefb0..701f4df 100644 --- a/vendor/github.com/prometheus/procfs/stat.go +++ b/vendor/github.com/prometheus/procfs/stat.go @@ -3,14 +3,66 @@ package procfs import ( "bufio" "fmt" + "io" + "os" "strconv" "strings" ) +// CPUStat shows how much time the cpu spend in various stages. +type CPUStat struct { + User float64 + Nice float64 + System float64 + Idle float64 + Iowait float64 + IRQ float64 + SoftIRQ float64 + Steal float64 + Guest float64 + GuestNice float64 +} + +// SoftIRQStat represent the softirq statistics as exported in the procfs stat file. +// A nice introduction can be found at https://0xax.gitbooks.io/linux-insides/content/interrupts/interrupts-9.html +// It is possible to get per-cpu stats by reading /proc/softirqs +type SoftIRQStat struct { + Hi uint64 + Timer uint64 + NetTx uint64 + NetRx uint64 + Block uint64 + BlockIoPoll uint64 + Tasklet uint64 + Sched uint64 + Hrtimer uint64 + Rcu uint64 +} + // Stat represents kernel/system statistics. type Stat struct { // Boot time in seconds since the Epoch. - BootTime int64 + BootTime uint64 + // Summed up cpu statistics. + CPUTotal CPUStat + // Per-CPU statistics. + CPU []CPUStat + // Number of times interrupts were handled, which contains numbered and unnumbered IRQs. + IRQTotal uint64 + // Number of times a numbered IRQ was triggered. + IRQ []uint64 + // Number of times a context switch happened. + ContextSwitches uint64 + // Number of times a process was created. + ProcessCreated uint64 + // Number of processes currently running. + ProcessesRunning uint64 + // Number of processes currently blocked (waiting for IO). + ProcessesBlocked uint64 + // Number of times a softirq was scheduled. + SoftIRQTotal uint64 + // Detailed softirq statistics. + SoftIRQ SoftIRQStat } // NewStat returns kernel/system statistics read from /proc/stat. @@ -23,33 +75,145 @@ func NewStat() (Stat, error) { return fs.NewStat() } +// Parse a cpu statistics line and returns the CPUStat struct plus the cpu id (or -1 for the overall sum). +func parseCPUStat(line string) (CPUStat, int64, error) { + cpuStat := CPUStat{} + var cpu string + + count, err := fmt.Sscanf(line, "%s %f %f %f %f %f %f %f %f %f %f", + &cpu, + &cpuStat.User, &cpuStat.Nice, &cpuStat.System, &cpuStat.Idle, + &cpuStat.Iowait, &cpuStat.IRQ, &cpuStat.SoftIRQ, &cpuStat.Steal, + &cpuStat.Guest, &cpuStat.GuestNice) + + if err != nil && err != io.EOF { + return CPUStat{}, -1, fmt.Errorf("couldn't parse %s (cpu): %s", line, err) + } + if count == 0 { + return CPUStat{}, -1, fmt.Errorf("couldn't parse %s (cpu): 0 elements parsed", line) + } + + cpuStat.User /= userHZ + cpuStat.Nice /= userHZ + cpuStat.System /= userHZ + cpuStat.Idle /= userHZ + cpuStat.Iowait /= userHZ + cpuStat.IRQ /= userHZ + cpuStat.SoftIRQ /= userHZ + cpuStat.Steal /= userHZ + cpuStat.Guest /= userHZ + cpuStat.GuestNice /= userHZ + + if cpu == "cpu" { + return cpuStat, -1, nil + } + + cpuID, err := strconv.ParseInt(cpu[3:], 10, 64) + if err != nil { + return CPUStat{}, -1, fmt.Errorf("couldn't parse %s (cpu/cpuid): %s", line, err) + } + + return cpuStat, cpuID, nil +} + +// Parse a softirq line. +func parseSoftIRQStat(line string) (SoftIRQStat, uint64, error) { + softIRQStat := SoftIRQStat{} + var total uint64 + var prefix string + + _, err := fmt.Sscanf(line, "%s %d %d %d %d %d %d %d %d %d %d %d", + &prefix, &total, + &softIRQStat.Hi, &softIRQStat.Timer, &softIRQStat.NetTx, &softIRQStat.NetRx, + &softIRQStat.Block, &softIRQStat.BlockIoPoll, + &softIRQStat.Tasklet, &softIRQStat.Sched, + &softIRQStat.Hrtimer, &softIRQStat.Rcu) + + if err != nil { + return SoftIRQStat{}, 0, fmt.Errorf("couldn't parse %s (softirq): %s", line, err) + } + + return softIRQStat, total, nil +} + // NewStat returns an information about current kernel/system statistics. func (fs FS) NewStat() (Stat, error) { - f, err := fs.open("stat") + // See https://www.kernel.org/doc/Documentation/filesystems/proc.txt + + f, err := os.Open(fs.Path("stat")) if err != nil { return Stat{}, err } defer f.Close() - s := bufio.NewScanner(f) - for s.Scan() { - line := s.Text() - if !strings.HasPrefix(line, "btime") { + stat := Stat{} + + scanner := bufio.NewScanner(f) + for scanner.Scan() { + line := scanner.Text() + parts := strings.Fields(scanner.Text()) + // require at least + if len(parts) < 2 { continue } - fields := strings.Fields(line) - if len(fields) != 2 { - return Stat{}, fmt.Errorf("couldn't parse %s line %s", f.Name(), line) + switch { + case parts[0] == "btime": + if stat.BootTime, err = strconv.ParseUint(parts[1], 10, 64); err != nil { + return Stat{}, fmt.Errorf("couldn't parse %s (btime): %s", parts[1], err) + } + case parts[0] == "intr": + if stat.IRQTotal, err = strconv.ParseUint(parts[1], 10, 64); err != nil { + return Stat{}, fmt.Errorf("couldn't parse %s (intr): %s", parts[1], err) + } + numberedIRQs := parts[2:] + stat.IRQ = make([]uint64, len(numberedIRQs)) + for i, count := range numberedIRQs { + if stat.IRQ[i], err = strconv.ParseUint(count, 10, 64); err != nil { + return Stat{}, fmt.Errorf("couldn't parse %s (intr%d): %s", count, i, err) + } + } + case parts[0] == "ctxt": + if stat.ContextSwitches, err = strconv.ParseUint(parts[1], 10, 64); err != nil { + return Stat{}, fmt.Errorf("couldn't parse %s (ctxt): %s", parts[1], err) + } + case parts[0] == "processes": + if stat.ProcessCreated, err = strconv.ParseUint(parts[1], 10, 64); err != nil { + return Stat{}, fmt.Errorf("couldn't parse %s (processes): %s", parts[1], err) + } + case parts[0] == "procs_running": + if stat.ProcessesRunning, err = strconv.ParseUint(parts[1], 10, 64); err != nil { + return Stat{}, fmt.Errorf("couldn't parse %s (procs_running): %s", parts[1], err) + } + case parts[0] == "procs_blocked": + if stat.ProcessesBlocked, err = strconv.ParseUint(parts[1], 10, 64); err != nil { + return Stat{}, fmt.Errorf("couldn't parse %s (procs_blocked): %s", parts[1], err) + } + case parts[0] == "softirq": + softIRQStats, total, err := parseSoftIRQStat(line) + if err != nil { + return Stat{}, err + } + stat.SoftIRQTotal = total + stat.SoftIRQ = softIRQStats + case strings.HasPrefix(parts[0], "cpu"): + cpuStat, cpuID, err := parseCPUStat(line) + if err != nil { + return Stat{}, err + } + if cpuID == -1 { + stat.CPUTotal = cpuStat + } else { + for int64(len(stat.CPU)) <= cpuID { + stat.CPU = append(stat.CPU, CPUStat{}) + } + stat.CPU[cpuID] = cpuStat + } } - i, err := strconv.ParseInt(fields[1], 10, 32) - if err != nil { - return Stat{}, fmt.Errorf("couldn't parse %s: %s", fields[1], err) - } - return Stat{BootTime: i}, nil } - if err := s.Err(); err != nil { + + if err := scanner.Err(); err != nil { return Stat{}, fmt.Errorf("couldn't parse %s: %s", f.Name(), err) } - return Stat{}, fmt.Errorf("couldn't parse %s, missing btime", f.Name()) + return stat, nil } diff --git a/vendor/github.com/prometheus/procfs/stat_test.go b/vendor/github.com/prometheus/procfs/stat_test.go index 24b5d61..c34ccce 100644 --- a/vendor/github.com/prometheus/procfs/stat_test.go +++ b/vendor/github.com/prometheus/procfs/stat_test.go @@ -3,17 +3,59 @@ package procfs import "testing" func TestStat(t *testing.T) { - fs, err := NewFS("fixtures") + s, err := FS("fixtures").NewStat() if err != nil { t.Fatal(err) } - s, err := fs.NewStat() - if err != nil { - t.Fatal(err) + // cpu + if want, have := float64(301854)/userHZ, s.CPUTotal.User; want != have { + t.Errorf("want cpu/user %v, have %v", want, have) + } + if want, have := float64(31)/userHZ, s.CPU[7].SoftIRQ; want != have { + t.Errorf("want cpu7/softirq %v, have %v", want, have) } - if want, got := int64(1418183276), s.BootTime; want != got { - t.Errorf("want boot time %d, got %d", want, got) + // intr + if want, have := uint64(8885917), s.IRQTotal; want != have { + t.Errorf("want irq/total %d, have %d", want, have) } + if want, have := uint64(1), s.IRQ[8]; want != have { + t.Errorf("want irq8 %d, have %d", want, have) + } + + // ctxt + if want, have := uint64(38014093), s.ContextSwitches; want != have { + t.Errorf("want context switches (ctxt) %d, have %d", want, have) + } + + // btime + if want, have := uint64(1418183276), s.BootTime; want != have { + t.Errorf("want boot time (btime) %d, have %d", want, have) + } + + // processes + if want, have := uint64(26442), s.ProcessCreated; want != have { + t.Errorf("want process created (processes) %d, have %d", want, have) + } + + // procs_running + if want, have := uint64(2), s.ProcessesRunning; want != have { + t.Errorf("want processes running (procs_running) %d, have %d", want, have) + } + + // procs_blocked + if want, have := uint64(1), s.ProcessesBlocked; want != have { + t.Errorf("want processes blocked (procs_blocked) %d, have %d", want, have) + } + + // softirq + if want, have := uint64(5057579), s.SoftIRQTotal; want != have { + t.Errorf("want softirq total %d, have %d", want, have) + } + + if want, have := uint64(508444), s.SoftIRQ.Rcu; want != have { + t.Errorf("want softirq RCU %d, have %d", want, have) + } + } diff --git a/vendor/github.com/prometheus/procfs/sysfs/.gitignore b/vendor/github.com/prometheus/procfs/sysfs/.gitignore new file mode 100644 index 0000000..67fc140 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/sysfs/.gitignore @@ -0,0 +1 @@ +fixtures/ diff --git a/vendor/github.com/prometheus/procfs/sysfs/doc.go b/vendor/github.com/prometheus/procfs/sysfs/doc.go new file mode 100644 index 0000000..9a6c244 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/sysfs/doc.go @@ -0,0 +1,16 @@ +// Copyright 2017 The Prometheus 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 sysfs provides functions to retrieve system and kernel metrics +// from the pseudo-filesystem sys. +package sysfs diff --git a/vendor/github.com/prometheus/procfs/sysfs/fixtures.ttar b/vendor/github.com/prometheus/procfs/sysfs/fixtures.ttar new file mode 100644 index 0000000..0045e7d --- /dev/null +++ b/vendor/github.com/prometheus/procfs/sysfs/fixtures.ttar @@ -0,0 +1,721 @@ +Directory: fixtures +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/dirty_data +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_day +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_day/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_day/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_day/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_day/cache_hit_ratio +Lines: 1 +100 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_day/cache_hits +Lines: 1 +289 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_day/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_day/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_day/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_five_minute +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_five_minute/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_five_minute/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_five_minute/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_five_minute/cache_hit_ratio +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_five_minute/cache_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_five_minute/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_five_minute/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_five_minute/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_hour +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_hour/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_hour/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_hour/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_hour/cache_hit_ratio +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_hour/cache_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_hour/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_hour/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_hour/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_total +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_total/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_total/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_total/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_total/cache_hit_ratio +Lines: 1 +100 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_total/cache_hits +Lines: 1 +546 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_total/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_total/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata4/host3/target3:0:0/3:0:0:0/block/sdb/bcache/stats_total/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata5 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/bcache +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/bcache/io_errors +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/bcache/metadata_written +Lines: 1 +512 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/bcache/priority_stats +Lines: 5 +Unused: 99% +Metadata: 0% +Average: 10473 +Sectors per Q: 64 +Quantiles: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946] +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/devices/pci0000:00/0000:00:0d.0/ata5/host4/target4:0:0/4:0:0:0/block/sdc/bcache/written +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/average_key_size +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0 +Mode: 777 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/dirty_data +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_day +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_day/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_day/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_day/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_day/cache_hit_ratio +Lines: 1 +100 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_day/cache_hits +Lines: 1 +289 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_day/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_day/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_day/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_five_minute +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_five_minute/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_five_minute/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_five_minute/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_five_minute/cache_hit_ratio +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_five_minute/cache_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_five_minute/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_five_minute/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_five_minute/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_hour +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_hour/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_hour/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_hour/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_hour/cache_hit_ratio +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_hour/cache_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_hour/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_hour/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_hour/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_total +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_total/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_total/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_total/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_total/cache_hit_ratio +Lines: 1 +100 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_total/cache_hits +Lines: 1 +546 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_total/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_total/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/bdev0/stats_total/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/btree_cache_size +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/cache0 +Mode: 777 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/cache0/io_errors +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/cache0/metadata_written +Lines: 1 +512 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/cache0/priority_stats +Lines: 5 +Unused: 99% +Metadata: 0% +Average: 10473 +Sectors per Q: 64 +Quantiles: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946 20946] +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/cache0/written +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/cache_available_percent +Lines: 1 +100 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/congested +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/internal +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/internal/active_journal_entries +Lines: 1 +1 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/internal/btree_nodes +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/internal/btree_read_average_duration_us +Lines: 1 +1305 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/internal/cache_read_races +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/root_usage_percent +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_day +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_day/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_day/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_day/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_day/cache_hit_ratio +Lines: 1 +100 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_day/cache_hits +Lines: 1 +289 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_day/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_day/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_day/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_five_minute +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_five_minute/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_five_minute/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_five_minute/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_five_minute/cache_hit_ratio +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_five_minute/cache_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_five_minute/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_five_minute/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_five_minute/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_hour +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_hour/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_hour/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_hour/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_hour/cache_hit_ratio +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_hour/cache_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_hour/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_hour/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_hour/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_total +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_total/bypassed +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_total/cache_bypass_hits +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_total/cache_bypass_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_total/cache_hit_ratio +Lines: 1 +100 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_total/cache_hits +Lines: 1 +546 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_total/cache_miss_collisions +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_total/cache_misses +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/stats_total/cache_readaheads +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/bcache/deaddd54-c735-46d5-868e-f331c5fd7c74/tree_depth +Lines: 1 +0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/xfs +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/xfs/sda1 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/xfs/sda1/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/xfs/sda1/stats/stats +Lines: 1 +extent_alloc 1 0 0 0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/xfs/sdb1 +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Directory: fixtures/fs/xfs/sdb1/stats +Mode: 755 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +Path: fixtures/fs/xfs/sdb1/stats/stats +Lines: 1 +extent_alloc 2 0 0 0 +Mode: 644 +# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/github.com/prometheus/procfs/sysfs/fs.go b/vendor/github.com/prometheus/procfs/sysfs/fs.go new file mode 100644 index 0000000..fb15d43 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/sysfs/fs.go @@ -0,0 +1,108 @@ +// Copyright 2017 The Prometheus 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 sysfs + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/prometheus/procfs/bcache" + "github.com/prometheus/procfs/xfs" +) + +// FS represents the pseudo-filesystem sys, which provides an interface to +// kernel data structures. +type FS string + +// DefaultMountPoint is the common mount point of the sys filesystem. +const DefaultMountPoint = "/sys" + +// NewFS returns a new FS mounted under the given mountPoint. It will error +// if the mount point can't be read. +func NewFS(mountPoint string) (FS, error) { + info, err := os.Stat(mountPoint) + if err != nil { + return "", fmt.Errorf("could not read %s: %s", mountPoint, err) + } + if !info.IsDir() { + return "", fmt.Errorf("mount point %s is not a directory", mountPoint) + } + + return FS(mountPoint), nil +} + +// Path returns the path of the given subsystem relative to the sys root. +func (fs FS) Path(p ...string) string { + return filepath.Join(append([]string{string(fs)}, p...)...) +} + +// XFSStats retrieves XFS filesystem runtime statistics for each mounted XFS +// filesystem. Only available on kernel 4.4+. On older kernels, an empty +// slice of *xfs.Stats will be returned. +func (fs FS) XFSStats() ([]*xfs.Stats, error) { + matches, err := filepath.Glob(fs.Path("fs/xfs/*/stats/stats")) + if err != nil { + return nil, err + } + + stats := make([]*xfs.Stats, 0, len(matches)) + for _, m := range matches { + f, err := os.Open(m) + if err != nil { + return nil, err + } + + // "*" used in glob above indicates the name of the filesystem. + name := filepath.Base(filepath.Dir(filepath.Dir(m))) + + // File must be closed after parsing, regardless of success or + // failure. Defer is not used because of the loop. + s, err := xfs.ParseStats(f) + _ = f.Close() + if err != nil { + return nil, err + } + + s.Name = name + stats = append(stats, s) + } + + return stats, nil +} + +// BcacheStats retrieves bcache runtime statistics for each bcache. +func (fs FS) BcacheStats() ([]*bcache.Stats, error) { + matches, err := filepath.Glob(fs.Path("fs/bcache/*-*")) + if err != nil { + return nil, err + } + + stats := make([]*bcache.Stats, 0, len(matches)) + for _, uuidPath := range matches { + // "*-*" in glob above indicates the name of the bcache. + name := filepath.Base(uuidPath) + + // stats + s, err := bcache.GetStats(uuidPath) + if err != nil { + return nil, err + } + + s.Name = name + stats = append(stats, s) + } + + return stats, nil +} diff --git a/vendor/github.com/prometheus/procfs/sysfs/fs_test.go b/vendor/github.com/prometheus/procfs/sysfs/fs_test.go new file mode 100644 index 0000000..2b7402e --- /dev/null +++ b/vendor/github.com/prometheus/procfs/sysfs/fs_test.go @@ -0,0 +1,108 @@ +// Copyright 2017 The Prometheus 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 sysfs + +import "testing" + +func TestNewFS(t *testing.T) { + if _, err := NewFS("foobar"); err == nil { + t.Error("want NewFS to fail for non-existing mount point") + } + + if _, err := NewFS("doc.go"); err == nil { + t.Error("want NewFS to fail if mount point is not a directory") + } +} + +func TestFSXFSStats(t *testing.T) { + stats, err := FS("fixtures").XFSStats() + if err != nil { + t.Fatalf("failed to parse XFS stats: %v", err) + } + + tests := []struct { + name string + allocated uint32 + }{ + { + name: "sda1", + allocated: 1, + }, + { + name: "sdb1", + allocated: 2, + }, + } + + const expect = 2 + + if l := len(stats); l != expect { + t.Fatalf("unexpected number of XFS stats: %d", l) + } + if l := len(tests); l != expect { + t.Fatalf("unexpected number of tests: %d", l) + } + + for i, tt := range tests { + if want, got := tt.name, stats[i].Name; want != got { + t.Errorf("unexpected stats name:\nwant: %q\nhave: %q", want, got) + } + + if want, got := tt.allocated, stats[i].ExtentAllocation.ExtentsAllocated; want != got { + t.Errorf("unexpected extents allocated:\nwant: %d\nhave: %d", want, got) + } + } +} + +func TestFSBcacheStats(t *testing.T) { + stats, err := FS("fixtures").BcacheStats() + if err != nil { + t.Fatalf("failed to parse bcache stats: %v", err) + } + + tests := []struct { + name string + bdevs int + caches int + }{ + { + name: "deaddd54-c735-46d5-868e-f331c5fd7c74", + bdevs: 1, + caches: 1, + }, + } + + const expect = 1 + + if l := len(stats); l != expect { + t.Fatalf("unexpected number of bcache stats: %d", l) + } + if l := len(tests); l != expect { + t.Fatalf("unexpected number of tests: %d", l) + } + + for i, tt := range tests { + if want, got := tt.name, stats[i].Name; want != got { + t.Errorf("unexpected stats name:\nwant: %q\nhave: %q", want, got) + } + + if want, got := tt.bdevs, len(stats[i].Bdevs); want != got { + t.Errorf("unexpected value allocated:\nwant: %d\nhave: %d", want, got) + } + + if want, got := tt.caches, len(stats[i].Caches); want != got { + t.Errorf("unexpected value allocated:\nwant: %d\nhave: %d", want, got) + } + } +} diff --git a/vendor/github.com/prometheus/procfs/ttar b/vendor/github.com/prometheus/procfs/ttar new file mode 100755 index 0000000..8227a4a --- /dev/null +++ b/vendor/github.com/prometheus/procfs/ttar @@ -0,0 +1,264 @@ +#!/usr/bin/env bash +# Purpose: plain text tar format +# Limitations: - only suitable for text files, directories, and symlinks +# - stores only filename, content, and mode +# - not designed for untrusted input + +# Note: must work with bash version 3.2 (macOS) + +set -o errexit -o nounset + +# Sanitize environment (for instance, standard sorting of glob matches) +export LC_ALL=C + +path="" +CMD="" + +function usage { + bname=$(basename "$0") + cat << USAGE +Usage: $bname [-C ] -c -f (create archive) + $bname -t -f (list archive contents) + $bname [-C ] -x -f (extract archive) + +Options: + -C (change directory) + +Example: Change to sysfs directory, create ttar file from fixtures directory + $bname -C sysfs -c -f sysfs/fixtures.ttar fixtures/ +USAGE +exit "$1" +} + +function vecho { + if [ "${VERBOSE:-}" == "yes" ]; then + echo >&7 "$@" + fi +} + +function set_cmd { + if [ -n "$CMD" ]; then + echo "ERROR: more than one command given" + echo + usage 2 + fi + CMD=$1 +} + +while getopts :cf:htxvC: opt; do + case $opt in + c) + set_cmd "create" + ;; + f) + ARCHIVE=$OPTARG + ;; + h) + usage 0 + ;; + t) + set_cmd "list" + ;; + x) + set_cmd "extract" + ;; + v) + VERBOSE=yes + exec 7>&1 + ;; + C) + CDIR=$OPTARG + ;; + *) + echo >&2 "ERROR: invalid option -$OPTARG" + echo + usage 1 + ;; + esac +done + +# Remove processed options from arguments +shift $(( OPTIND - 1 )); + +if [ "${CMD:-}" == "" ]; then + echo >&2 "ERROR: no command given" + echo + usage 1 +elif [ "${ARCHIVE:-}" == "" ]; then + echo >&2 "ERROR: no archive name given" + echo + usage 1 +fi + +function list { + local path="" + local size=0 + local line_no=0 + local ttar_file=$1 + if [ -n "${2:-}" ]; then + echo >&2 "ERROR: too many arguments." + echo + usage 1 + fi + if [ ! -e "$ttar_file" ]; then + echo >&2 "ERROR: file not found ($ttar_file)" + echo + usage 1 + fi + while read -r line; do + line_no=$(( line_no + 1 )) + if [ $size -gt 0 ]; then + size=$(( size - 1 )) + continue + fi + if [[ $line =~ ^Path:\ (.*)$ ]]; then + path=${BASH_REMATCH[1]} + elif [[ $line =~ ^Lines:\ (.*)$ ]]; then + size=${BASH_REMATCH[1]} + echo "$path" + elif [[ $line =~ ^Directory:\ (.*)$ ]]; then + path=${BASH_REMATCH[1]} + echo "$path/" + elif [[ $line =~ ^SymlinkTo:\ (.*)$ ]]; then + echo "$path -> ${BASH_REMATCH[1]}" + fi + done < "$ttar_file" +} + +function extract { + local path="" + local size=0 + local line_no=0 + local ttar_file=$1 + if [ -n "${2:-}" ]; then + echo >&2 "ERROR: too many arguments." + echo + usage 1 + fi + if [ ! -e "$ttar_file" ]; then + echo >&2 "ERROR: file not found ($ttar_file)" + echo + usage 1 + fi + while IFS= read -r line; do + line_no=$(( line_no + 1 )) + if [ "$size" -gt 0 ]; then + echo "$line" >> "$path" + size=$(( size - 1 )) + continue + fi + if [[ $line =~ ^Path:\ (.*)$ ]]; then + path=${BASH_REMATCH[1]} + if [ -e "$path" ] || [ -L "$path" ]; then + rm "$path" + fi + elif [[ $line =~ ^Lines:\ (.*)$ ]]; then + size=${BASH_REMATCH[1]} + # Create file even if it is zero-length. + touch "$path" + vecho " $path" + elif [[ $line =~ ^Mode:\ (.*)$ ]]; then + mode=${BASH_REMATCH[1]} + chmod "$mode" "$path" + vecho "$mode" + elif [[ $line =~ ^Directory:\ (.*)$ ]]; then + path=${BASH_REMATCH[1]} + mkdir -p "$path" + vecho " $path/" + elif [[ $line =~ ^SymlinkTo:\ (.*)$ ]]; then + ln -s "${BASH_REMATCH[1]}" "$path" + vecho " $path -> ${BASH_REMATCH[1]}" + elif [[ $line =~ ^# ]]; then + # Ignore comments between files + continue + else + echo >&2 "ERROR: Unknown keyword on line $line_no: $line" + exit 1 + fi + done < "$ttar_file" +} + +function div { + echo "# ttar - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -" \ + "- - - - - -" +} + +function get_mode { + local mfile=$1 + if [ -z "${STAT_OPTION:-}" ]; then + if stat -c '%a' "$mfile" >/dev/null 2>&1; then + STAT_OPTION='-c' + STAT_FORMAT='%a' + else + STAT_OPTION='-f' + STAT_FORMAT='%A' + fi + fi + stat "${STAT_OPTION}" "${STAT_FORMAT}" "$mfile" +} + +function _create { + shopt -s nullglob + local mode + while (( "$#" )); do + file=$1 + if [ -L "$file" ]; then + echo "Path: $file" + symlinkTo=$(readlink "$file") + echo "SymlinkTo: $symlinkTo" + vecho " $file -> $symlinkTo" + div + elif [ -d "$file" ]; then + # Strip trailing slash (if there is one) + file=${file%/} + echo "Directory: $file" + mode=$(get_mode "$file") + echo "Mode: $mode" + vecho "$mode $file/" + div + # Find all files and dirs, including hidden/dot files + for x in "$file/"{*,.[^.]*}; do + _create "$x" + done + elif [ -f "$file" ]; then + echo "Path: $file" + lines=$(wc -l "$file"|awk '{print $1}') + echo "Lines: $lines" + cat "$file" + mode=$(get_mode "$file") + echo "Mode: $mode" + vecho "$mode $file" + div + else + echo >&2 "ERROR: file not found ($file in $(pwd))" + exit 2 + fi + shift + done +} + +function create { + ttar_file=$1 + shift + if [ -z "${1:-}" ]; then + echo >&2 "ERROR: missing arguments." + echo + usage 1 + fi + if [ -e "$ttar_file" ]; then + rm "$ttar_file" + fi + exec > "$ttar_file" + _create "$@" +} + +if [ -n "${CDIR:-}" ]; then + if [[ "$ARCHIVE" != /* ]]; then + # Relative path: preserve the archive's location before changing + # directory + ARCHIVE="$(pwd)/$ARCHIVE" + fi + cd "$CDIR" +fi + +"$CMD" "$ARCHIVE" "$@" diff --git a/vendor/github.com/prometheus/procfs/xfrm.go b/vendor/github.com/prometheus/procfs/xfrm.go new file mode 100644 index 0000000..ffe9df5 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/xfrm.go @@ -0,0 +1,187 @@ +// Copyright 2017 Prometheus Team +// 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 procfs + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" +) + +// XfrmStat models the contents of /proc/net/xfrm_stat. +type XfrmStat struct { + // All errors which are not matched by other + XfrmInError int + // No buffer is left + XfrmInBufferError int + // Header Error + XfrmInHdrError int + // No state found + // i.e. either inbound SPI, address, or IPSEC protocol at SA is wrong + XfrmInNoStates int + // Transformation protocol specific error + // e.g. SA Key is wrong + XfrmInStateProtoError int + // Transformation mode specific error + XfrmInStateModeError int + // Sequence error + // e.g. sequence number is out of window + XfrmInStateSeqError int + // State is expired + XfrmInStateExpired int + // State has mismatch option + // e.g. UDP encapsulation type is mismatched + XfrmInStateMismatch int + // State is invalid + XfrmInStateInvalid int + // No matching template for states + // e.g. Inbound SAs are correct but SP rule is wrong + XfrmInTmplMismatch int + // No policy is found for states + // e.g. Inbound SAs are correct but no SP is found + XfrmInNoPols int + // Policy discards + XfrmInPolBlock int + // Policy error + XfrmInPolError int + // All errors which are not matched by others + XfrmOutError int + // Bundle generation error + XfrmOutBundleGenError int + // Bundle check error + XfrmOutBundleCheckError int + // No state was found + XfrmOutNoStates int + // Transformation protocol specific error + XfrmOutStateProtoError int + // Transportation mode specific error + XfrmOutStateModeError int + // Sequence error + // i.e sequence number overflow + XfrmOutStateSeqError int + // State is expired + XfrmOutStateExpired int + // Policy discads + XfrmOutPolBlock int + // Policy is dead + XfrmOutPolDead int + // Policy Error + XfrmOutPolError int + XfrmFwdHdrError int + XfrmOutStateInvalid int + XfrmAcquireError int +} + +// NewXfrmStat reads the xfrm_stat statistics. +func NewXfrmStat() (XfrmStat, error) { + fs, err := NewFS(DefaultMountPoint) + if err != nil { + return XfrmStat{}, err + } + + return fs.NewXfrmStat() +} + +// NewXfrmStat reads the xfrm_stat statistics from the 'proc' filesystem. +func (fs FS) NewXfrmStat() (XfrmStat, error) { + file, err := os.Open(fs.Path("net/xfrm_stat")) + if err != nil { + return XfrmStat{}, err + } + defer file.Close() + + var ( + x = XfrmStat{} + s = bufio.NewScanner(file) + ) + + for s.Scan() { + fields := strings.Fields(s.Text()) + + if len(fields) != 2 { + return XfrmStat{}, fmt.Errorf( + "couldnt parse %s line %s", file.Name(), s.Text()) + } + + name := fields[0] + value, err := strconv.Atoi(fields[1]) + if err != nil { + return XfrmStat{}, err + } + + switch name { + case "XfrmInError": + x.XfrmInError = value + case "XfrmInBufferError": + x.XfrmInBufferError = value + case "XfrmInHdrError": + x.XfrmInHdrError = value + case "XfrmInNoStates": + x.XfrmInNoStates = value + case "XfrmInStateProtoError": + x.XfrmInStateProtoError = value + case "XfrmInStateModeError": + x.XfrmInStateModeError = value + case "XfrmInStateSeqError": + x.XfrmInStateSeqError = value + case "XfrmInStateExpired": + x.XfrmInStateExpired = value + case "XfrmInStateInvalid": + x.XfrmInStateInvalid = value + case "XfrmInTmplMismatch": + x.XfrmInTmplMismatch = value + case "XfrmInNoPols": + x.XfrmInNoPols = value + case "XfrmInPolBlock": + x.XfrmInPolBlock = value + case "XfrmInPolError": + x.XfrmInPolError = value + case "XfrmOutError": + x.XfrmOutError = value + case "XfrmInStateMismatch": + x.XfrmInStateMismatch = value + case "XfrmOutBundleGenError": + x.XfrmOutBundleGenError = value + case "XfrmOutBundleCheckError": + x.XfrmOutBundleCheckError = value + case "XfrmOutNoStates": + x.XfrmOutNoStates = value + case "XfrmOutStateProtoError": + x.XfrmOutStateProtoError = value + case "XfrmOutStateModeError": + x.XfrmOutStateModeError = value + case "XfrmOutStateSeqError": + x.XfrmOutStateSeqError = value + case "XfrmOutStateExpired": + x.XfrmOutStateExpired = value + case "XfrmOutPolBlock": + x.XfrmOutPolBlock = value + case "XfrmOutPolDead": + x.XfrmOutPolDead = value + case "XfrmOutPolError": + x.XfrmOutPolError = value + case "XfrmFwdHdrError": + x.XfrmFwdHdrError = value + case "XfrmOutStateInvalid": + x.XfrmOutStateInvalid = value + case "XfrmAcquireError": + x.XfrmAcquireError = value + } + + } + + return x, s.Err() +} diff --git a/vendor/github.com/prometheus/procfs/xfrm_test.go b/vendor/github.com/prometheus/procfs/xfrm_test.go new file mode 100644 index 0000000..5918c39 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/xfrm_test.go @@ -0,0 +1,66 @@ +// Copyright 2017 Prometheus Team +// 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 procfs + +import ( + "testing" +) + +func TestXfrmStats(t *testing.T) { + xfrmStats, err := FS("fixtures").NewXfrmStat() + if err != nil { + t.Fatal(err) + } + + for _, test := range []struct { + name string + want int + got int + }{ + {name: "XfrmInError", want: 1, got: xfrmStats.XfrmInError}, + {name: "XfrmInBufferError", want: 2, got: xfrmStats.XfrmInBufferError}, + {name: "XfrmInHdrError", want: 4, got: xfrmStats.XfrmInHdrError}, + {name: "XfrmInNoStates", want: 3, got: xfrmStats.XfrmInNoStates}, + {name: "XfrmInStateProtoError", want: 40, got: xfrmStats.XfrmInStateProtoError}, + {name: "XfrmInStateModeError", want: 100, got: xfrmStats.XfrmInStateModeError}, + {name: "XfrmInStateSeqError", want: 6000, got: xfrmStats.XfrmInStateSeqError}, + {name: "XfrmInStateExpired", want: 4, got: xfrmStats.XfrmInStateExpired}, + {name: "XfrmInStateMismatch", want: 23451, got: xfrmStats.XfrmInStateMismatch}, + {name: "XfrmInStateInvalid", want: 55555, got: xfrmStats.XfrmInStateInvalid}, + {name: "XfrmInTmplMismatch", want: 51, got: xfrmStats.XfrmInTmplMismatch}, + {name: "XfrmInNoPols", want: 65432, got: xfrmStats.XfrmInNoPols}, + {name: "XfrmInPolBlock", want: 100, got: xfrmStats.XfrmInPolBlock}, + {name: "XfrmInPolError", want: 10000, got: xfrmStats.XfrmInPolError}, + {name: "XfrmOutError", want: 1000000, got: xfrmStats.XfrmOutError}, + {name: "XfrmOutBundleGenError", want: 43321, got: xfrmStats.XfrmOutBundleGenError}, + {name: "XfrmOutBundleCheckError", want: 555, got: xfrmStats.XfrmOutBundleCheckError}, + {name: "XfrmOutNoStates", want: 869, got: xfrmStats.XfrmOutNoStates}, + {name: "XfrmOutStateProtoError", want: 4542, got: xfrmStats.XfrmOutStateProtoError}, + {name: "XfrmOutStateModeError", want: 4, got: xfrmStats.XfrmOutStateModeError}, + {name: "XfrmOutStateSeqError", want: 543, got: xfrmStats.XfrmOutStateSeqError}, + {name: "XfrmOutStateExpired", want: 565, got: xfrmStats.XfrmOutStateExpired}, + {name: "XfrmOutPolBlock", want: 43456, got: xfrmStats.XfrmOutPolBlock}, + {name: "XfrmOutPolDead", want: 7656, got: xfrmStats.XfrmOutPolDead}, + {name: "XfrmOutPolError", want: 1454, got: xfrmStats.XfrmOutPolError}, + {name: "XfrmFwdHdrError", want: 6654, got: xfrmStats.XfrmFwdHdrError}, + {name: "XfrmOutStateInvaliad", want: 28765, got: xfrmStats.XfrmOutStateInvalid}, + {name: "XfrmAcquireError", want: 24532, got: xfrmStats.XfrmAcquireError}, + {name: "XfrmInStateInvalid", want: 55555, got: xfrmStats.XfrmInStateInvalid}, + {name: "XfrmOutError", want: 1000000, got: xfrmStats.XfrmOutError}, + } { + if test.want != test.got { + t.Errorf("Want %s %d, have %d", test.name, test.want, test.got) + } + } +} diff --git a/vendor/github.com/prometheus/procfs/xfs/parse.go b/vendor/github.com/prometheus/procfs/xfs/parse.go new file mode 100644 index 0000000..c8f6279 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/xfs/parse.go @@ -0,0 +1,359 @@ +// Copyright 2017 The Prometheus 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 xfs + +import ( + "bufio" + "fmt" + "io" + "strconv" + "strings" +) + +// ParseStats parses a Stats from an input io.Reader, using the format +// found in /proc/fs/xfs/stat. +func ParseStats(r io.Reader) (*Stats, error) { + const ( + // Fields parsed into stats structures. + fieldExtentAlloc = "extent_alloc" + fieldAbt = "abt" + fieldBlkMap = "blk_map" + fieldBmbt = "bmbt" + fieldDir = "dir" + fieldTrans = "trans" + fieldIg = "ig" + fieldLog = "log" + fieldRw = "rw" + fieldAttr = "attr" + fieldIcluster = "icluster" + fieldVnodes = "vnodes" + fieldBuf = "buf" + fieldXpc = "xpc" + + // Unimplemented at this time due to lack of documentation. + fieldPushAil = "push_ail" + fieldXstrat = "xstrat" + fieldAbtb2 = "abtb2" + fieldAbtc2 = "abtc2" + fieldBmbt2 = "bmbt2" + fieldIbt2 = "ibt2" + fieldFibt2 = "fibt2" + fieldQm = "qm" + fieldDebug = "debug" + ) + + var xfss Stats + + s := bufio.NewScanner(r) + for s.Scan() { + // Expect at least a string label and a single integer value, ex: + // - abt 0 + // - rw 1 2 + ss := strings.Fields(string(s.Bytes())) + if len(ss) < 2 { + continue + } + label := ss[0] + + // Extended precision counters are uint64 values. + if label == fieldXpc { + us, err := parseUint64s(ss[1:]) + if err != nil { + return nil, err + } + + xfss.ExtendedPrecision, err = extendedPrecisionStats(us) + if err != nil { + return nil, err + } + + continue + } + + // All other counters are uint32 values. + us, err := parseUint32s(ss[1:]) + if err != nil { + return nil, err + } + + switch label { + case fieldExtentAlloc: + xfss.ExtentAllocation, err = extentAllocationStats(us) + case fieldAbt: + xfss.AllocationBTree, err = btreeStats(us) + case fieldBlkMap: + xfss.BlockMapping, err = blockMappingStats(us) + case fieldBmbt: + xfss.BlockMapBTree, err = btreeStats(us) + case fieldDir: + xfss.DirectoryOperation, err = directoryOperationStats(us) + case fieldTrans: + xfss.Transaction, err = transactionStats(us) + case fieldIg: + xfss.InodeOperation, err = inodeOperationStats(us) + case fieldLog: + xfss.LogOperation, err = logOperationStats(us) + case fieldRw: + xfss.ReadWrite, err = readWriteStats(us) + case fieldAttr: + xfss.AttributeOperation, err = attributeOperationStats(us) + case fieldIcluster: + xfss.InodeClustering, err = inodeClusteringStats(us) + case fieldVnodes: + xfss.Vnode, err = vnodeStats(us) + case fieldBuf: + xfss.Buffer, err = bufferStats(us) + } + if err != nil { + return nil, err + } + } + + return &xfss, s.Err() +} + +// extentAllocationStats builds an ExtentAllocationStats from a slice of uint32s. +func extentAllocationStats(us []uint32) (ExtentAllocationStats, error) { + if l := len(us); l != 4 { + return ExtentAllocationStats{}, fmt.Errorf("incorrect number of values for XFS extent allocation stats: %d", l) + } + + return ExtentAllocationStats{ + ExtentsAllocated: us[0], + BlocksAllocated: us[1], + ExtentsFreed: us[2], + BlocksFreed: us[3], + }, nil +} + +// btreeStats builds a BTreeStats from a slice of uint32s. +func btreeStats(us []uint32) (BTreeStats, error) { + if l := len(us); l != 4 { + return BTreeStats{}, fmt.Errorf("incorrect number of values for XFS btree stats: %d", l) + } + + return BTreeStats{ + Lookups: us[0], + Compares: us[1], + RecordsInserted: us[2], + RecordsDeleted: us[3], + }, nil +} + +// BlockMappingStat builds a BlockMappingStats from a slice of uint32s. +func blockMappingStats(us []uint32) (BlockMappingStats, error) { + if l := len(us); l != 7 { + return BlockMappingStats{}, fmt.Errorf("incorrect number of values for XFS block mapping stats: %d", l) + } + + return BlockMappingStats{ + Reads: us[0], + Writes: us[1], + Unmaps: us[2], + ExtentListInsertions: us[3], + ExtentListDeletions: us[4], + ExtentListLookups: us[5], + ExtentListCompares: us[6], + }, nil +} + +// DirectoryOperationStats builds a DirectoryOperationStats from a slice of uint32s. +func directoryOperationStats(us []uint32) (DirectoryOperationStats, error) { + if l := len(us); l != 4 { + return DirectoryOperationStats{}, fmt.Errorf("incorrect number of values for XFS directory operation stats: %d", l) + } + + return DirectoryOperationStats{ + Lookups: us[0], + Creates: us[1], + Removes: us[2], + Getdents: us[3], + }, nil +} + +// TransactionStats builds a TransactionStats from a slice of uint32s. +func transactionStats(us []uint32) (TransactionStats, error) { + if l := len(us); l != 3 { + return TransactionStats{}, fmt.Errorf("incorrect number of values for XFS transaction stats: %d", l) + } + + return TransactionStats{ + Sync: us[0], + Async: us[1], + Empty: us[2], + }, nil +} + +// InodeOperationStats builds an InodeOperationStats from a slice of uint32s. +func inodeOperationStats(us []uint32) (InodeOperationStats, error) { + if l := len(us); l != 7 { + return InodeOperationStats{}, fmt.Errorf("incorrect number of values for XFS inode operation stats: %d", l) + } + + return InodeOperationStats{ + Attempts: us[0], + Found: us[1], + Recycle: us[2], + Missed: us[3], + Duplicate: us[4], + Reclaims: us[5], + AttributeChange: us[6], + }, nil +} + +// LogOperationStats builds a LogOperationStats from a slice of uint32s. +func logOperationStats(us []uint32) (LogOperationStats, error) { + if l := len(us); l != 5 { + return LogOperationStats{}, fmt.Errorf("incorrect number of values for XFS log operation stats: %d", l) + } + + return LogOperationStats{ + Writes: us[0], + Blocks: us[1], + NoInternalBuffers: us[2], + Force: us[3], + ForceSleep: us[4], + }, nil +} + +// ReadWriteStats builds a ReadWriteStats from a slice of uint32s. +func readWriteStats(us []uint32) (ReadWriteStats, error) { + if l := len(us); l != 2 { + return ReadWriteStats{}, fmt.Errorf("incorrect number of values for XFS read write stats: %d", l) + } + + return ReadWriteStats{ + Read: us[0], + Write: us[1], + }, nil +} + +// AttributeOperationStats builds an AttributeOperationStats from a slice of uint32s. +func attributeOperationStats(us []uint32) (AttributeOperationStats, error) { + if l := len(us); l != 4 { + return AttributeOperationStats{}, fmt.Errorf("incorrect number of values for XFS attribute operation stats: %d", l) + } + + return AttributeOperationStats{ + Get: us[0], + Set: us[1], + Remove: us[2], + List: us[3], + }, nil +} + +// InodeClusteringStats builds an InodeClusteringStats from a slice of uint32s. +func inodeClusteringStats(us []uint32) (InodeClusteringStats, error) { + if l := len(us); l != 3 { + return InodeClusteringStats{}, fmt.Errorf("incorrect number of values for XFS inode clustering stats: %d", l) + } + + return InodeClusteringStats{ + Iflush: us[0], + Flush: us[1], + FlushInode: us[2], + }, nil +} + +// VnodeStats builds a VnodeStats from a slice of uint32s. +func vnodeStats(us []uint32) (VnodeStats, error) { + // The attribute "Free" appears to not be available on older XFS + // stats versions. Therefore, 7 or 8 elements may appear in + // this slice. + l := len(us) + if l != 7 && l != 8 { + return VnodeStats{}, fmt.Errorf("incorrect number of values for XFS vnode stats: %d", l) + } + + s := VnodeStats{ + Active: us[0], + Allocate: us[1], + Get: us[2], + Hold: us[3], + Release: us[4], + Reclaim: us[5], + Remove: us[6], + } + + // Skip adding free, unless it is present. The zero value will + // be used in place of an actual count. + if l == 7 { + return s, nil + } + + s.Free = us[7] + return s, nil +} + +// BufferStats builds a BufferStats from a slice of uint32s. +func bufferStats(us []uint32) (BufferStats, error) { + if l := len(us); l != 9 { + return BufferStats{}, fmt.Errorf("incorrect number of values for XFS buffer stats: %d", l) + } + + return BufferStats{ + Get: us[0], + Create: us[1], + GetLocked: us[2], + GetLockedWaited: us[3], + BusyLocked: us[4], + MissLocked: us[5], + PageRetries: us[6], + PageFound: us[7], + GetRead: us[8], + }, nil +} + +// ExtendedPrecisionStats builds an ExtendedPrecisionStats from a slice of uint32s. +func extendedPrecisionStats(us []uint64) (ExtendedPrecisionStats, error) { + if l := len(us); l != 3 { + return ExtendedPrecisionStats{}, fmt.Errorf("incorrect number of values for XFS extended precision stats: %d", l) + } + + return ExtendedPrecisionStats{ + FlushBytes: us[0], + WriteBytes: us[1], + ReadBytes: us[2], + }, nil +} + +// parseUint32s parses a slice of strings into a slice of uint32s. +func parseUint32s(ss []string) ([]uint32, error) { + us := make([]uint32, 0, len(ss)) + for _, s := range ss { + u, err := strconv.ParseUint(s, 10, 32) + if err != nil { + return nil, err + } + + us = append(us, uint32(u)) + } + + return us, nil +} + +// parseUint64s parses a slice of strings into a slice of uint64s. +func parseUint64s(ss []string) ([]uint64, error) { + us := make([]uint64, 0, len(ss)) + for _, s := range ss { + u, err := strconv.ParseUint(s, 10, 64) + if err != nil { + return nil, err + } + + us = append(us, u) + } + + return us, nil +} diff --git a/vendor/github.com/prometheus/procfs/xfs/parse_test.go b/vendor/github.com/prometheus/procfs/xfs/parse_test.go new file mode 100644 index 0000000..2e946c2 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/xfs/parse_test.go @@ -0,0 +1,442 @@ +// Copyright 2017 The Prometheus 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 xfs_test + +import ( + "reflect" + "strings" + "testing" + + "github.com/prometheus/procfs" + "github.com/prometheus/procfs/xfs" +) + +func TestParseStats(t *testing.T) { + tests := []struct { + name string + s string + fs bool + stats *xfs.Stats + invalid bool + }{ + { + name: "empty file OK", + }, + { + name: "short or empty lines and unknown labels ignored", + s: "one\n\ntwo 1 2 3\n", + stats: &xfs.Stats{}, + }, + { + name: "bad uint32", + s: "extent_alloc XXX", + invalid: true, + }, + { + name: "bad uint64", + s: "xpc XXX", + invalid: true, + }, + { + name: "extent_alloc bad", + s: "extent_alloc 1", + invalid: true, + }, + { + name: "extent_alloc OK", + s: "extent_alloc 1 2 3 4", + stats: &xfs.Stats{ + ExtentAllocation: xfs.ExtentAllocationStats{ + ExtentsAllocated: 1, + BlocksAllocated: 2, + ExtentsFreed: 3, + BlocksFreed: 4, + }, + }, + }, + { + name: "abt bad", + s: "abt 1", + invalid: true, + }, + { + name: "abt OK", + s: "abt 1 2 3 4", + stats: &xfs.Stats{ + AllocationBTree: xfs.BTreeStats{ + Lookups: 1, + Compares: 2, + RecordsInserted: 3, + RecordsDeleted: 4, + }, + }, + }, + { + name: "blk_map bad", + s: "blk_map 1", + invalid: true, + }, + { + name: "blk_map OK", + s: "blk_map 1 2 3 4 5 6 7", + stats: &xfs.Stats{ + BlockMapping: xfs.BlockMappingStats{ + Reads: 1, + Writes: 2, + Unmaps: 3, + ExtentListInsertions: 4, + ExtentListDeletions: 5, + ExtentListLookups: 6, + ExtentListCompares: 7, + }, + }, + }, + { + name: "bmbt bad", + s: "bmbt 1", + invalid: true, + }, + { + name: "bmbt OK", + s: "bmbt 1 2 3 4", + stats: &xfs.Stats{ + BlockMapBTree: xfs.BTreeStats{ + Lookups: 1, + Compares: 2, + RecordsInserted: 3, + RecordsDeleted: 4, + }, + }, + }, + { + name: "dir bad", + s: "dir 1", + invalid: true, + }, + { + name: "dir OK", + s: "dir 1 2 3 4", + stats: &xfs.Stats{ + DirectoryOperation: xfs.DirectoryOperationStats{ + Lookups: 1, + Creates: 2, + Removes: 3, + Getdents: 4, + }, + }, + }, + { + name: "trans bad", + s: "trans 1", + invalid: true, + }, + { + name: "trans OK", + s: "trans 1 2 3", + stats: &xfs.Stats{ + Transaction: xfs.TransactionStats{ + Sync: 1, + Async: 2, + Empty: 3, + }, + }, + }, + { + name: "ig bad", + s: "ig 1", + invalid: true, + }, + { + name: "ig OK", + s: "ig 1 2 3 4 5 6 7", + stats: &xfs.Stats{ + InodeOperation: xfs.InodeOperationStats{ + Attempts: 1, + Found: 2, + Recycle: 3, + Missed: 4, + Duplicate: 5, + Reclaims: 6, + AttributeChange: 7, + }, + }, + }, + { + name: "log bad", + s: "log 1", + invalid: true, + }, + { + name: "log OK", + s: "log 1 2 3 4 5", + stats: &xfs.Stats{ + LogOperation: xfs.LogOperationStats{ + Writes: 1, + Blocks: 2, + NoInternalBuffers: 3, + Force: 4, + ForceSleep: 5, + }, + }, + }, + { + name: "rw bad", + s: "rw 1", + invalid: true, + }, + { + name: "rw OK", + s: "rw 1 2", + stats: &xfs.Stats{ + ReadWrite: xfs.ReadWriteStats{ + Read: 1, + Write: 2, + }, + }, + }, + { + name: "attr bad", + s: "attr 1", + invalid: true, + }, + { + name: "attr OK", + s: "attr 1 2 3 4", + stats: &xfs.Stats{ + AttributeOperation: xfs.AttributeOperationStats{ + Get: 1, + Set: 2, + Remove: 3, + List: 4, + }, + }, + }, + { + name: "icluster bad", + s: "icluster 1", + invalid: true, + }, + { + name: "icluster OK", + s: "icluster 1 2 3", + stats: &xfs.Stats{ + InodeClustering: xfs.InodeClusteringStats{ + Iflush: 1, + Flush: 2, + FlushInode: 3, + }, + }, + }, + { + name: "vnodes bad", + s: "vnodes 1", + invalid: true, + }, + { + name: "vnodes (missing free) OK", + s: "vnodes 1 2 3 4 5 6 7", + stats: &xfs.Stats{ + Vnode: xfs.VnodeStats{ + Active: 1, + Allocate: 2, + Get: 3, + Hold: 4, + Release: 5, + Reclaim: 6, + Remove: 7, + }, + }, + }, + { + name: "vnodes (with free) OK", + s: "vnodes 1 2 3 4 5 6 7 8", + stats: &xfs.Stats{ + Vnode: xfs.VnodeStats{ + Active: 1, + Allocate: 2, + Get: 3, + Hold: 4, + Release: 5, + Reclaim: 6, + Remove: 7, + Free: 8, + }, + }, + }, + { + name: "buf bad", + s: "buf 1", + invalid: true, + }, + { + name: "buf OK", + s: "buf 1 2 3 4 5 6 7 8 9", + stats: &xfs.Stats{ + Buffer: xfs.BufferStats{ + Get: 1, + Create: 2, + GetLocked: 3, + GetLockedWaited: 4, + BusyLocked: 5, + MissLocked: 6, + PageRetries: 7, + PageFound: 8, + GetRead: 9, + }, + }, + }, + { + name: "xpc bad", + s: "xpc 1", + invalid: true, + }, + { + name: "xpc OK", + s: "xpc 1 2 3", + stats: &xfs.Stats{ + ExtendedPrecision: xfs.ExtendedPrecisionStats{ + FlushBytes: 1, + WriteBytes: 2, + ReadBytes: 3, + }, + }, + }, + { + name: "fixtures OK", + fs: true, + stats: &xfs.Stats{ + ExtentAllocation: xfs.ExtentAllocationStats{ + ExtentsAllocated: 92447, + BlocksAllocated: 97589, + ExtentsFreed: 92448, + BlocksFreed: 93751, + }, + AllocationBTree: xfs.BTreeStats{ + Lookups: 0, + Compares: 0, + RecordsInserted: 0, + RecordsDeleted: 0, + }, + BlockMapping: xfs.BlockMappingStats{ + Reads: 1767055, + Writes: 188820, + Unmaps: 184891, + ExtentListInsertions: 92447, + ExtentListDeletions: 92448, + ExtentListLookups: 2140766, + ExtentListCompares: 0, + }, + BlockMapBTree: xfs.BTreeStats{ + Lookups: 0, + Compares: 0, + RecordsInserted: 0, + RecordsDeleted: 0, + }, + DirectoryOperation: xfs.DirectoryOperationStats{ + Lookups: 185039, + Creates: 92447, + Removes: 92444, + Getdents: 136422, + }, + Transaction: xfs.TransactionStats{ + Sync: 706, + Async: 944304, + Empty: 0, + }, + InodeOperation: xfs.InodeOperationStats{ + Attempts: 185045, + Found: 58807, + Recycle: 0, + Missed: 126238, + Duplicate: 0, + Reclaims: 33637, + AttributeChange: 22, + }, + LogOperation: xfs.LogOperationStats{ + Writes: 2883, + Blocks: 113448, + NoInternalBuffers: 9, + Force: 17360, + ForceSleep: 739, + }, + ReadWrite: xfs.ReadWriteStats{ + Read: 107739, + Write: 94045, + }, + AttributeOperation: xfs.AttributeOperationStats{ + Get: 4, + Set: 0, + Remove: 0, + List: 0, + }, + InodeClustering: xfs.InodeClusteringStats{ + Iflush: 8677, + Flush: 7849, + FlushInode: 135802, + }, + Vnode: xfs.VnodeStats{ + Active: 92601, + Allocate: 0, + Get: 0, + Hold: 0, + Release: 92444, + Reclaim: 92444, + Remove: 92444, + Free: 0, + }, + Buffer: xfs.BufferStats{ + Get: 2666287, + Create: 7122, + GetLocked: 2659202, + GetLockedWaited: 3599, + BusyLocked: 2, + MissLocked: 7085, + PageRetries: 0, + PageFound: 10297, + GetRead: 7085, + }, + ExtendedPrecision: xfs.ExtendedPrecisionStats{ + FlushBytes: 399724544, + WriteBytes: 92823103, + ReadBytes: 86219234, + }, + }, + }, + } + + for _, tt := range tests { + var ( + stats *xfs.Stats + err error + ) + + if tt.s != "" { + stats, err = xfs.ParseStats(strings.NewReader(tt.s)) + } + if tt.fs { + stats, err = procfs.FS("../fixtures").XFSStats() + } + + if tt.invalid && err == nil { + t.Error("expected an error, but none occurred") + } + if !tt.invalid && err != nil { + t.Errorf("unexpected error: %v", err) + } + + if want, have := tt.stats, stats; !reflect.DeepEqual(want, have) { + t.Errorf("unexpected XFS stats:\nwant:\n%v\nhave:\n%v", want, have) + } + } +} diff --git a/vendor/github.com/prometheus/procfs/xfs/xfs.go b/vendor/github.com/prometheus/procfs/xfs/xfs.go new file mode 100644 index 0000000..d86794b --- /dev/null +++ b/vendor/github.com/prometheus/procfs/xfs/xfs.go @@ -0,0 +1,163 @@ +// Copyright 2017 The Prometheus 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 xfs provides access to statistics exposed by the XFS filesystem. +package xfs + +// Stats contains XFS filesystem runtime statistics, parsed from +// /proc/fs/xfs/stat. +// +// The names and meanings of each statistic were taken from +// http://xfs.org/index.php/Runtime_Stats and xfs_stats.h in the Linux +// kernel source. Most counters are uint32s (same data types used in +// xfs_stats.h), but some of the "extended precision stats" are uint64s. +type Stats struct { + // The name of the filesystem used to source these statistics. + // If empty, this indicates aggregated statistics for all XFS + // filesystems on the host. + Name string + + ExtentAllocation ExtentAllocationStats + AllocationBTree BTreeStats + BlockMapping BlockMappingStats + BlockMapBTree BTreeStats + DirectoryOperation DirectoryOperationStats + Transaction TransactionStats + InodeOperation InodeOperationStats + LogOperation LogOperationStats + ReadWrite ReadWriteStats + AttributeOperation AttributeOperationStats + InodeClustering InodeClusteringStats + Vnode VnodeStats + Buffer BufferStats + ExtendedPrecision ExtendedPrecisionStats +} + +// ExtentAllocationStats contains statistics regarding XFS extent allocations. +type ExtentAllocationStats struct { + ExtentsAllocated uint32 + BlocksAllocated uint32 + ExtentsFreed uint32 + BlocksFreed uint32 +} + +// BTreeStats contains statistics regarding an XFS internal B-tree. +type BTreeStats struct { + Lookups uint32 + Compares uint32 + RecordsInserted uint32 + RecordsDeleted uint32 +} + +// BlockMappingStats contains statistics regarding XFS block maps. +type BlockMappingStats struct { + Reads uint32 + Writes uint32 + Unmaps uint32 + ExtentListInsertions uint32 + ExtentListDeletions uint32 + ExtentListLookups uint32 + ExtentListCompares uint32 +} + +// DirectoryOperationStats contains statistics regarding XFS directory entries. +type DirectoryOperationStats struct { + Lookups uint32 + Creates uint32 + Removes uint32 + Getdents uint32 +} + +// TransactionStats contains statistics regarding XFS metadata transactions. +type TransactionStats struct { + Sync uint32 + Async uint32 + Empty uint32 +} + +// InodeOperationStats contains statistics regarding XFS inode operations. +type InodeOperationStats struct { + Attempts uint32 + Found uint32 + Recycle uint32 + Missed uint32 + Duplicate uint32 + Reclaims uint32 + AttributeChange uint32 +} + +// LogOperationStats contains statistics regarding the XFS log buffer. +type LogOperationStats struct { + Writes uint32 + Blocks uint32 + NoInternalBuffers uint32 + Force uint32 + ForceSleep uint32 +} + +// ReadWriteStats contains statistics regarding the number of read and write +// system calls for XFS filesystems. +type ReadWriteStats struct { + Read uint32 + Write uint32 +} + +// AttributeOperationStats contains statistics regarding manipulation of +// XFS extended file attributes. +type AttributeOperationStats struct { + Get uint32 + Set uint32 + Remove uint32 + List uint32 +} + +// InodeClusteringStats contains statistics regarding XFS inode clustering +// operations. +type InodeClusteringStats struct { + Iflush uint32 + Flush uint32 + FlushInode uint32 +} + +// VnodeStats contains statistics regarding XFS vnode operations. +type VnodeStats struct { + Active uint32 + Allocate uint32 + Get uint32 + Hold uint32 + Release uint32 + Reclaim uint32 + Remove uint32 + Free uint32 +} + +// BufferStats contains statistics regarding XFS read/write I/O buffers. +type BufferStats struct { + Get uint32 + Create uint32 + GetLocked uint32 + GetLockedWaited uint32 + BusyLocked uint32 + MissLocked uint32 + PageRetries uint32 + PageFound uint32 + GetRead uint32 +} + +// ExtendedPrecisionStats contains high precision counters used to track the +// total number of bytes read, written, or flushed, during XFS operations. +type ExtendedPrecisionStats struct { + FlushBytes uint64 + WriteBytes uint64 + ReadBytes uint64 +} diff --git a/vendor/github.com/robfig/cron/spec.go b/vendor/github.com/robfig/cron/spec.go index afa5ac8..cb37433 100644 --- a/vendor/github.com/robfig/cron/spec.go +++ b/vendor/github.com/robfig/cron/spec.go @@ -1,6 +1,8 @@ package cron -import "time" +import ( + "time" +) // SpecSchedule specifies a duty cycle (to the second granularity), based on a // traditional crontab specification. It is computed initially and stored as bit sets. @@ -108,7 +110,7 @@ WRAP: for 1< 3am EDT (-4) + // Daylight savings time EST -> EDT {"2012-03-11T00:00:00-0500", "0 30 2 11 Mar ?", "2013-03-11T02:30:00-0400"}, - // hourly job - {"2012-03-11T00:00:00-0500", "0 0 * * * ?", "2012-03-11T01:00:00-0500"}, - {"2012-03-11T01:00:00-0500", "0 0 * * * ?", "2012-03-11T03:00:00-0400"}, - {"2012-03-11T03:00:00-0400", "0 0 * * * ?", "2012-03-11T04:00:00-0400"}, - {"2012-03-11T04:00:00-0400", "0 0 * * * ?", "2012-03-11T05:00:00-0400"}, - - // 1am nightly job - {"2012-03-11T00:00:00-0500", "0 0 1 * * ?", "2012-03-11T01:00:00-0500"}, - {"2012-03-11T01:00:00-0500", "0 0 1 * * ?", "2012-03-12T01:00:00-0400"}, - - // 2am nightly job (skipped) - {"2012-03-11T00:00:00-0500", "0 0 2 * * ?", "2012-03-12T02:00:00-0400"}, - - // Daylight savings time 2am EDT (-4) => 1am EST (-5) + // Daylight savings time EDT -> EST {"2012-11-04T00:00:00-0400", "0 30 2 04 Nov ?", "2012-11-04T02:30:00-0500"}, {"2012-11-04T01:45:00-0400", "0 30 1 04 Nov ?", "2012-11-04T01:30:00-0500"}, - // hourly job - {"2012-11-04T00:00:00-0400", "0 0 * * * ?", "2012-11-04T01:00:00-0400"}, - {"2012-11-04T01:00:00-0400", "0 0 * * * ?", "2012-11-04T01:00:00-0500"}, - {"2012-11-04T01:00:00-0500", "0 0 * * * ?", "2012-11-04T02:00:00-0500"}, - - // 1am nightly job (runs twice) - {"2012-11-04T00:00:00-0400", "0 0 1 * * ?", "2012-11-04T01:00:00-0400"}, - {"2012-11-04T01:00:00-0400", "0 0 1 * * ?", "2012-11-04T01:00:00-0500"}, - {"2012-11-04T01:00:00-0500", "0 0 1 * * ?", "2012-11-05T01:00:00-0500"}, - - // 2am nightly job - {"2012-11-04T00:00:00-0400", "0 0 2 * * ?", "2012-11-04T02:00:00-0500"}, - {"2012-11-04T02:00:00-0500", "0 0 2 * * ?", "2012-11-05T02:00:00-0500"}, - - // 3am nightly job - {"2012-11-04T00:00:00-0400", "0 0 3 * * ?", "2012-11-04T03:00:00-0500"}, - {"2012-11-04T03:00:00-0500", "0 0 3 * * ?", "2012-11-05T03:00:00-0500"}, - // Unsatisfiable {"Mon Jul 9 23:35 2012", "0 0 0 30 Feb ?", ""}, {"Mon Jul 9 23:35 2012", "0 0 0 31 Apr ?", ""}, diff --git a/vendor/github.com/sirupsen/logrus/.gitignore b/vendor/github.com/sirupsen/logrus/.gitignore new file mode 100644 index 0000000..66be63a --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/.gitignore @@ -0,0 +1 @@ +logrus diff --git a/vendor/github.com/sirupsen/logrus/.travis.yml b/vendor/github.com/sirupsen/logrus/.travis.yml new file mode 100644 index 0000000..a23296a --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/.travis.yml @@ -0,0 +1,15 @@ +language: go +go: + - 1.6.x + - 1.7.x + - 1.8.x + - tip +env: + - GOMAXPROCS=4 GORACE=halt_on_error=1 +install: + - go get github.com/stretchr/testify/assert + - go get gopkg.in/gemnasium/logrus-airbrake-hook.v2 + - go get golang.org/x/sys/unix + - go get golang.org/x/sys/windows +script: + - go test -race -v ./... diff --git a/vendor/github.com/sirupsen/logrus/CHANGELOG.md b/vendor/github.com/sirupsen/logrus/CHANGELOG.md new file mode 100644 index 0000000..8236d8b --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/CHANGELOG.md @@ -0,0 +1,113 @@ +# 1.0.3 + +* Replace example files with testable examples + +# 1.0.2 + +* bug: quote non-string values in text formatter (#583) +* Make (*Logger) SetLevel a public method + +# 1.0.1 + +* bug: fix escaping in text formatter (#575) + +# 1.0.0 + +* Officially changed name to lower-case +* bug: colors on Windows 10 (#541) +* bug: fix race in accessing level (#512) + +# 0.11.5 + +* feature: add writer and writerlevel to entry (#372) + +# 0.11.4 + +* bug: fix undefined variable on solaris (#493) + +# 0.11.3 + +* formatter: configure quoting of empty values (#484) +* formatter: configure quoting character (default is `"`) (#484) +* bug: fix not importing io correctly in non-linux environments (#481) + +# 0.11.2 + +* bug: fix windows terminal detection (#476) + +# 0.11.1 + +* bug: fix tty detection with custom out (#471) + +# 0.11.0 + +* performance: Use bufferpool to allocate (#370) +* terminal: terminal detection for app-engine (#343) +* feature: exit handler (#375) + +# 0.10.0 + +* feature: Add a test hook (#180) +* feature: `ParseLevel` is now case-insensitive (#326) +* feature: `FieldLogger` interface that generalizes `Logger` and `Entry` (#308) +* performance: avoid re-allocations on `WithFields` (#335) + +# 0.9.0 + +* logrus/text_formatter: don't emit empty msg +* logrus/hooks/airbrake: move out of main repository +* logrus/hooks/sentry: move out of main repository +* logrus/hooks/papertrail: move out of main repository +* logrus/hooks/bugsnag: move out of main repository +* logrus/core: run tests with `-race` +* logrus/core: detect TTY based on `stderr` +* logrus/core: support `WithError` on logger +* logrus/core: Solaris support + +# 0.8.7 + +* logrus/core: fix possible race (#216) +* logrus/doc: small typo fixes and doc improvements + + +# 0.8.6 + +* hooks/raven: allow passing an initialized client + +# 0.8.5 + +* logrus/core: revert #208 + +# 0.8.4 + +* formatter/text: fix data race (#218) + +# 0.8.3 + +* logrus/core: fix entry log level (#208) +* logrus/core: improve performance of text formatter by 40% +* logrus/core: expose `LevelHooks` type +* logrus/core: add support for DragonflyBSD and NetBSD +* formatter/text: print structs more verbosely + +# 0.8.2 + +* logrus: fix more Fatal family functions + +# 0.8.1 + +* logrus: fix not exiting on `Fatalf` and `Fatalln` + +# 0.8.0 + +* logrus: defaults to stderr instead of stdout +* hooks/sentry: add special field for `*http.Request` +* formatter/text: ignore Windows for colors + +# 0.7.3 + +* formatter/\*: allow configuration of timestamp layout + +# 0.7.2 + +* formatter/text: Add configuration option for time format (#158) diff --git a/vendor/github.com/sirupsen/logrus/LICENSE b/vendor/github.com/sirupsen/logrus/LICENSE new file mode 100644 index 0000000..f090cb4 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Simon Eskildsen + +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/github.com/sirupsen/logrus/README.md b/vendor/github.com/sirupsen/logrus/README.md new file mode 100644 index 0000000..4f5ce57 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/README.md @@ -0,0 +1,505 @@ +# Logrus :walrus: [![Build Status](https://travis-ci.org/sirupsen/logrus.svg?branch=master)](https://travis-ci.org/sirupsen/logrus) [![GoDoc](https://godoc.org/github.com/sirupsen/logrus?status.svg)](https://godoc.org/github.com/sirupsen/logrus) + +Logrus is a structured logger for Go (golang), completely API compatible with +the standard library logger. + +**Seeing weird case-sensitive problems?** It's in the past been possible to +import Logrus as both upper- and lower-case. Due to the Go package environment, +this caused issues in the community and we needed a standard. Some environments +experienced problems with the upper-case variant, so the lower-case was decided. +Everything using `logrus` will need to use the lower-case: +`github.com/sirupsen/logrus`. Any package that isn't, should be changed. + +To fix Glide, see [these +comments](https://github.com/sirupsen/logrus/issues/553#issuecomment-306591437). +For an in-depth explanation of the casing issue, see [this +comment](https://github.com/sirupsen/logrus/issues/570#issuecomment-313933276). + +**Are you interested in assisting in maintaining Logrus?** Currently I have a +lot of obligations, and I am unable to provide Logrus with the maintainership it +needs. If you'd like to help, please reach out to me at `simon at author's +username dot com`. + +Nicely color-coded in development (when a TTY is attached, otherwise just +plain text): + +![Colored](http://i.imgur.com/PY7qMwd.png) + +With `log.SetFormatter(&log.JSONFormatter{})`, for easy parsing by logstash +or Splunk: + +```json +{"animal":"walrus","level":"info","msg":"A group of walrus emerges from the +ocean","size":10,"time":"2014-03-10 19:57:38.562264131 -0400 EDT"} + +{"level":"warning","msg":"The group's number increased tremendously!", +"number":122,"omg":true,"time":"2014-03-10 19:57:38.562471297 -0400 EDT"} + +{"animal":"walrus","level":"info","msg":"A giant walrus appears!", +"size":10,"time":"2014-03-10 19:57:38.562500591 -0400 EDT"} + +{"animal":"walrus","level":"info","msg":"Tremendously sized cow enters the ocean.", +"size":9,"time":"2014-03-10 19:57:38.562527896 -0400 EDT"} + +{"level":"fatal","msg":"The ice breaks!","number":100,"omg":true, +"time":"2014-03-10 19:57:38.562543128 -0400 EDT"} +``` + +With the default `log.SetFormatter(&log.TextFormatter{})` when a TTY is not +attached, the output is compatible with the +[logfmt](http://godoc.org/github.com/kr/logfmt) format: + +```text +time="2015-03-26T01:27:38-04:00" level=debug msg="Started observing beach" animal=walrus number=8 +time="2015-03-26T01:27:38-04:00" level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10 +time="2015-03-26T01:27:38-04:00" level=warning msg="The group's number increased tremendously!" number=122 omg=true +time="2015-03-26T01:27:38-04:00" level=debug msg="Temperature changes" temperature=-4 +time="2015-03-26T01:27:38-04:00" level=panic msg="It's over 9000!" animal=orca size=9009 +time="2015-03-26T01:27:38-04:00" level=fatal msg="The ice breaks!" err=&{0x2082280c0 map[animal:orca size:9009] 2015-03-26 01:27:38.441574009 -0400 EDT panic It's over 9000!} number=100 omg=true +exit status 1 +``` + +#### Case-sensitivity + +The organization's name was changed to lower-case--and this will not be changed +back. If you are getting import conflicts due to case sensitivity, please use +the lower-case import: `github.com/sirupsen/logrus`. + +#### Example + +The simplest way to use Logrus is simply the package-level exported logger: + +```go +package main + +import ( + log "github.com/sirupsen/logrus" +) + +func main() { + log.WithFields(log.Fields{ + "animal": "walrus", + }).Info("A walrus appears") +} +``` + +Note that it's completely api-compatible with the stdlib logger, so you can +replace your `log` imports everywhere with `log "github.com/sirupsen/logrus"` +and you'll now have the flexibility of Logrus. You can customize it all you +want: + +```go +package main + +import ( + "os" + log "github.com/sirupsen/logrus" +) + +func init() { + // Log as JSON instead of the default ASCII formatter. + log.SetFormatter(&log.JSONFormatter{}) + + // Output to stdout instead of the default stderr + // Can be any io.Writer, see below for File example + log.SetOutput(os.Stdout) + + // Only log the warning severity or above. + log.SetLevel(log.WarnLevel) +} + +func main() { + log.WithFields(log.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") + + log.WithFields(log.Fields{ + "omg": true, + "number": 122, + }).Warn("The group's number increased tremendously!") + + log.WithFields(log.Fields{ + "omg": true, + "number": 100, + }).Fatal("The ice breaks!") + + // A common pattern is to re-use fields between logging statements by re-using + // the logrus.Entry returned from WithFields() + contextLogger := log.WithFields(log.Fields{ + "common": "this is a common field", + "other": "I also should be logged always", + }) + + contextLogger.Info("I'll be logged with common and other field") + contextLogger.Info("Me too") +} +``` + +For more advanced usage such as logging to multiple locations from the same +application, you can also create an instance of the `logrus` Logger: + +```go +package main + +import ( + "os" + "github.com/sirupsen/logrus" +) + +// Create a new instance of the logger. You can have any number of instances. +var log = logrus.New() + +func main() { + // The API for setting attributes is a little different than the package level + // exported logger. See Godoc. + log.Out = os.Stdout + + // You could set this to any `io.Writer` such as a file + // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666) + // if err == nil { + // log.Out = file + // } else { + // log.Info("Failed to log to file, using default stderr") + // } + + log.WithFields(logrus.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") +} +``` + +#### Fields + +Logrus encourages careful, structured logging through logging fields instead of +long, unparseable error messages. For example, instead of: `log.Fatalf("Failed +to send event %s to topic %s with key %d")`, you should log the much more +discoverable: + +```go +log.WithFields(log.Fields{ + "event": event, + "topic": topic, + "key": key, +}).Fatal("Failed to send event") +``` + +We've found this API forces you to think about logging in a way that produces +much more useful logging messages. We've been in countless situations where just +a single added field to a log statement that was already there would've saved us +hours. The `WithFields` call is optional. + +In general, with Logrus using any of the `printf`-family functions should be +seen as a hint you should add a field, however, you can still use the +`printf`-family functions with Logrus. + +#### Default Fields + +Often it's helpful to have fields _always_ attached to log statements in an +application or parts of one. For example, you may want to always log the +`request_id` and `user_ip` in the context of a request. Instead of writing +`log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip})` on +every line, you can create a `logrus.Entry` to pass around instead: + +```go +requestLogger := log.WithFields(log.Fields{"request_id": request_id, "user_ip": user_ip}) +requestLogger.Info("something happened on that request") # will log request_id and user_ip +requestLogger.Warn("something not great happened") +``` + +#### Hooks + +You can add hooks for logging levels. For example to send errors to an exception +tracking service on `Error`, `Fatal` and `Panic`, info to StatsD or log to +multiple places simultaneously, e.g. syslog. + +Logrus comes with [built-in hooks](hooks/). Add those, or your custom hook, in +`init`: + +```go +import ( + log "github.com/sirupsen/logrus" + "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "aibrake" + logrus_syslog "github.com/sirupsen/logrus/hooks/syslog" + "log/syslog" +) + +func init() { + + // Use the Airbrake hook to report errors that have Error severity or above to + // an exception tracker. You can create custom hooks, see the Hooks section. + log.AddHook(airbrake.NewHook(123, "xyz", "production")) + + hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") + if err != nil { + log.Error("Unable to connect to local syslog daemon") + } else { + log.AddHook(hook) + } +} +``` +Note: Syslog hook also support connecting to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). For the detail, please check the [syslog hook README](hooks/syslog/README.md). + +| Hook | Description | +| ----- | ----------- | +| [Airbrake "legacy"](https://github.com/gemnasium/logrus-airbrake-legacy-hook) | Send errors to an exception tracking service compatible with the Airbrake API V2. Uses [`airbrake-go`](https://github.com/tobi/airbrake-go) behind the scenes. | +| [Airbrake](https://github.com/gemnasium/logrus-airbrake-hook) | Send errors to the Airbrake API V3. Uses the official [`gobrake`](https://github.com/airbrake/gobrake) behind the scenes. | +| [Amazon Kinesis](https://github.com/evalphobia/logrus_kinesis) | Hook for logging to [Amazon Kinesis](https://aws.amazon.com/kinesis/) | +| [Amqp-Hook](https://github.com/vladoatanasov/logrus_amqp) | Hook for logging to Amqp broker (Like RabbitMQ) | +| [Bugsnag](https://github.com/Shopify/logrus-bugsnag/blob/master/bugsnag.go) | Send errors to the Bugsnag exception tracking service. | +| [DeferPanic](https://github.com/deferpanic/dp-logrus) | Hook for logging to DeferPanic | +| [Discordrus](https://github.com/kz/discordrus) | Hook for logging to [Discord](https://discordapp.com/) | +| [ElasticSearch](https://github.com/sohlich/elogrus) | Hook for logging to ElasticSearch| +| [Firehose](https://github.com/beaubrewer/logrus_firehose) | Hook for logging to [Amazon Firehose](https://aws.amazon.com/kinesis/firehose/) +| [Fluentd](https://github.com/evalphobia/logrus_fluent) | Hook for logging to fluentd | +| [Go-Slack](https://github.com/multiplay/go-slack) | Hook for logging to [Slack](https://slack.com) | +| [Graylog](https://github.com/gemnasium/logrus-graylog-hook) | Hook for logging to [Graylog](http://graylog2.org/) | +| [Hiprus](https://github.com/nubo/hiprus) | Send errors to a channel in hipchat. | +| [Honeybadger](https://github.com/agonzalezro/logrus_honeybadger) | Hook for sending exceptions to Honeybadger | +| [InfluxDB](https://github.com/Abramovic/logrus_influxdb) | Hook for logging to influxdb | +| [Influxus](http://github.com/vlad-doru/influxus) | Hook for concurrently logging to [InfluxDB](http://influxdata.com/) | +| [Journalhook](https://github.com/wercker/journalhook) | Hook for logging to `systemd-journald` | +| [KafkaLogrus](https://github.com/goibibo/KafkaLogrus) | Hook for logging to kafka | +| [LFShook](https://github.com/rifflock/lfshook) | Hook for logging to the local filesystem | +| [Logentries](https://github.com/jcftang/logentriesrus) | Hook for logging to [Logentries](https://logentries.com/) | +| [Logentrus](https://github.com/puddingfactory/logentrus) | Hook for logging to [Logentries](https://logentries.com/) | +| [Logmatic.io](https://github.com/logmatic/logmatic-go) | Hook for logging to [Logmatic.io](http://logmatic.io/) | +| [Logrusly](https://github.com/sebest/logrusly) | Send logs to [Loggly](https://www.loggly.com/) | +| [Logstash](https://github.com/bshuster-repo/logrus-logstash-hook) | Hook for logging to [Logstash](https://www.elastic.co/products/logstash) | +| [Mail](https://github.com/zbindenren/logrus_mail) | Hook for sending exceptions via mail | +| [Mattermost](https://github.com/shuLhan/mattermost-integration/tree/master/hooks/logrus) | Hook for logging to [Mattermost](https://mattermost.com/) | +| [Mongodb](https://github.com/weekface/mgorus) | Hook for logging to mongodb | +| [NATS-Hook](https://github.com/rybit/nats_logrus_hook) | Hook for logging to [NATS](https://nats.io) | +| [Octokit](https://github.com/dorajistyle/logrus-octokit-hook) | Hook for logging to github via octokit | +| [Papertrail](https://github.com/polds/logrus-papertrail-hook) | Send errors to the [Papertrail](https://papertrailapp.com) hosted logging service via UDP. | +| [PostgreSQL](https://github.com/gemnasium/logrus-postgresql-hook) | Send logs to [PostgreSQL](http://postgresql.org) | +| [Pushover](https://github.com/toorop/logrus_pushover) | Send error via [Pushover](https://pushover.net) | +| [Raygun](https://github.com/squirkle/logrus-raygun-hook) | Hook for logging to [Raygun.io](http://raygun.io/) | +| [Redis-Hook](https://github.com/rogierlommers/logrus-redis-hook) | Hook for logging to a ELK stack (through Redis) | +| [Rollrus](https://github.com/heroku/rollrus) | Hook for sending errors to rollbar | +| [Scribe](https://github.com/sagar8192/logrus-scribe-hook) | Hook for logging to [Scribe](https://github.com/facebookarchive/scribe)| +| [Sentry](https://github.com/evalphobia/logrus_sentry) | Send errors to the Sentry error logging and aggregation service. | +| [Slackrus](https://github.com/johntdyer/slackrus) | Hook for Slack chat. | +| [Stackdriver](https://github.com/knq/sdhook) | Hook for logging to [Google Stackdriver](https://cloud.google.com/logging/) | +| [Sumorus](https://github.com/doublefree/sumorus) | Hook for logging to [SumoLogic](https://www.sumologic.com/)| +| [Syslog](https://github.com/sirupsen/logrus/blob/master/hooks/syslog/syslog.go) | Send errors to remote syslog server. Uses standard library `log/syslog` behind the scenes. | +| [Syslog TLS](https://github.com/shinji62/logrus-syslog-ng) | Send errors to remote syslog server with TLS support. | +| [TraceView](https://github.com/evalphobia/logrus_appneta) | Hook for logging to [AppNeta TraceView](https://www.appneta.com/products/traceview/) | +| [Typetalk](https://github.com/dragon3/logrus-typetalk-hook) | Hook for logging to [Typetalk](https://www.typetalk.in/) | +| [logz.io](https://github.com/ripcurld00d/logrus-logzio-hook) | Hook for logging to [logz.io](https://logz.io), a Log as a Service using Logstash | +| [SQS-Hook](https://github.com/tsarpaul/logrus_sqs) | Hook for logging to [Amazon Simple Queue Service (SQS)](https://aws.amazon.com/sqs/) | + +#### Level logging + +Logrus has six logging levels: Debug, Info, Warning, Error, Fatal and Panic. + +```go +log.Debug("Useful debugging information.") +log.Info("Something noteworthy happened!") +log.Warn("You should probably take a look at this.") +log.Error("Something failed but I'm not quitting.") +// Calls os.Exit(1) after logging +log.Fatal("Bye.") +// Calls panic() after logging +log.Panic("I'm bailing.") +``` + +You can set the logging level on a `Logger`, then it will only log entries with +that severity or anything above it: + +```go +// Will log anything that is info or above (warn, error, fatal, panic). Default. +log.SetLevel(log.InfoLevel) +``` + +It may be useful to set `log.Level = logrus.DebugLevel` in a debug or verbose +environment if your application has that. + +#### Entries + +Besides the fields added with `WithField` or `WithFields` some fields are +automatically added to all logging events: + +1. `time`. The timestamp when the entry was created. +2. `msg`. The logging message passed to `{Info,Warn,Error,Fatal,Panic}` after + the `AddFields` call. E.g. `Failed to send event.` +3. `level`. The logging level. E.g. `info`. + +#### Environments + +Logrus has no notion of environment. + +If you wish for hooks and formatters to only be used in specific environments, +you should handle that yourself. For example, if your application has a global +variable `Environment`, which is a string representation of the environment you +could do: + +```go +import ( + log "github.com/sirupsen/logrus" +) + +init() { + // do something here to set environment depending on an environment variable + // or command-line flag + if Environment == "production" { + log.SetFormatter(&log.JSONFormatter{}) + } else { + // The TextFormatter is default, you don't actually have to do this. + log.SetFormatter(&log.TextFormatter{}) + } +} +``` + +This configuration is how `logrus` was intended to be used, but JSON in +production is mostly only useful if you do log aggregation with tools like +Splunk or Logstash. + +#### Formatters + +The built-in logging formatters are: + +* `logrus.TextFormatter`. Logs the event in colors if stdout is a tty, otherwise + without colors. + * *Note:* to force colored output when there is no TTY, set the `ForceColors` + field to `true`. To force no colored output even if there is a TTY set the + `DisableColors` field to `true`. For Windows, see + [github.com/mattn/go-colorable](https://github.com/mattn/go-colorable). + * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#TextFormatter). +* `logrus.JSONFormatter`. Logs fields as JSON. + * All options are listed in the [generated docs](https://godoc.org/github.com/sirupsen/logrus#JSONFormatter). + +Third party logging formatters: + +* [`FluentdFormatter`](https://github.com/joonix/log). Formats entries that can by parsed by Kubernetes and Google Container Engine. +* [`logstash`](https://github.com/bshuster-repo/logrus-logstash-hook). Logs fields as [Logstash](http://logstash.net) Events. +* [`prefixed`](https://github.com/x-cray/logrus-prefixed-formatter). Displays log entry source along with alternative layout. +* [`zalgo`](https://github.com/aybabtme/logzalgo). Invoking the P͉̫o̳̼̊w̖͈̰͎e̬͔̭͂r͚̼̹̲ ̫͓͉̳͈ō̠͕͖̚f̝͍̠ ͕̲̞͖͑Z̖̫̤̫ͪa͉̬͈̗l͖͎g̳̥o̰̥̅!̣͔̲̻͊̄ ̙̘̦̹̦. + +You can define your formatter by implementing the `Formatter` interface, +requiring a `Format` method. `Format` takes an `*Entry`. `entry.Data` is a +`Fields` type (`map[string]interface{}`) with all your fields as well as the +default ones (see Entries section above): + +```go +type MyJSONFormatter struct { +} + +log.SetFormatter(new(MyJSONFormatter)) + +func (f *MyJSONFormatter) Format(entry *Entry) ([]byte, error) { + // Note this doesn't include Time, Level and Message which are available on + // the Entry. Consult `godoc` on information about those fields or read the + // source of the official loggers. + serialized, err := json.Marshal(entry.Data) + if err != nil { + return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) + } + return append(serialized, '\n'), nil +} +``` + +#### Logger as an `io.Writer` + +Logrus can be transformed into an `io.Writer`. That writer is the end of an `io.Pipe` and it is your responsibility to close it. + +```go +w := logger.Writer() +defer w.Close() + +srv := http.Server{ + // create a stdlib log.Logger that writes to + // logrus.Logger. + ErrorLog: log.New(w, "", 0), +} +``` + +Each line written to that writer will be printed the usual way, using formatters +and hooks. The level for those entries is `info`. + +This means that we can override the standard library logger easily: + +```go +logger := logrus.New() +logger.Formatter = &logrus.JSONFormatter{} + +// Use logrus for standard log output +// Note that `log` here references stdlib's log +// Not logrus imported under the name `log`. +log.SetOutput(logger.Writer()) +``` + +#### Rotation + +Log rotation is not provided with Logrus. Log rotation should be done by an +external program (like `logrotate(8)`) that can compress and delete old log +entries. It should not be a feature of the application-level logger. + +#### Tools + +| Tool | Description | +| ---- | ----------- | +|[Logrus Mate](https://github.com/gogap/logrus_mate)|Logrus mate is a tool for Logrus to manage loggers, you can initial logger's level, hook and formatter by config file, the logger will generated with different config at different environment.| +|[Logrus Viper Helper](https://github.com/heirko/go-contrib/tree/master/logrusHelper)|An Helper around Logrus to wrap with spf13/Viper to load configuration with fangs! And to simplify Logrus configuration use some behavior of [Logrus Mate](https://github.com/gogap/logrus_mate). [sample](https://github.com/heirko/iris-contrib/blob/master/middleware/logrus-logger/example) | + +#### Testing + +Logrus has a built in facility for asserting the presence of log messages. This is implemented through the `test` hook and provides: + +* decorators for existing logger (`test.NewLocal` and `test.NewGlobal`) which basically just add the `test` hook +* a test logger (`test.NewNullLogger`) that just records log messages (and does not output any): + +```go +import( + "github.com/sirupsen/logrus" + "github.com/sirupsen/logrus/hooks/test" + "github.com/stretchr/testify/assert" + "testing" +) + +func TestSomething(t*testing.T){ + logger, hook := test.NewNullLogger() + logger.Error("Helloerror") + + assert.Equal(t, 1, len(hook.Entries)) + assert.Equal(t, logrus.ErrorLevel, hook.LastEntry().Level) + assert.Equal(t, "Helloerror", hook.LastEntry().Message) + + hook.Reset() + assert.Nil(t, hook.LastEntry()) +} +``` + +#### Fatal handlers + +Logrus can register one or more functions that will be called when any `fatal` +level message is logged. The registered handlers will be executed before +logrus performs a `os.Exit(1)`. This behavior may be helpful if callers need +to gracefully shutdown. Unlike a `panic("Something went wrong...")` call which can be intercepted with a deferred `recover` a call to `os.Exit(1)` can not be intercepted. + +``` +... +handler := func() { + // gracefully shutdown something... +} +logrus.RegisterExitHandler(handler) +... +``` + +#### Thread safety + +By default Logger is protected by mutex for concurrent writes, this mutex is invoked when calling hooks and writing logs. +If you are sure such locking is not needed, you can call logger.SetNoLock() to disable the locking. + +Situation when locking is not needed includes: + +* You have no hooks registered, or hooks calling is already thread-safe. + +* Writing to logger.Out is already thread-safe, for example: + + 1) logger.Out is protected by locks. + + 2) logger.Out is a os.File handler opened with `O_APPEND` flag, and every write is smaller than 4k. (This allow multi-thread/multi-process writing) + + (Refer to http://www.notthewizard.com/2014/06/17/are-files-appends-really-atomic/) diff --git a/vendor/github.com/sirupsen/logrus/alt_exit.go b/vendor/github.com/sirupsen/logrus/alt_exit.go new file mode 100644 index 0000000..8af9063 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/alt_exit.go @@ -0,0 +1,64 @@ +package logrus + +// The following code was sourced and modified from the +// https://github.com/tebeka/atexit package governed by the following license: +// +// Copyright (c) 2012 Miki Tebeka . +// +// 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. + +import ( + "fmt" + "os" +) + +var handlers = []func(){} + +func runHandler(handler func()) { + defer func() { + if err := recover(); err != nil { + fmt.Fprintln(os.Stderr, "Error: Logrus exit handler error:", err) + } + }() + + handler() +} + +func runHandlers() { + for _, handler := range handlers { + runHandler(handler) + } +} + +// Exit runs all the Logrus atexit handlers and then terminates the program using os.Exit(code) +func Exit(code int) { + runHandlers() + os.Exit(code) +} + +// RegisterExitHandler adds a Logrus Exit handler, call logrus.Exit to invoke +// all handlers. The handlers will also be invoked when any Fatal log entry is +// made. +// +// This method is useful when a caller wishes to use logrus to log a fatal +// message but also needs to gracefully shutdown. An example usecase could be +// closing database connections, or sending a alert that the application is +// closing. +func RegisterExitHandler(handler func()) { + handlers = append(handlers, handler) +} diff --git a/vendor/github.com/sirupsen/logrus/alt_exit_test.go b/vendor/github.com/sirupsen/logrus/alt_exit_test.go new file mode 100644 index 0000000..a08b1a8 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/alt_exit_test.go @@ -0,0 +1,83 @@ +package logrus + +import ( + "io/ioutil" + "log" + "os" + "os/exec" + "path/filepath" + "testing" + "time" +) + +func TestRegister(t *testing.T) { + current := len(handlers) + RegisterExitHandler(func() {}) + if len(handlers) != current+1 { + t.Fatalf("expected %d handlers, got %d", current+1, len(handlers)) + } +} + +func TestHandler(t *testing.T) { + tempDir, err := ioutil.TempDir("", "test_handler") + if err != nil { + log.Fatalf("can't create temp dir. %q", err) + } + defer os.RemoveAll(tempDir) + + gofile := filepath.Join(tempDir, "gofile.go") + if err := ioutil.WriteFile(gofile, testprog, 0666); err != nil { + t.Fatalf("can't create go file. %q", err) + } + + outfile := filepath.Join(tempDir, "outfile.out") + arg := time.Now().UTC().String() + err = exec.Command("go", "run", gofile, outfile, arg).Run() + if err == nil { + t.Fatalf("completed normally, should have failed") + } + + data, err := ioutil.ReadFile(outfile) + if err != nil { + t.Fatalf("can't read output file %s. %q", outfile, err) + } + + if string(data) != arg { + t.Fatalf("bad data. Expected %q, got %q", data, arg) + } +} + +var testprog = []byte(` +// Test program for atexit, gets output file and data as arguments and writes +// data to output file in atexit handler. +package main + +import ( + "github.com/sirupsen/logrus" + "flag" + "fmt" + "io/ioutil" +) + +var outfile = "" +var data = "" + +func handler() { + ioutil.WriteFile(outfile, []byte(data), 0666) +} + +func badHandler() { + n := 0 + fmt.Println(1/n) +} + +func main() { + flag.Parse() + outfile = flag.Arg(0) + data = flag.Arg(1) + + logrus.RegisterExitHandler(handler) + logrus.RegisterExitHandler(badHandler) + logrus.Fatal("Bye bye") +} +`) diff --git a/vendor/github.com/sirupsen/logrus/appveyor.yml b/vendor/github.com/sirupsen/logrus/appveyor.yml new file mode 100644 index 0000000..96c2ce1 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/appveyor.yml @@ -0,0 +1,14 @@ +version: "{build}" +platform: x64 +clone_folder: c:\gopath\src\github.com\sirupsen\logrus +environment: + GOPATH: c:\gopath +branches: + only: + - master +install: + - set PATH=%GOPATH%\bin;c:\go\bin;%PATH% + - go version +build_script: + - go get -t + - go test diff --git a/vendor/github.com/sirupsen/logrus/doc.go b/vendor/github.com/sirupsen/logrus/doc.go new file mode 100644 index 0000000..da67aba --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/doc.go @@ -0,0 +1,26 @@ +/* +Package logrus is a structured logger for Go, completely API compatible with the standard library logger. + + +The simplest way to use Logrus is simply the package-level exported logger: + + package main + + import ( + log "github.com/sirupsen/logrus" + ) + + func main() { + log.WithFields(log.Fields{ + "animal": "walrus", + "number": 1, + "size": 10, + }).Info("A walrus appears") + } + +Output: + time="2015-09-07T08:48:33Z" level=info msg="A walrus appears" animal=walrus number=1 size=10 + +For a full guide visit https://github.com/sirupsen/logrus +*/ +package logrus diff --git a/vendor/github.com/sirupsen/logrus/entry.go b/vendor/github.com/sirupsen/logrus/entry.go new file mode 100644 index 0000000..5bf582e --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/entry.go @@ -0,0 +1,276 @@ +package logrus + +import ( + "bytes" + "fmt" + "os" + "sync" + "time" +) + +var bufferPool *sync.Pool + +func init() { + bufferPool = &sync.Pool{ + New: func() interface{} { + return new(bytes.Buffer) + }, + } +} + +// Defines the key when adding errors using WithError. +var ErrorKey = "error" + +// An entry is the final or intermediate Logrus logging entry. It contains all +// the fields passed with WithField{,s}. It's finally logged when Debug, Info, +// Warn, Error, Fatal or Panic is called on it. These objects can be reused and +// passed around as much as you wish to avoid field duplication. +type Entry struct { + Logger *Logger + + // Contains all the fields set by the user. + Data Fields + + // Time at which the log entry was created + Time time.Time + + // Level the log entry was logged at: Debug, Info, Warn, Error, Fatal or Panic + // This field will be set on entry firing and the value will be equal to the one in Logger struct field. + Level Level + + // Message passed to Debug, Info, Warn, Error, Fatal or Panic + Message string + + // When formatter is called in entry.log(), an Buffer may be set to entry + Buffer *bytes.Buffer +} + +func NewEntry(logger *Logger) *Entry { + return &Entry{ + Logger: logger, + // Default is three fields, give a little extra room + Data: make(Fields, 5), + } +} + +// Returns the string representation from the reader and ultimately the +// formatter. +func (entry *Entry) String() (string, error) { + serialized, err := entry.Logger.Formatter.Format(entry) + if err != nil { + return "", err + } + str := string(serialized) + return str, nil +} + +// Add an error as single field (using the key defined in ErrorKey) to the Entry. +func (entry *Entry) WithError(err error) *Entry { + return entry.WithField(ErrorKey, err) +} + +// Add a single field to the Entry. +func (entry *Entry) WithField(key string, value interface{}) *Entry { + return entry.WithFields(Fields{key: value}) +} + +// Add a map of fields to the Entry. +func (entry *Entry) WithFields(fields Fields) *Entry { + data := make(Fields, len(entry.Data)+len(fields)) + for k, v := range entry.Data { + data[k] = v + } + for k, v := range fields { + data[k] = v + } + return &Entry{Logger: entry.Logger, Data: data} +} + +// This function is not declared with a pointer value because otherwise +// race conditions will occur when using multiple goroutines +func (entry Entry) log(level Level, msg string) { + var buffer *bytes.Buffer + entry.Time = time.Now() + entry.Level = level + entry.Message = msg + + if err := entry.Logger.Hooks.Fire(level, &entry); err != nil { + entry.Logger.mu.Lock() + fmt.Fprintf(os.Stderr, "Failed to fire hook: %v\n", err) + entry.Logger.mu.Unlock() + } + buffer = bufferPool.Get().(*bytes.Buffer) + buffer.Reset() + defer bufferPool.Put(buffer) + entry.Buffer = buffer + serialized, err := entry.Logger.Formatter.Format(&entry) + entry.Buffer = nil + if err != nil { + entry.Logger.mu.Lock() + fmt.Fprintf(os.Stderr, "Failed to obtain reader, %v\n", err) + entry.Logger.mu.Unlock() + } else { + entry.Logger.mu.Lock() + _, err = entry.Logger.Out.Write(serialized) + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to write to log, %v\n", err) + } + entry.Logger.mu.Unlock() + } + + // To avoid Entry#log() returning a value that only would make sense for + // panic() to use in Entry#Panic(), we avoid the allocation by checking + // directly here. + if level <= PanicLevel { + panic(&entry) + } +} + +func (entry *Entry) Debug(args ...interface{}) { + if entry.Logger.level() >= DebugLevel { + entry.log(DebugLevel, fmt.Sprint(args...)) + } +} + +func (entry *Entry) Print(args ...interface{}) { + entry.Info(args...) +} + +func (entry *Entry) Info(args ...interface{}) { + if entry.Logger.level() >= InfoLevel { + entry.log(InfoLevel, fmt.Sprint(args...)) + } +} + +func (entry *Entry) Warn(args ...interface{}) { + if entry.Logger.level() >= WarnLevel { + entry.log(WarnLevel, fmt.Sprint(args...)) + } +} + +func (entry *Entry) Warning(args ...interface{}) { + entry.Warn(args...) +} + +func (entry *Entry) Error(args ...interface{}) { + if entry.Logger.level() >= ErrorLevel { + entry.log(ErrorLevel, fmt.Sprint(args...)) + } +} + +func (entry *Entry) Fatal(args ...interface{}) { + if entry.Logger.level() >= FatalLevel { + entry.log(FatalLevel, fmt.Sprint(args...)) + } + Exit(1) +} + +func (entry *Entry) Panic(args ...interface{}) { + if entry.Logger.level() >= PanicLevel { + entry.log(PanicLevel, fmt.Sprint(args...)) + } + panic(fmt.Sprint(args...)) +} + +// Entry Printf family functions + +func (entry *Entry) Debugf(format string, args ...interface{}) { + if entry.Logger.level() >= DebugLevel { + entry.Debug(fmt.Sprintf(format, args...)) + } +} + +func (entry *Entry) Infof(format string, args ...interface{}) { + if entry.Logger.level() >= InfoLevel { + entry.Info(fmt.Sprintf(format, args...)) + } +} + +func (entry *Entry) Printf(format string, args ...interface{}) { + entry.Infof(format, args...) +} + +func (entry *Entry) Warnf(format string, args ...interface{}) { + if entry.Logger.level() >= WarnLevel { + entry.Warn(fmt.Sprintf(format, args...)) + } +} + +func (entry *Entry) Warningf(format string, args ...interface{}) { + entry.Warnf(format, args...) +} + +func (entry *Entry) Errorf(format string, args ...interface{}) { + if entry.Logger.level() >= ErrorLevel { + entry.Error(fmt.Sprintf(format, args...)) + } +} + +func (entry *Entry) Fatalf(format string, args ...interface{}) { + if entry.Logger.level() >= FatalLevel { + entry.Fatal(fmt.Sprintf(format, args...)) + } + Exit(1) +} + +func (entry *Entry) Panicf(format string, args ...interface{}) { + if entry.Logger.level() >= PanicLevel { + entry.Panic(fmt.Sprintf(format, args...)) + } +} + +// Entry Println family functions + +func (entry *Entry) Debugln(args ...interface{}) { + if entry.Logger.level() >= DebugLevel { + entry.Debug(entry.sprintlnn(args...)) + } +} + +func (entry *Entry) Infoln(args ...interface{}) { + if entry.Logger.level() >= InfoLevel { + entry.Info(entry.sprintlnn(args...)) + } +} + +func (entry *Entry) Println(args ...interface{}) { + entry.Infoln(args...) +} + +func (entry *Entry) Warnln(args ...interface{}) { + if entry.Logger.level() >= WarnLevel { + entry.Warn(entry.sprintlnn(args...)) + } +} + +func (entry *Entry) Warningln(args ...interface{}) { + entry.Warnln(args...) +} + +func (entry *Entry) Errorln(args ...interface{}) { + if entry.Logger.level() >= ErrorLevel { + entry.Error(entry.sprintlnn(args...)) + } +} + +func (entry *Entry) Fatalln(args ...interface{}) { + if entry.Logger.level() >= FatalLevel { + entry.Fatal(entry.sprintlnn(args...)) + } + Exit(1) +} + +func (entry *Entry) Panicln(args ...interface{}) { + if entry.Logger.level() >= PanicLevel { + entry.Panic(entry.sprintlnn(args...)) + } +} + +// Sprintlnn => Sprint no newline. This is to get the behavior of how +// fmt.Sprintln where spaces are always added between operands, regardless of +// their type. Instead of vendoring the Sprintln implementation to spare a +// string allocation, we do the simplest thing. +func (entry *Entry) sprintlnn(args ...interface{}) string { + msg := fmt.Sprintln(args...) + return msg[:len(msg)-1] +} diff --git a/vendor/github.com/sirupsen/logrus/entry_test.go b/vendor/github.com/sirupsen/logrus/entry_test.go new file mode 100644 index 0000000..99c3b41 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/entry_test.go @@ -0,0 +1,77 @@ +package logrus + +import ( + "bytes" + "fmt" + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestEntryWithError(t *testing.T) { + + assert := assert.New(t) + + defer func() { + ErrorKey = "error" + }() + + err := fmt.Errorf("kaboom at layer %d", 4711) + + assert.Equal(err, WithError(err).Data["error"]) + + logger := New() + logger.Out = &bytes.Buffer{} + entry := NewEntry(logger) + + assert.Equal(err, entry.WithError(err).Data["error"]) + + ErrorKey = "err" + + assert.Equal(err, entry.WithError(err).Data["err"]) + +} + +func TestEntryPanicln(t *testing.T) { + errBoom := fmt.Errorf("boom time") + + defer func() { + p := recover() + assert.NotNil(t, p) + + switch pVal := p.(type) { + case *Entry: + assert.Equal(t, "kaboom", pVal.Message) + assert.Equal(t, errBoom, pVal.Data["err"]) + default: + t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal) + } + }() + + logger := New() + logger.Out = &bytes.Buffer{} + entry := NewEntry(logger) + entry.WithField("err", errBoom).Panicln("kaboom") +} + +func TestEntryPanicf(t *testing.T) { + errBoom := fmt.Errorf("boom again") + + defer func() { + p := recover() + assert.NotNil(t, p) + + switch pVal := p.(type) { + case *Entry: + assert.Equal(t, "kaboom true", pVal.Message) + assert.Equal(t, errBoom, pVal.Data["err"]) + default: + t.Fatalf("want type *Entry, got %T: %#v", pVal, pVal) + } + }() + + logger := New() + logger.Out = &bytes.Buffer{} + entry := NewEntry(logger) + entry.WithField("err", errBoom).Panicf("kaboom %v", true) +} diff --git a/vendor/github.com/sirupsen/logrus/example_basic_test.go b/vendor/github.com/sirupsen/logrus/example_basic_test.go new file mode 100644 index 0000000..a2acf55 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/example_basic_test.go @@ -0,0 +1,69 @@ +package logrus_test + +import ( + "github.com/sirupsen/logrus" + "os" +) + +func Example_basic() { + var log = logrus.New() + log.Formatter = new(logrus.JSONFormatter) + log.Formatter = new(logrus.TextFormatter) //default + log.Formatter.(*logrus.TextFormatter).DisableTimestamp = true // remove timestamp from test output + log.Level = logrus.DebugLevel + log.Out = os.Stdout + + // file, err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666) + // if err == nil { + // log.Out = file + // } else { + // log.Info("Failed to log to file, using default stderr") + // } + + defer func() { + err := recover() + if err != nil { + entry := err.(*logrus.Entry) + log.WithFields(logrus.Fields{ + "omg": true, + "err_animal": entry.Data["animal"], + "err_size": entry.Data["size"], + "err_level": entry.Level, + "err_message": entry.Message, + "number": 100, + }).Error("The ice breaks!") // or use Fatal() to force the process to exit with a nonzero code + } + }() + + log.WithFields(logrus.Fields{ + "animal": "walrus", + "number": 8, + }).Debug("Started observing beach") + + log.WithFields(logrus.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") + + log.WithFields(logrus.Fields{ + "omg": true, + "number": 122, + }).Warn("The group's number increased tremendously!") + + log.WithFields(logrus.Fields{ + "temperature": -4, + }).Debug("Temperature changes") + + log.WithFields(logrus.Fields{ + "animal": "orca", + "size": 9009, + }).Panic("It's over 9000!") + + // Output: + // level=debug msg="Started observing beach" animal=walrus number=8 + // level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10 + // level=warning msg="The group's number increased tremendously!" number=122 omg=true + // level=debug msg="Temperature changes" temperature=-4 + // level=panic msg="It's over 9000!" animal=orca size=9009 + // level=error msg="The ice breaks!" err_animal=orca err_level=panic err_message="It's over 9000!" err_size=9009 number=100 omg=true +} diff --git a/vendor/github.com/sirupsen/logrus/example_hook_test.go b/vendor/github.com/sirupsen/logrus/example_hook_test.go new file mode 100644 index 0000000..d4ddffc --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/example_hook_test.go @@ -0,0 +1,35 @@ +package logrus_test + +import ( + "github.com/sirupsen/logrus" + "gopkg.in/gemnasium/logrus-airbrake-hook.v2" + "os" +) + +func Example_hook() { + var log = logrus.New() + log.Formatter = new(logrus.TextFormatter) // default + log.Formatter.(*logrus.TextFormatter).DisableTimestamp = true // remove timestamp from test output + log.Hooks.Add(airbrake.NewHook(123, "xyz", "development")) + log.Out = os.Stdout + + log.WithFields(logrus.Fields{ + "animal": "walrus", + "size": 10, + }).Info("A group of walrus emerges from the ocean") + + log.WithFields(logrus.Fields{ + "omg": true, + "number": 122, + }).Warn("The group's number increased tremendously!") + + log.WithFields(logrus.Fields{ + "omg": true, + "number": 100, + }).Error("The ice breaks!") + + // Output: + // level=info msg="A group of walrus emerges from the ocean" animal=walrus size=10 + // level=warning msg="The group's number increased tremendously!" number=122 omg=true + // level=error msg="The ice breaks!" number=100 omg=true +} diff --git a/vendor/github.com/sirupsen/logrus/exported.go b/vendor/github.com/sirupsen/logrus/exported.go new file mode 100644 index 0000000..013183e --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/exported.go @@ -0,0 +1,193 @@ +package logrus + +import ( + "io" +) + +var ( + // std is the name of the standard logger in stdlib `log` + std = New() +) + +func StandardLogger() *Logger { + return std +} + +// SetOutput sets the standard logger output. +func SetOutput(out io.Writer) { + std.mu.Lock() + defer std.mu.Unlock() + std.Out = out +} + +// SetFormatter sets the standard logger formatter. +func SetFormatter(formatter Formatter) { + std.mu.Lock() + defer std.mu.Unlock() + std.Formatter = formatter +} + +// SetLevel sets the standard logger level. +func SetLevel(level Level) { + std.mu.Lock() + defer std.mu.Unlock() + std.SetLevel(level) +} + +// GetLevel returns the standard logger level. +func GetLevel() Level { + std.mu.Lock() + defer std.mu.Unlock() + return std.level() +} + +// AddHook adds a hook to the standard logger hooks. +func AddHook(hook Hook) { + std.mu.Lock() + defer std.mu.Unlock() + std.Hooks.Add(hook) +} + +// WithError creates an entry from the standard logger and adds an error to it, using the value defined in ErrorKey as key. +func WithError(err error) *Entry { + return std.WithField(ErrorKey, err) +} + +// WithField creates an entry from the standard logger and adds a field to +// it. If you want multiple fields, use `WithFields`. +// +// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal +// or Panic on the Entry it returns. +func WithField(key string, value interface{}) *Entry { + return std.WithField(key, value) +} + +// WithFields creates an entry from the standard logger and adds multiple +// fields to it. This is simply a helper for `WithField`, invoking it +// once for each field. +// +// Note that it doesn't log until you call Debug, Print, Info, Warn, Fatal +// or Panic on the Entry it returns. +func WithFields(fields Fields) *Entry { + return std.WithFields(fields) +} + +// Debug logs a message at level Debug on the standard logger. +func Debug(args ...interface{}) { + std.Debug(args...) +} + +// Print logs a message at level Info on the standard logger. +func Print(args ...interface{}) { + std.Print(args...) +} + +// Info logs a message at level Info on the standard logger. +func Info(args ...interface{}) { + std.Info(args...) +} + +// Warn logs a message at level Warn on the standard logger. +func Warn(args ...interface{}) { + std.Warn(args...) +} + +// Warning logs a message at level Warn on the standard logger. +func Warning(args ...interface{}) { + std.Warning(args...) +} + +// Error logs a message at level Error on the standard logger. +func Error(args ...interface{}) { + std.Error(args...) +} + +// Panic logs a message at level Panic on the standard logger. +func Panic(args ...interface{}) { + std.Panic(args...) +} + +// Fatal logs a message at level Fatal on the standard logger. +func Fatal(args ...interface{}) { + std.Fatal(args...) +} + +// Debugf logs a message at level Debug on the standard logger. +func Debugf(format string, args ...interface{}) { + std.Debugf(format, args...) +} + +// Printf logs a message at level Info on the standard logger. +func Printf(format string, args ...interface{}) { + std.Printf(format, args...) +} + +// Infof logs a message at level Info on the standard logger. +func Infof(format string, args ...interface{}) { + std.Infof(format, args...) +} + +// Warnf logs a message at level Warn on the standard logger. +func Warnf(format string, args ...interface{}) { + std.Warnf(format, args...) +} + +// Warningf logs a message at level Warn on the standard logger. +func Warningf(format string, args ...interface{}) { + std.Warningf(format, args...) +} + +// Errorf logs a message at level Error on the standard logger. +func Errorf(format string, args ...interface{}) { + std.Errorf(format, args...) +} + +// Panicf logs a message at level Panic on the standard logger. +func Panicf(format string, args ...interface{}) { + std.Panicf(format, args...) +} + +// Fatalf logs a message at level Fatal on the standard logger. +func Fatalf(format string, args ...interface{}) { + std.Fatalf(format, args...) +} + +// Debugln logs a message at level Debug on the standard logger. +func Debugln(args ...interface{}) { + std.Debugln(args...) +} + +// Println logs a message at level Info on the standard logger. +func Println(args ...interface{}) { + std.Println(args...) +} + +// Infoln logs a message at level Info on the standard logger. +func Infoln(args ...interface{}) { + std.Infoln(args...) +} + +// Warnln logs a message at level Warn on the standard logger. +func Warnln(args ...interface{}) { + std.Warnln(args...) +} + +// Warningln logs a message at level Warn on the standard logger. +func Warningln(args ...interface{}) { + std.Warningln(args...) +} + +// Errorln logs a message at level Error on the standard logger. +func Errorln(args ...interface{}) { + std.Errorln(args...) +} + +// Panicln logs a message at level Panic on the standard logger. +func Panicln(args ...interface{}) { + std.Panicln(args...) +} + +// Fatalln logs a message at level Fatal on the standard logger. +func Fatalln(args ...interface{}) { + std.Fatalln(args...) +} diff --git a/vendor/github.com/sirupsen/logrus/formatter.go b/vendor/github.com/sirupsen/logrus/formatter.go new file mode 100644 index 0000000..b183ff5 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/formatter.go @@ -0,0 +1,45 @@ +package logrus + +import "time" + +const defaultTimestampFormat = time.RFC3339 + +// The Formatter interface is used to implement a custom Formatter. It takes an +// `Entry`. It exposes all the fields, including the default ones: +// +// * `entry.Data["msg"]`. The message passed from Info, Warn, Error .. +// * `entry.Data["time"]`. The timestamp. +// * `entry.Data["level"]. The level the entry was logged at. +// +// Any additional fields added with `WithField` or `WithFields` are also in +// `entry.Data`. Format is expected to return an array of bytes which are then +// logged to `logger.Out`. +type Formatter interface { + Format(*Entry) ([]byte, error) +} + +// This is to not silently overwrite `time`, `msg` and `level` fields when +// dumping it. If this code wasn't there doing: +// +// logrus.WithField("level", 1).Info("hello") +// +// Would just silently drop the user provided level. Instead with this code +// it'll logged as: +// +// {"level": "info", "fields.level": 1, "msg": "hello", "time": "..."} +// +// It's not exported because it's still using Data in an opinionated way. It's to +// avoid code duplication between the two default formatters. +func prefixFieldClashes(data Fields) { + if t, ok := data["time"]; ok { + data["fields.time"] = t + } + + if m, ok := data["msg"]; ok { + data["fields.msg"] = m + } + + if l, ok := data["level"]; ok { + data["fields.level"] = l + } +} diff --git a/vendor/github.com/sirupsen/logrus/formatter_bench_test.go b/vendor/github.com/sirupsen/logrus/formatter_bench_test.go new file mode 100644 index 0000000..d948158 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/formatter_bench_test.go @@ -0,0 +1,101 @@ +package logrus + +import ( + "fmt" + "testing" + "time" +) + +// smallFields is a small size data set for benchmarking +var smallFields = Fields{ + "foo": "bar", + "baz": "qux", + "one": "two", + "three": "four", +} + +// largeFields is a large size data set for benchmarking +var largeFields = Fields{ + "foo": "bar", + "baz": "qux", + "one": "two", + "three": "four", + "five": "six", + "seven": "eight", + "nine": "ten", + "eleven": "twelve", + "thirteen": "fourteen", + "fifteen": "sixteen", + "seventeen": "eighteen", + "nineteen": "twenty", + "a": "b", + "c": "d", + "e": "f", + "g": "h", + "i": "j", + "k": "l", + "m": "n", + "o": "p", + "q": "r", + "s": "t", + "u": "v", + "w": "x", + "y": "z", + "this": "will", + "make": "thirty", + "entries": "yeah", +} + +var errorFields = Fields{ + "foo": fmt.Errorf("bar"), + "baz": fmt.Errorf("qux"), +} + +func BenchmarkErrorTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{DisableColors: true}, errorFields) +} + +func BenchmarkSmallTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{DisableColors: true}, smallFields) +} + +func BenchmarkLargeTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{DisableColors: true}, largeFields) +} + +func BenchmarkSmallColoredTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{ForceColors: true}, smallFields) +} + +func BenchmarkLargeColoredTextFormatter(b *testing.B) { + doBenchmark(b, &TextFormatter{ForceColors: true}, largeFields) +} + +func BenchmarkSmallJSONFormatter(b *testing.B) { + doBenchmark(b, &JSONFormatter{}, smallFields) +} + +func BenchmarkLargeJSONFormatter(b *testing.B) { + doBenchmark(b, &JSONFormatter{}, largeFields) +} + +func doBenchmark(b *testing.B, formatter Formatter, fields Fields) { + logger := New() + + entry := &Entry{ + Time: time.Time{}, + Level: InfoLevel, + Message: "message", + Data: fields, + Logger: logger, + } + var d []byte + var err error + for i := 0; i < b.N; i++ { + d, err = formatter.Format(entry) + if err != nil { + b.Fatal(err) + } + b.SetBytes(int64(len(d))) + } +} diff --git a/vendor/github.com/sirupsen/logrus/hook_test.go b/vendor/github.com/sirupsen/logrus/hook_test.go new file mode 100644 index 0000000..13f34cb --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hook_test.go @@ -0,0 +1,122 @@ +package logrus + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +type TestHook struct { + Fired bool +} + +func (hook *TestHook) Fire(entry *Entry) error { + hook.Fired = true + return nil +} + +func (hook *TestHook) Levels() []Level { + return []Level{ + DebugLevel, + InfoLevel, + WarnLevel, + ErrorLevel, + FatalLevel, + PanicLevel, + } +} + +func TestHookFires(t *testing.T) { + hook := new(TestHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook) + assert.Equal(t, hook.Fired, false) + + log.Print("test") + }, func(fields Fields) { + assert.Equal(t, hook.Fired, true) + }) +} + +type ModifyHook struct { +} + +func (hook *ModifyHook) Fire(entry *Entry) error { + entry.Data["wow"] = "whale" + return nil +} + +func (hook *ModifyHook) Levels() []Level { + return []Level{ + DebugLevel, + InfoLevel, + WarnLevel, + ErrorLevel, + FatalLevel, + PanicLevel, + } +} + +func TestHookCanModifyEntry(t *testing.T) { + hook := new(ModifyHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook) + log.WithField("wow", "elephant").Print("test") + }, func(fields Fields) { + assert.Equal(t, fields["wow"], "whale") + }) +} + +func TestCanFireMultipleHooks(t *testing.T) { + hook1 := new(ModifyHook) + hook2 := new(TestHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook1) + log.Hooks.Add(hook2) + + log.WithField("wow", "elephant").Print("test") + }, func(fields Fields) { + assert.Equal(t, fields["wow"], "whale") + assert.Equal(t, hook2.Fired, true) + }) +} + +type ErrorHook struct { + Fired bool +} + +func (hook *ErrorHook) Fire(entry *Entry) error { + hook.Fired = true + return nil +} + +func (hook *ErrorHook) Levels() []Level { + return []Level{ + ErrorLevel, + } +} + +func TestErrorHookShouldntFireOnInfo(t *testing.T) { + hook := new(ErrorHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook) + log.Info("test") + }, func(fields Fields) { + assert.Equal(t, hook.Fired, false) + }) +} + +func TestErrorHookShouldFireOnError(t *testing.T) { + hook := new(ErrorHook) + + LogAndAssertJSON(t, func(log *Logger) { + log.Hooks.Add(hook) + log.Error("test") + }, func(fields Fields) { + assert.Equal(t, hook.Fired, true) + }) +} diff --git a/vendor/github.com/sirupsen/logrus/hooks.go b/vendor/github.com/sirupsen/logrus/hooks.go new file mode 100644 index 0000000..3f151cd --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks.go @@ -0,0 +1,34 @@ +package logrus + +// A hook to be fired when logging on the logging levels returned from +// `Levels()` on your implementation of the interface. Note that this is not +// fired in a goroutine or a channel with workers, you should handle such +// functionality yourself if your call is non-blocking and you don't wish for +// the logging calls for levels returned from `Levels()` to block. +type Hook interface { + Levels() []Level + Fire(*Entry) error +} + +// Internal type for storing the hooks on a logger instance. +type LevelHooks map[Level][]Hook + +// Add a hook to an instance of logger. This is called with +// `log.Hooks.Add(new(MyHook))` where `MyHook` implements the `Hook` interface. +func (hooks LevelHooks) Add(hook Hook) { + for _, level := range hook.Levels() { + hooks[level] = append(hooks[level], hook) + } +} + +// Fire all the hooks for the passed level. Used by `entry.log` to fire +// appropriate hooks for a log entry. +func (hooks LevelHooks) Fire(level Level, entry *Entry) error { + for _, hook := range hooks[level] { + if err := hook.Fire(entry); err != nil { + return err + } + } + + return nil +} diff --git a/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md b/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md new file mode 100644 index 0000000..1bbc0f7 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/syslog/README.md @@ -0,0 +1,39 @@ +# Syslog Hooks for Logrus :walrus: + +## Usage + +```go +import ( + "log/syslog" + "github.com/sirupsen/logrus" + lSyslog "github.com/sirupsen/logrus/hooks/syslog" +) + +func main() { + log := logrus.New() + hook, err := lSyslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") + + if err == nil { + log.Hooks.Add(hook) + } +} +``` + +If you want to connect to local syslog (Ex. "/dev/log" or "/var/run/syslog" or "/var/run/log"). Just assign empty string to the first two parameters of `NewSyslogHook`. It should look like the following. + +```go +import ( + "log/syslog" + "github.com/sirupsen/logrus" + lSyslog "github.com/sirupsen/logrus/hooks/syslog" +) + +func main() { + log := logrus.New() + hook, err := lSyslog.NewSyslogHook("", "", syslog.LOG_INFO, "") + + if err == nil { + log.Hooks.Add(hook) + } +} +``` diff --git a/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go new file mode 100644 index 0000000..329ce0d --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog.go @@ -0,0 +1,55 @@ +// +build !windows,!nacl,!plan9 + +package syslog + +import ( + "fmt" + "log/syslog" + "os" + + "github.com/sirupsen/logrus" +) + +// SyslogHook to send logs via syslog. +type SyslogHook struct { + Writer *syslog.Writer + SyslogNetwork string + SyslogRaddr string +} + +// Creates a hook to be added to an instance of logger. This is called with +// `hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_DEBUG, "")` +// `if err == nil { log.Hooks.Add(hook) }` +func NewSyslogHook(network, raddr string, priority syslog.Priority, tag string) (*SyslogHook, error) { + w, err := syslog.Dial(network, raddr, priority, tag) + return &SyslogHook{w, network, raddr}, err +} + +func (hook *SyslogHook) Fire(entry *logrus.Entry) error { + line, err := entry.String() + if err != nil { + fmt.Fprintf(os.Stderr, "Unable to read entry, %v", err) + return err + } + + switch entry.Level { + case logrus.PanicLevel: + return hook.Writer.Crit(line) + case logrus.FatalLevel: + return hook.Writer.Crit(line) + case logrus.ErrorLevel: + return hook.Writer.Err(line) + case logrus.WarnLevel: + return hook.Writer.Warning(line) + case logrus.InfoLevel: + return hook.Writer.Info(line) + case logrus.DebugLevel: + return hook.Writer.Debug(line) + default: + return nil + } +} + +func (hook *SyslogHook) Levels() []logrus.Level { + return logrus.AllLevels +} diff --git a/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go new file mode 100644 index 0000000..5ec3a44 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/syslog/syslog_test.go @@ -0,0 +1,27 @@ +package syslog + +import ( + "log/syslog" + "testing" + + "github.com/sirupsen/logrus" +) + +func TestLocalhostAddAndPrint(t *testing.T) { + log := logrus.New() + hook, err := NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "") + + if err != nil { + t.Errorf("Unable to connect to local syslog.") + } + + log.Hooks.Add(hook) + + for _, level := range hook.Levels() { + if len(log.Hooks[level]) != 1 { + t.Errorf("SyslogHook was not added. The length of log.Hooks[%v]: %v", level, len(log.Hooks[level])) + } + } + + log.Info("Congratulations!") +} diff --git a/vendor/github.com/sirupsen/logrus/hooks/test/test.go b/vendor/github.com/sirupsen/logrus/hooks/test/test.go new file mode 100644 index 0000000..62c4845 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/test/test.go @@ -0,0 +1,95 @@ +// The Test package is used for testing logrus. It is here for backwards +// compatibility from when logrus' organization was upper-case. Please use +// lower-case logrus and the `null` package instead of this one. +package test + +import ( + "io/ioutil" + "sync" + + "github.com/sirupsen/logrus" +) + +// Hook is a hook designed for dealing with logs in test scenarios. +type Hook struct { + // Entries is an array of all entries that have been received by this hook. + // For safe access, use the AllEntries() method, rather than reading this + // value directly. + Entries []*logrus.Entry + mu sync.RWMutex +} + +// NewGlobal installs a test hook for the global logger. +func NewGlobal() *Hook { + + hook := new(Hook) + logrus.AddHook(hook) + + return hook + +} + +// NewLocal installs a test hook for a given local logger. +func NewLocal(logger *logrus.Logger) *Hook { + + hook := new(Hook) + logger.Hooks.Add(hook) + + return hook + +} + +// NewNullLogger creates a discarding logger and installs the test hook. +func NewNullLogger() (*logrus.Logger, *Hook) { + + logger := logrus.New() + logger.Out = ioutil.Discard + + return logger, NewLocal(logger) + +} + +func (t *Hook) Fire(e *logrus.Entry) error { + t.mu.Lock() + defer t.mu.Unlock() + t.Entries = append(t.Entries, e) + return nil +} + +func (t *Hook) Levels() []logrus.Level { + return logrus.AllLevels +} + +// LastEntry returns the last entry that was logged or nil. +func (t *Hook) LastEntry() *logrus.Entry { + t.mu.RLock() + defer t.mu.RUnlock() + i := len(t.Entries) - 1 + if i < 0 { + return nil + } + // Make a copy, for safety + e := *t.Entries[i] + return &e +} + +// AllEntries returns all entries that were logged. +func (t *Hook) AllEntries() []*logrus.Entry { + t.mu.RLock() + defer t.mu.RUnlock() + // Make a copy so the returned value won't race with future log requests + entries := make([]*logrus.Entry, len(t.Entries)) + for i, entry := range t.Entries { + // Make a copy, for safety + e := *entry + entries[i] = &e + } + return entries +} + +// Reset removes all Entries from this test hook. +func (t *Hook) Reset() { + t.mu.Lock() + defer t.mu.Unlock() + t.Entries = make([]*logrus.Entry, 0) +} diff --git a/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go b/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go new file mode 100644 index 0000000..3f55cfe --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/hooks/test/test_test.go @@ -0,0 +1,39 @@ +package test + +import ( + "testing" + + "github.com/sirupsen/logrus" + "github.com/stretchr/testify/assert" +) + +func TestAllHooks(t *testing.T) { + + assert := assert.New(t) + + logger, hook := NewNullLogger() + assert.Nil(hook.LastEntry()) + assert.Equal(0, len(hook.Entries)) + + logger.Error("Hello error") + assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level) + assert.Equal("Hello error", hook.LastEntry().Message) + assert.Equal(1, len(hook.Entries)) + + logger.Warn("Hello warning") + assert.Equal(logrus.WarnLevel, hook.LastEntry().Level) + assert.Equal("Hello warning", hook.LastEntry().Message) + assert.Equal(2, len(hook.Entries)) + + hook.Reset() + assert.Nil(hook.LastEntry()) + assert.Equal(0, len(hook.Entries)) + + hook = NewGlobal() + + logrus.Error("Hello error") + assert.Equal(logrus.ErrorLevel, hook.LastEntry().Level) + assert.Equal("Hello error", hook.LastEntry().Message) + assert.Equal(1, len(hook.Entries)) + +} diff --git a/vendor/github.com/sirupsen/logrus/json_formatter.go b/vendor/github.com/sirupsen/logrus/json_formatter.go new file mode 100644 index 0000000..fb01c1b --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/json_formatter.go @@ -0,0 +1,79 @@ +package logrus + +import ( + "encoding/json" + "fmt" +) + +type fieldKey string + +// FieldMap allows customization of the key names for default fields. +type FieldMap map[fieldKey]string + +// Default key names for the default fields +const ( + FieldKeyMsg = "msg" + FieldKeyLevel = "level" + FieldKeyTime = "time" +) + +func (f FieldMap) resolve(key fieldKey) string { + if k, ok := f[key]; ok { + return k + } + + return string(key) +} + +// JSONFormatter formats logs into parsable json +type JSONFormatter struct { + // TimestampFormat sets the format used for marshaling timestamps. + TimestampFormat string + + // DisableTimestamp allows disabling automatic timestamps in output + DisableTimestamp bool + + // FieldMap allows users to customize the names of keys for default fields. + // As an example: + // formatter := &JSONFormatter{ + // FieldMap: FieldMap{ + // FieldKeyTime: "@timestamp", + // FieldKeyLevel: "@level", + // FieldKeyMsg: "@message", + // }, + // } + FieldMap FieldMap +} + +// Format renders a single log entry +func (f *JSONFormatter) Format(entry *Entry) ([]byte, error) { + data := make(Fields, len(entry.Data)+3) + for k, v := range entry.Data { + switch v := v.(type) { + case error: + // Otherwise errors are ignored by `encoding/json` + // https://github.com/sirupsen/logrus/issues/137 + data[k] = v.Error() + default: + data[k] = v + } + } + prefixFieldClashes(data) + + timestampFormat := f.TimestampFormat + if timestampFormat == "" { + timestampFormat = defaultTimestampFormat + } + + if !f.DisableTimestamp { + data[f.FieldMap.resolve(FieldKeyTime)] = entry.Time.Format(timestampFormat) + } + data[f.FieldMap.resolve(FieldKeyMsg)] = entry.Message + data[f.FieldMap.resolve(FieldKeyLevel)] = entry.Level.String() + + serialized, err := json.Marshal(data) + if err != nil { + return nil, fmt.Errorf("Failed to marshal fields to JSON, %v", err) + } + return append(serialized, '\n'), nil +} diff --git a/vendor/github.com/sirupsen/logrus/json_formatter_test.go b/vendor/github.com/sirupsen/logrus/json_formatter_test.go new file mode 100644 index 0000000..51093a7 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/json_formatter_test.go @@ -0,0 +1,199 @@ +package logrus + +import ( + "encoding/json" + "errors" + "strings" + "testing" +) + +func TestErrorNotLost(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("error", errors.New("wild walrus"))) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["error"] != "wild walrus" { + t.Fatal("Error field not set") + } +} + +func TestErrorNotLostOnFieldNotNamedError(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("omg", errors.New("wild walrus"))) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["omg"] != "wild walrus" { + t.Fatal("Error field not set") + } +} + +func TestFieldClashWithTime(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("time", "right now!")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["fields.time"] != "right now!" { + t.Fatal("fields.time not set to original time field") + } + + if entry["time"] != "0001-01-01T00:00:00Z" { + t.Fatal("time field not set to current time, was: ", entry["time"]) + } +} + +func TestFieldClashWithMsg(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("msg", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["fields.msg"] != "something" { + t.Fatal("fields.msg not set to original msg field") + } +} + +func TestFieldClashWithLevel(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + entry := make(map[string]interface{}) + err = json.Unmarshal(b, &entry) + if err != nil { + t.Fatal("Unable to unmarshal formatted entry: ", err) + } + + if entry["fields.level"] != "something" { + t.Fatal("fields.level not set to original level field") + } +} + +func TestJSONEntryEndsWithNewline(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + + if b[len(b)-1] != '\n' { + t.Fatal("Expected JSON log entry to end with a newline") + } +} + +func TestJSONMessageKey(t *testing.T) { + formatter := &JSONFormatter{ + FieldMap: FieldMap{ + FieldKeyMsg: "message", + }, + } + + b, err := formatter.Format(&Entry{Message: "oh hai"}) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if !(strings.Contains(s, "message") && strings.Contains(s, "oh hai")) { + t.Fatal("Expected JSON to format message key") + } +} + +func TestJSONLevelKey(t *testing.T) { + formatter := &JSONFormatter{ + FieldMap: FieldMap{ + FieldKeyLevel: "somelevel", + }, + } + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if !strings.Contains(s, "somelevel") { + t.Fatal("Expected JSON to format level key") + } +} + +func TestJSONTimeKey(t *testing.T) { + formatter := &JSONFormatter{ + FieldMap: FieldMap{ + FieldKeyTime: "timeywimey", + }, + } + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if !strings.Contains(s, "timeywimey") { + t.Fatal("Expected JSON to format time key") + } +} + +func TestJSONDisableTimestamp(t *testing.T) { + formatter := &JSONFormatter{ + DisableTimestamp: true, + } + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if strings.Contains(s, FieldKeyTime) { + t.Error("Did not prevent timestamp", s) + } +} + +func TestJSONEnableTimestamp(t *testing.T) { + formatter := &JSONFormatter{} + + b, err := formatter.Format(WithField("level", "something")) + if err != nil { + t.Fatal("Unable to format entry: ", err) + } + s := string(b) + if !strings.Contains(s, FieldKeyTime) { + t.Error("Timestamp not present", s) + } +} diff --git a/vendor/github.com/sirupsen/logrus/logger.go b/vendor/github.com/sirupsen/logrus/logger.go new file mode 100644 index 0000000..2acab05 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/logger.go @@ -0,0 +1,317 @@ +package logrus + +import ( + "io" + "os" + "sync" + "sync/atomic" +) + +type Logger struct { + // The logs are `io.Copy`'d to this in a mutex. It's common to set this to a + // file, or leave it default which is `os.Stderr`. You can also set this to + // something more adventorous, such as logging to Kafka. + Out io.Writer + // Hooks for the logger instance. These allow firing events based on logging + // levels and log entries. For example, to send errors to an error tracking + // service, log to StatsD or dump the core on fatal errors. + Hooks LevelHooks + // All log entries pass through the formatter before logged to Out. The + // included formatters are `TextFormatter` and `JSONFormatter` for which + // TextFormatter is the default. In development (when a TTY is attached) it + // logs with colors, but to a file it wouldn't. You can easily implement your + // own that implements the `Formatter` interface, see the `README` or included + // formatters for examples. + Formatter Formatter + // The logging level the logger should log at. This is typically (and defaults + // to) `logrus.Info`, which allows Info(), Warn(), Error() and Fatal() to be + // logged. + Level Level + // Used to sync writing to the log. Locking is enabled by Default + mu MutexWrap + // Reusable empty entry + entryPool sync.Pool +} + +type MutexWrap struct { + lock sync.Mutex + disabled bool +} + +func (mw *MutexWrap) Lock() { + if !mw.disabled { + mw.lock.Lock() + } +} + +func (mw *MutexWrap) Unlock() { + if !mw.disabled { + mw.lock.Unlock() + } +} + +func (mw *MutexWrap) Disable() { + mw.disabled = true +} + +// Creates a new logger. Configuration should be set by changing `Formatter`, +// `Out` and `Hooks` directly on the default logger instance. You can also just +// instantiate your own: +// +// var log = &Logger{ +// Out: os.Stderr, +// Formatter: new(JSONFormatter), +// Hooks: make(LevelHooks), +// Level: logrus.DebugLevel, +// } +// +// It's recommended to make this a global instance called `log`. +func New() *Logger { + return &Logger{ + Out: os.Stderr, + Formatter: new(TextFormatter), + Hooks: make(LevelHooks), + Level: InfoLevel, + } +} + +func (logger *Logger) newEntry() *Entry { + entry, ok := logger.entryPool.Get().(*Entry) + if ok { + return entry + } + return NewEntry(logger) +} + +func (logger *Logger) releaseEntry(entry *Entry) { + logger.entryPool.Put(entry) +} + +// Adds a field to the log entry, note that it doesn't log until you call +// Debug, Print, Info, Warn, Fatal or Panic. It only creates a log entry. +// If you want multiple fields, use `WithFields`. +func (logger *Logger) WithField(key string, value interface{}) *Entry { + entry := logger.newEntry() + defer logger.releaseEntry(entry) + return entry.WithField(key, value) +} + +// Adds a struct of fields to the log entry. All it does is call `WithField` for +// each `Field`. +func (logger *Logger) WithFields(fields Fields) *Entry { + entry := logger.newEntry() + defer logger.releaseEntry(entry) + return entry.WithFields(fields) +} + +// Add an error as single field to the log entry. All it does is call +// `WithError` for the given `error`. +func (logger *Logger) WithError(err error) *Entry { + entry := logger.newEntry() + defer logger.releaseEntry(entry) + return entry.WithError(err) +} + +func (logger *Logger) Debugf(format string, args ...interface{}) { + if logger.level() >= DebugLevel { + entry := logger.newEntry() + entry.Debugf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Infof(format string, args ...interface{}) { + if logger.level() >= InfoLevel { + entry := logger.newEntry() + entry.Infof(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Printf(format string, args ...interface{}) { + entry := logger.newEntry() + entry.Printf(format, args...) + logger.releaseEntry(entry) +} + +func (logger *Logger) Warnf(format string, args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warnf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Warningf(format string, args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warnf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Errorf(format string, args ...interface{}) { + if logger.level() >= ErrorLevel { + entry := logger.newEntry() + entry.Errorf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Fatalf(format string, args ...interface{}) { + if logger.level() >= FatalLevel { + entry := logger.newEntry() + entry.Fatalf(format, args...) + logger.releaseEntry(entry) + } + Exit(1) +} + +func (logger *Logger) Panicf(format string, args ...interface{}) { + if logger.level() >= PanicLevel { + entry := logger.newEntry() + entry.Panicf(format, args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Debug(args ...interface{}) { + if logger.level() >= DebugLevel { + entry := logger.newEntry() + entry.Debug(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Info(args ...interface{}) { + if logger.level() >= InfoLevel { + entry := logger.newEntry() + entry.Info(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Print(args ...interface{}) { + entry := logger.newEntry() + entry.Info(args...) + logger.releaseEntry(entry) +} + +func (logger *Logger) Warn(args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warn(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Warning(args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warn(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Error(args ...interface{}) { + if logger.level() >= ErrorLevel { + entry := logger.newEntry() + entry.Error(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Fatal(args ...interface{}) { + if logger.level() >= FatalLevel { + entry := logger.newEntry() + entry.Fatal(args...) + logger.releaseEntry(entry) + } + Exit(1) +} + +func (logger *Logger) Panic(args ...interface{}) { + if logger.level() >= PanicLevel { + entry := logger.newEntry() + entry.Panic(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Debugln(args ...interface{}) { + if logger.level() >= DebugLevel { + entry := logger.newEntry() + entry.Debugln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Infoln(args ...interface{}) { + if logger.level() >= InfoLevel { + entry := logger.newEntry() + entry.Infoln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Println(args ...interface{}) { + entry := logger.newEntry() + entry.Println(args...) + logger.releaseEntry(entry) +} + +func (logger *Logger) Warnln(args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warnln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Warningln(args ...interface{}) { + if logger.level() >= WarnLevel { + entry := logger.newEntry() + entry.Warnln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Errorln(args ...interface{}) { + if logger.level() >= ErrorLevel { + entry := logger.newEntry() + entry.Errorln(args...) + logger.releaseEntry(entry) + } +} + +func (logger *Logger) Fatalln(args ...interface{}) { + if logger.level() >= FatalLevel { + entry := logger.newEntry() + entry.Fatalln(args...) + logger.releaseEntry(entry) + } + Exit(1) +} + +func (logger *Logger) Panicln(args ...interface{}) { + if logger.level() >= PanicLevel { + entry := logger.newEntry() + entry.Panicln(args...) + logger.releaseEntry(entry) + } +} + +//When file is opened with appending mode, it's safe to +//write concurrently to a file (within 4k message on Linux). +//In these cases user can choose to disable the lock. +func (logger *Logger) SetNoLock() { + logger.mu.Disable() +} + +func (logger *Logger) level() Level { + return Level(atomic.LoadUint32((*uint32)(&logger.Level))) +} + +func (logger *Logger) SetLevel(level Level) { + atomic.StoreUint32((*uint32)(&logger.Level), uint32(level)) +} diff --git a/vendor/github.com/sirupsen/logrus/logger_bench_test.go b/vendor/github.com/sirupsen/logrus/logger_bench_test.go new file mode 100644 index 0000000..dd23a35 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/logger_bench_test.go @@ -0,0 +1,61 @@ +package logrus + +import ( + "os" + "testing" +) + +// smallFields is a small size data set for benchmarking +var loggerFields = Fields{ + "foo": "bar", + "baz": "qux", + "one": "two", + "three": "four", +} + +func BenchmarkDummyLogger(b *testing.B) { + nullf, err := os.OpenFile("/dev/null", os.O_WRONLY, 0666) + if err != nil { + b.Fatalf("%v", err) + } + defer nullf.Close() + doLoggerBenchmark(b, nullf, &TextFormatter{DisableColors: true}, smallFields) +} + +func BenchmarkDummyLoggerNoLock(b *testing.B) { + nullf, err := os.OpenFile("/dev/null", os.O_WRONLY|os.O_APPEND, 0666) + if err != nil { + b.Fatalf("%v", err) + } + defer nullf.Close() + doLoggerBenchmarkNoLock(b, nullf, &TextFormatter{DisableColors: true}, smallFields) +} + +func doLoggerBenchmark(b *testing.B, out *os.File, formatter Formatter, fields Fields) { + logger := Logger{ + Out: out, + Level: InfoLevel, + Formatter: formatter, + } + entry := logger.WithFields(fields) + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + entry.Info("aaa") + } + }) +} + +func doLoggerBenchmarkNoLock(b *testing.B, out *os.File, formatter Formatter, fields Fields) { + logger := Logger{ + Out: out, + Level: InfoLevel, + Formatter: formatter, + } + logger.SetNoLock() + entry := logger.WithFields(fields) + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + entry.Info("aaa") + } + }) +} diff --git a/vendor/github.com/sirupsen/logrus/logrus.go b/vendor/github.com/sirupsen/logrus/logrus.go new file mode 100644 index 0000000..dd38999 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/logrus.go @@ -0,0 +1,143 @@ +package logrus + +import ( + "fmt" + "log" + "strings" +) + +// Fields type, used to pass to `WithFields`. +type Fields map[string]interface{} + +// Level type +type Level uint32 + +// Convert the Level to a string. E.g. PanicLevel becomes "panic". +func (level Level) String() string { + switch level { + case DebugLevel: + return "debug" + case InfoLevel: + return "info" + case WarnLevel: + return "warning" + case ErrorLevel: + return "error" + case FatalLevel: + return "fatal" + case PanicLevel: + return "panic" + } + + return "unknown" +} + +// ParseLevel takes a string level and returns the Logrus log level constant. +func ParseLevel(lvl string) (Level, error) { + switch strings.ToLower(lvl) { + case "panic": + return PanicLevel, nil + case "fatal": + return FatalLevel, nil + case "error": + return ErrorLevel, nil + case "warn", "warning": + return WarnLevel, nil + case "info": + return InfoLevel, nil + case "debug": + return DebugLevel, nil + } + + var l Level + return l, fmt.Errorf("not a valid logrus Level: %q", lvl) +} + +// A constant exposing all logging levels +var AllLevels = []Level{ + PanicLevel, + FatalLevel, + ErrorLevel, + WarnLevel, + InfoLevel, + DebugLevel, +} + +// These are the different logging levels. You can set the logging level to log +// on your instance of logger, obtained with `logrus.New()`. +const ( + // PanicLevel level, highest level of severity. Logs and then calls panic with the + // message passed to Debug, Info, ... + PanicLevel Level = iota + // FatalLevel level. Logs and then calls `os.Exit(1)`. It will exit even if the + // logging level is set to Panic. + FatalLevel + // ErrorLevel level. Logs. Used for errors that should definitely be noted. + // Commonly used for hooks to send errors to an error tracking service. + ErrorLevel + // WarnLevel level. Non-critical entries that deserve eyes. + WarnLevel + // InfoLevel level. General operational entries about what's going on inside the + // application. + InfoLevel + // DebugLevel level. Usually only enabled when debugging. Very verbose logging. + DebugLevel +) + +// Won't compile if StdLogger can't be realized by a log.Logger +var ( + _ StdLogger = &log.Logger{} + _ StdLogger = &Entry{} + _ StdLogger = &Logger{} +) + +// StdLogger is what your logrus-enabled library should take, that way +// it'll accept a stdlib logger and a logrus logger. There's no standard +// interface, this is the closest we get, unfortunately. +type StdLogger interface { + Print(...interface{}) + Printf(string, ...interface{}) + Println(...interface{}) + + Fatal(...interface{}) + Fatalf(string, ...interface{}) + Fatalln(...interface{}) + + Panic(...interface{}) + Panicf(string, ...interface{}) + Panicln(...interface{}) +} + +// The FieldLogger interface generalizes the Entry and Logger types +type FieldLogger interface { + WithField(key string, value interface{}) *Entry + WithFields(fields Fields) *Entry + WithError(err error) *Entry + + Debugf(format string, args ...interface{}) + Infof(format string, args ...interface{}) + Printf(format string, args ...interface{}) + Warnf(format string, args ...interface{}) + Warningf(format string, args ...interface{}) + Errorf(format string, args ...interface{}) + Fatalf(format string, args ...interface{}) + Panicf(format string, args ...interface{}) + + Debug(args ...interface{}) + Info(args ...interface{}) + Print(args ...interface{}) + Warn(args ...interface{}) + Warning(args ...interface{}) + Error(args ...interface{}) + Fatal(args ...interface{}) + Panic(args ...interface{}) + + Debugln(args ...interface{}) + Infoln(args ...interface{}) + Println(args ...interface{}) + Warnln(args ...interface{}) + Warningln(args ...interface{}) + Errorln(args ...interface{}) + Fatalln(args ...interface{}) + Panicln(args ...interface{}) +} diff --git a/vendor/github.com/sirupsen/logrus/logrus_test.go b/vendor/github.com/sirupsen/logrus/logrus_test.go new file mode 100644 index 0000000..78cbc28 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/logrus_test.go @@ -0,0 +1,386 @@ +package logrus + +import ( + "bytes" + "encoding/json" + "strconv" + "strings" + "sync" + "testing" + + "github.com/stretchr/testify/assert" +) + +func LogAndAssertJSON(t *testing.T, log func(*Logger), assertions func(fields Fields)) { + var buffer bytes.Buffer + var fields Fields + + logger := New() + logger.Out = &buffer + logger.Formatter = new(JSONFormatter) + + log(logger) + + err := json.Unmarshal(buffer.Bytes(), &fields) + assert.Nil(t, err) + + assertions(fields) +} + +func LogAndAssertText(t *testing.T, log func(*Logger), assertions func(fields map[string]string)) { + var buffer bytes.Buffer + + logger := New() + logger.Out = &buffer + logger.Formatter = &TextFormatter{ + DisableColors: true, + } + + log(logger) + + fields := make(map[string]string) + for _, kv := range strings.Split(buffer.String(), " ") { + if !strings.Contains(kv, "=") { + continue + } + kvArr := strings.Split(kv, "=") + key := strings.TrimSpace(kvArr[0]) + val := kvArr[1] + if kvArr[1][0] == '"' { + var err error + val, err = strconv.Unquote(val) + assert.NoError(t, err) + } + fields[key] = val + } + assertions(fields) +} + +func TestPrint(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Print("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + assert.Equal(t, fields["level"], "info") + }) +} + +func TestInfo(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + assert.Equal(t, fields["level"], "info") + }) +} + +func TestWarn(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Warn("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + assert.Equal(t, fields["level"], "warning") + }) +} + +func TestInfolnShouldAddSpacesBetweenStrings(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Infoln("test", "test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test test") + }) +} + +func TestInfolnShouldAddSpacesBetweenStringAndNonstring(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Infoln("test", 10) + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test 10") + }) +} + +func TestInfolnShouldAddSpacesBetweenTwoNonStrings(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Infoln(10, 10) + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "10 10") + }) +} + +func TestInfoShouldAddSpacesBetweenTwoNonStrings(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Infoln(10, 10) + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "10 10") + }) +} + +func TestInfoShouldNotAddSpacesBetweenStringAndNonstring(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Info("test", 10) + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test10") + }) +} + +func TestInfoShouldNotAddSpacesBetweenStrings(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.Info("test", "test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "testtest") + }) +} + +func TestWithFieldsShouldAllowAssignments(t *testing.T) { + var buffer bytes.Buffer + var fields Fields + + logger := New() + logger.Out = &buffer + logger.Formatter = new(JSONFormatter) + + localLog := logger.WithFields(Fields{ + "key1": "value1", + }) + + localLog.WithField("key2", "value2").Info("test") + err := json.Unmarshal(buffer.Bytes(), &fields) + assert.Nil(t, err) + + assert.Equal(t, "value2", fields["key2"]) + assert.Equal(t, "value1", fields["key1"]) + + buffer = bytes.Buffer{} + fields = Fields{} + localLog.Info("test") + err = json.Unmarshal(buffer.Bytes(), &fields) + assert.Nil(t, err) + + _, ok := fields["key2"] + assert.Equal(t, false, ok) + assert.Equal(t, "value1", fields["key1"]) +} + +func TestUserSuppliedFieldDoesNotOverwriteDefaults(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.WithField("msg", "hello").Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + }) +} + +func TestUserSuppliedMsgFieldHasPrefix(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.WithField("msg", "hello").Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["msg"], "test") + assert.Equal(t, fields["fields.msg"], "hello") + }) +} + +func TestUserSuppliedTimeFieldHasPrefix(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.WithField("time", "hello").Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["fields.time"], "hello") + }) +} + +func TestUserSuppliedLevelFieldHasPrefix(t *testing.T) { + LogAndAssertJSON(t, func(log *Logger) { + log.WithField("level", 1).Info("test") + }, func(fields Fields) { + assert.Equal(t, fields["level"], "info") + assert.Equal(t, fields["fields.level"], 1.0) // JSON has floats only + }) +} + +func TestDefaultFieldsAreNotPrefixed(t *testing.T) { + LogAndAssertText(t, func(log *Logger) { + ll := log.WithField("herp", "derp") + ll.Info("hello") + ll.Info("bye") + }, func(fields map[string]string) { + for _, fieldName := range []string{"fields.level", "fields.time", "fields.msg"} { + if _, ok := fields[fieldName]; ok { + t.Fatalf("should not have prefixed %q: %v", fieldName, fields) + } + } + }) +} + +func TestDoubleLoggingDoesntPrefixPreviousFields(t *testing.T) { + + var buffer bytes.Buffer + var fields Fields + + logger := New() + logger.Out = &buffer + logger.Formatter = new(JSONFormatter) + + llog := logger.WithField("context", "eating raw fish") + + llog.Info("looks delicious") + + err := json.Unmarshal(buffer.Bytes(), &fields) + assert.NoError(t, err, "should have decoded first message") + assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields") + assert.Equal(t, fields["msg"], "looks delicious") + assert.Equal(t, fields["context"], "eating raw fish") + + buffer.Reset() + + llog.Warn("omg it is!") + + err = json.Unmarshal(buffer.Bytes(), &fields) + assert.NoError(t, err, "should have decoded second message") + assert.Equal(t, len(fields), 4, "should only have msg/time/level/context fields") + assert.Equal(t, fields["msg"], "omg it is!") + assert.Equal(t, fields["context"], "eating raw fish") + assert.Nil(t, fields["fields.msg"], "should not have prefixed previous `msg` entry") + +} + +func TestConvertLevelToString(t *testing.T) { + assert.Equal(t, "debug", DebugLevel.String()) + assert.Equal(t, "info", InfoLevel.String()) + assert.Equal(t, "warning", WarnLevel.String()) + assert.Equal(t, "error", ErrorLevel.String()) + assert.Equal(t, "fatal", FatalLevel.String()) + assert.Equal(t, "panic", PanicLevel.String()) +} + +func TestParseLevel(t *testing.T) { + l, err := ParseLevel("panic") + assert.Nil(t, err) + assert.Equal(t, PanicLevel, l) + + l, err = ParseLevel("PANIC") + assert.Nil(t, err) + assert.Equal(t, PanicLevel, l) + + l, err = ParseLevel("fatal") + assert.Nil(t, err) + assert.Equal(t, FatalLevel, l) + + l, err = ParseLevel("FATAL") + assert.Nil(t, err) + assert.Equal(t, FatalLevel, l) + + l, err = ParseLevel("error") + assert.Nil(t, err) + assert.Equal(t, ErrorLevel, l) + + l, err = ParseLevel("ERROR") + assert.Nil(t, err) + assert.Equal(t, ErrorLevel, l) + + l, err = ParseLevel("warn") + assert.Nil(t, err) + assert.Equal(t, WarnLevel, l) + + l, err = ParseLevel("WARN") + assert.Nil(t, err) + assert.Equal(t, WarnLevel, l) + + l, err = ParseLevel("warning") + assert.Nil(t, err) + assert.Equal(t, WarnLevel, l) + + l, err = ParseLevel("WARNING") + assert.Nil(t, err) + assert.Equal(t, WarnLevel, l) + + l, err = ParseLevel("info") + assert.Nil(t, err) + assert.Equal(t, InfoLevel, l) + + l, err = ParseLevel("INFO") + assert.Nil(t, err) + assert.Equal(t, InfoLevel, l) + + l, err = ParseLevel("debug") + assert.Nil(t, err) + assert.Equal(t, DebugLevel, l) + + l, err = ParseLevel("DEBUG") + assert.Nil(t, err) + assert.Equal(t, DebugLevel, l) + + l, err = ParseLevel("invalid") + assert.Equal(t, "not a valid logrus Level: \"invalid\"", err.Error()) +} + +func TestGetSetLevelRace(t *testing.T) { + wg := sync.WaitGroup{} + for i := 0; i < 100; i++ { + wg.Add(1) + go func(i int) { + defer wg.Done() + if i%2 == 0 { + SetLevel(InfoLevel) + } else { + GetLevel() + } + }(i) + + } + wg.Wait() +} + +func TestLoggingRace(t *testing.T) { + logger := New() + + var wg sync.WaitGroup + wg.Add(100) + + for i := 0; i < 100; i++ { + go func() { + logger.Info("info") + wg.Done() + }() + } + wg.Wait() +} + +// Compile test +func TestLogrusInterface(t *testing.T) { + var buffer bytes.Buffer + fn := func(l FieldLogger) { + b := l.WithField("key", "value") + b.Debug("Test") + } + // test logger + logger := New() + logger.Out = &buffer + fn(logger) + + // test Entry + e := logger.WithField("another", "value") + fn(e) +} + +// Implements io.Writer using channels for synchronization, so we can wait on +// the Entry.Writer goroutine to write in a non-racey way. This does assume that +// there is a single call to Logger.Out for each message. +type channelWriter chan []byte + +func (cw channelWriter) Write(p []byte) (int, error) { + cw <- p + return len(p), nil +} + +func TestEntryWriter(t *testing.T) { + cw := channelWriter(make(chan []byte, 1)) + log := New() + log.Out = cw + log.Formatter = new(JSONFormatter) + log.WithField("foo", "bar").WriterLevel(WarnLevel).Write([]byte("hello\n")) + + bs := <-cw + var fields Fields + err := json.Unmarshal(bs, &fields) + assert.Nil(t, err) + assert.Equal(t, fields["foo"], "bar") + assert.Equal(t, fields["level"], "warning") +} diff --git a/vendor/github.com/sirupsen/logrus/terminal_bsd.go b/vendor/github.com/sirupsen/logrus/terminal_bsd.go new file mode 100644 index 0000000..d7b3893 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/terminal_bsd.go @@ -0,0 +1,10 @@ +// +build darwin freebsd openbsd netbsd dragonfly +// +build !appengine + +package logrus + +import "golang.org/x/sys/unix" + +const ioctlReadTermios = unix.TIOCGETA + +type Termios unix.Termios diff --git a/vendor/github.com/sirupsen/logrus/terminal_linux.go b/vendor/github.com/sirupsen/logrus/terminal_linux.go new file mode 100644 index 0000000..88d7298 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/terminal_linux.go @@ -0,0 +1,14 @@ +// Based on ssh/terminal: +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !appengine + +package logrus + +import "golang.org/x/sys/unix" + +const ioctlReadTermios = unix.TCGETS + +type Termios unix.Termios diff --git a/vendor/github.com/sirupsen/logrus/text_formatter.go b/vendor/github.com/sirupsen/logrus/text_formatter.go new file mode 100644 index 0000000..be412aa --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/text_formatter.go @@ -0,0 +1,191 @@ +package logrus + +import ( + "bytes" + "fmt" + "io" + "os" + "sort" + "strings" + "sync" + "time" + + "golang.org/x/crypto/ssh/terminal" +) + +const ( + nocolor = 0 + red = 31 + green = 32 + yellow = 33 + blue = 36 + gray = 37 +) + +var ( + baseTimestamp time.Time +) + +func init() { + baseTimestamp = time.Now() +} + +// TextFormatter formats logs into text +type TextFormatter struct { + // Set to true to bypass checking for a TTY before outputting colors. + ForceColors bool + + // Force disabling colors. + DisableColors bool + + // Disable timestamp logging. useful when output is redirected to logging + // system that already adds timestamps. + DisableTimestamp bool + + // Enable logging the full timestamp when a TTY is attached instead of just + // the time passed since beginning of execution. + FullTimestamp bool + + // TimestampFormat to use for display when a full timestamp is printed + TimestampFormat string + + // The fields are sorted by default for a consistent output. For applications + // that log extremely frequently and don't use the JSON formatter this may not + // be desired. + DisableSorting bool + + // QuoteEmptyFields will wrap empty fields in quotes if true + QuoteEmptyFields bool + + // Whether the logger's out is to a terminal + isTerminal bool + + sync.Once +} + +func (f *TextFormatter) init(entry *Entry) { + if entry.Logger != nil { + f.isTerminal = f.checkIfTerminal(entry.Logger.Out) + } +} + +func (f *TextFormatter) checkIfTerminal(w io.Writer) bool { + switch v := w.(type) { + case *os.File: + return terminal.IsTerminal(int(v.Fd())) + default: + return false + } +} + +// Format renders a single log entry +func (f *TextFormatter) Format(entry *Entry) ([]byte, error) { + var b *bytes.Buffer + keys := make([]string, 0, len(entry.Data)) + for k := range entry.Data { + keys = append(keys, k) + } + + if !f.DisableSorting { + sort.Strings(keys) + } + if entry.Buffer != nil { + b = entry.Buffer + } else { + b = &bytes.Buffer{} + } + + prefixFieldClashes(entry.Data) + + f.Do(func() { f.init(entry) }) + + isColored := (f.ForceColors || f.isTerminal) && !f.DisableColors + + timestampFormat := f.TimestampFormat + if timestampFormat == "" { + timestampFormat = defaultTimestampFormat + } + if isColored { + f.printColored(b, entry, keys, timestampFormat) + } else { + if !f.DisableTimestamp { + f.appendKeyValue(b, "time", entry.Time.Format(timestampFormat)) + } + f.appendKeyValue(b, "level", entry.Level.String()) + if entry.Message != "" { + f.appendKeyValue(b, "msg", entry.Message) + } + for _, key := range keys { + f.appendKeyValue(b, key, entry.Data[key]) + } + } + + b.WriteByte('\n') + return b.Bytes(), nil +} + +func (f *TextFormatter) printColored(b *bytes.Buffer, entry *Entry, keys []string, timestampFormat string) { + var levelColor int + switch entry.Level { + case DebugLevel: + levelColor = gray + case WarnLevel: + levelColor = yellow + case ErrorLevel, FatalLevel, PanicLevel: + levelColor = red + default: + levelColor = blue + } + + levelText := strings.ToUpper(entry.Level.String())[0:4] + + if f.DisableTimestamp { + fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m %-44s ", levelColor, levelText, entry.Message) + } else if !f.FullTimestamp { + fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%04d] %-44s ", levelColor, levelText, int(entry.Time.Sub(baseTimestamp)/time.Second), entry.Message) + } else { + fmt.Fprintf(b, "\x1b[%dm%s\x1b[0m[%s] %-44s ", levelColor, levelText, entry.Time.Format(timestampFormat), entry.Message) + } + for _, k := range keys { + v := entry.Data[k] + fmt.Fprintf(b, " \x1b[%dm%s\x1b[0m=", levelColor, k) + f.appendValue(b, v) + } +} + +func (f *TextFormatter) needsQuoting(text string) bool { + if f.QuoteEmptyFields && len(text) == 0 { + return true + } + for _, ch := range text { + if !((ch >= 'a' && ch <= 'z') || + (ch >= 'A' && ch <= 'Z') || + (ch >= '0' && ch <= '9') || + ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '@' || ch == '^' || ch == '+') { + return true + } + } + return false +} + +func (f *TextFormatter) appendKeyValue(b *bytes.Buffer, key string, value interface{}) { + if b.Len() > 0 { + b.WriteByte(' ') + } + b.WriteString(key) + b.WriteByte('=') + f.appendValue(b, value) +} + +func (f *TextFormatter) appendValue(b *bytes.Buffer, value interface{}) { + stringVal, ok := value.(string) + if !ok { + stringVal = fmt.Sprint(value) + } + + if !f.needsQuoting(stringVal) { + b.WriteString(stringVal) + } else { + b.WriteString(fmt.Sprintf("%q", stringVal)) + } +} diff --git a/vendor/github.com/sirupsen/logrus/text_formatter_test.go b/vendor/github.com/sirupsen/logrus/text_formatter_test.go new file mode 100644 index 0000000..d93b931 --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/text_formatter_test.go @@ -0,0 +1,141 @@ +package logrus + +import ( + "bytes" + "errors" + "fmt" + "strings" + "testing" + "time" +) + +func TestFormatting(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + testCases := []struct { + value string + expected string + }{ + {`foo`, "time=\"0001-01-01T00:00:00Z\" level=panic test=foo\n"}, + } + + for _, tc := range testCases { + b, _ := tf.Format(WithField("test", tc.value)) + + if string(b) != tc.expected { + t.Errorf("formatting expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected) + } + } +} + +func TestQuoting(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + checkQuoting := func(q bool, value interface{}) { + b, _ := tf.Format(WithField("test", value)) + idx := bytes.Index(b, ([]byte)("test=")) + cont := bytes.Contains(b[idx+5:], []byte("\"")) + if cont != q { + if q { + t.Errorf("quoting expected for: %#v", value) + } else { + t.Errorf("quoting not expected for: %#v", value) + } + } + } + + checkQuoting(false, "") + checkQuoting(false, "abcd") + checkQuoting(false, "v1.0") + checkQuoting(false, "1234567890") + checkQuoting(false, "/foobar") + checkQuoting(false, "foo_bar") + checkQuoting(false, "foo@bar") + checkQuoting(false, "foobar^") + checkQuoting(false, "+/-_^@f.oobar") + checkQuoting(true, "foobar$") + checkQuoting(true, "&foobar") + checkQuoting(true, "x y") + checkQuoting(true, "x,y") + checkQuoting(false, errors.New("invalid")) + checkQuoting(true, errors.New("invalid argument")) + + // Test for quoting empty fields. + tf.QuoteEmptyFields = true + checkQuoting(true, "") + checkQuoting(false, "abcd") + checkQuoting(true, errors.New("invalid argument")) +} + +func TestEscaping(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + testCases := []struct { + value string + expected string + }{ + {`ba"r`, `ba\"r`}, + {`ba'r`, `ba'r`}, + } + + for _, tc := range testCases { + b, _ := tf.Format(WithField("test", tc.value)) + if !bytes.Contains(b, []byte(tc.expected)) { + t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected) + } + } +} + +func TestEscaping_Interface(t *testing.T) { + tf := &TextFormatter{DisableColors: true} + + ts := time.Now() + + testCases := []struct { + value interface{} + expected string + }{ + {ts, fmt.Sprintf("\"%s\"", ts.String())}, + {errors.New("error: something went wrong"), "\"error: something went wrong\""}, + } + + for _, tc := range testCases { + b, _ := tf.Format(WithField("test", tc.value)) + if !bytes.Contains(b, []byte(tc.expected)) { + t.Errorf("escaping expected for %q (result was %q instead of %q)", tc.value, string(b), tc.expected) + } + } +} + +func TestTimestampFormat(t *testing.T) { + checkTimeStr := func(format string) { + customFormatter := &TextFormatter{DisableColors: true, TimestampFormat: format} + customStr, _ := customFormatter.Format(WithField("test", "test")) + timeStart := bytes.Index(customStr, ([]byte)("time=")) + timeEnd := bytes.Index(customStr, ([]byte)("level=")) + timeStr := customStr[timeStart+5+len("\"") : timeEnd-1-len("\"")] + if format == "" { + format = time.RFC3339 + } + _, e := time.Parse(format, (string)(timeStr)) + if e != nil { + t.Errorf("time string \"%s\" did not match provided time format \"%s\": %s", timeStr, format, e) + } + } + + checkTimeStr("2006-01-02T15:04:05.000000000Z07:00") + checkTimeStr("Mon Jan _2 15:04:05 2006") + checkTimeStr("") +} + +func TestDisableTimestampWithColoredOutput(t *testing.T) { + tf := &TextFormatter{DisableTimestamp: true, ForceColors: true} + + b, _ := tf.Format(WithField("test", "test")) + if strings.Contains(string(b), "[0000]") { + t.Error("timestamp not expected when DisableTimestamp is true") + } +} + +// TODO add tests for sorting etc., this requires a parser for the text +// formatter output. diff --git a/vendor/github.com/sirupsen/logrus/writer.go b/vendor/github.com/sirupsen/logrus/writer.go new file mode 100644 index 0000000..7bdebed --- /dev/null +++ b/vendor/github.com/sirupsen/logrus/writer.go @@ -0,0 +1,62 @@ +package logrus + +import ( + "bufio" + "io" + "runtime" +) + +func (logger *Logger) Writer() *io.PipeWriter { + return logger.WriterLevel(InfoLevel) +} + +func (logger *Logger) WriterLevel(level Level) *io.PipeWriter { + return NewEntry(logger).WriterLevel(level) +} + +func (entry *Entry) Writer() *io.PipeWriter { + return entry.WriterLevel(InfoLevel) +} + +func (entry *Entry) WriterLevel(level Level) *io.PipeWriter { + reader, writer := io.Pipe() + + var printFunc func(args ...interface{}) + + switch level { + case DebugLevel: + printFunc = entry.Debug + case InfoLevel: + printFunc = entry.Info + case WarnLevel: + printFunc = entry.Warn + case ErrorLevel: + printFunc = entry.Error + case FatalLevel: + printFunc = entry.Fatal + case PanicLevel: + printFunc = entry.Panic + default: + printFunc = entry.Print + } + + go entry.writerScanner(reader, printFunc) + runtime.SetFinalizer(writer, writerFinalizer) + + return writer +} + +func (entry *Entry) writerScanner(reader *io.PipeReader, printFunc func(args ...interface{})) { + scanner := bufio.NewScanner(reader) + for scanner.Scan() { + printFunc(scanner.Text()) + } + if err := scanner.Err(); err != nil { + entry.Errorf("Error while reading from Writer: %s", err) + } + reader.Close() +} + +func writerFinalizer(writer *io.PipeWriter) { + writer.Close() +} diff --git a/vendor/github.com/spf13/pflag/.gitignore b/vendor/github.com/spf13/pflag/.gitignore new file mode 100644 index 0000000..c3da290 --- /dev/null +++ b/vendor/github.com/spf13/pflag/.gitignore @@ -0,0 +1,2 @@ +.idea/* + diff --git a/vendor/github.com/spf13/pflag/.travis.yml b/vendor/github.com/spf13/pflag/.travis.yml index c4d88e3..f8a63b3 100644 --- a/vendor/github.com/spf13/pflag/.travis.yml +++ b/vendor/github.com/spf13/pflag/.travis.yml @@ -3,6 +3,19 @@ sudo: false language: go go: - - 1.3 - - 1.4 - - tip + - 1.7.3 + - 1.8.1 + - tip + +matrix: + allow_failures: + - go: tip + +install: + - go get github.com/golang/lint/golint + - export PATH=$GOPATH/bin:$PATH + - go install ./... + +script: + - verify/all.sh -v + - go test ./... diff --git a/vendor/github.com/spf13/pflag/README.md b/vendor/github.com/spf13/pflag/README.md index 247ceca..b052414 100644 --- a/vendor/github.com/spf13/pflag/README.md +++ b/vendor/github.com/spf13/pflag/README.md @@ -1,4 +1,6 @@ [![Build Status](https://travis-ci.org/spf13/pflag.svg?branch=master)](https://travis-ci.org/spf13/pflag) +[![Go Report Card](https://goreportcard.com/badge/github.com/spf13/pflag)](https://goreportcard.com/report/github.com/spf13/pflag) +[![GoDoc](https://godoc.org/github.com/spf13/pflag?status.svg)](https://godoc.org/github.com/spf13/pflag) ## Description @@ -85,7 +87,7 @@ fmt.Println("flagvar has value ", flagvar) ``` There are helpers function to get values later if you have the FlagSet but -it was difficult to keep up with all of the the flag pointers in your code. +it was difficult to keep up with all of the flag pointers in your code. If you have a pflag.FlagSet with a flag called 'flagname' of type int you can use GetInt() to get the int value. But notice that 'flagname' must exist and it must be an int. GetString("flagname") will fail. @@ -106,9 +108,9 @@ that give one-letter shorthands for flags. You can use these by appending var ip = flag.IntP("flagname", "f", 1234, "help message") var flagvar bool func init() { - flag.BoolVarP("boolname", "b", true, "help message") + flag.BoolVarP(&flagvar, "boolname", "b", true, "help message") } -flag.VarP(&flagVar, "varname", "v", 1234, "help message") +flag.VarP(&flagVal, "varname", "v", "help message") ``` Shorthand letters can be used with single dashes on the command line. @@ -216,32 +218,79 @@ func aliasNormalizeFunc(f *pflag.FlagSet, name string) pflag.NormalizedName { myFlagSet.SetNormalizeFunc(aliasNormalizeFunc) ``` -## Deprecating a flag or its shorthand -It is possible to deprecate a flag, or just its shorthand. Deprecating a flag/shorthand hides it from help text and prints a usage message when the deprecated flag/shorthand is used. +## Deprecating a flag or its shorthand +It is possible to deprecate a flag, or just its shorthand. Deprecating a flag/shorthand hides it from help text and prints a usage message when the deprecated flag/shorthand is used. -**Example #1**: You want to deprecate a flag named "badflag" as well as inform the users what flag they should use instead. +**Example #1**: You want to deprecate a flag named "badflag" as well as inform the users what flag they should use instead. ```go -// deprecate a flag by specifying its name and a usage message +// deprecate a flag by specifying its name and a usage message flags.MarkDeprecated("badflag", "please use --good-flag instead") ``` -This hides "badflag" from help text, and prints `Flag --badflag has been deprecated, please use --good-flag instead` when "badflag" is used. +This hides "badflag" from help text, and prints `Flag --badflag has been deprecated, please use --good-flag instead` when "badflag" is used. -**Example #2**: You want to keep a flag name "noshorthandflag" but deprecate its shortname "n". +**Example #2**: You want to keep a flag name "noshorthandflag" but deprecate its shortname "n". ```go -// deprecate a flag shorthand by specifying its flag name and a usage message +// deprecate a flag shorthand by specifying its flag name and a usage message flags.MarkShorthandDeprecated("noshorthandflag", "please use --noshorthandflag only") ``` -This hides the shortname "n" from help text, and prints `Flag shorthand -n has been deprecated, please use --noshorthandflag only` when the shorthand "n" is used. +This hides the shortname "n" from help text, and prints `Flag shorthand -n has been deprecated, please use --noshorthandflag only` when the shorthand "n" is used. -Note that usage message is essential here, and it should not be empty. +Note that usage message is essential here, and it should not be empty. + +## Hidden flags +It is possible to mark a flag as hidden, meaning it will still function as normal, however will not show up in usage/help text. + +**Example**: You have a flag named "secretFlag" that you need for internal use only and don't want it showing up in help text, or for its usage text to be available. +```go +// hide a flag by specifying its name +flags.MarkHidden("secretFlag") +``` + +## Disable sorting of flags +`pflag` allows you to disable sorting of flags for help and usage message. + +**Example**: +```go +flags.BoolP("verbose", "v", false, "verbose output") +flags.String("coolflag", "yeaah", "it's really cool flag") +flags.Int("usefulflag", 777, "sometimes it's very useful") +flags.SortFlags = false +flags.PrintDefaults() +``` +**Output**: +``` + -v, --verbose verbose output + --coolflag string it's really cool flag (default "yeaah") + --usefulflag int sometimes it's very useful (default 777) +``` + + +## Supporting Go flags when using pflag +In order to support flags defined using Go's `flag` package, they must be added to the `pflag` flagset. This is usually necessary +to support flags defined by third-party dependencies (e.g. `golang/glog`). + +**Example**: You want to add the Go flags to the `CommandLine` flagset +```go +import ( + goflag "flag" + flag "github.com/spf13/pflag" +) + +var ip *int = flag.Int("flagname", 1234, "help message for flagname") + +func main() { + flag.CommandLine.AddGoFlagSet(goflag.CommandLine) + flag.Parse() +} +``` ## More info You can see the full reference documentation of the pflag package [at godoc.org][3], or through go's standard documentation system by running `godoc -http=:6060` and browsing to -[http://localhost:6060/pkg/github.com/ogier/pflag][2] after +[http://localhost:6060/pkg/github.com/spf13/pflag][2] after installation. -[2]: http://localhost:6060/pkg/github.com/ogier/pflag -[3]: http://godoc.org/github.com/ogier/pflag +[2]: http://localhost:6060/pkg/github.com/spf13/pflag +[3]: http://godoc.org/github.com/spf13/pflag diff --git a/vendor/github.com/spf13/pflag/bool.go b/vendor/github.com/spf13/pflag/bool.go index d272e40..c4c5c0b 100644 --- a/vendor/github.com/spf13/pflag/bool.go +++ b/vendor/github.com/spf13/pflag/bool.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // optional interface to indicate boolean flags that can be // supplied without "=value" text @@ -30,7 +27,7 @@ func (b *boolValue) Type() string { return "bool" } -func (b *boolValue) String() string { return fmt.Sprintf("%v", *b) } +func (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) } func (b *boolValue) IsBoolFlag() bool { return true } diff --git a/vendor/github.com/spf13/pflag/bool_slice.go b/vendor/github.com/spf13/pflag/bool_slice.go new file mode 100644 index 0000000..5af02f1 --- /dev/null +++ b/vendor/github.com/spf13/pflag/bool_slice.go @@ -0,0 +1,147 @@ +package pflag + +import ( + "io" + "strconv" + "strings" +) + +// -- boolSlice Value +type boolSliceValue struct { + value *[]bool + changed bool +} + +func newBoolSliceValue(val []bool, p *[]bool) *boolSliceValue { + bsv := new(boolSliceValue) + bsv.value = p + *bsv.value = val + return bsv +} + +// Set converts, and assigns, the comma-separated boolean argument string representation as the []bool value of this flag. +// If Set is called on a flag that already has a []bool assigned, the newly converted values will be appended. +func (s *boolSliceValue) Set(val string) error { + + // remove all quote characters + rmQuote := strings.NewReplacer(`"`, "", `'`, "", "`", "") + + // read flag arguments with CSV parser + boolStrSlice, err := readAsCSV(rmQuote.Replace(val)) + if err != nil && err != io.EOF { + return err + } + + // parse boolean values into slice + out := make([]bool, 0, len(boolStrSlice)) + for _, boolStr := range boolStrSlice { + b, err := strconv.ParseBool(strings.TrimSpace(boolStr)) + if err != nil { + return err + } + out = append(out, b) + } + + if !s.changed { + *s.value = out + } else { + *s.value = append(*s.value, out...) + } + + s.changed = true + + return nil +} + +// Type returns a string that uniquely represents this flag's type. +func (s *boolSliceValue) Type() string { + return "boolSlice" +} + +// String defines a "native" format for this boolean slice flag value. +func (s *boolSliceValue) String() string { + + boolStrSlice := make([]string, len(*s.value)) + for i, b := range *s.value { + boolStrSlice[i] = strconv.FormatBool(b) + } + + out, _ := writeAsCSV(boolStrSlice) + + return "[" + out + "]" +} + +func boolSliceConv(val string) (interface{}, error) { + val = strings.Trim(val, "[]") + // Empty string would cause a slice with one (empty) entry + if len(val) == 0 { + return []bool{}, nil + } + ss := strings.Split(val, ",") + out := make([]bool, len(ss)) + for i, t := range ss { + var err error + out[i], err = strconv.ParseBool(t) + if err != nil { + return nil, err + } + } + return out, nil +} + +// GetBoolSlice returns the []bool value of a flag with the given name. +func (f *FlagSet) GetBoolSlice(name string) ([]bool, error) { + val, err := f.getFlagType(name, "boolSlice", boolSliceConv) + if err != nil { + return []bool{}, err + } + return val.([]bool), nil +} + +// BoolSliceVar defines a boolSlice flag with specified name, default value, and usage string. +// The argument p points to a []bool variable in which to store the value of the flag. +func (f *FlagSet) BoolSliceVar(p *[]bool, name string, value []bool, usage string) { + f.VarP(newBoolSliceValue(value, p), name, "", usage) +} + +// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) { + f.VarP(newBoolSliceValue(value, p), name, shorthand, usage) +} + +// BoolSliceVar defines a []bool flag with specified name, default value, and usage string. +// The argument p points to a []bool variable in which to store the value of the flag. +func BoolSliceVar(p *[]bool, name string, value []bool, usage string) { + CommandLine.VarP(newBoolSliceValue(value, p), name, "", usage) +} + +// BoolSliceVarP is like BoolSliceVar, but accepts a shorthand letter that can be used after a single dash. +func BoolSliceVarP(p *[]bool, name, shorthand string, value []bool, usage string) { + CommandLine.VarP(newBoolSliceValue(value, p), name, shorthand, usage) +} + +// BoolSlice defines a []bool flag with specified name, default value, and usage string. +// The return value is the address of a []bool variable that stores the value of the flag. +func (f *FlagSet) BoolSlice(name string, value []bool, usage string) *[]bool { + p := []bool{} + f.BoolSliceVarP(&p, name, "", value, usage) + return &p +} + +// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool { + p := []bool{} + f.BoolSliceVarP(&p, name, shorthand, value, usage) + return &p +} + +// BoolSlice defines a []bool flag with specified name, default value, and usage string. +// The return value is the address of a []bool variable that stores the value of the flag. +func BoolSlice(name string, value []bool, usage string) *[]bool { + return CommandLine.BoolSliceP(name, "", value, usage) +} + +// BoolSliceP is like BoolSlice, but accepts a shorthand letter that can be used after a single dash. +func BoolSliceP(name, shorthand string, value []bool, usage string) *[]bool { + return CommandLine.BoolSliceP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/spf13/pflag/bool_slice_test.go b/vendor/github.com/spf13/pflag/bool_slice_test.go new file mode 100644 index 0000000..b617dd2 --- /dev/null +++ b/vendor/github.com/spf13/pflag/bool_slice_test.go @@ -0,0 +1,215 @@ +package pflag + +import ( + "fmt" + "strconv" + "strings" + "testing" +) + +func setUpBSFlagSet(bsp *[]bool) *FlagSet { + f := NewFlagSet("test", ContinueOnError) + f.BoolSliceVar(bsp, "bs", []bool{}, "Command separated list!") + return f +} + +func setUpBSFlagSetWithDefault(bsp *[]bool) *FlagSet { + f := NewFlagSet("test", ContinueOnError) + f.BoolSliceVar(bsp, "bs", []bool{false, true}, "Command separated list!") + return f +} + +func TestEmptyBS(t *testing.T) { + var bs []bool + f := setUpBSFlagSet(&bs) + err := f.Parse([]string{}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + getBS, err := f.GetBoolSlice("bs") + if err != nil { + t.Fatal("got an error from GetBoolSlice():", err) + } + if len(getBS) != 0 { + t.Fatalf("got bs %v with len=%d but expected length=0", getBS, len(getBS)) + } +} + +func TestBS(t *testing.T) { + var bs []bool + f := setUpBSFlagSet(&bs) + + vals := []string{"1", "F", "TRUE", "0"} + arg := fmt.Sprintf("--bs=%s", strings.Join(vals, ",")) + err := f.Parse([]string{arg}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range bs { + b, err := strconv.ParseBool(vals[i]) + if err != nil { + t.Fatalf("got error: %v", err) + } + if b != v { + t.Fatalf("expected is[%d] to be %s but got: %t", i, vals[i], v) + } + } + getBS, err := f.GetBoolSlice("bs") + if err != nil { + t.Fatalf("got error: %v", err) + } + for i, v := range getBS { + b, err := strconv.ParseBool(vals[i]) + if err != nil { + t.Fatalf("got error: %v", err) + } + if b != v { + t.Fatalf("expected bs[%d] to be %s but got: %t from GetBoolSlice", i, vals[i], v) + } + } +} + +func TestBSDefault(t *testing.T) { + var bs []bool + f := setUpBSFlagSetWithDefault(&bs) + + vals := []string{"false", "T"} + + err := f.Parse([]string{}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range bs { + b, err := strconv.ParseBool(vals[i]) + if err != nil { + t.Fatalf("got error: %v", err) + } + if b != v { + t.Fatalf("expected bs[%d] to be %t from GetBoolSlice but got: %t", i, b, v) + } + } + + getBS, err := f.GetBoolSlice("bs") + if err != nil { + t.Fatal("got an error from GetBoolSlice():", err) + } + for i, v := range getBS { + b, err := strconv.ParseBool(vals[i]) + if err != nil { + t.Fatal("got an error from GetBoolSlice():", err) + } + if b != v { + t.Fatalf("expected bs[%d] to be %t from GetBoolSlice but got: %t", i, b, v) + } + } +} + +func TestBSWithDefault(t *testing.T) { + var bs []bool + f := setUpBSFlagSetWithDefault(&bs) + + vals := []string{"FALSE", "1"} + arg := fmt.Sprintf("--bs=%s", strings.Join(vals, ",")) + err := f.Parse([]string{arg}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range bs { + b, err := strconv.ParseBool(vals[i]) + if err != nil { + t.Fatalf("got error: %v", err) + } + if b != v { + t.Fatalf("expected bs[%d] to be %t but got: %t", i, b, v) + } + } + + getBS, err := f.GetBoolSlice("bs") + if err != nil { + t.Fatal("got an error from GetBoolSlice():", err) + } + for i, v := range getBS { + b, err := strconv.ParseBool(vals[i]) + if err != nil { + t.Fatalf("got error: %v", err) + } + if b != v { + t.Fatalf("expected bs[%d] to be %t from GetBoolSlice but got: %t", i, b, v) + } + } +} + +func TestBSCalledTwice(t *testing.T) { + var bs []bool + f := setUpBSFlagSet(&bs) + + in := []string{"T,F", "T"} + expected := []bool{true, false, true} + argfmt := "--bs=%s" + arg1 := fmt.Sprintf(argfmt, in[0]) + arg2 := fmt.Sprintf(argfmt, in[1]) + err := f.Parse([]string{arg1, arg2}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range bs { + if expected[i] != v { + t.Fatalf("expected bs[%d] to be %t but got %t", i, expected[i], v) + } + } +} + +func TestBSBadQuoting(t *testing.T) { + + tests := []struct { + Want []bool + FlagArg []string + }{ + { + Want: []bool{true, false, true}, + FlagArg: []string{"1", "0", "true"}, + }, + { + Want: []bool{true, false}, + FlagArg: []string{"True", "F"}, + }, + { + Want: []bool{true, false}, + FlagArg: []string{"T", "0"}, + }, + { + Want: []bool{true, false}, + FlagArg: []string{"1", "0"}, + }, + { + Want: []bool{true, false, false}, + FlagArg: []string{"true,false", "false"}, + }, + { + Want: []bool{true, false, false, true, false, true, false}, + FlagArg: []string{`"true,false,false,1,0, T"`, " false "}, + }, + { + Want: []bool{false, false, true, false, true, false, true}, + FlagArg: []string{`"0, False, T,false , true,F"`, "true"}, + }, + } + + for i, test := range tests { + + var bs []bool + f := setUpBSFlagSet(&bs) + + if err := f.Parse([]string{fmt.Sprintf("--bs=%s", strings.Join(test.FlagArg, ","))}); err != nil { + t.Fatalf("flag parsing failed with error: %s\nparsing:\t%#v\nwant:\t\t%#v", + err, test.FlagArg, test.Want[i]) + } + + for j, b := range bs { + if b != test.Want[j] { + t.Fatalf("bad value parsed for test %d on bool %d:\nwant:\t%t\ngot:\t%t", i, j, test.Want[j], b) + } + } + } +} diff --git a/vendor/github.com/spf13/pflag/bool_test.go b/vendor/github.com/spf13/pflag/bool_test.go index afd25ae..a4319e7 100644 --- a/vendor/github.com/spf13/pflag/bool_test.go +++ b/vendor/github.com/spf13/pflag/bool_test.go @@ -6,7 +6,6 @@ package pflag import ( "bytes" - "fmt" "strconv" "testing" ) @@ -48,7 +47,7 @@ func (v *triStateValue) String() string { if *v == triStateMaybe { return strTriStateMaybe } - return fmt.Sprintf("%v", bool(*v == triStateTrue)) + return strconv.FormatBool(*v == triStateTrue) } // The type of the flag as required by the pflag.Value interface @@ -172,9 +171,9 @@ func TestBoolP(t *testing.T) { t.Error("expected no error, got ", err) } if *b != true { - t.Errorf("expected b=true got b=%s", b) + t.Errorf("expected b=true got b=%v", *b) } if *c != false { - t.Errorf("expect c=false got c=%s", c) + t.Errorf("expect c=false got c=%v", *c) } } diff --git a/vendor/github.com/spf13/pflag/count.go b/vendor/github.com/spf13/pflag/count.go index 7b1f142..250a438 100644 --- a/vendor/github.com/spf13/pflag/count.go +++ b/vendor/github.com/spf13/pflag/count.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- count Value type countValue int @@ -28,7 +25,7 @@ func (i *countValue) Type() string { return "count" } -func (i *countValue) String() string { return fmt.Sprintf("%v", *i) } +func (i *countValue) String() string { return strconv.Itoa(int(*i)) } func countConv(sval string) (interface{}, error) { i, err := strconv.Atoi(sval) @@ -86,7 +83,9 @@ func (f *FlagSet) CountP(name, shorthand string, usage string) *int { return p } -// Count like Count only the flag is placed on the CommandLine isntead of a given flag set +// Count defines a count flag with specified name, default value, and usage string. +// The return value is the address of an int variable that stores the value of the flag. +// A count flag will add 1 to its value evey time it is found on the command line func Count(name string, usage string) *int { return CommandLine.CountP(name, "", usage) } diff --git a/vendor/github.com/spf13/pflag/count_test.go b/vendor/github.com/spf13/pflag/count_test.go index 716765c..460d96a 100644 --- a/vendor/github.com/spf13/pflag/count_test.go +++ b/vendor/github.com/spf13/pflag/count_test.go @@ -1,13 +1,10 @@ package pflag import ( - "fmt" "os" "testing" ) -var _ = fmt.Printf - func setUpCount(c *int) *FlagSet { f := NewFlagSet("test", ContinueOnError) f.CountVarP(c, "verbose", "v", "a counter") diff --git a/vendor/github.com/spf13/pflag/example_test.go b/vendor/github.com/spf13/pflag/example_test.go index 9be7a49..abd7806 100644 --- a/vendor/github.com/spf13/pflag/example_test.go +++ b/vendor/github.com/spf13/pflag/example_test.go @@ -2,76 +2,35 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// These examples demonstrate more intricate uses of the flag package. package pflag_test import ( - "errors" "fmt" - "strings" - "time" - flag "github.com/spf13/pflag" + "github.com/spf13/pflag" ) -// Example 1: A single string flag called "species" with default value "gopher". -var species = flag.String("species", "gopher", "the species we are studying") +func ExampleShorthandLookup() { + name := "verbose" + short := name[:1] -// Example 2: A flag with a shorthand letter. -var gopherType = flag.StringP("gopher_type", "g", "pocket", "the variety of gopher") + pflag.BoolP(name, short, false, "verbose output") -// Example 3: A user-defined flag type, a slice of durations. -type interval []time.Duration + // len(short) must be == 1 + flag := pflag.ShorthandLookup(short) -// String is the method to format the flag's value, part of the flag.Value interface. -// The String method's output will be used in diagnostics. -func (i *interval) String() string { - return fmt.Sprint(*i) + fmt.Println(flag.Name) } -func (i *interval) Type() string { - return "interval" -} - -// Set is the method to set the flag value, part of the flag.Value interface. -// Set's argument is a string to be parsed to set the flag. -// It's a comma-separated list, so we split it. -func (i *interval) Set(value string) error { - // If we wanted to allow the flag to be set multiple times, - // accumulating values, we would delete this if statement. - // That would permit usages such as - // -deltaT 10s -deltaT 15s - // and other combinations. - if len(*i) > 0 { - return errors.New("interval flag already set") - } - for _, dt := range strings.Split(value, ",") { - duration, err := time.ParseDuration(dt) - if err != nil { - return err - } - *i = append(*i, duration) - } - return nil -} - -// Define a flag to accumulate durations. Because it has a special type, -// we need to use the Var function and therefore create the flag during -// init. - -var intervalFlag interval - -func init() { - // Tie the command-line flag to the intervalFlag variable and - // set a usage message. - flag.Var(&intervalFlag, "deltaT", "comma-separated list of intervals to use between events") -} - -func Example() { - // All the interesting pieces are with the variables declared above, but - // to enable the flag package to see the flags defined there, one must - // execute, typically at the start of main (not init!): - // flag.Parse() - // We don't run it here because this is not a main function and - // the testing suite has already parsed the flags. +func ExampleFlagSet_ShorthandLookup() { + name := "verbose" + short := name[:1] + + fs := pflag.NewFlagSet("Example", pflag.ContinueOnError) + fs.BoolP(name, short, false, "verbose output") + + // len(short) must be == 1 + flag := fs.ShorthandLookup(short) + + fmt.Println(flag.Name) } diff --git a/vendor/github.com/spf13/pflag/flag.go b/vendor/github.com/spf13/pflag/flag.go index 73f202f..6f1fc30 100644 --- a/vendor/github.com/spf13/pflag/flag.go +++ b/vendor/github.com/spf13/pflag/flag.go @@ -16,9 +16,9 @@ pflag is a drop-in replacement of Go's native flag package. If you import pflag under the name "flag" then all code should continue to function with no changes. - import flag "github.com/ogier/pflag" + import flag "github.com/spf13/pflag" - There is one exception to this: if you directly instantiate the Flag struct +There is one exception to this: if you directly instantiate the Flag struct there is one more field "Shorthand" that you will need to set. Most code never instantiates this struct directly, and instead uses functions such as String(), BoolVar(), and Var(), and is therefore @@ -134,13 +134,21 @@ type FlagSet struct { // a custom error handler. Usage func() + // SortFlags is used to indicate, if user wants to have sorted flags in + // help/usage messages. + SortFlags bool + name string parsed bool actual map[NormalizedName]*Flag + orderedActual []*Flag + sortedActual []*Flag formal map[NormalizedName]*Flag + orderedFormal []*Flag + sortedFormal []*Flag shorthands map[byte]*Flag args []string // arguments after flags - exitOnError bool // does the program exit if there's an error? + argsLenAtDash int // len(args) when a '--' was located when parsing, or -1 if no -- errorHandling ErrorHandling output io.Writer // nil means stderr; use out() accessor interspersed bool // allow interspersed option/non-option args @@ -155,10 +163,11 @@ type Flag struct { Value Value // value as set DefValue string // default value (as text); for usage message Changed bool // If the user set the value (or if left to default) - NoOptDefVal string //default value (as text); if the flag is on the command line without any options + NoOptDefVal string // default value (as text); if the flag is on the command line without any options Deprecated string // If this flag is deprecated, this string is the new or now thing to use + Hidden bool // used by cobra.Command to allow flags to be hidden from help/usage text ShorthandDeprecated string // If the shorthand of this flag is deprecated, this string is the new or now thing to use - Annotations map[string][]string // used by cobra.Command bash autocomple code + Annotations map[string][]string // used by cobra.Command bash autocomple code } // Value is the interface to the dynamic value stored in a flag. @@ -192,11 +201,13 @@ func sortFlags(flags map[NormalizedName]*Flag) []*Flag { // "--getUrl" which may also be translated to "geturl" and everything will work. func (f *FlagSet) SetNormalizeFunc(n func(f *FlagSet, name string) NormalizedName) { f.normalizeNameFunc = n - for k, v := range f.formal { - delete(f.formal, k) - nname := f.normalizeFlagName(string(k)) - f.formal[nname] = v + f.sortedFormal = f.sortedFormal[:0] + for k, v := range f.orderedFormal { + delete(f.formal, NormalizedName(v.Name)) + nname := f.normalizeFlagName(v.Name) v.Name = string(nname) + f.formal[nname] = v + f.orderedFormal[k] = v } } @@ -227,10 +238,25 @@ func (f *FlagSet) SetOutput(output io.Writer) { f.output = output } -// VisitAll visits the flags in lexicographical order, calling fn for each. +// VisitAll visits the flags in lexicographical order or +// in primordial order if f.SortFlags is false, calling fn for each. // It visits all flags, even those not set. func (f *FlagSet) VisitAll(fn func(*Flag)) { - for _, flag := range sortFlags(f.formal) { + if len(f.formal) == 0 { + return + } + + var flags []*Flag + if f.SortFlags { + if len(f.formal) != len(f.sortedFormal) { + f.sortedFormal = sortFlags(f.formal) + } + flags = f.sortedFormal + } else { + flags = f.orderedFormal + } + + for _, flag := range flags { fn(flag) } } @@ -240,22 +266,50 @@ func (f *FlagSet) HasFlags() bool { return len(f.formal) > 0 } -// VisitAll visits the command-line flags in lexicographical order, calling -// fn for each. It visits all flags, even those not set. +// HasAvailableFlags returns a bool to indicate if the FlagSet has any flags +// definied that are not hidden or deprecated. +func (f *FlagSet) HasAvailableFlags() bool { + for _, flag := range f.formal { + if !flag.Hidden && len(flag.Deprecated) == 0 { + return true + } + } + return false +} + +// VisitAll visits the command-line flags in lexicographical order or +// in primordial order if f.SortFlags is false, calling fn for each. +// It visits all flags, even those not set. func VisitAll(fn func(*Flag)) { CommandLine.VisitAll(fn) } -// Visit visits the flags in lexicographical order, calling fn for each. +// Visit visits the flags in lexicographical order or +// in primordial order if f.SortFlags is false, calling fn for each. // It visits only those flags that have been set. func (f *FlagSet) Visit(fn func(*Flag)) { - for _, flag := range sortFlags(f.actual) { + if len(f.actual) == 0 { + return + } + + var flags []*Flag + if f.SortFlags { + if len(f.actual) != len(f.sortedActual) { + f.sortedActual = sortFlags(f.actual) + } + flags = f.sortedActual + } else { + flags = f.orderedActual + } + + for _, flag := range flags { fn(flag) } } -// Visit visits the command-line flags in lexicographical order, calling fn -// for each. It visits only those flags that have been set. +// Visit visits the command-line flags in lexicographical order or +// in primordial order if f.SortFlags is false, calling fn for each. +// It visits only those flags that have been set. func Visit(fn func(*Flag)) { CommandLine.Visit(fn) } @@ -265,6 +319,22 @@ func (f *FlagSet) Lookup(name string) *Flag { return f.lookup(f.normalizeFlagName(name)) } +// ShorthandLookup returns the Flag structure of the short handed flag, +// returning nil if none exists. +// It panics, if len(name) > 1. +func (f *FlagSet) ShorthandLookup(name string) *Flag { + if name == "" { + return nil + } + if len(name) > 1 { + msg := fmt.Sprintf("can not look up shorthand which is more than one ASCII character: %q", name) + fmt.Fprintf(f.out(), msg) + panic(msg) + } + c := name[0] + return f.shorthands[c] +} + // lookup returns the Flag structure of the named flag, returning nil if none exists. func (f *FlagSet) lookup(name NormalizedName) *Flag { return f.formal[name] @@ -291,6 +361,13 @@ func (f *FlagSet) getFlagType(name string, ftype string, convFunc func(sval stri return result, nil } +// ArgsLenAtDash will return the length of f.Args at the moment when a -- was +// found during arg parsing. This allows your program to know which args were +// before the -- and which came after. +func (f *FlagSet) ArgsLenAtDash() int { + return f.argsLenAtDash +} + // MarkDeprecated indicated that a flag is deprecated in your program. It will // continue to function but will not show up in help or usage messages. Using // this flag will also print the given usageMessage. @@ -299,34 +376,51 @@ func (f *FlagSet) MarkDeprecated(name string, usageMessage string) error { if flag == nil { return fmt.Errorf("flag %q does not exist", name) } - if len(usageMessage) == 0 { + if usageMessage == "" { return fmt.Errorf("deprecated message for flag %q must be set", name) } flag.Deprecated = usageMessage return nil } -// Mark the shorthand of a flag deprecated in your program. It will -// continue to function but will not show up in help or usage messages. Using -// this flag will also print the given usageMessage. +// MarkShorthandDeprecated will mark the shorthand of a flag deprecated in your +// program. It will continue to function but will not show up in help or usage +// messages. Using this flag will also print the given usageMessage. func (f *FlagSet) MarkShorthandDeprecated(name string, usageMessage string) error { flag := f.Lookup(name) if flag == nil { return fmt.Errorf("flag %q does not exist", name) } - if len(usageMessage) == 0 { + if usageMessage == "" { return fmt.Errorf("deprecated message for flag %q must be set", name) } flag.ShorthandDeprecated = usageMessage return nil } +// MarkHidden sets a flag to 'hidden' in your program. It will continue to +// function but will not show up in help or usage messages. +func (f *FlagSet) MarkHidden(name string) error { + flag := f.Lookup(name) + if flag == nil { + return fmt.Errorf("flag %q does not exist", name) + } + flag.Hidden = true + return nil +} + // Lookup returns the Flag structure of the named command-line flag, // returning nil if none exists. func Lookup(name string) *Flag { return CommandLine.Lookup(name) } +// ShorthandLookup returns the Flag structure of the short handed flag, +// returning nil if none exists. +func ShorthandLookup(name string) *Flag { + return CommandLine.ShorthandLookup(name) +} + // Set sets the value of the named flag. func (f *FlagSet) Set(name, value string) error { normalName := f.normalizeFlagName(name) @@ -334,17 +428,28 @@ func (f *FlagSet) Set(name, value string) error { if !ok { return fmt.Errorf("no such flag -%v", name) } + err := flag.Value.Set(value) if err != nil { - return err + var flagName string + if flag.Shorthand != "" && flag.ShorthandDeprecated == "" { + flagName = fmt.Sprintf("-%s, --%s", flag.Shorthand, flag.Name) + } else { + flagName = fmt.Sprintf("--%s", flag.Name) + } + return fmt.Errorf("invalid argument %q for %q flag: %v", value, flagName, err) } + if f.actual == nil { f.actual = make(map[NormalizedName]*Flag) } f.actual[normalName] = flag + f.orderedActual = append(f.orderedActual, flag) + flag.Changed = true - if len(flag.Deprecated) > 0 { - fmt.Fprintf(os.Stderr, "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated) + + if flag.Deprecated != "" { + fmt.Fprintf(f.out(), "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated) } return nil } @@ -385,45 +490,214 @@ func Set(name, value string) error { // otherwise, the default values of all defined flags in the set. func (f *FlagSet) PrintDefaults() { usages := f.FlagUsages() - fmt.Fprintf(f.out(), "%s", usages) + fmt.Fprint(f.out(), usages) } -// FlagUsages Returns a string containing the usage information for all flags in -// the FlagSet -func (f *FlagSet) FlagUsages() string { - x := new(bytes.Buffer) +// defaultIsZeroValue returns true if the default value for this flag represents +// a zero value. +func (f *Flag) defaultIsZeroValue() bool { + switch f.Value.(type) { + case boolFlag: + return f.DefValue == "false" + case *durationValue: + // Beginning in Go 1.7, duration zero values are "0s" + return f.DefValue == "0" || f.DefValue == "0s" + case *intValue, *int8Value, *int32Value, *int64Value, *uintValue, *uint8Value, *uint16Value, *uint32Value, *uint64Value, *countValue, *float32Value, *float64Value: + return f.DefValue == "0" + case *stringValue: + return f.DefValue == "" + case *ipValue, *ipMaskValue, *ipNetValue: + return f.DefValue == "" + case *intSliceValue, *stringSliceValue, *stringArrayValue: + return f.DefValue == "[]" + default: + switch f.Value.String() { + case "false": + return true + case "": + return true + case "": + return true + case "0": + return true + } + return false + } +} +// UnquoteUsage extracts a back-quoted name from the usage +// string for a flag and returns it and the un-quoted usage. +// Given "a `name` to show" it returns ("name", "a name to show"). +// If there are no back quotes, the name is an educated guess of the +// type of the flag's value, or the empty string if the flag is boolean. +func UnquoteUsage(flag *Flag) (name string, usage string) { + // Look for a back-quoted name, but avoid the strings package. + usage = flag.Usage + for i := 0; i < len(usage); i++ { + if usage[i] == '`' { + for j := i + 1; j < len(usage); j++ { + if usage[j] == '`' { + name = usage[i+1 : j] + usage = usage[:i] + name + usage[j+1:] + return name, usage + } + } + break // Only one back quote; use type name. + } + } + + name = flag.Value.Type() + switch name { + case "bool": + name = "" + case "float64": + name = "float" + case "int64": + name = "int" + case "uint64": + name = "uint" + } + + return +} + +// Splits the string `s` on whitespace into an initial substring up to +// `i` runes in length and the remainder. Will go `slop` over `i` if +// that encompasses the entire string (which allows the caller to +// avoid short orphan words on the final line). +func wrapN(i, slop int, s string) (string, string) { + if i+slop > len(s) { + return s, "" + } + + w := strings.LastIndexAny(s[:i], " \t") + if w <= 0 { + return s, "" + } + + return s[:w], s[w+1:] +} + +// Wraps the string `s` to a maximum width `w` with leading indent +// `i`. The first line is not indented (this is assumed to be done by +// caller). Pass `w` == 0 to do no wrapping +func wrap(i, w int, s string) string { + if w == 0 { + return s + } + + // space between indent i and end of line width w into which + // we should wrap the text. + wrap := w - i + + var r, l string + + // Not enough space for sensible wrapping. Wrap as a block on + // the next line instead. + if wrap < 24 { + i = 16 + wrap = w - i + r += "\n" + strings.Repeat(" ", i) + } + // If still not enough space then don't even try to wrap. + if wrap < 24 { + return s + } + + // Try to avoid short orphan words on the final line, by + // allowing wrapN to go a bit over if that would fit in the + // remainder of the line. + slop := 5 + wrap = wrap - slop + + // Handle first line, which is indented by the caller (or the + // special case above) + l, s = wrapN(wrap, slop, s) + r = r + l + + // Now wrap the rest + for s != "" { + var t string + + t, s = wrapN(wrap, slop, s) + r = r + "\n" + strings.Repeat(" ", i) + t + } + + return r + +} + +// FlagUsagesWrapped returns a string containing the usage information +// for all flags in the FlagSet. Wrapped to `cols` columns (0 for no +// wrapping) +func (f *FlagSet) FlagUsagesWrapped(cols int) string { + buf := new(bytes.Buffer) + + lines := make([]string, 0, len(f.formal)) + + maxlen := 0 f.VisitAll(func(flag *Flag) { - if len(flag.Deprecated) > 0 { + if flag.Deprecated != "" || flag.Hidden { return } - format := "" - if len(flag.Shorthand) > 0 && len(flag.ShorthandDeprecated) == 0 { - format = " -%s, --%s" + + line := "" + if flag.Shorthand != "" && flag.ShorthandDeprecated == "" { + line = fmt.Sprintf(" -%s, --%s", flag.Shorthand, flag.Name) } else { - format = " %s --%s" + line = fmt.Sprintf(" --%s", flag.Name) } - if len(flag.NoOptDefVal) > 0 { - format = format + "[" + + varname, usage := UnquoteUsage(flag) + if varname != "" { + line += " " + varname } - if flag.Value.Type() == "string" { - // put quotes on the value - format = format + "=%q" - } else { - format = format + "=%s" + if flag.NoOptDefVal != "" { + switch flag.Value.Type() { + case "string": + line += fmt.Sprintf("[=\"%s\"]", flag.NoOptDefVal) + case "bool": + if flag.NoOptDefVal != "true" { + line += fmt.Sprintf("[=%s]", flag.NoOptDefVal) + } + default: + line += fmt.Sprintf("[=%s]", flag.NoOptDefVal) + } } - if len(flag.NoOptDefVal) > 0 { - format = format + "]" + + // This special character will be replaced with spacing once the + // correct alignment is calculated + line += "\x00" + if len(line) > maxlen { + maxlen = len(line) } - format = format + ": %s\n" - shorthand := flag.Shorthand - if len(flag.ShorthandDeprecated) > 0 { - shorthand = "" + + line += usage + if !flag.defaultIsZeroValue() { + if flag.Value.Type() == "string" { + line += fmt.Sprintf(" (default %q)", flag.DefValue) + } else { + line += fmt.Sprintf(" (default %s)", flag.DefValue) + } } - fmt.Fprintf(x, format, shorthand, flag.Name, flag.DefValue, flag.Usage) + + lines = append(lines, line) }) - return x.String() + for _, line := range lines { + sidx := strings.Index(line, "\x00") + spacing := strings.Repeat(" ", maxlen-sidx) + // maxlen + 2 comes from + 1 for the \x00 and + 1 for the (deliberate) off-by-one in maxlen-sidx + fmt.Fprintln(buf, line[:sidx], spacing, wrap(maxlen+2, cols, line[sidx+1:])) + } + + return buf.String() +} + +// FlagUsages returns a string containing the usage information for all flags in +// the FlagSet +func (f *FlagSet) FlagUsages() string { + return f.FlagUsagesWrapped(0) } // PrintDefaults prints to standard error the default values of all defined command-line flags. @@ -443,6 +717,8 @@ func defaultUsage(f *FlagSet) { // Usage prints to standard error a usage message documenting all defined command-line flags. // The function is a variable that may be changed to point to a custom function. +// By default it prints a simple header and calls PrintDefaults; for details about the +// format of the output and how to control it, see the documentation for PrintDefaults. var Usage = func() { fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) PrintDefaults() @@ -507,16 +783,15 @@ func (f *FlagSet) VarPF(value Value, name, shorthand, usage string) *Flag { // VarP is like Var, but accepts a shorthand letter that can be used after a single dash. func (f *FlagSet) VarP(value Value, name, shorthand, usage string) { - _ = f.VarPF(value, name, shorthand, usage) + f.VarPF(value, name, shorthand, usage) } // AddFlag will add the flag to the FlagSet func (f *FlagSet) AddFlag(flag *Flag) { - // Call normalizeFlagName function only once normalizedFlagName := f.normalizeFlagName(flag.Name) - _, alreadythere := f.formal[normalizedFlagName] - if alreadythere { + _, alreadyThere := f.formal[normalizedFlagName] + if alreadyThere { msg := fmt.Sprintf("%s flag redefined: %s", f.name, flag.Name) fmt.Fprintln(f.out(), msg) panic(msg) // Happens only if flags are declared with identical names @@ -527,28 +802,31 @@ func (f *FlagSet) AddFlag(flag *Flag) { flag.Name = string(normalizedFlagName) f.formal[normalizedFlagName] = flag + f.orderedFormal = append(f.orderedFormal, flag) - if len(flag.Shorthand) == 0 { + if flag.Shorthand == "" { return } if len(flag.Shorthand) > 1 { - fmt.Fprintf(f.out(), "%s shorthand more than ASCII character: %s\n", f.name, flag.Shorthand) - panic("shorthand is more than one character") + msg := fmt.Sprintf("%q shorthand is more than one ASCII character", flag.Shorthand) + fmt.Fprintf(f.out(), msg) + panic(msg) } if f.shorthands == nil { f.shorthands = make(map[byte]*Flag) } c := flag.Shorthand[0] - old, alreadythere := f.shorthands[c] - if alreadythere { - fmt.Fprintf(f.out(), "%s shorthand reused: %q for %s already used for %s\n", f.name, c, flag.Name, old.Name) - panic("shorthand redefinition") + used, alreadyThere := f.shorthands[c] + if alreadyThere { + msg := fmt.Sprintf("unable to redefine %q shorthand in %q flagset: it's already used for %q flag", c, f.name, used.Name) + fmt.Fprintf(f.out(), msg) + panic(msg) } f.shorthands[c] = flag } // AddFlagSet adds one FlagSet to another. If a flag is already present in f -// the flag from newSet will be ignored +// the flag from newSet will be ignored. func (f *FlagSet) AddFlagSet(newSet *FlagSet) { if newSet == nil { return @@ -596,45 +874,18 @@ func (f *FlagSet) usage() { } } -func (f *FlagSet) setFlag(flag *Flag, value string, origArg string) error { - if err := flag.Value.Set(value); err != nil { - return f.failf("invalid argument %q for %s: %v", value, origArg, err) - } - // mark as visited for Visit() - if f.actual == nil { - f.actual = make(map[NormalizedName]*Flag) - } - f.actual[f.normalizeFlagName(flag.Name)] = flag - flag.Changed = true - if len(flag.Deprecated) > 0 { - fmt.Fprintf(os.Stderr, "Flag --%s has been deprecated, %s\n", flag.Name, flag.Deprecated) - } - if len(flag.ShorthandDeprecated) > 0 && containsShorthand(origArg, flag.Shorthand) { - fmt.Fprintf(os.Stderr, "Flag shorthand -%s has been deprecated, %s\n", flag.Shorthand, flag.ShorthandDeprecated) - } - return nil -} - -func containsShorthand(arg, shorthand string) bool { - // filter out flags -- - if strings.HasPrefix(arg, "-") { - return false - } - arg = strings.SplitN(arg, "=", 2)[0] - return strings.Contains(arg, shorthand) -} - -func (f *FlagSet) parseLongArg(s string, args []string) (a []string, err error) { +func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []string, err error) { a = args name := s[2:] if len(name) == 0 || name[0] == '-' || name[0] == '=' { err = f.failf("bad flag syntax: %s", s) return } + split := strings.SplitN(name, "=", 2) name = split[0] - flag, alreadythere := f.formal[f.normalizeFlagName(name)] - if !alreadythere { + flag, exists := f.formal[f.normalizeFlagName(name)] + if !exists { if name == "help" { // special case for nice help message. f.usage() return a, ErrHelp @@ -642,11 +893,12 @@ func (f *FlagSet) parseLongArg(s string, args []string) (a []string, err error) err = f.failf("unknown flag: --%s", name) return } + var value string if len(split) == 2 { // '--flag=arg' value = split[1] - } else if len(flag.NoOptDefVal) > 0 { + } else if flag.NoOptDefVal != "" { // '--flag' (arg was optional) value = flag.NoOptDefVal } else if len(a) > 0 { @@ -658,52 +910,68 @@ func (f *FlagSet) parseLongArg(s string, args []string) (a []string, err error) err = f.failf("flag needs an argument: %s", s) return } - err = f.setFlag(flag, value, s) + + err = fn(flag, value) return } -func (f *FlagSet) parseSingleShortArg(shorthands string, args []string) (outShorts string, outArgs []string, err error) { +func (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parseFunc) (outShorts string, outArgs []string, err error) { + if strings.HasPrefix(shorthands, "test.") { + return + } + outArgs = args outShorts = shorthands[1:] c := shorthands[0] - flag, alreadythere := f.shorthands[c] - if !alreadythere { + flag, exists := f.shorthands[c] + if !exists { if c == 'h' { // special case for nice help message. f.usage() err = ErrHelp return } - //TODO continue on error err = f.failf("unknown shorthand flag: %q in -%s", c, shorthands) return } + var value string if len(shorthands) > 2 && shorthands[1] == '=' { + // '-f=arg' value = shorthands[2:] outShorts = "" - } else if len(flag.NoOptDefVal) > 0 { + } else if flag.NoOptDefVal != "" { + // '-f' (arg was optional) value = flag.NoOptDefVal } else if len(shorthands) > 1 { + // '-farg' value = shorthands[1:] outShorts = "" } else if len(args) > 0 { + // '-f arg' value = args[0] outArgs = args[1:] } else { + // '-f' (arg was required) err = f.failf("flag needs an argument: %q in -%s", c, shorthands) return } - err = f.setFlag(flag, value, shorthands) + + if flag.ShorthandDeprecated != "" { + fmt.Fprintf(f.out(), "Flag shorthand -%s has been deprecated, %s\n", flag.Shorthand, flag.ShorthandDeprecated) + } + + err = fn(flag, value) return } -func (f *FlagSet) parseShortArg(s string, args []string) (a []string, err error) { +func (f *FlagSet) parseShortArg(s string, args []string, fn parseFunc) (a []string, err error) { a = args shorthands := s[1:] + // "shorthands" can be a series of shorthand letters of flags (e.g. "-vvv"). for len(shorthands) > 0 { - shorthands, a, err = f.parseSingleShortArg(shorthands, args) + shorthands, a, err = f.parseSingleShortArg(shorthands, args, fn) if err != nil { return } @@ -712,7 +980,7 @@ func (f *FlagSet) parseShortArg(s string, args []string) (a []string, err error) return } -func (f *FlagSet) parseArgs(args []string) (err error) { +func (f *FlagSet) parseArgs(args []string, fn parseFunc) (err error) { for len(args) > 0 { s := args[0] args = args[1:] @@ -728,12 +996,13 @@ func (f *FlagSet) parseArgs(args []string) (err error) { if s[1] == '-' { if len(s) == 2 { // "--" terminates the flags + f.argsLenAtDash = len(f.args) f.args = append(f.args, args...) break } - args, err = f.parseLongArg(s, args) + args, err = f.parseLongArg(s, args, fn) } else { - args, err = f.parseShortArg(s, args) + args, err = f.parseShortArg(s, args, fn) } if err != nil { return @@ -748,8 +1017,43 @@ func (f *FlagSet) parseArgs(args []string) (err error) { // The return value will be ErrHelp if -help was set but not defined. func (f *FlagSet) Parse(arguments []string) error { f.parsed = true + + if len(arguments) < 0 { + return nil + } + f.args = make([]string, 0, len(arguments)) - err := f.parseArgs(arguments) + + set := func(flag *Flag, value string) error { + return f.Set(flag.Name, value) + } + + err := f.parseArgs(arguments, set) + if err != nil { + switch f.errorHandling { + case ContinueOnError: + return err + case ExitOnError: + os.Exit(2) + case PanicOnError: + panic(err) + } + } + return nil +} + +type parseFunc func(flag *Flag, value string) error + +// ParseAll parses flag definitions from the argument list, which should not +// include the command name. The arguments for fn are flag and value. Must be +// called after all flags in the FlagSet are defined and before flags are +// accessed by the program. The return value will be ErrHelp if -help was set +// but not defined. +func (f *FlagSet) ParseAll(arguments []string, fn func(flag *Flag, value string) error) error { + f.parsed = true + f.args = make([]string, 0, len(arguments)) + + err := f.parseArgs(arguments, fn) if err != nil { switch f.errorHandling { case ContinueOnError: @@ -775,6 +1079,14 @@ func Parse() { CommandLine.Parse(os.Args[1:]) } +// ParseAll parses the command-line flags from os.Args[1:] and called fn for each. +// The arguments for fn are flag and value. Must be called after all flags are +// defined and before flags are accessed by the program. +func ParseAll(fn func(flag *Flag, value string) error) { + // Ignore errors; CommandLine is set for ExitOnError. + CommandLine.ParseAll(os.Args[1:], fn) +} + // SetInterspersed sets whether to support interspersed option/non-option arguments. func SetInterspersed(interspersed bool) { CommandLine.SetInterspersed(interspersed) @@ -785,21 +1097,23 @@ func Parsed() bool { return CommandLine.Parsed() } -// The default set of command-line flags, parsed from os.Args. +// CommandLine is the default set of command-line flags, parsed from os.Args. var CommandLine = NewFlagSet(os.Args[0], ExitOnError) -// NewFlagSet returns a new, empty flag set with the specified name and -// error handling property. +// NewFlagSet returns a new, empty flag set with the specified name, +// error handling property and SortFlags set to true. func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet { f := &FlagSet{ name: name, errorHandling: errorHandling, + argsLenAtDash: -1, interspersed: true, + SortFlags: true, } return f } -// SetIntersperesed sets whether to support interspersed option/non-option arguments. +// SetInterspersed sets whether to support interspersed option/non-option arguments. func (f *FlagSet) SetInterspersed(interspersed bool) { f.interspersed = interspersed } @@ -810,4 +1124,5 @@ func (f *FlagSet) SetInterspersed(interspersed bool) { func (f *FlagSet) Init(name string, errorHandling ErrorHandling) { f.name = name f.errorHandling = errorHandling + f.argsLenAtDash = -1 } diff --git a/vendor/github.com/spf13/pflag/flag_test.go b/vendor/github.com/spf13/pflag/flag_test.go index 165f689..c3def0f 100644 --- a/vendor/github.com/spf13/pflag/flag_test.go +++ b/vendor/github.com/spf13/pflag/flag_test.go @@ -13,6 +13,7 @@ import ( "os" "reflect" "sort" + "strconv" "strings" "testing" "time" @@ -332,6 +333,59 @@ func testParse(f *FlagSet, t *testing.T) { } } +func testParseAll(f *FlagSet, t *testing.T) { + if f.Parsed() { + t.Error("f.Parse() = true before Parse") + } + f.BoolP("boola", "a", false, "bool value") + f.BoolP("boolb", "b", false, "bool2 value") + f.BoolP("boolc", "c", false, "bool3 value") + f.BoolP("boold", "d", false, "bool4 value") + f.StringP("stringa", "s", "0", "string value") + f.StringP("stringz", "z", "0", "string value") + f.StringP("stringx", "x", "0", "string value") + f.StringP("stringy", "y", "0", "string value") + f.Lookup("stringx").NoOptDefVal = "1" + args := []string{ + "-ab", + "-cs=xx", + "--stringz=something", + "-d=true", + "-x", + "-y", + "ee", + } + want := []string{ + "boola", "true", + "boolb", "true", + "boolc", "true", + "stringa", "xx", + "stringz", "something", + "boold", "true", + "stringx", "1", + "stringy", "ee", + } + got := []string{} + store := func(flag *Flag, value string) error { + got = append(got, flag.Name) + if len(value) > 0 { + got = append(got, value) + } + return nil + } + if err := f.ParseAll(args, store); err != nil { + t.Errorf("expected no error, got %s", err) + } + if !f.Parsed() { + t.Errorf("f.Parse() = false after Parse") + } + if !reflect.DeepEqual(got, want) { + t.Errorf("f.ParseAll() fail to restore the args") + t.Errorf("Got: %v", got) + t.Errorf("Want: %v", want) + } +} + func TestShorthand(t *testing.T) { f := NewFlagSet("shorthand", ContinueOnError) if f.Parsed() { @@ -387,6 +441,45 @@ func TestShorthand(t *testing.T) { } else if f.Args()[1] != notaflag { t.Errorf("expected argument %q got %q", notaflag, f.Args()[1]) } + if f.ArgsLenAtDash() != 1 { + t.Errorf("expected argsLenAtDash %d got %d", f.ArgsLenAtDash(), 1) + } +} + +func TestShorthandLookup(t *testing.T) { + f := NewFlagSet("shorthand", ContinueOnError) + if f.Parsed() { + t.Error("f.Parse() = true before Parse") + } + f.BoolP("boola", "a", false, "bool value") + f.BoolP("boolb", "b", false, "bool2 value") + args := []string{ + "-ab", + } + f.SetOutput(ioutil.Discard) + if err := f.Parse(args); err != nil { + t.Error("expected no error, got ", err) + } + if !f.Parsed() { + t.Error("f.Parse() = false after Parse") + } + flag := f.ShorthandLookup("a") + if flag == nil { + t.Errorf("f.ShorthandLookup(\"a\") returned nil") + } + if flag.Name != "boola" { + t.Errorf("f.ShorthandLookup(\"a\") found %q instead of \"boola\"", flag.Name) + } + flag = f.ShorthandLookup("") + if flag != nil { + t.Errorf("f.ShorthandLookup(\"\") did not return nil") + } + defer func() { + recover() + }() + flag = f.ShorthandLookup("ab") + // should NEVER get here. lookup should panic. defer'd func should recover it. + t.Errorf("f.ShorthandLookup(\"ab\") did not panic") } func TestParse(t *testing.T) { @@ -394,16 +487,21 @@ func TestParse(t *testing.T) { testParse(GetCommandLine(), t) } +func TestParseAll(t *testing.T) { + ResetForTesting(func() { t.Error("bad parse") }) + testParseAll(GetCommandLine(), t) +} + func TestFlagSetParse(t *testing.T) { testParse(NewFlagSet("test", ContinueOnError), t) } func TestChangedHelper(t *testing.T) { f := NewFlagSet("changedtest", ContinueOnError) - _ = f.Bool("changed", false, "changed bool") - _ = f.Bool("settrue", true, "true to true") - _ = f.Bool("setfalse", false, "false to false") - _ = f.Bool("unchanged", false, "unchanged bool") + f.Bool("changed", false, "changed bool") + f.Bool("settrue", true, "true to true") + f.Bool("setfalse", false, "false to false") + f.Bool("unchanged", false, "unchanged bool") args := []string{"--changed", "--settrue", "--setfalse=false"} if err := f.Parse(args); err != nil { @@ -424,6 +522,9 @@ func TestChangedHelper(t *testing.T) { if f.Changed("invalid") { t.Errorf("--invalid was changed!") } + if f.ArgsLenAtDash() != -1 { + t.Errorf("Expected argsLenAtDash: %d but got %d", -1, f.ArgsLenAtDash()) + } } func replaceSeparators(name string, from []string, to string) string { @@ -713,6 +814,9 @@ func TestTermination(t *testing.T) { if f.Args()[1] != arg2 { t.Errorf("expected argument %q got %q", arg2, f.Args()[1]) } + if f.ArgsLenAtDash() != 0 { + t.Errorf("expected argsLenAtDash %d got %d", 0, f.ArgsLenAtDash()) + } } func TestDeprecatedFlagInDocs(t *testing.T) { @@ -831,3 +935,151 @@ func TestMultipleNormalizeFlagNameInvocations(t *testing.T) { t.Fatal("Expected normalizeFlagNameInvocations to be 1; got ", normalizeFlagNameInvocations) } } + +// +func TestHiddenFlagInUsage(t *testing.T) { + f := NewFlagSet("bob", ContinueOnError) + f.Bool("secretFlag", true, "shhh") + f.MarkHidden("secretFlag") + + out := new(bytes.Buffer) + f.SetOutput(out) + f.PrintDefaults() + + if strings.Contains(out.String(), "secretFlag") { + t.Errorf("found hidden flag in usage!") + } +} + +// +func TestHiddenFlagUsage(t *testing.T) { + f := NewFlagSet("bob", ContinueOnError) + f.Bool("secretFlag", true, "shhh") + f.MarkHidden("secretFlag") + + args := []string{"--secretFlag"} + out, err := parseReturnStderr(t, f, args) + if err != nil { + t.Fatal("expected no error; got ", err) + } + + if strings.Contains(out, "shhh") { + t.Errorf("usage message printed when using a hidden flag!") + } +} + +const defaultOutput = ` --A for bootstrapping, allow 'any' type + --Alongflagname disable bounds checking + -C, --CCC a boolean defaulting to true (default true) + --D path set relative path for local imports + -E, --EEE num[=1234] a num with NoOptDefVal (default 4321) + --F number a non-zero number (default 2.7) + --G float a float that defaults to zero + --IP ip IP address with no default + --IPMask ipMask Netmask address with no default + --IPNet ipNet IP network with no default + --Ints intSlice int slice with zero default + --N int a non-zero int (default 27) + --ND1 string[="bar"] a string with NoOptDefVal (default "foo") + --ND2 num[=4321] a num with NoOptDefVal (default 1234) + --StringArray stringArray string array with zero default + --StringSlice stringSlice string slice with zero default + --Z int an int that defaults to zero + --custom custom custom Value implementation + --customP custom a VarP with default (default 10) + --maxT timeout set timeout for dial +` + +// Custom value that satisfies the Value interface. +type customValue int + +func (cv *customValue) String() string { return fmt.Sprintf("%v", *cv) } + +func (cv *customValue) Set(s string) error { + v, err := strconv.ParseInt(s, 0, 64) + *cv = customValue(v) + return err +} + +func (cv *customValue) Type() string { return "custom" } + +func TestPrintDefaults(t *testing.T) { + fs := NewFlagSet("print defaults test", ContinueOnError) + var buf bytes.Buffer + fs.SetOutput(&buf) + fs.Bool("A", false, "for bootstrapping, allow 'any' type") + fs.Bool("Alongflagname", false, "disable bounds checking") + fs.BoolP("CCC", "C", true, "a boolean defaulting to true") + fs.String("D", "", "set relative `path` for local imports") + fs.Float64("F", 2.7, "a non-zero `number`") + fs.Float64("G", 0, "a float that defaults to zero") + fs.Int("N", 27, "a non-zero int") + fs.IntSlice("Ints", []int{}, "int slice with zero default") + fs.IP("IP", nil, "IP address with no default") + fs.IPMask("IPMask", nil, "Netmask address with no default") + fs.IPNet("IPNet", net.IPNet{}, "IP network with no default") + fs.Int("Z", 0, "an int that defaults to zero") + fs.Duration("maxT", 0, "set `timeout` for dial") + fs.String("ND1", "foo", "a string with NoOptDefVal") + fs.Lookup("ND1").NoOptDefVal = "bar" + fs.Int("ND2", 1234, "a `num` with NoOptDefVal") + fs.Lookup("ND2").NoOptDefVal = "4321" + fs.IntP("EEE", "E", 4321, "a `num` with NoOptDefVal") + fs.ShorthandLookup("E").NoOptDefVal = "1234" + fs.StringSlice("StringSlice", []string{}, "string slice with zero default") + fs.StringArray("StringArray", []string{}, "string array with zero default") + + var cv customValue + fs.Var(&cv, "custom", "custom Value implementation") + + cv2 := customValue(10) + fs.VarP(&cv2, "customP", "", "a VarP with default") + + fs.PrintDefaults() + got := buf.String() + if got != defaultOutput { + fmt.Println("\n" + got) + fmt.Println("\n" + defaultOutput) + t.Errorf("got %q want %q\n", got, defaultOutput) + } +} + +func TestVisitAllFlagOrder(t *testing.T) { + fs := NewFlagSet("TestVisitAllFlagOrder", ContinueOnError) + fs.SortFlags = false + // https://github.com/spf13/pflag/issues/120 + fs.SetNormalizeFunc(func(f *FlagSet, name string) NormalizedName { + return NormalizedName(name) + }) + + names := []string{"C", "B", "A", "D"} + for _, name := range names { + fs.Bool(name, false, "") + } + + i := 0 + fs.VisitAll(func(f *Flag) { + if names[i] != f.Name { + t.Errorf("Incorrect order. Expected %v, got %v", names[i], f.Name) + } + i++ + }) +} + +func TestVisitFlagOrder(t *testing.T) { + fs := NewFlagSet("TestVisitFlagOrder", ContinueOnError) + fs.SortFlags = false + names := []string{"C", "B", "A", "D"} + for _, name := range names { + fs.Bool(name, false, "") + fs.Set(name, "true") + } + + i := 0 + fs.Visit(func(f *Flag) { + if names[i] != f.Name { + t.Errorf("Incorrect order. Expected %v, got %v", names[i], f.Name) + } + i++ + }) +} diff --git a/vendor/github.com/spf13/pflag/float32.go b/vendor/github.com/spf13/pflag/float32.go index 7683fae..a243f81 100644 --- a/vendor/github.com/spf13/pflag/float32.go +++ b/vendor/github.com/spf13/pflag/float32.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- float32 Value type float32Value float32 @@ -23,7 +20,7 @@ func (f *float32Value) Type() string { return "float32" } -func (f *float32Value) String() string { return fmt.Sprintf("%v", *f) } +func (f *float32Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 32) } func float32Conv(sval string) (interface{}, error) { v, err := strconv.ParseFloat(sval, 32) diff --git a/vendor/github.com/spf13/pflag/float64.go b/vendor/github.com/spf13/pflag/float64.go index 50fbf8c..04b5492 100644 --- a/vendor/github.com/spf13/pflag/float64.go +++ b/vendor/github.com/spf13/pflag/float64.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- float64 Value type float64Value float64 @@ -23,7 +20,7 @@ func (f *float64Value) Type() string { return "float64" } -func (f *float64Value) String() string { return fmt.Sprintf("%v", *f) } +func (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) } func float64Conv(sval string) (interface{}, error) { return strconv.ParseFloat(sval, 64) diff --git a/vendor/github.com/spf13/pflag/golangflag.go b/vendor/github.com/spf13/pflag/golangflag.go index 5213dc3..c4f47eb 100644 --- a/vendor/github.com/spf13/pflag/golangflag.go +++ b/vendor/github.com/spf13/pflag/golangflag.go @@ -6,13 +6,10 @@ package pflag import ( goflag "flag" - "fmt" "reflect" "strings" ) -var _ = fmt.Print - // flagValueWrapper implements pflag.Value around a flag.Value. The main // difference here is the addition of the Type method that returns a string // name of the type. As this is generally unknown, we approximate that with @@ -60,6 +57,10 @@ func (v *flagValueWrapper) Type() string { return v.flagType } +// PFlagFromGoFlag will return a *pflag.Flag given a *flag.Flag +// If the *flag.Flag.Name was a single character (ex: `v`) it will be accessiblei +// with both `-v` and `--v` in flags. If the golang flag was more than a single +// character (ex: `verbose`) it will only be accessible via `--verbose` func PFlagFromGoFlag(goflag *goflag.Flag) *Flag { // Remember the default value as a string; it won't change. flag := &Flag{ @@ -70,12 +71,17 @@ func PFlagFromGoFlag(goflag *goflag.Flag) *Flag { //DefValue: goflag.DefValue, DefValue: goflag.Value.String(), } + // Ex: if the golang flag was -v, allow both -v and --v to work + if len(flag.Name) == 1 { + flag.Shorthand = flag.Name + } if fv, ok := goflag.Value.(goBoolFlag); ok && fv.IsBoolFlag() { flag.NoOptDefVal = "true" } return flag } +// AddGoFlag will add the given *flag.Flag to the pflag.FlagSet func (f *FlagSet) AddGoFlag(goflag *goflag.Flag) { if f.Lookup(goflag.Name) != nil { return @@ -84,6 +90,7 @@ func (f *FlagSet) AddGoFlag(goflag *goflag.Flag) { f.AddFlag(newflag) } +// AddGoFlagSet will add the given *flag.FlagSet to the pflag.FlagSet func (f *FlagSet) AddGoFlagSet(newSet *goflag.FlagSet) { if newSet == nil { return diff --git a/vendor/github.com/spf13/pflag/int.go b/vendor/github.com/spf13/pflag/int.go index b656036..1474b89 100644 --- a/vendor/github.com/spf13/pflag/int.go +++ b/vendor/github.com/spf13/pflag/int.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- int Value type intValue int @@ -23,7 +20,7 @@ func (i *intValue) Type() string { return "int" } -func (i *intValue) String() string { return fmt.Sprintf("%v", *i) } +func (i *intValue) String() string { return strconv.Itoa(int(*i)) } func intConv(sval string) (interface{}, error) { return strconv.Atoi(sval) diff --git a/vendor/github.com/spf13/pflag/int32.go b/vendor/github.com/spf13/pflag/int32.go index 41659a9..9b95944 100644 --- a/vendor/github.com/spf13/pflag/int32.go +++ b/vendor/github.com/spf13/pflag/int32.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- int32 Value type int32Value int32 @@ -23,7 +20,7 @@ func (i *int32Value) Type() string { return "int32" } -func (i *int32Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *int32Value) String() string { return strconv.FormatInt(int64(*i), 10) } func int32Conv(sval string) (interface{}, error) { v, err := strconv.ParseInt(sval, 0, 32) diff --git a/vendor/github.com/spf13/pflag/int64.go b/vendor/github.com/spf13/pflag/int64.go index 6e67e38..0026d78 100644 --- a/vendor/github.com/spf13/pflag/int64.go +++ b/vendor/github.com/spf13/pflag/int64.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- int64 Value type int64Value int64 @@ -23,7 +20,7 @@ func (i *int64Value) Type() string { return "int64" } -func (i *int64Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) } func int64Conv(sval string) (interface{}, error) { return strconv.ParseInt(sval, 0, 64) diff --git a/vendor/github.com/spf13/pflag/int8.go b/vendor/github.com/spf13/pflag/int8.go index 400db21..4da9222 100644 --- a/vendor/github.com/spf13/pflag/int8.go +++ b/vendor/github.com/spf13/pflag/int8.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- int8 Value type int8Value int8 @@ -23,7 +20,7 @@ func (i *int8Value) Type() string { return "int8" } -func (i *int8Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *int8Value) String() string { return strconv.FormatInt(int64(*i), 10) } func int8Conv(sval string) (interface{}, error) { v, err := strconv.ParseInt(sval, 0, 8) diff --git a/vendor/github.com/spf13/pflag/int_slice_test.go b/vendor/github.com/spf13/pflag/int_slice_test.go index 5f2eee6..745aecb 100644 --- a/vendor/github.com/spf13/pflag/int_slice_test.go +++ b/vendor/github.com/spf13/pflag/int_slice_test.go @@ -60,6 +60,9 @@ func TestIS(t *testing.T) { } } getIS, err := f.GetIntSlice("is") + if err != nil { + t.Fatalf("got error: %v", err) + } for i, v := range getIS { d, err := strconv.Atoi(vals[i]) if err != nil { diff --git a/vendor/github.com/spf13/pflag/ip.go b/vendor/github.com/spf13/pflag/ip.go index 88a1743..3d414ba 100644 --- a/vendor/github.com/spf13/pflag/ip.go +++ b/vendor/github.com/spf13/pflag/ip.go @@ -6,8 +6,6 @@ import ( "strings" ) -var _ = strings.TrimSpace - // -- net.IP value type ipValue net.IP diff --git a/vendor/github.com/spf13/pflag/ip_slice.go b/vendor/github.com/spf13/pflag/ip_slice.go new file mode 100644 index 0000000..7dd196f --- /dev/null +++ b/vendor/github.com/spf13/pflag/ip_slice.go @@ -0,0 +1,148 @@ +package pflag + +import ( + "fmt" + "io" + "net" + "strings" +) + +// -- ipSlice Value +type ipSliceValue struct { + value *[]net.IP + changed bool +} + +func newIPSliceValue(val []net.IP, p *[]net.IP) *ipSliceValue { + ipsv := new(ipSliceValue) + ipsv.value = p + *ipsv.value = val + return ipsv +} + +// Set converts, and assigns, the comma-separated IP argument string representation as the []net.IP value of this flag. +// If Set is called on a flag that already has a []net.IP assigned, the newly converted values will be appended. +func (s *ipSliceValue) Set(val string) error { + + // remove all quote characters + rmQuote := strings.NewReplacer(`"`, "", `'`, "", "`", "") + + // read flag arguments with CSV parser + ipStrSlice, err := readAsCSV(rmQuote.Replace(val)) + if err != nil && err != io.EOF { + return err + } + + // parse ip values into slice + out := make([]net.IP, 0, len(ipStrSlice)) + for _, ipStr := range ipStrSlice { + ip := net.ParseIP(strings.TrimSpace(ipStr)) + if ip == nil { + return fmt.Errorf("invalid string being converted to IP address: %s", ipStr) + } + out = append(out, ip) + } + + if !s.changed { + *s.value = out + } else { + *s.value = append(*s.value, out...) + } + + s.changed = true + + return nil +} + +// Type returns a string that uniquely represents this flag's type. +func (s *ipSliceValue) Type() string { + return "ipSlice" +} + +// String defines a "native" format for this net.IP slice flag value. +func (s *ipSliceValue) String() string { + + ipStrSlice := make([]string, len(*s.value)) + for i, ip := range *s.value { + ipStrSlice[i] = ip.String() + } + + out, _ := writeAsCSV(ipStrSlice) + + return "[" + out + "]" +} + +func ipSliceConv(val string) (interface{}, error) { + val = strings.Trim(val, "[]") + // Emtpy string would cause a slice with one (empty) entry + if len(val) == 0 { + return []net.IP{}, nil + } + ss := strings.Split(val, ",") + out := make([]net.IP, len(ss)) + for i, sval := range ss { + ip := net.ParseIP(strings.TrimSpace(sval)) + if ip == nil { + return nil, fmt.Errorf("invalid string being converted to IP address: %s", sval) + } + out[i] = ip + } + return out, nil +} + +// GetIPSlice returns the []net.IP value of a flag with the given name +func (f *FlagSet) GetIPSlice(name string) ([]net.IP, error) { + val, err := f.getFlagType(name, "ipSlice", ipSliceConv) + if err != nil { + return []net.IP{}, err + } + return val.([]net.IP), nil +} + +// IPSliceVar defines a ipSlice flag with specified name, default value, and usage string. +// The argument p points to a []net.IP variable in which to store the value of the flag. +func (f *FlagSet) IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) { + f.VarP(newIPSliceValue(value, p), name, "", usage) +} + +// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) { + f.VarP(newIPSliceValue(value, p), name, shorthand, usage) +} + +// IPSliceVar defines a []net.IP flag with specified name, default value, and usage string. +// The argument p points to a []net.IP variable in which to store the value of the flag. +func IPSliceVar(p *[]net.IP, name string, value []net.IP, usage string) { + CommandLine.VarP(newIPSliceValue(value, p), name, "", usage) +} + +// IPSliceVarP is like IPSliceVar, but accepts a shorthand letter that can be used after a single dash. +func IPSliceVarP(p *[]net.IP, name, shorthand string, value []net.IP, usage string) { + CommandLine.VarP(newIPSliceValue(value, p), name, shorthand, usage) +} + +// IPSlice defines a []net.IP flag with specified name, default value, and usage string. +// The return value is the address of a []net.IP variable that stores the value of that flag. +func (f *FlagSet) IPSlice(name string, value []net.IP, usage string) *[]net.IP { + p := []net.IP{} + f.IPSliceVarP(&p, name, "", value, usage) + return &p +} + +// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP { + p := []net.IP{} + f.IPSliceVarP(&p, name, shorthand, value, usage) + return &p +} + +// IPSlice defines a []net.IP flag with specified name, default value, and usage string. +// The return value is the address of a []net.IP variable that stores the value of the flag. +func IPSlice(name string, value []net.IP, usage string) *[]net.IP { + return CommandLine.IPSliceP(name, "", value, usage) +} + +// IPSliceP is like IPSlice, but accepts a shorthand letter that can be used after a single dash. +func IPSliceP(name, shorthand string, value []net.IP, usage string) *[]net.IP { + return CommandLine.IPSliceP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/spf13/pflag/ip_slice_test.go b/vendor/github.com/spf13/pflag/ip_slice_test.go new file mode 100644 index 0000000..b0c681c --- /dev/null +++ b/vendor/github.com/spf13/pflag/ip_slice_test.go @@ -0,0 +1,222 @@ +package pflag + +import ( + "fmt" + "net" + "strings" + "testing" +) + +func setUpIPSFlagSet(ipsp *[]net.IP) *FlagSet { + f := NewFlagSet("test", ContinueOnError) + f.IPSliceVar(ipsp, "ips", []net.IP{}, "Command separated list!") + return f +} + +func setUpIPSFlagSetWithDefault(ipsp *[]net.IP) *FlagSet { + f := NewFlagSet("test", ContinueOnError) + f.IPSliceVar(ipsp, "ips", + []net.IP{ + net.ParseIP("192.168.1.1"), + net.ParseIP("0:0:0:0:0:0:0:1"), + }, + "Command separated list!") + return f +} + +func TestEmptyIP(t *testing.T) { + var ips []net.IP + f := setUpIPSFlagSet(&ips) + err := f.Parse([]string{}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + getIPS, err := f.GetIPSlice("ips") + if err != nil { + t.Fatal("got an error from GetIPSlice():", err) + } + if len(getIPS) != 0 { + t.Fatalf("got ips %v with len=%d but expected length=0", getIPS, len(getIPS)) + } +} + +func TestIPS(t *testing.T) { + var ips []net.IP + f := setUpIPSFlagSet(&ips) + + vals := []string{"192.168.1.1", "10.0.0.1", "0:0:0:0:0:0:0:2"} + arg := fmt.Sprintf("--ips=%s", strings.Join(vals, ",")) + err := f.Parse([]string{arg}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range ips { + if ip := net.ParseIP(vals[i]); ip == nil { + t.Fatalf("invalid string being converted to IP address: %s", vals[i]) + } else if !ip.Equal(v) { + t.Fatalf("expected ips[%d] to be %s but got: %s from GetIPSlice", i, vals[i], v) + } + } +} + +func TestIPSDefault(t *testing.T) { + var ips []net.IP + f := setUpIPSFlagSetWithDefault(&ips) + + vals := []string{"192.168.1.1", "0:0:0:0:0:0:0:1"} + err := f.Parse([]string{}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range ips { + if ip := net.ParseIP(vals[i]); ip == nil { + t.Fatalf("invalid string being converted to IP address: %s", vals[i]) + } else if !ip.Equal(v) { + t.Fatalf("expected ips[%d] to be %s but got: %s", i, vals[i], v) + } + } + + getIPS, err := f.GetIPSlice("ips") + if err != nil { + t.Fatal("got an error from GetIPSlice") + } + for i, v := range getIPS { + if ip := net.ParseIP(vals[i]); ip == nil { + t.Fatalf("invalid string being converted to IP address: %s", vals[i]) + } else if !ip.Equal(v) { + t.Fatalf("expected ips[%d] to be %s but got: %s", i, vals[i], v) + } + } +} + +func TestIPSWithDefault(t *testing.T) { + var ips []net.IP + f := setUpIPSFlagSetWithDefault(&ips) + + vals := []string{"192.168.1.1", "0:0:0:0:0:0:0:1"} + arg := fmt.Sprintf("--ips=%s", strings.Join(vals, ",")) + err := f.Parse([]string{arg}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range ips { + if ip := net.ParseIP(vals[i]); ip == nil { + t.Fatalf("invalid string being converted to IP address: %s", vals[i]) + } else if !ip.Equal(v) { + t.Fatalf("expected ips[%d] to be %s but got: %s", i, vals[i], v) + } + } + + getIPS, err := f.GetIPSlice("ips") + if err != nil { + t.Fatal("got an error from GetIPSlice") + } + for i, v := range getIPS { + if ip := net.ParseIP(vals[i]); ip == nil { + t.Fatalf("invalid string being converted to IP address: %s", vals[i]) + } else if !ip.Equal(v) { + t.Fatalf("expected ips[%d] to be %s but got: %s", i, vals[i], v) + } + } +} + +func TestIPSCalledTwice(t *testing.T) { + var ips []net.IP + f := setUpIPSFlagSet(&ips) + + in := []string{"192.168.1.2,0:0:0:0:0:0:0:1", "10.0.0.1"} + expected := []net.IP{net.ParseIP("192.168.1.2"), net.ParseIP("0:0:0:0:0:0:0:1"), net.ParseIP("10.0.0.1")} + argfmt := "ips=%s" + arg1 := fmt.Sprintf(argfmt, in[0]) + arg2 := fmt.Sprintf(argfmt, in[1]) + err := f.Parse([]string{arg1, arg2}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range ips { + if !expected[i].Equal(v) { + t.Fatalf("expected ips[%d] to be %s but got: %s", i, expected[i], v) + } + } +} + +func TestIPSBadQuoting(t *testing.T) { + + tests := []struct { + Want []net.IP + FlagArg []string + }{ + { + Want: []net.IP{ + net.ParseIP("a4ab:61d:f03e:5d7d:fad7:d4c2:a1a5:568"), + net.ParseIP("203.107.49.208"), + net.ParseIP("14.57.204.90"), + }, + FlagArg: []string{ + "a4ab:61d:f03e:5d7d:fad7:d4c2:a1a5:568", + "203.107.49.208", + "14.57.204.90", + }, + }, + { + Want: []net.IP{ + net.ParseIP("204.228.73.195"), + net.ParseIP("86.141.15.94"), + }, + FlagArg: []string{ + "204.228.73.195", + "86.141.15.94", + }, + }, + { + Want: []net.IP{ + net.ParseIP("c70c:db36:3001:890f:c6ea:3f9b:7a39:cc3f"), + net.ParseIP("4d17:1d6e:e699:bd7a:88c5:5e7e:ac6a:4472"), + }, + FlagArg: []string{ + "c70c:db36:3001:890f:c6ea:3f9b:7a39:cc3f", + "4d17:1d6e:e699:bd7a:88c5:5e7e:ac6a:4472", + }, + }, + { + Want: []net.IP{ + net.ParseIP("5170:f971:cfac:7be3:512a:af37:952c:bc33"), + net.ParseIP("93.21.145.140"), + net.ParseIP("2cac:61d3:c5ff:6caf:73e0:1b1a:c336:c1ca"), + }, + FlagArg: []string{ + " 5170:f971:cfac:7be3:512a:af37:952c:bc33 , 93.21.145.140 ", + "2cac:61d3:c5ff:6caf:73e0:1b1a:c336:c1ca", + }, + }, + { + Want: []net.IP{ + net.ParseIP("2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"), + net.ParseIP("2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"), + net.ParseIP("2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"), + net.ParseIP("2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"), + }, + FlagArg: []string{ + `"2e5e:66b2:6441:848:5b74:76ea:574c:3a7b, 2e5e:66b2:6441:848:5b74:76ea:574c:3a7b,2e5e:66b2:6441:848:5b74:76ea:574c:3a7b "`, + " 2e5e:66b2:6441:848:5b74:76ea:574c:3a7b"}, + }, + } + + for i, test := range tests { + + var ips []net.IP + f := setUpIPSFlagSet(&ips) + + if err := f.Parse([]string{fmt.Sprintf("--ips=%s", strings.Join(test.FlagArg, ","))}); err != nil { + t.Fatalf("flag parsing failed with error: %s\nparsing:\t%#v\nwant:\t\t%s", + err, test.FlagArg, test.Want[i]) + } + + for j, b := range ips { + if !b.Equal(test.Want[j]) { + t.Fatalf("bad value parsed for test %d on net.IP %d:\nwant:\t%s\ngot:\t%s", i, j, test.Want[j], b) + } + } + } +} diff --git a/vendor/github.com/spf13/pflag/ipnet.go b/vendor/github.com/spf13/pflag/ipnet.go index 149b764..e2c1b8b 100644 --- a/vendor/github.com/spf13/pflag/ipnet.go +++ b/vendor/github.com/spf13/pflag/ipnet.go @@ -27,8 +27,6 @@ func (*ipNetValue) Type() string { return "ipNet" } -var _ = strings.TrimSpace - func newIPNetValue(val net.IPNet, p *net.IPNet) *ipNetValue { *p = val return (*ipNetValue)(p) diff --git a/vendor/github.com/spf13/pflag/string.go b/vendor/github.com/spf13/pflag/string.go index e296136..04e0a26 100644 --- a/vendor/github.com/spf13/pflag/string.go +++ b/vendor/github.com/spf13/pflag/string.go @@ -1,7 +1,5 @@ package pflag -import "fmt" - // -- string Value type stringValue string @@ -18,7 +16,7 @@ func (s *stringValue) Type() string { return "string" } -func (s *stringValue) String() string { return fmt.Sprintf("%s", *s) } +func (s *stringValue) String() string { return string(*s) } func stringConv(sval string) (interface{}, error) { return sval, nil diff --git a/vendor/github.com/spf13/pflag/string_array.go b/vendor/github.com/spf13/pflag/string_array.go new file mode 100644 index 0000000..276b7ed --- /dev/null +++ b/vendor/github.com/spf13/pflag/string_array.go @@ -0,0 +1,103 @@ +package pflag + +// -- stringArray Value +type stringArrayValue struct { + value *[]string + changed bool +} + +func newStringArrayValue(val []string, p *[]string) *stringArrayValue { + ssv := new(stringArrayValue) + ssv.value = p + *ssv.value = val + return ssv +} + +func (s *stringArrayValue) Set(val string) error { + if !s.changed { + *s.value = []string{val} + s.changed = true + } else { + *s.value = append(*s.value, val) + } + return nil +} + +func (s *stringArrayValue) Type() string { + return "stringArray" +} + +func (s *stringArrayValue) String() string { + str, _ := writeAsCSV(*s.value) + return "[" + str + "]" +} + +func stringArrayConv(sval string) (interface{}, error) { + sval = sval[1 : len(sval)-1] + // An empty string would cause a array with one (empty) string + if len(sval) == 0 { + return []string{}, nil + } + return readAsCSV(sval) +} + +// GetStringArray return the []string value of a flag with the given name +func (f *FlagSet) GetStringArray(name string) ([]string, error) { + val, err := f.getFlagType(name, "stringArray", stringArrayConv) + if err != nil { + return []string{}, err + } + return val.([]string), nil +} + +// StringArrayVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the values of the multiple flags. +// The value of each argument will not try to be separated by comma +func (f *FlagSet) StringArrayVar(p *[]string, name string, value []string, usage string) { + f.VarP(newStringArrayValue(value, p), name, "", usage) +} + +// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) { + f.VarP(newStringArrayValue(value, p), name, shorthand, usage) +} + +// StringArrayVar defines a string flag with specified name, default value, and usage string. +// The argument p points to a []string variable in which to store the value of the flag. +// The value of each argument will not try to be separated by comma +func StringArrayVar(p *[]string, name string, value []string, usage string) { + CommandLine.VarP(newStringArrayValue(value, p), name, "", usage) +} + +// StringArrayVarP is like StringArrayVar, but accepts a shorthand letter that can be used after a single dash. +func StringArrayVarP(p *[]string, name, shorthand string, value []string, usage string) { + CommandLine.VarP(newStringArrayValue(value, p), name, shorthand, usage) +} + +// StringArray defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +// The value of each argument will not try to be separated by comma +func (f *FlagSet) StringArray(name string, value []string, usage string) *[]string { + p := []string{} + f.StringArrayVarP(&p, name, "", value, usage) + return &p +} + +// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) StringArrayP(name, shorthand string, value []string, usage string) *[]string { + p := []string{} + f.StringArrayVarP(&p, name, shorthand, value, usage) + return &p +} + +// StringArray defines a string flag with specified name, default value, and usage string. +// The return value is the address of a []string variable that stores the value of the flag. +// The value of each argument will not try to be separated by comma +func StringArray(name string, value []string, usage string) *[]string { + return CommandLine.StringArrayP(name, "", value, usage) +} + +// StringArrayP is like StringArray, but accepts a shorthand letter that can be used after a single dash. +func StringArrayP(name, shorthand string, value []string, usage string) *[]string { + return CommandLine.StringArrayP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/spf13/pflag/string_array_test.go b/vendor/github.com/spf13/pflag/string_array_test.go new file mode 100644 index 0000000..1ceac8c --- /dev/null +++ b/vendor/github.com/spf13/pflag/string_array_test.go @@ -0,0 +1,233 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pflag + +import ( + "fmt" + "testing" +) + +func setUpSAFlagSet(sap *[]string) *FlagSet { + f := NewFlagSet("test", ContinueOnError) + f.StringArrayVar(sap, "sa", []string{}, "Command separated list!") + return f +} + +func setUpSAFlagSetWithDefault(sap *[]string) *FlagSet { + f := NewFlagSet("test", ContinueOnError) + f.StringArrayVar(sap, "sa", []string{"default", "values"}, "Command separated list!") + return f +} + +func TestEmptySA(t *testing.T) { + var sa []string + f := setUpSAFlagSet(&sa) + err := f.Parse([]string{}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + getSA, err := f.GetStringArray("sa") + if err != nil { + t.Fatal("got an error from GetStringArray():", err) + } + if len(getSA) != 0 { + t.Fatalf("got sa %v with len=%d but expected length=0", getSA, len(getSA)) + } +} + +func TestEmptySAValue(t *testing.T) { + var sa []string + f := setUpSAFlagSet(&sa) + err := f.Parse([]string{"--sa="}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + getSA, err := f.GetStringArray("sa") + if err != nil { + t.Fatal("got an error from GetStringArray():", err) + } + if len(getSA) != 0 { + t.Fatalf("got sa %v with len=%d but expected length=0", getSA, len(getSA)) + } +} + +func TestSADefault(t *testing.T) { + var sa []string + f := setUpSAFlagSetWithDefault(&sa) + + vals := []string{"default", "values"} + + err := f.Parse([]string{}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range sa { + if vals[i] != v { + t.Fatalf("expected sa[%d] to be %s but got: %s", i, vals[i], v) + } + } + + getSA, err := f.GetStringArray("sa") + if err != nil { + t.Fatal("got an error from GetStringArray():", err) + } + for i, v := range getSA { + if vals[i] != v { + t.Fatalf("expected sa[%d] to be %s from GetStringArray but got: %s", i, vals[i], v) + } + } +} + +func TestSAWithDefault(t *testing.T) { + var sa []string + f := setUpSAFlagSetWithDefault(&sa) + + val := "one" + arg := fmt.Sprintf("--sa=%s", val) + err := f.Parse([]string{arg}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(sa) != 1 { + t.Fatalf("expected number of values to be %d but %d", 1, len(sa)) + } + + if sa[0] != val { + t.Fatalf("expected value to be %s but got: %s", sa[0], val) + } + + getSA, err := f.GetStringArray("sa") + if err != nil { + t.Fatal("got an error from GetStringArray():", err) + } + + if len(getSA) != 1 { + t.Fatalf("expected number of values to be %d but %d", 1, len(getSA)) + } + + if getSA[0] != val { + t.Fatalf("expected value to be %s but got: %s", getSA[0], val) + } +} + +func TestSACalledTwice(t *testing.T) { + var sa []string + f := setUpSAFlagSet(&sa) + + in := []string{"one", "two"} + expected := []string{"one", "two"} + argfmt := "--sa=%s" + arg1 := fmt.Sprintf(argfmt, in[0]) + arg2 := fmt.Sprintf(argfmt, in[1]) + err := f.Parse([]string{arg1, arg2}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(sa) { + t.Fatalf("expected number of sa to be %d but got: %d", len(expected), len(sa)) + } + for i, v := range sa { + if expected[i] != v { + t.Fatalf("expected sa[%d] to be %s but got: %s", i, expected[i], v) + } + } + + values, err := f.GetStringArray("sa") + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(values) { + t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(sa)) + } + for i, v := range values { + if expected[i] != v { + t.Fatalf("expected got sa[%d] to be %s but got: %s", i, expected[i], v) + } + } +} + +func TestSAWithSpecialChar(t *testing.T) { + var sa []string + f := setUpSAFlagSet(&sa) + + in := []string{"one,two", `"three"`, `"four,five",six`, "seven eight"} + expected := []string{"one,two", `"three"`, `"four,five",six`, "seven eight"} + argfmt := "--sa=%s" + arg1 := fmt.Sprintf(argfmt, in[0]) + arg2 := fmt.Sprintf(argfmt, in[1]) + arg3 := fmt.Sprintf(argfmt, in[2]) + arg4 := fmt.Sprintf(argfmt, in[3]) + err := f.Parse([]string{arg1, arg2, arg3, arg4}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(sa) { + t.Fatalf("expected number of sa to be %d but got: %d", len(expected), len(sa)) + } + for i, v := range sa { + if expected[i] != v { + t.Fatalf("expected sa[%d] to be %s but got: %s", i, expected[i], v) + } + } + + values, err := f.GetStringArray("sa") + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(values) { + t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(values)) + } + for i, v := range values { + if expected[i] != v { + t.Fatalf("expected got sa[%d] to be %s but got: %s", i, expected[i], v) + } + } +} + +func TestSAWithSquareBrackets(t *testing.T) { + var sa []string + f := setUpSAFlagSet(&sa) + + in := []string{"][]-[", "[a-z]", "[a-z]+"} + expected := []string{"][]-[", "[a-z]", "[a-z]+"} + argfmt := "--sa=%s" + arg1 := fmt.Sprintf(argfmt, in[0]) + arg2 := fmt.Sprintf(argfmt, in[1]) + arg3 := fmt.Sprintf(argfmt, in[2]) + err := f.Parse([]string{arg1, arg2, arg3}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(sa) { + t.Fatalf("expected number of sa to be %d but got: %d", len(expected), len(sa)) + } + for i, v := range sa { + if expected[i] != v { + t.Fatalf("expected sa[%d] to be %s but got: %s", i, expected[i], v) + } + } + + values, err := f.GetStringArray("sa") + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(values) { + t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(values)) + } + for i, v := range values { + if expected[i] != v { + t.Fatalf("expected got sa[%d] to be %s but got: %s", i, expected[i], v) + } + } +} diff --git a/vendor/github.com/spf13/pflag/string_slice.go b/vendor/github.com/spf13/pflag/string_slice.go index 0b7ddfe..05eee75 100644 --- a/vendor/github.com/spf13/pflag/string_slice.go +++ b/vendor/github.com/spf13/pflag/string_slice.go @@ -1,12 +1,11 @@ package pflag import ( - "fmt" + "bytes" + "encoding/csv" "strings" ) -var _ = fmt.Fprint - // -- stringSlice Value type stringSliceValue struct { value *[]string @@ -20,8 +19,31 @@ func newStringSliceValue(val []string, p *[]string) *stringSliceValue { return ssv } +func readAsCSV(val string) ([]string, error) { + if val == "" { + return []string{}, nil + } + stringReader := strings.NewReader(val) + csvReader := csv.NewReader(stringReader) + return csvReader.Read() +} + +func writeAsCSV(vals []string) (string, error) { + b := &bytes.Buffer{} + w := csv.NewWriter(b) + err := w.Write(vals) + if err != nil { + return "", err + } + w.Flush() + return strings.TrimSuffix(b.String(), "\n"), nil +} + func (s *stringSliceValue) Set(val string) error { - v := strings.Split(val, ",") + v, err := readAsCSV(val) + if err != nil { + return err + } if !s.changed { *s.value = v } else { @@ -35,16 +57,18 @@ func (s *stringSliceValue) Type() string { return "stringSlice" } -func (s *stringSliceValue) String() string { return "[" + strings.Join(*s.value, ",") + "]" } +func (s *stringSliceValue) String() string { + str, _ := writeAsCSV(*s.value) + return "[" + str + "]" +} func stringSliceConv(sval string) (interface{}, error) { - sval = strings.Trim(sval, "[]") + sval = sval[1 : len(sval)-1] // An empty string would cause a slice with one (empty) string if len(sval) == 0 { return []string{}, nil } - v := strings.Split(sval, ",") - return v, nil + return readAsCSV(sval) } // GetStringSlice return the []string value of a flag with the given name diff --git a/vendor/github.com/spf13/pflag/string_slice_test.go b/vendor/github.com/spf13/pflag/string_slice_test.go index 97602de..c41f3bd 100644 --- a/vendor/github.com/spf13/pflag/string_slice_test.go +++ b/vendor/github.com/spf13/pflag/string_slice_test.go @@ -39,6 +39,23 @@ func TestEmptySS(t *testing.T) { } } +func TestEmptySSValue(t *testing.T) { + var ss []string + f := setUpSSFlagSet(&ss) + err := f.Parse([]string{"--ss="}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + getSS, err := f.GetStringSlice("ss") + if err != nil { + t.Fatal("got an error from GetStringSlice():", err) + } + if len(getSS) != 0 { + t.Fatalf("got ss %v with len=%d but expected length=0", getSS, len(getSS)) + } +} + func TestSS(t *testing.T) { var ss []string f := setUpSSFlagSet(&ss) @@ -133,9 +150,104 @@ func TestSSCalledTwice(t *testing.T) { if err != nil { t.Fatal("expected no error; got", err) } + + if len(expected) != len(ss) { + t.Fatalf("expected number of ss to be %d but got: %d", len(expected), len(ss)) + } for i, v := range ss { if expected[i] != v { t.Fatalf("expected ss[%d] to be %s but got: %s", i, expected[i], v) } } + + values, err := f.GetStringSlice("ss") + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(values) { + t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(ss)) + } + for i, v := range values { + if expected[i] != v { + t.Fatalf("expected got ss[%d] to be %s but got: %s", i, expected[i], v) + } + } +} + +func TestSSWithComma(t *testing.T) { + var ss []string + f := setUpSSFlagSet(&ss) + + in := []string{`"one,two"`, `"three"`, `"four,five",six`} + expected := []string{"one,two", "three", "four,five", "six"} + argfmt := "--ss=%s" + arg1 := fmt.Sprintf(argfmt, in[0]) + arg2 := fmt.Sprintf(argfmt, in[1]) + arg3 := fmt.Sprintf(argfmt, in[2]) + err := f.Parse([]string{arg1, arg2, arg3}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(ss) { + t.Fatalf("expected number of ss to be %d but got: %d", len(expected), len(ss)) + } + for i, v := range ss { + if expected[i] != v { + t.Fatalf("expected ss[%d] to be %s but got: %s", i, expected[i], v) + } + } + + values, err := f.GetStringSlice("ss") + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(values) { + t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(values)) + } + for i, v := range values { + if expected[i] != v { + t.Fatalf("expected got ss[%d] to be %s but got: %s", i, expected[i], v) + } + } +} + +func TestSSWithSquareBrackets(t *testing.T) { + var ss []string + f := setUpSSFlagSet(&ss) + + in := []string{`"[a-z]"`, `"[a-z]+"`} + expected := []string{"[a-z]", "[a-z]+"} + argfmt := "--ss=%s" + arg1 := fmt.Sprintf(argfmt, in[0]) + arg2 := fmt.Sprintf(argfmt, in[1]) + err := f.Parse([]string{arg1, arg2}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(ss) { + t.Fatalf("expected number of ss to be %d but got: %d", len(expected), len(ss)) + } + for i, v := range ss { + if expected[i] != v { + t.Fatalf("expected ss[%d] to be %s but got: %s", i, expected[i], v) + } + } + + values, err := f.GetStringSlice("ss") + if err != nil { + t.Fatal("expected no error; got", err) + } + + if len(expected) != len(values) { + t.Fatalf("expected number of values to be %d but got: %d", len(expected), len(values)) + } + for i, v := range values { + if expected[i] != v { + t.Fatalf("expected got ss[%d] to be %s but got: %s", i, expected[i], v) + } + } } diff --git a/vendor/github.com/spf13/pflag/uint.go b/vendor/github.com/spf13/pflag/uint.go index e142b49..dcbc2b7 100644 --- a/vendor/github.com/spf13/pflag/uint.go +++ b/vendor/github.com/spf13/pflag/uint.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- uint Value type uintValue uint @@ -23,7 +20,7 @@ func (i *uintValue) Type() string { return "uint" } -func (i *uintValue) String() string { return fmt.Sprintf("%v", *i) } +func (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) } func uintConv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 0) diff --git a/vendor/github.com/spf13/pflag/uint16.go b/vendor/github.com/spf13/pflag/uint16.go index 5c96c19..7e9914e 100644 --- a/vendor/github.com/spf13/pflag/uint16.go +++ b/vendor/github.com/spf13/pflag/uint16.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- uint16 value type uint16Value uint16 @@ -12,7 +9,7 @@ func newUint16Value(val uint16, p *uint16) *uint16Value { *p = val return (*uint16Value)(p) } -func (i *uint16Value) String() string { return fmt.Sprintf("%d", *i) } + func (i *uint16Value) Set(s string) error { v, err := strconv.ParseUint(s, 0, 16) *i = uint16Value(v) @@ -23,6 +20,8 @@ func (i *uint16Value) Type() string { return "uint16" } +func (i *uint16Value) String() string { return strconv.FormatUint(uint64(*i), 10) } + func uint16Conv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 16) if err != nil { diff --git a/vendor/github.com/spf13/pflag/uint32.go b/vendor/github.com/spf13/pflag/uint32.go index 294fcaa..d802453 100644 --- a/vendor/github.com/spf13/pflag/uint32.go +++ b/vendor/github.com/spf13/pflag/uint32.go @@ -1,18 +1,15 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" -// -- uint16 value +// -- uint32 value type uint32Value uint32 func newUint32Value(val uint32, p *uint32) *uint32Value { *p = val return (*uint32Value)(p) } -func (i *uint32Value) String() string { return fmt.Sprintf("%d", *i) } + func (i *uint32Value) Set(s string) error { v, err := strconv.ParseUint(s, 0, 32) *i = uint32Value(v) @@ -23,6 +20,8 @@ func (i *uint32Value) Type() string { return "uint32" } +func (i *uint32Value) String() string { return strconv.FormatUint(uint64(*i), 10) } + func uint32Conv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 32) if err != nil { diff --git a/vendor/github.com/spf13/pflag/uint64.go b/vendor/github.com/spf13/pflag/uint64.go index c681885..f62240f 100644 --- a/vendor/github.com/spf13/pflag/uint64.go +++ b/vendor/github.com/spf13/pflag/uint64.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- uint64 Value type uint64Value uint64 @@ -23,7 +20,7 @@ func (i *uint64Value) Type() string { return "uint64" } -func (i *uint64Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) } func uint64Conv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 64) diff --git a/vendor/github.com/spf13/pflag/uint8.go b/vendor/github.com/spf13/pflag/uint8.go index 26db418..bb0e83c 100644 --- a/vendor/github.com/spf13/pflag/uint8.go +++ b/vendor/github.com/spf13/pflag/uint8.go @@ -1,9 +1,6 @@ package pflag -import ( - "fmt" - "strconv" -) +import "strconv" // -- uint8 Value type uint8Value uint8 @@ -23,7 +20,7 @@ func (i *uint8Value) Type() string { return "uint8" } -func (i *uint8Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *uint8Value) String() string { return strconv.FormatUint(uint64(*i), 10) } func uint8Conv(sval string) (interface{}, error) { v, err := strconv.ParseUint(sval, 0, 8) diff --git a/vendor/github.com/spf13/pflag/uint_slice.go b/vendor/github.com/spf13/pflag/uint_slice.go new file mode 100644 index 0000000..edd94c6 --- /dev/null +++ b/vendor/github.com/spf13/pflag/uint_slice.go @@ -0,0 +1,126 @@ +package pflag + +import ( + "fmt" + "strconv" + "strings" +) + +// -- uintSlice Value +type uintSliceValue struct { + value *[]uint + changed bool +} + +func newUintSliceValue(val []uint, p *[]uint) *uintSliceValue { + uisv := new(uintSliceValue) + uisv.value = p + *uisv.value = val + return uisv +} + +func (s *uintSliceValue) Set(val string) error { + ss := strings.Split(val, ",") + out := make([]uint, len(ss)) + for i, d := range ss { + u, err := strconv.ParseUint(d, 10, 0) + if err != nil { + return err + } + out[i] = uint(u) + } + if !s.changed { + *s.value = out + } else { + *s.value = append(*s.value, out...) + } + s.changed = true + return nil +} + +func (s *uintSliceValue) Type() string { + return "uintSlice" +} + +func (s *uintSliceValue) String() string { + out := make([]string, len(*s.value)) + for i, d := range *s.value { + out[i] = fmt.Sprintf("%d", d) + } + return "[" + strings.Join(out, ",") + "]" +} + +func uintSliceConv(val string) (interface{}, error) { + val = strings.Trim(val, "[]") + // Empty string would cause a slice with one (empty) entry + if len(val) == 0 { + return []uint{}, nil + } + ss := strings.Split(val, ",") + out := make([]uint, len(ss)) + for i, d := range ss { + u, err := strconv.ParseUint(d, 10, 0) + if err != nil { + return nil, err + } + out[i] = uint(u) + } + return out, nil +} + +// GetUintSlice returns the []uint value of a flag with the given name. +func (f *FlagSet) GetUintSlice(name string) ([]uint, error) { + val, err := f.getFlagType(name, "uintSlice", uintSliceConv) + if err != nil { + return []uint{}, err + } + return val.([]uint), nil +} + +// UintSliceVar defines a uintSlice flag with specified name, default value, and usage string. +// The argument p points to a []uint variable in which to store the value of the flag. +func (f *FlagSet) UintSliceVar(p *[]uint, name string, value []uint, usage string) { + f.VarP(newUintSliceValue(value, p), name, "", usage) +} + +// UintSliceVarP is like UintSliceVar, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) { + f.VarP(newUintSliceValue(value, p), name, shorthand, usage) +} + +// UintSliceVar defines a uint[] flag with specified name, default value, and usage string. +// The argument p points to a uint[] variable in which to store the value of the flag. +func UintSliceVar(p *[]uint, name string, value []uint, usage string) { + CommandLine.VarP(newUintSliceValue(value, p), name, "", usage) +} + +// UintSliceVarP is like the UintSliceVar, but accepts a shorthand letter that can be used after a single dash. +func UintSliceVarP(p *[]uint, name, shorthand string, value []uint, usage string) { + CommandLine.VarP(newUintSliceValue(value, p), name, shorthand, usage) +} + +// UintSlice defines a []uint flag with specified name, default value, and usage string. +// The return value is the address of a []uint variable that stores the value of the flag. +func (f *FlagSet) UintSlice(name string, value []uint, usage string) *[]uint { + p := []uint{} + f.UintSliceVarP(&p, name, "", value, usage) + return &p +} + +// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash. +func (f *FlagSet) UintSliceP(name, shorthand string, value []uint, usage string) *[]uint { + p := []uint{} + f.UintSliceVarP(&p, name, shorthand, value, usage) + return &p +} + +// UintSlice defines a []uint flag with specified name, default value, and usage string. +// The return value is the address of a []uint variable that stores the value of the flag. +func UintSlice(name string, value []uint, usage string) *[]uint { + return CommandLine.UintSliceP(name, "", value, usage) +} + +// UintSliceP is like UintSlice, but accepts a shorthand letter that can be used after a single dash. +func UintSliceP(name, shorthand string, value []uint, usage string) *[]uint { + return CommandLine.UintSliceP(name, shorthand, value, usage) +} diff --git a/vendor/github.com/spf13/pflag/uint_slice_test.go b/vendor/github.com/spf13/pflag/uint_slice_test.go new file mode 100644 index 0000000..db1a19d --- /dev/null +++ b/vendor/github.com/spf13/pflag/uint_slice_test.go @@ -0,0 +1,161 @@ +package pflag + +import ( + "fmt" + "strconv" + "strings" + "testing" +) + +func setUpUISFlagSet(uisp *[]uint) *FlagSet { + f := NewFlagSet("test", ContinueOnError) + f.UintSliceVar(uisp, "uis", []uint{}, "Command separated list!") + return f +} + +func setUpUISFlagSetWithDefault(uisp *[]uint) *FlagSet { + f := NewFlagSet("test", ContinueOnError) + f.UintSliceVar(uisp, "uis", []uint{0, 1}, "Command separated list!") + return f +} + +func TestEmptyUIS(t *testing.T) { + var uis []uint + f := setUpUISFlagSet(&uis) + err := f.Parse([]string{}) + if err != nil { + t.Fatal("expected no error; got", err) + } + + getUIS, err := f.GetUintSlice("uis") + if err != nil { + t.Fatal("got an error from GetUintSlice():", err) + } + if len(getUIS) != 0 { + t.Fatalf("got is %v with len=%d but expected length=0", getUIS, len(getUIS)) + } +} + +func TestUIS(t *testing.T) { + var uis []uint + f := setUpUISFlagSet(&uis) + + vals := []string{"1", "2", "4", "3"} + arg := fmt.Sprintf("--uis=%s", strings.Join(vals, ",")) + err := f.Parse([]string{arg}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range uis { + u, err := strconv.ParseUint(vals[i], 10, 0) + if err != nil { + t.Fatalf("got error: %v", err) + } + if uint(u) != v { + t.Fatalf("expected uis[%d] to be %s but got %d", i, vals[i], v) + } + } + getUIS, err := f.GetUintSlice("uis") + if err != nil { + t.Fatalf("got error: %v", err) + } + for i, v := range getUIS { + u, err := strconv.ParseUint(vals[i], 10, 0) + if err != nil { + t.Fatalf("got error: %v", err) + } + if uint(u) != v { + t.Fatalf("expected uis[%d] to be %s but got: %d from GetUintSlice", i, vals[i], v) + } + } +} + +func TestUISDefault(t *testing.T) { + var uis []uint + f := setUpUISFlagSetWithDefault(&uis) + + vals := []string{"0", "1"} + + err := f.Parse([]string{}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range uis { + u, err := strconv.ParseUint(vals[i], 10, 0) + if err != nil { + t.Fatalf("got error: %v", err) + } + if uint(u) != v { + t.Fatalf("expect uis[%d] to be %d but got: %d", i, u, v) + } + } + + getUIS, err := f.GetUintSlice("uis") + if err != nil { + t.Fatal("got an error from GetUintSlice():", err) + } + for i, v := range getUIS { + u, err := strconv.ParseUint(vals[i], 10, 0) + if err != nil { + t.Fatal("got an error from GetIntSlice():", err) + } + if uint(u) != v { + t.Fatalf("expected uis[%d] to be %d from GetUintSlice but got: %d", i, u, v) + } + } +} + +func TestUISWithDefault(t *testing.T) { + var uis []uint + f := setUpUISFlagSetWithDefault(&uis) + + vals := []string{"1", "2"} + arg := fmt.Sprintf("--uis=%s", strings.Join(vals, ",")) + err := f.Parse([]string{arg}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range uis { + u, err := strconv.ParseUint(vals[i], 10, 0) + if err != nil { + t.Fatalf("got error: %v", err) + } + if uint(u) != v { + t.Fatalf("expected uis[%d] to be %d from GetUintSlice but got: %d", i, u, v) + } + } + + getUIS, err := f.GetUintSlice("uis") + if err != nil { + t.Fatal("got an error from GetUintSlice():", err) + } + for i, v := range getUIS { + u, err := strconv.ParseUint(vals[i], 10, 0) + if err != nil { + t.Fatalf("got error: %v", err) + } + if uint(u) != v { + t.Fatalf("expected uis[%d] to be %d from GetUintSlice but got: %d", i, u, v) + } + } +} + +func TestUISCalledTwice(t *testing.T) { + var uis []uint + f := setUpUISFlagSet(&uis) + + in := []string{"1,2", "3"} + expected := []int{1, 2, 3} + argfmt := "--uis=%s" + arg1 := fmt.Sprintf(argfmt, in[0]) + arg2 := fmt.Sprintf(argfmt, in[1]) + err := f.Parse([]string{arg1, arg2}) + if err != nil { + t.Fatal("expected no error; got", err) + } + for i, v := range uis { + if uint(expected[i]) != v { + t.Fatalf("expected uis[%d] to be %d but got: %d", i, expected[i], v) + } + } +} diff --git a/vendor/github.com/spf13/pflag/verify/all.sh b/vendor/github.com/spf13/pflag/verify/all.sh new file mode 100755 index 0000000..739f89c --- /dev/null +++ b/vendor/github.com/spf13/pflag/verify/all.sh @@ -0,0 +1,69 @@ +#!/bin/bash + +set -o errexit +set -o nounset +set -o pipefail + +ROOT=$(dirname "${BASH_SOURCE}")/.. + +# Some useful colors. +if [[ -z "${color_start-}" ]]; then + declare -r color_start="\033[" + declare -r color_red="${color_start}0;31m" + declare -r color_yellow="${color_start}0;33m" + declare -r color_green="${color_start}0;32m" + declare -r color_norm="${color_start}0m" +fi + +SILENT=true + +function is-excluded { + for e in $EXCLUDE; do + if [[ $1 -ef ${BASH_SOURCE} ]]; then + return + fi + if [[ $1 -ef "$ROOT/hack/$e" ]]; then + return + fi + done + return 1 +} + +while getopts ":v" opt; do + case $opt in + v) + SILENT=false + ;; + \?) + echo "Invalid flag: -$OPTARG" >&2 + exit 1 + ;; + esac +done + +if $SILENT ; then + echo "Running in the silent mode, run with -v if you want to see script logs." +fi + +EXCLUDE="all.sh" + +ret=0 +for t in `ls $ROOT/verify/*.sh` +do + if is-excluded $t ; then + echo "Skipping $t" + continue + fi + if $SILENT ; then + echo -e "Verifying $t" + if bash "$t" &> /dev/null; then + echo -e "${color_green}SUCCESS${color_norm}" + else + echo -e "${color_red}FAILED${color_norm}" + ret=1 + fi + else + bash "$t" || ret=1 + fi +done +exit $ret diff --git a/vendor/github.com/spf13/pflag/verify/gofmt.sh b/vendor/github.com/spf13/pflag/verify/gofmt.sh new file mode 100755 index 0000000..f66acf8 --- /dev/null +++ b/vendor/github.com/spf13/pflag/verify/gofmt.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +set -o errexit +set -o nounset +set -o pipefail + +ROOT=$(dirname "${BASH_SOURCE}")/.. + +pushd "${ROOT}" > /dev/null + +GOFMT=${GOFMT:-"gofmt"} +bad_files=$(find . -name '*.go' | xargs $GOFMT -s -l) +if [[ -n "${bad_files}" ]]; then + echo "!!! '$GOFMT' needs to be run on the following files: " + echo "${bad_files}" + exit 1 +fi + +# ex: ts=2 sw=2 et filetype=sh diff --git a/vendor/github.com/spf13/pflag/verify/golint.sh b/vendor/github.com/spf13/pflag/verify/golint.sh new file mode 100755 index 0000000..685c177 --- /dev/null +++ b/vendor/github.com/spf13/pflag/verify/golint.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +ROOT=$(dirname "${BASH_SOURCE}")/.. +GOLINT=${GOLINT:-"golint"} + +pushd "${ROOT}" > /dev/null + bad_files=$($GOLINT -min_confidence=0.9 ./...) + if [[ -n "${bad_files}" ]]; then + echo "!!! '$GOLINT' problems: " + echo "${bad_files}" + exit 1 + fi +popd > /dev/null + +# ex: ts=2 sw=2 et filetype=sh diff --git a/vendor/golang.org/x/crypto/.gitattributes b/vendor/golang.org/x/crypto/.gitattributes new file mode 100644 index 0000000..d2f212e --- /dev/null +++ b/vendor/golang.org/x/crypto/.gitattributes @@ -0,0 +1,10 @@ +# Treat all files in this repo as binary, with no git magic updating +# line endings. Windows users contributing to Go will need to use a +# modern version of git and editors capable of LF line endings. +# +# We'll prevent accidental CRLF line endings from entering the repo +# via the git-review gofmt checks. +# +# See golang.org/issue/9281 + +* -text diff --git a/vendor/golang.org/x/crypto/.gitignore b/vendor/golang.org/x/crypto/.gitignore new file mode 100644 index 0000000..8339fd6 --- /dev/null +++ b/vendor/golang.org/x/crypto/.gitignore @@ -0,0 +1,2 @@ +# Add no patterns to .hgignore except for files generated by the build. +last-change diff --git a/vendor/golang.org/x/crypto/AUTHORS b/vendor/golang.org/x/crypto/AUTHORS new file mode 100644 index 0000000..2b00ddb --- /dev/null +++ b/vendor/golang.org/x/crypto/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at https://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/crypto/CONTRIBUTING.md b/vendor/golang.org/x/crypto/CONTRIBUTING.md new file mode 100644 index 0000000..88dff59 --- /dev/null +++ b/vendor/golang.org/x/crypto/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Go + +Go is an open source project. + +It is the work of hundreds of contributors. We appreciate your help! + + +## Filing issues + +When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. +The gophers there will answer or ask you to file an issue if you've tripped over a bug. + +## Contributing code + +Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) +before sending patches. + +**We do not accept GitHub pull requests** +(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). + +Unless otherwise noted, the Go source files are distributed under +the BSD-style license found in the LICENSE file. + diff --git a/vendor/golang.org/x/crypto/CONTRIBUTORS b/vendor/golang.org/x/crypto/CONTRIBUTORS new file mode 100644 index 0000000..1fbd3e9 --- /dev/null +++ b/vendor/golang.org/x/crypto/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at https://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/crypto/LICENSE b/vendor/golang.org/x/crypto/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/crypto/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/crypto/PATENTS b/vendor/golang.org/x/crypto/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/crypto/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google 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, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/crypto/README.md b/vendor/golang.org/x/crypto/README.md new file mode 100644 index 0000000..c9d6fec --- /dev/null +++ b/vendor/golang.org/x/crypto/README.md @@ -0,0 +1,21 @@ +# Go Cryptography + +This repository holds supplementary Go cryptography libraries. + +## Download/Install + +The easiest way to install is to run `go get -u golang.org/x/crypto/...`. You +can also manually git clone the repository to `$GOPATH/src/golang.org/x/crypto`. + +## Report Issues / Send Patches + +This repository uses Gerrit for code changes. To learn how to submit changes to +this repository, see https://golang.org/doc/contribute.html. + +The main issue tracker for the crypto repository is located at +https://github.com/golang/go/issues. Prefix your issue with "x/crypto:" in the +subject line, so it is easy to find. + +Note that contributions to the cryptography package receive additional scrutiny +due to their sensitive nature. Patches may take longer than normal to receive +feedback. diff --git a/vendor/golang.org/x/crypto/acme/acme.go b/vendor/golang.org/x/crypto/acme/acme.go new file mode 100644 index 0000000..fa9c4b3 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/acme.go @@ -0,0 +1,1058 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package acme provides an implementation of the +// Automatic Certificate Management Environment (ACME) spec. +// See https://tools.ietf.org/html/draft-ietf-acme-acme-02 for details. +// +// Most common scenarios will want to use autocert subdirectory instead, +// which provides automatic access to certificates from Let's Encrypt +// and any other ACME-based CA. +// +// This package is a work in progress and makes no API stability promises. +package acme + +import ( + "bytes" + "context" + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/sha256" + "crypto/tls" + "crypto/x509" + "encoding/base64" + "encoding/hex" + "encoding/json" + "encoding/pem" + "errors" + "fmt" + "io" + "io/ioutil" + "math/big" + "net/http" + "strconv" + "strings" + "sync" + "time" +) + +// LetsEncryptURL is the Directory endpoint of Let's Encrypt CA. +const LetsEncryptURL = "https://acme-v01.api.letsencrypt.org/directory" + +const ( + maxChainLen = 5 // max depth and breadth of a certificate chain + maxCertSize = 1 << 20 // max size of a certificate, in bytes + + // Max number of collected nonces kept in memory. + // Expect usual peak of 1 or 2. + maxNonces = 100 +) + +// Client is an ACME client. +// The only required field is Key. An example of creating a client with a new key +// is as follows: +// +// key, err := rsa.GenerateKey(rand.Reader, 2048) +// if err != nil { +// log.Fatal(err) +// } +// client := &Client{Key: key} +// +type Client struct { + // Key is the account key used to register with a CA and sign requests. + // Key.Public() must return a *rsa.PublicKey or *ecdsa.PublicKey. + Key crypto.Signer + + // HTTPClient optionally specifies an HTTP client to use + // instead of http.DefaultClient. + HTTPClient *http.Client + + // DirectoryURL points to the CA directory endpoint. + // If empty, LetsEncryptURL is used. + // Mutating this value after a successful call of Client's Discover method + // will have no effect. + DirectoryURL string + + dirMu sync.Mutex // guards writes to dir + dir *Directory // cached result of Client's Discover method + + noncesMu sync.Mutex + nonces map[string]struct{} // nonces collected from previous responses +} + +// Discover performs ACME server discovery using c.DirectoryURL. +// +// It caches successful result. So, subsequent calls will not result in +// a network round-trip. This also means mutating c.DirectoryURL after successful call +// of this method will have no effect. +func (c *Client) Discover(ctx context.Context) (Directory, error) { + c.dirMu.Lock() + defer c.dirMu.Unlock() + if c.dir != nil { + return *c.dir, nil + } + + dirURL := c.DirectoryURL + if dirURL == "" { + dirURL = LetsEncryptURL + } + res, err := c.get(ctx, dirURL) + if err != nil { + return Directory{}, err + } + defer res.Body.Close() + c.addNonce(res.Header) + if res.StatusCode != http.StatusOK { + return Directory{}, responseError(res) + } + + var v struct { + Reg string `json:"new-reg"` + Authz string `json:"new-authz"` + Cert string `json:"new-cert"` + Revoke string `json:"revoke-cert"` + Meta struct { + Terms string `json:"terms-of-service"` + Website string `json:"website"` + CAA []string `json:"caa-identities"` + } + } + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return Directory{}, err + } + c.dir = &Directory{ + RegURL: v.Reg, + AuthzURL: v.Authz, + CertURL: v.Cert, + RevokeURL: v.Revoke, + Terms: v.Meta.Terms, + Website: v.Meta.Website, + CAA: v.Meta.CAA, + } + return *c.dir, nil +} + +// CreateCert requests a new certificate using the Certificate Signing Request csr encoded in DER format. +// The exp argument indicates the desired certificate validity duration. CA may issue a certificate +// with a different duration. +// If the bundle argument is true, the returned value will also contain the CA (issuer) certificate chain. +// +// In the case where CA server does not provide the issued certificate in the response, +// CreateCert will poll certURL using c.FetchCert, which will result in additional round-trips. +// In such a scenario, the caller can cancel the polling with ctx. +// +// CreateCert returns an error if the CA's response or chain was unreasonably large. +// Callers are encouraged to parse the returned value to ensure the certificate is valid and has the expected features. +func (c *Client) CreateCert(ctx context.Context, csr []byte, exp time.Duration, bundle bool) (der [][]byte, certURL string, err error) { + if _, err := c.Discover(ctx); err != nil { + return nil, "", err + } + + req := struct { + Resource string `json:"resource"` + CSR string `json:"csr"` + NotBefore string `json:"notBefore,omitempty"` + NotAfter string `json:"notAfter,omitempty"` + }{ + Resource: "new-cert", + CSR: base64.RawURLEncoding.EncodeToString(csr), + } + now := timeNow() + req.NotBefore = now.Format(time.RFC3339) + if exp > 0 { + req.NotAfter = now.Add(exp).Format(time.RFC3339) + } + + res, err := c.retryPostJWS(ctx, c.Key, c.dir.CertURL, req) + if err != nil { + return nil, "", err + } + defer res.Body.Close() + if res.StatusCode != http.StatusCreated { + return nil, "", responseError(res) + } + + curl := res.Header.Get("Location") // cert permanent URL + if res.ContentLength == 0 { + // no cert in the body; poll until we get it + cert, err := c.FetchCert(ctx, curl, bundle) + return cert, curl, err + } + // slurp issued cert and CA chain, if requested + cert, err := c.responseCert(ctx, res, bundle) + return cert, curl, err +} + +// FetchCert retrieves already issued certificate from the given url, in DER format. +// It retries the request until the certificate is successfully retrieved, +// context is cancelled by the caller or an error response is received. +// +// The returned value will also contain the CA (issuer) certificate if the bundle argument is true. +// +// FetchCert returns an error if the CA's response or chain was unreasonably large. +// Callers are encouraged to parse the returned value to ensure the certificate is valid +// and has expected features. +func (c *Client) FetchCert(ctx context.Context, url string, bundle bool) ([][]byte, error) { + for { + res, err := c.get(ctx, url) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode == http.StatusOK { + return c.responseCert(ctx, res, bundle) + } + if res.StatusCode > 299 { + return nil, responseError(res) + } + d := retryAfter(res.Header.Get("Retry-After"), 3*time.Second) + select { + case <-time.After(d): + // retry + case <-ctx.Done(): + return nil, ctx.Err() + } + } +} + +// RevokeCert revokes a previously issued certificate cert, provided in DER format. +// +// The key argument, used to sign the request, must be authorized +// to revoke the certificate. It's up to the CA to decide which keys are authorized. +// For instance, the key pair of the certificate may be authorized. +// If the key is nil, c.Key is used instead. +func (c *Client) RevokeCert(ctx context.Context, key crypto.Signer, cert []byte, reason CRLReasonCode) error { + if _, err := c.Discover(ctx); err != nil { + return err + } + + body := &struct { + Resource string `json:"resource"` + Cert string `json:"certificate"` + Reason int `json:"reason"` + }{ + Resource: "revoke-cert", + Cert: base64.RawURLEncoding.EncodeToString(cert), + Reason: int(reason), + } + if key == nil { + key = c.Key + } + res, err := c.retryPostJWS(ctx, key, c.dir.RevokeURL, body) + if err != nil { + return err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + return responseError(res) + } + return nil +} + +// AcceptTOS always returns true to indicate the acceptance of a CA's Terms of Service +// during account registration. See Register method of Client for more details. +func AcceptTOS(tosURL string) bool { return true } + +// Register creates a new account registration by following the "new-reg" flow. +// It returns the registered account. The account is not modified. +// +// The registration may require the caller to agree to the CA's Terms of Service (TOS). +// If so, and the account has not indicated the acceptance of the terms (see Account for details), +// Register calls prompt with a TOS URL provided by the CA. Prompt should report +// whether the caller agrees to the terms. To always accept the terms, the caller can use AcceptTOS. +func (c *Client) Register(ctx context.Context, a *Account, prompt func(tosURL string) bool) (*Account, error) { + if _, err := c.Discover(ctx); err != nil { + return nil, err + } + + var err error + if a, err = c.doReg(ctx, c.dir.RegURL, "new-reg", a); err != nil { + return nil, err + } + var accept bool + if a.CurrentTerms != "" && a.CurrentTerms != a.AgreedTerms { + accept = prompt(a.CurrentTerms) + } + if accept { + a.AgreedTerms = a.CurrentTerms + a, err = c.UpdateReg(ctx, a) + } + return a, err +} + +// GetReg retrieves an existing registration. +// The url argument is an Account URI. +func (c *Client) GetReg(ctx context.Context, url string) (*Account, error) { + a, err := c.doReg(ctx, url, "reg", nil) + if err != nil { + return nil, err + } + a.URI = url + return a, nil +} + +// UpdateReg updates an existing registration. +// It returns an updated account copy. The provided account is not modified. +func (c *Client) UpdateReg(ctx context.Context, a *Account) (*Account, error) { + uri := a.URI + a, err := c.doReg(ctx, uri, "reg", a) + if err != nil { + return nil, err + } + a.URI = uri + return a, nil +} + +// Authorize performs the initial step in an authorization flow. +// The caller will then need to choose from and perform a set of returned +// challenges using c.Accept in order to successfully complete authorization. +// +// If an authorization has been previously granted, the CA may return +// a valid authorization (Authorization.Status is StatusValid). If so, the caller +// need not fulfill any challenge and can proceed to requesting a certificate. +func (c *Client) Authorize(ctx context.Context, domain string) (*Authorization, error) { + if _, err := c.Discover(ctx); err != nil { + return nil, err + } + + type authzID struct { + Type string `json:"type"` + Value string `json:"value"` + } + req := struct { + Resource string `json:"resource"` + Identifier authzID `json:"identifier"` + }{ + Resource: "new-authz", + Identifier: authzID{Type: "dns", Value: domain}, + } + res, err := c.retryPostJWS(ctx, c.Key, c.dir.AuthzURL, req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusCreated { + return nil, responseError(res) + } + + var v wireAuthz + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + if v.Status != StatusPending && v.Status != StatusValid { + return nil, fmt.Errorf("acme: unexpected status: %s", v.Status) + } + return v.authorization(res.Header.Get("Location")), nil +} + +// GetAuthorization retrieves an authorization identified by the given URL. +// +// If a caller needs to poll an authorization until its status is final, +// see the WaitAuthorization method. +func (c *Client) GetAuthorization(ctx context.Context, url string) (*Authorization, error) { + res, err := c.get(ctx, url) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { + return nil, responseError(res) + } + var v wireAuthz + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + return v.authorization(url), nil +} + +// RevokeAuthorization relinquishes an existing authorization identified +// by the given URL. +// The url argument is an Authorization.URI value. +// +// If successful, the caller will be required to obtain a new authorization +// using the Authorize method before being able to request a new certificate +// for the domain associated with the authorization. +// +// It does not revoke existing certificates. +func (c *Client) RevokeAuthorization(ctx context.Context, url string) error { + req := struct { + Resource string `json:"resource"` + Status string `json:"status"` + Delete bool `json:"delete"` + }{ + Resource: "authz", + Status: "deactivated", + Delete: true, + } + res, err := c.retryPostJWS(ctx, c.Key, url, req) + if err != nil { + return err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + return responseError(res) + } + return nil +} + +// WaitAuthorization polls an authorization at the given URL +// until it is in one of the final states, StatusValid or StatusInvalid, +// or the context is done. +// +// It returns a non-nil Authorization only if its Status is StatusValid. +// In all other cases WaitAuthorization returns an error. +// If the Status is StatusInvalid, the returned error is of type *AuthorizationError. +func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorization, error) { + sleep := sleeper(ctx) + for { + res, err := c.get(ctx, url) + if err != nil { + return nil, err + } + retry := res.Header.Get("Retry-After") + if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { + res.Body.Close() + if err := sleep(retry, 1); err != nil { + return nil, err + } + continue + } + var raw wireAuthz + err = json.NewDecoder(res.Body).Decode(&raw) + res.Body.Close() + if err != nil { + if err := sleep(retry, 0); err != nil { + return nil, err + } + continue + } + if raw.Status == StatusValid { + return raw.authorization(url), nil + } + if raw.Status == StatusInvalid { + return nil, raw.error(url) + } + if err := sleep(retry, 0); err != nil { + return nil, err + } + } +} + +// GetChallenge retrieves the current status of an challenge. +// +// A client typically polls a challenge status using this method. +func (c *Client) GetChallenge(ctx context.Context, url string) (*Challenge, error) { + res, err := c.get(ctx, url) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { + return nil, responseError(res) + } + v := wireChallenge{URI: url} + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + return v.challenge(), nil +} + +// Accept informs the server that the client accepts one of its challenges +// previously obtained with c.Authorize. +// +// The server will then perform the validation asynchronously. +func (c *Client) Accept(ctx context.Context, chal *Challenge) (*Challenge, error) { + auth, err := keyAuth(c.Key.Public(), chal.Token) + if err != nil { + return nil, err + } + + req := struct { + Resource string `json:"resource"` + Type string `json:"type"` + Auth string `json:"keyAuthorization"` + }{ + Resource: "challenge", + Type: chal.Type, + Auth: auth, + } + res, err := c.retryPostJWS(ctx, c.Key, chal.URI, req) + if err != nil { + return nil, err + } + defer res.Body.Close() + // Note: the protocol specifies 200 as the expected response code, but + // letsencrypt seems to be returning 202. + if res.StatusCode != http.StatusOK && res.StatusCode != http.StatusAccepted { + return nil, responseError(res) + } + + var v wireChallenge + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + return v.challenge(), nil +} + +// DNS01ChallengeRecord returns a DNS record value for a dns-01 challenge response. +// A TXT record containing the returned value must be provisioned under +// "_acme-challenge" name of the domain being validated. +// +// The token argument is a Challenge.Token value. +func (c *Client) DNS01ChallengeRecord(token string) (string, error) { + ka, err := keyAuth(c.Key.Public(), token) + if err != nil { + return "", err + } + b := sha256.Sum256([]byte(ka)) + return base64.RawURLEncoding.EncodeToString(b[:]), nil +} + +// HTTP01ChallengeResponse returns the response for an http-01 challenge. +// Servers should respond with the value to HTTP requests at the URL path +// provided by HTTP01ChallengePath to validate the challenge and prove control +// over a domain name. +// +// The token argument is a Challenge.Token value. +func (c *Client) HTTP01ChallengeResponse(token string) (string, error) { + return keyAuth(c.Key.Public(), token) +} + +// HTTP01ChallengePath returns the URL path at which the response for an http-01 challenge +// should be provided by the servers. +// The response value can be obtained with HTTP01ChallengeResponse. +// +// The token argument is a Challenge.Token value. +func (c *Client) HTTP01ChallengePath(token string) string { + return "/.well-known/acme-challenge/" + token +} + +// TLSSNI01ChallengeCert creates a certificate for TLS-SNI-01 challenge response. +// Servers can present the certificate to validate the challenge and prove control +// over a domain name. +// +// The implementation is incomplete in that the returned value is a single certificate, +// computed only for Z0 of the key authorization. ACME CAs are expected to update +// their implementations to use the newer version, TLS-SNI-02. +// For more details on TLS-SNI-01 see https://tools.ietf.org/html/draft-ietf-acme-acme-01#section-7.3. +// +// The token argument is a Challenge.Token value. +// If a WithKey option is provided, its private part signs the returned cert, +// and the public part is used to specify the signee. +// If no WithKey option is provided, a new ECDSA key is generated using P-256 curve. +// +// The returned certificate is valid for the next 24 hours and must be presented only when +// the server name of the client hello matches exactly the returned name value. +func (c *Client) TLSSNI01ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) { + ka, err := keyAuth(c.Key.Public(), token) + if err != nil { + return tls.Certificate{}, "", err + } + b := sha256.Sum256([]byte(ka)) + h := hex.EncodeToString(b[:]) + name = fmt.Sprintf("%s.%s.acme.invalid", h[:32], h[32:]) + cert, err = tlsChallengeCert([]string{name}, opt) + if err != nil { + return tls.Certificate{}, "", err + } + return cert, name, nil +} + +// TLSSNI02ChallengeCert creates a certificate for TLS-SNI-02 challenge response. +// Servers can present the certificate to validate the challenge and prove control +// over a domain name. For more details on TLS-SNI-02 see +// https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-7.3. +// +// The token argument is a Challenge.Token value. +// If a WithKey option is provided, its private part signs the returned cert, +// and the public part is used to specify the signee. +// If no WithKey option is provided, a new ECDSA key is generated using P-256 curve. +// +// The returned certificate is valid for the next 24 hours and must be presented only when +// the server name in the client hello matches exactly the returned name value. +func (c *Client) TLSSNI02ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) { + b := sha256.Sum256([]byte(token)) + h := hex.EncodeToString(b[:]) + sanA := fmt.Sprintf("%s.%s.token.acme.invalid", h[:32], h[32:]) + + ka, err := keyAuth(c.Key.Public(), token) + if err != nil { + return tls.Certificate{}, "", err + } + b = sha256.Sum256([]byte(ka)) + h = hex.EncodeToString(b[:]) + sanB := fmt.Sprintf("%s.%s.ka.acme.invalid", h[:32], h[32:]) + + cert, err = tlsChallengeCert([]string{sanA, sanB}, opt) + if err != nil { + return tls.Certificate{}, "", err + } + return cert, sanA, nil +} + +// doReg sends all types of registration requests. +// The type of request is identified by typ argument, which is a "resource" +// in the ACME spec terms. +// +// A non-nil acct argument indicates whether the intention is to mutate data +// of the Account. Only Contact and Agreement of its fields are used +// in such cases. +func (c *Client) doReg(ctx context.Context, url string, typ string, acct *Account) (*Account, error) { + req := struct { + Resource string `json:"resource"` + Contact []string `json:"contact,omitempty"` + Agreement string `json:"agreement,omitempty"` + }{ + Resource: typ, + } + if acct != nil { + req.Contact = acct.Contact + req.Agreement = acct.AgreedTerms + } + res, err := c.retryPostJWS(ctx, c.Key, url, req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode < 200 || res.StatusCode > 299 { + return nil, responseError(res) + } + + var v struct { + Contact []string + Agreement string + Authorizations string + Certificates string + } + if err := json.NewDecoder(res.Body).Decode(&v); err != nil { + return nil, fmt.Errorf("acme: invalid response: %v", err) + } + var tos string + if v := linkHeader(res.Header, "terms-of-service"); len(v) > 0 { + tos = v[0] + } + var authz string + if v := linkHeader(res.Header, "next"); len(v) > 0 { + authz = v[0] + } + return &Account{ + URI: res.Header.Get("Location"), + Contact: v.Contact, + AgreedTerms: v.Agreement, + CurrentTerms: tos, + Authz: authz, + Authorizations: v.Authorizations, + Certificates: v.Certificates, + }, nil +} + +// retryPostJWS will retry calls to postJWS if there is a badNonce error, +// clearing the stored nonces after each error. +// If the response was 4XX-5XX, then responseError is called on the body, +// the body is closed, and the error returned. +func (c *Client) retryPostJWS(ctx context.Context, key crypto.Signer, url string, body interface{}) (*http.Response, error) { + sleep := sleeper(ctx) + for { + res, err := c.postJWS(ctx, key, url, body) + if err != nil { + return nil, err + } + // handle errors 4XX-5XX with responseError + if res.StatusCode >= 400 && res.StatusCode <= 599 { + err := responseError(res) + res.Body.Close() + // according to spec badNonce is urn:ietf:params:acme:error:badNonce + // however, acme servers in the wild return their version of the error + // https://tools.ietf.org/html/draft-ietf-acme-acme-02#section-5.4 + if ae, ok := err.(*Error); ok && strings.HasSuffix(strings.ToLower(ae.ProblemType), ":badnonce") { + // clear any nonces that we might've stored that might now be + // considered bad + c.clearNonces() + retry := res.Header.Get("Retry-After") + if err := sleep(retry, 1); err != nil { + return nil, err + } + continue + } + return nil, err + } + return res, nil + } +} + +// postJWS signs the body with the given key and POSTs it to the provided url. +// The body argument must be JSON-serializable. +func (c *Client) postJWS(ctx context.Context, key crypto.Signer, url string, body interface{}) (*http.Response, error) { + nonce, err := c.popNonce(ctx, url) + if err != nil { + return nil, err + } + b, err := jwsEncodeJSON(body, key, nonce) + if err != nil { + return nil, err + } + res, err := c.post(ctx, url, "application/jose+json", bytes.NewReader(b)) + if err != nil { + return nil, err + } + c.addNonce(res.Header) + return res, nil +} + +// popNonce returns a nonce value previously stored with c.addNonce +// or fetches a fresh one from the given URL. +func (c *Client) popNonce(ctx context.Context, url string) (string, error) { + c.noncesMu.Lock() + defer c.noncesMu.Unlock() + if len(c.nonces) == 0 { + return c.fetchNonce(ctx, url) + } + var nonce string + for nonce = range c.nonces { + delete(c.nonces, nonce) + break + } + return nonce, nil +} + +// clearNonces clears any stored nonces +func (c *Client) clearNonces() { + c.noncesMu.Lock() + defer c.noncesMu.Unlock() + c.nonces = make(map[string]struct{}) +} + +// addNonce stores a nonce value found in h (if any) for future use. +func (c *Client) addNonce(h http.Header) { + v := nonceFromHeader(h) + if v == "" { + return + } + c.noncesMu.Lock() + defer c.noncesMu.Unlock() + if len(c.nonces) >= maxNonces { + return + } + if c.nonces == nil { + c.nonces = make(map[string]struct{}) + } + c.nonces[v] = struct{}{} +} + +func (c *Client) httpClient() *http.Client { + if c.HTTPClient != nil { + return c.HTTPClient + } + return http.DefaultClient +} + +func (c *Client) get(ctx context.Context, urlStr string) (*http.Response, error) { + req, err := http.NewRequest("GET", urlStr, nil) + if err != nil { + return nil, err + } + return c.do(ctx, req) +} + +func (c *Client) head(ctx context.Context, urlStr string) (*http.Response, error) { + req, err := http.NewRequest("HEAD", urlStr, nil) + if err != nil { + return nil, err + } + return c.do(ctx, req) +} + +func (c *Client) post(ctx context.Context, urlStr, contentType string, body io.Reader) (*http.Response, error) { + req, err := http.NewRequest("POST", urlStr, body) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", contentType) + return c.do(ctx, req) +} + +func (c *Client) do(ctx context.Context, req *http.Request) (*http.Response, error) { + res, err := c.httpClient().Do(req.WithContext(ctx)) + if err != nil { + select { + case <-ctx.Done(): + // Prefer the unadorned context error. + // (The acme package had tests assuming this, previously from ctxhttp's + // behavior, predating net/http supporting contexts natively) + // TODO(bradfitz): reconsider this in the future. But for now this + // requires no test updates. + return nil, ctx.Err() + default: + return nil, err + } + } + return res, nil +} + +func (c *Client) fetchNonce(ctx context.Context, url string) (string, error) { + resp, err := c.head(ctx, url) + if err != nil { + return "", err + } + defer resp.Body.Close() + nonce := nonceFromHeader(resp.Header) + if nonce == "" { + if resp.StatusCode > 299 { + return "", responseError(resp) + } + return "", errors.New("acme: nonce not found") + } + return nonce, nil +} + +func nonceFromHeader(h http.Header) string { + return h.Get("Replay-Nonce") +} + +func (c *Client) responseCert(ctx context.Context, res *http.Response, bundle bool) ([][]byte, error) { + b, err := ioutil.ReadAll(io.LimitReader(res.Body, maxCertSize+1)) + if err != nil { + return nil, fmt.Errorf("acme: response stream: %v", err) + } + if len(b) > maxCertSize { + return nil, errors.New("acme: certificate is too big") + } + cert := [][]byte{b} + if !bundle { + return cert, nil + } + + // Append CA chain cert(s). + // At least one is required according to the spec: + // https://tools.ietf.org/html/draft-ietf-acme-acme-03#section-6.3.1 + up := linkHeader(res.Header, "up") + if len(up) == 0 { + return nil, errors.New("acme: rel=up link not found") + } + if len(up) > maxChainLen { + return nil, errors.New("acme: rel=up link is too large") + } + for _, url := range up { + cc, err := c.chainCert(ctx, url, 0) + if err != nil { + return nil, err + } + cert = append(cert, cc...) + } + return cert, nil +} + +// responseError creates an error of Error type from resp. +func responseError(resp *http.Response) error { + // don't care if ReadAll returns an error: + // json.Unmarshal will fail in that case anyway + b, _ := ioutil.ReadAll(resp.Body) + e := &wireError{Status: resp.StatusCode} + if err := json.Unmarshal(b, e); err != nil { + // this is not a regular error response: + // populate detail with anything we received, + // e.Status will already contain HTTP response code value + e.Detail = string(b) + if e.Detail == "" { + e.Detail = resp.Status + } + } + return e.error(resp.Header) +} + +// chainCert fetches CA certificate chain recursively by following "up" links. +// Each recursive call increments the depth by 1, resulting in an error +// if the recursion level reaches maxChainLen. +// +// First chainCert call starts with depth of 0. +func (c *Client) chainCert(ctx context.Context, url string, depth int) ([][]byte, error) { + if depth >= maxChainLen { + return nil, errors.New("acme: certificate chain is too deep") + } + + res, err := c.get(ctx, url) + if err != nil { + return nil, err + } + defer res.Body.Close() + if res.StatusCode != http.StatusOK { + return nil, responseError(res) + } + b, err := ioutil.ReadAll(io.LimitReader(res.Body, maxCertSize+1)) + if err != nil { + return nil, err + } + if len(b) > maxCertSize { + return nil, errors.New("acme: certificate is too big") + } + chain := [][]byte{b} + + uplink := linkHeader(res.Header, "up") + if len(uplink) > maxChainLen { + return nil, errors.New("acme: certificate chain is too large") + } + for _, up := range uplink { + cc, err := c.chainCert(ctx, up, depth+1) + if err != nil { + return nil, err + } + chain = append(chain, cc...) + } + + return chain, nil +} + +// linkHeader returns URI-Reference values of all Link headers +// with relation-type rel. +// See https://tools.ietf.org/html/rfc5988#section-5 for details. +func linkHeader(h http.Header, rel string) []string { + var links []string + for _, v := range h["Link"] { + parts := strings.Split(v, ";") + for _, p := range parts { + p = strings.TrimSpace(p) + if !strings.HasPrefix(p, "rel=") { + continue + } + if v := strings.Trim(p[4:], `"`); v == rel { + links = append(links, strings.Trim(parts[0], "<>")) + } + } + } + return links +} + +// sleeper returns a function that accepts the Retry-After HTTP header value +// and an increment that's used with backoff to increasingly sleep on +// consecutive calls until the context is done. If the Retry-After header +// cannot be parsed, then backoff is used with a maximum sleep time of 10 +// seconds. +func sleeper(ctx context.Context) func(ra string, inc int) error { + var count int + return func(ra string, inc int) error { + count += inc + d := backoff(count, 10*time.Second) + d = retryAfter(ra, d) + wakeup := time.NewTimer(d) + defer wakeup.Stop() + select { + case <-ctx.Done(): + return ctx.Err() + case <-wakeup.C: + return nil + } + } +} + +// retryAfter parses a Retry-After HTTP header value, +// trying to convert v into an int (seconds) or use http.ParseTime otherwise. +// It returns d if v cannot be parsed. +func retryAfter(v string, d time.Duration) time.Duration { + if i, err := strconv.Atoi(v); err == nil { + return time.Duration(i) * time.Second + } + t, err := http.ParseTime(v) + if err != nil { + return d + } + return t.Sub(timeNow()) +} + +// backoff computes a duration after which an n+1 retry iteration should occur +// using truncated exponential backoff algorithm. +// +// The n argument is always bounded between 0 and 30. +// The max argument defines upper bound for the returned value. +func backoff(n int, max time.Duration) time.Duration { + if n < 0 { + n = 0 + } + if n > 30 { + n = 30 + } + var d time.Duration + if x, err := rand.Int(rand.Reader, big.NewInt(1000)); err == nil { + d = time.Duration(x.Int64()) * time.Millisecond + } + d += time.Duration(1< max { + return max + } + return d +} + +// keyAuth generates a key authorization string for a given token. +func keyAuth(pub crypto.PublicKey, token string) (string, error) { + th, err := JWKThumbprint(pub) + if err != nil { + return "", err + } + return fmt.Sprintf("%s.%s", token, th), nil +} + +// tlsChallengeCert creates a temporary certificate for TLS-SNI challenges +// with the given SANs and auto-generated public/private key pair. +// The Subject Common Name is set to the first SAN to aid debugging. +// To create a cert with a custom key pair, specify WithKey option. +func tlsChallengeCert(san []string, opt []CertOption) (tls.Certificate, error) { + var ( + key crypto.Signer + tmpl *x509.Certificate + ) + for _, o := range opt { + switch o := o.(type) { + case *certOptKey: + if key != nil { + return tls.Certificate{}, errors.New("acme: duplicate key option") + } + key = o.key + case *certOptTemplate: + var t = *(*x509.Certificate)(o) // shallow copy is ok + tmpl = &t + default: + // package's fault, if we let this happen: + panic(fmt.Sprintf("unsupported option type %T", o)) + } + } + if key == nil { + var err error + if key, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader); err != nil { + return tls.Certificate{}, err + } + } + if tmpl == nil { + tmpl = &x509.Certificate{ + SerialNumber: big.NewInt(1), + NotBefore: time.Now(), + NotAfter: time.Now().Add(24 * time.Hour), + BasicConstraintsValid: true, + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + } + } + tmpl.DNSNames = san + if len(san) > 0 { + tmpl.Subject.CommonName = san[0] + } + + der, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, key.Public(), key) + if err != nil { + return tls.Certificate{}, err + } + return tls.Certificate{ + Certificate: [][]byte{der}, + PrivateKey: key, + }, nil +} + +// encodePEM returns b encoded as PEM with block of type typ. +func encodePEM(typ string, b []byte) []byte { + pb := &pem.Block{Type: typ, Bytes: b} + return pem.EncodeToMemory(pb) +} + +// timeNow is useful for testing for fixed current time. +var timeNow = time.Now diff --git a/vendor/golang.org/x/crypto/acme/acme_test.go b/vendor/golang.org/x/crypto/acme/acme_test.go new file mode 100644 index 0000000..b44af59 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/acme_test.go @@ -0,0 +1,1352 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package acme + +import ( + "bytes" + "context" + "crypto/rand" + "crypto/rsa" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/base64" + "encoding/json" + "fmt" + "io/ioutil" + "math/big" + "net/http" + "net/http/httptest" + "reflect" + "sort" + "strings" + "testing" + "time" +) + +// Decodes a JWS-encoded request and unmarshals the decoded JSON into a provided +// interface. +func decodeJWSRequest(t *testing.T, v interface{}, r *http.Request) { + // Decode request + var req struct{ Payload string } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + t.Fatal(err) + } + payload, err := base64.RawURLEncoding.DecodeString(req.Payload) + if err != nil { + t.Fatal(err) + } + err = json.Unmarshal(payload, v) + if err != nil { + t.Fatal(err) + } +} + +type jwsHead struct { + Alg string + Nonce string + JWK map[string]string `json:"jwk"` +} + +func decodeJWSHead(r *http.Request) (*jwsHead, error) { + var req struct{ Protected string } + if err := json.NewDecoder(r.Body).Decode(&req); err != nil { + return nil, err + } + b, err := base64.RawURLEncoding.DecodeString(req.Protected) + if err != nil { + return nil, err + } + var head jwsHead + if err := json.Unmarshal(b, &head); err != nil { + return nil, err + } + return &head, nil +} + +func TestDiscover(t *testing.T) { + const ( + reg = "https://example.com/acme/new-reg" + authz = "https://example.com/acme/new-authz" + cert = "https://example.com/acme/new-cert" + revoke = "https://example.com/acme/revoke-cert" + ) + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + fmt.Fprintf(w, `{ + "new-reg": %q, + "new-authz": %q, + "new-cert": %q, + "revoke-cert": %q + }`, reg, authz, cert, revoke) + })) + defer ts.Close() + c := Client{DirectoryURL: ts.URL} + dir, err := c.Discover(context.Background()) + if err != nil { + t.Fatal(err) + } + if dir.RegURL != reg { + t.Errorf("dir.RegURL = %q; want %q", dir.RegURL, reg) + } + if dir.AuthzURL != authz { + t.Errorf("dir.AuthzURL = %q; want %q", dir.AuthzURL, authz) + } + if dir.CertURL != cert { + t.Errorf("dir.CertURL = %q; want %q", dir.CertURL, cert) + } + if dir.RevokeURL != revoke { + t.Errorf("dir.RevokeURL = %q; want %q", dir.RevokeURL, revoke) + } +} + +func TestRegister(t *testing.T) { + contacts := []string{"mailto:admin@example.com"} + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("Replay-Nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Contact []string + Agreement string + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "new-reg" { + t.Errorf("j.Resource = %q; want new-reg", j.Resource) + } + if !reflect.DeepEqual(j.Contact, contacts) { + t.Errorf("j.Contact = %v; want %v", j.Contact, contacts) + } + + w.Header().Set("Location", "https://ca.tld/acme/reg/1") + w.Header().Set("Link", `;rel="next"`) + w.Header().Add("Link", `;rel="recover"`) + w.Header().Add("Link", `;rel="terms-of-service"`) + w.WriteHeader(http.StatusCreated) + b, _ := json.Marshal(contacts) + fmt.Fprintf(w, `{"contact": %s}`, b) + })) + defer ts.Close() + + prompt := func(url string) bool { + const terms = "https://ca.tld/acme/terms" + if url != terms { + t.Errorf("prompt url = %q; want %q", url, terms) + } + return false + } + + c := Client{Key: testKeyEC, dir: &Directory{RegURL: ts.URL}} + a := &Account{Contact: contacts} + var err error + if a, err = c.Register(context.Background(), a, prompt); err != nil { + t.Fatal(err) + } + if a.URI != "https://ca.tld/acme/reg/1" { + t.Errorf("a.URI = %q; want https://ca.tld/acme/reg/1", a.URI) + } + if a.Authz != "https://ca.tld/acme/new-authz" { + t.Errorf("a.Authz = %q; want https://ca.tld/acme/new-authz", a.Authz) + } + if a.CurrentTerms != "https://ca.tld/acme/terms" { + t.Errorf("a.CurrentTerms = %q; want https://ca.tld/acme/terms", a.CurrentTerms) + } + if !reflect.DeepEqual(a.Contact, contacts) { + t.Errorf("a.Contact = %v; want %v", a.Contact, contacts) + } +} + +func TestUpdateReg(t *testing.T) { + const terms = "https://ca.tld/acme/terms" + contacts := []string{"mailto:admin@example.com"} + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("Replay-Nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Contact []string + Agreement string + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "reg" { + t.Errorf("j.Resource = %q; want reg", j.Resource) + } + if j.Agreement != terms { + t.Errorf("j.Agreement = %q; want %q", j.Agreement, terms) + } + if !reflect.DeepEqual(j.Contact, contacts) { + t.Errorf("j.Contact = %v; want %v", j.Contact, contacts) + } + + w.Header().Set("Link", `;rel="next"`) + w.Header().Add("Link", `;rel="recover"`) + w.Header().Add("Link", fmt.Sprintf(`<%s>;rel="terms-of-service"`, terms)) + w.WriteHeader(http.StatusOK) + b, _ := json.Marshal(contacts) + fmt.Fprintf(w, `{"contact":%s, "agreement":%q}`, b, terms) + })) + defer ts.Close() + + c := Client{Key: testKeyEC} + a := &Account{URI: ts.URL, Contact: contacts, AgreedTerms: terms} + var err error + if a, err = c.UpdateReg(context.Background(), a); err != nil { + t.Fatal(err) + } + if a.Authz != "https://ca.tld/acme/new-authz" { + t.Errorf("a.Authz = %q; want https://ca.tld/acme/new-authz", a.Authz) + } + if a.AgreedTerms != terms { + t.Errorf("a.AgreedTerms = %q; want %q", a.AgreedTerms, terms) + } + if a.CurrentTerms != terms { + t.Errorf("a.CurrentTerms = %q; want %q", a.CurrentTerms, terms) + } + if a.URI != ts.URL { + t.Errorf("a.URI = %q; want %q", a.URI, ts.URL) + } +} + +func TestGetReg(t *testing.T) { + const terms = "https://ca.tld/acme/terms" + const newTerms = "https://ca.tld/acme/new-terms" + contacts := []string{"mailto:admin@example.com"} + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("Replay-Nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Contact []string + Agreement string + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "reg" { + t.Errorf("j.Resource = %q; want reg", j.Resource) + } + if len(j.Contact) != 0 { + t.Errorf("j.Contact = %v", j.Contact) + } + if j.Agreement != "" { + t.Errorf("j.Agreement = %q", j.Agreement) + } + + w.Header().Set("Link", `;rel="next"`) + w.Header().Add("Link", `;rel="recover"`) + w.Header().Add("Link", fmt.Sprintf(`<%s>;rel="terms-of-service"`, newTerms)) + w.WriteHeader(http.StatusOK) + b, _ := json.Marshal(contacts) + fmt.Fprintf(w, `{"contact":%s, "agreement":%q}`, b, terms) + })) + defer ts.Close() + + c := Client{Key: testKeyEC} + a, err := c.GetReg(context.Background(), ts.URL) + if err != nil { + t.Fatal(err) + } + if a.Authz != "https://ca.tld/acme/new-authz" { + t.Errorf("a.AuthzURL = %q; want https://ca.tld/acme/new-authz", a.Authz) + } + if a.AgreedTerms != terms { + t.Errorf("a.AgreedTerms = %q; want %q", a.AgreedTerms, terms) + } + if a.CurrentTerms != newTerms { + t.Errorf("a.CurrentTerms = %q; want %q", a.CurrentTerms, newTerms) + } + if a.URI != ts.URL { + t.Errorf("a.URI = %q; want %q", a.URI, ts.URL) + } +} + +func TestAuthorize(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("Replay-Nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Identifier struct { + Type string + Value string + } + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "new-authz" { + t.Errorf("j.Resource = %q; want new-authz", j.Resource) + } + if j.Identifier.Type != "dns" { + t.Errorf("j.Identifier.Type = %q; want dns", j.Identifier.Type) + } + if j.Identifier.Value != "example.com" { + t.Errorf("j.Identifier.Value = %q; want example.com", j.Identifier.Value) + } + + w.Header().Set("Location", "https://ca.tld/acme/auth/1") + w.WriteHeader(http.StatusCreated) + fmt.Fprintf(w, `{ + "identifier": {"type":"dns","value":"example.com"}, + "status":"pending", + "challenges":[ + { + "type":"http-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id1", + "token":"token1" + }, + { + "type":"tls-sni-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id2", + "token":"token2" + } + ], + "combinations":[[0],[1]]}`) + })) + defer ts.Close() + + cl := Client{Key: testKeyEC, dir: &Directory{AuthzURL: ts.URL}} + auth, err := cl.Authorize(context.Background(), "example.com") + if err != nil { + t.Fatal(err) + } + + if auth.URI != "https://ca.tld/acme/auth/1" { + t.Errorf("URI = %q; want https://ca.tld/acme/auth/1", auth.URI) + } + if auth.Status != "pending" { + t.Errorf("Status = %q; want pending", auth.Status) + } + if auth.Identifier.Type != "dns" { + t.Errorf("Identifier.Type = %q; want dns", auth.Identifier.Type) + } + if auth.Identifier.Value != "example.com" { + t.Errorf("Identifier.Value = %q; want example.com", auth.Identifier.Value) + } + + if n := len(auth.Challenges); n != 2 { + t.Fatalf("len(auth.Challenges) = %d; want 2", n) + } + + c := auth.Challenges[0] + if c.Type != "http-01" { + t.Errorf("c.Type = %q; want http-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id1" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id1", c.URI) + } + if c.Token != "token1" { + t.Errorf("c.Token = %q; want token1", c.Token) + } + + c = auth.Challenges[1] + if c.Type != "tls-sni-01" { + t.Errorf("c.Type = %q; want tls-sni-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id2" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id2", c.URI) + } + if c.Token != "token2" { + t.Errorf("c.Token = %q; want token2", c.Token) + } + + combs := [][]int{{0}, {1}} + if !reflect.DeepEqual(auth.Combinations, combs) { + t.Errorf("auth.Combinations: %+v\nwant: %+v\n", auth.Combinations, combs) + } +} + +func TestAuthorizeValid(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("Replay-Nonce", "nonce") + return + } + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"status":"valid"}`)) + })) + defer ts.Close() + client := Client{Key: testKey, dir: &Directory{AuthzURL: ts.URL}} + _, err := client.Authorize(context.Background(), "example.com") + if err != nil { + t.Errorf("err = %v", err) + } +} + +func TestGetAuthorization(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + t.Errorf("r.Method = %q; want GET", r.Method) + } + + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, `{ + "identifier": {"type":"dns","value":"example.com"}, + "status":"pending", + "challenges":[ + { + "type":"http-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id1", + "token":"token1" + }, + { + "type":"tls-sni-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id2", + "token":"token2" + } + ], + "combinations":[[0],[1]]}`) + })) + defer ts.Close() + + cl := Client{Key: testKeyEC} + auth, err := cl.GetAuthorization(context.Background(), ts.URL) + if err != nil { + t.Fatal(err) + } + + if auth.Status != "pending" { + t.Errorf("Status = %q; want pending", auth.Status) + } + if auth.Identifier.Type != "dns" { + t.Errorf("Identifier.Type = %q; want dns", auth.Identifier.Type) + } + if auth.Identifier.Value != "example.com" { + t.Errorf("Identifier.Value = %q; want example.com", auth.Identifier.Value) + } + + if n := len(auth.Challenges); n != 2 { + t.Fatalf("len(set.Challenges) = %d; want 2", n) + } + + c := auth.Challenges[0] + if c.Type != "http-01" { + t.Errorf("c.Type = %q; want http-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id1" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id1", c.URI) + } + if c.Token != "token1" { + t.Errorf("c.Token = %q; want token1", c.Token) + } + + c = auth.Challenges[1] + if c.Type != "tls-sni-01" { + t.Errorf("c.Type = %q; want tls-sni-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id2" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id2", c.URI) + } + if c.Token != "token2" { + t.Errorf("c.Token = %q; want token2", c.Token) + } + + combs := [][]int{{0}, {1}} + if !reflect.DeepEqual(auth.Combinations, combs) { + t.Errorf("auth.Combinations: %+v\nwant: %+v\n", auth.Combinations, combs) + } +} + +func TestWaitAuthorization(t *testing.T) { + var count int + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + count++ + w.Header().Set("Retry-After", "0") + if count > 1 { + fmt.Fprintf(w, `{"status":"valid"}`) + return + } + fmt.Fprintf(w, `{"status":"pending"}`) + })) + defer ts.Close() + + type res struct { + authz *Authorization + err error + } + done := make(chan res) + defer close(done) + go func() { + var client Client + a, err := client.WaitAuthorization(context.Background(), ts.URL) + done <- res{a, err} + }() + + select { + case <-time.After(5 * time.Second): + t.Fatal("WaitAuthz took too long to return") + case res := <-done: + if res.err != nil { + t.Fatalf("res.err = %v", res.err) + } + if res.authz == nil { + t.Fatal("res.authz is nil") + } + } +} + +func TestWaitAuthorizationInvalid(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, `{"status":"invalid"}`) + })) + defer ts.Close() + + res := make(chan error) + defer close(res) + go func() { + var client Client + _, err := client.WaitAuthorization(context.Background(), ts.URL) + res <- err + }() + + select { + case <-time.After(3 * time.Second): + t.Fatal("WaitAuthz took too long to return") + case err := <-res: + if err == nil { + t.Error("err is nil") + } + if _, ok := err.(*AuthorizationError); !ok { + t.Errorf("err is %T; want *AuthorizationError", err) + } + } +} + +func TestWaitAuthorizationCancel(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Retry-After", "60") + fmt.Fprintf(w, `{"status":"pending"}`) + })) + defer ts.Close() + + res := make(chan error) + defer close(res) + go func() { + var client Client + ctx, cancel := context.WithTimeout(context.Background(), 200*time.Millisecond) + defer cancel() + _, err := client.WaitAuthorization(ctx, ts.URL) + res <- err + }() + + select { + case <-time.After(time.Second): + t.Fatal("WaitAuthz took too long to return") + case err := <-res: + if err == nil { + t.Error("err is nil") + } + } +} + +func TestRevokeAuthorization(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("Replay-Nonce", "nonce") + return + } + switch r.URL.Path { + case "/1": + var req struct { + Resource string + Status string + Delete bool + } + decodeJWSRequest(t, &req, r) + if req.Resource != "authz" { + t.Errorf("req.Resource = %q; want authz", req.Resource) + } + if req.Status != "deactivated" { + t.Errorf("req.Status = %q; want deactivated", req.Status) + } + if !req.Delete { + t.Errorf("req.Delete is false") + } + case "/2": + w.WriteHeader(http.StatusInternalServerError) + } + })) + defer ts.Close() + client := &Client{Key: testKey} + ctx := context.Background() + if err := client.RevokeAuthorization(ctx, ts.URL+"/1"); err != nil { + t.Errorf("err = %v", err) + } + if client.RevokeAuthorization(ctx, ts.URL+"/2") == nil { + t.Error("nil error") + } +} + +func TestPollChallenge(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "GET" { + t.Errorf("r.Method = %q; want GET", r.Method) + } + + w.WriteHeader(http.StatusOK) + fmt.Fprintf(w, `{ + "type":"http-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id1", + "token":"token1"}`) + })) + defer ts.Close() + + cl := Client{Key: testKeyEC} + chall, err := cl.GetChallenge(context.Background(), ts.URL) + if err != nil { + t.Fatal(err) + } + + if chall.Status != "pending" { + t.Errorf("Status = %q; want pending", chall.Status) + } + if chall.Type != "http-01" { + t.Errorf("c.Type = %q; want http-01", chall.Type) + } + if chall.URI != "https://ca.tld/acme/challenge/publickey/id1" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id1", chall.URI) + } + if chall.Token != "token1" { + t.Errorf("c.Token = %q; want token1", chall.Token) + } +} + +func TestAcceptChallenge(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("Replay-Nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string + Type string + Auth string `json:"keyAuthorization"` + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "challenge" { + t.Errorf(`resource = %q; want "challenge"`, j.Resource) + } + if j.Type != "http-01" { + t.Errorf(`type = %q; want "http-01"`, j.Type) + } + keyAuth := "token1." + testKeyECThumbprint + if j.Auth != keyAuth { + t.Errorf(`keyAuthorization = %q; want %q`, j.Auth, keyAuth) + } + + // Respond to request + w.WriteHeader(http.StatusAccepted) + fmt.Fprintf(w, `{ + "type":"http-01", + "status":"pending", + "uri":"https://ca.tld/acme/challenge/publickey/id1", + "token":"token1", + "keyAuthorization":%q + }`, keyAuth) + })) + defer ts.Close() + + cl := Client{Key: testKeyEC} + c, err := cl.Accept(context.Background(), &Challenge{ + URI: ts.URL, + Token: "token1", + Type: "http-01", + }) + if err != nil { + t.Fatal(err) + } + + if c.Type != "http-01" { + t.Errorf("c.Type = %q; want http-01", c.Type) + } + if c.URI != "https://ca.tld/acme/challenge/publickey/id1" { + t.Errorf("c.URI = %q; want https://ca.tld/acme/challenge/publickey/id1", c.URI) + } + if c.Token != "token1" { + t.Errorf("c.Token = %q; want token1", c.Token) + } +} + +func TestNewCert(t *testing.T) { + notBefore := time.Now() + notAfter := notBefore.AddDate(0, 2, 0) + timeNow = func() time.Time { return notBefore } + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("Replay-Nonce", "test-nonce") + return + } + if r.Method != "POST" { + t.Errorf("r.Method = %q; want POST", r.Method) + } + + var j struct { + Resource string `json:"resource"` + CSR string `json:"csr"` + NotBefore string `json:"notBefore,omitempty"` + NotAfter string `json:"notAfter,omitempty"` + } + decodeJWSRequest(t, &j, r) + + // Test request + if j.Resource != "new-cert" { + t.Errorf(`resource = %q; want "new-cert"`, j.Resource) + } + if j.NotBefore != notBefore.Format(time.RFC3339) { + t.Errorf(`notBefore = %q; wanted %q`, j.NotBefore, notBefore.Format(time.RFC3339)) + } + if j.NotAfter != notAfter.Format(time.RFC3339) { + t.Errorf(`notAfter = %q; wanted %q`, j.NotAfter, notAfter.Format(time.RFC3339)) + } + + // Respond to request + template := x509.Certificate{ + SerialNumber: big.NewInt(int64(1)), + Subject: pkix.Name{ + Organization: []string{"goacme"}, + }, + NotBefore: notBefore, + NotAfter: notAfter, + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + BasicConstraintsValid: true, + } + + sampleCert, err := x509.CreateCertificate(rand.Reader, &template, &template, &testKeyEC.PublicKey, testKeyEC) + if err != nil { + t.Fatalf("Error creating certificate: %v", err) + } + + w.Header().Set("Location", "https://ca.tld/acme/cert/1") + w.WriteHeader(http.StatusCreated) + w.Write(sampleCert) + })) + defer ts.Close() + + csr := x509.CertificateRequest{ + Version: 0, + Subject: pkix.Name{ + CommonName: "example.com", + Organization: []string{"goacme"}, + }, + } + csrb, err := x509.CreateCertificateRequest(rand.Reader, &csr, testKeyEC) + if err != nil { + t.Fatal(err) + } + + c := Client{Key: testKeyEC, dir: &Directory{CertURL: ts.URL}} + cert, certURL, err := c.CreateCert(context.Background(), csrb, notAfter.Sub(notBefore), false) + if err != nil { + t.Fatal(err) + } + if cert == nil { + t.Errorf("cert is nil") + } + if certURL != "https://ca.tld/acme/cert/1" { + t.Errorf("certURL = %q; want https://ca.tld/acme/cert/1", certURL) + } +} + +func TestFetchCert(t *testing.T) { + var count byte + var ts *httptest.Server + ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + count++ + if count < 3 { + up := fmt.Sprintf("<%s>;rel=up", ts.URL) + w.Header().Set("Link", up) + } + w.Write([]byte{count}) + })) + defer ts.Close() + res, err := (&Client{}).FetchCert(context.Background(), ts.URL, true) + if err != nil { + t.Fatalf("FetchCert: %v", err) + } + cert := [][]byte{{1}, {2}, {3}} + if !reflect.DeepEqual(res, cert) { + t.Errorf("res = %v; want %v", res, cert) + } +} + +func TestFetchCertRetry(t *testing.T) { + var count int + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if count < 1 { + w.Header().Set("Retry-After", "0") + w.WriteHeader(http.StatusAccepted) + count++ + return + } + w.Write([]byte{1}) + })) + defer ts.Close() + res, err := (&Client{}).FetchCert(context.Background(), ts.URL, false) + if err != nil { + t.Fatalf("FetchCert: %v", err) + } + cert := [][]byte{{1}} + if !reflect.DeepEqual(res, cert) { + t.Errorf("res = %v; want %v", res, cert) + } +} + +func TestFetchCertCancel(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Retry-After", "0") + w.WriteHeader(http.StatusAccepted) + })) + defer ts.Close() + ctx, cancel := context.WithCancel(context.Background()) + done := make(chan struct{}) + var err error + go func() { + _, err = (&Client{}).FetchCert(ctx, ts.URL, false) + close(done) + }() + cancel() + <-done + if err != context.Canceled { + t.Errorf("err = %v; want %v", err, context.Canceled) + } +} + +func TestFetchCertDepth(t *testing.T) { + var count byte + var ts *httptest.Server + ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + count++ + if count > maxChainLen+1 { + t.Errorf("count = %d; want at most %d", count, maxChainLen+1) + w.WriteHeader(http.StatusInternalServerError) + } + w.Header().Set("Link", fmt.Sprintf("<%s>;rel=up", ts.URL)) + w.Write([]byte{count}) + })) + defer ts.Close() + _, err := (&Client{}).FetchCert(context.Background(), ts.URL, true) + if err == nil { + t.Errorf("err is nil") + } +} + +func TestFetchCertBreadth(t *testing.T) { + var ts *httptest.Server + ts = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + for i := 0; i < maxChainLen+1; i++ { + w.Header().Add("Link", fmt.Sprintf("<%s>;rel=up", ts.URL)) + } + w.Write([]byte{1}) + })) + defer ts.Close() + _, err := (&Client{}).FetchCert(context.Background(), ts.URL, true) + if err == nil { + t.Errorf("err is nil") + } +} + +func TestFetchCertSize(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + b := bytes.Repeat([]byte{1}, maxCertSize+1) + w.Write(b) + })) + defer ts.Close() + _, err := (&Client{}).FetchCert(context.Background(), ts.URL, false) + if err == nil { + t.Errorf("err is nil") + } +} + +func TestRevokeCert(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method == "HEAD" { + w.Header().Set("Replay-Nonce", "nonce") + return + } + + var req struct { + Resource string + Certificate string + Reason int + } + decodeJWSRequest(t, &req, r) + if req.Resource != "revoke-cert" { + t.Errorf("req.Resource = %q; want revoke-cert", req.Resource) + } + if req.Reason != 1 { + t.Errorf("req.Reason = %d; want 1", req.Reason) + } + // echo -n cert | base64 | tr -d '=' | tr '/+' '_-' + cert := "Y2VydA" + if req.Certificate != cert { + t.Errorf("req.Certificate = %q; want %q", req.Certificate, cert) + } + })) + defer ts.Close() + client := &Client{ + Key: testKeyEC, + dir: &Directory{RevokeURL: ts.URL}, + } + ctx := context.Background() + if err := client.RevokeCert(ctx, nil, []byte("cert"), CRLReasonKeyCompromise); err != nil { + t.Fatal(err) + } +} + +func TestNonce_add(t *testing.T) { + var c Client + c.addNonce(http.Header{"Replay-Nonce": {"nonce"}}) + c.addNonce(http.Header{"Replay-Nonce": {}}) + c.addNonce(http.Header{"Replay-Nonce": {"nonce"}}) + + nonces := map[string]struct{}{"nonce": struct{}{}} + if !reflect.DeepEqual(c.nonces, nonces) { + t.Errorf("c.nonces = %q; want %q", c.nonces, nonces) + } +} + +func TestNonce_addMax(t *testing.T) { + c := &Client{nonces: make(map[string]struct{})} + for i := 0; i < maxNonces; i++ { + c.nonces[fmt.Sprintf("%d", i)] = struct{}{} + } + c.addNonce(http.Header{"Replay-Nonce": {"nonce"}}) + if n := len(c.nonces); n != maxNonces { + t.Errorf("len(c.nonces) = %d; want %d", n, maxNonces) + } +} + +func TestNonce_fetch(t *testing.T) { + tests := []struct { + code int + nonce string + }{ + {http.StatusOK, "nonce1"}, + {http.StatusBadRequest, "nonce2"}, + {http.StatusOK, ""}, + } + var i int + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Method != "HEAD" { + t.Errorf("%d: r.Method = %q; want HEAD", i, r.Method) + } + w.Header().Set("Replay-Nonce", tests[i].nonce) + w.WriteHeader(tests[i].code) + })) + defer ts.Close() + for ; i < len(tests); i++ { + test := tests[i] + c := &Client{} + n, err := c.fetchNonce(context.Background(), ts.URL) + if n != test.nonce { + t.Errorf("%d: n=%q; want %q", i, n, test.nonce) + } + switch { + case err == nil && test.nonce == "": + t.Errorf("%d: n=%q, err=%v; want non-nil error", i, n, err) + case err != nil && test.nonce != "": + t.Errorf("%d: n=%q, err=%v; want %q", i, n, err, test.nonce) + } + } +} + +func TestNonce_fetchError(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusTooManyRequests) + })) + defer ts.Close() + c := &Client{} + _, err := c.fetchNonce(context.Background(), ts.URL) + e, ok := err.(*Error) + if !ok { + t.Fatalf("err is %T; want *Error", err) + } + if e.StatusCode != http.StatusTooManyRequests { + t.Errorf("e.StatusCode = %d; want %d", e.StatusCode, http.StatusTooManyRequests) + } +} + +func TestNonce_postJWS(t *testing.T) { + var count int + seen := make(map[string]bool) + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + count++ + w.Header().Set("Replay-Nonce", fmt.Sprintf("nonce%d", count)) + if r.Method == "HEAD" { + // We expect the client do a HEAD request + // but only to fetch the first nonce. + return + } + // Make client.Authorize happy; we're not testing its result. + defer func() { + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"status":"valid"}`)) + }() + + head, err := decodeJWSHead(r) + if err != nil { + t.Errorf("decodeJWSHead: %v", err) + return + } + if head.Nonce == "" { + t.Error("head.Nonce is empty") + return + } + if seen[head.Nonce] { + t.Errorf("nonce is already used: %q", head.Nonce) + } + seen[head.Nonce] = true + })) + defer ts.Close() + + client := Client{Key: testKey, dir: &Directory{AuthzURL: ts.URL}} + if _, err := client.Authorize(context.Background(), "example.com"); err != nil { + t.Errorf("client.Authorize 1: %v", err) + } + // The second call should not generate another extra HEAD request. + if _, err := client.Authorize(context.Background(), "example.com"); err != nil { + t.Errorf("client.Authorize 2: %v", err) + } + + if count != 3 { + t.Errorf("total requests count: %d; want 3", count) + } + if n := len(client.nonces); n != 1 { + t.Errorf("len(client.nonces) = %d; want 1", n) + } + for k := range seen { + if _, exist := client.nonces[k]; exist { + t.Errorf("used nonce %q in client.nonces", k) + } + } +} + +func TestRetryPostJWS(t *testing.T) { + var count int + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + count++ + w.Header().Set("Replay-Nonce", fmt.Sprintf("nonce%d", count)) + if r.Method == "HEAD" { + // We expect the client to do 2 head requests to fetch + // nonces, one to start and another after getting badNonce + return + } + + head, err := decodeJWSHead(r) + if err != nil { + t.Errorf("decodeJWSHead: %v", err) + } else if head.Nonce == "" { + t.Error("head.Nonce is empty") + } else if head.Nonce == "nonce1" { + // return a badNonce error to force the call to retry + w.WriteHeader(http.StatusBadRequest) + w.Write([]byte(`{"type":"urn:ietf:params:acme:error:badNonce"}`)) + return + } + // Make client.Authorize happy; we're not testing its result. + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"status":"valid"}`)) + })) + defer ts.Close() + + client := Client{Key: testKey, dir: &Directory{AuthzURL: ts.URL}} + // This call will fail with badNonce, causing a retry + if _, err := client.Authorize(context.Background(), "example.com"); err != nil { + t.Errorf("client.Authorize 1: %v", err) + } + if count != 4 { + t.Errorf("total requests count: %d; want 4", count) + } +} + +func TestLinkHeader(t *testing.T) { + h := http.Header{"Link": { + `;rel="next"`, + `; rel=recover`, + `; foo=bar; rel="terms-of-service"`, + `;rel="next"`, + }} + tests := []struct { + rel string + out []string + }{ + {"next", []string{"https://example.com/acme/new-authz", "dup"}}, + {"recover", []string{"https://example.com/acme/recover-reg"}}, + {"terms-of-service", []string{"https://example.com/acme/terms"}}, + {"empty", nil}, + } + for i, test := range tests { + if v := linkHeader(h, test.rel); !reflect.DeepEqual(v, test.out) { + t.Errorf("%d: linkHeader(%q): %v; want %v", i, test.rel, v, test.out) + } + } +} + +func TestErrorResponse(t *testing.T) { + s := `{ + "status": 400, + "type": "urn:acme:error:xxx", + "detail": "text" + }` + res := &http.Response{ + StatusCode: 400, + Status: "400 Bad Request", + Body: ioutil.NopCloser(strings.NewReader(s)), + Header: http.Header{"X-Foo": {"bar"}}, + } + err := responseError(res) + v, ok := err.(*Error) + if !ok { + t.Fatalf("err = %+v (%T); want *Error type", err, err) + } + if v.StatusCode != 400 { + t.Errorf("v.StatusCode = %v; want 400", v.StatusCode) + } + if v.ProblemType != "urn:acme:error:xxx" { + t.Errorf("v.ProblemType = %q; want urn:acme:error:xxx", v.ProblemType) + } + if v.Detail != "text" { + t.Errorf("v.Detail = %q; want text", v.Detail) + } + if !reflect.DeepEqual(v.Header, res.Header) { + t.Errorf("v.Header = %+v; want %+v", v.Header, res.Header) + } +} + +func TestTLSSNI01ChallengeCert(t *testing.T) { + const ( + token = "evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA" + // echo -n | shasum -a 256 + san = "dbbd5eefe7b4d06eb9d1d9f5acb4c7cd.a27d320e4b30332f0b6cb441734ad7b0.acme.invalid" + ) + + client := &Client{Key: testKeyEC} + tlscert, name, err := client.TLSSNI01ChallengeCert(token) + if err != nil { + t.Fatal(err) + } + + if n := len(tlscert.Certificate); n != 1 { + t.Fatalf("len(tlscert.Certificate) = %d; want 1", n) + } + cert, err := x509.ParseCertificate(tlscert.Certificate[0]) + if err != nil { + t.Fatal(err) + } + if len(cert.DNSNames) != 1 || cert.DNSNames[0] != san { + t.Fatalf("cert.DNSNames = %v; want %q", cert.DNSNames, san) + } + if cert.DNSNames[0] != name { + t.Errorf("cert.DNSNames[0] != name: %q vs %q", cert.DNSNames[0], name) + } + if cn := cert.Subject.CommonName; cn != san { + t.Errorf("cert.Subject.CommonName = %q; want %q", cn, san) + } +} + +func TestTLSSNI02ChallengeCert(t *testing.T) { + const ( + token = "evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA" + // echo -n evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA | shasum -a 256 + sanA = "7ea0aaa69214e71e02cebb18bb867736.09b730209baabf60e43d4999979ff139.token.acme.invalid" + // echo -n | shasum -a 256 + sanB = "dbbd5eefe7b4d06eb9d1d9f5acb4c7cd.a27d320e4b30332f0b6cb441734ad7b0.ka.acme.invalid" + ) + + client := &Client{Key: testKeyEC} + tlscert, name, err := client.TLSSNI02ChallengeCert(token) + if err != nil { + t.Fatal(err) + } + + if n := len(tlscert.Certificate); n != 1 { + t.Fatalf("len(tlscert.Certificate) = %d; want 1", n) + } + cert, err := x509.ParseCertificate(tlscert.Certificate[0]) + if err != nil { + t.Fatal(err) + } + names := []string{sanA, sanB} + if !reflect.DeepEqual(cert.DNSNames, names) { + t.Fatalf("cert.DNSNames = %v;\nwant %v", cert.DNSNames, names) + } + sort.Strings(cert.DNSNames) + i := sort.SearchStrings(cert.DNSNames, name) + if i >= len(cert.DNSNames) || cert.DNSNames[i] != name { + t.Errorf("%v doesn't have %q", cert.DNSNames, name) + } + if cn := cert.Subject.CommonName; cn != sanA { + t.Errorf("CommonName = %q; want %q", cn, sanA) + } +} + +func TestTLSChallengeCertOpt(t *testing.T) { + key, err := rsa.GenerateKey(rand.Reader, 512) + if err != nil { + t.Fatal(err) + } + tmpl := &x509.Certificate{ + SerialNumber: big.NewInt(2), + Subject: pkix.Name{Organization: []string{"Test"}}, + DNSNames: []string{"should-be-overwritten"}, + } + opts := []CertOption{WithKey(key), WithTemplate(tmpl)} + + client := &Client{Key: testKeyEC} + cert1, _, err := client.TLSSNI01ChallengeCert("token", opts...) + if err != nil { + t.Fatal(err) + } + cert2, _, err := client.TLSSNI02ChallengeCert("token", opts...) + if err != nil { + t.Fatal(err) + } + + for i, tlscert := range []tls.Certificate{cert1, cert2} { + // verify generated cert private key + tlskey, ok := tlscert.PrivateKey.(*rsa.PrivateKey) + if !ok { + t.Errorf("%d: tlscert.PrivateKey is %T; want *rsa.PrivateKey", i, tlscert.PrivateKey) + continue + } + if tlskey.D.Cmp(key.D) != 0 { + t.Errorf("%d: tlskey.D = %v; want %v", i, tlskey.D, key.D) + } + // verify generated cert public key + x509Cert, err := x509.ParseCertificate(tlscert.Certificate[0]) + if err != nil { + t.Errorf("%d: %v", i, err) + continue + } + tlspub, ok := x509Cert.PublicKey.(*rsa.PublicKey) + if !ok { + t.Errorf("%d: x509Cert.PublicKey is %T; want *rsa.PublicKey", i, x509Cert.PublicKey) + continue + } + if tlspub.N.Cmp(key.N) != 0 { + t.Errorf("%d: tlspub.N = %v; want %v", i, tlspub.N, key.N) + } + // verify template option + sn := big.NewInt(2) + if x509Cert.SerialNumber.Cmp(sn) != 0 { + t.Errorf("%d: SerialNumber = %v; want %v", i, x509Cert.SerialNumber, sn) + } + org := []string{"Test"} + if !reflect.DeepEqual(x509Cert.Subject.Organization, org) { + t.Errorf("%d: Subject.Organization = %+v; want %+v", i, x509Cert.Subject.Organization, org) + } + for _, v := range x509Cert.DNSNames { + if !strings.HasSuffix(v, ".acme.invalid") { + t.Errorf("%d: invalid DNSNames element: %q", i, v) + } + } + } +} + +func TestHTTP01Challenge(t *testing.T) { + const ( + token = "xxx" + // thumbprint is precomputed for testKeyEC in jws_test.go + value = token + "." + testKeyECThumbprint + urlpath = "/.well-known/acme-challenge/" + token + ) + client := &Client{Key: testKeyEC} + val, err := client.HTTP01ChallengeResponse(token) + if err != nil { + t.Fatal(err) + } + if val != value { + t.Errorf("val = %q; want %q", val, value) + } + if path := client.HTTP01ChallengePath(token); path != urlpath { + t.Errorf("path = %q; want %q", path, urlpath) + } +} + +func TestDNS01ChallengeRecord(t *testing.T) { + // echo -n xxx. | \ + // openssl dgst -binary -sha256 | \ + // base64 | tr -d '=' | tr '/+' '_-' + const value = "8DERMexQ5VcdJ_prpPiA0mVdp7imgbCgjsG4SqqNMIo" + + client := &Client{Key: testKeyEC} + val, err := client.DNS01ChallengeRecord("xxx") + if err != nil { + t.Fatal(err) + } + if val != value { + t.Errorf("val = %q; want %q", val, value) + } +} + +func TestBackoff(t *testing.T) { + tt := []struct{ min, max time.Duration }{ + {time.Second, 2 * time.Second}, + {2 * time.Second, 3 * time.Second}, + {4 * time.Second, 5 * time.Second}, + {8 * time.Second, 9 * time.Second}, + } + for i, test := range tt { + d := backoff(i, time.Minute) + if d < test.min || test.max < d { + t.Errorf("%d: d = %v; want between %v and %v", i, d, test.min, test.max) + } + } + + min, max := time.Second, 2*time.Second + if d := backoff(-1, time.Minute); d < min || max < d { + t.Errorf("d = %v; want between %v and %v", d, min, max) + } + + bound := 10 * time.Second + if d := backoff(100, bound); d != bound { + t.Errorf("d = %v; want %v", d, bound) + } +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/autocert.go b/vendor/golang.org/x/crypto/acme/autocert/autocert.go new file mode 100644 index 0000000..94edba9 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/autocert.go @@ -0,0 +1,821 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package autocert provides automatic access to certificates from Let's Encrypt +// and any other ACME-based CA. +// +// This package is a work in progress and makes no API stability promises. +package autocert + +import ( + "bytes" + "context" + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "errors" + "fmt" + "io" + mathrand "math/rand" + "net/http" + "strconv" + "strings" + "sync" + "time" + + "golang.org/x/crypto/acme" +) + +// createCertRetryAfter is how much time to wait before removing a failed state +// entry due to an unsuccessful createCert call. +// This is a variable instead of a const for testing. +// TODO: Consider making it configurable or an exp backoff? +var createCertRetryAfter = time.Minute + +// pseudoRand is safe for concurrent use. +var pseudoRand *lockedMathRand + +func init() { + src := mathrand.NewSource(timeNow().UnixNano()) + pseudoRand = &lockedMathRand{rnd: mathrand.New(src)} +} + +// AcceptTOS is a Manager.Prompt function that always returns true to +// indicate acceptance of the CA's Terms of Service during account +// registration. +func AcceptTOS(tosURL string) bool { return true } + +// HostPolicy specifies which host names the Manager is allowed to respond to. +// It returns a non-nil error if the host should be rejected. +// The returned error is accessible via tls.Conn.Handshake and its callers. +// See Manager's HostPolicy field and GetCertificate method docs for more details. +type HostPolicy func(ctx context.Context, host string) error + +// HostWhitelist returns a policy where only the specified host names are allowed. +// Only exact matches are currently supported. Subdomains, regexp or wildcard +// will not match. +func HostWhitelist(hosts ...string) HostPolicy { + whitelist := make(map[string]bool, len(hosts)) + for _, h := range hosts { + whitelist[h] = true + } + return func(_ context.Context, host string) error { + if !whitelist[host] { + return errors.New("acme/autocert: host not configured") + } + return nil + } +} + +// defaultHostPolicy is used when Manager.HostPolicy is not set. +func defaultHostPolicy(context.Context, string) error { + return nil +} + +// Manager is a stateful certificate manager built on top of acme.Client. +// It obtains and refreshes certificates automatically, +// as well as providing them to a TLS server via tls.Config. +// +// You must specify a cache implementation, such as DirCache, +// to reuse obtained certificates across program restarts. +// Otherwise your server is very likely to exceed the certificate +// issuer's request rate limits. +type Manager struct { + // Prompt specifies a callback function to conditionally accept a CA's Terms of Service (TOS). + // The registration may require the caller to agree to the CA's TOS. + // If so, Manager calls Prompt with a TOS URL provided by the CA. Prompt should report + // whether the caller agrees to the terms. + // + // To always accept the terms, the callers can use AcceptTOS. + Prompt func(tosURL string) bool + + // Cache optionally stores and retrieves previously-obtained certificates. + // If nil, certs will only be cached for the lifetime of the Manager. + // + // Manager passes the Cache certificates data encoded in PEM, with private/public + // parts combined in a single Cache.Put call, private key first. + Cache Cache + + // HostPolicy controls which domains the Manager will attempt + // to retrieve new certificates for. It does not affect cached certs. + // + // If non-nil, HostPolicy is called before requesting a new cert. + // If nil, all hosts are currently allowed. This is not recommended, + // as it opens a potential attack where clients connect to a server + // by IP address and pretend to be asking for an incorrect host name. + // Manager will attempt to obtain a certificate for that host, incorrectly, + // eventually reaching the CA's rate limit for certificate requests + // and making it impossible to obtain actual certificates. + // + // See GetCertificate for more details. + HostPolicy HostPolicy + + // RenewBefore optionally specifies how early certificates should + // be renewed before they expire. + // + // If zero, they're renewed 30 days before expiration. + RenewBefore time.Duration + + // Client is used to perform low-level operations, such as account registration + // and requesting new certificates. + // If Client is nil, a zero-value acme.Client is used with acme.LetsEncryptURL + // directory endpoint and a newly-generated ECDSA P-256 key. + // + // Mutating the field after the first call of GetCertificate method will have no effect. + Client *acme.Client + + // Email optionally specifies a contact email address. + // This is used by CAs, such as Let's Encrypt, to notify about problems + // with issued certificates. + // + // If the Client's account key is already registered, Email is not used. + Email string + + // ForceRSA makes the Manager generate certificates with 2048-bit RSA keys. + // + // If false, a default is used. Currently the default + // is EC-based keys using the P-256 curve. + ForceRSA bool + + clientMu sync.Mutex + client *acme.Client // initialized by acmeClient method + + stateMu sync.Mutex + state map[string]*certState // keyed by domain name + + // tokenCert is keyed by token domain name, which matches server name + // of ClientHello. Keys always have ".acme.invalid" suffix. + tokenCertMu sync.RWMutex + tokenCert map[string]*tls.Certificate + + // renewal tracks the set of domains currently running renewal timers. + // It is keyed by domain name. + renewalMu sync.Mutex + renewal map[string]*domainRenewal +} + +// GetCertificate implements the tls.Config.GetCertificate hook. +// It provides a TLS certificate for hello.ServerName host, including answering +// *.acme.invalid (TLS-SNI) challenges. All other fields of hello are ignored. +// +// If m.HostPolicy is non-nil, GetCertificate calls the policy before requesting +// a new cert. A non-nil error returned from m.HostPolicy halts TLS negotiation. +// The error is propagated back to the caller of GetCertificate and is user-visible. +// This does not affect cached certs. See HostPolicy field description for more details. +func (m *Manager) GetCertificate(hello *tls.ClientHelloInfo) (*tls.Certificate, error) { + if m.Prompt == nil { + return nil, errors.New("acme/autocert: Manager.Prompt not set") + } + + name := hello.ServerName + if name == "" { + return nil, errors.New("acme/autocert: missing server name") + } + if !strings.Contains(strings.Trim(name, "."), ".") { + return nil, errors.New("acme/autocert: server name component count invalid") + } + if strings.ContainsAny(name, `/\`) { + return nil, errors.New("acme/autocert: server name contains invalid character") + } + + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute) + defer cancel() + + // check whether this is a token cert requested for TLS-SNI challenge + if strings.HasSuffix(name, ".acme.invalid") { + m.tokenCertMu.RLock() + defer m.tokenCertMu.RUnlock() + if cert := m.tokenCert[name]; cert != nil { + return cert, nil + } + if cert, err := m.cacheGet(ctx, name); err == nil { + return cert, nil + } + // TODO: cache error results? + return nil, fmt.Errorf("acme/autocert: no token cert for %q", name) + } + + // regular domain + name = strings.TrimSuffix(name, ".") // golang.org/issue/18114 + cert, err := m.cert(ctx, name) + if err == nil { + return cert, nil + } + if err != ErrCacheMiss { + return nil, err + } + + // first-time + if err := m.hostPolicy()(ctx, name); err != nil { + return nil, err + } + cert, err = m.createCert(ctx, name) + if err != nil { + return nil, err + } + m.cachePut(ctx, name, cert) + return cert, nil +} + +// cert returns an existing certificate either from m.state or cache. +// If a certificate is found in cache but not in m.state, the latter will be filled +// with the cached value. +func (m *Manager) cert(ctx context.Context, name string) (*tls.Certificate, error) { + m.stateMu.Lock() + if s, ok := m.state[name]; ok { + m.stateMu.Unlock() + s.RLock() + defer s.RUnlock() + return s.tlscert() + } + defer m.stateMu.Unlock() + cert, err := m.cacheGet(ctx, name) + if err != nil { + return nil, err + } + signer, ok := cert.PrivateKey.(crypto.Signer) + if !ok { + return nil, errors.New("acme/autocert: private key cannot sign") + } + if m.state == nil { + m.state = make(map[string]*certState) + } + s := &certState{ + key: signer, + cert: cert.Certificate, + leaf: cert.Leaf, + } + m.state[name] = s + go m.renew(name, s.key, s.leaf.NotAfter) + return cert, nil +} + +// cacheGet always returns a valid certificate, or an error otherwise. +// If a cached certficate exists but is not valid, ErrCacheMiss is returned. +func (m *Manager) cacheGet(ctx context.Context, domain string) (*tls.Certificate, error) { + if m.Cache == nil { + return nil, ErrCacheMiss + } + data, err := m.Cache.Get(ctx, domain) + if err != nil { + return nil, err + } + + // private + priv, pub := pem.Decode(data) + if priv == nil || !strings.Contains(priv.Type, "PRIVATE") { + return nil, ErrCacheMiss + } + privKey, err := parsePrivateKey(priv.Bytes) + if err != nil { + return nil, err + } + + // public + var pubDER [][]byte + for len(pub) > 0 { + var b *pem.Block + b, pub = pem.Decode(pub) + if b == nil { + break + } + pubDER = append(pubDER, b.Bytes) + } + if len(pub) > 0 { + // Leftover content not consumed by pem.Decode. Corrupt. Ignore. + return nil, ErrCacheMiss + } + + // verify and create TLS cert + leaf, err := validCert(domain, pubDER, privKey) + if err != nil { + return nil, ErrCacheMiss + } + tlscert := &tls.Certificate{ + Certificate: pubDER, + PrivateKey: privKey, + Leaf: leaf, + } + return tlscert, nil +} + +func (m *Manager) cachePut(ctx context.Context, domain string, tlscert *tls.Certificate) error { + if m.Cache == nil { + return nil + } + + // contains PEM-encoded data + var buf bytes.Buffer + + // private + switch key := tlscert.PrivateKey.(type) { + case *ecdsa.PrivateKey: + if err := encodeECDSAKey(&buf, key); err != nil { + return err + } + case *rsa.PrivateKey: + b := x509.MarshalPKCS1PrivateKey(key) + pb := &pem.Block{Type: "RSA PRIVATE KEY", Bytes: b} + if err := pem.Encode(&buf, pb); err != nil { + return err + } + default: + return errors.New("acme/autocert: unknown private key type") + } + + // public + for _, b := range tlscert.Certificate { + pb := &pem.Block{Type: "CERTIFICATE", Bytes: b} + if err := pem.Encode(&buf, pb); err != nil { + return err + } + } + + return m.Cache.Put(ctx, domain, buf.Bytes()) +} + +func encodeECDSAKey(w io.Writer, key *ecdsa.PrivateKey) error { + b, err := x509.MarshalECPrivateKey(key) + if err != nil { + return err + } + pb := &pem.Block{Type: "EC PRIVATE KEY", Bytes: b} + return pem.Encode(w, pb) +} + +// createCert starts the domain ownership verification and returns a certificate +// for that domain upon success. +// +// If the domain is already being verified, it waits for the existing verification to complete. +// Either way, createCert blocks for the duration of the whole process. +func (m *Manager) createCert(ctx context.Context, domain string) (*tls.Certificate, error) { + // TODO: maybe rewrite this whole piece using sync.Once + state, err := m.certState(domain) + if err != nil { + return nil, err + } + // state may exist if another goroutine is already working on it + // in which case just wait for it to finish + if !state.locked { + state.RLock() + defer state.RUnlock() + return state.tlscert() + } + + // We are the first; state is locked. + // Unblock the readers when domain ownership is verified + // and we got the cert or the process failed. + defer state.Unlock() + state.locked = false + + der, leaf, err := m.authorizedCert(ctx, state.key, domain) + if err != nil { + // Remove the failed state after some time, + // making the manager call createCert again on the following TLS hello. + time.AfterFunc(createCertRetryAfter, func() { + defer testDidRemoveState(domain) + m.stateMu.Lock() + defer m.stateMu.Unlock() + // Verify the state hasn't changed and it's still invalid + // before deleting. + s, ok := m.state[domain] + if !ok { + return + } + if _, err := validCert(domain, s.cert, s.key); err == nil { + return + } + delete(m.state, domain) + }) + return nil, err + } + state.cert = der + state.leaf = leaf + go m.renew(domain, state.key, state.leaf.NotAfter) + return state.tlscert() +} + +// certState returns a new or existing certState. +// If a new certState is returned, state.exist is false and the state is locked. +// The returned error is non-nil only in the case where a new state could not be created. +func (m *Manager) certState(domain string) (*certState, error) { + m.stateMu.Lock() + defer m.stateMu.Unlock() + if m.state == nil { + m.state = make(map[string]*certState) + } + // existing state + if state, ok := m.state[domain]; ok { + return state, nil + } + + // new locked state + var ( + err error + key crypto.Signer + ) + if m.ForceRSA { + key, err = rsa.GenerateKey(rand.Reader, 2048) + } else { + key, err = ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + } + if err != nil { + return nil, err + } + + state := &certState{ + key: key, + locked: true, + } + state.Lock() // will be unlocked by m.certState caller + m.state[domain] = state + return state, nil +} + +// authorizedCert starts the domain ownership verification process and requests a new cert upon success. +// The key argument is the certificate private key. +func (m *Manager) authorizedCert(ctx context.Context, key crypto.Signer, domain string) (der [][]byte, leaf *x509.Certificate, err error) { + if err := m.verify(ctx, domain); err != nil { + return nil, nil, err + } + client, err := m.acmeClient(ctx) + if err != nil { + return nil, nil, err + } + csr, err := certRequest(key, domain) + if err != nil { + return nil, nil, err + } + der, _, err = client.CreateCert(ctx, csr, 0, true) + if err != nil { + return nil, nil, err + } + leaf, err = validCert(domain, der, key) + if err != nil { + return nil, nil, err + } + return der, leaf, nil +} + +// verify starts a new identifier (domain) authorization flow. +// It prepares a challenge response and then blocks until the authorization +// is marked as "completed" by the CA (either succeeded or failed). +// +// verify returns nil iff the verification was successful. +func (m *Manager) verify(ctx context.Context, domain string) error { + client, err := m.acmeClient(ctx) + if err != nil { + return err + } + + // start domain authorization and get the challenge + authz, err := client.Authorize(ctx, domain) + if err != nil { + return err + } + // maybe don't need to at all + if authz.Status == acme.StatusValid { + return nil + } + + // pick a challenge: prefer tls-sni-02 over tls-sni-01 + // TODO: consider authz.Combinations + var chal *acme.Challenge + for _, c := range authz.Challenges { + if c.Type == "tls-sni-02" { + chal = c + break + } + if c.Type == "tls-sni-01" { + chal = c + } + } + if chal == nil { + return errors.New("acme/autocert: no supported challenge type found") + } + + // create a token cert for the challenge response + var ( + cert tls.Certificate + name string + ) + switch chal.Type { + case "tls-sni-01": + cert, name, err = client.TLSSNI01ChallengeCert(chal.Token) + case "tls-sni-02": + cert, name, err = client.TLSSNI02ChallengeCert(chal.Token) + default: + err = fmt.Errorf("acme/autocert: unknown challenge type %q", chal.Type) + } + if err != nil { + return err + } + m.putTokenCert(ctx, name, &cert) + defer func() { + // verification has ended at this point + // don't need token cert anymore + go m.deleteTokenCert(name) + }() + + // ready to fulfill the challenge + if _, err := client.Accept(ctx, chal); err != nil { + return err + } + // wait for the CA to validate + _, err = client.WaitAuthorization(ctx, authz.URI) + return err +} + +// putTokenCert stores the cert under the named key in both m.tokenCert map +// and m.Cache. +func (m *Manager) putTokenCert(ctx context.Context, name string, cert *tls.Certificate) { + m.tokenCertMu.Lock() + defer m.tokenCertMu.Unlock() + if m.tokenCert == nil { + m.tokenCert = make(map[string]*tls.Certificate) + } + m.tokenCert[name] = cert + m.cachePut(ctx, name, cert) +} + +// deleteTokenCert removes the token certificate for the specified domain name +// from both m.tokenCert map and m.Cache. +func (m *Manager) deleteTokenCert(name string) { + m.tokenCertMu.Lock() + defer m.tokenCertMu.Unlock() + delete(m.tokenCert, name) + if m.Cache != nil { + m.Cache.Delete(context.Background(), name) + } +} + +// renew starts a cert renewal timer loop, one per domain. +// +// The loop is scheduled in two cases: +// - a cert was fetched from cache for the first time (wasn't in m.state) +// - a new cert was created by m.createCert +// +// The key argument is a certificate private key. +// The exp argument is the cert expiration time (NotAfter). +func (m *Manager) renew(domain string, key crypto.Signer, exp time.Time) { + m.renewalMu.Lock() + defer m.renewalMu.Unlock() + if m.renewal[domain] != nil { + // another goroutine is already on it + return + } + if m.renewal == nil { + m.renewal = make(map[string]*domainRenewal) + } + dr := &domainRenewal{m: m, domain: domain, key: key} + m.renewal[domain] = dr + dr.start(exp) +} + +// stopRenew stops all currently running cert renewal timers. +// The timers are not restarted during the lifetime of the Manager. +func (m *Manager) stopRenew() { + m.renewalMu.Lock() + defer m.renewalMu.Unlock() + for name, dr := range m.renewal { + delete(m.renewal, name) + dr.stop() + } +} + +func (m *Manager) accountKey(ctx context.Context) (crypto.Signer, error) { + const keyName = "acme_account.key" + + genKey := func() (*ecdsa.PrivateKey, error) { + return ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + } + + if m.Cache == nil { + return genKey() + } + + data, err := m.Cache.Get(ctx, keyName) + if err == ErrCacheMiss { + key, err := genKey() + if err != nil { + return nil, err + } + var buf bytes.Buffer + if err := encodeECDSAKey(&buf, key); err != nil { + return nil, err + } + if err := m.Cache.Put(ctx, keyName, buf.Bytes()); err != nil { + return nil, err + } + return key, nil + } + if err != nil { + return nil, err + } + + priv, _ := pem.Decode(data) + if priv == nil || !strings.Contains(priv.Type, "PRIVATE") { + return nil, errors.New("acme/autocert: invalid account key found in cache") + } + return parsePrivateKey(priv.Bytes) +} + +func (m *Manager) acmeClient(ctx context.Context) (*acme.Client, error) { + m.clientMu.Lock() + defer m.clientMu.Unlock() + if m.client != nil { + return m.client, nil + } + + client := m.Client + if client == nil { + client = &acme.Client{DirectoryURL: acme.LetsEncryptURL} + } + if client.Key == nil { + var err error + client.Key, err = m.accountKey(ctx) + if err != nil { + return nil, err + } + } + var contact []string + if m.Email != "" { + contact = []string{"mailto:" + m.Email} + } + a := &acme.Account{Contact: contact} + _, err := client.Register(ctx, a, m.Prompt) + if ae, ok := err.(*acme.Error); err == nil || ok && ae.StatusCode == http.StatusConflict { + // conflict indicates the key is already registered + m.client = client + err = nil + } + return m.client, err +} + +func (m *Manager) hostPolicy() HostPolicy { + if m.HostPolicy != nil { + return m.HostPolicy + } + return defaultHostPolicy +} + +func (m *Manager) renewBefore() time.Duration { + if m.RenewBefore > renewJitter { + return m.RenewBefore + } + return 720 * time.Hour // 30 days +} + +// certState is ready when its mutex is unlocked for reading. +type certState struct { + sync.RWMutex + locked bool // locked for read/write + key crypto.Signer // private key for cert + cert [][]byte // DER encoding + leaf *x509.Certificate // parsed cert[0]; always non-nil if cert != nil +} + +// tlscert creates a tls.Certificate from s.key and s.cert. +// Callers should wrap it in s.RLock() and s.RUnlock(). +func (s *certState) tlscert() (*tls.Certificate, error) { + if s.key == nil { + return nil, errors.New("acme/autocert: missing signer") + } + if len(s.cert) == 0 { + return nil, errors.New("acme/autocert: missing certificate") + } + return &tls.Certificate{ + PrivateKey: s.key, + Certificate: s.cert, + Leaf: s.leaf, + }, nil +} + +// certRequest creates a certificate request for the given common name cn +// and optional SANs. +func certRequest(key crypto.Signer, cn string, san ...string) ([]byte, error) { + req := &x509.CertificateRequest{ + Subject: pkix.Name{CommonName: cn}, + DNSNames: san, + } + return x509.CreateCertificateRequest(rand.Reader, req, key) +} + +// Attempt to parse the given private key DER block. OpenSSL 0.9.8 generates +// PKCS#1 private keys by default, while OpenSSL 1.0.0 generates PKCS#8 keys. +// OpenSSL ecparam generates SEC1 EC private keys for ECDSA. We try all three. +// +// Inspired by parsePrivateKey in crypto/tls/tls.go. +func parsePrivateKey(der []byte) (crypto.Signer, error) { + if key, err := x509.ParsePKCS1PrivateKey(der); err == nil { + return key, nil + } + if key, err := x509.ParsePKCS8PrivateKey(der); err == nil { + switch key := key.(type) { + case *rsa.PrivateKey: + return key, nil + case *ecdsa.PrivateKey: + return key, nil + default: + return nil, errors.New("acme/autocert: unknown private key type in PKCS#8 wrapping") + } + } + if key, err := x509.ParseECPrivateKey(der); err == nil { + return key, nil + } + + return nil, errors.New("acme/autocert: failed to parse private key") +} + +// validCert parses a cert chain provided as der argument and verifies the leaf, der[0], +// corresponds to the private key, as well as the domain match and expiration dates. +// It doesn't do any revocation checking. +// +// The returned value is the verified leaf cert. +func validCert(domain string, der [][]byte, key crypto.Signer) (leaf *x509.Certificate, err error) { + // parse public part(s) + var n int + for _, b := range der { + n += len(b) + } + pub := make([]byte, n) + n = 0 + for _, b := range der { + n += copy(pub[n:], b) + } + x509Cert, err := x509.ParseCertificates(pub) + if len(x509Cert) == 0 { + return nil, errors.New("acme/autocert: no public key found") + } + // verify the leaf is not expired and matches the domain name + leaf = x509Cert[0] + now := timeNow() + if now.Before(leaf.NotBefore) { + return nil, errors.New("acme/autocert: certificate is not valid yet") + } + if now.After(leaf.NotAfter) { + return nil, errors.New("acme/autocert: expired certificate") + } + if err := leaf.VerifyHostname(domain); err != nil { + return nil, err + } + // ensure the leaf corresponds to the private key + switch pub := leaf.PublicKey.(type) { + case *rsa.PublicKey: + prv, ok := key.(*rsa.PrivateKey) + if !ok { + return nil, errors.New("acme/autocert: private key type does not match public key type") + } + if pub.N.Cmp(prv.N) != 0 { + return nil, errors.New("acme/autocert: private key does not match public key") + } + case *ecdsa.PublicKey: + prv, ok := key.(*ecdsa.PrivateKey) + if !ok { + return nil, errors.New("acme/autocert: private key type does not match public key type") + } + if pub.X.Cmp(prv.X) != 0 || pub.Y.Cmp(prv.Y) != 0 { + return nil, errors.New("acme/autocert: private key does not match public key") + } + default: + return nil, errors.New("acme/autocert: unknown public key algorithm") + } + return leaf, nil +} + +func retryAfter(v string) time.Duration { + if i, err := strconv.Atoi(v); err == nil { + return time.Duration(i) * time.Second + } + if t, err := http.ParseTime(v); err == nil { + return t.Sub(timeNow()) + } + return time.Second +} + +type lockedMathRand struct { + sync.Mutex + rnd *mathrand.Rand +} + +func (r *lockedMathRand) int63n(max int64) int64 { + r.Lock() + n := r.rnd.Int63n(max) + r.Unlock() + return n +} + +// For easier testing. +var ( + timeNow = time.Now + + // Called when a state is removed. + testDidRemoveState = func(domain string) {} +) diff --git a/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go b/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go new file mode 100644 index 0000000..43a6201 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/autocert_test.go @@ -0,0 +1,606 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "context" + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/tls" + "crypto/x509" + "crypto/x509/pkix" + "encoding/base64" + "encoding/json" + "fmt" + "html/template" + "io" + "math/big" + "net/http" + "net/http/httptest" + "reflect" + "sync" + "testing" + "time" + + "golang.org/x/crypto/acme" +) + +var discoTmpl = template.Must(template.New("disco").Parse(`{ + "new-reg": "{{.}}/new-reg", + "new-authz": "{{.}}/new-authz", + "new-cert": "{{.}}/new-cert" +}`)) + +var authzTmpl = template.Must(template.New("authz").Parse(`{ + "status": "pending", + "challenges": [ + { + "uri": "{{.}}/challenge/1", + "type": "tls-sni-01", + "token": "token-01" + }, + { + "uri": "{{.}}/challenge/2", + "type": "tls-sni-02", + "token": "token-02" + } + ] +}`)) + +type memCache struct { + mu sync.Mutex + keyData map[string][]byte +} + +func (m *memCache) Get(ctx context.Context, key string) ([]byte, error) { + m.mu.Lock() + defer m.mu.Unlock() + + v, ok := m.keyData[key] + if !ok { + return nil, ErrCacheMiss + } + return v, nil +} + +func (m *memCache) Put(ctx context.Context, key string, data []byte) error { + m.mu.Lock() + defer m.mu.Unlock() + + m.keyData[key] = data + return nil +} + +func (m *memCache) Delete(ctx context.Context, key string) error { + m.mu.Lock() + defer m.mu.Unlock() + + delete(m.keyData, key) + return nil +} + +func newMemCache() *memCache { + return &memCache{ + keyData: make(map[string][]byte), + } +} + +func dummyCert(pub interface{}, san ...string) ([]byte, error) { + return dateDummyCert(pub, time.Now(), time.Now().Add(90*24*time.Hour), san...) +} + +func dateDummyCert(pub interface{}, start, end time.Time, san ...string) ([]byte, error) { + // use EC key to run faster on 386 + key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return nil, err + } + t := &x509.Certificate{ + SerialNumber: big.NewInt(1), + NotBefore: start, + NotAfter: end, + BasicConstraintsValid: true, + KeyUsage: x509.KeyUsageKeyEncipherment, + DNSNames: san, + } + if pub == nil { + pub = &key.PublicKey + } + return x509.CreateCertificate(rand.Reader, t, t, pub, key) +} + +func decodePayload(v interface{}, r io.Reader) error { + var req struct{ Payload string } + if err := json.NewDecoder(r).Decode(&req); err != nil { + return err + } + payload, err := base64.RawURLEncoding.DecodeString(req.Payload) + if err != nil { + return err + } + return json.Unmarshal(payload, v) +} + +func TestGetCertificate(t *testing.T) { + man := &Manager{Prompt: AcceptTOS} + defer man.stopRenew() + hello := &tls.ClientHelloInfo{ServerName: "example.org"} + testGetCertificate(t, man, "example.org", hello) +} + +func TestGetCertificate_trailingDot(t *testing.T) { + man := &Manager{Prompt: AcceptTOS} + defer man.stopRenew() + hello := &tls.ClientHelloInfo{ServerName: "example.org."} + testGetCertificate(t, man, "example.org", hello) +} + +func TestGetCertificate_ForceRSA(t *testing.T) { + man := &Manager{ + Prompt: AcceptTOS, + Cache: newMemCache(), + ForceRSA: true, + } + defer man.stopRenew() + hello := &tls.ClientHelloInfo{ServerName: "example.org"} + testGetCertificate(t, man, "example.org", hello) + + cert, err := man.cacheGet(context.Background(), "example.org") + if err != nil { + t.Fatalf("man.cacheGet: %v", err) + } + if _, ok := cert.PrivateKey.(*rsa.PrivateKey); !ok { + t.Errorf("cert.PrivateKey is %T; want *rsa.PrivateKey", cert.PrivateKey) + } +} + +func TestGetCertificate_nilPrompt(t *testing.T) { + man := &Manager{} + defer man.stopRenew() + url, finish := startACMEServerStub(t, man, "example.org") + defer finish() + key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + man.Client = &acme.Client{ + Key: key, + DirectoryURL: url, + } + hello := &tls.ClientHelloInfo{ServerName: "example.org"} + if _, err := man.GetCertificate(hello); err == nil { + t.Error("got certificate for example.org; wanted error") + } +} + +func TestGetCertificate_expiredCache(t *testing.T) { + // Make an expired cert and cache it. + pk, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + tmpl := &x509.Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{CommonName: "example.org"}, + NotAfter: time.Now(), + } + pub, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, &pk.PublicKey, pk) + if err != nil { + t.Fatal(err) + } + tlscert := &tls.Certificate{ + Certificate: [][]byte{pub}, + PrivateKey: pk, + } + + man := &Manager{Prompt: AcceptTOS, Cache: newMemCache()} + defer man.stopRenew() + if err := man.cachePut(context.Background(), "example.org", tlscert); err != nil { + t.Fatalf("man.cachePut: %v", err) + } + + // The expired cached cert should trigger a new cert issuance + // and return without an error. + hello := &tls.ClientHelloInfo{ServerName: "example.org"} + testGetCertificate(t, man, "example.org", hello) +} + +func TestGetCertificate_failedAttempt(t *testing.T) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusBadRequest) + })) + defer ts.Close() + + const example = "example.org" + d := createCertRetryAfter + f := testDidRemoveState + defer func() { + createCertRetryAfter = d + testDidRemoveState = f + }() + createCertRetryAfter = 0 + done := make(chan struct{}) + testDidRemoveState = func(domain string) { + if domain != example { + t.Errorf("testDidRemoveState: domain = %q; want %q", domain, example) + } + close(done) + } + + key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + man := &Manager{ + Prompt: AcceptTOS, + Client: &acme.Client{ + Key: key, + DirectoryURL: ts.URL, + }, + } + defer man.stopRenew() + hello := &tls.ClientHelloInfo{ServerName: example} + if _, err := man.GetCertificate(hello); err == nil { + t.Error("GetCertificate: err is nil") + } + select { + case <-time.After(5 * time.Second): + t.Errorf("took too long to remove the %q state", example) + case <-done: + man.stateMu.Lock() + defer man.stateMu.Unlock() + if v, exist := man.state[example]; exist { + t.Errorf("state exists for %q: %+v", example, v) + } + } +} + +// startACMEServerStub runs an ACME server +// The domain argument is the expected domain name of a certificate request. +func startACMEServerStub(t *testing.T, man *Manager, domain string) (url string, finish func()) { + // echo token-02 | shasum -a 256 + // then divide result in 2 parts separated by dot + tokenCertName := "4e8eb87631187e9ff2153b56b13a4dec.13a35d002e485d60ff37354b32f665d9.token.acme.invalid" + verifyTokenCert := func() { + hello := &tls.ClientHelloInfo{ServerName: tokenCertName} + _, err := man.GetCertificate(hello) + if err != nil { + t.Errorf("verifyTokenCert: GetCertificate(%q): %v", tokenCertName, err) + return + } + } + + // ACME CA server stub + var ca *httptest.Server + ca = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Replay-Nonce", "nonce") + if r.Method == "HEAD" { + // a nonce request + return + } + + switch r.URL.Path { + // discovery + case "/": + if err := discoTmpl.Execute(w, ca.URL); err != nil { + t.Errorf("discoTmpl: %v", err) + } + // client key registration + case "/new-reg": + w.Write([]byte("{}")) + // domain authorization + case "/new-authz": + w.Header().Set("Location", ca.URL+"/authz/1") + w.WriteHeader(http.StatusCreated) + if err := authzTmpl.Execute(w, ca.URL); err != nil { + t.Errorf("authzTmpl: %v", err) + } + // accept tls-sni-02 challenge + case "/challenge/2": + verifyTokenCert() + w.Write([]byte("{}")) + // authorization status + case "/authz/1": + w.Write([]byte(`{"status": "valid"}`)) + // cert request + case "/new-cert": + var req struct { + CSR string `json:"csr"` + } + decodePayload(&req, r.Body) + b, _ := base64.RawURLEncoding.DecodeString(req.CSR) + csr, err := x509.ParseCertificateRequest(b) + if err != nil { + t.Errorf("new-cert: CSR: %v", err) + } + if csr.Subject.CommonName != domain { + t.Errorf("CommonName in CSR = %q; want %q", csr.Subject.CommonName, domain) + } + der, err := dummyCert(csr.PublicKey, domain) + if err != nil { + t.Errorf("new-cert: dummyCert: %v", err) + } + chainUp := fmt.Sprintf("<%s/ca-cert>; rel=up", ca.URL) + w.Header().Set("Link", chainUp) + w.WriteHeader(http.StatusCreated) + w.Write(der) + // CA chain cert + case "/ca-cert": + der, err := dummyCert(nil, "ca") + if err != nil { + t.Errorf("ca-cert: dummyCert: %v", err) + } + w.Write(der) + default: + t.Errorf("unrecognized r.URL.Path: %s", r.URL.Path) + } + })) + finish = func() { + ca.Close() + + // make sure token cert was removed + cancel := make(chan struct{}) + done := make(chan struct{}) + go func() { + defer close(done) + tick := time.NewTicker(100 * time.Millisecond) + defer tick.Stop() + for { + hello := &tls.ClientHelloInfo{ServerName: tokenCertName} + if _, err := man.GetCertificate(hello); err != nil { + return + } + select { + case <-tick.C: + case <-cancel: + return + } + } + }() + select { + case <-done: + case <-time.After(5 * time.Second): + close(cancel) + t.Error("token cert was not removed") + <-done + } + } + return ca.URL, finish +} + +// tests man.GetCertificate flow using the provided hello argument. +// The domain argument is the expected domain name of a certificate request. +func testGetCertificate(t *testing.T, man *Manager, domain string, hello *tls.ClientHelloInfo) { + url, finish := startACMEServerStub(t, man, domain) + defer finish() + + // use EC key to run faster on 386 + key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + man.Client = &acme.Client{ + Key: key, + DirectoryURL: url, + } + + // simulate tls.Config.GetCertificate + var tlscert *tls.Certificate + done := make(chan struct{}) + go func() { + tlscert, err = man.GetCertificate(hello) + close(done) + }() + select { + case <-time.After(time.Minute): + t.Fatal("man.GetCertificate took too long to return") + case <-done: + } + if err != nil { + t.Fatalf("man.GetCertificate: %v", err) + } + + // verify the tlscert is the same we responded with from the CA stub + if len(tlscert.Certificate) == 0 { + t.Fatal("len(tlscert.Certificate) is 0") + } + cert, err := x509.ParseCertificate(tlscert.Certificate[0]) + if err != nil { + t.Fatalf("x509.ParseCertificate: %v", err) + } + if len(cert.DNSNames) == 0 || cert.DNSNames[0] != domain { + t.Errorf("cert.DNSNames = %v; want %q", cert.DNSNames, domain) + } + +} + +func TestAccountKeyCache(t *testing.T) { + m := Manager{Cache: newMemCache()} + ctx := context.Background() + k1, err := m.accountKey(ctx) + if err != nil { + t.Fatal(err) + } + k2, err := m.accountKey(ctx) + if err != nil { + t.Fatal(err) + } + if !reflect.DeepEqual(k1, k2) { + t.Errorf("account keys don't match: k1 = %#v; k2 = %#v", k1, k2) + } +} + +func TestCache(t *testing.T) { + privKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + tmpl := &x509.Certificate{ + SerialNumber: big.NewInt(1), + Subject: pkix.Name{CommonName: "example.org"}, + NotAfter: time.Now().Add(time.Hour), + } + pub, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, &privKey.PublicKey, privKey) + if err != nil { + t.Fatal(err) + } + tlscert := &tls.Certificate{ + Certificate: [][]byte{pub}, + PrivateKey: privKey, + } + + man := &Manager{Cache: newMemCache()} + defer man.stopRenew() + ctx := context.Background() + if err := man.cachePut(ctx, "example.org", tlscert); err != nil { + t.Fatalf("man.cachePut: %v", err) + } + res, err := man.cacheGet(ctx, "example.org") + if err != nil { + t.Fatalf("man.cacheGet: %v", err) + } + if res == nil { + t.Fatal("res is nil") + } +} + +func TestHostWhitelist(t *testing.T) { + policy := HostWhitelist("example.com", "example.org", "*.example.net") + tt := []struct { + host string + allow bool + }{ + {"example.com", true}, + {"example.org", true}, + {"one.example.com", false}, + {"two.example.org", false}, + {"three.example.net", false}, + {"dummy", false}, + } + for i, test := range tt { + err := policy(nil, test.host) + if err != nil && test.allow { + t.Errorf("%d: policy(%q): %v; want nil", i, test.host, err) + } + if err == nil && !test.allow { + t.Errorf("%d: policy(%q): nil; want an error", i, test.host) + } + } +} + +func TestValidCert(t *testing.T) { + key1, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + key2, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + key3, err := rsa.GenerateKey(rand.Reader, 512) + if err != nil { + t.Fatal(err) + } + cert1, err := dummyCert(key1.Public(), "example.org") + if err != nil { + t.Fatal(err) + } + cert2, err := dummyCert(key2.Public(), "example.org") + if err != nil { + t.Fatal(err) + } + cert3, err := dummyCert(key3.Public(), "example.org") + if err != nil { + t.Fatal(err) + } + now := time.Now() + early, err := dateDummyCert(key1.Public(), now.Add(time.Hour), now.Add(2*time.Hour), "example.org") + if err != nil { + t.Fatal(err) + } + expired, err := dateDummyCert(key1.Public(), now.Add(-2*time.Hour), now.Add(-time.Hour), "example.org") + if err != nil { + t.Fatal(err) + } + + tt := []struct { + domain string + key crypto.Signer + cert [][]byte + ok bool + }{ + {"example.org", key1, [][]byte{cert1}, true}, + {"example.org", key3, [][]byte{cert3}, true}, + {"example.org", key1, [][]byte{cert1, cert2, cert3}, true}, + {"example.org", key1, [][]byte{cert1, {1}}, false}, + {"example.org", key1, [][]byte{{1}}, false}, + {"example.org", key1, [][]byte{cert2}, false}, + {"example.org", key2, [][]byte{cert1}, false}, + {"example.org", key1, [][]byte{cert3}, false}, + {"example.org", key3, [][]byte{cert1}, false}, + {"example.net", key1, [][]byte{cert1}, false}, + {"example.org", key1, [][]byte{early}, false}, + {"example.org", key1, [][]byte{expired}, false}, + } + for i, test := range tt { + leaf, err := validCert(test.domain, test.cert, test.key) + if err != nil && test.ok { + t.Errorf("%d: err = %v", i, err) + } + if err == nil && !test.ok { + t.Errorf("%d: err is nil", i) + } + if err == nil && test.ok && leaf == nil { + t.Errorf("%d: leaf is nil", i) + } + } +} + +type cacheGetFunc func(ctx context.Context, key string) ([]byte, error) + +func (f cacheGetFunc) Get(ctx context.Context, key string) ([]byte, error) { + return f(ctx, key) +} + +func (f cacheGetFunc) Put(ctx context.Context, key string, data []byte) error { + return fmt.Errorf("unsupported Put of %q = %q", key, data) +} + +func (f cacheGetFunc) Delete(ctx context.Context, key string) error { + return fmt.Errorf("unsupported Delete of %q", key) +} + +func TestManagerGetCertificateBogusSNI(t *testing.T) { + m := Manager{ + Prompt: AcceptTOS, + Cache: cacheGetFunc(func(ctx context.Context, key string) ([]byte, error) { + return nil, fmt.Errorf("cache.Get of %s", key) + }), + } + tests := []struct { + name string + wantErr string + }{ + {"foo.com", "cache.Get of foo.com"}, + {"foo.com.", "cache.Get of foo.com"}, + {`a\b.com`, "acme/autocert: server name contains invalid character"}, + {`a/b.com`, "acme/autocert: server name contains invalid character"}, + {"", "acme/autocert: missing server name"}, + {"foo", "acme/autocert: server name component count invalid"}, + {".foo", "acme/autocert: server name component count invalid"}, + {"foo.", "acme/autocert: server name component count invalid"}, + {"fo.o", "cache.Get of fo.o"}, + } + for _, tt := range tests { + _, err := m.GetCertificate(&tls.ClientHelloInfo{ServerName: tt.name}) + got := fmt.Sprint(err) + if got != tt.wantErr { + t.Errorf("GetCertificate(SNI = %q) = %q; want %q", tt.name, got, tt.wantErr) + } + } +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/cache.go b/vendor/golang.org/x/crypto/acme/autocert/cache.go new file mode 100644 index 0000000..61a5fd2 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/cache.go @@ -0,0 +1,130 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "context" + "errors" + "io/ioutil" + "os" + "path/filepath" +) + +// ErrCacheMiss is returned when a certificate is not found in cache. +var ErrCacheMiss = errors.New("acme/autocert: certificate cache miss") + +// Cache is used by Manager to store and retrieve previously obtained certificates +// as opaque data. +// +// The key argument of the methods refers to a domain name but need not be an FQDN. +// Cache implementations should not rely on the key naming pattern. +type Cache interface { + // Get returns a certificate data for the specified key. + // If there's no such key, Get returns ErrCacheMiss. + Get(ctx context.Context, key string) ([]byte, error) + + // Put stores the data in the cache under the specified key. + // Underlying implementations may use any data storage format, + // as long as the reverse operation, Get, results in the original data. + Put(ctx context.Context, key string, data []byte) error + + // Delete removes a certificate data from the cache under the specified key. + // If there's no such key in the cache, Delete returns nil. + Delete(ctx context.Context, key string) error +} + +// DirCache implements Cache using a directory on the local filesystem. +// If the directory does not exist, it will be created with 0700 permissions. +type DirCache string + +// Get reads a certificate data from the specified file name. +func (d DirCache) Get(ctx context.Context, name string) ([]byte, error) { + name = filepath.Join(string(d), name) + var ( + data []byte + err error + done = make(chan struct{}) + ) + go func() { + data, err = ioutil.ReadFile(name) + close(done) + }() + select { + case <-ctx.Done(): + return nil, ctx.Err() + case <-done: + } + if os.IsNotExist(err) { + return nil, ErrCacheMiss + } + return data, err +} + +// Put writes the certificate data to the specified file name. +// The file will be created with 0600 permissions. +func (d DirCache) Put(ctx context.Context, name string, data []byte) error { + if err := os.MkdirAll(string(d), 0700); err != nil { + return err + } + + done := make(chan struct{}) + var err error + go func() { + defer close(done) + var tmp string + if tmp, err = d.writeTempFile(name, data); err != nil { + return + } + select { + case <-ctx.Done(): + // Don't overwrite the file if the context was canceled. + default: + newName := filepath.Join(string(d), name) + err = os.Rename(tmp, newName) + } + }() + select { + case <-ctx.Done(): + return ctx.Err() + case <-done: + } + return err +} + +// Delete removes the specified file name. +func (d DirCache) Delete(ctx context.Context, name string) error { + name = filepath.Join(string(d), name) + var ( + err error + done = make(chan struct{}) + ) + go func() { + err = os.Remove(name) + close(done) + }() + select { + case <-ctx.Done(): + return ctx.Err() + case <-done: + } + if err != nil && !os.IsNotExist(err) { + return err + } + return nil +} + +// writeTempFile writes b to a temporary file, closes the file and returns its path. +func (d DirCache) writeTempFile(prefix string, b []byte) (string, error) { + // TempFile uses 0600 permissions + f, err := ioutil.TempFile(string(d), prefix) + if err != nil { + return "", err + } + if _, err := f.Write(b); err != nil { + f.Close() + return "", err + } + return f.Name(), f.Close() +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/cache_test.go b/vendor/golang.org/x/crypto/acme/autocert/cache_test.go new file mode 100644 index 0000000..653b05b --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/cache_test.go @@ -0,0 +1,58 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "context" + "io/ioutil" + "os" + "path/filepath" + "reflect" + "testing" +) + +// make sure DirCache satisfies Cache interface +var _ Cache = DirCache("/") + +func TestDirCache(t *testing.T) { + dir, err := ioutil.TempDir("", "autocert") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + dir = filepath.Join(dir, "certs") // a nonexistent dir + cache := DirCache(dir) + ctx := context.Background() + + // test cache miss + if _, err := cache.Get(ctx, "nonexistent"); err != ErrCacheMiss { + t.Errorf("get: %v; want ErrCacheMiss", err) + } + + // test put/get + b1 := []byte{1} + if err := cache.Put(ctx, "dummy", b1); err != nil { + t.Fatalf("put: %v", err) + } + b2, err := cache.Get(ctx, "dummy") + if err != nil { + t.Fatalf("get: %v", err) + } + if !reflect.DeepEqual(b1, b2) { + t.Errorf("b1 = %v; want %v", b1, b2) + } + name := filepath.Join(dir, "dummy") + if _, err := os.Stat(name); err != nil { + t.Error(err) + } + + // test delete + if err := cache.Delete(ctx, "dummy"); err != nil { + t.Fatalf("delete: %v", err) + } + if _, err := cache.Get(ctx, "dummy"); err != ErrCacheMiss { + t.Errorf("get: %v; want ErrCacheMiss", err) + } +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/example_test.go b/vendor/golang.org/x/crypto/acme/autocert/example_test.go new file mode 100644 index 0000000..71d61eb --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/example_test.go @@ -0,0 +1,35 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert_test + +import ( + "crypto/tls" + "fmt" + "log" + "net/http" + + "golang.org/x/crypto/acme/autocert" +) + +func ExampleNewListener() { + mux := http.NewServeMux() + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello, TLS user! Your config: %+v", r.TLS) + }) + log.Fatal(http.Serve(autocert.NewListener("example.com"), mux)) +} + +func ExampleManager() { + m := autocert.Manager{ + Cache: autocert.DirCache("secret-dir"), + Prompt: autocert.AcceptTOS, + HostPolicy: autocert.HostWhitelist("example.org"), + } + s := &http.Server{ + Addr: ":https", + TLSConfig: &tls.Config{GetCertificate: m.GetCertificate}, + } + s.ListenAndServeTLS("", "") +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/listener.go b/vendor/golang.org/x/crypto/acme/autocert/listener.go new file mode 100644 index 0000000..d744df0 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/listener.go @@ -0,0 +1,160 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "crypto/tls" + "log" + "net" + "os" + "path/filepath" + "runtime" + "time" +) + +// NewListener returns a net.Listener that listens on the standard TLS +// port (443) on all interfaces and returns *tls.Conn connections with +// LetsEncrypt certificates for the provided domain or domains. +// +// It enables one-line HTTPS servers: +// +// log.Fatal(http.Serve(autocert.NewListener("example.com"), handler)) +// +// NewListener is a convenience function for a common configuration. +// More complex or custom configurations can use the autocert.Manager +// type instead. +// +// Use of this function implies acceptance of the LetsEncrypt Terms of +// Service. If domains is not empty, the provided domains are passed +// to HostWhitelist. If domains is empty, the listener will do +// LetsEncrypt challenges for any requested domain, which is not +// recommended. +// +// Certificates are cached in a "golang-autocert" directory under an +// operating system-specific cache or temp directory. This may not +// be suitable for servers spanning multiple machines. +// +// The returned listener uses a *tls.Config that enables HTTP/2, and +// should only be used with servers that support HTTP/2. +// +// The returned Listener also enables TCP keep-alives on the accepted +// connections. The returned *tls.Conn are returned before their TLS +// handshake has completed. +func NewListener(domains ...string) net.Listener { + m := &Manager{ + Prompt: AcceptTOS, + } + if len(domains) > 0 { + m.HostPolicy = HostWhitelist(domains...) + } + dir := cacheDir() + if err := os.MkdirAll(dir, 0700); err != nil { + log.Printf("warning: autocert.NewListener not using a cache: %v", err) + } else { + m.Cache = DirCache(dir) + } + return m.Listener() +} + +// Listener listens on the standard TLS port (443) on all interfaces +// and returns a net.Listener returning *tls.Conn connections. +// +// The returned listener uses a *tls.Config that enables HTTP/2, and +// should only be used with servers that support HTTP/2. +// +// The returned Listener also enables TCP keep-alives on the accepted +// connections. The returned *tls.Conn are returned before their TLS +// handshake has completed. +// +// Unlike NewListener, it is the caller's responsibility to initialize +// the Manager m's Prompt, Cache, HostPolicy, and other desired options. +func (m *Manager) Listener() net.Listener { + ln := &listener{ + m: m, + conf: &tls.Config{ + GetCertificate: m.GetCertificate, // bonus: panic on nil m + NextProtos: []string{"h2", "http/1.1"}, // Enable HTTP/2 + }, + } + ln.tcpListener, ln.tcpListenErr = net.Listen("tcp", ":443") + return ln +} + +type listener struct { + m *Manager + conf *tls.Config + + tcpListener net.Listener + tcpListenErr error +} + +func (ln *listener) Accept() (net.Conn, error) { + if ln.tcpListenErr != nil { + return nil, ln.tcpListenErr + } + conn, err := ln.tcpListener.Accept() + if err != nil { + return nil, err + } + tcpConn := conn.(*net.TCPConn) + + // Because Listener is a convenience function, help out with + // this too. This is not possible for the caller to set once + // we return a *tcp.Conn wrapping an inaccessible net.Conn. + // If callers don't want this, they can do things the manual + // way and tweak as needed. But this is what net/http does + // itself, so copy that. If net/http changes, we can change + // here too. + tcpConn.SetKeepAlive(true) + tcpConn.SetKeepAlivePeriod(3 * time.Minute) + + return tls.Server(tcpConn, ln.conf), nil +} + +func (ln *listener) Addr() net.Addr { + if ln.tcpListener != nil { + return ln.tcpListener.Addr() + } + // net.Listen failed. Return something non-nil in case callers + // call Addr before Accept: + return &net.TCPAddr{IP: net.IP{0, 0, 0, 0}, Port: 443} +} + +func (ln *listener) Close() error { + if ln.tcpListenErr != nil { + return ln.tcpListenErr + } + return ln.tcpListener.Close() +} + +func homeDir() string { + if runtime.GOOS == "windows" { + return os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") + } + if h := os.Getenv("HOME"); h != "" { + return h + } + return "/" +} + +func cacheDir() string { + const base = "golang-autocert" + switch runtime.GOOS { + case "darwin": + return filepath.Join(homeDir(), "Library", "Caches", base) + case "windows": + for _, ev := range []string{"APPDATA", "CSIDL_APPDATA", "TEMP", "TMP"} { + if v := os.Getenv(ev); v != "" { + return filepath.Join(v, base) + } + } + // Worst case: + return filepath.Join(homeDir(), base) + } + if xdg := os.Getenv("XDG_CACHE_HOME"); xdg != "" { + return filepath.Join(xdg, base) + } + return filepath.Join(homeDir(), ".cache", base) +} diff --git a/vendor/golang.org/x/crypto/acme/autocert/renewal.go b/vendor/golang.org/x/crypto/acme/autocert/renewal.go new file mode 100644 index 0000000..6c5da2b --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/renewal.go @@ -0,0 +1,124 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "context" + "crypto" + "sync" + "time" +) + +// renewJitter is the maximum deviation from Manager.RenewBefore. +const renewJitter = time.Hour + +// domainRenewal tracks the state used by the periodic timers +// renewing a single domain's cert. +type domainRenewal struct { + m *Manager + domain string + key crypto.Signer + + timerMu sync.Mutex + timer *time.Timer +} + +// start starts a cert renewal timer at the time +// defined by the certificate expiration time exp. +// +// If the timer is already started, calling start is a noop. +func (dr *domainRenewal) start(exp time.Time) { + dr.timerMu.Lock() + defer dr.timerMu.Unlock() + if dr.timer != nil { + return + } + dr.timer = time.AfterFunc(dr.next(exp), dr.renew) +} + +// stop stops the cert renewal timer. +// If the timer is already stopped, calling stop is a noop. +func (dr *domainRenewal) stop() { + dr.timerMu.Lock() + defer dr.timerMu.Unlock() + if dr.timer == nil { + return + } + dr.timer.Stop() + dr.timer = nil +} + +// renew is called periodically by a timer. +// The first renew call is kicked off by dr.start. +func (dr *domainRenewal) renew() { + dr.timerMu.Lock() + defer dr.timerMu.Unlock() + if dr.timer == nil { + return + } + + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Minute) + defer cancel() + // TODO: rotate dr.key at some point? + next, err := dr.do(ctx) + if err != nil { + next = renewJitter / 2 + next += time.Duration(pseudoRand.int63n(int64(next))) + } + dr.timer = time.AfterFunc(next, dr.renew) + testDidRenewLoop(next, err) +} + +// do is similar to Manager.createCert but it doesn't lock a Manager.state item. +// Instead, it requests a new certificate independently and, upon success, +// replaces dr.m.state item with a new one and updates cache for the given domain. +// +// It may return immediately if the expiration date of the currently cached cert +// is far enough in the future. +// +// The returned value is a time interval after which the renewal should occur again. +func (dr *domainRenewal) do(ctx context.Context) (time.Duration, error) { + // a race is likely unavoidable in a distributed environment + // but we try nonetheless + if tlscert, err := dr.m.cacheGet(ctx, dr.domain); err == nil { + next := dr.next(tlscert.Leaf.NotAfter) + if next > dr.m.renewBefore()+renewJitter { + return next, nil + } + } + + der, leaf, err := dr.m.authorizedCert(ctx, dr.key, dr.domain) + if err != nil { + return 0, err + } + state := &certState{ + key: dr.key, + cert: der, + leaf: leaf, + } + tlscert, err := state.tlscert() + if err != nil { + return 0, err + } + dr.m.cachePut(ctx, dr.domain, tlscert) + dr.m.stateMu.Lock() + defer dr.m.stateMu.Unlock() + // m.state is guaranteed to be non-nil at this point + dr.m.state[dr.domain] = state + return dr.next(leaf.NotAfter), nil +} + +func (dr *domainRenewal) next(expiry time.Time) time.Duration { + d := expiry.Sub(timeNow()) - dr.m.renewBefore() + // add a bit of randomness to renew deadline + n := pseudoRand.int63n(int64(renewJitter)) + d -= time.Duration(n) + if d < 0 { + return 0 + } + return d +} + +var testDidRenewLoop = func(next time.Duration, err error) {} diff --git a/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go b/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go new file mode 100644 index 0000000..11d40ff --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/autocert/renewal_test.go @@ -0,0 +1,191 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package autocert + +import ( + "context" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/tls" + "crypto/x509" + "encoding/base64" + "fmt" + "net/http" + "net/http/httptest" + "testing" + "time" + + "golang.org/x/crypto/acme" +) + +func TestRenewalNext(t *testing.T) { + now := time.Now() + timeNow = func() time.Time { return now } + defer func() { timeNow = time.Now }() + + man := &Manager{RenewBefore: 7 * 24 * time.Hour} + defer man.stopRenew() + tt := []struct { + expiry time.Time + min, max time.Duration + }{ + {now.Add(90 * 24 * time.Hour), 83*24*time.Hour - renewJitter, 83 * 24 * time.Hour}, + {now.Add(time.Hour), 0, 1}, + {now, 0, 1}, + {now.Add(-time.Hour), 0, 1}, + } + + dr := &domainRenewal{m: man} + for i, test := range tt { + next := dr.next(test.expiry) + if next < test.min || test.max < next { + t.Errorf("%d: next = %v; want between %v and %v", i, next, test.min, test.max) + } + } +} + +func TestRenewFromCache(t *testing.T) { + const domain = "example.org" + + // ACME CA server stub + var ca *httptest.Server + ca = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Replay-Nonce", "nonce") + if r.Method == "HEAD" { + // a nonce request + return + } + + switch r.URL.Path { + // discovery + case "/": + if err := discoTmpl.Execute(w, ca.URL); err != nil { + t.Fatalf("discoTmpl: %v", err) + } + // client key registration + case "/new-reg": + w.Write([]byte("{}")) + // domain authorization + case "/new-authz": + w.Header().Set("Location", ca.URL+"/authz/1") + w.WriteHeader(http.StatusCreated) + w.Write([]byte(`{"status": "valid"}`)) + // cert request + case "/new-cert": + var req struct { + CSR string `json:"csr"` + } + decodePayload(&req, r.Body) + b, _ := base64.RawURLEncoding.DecodeString(req.CSR) + csr, err := x509.ParseCertificateRequest(b) + if err != nil { + t.Fatalf("new-cert: CSR: %v", err) + } + der, err := dummyCert(csr.PublicKey, domain) + if err != nil { + t.Fatalf("new-cert: dummyCert: %v", err) + } + chainUp := fmt.Sprintf("<%s/ca-cert>; rel=up", ca.URL) + w.Header().Set("Link", chainUp) + w.WriteHeader(http.StatusCreated) + w.Write(der) + // CA chain cert + case "/ca-cert": + der, err := dummyCert(nil, "ca") + if err != nil { + t.Fatalf("ca-cert: dummyCert: %v", err) + } + w.Write(der) + default: + t.Errorf("unrecognized r.URL.Path: %s", r.URL.Path) + } + })) + defer ca.Close() + + // use EC key to run faster on 386 + key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + man := &Manager{ + Prompt: AcceptTOS, + Cache: newMemCache(), + RenewBefore: 24 * time.Hour, + Client: &acme.Client{ + Key: key, + DirectoryURL: ca.URL, + }, + } + defer man.stopRenew() + + // cache an almost expired cert + now := time.Now() + cert, err := dateDummyCert(key.Public(), now.Add(-2*time.Hour), now.Add(time.Minute), domain) + if err != nil { + t.Fatal(err) + } + tlscert := &tls.Certificate{PrivateKey: key, Certificate: [][]byte{cert}} + if err := man.cachePut(context.Background(), domain, tlscert); err != nil { + t.Fatal(err) + } + + // veriy the renewal happened + defer func() { + testDidRenewLoop = func(next time.Duration, err error) {} + }() + done := make(chan struct{}) + testDidRenewLoop = func(next time.Duration, err error) { + defer close(done) + if err != nil { + t.Errorf("testDidRenewLoop: %v", err) + } + // Next should be about 90 days: + // dummyCert creates 90days expiry + account for man.RenewBefore. + // Previous expiration was within 1 min. + future := 88 * 24 * time.Hour + if next < future { + t.Errorf("testDidRenewLoop: next = %v; want >= %v", next, future) + } + + // ensure the new cert is cached + after := time.Now().Add(future) + tlscert, err := man.cacheGet(context.Background(), domain) + if err != nil { + t.Fatalf("man.cacheGet: %v", err) + } + if !tlscert.Leaf.NotAfter.After(after) { + t.Errorf("cache leaf.NotAfter = %v; want > %v", tlscert.Leaf.NotAfter, after) + } + + // verify the old cert is also replaced in memory + man.stateMu.Lock() + defer man.stateMu.Unlock() + s := man.state[domain] + if s == nil { + t.Fatalf("m.state[%q] is nil", domain) + } + tlscert, err = s.tlscert() + if err != nil { + t.Fatalf("s.tlscert: %v", err) + } + if !tlscert.Leaf.NotAfter.After(after) { + t.Errorf("state leaf.NotAfter = %v; want > %v", tlscert.Leaf.NotAfter, after) + } + } + + // trigger renew + hello := &tls.ClientHelloInfo{ServerName: domain} + if _, err := man.GetCertificate(hello); err != nil { + t.Fatal(err) + } + + // wait for renew loop + select { + case <-time.After(10 * time.Second): + t.Fatal("renew took too long to occur") + case <-done: + } +} diff --git a/vendor/golang.org/x/crypto/acme/jws.go b/vendor/golang.org/x/crypto/acme/jws.go new file mode 100644 index 0000000..6cbca25 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/jws.go @@ -0,0 +1,153 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package acme + +import ( + "crypto" + "crypto/ecdsa" + "crypto/rand" + "crypto/rsa" + "crypto/sha256" + _ "crypto/sha512" // need for EC keys + "encoding/base64" + "encoding/json" + "fmt" + "math/big" +) + +// jwsEncodeJSON signs claimset using provided key and a nonce. +// The result is serialized in JSON format. +// See https://tools.ietf.org/html/rfc7515#section-7. +func jwsEncodeJSON(claimset interface{}, key crypto.Signer, nonce string) ([]byte, error) { + jwk, err := jwkEncode(key.Public()) + if err != nil { + return nil, err + } + alg, sha := jwsHasher(key) + if alg == "" || !sha.Available() { + return nil, ErrUnsupportedKey + } + phead := fmt.Sprintf(`{"alg":%q,"jwk":%s,"nonce":%q}`, alg, jwk, nonce) + phead = base64.RawURLEncoding.EncodeToString([]byte(phead)) + cs, err := json.Marshal(claimset) + if err != nil { + return nil, err + } + payload := base64.RawURLEncoding.EncodeToString(cs) + hash := sha.New() + hash.Write([]byte(phead + "." + payload)) + sig, err := jwsSign(key, sha, hash.Sum(nil)) + if err != nil { + return nil, err + } + + enc := struct { + Protected string `json:"protected"` + Payload string `json:"payload"` + Sig string `json:"signature"` + }{ + Protected: phead, + Payload: payload, + Sig: base64.RawURLEncoding.EncodeToString(sig), + } + return json.Marshal(&enc) +} + +// jwkEncode encodes public part of an RSA or ECDSA key into a JWK. +// The result is also suitable for creating a JWK thumbprint. +// https://tools.ietf.org/html/rfc7517 +func jwkEncode(pub crypto.PublicKey) (string, error) { + switch pub := pub.(type) { + case *rsa.PublicKey: + // https://tools.ietf.org/html/rfc7518#section-6.3.1 + n := pub.N + e := big.NewInt(int64(pub.E)) + // Field order is important. + // See https://tools.ietf.org/html/rfc7638#section-3.3 for details. + return fmt.Sprintf(`{"e":"%s","kty":"RSA","n":"%s"}`, + base64.RawURLEncoding.EncodeToString(e.Bytes()), + base64.RawURLEncoding.EncodeToString(n.Bytes()), + ), nil + case *ecdsa.PublicKey: + // https://tools.ietf.org/html/rfc7518#section-6.2.1 + p := pub.Curve.Params() + n := p.BitSize / 8 + if p.BitSize%8 != 0 { + n++ + } + x := pub.X.Bytes() + if n > len(x) { + x = append(make([]byte, n-len(x)), x...) + } + y := pub.Y.Bytes() + if n > len(y) { + y = append(make([]byte, n-len(y)), y...) + } + // Field order is important. + // See https://tools.ietf.org/html/rfc7638#section-3.3 for details. + return fmt.Sprintf(`{"crv":"%s","kty":"EC","x":"%s","y":"%s"}`, + p.Name, + base64.RawURLEncoding.EncodeToString(x), + base64.RawURLEncoding.EncodeToString(y), + ), nil + } + return "", ErrUnsupportedKey +} + +// jwsSign signs the digest using the given key. +// It returns ErrUnsupportedKey if the key type is unknown. +// The hash is used only for RSA keys. +func jwsSign(key crypto.Signer, hash crypto.Hash, digest []byte) ([]byte, error) { + switch key := key.(type) { + case *rsa.PrivateKey: + return key.Sign(rand.Reader, digest, hash) + case *ecdsa.PrivateKey: + r, s, err := ecdsa.Sign(rand.Reader, key, digest) + if err != nil { + return nil, err + } + rb, sb := r.Bytes(), s.Bytes() + size := key.Params().BitSize / 8 + if size%8 > 0 { + size++ + } + sig := make([]byte, size*2) + copy(sig[size-len(rb):], rb) + copy(sig[size*2-len(sb):], sb) + return sig, nil + } + return nil, ErrUnsupportedKey +} + +// jwsHasher indicates suitable JWS algorithm name and a hash function +// to use for signing a digest with the provided key. +// It returns ("", 0) if the key is not supported. +func jwsHasher(key crypto.Signer) (string, crypto.Hash) { + switch key := key.(type) { + case *rsa.PrivateKey: + return "RS256", crypto.SHA256 + case *ecdsa.PrivateKey: + switch key.Params().Name { + case "P-256": + return "ES256", crypto.SHA256 + case "P-384": + return "ES384", crypto.SHA384 + case "P-521": + return "ES512", crypto.SHA512 + } + } + return "", 0 +} + +// JWKThumbprint creates a JWK thumbprint out of pub +// as specified in https://tools.ietf.org/html/rfc7638. +func JWKThumbprint(pub crypto.PublicKey) (string, error) { + jwk, err := jwkEncode(pub) + if err != nil { + return "", err + } + b := sha256.Sum256([]byte(jwk)) + return base64.RawURLEncoding.EncodeToString(b[:]), nil +} diff --git a/vendor/golang.org/x/crypto/acme/jws_test.go b/vendor/golang.org/x/crypto/acme/jws_test.go new file mode 100644 index 0000000..0ff0fb5 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/jws_test.go @@ -0,0 +1,319 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package acme + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rsa" + "crypto/x509" + "encoding/base64" + "encoding/json" + "encoding/pem" + "fmt" + "math/big" + "testing" +) + +const ( + testKeyPEM = ` +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA4xgZ3eRPkwoRvy7qeRUbmMDe0V+xH9eWLdu0iheeLlrmD2mq +WXfP9IeSKApbn34g8TuAS9g5zhq8ELQ3kmjr+KV86GAMgI6VAcGlq3QrzpTCf/30 +Ab7+zawrfRaFONa1HwEzPY1KHnGVkxJc85gNkwYI9SY2RHXtvln3zs5wITNrdosq +EXeaIkVYBEhbhNu54pp3kxo6TuWLi9e6pXeWetEwmlBwtWZlPoib2j3TxLBksKZf +oyFyek380mHgJAumQ/I2fjj98/97mk3ihOY4AgVdCDj1z/GCoZkG5Rq7nbCGyosy +KWyDX00Zs+nNqVhoLeIvXC4nnWdJMZ6rogxyQQIDAQABAoIBACIEZTOI1Kao9nmV +9IeIsuaR1Y61b9neOF/MLmIVIZu+AAJFCMB4Iw11FV6sFodwpEyeZhx2WkpWVN+H +r19eGiLX3zsL0DOdqBJoSIHDWCCMxgnYJ6nvS0nRxX3qVrBp8R2g12Ub+gNPbmFm +ecf/eeERIVxfifd9VsyRu34eDEvcmKFuLYbElFcPh62xE3x12UZvV/sN7gXbawpP +G+w255vbE5MoaKdnnO83cTFlcHvhn24M/78qP7Te5OAeelr1R89kYxQLpuGe4fbS +zc6E3ym5Td6urDetGGrSY1Eu10/8sMusX+KNWkm+RsBRbkyKq72ks/qKpOxOa+c6 +9gm+Y8ECgYEA/iNUyg1ubRdH11p82l8KHtFC1DPE0V1gSZsX29TpM5jS4qv46K+s +8Ym1zmrORM8x+cynfPx1VQZQ34EYeCMIX212ryJ+zDATl4NE0I4muMvSiH9vx6Xc +7FmhNnaYzPsBL5Tm9nmtQuP09YEn8poiOJFiDs/4olnD5ogA5O4THGkCgYEA5MIL +qWYBUuqbEWLRtMruUtpASclrBqNNsJEsMGbeqBJmoMxdHeSZckbLOrqm7GlMyNRJ +Ne/5uWRGSzaMYuGmwsPpERzqEvYFnSrpjW5YtXZ+JtxFXNVfm9Z1gLLgvGpOUCIU +RbpoDckDe1vgUuk3y5+DjZihs+rqIJ45XzXTzBkCgYBWuf3segruJZy5rEKhTv+o +JqeUvRn0jNYYKFpLBeyTVBrbie6GkbUGNIWbrK05pC+c3K9nosvzuRUOQQL1tJbd +4gA3oiD9U4bMFNr+BRTHyZ7OQBcIXdz3t1qhuHVKtnngIAN1p25uPlbRFUNpshnt +jgeVoHlsBhApcs5DUc+pyQKBgDzeHPg/+g4z+nrPznjKnktRY1W+0El93kgi+J0Q +YiJacxBKEGTJ1MKBb8X6sDurcRDm22wMpGfd9I5Cv2v4GsUsF7HD/cx5xdih+G73 +c4clNj/k0Ff5Nm1izPUno4C+0IOl7br39IPmfpSuR6wH/h6iHQDqIeybjxyKvT1G +N0rRAoGBAKGD+4ZI/E1MoJ5CXB8cDDMHagbE3cq/DtmYzE2v1DFpQYu5I4PCm5c7 +EQeIP6dZtv8IMgtGIb91QX9pXvP0aznzQKwYIA8nZgoENCPfiMTPiEDT9e/0lObO +9XWsXpbSTsRPj0sv1rB+UzBJ0PgjK4q2zOF0sNo7b1+6nlM3BWPx +-----END RSA PRIVATE KEY----- +` + + // This thumbprint is for the testKey defined above. + testKeyThumbprint = "6nicxzh6WETQlrvdchkz-U3e3DOQZ4heJKU63rfqMqQ" + + // openssl ecparam -name secp256k1 -genkey -noout + testKeyECPEM = ` +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIK07hGLr0RwyUdYJ8wbIiBS55CjnkMD23DWr+ccnypWLoAoGCCqGSM49 +AwEHoUQDQgAE5lhEug5xK4xBDZ2nAbaxLtaLiv85bxJ7ePd1dkO23HThqIrvawF5 +QAaS/RNouybCiRhRjI3EaxLkQwgrCw0gqQ== +-----END EC PRIVATE KEY----- +` + // openssl ecparam -name secp384r1 -genkey -noout + testKeyEC384PEM = ` +-----BEGIN EC PRIVATE KEY----- +MIGkAgEBBDAQ4lNtXRORWr1bgKR1CGysr9AJ9SyEk4jiVnlUWWUChmSNL+i9SLSD +Oe/naPqXJ6CgBwYFK4EEACKhZANiAAQzKtj+Ms0vHoTX5dzv3/L5YMXOWuI5UKRj +JigpahYCqXD2BA1j0E/2xt5vlPf+gm0PL+UHSQsCokGnIGuaHCsJAp3ry0gHQEke +WYXapUUFdvaK1R2/2hn5O+eiQM8YzCg= +-----END EC PRIVATE KEY----- +` + // openssl ecparam -name secp521r1 -genkey -noout + testKeyEC512PEM = ` +-----BEGIN EC PRIVATE KEY----- +MIHcAgEBBEIBSNZKFcWzXzB/aJClAb305ibalKgtDA7+70eEkdPt28/3LZMM935Z +KqYHh/COcxuu3Kt8azRAUz3gyr4zZKhlKUSgBwYFK4EEACOhgYkDgYYABAHUNKbx +7JwC7H6pa2sV0tERWhHhB3JmW+OP6SUgMWryvIKajlx73eS24dy4QPGrWO9/ABsD +FqcRSkNVTXnIv6+0mAF25knqIBIg5Q8M9BnOu9GGAchcwt3O7RDHmqewnJJDrbjd +GGnm6rb+NnWR9DIopM0nKNkToWoF/hzopxu4Ae/GsQ== +-----END EC PRIVATE KEY----- +` + // 1. openssl ec -in key.pem -noout -text + // 2. remove first byte, 04 (the header); the rest is X and Y + // 3. convert each with: echo | xxd -r -p | base64 -w 100 | tr -d '=' | tr '/+' '_-' + testKeyECPubX = "5lhEug5xK4xBDZ2nAbaxLtaLiv85bxJ7ePd1dkO23HQ" + testKeyECPubY = "4aiK72sBeUAGkv0TaLsmwokYUYyNxGsS5EMIKwsNIKk" + testKeyEC384PubX = "MyrY_jLNLx6E1-Xc79_y-WDFzlriOVCkYyYoKWoWAqlw9gQNY9BP9sbeb5T3_oJt" + testKeyEC384PubY = "Dy_lB0kLAqJBpyBrmhwrCQKd68tIB0BJHlmF2qVFBXb2itUdv9oZ-TvnokDPGMwo" + testKeyEC512PubX = "AdQ0pvHsnALsfqlraxXS0RFaEeEHcmZb44_pJSAxavK8gpqOXHvd5Lbh3LhA8atY738AGwMWpxFKQ1VNeci_r7SY" + testKeyEC512PubY = "AXbmSeogEiDlDwz0Gc670YYByFzC3c7tEMeap7CckkOtuN0Yaebqtv42dZH0MiikzSco2ROhagX-HOinG7gB78ax" + + // echo -n '{"crv":"P-256","kty":"EC","x":"","y":""}' | \ + // openssl dgst -binary -sha256 | base64 | tr -d '=' | tr '/+' '_-' + testKeyECThumbprint = "zedj-Bd1Zshp8KLePv2MB-lJ_Hagp7wAwdkA0NUTniU" +) + +var ( + testKey *rsa.PrivateKey + testKeyEC *ecdsa.PrivateKey + testKeyEC384 *ecdsa.PrivateKey + testKeyEC512 *ecdsa.PrivateKey +) + +func init() { + testKey = parseRSA(testKeyPEM, "testKeyPEM") + testKeyEC = parseEC(testKeyECPEM, "testKeyECPEM") + testKeyEC384 = parseEC(testKeyEC384PEM, "testKeyEC384PEM") + testKeyEC512 = parseEC(testKeyEC512PEM, "testKeyEC512PEM") +} + +func decodePEM(s, name string) []byte { + d, _ := pem.Decode([]byte(s)) + if d == nil { + panic("no block found in " + name) + } + return d.Bytes +} + +func parseRSA(s, name string) *rsa.PrivateKey { + b := decodePEM(s, name) + k, err := x509.ParsePKCS1PrivateKey(b) + if err != nil { + panic(fmt.Sprintf("%s: %v", name, err)) + } + return k +} + +func parseEC(s, name string) *ecdsa.PrivateKey { + b := decodePEM(s, name) + k, err := x509.ParseECPrivateKey(b) + if err != nil { + panic(fmt.Sprintf("%s: %v", name, err)) + } + return k +} + +func TestJWSEncodeJSON(t *testing.T) { + claims := struct{ Msg string }{"Hello JWS"} + // JWS signed with testKey and "nonce" as the nonce value + // JSON-serialized JWS fields are split for easier testing + const ( + // {"alg":"RS256","jwk":{"e":"AQAB","kty":"RSA","n":"..."},"nonce":"nonce"} + protected = "eyJhbGciOiJSUzI1NiIsImp3ayI6eyJlIjoiQVFBQiIsImt0eSI6" + + "IlJTQSIsIm4iOiI0eGdaM2VSUGt3b1J2eTdxZVJVYm1NRGUwVi14" + + "SDllV0xkdTBpaGVlTGxybUQybXFXWGZQOUllU0tBcGJuMzRnOFR1" + + "QVM5ZzV6aHE4RUxRM2ttanItS1Y4NkdBTWdJNlZBY0dscTNRcnpw" + + "VENmXzMwQWI3LXphd3JmUmFGT05hMUh3RXpQWTFLSG5HVmt4SmM4" + + "NWdOa3dZSTlTWTJSSFh0dmxuM3pzNXdJVE5yZG9zcUVYZWFJa1ZZ" + + "QkVoYmhOdTU0cHAza3hvNlR1V0xpOWU2cFhlV2V0RXdtbEJ3dFda" + + "bFBvaWIyajNUeExCa3NLWmZveUZ5ZWszODBtSGdKQXVtUV9JMmZq" + + "ajk4Xzk3bWszaWhPWTRBZ1ZkQ0RqMXpfR0NvWmtHNVJxN25iQ0d5" + + "b3N5S1d5RFgwMFpzLW5OcVZob0xlSXZYQzRubldkSk1aNnJvZ3h5" + + "UVEifSwibm9uY2UiOiJub25jZSJ9" + // {"Msg":"Hello JWS"} + payload = "eyJNc2ciOiJIZWxsbyBKV1MifQ" + signature = "eAGUikStX_UxyiFhxSLMyuyBcIB80GeBkFROCpap2sW3EmkU_ggF" + + "knaQzxrTfItICSAXsCLIquZ5BbrSWA_4vdEYrwWtdUj7NqFKjHRa" + + "zpLHcoR7r1rEHvkoP1xj49lS5fc3Wjjq8JUhffkhGbWZ8ZVkgPdC" + + "4tMBWiQDoth-x8jELP_3LYOB_ScUXi2mETBawLgOT2K8rA0Vbbmx" + + "hWNlOWuUf-8hL5YX4IOEwsS8JK_TrTq5Zc9My0zHJmaieqDV0UlP" + + "k0onFjPFkGm7MrPSgd0MqRG-4vSAg2O4hDo7rKv4n8POjjXlNQvM" + + "9IPLr8qZ7usYBKhEGwX3yq_eicAwBw" + ) + + b, err := jwsEncodeJSON(claims, testKey, "nonce") + if err != nil { + t.Fatal(err) + } + var jws struct{ Protected, Payload, Signature string } + if err := json.Unmarshal(b, &jws); err != nil { + t.Fatal(err) + } + if jws.Protected != protected { + t.Errorf("protected:\n%s\nwant:\n%s", jws.Protected, protected) + } + if jws.Payload != payload { + t.Errorf("payload:\n%s\nwant:\n%s", jws.Payload, payload) + } + if jws.Signature != signature { + t.Errorf("signature:\n%s\nwant:\n%s", jws.Signature, signature) + } +} + +func TestJWSEncodeJSONEC(t *testing.T) { + tt := []struct { + key *ecdsa.PrivateKey + x, y string + alg, crv string + }{ + {testKeyEC, testKeyECPubX, testKeyECPubY, "ES256", "P-256"}, + {testKeyEC384, testKeyEC384PubX, testKeyEC384PubY, "ES384", "P-384"}, + {testKeyEC512, testKeyEC512PubX, testKeyEC512PubY, "ES512", "P-521"}, + } + for i, test := range tt { + claims := struct{ Msg string }{"Hello JWS"} + b, err := jwsEncodeJSON(claims, test.key, "nonce") + if err != nil { + t.Errorf("%d: %v", i, err) + continue + } + var jws struct{ Protected, Payload, Signature string } + if err := json.Unmarshal(b, &jws); err != nil { + t.Errorf("%d: %v", i, err) + continue + } + + b, err = base64.RawURLEncoding.DecodeString(jws.Protected) + if err != nil { + t.Errorf("%d: jws.Protected: %v", i, err) + } + var head struct { + Alg string + Nonce string + JWK struct { + Crv string + Kty string + X string + Y string + } `json:"jwk"` + } + if err := json.Unmarshal(b, &head); err != nil { + t.Errorf("%d: jws.Protected: %v", i, err) + } + if head.Alg != test.alg { + t.Errorf("%d: head.Alg = %q; want %q", i, head.Alg, test.alg) + } + if head.Nonce != "nonce" { + t.Errorf("%d: head.Nonce = %q; want nonce", i, head.Nonce) + } + if head.JWK.Crv != test.crv { + t.Errorf("%d: head.JWK.Crv = %q; want %q", i, head.JWK.Crv, test.crv) + } + if head.JWK.Kty != "EC" { + t.Errorf("%d: head.JWK.Kty = %q; want EC", i, head.JWK.Kty) + } + if head.JWK.X != test.x { + t.Errorf("%d: head.JWK.X = %q; want %q", i, head.JWK.X, test.x) + } + if head.JWK.Y != test.y { + t.Errorf("%d: head.JWK.Y = %q; want %q", i, head.JWK.Y, test.y) + } + } +} + +func TestJWKThumbprintRSA(t *testing.T) { + // Key example from RFC 7638 + const base64N = "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiAFbWhM78LhWx4cbbfAAt" + + "VT86zwu1RK7aPFFxuhDR1L6tSoc_BJECPebWKRXjBZCiFV4n3oknjhMstn6" + + "4tZ_2W-5JsGY4Hc5n9yBXArwl93lqt7_RN5w6Cf0h4QyQ5v-65YGjQR0_FD" + + "W2QvzqY368QQMicAtaSqzs8KJZgnYb9c7d0zgdAZHzu6qMQvRL5hajrn1n9" + + "1CbOpbISD08qNLyrdkt-bFTWhAI4vMQFh6WeZu0fM4lFd2NcRwr3XPksINH" + + "aQ-G_xBniIqbw0Ls1jF44-csFCur-kEgU8awapJzKnqDKgw" + const base64E = "AQAB" + const expected = "NzbLsXh8uDCcd-6MNwXF4W_7noWXFZAfHkxZsRGC9Xs" + + b, err := base64.RawURLEncoding.DecodeString(base64N) + if err != nil { + t.Fatalf("Error parsing example key N: %v", err) + } + n := new(big.Int).SetBytes(b) + + b, err = base64.RawURLEncoding.DecodeString(base64E) + if err != nil { + t.Fatalf("Error parsing example key E: %v", err) + } + e := new(big.Int).SetBytes(b) + + pub := &rsa.PublicKey{N: n, E: int(e.Uint64())} + th, err := JWKThumbprint(pub) + if err != nil { + t.Error(err) + } + if th != expected { + t.Errorf("thumbprint = %q; want %q", th, expected) + } +} + +func TestJWKThumbprintEC(t *testing.T) { + // Key example from RFC 7520 + // expected was computed with + // echo -n '{"crv":"P-521","kty":"EC","x":"","y":""}' | \ + // openssl dgst -binary -sha256 | \ + // base64 | \ + // tr -d '=' | tr '/+' '_-' + const ( + base64X = "AHKZLLOsCOzz5cY97ewNUajB957y-C-U88c3v13nmGZx6sYl_oJXu9A5RkT" + + "KqjqvjyekWF-7ytDyRXYgCF5cj0Kt" + base64Y = "AdymlHvOiLxXkEhayXQnNCvDX4h9htZaCJN34kfmC6pV5OhQHiraVySsUda" + + "QkAgDPrwQrJmbnX9cwlGfP-HqHZR1" + expected = "dHri3SADZkrush5HU_50AoRhcKFryN-PI6jPBtPL55M" + ) + + b, err := base64.RawURLEncoding.DecodeString(base64X) + if err != nil { + t.Fatalf("Error parsing example key X: %v", err) + } + x := new(big.Int).SetBytes(b) + + b, err = base64.RawURLEncoding.DecodeString(base64Y) + if err != nil { + t.Fatalf("Error parsing example key Y: %v", err) + } + y := new(big.Int).SetBytes(b) + + pub := &ecdsa.PublicKey{Curve: elliptic.P521(), X: x, Y: y} + th, err := JWKThumbprint(pub) + if err != nil { + t.Error(err) + } + if th != expected { + t.Errorf("thumbprint = %q; want %q", th, expected) + } +} + +func TestJWKThumbprintErrUnsupportedKey(t *testing.T) { + _, err := JWKThumbprint(struct{}{}) + if err != ErrUnsupportedKey { + t.Errorf("err = %q; want %q", err, ErrUnsupportedKey) + } +} diff --git a/vendor/golang.org/x/crypto/acme/types.go b/vendor/golang.org/x/crypto/acme/types.go new file mode 100644 index 0000000..3e19974 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/types.go @@ -0,0 +1,329 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package acme + +import ( + "crypto" + "crypto/x509" + "errors" + "fmt" + "net/http" + "strings" + "time" +) + +// ACME server response statuses used to describe Authorization and Challenge states. +const ( + StatusUnknown = "unknown" + StatusPending = "pending" + StatusProcessing = "processing" + StatusValid = "valid" + StatusInvalid = "invalid" + StatusRevoked = "revoked" +) + +// CRLReasonCode identifies the reason for a certificate revocation. +type CRLReasonCode int + +// CRL reason codes as defined in RFC 5280. +const ( + CRLReasonUnspecified CRLReasonCode = 0 + CRLReasonKeyCompromise CRLReasonCode = 1 + CRLReasonCACompromise CRLReasonCode = 2 + CRLReasonAffiliationChanged CRLReasonCode = 3 + CRLReasonSuperseded CRLReasonCode = 4 + CRLReasonCessationOfOperation CRLReasonCode = 5 + CRLReasonCertificateHold CRLReasonCode = 6 + CRLReasonRemoveFromCRL CRLReasonCode = 8 + CRLReasonPrivilegeWithdrawn CRLReasonCode = 9 + CRLReasonAACompromise CRLReasonCode = 10 +) + +// ErrUnsupportedKey is returned when an unsupported key type is encountered. +var ErrUnsupportedKey = errors.New("acme: unknown key type; only RSA and ECDSA are supported") + +// Error is an ACME error, defined in Problem Details for HTTP APIs doc +// http://tools.ietf.org/html/draft-ietf-appsawg-http-problem. +type Error struct { + // StatusCode is The HTTP status code generated by the origin server. + StatusCode int + // ProblemType is a URI reference that identifies the problem type, + // typically in a "urn:acme:error:xxx" form. + ProblemType string + // Detail is a human-readable explanation specific to this occurrence of the problem. + Detail string + // Header is the original server error response headers. + // It may be nil. + Header http.Header +} + +func (e *Error) Error() string { + return fmt.Sprintf("%d %s: %s", e.StatusCode, e.ProblemType, e.Detail) +} + +// AuthorizationError indicates that an authorization for an identifier +// did not succeed. +// It contains all errors from Challenge items of the failed Authorization. +type AuthorizationError struct { + // URI uniquely identifies the failed Authorization. + URI string + + // Identifier is an AuthzID.Value of the failed Authorization. + Identifier string + + // Errors is a collection of non-nil error values of Challenge items + // of the failed Authorization. + Errors []error +} + +func (a *AuthorizationError) Error() string { + e := make([]string, len(a.Errors)) + for i, err := range a.Errors { + e[i] = err.Error() + } + return fmt.Sprintf("acme: authorization error for %s: %s", a.Identifier, strings.Join(e, "; ")) +} + +// RateLimit reports whether err represents a rate limit error and +// any Retry-After duration returned by the server. +// +// See the following for more details on rate limiting: +// https://tools.ietf.org/html/draft-ietf-acme-acme-05#section-5.6 +func RateLimit(err error) (time.Duration, bool) { + e, ok := err.(*Error) + if !ok { + return 0, false + } + // Some CA implementations may return incorrect values. + // Use case-insensitive comparison. + if !strings.HasSuffix(strings.ToLower(e.ProblemType), ":ratelimited") { + return 0, false + } + if e.Header == nil { + return 0, true + } + return retryAfter(e.Header.Get("Retry-After"), 0), true +} + +// Account is a user account. It is associated with a private key. +type Account struct { + // URI is the account unique ID, which is also a URL used to retrieve + // account data from the CA. + URI string + + // Contact is a slice of contact info used during registration. + Contact []string + + // The terms user has agreed to. + // A value not matching CurrentTerms indicates that the user hasn't agreed + // to the actual Terms of Service of the CA. + AgreedTerms string + + // Actual terms of a CA. + CurrentTerms string + + // Authz is the authorization URL used to initiate a new authz flow. + Authz string + + // Authorizations is a URI from which a list of authorizations + // granted to this account can be fetched via a GET request. + Authorizations string + + // Certificates is a URI from which a list of certificates + // issued for this account can be fetched via a GET request. + Certificates string +} + +// Directory is ACME server discovery data. +type Directory struct { + // RegURL is an account endpoint URL, allowing for creating new + // and modifying existing accounts. + RegURL string + + // AuthzURL is used to initiate Identifier Authorization flow. + AuthzURL string + + // CertURL is a new certificate issuance endpoint URL. + CertURL string + + // RevokeURL is used to initiate a certificate revocation flow. + RevokeURL string + + // Term is a URI identifying the current terms of service. + Terms string + + // Website is an HTTP or HTTPS URL locating a website + // providing more information about the ACME server. + Website string + + // CAA consists of lowercase hostname elements, which the ACME server + // recognises as referring to itself for the purposes of CAA record validation + // as defined in RFC6844. + CAA []string +} + +// Challenge encodes a returned CA challenge. +// Its Error field may be non-nil if the challenge is part of an Authorization +// with StatusInvalid. +type Challenge struct { + // Type is the challenge type, e.g. "http-01", "tls-sni-02", "dns-01". + Type string + + // URI is where a challenge response can be posted to. + URI string + + // Token is a random value that uniquely identifies the challenge. + Token string + + // Status identifies the status of this challenge. + Status string + + // Error indicates the reason for an authorization failure + // when this challenge was used. + // The type of a non-nil value is *Error. + Error error +} + +// Authorization encodes an authorization response. +type Authorization struct { + // URI uniquely identifies a authorization. + URI string + + // Status identifies the status of an authorization. + Status string + + // Identifier is what the account is authorized to represent. + Identifier AuthzID + + // Challenges that the client needs to fulfill in order to prove possession + // of the identifier (for pending authorizations). + // For final authorizations, the challenges that were used. + Challenges []*Challenge + + // A collection of sets of challenges, each of which would be sufficient + // to prove possession of the identifier. + // Clients must complete a set of challenges that covers at least one set. + // Challenges are identified by their indices in the challenges array. + // If this field is empty, the client needs to complete all challenges. + Combinations [][]int +} + +// AuthzID is an identifier that an account is authorized to represent. +type AuthzID struct { + Type string // The type of identifier, e.g. "dns". + Value string // The identifier itself, e.g. "example.org". +} + +// wireAuthz is ACME JSON representation of Authorization objects. +type wireAuthz struct { + Status string + Challenges []wireChallenge + Combinations [][]int + Identifier struct { + Type string + Value string + } +} + +func (z *wireAuthz) authorization(uri string) *Authorization { + a := &Authorization{ + URI: uri, + Status: z.Status, + Identifier: AuthzID{Type: z.Identifier.Type, Value: z.Identifier.Value}, + Combinations: z.Combinations, // shallow copy + Challenges: make([]*Challenge, len(z.Challenges)), + } + for i, v := range z.Challenges { + a.Challenges[i] = v.challenge() + } + return a +} + +func (z *wireAuthz) error(uri string) *AuthorizationError { + err := &AuthorizationError{ + URI: uri, + Identifier: z.Identifier.Value, + } + for _, raw := range z.Challenges { + if raw.Error != nil { + err.Errors = append(err.Errors, raw.Error.error(nil)) + } + } + return err +} + +// wireChallenge is ACME JSON challenge representation. +type wireChallenge struct { + URI string `json:"uri"` + Type string + Token string + Status string + Error *wireError +} + +func (c *wireChallenge) challenge() *Challenge { + v := &Challenge{ + URI: c.URI, + Type: c.Type, + Token: c.Token, + Status: c.Status, + } + if v.Status == "" { + v.Status = StatusPending + } + if c.Error != nil { + v.Error = c.Error.error(nil) + } + return v +} + +// wireError is a subset of fields of the Problem Details object +// as described in https://tools.ietf.org/html/rfc7807#section-3.1. +type wireError struct { + Status int + Type string + Detail string +} + +func (e *wireError) error(h http.Header) *Error { + return &Error{ + StatusCode: e.Status, + ProblemType: e.Type, + Detail: e.Detail, + Header: h, + } +} + +// CertOption is an optional argument type for the TLSSNIxChallengeCert methods for +// customizing a temporary certificate for TLS-SNI challenges. +type CertOption interface { + privateCertOpt() +} + +// WithKey creates an option holding a private/public key pair. +// The private part signs a certificate, and the public part represents the signee. +func WithKey(key crypto.Signer) CertOption { + return &certOptKey{key} +} + +type certOptKey struct { + key crypto.Signer +} + +func (*certOptKey) privateCertOpt() {} + +// WithTemplate creates an option for specifying a certificate template. +// See x509.CreateCertificate for template usage details. +// +// In TLSSNIxChallengeCert methods, the template is also used as parent, +// resulting in a self-signed certificate. +// The DNSNames field of t is always overwritten for tls-sni challenge certs. +func WithTemplate(t *x509.Certificate) CertOption { + return (*certOptTemplate)(t) +} + +type certOptTemplate x509.Certificate + +func (*certOptTemplate) privateCertOpt() {} diff --git a/vendor/golang.org/x/crypto/acme/types_test.go b/vendor/golang.org/x/crypto/acme/types_test.go new file mode 100644 index 0000000..a7553e6 --- /dev/null +++ b/vendor/golang.org/x/crypto/acme/types_test.go @@ -0,0 +1,63 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package acme + +import ( + "errors" + "net/http" + "testing" + "time" +) + +func TestRateLimit(t *testing.T) { + now := time.Date(2017, 04, 27, 10, 0, 0, 0, time.UTC) + f := timeNow + defer func() { timeNow = f }() + timeNow = func() time.Time { return now } + + h120, hTime := http.Header{}, http.Header{} + h120.Set("Retry-After", "120") + hTime.Set("Retry-After", "Tue Apr 27 11:00:00 2017") + + err1 := &Error{ + ProblemType: "urn:ietf:params:acme:error:nolimit", + Header: h120, + } + err2 := &Error{ + ProblemType: "urn:ietf:params:acme:error:rateLimited", + Header: h120, + } + err3 := &Error{ + ProblemType: "urn:ietf:params:acme:error:rateLimited", + Header: nil, + } + err4 := &Error{ + ProblemType: "urn:ietf:params:acme:error:rateLimited", + Header: hTime, + } + + tt := []struct { + err error + res time.Duration + ok bool + }{ + {nil, 0, false}, + {errors.New("dummy"), 0, false}, + {err1, 0, false}, + {err2, 2 * time.Minute, true}, + {err3, 0, true}, + {err4, time.Hour, true}, + } + for i, test := range tt { + res, ok := RateLimit(test.err) + if ok != test.ok { + t.Errorf("%d: RateLimit(%+v): ok = %v; want %v", i, test.err, ok, test.ok) + continue + } + if res != test.res { + t.Errorf("%d: RateLimit(%+v) = %v; want %v", i, test.err, res, test.res) + } + } +} diff --git a/vendor/golang.org/x/crypto/bcrypt/base64.go b/vendor/golang.org/x/crypto/bcrypt/base64.go new file mode 100644 index 0000000..fc31160 --- /dev/null +++ b/vendor/golang.org/x/crypto/bcrypt/base64.go @@ -0,0 +1,35 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bcrypt + +import "encoding/base64" + +const alphabet = "./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" + +var bcEncoding = base64.NewEncoding(alphabet) + +func base64Encode(src []byte) []byte { + n := bcEncoding.EncodedLen(len(src)) + dst := make([]byte, n) + bcEncoding.Encode(dst, src) + for dst[n-1] == '=' { + n-- + } + return dst[:n] +} + +func base64Decode(src []byte) ([]byte, error) { + numOfEquals := 4 - (len(src) % 4) + for i := 0; i < numOfEquals; i++ { + src = append(src, '=') + } + + dst := make([]byte, bcEncoding.DecodedLen(len(src))) + n, err := bcEncoding.Decode(dst, src) + if err != nil { + return nil, err + } + return dst[:n], nil +} diff --git a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go new file mode 100644 index 0000000..202fa8a --- /dev/null +++ b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go @@ -0,0 +1,295 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package bcrypt implements Provos and Mazières's bcrypt adaptive hashing +// algorithm. See http://www.usenix.org/event/usenix99/provos/provos.pdf +package bcrypt // import "golang.org/x/crypto/bcrypt" + +// The code is a port of Provos and Mazières's C implementation. +import ( + "crypto/rand" + "crypto/subtle" + "errors" + "fmt" + "io" + "strconv" + + "golang.org/x/crypto/blowfish" +) + +const ( + MinCost int = 4 // the minimum allowable cost as passed in to GenerateFromPassword + MaxCost int = 31 // the maximum allowable cost as passed in to GenerateFromPassword + DefaultCost int = 10 // the cost that will actually be set if a cost below MinCost is passed into GenerateFromPassword +) + +// The error returned from CompareHashAndPassword when a password and hash do +// not match. +var ErrMismatchedHashAndPassword = errors.New("crypto/bcrypt: hashedPassword is not the hash of the given password") + +// The error returned from CompareHashAndPassword when a hash is too short to +// be a bcrypt hash. +var ErrHashTooShort = errors.New("crypto/bcrypt: hashedSecret too short to be a bcrypted password") + +// The error returned from CompareHashAndPassword when a hash was created with +// a bcrypt algorithm newer than this implementation. +type HashVersionTooNewError byte + +func (hv HashVersionTooNewError) Error() string { + return fmt.Sprintf("crypto/bcrypt: bcrypt algorithm version '%c' requested is newer than current version '%c'", byte(hv), majorVersion) +} + +// The error returned from CompareHashAndPassword when a hash starts with something other than '$' +type InvalidHashPrefixError byte + +func (ih InvalidHashPrefixError) Error() string { + return fmt.Sprintf("crypto/bcrypt: bcrypt hashes must start with '$', but hashedSecret started with '%c'", byte(ih)) +} + +type InvalidCostError int + +func (ic InvalidCostError) Error() string { + return fmt.Sprintf("crypto/bcrypt: cost %d is outside allowed range (%d,%d)", int(ic), int(MinCost), int(MaxCost)) +} + +const ( + majorVersion = '2' + minorVersion = 'a' + maxSaltSize = 16 + maxCryptedHashSize = 23 + encodedSaltSize = 22 + encodedHashSize = 31 + minHashSize = 59 +) + +// magicCipherData is an IV for the 64 Blowfish encryption calls in +// bcrypt(). It's the string "OrpheanBeholderScryDoubt" in big-endian bytes. +var magicCipherData = []byte{ + 0x4f, 0x72, 0x70, 0x68, + 0x65, 0x61, 0x6e, 0x42, + 0x65, 0x68, 0x6f, 0x6c, + 0x64, 0x65, 0x72, 0x53, + 0x63, 0x72, 0x79, 0x44, + 0x6f, 0x75, 0x62, 0x74, +} + +type hashed struct { + hash []byte + salt []byte + cost int // allowed range is MinCost to MaxCost + major byte + minor byte +} + +// GenerateFromPassword returns the bcrypt hash of the password at the given +// cost. If the cost given is less than MinCost, the cost will be set to +// DefaultCost, instead. Use CompareHashAndPassword, as defined in this package, +// to compare the returned hashed password with its cleartext version. +func GenerateFromPassword(password []byte, cost int) ([]byte, error) { + p, err := newFromPassword(password, cost) + if err != nil { + return nil, err + } + return p.Hash(), nil +} + +// CompareHashAndPassword compares a bcrypt hashed password with its possible +// plaintext equivalent. Returns nil on success, or an error on failure. +func CompareHashAndPassword(hashedPassword, password []byte) error { + p, err := newFromHash(hashedPassword) + if err != nil { + return err + } + + otherHash, err := bcrypt(password, p.cost, p.salt) + if err != nil { + return err + } + + otherP := &hashed{otherHash, p.salt, p.cost, p.major, p.minor} + if subtle.ConstantTimeCompare(p.Hash(), otherP.Hash()) == 1 { + return nil + } + + return ErrMismatchedHashAndPassword +} + +// Cost returns the hashing cost used to create the given hashed +// password. When, in the future, the hashing cost of a password system needs +// to be increased in order to adjust for greater computational power, this +// function allows one to establish which passwords need to be updated. +func Cost(hashedPassword []byte) (int, error) { + p, err := newFromHash(hashedPassword) + if err != nil { + return 0, err + } + return p.cost, nil +} + +func newFromPassword(password []byte, cost int) (*hashed, error) { + if cost < MinCost { + cost = DefaultCost + } + p := new(hashed) + p.major = majorVersion + p.minor = minorVersion + + err := checkCost(cost) + if err != nil { + return nil, err + } + p.cost = cost + + unencodedSalt := make([]byte, maxSaltSize) + _, err = io.ReadFull(rand.Reader, unencodedSalt) + if err != nil { + return nil, err + } + + p.salt = base64Encode(unencodedSalt) + hash, err := bcrypt(password, p.cost, p.salt) + if err != nil { + return nil, err + } + p.hash = hash + return p, err +} + +func newFromHash(hashedSecret []byte) (*hashed, error) { + if len(hashedSecret) < minHashSize { + return nil, ErrHashTooShort + } + p := new(hashed) + n, err := p.decodeVersion(hashedSecret) + if err != nil { + return nil, err + } + hashedSecret = hashedSecret[n:] + n, err = p.decodeCost(hashedSecret) + if err != nil { + return nil, err + } + hashedSecret = hashedSecret[n:] + + // The "+2" is here because we'll have to append at most 2 '=' to the salt + // when base64 decoding it in expensiveBlowfishSetup(). + p.salt = make([]byte, encodedSaltSize, encodedSaltSize+2) + copy(p.salt, hashedSecret[:encodedSaltSize]) + + hashedSecret = hashedSecret[encodedSaltSize:] + p.hash = make([]byte, len(hashedSecret)) + copy(p.hash, hashedSecret) + + return p, nil +} + +func bcrypt(password []byte, cost int, salt []byte) ([]byte, error) { + cipherData := make([]byte, len(magicCipherData)) + copy(cipherData, magicCipherData) + + c, err := expensiveBlowfishSetup(password, uint32(cost), salt) + if err != nil { + return nil, err + } + + for i := 0; i < 24; i += 8 { + for j := 0; j < 64; j++ { + c.Encrypt(cipherData[i:i+8], cipherData[i:i+8]) + } + } + + // Bug compatibility with C bcrypt implementations. We only encode 23 of + // the 24 bytes encrypted. + hsh := base64Encode(cipherData[:maxCryptedHashSize]) + return hsh, nil +} + +func expensiveBlowfishSetup(key []byte, cost uint32, salt []byte) (*blowfish.Cipher, error) { + csalt, err := base64Decode(salt) + if err != nil { + return nil, err + } + + // Bug compatibility with C bcrypt implementations. They use the trailing + // NULL in the key string during expansion. + // We copy the key to prevent changing the underlying array. + ckey := append(key[:len(key):len(key)], 0) + + c, err := blowfish.NewSaltedCipher(ckey, csalt) + if err != nil { + return nil, err + } + + var i, rounds uint64 + rounds = 1 << cost + for i = 0; i < rounds; i++ { + blowfish.ExpandKey(ckey, c) + blowfish.ExpandKey(csalt, c) + } + + return c, nil +} + +func (p *hashed) Hash() []byte { + arr := make([]byte, 60) + arr[0] = '$' + arr[1] = p.major + n := 2 + if p.minor != 0 { + arr[2] = p.minor + n = 3 + } + arr[n] = '$' + n += 1 + copy(arr[n:], []byte(fmt.Sprintf("%02d", p.cost))) + n += 2 + arr[n] = '$' + n += 1 + copy(arr[n:], p.salt) + n += encodedSaltSize + copy(arr[n:], p.hash) + n += encodedHashSize + return arr[:n] +} + +func (p *hashed) decodeVersion(sbytes []byte) (int, error) { + if sbytes[0] != '$' { + return -1, InvalidHashPrefixError(sbytes[0]) + } + if sbytes[1] > majorVersion { + return -1, HashVersionTooNewError(sbytes[1]) + } + p.major = sbytes[1] + n := 3 + if sbytes[2] != '$' { + p.minor = sbytes[2] + n++ + } + return n, nil +} + +// sbytes should begin where decodeVersion left off. +func (p *hashed) decodeCost(sbytes []byte) (int, error) { + cost, err := strconv.Atoi(string(sbytes[0:2])) + if err != nil { + return -1, err + } + err = checkCost(cost) + if err != nil { + return -1, err + } + p.cost = cost + return 3, nil +} + +func (p *hashed) String() string { + return fmt.Sprintf("&{hash: %#v, salt: %#v, cost: %d, major: %c, minor: %c}", string(p.hash), p.salt, p.cost, p.major, p.minor) +} + +func checkCost(cost int) error { + if cost < MinCost || cost > MaxCost { + return InvalidCostError(cost) + } + return nil +} diff --git a/vendor/golang.org/x/crypto/bcrypt/bcrypt_test.go b/vendor/golang.org/x/crypto/bcrypt/bcrypt_test.go new file mode 100644 index 0000000..aecf759 --- /dev/null +++ b/vendor/golang.org/x/crypto/bcrypt/bcrypt_test.go @@ -0,0 +1,243 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bcrypt + +import ( + "bytes" + "fmt" + "testing" +) + +func TestBcryptingIsEasy(t *testing.T) { + pass := []byte("mypassword") + hp, err := GenerateFromPassword(pass, 0) + if err != nil { + t.Fatalf("GenerateFromPassword error: %s", err) + } + + if CompareHashAndPassword(hp, pass) != nil { + t.Errorf("%v should hash %s correctly", hp, pass) + } + + notPass := "notthepass" + err = CompareHashAndPassword(hp, []byte(notPass)) + if err != ErrMismatchedHashAndPassword { + t.Errorf("%v and %s should be mismatched", hp, notPass) + } +} + +func TestBcryptingIsCorrect(t *testing.T) { + pass := []byte("allmine") + salt := []byte("XajjQvNhvvRt5GSeFk1xFe") + expectedHash := []byte("$2a$10$XajjQvNhvvRt5GSeFk1xFeyqRrsxkhBkUiQeg0dt.wU1qD4aFDcga") + + hash, err := bcrypt(pass, 10, salt) + if err != nil { + t.Fatalf("bcrypt blew up: %v", err) + } + if !bytes.HasSuffix(expectedHash, hash) { + t.Errorf("%v should be the suffix of %v", hash, expectedHash) + } + + h, err := newFromHash(expectedHash) + if err != nil { + t.Errorf("Unable to parse %s: %v", string(expectedHash), err) + } + + // This is not the safe way to compare these hashes. We do this only for + // testing clarity. Use bcrypt.CompareHashAndPassword() + if err == nil && !bytes.Equal(expectedHash, h.Hash()) { + t.Errorf("Parsed hash %v should equal %v", h.Hash(), expectedHash) + } +} + +func TestVeryShortPasswords(t *testing.T) { + key := []byte("k") + salt := []byte("XajjQvNhvvRt5GSeFk1xFe") + _, err := bcrypt(key, 10, salt) + if err != nil { + t.Errorf("One byte key resulted in error: %s", err) + } +} + +func TestTooLongPasswordsWork(t *testing.T) { + salt := []byte("XajjQvNhvvRt5GSeFk1xFe") + // One byte over the usual 56 byte limit that blowfish has + tooLongPass := []byte("012345678901234567890123456789012345678901234567890123456") + tooLongExpected := []byte("$2a$10$XajjQvNhvvRt5GSeFk1xFe5l47dONXg781AmZtd869sO8zfsHuw7C") + hash, err := bcrypt(tooLongPass, 10, salt) + if err != nil { + t.Fatalf("bcrypt blew up on long password: %v", err) + } + if !bytes.HasSuffix(tooLongExpected, hash) { + t.Errorf("%v should be the suffix of %v", hash, tooLongExpected) + } +} + +type InvalidHashTest struct { + err error + hash []byte +} + +var invalidTests = []InvalidHashTest{ + {ErrHashTooShort, []byte("$2a$10$fooo")}, + {ErrHashTooShort, []byte("$2a")}, + {HashVersionTooNewError('3'), []byte("$3a$10$sssssssssssssssssssssshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh")}, + {InvalidHashPrefixError('%'), []byte("%2a$10$sssssssssssssssssssssshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh")}, + {InvalidCostError(32), []byte("$2a$32$sssssssssssssssssssssshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh")}, +} + +func TestInvalidHashErrors(t *testing.T) { + check := func(name string, expected, err error) { + if err == nil { + t.Errorf("%s: Should have returned an error", name) + } + if err != nil && err != expected { + t.Errorf("%s gave err %v but should have given %v", name, err, expected) + } + } + for _, iht := range invalidTests { + _, err := newFromHash(iht.hash) + check("newFromHash", iht.err, err) + err = CompareHashAndPassword(iht.hash, []byte("anything")) + check("CompareHashAndPassword", iht.err, err) + } +} + +func TestUnpaddedBase64Encoding(t *testing.T) { + original := []byte{101, 201, 101, 75, 19, 227, 199, 20, 239, 236, 133, 32, 30, 109, 243, 30} + encodedOriginal := []byte("XajjQvNhvvRt5GSeFk1xFe") + + encoded := base64Encode(original) + + if !bytes.Equal(encodedOriginal, encoded) { + t.Errorf("Encoded %v should have equaled %v", encoded, encodedOriginal) + } + + decoded, err := base64Decode(encodedOriginal) + if err != nil { + t.Fatalf("base64Decode blew up: %s", err) + } + + if !bytes.Equal(decoded, original) { + t.Errorf("Decoded %v should have equaled %v", decoded, original) + } +} + +func TestCost(t *testing.T) { + suffix := "XajjQvNhvvRt5GSeFk1xFe5l47dONXg781AmZtd869sO8zfsHuw7C" + for _, vers := range []string{"2a", "2"} { + for _, cost := range []int{4, 10} { + s := fmt.Sprintf("$%s$%02d$%s", vers, cost, suffix) + h := []byte(s) + actual, err := Cost(h) + if err != nil { + t.Errorf("Cost, error: %s", err) + continue + } + if actual != cost { + t.Errorf("Cost, expected: %d, actual: %d", cost, actual) + } + } + } + _, err := Cost([]byte("$a$a$" + suffix)) + if err == nil { + t.Errorf("Cost, malformed but no error returned") + } +} + +func TestCostValidationInHash(t *testing.T) { + if testing.Short() { + return + } + + pass := []byte("mypassword") + + for c := 0; c < MinCost; c++ { + p, _ := newFromPassword(pass, c) + if p.cost != DefaultCost { + t.Errorf("newFromPassword should default costs below %d to %d, but was %d", MinCost, DefaultCost, p.cost) + } + } + + p, _ := newFromPassword(pass, 14) + if p.cost != 14 { + t.Errorf("newFromPassword should default cost to 14, but was %d", p.cost) + } + + hp, _ := newFromHash(p.Hash()) + if p.cost != hp.cost { + t.Errorf("newFromHash should maintain the cost at %d, but was %d", p.cost, hp.cost) + } + + _, err := newFromPassword(pass, 32) + if err == nil { + t.Fatalf("newFromPassword: should return a cost error") + } + if err != InvalidCostError(32) { + t.Errorf("newFromPassword: should return cost error, got %#v", err) + } +} + +func TestCostReturnsWithLeadingZeroes(t *testing.T) { + hp, _ := newFromPassword([]byte("abcdefgh"), 7) + cost := hp.Hash()[4:7] + expected := []byte("07$") + + if !bytes.Equal(expected, cost) { + t.Errorf("single digit costs in hash should have leading zeros: was %v instead of %v", cost, expected) + } +} + +func TestMinorNotRequired(t *testing.T) { + noMinorHash := []byte("$2$10$XajjQvNhvvRt5GSeFk1xFeyqRrsxkhBkUiQeg0dt.wU1qD4aFDcga") + h, err := newFromHash(noMinorHash) + if err != nil { + t.Fatalf("No minor hash blew up: %s", err) + } + if h.minor != 0 { + t.Errorf("Should leave minor version at 0, but was %d", h.minor) + } + + if !bytes.Equal(noMinorHash, h.Hash()) { + t.Errorf("Should generate hash %v, but created %v", noMinorHash, h.Hash()) + } +} + +func BenchmarkEqual(b *testing.B) { + b.StopTimer() + passwd := []byte("somepasswordyoulike") + hash, _ := GenerateFromPassword(passwd, 10) + b.StartTimer() + for i := 0; i < b.N; i++ { + CompareHashAndPassword(hash, passwd) + } +} + +func BenchmarkGeneration(b *testing.B) { + b.StopTimer() + passwd := []byte("mylongpassword1234") + b.StartTimer() + for i := 0; i < b.N; i++ { + GenerateFromPassword(passwd, 10) + } +} + +// See Issue https://github.com/golang/go/issues/20425. +func TestNoSideEffectsFromCompare(t *testing.T) { + source := []byte("passw0rd123456") + password := source[:len(source)-6] + token := source[len(source)-6:] + want := make([]byte, len(source)) + copy(want, source) + + wantHash := []byte("$2a$10$LK9XRuhNxHHCvjX3tdkRKei1QiCDUKrJRhZv7WWZPuQGRUM92rOUa") + _ = CompareHashAndPassword(wantHash, password) + + got := bytes.Join([][]byte{password, token}, []byte("")) + if !bytes.Equal(got, want) { + t.Errorf("got=%q want=%q", got, want) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b.go b/vendor/golang.org/x/crypto/blake2b/blake2b.go new file mode 100644 index 0000000..7f0a86e --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b.go @@ -0,0 +1,207 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package blake2b implements the BLAKE2b hash algorithm defined by RFC 7693 +// and the extendable output function (XOF) BLAKE2Xb. +// +// For a detailed specification of BLAKE2b see https://blake2.net/blake2.pdf +// and for BLAKE2Xb see https://blake2.net/blake2x.pdf +// +// If you aren't sure which function you need, use BLAKE2b (Sum512 or New512). +// If you need a secret-key MAC (message authentication code), use the New512 +// function with a non-nil key. +// +// BLAKE2X is a construction to compute hash values larger than 64 bytes. It +// can produce hash values between 0 and 4 GiB. +package blake2b + +import ( + "encoding/binary" + "errors" + "hash" +) + +const ( + // The blocksize of BLAKE2b in bytes. + BlockSize = 128 + // The hash size of BLAKE2b-512 in bytes. + Size = 64 + // The hash size of BLAKE2b-384 in bytes. + Size384 = 48 + // The hash size of BLAKE2b-256 in bytes. + Size256 = 32 +) + +var ( + useAVX2 bool + useAVX bool + useSSE4 bool +) + +var errKeySize = errors.New("blake2b: invalid key size") + +var iv = [8]uint64{ + 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, + 0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179, +} + +// Sum512 returns the BLAKE2b-512 checksum of the data. +func Sum512(data []byte) [Size]byte { + var sum [Size]byte + checkSum(&sum, Size, data) + return sum +} + +// Sum384 returns the BLAKE2b-384 checksum of the data. +func Sum384(data []byte) [Size384]byte { + var sum [Size]byte + var sum384 [Size384]byte + checkSum(&sum, Size384, data) + copy(sum384[:], sum[:Size384]) + return sum384 +} + +// Sum256 returns the BLAKE2b-256 checksum of the data. +func Sum256(data []byte) [Size256]byte { + var sum [Size]byte + var sum256 [Size256]byte + checkSum(&sum, Size256, data) + copy(sum256[:], sum[:Size256]) + return sum256 +} + +// New512 returns a new hash.Hash computing the BLAKE2b-512 checksum. A non-nil +// key turns the hash into a MAC. The key must between zero and 64 bytes long. +func New512(key []byte) (hash.Hash, error) { return newDigest(Size, key) } + +// New384 returns a new hash.Hash computing the BLAKE2b-384 checksum. A non-nil +// key turns the hash into a MAC. The key must between zero and 64 bytes long. +func New384(key []byte) (hash.Hash, error) { return newDigest(Size384, key) } + +// New256 returns a new hash.Hash computing the BLAKE2b-256 checksum. A non-nil +// key turns the hash into a MAC. The key must between zero and 64 bytes long. +func New256(key []byte) (hash.Hash, error) { return newDigest(Size256, key) } + +func newDigest(hashSize int, key []byte) (*digest, error) { + if len(key) > Size { + return nil, errKeySize + } + d := &digest{ + size: hashSize, + keyLen: len(key), + } + copy(d.key[:], key) + d.Reset() + return d, nil +} + +func checkSum(sum *[Size]byte, hashSize int, data []byte) { + h := iv + h[0] ^= uint64(hashSize) | (1 << 16) | (1 << 24) + var c [2]uint64 + + if length := len(data); length > BlockSize { + n := length &^ (BlockSize - 1) + if length == n { + n -= BlockSize + } + hashBlocks(&h, &c, 0, data[:n]) + data = data[n:] + } + + var block [BlockSize]byte + offset := copy(block[:], data) + remaining := uint64(BlockSize - offset) + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) + + for i, v := range h[:(hashSize+7)/8] { + binary.LittleEndian.PutUint64(sum[8*i:], v) + } +} + +type digest struct { + h [8]uint64 + c [2]uint64 + size int + block [BlockSize]byte + offset int + + key [BlockSize]byte + keyLen int +} + +func (d *digest) BlockSize() int { return BlockSize } + +func (d *digest) Size() int { return d.size } + +func (d *digest) Reset() { + d.h = iv + d.h[0] ^= uint64(d.size) | (uint64(d.keyLen) << 8) | (1 << 16) | (1 << 24) + d.offset, d.c[0], d.c[1] = 0, 0, 0 + if d.keyLen > 0 { + d.block = d.key + d.offset = BlockSize + } +} + +func (d *digest) Write(p []byte) (n int, err error) { + n = len(p) + + if d.offset > 0 { + remaining := BlockSize - d.offset + if n <= remaining { + d.offset += copy(d.block[d.offset:], p) + return + } + copy(d.block[d.offset:], p[:remaining]) + hashBlocks(&d.h, &d.c, 0, d.block[:]) + d.offset = 0 + p = p[remaining:] + } + + if length := len(p); length > BlockSize { + nn := length &^ (BlockSize - 1) + if length == nn { + nn -= BlockSize + } + hashBlocks(&d.h, &d.c, 0, p[:nn]) + p = p[nn:] + } + + if len(p) > 0 { + d.offset += copy(d.block[:], p) + } + + return +} + +func (d *digest) Sum(sum []byte) []byte { + var hash [Size]byte + d.finalize(&hash) + return append(sum, hash[:d.size]...) +} + +func (d *digest) finalize(hash *[Size]byte) { + var block [BlockSize]byte + copy(block[:], d.block[:d.offset]) + remaining := uint64(BlockSize - d.offset) + + c := d.c + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + h := d.h + hashBlocks(&h, &c, 0xFFFFFFFFFFFFFFFF, block[:]) + + for i, v := range h { + binary.LittleEndian.PutUint64(hash[8*i:], v) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go new file mode 100644 index 0000000..8c41cf6 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.go @@ -0,0 +1,43 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7,amd64,!gccgo,!appengine + +package blake2b + +func init() { + useAVX2 = supportsAVX2() + useAVX = supportsAVX() + useSSE4 = supportsSSE4() +} + +//go:noescape +func supportsSSE4() bool + +//go:noescape +func supportsAVX() bool + +//go:noescape +func supportsAVX2() bool + +//go:noescape +func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +//go:noescape +func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +//go:noescape +func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + if useAVX2 { + hashBlocksAVX2(h, c, flag, blocks) + } else if useAVX { + hashBlocksAVX(h, c, flag, blocks) + } else if useSSE4 { + hashBlocksSSE4(h, c, flag, blocks) + } else { + hashBlocksGeneric(h, c, flag, blocks) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s new file mode 100644 index 0000000..784bce6 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2bAVX2_amd64.s @@ -0,0 +1,762 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7,amd64,!gccgo,!appengine + +#include "textflag.h" + +DATA ·AVX2_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·AVX2_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +DATA ·AVX2_iv0<>+0x10(SB)/8, $0x3c6ef372fe94f82b +DATA ·AVX2_iv0<>+0x18(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·AVX2_iv0<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_iv1<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·AVX2_iv1<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +DATA ·AVX2_iv1<>+0x10(SB)/8, $0x1f83d9abfb41bd6b +DATA ·AVX2_iv1<>+0x18(SB)/8, $0x5be0cd19137e2179 +GLOBL ·AVX2_iv1<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·AVX2_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +DATA ·AVX2_c40<>+0x10(SB)/8, $0x0201000706050403 +DATA ·AVX2_c40<>+0x18(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·AVX2_c40<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX2_c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·AVX2_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +DATA ·AVX2_c48<>+0x10(SB)/8, $0x0100070605040302 +DATA ·AVX2_c48<>+0x18(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·AVX2_c48<>(SB), (NOPTR+RODATA), $32 + +DATA ·AVX_iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·AVX_iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +GLOBL ·AVX_iv0<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b +DATA ·AVX_iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·AVX_iv1<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv2<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·AVX_iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +GLOBL ·AVX_iv2<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b +DATA ·AVX_iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 +GLOBL ·AVX_iv3<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·AVX_c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·AVX_c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·AVX_c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·AVX_c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·AVX_c48<>(SB), (NOPTR+RODATA), $16 + +#define VPERMQ_0x39_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x39 +#define VPERMQ_0x93_Y1_Y1 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xc9; BYTE $0x93 +#define VPERMQ_0x4E_Y2_Y2 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xd2; BYTE $0x4e +#define VPERMQ_0x93_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x93 +#define VPERMQ_0x39_Y3_Y3 BYTE $0xc4; BYTE $0xe3; BYTE $0xfd; BYTE $0x00; BYTE $0xdb; BYTE $0x39 + +#define ROUND_AVX2(m0, m1, m2, m3, t, c40, c48) \ + VPADDQ m0, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFD $-79, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPSHUFB c40, Y1, Y1; \ + VPADDQ m1, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFB c48, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPADDQ Y1, Y1, t; \ + VPSRLQ $63, Y1, Y1; \ + VPXOR t, Y1, Y1; \ + VPERMQ_0x39_Y1_Y1; \ + VPERMQ_0x4E_Y2_Y2; \ + VPERMQ_0x93_Y3_Y3; \ + VPADDQ m2, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFD $-79, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPSHUFB c40, Y1, Y1; \ + VPADDQ m3, Y0, Y0; \ + VPADDQ Y1, Y0, Y0; \ + VPXOR Y0, Y3, Y3; \ + VPSHUFB c48, Y3, Y3; \ + VPADDQ Y3, Y2, Y2; \ + VPXOR Y2, Y1, Y1; \ + VPADDQ Y1, Y1, t; \ + VPSRLQ $63, Y1, Y1; \ + VPXOR t, Y1, Y1; \ + VPERMQ_0x39_Y3_Y3; \ + VPERMQ_0x4E_Y2_Y2; \ + VPERMQ_0x93_Y1_Y1 + +#define VMOVQ_SI_X11_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x1E +#define VMOVQ_SI_X12_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x26 +#define VMOVQ_SI_X13_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x2E +#define VMOVQ_SI_X14_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x36 +#define VMOVQ_SI_X15_0 BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x3E + +#define VMOVQ_SI_X11(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x5E; BYTE $n +#define VMOVQ_SI_X12(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x66; BYTE $n +#define VMOVQ_SI_X13(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x6E; BYTE $n +#define VMOVQ_SI_X14(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x76; BYTE $n +#define VMOVQ_SI_X15(n) BYTE $0xC5; BYTE $0x7A; BYTE $0x7E; BYTE $0x7E; BYTE $n + +#define VPINSRQ_1_SI_X11_0 BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x1E; BYTE $0x01 +#define VPINSRQ_1_SI_X12_0 BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x26; BYTE $0x01 +#define VPINSRQ_1_SI_X13_0 BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x2E; BYTE $0x01 +#define VPINSRQ_1_SI_X14_0 BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x36; BYTE $0x01 +#define VPINSRQ_1_SI_X15_0 BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x3E; BYTE $0x01 + +#define VPINSRQ_1_SI_X11(n) BYTE $0xC4; BYTE $0x63; BYTE $0xA1; BYTE $0x22; BYTE $0x5E; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X12(n) BYTE $0xC4; BYTE $0x63; BYTE $0x99; BYTE $0x22; BYTE $0x66; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X13(n) BYTE $0xC4; BYTE $0x63; BYTE $0x91; BYTE $0x22; BYTE $0x6E; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X14(n) BYTE $0xC4; BYTE $0x63; BYTE $0x89; BYTE $0x22; BYTE $0x76; BYTE $n; BYTE $0x01 +#define VPINSRQ_1_SI_X15(n) BYTE $0xC4; BYTE $0x63; BYTE $0x81; BYTE $0x22; BYTE $0x7E; BYTE $n; BYTE $0x01 + +#define VMOVQ_R8_X15 BYTE $0xC4; BYTE $0x41; BYTE $0xF9; BYTE $0x6E; BYTE $0xF8 +#define VPINSRQ_1_R9_X15 BYTE $0xC4; BYTE $0x43; BYTE $0x81; BYTE $0x22; BYTE $0xF9; BYTE $0x01 + +// load msg: Y12 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y12(i0, i1, i2, i3) \ + VMOVQ_SI_X12(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X12(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y12, Y12 + +// load msg: Y13 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y13(i0, i1, i2, i3) \ + VMOVQ_SI_X13(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X13(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y13, Y13 + +// load msg: Y14 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y14(i0, i1, i2, i3) \ + VMOVQ_SI_X14(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X14(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y14, Y14 + +// load msg: Y15 = (i0, i1, i2, i3) +// i0, i1, i2, i3 must not be 0 +#define LOAD_MSG_AVX2_Y15(i0, i1, i2, i3) \ + VMOVQ_SI_X15(i0*8); \ + VMOVQ_SI_X11(i2*8); \ + VPINSRQ_1_SI_X15(i1*8); \ + VPINSRQ_1_SI_X11(i3*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() \ + VMOVQ_SI_X12_0; \ + VMOVQ_SI_X11(4*8); \ + VPINSRQ_1_SI_X12(2*8); \ + VPINSRQ_1_SI_X11(6*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(1, 3, 5, 7); \ + LOAD_MSG_AVX2_Y14(8, 10, 12, 14); \ + LOAD_MSG_AVX2_Y15(9, 11, 13, 15) + +#define LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() \ + LOAD_MSG_AVX2_Y12(14, 4, 9, 13); \ + LOAD_MSG_AVX2_Y13(10, 8, 15, 6); \ + VMOVQ_SI_X11(11*8); \ + VPSHUFD $0x4E, 0*8(SI), X14; \ + VPINSRQ_1_SI_X11(5*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + LOAD_MSG_AVX2_Y15(12, 2, 7, 3) + +#define LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() \ + VMOVQ_SI_X11(5*8); \ + VMOVDQU 11*8(SI), X12; \ + VPINSRQ_1_SI_X11(15*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + VMOVQ_SI_X13(8*8); \ + VMOVQ_SI_X11(2*8); \ + VPINSRQ_1_SI_X13_0; \ + VPINSRQ_1_SI_X11(13*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(10, 3, 7, 9); \ + LOAD_MSG_AVX2_Y15(14, 6, 1, 4) + +#define LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() \ + LOAD_MSG_AVX2_Y12(7, 3, 13, 11); \ + LOAD_MSG_AVX2_Y13(9, 1, 12, 14); \ + LOAD_MSG_AVX2_Y14(2, 5, 4, 15); \ + VMOVQ_SI_X15(6*8); \ + VMOVQ_SI_X11_0; \ + VPINSRQ_1_SI_X15(10*8); \ + VPINSRQ_1_SI_X11(8*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() \ + LOAD_MSG_AVX2_Y12(9, 5, 2, 10); \ + VMOVQ_SI_X13_0; \ + VMOVQ_SI_X11(4*8); \ + VPINSRQ_1_SI_X13(7*8); \ + VPINSRQ_1_SI_X11(15*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(14, 11, 6, 3); \ + LOAD_MSG_AVX2_Y15(1, 12, 8, 13) + +#define LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X11_0; \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X11(8*8); \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(12, 10, 11, 3); \ + LOAD_MSG_AVX2_Y14(4, 7, 15, 1); \ + LOAD_MSG_AVX2_Y15(13, 5, 14, 9) + +#define LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() \ + LOAD_MSG_AVX2_Y12(12, 1, 14, 4); \ + LOAD_MSG_AVX2_Y13(5, 15, 13, 10); \ + VMOVQ_SI_X14_0; \ + VPSHUFD $0x4E, 8*8(SI), X11; \ + VPINSRQ_1_SI_X14(6*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + LOAD_MSG_AVX2_Y15(7, 3, 2, 11) + +#define LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() \ + LOAD_MSG_AVX2_Y12(13, 7, 12, 3); \ + LOAD_MSG_AVX2_Y13(11, 14, 1, 9); \ + LOAD_MSG_AVX2_Y14(5, 15, 8, 2); \ + VMOVQ_SI_X15_0; \ + VMOVQ_SI_X11(6*8); \ + VPINSRQ_1_SI_X15(4*8); \ + VPINSRQ_1_SI_X11(10*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() \ + VMOVQ_SI_X12(6*8); \ + VMOVQ_SI_X11(11*8); \ + VPINSRQ_1_SI_X12(14*8); \ + VPINSRQ_1_SI_X11_0; \ + VINSERTI128 $1, X11, Y12, Y12; \ + LOAD_MSG_AVX2_Y13(15, 9, 3, 8); \ + VMOVQ_SI_X11(1*8); \ + VMOVDQU 12*8(SI), X14; \ + VPINSRQ_1_SI_X11(10*8); \ + VINSERTI128 $1, X11, Y14, Y14; \ + VMOVQ_SI_X15(2*8); \ + VMOVDQU 4*8(SI), X11; \ + VPINSRQ_1_SI_X15(7*8); \ + VINSERTI128 $1, X11, Y15, Y15 + +#define LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() \ + LOAD_MSG_AVX2_Y12(10, 8, 7, 1); \ + VMOVQ_SI_X13(2*8); \ + VPSHUFD $0x4E, 5*8(SI), X11; \ + VPINSRQ_1_SI_X13(4*8); \ + VINSERTI128 $1, X11, Y13, Y13; \ + LOAD_MSG_AVX2_Y14(15, 9, 3, 13); \ + VMOVQ_SI_X15(11*8); \ + VMOVQ_SI_X11(12*8); \ + VPINSRQ_1_SI_X15(14*8); \ + VPINSRQ_1_SI_X11_0; \ + VINSERTI128 $1, X11, Y15, Y15 + +// func hashBlocksAVX2(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksAVX2(SB), 4, $320-48 // frame size = 288 + 32 byte alignment + MOVQ h+0(FP), AX + MOVQ c+8(FP), BX + MOVQ flag+16(FP), CX + MOVQ blocks_base+24(FP), SI + MOVQ blocks_len+32(FP), DI + + MOVQ SP, DX + MOVQ SP, R9 + ADDQ $31, R9 + ANDQ $~31, R9 + MOVQ R9, SP + + MOVQ CX, 16(SP) + XORQ CX, CX + MOVQ CX, 24(SP) + + VMOVDQU ·AVX2_c40<>(SB), Y4 + VMOVDQU ·AVX2_c48<>(SB), Y5 + + VMOVDQU 0(AX), Y8 + VMOVDQU 32(AX), Y9 + VMOVDQU ·AVX2_iv0<>(SB), Y6 + VMOVDQU ·AVX2_iv1<>(SB), Y7 + + MOVQ 0(BX), R8 + MOVQ 8(BX), R9 + MOVQ R9, 8(SP) + +loop: + ADDQ $128, R8 + MOVQ R8, 0(SP) + CMPQ R8, $128 + JGE noinc + INCQ R9 + MOVQ R9, 8(SP) + +noinc: + VMOVDQA Y8, Y0 + VMOVDQA Y9, Y1 + VMOVDQA Y6, Y2 + VPXOR 0(SP), Y7, Y3 + + LOAD_MSG_AVX2_0_2_4_6_1_3_5_7_8_10_12_14_9_11_13_15() + VMOVDQA Y12, 32(SP) + VMOVDQA Y13, 64(SP) + VMOVDQA Y14, 96(SP) + VMOVDQA Y15, 128(SP) + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_14_4_9_13_10_8_15_6_1_0_11_5_12_2_7_3() + VMOVDQA Y12, 160(SP) + VMOVDQA Y13, 192(SP) + VMOVDQA Y14, 224(SP) + VMOVDQA Y15, 256(SP) + + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_11_12_5_15_8_0_2_13_10_3_7_9_14_6_1_4() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_7_3_13_11_9_1_12_14_2_5_4_15_6_10_0_8() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_9_5_2_10_0_7_4_15_14_11_6_3_1_12_8_13() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_2_6_0_8_12_10_11_3_4_7_15_1_13_5_14_9() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_12_1_14_4_5_15_13_10_0_6_9_8_7_3_2_11() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_13_7_12_3_11_14_1_9_5_15_8_2_0_4_6_10() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_6_14_11_0_15_9_3_8_12_13_1_10_2_7_4_5() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + LOAD_MSG_AVX2_10_8_7_1_2_4_6_5_15_9_3_13_11_14_12_0() + ROUND_AVX2(Y12, Y13, Y14, Y15, Y10, Y4, Y5) + + ROUND_AVX2(32(SP), 64(SP), 96(SP), 128(SP), Y10, Y4, Y5) + ROUND_AVX2(160(SP), 192(SP), 224(SP), 256(SP), Y10, Y4, Y5) + + VPXOR Y0, Y8, Y8 + VPXOR Y1, Y9, Y9 + VPXOR Y2, Y8, Y8 + VPXOR Y3, Y9, Y9 + + LEAQ 128(SI), SI + SUBQ $128, DI + JNE loop + + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + + VMOVDQU Y8, 0(AX) + VMOVDQU Y9, 32(AX) + VZEROUPPER + + MOVQ DX, SP + RET + +#define VPUNPCKLQDQ_X2_X2_X15 BYTE $0xC5; BYTE $0x69; BYTE $0x6C; BYTE $0xFA +#define VPUNPCKLQDQ_X3_X3_X15 BYTE $0xC5; BYTE $0x61; BYTE $0x6C; BYTE $0xFB +#define VPUNPCKLQDQ_X7_X7_X15 BYTE $0xC5; BYTE $0x41; BYTE $0x6C; BYTE $0xFF +#define VPUNPCKLQDQ_X13_X13_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x11; BYTE $0x6C; BYTE $0xFD +#define VPUNPCKLQDQ_X14_X14_X15 BYTE $0xC4; BYTE $0x41; BYTE $0x09; BYTE $0x6C; BYTE $0xFE + +#define VPUNPCKHQDQ_X15_X2_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x69; BYTE $0x6D; BYTE $0xD7 +#define VPUNPCKHQDQ_X15_X3_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xDF +#define VPUNPCKHQDQ_X15_X6_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x49; BYTE $0x6D; BYTE $0xF7 +#define VPUNPCKHQDQ_X15_X7_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xFF +#define VPUNPCKHQDQ_X15_X3_X2 BYTE $0xC4; BYTE $0xC1; BYTE $0x61; BYTE $0x6D; BYTE $0xD7 +#define VPUNPCKHQDQ_X15_X7_X6 BYTE $0xC4; BYTE $0xC1; BYTE $0x41; BYTE $0x6D; BYTE $0xF7 +#define VPUNPCKHQDQ_X15_X13_X3 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xDF +#define VPUNPCKHQDQ_X15_X13_X7 BYTE $0xC4; BYTE $0xC1; BYTE $0x11; BYTE $0x6D; BYTE $0xFF + +#define SHUFFLE_AVX() \ + VMOVDQA X6, X13; \ + VMOVDQA X2, X14; \ + VMOVDQA X4, X6; \ + VPUNPCKLQDQ_X13_X13_X15; \ + VMOVDQA X5, X4; \ + VMOVDQA X6, X5; \ + VPUNPCKHQDQ_X15_X7_X6; \ + VPUNPCKLQDQ_X7_X7_X15; \ + VPUNPCKHQDQ_X15_X13_X7; \ + VPUNPCKLQDQ_X3_X3_X15; \ + VPUNPCKHQDQ_X15_X2_X2; \ + VPUNPCKLQDQ_X14_X14_X15; \ + VPUNPCKHQDQ_X15_X3_X3; \ + +#define SHUFFLE_AVX_INV() \ + VMOVDQA X2, X13; \ + VMOVDQA X4, X14; \ + VPUNPCKLQDQ_X2_X2_X15; \ + VMOVDQA X5, X4; \ + VPUNPCKHQDQ_X15_X3_X2; \ + VMOVDQA X14, X5; \ + VPUNPCKLQDQ_X3_X3_X15; \ + VMOVDQA X6, X14; \ + VPUNPCKHQDQ_X15_X13_X3; \ + VPUNPCKLQDQ_X7_X7_X15; \ + VPUNPCKHQDQ_X15_X6_X6; \ + VPUNPCKLQDQ_X14_X14_X15; \ + VPUNPCKHQDQ_X15_X7_X7; \ + +#define HALF_ROUND_AVX(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ + VPADDQ m0, v0, v0; \ + VPADDQ v2, v0, v0; \ + VPADDQ m1, v1, v1; \ + VPADDQ v3, v1, v1; \ + VPXOR v0, v6, v6; \ + VPXOR v1, v7, v7; \ + VPSHUFD $-79, v6, v6; \ + VPSHUFD $-79, v7, v7; \ + VPADDQ v6, v4, v4; \ + VPADDQ v7, v5, v5; \ + VPXOR v4, v2, v2; \ + VPXOR v5, v3, v3; \ + VPSHUFB c40, v2, v2; \ + VPSHUFB c40, v3, v3; \ + VPADDQ m2, v0, v0; \ + VPADDQ v2, v0, v0; \ + VPADDQ m3, v1, v1; \ + VPADDQ v3, v1, v1; \ + VPXOR v0, v6, v6; \ + VPXOR v1, v7, v7; \ + VPSHUFB c48, v6, v6; \ + VPSHUFB c48, v7, v7; \ + VPADDQ v6, v4, v4; \ + VPADDQ v7, v5, v5; \ + VPXOR v4, v2, v2; \ + VPXOR v5, v3, v3; \ + VPADDQ v2, v2, t0; \ + VPSRLQ $63, v2, v2; \ + VPXOR t0, v2, v2; \ + VPADDQ v3, v3, t0; \ + VPSRLQ $63, v3, v3; \ + VPXOR t0, v3, v3 + +// load msg: X12 = (i0, i1), X13 = (i2, i3), X14 = (i4, i5), X15 = (i6, i7) +// i0, i1, i2, i3, i4, i5, i6, i7 must not be 0 +#define LOAD_MSG_AVX(i0, i1, i2, i3, i4, i5, i6, i7) \ + VMOVQ_SI_X12(i0*8); \ + VMOVQ_SI_X13(i2*8); \ + VMOVQ_SI_X14(i4*8); \ + VMOVQ_SI_X15(i6*8); \ + VPINSRQ_1_SI_X12(i1*8); \ + VPINSRQ_1_SI_X13(i3*8); \ + VPINSRQ_1_SI_X14(i5*8); \ + VPINSRQ_1_SI_X15(i7*8) + +// load msg: X12 = (0, 2), X13 = (4, 6), X14 = (1, 3), X15 = (5, 7) +#define LOAD_MSG_AVX_0_2_4_6_1_3_5_7() \ + VMOVQ_SI_X12_0; \ + VMOVQ_SI_X13(4*8); \ + VMOVQ_SI_X14(1*8); \ + VMOVQ_SI_X15(5*8); \ + VPINSRQ_1_SI_X12(2*8); \ + VPINSRQ_1_SI_X13(6*8); \ + VPINSRQ_1_SI_X14(3*8); \ + VPINSRQ_1_SI_X15(7*8) + +// load msg: X12 = (1, 0), X13 = (11, 5), X14 = (12, 2), X15 = (7, 3) +#define LOAD_MSG_AVX_1_0_11_5_12_2_7_3() \ + VPSHUFD $0x4E, 0*8(SI), X12; \ + VMOVQ_SI_X13(11*8); \ + VMOVQ_SI_X14(12*8); \ + VMOVQ_SI_X15(7*8); \ + VPINSRQ_1_SI_X13(5*8); \ + VPINSRQ_1_SI_X14(2*8); \ + VPINSRQ_1_SI_X15(3*8) + +// load msg: X12 = (11, 12), X13 = (5, 15), X14 = (8, 0), X15 = (2, 13) +#define LOAD_MSG_AVX_11_12_5_15_8_0_2_13() \ + VMOVDQU 11*8(SI), X12; \ + VMOVQ_SI_X13(5*8); \ + VMOVQ_SI_X14(8*8); \ + VMOVQ_SI_X15(2*8); \ + VPINSRQ_1_SI_X13(15*8); \ + VPINSRQ_1_SI_X14_0; \ + VPINSRQ_1_SI_X15(13*8) + +// load msg: X12 = (2, 5), X13 = (4, 15), X14 = (6, 10), X15 = (0, 8) +#define LOAD_MSG_AVX_2_5_4_15_6_10_0_8() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X13(4*8); \ + VMOVQ_SI_X14(6*8); \ + VMOVQ_SI_X15_0; \ + VPINSRQ_1_SI_X12(5*8); \ + VPINSRQ_1_SI_X13(15*8); \ + VPINSRQ_1_SI_X14(10*8); \ + VPINSRQ_1_SI_X15(8*8) + +// load msg: X12 = (9, 5), X13 = (2, 10), X14 = (0, 7), X15 = (4, 15) +#define LOAD_MSG_AVX_9_5_2_10_0_7_4_15() \ + VMOVQ_SI_X12(9*8); \ + VMOVQ_SI_X13(2*8); \ + VMOVQ_SI_X14_0; \ + VMOVQ_SI_X15(4*8); \ + VPINSRQ_1_SI_X12(5*8); \ + VPINSRQ_1_SI_X13(10*8); \ + VPINSRQ_1_SI_X14(7*8); \ + VPINSRQ_1_SI_X15(15*8) + +// load msg: X12 = (2, 6), X13 = (0, 8), X14 = (12, 10), X15 = (11, 3) +#define LOAD_MSG_AVX_2_6_0_8_12_10_11_3() \ + VMOVQ_SI_X12(2*8); \ + VMOVQ_SI_X13_0; \ + VMOVQ_SI_X14(12*8); \ + VMOVQ_SI_X15(11*8); \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X13(8*8); \ + VPINSRQ_1_SI_X14(10*8); \ + VPINSRQ_1_SI_X15(3*8) + +// load msg: X12 = (0, 6), X13 = (9, 8), X14 = (7, 3), X15 = (2, 11) +#define LOAD_MSG_AVX_0_6_9_8_7_3_2_11() \ + MOVQ 0*8(SI), X12; \ + VPSHUFD $0x4E, 8*8(SI), X13; \ + MOVQ 7*8(SI), X14; \ + MOVQ 2*8(SI), X15; \ + VPINSRQ_1_SI_X12(6*8); \ + VPINSRQ_1_SI_X14(3*8); \ + VPINSRQ_1_SI_X15(11*8) + +// load msg: X12 = (6, 14), X13 = (11, 0), X14 = (15, 9), X15 = (3, 8) +#define LOAD_MSG_AVX_6_14_11_0_15_9_3_8() \ + MOVQ 6*8(SI), X12; \ + MOVQ 11*8(SI), X13; \ + MOVQ 15*8(SI), X14; \ + MOVQ 3*8(SI), X15; \ + VPINSRQ_1_SI_X12(14*8); \ + VPINSRQ_1_SI_X13_0; \ + VPINSRQ_1_SI_X14(9*8); \ + VPINSRQ_1_SI_X15(8*8) + +// load msg: X12 = (5, 15), X13 = (8, 2), X14 = (0, 4), X15 = (6, 10) +#define LOAD_MSG_AVX_5_15_8_2_0_4_6_10() \ + MOVQ 5*8(SI), X12; \ + MOVQ 8*8(SI), X13; \ + MOVQ 0*8(SI), X14; \ + MOVQ 6*8(SI), X15; \ + VPINSRQ_1_SI_X12(15*8); \ + VPINSRQ_1_SI_X13(2*8); \ + VPINSRQ_1_SI_X14(4*8); \ + VPINSRQ_1_SI_X15(10*8) + +// load msg: X12 = (12, 13), X13 = (1, 10), X14 = (2, 7), X15 = (4, 5) +#define LOAD_MSG_AVX_12_13_1_10_2_7_4_5() \ + VMOVDQU 12*8(SI), X12; \ + MOVQ 1*8(SI), X13; \ + MOVQ 2*8(SI), X14; \ + VPINSRQ_1_SI_X13(10*8); \ + VPINSRQ_1_SI_X14(7*8); \ + VMOVDQU 4*8(SI), X15 + +// load msg: X12 = (15, 9), X13 = (3, 13), X14 = (11, 14), X15 = (12, 0) +#define LOAD_MSG_AVX_15_9_3_13_11_14_12_0() \ + MOVQ 15*8(SI), X12; \ + MOVQ 3*8(SI), X13; \ + MOVQ 11*8(SI), X14; \ + MOVQ 12*8(SI), X15; \ + VPINSRQ_1_SI_X12(9*8); \ + VPINSRQ_1_SI_X13(13*8); \ + VPINSRQ_1_SI_X14(14*8); \ + VPINSRQ_1_SI_X15_0 + +// func hashBlocksAVX(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksAVX(SB), 4, $288-48 // frame size = 272 + 16 byte alignment + MOVQ h+0(FP), AX + MOVQ c+8(FP), BX + MOVQ flag+16(FP), CX + MOVQ blocks_base+24(FP), SI + MOVQ blocks_len+32(FP), DI + + MOVQ SP, BP + MOVQ SP, R9 + ADDQ $15, R9 + ANDQ $~15, R9 + MOVQ R9, SP + + VMOVDQU ·AVX_c40<>(SB), X0 + VMOVDQU ·AVX_c48<>(SB), X1 + VMOVDQA X0, X8 + VMOVDQA X1, X9 + + VMOVDQU ·AVX_iv3<>(SB), X0 + VMOVDQA X0, 0(SP) + XORQ CX, 0(SP) // 0(SP) = ·AVX_iv3 ^ (CX || 0) + + VMOVDQU 0(AX), X10 + VMOVDQU 16(AX), X11 + VMOVDQU 32(AX), X2 + VMOVDQU 48(AX), X3 + + MOVQ 0(BX), R8 + MOVQ 8(BX), R9 + +loop: + ADDQ $128, R8 + CMPQ R8, $128 + JGE noinc + INCQ R9 + +noinc: + VMOVQ_R8_X15 + VPINSRQ_1_R9_X15 + + VMOVDQA X10, X0 + VMOVDQA X11, X1 + VMOVDQU ·AVX_iv0<>(SB), X4 + VMOVDQU ·AVX_iv1<>(SB), X5 + VMOVDQU ·AVX_iv2<>(SB), X6 + + VPXOR X15, X6, X6 + VMOVDQA 0(SP), X7 + + LOAD_MSG_AVX_0_2_4_6_1_3_5_7() + VMOVDQA X12, 16(SP) + VMOVDQA X13, 32(SP) + VMOVDQA X14, 48(SP) + VMOVDQA X15, 64(SP) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(8, 10, 12, 14, 9, 11, 13, 15) + VMOVDQA X12, 80(SP) + VMOVDQA X13, 96(SP) + VMOVDQA X14, 112(SP) + VMOVDQA X15, 128(SP) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(14, 4, 9, 13, 10, 8, 15, 6) + VMOVDQA X12, 144(SP) + VMOVDQA X13, 160(SP) + VMOVDQA X14, 176(SP) + VMOVDQA X15, 192(SP) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_1_0_11_5_12_2_7_3() + VMOVDQA X12, 208(SP) + VMOVDQA X13, 224(SP) + VMOVDQA X14, 240(SP) + VMOVDQA X15, 256(SP) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_11_12_5_15_8_0_2_13() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(10, 3, 7, 9, 14, 6, 1, 4) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(7, 3, 13, 11, 9, 1, 12, 14) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_2_5_4_15_6_10_0_8() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_9_5_2_10_0_7_4_15() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(14, 11, 6, 3, 1, 12, 8, 13) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_2_6_0_8_12_10_11_3() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX(4, 7, 15, 1, 13, 5, 14, 9) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(12, 1, 14, 4, 5, 15, 13, 10) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_0_6_9_8_7_3_2_11() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(13, 7, 12, 3, 11, 14, 1, 9) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_5_15_8_2_0_4_6_10() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX_6_14_11_0_15_9_3_8() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_12_13_1_10_2_7_4_5() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + LOAD_MSG_AVX(10, 8, 7, 1, 2, 4, 6, 5) + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX() + LOAD_MSG_AVX_15_9_3_13_11_14_12_0() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, X12, X13, X14, X15, X15, X8, X9) + SHUFFLE_AVX_INV() + + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 16(SP), 32(SP), 48(SP), 64(SP), X15, X8, X9) + SHUFFLE_AVX() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 80(SP), 96(SP), 112(SP), 128(SP), X15, X8, X9) + SHUFFLE_AVX_INV() + + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 144(SP), 160(SP), 176(SP), 192(SP), X15, X8, X9) + SHUFFLE_AVX() + HALF_ROUND_AVX(X0, X1, X2, X3, X4, X5, X6, X7, 208(SP), 224(SP), 240(SP), 256(SP), X15, X8, X9) + SHUFFLE_AVX_INV() + + VMOVDQU 32(AX), X14 + VMOVDQU 48(AX), X15 + VPXOR X0, X10, X10 + VPXOR X1, X11, X11 + VPXOR X2, X14, X14 + VPXOR X3, X15, X15 + VPXOR X4, X10, X10 + VPXOR X5, X11, X11 + VPXOR X6, X14, X2 + VPXOR X7, X15, X3 + VMOVDQU X2, 32(AX) + VMOVDQU X3, 48(AX) + + LEAQ 128(SI), SI + SUBQ $128, DI + JNE loop + + VMOVDQU X10, 0(AX) + VMOVDQU X11, 16(AX) + + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + VZEROUPPER + + MOVQ BP, SP + RET + +// func supportsAVX2() bool +TEXT ·supportsAVX2(SB), 4, $0-1 + MOVQ runtime·support_avx2(SB), AX + MOVB AX, ret+0(FP) + RET + +// func supportsAVX() bool +TEXT ·supportsAVX(SB), 4, $0-1 + MOVQ runtime·support_avx(SB), AX + MOVB AX, ret+0(FP) + RET diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go new file mode 100644 index 0000000..2ab7c30 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.go @@ -0,0 +1,25 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !go1.7,amd64,!gccgo,!appengine + +package blake2b + +func init() { + useSSE4 = supportsSSE4() +} + +//go:noescape +func supportsSSE4() bool + +//go:noescape +func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + if useSSE4 { + hashBlocksSSE4(h, c, flag, blocks) + } else { + hashBlocksGeneric(h, c, flag, blocks) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s new file mode 100644 index 0000000..6453074 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_amd64.s @@ -0,0 +1,290 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +#include "textflag.h" + +DATA ·iv0<>+0x00(SB)/8, $0x6a09e667f3bcc908 +DATA ·iv0<>+0x08(SB)/8, $0xbb67ae8584caa73b +GLOBL ·iv0<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv1<>+0x00(SB)/8, $0x3c6ef372fe94f82b +DATA ·iv1<>+0x08(SB)/8, $0xa54ff53a5f1d36f1 +GLOBL ·iv1<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv2<>+0x00(SB)/8, $0x510e527fade682d1 +DATA ·iv2<>+0x08(SB)/8, $0x9b05688c2b3e6c1f +GLOBL ·iv2<>(SB), (NOPTR+RODATA), $16 + +DATA ·iv3<>+0x00(SB)/8, $0x1f83d9abfb41bd6b +DATA ·iv3<>+0x08(SB)/8, $0x5be0cd19137e2179 +GLOBL ·iv3<>(SB), (NOPTR+RODATA), $16 + +DATA ·c40<>+0x00(SB)/8, $0x0201000706050403 +DATA ·c40<>+0x08(SB)/8, $0x0a09080f0e0d0c0b +GLOBL ·c40<>(SB), (NOPTR+RODATA), $16 + +DATA ·c48<>+0x00(SB)/8, $0x0100070605040302 +DATA ·c48<>+0x08(SB)/8, $0x09080f0e0d0c0b0a +GLOBL ·c48<>(SB), (NOPTR+RODATA), $16 + +#define SHUFFLE(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v6, t1; \ + PUNPCKLQDQ v6, t2; \ + PUNPCKHQDQ v7, v6; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ v7, t2; \ + MOVO t1, v7; \ + MOVO v2, t1; \ + PUNPCKHQDQ t2, v7; \ + PUNPCKLQDQ v3, t2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v3 + +#define SHUFFLE_INV(v2, v3, v4, v5, v6, v7, t1, t2) \ + MOVO v4, t1; \ + MOVO v5, v4; \ + MOVO t1, v5; \ + MOVO v2, t1; \ + PUNPCKLQDQ v2, t2; \ + PUNPCKHQDQ v3, v2; \ + PUNPCKHQDQ t2, v2; \ + PUNPCKLQDQ v3, t2; \ + MOVO t1, v3; \ + MOVO v6, t1; \ + PUNPCKHQDQ t2, v3; \ + PUNPCKLQDQ v7, t2; \ + PUNPCKHQDQ t2, v6; \ + PUNPCKLQDQ t1, t2; \ + PUNPCKHQDQ t2, v7 + +#define HALF_ROUND(v0, v1, v2, v3, v4, v5, v6, v7, m0, m1, m2, m3, t0, c40, c48) \ + PADDQ m0, v0; \ + PADDQ m1, v1; \ + PADDQ v2, v0; \ + PADDQ v3, v1; \ + PXOR v0, v6; \ + PXOR v1, v7; \ + PSHUFD $0xB1, v6, v6; \ + PSHUFD $0xB1, v7, v7; \ + PADDQ v6, v4; \ + PADDQ v7, v5; \ + PXOR v4, v2; \ + PXOR v5, v3; \ + PSHUFB c40, v2; \ + PSHUFB c40, v3; \ + PADDQ m2, v0; \ + PADDQ m3, v1; \ + PADDQ v2, v0; \ + PADDQ v3, v1; \ + PXOR v0, v6; \ + PXOR v1, v7; \ + PSHUFB c48, v6; \ + PSHUFB c48, v7; \ + PADDQ v6, v4; \ + PADDQ v7, v5; \ + PXOR v4, v2; \ + PXOR v5, v3; \ + MOVOU v2, t0; \ + PADDQ v2, t0; \ + PSRLQ $63, v2; \ + PXOR t0, v2; \ + MOVOU v3, t0; \ + PADDQ v3, t0; \ + PSRLQ $63, v3; \ + PXOR t0, v3 + +#define LOAD_MSG(m0, m1, m2, m3, src, i0, i1, i2, i3, i4, i5, i6, i7) \ + MOVQ i0*8(src), m0; \ + PINSRQ $1, i1*8(src), m0; \ + MOVQ i2*8(src), m1; \ + PINSRQ $1, i3*8(src), m1; \ + MOVQ i4*8(src), m2; \ + PINSRQ $1, i5*8(src), m2; \ + MOVQ i6*8(src), m3; \ + PINSRQ $1, i7*8(src), m3 + +// func hashBlocksSSE4(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) +TEXT ·hashBlocksSSE4(SB), 4, $288-48 // frame size = 272 + 16 byte alignment + MOVQ h+0(FP), AX + MOVQ c+8(FP), BX + MOVQ flag+16(FP), CX + MOVQ blocks_base+24(FP), SI + MOVQ blocks_len+32(FP), DI + + MOVQ SP, BP + MOVQ SP, R9 + ADDQ $15, R9 + ANDQ $~15, R9 + MOVQ R9, SP + + MOVOU ·iv3<>(SB), X0 + MOVO X0, 0(SP) + XORQ CX, 0(SP) // 0(SP) = ·iv3 ^ (CX || 0) + + MOVOU ·c40<>(SB), X13 + MOVOU ·c48<>(SB), X14 + + MOVOU 0(AX), X12 + MOVOU 16(AX), X15 + + MOVQ 0(BX), R8 + MOVQ 8(BX), R9 + +loop: + ADDQ $128, R8 + CMPQ R8, $128 + JGE noinc + INCQ R9 + +noinc: + MOVQ R8, X8 + PINSRQ $1, R9, X8 + + MOVO X12, X0 + MOVO X15, X1 + MOVOU 32(AX), X2 + MOVOU 48(AX), X3 + MOVOU ·iv0<>(SB), X4 + MOVOU ·iv1<>(SB), X5 + MOVOU ·iv2<>(SB), X6 + + PXOR X8, X6 + MOVO 0(SP), X7 + + LOAD_MSG(X8, X9, X10, X11, SI, 0, 2, 4, 6, 1, 3, 5, 7) + MOVO X8, 16(SP) + MOVO X9, 32(SP) + MOVO X10, 48(SP) + MOVO X11, 64(SP) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 8, 10, 12, 14, 9, 11, 13, 15) + MOVO X8, 80(SP) + MOVO X9, 96(SP) + MOVO X10, 112(SP) + MOVO X11, 128(SP) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 14, 4, 9, 13, 10, 8, 15, 6) + MOVO X8, 144(SP) + MOVO X9, 160(SP) + MOVO X10, 176(SP) + MOVO X11, 192(SP) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 1, 0, 11, 5, 12, 2, 7, 3) + MOVO X8, 208(SP) + MOVO X9, 224(SP) + MOVO X10, 240(SP) + MOVO X11, 256(SP) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 11, 12, 5, 15, 8, 0, 2, 13) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 10, 3, 7, 9, 14, 6, 1, 4) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 7, 3, 13, 11, 9, 1, 12, 14) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 2, 5, 4, 15, 6, 10, 0, 8) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 9, 5, 2, 10, 0, 7, 4, 15) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 14, 11, 6, 3, 1, 12, 8, 13) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 2, 6, 0, 8, 12, 10, 11, 3) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 4, 7, 15, 1, 13, 5, 14, 9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 12, 1, 14, 4, 5, 15, 13, 10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 0, 6, 9, 8, 7, 3, 2, 11) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 13, 7, 12, 3, 11, 14, 1, 9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 5, 15, 8, 2, 0, 4, 6, 10) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 6, 14, 11, 0, 15, 9, 3, 8) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 12, 13, 1, 10, 2, 7, 4, 5) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + LOAD_MSG(X8, X9, X10, X11, SI, 10, 8, 7, 1, 2, 4, 6, 5) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + LOAD_MSG(X8, X9, X10, X11, SI, 15, 9, 3, 13, 11, 14, 12, 0) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 16(SP), 32(SP), 48(SP), 64(SP), X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 80(SP), 96(SP), 112(SP), 128(SP), X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 144(SP), 160(SP), 176(SP), 192(SP), X11, X13, X14) + SHUFFLE(X2, X3, X4, X5, X6, X7, X8, X9) + HALF_ROUND(X0, X1, X2, X3, X4, X5, X6, X7, 208(SP), 224(SP), 240(SP), 256(SP), X11, X13, X14) + SHUFFLE_INV(X2, X3, X4, X5, X6, X7, X8, X9) + + MOVOU 32(AX), X10 + MOVOU 48(AX), X11 + PXOR X0, X12 + PXOR X1, X15 + PXOR X2, X10 + PXOR X3, X11 + PXOR X4, X12 + PXOR X5, X15 + PXOR X6, X10 + PXOR X7, X11 + MOVOU X10, 32(AX) + MOVOU X11, 48(AX) + + LEAQ 128(SI), SI + SUBQ $128, DI + JNE loop + + MOVOU X12, 0(AX) + MOVOU X15, 16(AX) + + MOVQ R8, 0(BX) + MOVQ R9, 8(BX) + + MOVQ BP, SP + RET + +// func supportsSSE4() bool +TEXT ·supportsSSE4(SB), 4, $0-1 + MOVL $1, AX + CPUID + SHRL $19, CX // Bit 19 indicates SSE4 support + ANDL $1, CX // CX != 0 if support SSE4 + MOVB CX, ret+0(FP) + RET diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go b/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go new file mode 100644 index 0000000..4bd2abc --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_generic.go @@ -0,0 +1,179 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2b + +import "encoding/binary" + +// the precomputed values for BLAKE2b +// there are 12 16-byte arrays - one for each round +// the entries are calculated from the sigma constants. +var precomputed = [12][16]byte{ + {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, + {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, + {11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4}, + {7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8}, + {9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13}, + {2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9}, + {12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11}, + {13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10}, + {6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5}, + {10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0}, + {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, // equal to the first + {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, // equal to the second +} + +func hashBlocksGeneric(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + var m [16]uint64 + c0, c1 := c[0], c[1] + + for i := 0; i < len(blocks); { + c0 += BlockSize + if c0 < BlockSize { + c1++ + } + + v0, v1, v2, v3, v4, v5, v6, v7 := h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7] + v8, v9, v10, v11, v12, v13, v14, v15 := iv[0], iv[1], iv[2], iv[3], iv[4], iv[5], iv[6], iv[7] + v12 ^= c0 + v13 ^= c1 + v14 ^= flag + + for j := range m { + m[j] = binary.LittleEndian.Uint64(blocks[i:]) + i += 8 + } + + for j := range precomputed { + s := &(precomputed[j]) + + v0 += m[s[0]] + v0 += v4 + v12 ^= v0 + v12 = v12<<(64-32) | v12>>32 + v8 += v12 + v4 ^= v8 + v4 = v4<<(64-24) | v4>>24 + v1 += m[s[1]] + v1 += v5 + v13 ^= v1 + v13 = v13<<(64-32) | v13>>32 + v9 += v13 + v5 ^= v9 + v5 = v5<<(64-24) | v5>>24 + v2 += m[s[2]] + v2 += v6 + v14 ^= v2 + v14 = v14<<(64-32) | v14>>32 + v10 += v14 + v6 ^= v10 + v6 = v6<<(64-24) | v6>>24 + v3 += m[s[3]] + v3 += v7 + v15 ^= v3 + v15 = v15<<(64-32) | v15>>32 + v11 += v15 + v7 ^= v11 + v7 = v7<<(64-24) | v7>>24 + + v0 += m[s[4]] + v0 += v4 + v12 ^= v0 + v12 = v12<<(64-16) | v12>>16 + v8 += v12 + v4 ^= v8 + v4 = v4<<(64-63) | v4>>63 + v1 += m[s[5]] + v1 += v5 + v13 ^= v1 + v13 = v13<<(64-16) | v13>>16 + v9 += v13 + v5 ^= v9 + v5 = v5<<(64-63) | v5>>63 + v2 += m[s[6]] + v2 += v6 + v14 ^= v2 + v14 = v14<<(64-16) | v14>>16 + v10 += v14 + v6 ^= v10 + v6 = v6<<(64-63) | v6>>63 + v3 += m[s[7]] + v3 += v7 + v15 ^= v3 + v15 = v15<<(64-16) | v15>>16 + v11 += v15 + v7 ^= v11 + v7 = v7<<(64-63) | v7>>63 + + v0 += m[s[8]] + v0 += v5 + v15 ^= v0 + v15 = v15<<(64-32) | v15>>32 + v10 += v15 + v5 ^= v10 + v5 = v5<<(64-24) | v5>>24 + v1 += m[s[9]] + v1 += v6 + v12 ^= v1 + v12 = v12<<(64-32) | v12>>32 + v11 += v12 + v6 ^= v11 + v6 = v6<<(64-24) | v6>>24 + v2 += m[s[10]] + v2 += v7 + v13 ^= v2 + v13 = v13<<(64-32) | v13>>32 + v8 += v13 + v7 ^= v8 + v7 = v7<<(64-24) | v7>>24 + v3 += m[s[11]] + v3 += v4 + v14 ^= v3 + v14 = v14<<(64-32) | v14>>32 + v9 += v14 + v4 ^= v9 + v4 = v4<<(64-24) | v4>>24 + + v0 += m[s[12]] + v0 += v5 + v15 ^= v0 + v15 = v15<<(64-16) | v15>>16 + v10 += v15 + v5 ^= v10 + v5 = v5<<(64-63) | v5>>63 + v1 += m[s[13]] + v1 += v6 + v12 ^= v1 + v12 = v12<<(64-16) | v12>>16 + v11 += v12 + v6 ^= v11 + v6 = v6<<(64-63) | v6>>63 + v2 += m[s[14]] + v2 += v7 + v13 ^= v2 + v13 = v13<<(64-16) | v13>>16 + v8 += v13 + v7 ^= v8 + v7 = v7<<(64-63) | v7>>63 + v3 += m[s[15]] + v3 += v4 + v14 ^= v3 + v14 = v14<<(64-16) | v14>>16 + v9 += v14 + v4 ^= v9 + v4 = v4<<(64-63) | v4>>63 + + } + + h[0] ^= v0 ^ v8 + h[1] ^= v1 ^ v9 + h[2] ^= v2 ^ v10 + h[3] ^= v3 ^ v11 + h[4] ^= v4 ^ v12 + h[5] ^= v5 ^ v13 + h[6] ^= v6 ^ v14 + h[7] ^= v7 ^ v15 + } + c[0], c[1] = c0, c1 +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go b/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go new file mode 100644 index 0000000..da156a1 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_ref.go @@ -0,0 +1,11 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64 appengine gccgo + +package blake2b + +func hashBlocks(h *[8]uint64, c *[2]uint64, flag uint64, blocks []byte) { + hashBlocksGeneric(h, c, flag, blocks) +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2b_test.go b/vendor/golang.org/x/crypto/blake2b/blake2b_test.go new file mode 100644 index 0000000..5d68bbf --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2b_test.go @@ -0,0 +1,798 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2b + +import ( + "bytes" + "encoding/hex" + "fmt" + "hash" + "io" + "testing" +) + +func fromHex(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return b +} + +func TestHashes(t *testing.T) { + defer func(sse4, avx, avx2 bool) { + useSSE4, useAVX, useAVX2 = sse4, avx, avx2 + }(useSSE4, useAVX, useAVX2) + + if useAVX2 { + t.Log("AVX2 version") + testHashes(t) + useAVX2 = false + } + if useAVX { + t.Log("AVX version") + testHashes(t) + useAVX = false + } + if useSSE4 { + t.Log("SSE4 version") + testHashes(t) + useSSE4 = false + } + t.Log("generic version") + testHashes(t) +} + +func TestHashes2X(t *testing.T) { + defer func(sse4, avx, avx2 bool) { + useSSE4, useAVX, useAVX2 = sse4, avx, avx2 + }(useSSE4, useAVX, useAVX2) + + if useAVX2 { + t.Log("AVX2 version") + testHashes2X(t) + useAVX2 = false + } + if useAVX { + t.Log("AVX version") + testHashes2X(t) + useAVX = false + } + if useSSE4 { + t.Log("SSE4 version") + testHashes2X(t) + useSSE4 = false + } + t.Log("generic version") + testHashes2X(t) +} + +func testHashes(t *testing.T) { + key, _ := hex.DecodeString("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f") + + input := make([]byte, 255) + for i := range input { + input[i] = byte(i) + } + + for i, expectedHex := range hashes { + h, err := New512(key) + if err != nil { + t.Fatalf("#%d: error from New512: %v", i, err) + } + + h.Write(input[:i]) + sum := h.Sum(nil) + + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (single write): got %s, wanted %s", i, gotHex, expectedHex) + } + + h.Reset() + for j := 0; j < i; j++ { + h.Write(input[j : j+1]) + } + + sum = h.Sum(sum[:0]) + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (byte-by-byte): got %s, wanted %s", i, gotHex, expectedHex) + } + } +} + +func testHashes2X(t *testing.T) { + key, _ := hex.DecodeString("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f") + + input := make([]byte, 256) + for i := range input { + input[i] = byte(i) + } + + for i, expectedHex := range hashes2X { + length := uint32(len(expectedHex) / 2) + sum := make([]byte, int(length)) + + h, err := NewXOF(length, key) + if err != nil { + t.Fatalf("#%d: error from NewXOF: %v", i, err) + } + + if _, err := h.Write(input); err != nil { + t.Fatalf("#%d (single write): error from Write: %v", i, err) + } + if _, err := h.Read(sum); err != nil { + t.Fatalf("#%d (single write): error from Read: %v", i, err) + } + if n, err := h.Read(sum); n != 0 || err != io.EOF { + t.Fatalf("#%d (single write): Read did not return (0, io.EOF) after exhaustion, got (%v, %v)", i, n, err) + } + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (single write): got %s, wanted %s", i, gotHex, expectedHex) + } + + h.Reset() + for j := 0; j < len(input); j++ { + h.Write(input[j : j+1]) + } + for j := 0; j < len(sum); j++ { + h = h.Clone() + if _, err := h.Read(sum[j : j+1]); err != nil { + t.Fatalf("#%d (byte-by-byte) - Read %d: error from Read: %v", i, j, err) + } + } + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (byte-by-byte): got %s, wanted %s", i, gotHex, expectedHex) + } + } + + h, err := NewXOF(OutputLengthUnknown, key) + if err != nil { + t.Fatalf("#unknown length: error from NewXOF: %v", err) + } + if _, err := h.Write(input); err != nil { + t.Fatalf("#unknown length: error from Write: %v", err) + } + + var result [64]byte + if n, err := h.Read(result[:]); err != nil { + t.Fatalf("#unknown length: error from Read: %v", err) + } else if n != len(result) { + t.Fatalf("#unknown length: Read returned %d bytes, want %d", n, len(result)) + } + + const expected = "3dbba8516da76bf7330055c66ea36cf1005e92714262b24d9710f51d9e126406e1bcd6497059f9331f1091c3634b695428d475ed432f987040575520a1c29f5e" + if fmt.Sprintf("%x", result) != expected { + t.Fatalf("#unknown length: bad result %x, wanted %s", result, expected) + } +} + +func generateSequence(out []byte, seed uint32) { + a := 0xDEAD4BAD * seed // prime + b := uint32(1) + + for i := range out { // fill the buf + a, b = b, a+b + out[i] = byte(b >> 24) + } +} + +func computeMAC(msg []byte, hashSize int, key []byte) (sum []byte) { + var h hash.Hash + switch hashSize { + case Size: + h, _ = New512(key) + case Size384: + h, _ = New384(key) + case Size256: + h, _ = New256(key) + case 20: + h, _ = newDigest(20, key) + default: + panic("unexpected hashSize") + } + + h.Write(msg) + return h.Sum(sum) +} + +func computeHash(msg []byte, hashSize int) (sum []byte) { + switch hashSize { + case Size: + hash := Sum512(msg) + return hash[:] + case Size384: + hash := Sum384(msg) + return hash[:] + case Size256: + hash := Sum256(msg) + return hash[:] + case 20: + var hash [64]byte + checkSum(&hash, 20, msg) + return hash[:20] + default: + panic("unexpected hashSize") + } +} + +// Test function from RFC 7693. +func TestSelfTest(t *testing.T) { + hashLens := [4]int{20, 32, 48, 64} + msgLens := [6]int{0, 3, 128, 129, 255, 1024} + + msg := make([]byte, 1024) + key := make([]byte, 64) + + h, _ := New256(nil) + for _, hashSize := range hashLens { + for _, msgLength := range msgLens { + generateSequence(msg[:msgLength], uint32(msgLength)) // unkeyed hash + + md := computeHash(msg[:msgLength], hashSize) + h.Write(md) + + generateSequence(key[:], uint32(hashSize)) // keyed hash + md = computeMAC(msg[:msgLength], hashSize, key[:hashSize]) + h.Write(md) + } + } + + sum := h.Sum(nil) + expected := [32]byte{ + 0xc2, 0x3a, 0x78, 0x00, 0xd9, 0x81, 0x23, 0xbd, + 0x10, 0xf5, 0x06, 0xc6, 0x1e, 0x29, 0xda, 0x56, + 0x03, 0xd7, 0x63, 0xb8, 0xbb, 0xad, 0x2e, 0x73, + 0x7f, 0x5e, 0x76, 0x5a, 0x7b, 0xcc, 0xd4, 0x75, + } + if !bytes.Equal(sum, expected[:]) { + t.Fatalf("got %x, wanted %x", sum, expected) + } +} + +// Benchmarks + +func benchmarkSum(b *testing.B, size int) { + data := make([]byte, size) + b.SetBytes(int64(size)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + Sum512(data) + } +} + +func benchmarkWrite(b *testing.B, size int) { + data := make([]byte, size) + h, _ := New512(nil) + b.SetBytes(int64(size)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + h.Write(data) + } +} + +func BenchmarkWrite128(b *testing.B) { benchmarkWrite(b, 128) } +func BenchmarkWrite1K(b *testing.B) { benchmarkWrite(b, 1024) } + +func BenchmarkSum128(b *testing.B) { benchmarkSum(b, 128) } +func BenchmarkSum1K(b *testing.B) { benchmarkSum(b, 1024) } + +// These values were taken from https://blake2.net/blake2b-test.txt. +var hashes = []string{ + "10ebb67700b1868efb4417987acf4690ae9d972fb7a590c2f02871799aaa4786b5e996e8f0f4eb981fc214b005f42d2ff4233499391653df7aefcbc13fc51568", + "961f6dd1e4dd30f63901690c512e78e4b45e4742ed197c3c5e45c549fd25f2e4187b0bc9fe30492b16b0d0bc4ef9b0f34c7003fac09a5ef1532e69430234cebd", + "da2cfbe2d8409a0f38026113884f84b50156371ae304c4430173d08a99d9fb1b983164a3770706d537f49e0c916d9f32b95cc37a95b99d857436f0232c88a965", + "33d0825dddf7ada99b0e7e307104ad07ca9cfd9692214f1561356315e784f3e5a17e364ae9dbb14cb2036df932b77f4b292761365fb328de7afdc6d8998f5fc1", + "beaa5a3d08f3807143cf621d95cd690514d0b49efff9c91d24b59241ec0eefa5f60196d407048bba8d2146828ebcb0488d8842fd56bb4f6df8e19c4b4daab8ac", + "098084b51fd13deae5f4320de94a688ee07baea2800486689a8636117b46c1f4c1f6af7f74ae7c857600456a58a3af251dc4723a64cc7c0a5ab6d9cac91c20bb", + "6044540d560853eb1c57df0077dd381094781cdb9073e5b1b3d3f6c7829e12066bbaca96d989a690de72ca3133a83652ba284a6d62942b271ffa2620c9e75b1f", + "7a8cfe9b90f75f7ecb3acc053aaed6193112b6f6a4aeeb3f65d3de541942deb9e2228152a3c4bbbe72fc3b12629528cfbb09fe630f0474339f54abf453e2ed52", + "380beaf6ea7cc9365e270ef0e6f3a64fb902acae51dd5512f84259ad2c91f4bc4108db73192a5bbfb0cbcf71e46c3e21aee1c5e860dc96e8eb0b7b8426e6abe9", + "60fe3c4535e1b59d9a61ea8500bfac41a69dffb1ceadd9aca323e9a625b64da5763bad7226da02b9c8c4f1a5de140ac5a6c1124e4f718ce0b28ea47393aa6637", + "4fe181f54ad63a2983feaaf77d1e7235c2beb17fa328b6d9505bda327df19fc37f02c4b6f0368ce23147313a8e5738b5fa2a95b29de1c7f8264eb77b69f585cd", + "f228773ce3f3a42b5f144d63237a72d99693adb8837d0e112a8a0f8ffff2c362857ac49c11ec740d1500749dac9b1f4548108bf3155794dcc9e4082849e2b85b", + "962452a8455cc56c8511317e3b1f3b2c37df75f588e94325fdd77070359cf63a9ae6e930936fdf8e1e08ffca440cfb72c28f06d89a2151d1c46cd5b268ef8563", + "43d44bfa18768c59896bf7ed1765cb2d14af8c260266039099b25a603e4ddc5039d6ef3a91847d1088d401c0c7e847781a8a590d33a3c6cb4df0fab1c2f22355", + "dcffa9d58c2a4ca2cdbb0c7aa4c4c1d45165190089f4e983bb1c2cab4aaeff1fa2b5ee516fecd780540240bf37e56c8bcca7fab980e1e61c9400d8a9a5b14ac6", + "6fbf31b45ab0c0b8dad1c0f5f4061379912dde5aa922099a030b725c73346c524291adef89d2f6fd8dfcda6d07dad811a9314536c2915ed45da34947e83de34e", + "a0c65bddde8adef57282b04b11e7bc8aab105b99231b750c021f4a735cb1bcfab87553bba3abb0c3e64a0b6955285185a0bd35fb8cfde557329bebb1f629ee93", + "f99d815550558e81eca2f96718aed10d86f3f1cfb675cce06b0eff02f617c5a42c5aa760270f2679da2677c5aeb94f1142277f21c7f79f3c4f0cce4ed8ee62b1", + "95391da8fc7b917a2044b3d6f5374e1ca072b41454d572c7356c05fd4bc1e0f40b8bb8b4a9f6bce9be2c4623c399b0dca0dab05cb7281b71a21b0ebcd9e55670", + "04b9cd3d20d221c09ac86913d3dc63041989a9a1e694f1e639a3ba7e451840f750c2fc191d56ad61f2e7936bc0ac8e094b60caeed878c18799045402d61ceaf9", + "ec0e0ef707e4ed6c0c66f9e089e4954b058030d2dd86398fe84059631f9ee591d9d77375355149178c0cf8f8e7c49ed2a5e4f95488a2247067c208510fadc44c", + "9a37cce273b79c09913677510eaf7688e89b3314d3532fd2764c39de022a2945b5710d13517af8ddc0316624e73bec1ce67df15228302036f330ab0cb4d218dd", + "4cf9bb8fb3d4de8b38b2f262d3c40f46dfe747e8fc0a414c193d9fcf753106ce47a18f172f12e8a2f1c26726545358e5ee28c9e2213a8787aafbc516d2343152", + "64e0c63af9c808fd893137129867fd91939d53f2af04be4fa268006100069b2d69daa5c5d8ed7fddcb2a70eeecdf2b105dd46a1e3b7311728f639ab489326bc9", + "5e9c93158d659b2def06b0c3c7565045542662d6eee8a96a89b78ade09fe8b3dcc096d4fe48815d88d8f82620156602af541955e1f6ca30dce14e254c326b88f", + "7775dff889458dd11aef417276853e21335eb88e4dec9cfb4e9edb49820088551a2ca60339f12066101169f0dfe84b098fddb148d9da6b3d613df263889ad64b", + "f0d2805afbb91f743951351a6d024f9353a23c7ce1fc2b051b3a8b968c233f46f50f806ecb1568ffaa0b60661e334b21dde04f8fa155ac740eeb42e20b60d764", + "86a2af316e7d7754201b942e275364ac12ea8962ab5bd8d7fb276dc5fbffc8f9a28cae4e4867df6780d9b72524160927c855da5b6078e0b554aa91e31cb9ca1d", + "10bdf0caa0802705e706369baf8a3f79d72c0a03a80675a7bbb00be3a45e516424d1ee88efb56f6d5777545ae6e27765c3a8f5e493fc308915638933a1dfee55", + "b01781092b1748459e2e4ec178696627bf4ebafebba774ecf018b79a68aeb84917bf0b84bb79d17b743151144cd66b7b33a4b9e52c76c4e112050ff5385b7f0b", + "c6dbc61dec6eaeac81e3d5f755203c8e220551534a0b2fd105a91889945a638550204f44093dd998c076205dffad703a0e5cd3c7f438a7e634cd59fededb539e", + "eba51acffb4cea31db4b8d87e9bf7dd48fe97b0253ae67aa580f9ac4a9d941f2bea518ee286818cc9f633f2a3b9fb68e594b48cdd6d515bf1d52ba6c85a203a7", + "86221f3ada52037b72224f105d7999231c5e5534d03da9d9c0a12acb68460cd375daf8e24386286f9668f72326dbf99ba094392437d398e95bb8161d717f8991", + "5595e05c13a7ec4dc8f41fb70cb50a71bce17c024ff6de7af618d0cc4e9c32d9570d6d3ea45b86525491030c0d8f2b1836d5778c1ce735c17707df364d054347", + "ce0f4f6aca89590a37fe034dd74dd5fa65eb1cbd0a41508aaddc09351a3cea6d18cb2189c54b700c009f4cbf0521c7ea01be61c5ae09cb54f27bc1b44d658c82", + "7ee80b06a215a3bca970c77cda8761822bc103d44fa4b33f4d07dcb997e36d55298bceae12241b3fa07fa63be5576068da387b8d5859aeab701369848b176d42", + "940a84b6a84d109aab208c024c6ce9647676ba0aaa11f86dbb7018f9fd2220a6d901a9027f9abcf935372727cbf09ebd61a2a2eeb87653e8ecad1bab85dc8327", + "2020b78264a82d9f4151141adba8d44bf20c5ec062eee9b595a11f9e84901bf148f298e0c9f8777dcdbc7cc4670aac356cc2ad8ccb1629f16f6a76bcefbee760", + "d1b897b0e075ba68ab572adf9d9c436663e43eb3d8e62d92fc49c9be214e6f27873fe215a65170e6bea902408a25b49506f47babd07cecf7113ec10c5dd31252", + "b14d0c62abfa469a357177e594c10c194243ed2025ab8aa5ad2fa41ad318e0ff48cd5e60bec07b13634a711d2326e488a985f31e31153399e73088efc86a5c55", + "4169c5cc808d2697dc2a82430dc23e3cd356dc70a94566810502b8d655b39abf9e7f902fe717e0389219859e1945df1af6ada42e4ccda55a197b7100a30c30a1", + "258a4edb113d66c839c8b1c91f15f35ade609f11cd7f8681a4045b9fef7b0b24c82cda06a5f2067b368825e3914e53d6948ede92efd6e8387fa2e537239b5bee", + "79d2d8696d30f30fb34657761171a11e6c3f1e64cbe7bebee159cb95bfaf812b4f411e2f26d9c421dc2c284a3342d823ec293849e42d1e46b0a4ac1e3c86abaa", + "8b9436010dc5dee992ae38aea97f2cd63b946d94fedd2ec9671dcde3bd4ce9564d555c66c15bb2b900df72edb6b891ebcadfeff63c9ea4036a998be7973981e7", + "c8f68e696ed28242bf997f5b3b34959508e42d613810f1e2a435c96ed2ff560c7022f361a9234b9837feee90bf47922ee0fd5f8ddf823718d86d1e16c6090071", + "b02d3eee4860d5868b2c39ce39bfe81011290564dd678c85e8783f29302dfc1399ba95b6b53cd9ebbf400cca1db0ab67e19a325f2d115812d25d00978ad1bca4", + "7693ea73af3ac4dad21ca0d8da85b3118a7d1c6024cfaf557699868217bc0c2f44a199bc6c0edd519798ba05bd5b1b4484346a47c2cadf6bf30b785cc88b2baf", + "a0e5c1c0031c02e48b7f09a5e896ee9aef2f17fc9e18e997d7f6cac7ae316422c2b1e77984e5f3a73cb45deed5d3f84600105e6ee38f2d090c7d0442ea34c46d", + "41daa6adcfdb69f1440c37b596440165c15ada596813e2e22f060fcd551f24dee8e04ba6890387886ceec4a7a0d7fc6b44506392ec3822c0d8c1acfc7d5aebe8", + "14d4d40d5984d84c5cf7523b7798b254e275a3a8cc0a1bd06ebc0bee726856acc3cbf516ff667cda2058ad5c3412254460a82c92187041363cc77a4dc215e487", + "d0e7a1e2b9a447fee83e2277e9ff8010c2f375ae12fa7aaa8ca5a6317868a26a367a0b69fbc1cf32a55d34eb370663016f3d2110230eba754028a56f54acf57c", + "e771aa8db5a3e043e8178f39a0857ba04a3f18e4aa05743cf8d222b0b095825350ba422f63382a23d92e4149074e816a36c1cd28284d146267940b31f8818ea2", + "feb4fd6f9e87a56bef398b3284d2bda5b5b0e166583a66b61e538457ff0584872c21a32962b9928ffab58de4af2edd4e15d8b35570523207ff4e2a5aa7754caa", + "462f17bf005fb1c1b9e671779f665209ec2873e3e411f98dabf240a1d5ec3f95ce6796b6fc23fe171903b502023467dec7273ff74879b92967a2a43a5a183d33", + "d3338193b64553dbd38d144bea71c5915bb110e2d88180dbc5db364fd6171df317fc7268831b5aef75e4342b2fad8797ba39eddcef80e6ec08159350b1ad696d", + "e1590d585a3d39f7cb599abd479070966409a6846d4377acf4471d065d5db94129cc9be92573b05ed226be1e9b7cb0cabe87918589f80dadd4ef5ef25a93d28e", + "f8f3726ac5a26cc80132493a6fedcb0e60760c09cfc84cad178175986819665e76842d7b9fedf76dddebf5d3f56faaad4477587af21606d396ae570d8e719af2", + "30186055c07949948183c850e9a756cc09937e247d9d928e869e20bafc3cd9721719d34e04a0899b92c736084550186886efba2e790d8be6ebf040b209c439a4", + "f3c4276cb863637712c241c444c5cc1e3554e0fddb174d035819dd83eb700b4ce88df3ab3841ba02085e1a99b4e17310c5341075c0458ba376c95a6818fbb3e2", + "0aa007c4dd9d5832393040a1583c930bca7dc5e77ea53add7e2b3f7c8e231368043520d4a3ef53c969b6bbfd025946f632bd7f765d53c21003b8f983f75e2a6a", + "08e9464720533b23a04ec24f7ae8c103145f765387d738777d3d343477fd1c58db052142cab754ea674378e18766c53542f71970171cc4f81694246b717d7564", + "d37ff7ad297993e7ec21e0f1b4b5ae719cdc83c5db687527f27516cbffa822888a6810ee5c1ca7bfe3321119be1ab7bfa0a502671c8329494df7ad6f522d440f", + "dd9042f6e464dcf86b1262f6accfafbd8cfd902ed3ed89abf78ffa482dbdeeb6969842394c9a1168ae3d481a017842f660002d42447c6b22f7b72f21aae021c9", + "bd965bf31e87d70327536f2a341cebc4768eca275fa05ef98f7f1b71a0351298de006fba73fe6733ed01d75801b4a928e54231b38e38c562b2e33ea1284992fa", + "65676d800617972fbd87e4b9514e1c67402b7a331096d3bfac22f1abb95374abc942f16e9ab0ead33b87c91968a6e509e119ff07787b3ef483e1dcdccf6e3022", + "939fa189699c5d2c81ddd1ffc1fa207c970b6a3685bb29ce1d3e99d42f2f7442da53e95a72907314f4588399a3ff5b0a92beb3f6be2694f9f86ecf2952d5b41c", + "c516541701863f91005f314108ceece3c643e04fc8c42fd2ff556220e616aaa6a48aeb97a84bad74782e8dff96a1a2fa949339d722edcaa32b57067041df88cc", + "987fd6e0d6857c553eaebb3d34970a2c2f6e89a3548f492521722b80a1c21a153892346d2cba6444212d56da9a26e324dccbc0dcde85d4d2ee4399eec5a64e8f", + "ae56deb1c2328d9c4017706bce6e99d41349053ba9d336d677c4c27d9fd50ae6aee17e853154e1f4fe7672346da2eaa31eea53fcf24a22804f11d03da6abfc2b", + "49d6a608c9bde4491870498572ac31aac3fa40938b38a7818f72383eb040ad39532bc06571e13d767e6945ab77c0bdc3b0284253343f9f6c1244ebf2ff0df866", + "da582ad8c5370b4469af862aa6467a2293b2b28bd80ae0e91f425ad3d47249fdf98825cc86f14028c3308c9804c78bfeeeee461444ce243687e1a50522456a1d", + "d5266aa3331194aef852eed86d7b5b2633a0af1c735906f2e13279f14931a9fc3b0eac5ce9245273bd1aa92905abe16278ef7efd47694789a7283b77da3c70f8", + "2962734c28252186a9a1111c732ad4de4506d4b4480916303eb7991d659ccda07a9911914bc75c418ab7a4541757ad054796e26797feaf36e9f6ad43f14b35a4", + "e8b79ec5d06e111bdfafd71e9f5760f00ac8ac5d8bf768f9ff6f08b8f026096b1cc3a4c973333019f1e3553e77da3f98cb9f542e0a90e5f8a940cc58e59844b3", + "dfb320c44f9d41d1efdcc015f08dd5539e526e39c87d509ae6812a969e5431bf4fa7d91ffd03b981e0d544cf72d7b1c0374f8801482e6dea2ef903877eba675e", + "d88675118fdb55a5fb365ac2af1d217bf526ce1ee9c94b2f0090b2c58a06ca58187d7fe57c7bed9d26fca067b4110eefcd9a0a345de872abe20de368001b0745", + "b893f2fc41f7b0dd6e2f6aa2e0370c0cff7df09e3acfcc0e920b6e6fad0ef747c40668417d342b80d2351e8c175f20897a062e9765e6c67b539b6ba8b9170545", + "6c67ec5697accd235c59b486d7b70baeedcbd4aa64ebd4eef3c7eac189561a726250aec4d48cadcafbbe2ce3c16ce2d691a8cce06e8879556d4483ed7165c063", + "f1aa2b044f8f0c638a3f362e677b5d891d6fd2ab0765f6ee1e4987de057ead357883d9b405b9d609eea1b869d97fb16d9b51017c553f3b93c0a1e0f1296fedcd", + "cbaa259572d4aebfc1917acddc582b9f8dfaa928a198ca7acd0f2aa76a134a90252e6298a65b08186a350d5b7626699f8cb721a3ea5921b753ae3a2dce24ba3a", + "fa1549c9796cd4d303dcf452c1fbd5744fd9b9b47003d920b92de34839d07ef2a29ded68f6fc9e6c45e071a2e48bd50c5084e96b657dd0404045a1ddefe282ed", + "5cf2ac897ab444dcb5c8d87c495dbdb34e1838b6b629427caa51702ad0f9688525f13bec503a3c3a2c80a65e0b5715e8afab00ffa56ec455a49a1ad30aa24fcd", + "9aaf80207bace17bb7ab145757d5696bde32406ef22b44292ef65d4519c3bb2ad41a59b62cc3e94b6fa96d32a7faadae28af7d35097219aa3fd8cda31e40c275", + "af88b163402c86745cb650c2988fb95211b94b03ef290eed9662034241fd51cf398f8073e369354c43eae1052f9b63b08191caa138aa54fea889cc7024236897", + "48fa7d64e1ceee27b9864db5ada4b53d00c9bc7626555813d3cd6730ab3cc06ff342d727905e33171bde6e8476e77fb1720861e94b73a2c538d254746285f430", + "0e6fd97a85e904f87bfe85bbeb34f69e1f18105cf4ed4f87aec36c6e8b5f68bd2a6f3dc8a9ecb2b61db4eedb6b2ea10bf9cb0251fb0f8b344abf7f366b6de5ab", + "06622da5787176287fdc8fed440bad187d830099c94e6d04c8e9c954cda70c8bb9e1fc4a6d0baa831b9b78ef6648681a4867a11da93ee36e5e6a37d87fc63f6f", + "1da6772b58fabf9c61f68d412c82f182c0236d7d575ef0b58dd22458d643cd1dfc93b03871c316d8430d312995d4197f0874c99172ba004a01ee295abac24e46", + "3cd2d9320b7b1d5fb9aab951a76023fa667be14a9124e394513918a3f44096ae4904ba0ffc150b63bc7ab1eeb9a6e257e5c8f000a70394a5afd842715de15f29", + "04cdc14f7434e0b4be70cb41db4c779a88eaef6accebcb41f2d42fffe7f32a8e281b5c103a27021d0d08362250753cdf70292195a53a48728ceb5844c2d98bab", + "9071b7a8a075d0095b8fb3ae5113785735ab98e2b52faf91d5b89e44aac5b5d4ebbf91223b0ff4c71905da55342e64655d6ef8c89a4768c3f93a6dc0366b5bc8", + "ebb30240dd96c7bc8d0abe49aa4edcbb4afdc51ff9aaf720d3f9e7fbb0f9c6d6571350501769fc4ebd0b2141247ff400d4fd4be414edf37757bb90a32ac5c65a", + "8532c58bf3c8015d9d1cbe00eef1f5082f8f3632fbe9f1ed4f9dfb1fa79e8283066d77c44c4af943d76b300364aecbd0648c8a8939bd204123f4b56260422dec", + "fe9846d64f7c7708696f840e2d76cb4408b6595c2f81ec6a28a7f2f20cb88cfe6ac0b9e9b8244f08bd7095c350c1d0842f64fb01bb7f532dfcd47371b0aeeb79", + "28f17ea6fb6c42092dc264257e29746321fb5bdaea9873c2a7fa9d8f53818e899e161bc77dfe8090afd82bf2266c5c1bc930a8d1547624439e662ef695f26f24", + "ec6b7d7f030d4850acae3cb615c21dd25206d63e84d1db8d957370737ba0e98467ea0ce274c66199901eaec18a08525715f53bfdb0aacb613d342ebdceeddc3b", + "b403d3691c03b0d3418df327d5860d34bbfcc4519bfbce36bf33b208385fadb9186bc78a76c489d89fd57e7dc75412d23bcd1dae8470ce9274754bb8585b13c5", + "31fc79738b8772b3f55cd8178813b3b52d0db5a419d30ba9495c4b9da0219fac6df8e7c23a811551a62b827f256ecdb8124ac8a6792ccfecc3b3012722e94463", + "bb2039ec287091bcc9642fc90049e73732e02e577e2862b32216ae9bedcd730c4c284ef3968c368b7d37584f97bd4b4dc6ef6127acfe2e6ae2509124e66c8af4", + "f53d68d13f45edfcb9bd415e2831e938350d5380d3432278fc1c0c381fcb7c65c82dafe051d8c8b0d44e0974a0e59ec7bf7ed0459f86e96f329fc79752510fd3", + "8d568c7984f0ecdf7640fbc483b5d8c9f86634f6f43291841b309a350ab9c1137d24066b09da9944bac54d5bb6580d836047aac74ab724b887ebf93d4b32eca9", + "c0b65ce5a96ff774c456cac3b5f2c4cd359b4ff53ef93a3da0778be4900d1e8da1601e769e8f1b02d2a2f8c5b9fa10b44f1c186985468feeb008730283a6657d", + "4900bba6f5fb103ece8ec96ada13a5c3c85488e05551da6b6b33d988e611ec0fe2e3c2aa48ea6ae8986a3a231b223c5d27cec2eadde91ce07981ee652862d1e4", + "c7f5c37c7285f927f76443414d4357ff789647d7a005a5a787e03c346b57f49f21b64fa9cf4b7e45573e23049017567121a9c3d4b2b73ec5e9413577525db45a", + "ec7096330736fdb2d64b5653e7475da746c23a4613a82687a28062d3236364284ac01720ffb406cfe265c0df626a188c9e5963ace5d3d5bb363e32c38c2190a6", + "82e744c75f4649ec52b80771a77d475a3bc091989556960e276a5f9ead92a03f718742cdcfeaee5cb85c44af198adc43a4a428f5f0c2ddb0be36059f06d7df73", + "2834b7a7170f1f5b68559ab78c1050ec21c919740b784a9072f6e5d69f828d70c919c5039fb148e39e2c8a52118378b064ca8d5001cd10a5478387b966715ed6", + "16b4ada883f72f853bb7ef253efcab0c3e2161687ad61543a0d2824f91c1f81347d86be709b16996e17f2dd486927b0288ad38d13063c4a9672c39397d3789b6", + "78d048f3a69d8b54ae0ed63a573ae350d89f7c6cf1f3688930de899afa037697629b314e5cd303aa62feea72a25bf42b304b6c6bcb27fae21c16d925e1fbdac3", + "0f746a48749287ada77a82961f05a4da4abdb7d77b1220f836d09ec814359c0ec0239b8c7b9ff9e02f569d1b301ef67c4612d1de4f730f81c12c40cc063c5caa", + "f0fc859d3bd195fbdc2d591e4cdac15179ec0f1dc821c11df1f0c1d26e6260aaa65b79fafacafd7d3ad61e600f250905f5878c87452897647a35b995bcadc3a3", + "2620f687e8625f6a412460b42e2cef67634208ce10a0cbd4dff7044a41b7880077e9f8dc3b8d1216d3376a21e015b58fb279b521d83f9388c7382c8505590b9b", + "227e3aed8d2cb10b918fcb04f9de3e6d0a57e08476d93759cd7b2ed54a1cbf0239c528fb04bbf288253e601d3bc38b21794afef90b17094a182cac557745e75f", + "1a929901b09c25f27d6b35be7b2f1c4745131fdebca7f3e2451926720434e0db6e74fd693ad29b777dc3355c592a361c4873b01133a57c2e3b7075cbdb86f4fc", + "5fd7968bc2fe34f220b5e3dc5af9571742d73b7d60819f2888b629072b96a9d8ab2d91b82d0a9aaba61bbd39958132fcc4257023d1eca591b3054e2dc81c8200", + "dfcce8cf32870cc6a503eadafc87fd6f78918b9b4d0737db6810be996b5497e7e5cc80e312f61e71ff3e9624436073156403f735f56b0b01845c18f6caf772e6", + "02f7ef3a9ce0fff960f67032b296efca3061f4934d690749f2d01c35c81c14f39a67fa350bc8a0359bf1724bffc3bca6d7c7bba4791fd522a3ad353c02ec5aa8", + "64be5c6aba65d594844ae78bb022e5bebe127fd6b6ffa5a13703855ab63b624dcd1a363f99203f632ec386f3ea767fc992e8ed9686586aa27555a8599d5b808f", + "f78585505c4eaa54a8b5be70a61e735e0ff97af944ddb3001e35d86c4e2199d976104b6ae31750a36a726ed285064f5981b503889fef822fcdc2898dddb7889a", + "e4b5566033869572edfd87479a5bb73c80e8759b91232879d96b1dda36c012076ee5a2ed7ae2de63ef8406a06aea82c188031b560beafb583fb3de9e57952a7e", + "e1b3e7ed867f6c9484a2a97f7715f25e25294e992e41f6a7c161ffc2adc6daaeb7113102d5e6090287fe6ad94ce5d6b739c6ca240b05c76fb73f25dd024bf935", + "85fd085fdc12a080983df07bd7012b0d402a0f4043fcb2775adf0bad174f9b08d1676e476985785c0a5dcc41dbff6d95ef4d66a3fbdc4a74b82ba52da0512b74", + "aed8fa764b0fbff821e05233d2f7b0900ec44d826f95e93c343c1bc3ba5a24374b1d616e7e7aba453a0ada5e4fab5382409e0d42ce9c2bc7fb39a99c340c20f0", + "7ba3b2e297233522eeb343bd3ebcfd835a04007735e87f0ca300cbee6d416565162171581e4020ff4cf176450f1291ea2285cb9ebffe4c56660627685145051c", + "de748bcf89ec88084721e16b85f30adb1a6134d664b5843569babc5bbd1a15ca9b61803c901a4fef32965a1749c9f3a4e243e173939dc5a8dc495c671ab52145", + "aaf4d2bdf200a919706d9842dce16c98140d34bc433df320aba9bd429e549aa7a3397652a4d768277786cf993cde2338673ed2e6b66c961fefb82cd20c93338f", + "c408218968b788bf864f0997e6bc4c3dba68b276e2125a4843296052ff93bf5767b8cdce7131f0876430c1165fec6c4f47adaa4fd8bcfacef463b5d3d0fa61a0", + "76d2d819c92bce55fa8e092ab1bf9b9eab237a25267986cacf2b8ee14d214d730dc9a5aa2d7b596e86a1fd8fa0804c77402d2fcd45083688b218b1cdfa0dcbcb", + "72065ee4dd91c2d8509fa1fc28a37c7fc9fa7d5b3f8ad3d0d7a25626b57b1b44788d4caf806290425f9890a3a2a35a905ab4b37acfd0da6e4517b2525c9651e4", + "64475dfe7600d7171bea0b394e27c9b00d8e74dd1e416a79473682ad3dfdbb706631558055cfc8a40e07bd015a4540dcdea15883cbbf31412df1de1cd4152b91", + "12cd1674a4488a5d7c2b3160d2e2c4b58371bedad793418d6f19c6ee385d70b3e06739369d4df910edb0b0a54cbff43d54544cd37ab3a06cfa0a3ddac8b66c89", + "60756966479dedc6dd4bcff8ea7d1d4ce4d4af2e7b097e32e3763518441147cc12b3c0ee6d2ecabf1198cec92e86a3616fba4f4e872f5825330adbb4c1dee444", + "a7803bcb71bc1d0f4383dde1e0612e04f872b715ad30815c2249cf34abb8b024915cb2fc9f4e7cc4c8cfd45be2d5a91eab0941c7d270e2da4ca4a9f7ac68663a", + "b84ef6a7229a34a750d9a98ee2529871816b87fbe3bc45b45fa5ae82d5141540211165c3c5d7a7476ba5a4aa06d66476f0d9dc49a3f1ee72c3acabd498967414", + "fae4b6d8efc3f8c8e64d001dabec3a21f544e82714745251b2b4b393f2f43e0da3d403c64db95a2cb6e23ebb7b9e94cdd5ddac54f07c4a61bd3cb10aa6f93b49", + "34f7286605a122369540141ded79b8957255da2d4155abbf5a8dbb89c8eb7ede8eeef1daa46dc29d751d045dc3b1d658bb64b80ff8589eddb3824b13da235a6b", + "3b3b48434be27b9eababba43bf6b35f14b30f6a88dc2e750c358470d6b3aa3c18e47db4017fa55106d8252f016371a00f5f8b070b74ba5f23cffc5511c9f09f0", + "ba289ebd6562c48c3e10a8ad6ce02e73433d1e93d7c9279d4d60a7e879ee11f441a000f48ed9f7c4ed87a45136d7dccdca482109c78a51062b3ba4044ada2469", + "022939e2386c5a37049856c850a2bb10a13dfea4212b4c732a8840a9ffa5faf54875c5448816b2785a007da8a8d2bc7d71a54e4e6571f10b600cbdb25d13ede3", + "e6fec19d89ce8717b1a087024670fe026f6c7cbda11caef959bb2d351bf856f8055d1c0ebdaaa9d1b17886fc2c562b5e99642fc064710c0d3488a02b5ed7f6fd", + "94c96f02a8f576aca32ba61c2b206f907285d9299b83ac175c209a8d43d53bfe683dd1d83e7549cb906c28f59ab7c46f8751366a28c39dd5fe2693c9019666c8", + "31a0cd215ebd2cb61de5b9edc91e6195e31c59a5648d5c9f737e125b2605708f2e325ab3381c8dce1a3e958886f1ecdc60318f882cfe20a24191352e617b0f21", + "91ab504a522dce78779f4c6c6ba2e6b6db5565c76d3e7e7c920caf7f757ef9db7c8fcf10e57f03379ea9bf75eb59895d96e149800b6aae01db778bb90afbc989", + "d85cabc6bd5b1a01a5afd8c6734740da9fd1c1acc6db29bfc8a2e5b668b028b6b3154bfb8703fa3180251d589ad38040ceb707c4bad1b5343cb426b61eaa49c1", + "d62efbec2ca9c1f8bd66ce8b3f6a898cb3f7566ba6568c618ad1feb2b65b76c3ce1dd20f7395372faf28427f61c9278049cf0140df434f5633048c86b81e0399", + "7c8fdc6175439e2c3db15bafa7fb06143a6a23bc90f449e79deef73c3d492a671715c193b6fea9f036050b946069856b897e08c00768f5ee5ddcf70b7cd6d0e0", + "58602ee7468e6bc9df21bd51b23c005f72d6cb013f0a1b48cbec5eca299299f97f09f54a9a01483eaeb315a6478bad37ba47ca1347c7c8fc9e6695592c91d723", + "27f5b79ed256b050993d793496edf4807c1d85a7b0a67c9c4fa99860750b0ae66989670a8ffd7856d7ce411599e58c4d77b232a62bef64d15275be46a68235ff", + "3957a976b9f1887bf004a8dca942c92d2b37ea52600f25e0c9bc5707d0279c00c6e85a839b0d2d8eb59c51d94788ebe62474a791cadf52cccf20f5070b6573fc", + "eaa2376d55380bf772ecca9cb0aa4668c95c707162fa86d518c8ce0ca9bf7362b9f2a0adc3ff59922df921b94567e81e452f6c1a07fc817cebe99604b3505d38", + "c1e2c78b6b2734e2480ec550434cb5d613111adcc21d475545c3b1b7e6ff12444476e5c055132e2229dc0f807044bb919b1a5662dd38a9ee65e243a3911aed1a", + "8ab48713389dd0fcf9f965d3ce66b1e559a1f8c58741d67683cd971354f452e62d0207a65e436c5d5d8f8ee71c6abfe50e669004c302b31a7ea8311d4a916051", + "24ce0addaa4c65038bd1b1c0f1452a0b128777aabc94a29df2fd6c7e2f85f8ab9ac7eff516b0e0a825c84a24cfe492eaad0a6308e46dd42fe8333ab971bb30ca", + "5154f929ee03045b6b0c0004fa778edee1d139893267cc84825ad7b36c63de32798e4a166d24686561354f63b00709a1364b3c241de3febf0754045897467cd4", + "e74e907920fd87bd5ad636dd11085e50ee70459c443e1ce5809af2bc2eba39f9e6d7128e0e3712c316da06f4705d78a4838e28121d4344a2c79c5e0db307a677", + "bf91a22334bac20f3fd80663b3cd06c4e8802f30e6b59f90d3035cc9798a217ed5a31abbda7fa6842827bdf2a7a1c21f6fcfccbb54c6c52926f32da816269be1", + "d9d5c74be5121b0bd742f26bffb8c89f89171f3f934913492b0903c271bbe2b3395ef259669bef43b57f7fcc3027db01823f6baee66e4f9fead4d6726c741fce", + "50c8b8cf34cd879f80e2faab3230b0c0e1cc3e9dcadeb1b9d97ab923415dd9a1fe38addd5c11756c67990b256e95ad6d8f9fedce10bf1c90679cde0ecf1be347", + "0a386e7cd5dd9b77a035e09fe6fee2c8ce61b5383c87ea43205059c5e4cd4f4408319bb0a82360f6a58e6c9ce3f487c446063bf813bc6ba535e17fc1826cfc91", + "1f1459cb6b61cbac5f0efe8fc487538f42548987fcd56221cfa7beb22504769e792c45adfb1d6b3d60d7b749c8a75b0bdf14e8ea721b95dca538ca6e25711209", + "e58b3836b7d8fedbb50ca5725c6571e74c0785e97821dab8b6298c10e4c079d4a6cdf22f0fedb55032925c16748115f01a105e77e00cee3d07924dc0d8f90659", + "b929cc6505f020158672deda56d0db081a2ee34c00c1100029bdf8ea98034fa4bf3e8655ec697fe36f40553c5bb46801644a627d3342f4fc92b61f03290fb381", + "72d353994b49d3e03153929a1e4d4f188ee58ab9e72ee8e512f29bc773913819ce057ddd7002c0433ee0a16114e3d156dd2c4a7e80ee53378b8670f23e33ef56", + "c70ef9bfd775d408176737a0736d68517ce1aaad7e81a93c8c1ed967ea214f56c8a377b1763e676615b60f3988241eae6eab9685a5124929d28188f29eab06f7", + "c230f0802679cb33822ef8b3b21bf7a9a28942092901d7dac3760300831026cf354c9232df3e084d9903130c601f63c1f4a4a4b8106e468cd443bbe5a734f45f", + "6f43094cafb5ebf1f7a4937ec50f56a4c9da303cbb55ac1f27f1f1976cd96beda9464f0e7b9c54620b8a9fba983164b8be3578425a024f5fe199c36356b88972", + "3745273f4c38225db2337381871a0c6aafd3af9b018c88aa02025850a5dc3a42a1a3e03e56cbf1b0876d63a441f1d2856a39b8801eb5af325201c415d65e97fe", + "c50c44cca3ec3edaae779a7e179450ebdda2f97067c690aa6c5a4ac7c30139bb27c0df4db3220e63cb110d64f37ffe078db72653e2daacf93ae3f0a2d1a7eb2e", + "8aef263e385cbc61e19b28914243262af5afe8726af3ce39a79c27028cf3ecd3f8d2dfd9cfc9ad91b58f6f20778fd5f02894a3d91c7d57d1e4b866a7f364b6be", + "28696141de6e2d9bcb3235578a66166c1448d3e905a1b482d423be4bc5369bc8c74dae0acc9cc123e1d8ddce9f97917e8c019c552da32d39d2219b9abf0fa8c8", + "2fb9eb2085830181903a9dafe3db428ee15be7662224efd643371fb25646aee716e531eca69b2bdc8233f1a8081fa43da1500302975a77f42fa592136710e9dc", + "66f9a7143f7a3314a669bf2e24bbb35014261d639f495b6c9c1f104fe8e320aca60d4550d69d52edbd5a3cdeb4014ae65b1d87aa770b69ae5c15f4330b0b0ad8", + "f4c4dd1d594c3565e3e25ca43dad82f62abea4835ed4cd811bcd975e46279828d44d4c62c3679f1b7f7b9dd4571d7b49557347b8c5460cbdc1bef690fb2a08c0", + "8f1dc9649c3a84551f8f6e91cac68242a43b1f8f328ee92280257387fa7559aa6db12e4aeadc2d26099178749c6864b357f3f83b2fb3efa8d2a8db056bed6bcc", + "3139c1a7f97afd1675d460ebbc07f2728aa150df849624511ee04b743ba0a833092f18c12dc91b4dd243f333402f59fe28abdbbbae301e7b659c7a26d5c0f979", + "06f94a2996158a819fe34c40de3cf0379fd9fb85b3e363ba3926a0e7d960e3f4c2e0c70c7ce0ccb2a64fc29869f6e7ab12bd4d3f14fce943279027e785fb5c29", + "c29c399ef3eee8961e87565c1ce263925fc3d0ce267d13e48dd9e732ee67b0f69fad56401b0f10fcaac119201046cca28c5b14abdea3212ae65562f7f138db3d", + "4cec4c9df52eef05c3f6faaa9791bc7445937183224ecc37a1e58d0132d35617531d7e795f52af7b1eb9d147de1292d345fe341823f8e6bc1e5badca5c656108", + "898bfbae93b3e18d00697eab7d9704fa36ec339d076131cefdf30edbe8d9cc81c3a80b129659b163a323bab9793d4feed92d54dae966c77529764a09be88db45", + "ee9bd0469d3aaf4f14035be48a2c3b84d9b4b1fff1d945e1f1c1d38980a951be197b25fe22c731f20aeacc930ba9c4a1f4762227617ad350fdabb4e80273a0f4", + "3d4d3113300581cd96acbf091c3d0f3c310138cd6979e6026cde623e2dd1b24d4a8638bed1073344783ad0649cc6305ccec04beb49f31c633088a99b65130267", + "95c0591ad91f921ac7be6d9ce37e0663ed8011c1cfd6d0162a5572e94368bac02024485e6a39854aa46fe38e97d6c6b1947cd272d86b06bb5b2f78b9b68d559d", + "227b79ded368153bf46c0a3ca978bfdbef31f3024a5665842468490b0ff748ae04e7832ed4c9f49de9b1706709d623e5c8c15e3caecae8d5e433430ff72f20eb", + "5d34f3952f0105eef88ae8b64c6ce95ebfade0e02c69b08762a8712d2e4911ad3f941fc4034dc9b2e479fdbcd279b902faf5d838bb2e0c6495d372b5b7029813", + "7f939bf8353abce49e77f14f3750af20b7b03902e1a1e7fb6aaf76d0259cd401a83190f15640e74f3e6c5a90e839c7821f6474757f75c7bf9002084ddc7a62dc", + "062b61a2f9a33a71d7d0a06119644c70b0716a504de7e5e1be49bd7b86e7ed6817714f9f0fc313d06129597e9a2235ec8521de36f7290a90ccfc1ffa6d0aee29", + "f29e01eeae64311eb7f1c6422f946bf7bea36379523e7b2bbaba7d1d34a22d5ea5f1c5a09d5ce1fe682cced9a4798d1a05b46cd72dff5c1b355440b2a2d476bc", + "ec38cd3bbab3ef35d7cb6d5c914298351d8a9dc97fcee051a8a02f58e3ed6184d0b7810a5615411ab1b95209c3c810114fdeb22452084e77f3f847c6dbaafe16", + "c2aef5e0ca43e82641565b8cb943aa8ba53550caef793b6532fafad94b816082f0113a3ea2f63608ab40437ecc0f0229cb8fa224dcf1c478a67d9b64162b92d1", + "15f534efff7105cd1c254d074e27d5898b89313b7d366dc2d7d87113fa7d53aae13f6dba487ad8103d5e854c91fdb6e1e74b2ef6d1431769c30767dde067a35c", + "89acbca0b169897a0a2714c2df8c95b5b79cb69390142b7d6018bb3e3076b099b79a964152a9d912b1b86412b7e372e9cecad7f25d4cbab8a317be36492a67d7", + "e3c0739190ed849c9c962fd9dbb55e207e624fcac1eb417691515499eea8d8267b7e8f1287a63633af5011fde8c4ddf55bfdf722edf88831414f2cfaed59cb9a", + "8d6cf87c08380d2d1506eee46fd4222d21d8c04e585fbfd08269c98f702833a156326a0724656400ee09351d57b440175e2a5de93cc5f80db6daf83576cf75fa", + "da24bede383666d563eeed37f6319baf20d5c75d1635a6ba5ef4cfa1ac95487e96f8c08af600aab87c986ebad49fc70a58b4890b9c876e091016daf49e1d322e", + "f9d1d1b1e87ea7ae753a029750cc1cf3d0157d41805e245c5617bb934e732f0ae3180b78e05bfe76c7c3051e3e3ac78b9b50c05142657e1e03215d6ec7bfd0fc", + "11b7bc1668032048aa43343de476395e814bbbc223678db951a1b03a021efac948cfbe215f97fe9a72a2f6bc039e3956bfa417c1a9f10d6d7ba5d3d32ff323e5", + "b8d9000e4fc2b066edb91afee8e7eb0f24e3a201db8b6793c0608581e628ed0bcc4e5aa6787992a4bcc44e288093e63ee83abd0bc3ec6d0934a674a4da13838a", + "ce325e294f9b6719d6b61278276ae06a2564c03bb0b783fafe785bdf89c7d5acd83e78756d301b445699024eaeb77b54d477336ec2a4f332f2b3f88765ddb0c3", + "29acc30e9603ae2fccf90bf97e6cc463ebe28c1b2f9b4b765e70537c25c702a29dcbfbf14c99c54345ba2b51f17b77b5f15db92bbad8fa95c471f5d070a137cc", + "3379cbaae562a87b4c0425550ffdd6bfe1203f0d666cc7ea095be407a5dfe61ee91441cd5154b3e53b4f5fb31ad4c7a9ad5c7af4ae679aa51a54003a54ca6b2d", + "3095a349d245708c7cf550118703d7302c27b60af5d4e67fc978f8a4e60953c7a04f92fcf41aee64321ccb707a895851552b1e37b00bc5e6b72fa5bcef9e3fff", + "07262d738b09321f4dbccec4bb26f48cb0f0ed246ce0b31b9a6e7bc683049f1f3e5545f28ce932dd985c5ab0f43bd6de0770560af329065ed2e49d34624c2cbb", + "b6405eca8ee3316c87061cc6ec18dba53e6c250c63ba1f3bae9e55dd3498036af08cd272aa24d713c6020d77ab2f3919af1a32f307420618ab97e73953994fb4", + "7ee682f63148ee45f6e5315da81e5c6e557c2c34641fc509c7a5701088c38a74756168e2cd8d351e88fd1a451f360a01f5b2580f9b5a2e8cfc138f3dd59a3ffc", + "1d263c179d6b268f6fa016f3a4f29e943891125ed8593c81256059f5a7b44af2dcb2030d175c00e62ecaf7ee96682aa07ab20a611024a28532b1c25b86657902", + "106d132cbdb4cd2597812846e2bc1bf732fec5f0a5f65dbb39ec4e6dc64ab2ce6d24630d0f15a805c3540025d84afa98e36703c3dbee713e72dde8465bc1be7e", + "0e79968226650667a8d862ea8da4891af56a4e3a8b6d1750e394f0dea76d640d85077bcec2cc86886e506751b4f6a5838f7f0b5fef765d9dc90dcdcbaf079f08", + "521156a82ab0c4e566e5844d5e31ad9aaf144bbd5a464fdca34dbd5717e8ff711d3ffebbfa085d67fe996a34f6d3e4e60b1396bf4b1610c263bdbb834d560816", + "1aba88befc55bc25efbce02db8b9933e46f57661baeabeb21cc2574d2a518a3cba5dc5a38e49713440b25f9c744e75f6b85c9d8f4681f676160f6105357b8406", + "5a9949fcb2c473cda968ac1b5d08566dc2d816d960f57e63b898fa701cf8ebd3f59b124d95bfbbedc5f1cf0e17d5eaed0c02c50b69d8a402cabcca4433b51fd4", + "b0cead09807c672af2eb2b0f06dde46cf5370e15a4096b1a7d7cbb36ec31c205fbefca00b7a4162fa89fb4fb3eb78d79770c23f44e7206664ce3cd931c291e5d", + "bb6664931ec97044e45b2ae420ae1c551a8874bc937d08e969399c3964ebdba8346cdd5d09caafe4c28ba7ec788191ceca65ddd6f95f18583e040d0f30d0364d", + "65bc770a5faa3792369803683e844b0be7ee96f29f6d6a35568006bd5590f9a4ef639b7a8061c7b0424b66b60ac34af3119905f33a9d8c3ae18382ca9b689900", + "ea9b4dca333336aaf839a45c6eaa48b8cb4c7ddabffea4f643d6357ea6628a480a5b45f2b052c1b07d1fedca918b6f1139d80f74c24510dcbaa4be70eacc1b06", + "e6342fb4a780ad975d0e24bce149989b91d360557e87994f6b457b895575cc02d0c15bad3ce7577f4c63927ff13f3e381ff7e72bdbe745324844a9d27e3f1c01", + "3e209c9b33e8e461178ab46b1c64b49a07fb745f1c8bc95fbfb94c6b87c69516651b264ef980937fad41238b91ddc011a5dd777c7efd4494b4b6ecd3a9c22ac0", + "fd6a3d5b1875d80486d6e69694a56dbb04a99a4d051f15db2689776ba1c4882e6d462a603b7015dc9f4b7450f05394303b8652cfb404a266962c41bae6e18a94", + "951e27517e6bad9e4195fc8671dee3e7e9be69cee1422cb9fecfce0dba875f7b310b93ee3a3d558f941f635f668ff832d2c1d033c5e2f0997e4c66f147344e02", + "8eba2f874f1ae84041903c7c4253c82292530fc8509550bfdc34c95c7e2889d5650b0ad8cb988e5c4894cb87fbfbb19612ea93ccc4c5cad17158b9763464b492", + "16f712eaa1b7c6354719a8e7dbdfaf55e4063a4d277d947550019b38dfb564830911057d50506136e2394c3b28945cc964967d54e3000c2181626cfb9b73efd2", + "c39639e7d5c7fb8cdd0fd3e6a52096039437122f21c78f1679cea9d78a734c56ecbeb28654b4f18e342c331f6f7229ec4b4bc281b2d80a6eb50043f31796c88c", + "72d081af99f8a173dcc9a0ac4eb3557405639a29084b54a40172912a2f8a395129d5536f0918e902f9e8fa6000995f4168ddc5f893011be6a0dbc9b8a1a3f5bb", + "c11aa81e5efd24d5fc27ee586cfd8847fbb0e27601ccece5ecca0198e3c7765393bb74457c7e7a27eb9170350e1fb53857177506be3e762cc0f14d8c3afe9077", + "c28f2150b452e6c0c424bcde6f8d72007f9310fed7f2f87de0dbb64f4479d6c1441ba66f44b2accee61609177ed340128b407ecec7c64bbe50d63d22d8627727", + "f63d88122877ec30b8c8b00d22e89000a966426112bd44166e2f525b769ccbe9b286d437a0129130dde1a86c43e04bedb594e671d98283afe64ce331de9828fd", + "348b0532880b88a6614a8d7408c3f913357fbb60e995c60205be9139e74998aede7f4581e42f6b52698f7fa1219708c14498067fd1e09502de83a77dd281150c", + "5133dc8bef725359dff59792d85eaf75b7e1dcd1978b01c35b1b85fcebc63388ad99a17b6346a217dc1a9622ebd122ecf6913c4d31a6b52a695b86af00d741a0", + "2753c4c0e98ecad806e88780ec27fccd0f5c1ab547f9e4bf1659d192c23aa2cc971b58b6802580baef8adc3b776ef7086b2545c2987f348ee3719cdef258c403", + "b1663573ce4b9d8caefc865012f3e39714b9898a5da6ce17c25a6a47931a9ddb9bbe98adaa553beed436e89578455416c2a52a525cf2862b8d1d49a2531b7391", + "64f58bd6bfc856f5e873b2a2956ea0eda0d6db0da39c8c7fc67c9f9feefcff3072cdf9e6ea37f69a44f0c61aa0da3693c2db5b54960c0281a088151db42b11e8", + "0764c7be28125d9065c4b98a69d60aede703547c66a12e17e1c618994132f5ef82482c1e3fe3146cc65376cc109f0138ed9a80e49f1f3c7d610d2f2432f20605", + "f748784398a2ff03ebeb07e155e66116a839741a336e32da71ec696001f0ad1b25cd48c69cfca7265eca1dd71904a0ce748ac4124f3571076dfa7116a9cf00e9", + "3f0dbc0186bceb6b785ba78d2a2a013c910be157bdaffae81bb6663b1a73722f7f1228795f3ecada87cf6ef0078474af73f31eca0cc200ed975b6893f761cb6d", + "d4762cd4599876ca75b2b8fe249944dbd27ace741fdab93616cbc6e425460feb51d4e7adcc38180e7fc47c89024a7f56191adb878dfde4ead62223f5a2610efe", + "cd36b3d5b4c91b90fcbba79513cfee1907d8645a162afd0cd4cf4192d4a5f4c892183a8eacdb2b6b6a9d9aa8c11ac1b261b380dbee24ca468f1bfd043c58eefe", + "98593452281661a53c48a9d8cd790826c1a1ce567738053d0bee4a91a3d5bd92eefdbabebe3204f2031ca5f781bda99ef5d8ae56e5b04a9e1ecd21b0eb05d3e1", + "771f57dd2775ccdab55921d3e8e30ccf484d61fe1c1b9c2ae819d0fb2a12fab9be70c4a7a138da84e8280435daade5bbe66af0836a154f817fb17f3397e725a3", + "c60897c6f828e21f16fbb5f15b323f87b6c8955eabf1d38061f707f608abdd993fac3070633e286cf8339ce295dd352df4b4b40b2f29da1dd50b3a05d079e6bb", + "8210cd2c2d3b135c2cf07fa0d1433cd771f325d075c6469d9c7f1ba0943cd4ab09808cabf4acb9ce5bb88b498929b4b847f681ad2c490d042db2aec94214b06b", + "1d4edfffd8fd80f7e4107840fa3aa31e32598491e4af7013c197a65b7f36dd3ac4b478456111cd4309d9243510782fa31b7c4c95fa951520d020eb7e5c36e4ef", + "af8e6e91fab46ce4873e1a50a8ef448cc29121f7f74deef34a71ef89cc00d9274bc6c2454bbb3230d8b2ec94c62b1dec85f3593bfa30ea6f7a44d7c09465a253", + "29fd384ed4906f2d13aa9fe7af905990938bed807f1832454a372ab412eea1f5625a1fcc9ac8343b7c67c5aba6e0b1cc4644654913692c6b39eb9187ceacd3ec", + "a268c7885d9874a51c44dffed8ea53e94f78456e0b2ed99ff5a3924760813826d960a15edbedbb5de5226ba4b074e71b05c55b9756bb79e55c02754c2c7b6c8a", + "0cf8545488d56a86817cd7ecb10f7116b7ea530a45b6ea497b6c72c997e09e3d0da8698f46bb006fc977c2cd3d1177463ac9057fdd1662c85d0c126443c10473", + "b39614268fdd8781515e2cfebf89b4d5402bab10c226e6344e6b9ae000fb0d6c79cb2f3ec80e80eaeb1980d2f8698916bd2e9f747236655116649cd3ca23a837", + "74bef092fc6f1e5dba3663a3fb003b2a5ba257496536d99f62b9d73f8f9eb3ce9ff3eec709eb883655ec9eb896b9128f2afc89cf7d1ab58a72f4a3bf034d2b4a", + "3a988d38d75611f3ef38b8774980b33e573b6c57bee0469ba5eed9b44f29945e7347967fba2c162e1c3be7f310f2f75ee2381e7bfd6b3f0baea8d95dfb1dafb1", + "58aedfce6f67ddc85a28c992f1c0bd0969f041e66f1ee88020a125cbfcfebcd61709c9c4eba192c15e69f020d462486019fa8dea0cd7a42921a19d2fe546d43d", + "9347bd291473e6b4e368437b8e561e065f649a6d8ada479ad09b1999a8f26b91cf6120fd3bfe014e83f23acfa4c0ad7b3712b2c3c0733270663112ccd9285cd9", + "b32163e7c5dbb5f51fdc11d2eac875efbbcb7e7699090a7e7ff8a8d50795af5d74d9ff98543ef8cdf89ac13d0485278756e0ef00c817745661e1d59fe38e7537", + "1085d78307b1c4b008c57a2e7e5b234658a0a82e4ff1e4aaac72b312fda0fe27d233bc5b10e9cc17fdc7697b540c7d95eb215a19a1a0e20e1abfa126efd568c7", + "4e5c734c7dde011d83eac2b7347b373594f92d7091b9ca34cb9c6f39bdf5a8d2f134379e16d822f6522170ccf2ddd55c84b9e6c64fc927ac4cf8dfb2a17701f2", + "695d83bd990a1117b3d0ce06cc888027d12a054c2677fd82f0d4fbfc93575523e7991a5e35a3752e9b70ce62992e268a877744cdd435f5f130869c9a2074b338", + "a6213743568e3b3158b9184301f3690847554c68457cb40fc9a4b8cfd8d4a118c301a07737aeda0f929c68913c5f51c80394f53bff1c3e83b2e40ca97eba9e15", + "d444bfa2362a96df213d070e33fa841f51334e4e76866b8139e8af3bb3398be2dfaddcbc56b9146de9f68118dc5829e74b0c28d7711907b121f9161cb92b69a9", + "142709d62e28fcccd0af97fad0f8465b971e82201dc51070faa0372aa43e92484be1c1e73ba10906d5d1853db6a4106e0a7bf9800d373d6dee2d46d62ef2a461", +} + +var hashes2X = []string{ + "64", + "f457", + "e8c045", + "a74c6d0d", + "eb02ae482a", + "be65b981275e", + "8540ccd083a455", + "074a02fa58d7c7c0", + "da6da05e10db3022b6", + "542a5aae2f28f2c3b68c", + "ca3af2afc4afe891da78b1", + "e0f66b8dcebf4edc85f12c85", + "744224d383733b3fa2c53bfcf5", + "b09b653e85b72ef5cdf8fcfa95f3", + "dd51877f31f1cf7b9f68bbb09064a3", + "f5ebf68e7ebed6ad445ffc0c47e82650", + "ebdcfe03bcb7e21a9091202c5938c0a1bb", + "860fa5a72ff92efafc48a89df1632a4e2809", + "0d6d49daa26ae2818041108df3ce0a4db48c8d", + "e5d7e1bc5715f5ae991e4043e39533af5d53e47f", + "5232028a43b9d4dfa7f37439b49495926481ab8a29", + "c118803c922f9ae2397fb676a2ab7603dd9c29c21fe4", + "2af924f48b9bd7076bfd68794bba6402e2a7ae048de3ea", + "61255ac38231087c79ea1a0fa14538c26be1c851b6f318c0", + "f9712b8e42f0532162822f142cb946c40369f2f0e77b6b186e", + "76da0b89558df66f9b1e66a61d1e795b178ce77a359087793ff2", + "9036fd1eb32061bdecebc4a32aa524b343b8098a16768ee774d93c", + "f4ce5a05934e125d159678bea521f585574bcf9572629f155f63efcc", + "5e1c0d9fae56393445d3024d6b82692d1339f7b5936f68b062c691d3bf", + "538e35f3e11111d7c4bab69f83b30ade4f67addf1f45cdd2ac74bf299509", + "17572c4dcbb17faf8785f3bba9f6903895394352eae79b01ebd758377694cc", + "29f6bb55de7f8868e053176c878c9fe6c2055c4c5413b51ab0386c277fdbac75", + "bad026c8b2bd3d294907f2280a7145253ec2117d76e3800357be6d431b16366e41", + "386b7cb6e0fd4b27783125cbe80065af8eb9981fafc3ed18d8120863d972fa7427d9", + "06e8e6e26e756fff0b83b226dce974c21f970e44fb5b3e5bbada6e4b12f81cca666f48", + "2f9bd300244f5bc093ba6dcdb4a89fa29da22b1de9d2c9762af919b5fedf6998fbda305b", + "cf6bdcc46d788074511f9e8f0a4b86704365b2d3f98340b8db53920c385b959a38c8869ae7", + "1171e603e5cdeb4cda8fd7890222dd8390ede87b6f3284cac0f0d832d8250c9200715af7913d", + "bda7b2ad5d02bd35ffb009bdd72b7d7bc9c28b3a32f32b0ba31d6cbd3ee87c60b7b98c03404621", + "2001455324e748503aa08eff2fb2e52ae0170e81a6e9368ada054a36ca340fb779393fb045ac72b3", + "45f0761aefafbf87a68f9f1f801148d9bba52616ad5ee8e8ac9207e9846a782f487d5cca8b20355a18", + "3a7e05708be62f087f17b41ac9f20e4ef8115c5ab6d08e84d46af8c273fb46d3ce1aabebae5eea14e018", + "ea318da9d042ca337ccdfb2bee3e96ecb8f907876c8d143e8e44569178353c2e593e4a82c265931ba1dd79", + "e0f7c08f5bd712f87094b04528fadb283d83c9ceb82a3e39ec31c19a42a1a1c3bee5613b5640abe069b0d690", + "d35e63fb1f3f52ab8f7c6cd7c8247e9799042e53922fbaea808ab979fa0c096588cfea3009181d2f93002dfc11", + "b8b0ab69e3ae55a8699eb481dd665b6a2424c89bc6b7cca02d15fdf1b9854139cab49d34de498b50b2c7e8b910cf", + "fb65e3222a2950eae1701d4cdd4736266f65bf2c0d2e77968996eadb60ef74fb786f6234973a2524bdfe32d100aa0e", + "f28b4bb3a2e2c4d5c01a23ff134558559a2d3d704b75402983ee4e0f71d273ae056842c4153b18ee5c47e2bfa54313d4", + "7bb78794e58a53c3e4b1aeb161e756af051583d14e0a5a3205e094b7c9a8cf62d098fa9ea1db12f330a51ab9852c17f983", + "a879a8ebae4d0987789bcc58ec3448e35ba1fa1ee58c668d8295aba4eaeaf2762b053a677e25404f635a53037996974d418a", + "695865b353ec701ecc1cb38f3154489eed0d39829fc192bb68db286d20fa0a64235cde5639137819f7e99f86bd89afcef84a0f", + "a6ec25f369f71176952fb9b33305dc768589a6070463ee4c35996e1ced4964a865a5c3dc8f0d809eab71366450de702318e4834d", + "604749f7bfadb069a036409ffac5ba291fa05be8cba2f141554132f56d9bcb88d1ce12f2004cd3ade1aa66a26e6ef64e327514096d", + "daf9fa7dc2464a899533594e7916fc9bc585bd29dd60c930f3bfa78bc47f6c8439448043a45119fc9228c15bce5fd24f46baf9de736b", + "943ea5647a8666763084da6a6f15dcf0e8dc24f27fd0d9194805d25180fe3a6d98f4b2b5e0d6a04e9b41869817030f16ae975dd41fc35c", + "af4f73cbfc093760dfeb52d57ef45207bbd1a515f5523404e5d95a73c237d97ae65bd195b472de6d514c2c448b12fafc282166da132258e9", + "605f4ed72ed7f5046a342fe4cf6808100d4632e610d59f7ebb016e367d0ff0a95cf45b02c727ba71f147e95212f52046804d376c918cadd260", + "3750d8ab0a6b13f78e51d321dfd1aa801680e958de45b7b977d05732ee39f856b27cb2bcce8fbf3db6666d35e21244c2881fdcc27fbfea6b1672", + "8f1b929e80ab752b58abe9731b7b34eb61369536995abef1c0980d93903c1880da3637d367456895f0cb4769d6de3a979e38ed6f5f6ac4d48e9b32", + "d8469b7aa538b36cdc711a591d60dafecca22bd421973a70e2deef72f69d8014a6f0064eabfbebf5383cbb90f452c6e113d2110e4b1092c54a38b857", + "7d1f1ad2029f4880e1898af8289c23bc933a40863cc4ab697fead79c58b6b8e25b68cf5324579b0fe879fe7a12e6d03907f0140dfe7b29d33d6109ecf1", + "87a77aca6d551642288a0dff66078225ae39d288801607429d6725ca949eed7a6f199dd8a65523b4ee7cfa4187400e96597bfffc3e38ade0ae0ab88536a9", + "e101f43179d8e8546e5ce6a96d7556b7e6b9d4a7d00e7aade5579d085d527ce34a9329551ebcaf6ba946949bbe38e30a62ae344c1950b4bde55306b3bac432", + "4324561d76c370ef35ac36a4adf8f3773a50d86504bd284f71f7ce9e2bc4c1f1d34a7fb2d67561d101955d448b67577eb30dfee96a95c7f921ef53e20be8bc44", + "78f0ed6e220b3da3cc9381563b2f72c8dc830cb0f39a48c6ae479a6a78dcfa94002631dec467e9e9b47cc8f0887eb680e340aec3ec009d4a33d241533c76c8ca8c", + "9f6589c31a472e0a736f4eb22b6c70a9d332cc15304ccb66a6b97cd051b6ed82f8990e1d9bee2e4bb1c3c45e550ae0e7b96e93ae23f2fb8f63b309131e72b36cba6a", + "c138077ee4ed3d7ffa85ba851dfdf6e9843fc1dc00889d117237bfaad9aa757192f73556b959f98e6d24886ce48869f2a01a48c371785f12b6484eb2078f08c22066e1", + "f83e7c9e0954a500576ea1fc90a3db2cbd7994eaef647dab5b34e88ab9dc0b47addbc807b21c8e6dd3d0bd357f008471d4f3e0abb18450e1d4919e03a34545b9643f870e", + "3277a11f2628544fc66f50428f1ad56bcba6ee36ba2ca6ecdf7e255effc0c30235c039d13e01f04cf1efe95b5c2033ab72adda30994b62f2851d17c9920eadca9a251752dc", + "c2a834281a06fe7b730d3a03f90761daf02714c066e33fc07e1f59ac801ec2f4433486b5a2da8faa51a0cf3c34e29b2960cd0013378938dbd47c3a3d12d70db01d7d06c3e91e", + "47680182924a51cabe142a6175c9253e8ba7ea579ece8d9bcb78b1e9ca00db844fa08abcf41702bd758ee2c608d9612fed50e85854469cb4ef3038acf1e35b6ba4390561d8ae82", + "cec45830cd71869e83b109a99a3cd7d935f83a95de7c582f3adbd34e4938fa2f3f922f52f14f169c38cc6618d3f306a8a4d607b345b8a9c48017136fbf825aecf7b620e85f837fae", + "46fb53c70ab105079d5d78dc60eaa30d938f26e4d0b9df122e21ec85deda94744c1daf8038b8a6652d1ff3e7e15376f5abd30e564784a999f665078340d66b0e939e0c2ef03f9c08bb", + "7b0dcb52791a170cc52f2e8b95d8956f325c3751d3ef3b2b83b41d82d4496b46228a750d02b71a96012e56b0720949ca77dc68be9b1ef1ad6d6a5ceb86bf565cb972279039e209dddcdc", + "7153fd43e6b05f5e1a4401e0fef954a737ed142ec2f60bc4daeef9ce73ea1b40a0fcaf1a1e03a3513f930dd5335723632f59f7297fe3a98b68e125eadf478eb045ed9fc4ee566d13f537f5", + "c7f569c79c801dab50e9d9ca6542f25774b3841e49c83efe0b89109f569509ce7887bc0d2b57b50320eb81fab9017f16c4c870e59edb6c26620d93748500231d70a36f48a7c60747ca2d5986", + "0a81e0c547648595adca65623ce783411aac7f7d30c3ad269efafab288e7186f6895261972f5137877669c550f34f5128850ebb50e1884814ea1055ee29a866afd04b2087abed02d9592573428", + "6a7b6769e1f1c95314b0c7fe77013567891bd23416374f23e4f43e27bc4c55cfada13b53b1581948e07fb96a50676baa2756db0988077b0f27d36ac088e0ff0fe72eda1e8eb4b8facff3218d9af0", + "a399474595cb1ccab6107f18e80f03b1707745c7bf769fc9f260094dc9f8bc6fe09271cb0b131ebb2acd073de4a6521c8368e664278be86be216d1622393f23435fae4fbc6a2e7c961282a777c2d75", + "4f0fc590b2755a515ae6b46e9628092369d9c8e589e3239320639aa8f7aa44f8111c7c4b3fdbe6e55e036fbf5ebc9c0aa87a4e66851c11e86f6cbf0bd9eb1c98a378c7a7d3af900f55ee108b59bc9e5c", + "ed96a046f08dd675107331d267379c6fce3c352a9f8d7b243008a74cb4e9410836afaabe871dab6038ca94ce5f6d41fa922ce08aba58169f94cfc86d9f688f396abd24c11a6a9b0830572105a477c33e92", + "379955f539abf0eb2972ee99ed9546c4bbee363403991833005dc27904c271ef22a799bc32cb39f08d2e4ba6717d55153feb692d7c5efae70890bf29d96df02333c7b05ccc314e4835b018fec9141a82c745", + "e16cc8d41b96547ede0d0cf4d908c5fa393399daa4a9696e76a4c1f6a2a9fef70f17fb53551a8145ed88f18db8fe780a079d94732437023f7c1d1849ef69ad536a76204239e8ba5d97e507c36c7d042f87fe0e", + "a81de50750ece3f84536728f227208bf01ec5b7721579d007de72c88ee20663318332efe5bc7c09ad1fa8342be51f0609046ccf760a7957a7d8dc88941adb93666a4521ebe76618e5ddc2dd3261493d400b50073", + "b72c5fb7c7f60d243928fa41a2d711157b96aef290185c64b4de3dcfa3d644da67a8f37c2ac55caad79ec695a473e8b481f658c497edb8a191526592b11a412282d2a4010c90ef4647bd6ce745ebc9244a71d4876b", + "9550703877079c90e200e830f277b605624954c549e729c359ee01ee2b07741ecc4255cb37f96682dafcdbaade1063e2c5ccbd1918fb669926a67744101fb6de3ac016be4c74165a1e5a696b704ba2ebf4a953d44b95", + "a17eb44d4de502dc04a80d5a5e9507d17f27c96467f24c79b06bc98a4c410741d4ac2db98ec02c2a976d788531f1a4451b6c6204cef6dae1b6ebbcd0bde23e6fffb02754043c8fd3c783d90a670b16879ce68b5554fe1c", + "41d3ea1eaba5be4a206732dbb5b70b79b66a6e5908795ad4fb7cf9e67efb13f06fef8f90acb080ce082aadec6a1b543af759ab63fa6f1d3941186482b0c2b312f1151ea8386253a13ed3708093279b8eb04185636488b226", + "5e7cdd8373dc42a243c96013cd29df9283b5f28bb50453a903c85e2ce57f35861bf93f03029072b70dac0804e7d51fd0c578c8d9fa619f1e9ce3d8044f65d55634dba611280c1d5cfb59c836a595c803124f696b07ddfac718", + "26a14c4aa168907cb5de0d12a82e1373a128fb21f2ed11feba108b1bebce934ad63ed89f4ed7ea5e0bc8846e4fc10142f82de0bebd39d68f7874f615c3a9c896bab34190e85df05aaa316e14820b5e478d838fa89dfc94a7fc1e", + "0211dfc3c35881adc170e4ba6daab1b702dff88933db9a6829a76b8f4a7c2a6d658117132a974f0a0b3a38ceea1efc2488da21905345909e1d859921dc2b5054f09bce8eeb91fa2fc6d048ce00b9cd655e6aafbdaa3a2f19270a16", + "ddf015b01b68c4f5f72c3145d54049867d99ee6bef24282abf0eecdb506e295bacf8f23ffa65a4cd891f76a046b9dd82cae43a8d01e18a8dff3b50aeb92672be69d7c087ec1fa2d3b2a39196ea5b49b7baede37a586fea71aded587f", + "6ee721f71ca4dd5c9ce7873c5c04c6ce76a2c824b984251c15535afc96adc9a4d48ca314bfeb6b8ee65092f14cf2a7ca9614e1dcf24c2a7f0f0c11207d3d8aed4af92873b56e8b9ba2fbd659c3f4ca90fa24f113f74a37181bf0fdf758", + "689bd150e65ac123612524f720f54def78c095eaab8a87b8bcc72b443408e3227f5c8e2bd5af9bcac684d497bc3e41b7a022c28fb5458b95e8dfa2e8caccde0492936ff1902476bb7b4ef2125b19aca2cd3384d922d9f36dddbcd96ae0d6", + "3a3c0ef066fa4390ec76ad6be1dc9c31ddf45fef43fbfa1f49b439caa2eb9f3042253a9853e96a9cf86b4f873785a5d2c5d3b05f6501bc876e09031188e05f48937bf3c9b667d14800db62437590b84ce96aa70bb5141ee2ea41b55a6fd944", + "741ce384e5e0edaebb136701ce38b3d33215415197758ae81235307a4115777d4dab23891db530c6d28f63a957428391421f742789a0e04c99c828373d9903b64dd57f26b3a38b67df829ae243feef731ead0abfca049924667fdec49d40f665", + "a513f450d66cd5a48a115aee862c65b26e836f35a5eb6894a80519e2cd96cc4cad8ed7eb922b4fc9bbc55c973089d627b1da9c3a95f6c019ef1d47143cc545b15e4244424be28199c51a5efc7234dcd94e72d229897c392af85f523c2633427825", + "71f1554d2d49bb7bd9e62e71fa049fb54a2c097032f61ebda669b3e1d4593962e47fc62a0ab5d85706aebd6a2f9a192c88aa1ee2f6a46710cf4af6d3c25b7e68ad5c3db23ac009c8f13625ff85dc8e50a9a1b2682d3329330b973ec8cbb7bb73b2bd", + "167cc1067bc08a8d2c1a0c10041ebe1fc327b37043f6bd8f1c63569e9d36ded58519e66b162f34b6d8f1107ef1e3de199d97b36b44141a1fc4f49b883f40507ff11f909a017869dc8a2357fc7336ae68703d25f75710b0ff5f9765321c0fa53a51675c", + "cb859b35dc70e264efaad2a809fea1e71cd4a3f924be3b5a13f8687a1166b538c40b2ad51d5c3e47b0de482497382673140f547068ff0b3b0fb7501209e1bf36082509ae85f60bb98fd02ac50d883a1a8daa704952d83c1f6da60c9624bc7c99912930bf", + "afb1f0c6b7125b04fa2578dd40f60cb411b35ebc7026c702e25b3f0ae3d4695d44cfdf37cb755691dd9c365edadf21ee44245620e6a24d4c2497135b37cd7ac67e3bd0aaee9f63f107746f9b88859ea902bc7d6895406aa2161f480cad56327d0a5bba2836", + "13e9c0522587460d90c7cb354604de8f1bf850e75b4b176bda92862d35ec810861f7d5e7ff6ba9302f2c2c8642ff8b7776a2f53665790f570fcef3cac069a90d50db42227331c4affb33d6c040d75b9aeafc9086eb83ced38bb02c759e95ba08c92b17031288", + "0549812d62d3ed497307673a4806a21060987a4dbbf43d352b9b170a29240954cf04bc3e1e250476e6800b79e843a8bd8253b7d743de01ab336e978d4bea384eaff700ce020691647411b10a60acacb6f8837fb08ad666b8dcc9eaa87ccb42aef6914a3f3bc30a", + "3a263efbe1f2d463f20526e1d0fd735035fd3f808925f058b32c4d8788aeeab9b8ce233b3c34894731cd73361f465bd350395aebcabd2fb63010298ca025d849c1fa3cd573309b74d7f824bbfe383f09db24bcc565f636b877333206a6ad70815c3bef5574c5fc1c", + "3c6a7d8a84ef7e3eaa812fc1eb8e85105467230d2c9e4562edbfd808f4d1ac15d16b786cc6a02959c2bc17149c2ce74c6f85ee5ef22a8a96b9be1f197cffd214c1ab02a06a9227f37cd432579f8c28ff2b5ac91cca8ffe6240932739d56788c354e92c591e1dd76499", + "b571859294b02af17541a0b5e899a5f67d6f5e36d38255bc417486e69240db56b09cf2607fbf4f95d085a779358a8a8b41f36503438c1860c8f361ce0f2783a08b21bd7232b50ca6d35428335272a5c05b436b2631d8d5c84d60e8040083768ce56a250727fb0579dd5c", + "98ee1b7269d2a0dd490ca38d447279870ea55326571a1b430adbb2cf65c492131136f504145df3ab113a13abfb72c33663266b8bc9c458db4bf5d7ef03e1d3b8a99d5de0c024be8fabc8dc4f5dac82a0342d8ed65c329e7018d6997e69e29a01350516c86beaf153da65ac", + "41c5c95f088df320d35269e5bf86d10248f17aec6776f0fe653f1c356aae409788c938befeb67c86d1c8870e8099ca0ce61a80fbb5a6654c44529368f70fc9b9c2f912f5092047d0ffc339577d24142300e34948e086f62e23ecaca410d24f8a36b5c8c5a80e0926bc8aa16a", + "9f93c41f533b2a82a4df893c78faaaa793c1506974ba2a604cd33101713ca4adfd30819ffd8403402b8d40aff78106f3357f3e2c24312c0d3603a17184d7b999fc9908d14d50192aebabd90d05073da7af4be37dd3d81c90acc80e8333df546f17ab6874f1ec204392d1c0571e", + "3da5207245ac270a915fc91cdb314e5a2577c4f8e269c4e701f0d7493ba716de79935918b917a2bd5db98050dbd1eb3894b65fac5abf13e075abebc011e651c03cafb6127147771a5c8418223e1548137a89206635c26ca9c235ccc108dc25cf846e4732444bd0c2782b197b262b", + "96011af3965bb941dc8f749932ea484eccb9ba94e34b39f24c1e80410f96ce1d4f6e0aa5be606def4f54301e930493d4b55d484d93ab9dd4dc2c9cfb79345363af31ad42f4bd1aa6c77b8afc9f0d551bef7570b13b927afe3e7ac4de7603a0876d5edb1ad9be05e9ee8b53941e8f59", + "51dbbf2a7ca224e524e3454fe82ddc901fafd2120fa8603bc343f129484e9600f688586e040566de0351d1693829045232d04ff31aa6b80125c763faab2a9b233313d931903dcfaba490538b06e4688a35886dc24cdd32a13875e6acf45454a8eb8a315ab95e608ad8b6a49aef0e299a", + "5a6a422529e22104681e8b18d64bc0463a45df19ae2633751c7aae412c250f8fb2cd5e1270d3d0cf009c8aa69688ccd4e2b6536f5747a5bc479b20c135bf4e89d33a26118705a614c6be7ecfe766932471ad4ba01c4f045b1abb5070f90ec78439a27a1788db9327d1c32f939e5fb1d5ba", + "5d26c983642093cb12ff0afabd87b7c56e211d01844ad6da3f623b9f20a0c968034299f2a65e6673530c5980a532beb831c7d0697d12760445986681076dfb6fae5f3a4d8f17a0db5008ce8619f566d2cfe4cf2a6d6f9c3664e3a48564a351c0b3c945c5ee24587521e4112c57e318be1b6a", + "52641dbc6e36be4d905d8d60311e303e8e859cc47901ce30d6f67f152343e3c4030e3a33463793c19effd81fb7c4d631a9479a7505a983a052b1e948ce093b30efa595fab3a00f4cef9a2f664ceeb07ec61719212d58966bca9f00a7d7a8cb4024cf6476bab7fbccee5fd4e7c3f5e2b2975aa2", + "a34ce135b37bf3db1c4aaa4878b4499bd2ee17b85578fcaf605d41e1826b45fdaa1b083d8235dc642787f11469a5493e36806504fe2a2063905e821475e2d5ee217057950370492f5024995e77b82aa51b4f5bd8ea24dc71e0a8a640b0592c0d80c24a726169cf0a10b40944747113d03b52708c", + "46b3cdf4946e15a5334fc3244d6680f5fc132afa67bf43bfade23d0c9e0ec64e7dab76faaeca1870c05f96b7d019411d8b0873d9fed04fa5057c039d5949a4d592827f619471359d6171691cfa8a5d7cb07ef2804f6ccad4821c56d4988bea7765f660f09ef87405f0a80bcf8559efa111f2a0b419", + "8b9fc21691477f11252fca050b121c5334eb4280aa11659e267297de1fec2b2294c7ccee9b59a149b9930b08bd320d3943130930a7d931b71d2f10234f4480c67f1de883d9894ada5ed5071660e221d78ae402f1f05af47761e13fec979f2671e3c63fb0ae7aa1327cf9b8313adab90794a52686bbc4", + "cd6598924ce847de7ff45b20ac940aa6292a8a99b56a74eddc24f2cfb45797188614a21d4e8867e23ff75afd7cd324248d58fcf1ddc73fbd115dfa8c09e62022fab540a59f87c989c12a86ded05130939f00cd2f3b512963dfe0289f0e54acad881c1027d2a0292138fdee902d67d9669c0ca1034a9456", + "594e1cd7337248704e691854af0fdb021067ddf7832b049ba7b684438c32b029eded2df2c89a6ff5f2f2c311522ae2dc6db5a815afc60637b15ec24ef9541f1550409db2a006da3affffe548a1eaee7bd114e9b805d0756c8e90c4dc33cb05226bc2b393b18d953f8730d4c7ae693159cdba758ad28964e2", + "1f0d292453f04406ada8be4c161b82e3cdd69099a8637659e0ee40b8f6da46005cfc6085db9804852decfbe9f7b4dda019a7112612895a144ed430a960c8b2f5458d3d56b7f427cee6358915aee7146278aed2a0296cdd929e4d21ef95a3adf8b7a6beba673cdccdbdcfb2474711732d972ad054b2dc64f38d", + "b65a72d4e1f9f9f75911cc46ad0806b9b18c87d105332a3fe183f45f063a746c892dc6c4b9181b1485b3e3a2cc3b453eba2d4c39d6905a774ed3fb755468beb190925ecd8e57ecb0d985125741650c6b6a1b2a3a50e93e3892c21d47ed5884eed83aa94e1602288f2f49fe286624de9d01fcb54433a0dc4ad70b", + "705ce0ffa469250782aff725248fc88fe98eb76659e8407edc1c4842c9867d61fe64fb86f74e980598b92bc213d06f337bd5654fc28643c7ba769a4c31563427543c00808b627a19c90d86c322f33566ce020121cc322229c3337943d46f68ef939d613dcef0077269f88151d6398b6b009abb763410b154ad76a3", + "7fa881ce87498440ab6af13854f0d851a7e0404de33896999a9b3292a5d2f5b3ad033530c558168fe5d2fdb9b89a2354c46cf32a0e612afc6c6485d789511bfef26800c74bf1a4cfbe30bda310d5f6029c3dccdedb6149e4971274e276dccfabd63bc4b9955e8303feb57f8a688db55ecb4b33d1f9fe1b3a8ba7ac32", + "23a98f71c01c0408ae16843dc03be7db0aeaf055f951709d4e0dfdf64fffbffaf900ee592ee10929648e56f6c1e9f5be5793f7df66453eb56502c7c56c0f0c88da77abc8fa371e434104627ef7c663c49f40998dbad63fa6c7aa4fac17ae138d8bbe081f9bd168cd33c1fbc92fa35ed687679f48a64b87db1fe5bae675", + "7b8970b6a33237e5a7bcb39272703edb92285c55842b30b9a48834b1b507cc02a6764739f2f7ee6ae02a7b715a1c455e59e8c77a1ae98abb10161853f1234d20da99016588cd8602d6b7ec7e177d4011edfa61e6b3766a3c6f8d6e9eac893c568903eb6e6aba9c4725774f6b4343b7acaa6c031593a36eef6c72806ff309", + "f7f4d328ba108b7b1de4443e889a985ed52f485f3ca4e0c246aa5526590cbed344e9f4fe53e4eea0e761c82324649206ca8c2b45152157d4115e68c818644b03b65bb47ad79f94d37cb03c1d953b74c2b8adfa0e1c418bda9c518ddcd7050e0f149044740a2b16479413b63fc13c36144f80c73687513dca761ba8642a8ae0", + "2d7dc80c19a1d12d5fe3963569547a5d1d3e821e6f06c5d5e2c09401f946c9f7e13cd019f2f9a878b62dd850453b6294b99ccaa068e542993524b0f63832d48e865be31e8ec1ee103c718340c904b32efb69170b67f038d50a3252794b1b4076c0620621ab3d91215d55ffea99f23d54e161a90d8d4902fda5931d9f6a27146a", + "77dff4c7ad30c954338c4b23639dae4b275086cbe654d401a2343528065e4c9f1f2eca22aa025d49ca823e76fdbb35df78b1e5075ff2c82b680bca385c6d57f7ea7d1030bb392527b25dd73e9eeff97bea397cf3b9dda0c817a9c870ed12c006cc054968c64000e0da874e9b7d7d621b0679866912243ea096c7b38a1344e98f74", + "83bed0d556798f2b419f7056e6d3ffada06e939b95a688d0ec8c6ac5ea45ab73a4cf01043e0a170766e21395f27ab4b78c435f5f0dfe6e93ab80df38610e41158429ddf20296f53a06a017723359fe22dc08b5da33f0800a4fe50118e8d7eab2f83a85cd764bf8a166903bd0e9dcfeeceba44ff4ca4439846458d31ea2bb564645d1", + "ea12cf5a113543e39504123036f15a5bafa9c555562469f99cd29996a4dfaaab2a34b00557ccf15f37fc0cc1b3be427e725f2cd952e50af7970dda9200cd5ce252b1f29c40067fea3027ed686190803b59d834179d1b8f5b55abe55ad174b2a1188f7753ec0ae2fc01316e7d498b68ee3598a0e9baaaa664a60f7fb4f90edbed494ad7", + "55266358332d8d9e68bd13432088beadf95833aab67a0eb3b10650414255f299e2670c3e1a5b2976159a46c72a7ce57d59b7be14c15798e09ed50fa312a431b0264d7a1396aa6168bde897e208ece53d2cfc83786113b1e6eac5e9bb98984abb6c8d64eebb991903254abc650c999bb9958a5d7937434b869bc940e21b9dc1cc8982f2ba", + "4d6104ded730aefe02873f4c741232c8234a6d66d85393aff57fbf56ba6347666988dfc4d58f3cc895a0da598822edeee4533d24ec0ee292fd5e1ad04898ffbc1ff4bef14dec220babcb0f28fffe32a6e2c28aaaac16442bf4feb02917d18bb3a415d84fa9358d5a9852688d846c92271911f934181c30f82434d915f93f155a1ffbf0b125", + "eb5f579a4c476af554aac11e5719d378549497e613b35a929d6f36bb8831d7a466aa76de9be24ebb55543f1c13924f64cfd648a5b3fa90387315c16174dbf1e9a183c196d9bb8f84af65f1f8212429aadc11ef2426d07d4716062b85c8d5d2dff8e21b9e62b7fa7dbd57d72633054b464fb28583a56ca13ccc5ddc74dae942492f31731e7046", + "ebddec3dcaf18063e45a76ebeac39af85a1adc2818881ccce48c106288f5988365cca2b4b1d7f037322da46840f42bebdcbc7193838d426e101087d8cea03aaff743d573eb4f4e9a71a2c884390769a6503874125d194bee8d46a3a0d5e4fcf28ff8465887d8e9df771d70157e75df3642b331d2778ceb32ceba868640171ab7a5d22eede1ee44", + "26d87ec70b57691e3bb359633d3ddba17f029d62cdfe977f5fd42274d79b444a32494d1c01e9f72d03cce78c806df96e93ea78da3a054209924ed765edc4d570f66168dc25ee3114e4017e387440349c8f0a94804761c3055f88e4fda2a49b860b1486a9609095f6250f268b6a4d1aecc03a505632ebf0b9dc22d0755a736faf7ad7000858b5864b", + "3880f5cc2d08fa70ef44b1f263fcf534d062a298c1bd5ee2eee8c3265806c4ce50b004f3a1fc1fa5b024aaac7f528c023c8181f67c6e1c357425dc4d573bd46b93a542afa3a19bdb140a2ce666e1a01f5c4d2dcd681fa9f5839b797813c394738d5ee4971386c12c7c117d17c7bec324b760aa30cda9ab2aa850284ba6fa97946f710f02449d1883c6", + "3317d2f452105dd3f4a96f9257af8285a80be58066b50f6f54bd633749b49f6ab9d57d45652d2ae852a2f6940cd5ec3159dd7f333358b12f502325df38843508faf7e246352d201280babd90b14fbf7722641c3601d0e458474439973c611bb5502fd0eb3078f87124ca7e1a016fcb6cfeff65f6a565985aca7122cfa8c5a11da0cb47797c5132333179", + "f2c5c955d0224e784a46b9125f8fef8a5e1271e145eb08bbbd07ca8e1cfc848cef14fa3b36221ac62006403dbb7f7d77958ccc54a8566c837858b809f3e310ace8ca682515bc655d2a397cab238a663b464d511f02dc5d033dad4cb5e0e519e94a54b62a3896e460ec70e5716b5921bf8396aa86a60123e6287e34570bb01bdc602e113670bf498af2ff10", + "180e275205691a83630cf4b0c7b80e6df8fad6ef1c23ba8013d2f09aef7abade1827f23af230de90676240b4b3b0673f8afdea0327330055041741f65560d90348de696d34ca80dfe8afae582fe4879d4594b80e9408fb53e800e01ca58552b905c365e7f1416e51c080f517d6bbd30e64ae1535d59decdc76c6624d737868f49f2f719da39ba1344d59eab9", + "c517a84e4631a7f65ace170d1e5c2fdb259841535d88da323e68c0883e6af7b041cfe05908815a5a9d1b14fa712c2c16fadcf1ca54d3aa954d411240df331b2aebdfb65aced84d0b8aace56ec0aa7c13ec7d75ca883b6bcf6db74c9e98463c484a8262684f29910373430651f90ecffe18b072170e61ee58de20e2a6ff67b3ab00fccbb80af943f20b56b98107", + "d1a56a5ee990e02b84b5862fde62f69ec07567be2d7ccb769a461c4989d11fdda6c945d942fb8b2da795ed97e43a5b7dbdde7f8fd2ff7154544336d5c50fb7380341e660d4898c7fbc39b2b782f28defac6873523c7c1de8e52c65e4395c686ba483c35a220b0416d46357a063fa4c33fa9c52d5c207a1304ae141c791e62ba6a7374ed922b8dd94079b72b69302", + "4720b88d6bfb1ab43958e26827730d852d9ec30173ebd0fe0d273edcece2e788558984cd9306fe5978086a5cb6d37975755d2a3daeb16f99a8a11544b8247a8b7ed5587afc5bea1daf85dcea5703c5905cf56ae7cc76408ccabb8fcc25cacc5ff456db3f62fa559c45b9c71505eb5073df1f10fc4c9060843f0cd68bbb4e8edfb48d0fd81d9c21e53b28a2aae4f7ba", + "f4639b511db9e092823d47d2947efacbaae0e5b912dec3b284d2350b9262f3a51796a0cd9f8bc5a65879d6578ec24a060e293100c2e12ad82d5b2a0e9d22965858030e7cdf2ab3562bfa8ac084c6e8237aa22f54b94c4e92d69f22169ced6c85a293f5e16bfc326153bf629cdd6393675c6627cd949cd367eef02e0f54779f4d5210197698e4754a5fe490a3a7521c1c", + "3d9e7a860a718565e3670c29079ce80e381969fea91017cfd5952e0d8a4a79bb08e2cd1e26161f30ee03a24891d1bfa8c212861b51618d07429fb48000ff87ef09c6fca526567777e9c076d58a642d5c521b1caa5fb0fb3a4b8982dc14a444732b72b239b8f01fc8ba8ee86b3013b5d3e98a92b2aeaecd4879fca5d5e9e0bd880dbfffa6f96f94f3998812aac6a714f331", + "4d9bf551d7fd531e7482e2ec875c0651b0bcc6caa738f7497befd11e67ae0e036c9d7ae4301cc3c7906f0d0e1ed4738753f414f9b3cd9b8a71176e325c4c74ce020680ecbfb146889597f5b40487e93f974cd866817fb9fb24c7c7c16177e6e120bfe349e83aa82ba40e59e917565788658a2b254f25cf99bc65070b3794cea2259eb10e42bb54852cba3110baa773dcd70c", + "b91f65ab5bc059bfa5b43b6ebae243b1c46826f3da061338b5af02b2da76bb5ebad2b426de3c3134a633499c7c36a120369727cb48a0c6cbab0acecdda137057159aa117a5d687c4286868f561a272e0c18966b2fec3e55d75abea818ce2d339e26adc005c2658493fe06271ad0cc33fcb25065e6a2a286af45a518aee5e2532f81ec9256f93ff2d0d41c9b9a2efdb1a2af899", + "736f6e387acb9acbee026a6080f8a9eb8dbb5d7c54ac7053ce75dd184b2cb7b942e22a3497419ddb3a04cf9e4eb9340a1a6f9474c06ee1dcfc8513979fee1fc4768087617fd424f4d65f54782c787a1d2de6efc81534343e855f20b3f3589027a5436201eee747d45b9b8375e4294d72ab6a52e04dfbb2914db92ee58f134b026527ed52d4f794459e02a43a17b0d51ea69bd7f3", + "9242d3eb31d26d923b99d66954cfade94f25a18912e6356810b63b971ae74bb53bc58b3c01424208ea1e0b1499936daea27e63d904f9ed65fdf69de40780a3027b2e89d94bdf214f585472613ce328f628f4f0d56217dfb53db5f7a07f54c8d71db16e27de7cdb8d23988837b49b65c12f1771d979e8b192c9f4a16b8d9fba917bcf74ce5a82aac2075608ba6c2d485fa59864b9de", + "5da68704f4b592d41f08aca08f62d85e2e2466e5f3be010315d11d113db674c4b98764a509a2f5aacc7ae72c9deff2bcc42810b47f64d429b35745b9efff0b18c58653461e968aaa3c2c7fc455bc5771a8f10cd184be831040df767201ab8d32cb9a58c89afbebecb524502c9b940c1b838f8361bbcde90d272715017f67609ea39b20fac985332d82daaa023999e3f8bfa5f3758bb8", + "71ea2af9c8ac2e5ae44a176662882e01027ca3cdb41ec2c6785606a07d7231cd4a2bded7155c2feef3d44d8fd42afa73265cef826f6e03aa761c5c51d5b1f129ddc27503ff50d9c2d748322df4b13dd5cdc7d46381528ab22b79b0049011e4d2e57fe2735e0d58d8d56e92c75dbeac8c76c4239d7f3f24fb56697593b3e4afa6671d5bbc96c079a1c154fe20212ade67b05d49ceaa7a84", + "1d133170582fa4bff59a21953ebbc01bc202d43cd79c083d1f5c02fa15a43a0f519e36acb710bdabac880f04bc003800641c2487930de9c03c0e0deb347fa815efca0a38c6c5de694db698743bc955581f6a945deec4ae988ef7cdf40498b77796ddea3fae0ea844891ab751c7ee20917c5a4af53cd4ebd82170078f41ada2795e6eea17593fa90cbf5290a1095e299fc7f507f360f187cd", + "5ec4ac45d48fc15c72471d795066bdf8e99a483d5fdd599511b9cdc408de7c0616491b73924d0266da34a495331a935c4b8884f57d7ad8cce4cbe586875aa52482215ed39d7626cce55d50349c7767981c8bd6890f132a196184247343566fc972b86fe3c5369d6a6519e9f07942f0522b77ad01c751dcf7defe31e471a0ec00963765dd8518144a3b8c3c978ad108056516a25dbe3092e73c", + "0d5e74b78290c689f2b3cfea45fc9b6a84c822639cd438a7f05c07c374adced42cdc12d2a9233a4ffe80307efc1ac13cb04300e165f8d90dd01c0ea955e7657332c6e86ad6b43e78ba4c13c675aed83192d8427866fb6484e6a3071b2369a46fba9005f31232da7ffec7952f831aaaddf63e225263531c2cf387f8cc14fa856c8795137142c3a52ffa69b8e30ebc88ce3bbc227597bcc8dddd89", + "a0fe36f983259921dc2fa7d89002b3066241d63bfc2448caf7e10522a35562be0bfedc3dce49cfce2e614a04d4c64cfc0ab898873a7fc26928dc1927c009d12f6f9b7a278205d3d0057604f4ac746f8b9287c3bc6b929832bf253b6586192ac43fdd29ba585dbd9059aab9c6ff6000a7867c67fec1457b733f6b620881166b8fed92bc8d84f0426002e7be7fcd6ee0abf3755e2babfe5636ca0b37", + "1d29b6d8eca793bb801becf90b7d7de215b17618ec32340da4bac707cdbb58b951d5036ec02e105d83b5960e2a72002d19b7fa8e1128cc7c5049ed1f76b82a59eac6ed09e56eb73d9ade38a6739f0e07155afa6ec0d9f5cf13c4b30f5f9a465b162a9c3ba04b5a0b3363c2a63f13f2a3b57c590ec6aa7f64f4dcf7f1582d0ca157eb3b3e53b20e306b1f24e9bda87397d413f01b453ceffeca1fb1e7", + "6a2860c110cd0fc5a19bcaafcd30762ee10242d34739638e716bd89fd537ea4dc630e6f85d1bd88a25ad3892ca554c232c9830bd56980c9f08d378d28f7fa6fa7df4fcbf6ad98b1adfff3ec1f63310e50f920c99a5200b8e64c2c2ca249399a149942261f737d5d72da949e914c024d57c4b639cb89990fed2b38a37e5bcd24d17ca12dfcd36ce04691fd03c32f6ed5de2a2191ed7c826375ba81f78d0", + "7132aa291ddc9210c60dbe7eb3c19f9053f2dd74742cf57fdc5df98312adbf4710a73245de4a0c3b24e21ab8b466a77ae29d15500d5142555ef3088cbccbe685ed9119a10755148f0b9f0dbcf02b2b9bcadc8517c88346ea4e78285e9cbab122f824cc18faf53b742a87c008bb6aa47eed8e1c8709b8c2b9adb4cc4f07fb423e5830a8e503ab4f7945a2a02ab0a019b65d4fd71dc364d07bdc6e637990e3", + "3e664da330f2c6007bff0d5101d88288aaacd3c07913c09e871cce16e55a39fde1ce4db6b8379977c46cce08983ca686778afe0a77a41baf447854b9aa286c398c2b83c95a127b053101b6799c1638e5efd67273b2618df6ec0b96d8d040e8c1ee01a99b9b5c8fe63fea2f749e6c90d31f6fae4e1469ac09884c4fe1a8539acb313f42c941224a0e79c059e18affc2bcb6724975c436f7bf949ebdd8aef51c", + "7a6ea63a271eb49470f5ce77519ed61ae9b2f1be07a96855726bc3df1d0723af3a703fdfc2e739c9d31d25814daf661a23558b50982e66ee37ad880f5c8f11c8130fac8a5d0250583700d5a324894fae6d61993f6bf9327214f8674649f355b23fd634940b2c467973a839e659169c773119919f5b81ee171edb2e5f6940d7551f9e5a70625d9ea88711ad0ed8ab2da720ad358bef954456cb2d5636425717c2", + "c5106bbda114168c449172e49590c7eeb827fa4e1a2a7a87a3c1f721a9047d0c0a50fbf244731be1b7eb1a2ef30f5ae846a9f38f0df44f32af61b68dbdcd0226e741dfb6ef81a2503691af5e4b3171f48c59ba4ef91eba344b5b697f261df7bbbb734ca6e6daebaa4a179feb17002823281b8534d55a6531c59305f6e3fd3fa63b747bcf0deb654c392a02fe687a269effb1238f38bcaea6b208b221c45fe7fbe7", + "597716a5ebeebc4bf524c15518816f0b5dcda39cc833c3d66b6368ce39f3fd02ceba8d12072bfe6137c68d3acd50c849873150928b320b4fbc31c1456679ea1d0acaeeabf666d1f1bad3e6b9312c5cbdecf9b799d3e30b0316bed5f41245107b693366accc8b2bcef2a6be54209ffabc0bb6f93377abdcd57d1b25a89e046f16d8fd00f99d1c0cd247aafa72234386ae484510c084ee609f08aad32a005a0a5710cb", + "0771ffe789f4135704b6970b617bae41666bc9a6939d47bd04282e140d5a861c44cf05e0aa57190f5b02e298f1431265a365d29e3127d6fccd86ec0df600e26bcdda2d8f487d2e4b38fbb20f1667591f9b5730930788f2691b9ee1564829d1ada15fffc53e785e0c5e5dd11705a5a71e390ca66f4a592785be188fefe89b4bd085b2024b22a210cb7f4a71c2ad215f082ec63746c7367c22aedb5601f513d9f1ffc1f3", + "be6556c94313739c115895a7bad2b620c0708e24f0390daa55521c31d2c6782acf41156271238885c367a57c72b4fe999c160e804ad58d8e565edbce14a2dd90e443eb80626b3eab9d7ab75d6f8a062d7ca89b7af8eb292c98eaf87ad1dfd0db103d1bb6188bd7e7a63502153cf3ce23d43b60c5782602bac8ad92fb2324f5a79453898c5de18415639ecc5c7974d3077f76fc1df5b956723bb19a624d7ea3ec13ba3d86", + "4bc33729f14cd2f1dc2ff459abee8f6860dda1062845e4adab78b53c835d106bdfa35dd9e77219eaef403d4e80488ca6bd1c93dd76ef9d543fbb7c8904dccc5f71509a6214f73d0f4e467c3e038ea639b29e7fc442ee29f57117740576188ada15a739827c647a46b0271817ab235c023c30c90f2115e5c90cd8501e7b286962fc66ffc3fe7e8978746168314908a41998bd83a1eeffda9d714b864f4d490fdeb9c7a6edfa", + "ab12faea205b3d3a803cf6cb32b9698c32301a1e7f7c6c23a20174c95e98b7c3cfe93fffb3c970face8f5751312a261741141b948d777b8a2ea286fe69fc8ac84d34116a4674bb09a1a0b6af90a748e511749de4697908f4acb22be08e96ebc58ab1690acf73914286c198a2b57f1dd70ea8a52325d3045b8bdfe9a09792521526b7564a2a5fcd01e291f1f8894017ce7d3e8a5dba15332fb410fcfc8d62195a48a9e7c86fc4", + "7d421e59a567af70594757a49809a9c22e07fe14061090b9a041875bb77933deae36c823a9b47044fa0599187c75426b6b5ed94982ab1af7882d9e952eca399ee80a8903c4bc8ebe7a0fb035b6b26a2a013536e57fa9c94b16f8c2753c9dd79fb568f638966b06da81ce87cd77ac0793b7a36c45b8687c995bf4414d28289dbee977e77bf05d931b4feaa359a397ca41be529910077c8d498e0e8fb06e8e660cc6ebf07b77a02f", + "0c18ab727725d62fd3a2714b7185c09faca130438eff1675b38beca7f93a6962d7b98cb300ea33067a2035cdd694348784aa2eda2f16c731eca119a050d3b3ce7d5c0fd6c234354a1da98c0642451922f670984d035f8c6f35031d6188bbeb31a95e99e21b26f6eb5e2af3c7f8eea426357b3b5f83e0029f4c4732bca366c9aa625748297f039327c276cd8d9c9bf692a47af098aa50ca97b99961bef8bc2a7a802e0b8cfdb84319", + "92d5909d18a8b2b9971cd1627b461e98a74ba377186a6a9df5bd133635250b300abccb2254cacb775df6d99f7c7d0952653c28e6909b9f9a45adce691f7adc1afffcd9b06e49f775364cc2c62825b9c1a86089080e26b57e732aac98d80d009bfe50df01b95205aa07ed8ec5c873da3b92d00d53af825aa64b3c634c5ece40bff152c331222d3453fd92e0ca17cef19ecb96a6eed4961b627aca48b12fecd091754f770d52ba861546", + "802f22e4a388e874927fef24c797408254e03910bab5bf372320207f8067f2b1ea543917d4a27df89f5bf936ba12e04302bde23119533d0976beca9e20cc16b4dbf17a2ddc44b66aba76c61ad59d5e90de02a88327ead0a8b75463a1a68e307a6e2e53ecc1986274b9ee80bc9f3140671d5285bc5fb57b281042a8978a1175900c6073fd7bd740122956602c1aa773dd2896674d0a6beab24454b107f7c847acb31a0d332b4dfc5e3f2f", + "3844fe65db11c92fb90bf15e2e0cd216b5b5be91604baf3b84a0ca480e41ecfaca3709b32f8c6e8761406a635b88eec91e075c48799a16ca08f295d9766d74475c47f3f2a274eae8a6ee1d191a7f37ee413a4bf42cad52acd5564a651715ae42ac2cddd52f819c692ecdef52ecb763270322cdca7bd5aef71428fa73e844568b96b43c89bf1ed42a0abf209ffad0eeec286c6f141e8af073ba4adfbbdeda253752ae36c9957dfc905b4c49", + "329377f7bf3c8d74991a7d61b0cf39baff5d485d79751b0d5ad017d23bec570fb19810105bab79ab5acb102ab972165224d4ec888ec7de5148077fa9c1bb6820e0d91ae4e2591a21fec2f820606ce4bafc1e377f8dc3a5bd1a9e2772a57abccd0b757164d768872c91d02789545ab5b203f688d71dd08522a3fd2f5bcd7df507aebf1ca27ddff0a82afb7aa9c180008f49d1325adf97d047e77238fc75f56356de4e87d8c961575c9f6362c9", + "f7f269929b0d71ea8eef7120e55ccba691c582dd534692abef35c0fe9dec7dae973cd9702e5ad420d278fe0e653fdcb22fdcb63148109ec7e94f2d0750b28157dd1764376ae10fdb0a4aef3b304bd82793e0595f941226a2d72abbc929f53134dc495b0d65ced409914f94c2523f3dfbbdeeac84ae247ab5d1b9ea33dce1a808885a55be1f3683b46f4be73d9b62eec2585f690056858dfc427aabf591cd276724885bcd4c00b93bb51fb7484d", + "ac022309aa2c4d7fb628255b8b7fb4c3e3ae64b1cb65e0de711a6def1653d95d8088871cb8905fe8ae76423604988a8f77589f3f776dc1e4b30dbe9dd262b2187db02518a132d219bd1a06ebac13132b5164b6c420b37dd2ccee7d69b3b7fa12e54f0a53b853d490a68379ea1fa2d79762830ffb71bf86aab506b51f85c4b6a41b69325c7d0c7aa85b93b7144489d213e8f33dbb879fce22849865337b620b155cb2d2d36a68832889e30194d36d", + "d009c2b78a8f02e5e5dbb586ef71fc324b375092e15913ca1a5bfd22d516baadb96867bee3562e77c4a4852344a1a76c30728be5e22400b4cc41711f66754c246a520498d8c24f0205b9c873748dbeb67fe1ad099ad04cf89f4b517f0aa481136d9f6de2d727df01c6aa4099da59d4382b51e25fd47c33d9842c32b62331e50794bfe8b61b3ba9de1b8b704779c6d65edff3af00f121ab4a7ea384edabe47c6d0098a48991f387ca4444135ec59d46", + "c00bab36cce69899817d1425016d222d7303197ed3e3fdcac744705e7f178a1ac745968900f69299163e19b3161f3e0a4cc55aa2e4e71e0ee6ac427d1f4d14e063f68d303ddfbb18118335cfa7a6a90d99c38319ee76f7a884846a9e0b68030bf28e78bfbd56359b9368842814da42b04cb0e307d5d846dc22f049147bae31b9a956d17676a8cc348dafa3cabc2007a30e730e3894dddf9999fb8819086311f0703e141613ed6dcd7af8510e2dc435b0", + "c9789152a9fc29698d49ed95f09bd11b75f18a8c5615a73dbe54ae5e550027fd0ae6a8b60667040c1b12de3d1ee3f6bf061c78c951a3210effc912e19f482dd4de152063c588c44903bc11761706fd935afa040df085b08144d83d0dde32b46ab52f4fae98ac116c7ff11d7f553450c2e37b9c5f0b1dd9e0b8640a24cba6f2a5246c41f197f46e3dc8a29131c79bef3351c6e277a0a34442274d546ccd058891277473d668420f121750d19cd684267405", + "06a15a0731ce52557e368bcbaa11ef3399299e36fb9f2eda6e5726907c1d29c5c6fc581405ba48c7e2e522206a8f128d7c1c939d1132a00bd7d6366aa82724e968964eb2e373563f607dfa649590dcf5589114df69da5547fef8d1604cc4c6de1ed5783c8746918a4dd31168d6bc8784cd0c769206bd803d6ca8557b66748770402b075ef44b38157d4c0da7c6281725a2065d087b1f7b23455fa673bdeeba45b983311c44eabe9ef4b7bde3420ae9881863", + "d08aacef2d7a41aec09473bd8a44f628e15addb7b9e5b77a1e09c8ab4942f379a0bfcb324d580b774666f18ae78dd36710824ff12393f059068fe4b559c53662c2b0e6c69e23785c8f32554e837ec1714bee902e60737b639dd933af4f68cb9d7de77e1f3b28e5b122891afce62b79acd5b1ab4ba411662cc77d806449e69c5a45a143b742d98ac84a0826d68433b9b700ace6cd472ba2d58a90847f42ce9c43f38ffc017db4bf40450b2eee1f4594dc740c0f", + "6a6058b0a498b7ea76a93c646eb9b8629f0cba4a0c726420c5f67ba9b0412cade356abdf0a4fb94384bad32ce0d5dd9e23dcaae1d6f28ff8683616b30f1392890c67b3a2c04b360893b801f127e527e4da82e239f4c878da13f4a4f1c76db07190e77ec123995168102fb274434a2d1e12913b9b5cbab4aacaad2bd89d88b3ca2b8e60dacf7c22c9379097ff60880f552e320ca3b571994f52534470feee2b39e0dadb5cd88257a3e459a4cc6f12f17b8d54e1bb", + "adeced01fc5671531cbb45679f5ddd42b3a95151677b6125aaf6f5e8f82fbabaa5ecf7c3552c2458587224f0042870f178f5fca5465250e75d71352e652eeed23cdb7f915f5ebb44099b6db116ca1be45530ac8ed32b7f161d60ed4397ad3d7d649ae6bf75ca5bec891d8e595605be9764f3a03965e1fe0eaffbf212e3df4f0fa35e08ff9d0091e6d4ac4748edfe43b611085a6ffec163014655fdd839fd9e81b63b1fa8cae4ec335ec343289758e389a79ceedfae", + "d014592f3a83ba40af366f137c674724916c3cdd3f6cf9d4c5c7c8d6d51ebf26e315e2c12b3546be56fb52382904046ecbd2f5b883aa4ff473de6f0c26ab862c3fa34bf3d880cc1911ce39a4088c6617c179dc5faf68a2c488bbde12d67b50f73abcfab0e3b062e68c95363e11f5f1de8ec36ed01ea21442518089045df67d346135283ad5b3fff80cf57f20876849f6db9fa139728358415a90610f69ec720fc92d8234e3e122551e9df2c644c4a2c4e3734d07de8e", + "c0d0c37838873ba8757d6e41b409605043bc1635edcd731219587676d94217e9f0ab44b71de25000661ce7303b7015f45e6eaa7b7ebef92b8f4a34c902c908d2172185505fa33aca5a41be83079316cdfdd430fc2c45f505f85d867e6d516f7e1bf19c001d9f43018968aab65ec031b3801399231c83ec9e622dab5629922a6b424cab938c135ff7310501c2c02971bfd2f577e25904d1a618baf0859f77f4e8b1d0cde9544e95ec52ff710c0672fdb3d891feeea2b017", + "7022e7f00902219ba97baa0e940e8ac7727f58955aa068c29680fac4a16bcd812c03eeb5adbcfe867a7f7c6b5d89f4641adb9173b76a1a8438866f9b4f640ce2aedf5f1080c890bcf515b4be4e3e512352f1e5323c62ec46cb73f3d71be8235fee55a154763f7c3f9aeb61ffd28f4cd93d3310f608e2133586bf1ab3f102de96f64c68a4668de8acb2a76a7ce0cddddc8fa3df5e9d230823da16ed9ebb402d36e38e6e018795e5a71517ecab5f9ca472b9ced8ff69d2d195", + "acaf4baf3681ab865ab9abfae41697141ead9d5e98523c2e0e1eeb6373dd15405242a3393611e19b693cabaa4e45ac866cc66663a6e898dc73095a4132d43fb78ff7166724f06562fc6c546c78f2d5087467fcfb780478ec871ac38d9516c2f62bdb66c00218747e959b24f1f1795fafe39ee4109a1f84e3f82e96436a3f8e2c74ef1a665b0daaa459c7a80757b52c905e2fb4e30c4a3f882e87bce35d70e2925a1671205c28c89886a49e045e31434abaab4a7aed077ff22c", + "84cb6ec8a2da4f6c3b15edf77f9af9e44e13d67acc17b24bd4c7a33980f37050c0301ba3aa15ad92efe842cd3ebd3636cf945bb1f199fe0682037b9dacf86f162dadabfa625239c37f8b8db9901df0e618ff56fa62a57499f7ba83baebc085eaf3dda850835520344a67e09419368d81012168e5de5ea45158397af9a5c6a1657b26f319b66f816cd2c28996547d697e8df2bb163ccb9dda4d6691dffd102a13667ab9cde60ffbfb872187d9c425a7f67c1d9fffff9276ed0aeb", + "6a52c9bbbba454c14540b2be58230d78ecbeb391646a0c6fcce2f789086a78364b81ae85d5396d7cfa8b46bda41e3083ec5cf7b4c47dc601c8a697df52f557defca248506dbebab25657f5a561d09625b7f4b2f0119a12beeac087efc9d350a735c35d2431c1da7dda99befb17f41a3dc4da0f00bb95366be128538ce27763d81f832fe3c1d4efc07b5b08ad8dc9e65fb5e48546664e18cb2d3bb3fe1f56fa7aae718c5e3bbdeaf70e15023f6a25b72a2d177fcfd04211d40664fe", + "c3c4d3b31f1f5f9538923df3478c84fffaef411520a542da9a220ee4132eabb9d718b5076fb2f985485e8ba058330aed27ddfd3afa3db34aa60301088caec3d0053828c0c2bc87e2e61db5ea5a29f62fdad9c8b5fc5063ec4ee865e5b2e35fac0c7a835d5f57a1b1079833c25fc38fcb14311c54f8a3bd251bca19342d69e5785f9c2e43cf189d421c76c8e8db925d70fa0fae5ee3a28c4047c23a2b8a167ce53f35ced33bec822b88b06f41558c47d4fed1bfa3e21eb060df4d8ba1", + "8d55e92136992ba23856c1aea109766fc44772477efc932b3194af2265e433ed77d63b44d2a1cff2e8680eff120a430fe012f0f09c6201d546e13ad46fc4ce910eab27bb1569879abed2d9c37fae9f1267c2216ec5debcb20d4de58461a621e6ce8946899de81c0add44d35e27b7982a97f2a5e6314901caebe41dbba35f48bc9244ca6dca2bdde7306435892f287036df088633a070c2e385815ab3e2bfc1a47c05a5b9fe0e80dd6e38e4713a70c8f82bd32475eea8400c7bc67f59cf", + "5016284e20362610fa05ca9d789cad25f6d43263787e7e085476764ce4a8908ce99b262b375e9d106170b1bec1f473d5e777e0c1896533040e39c8c1465e07907ef5860e14e4d8310013e35f12090e0bfc687474b1f15f3dd2033a0edac5246102da4deec7e188c3517d84d9c2a0a4497a4c5f82a30f1ba009e45ee6eb3ab4368c720ea6feee428ffd2c4cc52debb8d634a64176572c72368f94a66689f23f8a01218f532117af5a8060d140e7ca435a92882fcb5630ebe14a4805f1dc83", + "05456ec59b8d41bbd736727976b96b38c43827f9e16169be673ff37870c2ecd5f0d1ea1a136be4cc7b047a02a4421d484fd2a12ece418e42ee391a13a0b1df5a0162b29ab70d3fe3e04ba6ab26b37d62b7cf05a5e2f033611bf970b8e1f30e198e483e740fa9618c1e8677e07b61296b94a9787a68fba622d7653b5568f4a8628025939b0f74389ea8fced6098c065bf2a869fd8e07d705eadb53006be2abb716a3114ceb0236d7e916f037cb954cf977720855d12be76d900ca124a2a66bb", + "eb6f60b83fcee77060ff346aaf6ec34d82a8af469947d3b5074cde8eb26566eb1fa039bcc707738df1e95869bd827c246e88436f0614d9834ead5392ef376105c4a9f370071cdeaaff6ca0f18b74c3a48d19a717253c49bd9009ccbfdd5728a08b7d112a2ed8dbafbbb46d7a75dc9a05e09bfde1a0a92d74a51887f9d123d7896e9f9d0057b660ed7d55454c069d3c5260411db4cdc67e7b74f680d7ac4b9dcc2f8baf72e15e6b3cafebcdf449a6436ed2c398b675f79c644747c57553bf7ea2", + "187a88e88514f6c4157c1ba40b442baae1ae563a6c989277443b12a219aa484cb9fa8adbb9a29d429f50155321b15664926317477079c7060dfdaa84c1d74bba78892c34e6f21ad35208d2ae622012401696bff5cd57b6485944b3db7b9071fa5f57fbfb1085d91bb9cff5808d662cdc6c8157249478262c44b7fbc397ed42a4977b202e817717bfccc9f0467294062313f7705251ed09573f16d23429361fada259dfb300369c4198f07341b38e84d02cdb74af5de6aab1fc2026208ea7c418c0", + "be31bc96606d0fab007e5caeded2f1c9f747c759777e9b6eef962bed49e45a1d4fc993e279d024915e600865ecb087b960584be18c41114d3c43f92169b9e0e1f85a0ebcd4e196376ccdc920e66103cd3b1c58407d0aafd0e003c4e341a1daddb9f4faba974362a32f35db83384b05ae8e3322d728893861afd8b1c940de5a17f691e763ce4969b6d94f67fb4a0235d100225bd8602f291388f0ca4a568748ad0d6040f1262eac2aede6cd27419bb78a394c1ffad72c262be8c3f9d9619d633e51d0", + "4d83d85ca838b4518588f2a90228a4dd18f14dd5b4c012d26298a97d848abbd825d221d02cceb6e8c701b4ad00e1dee4889b5c533e4bb60f1f41a4a61ee5478be2c1b1016c30345afd7a5253668260515e70751f22c8b4022d7fe4877d7bbce90b46531507dd3e89549e7fd58ea28f4cb23d33662bd003c1345ba94cc4b06867f778957901a8c441bee0f3b12e16463a51f7e50690356971dd73a686a49fda1eae46c9d54fba262811d698025d0ee053f1c58591c3bb3cbde69de0b31549ef5b69cf10", + "cdeb07d36dc5f9a1cd717a9e9cca37a2ce93caa298eee63571f7d6c5fde2a11c666cf53cf2dcb41ca2ea2319e7230ca68e38c647905928713a13982bf47fe33d7095ebd50b2df976208920a43eb2e29b942f32467403c45cea18bf44e0f6aeb155b48a8e5c471fec972a9d62f7ae093d2758f0aaec7ca50cb4725bfa219f1a3a46ad6bde7361f445f86b94d66b8ece080e56c510250693a5d0ea0ae87b4421860b853bcf0381eae4f1bf7c5c0472a93ad18407bc88475ab8560d344a921d3e86a02da397", + "a598fad52852c5d51ae3b10528fc1f722e21d44fbd42ae5acdf20e85a28532e646a223d27fd907bfd38eb8bb75175636892f8242877aab89e8c0824d368f3339ce7a82aa4e5af6db1f3b588a4d667a00f67bee37cfd2724dde06d2909fb9e58d892f4cfd2c4ca85acdf8256f5458b030a6bda151154ff2e6d7a8da90b54a2884c8a99fab5a4ac211ff23dc0975f4f592fd1b6b9dc7783bdcd2d4ca4e68d2902f2013e122cb62e2bff6b0a98ec55ba25837e21f1cfe67739b568d43e6413dab2bd1dc471e5a", + "17b68c74c9fe4926e8102070916a4e381b9fe25f5973c9bd4b04ce25749fc18931f37a65a356d3f5e5a1ef125d546f4f0ea797c15fb2efea6fbfcc5739c564693d47adeb12dcb3d98a2830719b13247792cb2491dca159a28138c6cff925aca42f4fdb02e73fbd508ec49b25c60703a7595a3e8f44b155b371d525e48e7e5dc84ac7b17c52bf5e526a67e7187234a2f19f57c548c70fc0b27183df73ffa53fa58b658034c896fa791ae9a7fd2620f5e46ce84c842a6e60e9324ae4db224ffc87d9617cb85ca2", + "b9e4267ea39e1de1fed0579f93bb351007c9f8fcdd811053fae33f09e2753d7428f04e1a9efcd45ea701a5d87a35b3afb2e6b65365dee6ead0bbb611b7797b212ac688653f542e604a39df277f12514ddfee3b4e27b98395c2cd97a203f1f1153c50327965770802ec2c9783edc428271762b275471e7ac65ac36523df28b0d7e6e6ccc7674268a132a63411fc82c0738dbb68af003b769a0bf9e6587b36476cb465350fee13f88ea355d47ffac7b0f964f4139db11b7642cb8d75fe1bc74d859b6d9e884f75ac", + "8ca704fe7208fe5f9c23110c0b3b4eee0ef632cae82bda68d8db2436ad409aa05cf159223586e1e6d8bdae9f316ea786809fbe7fe81ec61c61552d3a83cd6beaf652d1263862664df6aae321d0323440430f400f291c3efbe5d5c690b0cc6b0bf871b3933befb40bc870e2ee1ebb68025a2dcc11b68daadef6be29b5f21e440374301bde1e80dcfade4c9d681480e65ec494a6af48df232c3d51447b9d06be714949249c44c43cf73ed13ef0d533e770284e51369d94ae241a5fb2f163893071b2b4c118aeaf9eae", + "4fd8dd01012bb4df82bf42e0683f998e6f52dd9c5617bae33f867d6c0b69798cead8179346d70acc941abbbdd26e3229d5651361d2252c72ff22db2938d06ff6fc29a42fdf800ae967d06479bc7bbb8e71f40b1190a4b7189ffc9a7096cdb76d40aec424e1388e1eb7ef4ac3b34f3f089da8fda7d1927f5d775c0b2801d22dd1265c973158f640cec93edfed06dc80b20ef8c496b98289d54d46ccd205951cbb0f4e7daeb866b60bacb483411e4382b6f04d472843186bd0e31fbaa93e5c901ec028efafeb45fc551a", + "e9ee1b22b04b321a5fdd8301627011f583887d77560fb0f35552e207561f81e38ac58a0d0aeaf832d1ee72d913720d01f75574e9a321864fe95f4d0d8f0b8db97649a53e71e940aede5c40b4b9105daa42a6fb2811b61209247534cbaf830b07abe338d75d2f5f4eb1c3cf151e9edabe2c8d5f6fff08fac1495ef48160b100d30dcb0676700bcceb28723a29980ab0766a93abb8cb3d1963007db8458ed99b689d2a7c28c788743c80e8c1239b20982c81dadd0eed6740c65fbc4ef15c7b5569cb9fc997c6550a34b3b2", + "ec01e3a60964360f7f23ab0b22e021815765ad706f242265ebc19a2bb9e4eac94393952dcf61aae47682671a10f9165f0b20adf83a6706bfbdcf04c6faba6114653a35584267267873291c6fe7ff5f7695243143421509502c8875aafa9e9afe5be5ef2c851c7f35d69be5d3896000ccdbbfab5c238bb34d607cfe2d55d748880545b4aa7ca61137992925189025c62654b1f20d49c3ccd75aa73ce99cd7258dabedd6480a9f5185531fc0118beb68cc0a9cd182f6973287cf9252e12be5b619f15c25b65c71b7a316ebfd", + "db51a2f84704b78414093aa93708ec5e78573595c6e3a16c9e15744fa0f98ec78a1b3ed1e16f9717c01f6cab1bff0d56367ffc516c2e33261074935e0735ccf0d018744b4d28450f9a4db0dcf7ff504d3183aa967f76a507357948da9018fc38f150db53e2df6cea14466f03792f8bc11bdb5266dd6d508cde9e12ff04305c0295de29de19d491ad86e766774bb517e7e65befb1c5e2c267f013e235d8483e177214f89978b4cdc81aa7eff8b39f2825ad3a1b6ac1424e30edd49b067d770f16e74dd7a9c3af2ad74289a676", + "00e40f30ae3746edad0f5dd03d0e640933cf3d1694804c1e1ed6399ac36611d405196ee48f129344a8512feda16a354517871322bd5d9c6a1b592933eab531923efb393ffb23d9109cbe1075cebfa5fb917b40df028a621460ff6783c798792cb1d9635b5a6f84ec13918fa302924649b5c7fcb1f7007f0d2f06e9cfd7c27491e565a96c68a0c3644f92cd8f38857258c33801c5d537a83dfe583cba59d7eec7e394199c0a2660a62fabe3ed2099d57f315a6cd8de1a4ade29d977f15d65759cff433e5ac0c182aef3761163e1", + "3c5ea24d0d9b618294a263f062b2414a722be4eb10dfc346a6ec3b821d7396eba61cd6ef33618b04cd087a811f299d4606820227f16000d7c839062b96d3e3f59cd1a082448d13fc8f56b3fa7fb5f66d0350aa3b72dd7c165d590282f7da2e12cfe9e60e1796122bb8c2d40fdc2997af634b9c6b127a893dfb3467909378300db3da911be1d7b616bb8e0572433e65527e15d936500a2c60e9f9909dcf22ab5e4b6700f0238c205b4a813626fac3d945bab2637fb08203044a73d20c9a3fcf7c3fc4eb7807c3276dd5f73ce89597", + "9271aeeebfac46f4de85df78f1bfd36136aa8905e15835c9e1941176f71e3aa5b1b131843d40479735e23e182a2bd71f66f6149dccb7ed8c16469079dc8590bbf165374951785f4531f7e7361de62f936cfb23a2b5bdf186632e7042a0dd451fdc9b7208f923f3a5f250ae590ec348c63a16c3aacaf7379f53b5dd4152dcd40d23e683e2156e64c592ffc07e2cd6bbeebef4dd590b2f6b2bcbf08fcd111c079f5c4033adb6c17574f8756ecd87be27eff1d7c8e8d0324438d59ae171d5a17128fbcb5533d921bd044a2038a5046b33", + "4e3e533d5bcb15793d1b9d0468aaee801f32fdb486b11027183553a09ddbee8213924296f2815dc61577297459e834bf1c7a53f87d43782209e589b8295219ba7073a8fff18ad647fdb474fa39e1faa69911bf83438d5f64fe52f38ce6a991f25812c8f548de7bf2fdea7e9b4782beb4011d3567184c817521a2ba0ebad75b892f7f8e35d68b099827a1b08a84ec5e8125651d6f260295684d0ab1011a9209d2bdeb75128bf5364774d7df91e0746b7b08bda9185035f4f226e7d0a1946fcaa9c607a66b185d8546aac2800e85b74e67", + "b5d89fa2d94531093365d1259cc6fe8827fea48e6374c8b9a8c4d2209c280fa5c44958a1847222a692a59e6aa2696e6cdc8a543dd89b0ce03bc293b4e78d6ef48e1839694ccd5c65661143095c705b07e3ced84a0f5959114dd89deb956ab3fac8130eb4a878278205b801ae41a29e34146192308c4e759b374757b0c3b00319bce92a1b95a4d2ee179fd6714ff96155d26f693a5bc973f84ac8b3b91e3926276297532d98b46992a3f104c08100bf1671c43134bac280c617da711e90a0100137525375ebb12802a428885ae7fce6514a", + "40e3d8048fc10650cb8a7fc2e7113e26dec34f9ca2d5129cd10a8e8e44d113d61ee48c7d003e19fd307fc6debd70feb30243f298c510ccc4418355ce143066f067ad7c6de7288c3080e7ad46a23c8d34deb55a43e652fe90444ad3c57d3ec1e1c489d63ef915a24bc74a7925a0a7b1e1523f21ca8fee78df24e3d0a68d0013423db97c280799a0618229c0f2c167289a891e5c8d6661ab21285951c31710e3b5fe55f6347fe16d9b40507948a59252efeb616df83e5c098b07d0a7247cd371daff0e50491c582503fd89f79ba94d6af9ed76", + "1fa444de01dd3901e2b4684e3d7a799ffa02d85afd35fb30fe4c9d672837bee6dd8a3b8608b4bb5e589220ad5a854f46b46e41c6d57ad124a46beab4169ff69fee7e3838a6165e19dad8eb5d7bf53d4edd3cd2769daf219510a02fdd2afe0c0e1da3cd30fcd1aa88b68965586f07a25a1720fbd90a096ea30fc8e945e3637d7857c8a9c0ab4154ffb2000e57b5f9adfa4e4eaf8065bc3c2b2e75f495963325588785a6ce417dcddffd299873b15dcccca128d63cd4eeeadb64cda28099a9ad7c80d34844901f26b88b00b9aafeb2f90286d29d", + "fde0a0d9d813983bd1f55cf778a003a2023b34a555322ab280584537bc6bdd844d22a7d6066c18da83ec09f3d8d5a1aab4be0d5ce19b436052f6e259a4b49017a1f47f1fe2bf115d5bc8599fb216351c60dd6b1bedb2e6f4dcadf424b833501b6f099cbfad9e2290680fb69c25032b42a6274f7cb9b5c5950401354838a45f7cb77b95bf54718e2f3d3d9fb91eb2311903980277396398d9736d8e92fd838594ac8a537c6c529db5a8a4f89290e6ba6f20ac0e5ed6fef40901d0e0e8e3e502990811f9acaae555dd54eb1bcd96b513e2fe751bec", + "9f8e0caec87858599f5ab29bff86da78a841a918a023a111098687ecdf2747612d3f3809d9ca400b878bd4f92c43a1004f1c17c7f19a3cd1ce449bd2b23aff551623c37dd8c0be56bf3fd857b500c2b9f9ccea62481944090a3cf3b6ee81d9af8eeb60f65ef150f9fa4d3ed6ce4762d3d4f174ee8ccd460c25cafac0ea5ec8a6a4b2f9e8c0520cb7061155e532cb65f188b01e4b9086db951f504b060c296b326b3fc1c590498ecce594f828f4a10ea416675720ae505295d38a791bd0e93f428448a8f4c1fc0af53604a9e8255384d29ae5c334e2", + "33d1e683a4c97ee6bbaa5f9df1a88cb53b7f3c157b6045d70a56fda0ccbd3a1fa1f049cd564da072b53f415bf5fb843771c1d2551fd075d33377362b2f7c0645f9723123d11975991db8a2b518f02e2c7c30342a044754290bae2c77496d755e5981f12e6b0a0174280b958bf11ed628a9062775993ced04bf752ea8d165e3ac2177d7cd1b9371c44efa98f0b3e68602a839d384eec007979f46429dafb138cbc231ad928a9f65f7d66fac77416395e8f1debaaf76ec2e4e03e8674102cd26f614739f3ec9f949033df1fb97e87c2326d65aef94ed5f", + "180048f09d0b480887af7fd548a85abf605440c1ddde6afe4c30c30670233f7bf928f43b4681f59279ebbda5e8f8f2a1abefdee129e18ac60f9224e90b38b0aabd01308e0a27f41b6fb2ee07ee176ec9048c5fe33c3f7c791469c81f30e28170585b9f3e7e3c8c2e9d74370cb4518f13bf2dee048cbd98ffa32d85e43bcc64a626b40efb51ce712925fdd6fee006dc68b88004a81549d2121986dd1966084cd654a7c6686b3bae32afbd9625e09344e85cf9611ea08dfce835a2e5b3726e69ae8a76a97db60fcc539944ba4b1e8449e4d9802ae99fae86", + "13c0bc2f5eb887cd90eae426143764cf82b3545998c386007cca871890912217aa143ac4ed4ddb5a7495b704aa4de18419b8664b15bc26cfc6596a4d2ae408f98b47a566476d5802d594ba84c2f538def9d016661f6404bb2337a3932a24f6e30073a6c9c274b940c62c727242e24466084a3ea336365d71ea8fa6499c0ea8d59eea505f1126b99c795023c4963aa0d99323d0391e8701110edf551b2d3799e1063ca443f1add162156e445502ca1a052fe70c289838593b58839fc63de128a03e2bbf389e22ae0cf957fd03315ee407b096cc1cfd92dee6", + "6f1eb607d679efef065df08987a1174aab41bdac8aece7726dfa65805d6fff5b3d17a672d96b770dc32165f144f0f7324822a5c87563b7cd9e37a742ae83ef245d09006d91576f435a03476f509ea2936636232f66aa7f6cdf1ac187bbd1fcb8e20f8791866e60ed96c73374c12ac16795e999b891c64507d2dbd97e5fc29fac750ad27f2937cbcd29fdafccf27ab22453834d475f6186eaf975a36fad5c8bd61c21da554e1ded46c4c39765dcf5c8f5ccfb49b6a4dc562c919d0c7d8940ec536ab2448ec3c9a9c8b0e8fd4870cad9de2577c7b0c38563f355", + "dcdd993c94d3acbc555f464871a32c5da6f13b3d5bbc3e34429705e8ad2e76393fdd96a69a94acb652f5dc3c120d41187e9aa919669f727c4868013b0cb6acc165c1b7706c52248e15c3bf81eb6c147619467945c7c48fa14a73e7c3d5bec91706c567145342a026c9d97eff97ec672c5debb9df1a998083b0b0081d65c517b3e5634c95e347e781aa30ca1c8af815e2e494d844e847fdcb41622894a518dc36571123a40bfdbe8c4f4cff44d83c61dd9dcd24c464c53b395edb31efee9f3aa080e87cdc3d22d613ae84a53c9249c32c96f9a3bc4629bb126a70", + "49971f9823e63c3a72574d977953329e813b22a8387cd13f56d8ea77a5d1a8a20012632d1d8732bbcb9f756b9675aab5db927beacab7ca263e5718b8dfa7b2eed9a91bf5ed163b16139d45f7b8cc7e3f7bdda6202106f67dfb23b7c315ee3e17a09d466b1e6b13e7c7428184a979f5358667b4fa8bd40bcc8ea46058db44587a85377ac46bf155136c09ac58cb6c27f28e17028c91e7e8f74d5b500e56293b316974f02b9d9ea205d9b6ac4cfb74eb8eb0c944577fd2f41316368307beab3e327bf7dbaa0a4428836ec4e895dea635234abeaf113ceeadac33c7a3", + "c57a9cc958cee983599b04fe694f15fb470fcbc53e4bfcc00a27351b12d5d2434444253ad4184e87b81b738922ffd7ff1dc1e54f39c5518b49fb8fe50d63e3935f99e4bd125e8dc0ba8a17fd62de709339a43fabe15cf86d96a54010112170c340cfac4132182eed7301402bc7c8276089dec38488af145cb6222525894658f03501204b7a66aba0be1b557b28a2f652d66f7313ed825ecc4d8596c1be7420d4425b86a1a90a5b7f30d0f24e0d1aae0eb619ca457a71699e44be612a4011c597ee80b94d5507e429d7fc6af22579cd6ad642723b05ef169fade526fb", + "0568a672cd1ecbaa947045b712e2ac27995392fbef8f9488f79803cbee561c212287f080eca95adb5ba42739d78e3ba667f06045d87850d3a0499358649caa257ad29f1a9c511e7054db20554d15cbb55ff854afa45cae475c729cea72ede953522031865bc02b95589ed4d9841c552a8cc94904a93ed09ed77222f6c178195056be59bc4e96a815adf534e6b466fb47e262ff79c803c157a21b6e2269c2e0abeb494113cd868d8466e82d4b2f6a28b73645853d96bc9242515d803e33294848d3fe42fdff68da53c03491636beede47ff1399dd3d54a5e914d55d7adf", + "3f19f61a4cd085796731ac9f85a75a8bce77031932c31762d87d8b8d07b8bd19ff78d6b7d1bd1e87f3a4f41aad03b6c4d17a6cbc86be55f7c8b88ada047bb04f8d49f1c34bcf81cc0f3389ad01a758fc7eeb0072aa9ad1481992bfdde82e438e75590a4423832dfbe3756e2229ea873bc3606e6d72174cb2163bf40b5d49c81009dab85ecc03e311351bbf96e32c030a2b276a7698cb25bc2c967acb3213161a1fdde7d912cd6a804490f8056c47da1333f6e35c41e749c2c23919cb9af5eec5652e6e072b034fb1682e9aaa194a9c0bd456ea0b008d14dbce37967a7a8e", + "705f98f632d99d3651793825c38dc4deda56c59eac539da6a0159c83131cf8ab6f2ee0c3b74111fde351f7aa1a8c500a0cecab17c212d2c58ca09eae608c8eefc922b9902ef8d6832f799ba48c3c28aa702b3242107edeba01daafe424406a3822965056cfe8783455a671e93b1e2eae2321364f1871471c82124df33bc09e1b52882bd7e1c4c7d0b2f3dd4a28c2a002a43246768af0700f9659de99d62167be93177aabf19d678e79e9c726ac510d94e74873eda99620a3961930cd91937c88a06d8153d64fd60da7ca38cf26d1d4f04a0df273f52127c53fdc593f0f8df9", + "ea6f8e977c954657b45f25480ff42c36c7a10c77caa26eb1c907062e24fbca5aebc65cacca0de10abea8c78322f08672e13d8ac16996eca1aa17402eaea4c1cc6c800b22dc18cb8d620192d74bac02c07b5cfa61e513c7f28b7e29b9700e0e442720bf4c669d4995da19d19f841d9eb68cc74153592591e3bf059ef616b95305aa453b32fe99a91afb35bd482cf2b7aa42702837a53be3c38883d2963020e347556f841254ec6b85854485fe8c520b05f2ea67a9bf3981555c20991e2bacd4db5b418228b6002d8d41c025cb472bf5443aaa885974a408ea7f2e3f932c600deb", + "408190134ed06556811b1af808ab2d986aff152a28de2c41a2207c0ccc18125ac20f48384de89ea7c80cda1da14e60cc1599943646b4c0082bbcda2d9fa55a13e9df2934edf15eb4fd41f25fa3dd706ab6de522ed351b106321e494e7a27d5f7caf44ec6fadf1122d227eefc0f57aefc140d2c63d07dcbfd65790b1099745ed042cfd1548242076b98e616b76ff0d53db5179df8dd62c06a36a8b9e95a671e2a9b9dd3fb187a31ae5828d218ec5851913e0b52e2532bd4bf9e7b349f32de2b6d5d3cdf9f372d49617b6220c93c05962327e99a0480488443349f0fd54c1860f7c8", + "5f9e5c6f38573a85010a9d84d33f29c057003b2645e3ea6f72cbc7af95d197ce6a06b13fea81722853e6991791b8b15091cd066f5ed913592ed3d3af5370d39ba22beeb2a582a414b16824b77e194a094c2afdcc09aa73ce36f4943cca5ae32c5017dc398801dd92a47382d9327c9f6cffd38ca4167cd836f7855fc5ff048d8efba378cdde224905a0425e6b1de061fc951c5e624a5153b008ad41160a710b3ff2081748d5e02deb9f841f4fc6cf4a15153dd4fe874fd447482696283e79ee0e6bc8c1c0409baa5ab02c5209c319e3169b2476149c0c6e541c6197ca46e004eef533", + "218c6b3508aec69574f2b5039b30b942b72a8349d05f48ff945bbbe5c8957d5a6199492a6bf54bab821c9377e2edfa4c908384664d2c80112d5e805d66e0a551b941021be17dd20bd825bea9a3b6afb1b8c605805b3bda58750f03ea5c953a698494b425d8980c69f34d1c3f6b5866e8717031152a127215c256e08873c21b0f5cc85875d0f7c94601659150c04cd5fe5d381ba29983a2d94fcd3a65a94c53c7279cd000dddd4253d8cff8d7f6ace10247fe3bc30d63ba4bb54f557b3d22a3924369430d71ab37b701e9500bda70b5a643704858beed4726a889b6c9c91584194c68f1", + "dac26aa7273fc25d6e044c79fc2bfa46e59892a42bbca59a86826c91e76ab03e4bd9f7c0b5f08d1931d88b36ea77d94f7ba67cd4f1d3086e529427201119096ae066ae6f170940830ed7900de7bb9d66e09788287403a4ecc93c6da975d2fb08e918840a236c15f5d3a8f7375c2eeebbf6f01a6e7f29ca2b8d42df158414c320777433663c59fdcd1f39ca68e3473db721be7ce8c6dba5fddc024f94fedb286b0477581d451313ca8c737484daf60d67f9b2d56d4bcc271f7e9ae958c7f258efbc74d25753e0516f28282461941bf2dcc7dd8c7df6173b89760cefcac07190243ff863fb", + "c46e6512e6797cc7a54254a1b26b2de29aa83d6c4b1ea5a2786fbcec388270625b12635eae39e1fba013f8a65219421bca8b52a8ddfd431cda60299bdf160734d5a7450ec79620058522702174ae451b9bfa7c4a455fbbee3e1d048c7d4bac5131018228f137c8e130440c7059b4f15eaa34ce872a851a16ce86f982df78a00be4d564da2003a450ddee9ab43ea876b8b4b65c84f0b39265fd5456417afb5bc54997c986e66fc222f2123ba5e719c4d6b9a177b188277df384f1125821cf19d5248cef0be183ccdc84ac194506f740ed2188b2689ea4c9236a9e9e3a2fff85b6af4e9b49a3", + "1ccd4d278d67b65cf2564ecd4de1b55fe07adc80e1f735fe2f08ea53fd3977323689122c29c798957abaff6aba09bdcbf661d77f4dc8913ab1fe2bef38846166e3834785e7105d746484eff8c656af5d8c7854abc1c62b7fadb65521dc6f793d978bda9838eb3800417d32e8a24d8c8cb1d18a5de6ca79d9e1b0ff9aa25e6218fe944cf18666fecc1e31334b390260dbe0997539e1b02f6366b2aea4f4a21efe04f4b97568fcb39e59919d5ebac6543d5d0f48fc66b923c34aac377dc95c20329b837b6ed5e8d9a3d2089cd0d8f025658006ff41cbdaccca618822ca590ab155253f8bc1c7f5", + "9875209588395ee3c9fdd793fd48717cc84c8c3ea622b2ccc4a1be4448e6034b7810569855255031f10be5ffd714b05f9ce01972d712d40abf03d4d0ce175813a7a668f761324996093fc2aa5912f7fc2abdadd8775d2b4d9ad492216293381460ed8f6db3d641d1525f4242c348bbfe504c704f215dc461de51b5c75c1aae967936963848f16c673eca5e78dfd47eb19001d52d1bcf96c98956dad5ddf594a5da757e7ca35f2f69803b784e66ac5a58b75c228b8266ec592505e5d1ca87d81225738855f15bc0914677e81593fd409e77d159f8a908f67788de9eb06c5561547aada96c47c535", + "40c90e375e366f3756d89091eb3eed9fe0fbfc5638700af4617d358812bac53124a2205dd6756456787d49cd6a35e302479a0992288f47532e4ea7ab62fc5ad5adc690a5d9a446f7e035ad4641bd8dae83946aee3338ec984ccb5cc633e1409f2531eeffe05532a8b0062ba99454c9aeabf8ecb94db195af7032bfebc22912f49d39330add47ff8fa5720612d697f0b602738930e060a1bb214efc5e292224cf34e29deaea6b1b1ff847e94ecc997325ac38df61db45d82bf0e74a664d2fe085c20b04c39e90d6a170b68d2f1d373f00c731c524456ada73d659aaac9df3191a7a3865083343fc13", + "e8800d82e072210ca6d7fa2472028974780b76aad4bcb9ad362422dd05ae3232668251d164daa375a43b26a38cce28dbeb3dee1a4a579f70d0fe7febb29b5ece8aa836e050fb3d188c63aa9c3c0da6c717d86458a6096b5effceb964efdec7035960c09ccd10dea3c5f1c7f9f478d5887ebbe2e15c5ff85dbacbc444bb951c4eec7abecb89ed80187e409e2972ffe1a5f01562af109f2cf09471cf72cf83a3bb8f4e2ef38ed0e326b698296394e5b2718a5000c01425708e8ad0461e62462d8819c2377f13ab1be2c7c9f33dc06fe23cad27b87569f2ce2e56e4b2c60c7b1b3d370841d89ebdc1f192", + "796d6d1447d5b7e8c55cd8b2f8b7010db39f27565f907e3fc0e464ea2d4bb52b37f10e7c6dcfc59231b9cdee12c32aeb4adbc42b86e86eb6defb5b69e6ca75e1f4d0dae3e124e5a1b8b6697f7e10b0403f1f0a5ff848eef3752837a9ba17780f16a9a709188a8d5b89a2fa74adb2e651163b1c2b3d261e225c9158dcd9eb7ac3d6704cee290cdff6bcb3cb90cee030aa0d19d4693655c3c30ac6fc06d2ae37787c47126d57ed9a6bef5f8a6c56859aefc08755739a95aac57a4dd916a92ba9f3afbf969df8085949615033365c751a9a3e1a18cee98a69d22e64009bebf8307169b6c61de0617ecfafdf", + "4f9057183566153cf337b07c3f5556006de54c56b2a1e5326c07aaeabd1886ec6f1641358925db232b2f0dbf75229c796a7395b2f934c1f99090bec1123f3c841b1cb3c5b1ec42ed5408f2940f0c48a9470b852c46d6557853d459cecd2c32bbcd8ee21fa11e385eef0857cba4d8545a61b52a484cdd779db4739fbc7aa9860dcabe0488b98fa0b60c3f7d6153db279000a52ffb573dab37d2ab1896a90e5deb7ac6bbe56239085c325d83a917dc6e8a448425b718c2356b9f3066163555ec444f372e184e02c8c4c69b1c1c2ae2b51e45b98f73d933d18750968945ca85d6bbb22014b4c4015262e3c40d", + "79dcca7d8b81a61359e4aece21f3df7b99518ce70bd2f57a18bab5e7114af2add0a0cea7f319d69f231f060e0a539d9a23fb3e95451ce8c6340cfb09edf931df84203a39226dd9eb278f11b691ef612585b973daab373e65d11325898badf6732100371fd759960fa8fec373268421d28bffdb9b12a430b92fe4b07566ca0c89e616e49f8fc75ccd9cdc66db820d7c02e109aa5ed86b89770262918a518f90a2292f6b68d68ae03992e4259a17a23c84ec2a417f082b5abf3a26e44d2278ecb8ba9456965303a75f25394d1aaf5544590e74b14d8a4cc4050be2b0ebcfe4d2db6b12a02c68a3bcdda70301f3", + "848755dc31e25e9a42f9ec12d847d19f292c14c162c9aba49e972cb123b58b8e57bb263a923929833373858594ff52dbc298dbbc078599194e4c07b0e5fc1e10808bbacdb6e93c72b333685cf961f28eb0d5a395c63266b01f130d25db384b356e5da6d01042fc2359581b89c63b3bb2d1ce897fbc9e83fe85d9666cb60e6a8c657f70caad5387b8a045bf91095606802c8424ea8ac52ef29386dc46183378a5fcb2cb927428b8c070f1c42aafd3bc70ca25437807696a46873cfeb7b80ba2ebc3c4272443d445e46343a1465253a9eebd532a0d1d2c18264b91ff45159f245404ae9335f2af55c802772426b4", + "ecaa6e999ef355a0768730edb835db411829a3764f79d764bb5682af6d00f51b313e017b83fffe2e332cd4a3de0a81d6a52084d5748346a1f81eb9b183ff6d93d05edc00e938d001c90872dfe234e8dd085f639af168af4a07e18f1c56ca6c7c1addffc4a70eb4660666dda0321636c3f83479ad3b64e23d749620413a2ecdcc52ad4e6e63f2b817ce99c15b5d2da3792721d7158297cce65e0c04fe810d7e2434b969e4c7892b3840623e153576356e9a696fd9e7a801c25de621a7849da3f99158d3d09bf039f43c510c8ffb00fa3e9a3c12d2c8062dd25b8dabe53d8581e30427e81c3dfc2d455352487e1255", + "23a3fe80e3636313fdf922a1359514d9f31775e1adf24285e8001c04dbce866df055edf25b506e18953492a173ba5aa0c1ec758123406a97025ba9b6b7a97eb14734424d1a7841ec0eaeba0051d6e9734263bea1af9895a3b8c83d8c854da2ae7832bdd7c285b73f8113c3821cced38b3656b4e6369a9f8327cd368f04128f1d78b6b4260f55995277feffa15e34532cd0306c1f47354667c17018ee012a791af2dbbc7afc92c388008c601740cccbbe66f1eb06ea657e9d478066c2bd2093ab62cd94abadc002722f50968e8acf361658fc64f50685a5b1b004888b3b4f64a4ddb67bec7e4ac64c9ee8deeda896b9", + "758f3567cd992228386a1c01930f7c52a9dcce28fdc1aaa54b0fed97d9a54f1df805f31bac12d559e90a2063cd7df8311a148f6904f78c5440f75e49877c0c0855d59c7f7ee52837e6ef3e54a568a7b38a0d5b896e298c8e46a56d24d8cabda8aeff85a622a3e7c87483ba921f34156defd185f608e2241224286e38121a162c2ba7604f68484717196f6628861a948180e8f06c6cc1ec66d032cf8d16da039cd74277cde31e535bc1692a44046e16881c954af3cd91dc49b443a3680e4bc42a954a46ebd1368b1398edd7580f935514b15c7fbfa9b40048a35122283af731f5e460aa85b66e65f49a9d158699bd2870", + "fe511e86971cea2b6af91b2afa898d9b067fa71780790bb409189f5debe719f405e16acf7c4306a6e6ac5cd535290efe088943b9e6c5d25bfc508023c1b105d20d57252fee8cdbddb4d34a6ec2f72e8d55be55afcafd2e922ab8c31888bec4e816d04f0b2cd23df6e04720969c5152b3563c6da37e4608554cc7b8715bc10aba6a2e3b6fbcd35408df0dd73a9076bfad32b741fcdb0edfb563b3f753508b9b26f0a91673255f9bcda2b9a120f6bfa0632b6551ca517d846a747b66ebda1b2170891ece94c19ce8bf682cc94afdf0053fba4e4f0530935c07cdd6f879c999a8c4328ef6d3e0a37974a230ada83910604337", + "a6024f5b959698c0de45f4f29e1803f99dc8112989c536e5a1337e281bc856ff721e986de183d7b0ea9eb61166830ae5d6d6bc857dc833ff189b52889b8e2bd3f35b4937624d9b36dc5f19db44f0772508029784c7dac9568d28609058bc437e2f79f95b12307d8a8fb042d7fd6ee910a9e8df609ede3283f958ba918a9925a0b1d0f9f9f232062315f28a52cbd60e71c09d83e0f6600f508f0ae8ad7642c080ffc618fcd2314e26f67f1529342569f6df37017f7e3b2dac32ad88d56d175ab22205ee7e3ee94720d76933a21132e110fefbb0689a3adbaa4c685f43652136d09b3a359b5c671e38f11915cb5612db2ae294", + "af6de0e227bd78494acb559ddf34d8a7d55a03912384831be21c38376f39cda8a864aff7a48aed758f6bdf777779a669068a75ce82a06f6b3325c855ed83daf5513a078a61f7dc6c1622a633367e5f3a33e765c8ec5d8d54f48494006fdbf8922063e5340013e312871b7f8f8e5ea439c0d4cb78e2f19dd11f010729b692c65dd0d347f0ce53de9d849224666ea2f6487f1c6f953e8f9dbfd3d6de291c3e9d045e633cfd83c89d2f2327d0b2f31f72ac1604a3db1febc5f22cad08153278047210cc2894582c251a014c652e3951593e70e52a5d7451be8924b64f85c8247dab6268d24710b39fc1c07b4ac829fbda34ed79b5", + "d7314e8b1ff82100b8f5870da62b61c31ab37ace9e6a7b6f7d294571523783c1fdedcbc00dd487dd6f848c34aab493507d07071b5eb59d1a2346068c7f356755fbde3d2cab67514f8c3a12d6ff9f96a977a9ac9263491bd33122a904da5386b943d35a6ba383932df07f259b6b45f69e9b27b4ca124fb3ae143d709853eed86690bc2754d5f8865c355a44b5279d8eb31cdc00f7407fb5f5b34edc57fc7ace943565da2222dc80632ccf42f2f125ceb19714ea964c2e50603c9f8960c3f27c2ed0e18a559931c4352bd7422109a28c5e145003f55c9b7c664fdc985168868950396eaf6fefc7b73d815c1aca721d7c67da632925", + "2928b55c0e4d0f5cb4b60af59e9a702e3d616a8cf427c8bb03981fb8c29026d8f7d89161f36c11654f9a5e8ccb703595a58d671ecdc22c6a784abe363158682be4643002a7da5c9d268a30ea9a8d4cc24f562ab59f55c2b43af7dbcecc7e5ebe7494e82d74145a1e7d442125eb0431c5ea0939b27afa47f8ca97849f341f707660c7fbe49b7a0712fbcb6f7562ae2961425f27c7779c7534ecdeb8047ff3cb89a25159f3e1cefe42f9ef16426241f2c4d62c11d7ac43c4500dfcd184436bb4ef33260366f875230f26d81613c334dbda4736ba9d1d2966502914ec01bbe72d885606ec11da7a2cb01b29d35eebedbb0ecc73ed6c35", + "fd993f50e8a68c7b2c7f87511ce65b93c0aa94dcbdf2c9cca93816f0f3b2ab34c62c586fc507b4900a34cf9d0517e0fe10a89d154c5419c1f5e38de00e8834fe3dc1032abdeb10729a81655a69a12856a78ca6e12110580de879b086fd6608726541cfa9616326bdd36064bc0d1e5f9c93b41278bff6a13b2494b81e238c0c45aea1b07d855e8f3fe1478e373bd9d3957cf8a5e5b9003386793d994c7c575cff2322e2428cbbaa4f47560316ae3354a7478842ff7cc5dcbacb6e871e72b36f06d63a9aaeb9044cfb7974afdc238a5816f537dcf33ee40b4e1a5eb3cff2402b46d548264e133008d284f11b7e4e450bc3c5ff9f79b9c4", + "8df21892f5fc303b0de4adef1970186db6fe71bb3ea3094922e13afcfabf1d0be009f36d6f6310c5f9fda51f1a946507a055b645c296370440e5e83d8e906a2fb51f2b42de8856a81a4f28a73a8825c68ea08e5e366730bce8047011cb7d6d9be8c6f4211308fad21856284d5bc47d199988e0abf5badf8693ceeed0a2d98e8ae94b7775a42925edb1f697ffbd8e806af23145054a85e071819cca4cd48875290ca65e5ee72a9a54ff9f19c10ef4adaf8d04c9a9afcc73853fc128bbebc61f78702787c966ca6e1b1a0e4dab646acdfcd3c6bf3e5cfbec5ebe3e06c8abaa1de56e48421d87c46b5c78030afcafd91f27e7d7c85eb4872b", + "48ec6ec520f8e593d7b3f653eb15553de246723b81a6d0c3221aaa42a37420fba98a23796338dff5f845dce6d5a449be5ecc1887356619270461087e08d05fb60433a83d7bd00c002b09ea210b428965124b9b27d9105a71c826c1a2491cfd60e4cfa86c2da0c7100a8dc1c3f2f94b280d54e01e043acf0e966200d9fa8a41daf3b9382820786c75cadbb8841a1b2be5b6cbeb64878e4a231ae063a99b4e2308960ef0c8e2a16bb3545cc43bdf171493fb89a84f47e7973dc60cf75aeeca71e0a7ebe17d161d4fb9fe009941cc438f16a5bae6c99fcad08cac486eb2a48060b023d8730bf1d82fe60a2f036e6f52a5bff95f43bbe088933f", + "f4d84ed3e564c102600a795eaa9b1eaf4ad12f1a4deca1d042a0a2750ddf6201db03073d8bf553cb9dde48a1b0083827a609f7242b86584cc180964ae794b12ce55661e00e36a6ba4dbc389e6a5a85f1b45df9af7ead1b0a54db56e68639b9d438a91504e82c35d40c7bc7e048a53ac0b04accd0dadf4ac9884b0ca0e3cb5ba4336e3581be4c4760a553823ffa283a1120d4e145af56a59f2533903650f0b9e9ad9fe2e8a3c3c3dd03a1fcb709032c8835324839c735b0c051d0cbd8b5d867617c11023432e4bd275d3d0eb98a0b6cf58071a5b712922f2bc751ac7c2588c447444cde2f37a8ea5ec126425bf517e0d17c9e2999f52fee14b3", + "2ccea21bac9c2b70d3923309cbf2d7cb7abd1fcc8b8b002688870a80029c62397350c3c898194e5deea360bb963d26d485cb7963f8167586976ec0556950b2e86135f4a2800991ce8473bfd44a3c5e937a48b5e355ba5141bccf2131a83988d9d2a9e8e7635a956105b3512c05ef708139ced51d7a4e204c12d8a49a21e8dc6de2629a2fd092326885d9f218745fe09f6d91fb6afce250a30a63689534b6be1f26899ffa3767d835cf586aa47776700f94241bc999b1e3deefe188f37ff734f5f16ee6a00914323dc7b8a143c9137cdcc5cd08ae9566f04bb2941532674c97dff6ffa5ce3405ef8e5d27ec403114253dd6394c0167d72a0044c5", + "2b681c6398aee63bf862770341648bbcd31d7de7903c5903fe3d9469311320bb24d914f2af0cdca199c97214c7c679dc32a2800ba484a03c010ea6be3bb9f2c87e30a98b606050b8a3f297f12b8f92caaeceb3e844652115934874e0a1ab093a73d759b53f6a6c3096940dd22c2bb96ce6820a7b9c6d71a208de9892aa6a7209b0fff56a0cafea52b952cdd6f5752cff3309d448800b4e4c878aa595595b56b12b83fcd6ca89520c7da664e449d7b4438fc455888aad5de0fad9a06eed14afd3513b5ebbffe01775549b701181bd26370764f56eba52fdb24286ad1ac0f5418a7c429f7dfc7f3168437fa8eed7a2ed7c723a485e4c3ed14dea2e07", + "aadfd505a89f4aade2c3018258a7e039401b1fc6a7f3d87910dddbb880d372ec8a13c70d92245de5b8e5f9a285c33b99dc82fa2b22decee72b93a72211656ad7a52696c8e570f78be28c0e427a371dafde856e8d5ed24f83b0660b51e7fac05d93a8666dfde6def59af863f80f3e5f6801182c87422203df390dcb736b8f830052a8832eeeb0b4e27e732aaf793d166b5a3ec7745aeef3766937c2b75a276bddd145f6010c29d035e343e267cb2d828436876ec3a7ebe3b6347d4172f7a99d6821ce152e039e53deb33340b324c7f068ffb94b3cde35a8eaa12d15c3806a7ad0acec3e8c7078c1d32a28fd3eec9f32cb86e4c22166ff69e83785e851", + "1605b8cce529a9d6262fd4390d9e4ae5e14e0adc0ec89b028ef68dd0f373ea259aaa96f2967091dd0874c0105385e9e6da9ca68297c31afa44ef834535fb302ce5b4e49edacbbdf359fe1228a8172495b3e57014c27edd58b685110980056c50c398a64f4923f2d720b4df16d75cb36b4233660694182099c35028a972519c24764fc94e18e582b24deb3491535fc06b83837c7958522800e822201d694af0bd0aa3834e17d4b1ba36f470905ae5f8bbeeb6c4c8604d8af02baa347b07086d6989867ddd5e8e8ed7740c3469bfa2810519c55c6add1332c4c54ee9097961d6741cb12a09713a0d07645f784f42f5ad94b48b836b34263130b0483f15e3", + "ff9c6125b2f60bfd6c2427b279df070e430075096647599bdc68c531152c58e13858b82385d78c856092d6c74106e87ccf51ac7e673936332d9b223444eaa0e762ee258d8a733d3a515ec68ed73285e5ca183ae3278b4820b0ab2797feb1e7d8cc864df585dfb5ebe02a993325a9ad5e2d7d49d3132cf66013898351d044e0fe908ccdfeeebf651983601e3673a1f92d36510c0cc19b2e75856db8e4a41f92a51efa66d6cc22e414944c2c34a5a89ccde0be76f51410824e330d8e7c613194338c93732e8aea651fca18bcf1ac1824340c5553aff1e58d4ab8d7c8842b4712021e517cd6c140f6743c69c7bee05b10a8f24050a8caa4f96d1664909c5a06", + "6e85c2f8e1fdc3aaeb969da1258cb504bbf0070cd03d23b3fb5ee08feea5ee2e0ee1c71a5d0f4f701b351f4e4b4d74cb1e2ae6184814f77b62d2f08134b7236ebf6b67d8a6c9f01b4248b30667c555f5d8646dbfe291151b23c9c9857e33a4d5c847be29a5ee7b402e03bac02d1a4319acc0dd8f25e9c7a266f5e5c896cc11b5b238df96a0963ae806cb277abc515c298a3e61a3036b177acf87a56ca4478c4c6d0d468913de602ec891318bbaf52c97a77c35c5b7d164816cf24e4c4b0b5f45853882f716d61eb947a45ce2efa78f1c70a918512af1ad536cbe6148083385b34e207f5f690d7a954021e4b5f4258a385fd8a87809a481f34202af4caccb82", + "1e9b2c454e9de3a2d723d850331037dbf54133dbe27488ff757dd255833a27d8eb8a128ad12d0978b6884e25737086a704fb289aaaccf930d5b582ab4df1f55f0c429b6875edec3fe45464fa74164be056a55e243c4222c586bec5b18f39036aa903d98180f24f83d09a454dfa1e03a60e6a3ba4613e99c35f874d790174ee48a557f4f021ade4d1b278d7997ef094569b37b3db0505951e9ee8400adaea275c6db51b325ee730c69df97745b556ae41cd98741e28aa3a49544541eeb3da1b1e8fa4e8e9100d66dd0c7f5e2c271b1ecc077de79c462b9fe4c273543ecd82a5bea63c5acc01eca5fb780c7d7c8c9fe208ae8bd50cad1769693d92c6c8649d20d8", +} diff --git a/vendor/golang.org/x/crypto/blake2b/blake2x.go b/vendor/golang.org/x/crypto/blake2b/blake2x.go new file mode 100644 index 0000000..c814496 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/blake2x.go @@ -0,0 +1,177 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2b + +import ( + "encoding/binary" + "errors" + "io" +) + +// XOF defines the interface to hash functions that +// support arbitrary-length output. +type XOF interface { + // Write absorbs more data into the hash's state. It panics if called + // after Read. + io.Writer + + // Read reads more output from the hash. It returns io.EOF if the limit + // has been reached. + io.Reader + + // Clone returns a copy of the XOF in its current state. + Clone() XOF + + // Reset resets the XOF to its initial state. + Reset() +} + +// OutputLengthUnknown can be used as the size argument to NewXOF to indicate +// the the length of the output is not known in advance. +const OutputLengthUnknown = 0 + +// magicUnknownOutputLength is a magic value for the output size that indicates +// an unknown number of output bytes. +const magicUnknownOutputLength = (1 << 32) - 1 + +// maxOutputLength is the absolute maximum number of bytes to produce when the +// number of output bytes is unknown. +const maxOutputLength = (1 << 32) * 64 + +// NewXOF creates a new variable-output-length hash. The hash either produce a +// known number of bytes (1 <= size < 2**32-1), or an unknown number of bytes +// (size == OutputLengthUnknown). In the latter case, an absolute limit of +// 256GiB applies. +// +// A non-nil key turns the hash into a MAC. The key must between +// zero and 32 bytes long. +func NewXOF(size uint32, key []byte) (XOF, error) { + if len(key) > Size { + return nil, errKeySize + } + if size == magicUnknownOutputLength { + // 2^32-1 indicates an unknown number of bytes and thus isn't a + // valid length. + return nil, errors.New("blake2b: XOF length too large") + } + if size == OutputLengthUnknown { + size = magicUnknownOutputLength + } + x := &xof{ + d: digest{ + size: Size, + keyLen: len(key), + }, + length: size, + } + copy(x.d.key[:], key) + x.Reset() + return x, nil +} + +type xof struct { + d digest + length uint32 + remaining uint64 + cfg, root, block [Size]byte + offset int + nodeOffset uint32 + readMode bool +} + +func (x *xof) Write(p []byte) (n int, err error) { + if x.readMode { + panic("blake2b: write to XOF after read") + } + return x.d.Write(p) +} + +func (x *xof) Clone() XOF { + clone := *x + return &clone +} + +func (x *xof) Reset() { + x.cfg[0] = byte(Size) + binary.LittleEndian.PutUint32(x.cfg[4:], uint32(Size)) // leaf length + binary.LittleEndian.PutUint32(x.cfg[12:], x.length) // XOF length + x.cfg[17] = byte(Size) // inner hash size + + x.d.Reset() + x.d.h[1] ^= uint64(x.length) << 32 + + x.remaining = uint64(x.length) + if x.remaining == magicUnknownOutputLength { + x.remaining = maxOutputLength + } + x.offset, x.nodeOffset = 0, 0 + x.readMode = false +} + +func (x *xof) Read(p []byte) (n int, err error) { + if !x.readMode { + x.d.finalize(&x.root) + x.readMode = true + } + + if x.remaining == 0 { + return 0, io.EOF + } + + n = len(p) + if uint64(n) > x.remaining { + n = int(x.remaining) + p = p[:n] + } + + if x.offset > 0 { + blockRemaining := Size - x.offset + if n < blockRemaining { + x.offset += copy(p, x.block[x.offset:]) + x.remaining -= uint64(n) + return + } + copy(p, x.block[x.offset:]) + p = p[blockRemaining:] + x.offset = 0 + x.remaining -= uint64(blockRemaining) + } + + for len(p) >= Size { + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + copy(p, x.block[:]) + p = p[Size:] + x.remaining -= uint64(Size) + } + + if todo := len(p); todo > 0 { + if x.remaining < uint64(Size) { + x.cfg[0] = byte(x.remaining) + } + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + x.offset = copy(p, x.block[:todo]) + x.remaining -= uint64(todo) + } + return +} + +func (d *digest) initConfig(cfg *[Size]byte) { + d.offset, d.c[0], d.c[1] = 0, 0, 0 + for i := range d.h { + d.h[i] = iv[i] ^ binary.LittleEndian.Uint64(cfg[i*8:]) + } +} diff --git a/vendor/golang.org/x/crypto/blake2b/register.go b/vendor/golang.org/x/crypto/blake2b/register.go new file mode 100644 index 0000000..efd689a --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2b/register.go @@ -0,0 +1,32 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package blake2b + +import ( + "crypto" + "hash" +) + +func init() { + newHash256 := func() hash.Hash { + h, _ := New256(nil) + return h + } + newHash384 := func() hash.Hash { + h, _ := New384(nil) + return h + } + + newHash512 := func() hash.Hash { + h, _ := New512(nil) + return h + } + + crypto.RegisterHash(crypto.BLAKE2b_256, newHash256) + crypto.RegisterHash(crypto.BLAKE2b_384, newHash384) + crypto.RegisterHash(crypto.BLAKE2b_512, newHash512) +} diff --git a/vendor/golang.org/x/crypto/blake2s/blake2s.go b/vendor/golang.org/x/crypto/blake2s/blake2s.go new file mode 100644 index 0000000..ae0dc92 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/blake2s.go @@ -0,0 +1,187 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package blake2s implements the BLAKE2s hash algorithm defined by RFC 7693 +// and the extendable output function (XOF) BLAKE2Xs. +// +// For a detailed specification of BLAKE2s see https://blake2.net/blake2.pdf +// and for BLAKE2Xs see https://blake2.net/blake2x.pdf +// +// If you aren't sure which function you need, use BLAKE2s (Sum256 or New256). +// If you need a secret-key MAC (message authentication code), use the New256 +// function with a non-nil key. +// +// BLAKE2X is a construction to compute hash values larger than 32 bytes. It +// can produce hash values between 0 and 65535 bytes. +package blake2s // import "golang.org/x/crypto/blake2s" + +import ( + "encoding/binary" + "errors" + "hash" +) + +const ( + // The blocksize of BLAKE2s in bytes. + BlockSize = 64 + + // The hash size of BLAKE2s-256 in bytes. + Size = 32 + + // The hash size of BLAKE2s-128 in bytes. + Size128 = 16 +) + +var errKeySize = errors.New("blake2s: invalid key size") + +var iv = [8]uint32{ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, + 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, +} + +// Sum256 returns the BLAKE2s-256 checksum of the data. +func Sum256(data []byte) [Size]byte { + var sum [Size]byte + checkSum(&sum, Size, data) + return sum +} + +// New256 returns a new hash.Hash computing the BLAKE2s-256 checksum. A non-nil +// key turns the hash into a MAC. The key must between zero and 32 bytes long. +func New256(key []byte) (hash.Hash, error) { return newDigest(Size, key) } + +// New128 returns a new hash.Hash computing the BLAKE2s-128 checksum given a +// non-empty key. Note that a 128-bit digest is too small to be secure as a +// cryptographic hash and should only be used as a MAC, thus the key argument +// is not optional. +func New128(key []byte) (hash.Hash, error) { + if len(key) == 0 { + return nil, errors.New("blake2s: a key is required for a 128-bit hash") + } + return newDigest(Size128, key) +} + +func newDigest(hashSize int, key []byte) (*digest, error) { + if len(key) > Size { + return nil, errKeySize + } + d := &digest{ + size: hashSize, + keyLen: len(key), + } + copy(d.key[:], key) + d.Reset() + return d, nil +} + +func checkSum(sum *[Size]byte, hashSize int, data []byte) { + var ( + h [8]uint32 + c [2]uint32 + ) + + h = iv + h[0] ^= uint32(hashSize) | (1 << 16) | (1 << 24) + + if length := len(data); length > BlockSize { + n := length &^ (BlockSize - 1) + if length == n { + n -= BlockSize + } + hashBlocks(&h, &c, 0, data[:n]) + data = data[n:] + } + + var block [BlockSize]byte + offset := copy(block[:], data) + remaining := uint32(BlockSize - offset) + + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + hashBlocks(&h, &c, 0xFFFFFFFF, block[:]) + + for i, v := range h { + binary.LittleEndian.PutUint32(sum[4*i:], v) + } +} + +type digest struct { + h [8]uint32 + c [2]uint32 + size int + block [BlockSize]byte + offset int + + key [BlockSize]byte + keyLen int +} + +func (d *digest) BlockSize() int { return BlockSize } + +func (d *digest) Size() int { return d.size } + +func (d *digest) Reset() { + d.h = iv + d.h[0] ^= uint32(d.size) | (uint32(d.keyLen) << 8) | (1 << 16) | (1 << 24) + d.offset, d.c[0], d.c[1] = 0, 0, 0 + if d.keyLen > 0 { + d.block = d.key + d.offset = BlockSize + } +} + +func (d *digest) Write(p []byte) (n int, err error) { + n = len(p) + + if d.offset > 0 { + remaining := BlockSize - d.offset + if n <= remaining { + d.offset += copy(d.block[d.offset:], p) + return + } + copy(d.block[d.offset:], p[:remaining]) + hashBlocks(&d.h, &d.c, 0, d.block[:]) + d.offset = 0 + p = p[remaining:] + } + + if length := len(p); length > BlockSize { + nn := length &^ (BlockSize - 1) + if length == nn { + nn -= BlockSize + } + hashBlocks(&d.h, &d.c, 0, p[:nn]) + p = p[nn:] + } + + d.offset += copy(d.block[:], p) + return +} + +func (d *digest) Sum(sum []byte) []byte { + var hash [Size]byte + d.finalize(&hash) + return append(sum, hash[:d.size]...) +} + +func (d *digest) finalize(hash *[Size]byte) { + var block [BlockSize]byte + h := d.h + c := d.c + + copy(block[:], d.block[:d.offset]) + remaining := uint32(BlockSize - d.offset) + if c[0] < remaining { + c[1]-- + } + c[0] -= remaining + + hashBlocks(&h, &c, 0xFFFFFFFF, block[:]) + for i, v := range h { + binary.LittleEndian.PutUint32(hash[4*i:], v) + } +} diff --git a/vendor/golang.org/x/crypto/blake2s/blake2s_386.go b/vendor/golang.org/x/crypto/blake2s/blake2s_386.go new file mode 100644 index 0000000..45ae546 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/blake2s_386.go @@ -0,0 +1,35 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,!gccgo,!appengine + +package blake2s + +var ( + useSSE4 = false + useSSSE3 = supportSSSE3() + useSSE2 = supportSSE2() +) + +//go:noescape +func supportSSE2() bool + +//go:noescape +func supportSSSE3() bool + +//go:noescape +func hashBlocksSSE2(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) + +//go:noescape +func hashBlocksSSSE3(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) + +func hashBlocks(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) { + if useSSSE3 { + hashBlocksSSSE3(h, c, flag, blocks) + } else if useSSE2 { + hashBlocksSSE2(h, c, flag, blocks) + } else { + hashBlocksGeneric(h, c, flag, blocks) + } +} diff --git a/vendor/golang.org/x/crypto/blake2s/blake2s_386.s b/vendor/golang.org/x/crypto/blake2s/blake2s_386.s new file mode 100644 index 0000000..0bb65c7 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/blake2s_386.s @@ -0,0 +1,460 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,!gccgo,!appengine + +#include "textflag.h" + +DATA iv0<>+0x00(SB)/4, $0x6a09e667 +DATA iv0<>+0x04(SB)/4, $0xbb67ae85 +DATA iv0<>+0x08(SB)/4, $0x3c6ef372 +DATA iv0<>+0x0c(SB)/4, $0xa54ff53a +GLOBL iv0<>(SB), (NOPTR+RODATA), $16 + +DATA iv1<>+0x00(SB)/4, $0x510e527f +DATA iv1<>+0x04(SB)/4, $0x9b05688c +DATA iv1<>+0x08(SB)/4, $0x1f83d9ab +DATA iv1<>+0x0c(SB)/4, $0x5be0cd19 +GLOBL iv1<>(SB), (NOPTR+RODATA), $16 + +DATA rol16<>+0x00(SB)/8, $0x0504070601000302 +DATA rol16<>+0x08(SB)/8, $0x0D0C0F0E09080B0A +GLOBL rol16<>(SB), (NOPTR+RODATA), $16 + +DATA rol8<>+0x00(SB)/8, $0x0407060500030201 +DATA rol8<>+0x08(SB)/8, $0x0C0F0E0D080B0A09 +GLOBL rol8<>(SB), (NOPTR+RODATA), $16 + +DATA counter<>+0x00(SB)/8, $0x40 +DATA counter<>+0x08(SB)/8, $0x0 +GLOBL counter<>(SB), (NOPTR+RODATA), $16 + +#define ROTL_SSE2(n, t, v) \ + MOVO v, t; \ + PSLLL $n, t; \ + PSRLL $(32-n), v; \ + PXOR t, v + +#define ROTL_SSSE3(c, v) \ + PSHUFB c, v + +#define ROUND_SSE2(v0, v1, v2, v3, m0, m1, m2, m3, t) \ + PADDL m0, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE2(16, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(20, t, v1); \ + PADDL m1, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE2(24, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(25, t, v1); \ + PSHUFL $0x39, v1, v1; \ + PSHUFL $0x4E, v2, v2; \ + PSHUFL $0x93, v3, v3; \ + PADDL m2, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE2(16, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(20, t, v1); \ + PADDL m3, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE2(24, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(25, t, v1); \ + PSHUFL $0x39, v3, v3; \ + PSHUFL $0x4E, v2, v2; \ + PSHUFL $0x93, v1, v1 + +#define ROUND_SSSE3(v0, v1, v2, v3, m0, m1, m2, m3, t, c16, c8) \ + PADDL m0, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSSE3(c16, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(20, t, v1); \ + PADDL m1, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSSE3(c8, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(25, t, v1); \ + PSHUFL $0x39, v1, v1; \ + PSHUFL $0x4E, v2, v2; \ + PSHUFL $0x93, v3, v3; \ + PADDL m2, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSSE3(c16, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(20, t, v1); \ + PADDL m3, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSSE3(c8, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(25, t, v1); \ + PSHUFL $0x39, v3, v3; \ + PSHUFL $0x4E, v2, v2; \ + PSHUFL $0x93, v1, v1 + +#define PRECOMPUTE(dst, off, src, t) \ + MOVL 0*4(src), t; \ + MOVL t, 0*4+off+0(dst); \ + MOVL t, 9*4+off+64(dst); \ + MOVL t, 5*4+off+128(dst); \ + MOVL t, 14*4+off+192(dst); \ + MOVL t, 4*4+off+256(dst); \ + MOVL t, 2*4+off+320(dst); \ + MOVL t, 8*4+off+384(dst); \ + MOVL t, 12*4+off+448(dst); \ + MOVL t, 3*4+off+512(dst); \ + MOVL t, 15*4+off+576(dst); \ + MOVL 1*4(src), t; \ + MOVL t, 4*4+off+0(dst); \ + MOVL t, 8*4+off+64(dst); \ + MOVL t, 14*4+off+128(dst); \ + MOVL t, 5*4+off+192(dst); \ + MOVL t, 12*4+off+256(dst); \ + MOVL t, 11*4+off+320(dst); \ + MOVL t, 1*4+off+384(dst); \ + MOVL t, 6*4+off+448(dst); \ + MOVL t, 10*4+off+512(dst); \ + MOVL t, 3*4+off+576(dst); \ + MOVL 2*4(src), t; \ + MOVL t, 1*4+off+0(dst); \ + MOVL t, 13*4+off+64(dst); \ + MOVL t, 6*4+off+128(dst); \ + MOVL t, 8*4+off+192(dst); \ + MOVL t, 2*4+off+256(dst); \ + MOVL t, 0*4+off+320(dst); \ + MOVL t, 14*4+off+384(dst); \ + MOVL t, 11*4+off+448(dst); \ + MOVL t, 12*4+off+512(dst); \ + MOVL t, 4*4+off+576(dst); \ + MOVL 3*4(src), t; \ + MOVL t, 5*4+off+0(dst); \ + MOVL t, 15*4+off+64(dst); \ + MOVL t, 9*4+off+128(dst); \ + MOVL t, 1*4+off+192(dst); \ + MOVL t, 11*4+off+256(dst); \ + MOVL t, 7*4+off+320(dst); \ + MOVL t, 13*4+off+384(dst); \ + MOVL t, 3*4+off+448(dst); \ + MOVL t, 6*4+off+512(dst); \ + MOVL t, 10*4+off+576(dst); \ + MOVL 4*4(src), t; \ + MOVL t, 2*4+off+0(dst); \ + MOVL t, 1*4+off+64(dst); \ + MOVL t, 15*4+off+128(dst); \ + MOVL t, 10*4+off+192(dst); \ + MOVL t, 6*4+off+256(dst); \ + MOVL t, 8*4+off+320(dst); \ + MOVL t, 3*4+off+384(dst); \ + MOVL t, 13*4+off+448(dst); \ + MOVL t, 14*4+off+512(dst); \ + MOVL t, 5*4+off+576(dst); \ + MOVL 5*4(src), t; \ + MOVL t, 6*4+off+0(dst); \ + MOVL t, 11*4+off+64(dst); \ + MOVL t, 2*4+off+128(dst); \ + MOVL t, 9*4+off+192(dst); \ + MOVL t, 1*4+off+256(dst); \ + MOVL t, 13*4+off+320(dst); \ + MOVL t, 4*4+off+384(dst); \ + MOVL t, 8*4+off+448(dst); \ + MOVL t, 15*4+off+512(dst); \ + MOVL t, 7*4+off+576(dst); \ + MOVL 6*4(src), t; \ + MOVL t, 3*4+off+0(dst); \ + MOVL t, 7*4+off+64(dst); \ + MOVL t, 13*4+off+128(dst); \ + MOVL t, 12*4+off+192(dst); \ + MOVL t, 10*4+off+256(dst); \ + MOVL t, 1*4+off+320(dst); \ + MOVL t, 9*4+off+384(dst); \ + MOVL t, 14*4+off+448(dst); \ + MOVL t, 0*4+off+512(dst); \ + MOVL t, 6*4+off+576(dst); \ + MOVL 7*4(src), t; \ + MOVL t, 7*4+off+0(dst); \ + MOVL t, 14*4+off+64(dst); \ + MOVL t, 10*4+off+128(dst); \ + MOVL t, 0*4+off+192(dst); \ + MOVL t, 5*4+off+256(dst); \ + MOVL t, 9*4+off+320(dst); \ + MOVL t, 12*4+off+384(dst); \ + MOVL t, 1*4+off+448(dst); \ + MOVL t, 13*4+off+512(dst); \ + MOVL t, 2*4+off+576(dst); \ + MOVL 8*4(src), t; \ + MOVL t, 8*4+off+0(dst); \ + MOVL t, 5*4+off+64(dst); \ + MOVL t, 4*4+off+128(dst); \ + MOVL t, 15*4+off+192(dst); \ + MOVL t, 14*4+off+256(dst); \ + MOVL t, 3*4+off+320(dst); \ + MOVL t, 11*4+off+384(dst); \ + MOVL t, 10*4+off+448(dst); \ + MOVL t, 7*4+off+512(dst); \ + MOVL t, 1*4+off+576(dst); \ + MOVL 9*4(src), t; \ + MOVL t, 12*4+off+0(dst); \ + MOVL t, 2*4+off+64(dst); \ + MOVL t, 11*4+off+128(dst); \ + MOVL t, 4*4+off+192(dst); \ + MOVL t, 0*4+off+256(dst); \ + MOVL t, 15*4+off+320(dst); \ + MOVL t, 10*4+off+384(dst); \ + MOVL t, 7*4+off+448(dst); \ + MOVL t, 5*4+off+512(dst); \ + MOVL t, 9*4+off+576(dst); \ + MOVL 10*4(src), t; \ + MOVL t, 9*4+off+0(dst); \ + MOVL t, 4*4+off+64(dst); \ + MOVL t, 8*4+off+128(dst); \ + MOVL t, 13*4+off+192(dst); \ + MOVL t, 3*4+off+256(dst); \ + MOVL t, 5*4+off+320(dst); \ + MOVL t, 7*4+off+384(dst); \ + MOVL t, 15*4+off+448(dst); \ + MOVL t, 11*4+off+512(dst); \ + MOVL t, 0*4+off+576(dst); \ + MOVL 11*4(src), t; \ + MOVL t, 13*4+off+0(dst); \ + MOVL t, 10*4+off+64(dst); \ + MOVL t, 0*4+off+128(dst); \ + MOVL t, 3*4+off+192(dst); \ + MOVL t, 9*4+off+256(dst); \ + MOVL t, 6*4+off+320(dst); \ + MOVL t, 15*4+off+384(dst); \ + MOVL t, 4*4+off+448(dst); \ + MOVL t, 2*4+off+512(dst); \ + MOVL t, 12*4+off+576(dst); \ + MOVL 12*4(src), t; \ + MOVL t, 10*4+off+0(dst); \ + MOVL t, 12*4+off+64(dst); \ + MOVL t, 1*4+off+128(dst); \ + MOVL t, 6*4+off+192(dst); \ + MOVL t, 13*4+off+256(dst); \ + MOVL t, 4*4+off+320(dst); \ + MOVL t, 0*4+off+384(dst); \ + MOVL t, 2*4+off+448(dst); \ + MOVL t, 8*4+off+512(dst); \ + MOVL t, 14*4+off+576(dst); \ + MOVL 13*4(src), t; \ + MOVL t, 14*4+off+0(dst); \ + MOVL t, 3*4+off+64(dst); \ + MOVL t, 7*4+off+128(dst); \ + MOVL t, 2*4+off+192(dst); \ + MOVL t, 15*4+off+256(dst); \ + MOVL t, 12*4+off+320(dst); \ + MOVL t, 6*4+off+384(dst); \ + MOVL t, 0*4+off+448(dst); \ + MOVL t, 9*4+off+512(dst); \ + MOVL t, 11*4+off+576(dst); \ + MOVL 14*4(src), t; \ + MOVL t, 11*4+off+0(dst); \ + MOVL t, 0*4+off+64(dst); \ + MOVL t, 12*4+off+128(dst); \ + MOVL t, 7*4+off+192(dst); \ + MOVL t, 8*4+off+256(dst); \ + MOVL t, 14*4+off+320(dst); \ + MOVL t, 2*4+off+384(dst); \ + MOVL t, 5*4+off+448(dst); \ + MOVL t, 1*4+off+512(dst); \ + MOVL t, 13*4+off+576(dst); \ + MOVL 15*4(src), t; \ + MOVL t, 15*4+off+0(dst); \ + MOVL t, 6*4+off+64(dst); \ + MOVL t, 3*4+off+128(dst); \ + MOVL t, 11*4+off+192(dst); \ + MOVL t, 7*4+off+256(dst); \ + MOVL t, 10*4+off+320(dst); \ + MOVL t, 5*4+off+384(dst); \ + MOVL t, 9*4+off+448(dst); \ + MOVL t, 4*4+off+512(dst); \ + MOVL t, 8*4+off+576(dst) + +// func hashBlocksSSE2(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) +TEXT ·hashBlocksSSE2(SB), 0, $672-24 // frame = 656 + 16 byte alignment + MOVL h+0(FP), AX + MOVL c+4(FP), BX + MOVL flag+8(FP), CX + MOVL blocks_base+12(FP), SI + MOVL blocks_len+16(FP), DX + + MOVL SP, BP + MOVL SP, DI + ADDL $15, DI + ANDL $~15, DI + MOVL DI, SP + + MOVL CX, 8(SP) + MOVL 0(BX), CX + MOVL CX, 0(SP) + MOVL 4(BX), CX + MOVL CX, 4(SP) + XORL CX, CX + MOVL CX, 12(SP) + + MOVOU 0(AX), X0 + MOVOU 16(AX), X1 + MOVOU counter<>(SB), X2 + +loop: + MOVO X0, X4 + MOVO X1, X5 + MOVOU iv0<>(SB), X6 + MOVOU iv1<>(SB), X7 + + MOVO 0(SP), X3 + PADDQ X2, X3 + PXOR X3, X7 + MOVO X3, 0(SP) + + PRECOMPUTE(SP, 16, SI, CX) + ROUND_SSE2(X4, X5, X6, X7, 16(SP), 32(SP), 48(SP), 64(SP), X3) + ROUND_SSE2(X4, X5, X6, X7, 16+64(SP), 32+64(SP), 48+64(SP), 64+64(SP), X3) + ROUND_SSE2(X4, X5, X6, X7, 16+128(SP), 32+128(SP), 48+128(SP), 64+128(SP), X3) + ROUND_SSE2(X4, X5, X6, X7, 16+192(SP), 32+192(SP), 48+192(SP), 64+192(SP), X3) + ROUND_SSE2(X4, X5, X6, X7, 16+256(SP), 32+256(SP), 48+256(SP), 64+256(SP), X3) + ROUND_SSE2(X4, X5, X6, X7, 16+320(SP), 32+320(SP), 48+320(SP), 64+320(SP), X3) + ROUND_SSE2(X4, X5, X6, X7, 16+384(SP), 32+384(SP), 48+384(SP), 64+384(SP), X3) + ROUND_SSE2(X4, X5, X6, X7, 16+448(SP), 32+448(SP), 48+448(SP), 64+448(SP), X3) + ROUND_SSE2(X4, X5, X6, X7, 16+512(SP), 32+512(SP), 48+512(SP), 64+512(SP), X3) + ROUND_SSE2(X4, X5, X6, X7, 16+576(SP), 32+576(SP), 48+576(SP), 64+576(SP), X3) + + PXOR X4, X0 + PXOR X5, X1 + PXOR X6, X0 + PXOR X7, X1 + + LEAL 64(SI), SI + SUBL $64, DX + JNE loop + + MOVL 0(SP), CX + MOVL CX, 0(BX) + MOVL 4(SP), CX + MOVL CX, 4(BX) + + MOVOU X0, 0(AX) + MOVOU X1, 16(AX) + + MOVL BP, SP + RET + +// func hashBlocksSSSE3(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) +TEXT ·hashBlocksSSSE3(SB), 0, $704-24 // frame = 688 + 16 byte alignment + MOVL h+0(FP), AX + MOVL c+4(FP), BX + MOVL flag+8(FP), CX + MOVL blocks_base+12(FP), SI + MOVL blocks_len+16(FP), DX + + MOVL SP, BP + MOVL SP, DI + ADDL $15, DI + ANDL $~15, DI + MOVL DI, SP + + MOVL CX, 8(SP) + MOVL 0(BX), CX + MOVL CX, 0(SP) + MOVL 4(BX), CX + MOVL CX, 4(SP) + XORL CX, CX + MOVL CX, 12(SP) + + MOVOU 0(AX), X0 + MOVOU 16(AX), X1 + MOVOU counter<>(SB), X2 + +loop: + MOVO X0, 656(SP) + MOVO X1, 672(SP) + MOVO X0, X4 + MOVO X1, X5 + MOVOU iv0<>(SB), X6 + MOVOU iv1<>(SB), X7 + + MOVO 0(SP), X3 + PADDQ X2, X3 + PXOR X3, X7 + MOVO X3, 0(SP) + + MOVOU rol16<>(SB), X0 + MOVOU rol8<>(SB), X1 + + PRECOMPUTE(SP, 16, SI, CX) + ROUND_SSSE3(X4, X5, X6, X7, 16(SP), 32(SP), 48(SP), 64(SP), X3, X0, X1) + ROUND_SSSE3(X4, X5, X6, X7, 16+64(SP), 32+64(SP), 48+64(SP), 64+64(SP), X3, X0, X1) + ROUND_SSSE3(X4, X5, X6, X7, 16+128(SP), 32+128(SP), 48+128(SP), 64+128(SP), X3, X0, X1) + ROUND_SSSE3(X4, X5, X6, X7, 16+192(SP), 32+192(SP), 48+192(SP), 64+192(SP), X3, X0, X1) + ROUND_SSSE3(X4, X5, X6, X7, 16+256(SP), 32+256(SP), 48+256(SP), 64+256(SP), X3, X0, X1) + ROUND_SSSE3(X4, X5, X6, X7, 16+320(SP), 32+320(SP), 48+320(SP), 64+320(SP), X3, X0, X1) + ROUND_SSSE3(X4, X5, X6, X7, 16+384(SP), 32+384(SP), 48+384(SP), 64+384(SP), X3, X0, X1) + ROUND_SSSE3(X4, X5, X6, X7, 16+448(SP), 32+448(SP), 48+448(SP), 64+448(SP), X3, X0, X1) + ROUND_SSSE3(X4, X5, X6, X7, 16+512(SP), 32+512(SP), 48+512(SP), 64+512(SP), X3, X0, X1) + ROUND_SSSE3(X4, X5, X6, X7, 16+576(SP), 32+576(SP), 48+576(SP), 64+576(SP), X3, X0, X1) + + MOVO 656(SP), X0 + MOVO 672(SP), X1 + PXOR X4, X0 + PXOR X5, X1 + PXOR X6, X0 + PXOR X7, X1 + + LEAL 64(SI), SI + SUBL $64, DX + JNE loop + + MOVL 0(SP), CX + MOVL CX, 0(BX) + MOVL 4(SP), CX + MOVL CX, 4(BX) + + MOVOU X0, 0(AX) + MOVOU X1, 16(AX) + + MOVL BP, SP + RET + +// func supportSSSE3() bool +TEXT ·supportSSSE3(SB), 4, $0-1 + MOVL $1, AX + CPUID + MOVL CX, BX + ANDL $0x1, BX // supports SSE3 + JZ FALSE + ANDL $0x200, CX // supports SSSE3 + JZ FALSE + MOVB $1, ret+0(FP) + RET + +FALSE: + MOVB $0, ret+0(FP) + RET + +// func supportSSE2() bool +TEXT ·supportSSE2(SB), 4, $0-1 + MOVL $1, AX + CPUID + SHRL $26, DX + ANDL $1, DX // DX != 0 if support SSE2 + MOVB DX, ret+0(FP) + RET diff --git a/vendor/golang.org/x/crypto/blake2s/blake2s_amd64.go b/vendor/golang.org/x/crypto/blake2s/blake2s_amd64.go new file mode 100644 index 0000000..a925e6b --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/blake2s_amd64.go @@ -0,0 +1,40 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +package blake2s + +var ( + useSSE4 = supportSSE4() + useSSSE3 = supportSSSE3() + useSSE2 = true // Always available on amd64 +) + +//go:noescape +func supportSSSE3() bool + +//go:noescape +func supportSSE4() bool + +//go:noescape +func hashBlocksSSE2(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) + +//go:noescape +func hashBlocksSSSE3(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) + +//go:noescape +func hashBlocksSSE4(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) + +func hashBlocks(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) { + if useSSE4 { + hashBlocksSSE4(h, c, flag, blocks) + } else if useSSSE3 { + hashBlocksSSSE3(h, c, flag, blocks) + } else if useSSE2 { + hashBlocksSSE2(h, c, flag, blocks) + } else { + hashBlocksGeneric(h, c, flag, blocks) + } +} diff --git a/vendor/golang.org/x/crypto/blake2s/blake2s_amd64.s b/vendor/golang.org/x/crypto/blake2s/blake2s_amd64.s new file mode 100644 index 0000000..6cdf5a9 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/blake2s_amd64.s @@ -0,0 +1,463 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +#include "textflag.h" + +DATA iv0<>+0x00(SB)/4, $0x6a09e667 +DATA iv0<>+0x04(SB)/4, $0xbb67ae85 +DATA iv0<>+0x08(SB)/4, $0x3c6ef372 +DATA iv0<>+0x0c(SB)/4, $0xa54ff53a +GLOBL iv0<>(SB), (NOPTR+RODATA), $16 + +DATA iv1<>+0x00(SB)/4, $0x510e527f +DATA iv1<>+0x04(SB)/4, $0x9b05688c +DATA iv1<>+0x08(SB)/4, $0x1f83d9ab +DATA iv1<>+0x0c(SB)/4, $0x5be0cd19 +GLOBL iv1<>(SB), (NOPTR+RODATA), $16 + +DATA rol16<>+0x00(SB)/8, $0x0504070601000302 +DATA rol16<>+0x08(SB)/8, $0x0D0C0F0E09080B0A +GLOBL rol16<>(SB), (NOPTR+RODATA), $16 + +DATA rol8<>+0x00(SB)/8, $0x0407060500030201 +DATA rol8<>+0x08(SB)/8, $0x0C0F0E0D080B0A09 +GLOBL rol8<>(SB), (NOPTR+RODATA), $16 + +DATA counter<>+0x00(SB)/8, $0x40 +DATA counter<>+0x08(SB)/8, $0x0 +GLOBL counter<>(SB), (NOPTR+RODATA), $16 + +#define ROTL_SSE2(n, t, v) \ + MOVO v, t; \ + PSLLL $n, t; \ + PSRLL $(32-n), v; \ + PXOR t, v + +#define ROTL_SSSE3(c, v) \ + PSHUFB c, v + +#define ROUND_SSE2(v0, v1, v2, v3, m0, m1, m2, m3, t) \ + PADDL m0, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE2(16, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(20, t, v1); \ + PADDL m1, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE2(24, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(25, t, v1); \ + PSHUFL $0x39, v1, v1; \ + PSHUFL $0x4E, v2, v2; \ + PSHUFL $0x93, v3, v3; \ + PADDL m2, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE2(16, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(20, t, v1); \ + PADDL m3, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSE2(24, t, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(25, t, v1); \ + PSHUFL $0x39, v3, v3; \ + PSHUFL $0x4E, v2, v2; \ + PSHUFL $0x93, v1, v1 + +#define ROUND_SSSE3(v0, v1, v2, v3, m0, m1, m2, m3, t, c16, c8) \ + PADDL m0, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSSE3(c16, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(20, t, v1); \ + PADDL m1, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSSE3(c8, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(25, t, v1); \ + PSHUFL $0x39, v1, v1; \ + PSHUFL $0x4E, v2, v2; \ + PSHUFL $0x93, v3, v3; \ + PADDL m2, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSSE3(c16, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(20, t, v1); \ + PADDL m3, v0; \ + PADDL v1, v0; \ + PXOR v0, v3; \ + ROTL_SSSE3(c8, v3); \ + PADDL v3, v2; \ + PXOR v2, v1; \ + ROTL_SSE2(25, t, v1); \ + PSHUFL $0x39, v3, v3; \ + PSHUFL $0x4E, v2, v2; \ + PSHUFL $0x93, v1, v1 + + +#define LOAD_MSG_SSE4(m0, m1, m2, m3, src, i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15) \ + MOVL i0*4(src), m0; \ + PINSRD $1, i1*4(src), m0; \ + PINSRD $2, i2*4(src), m0; \ + PINSRD $3, i3*4(src), m0; \ + MOVL i4*4(src), m1; \ + PINSRD $1, i5*4(src), m1; \ + PINSRD $2, i6*4(src), m1; \ + PINSRD $3, i7*4(src), m1; \ + MOVL i8*4(src), m2; \ + PINSRD $1, i9*4(src), m2; \ + PINSRD $2, i10*4(src), m2; \ + PINSRD $3, i11*4(src), m2; \ + MOVL i12*4(src), m3; \ + PINSRD $1, i13*4(src), m3; \ + PINSRD $2, i14*4(src), m3; \ + PINSRD $3, i15*4(src), m3 + +#define PRECOMPUTE_MSG(dst, off, src, R8, R9, R10, R11, R12, R13, R14, R15) \ + MOVQ 0*4(src), R8; \ + MOVQ 2*4(src), R9; \ + MOVQ 4*4(src), R10; \ + MOVQ 6*4(src), R11; \ + MOVQ 8*4(src), R12; \ + MOVQ 10*4(src), R13; \ + MOVQ 12*4(src), R14; \ + MOVQ 14*4(src), R15; \ + \ + MOVL R8, 0*4+off+0(dst); \ + MOVL R8, 9*4+off+64(dst); \ + MOVL R8, 5*4+off+128(dst); \ + MOVL R8, 14*4+off+192(dst); \ + MOVL R8, 4*4+off+256(dst); \ + MOVL R8, 2*4+off+320(dst); \ + MOVL R8, 8*4+off+384(dst); \ + MOVL R8, 12*4+off+448(dst); \ + MOVL R8, 3*4+off+512(dst); \ + MOVL R8, 15*4+off+576(dst); \ + SHRQ $32, R8; \ + MOVL R8, 4*4+off+0(dst); \ + MOVL R8, 8*4+off+64(dst); \ + MOVL R8, 14*4+off+128(dst); \ + MOVL R8, 5*4+off+192(dst); \ + MOVL R8, 12*4+off+256(dst); \ + MOVL R8, 11*4+off+320(dst); \ + MOVL R8, 1*4+off+384(dst); \ + MOVL R8, 6*4+off+448(dst); \ + MOVL R8, 10*4+off+512(dst); \ + MOVL R8, 3*4+off+576(dst); \ + \ + MOVL R9, 1*4+off+0(dst); \ + MOVL R9, 13*4+off+64(dst); \ + MOVL R9, 6*4+off+128(dst); \ + MOVL R9, 8*4+off+192(dst); \ + MOVL R9, 2*4+off+256(dst); \ + MOVL R9, 0*4+off+320(dst); \ + MOVL R9, 14*4+off+384(dst); \ + MOVL R9, 11*4+off+448(dst); \ + MOVL R9, 12*4+off+512(dst); \ + MOVL R9, 4*4+off+576(dst); \ + SHRQ $32, R9; \ + MOVL R9, 5*4+off+0(dst); \ + MOVL R9, 15*4+off+64(dst); \ + MOVL R9, 9*4+off+128(dst); \ + MOVL R9, 1*4+off+192(dst); \ + MOVL R9, 11*4+off+256(dst); \ + MOVL R9, 7*4+off+320(dst); \ + MOVL R9, 13*4+off+384(dst); \ + MOVL R9, 3*4+off+448(dst); \ + MOVL R9, 6*4+off+512(dst); \ + MOVL R9, 10*4+off+576(dst); \ + \ + MOVL R10, 2*4+off+0(dst); \ + MOVL R10, 1*4+off+64(dst); \ + MOVL R10, 15*4+off+128(dst); \ + MOVL R10, 10*4+off+192(dst); \ + MOVL R10, 6*4+off+256(dst); \ + MOVL R10, 8*4+off+320(dst); \ + MOVL R10, 3*4+off+384(dst); \ + MOVL R10, 13*4+off+448(dst); \ + MOVL R10, 14*4+off+512(dst); \ + MOVL R10, 5*4+off+576(dst); \ + SHRQ $32, R10; \ + MOVL R10, 6*4+off+0(dst); \ + MOVL R10, 11*4+off+64(dst); \ + MOVL R10, 2*4+off+128(dst); \ + MOVL R10, 9*4+off+192(dst); \ + MOVL R10, 1*4+off+256(dst); \ + MOVL R10, 13*4+off+320(dst); \ + MOVL R10, 4*4+off+384(dst); \ + MOVL R10, 8*4+off+448(dst); \ + MOVL R10, 15*4+off+512(dst); \ + MOVL R10, 7*4+off+576(dst); \ + \ + MOVL R11, 3*4+off+0(dst); \ + MOVL R11, 7*4+off+64(dst); \ + MOVL R11, 13*4+off+128(dst); \ + MOVL R11, 12*4+off+192(dst); \ + MOVL R11, 10*4+off+256(dst); \ + MOVL R11, 1*4+off+320(dst); \ + MOVL R11, 9*4+off+384(dst); \ + MOVL R11, 14*4+off+448(dst); \ + MOVL R11, 0*4+off+512(dst); \ + MOVL R11, 6*4+off+576(dst); \ + SHRQ $32, R11; \ + MOVL R11, 7*4+off+0(dst); \ + MOVL R11, 14*4+off+64(dst); \ + MOVL R11, 10*4+off+128(dst); \ + MOVL R11, 0*4+off+192(dst); \ + MOVL R11, 5*4+off+256(dst); \ + MOVL R11, 9*4+off+320(dst); \ + MOVL R11, 12*4+off+384(dst); \ + MOVL R11, 1*4+off+448(dst); \ + MOVL R11, 13*4+off+512(dst); \ + MOVL R11, 2*4+off+576(dst); \ + \ + MOVL R12, 8*4+off+0(dst); \ + MOVL R12, 5*4+off+64(dst); \ + MOVL R12, 4*4+off+128(dst); \ + MOVL R12, 15*4+off+192(dst); \ + MOVL R12, 14*4+off+256(dst); \ + MOVL R12, 3*4+off+320(dst); \ + MOVL R12, 11*4+off+384(dst); \ + MOVL R12, 10*4+off+448(dst); \ + MOVL R12, 7*4+off+512(dst); \ + MOVL R12, 1*4+off+576(dst); \ + SHRQ $32, R12; \ + MOVL R12, 12*4+off+0(dst); \ + MOVL R12, 2*4+off+64(dst); \ + MOVL R12, 11*4+off+128(dst); \ + MOVL R12, 4*4+off+192(dst); \ + MOVL R12, 0*4+off+256(dst); \ + MOVL R12, 15*4+off+320(dst); \ + MOVL R12, 10*4+off+384(dst); \ + MOVL R12, 7*4+off+448(dst); \ + MOVL R12, 5*4+off+512(dst); \ + MOVL R12, 9*4+off+576(dst); \ + \ + MOVL R13, 9*4+off+0(dst); \ + MOVL R13, 4*4+off+64(dst); \ + MOVL R13, 8*4+off+128(dst); \ + MOVL R13, 13*4+off+192(dst); \ + MOVL R13, 3*4+off+256(dst); \ + MOVL R13, 5*4+off+320(dst); \ + MOVL R13, 7*4+off+384(dst); \ + MOVL R13, 15*4+off+448(dst); \ + MOVL R13, 11*4+off+512(dst); \ + MOVL R13, 0*4+off+576(dst); \ + SHRQ $32, R13; \ + MOVL R13, 13*4+off+0(dst); \ + MOVL R13, 10*4+off+64(dst); \ + MOVL R13, 0*4+off+128(dst); \ + MOVL R13, 3*4+off+192(dst); \ + MOVL R13, 9*4+off+256(dst); \ + MOVL R13, 6*4+off+320(dst); \ + MOVL R13, 15*4+off+384(dst); \ + MOVL R13, 4*4+off+448(dst); \ + MOVL R13, 2*4+off+512(dst); \ + MOVL R13, 12*4+off+576(dst); \ + \ + MOVL R14, 10*4+off+0(dst); \ + MOVL R14, 12*4+off+64(dst); \ + MOVL R14, 1*4+off+128(dst); \ + MOVL R14, 6*4+off+192(dst); \ + MOVL R14, 13*4+off+256(dst); \ + MOVL R14, 4*4+off+320(dst); \ + MOVL R14, 0*4+off+384(dst); \ + MOVL R14, 2*4+off+448(dst); \ + MOVL R14, 8*4+off+512(dst); \ + MOVL R14, 14*4+off+576(dst); \ + SHRQ $32, R14; \ + MOVL R14, 14*4+off+0(dst); \ + MOVL R14, 3*4+off+64(dst); \ + MOVL R14, 7*4+off+128(dst); \ + MOVL R14, 2*4+off+192(dst); \ + MOVL R14, 15*4+off+256(dst); \ + MOVL R14, 12*4+off+320(dst); \ + MOVL R14, 6*4+off+384(dst); \ + MOVL R14, 0*4+off+448(dst); \ + MOVL R14, 9*4+off+512(dst); \ + MOVL R14, 11*4+off+576(dst); \ + \ + MOVL R15, 11*4+off+0(dst); \ + MOVL R15, 0*4+off+64(dst); \ + MOVL R15, 12*4+off+128(dst); \ + MOVL R15, 7*4+off+192(dst); \ + MOVL R15, 8*4+off+256(dst); \ + MOVL R15, 14*4+off+320(dst); \ + MOVL R15, 2*4+off+384(dst); \ + MOVL R15, 5*4+off+448(dst); \ + MOVL R15, 1*4+off+512(dst); \ + MOVL R15, 13*4+off+576(dst); \ + SHRQ $32, R15; \ + MOVL R15, 15*4+off+0(dst); \ + MOVL R15, 6*4+off+64(dst); \ + MOVL R15, 3*4+off+128(dst); \ + MOVL R15, 11*4+off+192(dst); \ + MOVL R15, 7*4+off+256(dst); \ + MOVL R15, 10*4+off+320(dst); \ + MOVL R15, 5*4+off+384(dst); \ + MOVL R15, 9*4+off+448(dst); \ + MOVL R15, 4*4+off+512(dst); \ + MOVL R15, 8*4+off+576(dst) + +#define BLAKE2s_SSE2() \ + PRECOMPUTE_MSG(SP, 16, SI, R8, R9, R10, R11, R12, R13, R14, R15); \ + ROUND_SSE2(X4, X5, X6, X7, 16(SP), 32(SP), 48(SP), 64(SP), X8); \ + ROUND_SSE2(X4, X5, X6, X7, 16+64(SP), 32+64(SP), 48+64(SP), 64+64(SP), X8); \ + ROUND_SSE2(X4, X5, X6, X7, 16+128(SP), 32+128(SP), 48+128(SP), 64+128(SP), X8); \ + ROUND_SSE2(X4, X5, X6, X7, 16+192(SP), 32+192(SP), 48+192(SP), 64+192(SP), X8); \ + ROUND_SSE2(X4, X5, X6, X7, 16+256(SP), 32+256(SP), 48+256(SP), 64+256(SP), X8); \ + ROUND_SSE2(X4, X5, X6, X7, 16+320(SP), 32+320(SP), 48+320(SP), 64+320(SP), X8); \ + ROUND_SSE2(X4, X5, X6, X7, 16+384(SP), 32+384(SP), 48+384(SP), 64+384(SP), X8); \ + ROUND_SSE2(X4, X5, X6, X7, 16+448(SP), 32+448(SP), 48+448(SP), 64+448(SP), X8); \ + ROUND_SSE2(X4, X5, X6, X7, 16+512(SP), 32+512(SP), 48+512(SP), 64+512(SP), X8); \ + ROUND_SSE2(X4, X5, X6, X7, 16+576(SP), 32+576(SP), 48+576(SP), 64+576(SP), X8) + +#define BLAKE2s_SSSE3() \ + PRECOMPUTE_MSG(SP, 16, SI, R8, R9, R10, R11, R12, R13, R14, R15); \ + ROUND_SSSE3(X4, X5, X6, X7, 16(SP), 32(SP), 48(SP), 64(SP), X8, X13, X14); \ + ROUND_SSSE3(X4, X5, X6, X7, 16+64(SP), 32+64(SP), 48+64(SP), 64+64(SP), X8, X13, X14); \ + ROUND_SSSE3(X4, X5, X6, X7, 16+128(SP), 32+128(SP), 48+128(SP), 64+128(SP), X8, X13, X14); \ + ROUND_SSSE3(X4, X5, X6, X7, 16+192(SP), 32+192(SP), 48+192(SP), 64+192(SP), X8, X13, X14); \ + ROUND_SSSE3(X4, X5, X6, X7, 16+256(SP), 32+256(SP), 48+256(SP), 64+256(SP), X8, X13, X14); \ + ROUND_SSSE3(X4, X5, X6, X7, 16+320(SP), 32+320(SP), 48+320(SP), 64+320(SP), X8, X13, X14); \ + ROUND_SSSE3(X4, X5, X6, X7, 16+384(SP), 32+384(SP), 48+384(SP), 64+384(SP), X8, X13, X14); \ + ROUND_SSSE3(X4, X5, X6, X7, 16+448(SP), 32+448(SP), 48+448(SP), 64+448(SP), X8, X13, X14); \ + ROUND_SSSE3(X4, X5, X6, X7, 16+512(SP), 32+512(SP), 48+512(SP), 64+512(SP), X8, X13, X14); \ + ROUND_SSSE3(X4, X5, X6, X7, 16+576(SP), 32+576(SP), 48+576(SP), 64+576(SP), X8, X13, X14) + +#define BLAKE2s_SSE4() \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14); \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14); \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14); \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14); \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14); \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14); \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14); \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14); \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14); \ + LOAD_MSG_SSE4(X8, X9, X10, X11, SI, 10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0); \ + ROUND_SSSE3(X4, X5, X6, X7, X8, X9, X10, X11, X8, X13, X14) + +#define HASH_BLOCKS(h, c, flag, blocks_base, blocks_len, BLAKE2s_FUNC) \ + MOVQ h, AX; \ + MOVQ c, BX; \ + MOVL flag, CX; \ + MOVQ blocks_base, SI; \ + MOVQ blocks_len, DX; \ + \ + MOVQ SP, BP; \ + MOVQ SP, R9; \ + ADDQ $15, R9; \ + ANDQ $~15, R9; \ + MOVQ R9, SP; \ + \ + MOVQ 0(BX), R9; \ + MOVQ R9, 0(SP); \ + XORQ R9, R9; \ + MOVQ R9, 8(SP); \ + MOVL CX, 8(SP); \ + \ + MOVOU 0(AX), X0; \ + MOVOU 16(AX), X1; \ + MOVOU iv0<>(SB), X2; \ + MOVOU iv1<>(SB), X3 \ + \ + MOVOU counter<>(SB), X12; \ + MOVOU rol16<>(SB), X13; \ + MOVOU rol8<>(SB), X14; \ + MOVO 0(SP), X15; \ + \ + loop: \ + MOVO X0, X4; \ + MOVO X1, X5; \ + MOVO X2, X6; \ + MOVO X3, X7; \ + \ + PADDQ X12, X15; \ + PXOR X15, X7; \ + \ + BLAKE2s_FUNC(); \ + \ + PXOR X4, X0; \ + PXOR X5, X1; \ + PXOR X6, X0; \ + PXOR X7, X1; \ + \ + LEAQ 64(SI), SI; \ + SUBQ $64, DX; \ + JNE loop; \ + \ + MOVO X15, 0(SP); \ + MOVQ 0(SP), R9; \ + MOVQ R9, 0(BX); \ + \ + MOVOU X0, 0(AX); \ + MOVOU X1, 16(AX); \ + \ + MOVQ BP, SP + +// func hashBlocksSSE2(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) +TEXT ·hashBlocksSSE2(SB), 0, $672-48 // frame = 656 + 16 byte alignment + HASH_BLOCKS(h+0(FP), c+8(FP), flag+16(FP), blocks_base+24(FP), blocks_len+32(FP), BLAKE2s_SSE2) + RET + +// func hashBlocksSSSE3(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) +TEXT ·hashBlocksSSSE3(SB), 0, $672-48 // frame = 656 + 16 byte alignment + HASH_BLOCKS(h+0(FP), c+8(FP), flag+16(FP), blocks_base+24(FP), blocks_len+32(FP), BLAKE2s_SSSE3) + RET + +// func hashBlocksSSE4(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) +TEXT ·hashBlocksSSE4(SB), 0, $32-48 // frame = 16 + 16 byte alignment + HASH_BLOCKS(h+0(FP), c+8(FP), flag+16(FP), blocks_base+24(FP), blocks_len+32(FP), BLAKE2s_SSE4) + RET + +// func supportSSE4() bool +TEXT ·supportSSE4(SB), 4, $0-1 + MOVL $1, AX + CPUID + SHRL $19, CX // Bit 19 indicates SSE4.1. + ANDL $1, CX + MOVB CX, ret+0(FP) + RET + +// func supportSSSE3() bool +TEXT ·supportSSSE3(SB), 4, $0-1 + MOVL $1, AX + CPUID + MOVL CX, BX + ANDL $0x1, BX // Bit zero indicates SSE3 support. + JZ FALSE + ANDL $0x200, CX // Bit nine indicates SSSE3 support. + JZ FALSE + MOVB $1, ret+0(FP) + RET + +FALSE: + MOVB $0, ret+0(FP) + RET diff --git a/vendor/golang.org/x/crypto/blake2s/blake2s_generic.go b/vendor/golang.org/x/crypto/blake2s/blake2s_generic.go new file mode 100644 index 0000000..f7e0653 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/blake2s_generic.go @@ -0,0 +1,174 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2s + +// the precomputed values for BLAKE2s +// there are 10 16-byte arrays - one for each round +// the entries are calculated from the sigma constants. +var precomputed = [10][16]byte{ + {0, 2, 4, 6, 1, 3, 5, 7, 8, 10, 12, 14, 9, 11, 13, 15}, + {14, 4, 9, 13, 10, 8, 15, 6, 1, 0, 11, 5, 12, 2, 7, 3}, + {11, 12, 5, 15, 8, 0, 2, 13, 10, 3, 7, 9, 14, 6, 1, 4}, + {7, 3, 13, 11, 9, 1, 12, 14, 2, 5, 4, 15, 6, 10, 0, 8}, + {9, 5, 2, 10, 0, 7, 4, 15, 14, 11, 6, 3, 1, 12, 8, 13}, + {2, 6, 0, 8, 12, 10, 11, 3, 4, 7, 15, 1, 13, 5, 14, 9}, + {12, 1, 14, 4, 5, 15, 13, 10, 0, 6, 9, 8, 7, 3, 2, 11}, + {13, 7, 12, 3, 11, 14, 1, 9, 5, 15, 8, 2, 0, 4, 6, 10}, + {6, 14, 11, 0, 15, 9, 3, 8, 12, 13, 1, 10, 2, 7, 4, 5}, + {10, 8, 7, 1, 2, 4, 6, 5, 15, 9, 3, 13, 11, 14, 12, 0}, +} + +func hashBlocksGeneric(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) { + var m [16]uint32 + c0, c1 := c[0], c[1] + + for i := 0; i < len(blocks); { + c0 += BlockSize + if c0 < BlockSize { + c1++ + } + + v0, v1, v2, v3, v4, v5, v6, v7 := h[0], h[1], h[2], h[3], h[4], h[5], h[6], h[7] + v8, v9, v10, v11, v12, v13, v14, v15 := iv[0], iv[1], iv[2], iv[3], iv[4], iv[5], iv[6], iv[7] + v12 ^= c0 + v13 ^= c1 + v14 ^= flag + + for j := range m { + m[j] = uint32(blocks[i]) | uint32(blocks[i+1])<<8 | uint32(blocks[i+2])<<16 | uint32(blocks[i+3])<<24 + i += 4 + } + + for k := range precomputed { + s := &(precomputed[k]) + + v0 += m[s[0]] + v0 += v4 + v12 ^= v0 + v12 = v12<<(32-16) | v12>>16 + v8 += v12 + v4 ^= v8 + v4 = v4<<(32-12) | v4>>12 + v1 += m[s[1]] + v1 += v5 + v13 ^= v1 + v13 = v13<<(32-16) | v13>>16 + v9 += v13 + v5 ^= v9 + v5 = v5<<(32-12) | v5>>12 + v2 += m[s[2]] + v2 += v6 + v14 ^= v2 + v14 = v14<<(32-16) | v14>>16 + v10 += v14 + v6 ^= v10 + v6 = v6<<(32-12) | v6>>12 + v3 += m[s[3]] + v3 += v7 + v15 ^= v3 + v15 = v15<<(32-16) | v15>>16 + v11 += v15 + v7 ^= v11 + v7 = v7<<(32-12) | v7>>12 + + v0 += m[s[4]] + v0 += v4 + v12 ^= v0 + v12 = v12<<(32-8) | v12>>8 + v8 += v12 + v4 ^= v8 + v4 = v4<<(32-7) | v4>>7 + v1 += m[s[5]] + v1 += v5 + v13 ^= v1 + v13 = v13<<(32-8) | v13>>8 + v9 += v13 + v5 ^= v9 + v5 = v5<<(32-7) | v5>>7 + v2 += m[s[6]] + v2 += v6 + v14 ^= v2 + v14 = v14<<(32-8) | v14>>8 + v10 += v14 + v6 ^= v10 + v6 = v6<<(32-7) | v6>>7 + v3 += m[s[7]] + v3 += v7 + v15 ^= v3 + v15 = v15<<(32-8) | v15>>8 + v11 += v15 + v7 ^= v11 + v7 = v7<<(32-7) | v7>>7 + + v0 += m[s[8]] + v0 += v5 + v15 ^= v0 + v15 = v15<<(32-16) | v15>>16 + v10 += v15 + v5 ^= v10 + v5 = v5<<(32-12) | v5>>12 + v1 += m[s[9]] + v1 += v6 + v12 ^= v1 + v12 = v12<<(32-16) | v12>>16 + v11 += v12 + v6 ^= v11 + v6 = v6<<(32-12) | v6>>12 + v2 += m[s[10]] + v2 += v7 + v13 ^= v2 + v13 = v13<<(32-16) | v13>>16 + v8 += v13 + v7 ^= v8 + v7 = v7<<(32-12) | v7>>12 + v3 += m[s[11]] + v3 += v4 + v14 ^= v3 + v14 = v14<<(32-16) | v14>>16 + v9 += v14 + v4 ^= v9 + v4 = v4<<(32-12) | v4>>12 + + v0 += m[s[12]] + v0 += v5 + v15 ^= v0 + v15 = v15<<(32-8) | v15>>8 + v10 += v15 + v5 ^= v10 + v5 = v5<<(32-7) | v5>>7 + v1 += m[s[13]] + v1 += v6 + v12 ^= v1 + v12 = v12<<(32-8) | v12>>8 + v11 += v12 + v6 ^= v11 + v6 = v6<<(32-7) | v6>>7 + v2 += m[s[14]] + v2 += v7 + v13 ^= v2 + v13 = v13<<(32-8) | v13>>8 + v8 += v13 + v7 ^= v8 + v7 = v7<<(32-7) | v7>>7 + v3 += m[s[15]] + v3 += v4 + v14 ^= v3 + v14 = v14<<(32-8) | v14>>8 + v9 += v14 + v4 ^= v9 + v4 = v4<<(32-7) | v4>>7 + } + + h[0] ^= v0 ^ v8 + h[1] ^= v1 ^ v9 + h[2] ^= v2 ^ v10 + h[3] ^= v3 ^ v11 + h[4] ^= v4 ^ v12 + h[5] ^= v5 ^ v13 + h[6] ^= v6 ^ v14 + h[7] ^= v7 ^ v15 + } + c[0], c[1] = c0, c1 +} diff --git a/vendor/golang.org/x/crypto/blake2s/blake2s_ref.go b/vendor/golang.org/x/crypto/blake2s/blake2s_ref.go new file mode 100644 index 0000000..a311273 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/blake2s_ref.go @@ -0,0 +1,17 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64,!386 gccgo appengine + +package blake2s + +var ( + useSSE4 = false + useSSSE3 = false + useSSE2 = false +) + +func hashBlocks(h *[8]uint32, c *[2]uint32, flag uint32, blocks []byte) { + hashBlocksGeneric(h, c, flag, blocks) +} diff --git a/vendor/golang.org/x/crypto/blake2s/blake2s_test.go b/vendor/golang.org/x/crypto/blake2s/blake2s_test.go new file mode 100644 index 0000000..938fef3 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/blake2s_test.go @@ -0,0 +1,1002 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2s + +import ( + "encoding/hex" + "fmt" + "testing" +) + +func TestHashes(t *testing.T) { + defer func(sse2, ssse3, sse4 bool) { + useSSE2, useSSSE3, useSSE4 = sse2, ssse3, sse4 + }(useSSE2, useSSSE3, useSSE4) + + if useSSE4 { + t.Log("SSE4 version") + testHashes(t) + testHashes128(t) + useSSE4 = false + } + if useSSSE3 { + t.Log("SSSE3 version") + testHashes(t) + testHashes128(t) + useSSSE3 = false + } + if useSSE2 { + t.Log("SSE2 version") + testHashes(t) + testHashes128(t) + useSSE2 = false + } + + t.Log("generic version") + testHashes(t) + testHashes128(t) +} + +func TestHashes2X(t *testing.T) { + defer func(sse2, ssse3, sse4 bool) { + useSSE2, useSSSE3, useSSE4 = sse2, ssse3, sse4 + }(useSSE2, useSSSE3, useSSE4) + + if useSSE4 { + t.Log("SSE4 version") + testHashes2X(t) + useSSE4 = false + } + if useSSSE3 { + t.Log("SSSE3 version") + testHashes2X(t) + useSSSE3 = false + } + if useSSE2 { + t.Log("SSE2 version") + testHashes2X(t) + useSSE2 = false + } + + t.Log("generic version") + testHashes2X(t) +} + +func testHashes(t *testing.T) { + key, _ := hex.DecodeString("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f") + + input := make([]byte, 255) + for i := range input { + input[i] = byte(i) + } + + for i, expectedHex := range hashes { + h, err := New256(key) + if err != nil { + t.Fatalf("#%d: error from New256: %v", i, err) + } + + h.Write(input[:i]) + sum := h.Sum(nil) + + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (single write): got %s, wanted %s", i, gotHex, expectedHex) + } + + h.Reset() + for j := 0; j < i; j++ { + h.Write(input[j : j+1]) + } + + sum = h.Sum(sum[:0]) + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (byte-by-byte): got %s, wanted %s", i, gotHex, expectedHex) + } + } +} + +func testHashes128(t *testing.T) { + key, _ := hex.DecodeString("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f") + + input := make([]byte, 255) + for i := range input { + input[i] = byte(i) + } + + for i, expectedHex := range hashes128 { + h, err := New128(key) + if err != nil { + t.Fatalf("#%d: error from New128: %v", i, err) + } + + h.Write(input[:i]) + sum := h.Sum(nil) + + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (single write): got %s, wanted %s", i, gotHex, expectedHex) + } + + h.Reset() + for j := 0; j < i; j++ { + h.Write(input[j : j+1]) + } + + sum = h.Sum(sum[:0]) + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (byte-by-byte): got %s, wanted %s", i, gotHex, expectedHex) + } + } +} + +func testHashes2X(t *testing.T) { + key, _ := hex.DecodeString("000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f") + + input := make([]byte, 256) + for i := range input { + input[i] = byte(i) + } + + for i, expectedHex := range hashes2X { + length := uint16(len(expectedHex) / 2) + sum := make([]byte, int(length)) + + h, err := NewXOF(length, key) + if err != nil { + t.Fatalf("#%d: error from NewXOF: %v", i, err) + } + + if _, err := h.Write(input); err != nil { + t.Fatalf("#%d (single write): error from Write: %v", i, err) + } + if _, err := h.Read(sum); err != nil { + t.Fatalf("#%d (single write): error from Read: %v", i, err) + } + + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (single write): got %s, wanted %s", i, gotHex, expectedHex) + } + + h.Reset() + for j := 0; j < len(input); j++ { + h.Write(input[j : j+1]) + } + for j := 0; j < len(sum); j++ { + h = h.Clone() + if _, err := h.Read(sum[j : j+1]); err != nil { + t.Fatalf("#%d (byte-by-byte) - Read %d: error from Read: %v", i, j, err) + } + } + if gotHex := fmt.Sprintf("%x", sum); gotHex != expectedHex { + t.Fatalf("#%d (byte-by-byte): got %s, wanted %s", i, gotHex, expectedHex) + } + } + + h, err := NewXOF(OutputLengthUnknown, key) + if err != nil { + t.Fatalf("#unknown length: error from NewXOF: %v", err) + } + if _, err := h.Write(input); err != nil { + t.Fatalf("#unknown length: error from Write: %v", err) + } + + var result [64]byte + if n, err := h.Read(result[:]); err != nil { + t.Fatalf("#unknown length: error from Read: %v", err) + } else if n != len(result) { + t.Fatalf("#unknown length: Read returned %d bytes, want %d: %v", n, len(result)) + } + + const expected = "2a9a6977d915a2c4dd07dbcafe1918bf1682e56d9c8e567ecd19bfd7cd93528833c764d12b34a5e2a219c9fd463dab45e972c5574d73f45de5b2e23af72530d8" + if fmt.Sprintf("%x", result) != expected { + t.Fatalf("#unknown length: bad result %x, wanted %s", result, expected) + } +} + +// Benchmarks + +func benchmarkSum(b *testing.B, size int) { + data := make([]byte, size) + b.SetBytes(int64(size)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + Sum256(data) + } +} + +func benchmarkWrite(b *testing.B, size int) { + data := make([]byte, size) + h, _ := New256(nil) + b.SetBytes(int64(size)) + b.ResetTimer() + for i := 0; i < b.N; i++ { + h.Write(data) + } +} + +func BenchmarkWrite64(b *testing.B) { benchmarkWrite(b, 64) } +func BenchmarkWrite1K(b *testing.B) { benchmarkWrite(b, 1024) } + +func BenchmarkSum64(b *testing.B) { benchmarkSum(b, 64) } +func BenchmarkSum1K(b *testing.B) { benchmarkSum(b, 1024) } + +// hashes is taken from https://blake2.net/blake2s-test.txt +var hashes = []string{ + "48a8997da407876b3d79c0d92325ad3b89cbb754d86ab71aee047ad345fd2c49", + "40d15fee7c328830166ac3f918650f807e7e01e177258cdc0a39b11f598066f1", + "6bb71300644cd3991b26ccd4d274acd1adeab8b1d7914546c1198bbe9fc9d803", + "1d220dbe2ee134661fdf6d9e74b41704710556f2f6e5a091b227697445dbea6b", + "f6c3fbadb4cc687a0064a5be6e791bec63b868ad62fba61b3757ef9ca52e05b2", + "49c1f21188dfd769aea0e911dd6b41f14dab109d2b85977aa3088b5c707e8598", + "fdd8993dcd43f696d44f3cea0ff35345234ec8ee083eb3cada017c7f78c17143", + "e6c8125637438d0905b749f46560ac89fd471cf8692e28fab982f73f019b83a9", + "19fc8ca6979d60e6edd3b4541e2f967ced740df6ec1eaebbfe813832e96b2974", + "a6ad777ce881b52bb5a4421ab6cdd2dfba13e963652d4d6d122aee46548c14a7", + "f5c4b2ba1a00781b13aba0425242c69cb1552f3f71a9a3bb22b4a6b4277b46dd", + "e33c4c9bd0cc7e45c80e65c77fa5997fec7002738541509e68a9423891e822a3", + "fba16169b2c3ee105be6e1e650e5cbf40746b6753d036ab55179014ad7ef6651", + "f5c4bec6d62fc608bf41cc115f16d61c7efd3ff6c65692bbe0afffb1fede7475", + "a4862e76db847f05ba17ede5da4e7f91b5925cf1ad4ba12732c3995742a5cd6e", + "65f4b860cd15b38ef814a1a804314a55be953caa65fd758ad989ff34a41c1eea", + "19ba234f0a4f38637d1839f9d9f76ad91c8522307143c97d5f93f69274cec9a7", + "1a67186ca4a5cb8e65fca0e2ecbc5ddc14ae381bb8bffeb9e0a103449e3ef03c", + "afbea317b5a2e89c0bd90ccf5d7fd0ed57fe585e4be3271b0a6bf0f5786b0f26", + "f1b01558ce541262f5ec34299d6fb4090009e3434be2f49105cf46af4d2d4124", + "13a0a0c86335635eaa74ca2d5d488c797bbb4f47dc07105015ed6a1f3309efce", + "1580afeebebb346f94d59fe62da0b79237ead7b1491f5667a90e45edf6ca8b03", + "20be1a875b38c573dd7faaa0de489d655c11efb6a552698e07a2d331b5f655c3", + "be1fe3c4c04018c54c4a0f6b9a2ed3c53abe3a9f76b4d26de56fc9ae95059a99", + "e3e3ace537eb3edd8463d9ad3582e13cf86533ffde43d668dd2e93bbdbd7195a", + "110c50c0bf2c6e7aeb7e435d92d132ab6655168e78a2decdec3330777684d9c1", + "e9ba8f505c9c80c08666a701f3367e6cc665f34b22e73c3c0417eb1c2206082f", + "26cd66fca02379c76df12317052bcafd6cd8c3a7b890d805f36c49989782433a", + "213f3596d6e3a5d0e9932cd2159146015e2abc949f4729ee2632fe1edb78d337", + "1015d70108e03be1c702fe97253607d14aee591f2413ea6787427b6459ff219a", + "3ca989de10cfe609909472c8d35610805b2f977734cf652cc64b3bfc882d5d89", + "b6156f72d380ee9ea6acd190464f2307a5c179ef01fd71f99f2d0f7a57360aea", + "c03bc642b20959cbe133a0303e0c1abff3e31ec8e1a328ec8565c36decff5265", + "2c3e08176f760c6264c3a2cd66fec6c3d78de43fc192457b2a4a660a1e0eb22b", + "f738c02f3c1b190c512b1a32deabf353728e0e9ab034490e3c3409946a97aeec", + "8b1880df301cc963418811088964839287ff7fe31c49ea6ebd9e48bdeee497c5", + "1e75cb21c60989020375f1a7a242839f0b0b68973a4c2a05cf7555ed5aaec4c1", + "62bf8a9c32a5bccf290b6c474d75b2a2a4093f1a9e27139433a8f2b3bce7b8d7", + "166c8350d3173b5e702b783dfd33c66ee0432742e9b92b997fd23c60dc6756ca", + "044a14d822a90cacf2f5a101428adc8f4109386ccb158bf905c8618b8ee24ec3", + "387d397ea43a994be84d2d544afbe481a2000f55252696bba2c50c8ebd101347", + "56f8ccf1f86409b46ce36166ae9165138441577589db08cbc5f66ca29743b9fd", + "9706c092b04d91f53dff91fa37b7493d28b576b5d710469df79401662236fc03", + "877968686c068ce2f7e2adcff68bf8748edf3cf862cfb4d3947a3106958054e3", + "8817e5719879acf7024787eccdb271035566cfa333e049407c0178ccc57a5b9f", + "8938249e4b50cadaccdf5b18621326cbb15253e33a20f5636e995d72478de472", + "f164abba4963a44d107257e3232d90aca5e66a1408248c51741e991db5227756", + "d05563e2b1cba0c4a2a1e8bde3a1a0d9f5b40c85a070d6f5fb21066ead5d0601", + "03fbb16384f0a3866f4c3117877666efbf124597564b293d4aab0d269fabddfa", + "5fa8486ac0e52964d1881bbe338eb54be2f719549224892057b4da04ba8b3475", + "cdfabcee46911111236a31708b2539d71fc211d9b09c0d8530a11e1dbf6eed01", + "4f82de03b9504793b82a07a0bdcdff314d759e7b62d26b784946b0d36f916f52", + "259ec7f173bcc76a0994c967b4f5f024c56057fb79c965c4fae41875f06a0e4c", + "193cc8e7c3e08bb30f5437aa27ade1f142369b246a675b2383e6da9b49a9809e", + "5c10896f0e2856b2a2eee0fe4a2c1633565d18f0e93e1fab26c373e8f829654d", + "f16012d93f28851a1eb989f5d0b43f3f39ca73c9a62d5181bff237536bd348c3", + "2966b3cfae1e44ea996dc5d686cf25fa053fb6f67201b9e46eade85d0ad6b806", + "ddb8782485e900bc60bcf4c33a6fd585680cc683d516efa03eb9985fad8715fb", + "4c4d6e71aea05786413148fc7a786b0ecaf582cff1209f5a809fba8504ce662c", + "fb4c5e86d7b2229b99b8ba6d94c247ef964aa3a2bae8edc77569f28dbbff2d4e", + "e94f526de9019633ecd54ac6120f23958d7718f1e7717bf329211a4faeed4e6d", + "cbd6660a10db3f23f7a03d4b9d4044c7932b2801ac89d60bc9eb92d65a46c2a0", + "8818bbd3db4dc123b25cbba5f54c2bc4b3fcf9bf7d7a7709f4ae588b267c4ece", + "c65382513f07460da39833cb666c5ed82e61b9e998f4b0c4287cee56c3cc9bcd", + "8975b0577fd35566d750b362b0897a26c399136df07bababbde6203ff2954ed4", + "21fe0ceb0052be7fb0f004187cacd7de67fa6eb0938d927677f2398c132317a8", + "2ef73f3c26f12d93889f3c78b6a66c1d52b649dc9e856e2c172ea7c58ac2b5e3", + "388a3cd56d73867abb5f8401492b6e2681eb69851e767fd84210a56076fb3dd3", + "af533e022fc9439e4e3cb838ecd18692232adf6fe9839526d3c3dd1b71910b1a", + "751c09d41a9343882a81cd13ee40818d12eb44c6c7f40df16e4aea8fab91972a", + "5b73ddb68d9d2b0aa265a07988d6b88ae9aac582af83032f8a9b21a2e1b7bf18", + "3da29126c7c5d7f43e64242a79feaa4ef3459cdeccc898ed59a97f6ec93b9dab", + "566dc920293da5cb4fe0aa8abda8bbf56f552313bff19046641e3615c1e3ed3f", + "4115bea02f73f97f629e5c5590720c01e7e449ae2a6697d4d2783321303692f9", + "4ce08f4762468a7670012164878d68340c52a35e66c1884d5c864889abc96677", + "81ea0b7804124e0c22ea5fc71104a2afcb52a1fa816f3ecb7dcb5d9dea1786d0", + "fe362733b05f6bedaf9379d7f7936ede209b1f8323c3922549d9e73681b5db7b", + "eff37d30dfd20359be4e73fdf40d27734b3df90a97a55ed745297294ca85d09f", + "172ffc67153d12e0ca76a8b6cd5d4731885b39ce0cac93a8972a18006c8b8baf", + "c47957f1cc88e83ef9445839709a480a036bed5f88ac0fcc8e1e703ffaac132c", + "30f3548370cfdceda5c37b569b6175e799eef1a62aaa943245ae7669c227a7b5", + "c95dcb3cf1f27d0eef2f25d2413870904a877c4a56c2de1e83e2bc2ae2e46821", + "d5d0b5d705434cd46b185749f66bfb5836dcdf6ee549a2b7a4aee7f58007caaf", + "bbc124a712f15d07c300e05b668389a439c91777f721f8320c1c9078066d2c7e", + "a451b48c35a6c7854cfaae60262e76990816382ac0667e5a5c9e1b46c4342ddf", + "b0d150fb55e778d01147f0b5d89d99ecb20ff07e5e6760d6b645eb5b654c622b", + "34f737c0ab219951eee89a9f8dac299c9d4c38f33fa494c5c6eefc92b6db08bc", + "1a62cc3a00800dcbd99891080c1e098458193a8cc9f970ea99fbeff00318c289", + "cfce55ebafc840d7ae48281c7fd57ec8b482d4b704437495495ac414cf4a374b", + "6746facf71146d999dabd05d093ae586648d1ee28e72617b99d0f0086e1e45bf", + "571ced283b3f23b4e750bf12a2caf1781847bd890e43603cdc5976102b7bb11b", + "cfcb765b048e35022c5d089d26e85a36b005a2b80493d03a144e09f409b6afd1", + "4050c7a27705bb27f42089b299f3cbe5054ead68727e8ef9318ce6f25cd6f31d", + "184070bd5d265fbdc142cd1c5cd0d7e414e70369a266d627c8fba84fa5e84c34", + "9edda9a4443902a9588c0d0ccc62b930218479a6841e6fe7d43003f04b1fd643", + "e412feef7908324a6da1841629f35d3d358642019310ec57c614836b63d30763", + "1a2b8edff3f9acc1554fcbae3cf1d6298c6462e22e5eb0259684f835012bd13f", + "288c4ad9b9409762ea07c24a41f04f69a7d74bee2d95435374bde946d7241c7b", + "805691bb286748cfb591d3aebe7e6f4e4dc6e2808c65143cc004e4eb6fd09d43", + "d4ac8d3a0afc6cfa7b460ae3001baeb36dadb37da07d2e8ac91822df348aed3d", + "c376617014d20158bced3d3ba552b6eccf84e62aa3eb650e90029c84d13eea69", + "c41f09f43cecae7293d6007ca0a357087d5ae59be500c1cd5b289ee810c7b082", + "03d1ced1fba5c39155c44b7765cb760c78708dcfc80b0bd8ade3a56da8830b29", + "09bde6f152218dc92c41d7f45387e63e5869d807ec70b821405dbd884b7fcf4b", + "71c9036e18179b90b37d39e9f05eb89cc5fc341fd7c477d0d7493285faca08a4", + "5916833ebb05cd919ca7fe83b692d3205bef72392b2cf6bb0a6d43f994f95f11", + "f63aab3ec641b3b024964c2b437c04f6043c4c7e0279239995401958f86bbe54", + "f172b180bfb09740493120b6326cbdc561e477def9bbcfd28cc8c1c5e3379a31", + "cb9b89cc18381dd9141ade588654d4e6a231d5bf49d4d59ac27d869cbe100cf3", + "7bd8815046fdd810a923e1984aaebdcdf84d87c8992d68b5eeb460f93eb3c8d7", + "607be66862fd08ee5b19facac09dfdbcd40c312101d66e6ebd2b841f1b9a9325", + "9fe03bbe69ab1834f5219b0da88a08b30a66c5913f0151963c360560db0387b3", + "90a83585717b75f0e9b725e055eeeeb9e7a028ea7e6cbc07b20917ec0363e38c", + "336ea0530f4a7469126e0218587ebbde3358a0b31c29d200f7dc7eb15c6aadd8", + "a79e76dc0abca4396f0747cd7b748df913007626b1d659da0c1f78b9303d01a3", + "44e78a773756e0951519504d7038d28d0213a37e0ce375371757bc996311e3b8", + "77ac012a3f754dcfeab5eb996be9cd2d1f96111b6e49f3994df181f28569d825", + "ce5a10db6fccdaf140aaa4ded6250a9c06e9222bc9f9f3658a4aff935f2b9f3a", + "ecc203a7fe2be4abd55bb53e6e673572e0078da8cd375ef430cc97f9f80083af", + "14a5186de9d7a18b0412b8563e51cc5433840b4a129a8ff963b33a3c4afe8ebb", + "13f8ef95cb86e6a638931c8e107673eb76ba10d7c2cd70b9d9920bbeed929409", + "0b338f4ee12f2dfcb78713377941e0b0632152581d1332516e4a2cab1942cca4", + "eaab0ec37b3b8ab796e9f57238de14a264a076f3887d86e29bb5906db5a00e02", + "23cb68b8c0e6dc26dc27766ddc0a13a99438fd55617aa4095d8f969720c872df", + "091d8ee30d6f2968d46b687dd65292665742de0bb83dcc0004c72ce10007a549", + "7f507abc6d19ba00c065a876ec5657868882d18a221bc46c7a6912541f5bc7ba", + "a0607c24e14e8c223db0d70b4d30ee88014d603f437e9e02aa7dafa3cdfbad94", + "ddbfea75cc467882eb3483ce5e2e756a4f4701b76b445519e89f22d60fa86e06", + "0c311f38c35a4fb90d651c289d486856cd1413df9b0677f53ece2cd9e477c60a", + "46a73a8dd3e70f59d3942c01df599def783c9da82fd83222cd662b53dce7dbdf", + "ad038ff9b14de84a801e4e621ce5df029dd93520d0c2fa38bff176a8b1d1698c", + "ab70c5dfbd1ea817fed0cd067293abf319e5d7901c2141d5d99b23f03a38e748", + "1fffda67932b73c8ecaf009a3491a026953babfe1f663b0697c3c4ae8b2e7dcb", + "b0d2cc19472dd57f2b17efc03c8d58c2283dbb19da572f7755855aa9794317a0", + "a0d19a6ee33979c325510e276622df41f71583d07501b87071129a0ad94732a5", + "724642a7032d1062b89e52bea34b75df7d8fe772d9fe3c93ddf3c4545ab5a99b", + "ade5eaa7e61f672d587ea03dae7d7b55229c01d06bc0a5701436cbd18366a626", + "013b31ebd228fcdda51fabb03bb02d60ac20ca215aafa83bdd855e3755a35f0b", + "332ed40bb10dde3c954a75d7b8999d4b26a1c063c1dc6e32c1d91bab7bbb7d16", + "c7a197b3a05b566bcc9facd20e441d6f6c2860ac9651cd51d6b9d2cdeeea0390", + "bd9cf64ea8953c037108e6f654914f3958b68e29c16700dc184d94a21708ff60", + "8835b0ac021151df716474ce27ce4d3c15f0b2dab48003cf3f3efd0945106b9a", + "3bfefa3301aa55c080190cffda8eae51d9af488b4c1f24c3d9a75242fd8ea01d", + "08284d14993cd47d53ebaecf0df0478cc182c89c00e1859c84851686ddf2c1b7", + "1ed7ef9f04c2ac8db6a864db131087f27065098e69c3fe78718d9b947f4a39d0", + "c161f2dcd57e9c1439b31a9dd43d8f3d7dd8f0eb7cfac6fb25a0f28e306f0661", + "c01969ad34c52caf3dc4d80d19735c29731ac6e7a92085ab9250c48dea48a3fc", + "1720b3655619d2a52b3521ae0e49e345cb3389ebd6208acaf9f13fdacca8be49", + "756288361c83e24c617cf95c905b22d017cdc86f0bf1d658f4756c7379873b7f", + "e7d0eda3452693b752abcda1b55e276f82698f5f1605403eff830bea0071a394", + "2c82ecaa6b84803e044af63118afe544687cb6e6c7df49ed762dfd7c8693a1bc", + "6136cbf4b441056fa1e2722498125d6ded45e17b52143959c7f4d4e395218ac2", + "721d3245aafef27f6a624f47954b6c255079526ffa25e9ff77e5dcff473b1597", + "9dd2fbd8cef16c353c0ac21191d509eb28dd9e3e0d8cea5d26ca839393851c3a", + "b2394ceacdebf21bf9df2ced98e58f1c3a4bbbff660dd900f62202d6785cc46e", + "57089f222749ad7871765f062b114f43ba20ec56422a8b1e3f87192c0ea718c6", + "e49a9459961cd33cdf4aae1b1078a5dea7c040e0fea340c93a724872fc4af806", + "ede67f720effd2ca9c88994152d0201dee6b0a2d2c077aca6dae29f73f8b6309", + "e0f434bf22e3088039c21f719ffc67f0f2cb5e98a7a0194c76e96bf4e8e17e61", + "277c04e2853484a4eba910ad336d01b477b67cc200c59f3c8d77eef8494f29cd", + "156d5747d0c99c7f27097d7b7e002b2e185cb72d8dd7eb424a0321528161219f", + "20ddd1ed9b1ca803946d64a83ae4659da67fba7a1a3eddb1e103c0f5e03e3a2c", + "f0af604d3dabbf9a0f2a7d3dda6bd38bba72c6d09be494fcef713ff10189b6e6", + "9802bb87def4cc10c4a5fd49aa58dfe2f3fddb46b4708814ead81d23ba95139b", + "4f8ce1e51d2fe7f24043a904d898ebfc91975418753413aa099b795ecb35cedb", + "bddc6514d7ee6ace0a4ac1d0e068112288cbcf560454642705630177cba608bd", + "d635994f6291517b0281ffdd496afa862712e5b3c4e52e4cd5fdae8c0e72fb08", + "878d9ca600cf87e769cc305c1b35255186615a73a0da613b5f1c98dbf81283ea", + "a64ebe5dc185de9fdde7607b6998702eb23456184957307d2fa72e87a47702d6", + "ce50eab7b5eb52bdc9ad8e5a480ab780ca9320e44360b1fe37e03f2f7ad7de01", + "eeddb7c0db6e30abe66d79e327511e61fcebbc29f159b40a86b046ecf0513823", + "787fc93440c1ec96b5ad01c16cf77916a1405f9426356ec921d8dff3ea63b7e0", + "7f0d5eab47eefda696c0bf0fbf86ab216fce461e9303aba6ac374120e890e8df", + "b68004b42f14ad029f4c2e03b1d5eb76d57160e26476d21131bef20ada7d27f4", + "b0c4eb18ae250b51a41382ead92d0dc7455f9379fc9884428e4770608db0faec", + "f92b7a870c059f4d46464c824ec96355140bdce681322cc3a992ff103e3fea52", + "5364312614813398cc525d4c4e146edeb371265fba19133a2c3d2159298a1742", + "f6620e68d37fb2af5000fc28e23b832297ecd8bce99e8be4d04e85309e3d3374", + "5316a27969d7fe04ff27b283961bffc3bf5dfb32fb6a89d101c6c3b1937c2871", + "81d1664fdf3cb33c24eebac0bd64244b77c4abea90bbe8b5ee0b2aafcf2d6a53", + "345782f295b0880352e924a0467b5fbc3e8f3bfbc3c7e48b67091fb5e80a9442", + "794111ea6cd65e311f74ee41d476cb632ce1e4b051dc1d9e9d061a19e1d0bb49", + "2a85daf6138816b99bf8d08ba2114b7ab07975a78420c1a3b06a777c22dd8bcb", + "89b0d5f289ec16401a069a960d0b093e625da3cf41ee29b59b930c5820145455", + "d0fdcb543943fc27d20864f52181471b942cc77ca675bcb30df31d358ef7b1eb", + "b17ea8d77063c709d4dc6b879413c343e3790e9e62ca85b7900b086f6b75c672", + "e71a3e2c274db842d92114f217e2c0eac8b45093fdfd9df4ca7162394862d501", + "c0476759ab7aa333234f6b44f5fd858390ec23694c622cb986e769c78edd733e", + "9ab8eabb1416434d85391341d56993c55458167d4418b19a0f2ad8b79a83a75b", + "7992d0bbb15e23826f443e00505d68d3ed7372995a5c3e498654102fbcd0964e", + "c021b30085151435df33b007ccecc69df1269f39ba25092bed59d932ac0fdc28", + "91a25ec0ec0d9a567f89c4bfe1a65a0e432d07064b4190e27dfb81901fd3139b", + "5950d39a23e1545f301270aa1a12f2e6c453776e4d6355de425cc153f9818867", + "d79f14720c610af179a3765d4b7c0968f977962dbf655b521272b6f1e194488e", + "e9531bfc8b02995aeaa75ba27031fadbcbf4a0dab8961d9296cd7e84d25d6006", + "34e9c26a01d7f16181b454a9d1623c233cb99d31c694656e9413aca3e918692f", + "d9d7422f437bd439ddd4d883dae2a08350173414be78155133fff1964c3d7972", + "4aee0c7aaf075414ff1793ead7eaca601775c615dbd60b640b0a9f0ce505d435", + "6bfdd15459c83b99f096bfb49ee87b063d69c1974c6928acfcfb4099f8c4ef67", + "9fd1c408fd75c336193a2a14d94f6af5adf050b80387b4b010fb29f4cc72707c", + "13c88480a5d00d6c8c7ad2110d76a82d9b70f4fa6696d4e5dd42a066dcaf9920", + "820e725ee25fe8fd3a8d5abe4c46c3ba889de6fa9191aa22ba67d5705421542b", + "32d93a0eb02f42fbbcaf2bad0085b282e46046a4df7ad10657c9d6476375b93e", + "adc5187905b1669cd8ec9c721e1953786b9d89a9bae30780f1e1eab24a00523c", + "e90756ff7f9ad810b239a10ced2cf9b2284354c1f8c7e0accc2461dc796d6e89", + "1251f76e56978481875359801db589a0b22f86d8d634dc04506f322ed78f17e8", + "3afa899fd980e73ecb7f4d8b8f291dc9af796bc65d27f974c6f193c9191a09fd", + "aa305be26e5deddc3c1010cbc213f95f051c785c5b431e6a7cd048f161787528", + "8ea1884ff32e9d10f039b407d0d44e7e670abd884aeee0fb757ae94eaa97373d", + "d482b2155d4dec6b4736a1f1617b53aaa37310277d3fef0c37ad41768fc235b4", + "4d413971387e7a8898a8dc2a27500778539ea214a2dfe9b3d7e8ebdce5cf3db3", + "696e5d46e6c57e8796e4735d08916e0b7929b3cf298c296d22e9d3019653371c", + "1f5647c1d3b088228885865c8940908bf40d1a8272821973b160008e7a3ce2eb", + "b6e76c330f021a5bda65875010b0edf09126c0f510ea849048192003aef4c61c", + "3cd952a0beada41abb424ce47f94b42be64e1ffb0fd0782276807946d0d0bc55", + "98d92677439b41b7bb513312afb92bcc8ee968b2e3b238cecb9b0f34c9bb63d0", + "ecbca2cf08ae57d517ad16158a32bfa7dc0382eaeda128e91886734c24a0b29d", + "942cc7c0b52e2b16a4b89fa4fc7e0bf609e29a08c1a8543452b77c7bfd11bb28", + "8a065d8b61a0dffb170d5627735a76b0e9506037808cba16c345007c9f79cf8f", + "1b9fa19714659c78ff413871849215361029ac802b1cbcd54e408bd87287f81f", + "8dab071bcd6c7292a9ef727b4ae0d86713301da8618d9a48adce55f303a869a1", + "8253e3e7c7b684b9cb2beb014ce330ff3d99d17abbdbabe4f4d674ded53ffc6b", + "f195f321e9e3d6bd7d074504dd2ab0e6241f92e784b1aa271ff648b1cab6d7f6", + "27e4cc72090f241266476a7c09495f2db153d5bcbd761903ef79275ec56b2ed8", + "899c2405788e25b99a1846355e646d77cf400083415f7dc5afe69d6e17c00023", + "a59b78c4905744076bfee894de707d4f120b5c6893ea0400297d0bb834727632", + "59dc78b105649707a2bb4419c48f005400d3973de3736610230435b10424b24f", + "c0149d1d7e7a6353a6d906efe728f2f329fe14a4149a3ea77609bc42b975ddfa", + "a32f241474a6c16932e9243be0cf09bcdc7e0ca0e7a6a1b9b1a0f01e41502377", + "b239b2e4f81841361c1339f68e2c359f929af9ad9f34e01aab4631ad6d5500b0", + "85fb419c7002a3e0b4b6ea093b4c1ac6936645b65dac5ac15a8528b7b94c1754", + "9619720625f190b93a3fad186ab314189633c0d3a01e6f9bc8c4a8f82f383dbf", + "7d620d90fe69fa469a6538388970a1aa09bb48a2d59b347b97e8ce71f48c7f46", + "294383568596fb37c75bbacd979c5ff6f20a556bf8879cc72924855df9b8240e", + "16b18ab314359c2b833c1c6986d48c55a9fc97cde9a3c1f10a3177140f73f738", + "8cbbdd14bc33f04cf45813e4a153a273d36adad5ce71f499eeb87fb8ac63b729", + "69c9a498db174ecaefcc5a3ac9fdedf0f813a5bec727f1e775babdec7718816e", + "b462c3be40448f1d4f80626254e535b08bc9cdcff599a768578d4b2881a8e3f0", + "553e9d9c5f360ac0b74a7d44e5a391dad4ced03e0c24183b7e8ecabdf1715a64", + "7a7c55a56fa9ae51e655e01975d8a6ff4ae9e4b486fcbe4eac044588f245ebea", + "2afdf3c82abc4867f5de111286c2b3be7d6e48657ba923cfbf101a6dfcf9db9a", + "41037d2edcdce0c49b7fb4a6aa0999ca66976c7483afe631d4eda283144f6dfc", + "c4466f8497ca2eeb4583a0b08e9d9ac74395709fda109d24f2e4462196779c5d", + "75f609338aa67d969a2ae2a2362b2da9d77c695dfd1df7224a6901db932c3364", + "68606ceb989d5488fc7cf649f3d7c272ef055da1a93faecd55fe06f6967098ca", + "44346bdeb7e052f6255048f0d9b42c425bab9c3dd24168212c3ecf1ebf34e6ae", + "8e9cf6e1f366471f2ac7d2ee9b5e6266fda71f8f2e4109f2237ed5f8813fc718", + "84bbeb8406d250951f8c1b3e86a7c010082921833dfd9555a2f909b1086eb4b8", + "ee666f3eef0f7e2a9c222958c97eaf35f51ced393d714485ab09a069340fdf88", + "c153d34a65c47b4a62c5cacf24010975d0356b2f32c8f5da530d338816ad5de6", + "9fc5450109e1b779f6c7ae79d56c27635c8dd426c5a9d54e2578db989b8c3b4e", + "d12bf3732ef4af5c22fa90356af8fc50fcb40f8f2ea5c8594737a3b3d5abdbd7", + "11030b9289bba5af65260672ab6fee88b87420acef4a1789a2073b7ec2f2a09e", + "69cb192b8444005c8c0ceb12c846860768188cda0aec27a9c8a55cdee2123632", + "db444c15597b5f1a03d1f9edd16e4a9f43a667cc275175dfa2b704e3bb1a9b83", + "3fb735061abc519dfe979e54c1ee5bfad0a9d858b3315bad34bde999efd724dd", +} + +var hashes128 = []string{ + "9536f9b267655743dee97b8a670f9f53", + "13bacfb85b48a1223c595f8c1e7e82cb", + "d47a9b1645e2feae501cd5fe44ce6333", + "1e2a79436a7796a3e9826bfedf07659f", + "7640360ed3c4f3054dba79a21dda66b7", + "d1207ac2bf5ac84fc9ef016da5a46a86", + "3123987871e59305ece3125abfc0099a", + "cf9e072ad522f2cda2d825218086731c", + "95d22870392efe2846b12b6e8e84efbb", + "7d63c30e2d51333f245601b038c0b93b", + "ed608b98e13976bdf4bedc63fa35e443", + "ed704b5cd1abf8e0dd67a6ac667a3fa5", + "77dc70109827dc74c70fd26cba379ae5", + "d2bf34508b07825ee934f33958f4560e", + "a340baa7b8a93a6e658adef42e78eeb7", + "b85c5ceaecbe9a251eac76f6932ba395", + "246519722001f6e8e97a2183f5985e53", + "5bce5aa0b7c6cac2ecf6406183cd779a", + "13408f1647c02f6efd0047ad8344f695", + "a63970f196760aa36cb965ab62f0e0fa", + "bc26f48421dd99fd45e15e736d3e7dac", + "4c6f70f9e3237cde918afb52d26f1823", + "45ed610cfbc37db80c4bf0eef14ae8d6", + "87c4c150705ea5078209ec008200539c", + "54de21f5e0e6f2afe04daeb822b6931e", + "9732a04e505064e19de3d542e7e71631", + "d2bd27e95531d6957eef511c4ba64ad4", + "7a36c9f70dcc7c3063b547101a5f6c35", + "322007d1a44c4257bc7903b183305529", + "dbcc9a09f412290ca2e0d53dfd142ddb", + "df12ed43b8e53a56db20e0f83764002c", + "d114cc11e7d5b33a360c45f18d4c7c6e", + "c43b5e836af88620a8a71b1652cb8640", + "9491c653e8867ed73c1b4ac6b5a9bb4d", + "06d0e988df94ada6c6f9f36f588ab7c5", + "561efad2480e93262c8eeaa3677615c4", + "ba8ffc702e5adc93503045eca8702312", + "5782be6ccdc78c8425285e85de8ccdc6", + "aa1c4393e4c07b53ea6e2b5b1e970771", + "42a229dc50e52271c51e8666023ebc1e", + "53706110e919f84de7f8d6c7f0e7b831", + "fc5ac8ee39cc1dd1424391323e2901bd", + "bed27b62ff66cac2fbb68193c727106a", + "cd5e689b96d0b9ea7e08dac36f7b211e", + "0b4c7f604eba058d18e322c6e1baf173", + "eb838227fdfad09a27f0f8413120675d", + "3149cf9d19a7fd529e6154a8b4c3b3ad", + "ca1e20126df930fd5fb7afe4422191e5", + "b23398f910599f3c09b6549fa81bcb46", + "27fb17c11b34fa5d8b5afe5ee3321ead", + "0f665f5f04cf2d46b7fead1a1f328158", + "8f068be73b3681f99f3b282e3c02bba5", + "ba189bbd13808dcf4e002a4dd21660d5", + "2732dcd1b16668ae6ab6a61595d0d62a", + "d410ccdd059f0e02b472ec9ec54bdd3c", + "b2eaa07b055b3a03a399971327f7e8c2", + "2e8a225655e9f99b69c60dc8b4d8e566", + "4eb55416c853f2152e67f8a224133cec", + "49552403790d8de0505a8e317a443687", + "7f2747cd41f56942752e868212c7d5ac", + "02a28f10e193b430df7112d2d98cf759", + "d4213404a9f1cf759017747cf5958270", + "faa34884344f9c65e944882db8476d34", + "ece382a8bd5018f1de5da44b72cea75b", + "f1efa90d2547036841ecd3627fafbc36", + "811ff8686d23a435ecbd0bdafcd27b1b", + "b21beea9c7385f657a76558530438721", + "9cb969da4f1b4fc5b13bf78fe366f0c4", + "8850d16d7b614d3268ccfa009d33c7fc", + "aa98a2b6176ea86415b9aff3268c6f6d", + "ec3e1efa5ed195eff667e16b1af1e39e", + "e40787dca57411d2630db2de699beb08", + "554835890735babd06318de23d31e78a", + "493957feecddc302ee2bb2086b6ebfd3", + "f6069709ad5b0139163717e9ce1114ab", + "ba5ed386098da284484b211555505a01", + "9244c8dfad8cbb68c118fa51465b3ae4", + "51e309a5008eb1f5185e5cc007cfb36f", + "6ce9ff712121b4f6087955f4911eafd4", + "59b51d8dcda031218ccdd7c760828155", + "0012878767a3d4f1c8194458cf1f8832", + "82900708afd5b6582dc16f008c655edd", + "21302c7e39b5a4cdf1d6f86b4f00c9b4", + "e894c7431591eab8d1ce0fe2aa1f01df", + "b67e1c40ee9d988226d605621854d955", + "6237bdafa34137cbbec6be43ea9bd22c", + "4172a8e19b0dcb09b978bb9eff7af52b", + "5714abb55bd4448a5a6ad09fbd872fdf", + "7ce1700bef423e1f958a94a77a94d44a", + "3742ec50cded528527775833453e0b26", + "5d41b135724c7c9c689495324b162f18", + "85c523333c6442c202e9e6e0f1185f93", + "5c71f5222d40ff5d90e7570e71ab2d30", + "6e18912e83d012efb4c66250ced6f0d9", + "4add4448c2e35e0b138a0bac7b4b1775", + "c0376c6bc5e7b8b9d2108ec25d2aab53", + "f72261d5ed156765c977751c8a13fcc1", + "cff4156c48614b6ceed3dd6b9058f17e", + "36bfb513f76c15f514bcb593419835aa", + "166bf48c6bffaf8291e6fdf63854bef4", + "0b67d33f8b859c3157fbabd9e6e47ed0", + "e4da659ca76c88e73a9f9f10f3d51789", + "33c1ae2a86b3f51c0642e6ed5b5aa1f1", + "27469b56aca2334449c1cf4970dcd969", + "b7117b2e363378aa0901b0d6a9f6ddc0", + "a9578233b09e5cd5231943fdb12cd90d", + "486d7d75253598b716a068243c1c3e89", + "66f6b02d682b78ffdc85e9ec86852489", + "38a07b9a4b228fbcc305476e4d2e05d2", + "aedb61c7970e7d05bf9002dae3c6858c", + "c03ef441f7dd30fdb61ad2d4d8e4c7da", + "7f45cc1eea9a00cb6aeb2dd748361190", + "a59538b358459132e55160899e47bd65", + "137010fef72364411820c3fbed15c8df", + "d8362b93fc504500dbd33ac74e1b4d70", + "a7e49f12c8f47e3b29cf8c0889b0a9c8", + "072e94ffbfc684bd8ab2a1b9dade2fd5", + "5ab438584bd2229e452052e002631a5f", + "f233d14221097baef57d3ec205c9e086", + "3a95db000c4a8ff98dc5c89631a7f162", + "0544f18c2994ab4ddf1728f66041ff16", + "0bc02116c60a3cc331928d6c9d3ba37e", + "b189dca6cb5b813c74200834fba97f29", + "ac8aaab075b4a5bc24419da239212650", + "1e9f19323dc71c29ae99c479dc7e8df9", + "12d944c3fa7caa1b3d62adfc492274dd", + "b4c68f1fffe8f0030e9b18aad8c9dc96", + "25887fab1422700d7fa3edc0b20206e2", + "8c09f698d03eaf88abf69f8147865ef6", + "5c363ae42a5bec26fbc5e996428d9bd7", + "7fdfc2e854fbb3928150d5e3abcf56d6", + "f0c944023f714df115f9e4f25bcdb89b", + "6d19534b4c332741c8ddd79a9644de2d", + "32595eb23764fbfc2ee7822649f74a12", + "5a51391aab33c8d575019b6e76ae052a", + "98b861ce2c620f10f913af5d704a5afd", + "b7fe2fc8b77fb1ce434f8465c7ddf793", + "0e8406e0cf8e9cc840668ece2a0fc64e", + "b89922db99c58f6a128ccffe19b6ce60", + "e1be9af665f0932b77d7f5631a511db7", + "74b96f20f58de8dc9ff5e31f91828523", + "36a4cfef5a2a7d8548db6710e50b3009", + "007e95e8d3b91948a1dedb91f75de76b", + "a87a702ce08f5745edf765bfcd5fbe0d", + "847e69a388a749a9c507354d0dddfe09", + "07176eefbc107a78f058f3d424ca6a54", + "ad7e80682333b68296f6cb2b4a8e446d", + "53c4aba43896ae422e5de5b9edbd46bf", + "33bd6c20ca2a7ab916d6e98003c6c5f8", + "060d088ea94aa093f9981a79df1dfcc8", + "5617b214b9df08d4f11e58f5e76d9a56", + "ca3a60ee85bd971e1daf9f7db059d909", + "cd2b7754505d8c884eddf736f1ec613e", + "f496163b252f1439e7e113ba2ecabd8e", + "5719c7dcf9d9f756d6213354acb7d5cf", + "6f7dd40b245c54411e7a9be83ae5701c", + "c8994dd9fdeb077a45ea04a30358b637", + "4b1184f1e35458c1c747817d527a252f", + "fc7df674afeac7a3fd994183f4c67a74", + "4f68e05ce4dcc533acf9c7c01d95711e", + "d4ebc59e918400720035dfc88e0c486a", + "d3105dd6fa123e543b0b3a6e0eeaea9e", + "874196128ed443f5bdb2800ca048fcad", + "01645f134978dc8f9cf0abc93b53780e", + "5b8b64caa257873a0ffd47c981ef6c3f", + "4ee208fc50ba0a6e65c5b58cec44c923", + "53f409a52427b3b7ffabb057ca088428", + "c1d6cd616f5341a93d921e356e5887a9", + "e85c20fea67fa7320dc23379181183c8", + "7912b6409489df001b7372bc94aebde7", + "e559f761ec866a87f1f331767fafc60f", + "20a6f5a36bc37043d977ed7708465ef8", + "6a72f526965ab120826640dd784c6cc4", + "bf486d92ad68e87c613689dd370d001b", + "d339fd0eb35edf3abd6419c8d857acaf", + "9521cd7f32306d969ddabc4e6a617f52", + "a1cd9f3e81520842f3cf6cc301cb0021", + "18e879b6f154492d593edd3f4554e237", + "66e2329c1f5137589e051592587e521e", + "e899566dd6c3e82cbc83958e69feb590", + "8a4b41d7c47e4e80659d77b4e4bfc9ae", + "f1944f6fcfc17803405a1101998c57dd", + "f6bcec07567b4f72851b307139656b18", + "22e7bb256918fe9924dce9093e2d8a27", + "dd25b925815fe7b50b7079f5f65a3970", + "0457f10f299acf0c230dd4007612e58f", + "ecb420c19efd93814fae2964d69b54af", + "14eb47b06dff685d88751c6e32789db4", + "e8f072dbb50d1ab6654aa162604a892d", + "69cff9c62092332f03a166c7b0034469", + "d3619f98970b798ca32c6c14cd25af91", + "2246d423774ee9d51a551e89c0539d9e", + "75e5d1a1e374a04a699247dad827b6cf", + "6d087dd1d4cd15bf47db07c7a96b1db8", + "967e4c055ac51b4b2a3e506cebd5826f", + "7417aa79247e473401bfa92a25b62e2a", + "24f3f4956da34b5c533d9a551ccd7b16", + "0c40382de693a5304e2331eb951cc962", + "9436f949d51b347db5c8e6258dafaaac", + "d2084297fe84c4ba6e04e4fb73d734fe", + "42a6f8ff590af21b512e9e088257aa34", + "c484ad06b1cdb3a54f3f6464a7a2a6fd", + "1b8ac860f5ceb4365400a201ed2917aa", + "c43eadabbe7b7473f3f837fc52650f54", + "0e5d3205406126b1f838875deb150d6a", + "6bf4946f8ec8a9c417f50cd1e67565be", + "42f09a2522314799c95b3fc121a0e3e8", + "06b8f1487f691a3f7c3f74e133d55870", + "1a70a65fb4f314dcf6a31451a9d2704f", + "7d4acdd0823279fd28a1e48b49a04669", + "09545cc8822a5dfc93bbab708fd69174", + "efc063db625013a83c9a426d39a9bddb", + "213bbf89b3f5be0ffdb14854bbcb2588", + "b69624d89fe2774df9a6f43695d755d4", + "c0f9ff9ded82bd73c512e365a894774d", + "d1b68507ed89c17ead6f69012982db71", + "14cf16db04648978e35c44850855d1b0", + "9f254d4eccab74cd91d694df863650a8", + "8f8946e2967baa4a814d36ff01d20813", + "6b9dc4d24ecba166cb2915d7a6cba43b", + "eb35a80418a0042b850e294db7898d4d", + "f55f925d280c637d54055c9df088ef5f", + "f48427a04f67e33f3ba0a17f7c9704a7", + "4a9f5bfcc0321aea2eced896cee65894", + "8723a67d1a1df90f1cef96e6fe81e702", + "c166c343ee25998f80bad4067960d3fd", + "dab67288d16702e676a040fd42344d73", + "c8e9e0d80841eb2c116dd14c180e006c", + "92294f546bacf0dea9042c93ecba8b34", + "013705b1502b37369ad22fe8237d444e", + "9b97f8837d5f2ebab0768fc9a6446b93", + "7e7e5236b05ec35f89edf8bf655498e7", + "7be8f2362c174c776fb9432fe93bf259", + "2422e80420276d2df5702c6470879b01", + "df645795db778bcce23bbe819a76ba48", + "3f97a4ac87dfc58761cda1782d749074", + "50e3f45df21ebfa1b706b9c0a1c245a8", + "7879541c7ff612c7ddf17cb8f7260183", + "67f6542b903b7ba1945eba1a85ee6b1c", + "b34b73d36ab6234b8d3f5494d251138e", + "0aea139641fdba59ab1103479a96e05f", + "02776815a87b8ba878453666d42afe3c", + "5929ab0a90459ebac5a16e2fb37c847e", + "c244def5b20ce0468f2b5012d04ac7fd", + "12116add6fefce36ed8a0aeccce9b6d3", + "3cd743841e9d8b878f34d91b793b4fad", + "45e87510cf5705262185f46905fae35f", + "276047016b0bfb501b2d4fc748165793", + "ddd245df5a799417d350bd7f4e0b0b7e", + "d34d917a54a2983f3fdbc4b14caae382", + "7730fbc09d0c1fb1939a8fc436f6b995", + "eb4899ef257a1711cc9270a19702e5b5", + "8a30932014bce35bba620895d374df7a", + "1924aabf9c50aa00bee5e1f95b5d9e12", + "1758d6f8b982aec9fbe50f20e3082b46", + "cd075928ab7e6883e697fe7fd3ac43ee", +} + +// hashes2X is taken from +// https://github.com/BLAKE2/BLAKE2/blob/master/testvectors/blake2-kat.json +var hashes2X = []string{ + "0e", + "5196", + "ad6bad", + "d8e4b32f", + "8eb89056f3", + "410497c2ed72", + "f0de771b375c90", + "8662db8685033611", + "9ef9f1eed88a3f52ca", + "08225082df0d2b0a815e", + "0f6e84a17439f1bc97c299", + "895ec39c78d3556cefdbfabc", + "2b396b3fa90ab556079a79b44d", + "abae26501c4c1d6123c0f2289111", + "bca098df9099b3f785a37ba40fce5f", + "19b827f054b67a120f11efb0d690be70", + "b88d32a338fd60b58570fda228a121113b", + "3f30143af1cad33f9b794576e078cc79062e", + "ffddb58d9aa8d38086fcdae07e6653e8f31dfc", + "abb99c2e74a74556919040ca0cd857c95ec985e9", + "71f13f89af55ba936f8a7188ee93d2e8fb0cf2a720", + "99734fdf0eef4838a7515426f4c59b800854e2fcdc1c", + "579b1652aa1f5779d2b0e61868af856855020bdd44d7a7", + "1383d4ab4a6d8672b4075d421a159f69380ff47e4bb518d5", + "d3fa1412712dbbab71d4c6265dc1585c8dcc73380cf807f76a", + "1d57868a71e7245667780455d9aaa9e0683baf08fbaf946091c2", + "ef80418fe7049c6251ed7960a6b0e9def0da2749781994b24593a0", + "ef91cb81e4bfb50231e89475e251e2ef2fde59357551cd227588b63f", + "d7f398a5d21c3139cff0562a84f154b6953c7bc18a5f4b60491c196b6d", + "0a2abc6d38f30aef253579a4088c5b9aec64391f37d576eb06a300c193a5", + "02dd758fa23113a14fd94830e50e0f6b86faec4e551e808b0ca8d00fef2a15", + "a4fe2bd0f96a215fa7164ae1a405f4030a586c12b0c29806a099d7d7fdd8dd72", + "7dce710a20f42ab687ec6ea83b53faaa418229ce0d5a2ff2a5e66defb0b65c03c9", + "0320c40b5eea641d0bc25420b7545ac1d796b61563728a4dc451207f1addeedcf860", + "460539415f2baeb626fad748dee0eb3e9f27221661160e13edf39d1b5d476ee0672400", + "02de8ffa5b9c748164f99ed9d678b02e53f4ae88fb26c6d94a8cefc328725a692eae78c2", + "348a61a0136436136910262ad67ef20644b32c15456d5fad6b1679386d0bea87cc1a2e2b5e", + "24c32966c803434d48d2283482ee8f404f598cf7a17961748125d2ed1da987039b1ce00f2ba7", + "bd07cb16121d3b47adf03b96c41c947beadc01e40548e0d0773e61780d48d33a0e2a675ca681a6", + "a35844e34c20b4b9371b6c52fac412afe5d80a4c1e40aa3a0e5a729dc3d41c2c3719d096f616f0ba", + "6df1efbb4567747fe98d218935612f8835852dde2ce3dec767792d7f1d876cdae0056fef085245449d", + "48d6094af78bd38d8f4b39c54279b80ef617bc6ad21def0b2c62113b656c5d6a55aea2e3fde94a254b92", + "cd6e684759d2f19083164712c2aca0038442efb5b646594396b1fccdbd21203290f44cfdecca0373b3801b", + "155dfbf26103c8354362663677fa27d0e1ce3487a821a2a7171014c1bd5dd071f4974df272b1374765b8f2e1", + "15b11067f311efa4ee813dbca48d690dc92780656bc4d4c56510523190a240180867c829a8b8b9844175a8aa23", + "9bc27953a17fb84d5eabe95b4ea6bc03ea450274abccfb6f3938ded8560fb59662459a11a86b0e0f32fbea6bb1f8", + "03b78fb0b34fb8662accdf350a6be75ace9789653ee4375d351e871f6a98ac5e782ca4b4a717665d25e49a5ae25d81", + "687e9a6fda6e2ce0e40e4d30fef38c31e3513d2892bbe85c991fc3715947e42bc49bcd079a40ed061c2c3665efe555ab", + "f3886027d2049a8909e26545bd202d6a6fa2a6f815d31c7d520f705a81fa606dd695369c37aee4fa77dc645e9b05813ceb", + "e4a412ccd20b97797d91ccc286904fcd17c5afe8bed0618f1af333c052c473cd327637d951c32e4af047106036a3bc8c1c45", + "92f4b8c240a28b6238bc2eabadaf2ff3c4bfe0e6c61268ace6aebdeb0691450caea4287db8b329bde96af8cdb8a0fe2f57ef2d", + "e506834b3445e1a9a9b7bae844e91e0834512a06c0dc75fa4604e3b903c4e23616f2e0c78b5cc496660b4a13064bb1138edef4ff", + "27031955a40d8dbd1591f26e3c26e367a3c68f8204a396c6a4ba34b89672896d11276966a42bd516716f35ed63e442e116dbcf35da", + "646b1635c68d2328dddd5ac26eb9877c24c28390a45753a65044c3136ae2fe4fb40d09bf555271646d3dceb1ab1b7c8d8e421f553f94", + "f6171f8d833743bdee7cc8f8b29c38614e1d2d8d6a5fff68bec2c0f4dd463d7941ff5c368e2683d8f1dc97119bde2b73ca412718bc8cb1", + "45db1c478b040aa2e23fb4427017079810775c62abe737e82ec0ef8dcd0fc51f521f29fe6412fff7eac9beb7bcf75f483f3f8b971e42454b", + "500dab14687db3ca3dde9304af5f54194b37bdf475628af46b07bfbf6bc2b64ecef284b17f9d1d9be41794699bc0e76c2878b3a55730f7142d", + "31bba2efc7b3f415c3f031d4c06bb590ae40085ad157370af30238e03e25a359c9e133212ed34b7a006f839173b577e7015a87fdff2270fafddb", + "0600b3fb4b5e1ed0c8b2698ac1d9905e67e027390764821f963ad8d2b33cbc378b9c25c3ee422992d22b760222ed5697be0576d73938ae9d634ed7", + "4c0ca4f177d132594a4c613bad68da24c564efa3b4da0d0a903f26534a2e09f8d799d10e78f48ccdb0203954a36c5cf1bf24c076632c2b022b041200", + "97aacf2e1b013677b2e14084f097cb1e64d7b3fa36f097e189d86dc4a263bcc46817cd1ee6ff0c7ccd9acef63201cdc0e36254e19204a7388643bb571f", + "71fd6846ce7adb0843d6063546a16b79b54ad6c0f018a479a45817624fa221f63525084860559d1a0679c8d89a80701c62743ec2da8419d503f8f0cd7946", + "f73dfb046def3362d6de36077dae2cee2587fe95fe0800548bb7d99737897096ba59052e0dadcc1fb0ccb5535391875328637a0376a43a4d89366758dfe3e2", + "ec470d0aa932c78c5bcf86203ec0014314114765fa679c3daef214f883a17e1b4ca12f44433772a6e4ef685c904b2fc35586c6bd88f325b965968b06d808d73f", + "cf601753ffa09fe48a8a84c37769991e96290e200bbaf1910c57760f989bd0c72e6128e294528ee861ad7eee70d589de3cf4a0c35f7197e1925a64d0133628d87d", + "f15413f7d6fc54bb55829f698da92ee42fcf58dde1aa1bd07d438ecdc32ad6bf2bcdbecc99f18ed43e81b33065af5a4ca29960ae50553e610c0bbf4153d580e73dbb", + "84b1738adb9757fb9402ef7113581291136184d7ae35fe0b6a738da6acb0889d4d5bac7a957024e3709fa80c77d3859871ed1aa25cf488e438a2d24cfadce6008761dd", + "e02814bb81f250c1835a05108396b74c7878e737654bb83155e241774d04e639bbc571b413cd9349092f926c8a149a53cd33e9b63f370b6d460e504199d2e7d849db6cbe", + "aeee4a789956ec0913592c30ce4f9c544894da77ba447c84df3be2c869100e4df8f7e316445d844b31c3209abcc912f647735fd4a7136c2f35c6fda5b2e6708f5ca951b2b0", + "8cfd11ca385de3c843de84c830d59278fe79b70fb5ddbfbfc1ddefeb22c329ef2f607d1d1abbd1cd0d0cc7c5d3ed922add76aadca0d2f57b66cb16c582b6f18f60aee2f7509b", + "852e5ce2047d8d8b42b4c7e4987b95d23e8026a202d4567951bbbd23111e389fe33a736318546a914d2bddedfbf53846036ad9e35f29318b1f96e33eba08f071d6dc665149feb6", + "f225c23164979d0d13874a90ee291627e4f61a672a5578506fd3d65a12cb48a182f78350dc24c637b2f3950dc4882a5c1d5d5bad551c6f3e0093aa87e962bea51566af3791d52d65", + "5f33864d882455f8ef046aed64e2d1691e5c1555e333b0852750592e6f00d3b5ec941d0c00e99629612795d5870cf93c984b45e4464ba072a34903b400a42824ac13da28c7c1cb1959", + "7baaee7c3eb68c18c5ae1d45ba381803de34e36a52e2d7ccc9d48a297273c4d8644b473195bc23005f7a4f5ca790b1fa11f6a96e585e635513f11745dd97a69c1222204ab28d3c7735df", + "d0a2a3fc450ef9af7ae982041feb2842901026467d87839c33b4a9e081ea63d5be60ae99ca6e42393ded45255b8f42886f87ba0310572d9f0d8b5a07ff4b6bae1f30559a844983cc568560", + "3aa4164462b3e7044c35b08b047b924790f6d5c520b1df4305b5d41f4717e81f0cd4bccb9a5a6594773832b8707443adde4047caaed2293f92234df257df54ed275a9658fab483d0576d33a9", + "c8b4239fd7f1b893d978268f77f6505b5775d89090374322d40083b0f4c437423f670ca213f7fe05c61069725da2561646eefaea597ac48e293fbad44c2872046857e56d04a426a84008cefd71", + "f94839a7024c0a16971271b6727c081770110c957b1f2e03be03d2200b565cf8240f2873b0426042aaea996a1784fadb2b27f23bc1a521b4f7320dfbed86cd38d75141365ba9b443defc0a3b4078", + "8af934fdc8b3376ca09bdd89f9057ed38b656bff96a8f8a3038d456a265689ca32036670cb01469cc6e958cc4a46f1e80d700ae56659828a65c0456b8e55f28f255bc86ce48e44377bf1f9970b617d", + "ada572989e42f0e38c1f7c22b46bb52a84df8f7b3b773c9f17a5823e59a9725248d703efb4cb011abc9474e8e711666ed3cfa60db48480a8160615dfabad761bc0eb843d2e46299c59b61a15b4422fdf", + "b11f1ea52a7e4bd2a5cf1e234b7c9eb909fb45860080f0a6bdb5517a37b5b7cd90f3a9e2297f995e96c293189b807a7bf6e7633bebbc36674544db5f18dd33020aeaf50ee832efe4d3d053873fd31ce3b9", + "e54b006cd96c43d19787c1ab1e08ea0f8922bdb7142e748212e7912a1f2c0a4fad1b9f5209c30960b8b83ef4960e929b155a8a48c8fb7ce4326915950cede6b98a96b6f1ecb12715b713985dacd1c1180413", + "ee2c2f31a414ccd8f6a790f55e09155fd50aac2a878f9014f6c6035cae9186f90cdef0b7adf3e207c3d24ddfba8cd321b2e9228b02a1182b6973da6698071fce8cc0a23a7bf0d5aefd21ab1b8dc7818549bba3", + "6d6810793bad6c7efe8fd56cac04a0fb8717a44c09cbfaebce196a80ac318c79ca5c2db54fee8191ee2d305b690a92bd9e2c947a3c29342a93ac05796484638787a184e4525e82aeb9afa2f9480caebb91014c51", + "91e4694366cff84854872667fd168d2d42eca9070cdc92fca9936e8361e7266931f418450d098a42686241d08024dd72f0024d22ba644bd414245e78608942321ff61860ba1245f83c88592dc7995c49c0c53aa8a9", + "608aa620a5cf145f4477694407ccd8faa3182465b29ae98d96a42f7409434c21e4671bcae079f6871a09d8f2965e4926a9b08277d32f9dd6a474e3a9fb232f27fc4235df9c02abf67f7e540ca9ddc270ee91b23a5b57", + "c14f75e92f75f4356ab01c8792af13383e7fef2ffb3064de55e8da0a50511fea364ccd8140134872adccad197228319260a7b77b67a39677a0dcdcadfb750333ac8e032121e278bdcdbed5e452dae0416011186d9ebf29", + "03fcb9f6e1f058091b11351e775184ff2cd1f31ee846c6ea8efd49dd344f4af473f92eb44eba8a019776f77bb24e294aa9f962b39feecf7c59d46f1a606f89b1e81c2715ac9aa252e9ce941d091ffb99bb52404961794cf8", + "11e189b1d90fcfe8111c79c5351d826f5ec15a602af3b71d50bc7ed813f36c9a682520984ae911669d3c3036223a53176794c7e17929efab2b1c5b500f24f8c83d3db5d1029c5714c6fd34eb800a913985c218071677b9885c", + "69f8f5db3ab0321a708ab2f4234645dade6bfda495851dbe7257f2b72e3e8378b9fa8120bc836b737a675271e519b4712d2b56b359e0f2234ba7552dd4828b939e0542e729878ac1f81b6ce14cb573e76af3a6aa227f95b2350e", + "be734d78fae92cacb009cc400e023086bc3a3a10e8ca7cb4d553ea85314f51383660b8508e8477af60baf7e07c04cc9e094690ae12c73e5f089763201b4b48d664b94b4f5820bd1540f4a84100fdf8fce7f6466aa5d5c34fcbab45", + "d61b77032403f9b6ea5ad2b760eb0157545e37f1712ec44d7926ccf130e8fc0fe8e9b15570a6214c3899a074811486182b250dc97ebdd3b61403614d935cd0a61c0899f31b0e49b81c8a9a4fe8409822c470aacfde229d965dd62f51", + "c31bd548e36d5fae95ed8fa6e807642711c897f0fcc3b0d00bd317ed2bca73412064618c6a84a61c71bce3e963333b0266a5656571dcc4ba8a8c9d84af4bdb445c34a7aef445b15d77698e0b13c436c928cc7fa7acd5f68867e8132993", + "9903b8adab803d085b634bfae2e109dd247a7d6249f203403216d9f7410c36142df8fa56fb4d6f78136eef5817bad5ea3608439bb19336628c37d42db16ab2df8018b773baedafb77278a50926370b48bd81710203c7abc7b4043f9a1751", + "4dadaf0d6a96022c8ce40d48f460526d9956da33260e1770315ead420da75b122c762762aa3ddc1aef9070ff2298b2304cf90443318b17183b60778f3859b141053e5827decfff27ff106a48cfdb0371d0ef614fc7400e860b676df3176d1a", + "314dda800f2f494ca9c9678f178940d2284cb29c51cb01ca2019a9bede0cdc50f8ecf2a77e238b884867e78e691461a66100b38f374c4ccac80309641533a3217eca7e6b9a9af01c026201f0afaec5a61629a59eb530c3cb81934b0cb5b45eae", + "4658b7500951f75c84e4509d74047ca621009835c0152f03c9f96ca73beb29608c44390ba4473323e621284be872bdb72175628780113e470036265d11dfcb284ac04604e667f1e4c1d357a411d3100d4d9f84a14a6fabd1e3f4de0ac81af50179", + "491f877592837e7912f16b73ee1fb06f4633d854a5723e156978f48ec48fbd8b5e863c24d838ff95fa865155d07e5513df42c8bb7706f8e3806b705866475c0ac04bbe5aa4b91b7dc373e82153483b1b03304a1a791b058926c1becd069509cbf46e", + "231034720c719ab31f7c146a702a971f5943b70086b80a2a3eb928fa9380b7a1ad8773bfd0739142d2ad6e19819765ca54f92db5f16c1df5fa4b445c266215a92527bd4ef50ed277b9a21aee3fb7a8128c14ce084f53eac878a7a660b7c011eb1a33c5", + "3366860c77804fe0b4f368b02bb5b0d150821d957e3ba37842da9fc8d336e9d702c8446ecafbd19d79b868702f32405853bc17695873a7306e0ce4573cd9ac0b7fc7dd35534d7635198d152a1802f7d8d6a4bb07600fcdaacfaa1c3f40a09bc02e974c99", + "ccbbbe621f910a95835f5f8d74b21e13f8a4b03f72f91f37b5c7e995aa3cd5539508d5e234e77a4668a42c239b2d13ef0e55ecf85142055e3f8a7e46320e21324a6b88e6c823ac04b485125c2aa59b61476481208f92ea4dd330cb18777c1cf0df7cd07893", + "87faf0e49e7e5ab66ee3147921f8817867fe637d4ab694c33ee8009c759e7d707f44c69c1b9754e2b4f8f47b25f51cd01de7273f548f4952e8efc4d9044c6ea72d1d5857e0ffeb3f44b0c88cb67683401cfb2f1d17f0ca5696641bef28d7579f68d9d066d968", + "38c876a007ec727c92e2503990c4d9407cea2271026aee88cd7b16c4396f00cc4b760576adf2d683713a3f6063cc13ecd7e4f3b6148ad914ca89f34d1375aa4c8e2033f1315153189507bfd116b07fc4bc14f751bbbb0e752f621153ae8df4d68491a22430b309", + "87d636a33dbd9ad81ecd6f3569e418bf8a972f97c5644787b99c361195231a72455a121dd7b3254d6ff80101a0a1e2b1eb1ca4866bd23063fe007310c88c4a2ab3b49f14755cd0ee0e5ffa2fd0d2c0ea41d89e67a27a8f6c94b134ba8d361491b3c20bacac3d226b", + "b021af793badbb857f9a353e320450c44c1030fce3885e6b271bcc02e6af65fdc5be4dc483ff44bd5d539ed1e7eb7efe3001252e92a87df8227ace601047e101c871d29302b3cb6c6f4639078afc81c4c0f4c2e04688612ecf3f7be1d58ea92894a5dab49b949f2089", + "c5c1f2fbf2c8504a686b615278fc6221858d401b7fe790b75fb6bca6885cdd128e9142bf925471ee126f9e62d984de1c30c9c677eff5fdbd5eb0fa4ef3bff6a831056cea20fd61cf44d56ffc5bda0e8472ecdc67946d63c40db4ba882bc4dfa16d8ddac600570b9b6bf3", + "88f8cc0daeaeaea7ab0520a311dff91b1fd9a7a3ec778c333422c9f3eb0bc183acc80dfefb17a5ac5f95c490693c45666ec69234919b83244003191bad837aa2a237daeb427e07b9e7aa6ca94b1db03d54ee8f4fe8d0802cb14a6599005eb6326eefe5008d9098d40aa851", + "2eb6b1a58e7fe39ff915ac84c2f21a22432c4f0d260380a3f993310af048b11647f95d23adf8a746500833ee4e467fb52ea9f1039519fa58bcb0f1d0151558147b3c92b83730aba0e20eeeea2b75f3ff3ad79f2f8a46cbbadb114a52e32f018342aeeaf827e03ad6d583bbce", + "3ba7dcd16a98be1df6b904457709b906cbf8d39516ef107006c0bf363db79f91aaae033466624d30858e61c2c368599963e49f22446e4473aa0df06e9c734e183a941510d540536377072334910e9cef56bc66c12df310ecd4b9dc14207439c1da0ac08bdd9be9f2c840df207e", + "a34a7926324ea96867dac6f0dba51d753268e497b1c4f272918c7eb0e34120be65b7b5ba044d583141ec3ea16fcedae6197116b16562fb0706a89dc8efd3ba173ccd0fd7d84d480e0a3dda3b580c326aa1caca623879b0fb91e7d173998889da704eda6495023b5ad4c9ad406298", + "5ef97d80b90d5c716322d9ba645a0e1b7a403968258a7d43d310320f60f96235f50e9f22cac0ad239636521fa0607d2f471051b505b371d88778c46fe6787d47a91a5bec4e3900fe6ed22918226fc9fbb3f70ee733c369420612b76b5f55988d757c891d7005d17ee55783fe506202", + "140d2c08dae0553f6a49585fd5c217796279152b2e100ebde6812d6e5f6b862b2a3a484aed4d6226197e511be2d7f05f55a916e32534ddcb81bdcf499c3f44f526eb515cc3b6fa4c4039ad251253241f541558bba7413ca29318a414179048a054104e433c674ca2d4b3a4c181878727", + "29fdfc1e859b001ee104d107216b5299a792d26b2418e823e0381fa390380d654e4a0a0720ba5ff59b2ff22d8c4e013284f980911dcfec7f0dca2f89867f311ced1ac8a14d669ef1114504a5b7626f67b22ecd86469800f1575543b72ab1d4c5c10ee08f06159a4a3e1ae09937f12aa173", + "52dfb643832a598a10786a430fc484d6370a05356ee61c80a101dbbcfac75847fba78e27e537cc4eb918eb5ab40b968d0fb23506fee2ad37e12fb7534fb55a9e50902b69ceb78d51db449cbe2d1fc0a8c0022d8a82e2182b0a059035e5f6c4f4cc90278518e178becfbea814f317f9e7c051", + "d32f69c6a8ee00ca83b82eaf82e312fbb00d9b2f6202412a1ffc6890b4509bbbeda4c4a90e8f7bca37e7fd82bd23307e2342d27aa10039a83da55e84ce273822740510e4ec239d73c52b0cbc245ad523af961994f19db225212bf4cc160f68a84760233952a8e09f2c963be9bb1d71ca4bb265", + "d1e603a46aa49ee1a9ded63918f80feca5fc22fb45f659fd837ff79be5ad7faf0bbd9c4ba91628ee293b478a7e6a7bd433fa265c20e5941b9ea7edc906055ce9799cbb06d0b33ae7ed7f4b918cc082c3d4a1ac317a4acec175a73cc3eeb7cb97d96d24133a29c19375c57f3a4105519846dd14d4", + "b45ac88fac2e8d8f5a4a90930cd7523730733369af9e39bf1ffb833c01108952198301f4619f04b9c399fef04c214bad3358999967c474b67a7c06457a1d61f9466489ed5c0c64c6cdc83027386d6263491d18e81ae8d68ca4e396a71207adaaa60997d0dca867065e68852e6dba9669b62dc7672b", + "d5f2893edd67f8a4b5245a616039ffe459d50e3d103ad4675102028f2c497ea69bf52fa62cd9e84f30ae2ea40449302932bbb0a5e426a054f166fdbe92c744314cc0a0aa58bbc3a8739f7e099961219ec208a8d01c1ae8a2a2b06534bf822aaa00ca96218e430f0389c69c7f3fd195e128c38d484ff6", + "37279a76e79f33f8b52f29358841db9ec2e03cc86d09a335f5a35c0a31a1db3e9c4eb7b1d1b978332f47f8c3e5409d4e443e1d15342a316f442e3bfa151f6a0d216df2443d80cbcf12c101c51f2946d81161583218584640f4f9c10de3bb3f4772bd3a0f4a365f444777456b913592719818afb26472b6", + "a46d252a0addf504ad2541e7d992cbed58a22ea5679980fb0df072d37540a77dd0a1448bdb7f172da7da19d6e4180a29356ecb2a8b5199b59a24e7028bb4521f3281313d2c00da9e1d284972ab6527066e9d508d68094c6aa03537226ef19c28d47f91dddebfcc796ec4221642ddf9de5b80b3b90c22d9e7", + "060c18d8b57b5e6572dee194c69e265c2743a48d4185a802eaa8d4dbd4c66c9ff725c93667f1fb816418f18c5f9be55e38b7718a9250bc06284bd834c7bd6dfcd11a97c14779ac539629bcd6e15b5fca3466d14fe60d8671af0fb8b080218703bc1c21563b8f640fde0304a3f4aeb9ec0482f880b5be0daa74", + "8f2f42bc01acca20d36054ec81272da60580a9a5414697e0bdb4e44a4ab18b8e690c8056d32f6eaaf9ee08f3448f1f23b9844cf33fb4a93cba5e8157b00b2179d18b6aa7215ae4e9dc9ad52484ad4bfb3688fc80565ddb246dd6db8f0937e01b0d2f2e2a64ad87e03c2a4ad74af5ab97976379445b96404f1d71", + "ccb9e524051cca0578aa1cb437116a01c400338f371f9e57525214ad5143b9c3416897eae8e584ce79347297071f67041f921cbc381c2be0b310b8004d039c7cc08cb8ff30ef83c3db413f3fb9c799e31cd930f64da1592ec980cc19830b2a448594cb12a61fc7a229e9c59fe1d66179772865894afd068f0942e5", + "3eb5dc42172022ab7d0bc465a3c725b2d82ee8d9844b396913ceb8a885323dbbbf9ef4ed549724cc96d451ea1d1d44a8175a75f2a7d44bb8bfc2c2dffed00db0328cfde52bf9171f4025770abbe59b3aefd8151c480bafa09f613955fd571e5d8c0d4936c670d182cf119c068d420ded12af694d63cd5aef2f4f6f71", + "20ea77e58e41337ad63f149ed962a8210b6efa3747fe9bea317c4b48f9641f7145b7906ed020a7ae7d2ee59435392edc32aee7eff978a661375af723fbd440dd84e4a152f2e6ef66f4ab1046b22c77ac52717de721dfe39aa8ba8cd5da27baca00cc1fffe12c52382f0ee83ad1418f4c6a122effaf7471e1e125d7e7ba", + "95c662b835171fa23f948c3c3ed27bab9b3c367bbfe267fe65f8037a35b50cd7fc6030bfce4000425ef646c34793f0762635ae70487a0216ef7428da622be895d1b6040423246511c2370d6876a5c5d2df8bbd48fb14f787b632ad2c1f5a927fdf36bc493c1c8606accfa52de33258669f7d2d73c9c81119591c8ea2b0ef", + "f708a230675d83299cc43167a771602d52fa37cbc068ef9128ef60d186e5d98efb8c98798da619d2011bf4673214f4a4c82e4b11156f6292f6e676d5b84dc1b81e7cc811b0d37310ac58da1bfcb339f6ba689d80dd876b82d131e03f450c6c9f15c3a3b3d4db43c273c94ed1d1bd6d369c4d30256ff80ea626bda56a6b94ea", + "f8417766ce86b275f2b7fec49da832ab9bf9cb6fdfe1b916979ae5b69176d7e0293f8d34cb55cf2b4264a8d671370cb595c419c1a3ce5b8afa642208481333522005fbe48cdc700e47b29254b79f685e1e91e7e34121784f53bd6a7d9fb6369571bba992c54316a54e309bbc2d488e9f4233d51d72a0dd8845772377f2c0feb9", + "3479e04efa2318afc441931a7d0134abc2f04227239fa5a6ae40f25189da1f1f313732026631969d3761aea0c478528b129808955be429136eeff003779dd0b8757e3b802bdff0f5f957e19278eabad72764aa74d469231e935f4c80040462ab56094e4a69a82346b3aeb075e73a8e30318e46fdaec0a42f17ccf5b592fb800613", + "03df0e061fa2ae63b42f94a1ba387661760deaab3ec8ffabcaff20eeed8d0717d8d09a0eafd9bde04e97b9501ac0c6f4255331f787d16054873f0673a3b42ce23b75a3b38c1ebcc04306d086c57a79d6095d8ce78e082a66c9efca7c2650c1046c6e0bbce0b2cba27c3824333e50e046e2a7703d3328ab3b82c9d6a51bc99b9516ff", + "76b488b801932932beefffdd8c19cf5b4632306e69e37e6a837e9a20c8e073bcadd5640549faa4972ebd7ee55cb2425b74cb041a52dd401b1a531beb6dfb23c4cfe74bc84f034156c8f55050ca93236eb73c4e2595d9fbf93dc49e1ec9a31705359732dda73f737ec4274e5c82626dc4ec929e5e2c7a2f5f5fb666181922bd8be575e3", + "ff17f6ef13abc0426b03d309dc6e8eeb822300f7b87eff4f9c44140a424098fd2aef860e5646066d22f5e8ed1e82a459c9b9ad7b9d5978c29718e17bff4eeefd1a80ba48108b551e62cd8be919e29edea8fbd5a96dfc97d01058d226105cfcdec0fba5d70769039c77be10bd182bd67f431e4b48b3345f534f08a4beb49628515d3e0b67", + "95b9d7b5b88431445ec80df511d4d106db2da75a2ba201484f90699157e5954d31a19f34d8f11524c1dabd88b9c3adcdba0520b2bdc8485def670409d1cd3707ff5f3e9dffe1bca56a23f254bf24770e2e636755f215814c8e897a062fd84c9f3f3fd62d16c6672a2578db26f65851b2c9f50e0f42685733a12dd9828cee198eb7c835b066", + "010e2192db21f3d49f96ba542b9977588025d823fc941c1c02d982eae87fb58c200b70b88d41bbe8ab0b0e8d6e0f14f7da03fde25e10148887d698289d2f686fa1408501422e1250af6b63e8bb30aac23dcdec4bba9c517361dff6dff5e6c6d9adcf42e1606e451b0004de10d90f0aed30dd853a7143e9e3f9256a1e638793713013ebee79d5", + "02aaf6b569e8e5b703ff5f28ccb6b89bf879b7311ea7f1a25edd372db62de8e000219afc1ad67e7909cc2f7c714c6fc63ba341062cebf24780980899950afc35cef38086ee88991e3002ae17c07fd8a16a49a8a90fc5540be0956dff95390c3d37629949de99920d93096eb35cf0427f75a6561cf68326e129dbeffb8772bfdce245d320f922ae", + "70752b3f18713e2f533246a2a46e38a83cc36dfccec07c1030b5204cba4432700735a8cee538b078d281a2d0262110381c5815a112bb84404f55af91652bd17502dd75e4910e062943d8a736ae3eecdfdd8e3f83e0a5e2ddeeff0ccbdadaddc95391310fc657a59724f7e6560c37dc1d5bb5db40170190f04a274c864ade9687c0f6a2a48283177a", + "01f3c1333b44077c518cc594d0fb90c37651fb7b2442e71fc0a5611097f1cf7bcfaf11c8e0ac1b1cab54afba15bb9332df6bc64d8032368e3f686c8324b0114e0979dad78a5ccd3fff88bbe89eef89c4be586ca092addef552ed33224e85d8c2f4fba85ac7735f34b6aa5ae5299154f861a9fb83046b0e8fca4db32c1343e02676f283975f43c086cf", + "509283ebc99ff8d87902fa00e2d2a6fa239e335fb840dbd0fdbab6ed2d95e8275402523f7ce9a2fabd4b6c9b533288fbe914bde84365a204711d0977a7d698f4614385984dd4c137e4820035dd6737da364edff1bb62283e87a8c7ae8637314fe9b5777ec4ec21276dafedb2ad5ee1aa0ac99e34a6c01c055c8a239fd28681607f65143082cd4553c529", + "c17e417e876db4e123c631f7136b8a85bfd6ce66a69180d0cd5ecfd6f037bb1c7bd7908d51f2c485bf9e92c0e1799ee5f6ab834ee481f5eb1a8020205adb4d0f90126d4e7c2c859c5a5f644bdfa9c649ff4f168e834de6f9769429732099d46d0af506ab86c6fd92175159bbc05c75db8e1fa867e6030d64250008d64c857c47caec3dc8b2ffb384d0193e", + "950988fbe9d62a66f5f2c492bc8dc944a78eb3796ec37ba94b6a81a9d402ccad03cd8497fff74c5f4a03081c5fecec48574fecb21c1de261332c23108195d3f6a96ff8e433a1a30eda53dd5bb414973334f8cde5510ff759f7c17046cbb5acd8e8c4a6eecf2a9121ec3fc4b22c4daa72678194ce809024cd45c4ebb9ccdb6f854205cdb624f0787480d8034d", + "552a212c403b473741da8e9c7b916d5e5e9bcc9949021ae1ca1ed46b7d4a98addbb604d9fff56175b7e0367db26c9635fa7813653dc8d610befdd09ec41e99b192a716106f4299eec8b940863e5a59cf26cdc2cd0c3017f9b4f215812bed15f69e77edf672178e13c55580982f01fcc2fa131ec3d736a55d56504c545f4be50fee83f1263e4d3f3c877cc6242c", + "b00c4283dd3d9cd26e44bd97cede6c771cb14f2571b51cfdaae4309560ffd165da025a1bbd31096c3aa8286e2d6dcc3e681b8d01f2c5064ea26dfd0b5156b7a7f5d1e046c5bd1628f8fdae24b03bdf7cf7366900cc013a8cbed9d7f5937c914b08f8c27683b956e1279812d04288515333fc6aba3684dde2292951f0610649d90fe61606630fc6a4cd383649252c", + "f6e79457bb6d0884dd223be2cf5ae412a1ed425f1e4012f75951b096aea3b9f3581f9013bcae1aff2d3fc1e5c7e06f24af6d53c2c5c238b71c71cc670b05a7ee5204400026a5c4e5ddec3ad96771e49fae4b0f75ec58049ad9d972e5749a32d90f847f1ed2a1bab83db181e541cf5c8adb6b29ecc64dc25add491d408d3eb3ddcb013de7f5ffb6de9dd7ff300a5fc6", + "fe1d71e1d5efa3f712d23216ee8ee9139e66bd648b83efc02cdb4d45a28cf36759ff190a84d14d9471477abefb5aea4111110336143dd80cf81e02f268120cc07d746538f968e9876bff8358d390f5b8e7eafa61ecd236cedaf276bd61865fdd3424988201dcdeda2e3e0c33c9e3b3670125dd1049106cc6df5695fb2dca443233ff440f265bbff055483bac1e859b83", + "4c80163562872a965dedd8725652906156ada6e9d999027d96f49289edb92f9ef043e9d7c3377e091b27f85275499454af32317535997fb4aaeaf93565ad481ff7d45d2abddd4df4b60f71a6923ec30496c6ae534dc5427107ab4c5e656a322c7ab058d4c13ec0ebafa76576560697ac98f84aa4a554f98ec87134c0d7dca9184cf70412a324aac91823c0aca02537d197", + "fdd58c5ffe88665beb7073c8f4c22472f4bc9390cdd27a42622ca55978b000ab7579f795d4de0dfcaf521b8268980ef1d20277b07567985c0fd5030784ad6c32541ac24e99ab706105a2255fc32935c0fce6fdad9bb224d94ae4eae2a3ff08836618a3adf193630647bce1952b69da4de360f59da303519278bfd39b733cf66820a5e9e971b702f45998b69a0889f4bec8ec", + "ff38b15aba3794e2c81d88003e045ac6cbfc9f4833cdf896cefd8ac0c88674727ad9a9fcb9ef36574deea480e6f6e8691c8390ad73b8ea0eb3665c914b0d886546948e67d7987eea248b5feb52346ffdd965d5c835144c3bc63daf325e74b11267e32e58a914ae4521a668839d9445fececa49c5fba41f9e171698bbc7c6c97fa163a377a96456958d6e1d74f91ada56a30df8", + "f048c19328d60b4e59ed76940415b2c84c23883198bba5699efb0a1774ad5da6d15390c7b55d77d66f37448fe08107f42a5336408d5322f4b630e3275865fc66dccab39f6e13fabc133e5a441fe352d81c7cd9a25f145a6e2e2417d3b0bbc79eafcd7ad688c02011fd268dd44ac3f4f87b37a84a46fd9e9975962fba92c9a3486deb0c45f6a2e044df4bb79f0feeea432c5008b0", + "1b3e5fe6f113cce28a6f8d6f7809d3cec398cabffe9ff2ff10a7fec29a4ee4b54186063fd5307a2be393c9ecd75a37620bdb94c9c18da69b658579676ec90351d10dc33a7cb3b75798b1234f9f684d4a73a0fab2df3d5d6fdb1c1b1514d0935c1f2dd21486f91c2595b2f8f8a500ff443b9305270fb6f3da7961d9316d4ed6a135a31c4a3611d40e6585bbb34f498cd5b9a5d92676", + "740db337baa12b16897f17a85fa5685acc85e48338867f8ac9c0198dd650f5dfa7c17725c1262c72207e365c8aa45ffaab6470a0e5afefbfc3bb702a9766064f28cc8b796878dfdd3ca9d0216c14941438fc541fb5be0a13d29a996c5c985db4f630df067a5626db5dcd8df3a2bff17dc446e46e4079b8815da4318cb228c7722684e2a795a0ca56f500ea51951a6a385385d886f678", + "1465f2d578d167faa017fe8f763ce3cc8dc1e8371d774ed2a8803f12585296ee71a1f2253dd16b717a81f91f0f3641018a0111182b4e65d884b0a3d0292631ad807cdccc88bdeecb476e76f72b5246a630aff6e2401fa9570f85acb73ccb4e19ef04a932a03d7b7985dbe1e5bb410df517fe362321469e6f8b0e0cef6c31d7aa8ec06aa220620d66cc0e133fdee963589b12320fc9678e", + "80c051952fa6f3ef6af0f1759ec3e83c8eb91abee1de360bfa09e74b05af2475a0dbf8f9135aa25892919bbe0515898cfb6f88abc9e1891f2b2180bb97370f578973d55c13c35edb22ed80647c2a7e2884d1ccb2dc2f92d7b6ec5843ade13a608a31190ce965bde97161c4d4af1d91ca9962053f9aa51865bdf04fc23fa35a6fc3c8e888941263a26ed66c2dd0b29b2325dfbd1227c5091c", + "9c1e2a1aed6406052eed12b4495365f2f80e9c9645473f3549b607f20910bcd16dc3a4b173ac8d128129cdb7c76ebbc8e9a2a1ba0d822c66b367e790a69ac71f0a60ed4bff0e979148e3f3ee6607c76dbc572ee5ff17c27e4b52adebb4bedddff517f591a1977299c7cb01106f1453b098d29848ba3751c816215bb0d090c50f9e445b41b2c49d4eec83b92ce6c269ce835fd279e7cbbb5e47", + "466abda8944d0329d2975c0f2e2afc901f117887af301881f63b714f49a2f692fa63a8871fc0b301fe8573dc9b2689880cd8969e5072c57671e0633b041481dab25e65c9de404af033a11a8070c8ab70ca6d465318501afdd9940c7efbe1bb6d49581c222fad251dba4ee0a98efe22a3c4f74da05844523b30bbad6b080ac8df70a02da80bc9d477dfb869adb211e209a316d5dd1fd89a6b8f8e", + "0e89a873e07799ba9372fc95d483193bd91a1ee6cc186374b51c8e4d1f40dd3d30e08f7feecfffbea5395d480ee588a294b96304b04f1ee7bbf6200cc8876395d1db3ac813e1019bb68d27204e514fe4a61ad2cbd1782dca0e38b5538c5390bca626c5895b745cfca5dac636fd4f37fed9014ab46ae1156c7789bbcbb956ff7ee5ce9effa560731d26783dc6ae8bddd53a5d28133614d0ddeddd9c", + "fdde2b80bc7a577ef0a6c03e59512bd5b62c265d860b75416ef0ce374d544cbb4e3a5dbd31e3b43e82975090c28bc77d1bdec907aeceb5d1c8b71375b6d631b84a46153f5f1d195bfcb2af6f597a9cdc83782c5bbbb58c5188a87ebf375eee5212fa52523820a83106e8ecd52bedd60d95cd646159774389c07e1adcaa6b6f649408f33399ec6e507d61659696b3dd249996892d5986b654d94ff337", + "f5d7d66929afcdff04de30e83f248e69e89604daea782e1d82d8032e91a95c1d6fb2f5578f79b51be4397e4cd7cbc608ce143fdddbc6fb6c43ffdd394a7df0124353b919aeeac025f3eb11ff246c3b9657c1a947fc534ce48e18feffada8797037c6bc7e2d9a9e2e019fe65627b3feb28e446473e3bd413047a2587f0be6a103403cb3c33fdc212dca14d8e386aa511c22308e632f5f9528dbabaf2deb", + "332990a8dba55f977bc814436cf386ebbf10cb487a5f6ce83e13741bac670c6810284fbbe4e303547ef411e964fae82854e8c13cf56979b89ecfedd337aad78260060122d13dfbbf8497acb2066ed89e30a1d5c11008bd4d145b5ec353956310536304d8b8bba0793baec6d8f3ff49718a56e6694f8122078265cf5731d9ba61292c1219a1affb3679576d4998290aba3684a205c3469d40761a5c4e96b2", + "efbdff285027610f03182009c89b953f19721cfcdb8accd74bab6ec4bdf3f555ab902cb0dd91284269d140638aaabd211748aa4da3b18cddc653b57e461b9ad8491807c535c08fe97d89eb587c6af19ca152e72479626ab764e8b62da89fefc8354c75a44851f985746d78715a5a92798dac1a4222be27897b3f0aa63d596aa7378545f49b259aa8518c3def8a2ec8f7aa956c43668c8717052035a7c36b47", + "0eea9bb83bdc324fd21b03669aa922fbebc448e7d25e210294c07862cfa6e061731dfb67b4810633f4dbe2130d90fa1c65843af436e74219d213c4458dcac1c48ec4541fc6e3b7918ab2bc621aedda53658050900c3865ca57cd5dfa1d28576827401956d2dd8b861fa90ab11bb0b544ded9bd3d62e3278ed484e17db8f2d5dc5ea4d19a0e15134ba6986714c2b22c59c2f0e517b74eb92ce40d2f5b89e6d79f", + "25da9f90d2d3f81b420ea5b03be69df8ccf05f91cc46d9ace62c7f56ead9de4af576fbeee747b906aad69e59104523fe03e1a0a4d5d902352df18d18dc8225855c46fefeec9bd09c508c916995ed4161ee633f6e6291cb16e8cac7edcce213417d34a2c1edea84a0e613278b1e853e25fb4d66ff4c7ee4584e7f9b681c319c874d43502534e8c16a57b1ae7cc0723783807738a55b661e617ee285bdb8b845607f", + "a76b6f81372df09322098868d469fb3fb9beafc5edb32c674974ca7032966aaca5b5c9bffef87bfe626bd8e33d1c5f054f7d5acd3b91ff95324d1ae39eb905b9f2694fe5cb03486cee86d2f661a751b0e6c716a61d1d405494c2d4e32bf803803dc02dba2c06eecf6f97fb1f6c5fd10cfc4215c06d627c46b6a16da0854e4c7c873d50aa1bd396b35961b5fa31ac962575230c07c369f8fbc1ff2256b47383a3df2a", + "f9db613812f2259972d91b1598ffb166031b339913925ee385f03b3b35dc4b2f1ae78a3c3d99c6ff6a07be129ce1f4b8d994d24988d7fbd31f20535d36ab6bd0592cfb4f8c1ed9244c7fa8a3c46e91272a1a40c6cfcf261c5658476c59793bf1a3775086e41a0492f88a31e2d9d1ce75cf1c6b4b928b3545d838d1de6b61b735d921bcf72e4e0615e9ff969ef76b4b947026cb016e2660ba39b0c4c953369a52c210de", + "e601c7e75f80b10a2d15b06c521618ddc1836fe9b024458385c53cbfcedd79f3b4239598cd7b9f72c42dec0b29dda9d4fa842173558ed16c2c0969f7117157317b57266990855b9acbf510e76310ebe4b96c0de47d7f6b00bb88d06fad2c2f01610b9a686079f3ed84613ba477922502bc2305681cd8dd465e70e357534503b7cbc68070ad16d9c51de96ccf0aae1599299331c5655b801fd1dd48dddf6902d0e9579f0c", + "ee5ff4ca16d1bde59ffaf2d064eac9141c1d8f120ea2bda942b7956ba3effc5f1e725a3b40b0b9223a14d7a50df1681d14ca0e0eda7bb09c428fa3b2701f83a7a3e139485a118f6287d266dbc7fe68c87b35becabc7782537c79cb8165bdc40cc103d7b6d4b627fafa0e4113f92341ab90ceab594bfae20dadbfafd401684584598941f1ffb8e23dc8a04ecd15376cda6d849fe0dfd177538c62413622d172d9d46e05c450", + "1daca80db6ed9cb162ae24aae07c02f4126f07cd09ecee8e798fa1bc25c26c644333b63731b4ebc3f287f2318a820c32a3a55fc976576bc936f7384e2553d2891e3771ff24dd4c7f0256906460a8f12d30ed2b23583a0259cb00a9065a757d654d6e4603e7c7eb4a8426b527ae8a849d9350e9094b890367df3e8b23ad2df4d7dcce416bd8ea3badd037f53f7b07c02e5926515f196d62aeb9b8b14c863f067fc12c5dfc90db", + "27ff4e58a34ff1fcd66855d014ea17889a3cf0021a9fea3fabfd5b270ae770f40b5439e00c0d26bd9766f6fb0b4f23c5fcc195edf6d04bf708e5b0bced4f5c256e5ae47cc5651e51cd9fe9dc5d101439b9bc5cc24f76a8e8847c72686e2af1ce7098ad7bc104dad00c096a6d48b6453322e9cd6773fb91fb1eabd05dc5185a9aea07a2f64c6fea9897681b4428aaffe1fe5fd3e8ceb890b12169ec9d51eaabf0ca3d5ba415770d", + "75e2fb56327983b04f640717be8cba6fef3655b4d8e5539587d6478356ec397efaed818b8425d052778eb30ef0dee656c52c2aeab079ed496ae4441a365f2130432c87ba757e25b4511656ad15e2eff84d342331fd2814d1f1d11af65d98a424c115ba183437c0d0aa55f5c44b8685028a47d89d0d36a0f20aed510c366ab338f074a941b404fb349caaec821e0850a627777cc8f5abce6b509290027a2a28ff1db62a5ed2f95fc6", + "c6ae8b6a060917cd498aa7874ad44baff73efc89a023d9f3e9d12c03d0b7f5bcb5e24e1bc2ab2f2c67b9a9d36ff8beb51b5affd4a3510361001c80642955b22ea4bf28b81a5affe5ecdbabd8d17960a6af3825a4522fe76b3d720b5d06e66bff5379d7a8de1f5cc3e7bb75163a854d77d9b3949bf904b6c4e568682f0dab7f217f80da7303cfdc9a53c17b6b51d8ddff0ce49541e0c7d7b2eed82a9d6be4aec73274c30895f5f0f5fa", + "606c9a15a89cd66a00f26122e33ab0a08c4f73f073d843e0f6a4c1618271cfd64e52a055327deaaea8841bdd5b778ebbbd46fbc5f43362326208fdb0d0f93153c57072e2e84cecfe3b45accae7cf9dd1b3eaf9d8250d8174b3dade2256ecc8c3acc77f79d1bf9795a53c46c0f04196d8b492608a9f2a0f0b80294e2abe012dc01e60af94323c467f44c536bf375cddbb068c78432843703dd00544f4fff3eaa1a5a1467afaae7815f80d", + "88b383cb266937c4259fc65b9005a8c190ee6cc4b7d3575900e6f3f091d0a2cefa26e601259ffb3fd03083270eb63db1ffb8b4515ec454d12f0944f8f9f6869eedc2c5f1689766a748d74e79ad83ff6a1639aefdec6109342dead31e9cead50bcc00c5b2206e8aaa47fdd01397b141880490174141a1e6e19268378c1b54a84aba60ca711fd72f7df88e120dfea2caa140085a0cf73342f3c588b7edfb5b5e5ccabd68a32364746d92d536", + "dc0b293f1ba02a326743509f41efdfeeac1efc45137ac03e397a3273a1f586a0190cfb4ea96d6c13ca692a4de6de905c8338c3e29a04cbae76272f568b9d795cea5d758106b9d9cff6f80ef650d6b7c428ea3946c3acc594907fe4227ed68faf31f2f6775f1be5139dc0b4d73ed6308fa226b9077561c9e4c7a4df68cc6b819b0f463a11b9a09682ba99752c4db7aea9beac1d9279f2c2675d42b551d27aa2c1c34125e32f2f6f45c35bca45", + "5d801a7413311e1d1b19b3c321542b22e2a4ccbe340545d272abede9223741d9835a0fc80cc9da97a13f8bb4110eb4ad71093efba165b1edad0da01da89d86726e0d8e42ae003b4b50297d233c87da08406f0e7fc58ba6da5ee5ba3d2d7142cbe6632734eb2e7b7863c15cc82198ee8f9a0ae0b7f93bdbda1ed269b3824d5d3c8e78513815b17a4c0cc8c9706b9c77423a309ae3fd98e1e05cdbe9e2577834fd71f964301b10b66c316a2d8f2c", + "2fd32a2bc15a9e96a100624404fd0a4e54ba9f8c0543d8ccf7c5c2e35f5e8c3c11dfd497320aa903900a4ca55a2b323b3ac4a7cfcd01bf0b448db8829072bee6b77c3d7bec2e1d8b414d907288d4a804d2379546ef2e2dc628269589164b13fceb32dba6fd5d48a956ce0b5c3eb28d894a95af58bf52f0d6d6cbe51317152744b4ccfc918ed17fa6856478d580b389016b772e1d02e57d2217a204e25361d91d4845a3fa20fefe2c5004f1f89ff7", + "f537b437662759bef8bd64368536b9c64fffbddc5e2cbdad465c3966b7f2c4bc5b96767ef40a1c144a4f1cd49edc4cc5b57e7eb30d9b90108f6fd3c0dc8a8808b9e0bd13aa3d661c4863637c5e4ba286553694a60bef18801299ae349df53a355051dcc46a7d003c4aa613808f430e9db8ca7dfe0b3f0a4c5ab6eb306aeb53e11a01f910064fbe6ca78b2a94fac34a2602f73de3f275953e13ff5c6bb5c39b82321ead17ec0f8ecc479e6afbc926e1", + "1dd9fb7d5b5d5074971e69300720014deba6fbdb942bd29704cdfcd40fa5281d2a1b9f5b776183e03ff99c29587f10e8d325cb49c5c93e94f5132741b92c4086eec1374dea5c1e772cbb230c7b31f3e962eb572be810076bdb926b63732522cdf815c3ab99bbc164a1036aab103cac7b823dd21a911aec9bc794028f07b7f839bae0e68211286441f1c8d3a35b281fd321312577bbda04f643ecb2a74ec4527bb5148dbccbeba749f5ea19b6072366ba", + "5bd63737449de2d20ca63943953338ecf4cdd6cd0a726241adb04376385a809cc6ba0f3482a310746fbc2cd5eb214f03a14cdc548777fb0d048d659cd75a962e490c4fe47affc2430a34b10275e4c76752a115aae3a24d4fb4fad89ce4d79d65de10292f3490bfdaeabfae08ed51bda6ec8230e66cb07ddbeec26e3ef68dd71c852900659fcf0c963f4574ffe4626a33db9abf0873dde68b21138498b81e8cc44d354be4073615889a7ddff633b5447d38", + "a683ec8250506571f9c640fb1837e1ebb06f123e745f95e521e4ea7a0b2b08a514bbe5bdfd316903d1d6a05f5a143d94dab61d8a3a146ab40b2d6b72df2f0e945875a8aa7051ed115975f6f1567cfcbf04c5e11e3a7027b8e179ba00739181ba10b028e3df7259d0712f4a6cef96469ff737865b85fee2c2db02a6423e32505381e18a1e0b4ce3c7998b8d6b1b5e09c3a280b85486d0984c9e193b0ad2043c2bc4ad04f5b00a73956715937eebf6b3e27afc", + "4df9d160b8e81c42930c48956fcb46b20b6656ee30e5a51dd6317876dc33e0160d31280fc185e58479f994991d575a917073b4439919c9ac49b6a7c3f985211d084c82c9d5c5b9a2d29c5699a22e79de3958d7b0e856b9aa97493cd4563aaa04fa3977a9bb89e0bc06a82296bdc76d20c8d393770176d648712454305fdfcf4e117d05acb5a5b006a9f8d0dc66dca708c4e4103ca825d2331750685c44ce3d9b3e753455580f4d6ac4533edeeb02cebec7cc84", + "67bb59c3ef5ee8bc79b89a673e331e581215076cc36b68f517ca0a74f74efafe9dcc240e6d8ca4b21019c27d6c9289f4419b4f218eeb39eb741c5ebebfe0ed2f6faeec5e8c477acf71907990e8e288f4d4049111779b0635c7bbec16b76493f1c22f645745fdac2b383679fee573e4f47af45ee08d84f63a5ace4ee1c06fa41e2e6e14b7bc392e38426813087a3a461efc62ed1941dc8f1728a2bdc04fde72a0b786558783c84abd4bd100e4926979a0a5e707b1", + "d341147169d2937ff2373bd0a9aefa77968ec8f0d993c6f9881eb174a1911e05cdc45993cb86d149a754bbe321ae38363f9518c50dd3faf087ffeeeb6a058b226ccab7858c00ba6de0e8f4d034b1d27508da5cc473f3a413189ee6fd912d7750486912944d4dc34405ce5ccc3885fb0aabcb922bcfa9081d0ab84c288022bd501235a835eb2e1124ed1d48fd4f8682da8e7919321031326502273375625c4e3a7282b9f53452195e53c6b4b57cd5c66f621bed1814", + "27e7872a54dfff359ea7f0fca256983f7600236e716e111be15a1fe72eb66923ea60038ca2953b0286447dfe4fe853ca13c4d1ddc7a578f1fc5fc8598b05809ad0c64a4363c0228f8d15e28280837a16a5c4dadab681e28968ae17934639fbc124bc59212138e494eecad48f6546c38366f1b7b2a0f56f579f41fb3aef75dc5a0958b25deaa50cb7fd1c69816aa9a51874a98e57911a33daf773c6e6166cecfeec7a0cf54df01ab4b931984f54424e92e08cd92d5e43", + "13dcc9c2783b3fbf6711d02505b924e72ec6736131159017b966dda90986b97522bf52fd15fc0560ecb91e2175322334aaaa0097e1f3777c0be6d5d3de18ed6fa3444133486068a777443a8d0fa212ca46994944555c87ad1fb3a367db711c7ebd8f7a7a6dbb3a0207de85851d1b0ad2f4149bdd5a5ba0e1a81ff742df95edee850c0de20e90dd01753137cb8f2c64e5e4638ceb893a3879ae2c049aa5bce44d56bf3f325b6c5029b2b8e1b2da8de7d4e48ca7d8f6fbdc", + "9ca875115b109eab538d4ec7023600ad953cacdb49b5abe263e68b48eafac89a15e803e838d048d9625972f271cc8f36344bed7bab69abf0bf05979a4cfff273b82f9961626509765fcb4b4e7fa48212bcb3ab2b1f2dd5e2af768cba6300a813514dd13e4d269e3d36548af0cacdb18bb2439ec9459f6d847d39f5598304ec46a26d75de1f9f0c2a88db915bd26e45e1f1e68c5b5b50d1890e97a3803c36755f026863d14176b8b57f42e91d3ff37787f9b38e333e9f0433", + "ec006ac11e6d62b6d9b32ebe2e18c002353a9ffd5dfbc5161ab887770ddd9b8c0e19e5321e5bc105add22e473050b71f0399327c7eba1ef809f8667c1f4e2c7172e10e753705e9a083f5bce88d77521225ecd9e89f1e1caed367fb0275dc28f620fbd67e6b176c9ae5d2659e6ec662116c9f2bbca3a93043233a4861e0688db6dc1800f752c5d58aa5033c250c891d9126e534ed921a9026eb333333fa8292059b8b446f336ca6a0cb4c7946b6aea3831653122f154a4ea1d7", + "23deadc94481ce28188f3a0ca3e85431964cb31b60fabf381e6bd45ef0332bd4dde774b0281d317dc2e7d0c298fcf8625fa734126968df8b68ef8a35c325d84ba4fc53936ff3ffdd8838d2a8cabf8a9cac54aa444ed9875944e55994a22f7fa8538b1e983b57d9215fac5c0052029644044e790ce2f5044655608c1d7ad3bb862203ba3aba3b526606f273d342ed5721648e3f600942d3f7546f679161436389d879dd8094e1bd1b1e12cde15cd3cda4c30a40835665e4e5cf94", + "94701e06340114f9cf715a1fb659988d33db59e87bc4844b1500448960af757b5282f6d52967a6ae11aa4ecfc6818c962b084c811a57724f5d401191567f24ce917e4f8c3963474fdc9d2c8613c16f62446448b6da6eeae54d672825ed7606a90e4611d0e318ff00566862c955b636b5e81fec3362e8672ad2a6d222a515cf410482836deba092a51a4d464dfbbab35c50a33437ac16a88256e9e23ddd3c827cc58d3e5000ee90b12e4c5175c5733662d4848ae0d406c2f0a4f498", + "735b0758d5a331b2304f01081172eb95ae4115de651b1a6693c5b9543de33df25d9f421dbaeca033fc8bff57313b482778005aa9fdcbca65c643da2f3320e34197868eec3848ff3c70d7ac7d910fc332e9a359f892ae01641be253013b554a0d3f249b3586b1857e5a0f9482ebd91432a852b221f4287a6e81ed24e8064645d5b28ab9a13b26cc1420ce73dbc47b31acf8a871601022ce23bc443b1222ce9a037a2fe5226295feb4efd4fd671338f459ae146032697cf82fc55c8fbf", + "c48d94f14549352790079fee69e3e72ebaa380510e3581a0824066413e7044a36ad08affbf9b52b21963d2f8e092ff0ac1c973c423ade3ece5d3bca852b894675e8173290529226939c24109f50b8b0d5c9f762ff10388833d99bea99c5ef3ebb2a9d19d2231e67ca6c9056d8834730605897426cd069cbeb6a46b9f5332be73ab45c03fcc35c2d91f22bf3861b2b2549f9ec8798aeff83ceaf707325c77e7389b388de8dab7c7c63a4110ec156c5145e42203c4a8e3d071a7cb83b4cd", + "553e9e0de274167ecdd7b5fc85f9c0e665be7c22c93ddc6ec840ce171cf5d1d1a476743eb7ea0c9492eac5a4c9837c62a91dd1a6ea9e6fff1f1470b22cc62359474a6ba0b0334b2739528454470f4e14b9c4eeb6fd2cdd7e7c6f97668eebd1000bef4388015630a8332de7b17c2004060ecb11e58029b3f9575040a5dd4e294e7c78e4fc99e4390c56534a4e933d9a45460f62ffaaba25da293f7765cd7a4ce78c28a85013b893a0099c1c128b01ee66a76f051dc1409bf4176e5afec90e", + "dea8f97c66a3e375d0a3412105ed4f0784f3973ec8c57b4f553d3da40fd4cfd39761de563ec96a9178804641f7ebbee48caf9dec17a14bc8246618b22e683c0090259e3db19dc5b6175710df80cdc735a92a990a3cfb166461ae713adda7d9fa3c4cf9f409b1467f3cf85d2141ef3f119d1c53f23c0380b1ebd728d7e932c535965bca41a414b6ea5bf0f9a381e098d282a554a25ce41980d7c7be75ff5ce4b1e54cc61e683f1dd817b8e2c1a430d7f895e5e7af13912cc110f0bbb95372fb", + "9dfda2e2f732867e60ed2b5fa99ab88eb82dc7a54334d02031258beef75fa4bd6962a1083b9c29e4eeb3e5ab8065f3e2fc732675b8d7705c16cfb4ef7305eb58120f1af5ddc55872a2cbde3a48661a0598f48f63e2e9aadc603545e2b6001748e3af9e86e1830af7b84ffd3e8f16679213d37cac91f07af0af02b37f5ed946ef5c955b60d488acc6ae736b10459ca7dabeacd7dabcfd656511ac913174f6d99327be59befe3e463a49afbb5235f0ce2840588c6edfbaaba00a4211c0764dd638", + "ddcd23e8b9dc8889b8599c721e7f8ecc2cbdca03e5a8fd5105f7f2941daec4e2906c654210bdd478374ddee43ee749a920ee91872e057a1157d384dcd111266221b3c79774476b4862fe450704ff2c5353e9a936cac87c96515c28ed4c830335a55d084cb5873c5fd2dd907f3266d8eb7bf13b6dd7cd4966982a0949efd8e428dae13daee549e01cc3c226211d6307823f742c5ef2155601a4644c46eddd603d4abd959c6d242e427768df3b1e22d87971df58a1564b38311a897c85b497a72556", + "39016647acfbc63fe55a74598bc1956eaf4e0cb49d532c5d8323fc6a3f15a0231597f06eafd74ad245e672bf6b21e4da503cb5bf9d15e9038ef354b38807564d91f38b4258378ccd9b9420a1562d7136196822a1291c913d83c4cd99fd8d420990c72cdc47607124de21da8d9c7f472fdcc780379f186a04da93cd87628abf323c8dadcd7fb8fbade37d7d2b5c9f9fc524ff77494c98f42f2158a6f68c906105ca9e8bb2df463863cfc1e9008d8344f55c4e3203dde6699b59812d49ce1279fa1c86", + "02cff7567067cbca5911664c6bd7daaf484181edd2a771d0b64566c3ab08d382e83932cdd7b4dbf86c9cdd1a4c353a511e68afb6746a507a9cd385c198246f4543d606c6149a5384e4ff54c1b90d663dc7a4b91aeac3cf716db7ca6f9a1914e3a33efe82e7ccc4215999c0b012782402db4726db1d7d1c73571d45739aa6fcb5a20eeb54a84d5f99902a8d356cbf95f34c9c28c8f2badfbc08c69233514493c0c04963268c88bc54039ab2999c7b06cba405936dfc43b48cb53f62e18e7ff8ff3f6eb9", + "5764812ae6ab9491d8d295a0299228ec7146148ff373241a510faee7db7080706a8dada87938bf726c754e416c8c63c0ac617266a0a4863c2582412bf0f53b827e9a3465949a03dc2db3cb10b8c75e45cb9bf65410a0f6e6410b7f71f3a7e229e647cbbd5a54904bb96f8358adea1aaa0e845ac2838f6dd16936baa15a7c755af8029ef50aed3066d375d3265eaaa38822d11b173f4a1de39461d17d1629c8df7334d8da1b6401daaf7f34b2b48d6556ae99cd29ed1073926bcda867421832a4c36c7095", + "4df3043cf0f90462b37d9106e67366d112e4938c4f06abae97869531af89e9feebce0812dffe71a226de5dc36be652e26ef6a4be47d9b2db5cdd43809a565e4fc0988bfe82037c505dd276b757b785203249fd083fb474a25acccc9f38dc5164ff9097e05989aa6e280739a755231f93670e7226e22046914c155bf33d135b3f736ccca84cc47ae643215a054b54b7e13ffcd7ad73cced9279dc3210b80700fcc757acfb64c68e0bc4da05aac2b6a99d5582e79b303c88a7ac4dd8ed4289516bba0e243527", + "bf041a11622715426c3a755c637d5f478dd7da949e50f05377bf333f1c62c671ebdbf9467d37b780c25f7af9d453fc67fafb2f065a3f9f15d4c3561eeaa73fa6c813bf96dcf02430a2e6b65da8d174d2558110dc1208bdcb7898e2670894c0b9e2c894da3b130f57a90ec8ea1bffd27a37b4da4645c546b2b141db4e2c919154dac00e78dd3eb6e4445974e3bb07905982da35e4069ee8f8c5acd0efcfa5c981b4fd5d42da83c633e3e35ebdc959bd14c8bacb52212b4334f94aa64d2ee183861db35d2d8a94", + "a170ceda0613adc9c3a1e427f07beacf3b16ed69fb42b6bc09a38d803f632ad2929dba215b85683b74e2feb1d18fe17d0ea0db84d1be4e2e73476917a2a4cff51d6eca7c5e82232afde00dd2286a4c20eb09800b4d5d80e7ea35b6965b9792d99e399abda8cf32174ae2b7414b9bdb9d63e148f7357635a7310b130c939593cd3479164724011966c4232142df9966f09422f34f20b30af4b640a2c6d3dd985fe0ba3dfa9083cbb9b8dfe540ff9f6c608d18481213040768ef33300d773f9890c724ead320a1e7", + "929477e9c2d0bbad3429a0e0de776695255013108261dc6404cb09828770e274d8bb650a50e490dfe917fc2047b0f8ee72e105927d9fa70523c727778cbf6ae876d641ad562938c870d12f2e047bb78920739dba0c3f8ce1fb77589623a5f1625f5d6ab81940c7dfc3dc3a641d82b2813629bab8282999317d6b93842334f123fb4693a9c2c9d8ba9bfc746642dfbd045cd2021b272eab7358aa954d453da53fc5392dfa7eb881f6f53809b692d27f3366595ff403289efcc691e118b4744a1147071d8909bef1e8", + "3e98bb14fff5bdf7db38a3960dc55ca7d02333daed8712cca13dd5bffd114636559279db72554cc0a0ee1f7e15557d77cab0f2f1131f94fe698db81be38300a856a5eca85e5cf915fb7b6f38ccd2f27350e62cc30ce10ffe835118be3d435d2342ed3d06199b7e20c8e34d68902f0ab8745bd8b7d5b863d525c1f5906d2dca598db8a0f1e67736182cac15677579c58b8c670cae1be3e3c882153b2aa2988933e579ec2d6dbb00c671da64443dfc027dee6dfc3233c99758304570a982bf9b2eb59ccd70d0b54c4b54", + "aa12c7fa50ffdc2811c1872e4bee15f43e6909212385c872eb489f7e06dc1787043f56126f8373bdfa4b3f61405c73dd4dfd3f40aa5cd207e8520849c26f67716a46c0989a99efff42f24e0736e327af8e607c401a1bac77341e9a78c91e35d55b2457bdd5317a405a1fcf7a2a23de68ef92b65819e8aa3807c545361dfc9fe89125123492da958dc313cb5d03cb4b192c54ac6b27fcbc498652f5ed36b587bb74942b3ad453a8d79e5ddc06ebf806dad5046b73251064582ef5777dc530f8701701761884783fdf197f", + "83e615cf6e17a29e63945710b548a6d9935850eec69830841e26cb6071e908bf72c87cf079ffb34c5eb1a390def72d004a9488224a18e189aa1092a0f1135712834d257a53dc1d0e2c6417d8f472ff13b181910f4c93a307420d44beec8875d5219a3160b8e921434ddf3f71d68db1c1d5c39d68edb7a604792f8b4e31ecda7895c99fc7031a5b98a22009c1da005ac8fd2da0b5d742743f5712d12fd76d11a18e487776ce21ca0d6e5ab9ca6d8c394c321b91c14e291399a642721361811a73b7392e8603a3004e7060bf", + "ae1a8f7bfe4b1a0fa94708921dadb2c20b938239d7b9a2c7c598528f20f49764d322ebe85a5b2ea15563cf2f2304baf55d6607c52e2e1160859dcb7af6d7856899eada0e9128a180d3de6fed9334ba52b80c5c362d5591a0ec30f86d37a399927eb1c53076a12d26775522c511c83eb5b7abc2a00bd2dfd5627a8febba53d85f9b74c4b7f0c862ddb0d9298899b646b774d6cc23e4e23ab47174fccd34499253996d5e0917210e2f6daa1685f89f2f1fdfd5509ebc38191d539ecfb54ff0f5bbe6ef36ea35d425af6462f518", + "1d033e06be253ab800c8176d3a9650ab2a5bcaa03e11ea95fb9ab3834b41eb0d1b2bcecfe219364c3104ef65a8d692bd77c798548b7d9a8faf7f5172db24ec7c93006d6e9839368291b8277a82c034a3731f1b2e298d6e0282ec8a7902e4f844d132f1d261d171375c646065e201849f2df73e3748d853a3122c2206aac92fea448500c5418ecfb3d80e0e6c0d51f85831ce74f6c659cc291f5348a1ef8b949f1b2a753633e382f40c1bd1b2f44748ea61127b6f568255ae25e1da9f52c8c53cd62cd482788ae430388a92694c", + "104bc838b16a641749dcf73c57b207ea3bcc84381170e4ca362065a3d492e892b426a1f4fd82f69461d1ce1f3aaf8fc291ea30d6667e7e1aea4c44f7d52a5fa6d34709e6658483260ff5da76bfb74e7d194ad40dcac00daf0e45e74db4bc2248100a8b256b257278c3c98f1f2e3a80cdb812352aaf4155b3a4033999fb9fe7f506994fcf3a8db31e9e5ca8ef8c2e9c6326ca5b0803724ba641950eca877fe6ed6afc2e014651c56d0e6a61eaff7c5ed0b861d4bebe42904c0a568c26aa8abb2e97da2bfb40f14eafb6bf16cd208f", + "5b92e4a175437d0a53eb10de2c56401720b11715a034459ebf506c3fd6534b5e817a0f09deac4bcfd353301d8d031b1331582ac09189b48e6ccea444655866c4bbd123d45ebabb774f877cf12d33b84cfca4a6a94f3f98869fcf2bbb6cc1b964c2438c2f348bcdf9001dce60a4706d20c169a040baa61cbeb0b8e58d505e6e3739ab03e110ae7efdf91347474033defbd1e86af322ec6456d3394699ca7ca6a29a70d9b10a38fe666eab2858bfe12dacb31568549c826c15af5b6fddf779954351be1872f04e53db7b3b5fbf61fd18", + "401cc7bd9f8227efaed70dad83fc8db3bd38efc166f0f11ab142c565c68ba9db680423a3d698b6f3476ef440051fd20b93f6a2ed045825567df5a65e3f62e4442ec396ad260a16a13a1dee46c7e8d88bdd7edf223ab76a9a787c1f4fe9925c051a4ca0e77a0e78baa29f36d193c862fd3a60653f544ea9e3f75f2f553891be8c1fb882f6a6aad118f576f3c2793efc67221b37a45ab6137434f6228cb002fc137b91fb8572c757f00736879453d64a8a868c131810ffdad9e9d028d132157ecb1da675d54047d19b27d3258c9b1bca0a", + "c20cf0354982ca6a19d9a4dbf78f810934db2373941a12c263adefa61a5f385c859bc47028829c531dc25ccc0004c7510e707175a102ec3c4b4c933e3f52033e67476ff5f864c446c042a21e6037f7798363d20267891b965879fde80af6b59d77862e3a229af01b7ac78b578e94bd9f9b073c38a627c1864df0083aabb17024bdab6c3c0f0f73d31d59480523a2f23b78baa0385c15f290114305d7f98786b7dbc17a8c2aad97448e8ea389e68ef71091a6a9735ac12ca5497b9171da11a93c28d3273f58b74e2e46279d3ce9d0b20d19", + "e2365c2754073b511f16a1881ff8a537541ca7362ae7b84223d3c7d1d49d03a37d6d05dd2b819af9705c015dacc9dda83474eb14b7d5fce6e8a8f8c58e870149338d320e5ae476da6749af45e65ffed550d225a39dc74ffd93ba7da476985d6f44e90fc8e82454496260458431804d802fe804d825f611772f9710667377adfb1a11e4275bcecb42175c515f6a9439a359824f82cc9d480954364e6693099a821ace362e6c7ecbe68be8823bb5b49b4f23ad81b64139e3b63d9d4d298a842f013ef0d91ce7915ee8f816c70ba2aa3994216f", + "9c43944676fe859327096f82049cf69e48b98715878400fdf2805e0d5ee642e6cc9c43739f418b701348a033c5cb96bf8702fcd2fac9be58262a843c1e4155ed8a1724b6ebf7cce659d88a95a0c54deb2d7d9574a45219b6419ee173d1d8fad3ace47c962b349abe1048565df85bbd0eb9b11698258c23598023a00fdd26573e41951452027125c6e894a97736ecd63fd15b29a55d8dd9dab7e2e18f541a2e341890a61b7c896e7dc67aa82f3479dacd4a8ec7558d40c34d9ae4060e13718d676c2450258d83de8a86e012813693098c165b4e", + "1c707c29582d98a0e99639211102f3f041660ca03ad0939fe3855b8c1b22d6a9b8673c93e3eabc0ab231509b2b0d73c76a290a363943d12d2ff0ea30c6dd54eda753767effe04cabb4c3966388fa4c83a1906a0f48519a5fba9aeb585e0f8c45d6123a75ebe98fd1d0272f733a3925119481a321fe7509346c05128302851ba17a137f956f184e057a305e79a148727a5926de6854eb0314d5492fd735fa773d99ea34c95ca7546bd3a3aa8e66bcc6d860cec3d35d0e2165d5fbe8be99b6e7967df6693e5a6243e94c9c4a2528ae6305cbeca209", + "8f1e88103ffa378f062cade0ec509bec99a5c73fb273e79dbef24abf718ac26ac23dfd2b8932038ed3cb9637b71643c161142019f45b25b4fa4c52356737a27027e805ec635154327a66bfe64efc6285cca98c34edc7fb6c0766970a545342cf840aec0a5ba1dd3c6949be4fe97b0f8c8186de07536fd9074db34d09b2f08af9dcf9424d6edbf9cd044102c0e5dc35aff78c36d079dbd2c500e19c8c985ae2abaf6b2a20716bb719754a8840ce97632116c4d0b0e3c83ccca27f11c4204b76b5d6cfe6348a9615d8e4af53500dc4c2cabf12ec8c76", + "b9a0c28f1a6156992c103a84655fc6e654fa6e45e45819513afa797024717c00cc195994512fd53ecd1e12dac4d2448e0c40308382312084d2111f7db147b2e6589ce6d977f6115f629508167df8f45bac98abd49f6b272bcc4fd874dd5e29fb6daceb2d727a2a892194cfb9269eda00626ac89b4e74bd29b21e9f6ef18cb69889a02d4f0a06a2e5718899c1dc3b051c2cfa29653e782f87fefa478e6465bf5ff27f8b6abdb500077aac97100bd955ec535a587d66f23354be51cd8170289344bac9451f74e8aee3639f7c09981f4885e018912324d7", + "456844a34ae1074246f8f71eeef2010ec8733265bed7c1cc60043d770edfa320cbd4284a94be2574337e16d27f125074ebd7e99031f7abb4547b9540a7b0b5148ef501b550dd929f3dfe39ac65519f563e9254424aaafa05b1d37c16c771882e9e25d4906ac58603da749adf686932cd73d81e2658134fe69294c7a521d257eaf2110c667fc9d6f09b52d24b93910e532184eeb96eae9d9c9750ac3c39e79367431ac1af7011172d0a8be46a31010219a0310a733068c589bfc4748f3626aa4ff8d355cc893d05111c287c9992e95ad47481a6c42d6eca", + "c5c4b9900b9727bdc24baa544cad5faf8340be6b3759361f53889f71f5f4b224aa0090d875a00ea7116772117dbefc3a81c6950ca7ceeae71e4ba975c50d61fec82e6d9448d3a0dfd10bb087bdf0673e3e19fa2aaa7e97eebf71f11b86034fcf5a61240c71444ac3da15ef09b27b3523d37d309e8722380f835c1aee4a767bb027ec0674040853e5b53d6a31657f51acff6d2487860becd5ce695696cfe5937f4a0217b69e01cc6facc24dfe5f5230b8692a0b718e3b3c789d682db36101795a9a5f8bbb838c3679be72f7941a1db180135347d0a884ab7c", + "1781df2fedd2c39137854737d054cd3ed16b0ade411e41d97888ac900fdb46d9ae26b3d2dd07e118fd57eabd0dfd03a55793c76420666444865371adffc9b2f35068a0d70f9cfda1ac27ccb4beff4ffa5b8bb8bddac843386675c38a181fd0d935d6d51b25d78e7ff4ecef27a9853c0f0d2879c395ed1c4883987d123890d04f851c3e042e1164c68c0d503de16816f4b0e554236e5f4c339ea11d01ce652f6208f78f457a2417a97c0a6a240f443262def4b6763abf53e597bf1a28f907dc7cbdc751a234ea7d75710ad5ab0c37e8e9805102a375abd44011", + "8963552ad1e729ead07750df599d734157aaa4bcdcac17e8eb19b4f99cdb162686ff433137aa4e8a0cc8df0053999196262115aec326cf37567d9ba4760e0ad21d5763977f1ab9b35c0fc667890fa87fc946ceb776a811b5adc69446bfb8f5d9908029dc5aa38db816e4a4e8f98e5a48cf0a01627031c5bd1ced8bc1940dcafe4ae2f1199b186468eafc07e96a89d95dc18ef0fed3eda5b58ce58f221a47ba5311313cc680367eeb058fafc7bcadce5f520b6371489d9e529278ae6ee2650a85aed82896879038bbd9aa8d685fc9528943ccf2235cdf69a86464", + "23ceae3008085134433f5de4b47bafe0f443d443491e6cd47b216dd2dcc3da65239515a6e6b9beb9a939ae9f1f1f5e11f88326475e0962f319d9bf75ddfb4a46e7cc3f799d7547f3c0b2e089018b75787b82ea1a7295e7411f4852f94c94170e98bb0647923b8eb7d184038e56560da46085540cbfef82b6b577c445d038f6c93fbfdfc96ab3a0191d20a57b8610efb4cc45cd95198198e6f80ac46b0601511885f650eb00992605be903bcb46cd53c360c6f86e476c4c9ca4ad052eb572bbf26eb81dd9c73bcbec137aea6ee27aa97dadf7bef733fa1555019dab", + "c0fd31e82c996d7edef095cccfcf669accb85a483ea9c59f368cc980f73da7202a95c5156c34192ae4ebf773c1a683c079b17ac9d08b4265b4054fcddaf6666ca50f38f1a2ef2497459a68c06837363a526e850ecfbd223f55dba67db017eadb7a9139abb5bf3854834478b838aafa16c5ee90ea52fb2f7b8db2bcefb85b06fc455c2b6c27d0af9a49dbf2f313bf2599370637393e7972b31d8bf6759f3e6115c618e672831f84d76ba1879c754144e1df4d56b1e264b1797dcb8ab165040c8d20b931071081d7f74fbff590bdc8e888e71acc6a720270da8db7c821", + "936fdab91fba396e4a8754a97a04ba333daadc29885c9d0c8fea3387165278f4974e468fea57f2bfd8428c4d0f010833283db73735d39de0c0cb5898d0c06c0ecd05f61098935cb6130a8da60d1a6c2ecfe420f972263fff5a631b09e81c837183c5528bb1c740b36fc39cb082f3383c2b4afb25d04ad1d1f4af63dcf26a0bf5a647cd2e35a51cc119c4dc5031f5715b3bfa1f2b92de06bdac0d670fdd30980f32c51f3936b51e5db6b95a8d36279da5faa4c4e454f2b7e54e9f488071011c7f6f9b63da260a2e46d796d36c9a9dcae88085806a10a77bbb670d475778", + "a55fe162b287bd6eebd6cf7e7aeea8672322d924ae42c7404ff89aedb98943f3755d2889bca488cc7000e6e9b8e7a0ef289273cd29c44cc600e330d1775e3cb767f12150e1615dca8c3f67466463a3ca993a1b788cf67a7a35b95dfff954206eb5ea1e1bf7fb06482a551625b5c9fd9a86e8414c8cf79d3a14104a153cbe04aac5172aa4c4a89349f5856c4262dd1d7317a7544c9afbbed449e7dcc2b58d9df6c9c9ed3883e42e80f5c2433550f30e73c7bce0fccdd880adc19282a392dae26a0108e7faf168cfc15937aeb046d60712603286b8ddfb27916b79242d56f1", + "2bd6976592408cdbc4e41dcd3ecfbb786775ddedef914d9058e6753f839fdfe15b17d549dbc084aa6cdf3befa0158aa84c5d58c5876144fd7e6c41ab7d42419d0dd353732e0e6d3fafc4f5626c07433390a4fd467197e85b5de7e2cf1c26cc575356adedcc0740008523b503df12ff571387726c5ccb280376d19cbacb1d7ce7aab8b13292c6a8b8881e949cbf6d4610d16ebba1d46cdb8d0459596e0aa683d0307bd926e14de19b9bfeaefa29d91b82248604673a455520cbb64eef3f38cfad8e126a3b1cfa1aaba53a784c8ae0c50279c0ecdab54095d36f67ace9b8ebbb", + "71913ae2b1c8729ed6da003c24a1d4f96e28d7faf55ca14ee0b2865282b9b61103ce6ee0b00b00aacf2081adedea5616f9dfd22c6d6d4f5907bcc02eb33edf92de0bd479794f51246d9b612b4543f6ff633c4fc83bfa6144c9d26721cdc690a3d5a8db54d8bc7873bfd32924eeb502810732b5ac2f1852bb021c401d26c39aa3b7eb09083093a9e89bf889b53383b5af61110aca1b9fdf38908c7d5a184fc5f46b3423a66a2749feb8de2c541c563987278dbd0513d99b732411012b5b75e385510de5f6839c3797dc094c9501d5f0504b06b43efb6e746f2129ca189c1da424", + "9d048a83294de08d3063d2ee4b4f3106641d9b340a3785c076233686dd3382d9064a349c9eaa78028d35652078b583e3f708e036eb2ced3f7f0e936c0fd98f5d0f8aa91b8d9badef298bd0c06843831279e7c0c67ca7e572f552cfdd984c12e924c08c13aeec6f7e13d161785546ebfd794b5d6a92a4744e52c4cab1d0df93b9468be6e264e8cfcc488f9c3c1817cbe501f4b9cc5999483b7433aea777226b25273a6ef2331b5f3b6db8091591e8e276015da3ef78bb2ee0526ffe23def2d8d193cbe594e8ced1f3d216fcedae2a1eb288da82e34cf98aebc28def658ee0849ae7", + "3251c96cbf82ee2e5264528c0b6cdfc23d20e1eb2d6441b5d62f0fd24c692a0d45a8bc8aac32884b7141ac0f4f113ec9fc7f6b4db3d696374177f9a42d602ca471275b928f639105a55b846da9ac7274cc37de8c38541f6895f94d72a81e117844b46601c201f7189b935a96e42505f2098ac985d92dfe86349a706ef6325b3c2e4060ced3c453e68ed09e043bcc75846b80118dc53530248da250fb57922d0afa53a7b2c89161aa4fa372a46b2a8e1307741cecedf585d2f998a9d496763800b6965c38a5d8aa566c709f13699c8185ab4fd8fdc8b824f4dd6d1c255b4788f50574", + "2de31dbc8a012254586f3229d3524fc529554e98850d30acdfc11406bba6a142029126ac165ee90b2de7509fc3571a8ee12e16b05054eb8baea879d135b39627f0d8331be3e66bc720c2096ce74e437daebf3bc53d8f2ccc228c3256d3edb6e9ae7c354a0c9350e6d663a9a30630bf9da3d96b96608a2a171ae28105714058b6c4b38a36c56561c4612c32aad25c65b7fb6faa4e4ecd44ebf9b2fad42ff9a807cda2581614fd30d41a7436069399b8d4f062a37a5bd4066a93d541fa5797a7d3e7dc9c4c40f0bbf5256f71613240f9ef128b3423eacaf428ada06b6a531f835281e4f3", + "07dadee629a08223dcd7ec441287b4c5e26347451d9c003e3a8496b4ea313b51126283a6720d7851e24423d9c9c818b4601247178f38a61f45fd4c8596d79529d416834226666a2c8552bbc901cc5cc3406a18fc88077fea52e1b620748553052ab7788c0d025b095b736fbe714cb3a968ec16b5917652eba2d7cf32ef3140d6c27b25d053e9786d24cd09a5306a0ef55e46201faa6196a91084267d7a7b5ca57c2efdeb2cb97d682d2a191b915553c8933f1d1b7faf0b4a1d83ef611f1e44438bc1c3d860fbfd12b5f26e5a6889a31ce26ae6a55c7a563b5816d113423ef3f25fa9befc", + "1d94166bb387526d519c4ce150221954da8930f66765fe6a5504e30a69962d595cfdd07a82c003843598864261f053bdb6f5086d516c261e089caa89990f0967605768ae9200bdfe4dcd7b77a93265cb33d9851a2a1036113c732bf3f37534530641300f0620de5c16101e16f4baf39d9fcbfcb01c52afce0992c329d8dbb438c314eee995c5020611d6f889e06b8a032785cba9a415580dbf752b5e510523c89f478cc6f047bd926f51e4a965c9749d1e76379c0e7e5b56803893bafaa4d2892b4c52f143b2fa777cd1035ea418684b8019df084f9a3f1f768753096621f342895c510d01", + "fc0073f199ed8a1d6edc8e7bdf182670003108d82b283aba82326e856f8de378987a03d0fe8d2041440fd29d51c63796aab44090d2b14ee00859b3a08cbe88f724badcd3c401226c5db8b307b8deea5be305412b080e9f99cf79d6d08d3646f347a7afebb62912e3e246e2e726f9aec5c101d916e47f984507b1d65d313697256c77da7eca3bc5811c87bee02a2826cefff0d92bae989609aaf95d70561b40d98474c37277c884aed887a1606d206b11e8a8a71d1f1d19319557b57351228ff0404be700a6cc56c0a30f3d4b7a0a046463fdaf19e7d5f59e155f378e35baa33db1e881f2207f", + "f42a6a91278d6a076feba985b1cf4ce0af1fa9d6d039c136e8971e665ff088a10b6b9a379a6f5526fc5957773a0ccb8972a4a19be0745ac13937030a54b18dee4f4c5df47a58a33a7516b90e646e5da999166ab0e52f457f7c9b7e391836a687eaae37b377e59a4c995ab0c57162c307ab951a9ba6590f429cd27250e7010eb794ec1b1ec35f8aad189b2fd3e8aff24d93601d91a4884e6f84b02757ce7620a02901519fccfda52f68ad6df709d112a9c25d66bcbb9622806427ca8b8d346b6db05874bde800cde9cf17df4b05baab0f133febd1ebbb053b49c109a7f5b1f864a304d10288e2f0", + "bbcefaf4a0739509f8a2f831c954071aac52e60cfa882a867b8b910dcf7edf92e1c0692bb027bc378c460a01cb6ecc8f2a012dd84ee5a678cd497b1457b6d393421fbee98ff544fc7eba24cbc3aae506254d9a2d74dde74437ce4c8a69010718506bf4c5943342a942e5e2d3406a3016280b6e37954c5d5e763346251afb0b746cad68cac757f9df765e092518729cfb9a5e76300c124e708ca33591a369767ffb63933cb72fba67beb2223d98984d0b75eb5d1a38615913747b520b3d613c715c0c77d2987bb88f3c419bcc5d38573cf4a8a4f550b2d876f05ca252d88c70a561d869a5018b32f7", + "dc2437010cb05d9cab2af5c275e1d2acd627ce19fb86355df91fb8d059e60d591663c8eb077d48388c9a321057a98136f49f0098348d9f29d808936f98bb1787c7ac75fb14f6076dfd2de5b59b1fa4848cabaa9a99a091dc24b561911c392ecdbe53f4adae82b852d830adea3a10490c908e337ce0a6d12354ce05a37ad3a06696b66820af8a1f67e6287533fd6f38a5f6ad1c6b078c08baf2c37d2683af01e6a5b33796c8ae48935a888f9bd265f4f11a4e27c433b8b1c9afd140bcd21a07e24378ad6badde8e47c57e3340f49e2406e8d49afadd65eaaa4c3d078c27d7e42118cb86cd248100a356", + "6c290db326dd3152e6fa9b9c0cd7d49e50a0221b96e32f5f34a8cb7d0c2edd3e937a7d025d6999b7b468add4d6894d8f7aceaabc18f4d9c171f1fe95ea1ae8570382a8450fbc595d95b1f51d24e1abc2970b0e1d20ca40aa21bdfb3656adf2f19882eda606f5ef1c03174e1d94c8d12f0fee8dce6852f42a364eeafa27a7971d4379405db8e46baac4d685b969238e5df06292a6c790bf1994a051b038e1d8db91e1bc4804f32443781c34a552ed2e8100cea374e77af56ba0e11c45990d3ba68df9087b1f4968cbcbb1c42f99b7267c76af926ff3134e093df28fab039cad420c6b70f2d9b5e678c155", + "ac724a22ebabaedbbb052953e3c264a4b6440f313bad501cdc1484b64f33402a2230898776db5c818c28035ffae6ea24abd04b7159e42159833903a0c23a7c564f7645e49ddedb748fd9e51bd6cbf2eced98caaa35226970f003ce1fd260ac5795e096f1c04aebf8fd36e5e2adeea929b5e963a3cb71d6b55c85bb7d3a2b03a7e74b4416de8fa68950168d7c3ae8ed2e29bad1e8a182a7c5418e5d564373163778cd3c34e9d320eb1a60480a8f98b12e0026cbd7752e6079812e3767d9f55f3f10b8c214a6eceb2a58954091a06b33862af171a9b60bf2c6a44e8766e6c56e98092c56f2a8510f6d05c103", + "8c70114f7cffb375c2b9a06e27297a5c32418b2daf68af5bbedcc7106edbc070e764bf40c1f8eb15079e2ab77f898afff3490108ed9afb7ea9cb05df41d263be0e42d2321d3d2656622d7bd232bf68d37375fe7314b09cba66f19c8b59424198ee69e7a9f3de0ecce0685127807ce336fa479ccaf7aa1ebc4e406271ce6c4923ec36093516498cc227f9218869346c80ba5ae83e023aca0ae2bc86b5bf5d115a4616b6587cb869d92f8c780ab70d5766de07a204af5e1c8dbba622516d2e911b36c82e4687e4d258ea616c07f76ff0baa376c8d5975cffac0b25817f779ae3ce88b72eb47e378484ce999bf0", + "0733d59f041036398233fd47a84b93f6778ae5259ef5d62aa3b9faedec34c7edb570c18b2a5d2c4c55cf656d98a1ae396d45a3b746b7ad6f07312c3d05d1a50ffa90bcdcdba105e25b7b0c52664223f8c2476925d46dc6ea2406ded7d0b0b292f6656cebcc7616cfa4b82aec68b35d1da67f6ed2bf0171849d6bb65128d8a140ea5cf97f1003f8d7093bee077be78def4f7bd2caccbf0644f26b26285225142c40038484c3bb9ba9597744f4389e76dca3eb695c33ccc621cab1fb603cb3535a0ad318d220385d5e94f8674f3d55e97e097f8d5c049e911946afbfce783819951d65d6bff4567dc951390d1aaa", + "398ddbba3dcb5642c102efa841c1fcdaf067062e7eef8e2ee0cd73d7f77e57372d6ee1a9b7b6f86ad12d575001ae71f593449cb5a476c6bfeddaa2af0f9239c1d7effdedf66ceaf413707b5ab9661a7cc0ef8cfe4d1651579c4f0f64e2d12a52653c54f2dd60864e769eab8a627c89c56ee93365d031f0d2523cb95664b1575d51b122f33c9e94de75432a690658c977b68aa5b721a393f9b9b3b612c10e920a7d510c6d8460b35f8614c42f5d2c241a01b28105aa7c1b521ac63ebbedafac6d5a38c898e8590f918a1927bc53aecc2b1c8b18d7df9107c6997d9b3fa4b0bdb1c603da619d9e75670b97a5b40f06", + "ef07bbc7c4150dd47f8c69a7989948fe831dc798b0424dcd6551bfa8e88216095a7e5d720909bf3d23526b9ba464b66ff6b63a7337c31451ab9a15f04ead809a62bb52206237de77597a730106d02d227dd6099ea9ee2a92cdc446ac3b9d024e32255adb3e9b56b561c431e0b5a721f0336f19568a5335d0ebc6c73ed8ff2c15e219477d9e4b67f2928e251f8a61a2848857e037d010806c718ab062967fd8e85f3722252957923f5f9005aae47b4b1b3fa464e3ba9df573a56055f17e903126fbbcb6cb96de92fe617c97f84ef3ba0d8f2651dc4aa80c157f372ae1bc02e5067ad076f3fe48bb72c0f3c99273f82b", + "c7076986d2333f3a6752adf11f1a9e5c6bc4755f341073cc86a9c7519c8db029d5ae833fdf3fee826ff4692c57880c5074620ea97c00f1dde1e8a0f18501627984ded4d1b5c4af35be5cc1bcc868060a49a968dc0547acde490b4c68d79924a93a986aa0ad060c7de706e8a99ce8f84a4f8707b52a8ee122b763ba580d6b1f35f6af25094c69f49247da96c836991851ad36f60bf577863d7471608a012afa7a56656abeee7cd9b4f1f4d9d13a8526c0f33cd251caf7486639e787250390e7e488e9ec311fc3d847a7266cc59bcc2bc34192554aa57cf25db10ce04bdabef3fde6db85f55195ecc2ff892b2e268ebea6", + "01789f40d42d8d3e4a416fd9ae7de78c3a30507809eda200e1afaaf8d7020cd1fad18eba62d821946f220506cf105ff0e2069a771a2c233714afa6b2f695497e4b95c9693dbb93ec4c9a14720676aa87ee31dd34e4e081756477032b4a57b328285f2cdec1b269754c474936927e93acc26012aff1bb36f30c2402aca0a9b9ce9568f5000e2c934263933b436c94f8d6589c89db7edabc5d03a8fe795fe50c5166beab64ed7c22662b984ae2c66dbe4c090b0df603b27c759278f8d66859afea3f6a8f02c2c2a2202b9fc29132256f164b5050a803b43688dc4c9ba86374a3522afba5d1a19bb3820b883aebc267627095", + "2c61944bd6a50da00ebb951d2b67d79fc6b6fb5aca83b1de3dbd7690ab756bb1e1a21051ccf1e24136ac8ccb42a2ee10be94d2cb9289d5f52b6f90e9d07a3478f36a1eb7d08c3dec52ca154fd1427ba92a4ecbe73a71bceafbd26e9a39d50821e2876d3a0c0e6e373b9795dbf72ea29cc439ff42706be798c90d4617b39c90ec84bf9fb699dc8a9a34e25d81759d6c57df45efb1d0d68aa51278564b99633ed5dc464bb7d53c5c21f798f33bcd868657ecfe75a1ed8149d394b398969ef624831b30f1458465bfd2fdf3f284f2ffc54bf2817b5fab2e02056e864f78bb6fd870c64f3609dab218f25da8060f756e45121e79", + "942fa0c68cc72f69518a3a7aac0cde45bab0e928b5cb2bd24d049fc313f74b6afa87c4e34150484f3b5200163f8a6472d04777928ecc49319539fc17d71a38090f55a74f757fe45781a3c09f08dcd3dd4c73c8533a5e00cf8a86ebe77fe45be2848574f7c5d25e9a0632a60d2dd41febdbf987d2a0487e4a4ce6ed5f49f2d741a88ecac232b1498253fa4ee8147bbd0f600abdf295e81f7570015aac5fe6ca7bb4a99bb3fc54287106d7fc1132a574af49db82a7b9a5f33e193cde527ca2176c52cdab672165e0fe5720f71ada57ee90060aa069ae2a0bfe67c1b71b17c601c3c2224bf9891bc11ba216e3ebcb51fd95b8d7cb", + "0d68cfe9c087ec116fe7572042385159cc705960f842aabad1ed1387ec1697f4413a23c6090041328fedd4b626c6eeaac5b5a71acc1fd1bb8fbd228857ac5bd045c364be7a5a26338ff04c99c4c473cf445a891db6422d1bdef4533442df171643fc36a092fabb464298e4194c9e2950884de13d113ee24160a416404c16ddc5d2476cb3fb80da543e6ed9105f6003977acb34e1fdd2cbdf7a00d5ff84350b74ac231418c0d88269d02d824802791ff42a51cc835deb9869a6023f867f82ef6dc0bfb03e6dfa835646bb18a4074773486e308aa39e532aaea4e6fb35dcada7e060f8282c371ed26d22302323d4fd142a85534671", + "45e24b167a0bbef1bd8f79dd047763d0754f36a7b623f298059d177e8ac994945c37d2c4af06f01318960301595941124592f2995af1459d854339998d3ae17534df2d9793d6e203857d02c98a0cd88991e641b3e640090ba303f87b907dca8ca462fac19ad079b2c82ea5b521ab891b10138b083b3d9fa214a8fe60d1cb3599c5d199c61a2cfb7ee2f39e5a5abad5ac4998b707545f73e92128d21803420526d2598a53bb314adf29a0ef56b94bd2221601eb53ecb8540e8fffd38fba7bd827ef255e4ef55491475c0f383a241f81c72af4e1dbf2a65cd4d18a497615aa0de2791a3511a7977a8d4d41492bfa4085f2fd4e8f751d", + "1c1bb695ae90e6e33fc1e8b2a62ab98bf835ac7193440f2351c8cdd830472b637d2fd9c9013cb83caef506abc1c4f7567706db6046b1d184579c7a9223ab1b35e32898c70a3c27628123ffcfa518612f080a2c4a9f8e0a927a47dc98307d2b48de9d5dddcb5c82f0b0e4e610d44f1baa9bbbf7f5a727134680bb7d1327b73b52d8e5e36dbb53971e99e699d79f75a3fc01316bd7012947d119d6aeb7f75b8fbf0479c03002148553fa0da450fd59d4f1bebc252caa11ed9bec5b6ef54279b5f8382b61cffc67ec03f4baa7ea476c31364b86aa8ccad9fd0818717f0ced2dd49477874b4341c602d7a1beab860eb476c7e3ce597e6926", + "7a3cd9bb2277e2c7f1134fe7233f0f7883c2db9fba80aa5742b03041de0fe589d9e5ea84470dabf41bb66816f3e33ebf19a0ca5aba1004cf971249b258ff26a98dbd0c37ec6cd574854109433357720040bafed4531e0079186b1e853e0ced35d08d27f6d732ed6e2c6651b51cc15c420a24f2dc36c16ef4b3896df1bb03b3963f9aaeb02a48eac5772abd5948c2fd0db2bb74e3351e5eabd681c4f413655bd94dec96b1544c1d5d2d1df4bdc26020d25fe81d5238de824687a5505e1fbe08d11b3924b3ccc070fd225bf01eb79e3d21f7b62a836cd3bcc11c931669c37613470e356143df87c48848a829f5e018973a5db88eb6c60203", + "3f158afd0733fcc5dfe1efc2dd4eada732f942af734ee664955bb1ba613eafd0f349e7554a14d68200c62d8f2dca2ec8b81c8350735eaf437041f78b452598825b6899560963ade66a0fc74ad01f8343d1d19c7bb327a8dc14ffdb1c42fa72b2970d9155e2da6a2e6419d4117842d826ff38ffab9617307a0283d3ea28c8104ad9a6e087bb750ed1d10fd8f7100b1663682e979d80e43968c33d9eff66f4d1344e583ee521e78d0a2193c0577516b978339c143bfc689bc744bbc4a9163063de82c9706384b6b385e54666c86b34f23c1e25be293af06092ca31d857e11e5b2caf0d19dd3afbe85380878eda76d718b4bb869c67e044e242", + "a177af4387b9bfa3d59e97ee7b0ff5f4ae4a326fd9204c8d28831a67fcc385ee6c4828247b16d11aea9bb8cd9e6c4d2876c6b2fa6d5041ad39e1b04039071e29c4d86417e7eac4fc7d3823958a021823e2c880a757dfbcd0c8196371db5bbfac15e4d1a0596508b6d26f8c4a664924c95082d173f817995b44c4285d625d9b2f56c86632fe1295c5a8a7a3760028072bcb07bc245a705e7174d06b9d5c0c8ca495b9ac218f1921fa63f2db3fd148f07545366d008fb5aead7497d902b91fbaa39669929d4ae9d07df8557f1f0aed7b51252f10c6606e5ff3ede1327530ca356b4896ecf14bf7322d77fddfbe28d52f6de7f66eeb81704c87e2", + "01a15b9018e35cc342c926b01d03ad9db4993a6bf92e0555969fee90033f28f3ec234c1268b11b040dfa0770d4ceb39edfeb8ee6a589f4eebcc08d2d1b0a1a52953aa26eb44fdf4a2743c3dacb212a0c0f325572f645f53027b6f3c0c55abaeb1b0918c89bedcb5028f094d743ea354f8ff553c45f111a8fd5a14a4e5c835164747d302472e19a67da04b4c8e39756a9d248ce14d1ed43de75aca86850f2455eccd4639b2af035bb3f504cc9065d091c1c47e036083cb3fc50bf39292b11737c7ce0b49673ba93981de304dc65a671775b6ff927e3ff93850b214fffb5792105a4bdc81354d5b09e84afbdd1792b8fb4e9d0ae3dad2492b03282", + "24f07ae31279ceed18ec6d35990f21200934ad6b132c6c62e82fe92a40a0e60a5bed10720eff5a1f728971888682772b2d9060d4fee88f37d0824e7384dddcc549475f0e1a44eda4804778b62febe46e04657a20577ee70acb3425e334881eebd8ddf714ae8c527ea747e3367de384e595a43b299b6bb3f6b0a4716cf90038e0f75a47d5057d7fcc3c8a8f9224992c67f8ae0d3251ea09a24aed9ce57ab637f6b3cbb7083df62b6287f64d0877984c4249d113bdb2b07865082aa24cd7ec07061b17de320f51f29f25b82d7073d369cf2dbf96310c0c311997911b2cc02f606f9cd99663c57e78499192a2a78f9c9fa67013e0f9817287faa69b22", + "4aeb32bf9d050f10bea18d9f71b4afea7bd08550e574e7d50df234c7413668b297b6721d7a0f0bdcdcceb2f55adddea28cd59bd44be0c5ec067039e428706caae11f565d961ad6e7f4c51b0aed6d05cc5b8d826c4b9c39daefb6c7da46dce619a359dc9ce215a215218fa8d54ee0b4f301b6c201c7c2c5f7cb1c6e0cb76ba6c6e8f63ef7a5213d550b0d0857fa0ff9e3e38e497161617413ac066e2fa539520233193a5cb7baa0c2cb20b45e56bfed2c40a9544d1f230dd0cd6d4976e7cf51da8a13200c3957c0154c8237b2931ce19b824963ac576ea49b548cc6aa85c47796b470fb2c6308d88f390bb13607e294c84a838b2713b14ca6a5e8bcee", + "77e607478be5502432230c913d9ec82f967d87c0ee169a74076f989648853eca693277287f8a5b306bc94dfdbf64ca5cb5dfc0bc498589d51a691b8d57d4b0a9ee247d038fe1b5571183be3e75c37045bf1235863ff1b84b208c10e7f1a5ba54ff36af5b2870129867164d013e0a6d2cc067a3509bba2f46390302c80b651cf590ef69aad8effd94cab28a9b44be6a38b58cfc47c9c725d6fa467894163383b6873d10d263b1cbbad932ded59ab503920267ac026726f794a335a88f6ef564f8968c6fa6f5d3ea161eb6062ca349b9a0e4038273399cfa297a6b07ceda1ebaa99c9de2d935ee230a08c5a488ad46f3393243371d40916b8063cac9da63", + "50957c407519951bd32e45d21129d6b83436e520b0801ec8292d79a828106a41583a0d607f853dc4410e0a1427f7e873455a75df065cfc6eef970f7e49d123b346976460aadd91cf513c140c356442a84656904a8b1d708dc6089db371c36f4fe059c62302eaab3c06c0cb3b429961f899dcf99798464b8571a440cac7a52b495f32417af6bc8f58adc63647531f804b4e96273b29b42434c1236bde80ba3744fef7b1d11c2f9db332b35bc25123338ac9a0796aac213c9709b3c514ea7ecd80e22d3d8a74f28c8194418a6e1ff30714d0f5a61c068b73b2ba6cad14e05569b4a5a100da3f91429d6e3ffee10ceea057845ec6fc47a6c5125b22e598b2dc", + "f2273ec31e03cf42d9ca953f8b87e78c291cb538098e0f2436194b308ce30583f553fccb21ae6c2d58f3a5a2ca6037c1b8b7afb291009e4310a0c518e75314c5bb1e813bf521f56d0a4891d0772ad84f09a00634815029a3f9ad4e41eafb4a745e409ef3d4f0b1cf6232b70a5ce262b9432f096e834201a0992db5d09ffa5cbc5471460519a4bc7cdc33ae6dfe6ffc1e80ea5d29813136406499c3514186ced71854a340701519ef33b6c82ca67049ab58578ff49c4c4fbf7d97bfec2ecd8fbefec1b6d6467503fea9d26e134e8c35739a422647aaf4db29c9a32e3df36e5845791fdd75a70903e0ce808313a3327431b7772567f779bbaee2e134c109a387", + "5784e614d538f7f26c803191deb464a884817002988c36448dcbecfad1997fe51ab0b3853c51ed49ce9f4e477522fb3f32cc50515b753c18fb89a8d965afcf1ed5e099b22c4225732baeb986f5c5bc88e4582d27915e2a19126d3d4555fab4f6516a6a156dbfeed9e982fc589e33ce2b9e1ba2b416e11852ddeab93025974267ac82c84f071c3d07f215f47e3565fd1d962c76e0d635892ea71488273765887d31f250a26c4ddc377ed89b17326e259f6cc1de0e63158e83aebb7f5a7c08c63c767876c8203639958a407acca096d1f606c04b4f4b3fd771781a5901b1c3cee7c04c3b6870226eee309b74f51edbf70a3817cc8da87875301e04d0416a65dc5d", +} diff --git a/vendor/golang.org/x/crypto/blake2s/blake2x.go b/vendor/golang.org/x/crypto/blake2s/blake2x.go new file mode 100644 index 0000000..eaff2a7 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/blake2x.go @@ -0,0 +1,178 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blake2s + +import ( + "encoding/binary" + "errors" + "io" +) + +// XOF defines the interface to hash functions that +// support arbitrary-length output. +type XOF interface { + // Write absorbs more data into the hash's state. It panics if called + // after Read. + io.Writer + + // Read reads more output from the hash. It returns io.EOF if the limit + // has been reached. + io.Reader + + // Clone returns a copy of the XOF in its current state. + Clone() XOF + + // Reset resets the XOF to its initial state. + Reset() +} + +// OutputLengthUnknown can be used as the size argument to NewXOF to indicate +// the the length of the output is not known in advance. +const OutputLengthUnknown = 0 + +// magicUnknownOutputLength is a magic value for the output size that indicates +// an unknown number of output bytes. +const magicUnknownOutputLength = 65535 + +// maxOutputLength is the absolute maximum number of bytes to produce when the +// number of output bytes is unknown. +const maxOutputLength = (1 << 32) * 32 + +// NewXOF creates a new variable-output-length hash. The hash either produce a +// known number of bytes (1 <= size < 65535), or an unknown number of bytes +// (size == OutputLengthUnknown). In the latter case, an absolute limit of +// 128GiB applies. +// +// A non-nil key turns the hash into a MAC. The key must between +// zero and 32 bytes long. +func NewXOF(size uint16, key []byte) (XOF, error) { + if len(key) > Size { + return nil, errKeySize + } + if size == magicUnknownOutputLength { + // 2^16-1 indicates an unknown number of bytes and thus isn't a + // valid length. + return nil, errors.New("blake2s: XOF length too large") + } + if size == OutputLengthUnknown { + size = magicUnknownOutputLength + } + x := &xof{ + d: digest{ + size: Size, + keyLen: len(key), + }, + length: size, + } + copy(x.d.key[:], key) + x.Reset() + return x, nil +} + +type xof struct { + d digest + length uint16 + remaining uint64 + cfg, root, block [Size]byte + offset int + nodeOffset uint32 + readMode bool +} + +func (x *xof) Write(p []byte) (n int, err error) { + if x.readMode { + panic("blake2s: write to XOF after read") + } + return x.d.Write(p) +} + +func (x *xof) Clone() XOF { + clone := *x + return &clone +} + +func (x *xof) Reset() { + x.cfg[0] = byte(Size) + binary.LittleEndian.PutUint32(x.cfg[4:], uint32(Size)) // leaf length + binary.LittleEndian.PutUint16(x.cfg[12:], x.length) // XOF length + x.cfg[15] = byte(Size) // inner hash size + + x.d.Reset() + x.d.h[3] ^= uint32(x.length) + + x.remaining = uint64(x.length) + if x.remaining == magicUnknownOutputLength { + x.remaining = maxOutputLength + } + x.offset, x.nodeOffset = 0, 0 + x.readMode = false +} + +func (x *xof) Read(p []byte) (n int, err error) { + if !x.readMode { + x.d.finalize(&x.root) + x.readMode = true + } + + if x.remaining == 0 { + return 0, io.EOF + } + + n = len(p) + if uint64(n) > x.remaining { + n = int(x.remaining) + p = p[:n] + } + + if x.offset > 0 { + blockRemaining := Size - x.offset + if n < blockRemaining { + x.offset += copy(p, x.block[x.offset:]) + x.remaining -= uint64(n) + return + } + copy(p, x.block[x.offset:]) + p = p[blockRemaining:] + x.offset = 0 + x.remaining -= uint64(blockRemaining) + } + + for len(p) >= Size { + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + copy(p, x.block[:]) + p = p[Size:] + x.remaining -= uint64(Size) + } + + if todo := len(p); todo > 0 { + if x.remaining < uint64(Size) { + x.cfg[0] = byte(x.remaining) + } + binary.LittleEndian.PutUint32(x.cfg[8:], x.nodeOffset) + x.nodeOffset++ + + x.d.initConfig(&x.cfg) + x.d.Write(x.root[:]) + x.d.finalize(&x.block) + + x.offset = copy(p, x.block[:todo]) + x.remaining -= uint64(todo) + } + + return +} + +func (d *digest) initConfig(cfg *[Size]byte) { + d.offset, d.c[0], d.c[1] = 0, 0, 0 + for i := range d.h { + d.h[i] = iv[i] ^ binary.LittleEndian.Uint32(cfg[i*4:]) + } +} diff --git a/vendor/golang.org/x/crypto/blake2s/register.go b/vendor/golang.org/x/crypto/blake2s/register.go new file mode 100644 index 0000000..d277459 --- /dev/null +++ b/vendor/golang.org/x/crypto/blake2s/register.go @@ -0,0 +1,21 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.9 + +package blake2s + +import ( + "crypto" + "hash" +) + +func init() { + newHash256 := func() hash.Hash { + h, _ := New256(nil) + return h + } + + crypto.RegisterHash(crypto.BLAKE2s_256, newHash256) +} diff --git a/vendor/golang.org/x/crypto/blowfish/block.go b/vendor/golang.org/x/crypto/blowfish/block.go new file mode 100644 index 0000000..9d80f19 --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/block.go @@ -0,0 +1,159 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blowfish + +// getNextWord returns the next big-endian uint32 value from the byte slice +// at the given position in a circular manner, updating the position. +func getNextWord(b []byte, pos *int) uint32 { + var w uint32 + j := *pos + for i := 0; i < 4; i++ { + w = w<<8 | uint32(b[j]) + j++ + if j >= len(b) { + j = 0 + } + } + *pos = j + return w +} + +// ExpandKey performs a key expansion on the given *Cipher. Specifically, it +// performs the Blowfish algorithm's key schedule which sets up the *Cipher's +// pi and substitution tables for calls to Encrypt. This is used, primarily, +// by the bcrypt package to reuse the Blowfish key schedule during its +// set up. It's unlikely that you need to use this directly. +func ExpandKey(key []byte, c *Cipher) { + j := 0 + for i := 0; i < 18; i++ { + // Using inlined getNextWord for performance. + var d uint32 + for k := 0; k < 4; k++ { + d = d<<8 | uint32(key[j]) + j++ + if j >= len(key) { + j = 0 + } + } + c.p[i] ^= d + } + + var l, r uint32 + for i := 0; i < 18; i += 2 { + l, r = encryptBlock(l, r, c) + c.p[i], c.p[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s0[i], c.s0[i+1] = l, r + } + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s1[i], c.s1[i+1] = l, r + } + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s2[i], c.s2[i+1] = l, r + } + for i := 0; i < 256; i += 2 { + l, r = encryptBlock(l, r, c) + c.s3[i], c.s3[i+1] = l, r + } +} + +// This is similar to ExpandKey, but folds the salt during the key +// schedule. While ExpandKey is essentially expandKeyWithSalt with an all-zero +// salt passed in, reusing ExpandKey turns out to be a place of inefficiency +// and specializing it here is useful. +func expandKeyWithSalt(key []byte, salt []byte, c *Cipher) { + j := 0 + for i := 0; i < 18; i++ { + c.p[i] ^= getNextWord(key, &j) + } + + j = 0 + var l, r uint32 + for i := 0; i < 18; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.p[i], c.p[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s0[i], c.s0[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s1[i], c.s1[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s2[i], c.s2[i+1] = l, r + } + + for i := 0; i < 256; i += 2 { + l ^= getNextWord(salt, &j) + r ^= getNextWord(salt, &j) + l, r = encryptBlock(l, r, c) + c.s3[i], c.s3[i+1] = l, r + } +} + +func encryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { + xl, xr := l, r + xl ^= c.p[0] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[1] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[2] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[3] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[4] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[5] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[6] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[7] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[8] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[9] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[10] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[11] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[12] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[13] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[14] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[15] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[16] + xr ^= c.p[17] + return xr, xl +} + +func decryptBlock(l, r uint32, c *Cipher) (uint32, uint32) { + xl, xr := l, r + xl ^= c.p[17] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[16] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[15] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[14] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[13] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[12] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[11] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[10] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[9] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[8] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[7] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[6] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[5] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[4] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[3] + xr ^= ((c.s0[byte(xl>>24)] + c.s1[byte(xl>>16)]) ^ c.s2[byte(xl>>8)]) + c.s3[byte(xl)] ^ c.p[2] + xl ^= ((c.s0[byte(xr>>24)] + c.s1[byte(xr>>16)]) ^ c.s2[byte(xr>>8)]) + c.s3[byte(xr)] ^ c.p[1] + xr ^= c.p[0] + return xr, xl +} diff --git a/vendor/golang.org/x/crypto/blowfish/blowfish_test.go b/vendor/golang.org/x/crypto/blowfish/blowfish_test.go new file mode 100644 index 0000000..368ba87 --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/blowfish_test.go @@ -0,0 +1,274 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package blowfish + +import "testing" + +type CryptTest struct { + key []byte + in []byte + out []byte +} + +// Test vector values are from https://www.schneier.com/code/vectors.txt. +var encryptTests = []CryptTest{ + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78}}, + { + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0x51, 0x86, 0x6F, 0xD5, 0xB8, 0x5E, 0xCB, 0x8A}}, + { + []byte{0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, + []byte{0x7D, 0x85, 0x6F, 0x9A, 0x61, 0x30, 0x63, 0xF2}}, + { + []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, + []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, + []byte{0x24, 0x66, 0xDD, 0x87, 0x8B, 0x96, 0x3C, 0x9D}}, + + { + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, + []byte{0x61, 0xF9, 0xC3, 0x80, 0x22, 0x81, 0xB0, 0x96}}, + { + []byte{0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0x7D, 0x0C, 0xC6, 0x30, 0xAF, 0xDA, 0x1E, 0xC7}}, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x4E, 0xF9, 0x97, 0x45, 0x61, 0x98, 0xDD, 0x78}}, + { + []byte{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0x0A, 0xCE, 0xAB, 0x0F, 0xC6, 0xA0, 0xA2, 0x8D}}, + { + []byte{0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E, 0x57}, + []byte{0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67, 0x42}, + []byte{0x59, 0xC6, 0x82, 0x45, 0xEB, 0x05, 0x28, 0x2B}}, + { + []byte{0x01, 0x31, 0xD9, 0x61, 0x9D, 0xC1, 0x37, 0x6E}, + []byte{0x5C, 0xD5, 0x4C, 0xA8, 0x3D, 0xEF, 0x57, 0xDA}, + []byte{0xB1, 0xB8, 0xCC, 0x0B, 0x25, 0x0F, 0x09, 0xA0}}, + { + []byte{0x07, 0xA1, 0x13, 0x3E, 0x4A, 0x0B, 0x26, 0x86}, + []byte{0x02, 0x48, 0xD4, 0x38, 0x06, 0xF6, 0x71, 0x72}, + []byte{0x17, 0x30, 0xE5, 0x77, 0x8B, 0xEA, 0x1D, 0xA4}}, + { + []byte{0x38, 0x49, 0x67, 0x4C, 0x26, 0x02, 0x31, 0x9E}, + []byte{0x51, 0x45, 0x4B, 0x58, 0x2D, 0xDF, 0x44, 0x0A}, + []byte{0xA2, 0x5E, 0x78, 0x56, 0xCF, 0x26, 0x51, 0xEB}}, + { + []byte{0x04, 0xB9, 0x15, 0xBA, 0x43, 0xFE, 0xB5, 0xB6}, + []byte{0x42, 0xFD, 0x44, 0x30, 0x59, 0x57, 0x7F, 0xA2}, + []byte{0x35, 0x38, 0x82, 0xB1, 0x09, 0xCE, 0x8F, 0x1A}}, + { + []byte{0x01, 0x13, 0xB9, 0x70, 0xFD, 0x34, 0xF2, 0xCE}, + []byte{0x05, 0x9B, 0x5E, 0x08, 0x51, 0xCF, 0x14, 0x3A}, + []byte{0x48, 0xF4, 0xD0, 0x88, 0x4C, 0x37, 0x99, 0x18}}, + { + []byte{0x01, 0x70, 0xF1, 0x75, 0x46, 0x8F, 0xB5, 0xE6}, + []byte{0x07, 0x56, 0xD8, 0xE0, 0x77, 0x47, 0x61, 0xD2}, + []byte{0x43, 0x21, 0x93, 0xB7, 0x89, 0x51, 0xFC, 0x98}}, + { + []byte{0x43, 0x29, 0x7F, 0xAD, 0x38, 0xE3, 0x73, 0xFE}, + []byte{0x76, 0x25, 0x14, 0xB8, 0x29, 0xBF, 0x48, 0x6A}, + []byte{0x13, 0xF0, 0x41, 0x54, 0xD6, 0x9D, 0x1A, 0xE5}}, + { + []byte{0x07, 0xA7, 0x13, 0x70, 0x45, 0xDA, 0x2A, 0x16}, + []byte{0x3B, 0xDD, 0x11, 0x90, 0x49, 0x37, 0x28, 0x02}, + []byte{0x2E, 0xED, 0xDA, 0x93, 0xFF, 0xD3, 0x9C, 0x79}}, + { + []byte{0x04, 0x68, 0x91, 0x04, 0xC2, 0xFD, 0x3B, 0x2F}, + []byte{0x26, 0x95, 0x5F, 0x68, 0x35, 0xAF, 0x60, 0x9A}, + []byte{0xD8, 0x87, 0xE0, 0x39, 0x3C, 0x2D, 0xA6, 0xE3}}, + { + []byte{0x37, 0xD0, 0x6B, 0xB5, 0x16, 0xCB, 0x75, 0x46}, + []byte{0x16, 0x4D, 0x5E, 0x40, 0x4F, 0x27, 0x52, 0x32}, + []byte{0x5F, 0x99, 0xD0, 0x4F, 0x5B, 0x16, 0x39, 0x69}}, + { + []byte{0x1F, 0x08, 0x26, 0x0D, 0x1A, 0xC2, 0x46, 0x5E}, + []byte{0x6B, 0x05, 0x6E, 0x18, 0x75, 0x9F, 0x5C, 0xCA}, + []byte{0x4A, 0x05, 0x7A, 0x3B, 0x24, 0xD3, 0x97, 0x7B}}, + { + []byte{0x58, 0x40, 0x23, 0x64, 0x1A, 0xBA, 0x61, 0x76}, + []byte{0x00, 0x4B, 0xD6, 0xEF, 0x09, 0x17, 0x60, 0x62}, + []byte{0x45, 0x20, 0x31, 0xC1, 0xE4, 0xFA, 0xDA, 0x8E}}, + { + []byte{0x02, 0x58, 0x16, 0x16, 0x46, 0x29, 0xB0, 0x07}, + []byte{0x48, 0x0D, 0x39, 0x00, 0x6E, 0xE7, 0x62, 0xF2}, + []byte{0x75, 0x55, 0xAE, 0x39, 0xF5, 0x9B, 0x87, 0xBD}}, + { + []byte{0x49, 0x79, 0x3E, 0xBC, 0x79, 0xB3, 0x25, 0x8F}, + []byte{0x43, 0x75, 0x40, 0xC8, 0x69, 0x8F, 0x3C, 0xFA}, + []byte{0x53, 0xC5, 0x5F, 0x9C, 0xB4, 0x9F, 0xC0, 0x19}}, + { + []byte{0x4F, 0xB0, 0x5E, 0x15, 0x15, 0xAB, 0x73, 0xA7}, + []byte{0x07, 0x2D, 0x43, 0xA0, 0x77, 0x07, 0x52, 0x92}, + []byte{0x7A, 0x8E, 0x7B, 0xFA, 0x93, 0x7E, 0x89, 0xA3}}, + { + []byte{0x49, 0xE9, 0x5D, 0x6D, 0x4C, 0xA2, 0x29, 0xBF}, + []byte{0x02, 0xFE, 0x55, 0x77, 0x81, 0x17, 0xF1, 0x2A}, + []byte{0xCF, 0x9C, 0x5D, 0x7A, 0x49, 0x86, 0xAD, 0xB5}}, + { + []byte{0x01, 0x83, 0x10, 0xDC, 0x40, 0x9B, 0x26, 0xD6}, + []byte{0x1D, 0x9D, 0x5C, 0x50, 0x18, 0xF7, 0x28, 0xC2}, + []byte{0xD1, 0xAB, 0xB2, 0x90, 0x65, 0x8B, 0xC7, 0x78}}, + { + []byte{0x1C, 0x58, 0x7F, 0x1C, 0x13, 0x92, 0x4F, 0xEF}, + []byte{0x30, 0x55, 0x32, 0x28, 0x6D, 0x6F, 0x29, 0x5A}, + []byte{0x55, 0xCB, 0x37, 0x74, 0xD1, 0x3E, 0xF2, 0x01}}, + { + []byte{0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0xFA, 0x34, 0xEC, 0x48, 0x47, 0xB2, 0x68, 0xB2}}, + { + []byte{0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0xA7, 0x90, 0x79, 0x51, 0x08, 0xEA, 0x3C, 0xAE}}, + { + []byte{0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE}, + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0xC3, 0x9E, 0x07, 0x2D, 0x9F, 0xAC, 0x63, 0x1D}}, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0x01, 0x49, 0x33, 0xE0, 0xCD, 0xAF, 0xF6, 0xE4}}, + { + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xF2, 0x1E, 0x9A, 0x77, 0xB7, 0x1C, 0x49, 0xBC}}, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x24, 0x59, 0x46, 0x88, 0x57, 0x54, 0x36, 0x9A}}, + { + []byte{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10}, + []byte{0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, + []byte{0x6B, 0x5C, 0x5A, 0x9C, 0x5D, 0x9E, 0x0A, 0x5A}}, +} + +func TestCipherEncrypt(t *testing.T) { + for i, tt := range encryptTests { + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(tt.key), err) + continue + } + ct := make([]byte, len(tt.out)) + c.Encrypt(ct, tt.in) + for j, v := range ct { + if v != tt.out[j] { + t.Errorf("Cipher.Encrypt, test vector #%d: cipher-text[%d] = %#x, expected %#x", i, j, v, tt.out[j]) + break + } + } + } +} + +func TestCipherDecrypt(t *testing.T) { + for i, tt := range encryptTests { + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(tt.key), err) + continue + } + pt := make([]byte, len(tt.in)) + c.Decrypt(pt, tt.out) + for j, v := range pt { + if v != tt.in[j] { + t.Errorf("Cipher.Decrypt, test vector #%d: plain-text[%d] = %#x, expected %#x", i, j, v, tt.in[j]) + break + } + } + } +} + +func TestSaltedCipherKeyLength(t *testing.T) { + if _, err := NewSaltedCipher(nil, []byte{'a'}); err != KeySizeError(0) { + t.Errorf("NewSaltedCipher with short key, gave error %#v, expected %#v", err, KeySizeError(0)) + } + + // A 57-byte key. One over the typical blowfish restriction. + key := []byte("012345678901234567890123456789012345678901234567890123456") + if _, err := NewSaltedCipher(key, []byte{'a'}); err != nil { + t.Errorf("NewSaltedCipher with long key, gave error %#v", err) + } +} + +// Test vectors generated with Blowfish from OpenSSH. +var saltedVectors = [][8]byte{ + {0x0c, 0x82, 0x3b, 0x7b, 0x8d, 0x01, 0x4b, 0x7e}, + {0xd1, 0xe1, 0x93, 0xf0, 0x70, 0xa6, 0xdb, 0x12}, + {0xfc, 0x5e, 0xba, 0xde, 0xcb, 0xf8, 0x59, 0xad}, + {0x8a, 0x0c, 0x76, 0xe7, 0xdd, 0x2c, 0xd3, 0xa8}, + {0x2c, 0xcb, 0x7b, 0xee, 0xac, 0x7b, 0x7f, 0xf8}, + {0xbb, 0xf6, 0x30, 0x6f, 0xe1, 0x5d, 0x62, 0xbf}, + {0x97, 0x1e, 0xc1, 0x3d, 0x3d, 0xe0, 0x11, 0xe9}, + {0x06, 0xd7, 0x4d, 0xb1, 0x80, 0xa3, 0xb1, 0x38}, + {0x67, 0xa1, 0xa9, 0x75, 0x0e, 0x5b, 0xc6, 0xb4}, + {0x51, 0x0f, 0x33, 0x0e, 0x4f, 0x67, 0xd2, 0x0c}, + {0xf1, 0x73, 0x7e, 0xd8, 0x44, 0xea, 0xdb, 0xe5}, + {0x14, 0x0e, 0x16, 0xce, 0x7f, 0x4a, 0x9c, 0x7b}, + {0x4b, 0xfe, 0x43, 0xfd, 0xbf, 0x36, 0x04, 0x47}, + {0xb1, 0xeb, 0x3e, 0x15, 0x36, 0xa7, 0xbb, 0xe2}, + {0x6d, 0x0b, 0x41, 0xdd, 0x00, 0x98, 0x0b, 0x19}, + {0xd3, 0xce, 0x45, 0xce, 0x1d, 0x56, 0xb7, 0xfc}, + {0xd9, 0xf0, 0xfd, 0xda, 0xc0, 0x23, 0xb7, 0x93}, + {0x4c, 0x6f, 0xa1, 0xe4, 0x0c, 0xa8, 0xca, 0x57}, + {0xe6, 0x2f, 0x28, 0xa7, 0x0c, 0x94, 0x0d, 0x08}, + {0x8f, 0xe3, 0xf0, 0xb6, 0x29, 0xe3, 0x44, 0x03}, + {0xff, 0x98, 0xdd, 0x04, 0x45, 0xb4, 0x6d, 0x1f}, + {0x9e, 0x45, 0x4d, 0x18, 0x40, 0x53, 0xdb, 0xef}, + {0xb7, 0x3b, 0xef, 0x29, 0xbe, 0xa8, 0x13, 0x71}, + {0x02, 0x54, 0x55, 0x41, 0x8e, 0x04, 0xfc, 0xad}, + {0x6a, 0x0a, 0xee, 0x7c, 0x10, 0xd9, 0x19, 0xfe}, + {0x0a, 0x22, 0xd9, 0x41, 0xcc, 0x23, 0x87, 0x13}, + {0x6e, 0xff, 0x1f, 0xff, 0x36, 0x17, 0x9c, 0xbe}, + {0x79, 0xad, 0xb7, 0x40, 0xf4, 0x9f, 0x51, 0xa6}, + {0x97, 0x81, 0x99, 0xa4, 0xde, 0x9e, 0x9f, 0xb6}, + {0x12, 0x19, 0x7a, 0x28, 0xd0, 0xdc, 0xcc, 0x92}, + {0x81, 0xda, 0x60, 0x1e, 0x0e, 0xdd, 0x65, 0x56}, + {0x7d, 0x76, 0x20, 0xb2, 0x73, 0xc9, 0x9e, 0xee}, +} + +func TestSaltedCipher(t *testing.T) { + var key, salt [32]byte + for i := range key { + key[i] = byte(i) + salt[i] = byte(i + 32) + } + for i, v := range saltedVectors { + c, err := NewSaltedCipher(key[:], salt[:i]) + if err != nil { + t.Fatal(err) + } + var buf [8]byte + c.Encrypt(buf[:], buf[:]) + if v != buf { + t.Errorf("%d: expected %x, got %x", i, v, buf) + } + } +} + +func BenchmarkExpandKeyWithSalt(b *testing.B) { + key := make([]byte, 32) + salt := make([]byte, 16) + c, _ := NewCipher(key) + for i := 0; i < b.N; i++ { + expandKeyWithSalt(key, salt, c) + } +} + +func BenchmarkExpandKey(b *testing.B) { + key := make([]byte, 32) + c, _ := NewCipher(key) + for i := 0; i < b.N; i++ { + ExpandKey(key, c) + } +} diff --git a/vendor/golang.org/x/crypto/blowfish/cipher.go b/vendor/golang.org/x/crypto/blowfish/cipher.go new file mode 100644 index 0000000..2641dad --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/cipher.go @@ -0,0 +1,91 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package blowfish implements Bruce Schneier's Blowfish encryption algorithm. +package blowfish // import "golang.org/x/crypto/blowfish" + +// The code is a port of Bruce Schneier's C implementation. +// See https://www.schneier.com/blowfish.html. + +import "strconv" + +// The Blowfish block size in bytes. +const BlockSize = 8 + +// A Cipher is an instance of Blowfish encryption using a particular key. +type Cipher struct { + p [18]uint32 + s0, s1, s2, s3 [256]uint32 +} + +type KeySizeError int + +func (k KeySizeError) Error() string { + return "crypto/blowfish: invalid key size " + strconv.Itoa(int(k)) +} + +// NewCipher creates and returns a Cipher. +// The key argument should be the Blowfish key, from 1 to 56 bytes. +func NewCipher(key []byte) (*Cipher, error) { + var result Cipher + if k := len(key); k < 1 || k > 56 { + return nil, KeySizeError(k) + } + initCipher(&result) + ExpandKey(key, &result) + return &result, nil +} + +// NewSaltedCipher creates a returns a Cipher that folds a salt into its key +// schedule. For most purposes, NewCipher, instead of NewSaltedCipher, is +// sufficient and desirable. For bcrypt compatibility, the key can be over 56 +// bytes. +func NewSaltedCipher(key, salt []byte) (*Cipher, error) { + if len(salt) == 0 { + return NewCipher(key) + } + var result Cipher + if k := len(key); k < 1 { + return nil, KeySizeError(k) + } + initCipher(&result) + expandKeyWithSalt(key, salt, &result) + return &result, nil +} + +// BlockSize returns the Blowfish block size, 8 bytes. +// It is necessary to satisfy the Block interface in the +// package "crypto/cipher". +func (c *Cipher) BlockSize() int { return BlockSize } + +// Encrypt encrypts the 8-byte buffer src using the key k +// and stores the result in dst. +// Note that for amounts of data larger than a block, +// it is not safe to just call Encrypt on successive blocks; +// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). +func (c *Cipher) Encrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + l, r = encryptBlock(l, r, c) + dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l) + dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r) +} + +// Decrypt decrypts the 8-byte buffer src using the key k +// and stores the result in dst. +func (c *Cipher) Decrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + l, r = decryptBlock(l, r, c) + dst[0], dst[1], dst[2], dst[3] = byte(l>>24), byte(l>>16), byte(l>>8), byte(l) + dst[4], dst[5], dst[6], dst[7] = byte(r>>24), byte(r>>16), byte(r>>8), byte(r) +} + +func initCipher(c *Cipher) { + copy(c.p[0:], p[0:]) + copy(c.s0[0:], s0[0:]) + copy(c.s1[0:], s1[0:]) + copy(c.s2[0:], s2[0:]) + copy(c.s3[0:], s3[0:]) +} diff --git a/vendor/golang.org/x/crypto/blowfish/const.go b/vendor/golang.org/x/crypto/blowfish/const.go new file mode 100644 index 0000000..d040775 --- /dev/null +++ b/vendor/golang.org/x/crypto/blowfish/const.go @@ -0,0 +1,199 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// The startup permutation array and substitution boxes. +// They are the hexadecimal digits of PI; see: +// https://www.schneier.com/code/constants.txt. + +package blowfish + +var s0 = [256]uint32{ + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, + 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, + 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658, + 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, + 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, + 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6, + 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, + 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1, + 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, + 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, + 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176, + 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, + 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b, + 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, + 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, + 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a, + 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, + 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, + 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8, + 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, + 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0, + 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, + 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, + 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705, + 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, + 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9, + 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, + 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, + 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, +} + +var s1 = [256]uint32{ + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, + 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, + 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, + 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, + 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, + 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, + 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, + 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, + 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, + 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, + 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, + 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, + 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, + 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, + 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, + 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, + 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, + 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, + 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, + 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, + 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, + 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, +} + +var s2 = [256]uint32{ + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, + 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, + 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, + 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, + 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, + 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, + 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, + 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, + 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, + 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, + 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, + 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, + 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, + 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, + 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, + 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, + 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, + 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, + 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, + 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, + 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, + 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, + 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, + 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, + 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, + 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, + 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, + 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, + 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, +} + +var s3 = [256]uint32{ + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, + 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79, + 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, + 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, + 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1, + 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, + 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6, + 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, + 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, + 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5, + 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, + 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, + 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd, + 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, + 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc, + 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, + 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, + 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a, + 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, + 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b, + 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, + 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, + 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623, + 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, + 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, + 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3, + 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, + 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6, +} + +var p = [18]uint32{ + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, + 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b, +} diff --git a/vendor/golang.org/x/crypto/bn256/bn256.go b/vendor/golang.org/x/crypto/bn256/bn256.go new file mode 100644 index 0000000..014f8b3 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/bn256.go @@ -0,0 +1,404 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package bn256 implements a particular bilinear group at the 128-bit security level. +// +// Bilinear groups are the basis of many of the new cryptographic protocols +// that have been proposed over the past decade. They consist of a triplet of +// groups (G₁, G₂ and GT) such that there exists a function e(g₁ˣ,g₂ʸ)=gTˣʸ +// (where gₓ is a generator of the respective group). That function is called +// a pairing function. +// +// This package specifically implements the Optimal Ate pairing over a 256-bit +// Barreto-Naehrig curve as described in +// http://cryptojedi.org/papers/dclxvi-20100714.pdf. Its output is compatible +// with the implementation described in that paper. +package bn256 // import "golang.org/x/crypto/bn256" + +import ( + "crypto/rand" + "io" + "math/big" +) + +// BUG(agl): this implementation is not constant time. +// TODO(agl): keep GF(p²) elements in Mongomery form. + +// G1 is an abstract cyclic group. The zero value is suitable for use as the +// output of an operation, but cannot be used as an input. +type G1 struct { + p *curvePoint +} + +// RandomG1 returns x and g₁ˣ where x is a random, non-zero number read from r. +func RandomG1(r io.Reader) (*big.Int, *G1, error) { + var k *big.Int + var err error + + for { + k, err = rand.Int(r, Order) + if err != nil { + return nil, nil, err + } + if k.Sign() > 0 { + break + } + } + + return k, new(G1).ScalarBaseMult(k), nil +} + +func (g *G1) String() string { + return "bn256.G1" + g.p.String() +} + +// ScalarBaseMult sets e to g*k where g is the generator of the group and +// then returns e. +func (e *G1) ScalarBaseMult(k *big.Int) *G1 { + if e.p == nil { + e.p = newCurvePoint(nil) + } + e.p.Mul(curveGen, k, new(bnPool)) + return e +} + +// ScalarMult sets e to a*k and then returns e. +func (e *G1) ScalarMult(a *G1, k *big.Int) *G1 { + if e.p == nil { + e.p = newCurvePoint(nil) + } + e.p.Mul(a.p, k, new(bnPool)) + return e +} + +// Add sets e to a+b and then returns e. +// BUG(agl): this function is not complete: a==b fails. +func (e *G1) Add(a, b *G1) *G1 { + if e.p == nil { + e.p = newCurvePoint(nil) + } + e.p.Add(a.p, b.p, new(bnPool)) + return e +} + +// Neg sets e to -a and then returns e. +func (e *G1) Neg(a *G1) *G1 { + if e.p == nil { + e.p = newCurvePoint(nil) + } + e.p.Negative(a.p) + return e +} + +// Marshal converts n to a byte slice. +func (n *G1) Marshal() []byte { + n.p.MakeAffine(nil) + + xBytes := new(big.Int).Mod(n.p.x, p).Bytes() + yBytes := new(big.Int).Mod(n.p.y, p).Bytes() + + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + ret := make([]byte, numBytes*2) + copy(ret[1*numBytes-len(xBytes):], xBytes) + copy(ret[2*numBytes-len(yBytes):], yBytes) + + return ret +} + +// Unmarshal sets e to the result of converting the output of Marshal back into +// a group element and then returns e. +func (e *G1) Unmarshal(m []byte) (*G1, bool) { + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + if len(m) != 2*numBytes { + return nil, false + } + + if e.p == nil { + e.p = newCurvePoint(nil) + } + + e.p.x.SetBytes(m[0*numBytes : 1*numBytes]) + e.p.y.SetBytes(m[1*numBytes : 2*numBytes]) + + if e.p.x.Sign() == 0 && e.p.y.Sign() == 0 { + // This is the point at infinity. + e.p.y.SetInt64(1) + e.p.z.SetInt64(0) + e.p.t.SetInt64(0) + } else { + e.p.z.SetInt64(1) + e.p.t.SetInt64(1) + + if !e.p.IsOnCurve() { + return nil, false + } + } + + return e, true +} + +// G2 is an abstract cyclic group. The zero value is suitable for use as the +// output of an operation, but cannot be used as an input. +type G2 struct { + p *twistPoint +} + +// RandomG1 returns x and g₂ˣ where x is a random, non-zero number read from r. +func RandomG2(r io.Reader) (*big.Int, *G2, error) { + var k *big.Int + var err error + + for { + k, err = rand.Int(r, Order) + if err != nil { + return nil, nil, err + } + if k.Sign() > 0 { + break + } + } + + return k, new(G2).ScalarBaseMult(k), nil +} + +func (g *G2) String() string { + return "bn256.G2" + g.p.String() +} + +// ScalarBaseMult sets e to g*k where g is the generator of the group and +// then returns out. +func (e *G2) ScalarBaseMult(k *big.Int) *G2 { + if e.p == nil { + e.p = newTwistPoint(nil) + } + e.p.Mul(twistGen, k, new(bnPool)) + return e +} + +// ScalarMult sets e to a*k and then returns e. +func (e *G2) ScalarMult(a *G2, k *big.Int) *G2 { + if e.p == nil { + e.p = newTwistPoint(nil) + } + e.p.Mul(a.p, k, new(bnPool)) + return e +} + +// Add sets e to a+b and then returns e. +// BUG(agl): this function is not complete: a==b fails. +func (e *G2) Add(a, b *G2) *G2 { + if e.p == nil { + e.p = newTwistPoint(nil) + } + e.p.Add(a.p, b.p, new(bnPool)) + return e +} + +// Marshal converts n into a byte slice. +func (n *G2) Marshal() []byte { + n.p.MakeAffine(nil) + + xxBytes := new(big.Int).Mod(n.p.x.x, p).Bytes() + xyBytes := new(big.Int).Mod(n.p.x.y, p).Bytes() + yxBytes := new(big.Int).Mod(n.p.y.x, p).Bytes() + yyBytes := new(big.Int).Mod(n.p.y.y, p).Bytes() + + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + ret := make([]byte, numBytes*4) + copy(ret[1*numBytes-len(xxBytes):], xxBytes) + copy(ret[2*numBytes-len(xyBytes):], xyBytes) + copy(ret[3*numBytes-len(yxBytes):], yxBytes) + copy(ret[4*numBytes-len(yyBytes):], yyBytes) + + return ret +} + +// Unmarshal sets e to the result of converting the output of Marshal back into +// a group element and then returns e. +func (e *G2) Unmarshal(m []byte) (*G2, bool) { + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + if len(m) != 4*numBytes { + return nil, false + } + + if e.p == nil { + e.p = newTwistPoint(nil) + } + + e.p.x.x.SetBytes(m[0*numBytes : 1*numBytes]) + e.p.x.y.SetBytes(m[1*numBytes : 2*numBytes]) + e.p.y.x.SetBytes(m[2*numBytes : 3*numBytes]) + e.p.y.y.SetBytes(m[3*numBytes : 4*numBytes]) + + if e.p.x.x.Sign() == 0 && + e.p.x.y.Sign() == 0 && + e.p.y.x.Sign() == 0 && + e.p.y.y.Sign() == 0 { + // This is the point at infinity. + e.p.y.SetOne() + e.p.z.SetZero() + e.p.t.SetZero() + } else { + e.p.z.SetOne() + e.p.t.SetOne() + + if !e.p.IsOnCurve() { + return nil, false + } + } + + return e, true +} + +// GT is an abstract cyclic group. The zero value is suitable for use as the +// output of an operation, but cannot be used as an input. +type GT struct { + p *gfP12 +} + +func (g *GT) String() string { + return "bn256.GT" + g.p.String() +} + +// ScalarMult sets e to a*k and then returns e. +func (e *GT) ScalarMult(a *GT, k *big.Int) *GT { + if e.p == nil { + e.p = newGFp12(nil) + } + e.p.Exp(a.p, k, new(bnPool)) + return e +} + +// Add sets e to a+b and then returns e. +func (e *GT) Add(a, b *GT) *GT { + if e.p == nil { + e.p = newGFp12(nil) + } + e.p.Mul(a.p, b.p, new(bnPool)) + return e +} + +// Neg sets e to -a and then returns e. +func (e *GT) Neg(a *GT) *GT { + if e.p == nil { + e.p = newGFp12(nil) + } + e.p.Invert(a.p, new(bnPool)) + return e +} + +// Marshal converts n into a byte slice. +func (n *GT) Marshal() []byte { + n.p.Minimal() + + xxxBytes := n.p.x.x.x.Bytes() + xxyBytes := n.p.x.x.y.Bytes() + xyxBytes := n.p.x.y.x.Bytes() + xyyBytes := n.p.x.y.y.Bytes() + xzxBytes := n.p.x.z.x.Bytes() + xzyBytes := n.p.x.z.y.Bytes() + yxxBytes := n.p.y.x.x.Bytes() + yxyBytes := n.p.y.x.y.Bytes() + yyxBytes := n.p.y.y.x.Bytes() + yyyBytes := n.p.y.y.y.Bytes() + yzxBytes := n.p.y.z.x.Bytes() + yzyBytes := n.p.y.z.y.Bytes() + + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + ret := make([]byte, numBytes*12) + copy(ret[1*numBytes-len(xxxBytes):], xxxBytes) + copy(ret[2*numBytes-len(xxyBytes):], xxyBytes) + copy(ret[3*numBytes-len(xyxBytes):], xyxBytes) + copy(ret[4*numBytes-len(xyyBytes):], xyyBytes) + copy(ret[5*numBytes-len(xzxBytes):], xzxBytes) + copy(ret[6*numBytes-len(xzyBytes):], xzyBytes) + copy(ret[7*numBytes-len(yxxBytes):], yxxBytes) + copy(ret[8*numBytes-len(yxyBytes):], yxyBytes) + copy(ret[9*numBytes-len(yyxBytes):], yyxBytes) + copy(ret[10*numBytes-len(yyyBytes):], yyyBytes) + copy(ret[11*numBytes-len(yzxBytes):], yzxBytes) + copy(ret[12*numBytes-len(yzyBytes):], yzyBytes) + + return ret +} + +// Unmarshal sets e to the result of converting the output of Marshal back into +// a group element and then returns e. +func (e *GT) Unmarshal(m []byte) (*GT, bool) { + // Each value is a 256-bit number. + const numBytes = 256 / 8 + + if len(m) != 12*numBytes { + return nil, false + } + + if e.p == nil { + e.p = newGFp12(nil) + } + + e.p.x.x.x.SetBytes(m[0*numBytes : 1*numBytes]) + e.p.x.x.y.SetBytes(m[1*numBytes : 2*numBytes]) + e.p.x.y.x.SetBytes(m[2*numBytes : 3*numBytes]) + e.p.x.y.y.SetBytes(m[3*numBytes : 4*numBytes]) + e.p.x.z.x.SetBytes(m[4*numBytes : 5*numBytes]) + e.p.x.z.y.SetBytes(m[5*numBytes : 6*numBytes]) + e.p.y.x.x.SetBytes(m[6*numBytes : 7*numBytes]) + e.p.y.x.y.SetBytes(m[7*numBytes : 8*numBytes]) + e.p.y.y.x.SetBytes(m[8*numBytes : 9*numBytes]) + e.p.y.y.y.SetBytes(m[9*numBytes : 10*numBytes]) + e.p.y.z.x.SetBytes(m[10*numBytes : 11*numBytes]) + e.p.y.z.y.SetBytes(m[11*numBytes : 12*numBytes]) + + return e, true +} + +// Pair calculates an Optimal Ate pairing. +func Pair(g1 *G1, g2 *G2) *GT { + return >{optimalAte(g2.p, g1.p, new(bnPool))} +} + +// bnPool implements a tiny cache of *big.Int objects that's used to reduce the +// number of allocations made during processing. +type bnPool struct { + bns []*big.Int + count int +} + +func (pool *bnPool) Get() *big.Int { + if pool == nil { + return new(big.Int) + } + + pool.count++ + l := len(pool.bns) + if l == 0 { + return new(big.Int) + } + + bn := pool.bns[l-1] + pool.bns = pool.bns[:l-1] + return bn +} + +func (pool *bnPool) Put(bn *big.Int) { + if pool == nil { + return + } + pool.bns = append(pool.bns, bn) + pool.count-- +} + +func (pool *bnPool) Count() int { + return pool.count +} diff --git a/vendor/golang.org/x/crypto/bn256/bn256_test.go b/vendor/golang.org/x/crypto/bn256/bn256_test.go new file mode 100644 index 0000000..1cec388 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/bn256_test.go @@ -0,0 +1,304 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "bytes" + "crypto/rand" + "math/big" + "testing" +) + +func TestGFp2Invert(t *testing.T) { + pool := new(bnPool) + + a := newGFp2(pool) + a.x.SetString("23423492374", 10) + a.y.SetString("12934872398472394827398470", 10) + + inv := newGFp2(pool) + inv.Invert(a, pool) + + b := newGFp2(pool).Mul(inv, a, pool) + if b.x.Int64() != 0 || b.y.Int64() != 1 { + t.Fatalf("bad result for a^-1*a: %s %s", b.x, b.y) + } + + a.Put(pool) + b.Put(pool) + inv.Put(pool) + + if c := pool.Count(); c > 0 { + t.Errorf("Pool count non-zero: %d\n", c) + } +} + +func isZero(n *big.Int) bool { + return new(big.Int).Mod(n, p).Int64() == 0 +} + +func isOne(n *big.Int) bool { + return new(big.Int).Mod(n, p).Int64() == 1 +} + +func TestGFp6Invert(t *testing.T) { + pool := new(bnPool) + + a := newGFp6(pool) + a.x.x.SetString("239487238491", 10) + a.x.y.SetString("2356249827341", 10) + a.y.x.SetString("082659782", 10) + a.y.y.SetString("182703523765", 10) + a.z.x.SetString("978236549263", 10) + a.z.y.SetString("64893242", 10) + + inv := newGFp6(pool) + inv.Invert(a, pool) + + b := newGFp6(pool).Mul(inv, a, pool) + if !isZero(b.x.x) || + !isZero(b.x.y) || + !isZero(b.y.x) || + !isZero(b.y.y) || + !isZero(b.z.x) || + !isOne(b.z.y) { + t.Fatalf("bad result for a^-1*a: %s", b) + } + + a.Put(pool) + b.Put(pool) + inv.Put(pool) + + if c := pool.Count(); c > 0 { + t.Errorf("Pool count non-zero: %d\n", c) + } +} + +func TestGFp12Invert(t *testing.T) { + pool := new(bnPool) + + a := newGFp12(pool) + a.x.x.x.SetString("239846234862342323958623", 10) + a.x.x.y.SetString("2359862352529835623", 10) + a.x.y.x.SetString("928836523", 10) + a.x.y.y.SetString("9856234", 10) + a.x.z.x.SetString("235635286", 10) + a.x.z.y.SetString("5628392833", 10) + a.y.x.x.SetString("252936598265329856238956532167968", 10) + a.y.x.y.SetString("23596239865236954178968", 10) + a.y.y.x.SetString("95421692834", 10) + a.y.y.y.SetString("236548", 10) + a.y.z.x.SetString("924523", 10) + a.y.z.y.SetString("12954623", 10) + + inv := newGFp12(pool) + inv.Invert(a, pool) + + b := newGFp12(pool).Mul(inv, a, pool) + if !isZero(b.x.x.x) || + !isZero(b.x.x.y) || + !isZero(b.x.y.x) || + !isZero(b.x.y.y) || + !isZero(b.x.z.x) || + !isZero(b.x.z.y) || + !isZero(b.y.x.x) || + !isZero(b.y.x.y) || + !isZero(b.y.y.x) || + !isZero(b.y.y.y) || + !isZero(b.y.z.x) || + !isOne(b.y.z.y) { + t.Fatalf("bad result for a^-1*a: %s", b) + } + + a.Put(pool) + b.Put(pool) + inv.Put(pool) + + if c := pool.Count(); c > 0 { + t.Errorf("Pool count non-zero: %d\n", c) + } +} + +func TestCurveImpl(t *testing.T) { + pool := new(bnPool) + + g := &curvePoint{ + pool.Get().SetInt64(1), + pool.Get().SetInt64(-2), + pool.Get().SetInt64(1), + pool.Get().SetInt64(0), + } + + x := pool.Get().SetInt64(32498273234) + X := newCurvePoint(pool).Mul(g, x, pool) + + y := pool.Get().SetInt64(98732423523) + Y := newCurvePoint(pool).Mul(g, y, pool) + + s1 := newCurvePoint(pool).Mul(X, y, pool).MakeAffine(pool) + s2 := newCurvePoint(pool).Mul(Y, x, pool).MakeAffine(pool) + + if s1.x.Cmp(s2.x) != 0 || + s2.x.Cmp(s1.x) != 0 { + t.Errorf("DH points don't match: (%s, %s) (%s, %s)", s1.x, s1.y, s2.x, s2.y) + } + + pool.Put(x) + X.Put(pool) + pool.Put(y) + Y.Put(pool) + s1.Put(pool) + s2.Put(pool) + g.Put(pool) + + if c := pool.Count(); c > 0 { + t.Errorf("Pool count non-zero: %d\n", c) + } +} + +func TestOrderG1(t *testing.T) { + g := new(G1).ScalarBaseMult(Order) + if !g.p.IsInfinity() { + t.Error("G1 has incorrect order") + } + + one := new(G1).ScalarBaseMult(new(big.Int).SetInt64(1)) + g.Add(g, one) + g.p.MakeAffine(nil) + if g.p.x.Cmp(one.p.x) != 0 || g.p.y.Cmp(one.p.y) != 0 { + t.Errorf("1+0 != 1 in G1") + } +} + +func TestOrderG2(t *testing.T) { + g := new(G2).ScalarBaseMult(Order) + if !g.p.IsInfinity() { + t.Error("G2 has incorrect order") + } + + one := new(G2).ScalarBaseMult(new(big.Int).SetInt64(1)) + g.Add(g, one) + g.p.MakeAffine(nil) + if g.p.x.x.Cmp(one.p.x.x) != 0 || + g.p.x.y.Cmp(one.p.x.y) != 0 || + g.p.y.x.Cmp(one.p.y.x) != 0 || + g.p.y.y.Cmp(one.p.y.y) != 0 { + t.Errorf("1+0 != 1 in G2") + } +} + +func TestOrderGT(t *testing.T) { + gt := Pair(&G1{curveGen}, &G2{twistGen}) + g := new(GT).ScalarMult(gt, Order) + if !g.p.IsOne() { + t.Error("GT has incorrect order") + } +} + +func TestBilinearity(t *testing.T) { + for i := 0; i < 2; i++ { + a, p1, _ := RandomG1(rand.Reader) + b, p2, _ := RandomG2(rand.Reader) + e1 := Pair(p1, p2) + + e2 := Pair(&G1{curveGen}, &G2{twistGen}) + e2.ScalarMult(e2, a) + e2.ScalarMult(e2, b) + + minusE2 := new(GT).Neg(e2) + e1.Add(e1, minusE2) + + if !e1.p.IsOne() { + t.Fatalf("bad pairing result: %s", e1) + } + } +} + +func TestG1Marshal(t *testing.T) { + g := new(G1).ScalarBaseMult(new(big.Int).SetInt64(1)) + form := g.Marshal() + _, ok := new(G1).Unmarshal(form) + if !ok { + t.Fatalf("failed to unmarshal") + } + + g.ScalarBaseMult(Order) + form = g.Marshal() + g2, ok := new(G1).Unmarshal(form) + if !ok { + t.Fatalf("failed to unmarshal ∞") + } + if !g2.p.IsInfinity() { + t.Fatalf("∞ unmarshaled incorrectly") + } +} + +func TestG2Marshal(t *testing.T) { + g := new(G2).ScalarBaseMult(new(big.Int).SetInt64(1)) + form := g.Marshal() + _, ok := new(G2).Unmarshal(form) + if !ok { + t.Fatalf("failed to unmarshal") + } + + g.ScalarBaseMult(Order) + form = g.Marshal() + g2, ok := new(G2).Unmarshal(form) + if !ok { + t.Fatalf("failed to unmarshal ∞") + } + if !g2.p.IsInfinity() { + t.Fatalf("∞ unmarshaled incorrectly") + } +} + +func TestG1Identity(t *testing.T) { + g := new(G1).ScalarBaseMult(new(big.Int).SetInt64(0)) + if !g.p.IsInfinity() { + t.Error("failure") + } +} + +func TestG2Identity(t *testing.T) { + g := new(G2).ScalarBaseMult(new(big.Int).SetInt64(0)) + if !g.p.IsInfinity() { + t.Error("failure") + } +} + +func TestTripartiteDiffieHellman(t *testing.T) { + a, _ := rand.Int(rand.Reader, Order) + b, _ := rand.Int(rand.Reader, Order) + c, _ := rand.Int(rand.Reader, Order) + + pa, _ := new(G1).Unmarshal(new(G1).ScalarBaseMult(a).Marshal()) + qa, _ := new(G2).Unmarshal(new(G2).ScalarBaseMult(a).Marshal()) + pb, _ := new(G1).Unmarshal(new(G1).ScalarBaseMult(b).Marshal()) + qb, _ := new(G2).Unmarshal(new(G2).ScalarBaseMult(b).Marshal()) + pc, _ := new(G1).Unmarshal(new(G1).ScalarBaseMult(c).Marshal()) + qc, _ := new(G2).Unmarshal(new(G2).ScalarBaseMult(c).Marshal()) + + k1 := Pair(pb, qc) + k1.ScalarMult(k1, a) + k1Bytes := k1.Marshal() + + k2 := Pair(pc, qa) + k2.ScalarMult(k2, b) + k2Bytes := k2.Marshal() + + k3 := Pair(pa, qb) + k3.ScalarMult(k3, c) + k3Bytes := k3.Marshal() + + if !bytes.Equal(k1Bytes, k2Bytes) || !bytes.Equal(k2Bytes, k3Bytes) { + t.Errorf("keys didn't agree") + } +} + +func BenchmarkPairing(b *testing.B) { + for i := 0; i < b.N; i++ { + Pair(&G1{curveGen}, &G2{twistGen}) + } +} diff --git a/vendor/golang.org/x/crypto/bn256/constants.go b/vendor/golang.org/x/crypto/bn256/constants.go new file mode 100644 index 0000000..1ccefc4 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/constants.go @@ -0,0 +1,44 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "math/big" +) + +func bigFromBase10(s string) *big.Int { + n, _ := new(big.Int).SetString(s, 10) + return n +} + +// u is the BN parameter that determines the prime: 1868033³. +var u = bigFromBase10("6518589491078791937") + +// p is a prime over which we form a basic field: 36u⁴+36u³+24u²+6u+1. +var p = bigFromBase10("65000549695646603732796438742359905742825358107623003571877145026864184071783") + +// Order is the number of elements in both G₁ and G₂: 36u⁴+36u³+18u²+6u+1. +var Order = bigFromBase10("65000549695646603732796438742359905742570406053903786389881062969044166799969") + +// xiToPMinus1Over6 is ξ^((p-1)/6) where ξ = i+3. +var xiToPMinus1Over6 = &gfP2{bigFromBase10("8669379979083712429711189836753509758585994370025260553045152614783263110636"), bigFromBase10("19998038925833620163537568958541907098007303196759855091367510456613536016040")} + +// xiToPMinus1Over3 is ξ^((p-1)/3) where ξ = i+3. +var xiToPMinus1Over3 = &gfP2{bigFromBase10("26098034838977895781559542626833399156321265654106457577426020397262786167059"), bigFromBase10("15931493369629630809226283458085260090334794394361662678240713231519278691715")} + +// xiToPMinus1Over2 is ξ^((p-1)/2) where ξ = i+3. +var xiToPMinus1Over2 = &gfP2{bigFromBase10("50997318142241922852281555961173165965672272825141804376761836765206060036244"), bigFromBase10("38665955945962842195025998234511023902832543644254935982879660597356748036009")} + +// xiToPSquaredMinus1Over3 is ξ^((p²-1)/3) where ξ = i+3. +var xiToPSquaredMinus1Over3 = bigFromBase10("65000549695646603727810655408050771481677621702948236658134783353303381437752") + +// xiTo2PSquaredMinus2Over3 is ξ^((2p²-2)/3) where ξ = i+3 (a cubic root of unity, mod p). +var xiTo2PSquaredMinus2Over3 = bigFromBase10("4985783334309134261147736404674766913742361673560802634030") + +// xiToPSquaredMinus1Over6 is ξ^((1p²-1)/6) where ξ = i+3 (a cubic root of -1, mod p). +var xiToPSquaredMinus1Over6 = bigFromBase10("65000549695646603727810655408050771481677621702948236658134783353303381437753") + +// xiTo2PMinus2Over3 is ξ^((2p-2)/3) where ξ = i+3. +var xiTo2PMinus2Over3 = &gfP2{bigFromBase10("19885131339612776214803633203834694332692106372356013117629940868870585019582"), bigFromBase10("21645619881471562101905880913352894726728173167203616652430647841922248593627")} diff --git a/vendor/golang.org/x/crypto/bn256/curve.go b/vendor/golang.org/x/crypto/bn256/curve.go new file mode 100644 index 0000000..55b7063 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/curve.go @@ -0,0 +1,278 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "math/big" +) + +// curvePoint implements the elliptic curve y²=x³+3. Points are kept in +// Jacobian form and t=z² when valid. G₁ is the set of points of this curve on +// GF(p). +type curvePoint struct { + x, y, z, t *big.Int +} + +var curveB = new(big.Int).SetInt64(3) + +// curveGen is the generator of G₁. +var curveGen = &curvePoint{ + new(big.Int).SetInt64(1), + new(big.Int).SetInt64(-2), + new(big.Int).SetInt64(1), + new(big.Int).SetInt64(1), +} + +func newCurvePoint(pool *bnPool) *curvePoint { + return &curvePoint{ + pool.Get(), + pool.Get(), + pool.Get(), + pool.Get(), + } +} + +func (c *curvePoint) String() string { + c.MakeAffine(new(bnPool)) + return "(" + c.x.String() + ", " + c.y.String() + ")" +} + +func (c *curvePoint) Put(pool *bnPool) { + pool.Put(c.x) + pool.Put(c.y) + pool.Put(c.z) + pool.Put(c.t) +} + +func (c *curvePoint) Set(a *curvePoint) { + c.x.Set(a.x) + c.y.Set(a.y) + c.z.Set(a.z) + c.t.Set(a.t) +} + +// IsOnCurve returns true iff c is on the curve where c must be in affine form. +func (c *curvePoint) IsOnCurve() bool { + yy := new(big.Int).Mul(c.y, c.y) + xxx := new(big.Int).Mul(c.x, c.x) + xxx.Mul(xxx, c.x) + yy.Sub(yy, xxx) + yy.Sub(yy, curveB) + if yy.Sign() < 0 || yy.Cmp(p) >= 0 { + yy.Mod(yy, p) + } + return yy.Sign() == 0 +} + +func (c *curvePoint) SetInfinity() { + c.z.SetInt64(0) +} + +func (c *curvePoint) IsInfinity() bool { + return c.z.Sign() == 0 +} + +func (c *curvePoint) Add(a, b *curvePoint, pool *bnPool) { + if a.IsInfinity() { + c.Set(b) + return + } + if b.IsInfinity() { + c.Set(a) + return + } + + // See http://hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian-0/addition/add-2007-bl.op3 + + // Normalize the points by replacing a = [x1:y1:z1] and b = [x2:y2:z2] + // by [u1:s1:z1·z2] and [u2:s2:z1·z2] + // where u1 = x1·z2², s1 = y1·z2³ and u1 = x2·z1², s2 = y2·z1³ + z1z1 := pool.Get().Mul(a.z, a.z) + z1z1.Mod(z1z1, p) + z2z2 := pool.Get().Mul(b.z, b.z) + z2z2.Mod(z2z2, p) + u1 := pool.Get().Mul(a.x, z2z2) + u1.Mod(u1, p) + u2 := pool.Get().Mul(b.x, z1z1) + u2.Mod(u2, p) + + t := pool.Get().Mul(b.z, z2z2) + t.Mod(t, p) + s1 := pool.Get().Mul(a.y, t) + s1.Mod(s1, p) + + t.Mul(a.z, z1z1) + t.Mod(t, p) + s2 := pool.Get().Mul(b.y, t) + s2.Mod(s2, p) + + // Compute x = (2h)²(s²-u1-u2) + // where s = (s2-s1)/(u2-u1) is the slope of the line through + // (u1,s1) and (u2,s2). The extra factor 2h = 2(u2-u1) comes from the value of z below. + // This is also: + // 4(s2-s1)² - 4h²(u1+u2) = 4(s2-s1)² - 4h³ - 4h²(2u1) + // = r² - j - 2v + // with the notations below. + h := pool.Get().Sub(u2, u1) + xEqual := h.Sign() == 0 + + t.Add(h, h) + // i = 4h² + i := pool.Get().Mul(t, t) + i.Mod(i, p) + // j = 4h³ + j := pool.Get().Mul(h, i) + j.Mod(j, p) + + t.Sub(s2, s1) + yEqual := t.Sign() == 0 + if xEqual && yEqual { + c.Double(a, pool) + return + } + r := pool.Get().Add(t, t) + + v := pool.Get().Mul(u1, i) + v.Mod(v, p) + + // t4 = 4(s2-s1)² + t4 := pool.Get().Mul(r, r) + t4.Mod(t4, p) + t.Add(v, v) + t6 := pool.Get().Sub(t4, j) + c.x.Sub(t6, t) + + // Set y = -(2h)³(s1 + s*(x/4h²-u1)) + // This is also + // y = - 2·s1·j - (s2-s1)(2x - 2i·u1) = r(v-x) - 2·s1·j + t.Sub(v, c.x) // t7 + t4.Mul(s1, j) // t8 + t4.Mod(t4, p) + t6.Add(t4, t4) // t9 + t4.Mul(r, t) // t10 + t4.Mod(t4, p) + c.y.Sub(t4, t6) + + // Set z = 2(u2-u1)·z1·z2 = 2h·z1·z2 + t.Add(a.z, b.z) // t11 + t4.Mul(t, t) // t12 + t4.Mod(t4, p) + t.Sub(t4, z1z1) // t13 + t4.Sub(t, z2z2) // t14 + c.z.Mul(t4, h) + c.z.Mod(c.z, p) + + pool.Put(z1z1) + pool.Put(z2z2) + pool.Put(u1) + pool.Put(u2) + pool.Put(t) + pool.Put(s1) + pool.Put(s2) + pool.Put(h) + pool.Put(i) + pool.Put(j) + pool.Put(r) + pool.Put(v) + pool.Put(t4) + pool.Put(t6) +} + +func (c *curvePoint) Double(a *curvePoint, pool *bnPool) { + // See http://hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian-0/doubling/dbl-2009-l.op3 + A := pool.Get().Mul(a.x, a.x) + A.Mod(A, p) + B := pool.Get().Mul(a.y, a.y) + B.Mod(B, p) + C := pool.Get().Mul(B, B) + C.Mod(C, p) + + t := pool.Get().Add(a.x, B) + t2 := pool.Get().Mul(t, t) + t2.Mod(t2, p) + t.Sub(t2, A) + t2.Sub(t, C) + d := pool.Get().Add(t2, t2) + t.Add(A, A) + e := pool.Get().Add(t, A) + f := pool.Get().Mul(e, e) + f.Mod(f, p) + + t.Add(d, d) + c.x.Sub(f, t) + + t.Add(C, C) + t2.Add(t, t) + t.Add(t2, t2) + c.y.Sub(d, c.x) + t2.Mul(e, c.y) + t2.Mod(t2, p) + c.y.Sub(t2, t) + + t.Mul(a.y, a.z) + t.Mod(t, p) + c.z.Add(t, t) + + pool.Put(A) + pool.Put(B) + pool.Put(C) + pool.Put(t) + pool.Put(t2) + pool.Put(d) + pool.Put(e) + pool.Put(f) +} + +func (c *curvePoint) Mul(a *curvePoint, scalar *big.Int, pool *bnPool) *curvePoint { + sum := newCurvePoint(pool) + sum.SetInfinity() + t := newCurvePoint(pool) + + for i := scalar.BitLen(); i >= 0; i-- { + t.Double(sum, pool) + if scalar.Bit(i) != 0 { + sum.Add(t, a, pool) + } else { + sum.Set(t) + } + } + + c.Set(sum) + sum.Put(pool) + t.Put(pool) + return c +} + +func (c *curvePoint) MakeAffine(pool *bnPool) *curvePoint { + if words := c.z.Bits(); len(words) == 1 && words[0] == 1 { + return c + } + + zInv := pool.Get().ModInverse(c.z, p) + t := pool.Get().Mul(c.y, zInv) + t.Mod(t, p) + zInv2 := pool.Get().Mul(zInv, zInv) + zInv2.Mod(zInv2, p) + c.y.Mul(t, zInv2) + c.y.Mod(c.y, p) + t.Mul(c.x, zInv2) + t.Mod(t, p) + c.x.Set(t) + c.z.SetInt64(1) + c.t.SetInt64(1) + + pool.Put(zInv) + pool.Put(t) + pool.Put(zInv2) + + return c +} + +func (c *curvePoint) Negative(a *curvePoint) { + c.x.Set(a.x) + c.y.Neg(a.y) + c.z.Set(a.z) + c.t.SetInt64(0) +} diff --git a/vendor/golang.org/x/crypto/bn256/example_test.go b/vendor/golang.org/x/crypto/bn256/example_test.go new file mode 100644 index 0000000..b2d1980 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/example_test.go @@ -0,0 +1,43 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "crypto/rand" +) + +func ExamplePair() { + // This implements the tripartite Diffie-Hellman algorithm from "A One + // Round Protocol for Tripartite Diffie-Hellman", A. Joux. + // http://www.springerlink.com/content/cddc57yyva0hburb/fulltext.pdf + + // Each of three parties, a, b and c, generate a private value. + a, _ := rand.Int(rand.Reader, Order) + b, _ := rand.Int(rand.Reader, Order) + c, _ := rand.Int(rand.Reader, Order) + + // Then each party calculates g₁ and g₂ times their private value. + pa := new(G1).ScalarBaseMult(a) + qa := new(G2).ScalarBaseMult(a) + + pb := new(G1).ScalarBaseMult(b) + qb := new(G2).ScalarBaseMult(b) + + pc := new(G1).ScalarBaseMult(c) + qc := new(G2).ScalarBaseMult(c) + + // Now each party exchanges its public values with the other two and + // all parties can calculate the shared key. + k1 := Pair(pb, qc) + k1.ScalarMult(k1, a) + + k2 := Pair(pc, qa) + k2.ScalarMult(k2, b) + + k3 := Pair(pa, qb) + k3.ScalarMult(k3, c) + + // k1, k2 and k3 will all be equal. +} diff --git a/vendor/golang.org/x/crypto/bn256/gfp12.go b/vendor/golang.org/x/crypto/bn256/gfp12.go new file mode 100644 index 0000000..f084edd --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/gfp12.go @@ -0,0 +1,200 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +// For details of the algorithms used, see "Multiplication and Squaring on +// Pairing-Friendly Fields, Devegili et al. +// http://eprint.iacr.org/2006/471.pdf. + +import ( + "math/big" +) + +// gfP12 implements the field of size p¹² as a quadratic extension of gfP6 +// where ω²=τ. +type gfP12 struct { + x, y *gfP6 // value is xω + y +} + +func newGFp12(pool *bnPool) *gfP12 { + return &gfP12{newGFp6(pool), newGFp6(pool)} +} + +func (e *gfP12) String() string { + return "(" + e.x.String() + "," + e.y.String() + ")" +} + +func (e *gfP12) Put(pool *bnPool) { + e.x.Put(pool) + e.y.Put(pool) +} + +func (e *gfP12) Set(a *gfP12) *gfP12 { + e.x.Set(a.x) + e.y.Set(a.y) + return e +} + +func (e *gfP12) SetZero() *gfP12 { + e.x.SetZero() + e.y.SetZero() + return e +} + +func (e *gfP12) SetOne() *gfP12 { + e.x.SetZero() + e.y.SetOne() + return e +} + +func (e *gfP12) Minimal() { + e.x.Minimal() + e.y.Minimal() +} + +func (e *gfP12) IsZero() bool { + e.Minimal() + return e.x.IsZero() && e.y.IsZero() +} + +func (e *gfP12) IsOne() bool { + e.Minimal() + return e.x.IsZero() && e.y.IsOne() +} + +func (e *gfP12) Conjugate(a *gfP12) *gfP12 { + e.x.Negative(a.x) + e.y.Set(a.y) + return a +} + +func (e *gfP12) Negative(a *gfP12) *gfP12 { + e.x.Negative(a.x) + e.y.Negative(a.y) + return e +} + +// Frobenius computes (xω+y)^p = x^p ω·ξ^((p-1)/6) + y^p +func (e *gfP12) Frobenius(a *gfP12, pool *bnPool) *gfP12 { + e.x.Frobenius(a.x, pool) + e.y.Frobenius(a.y, pool) + e.x.MulScalar(e.x, xiToPMinus1Over6, pool) + return e +} + +// FrobeniusP2 computes (xω+y)^p² = x^p² ω·ξ^((p²-1)/6) + y^p² +func (e *gfP12) FrobeniusP2(a *gfP12, pool *bnPool) *gfP12 { + e.x.FrobeniusP2(a.x) + e.x.MulGFP(e.x, xiToPSquaredMinus1Over6) + e.y.FrobeniusP2(a.y) + return e +} + +func (e *gfP12) Add(a, b *gfP12) *gfP12 { + e.x.Add(a.x, b.x) + e.y.Add(a.y, b.y) + return e +} + +func (e *gfP12) Sub(a, b *gfP12) *gfP12 { + e.x.Sub(a.x, b.x) + e.y.Sub(a.y, b.y) + return e +} + +func (e *gfP12) Mul(a, b *gfP12, pool *bnPool) *gfP12 { + tx := newGFp6(pool) + tx.Mul(a.x, b.y, pool) + t := newGFp6(pool) + t.Mul(b.x, a.y, pool) + tx.Add(tx, t) + + ty := newGFp6(pool) + ty.Mul(a.y, b.y, pool) + t.Mul(a.x, b.x, pool) + t.MulTau(t, pool) + e.y.Add(ty, t) + e.x.Set(tx) + + tx.Put(pool) + ty.Put(pool) + t.Put(pool) + return e +} + +func (e *gfP12) MulScalar(a *gfP12, b *gfP6, pool *bnPool) *gfP12 { + e.x.Mul(e.x, b, pool) + e.y.Mul(e.y, b, pool) + return e +} + +func (c *gfP12) Exp(a *gfP12, power *big.Int, pool *bnPool) *gfP12 { + sum := newGFp12(pool) + sum.SetOne() + t := newGFp12(pool) + + for i := power.BitLen() - 1; i >= 0; i-- { + t.Square(sum, pool) + if power.Bit(i) != 0 { + sum.Mul(t, a, pool) + } else { + sum.Set(t) + } + } + + c.Set(sum) + + sum.Put(pool) + t.Put(pool) + + return c +} + +func (e *gfP12) Square(a *gfP12, pool *bnPool) *gfP12 { + // Complex squaring algorithm + v0 := newGFp6(pool) + v0.Mul(a.x, a.y, pool) + + t := newGFp6(pool) + t.MulTau(a.x, pool) + t.Add(a.y, t) + ty := newGFp6(pool) + ty.Add(a.x, a.y) + ty.Mul(ty, t, pool) + ty.Sub(ty, v0) + t.MulTau(v0, pool) + ty.Sub(ty, t) + + e.y.Set(ty) + e.x.Double(v0) + + v0.Put(pool) + t.Put(pool) + ty.Put(pool) + + return e +} + +func (e *gfP12) Invert(a *gfP12, pool *bnPool) *gfP12 { + // See "Implementing cryptographic pairings", M. Scott, section 3.2. + // ftp://136.206.11.249/pub/crypto/pairings.pdf + t1 := newGFp6(pool) + t2 := newGFp6(pool) + + t1.Square(a.x, pool) + t2.Square(a.y, pool) + t1.MulTau(t1, pool) + t1.Sub(t2, t1) + t2.Invert(t1, pool) + + e.x.Negative(a.x) + e.y.Set(a.y) + e.MulScalar(e, t2, pool) + + t1.Put(pool) + t2.Put(pool) + + return e +} diff --git a/vendor/golang.org/x/crypto/bn256/gfp2.go b/vendor/golang.org/x/crypto/bn256/gfp2.go new file mode 100644 index 0000000..97f3f1f --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/gfp2.go @@ -0,0 +1,219 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +// For details of the algorithms used, see "Multiplication and Squaring on +// Pairing-Friendly Fields, Devegili et al. +// http://eprint.iacr.org/2006/471.pdf. + +import ( + "math/big" +) + +// gfP2 implements a field of size p² as a quadratic extension of the base +// field where i²=-1. +type gfP2 struct { + x, y *big.Int // value is xi+y. +} + +func newGFp2(pool *bnPool) *gfP2 { + return &gfP2{pool.Get(), pool.Get()} +} + +func (e *gfP2) String() string { + x := new(big.Int).Mod(e.x, p) + y := new(big.Int).Mod(e.y, p) + return "(" + x.String() + "," + y.String() + ")" +} + +func (e *gfP2) Put(pool *bnPool) { + pool.Put(e.x) + pool.Put(e.y) +} + +func (e *gfP2) Set(a *gfP2) *gfP2 { + e.x.Set(a.x) + e.y.Set(a.y) + return e +} + +func (e *gfP2) SetZero() *gfP2 { + e.x.SetInt64(0) + e.y.SetInt64(0) + return e +} + +func (e *gfP2) SetOne() *gfP2 { + e.x.SetInt64(0) + e.y.SetInt64(1) + return e +} + +func (e *gfP2) Minimal() { + if e.x.Sign() < 0 || e.x.Cmp(p) >= 0 { + e.x.Mod(e.x, p) + } + if e.y.Sign() < 0 || e.y.Cmp(p) >= 0 { + e.y.Mod(e.y, p) + } +} + +func (e *gfP2) IsZero() bool { + return e.x.Sign() == 0 && e.y.Sign() == 0 +} + +func (e *gfP2) IsOne() bool { + if e.x.Sign() != 0 { + return false + } + words := e.y.Bits() + return len(words) == 1 && words[0] == 1 +} + +func (e *gfP2) Conjugate(a *gfP2) *gfP2 { + e.y.Set(a.y) + e.x.Neg(a.x) + return e +} + +func (e *gfP2) Negative(a *gfP2) *gfP2 { + e.x.Neg(a.x) + e.y.Neg(a.y) + return e +} + +func (e *gfP2) Add(a, b *gfP2) *gfP2 { + e.x.Add(a.x, b.x) + e.y.Add(a.y, b.y) + return e +} + +func (e *gfP2) Sub(a, b *gfP2) *gfP2 { + e.x.Sub(a.x, b.x) + e.y.Sub(a.y, b.y) + return e +} + +func (e *gfP2) Double(a *gfP2) *gfP2 { + e.x.Lsh(a.x, 1) + e.y.Lsh(a.y, 1) + return e +} + +func (c *gfP2) Exp(a *gfP2, power *big.Int, pool *bnPool) *gfP2 { + sum := newGFp2(pool) + sum.SetOne() + t := newGFp2(pool) + + for i := power.BitLen() - 1; i >= 0; i-- { + t.Square(sum, pool) + if power.Bit(i) != 0 { + sum.Mul(t, a, pool) + } else { + sum.Set(t) + } + } + + c.Set(sum) + + sum.Put(pool) + t.Put(pool) + + return c +} + +// See "Multiplication and Squaring in Pairing-Friendly Fields", +// http://eprint.iacr.org/2006/471.pdf +func (e *gfP2) Mul(a, b *gfP2, pool *bnPool) *gfP2 { + tx := pool.Get().Mul(a.x, b.y) + t := pool.Get().Mul(b.x, a.y) + tx.Add(tx, t) + tx.Mod(tx, p) + + ty := pool.Get().Mul(a.y, b.y) + t.Mul(a.x, b.x) + ty.Sub(ty, t) + e.y.Mod(ty, p) + e.x.Set(tx) + + pool.Put(tx) + pool.Put(ty) + pool.Put(t) + + return e +} + +func (e *gfP2) MulScalar(a *gfP2, b *big.Int) *gfP2 { + e.x.Mul(a.x, b) + e.y.Mul(a.y, b) + return e +} + +// MulXi sets e=ξa where ξ=i+3 and then returns e. +func (e *gfP2) MulXi(a *gfP2, pool *bnPool) *gfP2 { + // (xi+y)(i+3) = (3x+y)i+(3y-x) + tx := pool.Get().Lsh(a.x, 1) + tx.Add(tx, a.x) + tx.Add(tx, a.y) + + ty := pool.Get().Lsh(a.y, 1) + ty.Add(ty, a.y) + ty.Sub(ty, a.x) + + e.x.Set(tx) + e.y.Set(ty) + + pool.Put(tx) + pool.Put(ty) + + return e +} + +func (e *gfP2) Square(a *gfP2, pool *bnPool) *gfP2 { + // Complex squaring algorithm: + // (xi+b)² = (x+y)(y-x) + 2*i*x*y + t1 := pool.Get().Sub(a.y, a.x) + t2 := pool.Get().Add(a.x, a.y) + ty := pool.Get().Mul(t1, t2) + ty.Mod(ty, p) + + t1.Mul(a.x, a.y) + t1.Lsh(t1, 1) + + e.x.Mod(t1, p) + e.y.Set(ty) + + pool.Put(t1) + pool.Put(t2) + pool.Put(ty) + + return e +} + +func (e *gfP2) Invert(a *gfP2, pool *bnPool) *gfP2 { + // See "Implementing cryptographic pairings", M. Scott, section 3.2. + // ftp://136.206.11.249/pub/crypto/pairings.pdf + t := pool.Get() + t.Mul(a.y, a.y) + t2 := pool.Get() + t2.Mul(a.x, a.x) + t.Add(t, t2) + + inv := pool.Get() + inv.ModInverse(t, p) + + e.x.Neg(a.x) + e.x.Mul(e.x, inv) + e.x.Mod(e.x, p) + + e.y.Mul(a.y, inv) + e.y.Mod(e.y, p) + + pool.Put(t) + pool.Put(t2) + pool.Put(inv) + + return e +} diff --git a/vendor/golang.org/x/crypto/bn256/gfp6.go b/vendor/golang.org/x/crypto/bn256/gfp6.go new file mode 100644 index 0000000..f98ae78 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/gfp6.go @@ -0,0 +1,296 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +// For details of the algorithms used, see "Multiplication and Squaring on +// Pairing-Friendly Fields, Devegili et al. +// http://eprint.iacr.org/2006/471.pdf. + +import ( + "math/big" +) + +// gfP6 implements the field of size p⁶ as a cubic extension of gfP2 where τ³=ξ +// and ξ=i+3. +type gfP6 struct { + x, y, z *gfP2 // value is xτ² + yτ + z +} + +func newGFp6(pool *bnPool) *gfP6 { + return &gfP6{newGFp2(pool), newGFp2(pool), newGFp2(pool)} +} + +func (e *gfP6) String() string { + return "(" + e.x.String() + "," + e.y.String() + "," + e.z.String() + ")" +} + +func (e *gfP6) Put(pool *bnPool) { + e.x.Put(pool) + e.y.Put(pool) + e.z.Put(pool) +} + +func (e *gfP6) Set(a *gfP6) *gfP6 { + e.x.Set(a.x) + e.y.Set(a.y) + e.z.Set(a.z) + return e +} + +func (e *gfP6) SetZero() *gfP6 { + e.x.SetZero() + e.y.SetZero() + e.z.SetZero() + return e +} + +func (e *gfP6) SetOne() *gfP6 { + e.x.SetZero() + e.y.SetZero() + e.z.SetOne() + return e +} + +func (e *gfP6) Minimal() { + e.x.Minimal() + e.y.Minimal() + e.z.Minimal() +} + +func (e *gfP6) IsZero() bool { + return e.x.IsZero() && e.y.IsZero() && e.z.IsZero() +} + +func (e *gfP6) IsOne() bool { + return e.x.IsZero() && e.y.IsZero() && e.z.IsOne() +} + +func (e *gfP6) Negative(a *gfP6) *gfP6 { + e.x.Negative(a.x) + e.y.Negative(a.y) + e.z.Negative(a.z) + return e +} + +func (e *gfP6) Frobenius(a *gfP6, pool *bnPool) *gfP6 { + e.x.Conjugate(a.x) + e.y.Conjugate(a.y) + e.z.Conjugate(a.z) + + e.x.Mul(e.x, xiTo2PMinus2Over3, pool) + e.y.Mul(e.y, xiToPMinus1Over3, pool) + return e +} + +// FrobeniusP2 computes (xτ²+yτ+z)^(p²) = xτ^(2p²) + yτ^(p²) + z +func (e *gfP6) FrobeniusP2(a *gfP6) *gfP6 { + // τ^(2p²) = τ²τ^(2p²-2) = τ²ξ^((2p²-2)/3) + e.x.MulScalar(a.x, xiTo2PSquaredMinus2Over3) + // τ^(p²) = ττ^(p²-1) = τξ^((p²-1)/3) + e.y.MulScalar(a.y, xiToPSquaredMinus1Over3) + e.z.Set(a.z) + return e +} + +func (e *gfP6) Add(a, b *gfP6) *gfP6 { + e.x.Add(a.x, b.x) + e.y.Add(a.y, b.y) + e.z.Add(a.z, b.z) + return e +} + +func (e *gfP6) Sub(a, b *gfP6) *gfP6 { + e.x.Sub(a.x, b.x) + e.y.Sub(a.y, b.y) + e.z.Sub(a.z, b.z) + return e +} + +func (e *gfP6) Double(a *gfP6) *gfP6 { + e.x.Double(a.x) + e.y.Double(a.y) + e.z.Double(a.z) + return e +} + +func (e *gfP6) Mul(a, b *gfP6, pool *bnPool) *gfP6 { + // "Multiplication and Squaring on Pairing-Friendly Fields" + // Section 4, Karatsuba method. + // http://eprint.iacr.org/2006/471.pdf + + v0 := newGFp2(pool) + v0.Mul(a.z, b.z, pool) + v1 := newGFp2(pool) + v1.Mul(a.y, b.y, pool) + v2 := newGFp2(pool) + v2.Mul(a.x, b.x, pool) + + t0 := newGFp2(pool) + t0.Add(a.x, a.y) + t1 := newGFp2(pool) + t1.Add(b.x, b.y) + tz := newGFp2(pool) + tz.Mul(t0, t1, pool) + + tz.Sub(tz, v1) + tz.Sub(tz, v2) + tz.MulXi(tz, pool) + tz.Add(tz, v0) + + t0.Add(a.y, a.z) + t1.Add(b.y, b.z) + ty := newGFp2(pool) + ty.Mul(t0, t1, pool) + ty.Sub(ty, v0) + ty.Sub(ty, v1) + t0.MulXi(v2, pool) + ty.Add(ty, t0) + + t0.Add(a.x, a.z) + t1.Add(b.x, b.z) + tx := newGFp2(pool) + tx.Mul(t0, t1, pool) + tx.Sub(tx, v0) + tx.Add(tx, v1) + tx.Sub(tx, v2) + + e.x.Set(tx) + e.y.Set(ty) + e.z.Set(tz) + + t0.Put(pool) + t1.Put(pool) + tx.Put(pool) + ty.Put(pool) + tz.Put(pool) + v0.Put(pool) + v1.Put(pool) + v2.Put(pool) + return e +} + +func (e *gfP6) MulScalar(a *gfP6, b *gfP2, pool *bnPool) *gfP6 { + e.x.Mul(a.x, b, pool) + e.y.Mul(a.y, b, pool) + e.z.Mul(a.z, b, pool) + return e +} + +func (e *gfP6) MulGFP(a *gfP6, b *big.Int) *gfP6 { + e.x.MulScalar(a.x, b) + e.y.MulScalar(a.y, b) + e.z.MulScalar(a.z, b) + return e +} + +// MulTau computes τ·(aτ²+bτ+c) = bτ²+cτ+aξ +func (e *gfP6) MulTau(a *gfP6, pool *bnPool) { + tz := newGFp2(pool) + tz.MulXi(a.x, pool) + ty := newGFp2(pool) + ty.Set(a.y) + e.y.Set(a.z) + e.x.Set(ty) + e.z.Set(tz) + tz.Put(pool) + ty.Put(pool) +} + +func (e *gfP6) Square(a *gfP6, pool *bnPool) *gfP6 { + v0 := newGFp2(pool).Square(a.z, pool) + v1 := newGFp2(pool).Square(a.y, pool) + v2 := newGFp2(pool).Square(a.x, pool) + + c0 := newGFp2(pool).Add(a.x, a.y) + c0.Square(c0, pool) + c0.Sub(c0, v1) + c0.Sub(c0, v2) + c0.MulXi(c0, pool) + c0.Add(c0, v0) + + c1 := newGFp2(pool).Add(a.y, a.z) + c1.Square(c1, pool) + c1.Sub(c1, v0) + c1.Sub(c1, v1) + xiV2 := newGFp2(pool).MulXi(v2, pool) + c1.Add(c1, xiV2) + + c2 := newGFp2(pool).Add(a.x, a.z) + c2.Square(c2, pool) + c2.Sub(c2, v0) + c2.Add(c2, v1) + c2.Sub(c2, v2) + + e.x.Set(c2) + e.y.Set(c1) + e.z.Set(c0) + + v0.Put(pool) + v1.Put(pool) + v2.Put(pool) + c0.Put(pool) + c1.Put(pool) + c2.Put(pool) + xiV2.Put(pool) + + return e +} + +func (e *gfP6) Invert(a *gfP6, pool *bnPool) *gfP6 { + // See "Implementing cryptographic pairings", M. Scott, section 3.2. + // ftp://136.206.11.249/pub/crypto/pairings.pdf + + // Here we can give a short explanation of how it works: let j be a cubic root of + // unity in GF(p²) so that 1+j+j²=0. + // Then (xτ² + yτ + z)(xj²τ² + yjτ + z)(xjτ² + yj²τ + z) + // = (xτ² + yτ + z)(Cτ²+Bτ+A) + // = (x³ξ²+y³ξ+z³-3ξxyz) = F is an element of the base field (the norm). + // + // On the other hand (xj²τ² + yjτ + z)(xjτ² + yj²τ + z) + // = τ²(y²-ξxz) + τ(ξx²-yz) + (z²-ξxy) + // + // So that's why A = (z²-ξxy), B = (ξx²-yz), C = (y²-ξxz) + t1 := newGFp2(pool) + + A := newGFp2(pool) + A.Square(a.z, pool) + t1.Mul(a.x, a.y, pool) + t1.MulXi(t1, pool) + A.Sub(A, t1) + + B := newGFp2(pool) + B.Square(a.x, pool) + B.MulXi(B, pool) + t1.Mul(a.y, a.z, pool) + B.Sub(B, t1) + + C := newGFp2(pool) + C.Square(a.y, pool) + t1.Mul(a.x, a.z, pool) + C.Sub(C, t1) + + F := newGFp2(pool) + F.Mul(C, a.y, pool) + F.MulXi(F, pool) + t1.Mul(A, a.z, pool) + F.Add(F, t1) + t1.Mul(B, a.x, pool) + t1.MulXi(t1, pool) + F.Add(F, t1) + + F.Invert(F, pool) + + e.x.Mul(C, F, pool) + e.y.Mul(B, F, pool) + e.z.Mul(A, F, pool) + + t1.Put(pool) + A.Put(pool) + B.Put(pool) + C.Put(pool) + F.Put(pool) + + return e +} diff --git a/vendor/golang.org/x/crypto/bn256/optate.go b/vendor/golang.org/x/crypto/bn256/optate.go new file mode 100644 index 0000000..7ae0746 --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/optate.go @@ -0,0 +1,395 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +func lineFunctionAdd(r, p *twistPoint, q *curvePoint, r2 *gfP2, pool *bnPool) (a, b, c *gfP2, rOut *twistPoint) { + // See the mixed addition algorithm from "Faster Computation of the + // Tate Pairing", http://arxiv.org/pdf/0904.0854v3.pdf + + B := newGFp2(pool).Mul(p.x, r.t, pool) + + D := newGFp2(pool).Add(p.y, r.z) + D.Square(D, pool) + D.Sub(D, r2) + D.Sub(D, r.t) + D.Mul(D, r.t, pool) + + H := newGFp2(pool).Sub(B, r.x) + I := newGFp2(pool).Square(H, pool) + + E := newGFp2(pool).Add(I, I) + E.Add(E, E) + + J := newGFp2(pool).Mul(H, E, pool) + + L1 := newGFp2(pool).Sub(D, r.y) + L1.Sub(L1, r.y) + + V := newGFp2(pool).Mul(r.x, E, pool) + + rOut = newTwistPoint(pool) + rOut.x.Square(L1, pool) + rOut.x.Sub(rOut.x, J) + rOut.x.Sub(rOut.x, V) + rOut.x.Sub(rOut.x, V) + + rOut.z.Add(r.z, H) + rOut.z.Square(rOut.z, pool) + rOut.z.Sub(rOut.z, r.t) + rOut.z.Sub(rOut.z, I) + + t := newGFp2(pool).Sub(V, rOut.x) + t.Mul(t, L1, pool) + t2 := newGFp2(pool).Mul(r.y, J, pool) + t2.Add(t2, t2) + rOut.y.Sub(t, t2) + + rOut.t.Square(rOut.z, pool) + + t.Add(p.y, rOut.z) + t.Square(t, pool) + t.Sub(t, r2) + t.Sub(t, rOut.t) + + t2.Mul(L1, p.x, pool) + t2.Add(t2, t2) + a = newGFp2(pool) + a.Sub(t2, t) + + c = newGFp2(pool) + c.MulScalar(rOut.z, q.y) + c.Add(c, c) + + b = newGFp2(pool) + b.SetZero() + b.Sub(b, L1) + b.MulScalar(b, q.x) + b.Add(b, b) + + B.Put(pool) + D.Put(pool) + H.Put(pool) + I.Put(pool) + E.Put(pool) + J.Put(pool) + L1.Put(pool) + V.Put(pool) + t.Put(pool) + t2.Put(pool) + + return +} + +func lineFunctionDouble(r *twistPoint, q *curvePoint, pool *bnPool) (a, b, c *gfP2, rOut *twistPoint) { + // See the doubling algorithm for a=0 from "Faster Computation of the + // Tate Pairing", http://arxiv.org/pdf/0904.0854v3.pdf + + A := newGFp2(pool).Square(r.x, pool) + B := newGFp2(pool).Square(r.y, pool) + C := newGFp2(pool).Square(B, pool) + + D := newGFp2(pool).Add(r.x, B) + D.Square(D, pool) + D.Sub(D, A) + D.Sub(D, C) + D.Add(D, D) + + E := newGFp2(pool).Add(A, A) + E.Add(E, A) + + G := newGFp2(pool).Square(E, pool) + + rOut = newTwistPoint(pool) + rOut.x.Sub(G, D) + rOut.x.Sub(rOut.x, D) + + rOut.z.Add(r.y, r.z) + rOut.z.Square(rOut.z, pool) + rOut.z.Sub(rOut.z, B) + rOut.z.Sub(rOut.z, r.t) + + rOut.y.Sub(D, rOut.x) + rOut.y.Mul(rOut.y, E, pool) + t := newGFp2(pool).Add(C, C) + t.Add(t, t) + t.Add(t, t) + rOut.y.Sub(rOut.y, t) + + rOut.t.Square(rOut.z, pool) + + t.Mul(E, r.t, pool) + t.Add(t, t) + b = newGFp2(pool) + b.SetZero() + b.Sub(b, t) + b.MulScalar(b, q.x) + + a = newGFp2(pool) + a.Add(r.x, E) + a.Square(a, pool) + a.Sub(a, A) + a.Sub(a, G) + t.Add(B, B) + t.Add(t, t) + a.Sub(a, t) + + c = newGFp2(pool) + c.Mul(rOut.z, r.t, pool) + c.Add(c, c) + c.MulScalar(c, q.y) + + A.Put(pool) + B.Put(pool) + C.Put(pool) + D.Put(pool) + E.Put(pool) + G.Put(pool) + t.Put(pool) + + return +} + +func mulLine(ret *gfP12, a, b, c *gfP2, pool *bnPool) { + a2 := newGFp6(pool) + a2.x.SetZero() + a2.y.Set(a) + a2.z.Set(b) + a2.Mul(a2, ret.x, pool) + t3 := newGFp6(pool).MulScalar(ret.y, c, pool) + + t := newGFp2(pool) + t.Add(b, c) + t2 := newGFp6(pool) + t2.x.SetZero() + t2.y.Set(a) + t2.z.Set(t) + ret.x.Add(ret.x, ret.y) + + ret.y.Set(t3) + + ret.x.Mul(ret.x, t2, pool) + ret.x.Sub(ret.x, a2) + ret.x.Sub(ret.x, ret.y) + a2.MulTau(a2, pool) + ret.y.Add(ret.y, a2) + + a2.Put(pool) + t3.Put(pool) + t2.Put(pool) + t.Put(pool) +} + +// sixuPlus2NAF is 6u+2 in non-adjacent form. +var sixuPlus2NAF = []int8{0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 1, 0, -1, 0, 0, 0, -1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0, 1} + +// miller implements the Miller loop for calculating the Optimal Ate pairing. +// See algorithm 1 from http://cryptojedi.org/papers/dclxvi-20100714.pdf +func miller(q *twistPoint, p *curvePoint, pool *bnPool) *gfP12 { + ret := newGFp12(pool) + ret.SetOne() + + aAffine := newTwistPoint(pool) + aAffine.Set(q) + aAffine.MakeAffine(pool) + + bAffine := newCurvePoint(pool) + bAffine.Set(p) + bAffine.MakeAffine(pool) + + minusA := newTwistPoint(pool) + minusA.Negative(aAffine, pool) + + r := newTwistPoint(pool) + r.Set(aAffine) + + r2 := newGFp2(pool) + r2.Square(aAffine.y, pool) + + for i := len(sixuPlus2NAF) - 1; i > 0; i-- { + a, b, c, newR := lineFunctionDouble(r, bAffine, pool) + if i != len(sixuPlus2NAF)-1 { + ret.Square(ret, pool) + } + + mulLine(ret, a, b, c, pool) + a.Put(pool) + b.Put(pool) + c.Put(pool) + r.Put(pool) + r = newR + + switch sixuPlus2NAF[i-1] { + case 1: + a, b, c, newR = lineFunctionAdd(r, aAffine, bAffine, r2, pool) + case -1: + a, b, c, newR = lineFunctionAdd(r, minusA, bAffine, r2, pool) + default: + continue + } + + mulLine(ret, a, b, c, pool) + a.Put(pool) + b.Put(pool) + c.Put(pool) + r.Put(pool) + r = newR + } + + // In order to calculate Q1 we have to convert q from the sextic twist + // to the full GF(p^12) group, apply the Frobenius there, and convert + // back. + // + // The twist isomorphism is (x', y') -> (xω², yω³). If we consider just + // x for a moment, then after applying the Frobenius, we have x̄ω^(2p) + // where x̄ is the conjugate of x. If we are going to apply the inverse + // isomorphism we need a value with a single coefficient of ω² so we + // rewrite this as x̄ω^(2p-2)ω². ξ⁶ = ω and, due to the construction of + // p, 2p-2 is a multiple of six. Therefore we can rewrite as + // x̄ξ^((p-1)/3)ω² and applying the inverse isomorphism eliminates the + // ω². + // + // A similar argument can be made for the y value. + + q1 := newTwistPoint(pool) + q1.x.Conjugate(aAffine.x) + q1.x.Mul(q1.x, xiToPMinus1Over3, pool) + q1.y.Conjugate(aAffine.y) + q1.y.Mul(q1.y, xiToPMinus1Over2, pool) + q1.z.SetOne() + q1.t.SetOne() + + // For Q2 we are applying the p² Frobenius. The two conjugations cancel + // out and we are left only with the factors from the isomorphism. In + // the case of x, we end up with a pure number which is why + // xiToPSquaredMinus1Over3 is ∈ GF(p). With y we get a factor of -1. We + // ignore this to end up with -Q2. + + minusQ2 := newTwistPoint(pool) + minusQ2.x.MulScalar(aAffine.x, xiToPSquaredMinus1Over3) + minusQ2.y.Set(aAffine.y) + minusQ2.z.SetOne() + minusQ2.t.SetOne() + + r2.Square(q1.y, pool) + a, b, c, newR := lineFunctionAdd(r, q1, bAffine, r2, pool) + mulLine(ret, a, b, c, pool) + a.Put(pool) + b.Put(pool) + c.Put(pool) + r.Put(pool) + r = newR + + r2.Square(minusQ2.y, pool) + a, b, c, newR = lineFunctionAdd(r, minusQ2, bAffine, r2, pool) + mulLine(ret, a, b, c, pool) + a.Put(pool) + b.Put(pool) + c.Put(pool) + r.Put(pool) + r = newR + + aAffine.Put(pool) + bAffine.Put(pool) + minusA.Put(pool) + r.Put(pool) + r2.Put(pool) + + return ret +} + +// finalExponentiation computes the (p¹²-1)/Order-th power of an element of +// GF(p¹²) to obtain an element of GT (steps 13-15 of algorithm 1 from +// http://cryptojedi.org/papers/dclxvi-20100714.pdf) +func finalExponentiation(in *gfP12, pool *bnPool) *gfP12 { + t1 := newGFp12(pool) + + // This is the p^6-Frobenius + t1.x.Negative(in.x) + t1.y.Set(in.y) + + inv := newGFp12(pool) + inv.Invert(in, pool) + t1.Mul(t1, inv, pool) + + t2 := newGFp12(pool).FrobeniusP2(t1, pool) + t1.Mul(t1, t2, pool) + + fp := newGFp12(pool).Frobenius(t1, pool) + fp2 := newGFp12(pool).FrobeniusP2(t1, pool) + fp3 := newGFp12(pool).Frobenius(fp2, pool) + + fu, fu2, fu3 := newGFp12(pool), newGFp12(pool), newGFp12(pool) + fu.Exp(t1, u, pool) + fu2.Exp(fu, u, pool) + fu3.Exp(fu2, u, pool) + + y3 := newGFp12(pool).Frobenius(fu, pool) + fu2p := newGFp12(pool).Frobenius(fu2, pool) + fu3p := newGFp12(pool).Frobenius(fu3, pool) + y2 := newGFp12(pool).FrobeniusP2(fu2, pool) + + y0 := newGFp12(pool) + y0.Mul(fp, fp2, pool) + y0.Mul(y0, fp3, pool) + + y1, y4, y5 := newGFp12(pool), newGFp12(pool), newGFp12(pool) + y1.Conjugate(t1) + y5.Conjugate(fu2) + y3.Conjugate(y3) + y4.Mul(fu, fu2p, pool) + y4.Conjugate(y4) + + y6 := newGFp12(pool) + y6.Mul(fu3, fu3p, pool) + y6.Conjugate(y6) + + t0 := newGFp12(pool) + t0.Square(y6, pool) + t0.Mul(t0, y4, pool) + t0.Mul(t0, y5, pool) + t1.Mul(y3, y5, pool) + t1.Mul(t1, t0, pool) + t0.Mul(t0, y2, pool) + t1.Square(t1, pool) + t1.Mul(t1, t0, pool) + t1.Square(t1, pool) + t0.Mul(t1, y1, pool) + t1.Mul(t1, y0, pool) + t0.Square(t0, pool) + t0.Mul(t0, t1, pool) + + inv.Put(pool) + t1.Put(pool) + t2.Put(pool) + fp.Put(pool) + fp2.Put(pool) + fp3.Put(pool) + fu.Put(pool) + fu2.Put(pool) + fu3.Put(pool) + fu2p.Put(pool) + fu3p.Put(pool) + y0.Put(pool) + y1.Put(pool) + y2.Put(pool) + y3.Put(pool) + y4.Put(pool) + y5.Put(pool) + y6.Put(pool) + + return t0 +} + +func optimalAte(a *twistPoint, b *curvePoint, pool *bnPool) *gfP12 { + e := miller(a, b, pool) + ret := finalExponentiation(e, pool) + e.Put(pool) + + if a.IsInfinity() || b.IsInfinity() { + ret.SetOne() + } + + return ret +} diff --git a/vendor/golang.org/x/crypto/bn256/twist.go b/vendor/golang.org/x/crypto/bn256/twist.go new file mode 100644 index 0000000..4f8b3fe --- /dev/null +++ b/vendor/golang.org/x/crypto/bn256/twist.go @@ -0,0 +1,249 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package bn256 + +import ( + "math/big" +) + +// twistPoint implements the elliptic curve y²=x³+3/ξ over GF(p²). Points are +// kept in Jacobian form and t=z² when valid. The group G₂ is the set of +// n-torsion points of this curve over GF(p²) (where n = Order) +type twistPoint struct { + x, y, z, t *gfP2 +} + +var twistB = &gfP2{ + bigFromBase10("6500054969564660373279643874235990574282535810762300357187714502686418407178"), + bigFromBase10("45500384786952622612957507119651934019977750675336102500314001518804928850249"), +} + +// twistGen is the generator of group G₂. +var twistGen = &twistPoint{ + &gfP2{ + bigFromBase10("21167961636542580255011770066570541300993051739349375019639421053990175267184"), + bigFromBase10("64746500191241794695844075326670126197795977525365406531717464316923369116492"), + }, + &gfP2{ + bigFromBase10("20666913350058776956210519119118544732556678129809273996262322366050359951122"), + bigFromBase10("17778617556404439934652658462602675281523610326338642107814333856843981424549"), + }, + &gfP2{ + bigFromBase10("0"), + bigFromBase10("1"), + }, + &gfP2{ + bigFromBase10("0"), + bigFromBase10("1"), + }, +} + +func newTwistPoint(pool *bnPool) *twistPoint { + return &twistPoint{ + newGFp2(pool), + newGFp2(pool), + newGFp2(pool), + newGFp2(pool), + } +} + +func (c *twistPoint) String() string { + return "(" + c.x.String() + ", " + c.y.String() + ", " + c.z.String() + ")" +} + +func (c *twistPoint) Put(pool *bnPool) { + c.x.Put(pool) + c.y.Put(pool) + c.z.Put(pool) + c.t.Put(pool) +} + +func (c *twistPoint) Set(a *twistPoint) { + c.x.Set(a.x) + c.y.Set(a.y) + c.z.Set(a.z) + c.t.Set(a.t) +} + +// IsOnCurve returns true iff c is on the curve where c must be in affine form. +func (c *twistPoint) IsOnCurve() bool { + pool := new(bnPool) + yy := newGFp2(pool).Square(c.y, pool) + xxx := newGFp2(pool).Square(c.x, pool) + xxx.Mul(xxx, c.x, pool) + yy.Sub(yy, xxx) + yy.Sub(yy, twistB) + yy.Minimal() + return yy.x.Sign() == 0 && yy.y.Sign() == 0 +} + +func (c *twistPoint) SetInfinity() { + c.z.SetZero() +} + +func (c *twistPoint) IsInfinity() bool { + return c.z.IsZero() +} + +func (c *twistPoint) Add(a, b *twistPoint, pool *bnPool) { + // For additional comments, see the same function in curve.go. + + if a.IsInfinity() { + c.Set(b) + return + } + if b.IsInfinity() { + c.Set(a) + return + } + + // See http://hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian-0/addition/add-2007-bl.op3 + z1z1 := newGFp2(pool).Square(a.z, pool) + z2z2 := newGFp2(pool).Square(b.z, pool) + u1 := newGFp2(pool).Mul(a.x, z2z2, pool) + u2 := newGFp2(pool).Mul(b.x, z1z1, pool) + + t := newGFp2(pool).Mul(b.z, z2z2, pool) + s1 := newGFp2(pool).Mul(a.y, t, pool) + + t.Mul(a.z, z1z1, pool) + s2 := newGFp2(pool).Mul(b.y, t, pool) + + h := newGFp2(pool).Sub(u2, u1) + xEqual := h.IsZero() + + t.Add(h, h) + i := newGFp2(pool).Square(t, pool) + j := newGFp2(pool).Mul(h, i, pool) + + t.Sub(s2, s1) + yEqual := t.IsZero() + if xEqual && yEqual { + c.Double(a, pool) + return + } + r := newGFp2(pool).Add(t, t) + + v := newGFp2(pool).Mul(u1, i, pool) + + t4 := newGFp2(pool).Square(r, pool) + t.Add(v, v) + t6 := newGFp2(pool).Sub(t4, j) + c.x.Sub(t6, t) + + t.Sub(v, c.x) // t7 + t4.Mul(s1, j, pool) // t8 + t6.Add(t4, t4) // t9 + t4.Mul(r, t, pool) // t10 + c.y.Sub(t4, t6) + + t.Add(a.z, b.z) // t11 + t4.Square(t, pool) // t12 + t.Sub(t4, z1z1) // t13 + t4.Sub(t, z2z2) // t14 + c.z.Mul(t4, h, pool) + + z1z1.Put(pool) + z2z2.Put(pool) + u1.Put(pool) + u2.Put(pool) + t.Put(pool) + s1.Put(pool) + s2.Put(pool) + h.Put(pool) + i.Put(pool) + j.Put(pool) + r.Put(pool) + v.Put(pool) + t4.Put(pool) + t6.Put(pool) +} + +func (c *twistPoint) Double(a *twistPoint, pool *bnPool) { + // See http://hyperelliptic.org/EFD/g1p/auto-code/shortw/jacobian-0/doubling/dbl-2009-l.op3 + A := newGFp2(pool).Square(a.x, pool) + B := newGFp2(pool).Square(a.y, pool) + C := newGFp2(pool).Square(B, pool) + + t := newGFp2(pool).Add(a.x, B) + t2 := newGFp2(pool).Square(t, pool) + t.Sub(t2, A) + t2.Sub(t, C) + d := newGFp2(pool).Add(t2, t2) + t.Add(A, A) + e := newGFp2(pool).Add(t, A) + f := newGFp2(pool).Square(e, pool) + + t.Add(d, d) + c.x.Sub(f, t) + + t.Add(C, C) + t2.Add(t, t) + t.Add(t2, t2) + c.y.Sub(d, c.x) + t2.Mul(e, c.y, pool) + c.y.Sub(t2, t) + + t.Mul(a.y, a.z, pool) + c.z.Add(t, t) + + A.Put(pool) + B.Put(pool) + C.Put(pool) + t.Put(pool) + t2.Put(pool) + d.Put(pool) + e.Put(pool) + f.Put(pool) +} + +func (c *twistPoint) Mul(a *twistPoint, scalar *big.Int, pool *bnPool) *twistPoint { + sum := newTwistPoint(pool) + sum.SetInfinity() + t := newTwistPoint(pool) + + for i := scalar.BitLen(); i >= 0; i-- { + t.Double(sum, pool) + if scalar.Bit(i) != 0 { + sum.Add(t, a, pool) + } else { + sum.Set(t) + } + } + + c.Set(sum) + sum.Put(pool) + t.Put(pool) + return c +} + +func (c *twistPoint) MakeAffine(pool *bnPool) *twistPoint { + if c.z.IsOne() { + return c + } + + zInv := newGFp2(pool).Invert(c.z, pool) + t := newGFp2(pool).Mul(c.y, zInv, pool) + zInv2 := newGFp2(pool).Square(zInv, pool) + c.y.Mul(t, zInv2, pool) + t.Mul(c.x, zInv2, pool) + c.x.Set(t) + c.z.SetOne() + c.t.SetOne() + + zInv.Put(pool) + t.Put(pool) + zInv2.Put(pool) + + return c +} + +func (c *twistPoint) Negative(a *twistPoint, pool *bnPool) { + c.x.Set(a.x) + c.y.SetZero() + c.y.Sub(c.y, a.y) + c.z.Set(a.z) + c.t.SetZero() +} diff --git a/vendor/golang.org/x/crypto/cast5/cast5.go b/vendor/golang.org/x/crypto/cast5/cast5.go new file mode 100644 index 0000000..0b4af37 --- /dev/null +++ b/vendor/golang.org/x/crypto/cast5/cast5.go @@ -0,0 +1,526 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package cast5 implements CAST5, as defined in RFC 2144. CAST5 is a common +// OpenPGP cipher. +package cast5 // import "golang.org/x/crypto/cast5" + +import "errors" + +const BlockSize = 8 +const KeySize = 16 + +type Cipher struct { + masking [16]uint32 + rotate [16]uint8 +} + +func NewCipher(key []byte) (c *Cipher, err error) { + if len(key) != KeySize { + return nil, errors.New("CAST5: keys must be 16 bytes") + } + + c = new(Cipher) + c.keySchedule(key) + return +} + +func (c *Cipher) BlockSize() int { + return BlockSize +} + +func (c *Cipher) Encrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + + l, r = r, l^f1(r, c.masking[0], c.rotate[0]) + l, r = r, l^f2(r, c.masking[1], c.rotate[1]) + l, r = r, l^f3(r, c.masking[2], c.rotate[2]) + l, r = r, l^f1(r, c.masking[3], c.rotate[3]) + + l, r = r, l^f2(r, c.masking[4], c.rotate[4]) + l, r = r, l^f3(r, c.masking[5], c.rotate[5]) + l, r = r, l^f1(r, c.masking[6], c.rotate[6]) + l, r = r, l^f2(r, c.masking[7], c.rotate[7]) + + l, r = r, l^f3(r, c.masking[8], c.rotate[8]) + l, r = r, l^f1(r, c.masking[9], c.rotate[9]) + l, r = r, l^f2(r, c.masking[10], c.rotate[10]) + l, r = r, l^f3(r, c.masking[11], c.rotate[11]) + + l, r = r, l^f1(r, c.masking[12], c.rotate[12]) + l, r = r, l^f2(r, c.masking[13], c.rotate[13]) + l, r = r, l^f3(r, c.masking[14], c.rotate[14]) + l, r = r, l^f1(r, c.masking[15], c.rotate[15]) + + dst[0] = uint8(r >> 24) + dst[1] = uint8(r >> 16) + dst[2] = uint8(r >> 8) + dst[3] = uint8(r) + dst[4] = uint8(l >> 24) + dst[5] = uint8(l >> 16) + dst[6] = uint8(l >> 8) + dst[7] = uint8(l) +} + +func (c *Cipher) Decrypt(dst, src []byte) { + l := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + + l, r = r, l^f1(r, c.masking[15], c.rotate[15]) + l, r = r, l^f3(r, c.masking[14], c.rotate[14]) + l, r = r, l^f2(r, c.masking[13], c.rotate[13]) + l, r = r, l^f1(r, c.masking[12], c.rotate[12]) + + l, r = r, l^f3(r, c.masking[11], c.rotate[11]) + l, r = r, l^f2(r, c.masking[10], c.rotate[10]) + l, r = r, l^f1(r, c.masking[9], c.rotate[9]) + l, r = r, l^f3(r, c.masking[8], c.rotate[8]) + + l, r = r, l^f2(r, c.masking[7], c.rotate[7]) + l, r = r, l^f1(r, c.masking[6], c.rotate[6]) + l, r = r, l^f3(r, c.masking[5], c.rotate[5]) + l, r = r, l^f2(r, c.masking[4], c.rotate[4]) + + l, r = r, l^f1(r, c.masking[3], c.rotate[3]) + l, r = r, l^f3(r, c.masking[2], c.rotate[2]) + l, r = r, l^f2(r, c.masking[1], c.rotate[1]) + l, r = r, l^f1(r, c.masking[0], c.rotate[0]) + + dst[0] = uint8(r >> 24) + dst[1] = uint8(r >> 16) + dst[2] = uint8(r >> 8) + dst[3] = uint8(r) + dst[4] = uint8(l >> 24) + dst[5] = uint8(l >> 16) + dst[6] = uint8(l >> 8) + dst[7] = uint8(l) +} + +type keyScheduleA [4][7]uint8 +type keyScheduleB [4][5]uint8 + +// keyScheduleRound contains the magic values for a round of the key schedule. +// The keyScheduleA deals with the lines like: +// z0z1z2z3 = x0x1x2x3 ^ S5[xD] ^ S6[xF] ^ S7[xC] ^ S8[xE] ^ S7[x8] +// Conceptually, both x and z are in the same array, x first. The first +// element describes which word of this array gets written to and the +// second, which word gets read. So, for the line above, it's "4, 0", because +// it's writing to the first word of z, which, being after x, is word 4, and +// reading from the first word of x: word 0. +// +// Next are the indexes into the S-boxes. Now the array is treated as bytes. So +// "xD" is 0xd. The first byte of z is written as "16 + 0", just to be clear +// that it's z that we're indexing. +// +// keyScheduleB deals with lines like: +// K1 = S5[z8] ^ S6[z9] ^ S7[z7] ^ S8[z6] ^ S5[z2] +// "K1" is ignored because key words are always written in order. So the five +// elements are the S-box indexes. They use the same form as in keyScheduleA, +// above. + +type keyScheduleRound struct{} +type keySchedule []keyScheduleRound + +var schedule = []struct { + a keyScheduleA + b keyScheduleB +}{ + { + keyScheduleA{ + {4, 0, 0xd, 0xf, 0xc, 0xe, 0x8}, + {5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa}, + {6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9}, + {7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb}, + }, + keyScheduleB{ + {16 + 8, 16 + 9, 16 + 7, 16 + 6, 16 + 2}, + {16 + 0xa, 16 + 0xb, 16 + 5, 16 + 4, 16 + 6}, + {16 + 0xc, 16 + 0xd, 16 + 3, 16 + 2, 16 + 9}, + {16 + 0xe, 16 + 0xf, 16 + 1, 16 + 0, 16 + 0xc}, + }, + }, + { + keyScheduleA{ + {0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0}, + {1, 4, 0, 2, 1, 3, 16 + 2}, + {2, 5, 7, 6, 5, 4, 16 + 1}, + {3, 7, 0xa, 9, 0xb, 8, 16 + 3}, + }, + keyScheduleB{ + {3, 2, 0xc, 0xd, 8}, + {1, 0, 0xe, 0xf, 0xd}, + {7, 6, 8, 9, 3}, + {5, 4, 0xa, 0xb, 7}, + }, + }, + { + keyScheduleA{ + {4, 0, 0xd, 0xf, 0xc, 0xe, 8}, + {5, 2, 16 + 0, 16 + 2, 16 + 1, 16 + 3, 0xa}, + {6, 3, 16 + 7, 16 + 6, 16 + 5, 16 + 4, 9}, + {7, 1, 16 + 0xa, 16 + 9, 16 + 0xb, 16 + 8, 0xb}, + }, + keyScheduleB{ + {16 + 3, 16 + 2, 16 + 0xc, 16 + 0xd, 16 + 9}, + {16 + 1, 16 + 0, 16 + 0xe, 16 + 0xf, 16 + 0xc}, + {16 + 7, 16 + 6, 16 + 8, 16 + 9, 16 + 2}, + {16 + 5, 16 + 4, 16 + 0xa, 16 + 0xb, 16 + 6}, + }, + }, + { + keyScheduleA{ + {0, 6, 16 + 5, 16 + 7, 16 + 4, 16 + 6, 16 + 0}, + {1, 4, 0, 2, 1, 3, 16 + 2}, + {2, 5, 7, 6, 5, 4, 16 + 1}, + {3, 7, 0xa, 9, 0xb, 8, 16 + 3}, + }, + keyScheduleB{ + {8, 9, 7, 6, 3}, + {0xa, 0xb, 5, 4, 7}, + {0xc, 0xd, 3, 2, 8}, + {0xe, 0xf, 1, 0, 0xd}, + }, + }, +} + +func (c *Cipher) keySchedule(in []byte) { + var t [8]uint32 + var k [32]uint32 + + for i := 0; i < 4; i++ { + j := i * 4 + t[i] = uint32(in[j])<<24 | uint32(in[j+1])<<16 | uint32(in[j+2])<<8 | uint32(in[j+3]) + } + + x := []byte{6, 7, 4, 5} + ki := 0 + + for half := 0; half < 2; half++ { + for _, round := range schedule { + for j := 0; j < 4; j++ { + var a [7]uint8 + copy(a[:], round.a[j][:]) + w := t[a[1]] + w ^= sBox[4][(t[a[2]>>2]>>(24-8*(a[2]&3)))&0xff] + w ^= sBox[5][(t[a[3]>>2]>>(24-8*(a[3]&3)))&0xff] + w ^= sBox[6][(t[a[4]>>2]>>(24-8*(a[4]&3)))&0xff] + w ^= sBox[7][(t[a[5]>>2]>>(24-8*(a[5]&3)))&0xff] + w ^= sBox[x[j]][(t[a[6]>>2]>>(24-8*(a[6]&3)))&0xff] + t[a[0]] = w + } + + for j := 0; j < 4; j++ { + var b [5]uint8 + copy(b[:], round.b[j][:]) + w := sBox[4][(t[b[0]>>2]>>(24-8*(b[0]&3)))&0xff] + w ^= sBox[5][(t[b[1]>>2]>>(24-8*(b[1]&3)))&0xff] + w ^= sBox[6][(t[b[2]>>2]>>(24-8*(b[2]&3)))&0xff] + w ^= sBox[7][(t[b[3]>>2]>>(24-8*(b[3]&3)))&0xff] + w ^= sBox[4+j][(t[b[4]>>2]>>(24-8*(b[4]&3)))&0xff] + k[ki] = w + ki++ + } + } + } + + for i := 0; i < 16; i++ { + c.masking[i] = k[i] + c.rotate[i] = uint8(k[16+i] & 0x1f) + } +} + +// These are the three 'f' functions. See RFC 2144, section 2.2. +func f1(d, m uint32, r uint8) uint32 { + t := m + d + I := (t << r) | (t >> (32 - r)) + return ((sBox[0][I>>24] ^ sBox[1][(I>>16)&0xff]) - sBox[2][(I>>8)&0xff]) + sBox[3][I&0xff] +} + +func f2(d, m uint32, r uint8) uint32 { + t := m ^ d + I := (t << r) | (t >> (32 - r)) + return ((sBox[0][I>>24] - sBox[1][(I>>16)&0xff]) + sBox[2][(I>>8)&0xff]) ^ sBox[3][I&0xff] +} + +func f3(d, m uint32, r uint8) uint32 { + t := m - d + I := (t << r) | (t >> (32 - r)) + return ((sBox[0][I>>24] + sBox[1][(I>>16)&0xff]) ^ sBox[2][(I>>8)&0xff]) - sBox[3][I&0xff] +} + +var sBox = [8][256]uint32{ + { + 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, + 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, + 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, + 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, + 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, + 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, + 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, + 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, + 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, + 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, + 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, + 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, + 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, + 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, + 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, + 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, + 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, + 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, + 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, + 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, + 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, + 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, + 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, + 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, + 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, + 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, + 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, + 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, + 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, + 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, + 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, + 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf, + }, + { + 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, + 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, + 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, + 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, + 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, + 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, + 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, + 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, + 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, + 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, + 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, + 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, + 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, + 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, + 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, + 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, + 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, + 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, + 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, + 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, + 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, + 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, + 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, + 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, + 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, + 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, + 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, + 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, + 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, + 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, + 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, + 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1, + }, + { + 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, + 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, + 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, + 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, + 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, + 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, + 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, + 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, + 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, + 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, + 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, + 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, + 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, + 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, + 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, + 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, + 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, + 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, + 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, + 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, + 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, + 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, + 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, + 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, + 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, + 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, + 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, + 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, + 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, + 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, + 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, + 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783, + }, + { + 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, + 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, + 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, + 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, + 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, + 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, + 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, + 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, + 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, + 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, + 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, + 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, + 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, + 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, + 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, + 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, + 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, + 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, + 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, + 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, + 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, + 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, + 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, + 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, + 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, + 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, + 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, + 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, + 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, + 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, + 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, + 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2, + }, + { + 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, + 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, + 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, + 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, + 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, + 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, + 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, + 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, + 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, + 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, + 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, + 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, + 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, + 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, + 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, + 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, + 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, + 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, + 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, + 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, + 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, + 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, + 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, + 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, + 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, + 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, + 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, + 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, + 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, + 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, + 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, + 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4, + }, + { + 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, + 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, + 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, + 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, + 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, + 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, + 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, + 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, + 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, + 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, + 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, + 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, + 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, + 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, + 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, + 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, + 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, + 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, + 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, + 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, + 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, + 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, + 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, + 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, + 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, + 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, + 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, + 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, + 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, + 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, + 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, + 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f, + }, + { + 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, + 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, + 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, + 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, + 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, + 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, + 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, + 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, + 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, + 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, + 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, + 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, + 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, + 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, + 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, + 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, + 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, + 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, + 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, + 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, + 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, + 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, + 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, + 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, + 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, + 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, + 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, + 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, + 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, + 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, + 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, + 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3, + }, + { + 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, + 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, + 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, + 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, + 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, + 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, + 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, + 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, + 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, + 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, + 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, + 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, + 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, + 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, + 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, + 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, + 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, + 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, + 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, + 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, + 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, + 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, + 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, + 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, + 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, + 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, + 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, + 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, + 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, + 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, + 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, + 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e, + }, +} diff --git a/vendor/golang.org/x/crypto/cast5/cast5_test.go b/vendor/golang.org/x/crypto/cast5/cast5_test.go new file mode 100644 index 0000000..778b272 --- /dev/null +++ b/vendor/golang.org/x/crypto/cast5/cast5_test.go @@ -0,0 +1,106 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cast5 + +import ( + "bytes" + "encoding/hex" + "testing" +) + +// This test vector is taken from RFC 2144, App B.1. +// Since the other two test vectors are for reduced-round variants, we can't +// use them. +var basicTests = []struct { + key, plainText, cipherText string +}{ + { + "0123456712345678234567893456789a", + "0123456789abcdef", + "238b4fe5847e44b2", + }, +} + +func TestBasic(t *testing.T) { + for i, test := range basicTests { + key, _ := hex.DecodeString(test.key) + plainText, _ := hex.DecodeString(test.plainText) + expected, _ := hex.DecodeString(test.cipherText) + + c, err := NewCipher(key) + if err != nil { + t.Errorf("#%d: failed to create Cipher: %s", i, err) + continue + } + var cipherText [BlockSize]byte + c.Encrypt(cipherText[:], plainText) + if !bytes.Equal(cipherText[:], expected) { + t.Errorf("#%d: got:%x want:%x", i, cipherText, expected) + } + + var plainTextAgain [BlockSize]byte + c.Decrypt(plainTextAgain[:], cipherText[:]) + if !bytes.Equal(plainTextAgain[:], plainText) { + t.Errorf("#%d: got:%x want:%x", i, plainTextAgain, plainText) + } + } +} + +// TestFull performs the test specified in RFC 2144, App B.2. +// However, due to the length of time taken, it's disabled here and a more +// limited version is included, below. +func TestFull(t *testing.T) { + if testing.Short() { + // This is too slow for normal testing + return + } + + a, b := iterate(1000000) + + const expectedA = "eea9d0a249fd3ba6b3436fb89d6dca92" + const expectedB = "b2c95eb00c31ad7180ac05b8e83d696e" + + if hex.EncodeToString(a) != expectedA { + t.Errorf("a: got:%x want:%s", a, expectedA) + } + if hex.EncodeToString(b) != expectedB { + t.Errorf("b: got:%x want:%s", b, expectedB) + } +} + +func iterate(iterations int) ([]byte, []byte) { + const initValueHex = "0123456712345678234567893456789a" + + initValue, _ := hex.DecodeString(initValueHex) + + var a, b [16]byte + copy(a[:], initValue) + copy(b[:], initValue) + + for i := 0; i < iterations; i++ { + c, _ := NewCipher(b[:]) + c.Encrypt(a[:8], a[:8]) + c.Encrypt(a[8:], a[8:]) + c, _ = NewCipher(a[:]) + c.Encrypt(b[:8], b[:8]) + c.Encrypt(b[8:], b[8:]) + } + + return a[:], b[:] +} + +func TestLimited(t *testing.T) { + a, b := iterate(1000) + + const expectedA = "23f73b14b02a2ad7dfb9f2c35644798d" + const expectedB = "e5bf37eff14c456a40b21ce369370a9f" + + if hex.EncodeToString(a) != expectedA { + t.Errorf("a: got:%x want:%s", a, expectedA) + } + if hex.EncodeToString(b) != expectedB { + t.Errorf("b: got:%x want:%s", b, expectedB) + } +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go new file mode 100644 index 0000000..3f0dcb9 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305.go @@ -0,0 +1,83 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package chacha20poly1305 implements the ChaCha20-Poly1305 AEAD as specified in RFC 7539. +package chacha20poly1305 // import "golang.org/x/crypto/chacha20poly1305" + +import ( + "crypto/cipher" + "errors" +) + +const ( + // KeySize is the size of the key used by this AEAD, in bytes. + KeySize = 32 + // NonceSize is the size of the nonce used with this AEAD, in bytes. + NonceSize = 12 +) + +type chacha20poly1305 struct { + key [32]byte +} + +// New returns a ChaCha20-Poly1305 AEAD that uses the given, 256-bit key. +func New(key []byte) (cipher.AEAD, error) { + if len(key) != KeySize { + return nil, errors.New("chacha20poly1305: bad key length") + } + ret := new(chacha20poly1305) + copy(ret.key[:], key) + return ret, nil +} + +func (c *chacha20poly1305) NonceSize() int { + return NonceSize +} + +func (c *chacha20poly1305) Overhead() int { + return 16 +} + +func (c *chacha20poly1305) Seal(dst, nonce, plaintext, additionalData []byte) []byte { + if len(nonce) != NonceSize { + panic("chacha20poly1305: bad nonce length passed to Seal") + } + + if uint64(len(plaintext)) > (1<<38)-64 { + panic("chacha20poly1305: plaintext too large") + } + + return c.seal(dst, nonce, plaintext, additionalData) +} + +var errOpen = errors.New("chacha20poly1305: message authentication failed") + +func (c *chacha20poly1305) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + if len(nonce) != NonceSize { + panic("chacha20poly1305: bad nonce length passed to Open") + } + if len(ciphertext) < 16 { + return nil, errOpen + } + if uint64(len(ciphertext)) > (1<<38)-48 { + panic("chacha20poly1305: ciphertext too large") + } + + return c.open(dst, nonce, ciphertext, additionalData) +} + +// sliceForAppend takes a slice and a requested number of bytes. It returns a +// slice with the contents of the given slice followed by that many bytes and a +// second slice that aliases into it and contains only the extra bytes. If the +// original slice has sufficient capacity then no allocation is performed. +func sliceForAppend(in []byte, n int) (head, tail []byte) { + if total := len(in) + n; cap(in) >= total { + head = in[:total] + } else { + head = make([]byte, total) + copy(head, in) + } + tail = head[len(in):] + return +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go new file mode 100644 index 0000000..7cd7ad8 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_amd64.go @@ -0,0 +1,127 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7,amd64,!gccgo,!appengine + +package chacha20poly1305 + +import "encoding/binary" + +//go:noescape +func chacha20Poly1305Open(dst []byte, key []uint32, src, ad []byte) bool + +//go:noescape +func chacha20Poly1305Seal(dst []byte, key []uint32, src, ad []byte) + +// cpuid is implemented in chacha20poly1305_amd64.s. +func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) + +// xgetbv with ecx = 0 is implemented in chacha20poly1305_amd64.s. +func xgetbv() (eax, edx uint32) + +var ( + useASM bool + useAVX2 bool +) + +func init() { + detectCPUFeatures() +} + +// detectCPUFeatures is used to detect if cpu instructions +// used by the functions implemented in assembler in +// chacha20poly1305_amd64.s are supported. +func detectCPUFeatures() { + maxID, _, _, _ := cpuid(0, 0) + if maxID < 1 { + return + } + + _, _, ecx1, _ := cpuid(1, 0) + + haveSSSE3 := isSet(9, ecx1) + useASM = haveSSSE3 + + haveOSXSAVE := isSet(27, ecx1) + + osSupportsAVX := false + // For XGETBV, OSXSAVE bit is required and sufficient. + if haveOSXSAVE { + eax, _ := xgetbv() + // Check if XMM and YMM registers have OS support. + osSupportsAVX = isSet(1, eax) && isSet(2, eax) + } + haveAVX := isSet(28, ecx1) && osSupportsAVX + + if maxID < 7 { + return + } + + _, ebx7, _, _ := cpuid(7, 0) + haveAVX2 := isSet(5, ebx7) && haveAVX + haveBMI2 := isSet(8, ebx7) + + useAVX2 = haveAVX2 && haveBMI2 +} + +// isSet checks if bit at bitpos is set in value. +func isSet(bitpos uint, value uint32) bool { + return value&(1<+0x00(SB)/4, $0x61707865 +DATA ·chacha20Constants<>+0x04(SB)/4, $0x3320646e +DATA ·chacha20Constants<>+0x08(SB)/4, $0x79622d32 +DATA ·chacha20Constants<>+0x0c(SB)/4, $0x6b206574 +DATA ·chacha20Constants<>+0x10(SB)/4, $0x61707865 +DATA ·chacha20Constants<>+0x14(SB)/4, $0x3320646e +DATA ·chacha20Constants<>+0x18(SB)/4, $0x79622d32 +DATA ·chacha20Constants<>+0x1c(SB)/4, $0x6b206574 +// <<< 16 with PSHUFB +DATA ·rol16<>+0x00(SB)/8, $0x0504070601000302 +DATA ·rol16<>+0x08(SB)/8, $0x0D0C0F0E09080B0A +DATA ·rol16<>+0x10(SB)/8, $0x0504070601000302 +DATA ·rol16<>+0x18(SB)/8, $0x0D0C0F0E09080B0A +// <<< 8 with PSHUFB +DATA ·rol8<>+0x00(SB)/8, $0x0605040702010003 +DATA ·rol8<>+0x08(SB)/8, $0x0E0D0C0F0A09080B +DATA ·rol8<>+0x10(SB)/8, $0x0605040702010003 +DATA ·rol8<>+0x18(SB)/8, $0x0E0D0C0F0A09080B + +DATA ·avx2InitMask<>+0x00(SB)/8, $0x0 +DATA ·avx2InitMask<>+0x08(SB)/8, $0x0 +DATA ·avx2InitMask<>+0x10(SB)/8, $0x1 +DATA ·avx2InitMask<>+0x18(SB)/8, $0x0 + +DATA ·avx2IncMask<>+0x00(SB)/8, $0x2 +DATA ·avx2IncMask<>+0x08(SB)/8, $0x0 +DATA ·avx2IncMask<>+0x10(SB)/8, $0x2 +DATA ·avx2IncMask<>+0x18(SB)/8, $0x0 +// Poly1305 key clamp +DATA ·polyClampMask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF +DATA ·polyClampMask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC +DATA ·polyClampMask<>+0x10(SB)/8, $0xFFFFFFFFFFFFFFFF +DATA ·polyClampMask<>+0x18(SB)/8, $0xFFFFFFFFFFFFFFFF + +DATA ·sseIncMask<>+0x00(SB)/8, $0x1 +DATA ·sseIncMask<>+0x08(SB)/8, $0x0 +// To load/store the last < 16 bytes in a buffer +DATA ·andMask<>+0x00(SB)/8, $0x00000000000000ff +DATA ·andMask<>+0x08(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x10(SB)/8, $0x000000000000ffff +DATA ·andMask<>+0x18(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x20(SB)/8, $0x0000000000ffffff +DATA ·andMask<>+0x28(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x30(SB)/8, $0x00000000ffffffff +DATA ·andMask<>+0x38(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x40(SB)/8, $0x000000ffffffffff +DATA ·andMask<>+0x48(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x50(SB)/8, $0x0000ffffffffffff +DATA ·andMask<>+0x58(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x60(SB)/8, $0x00ffffffffffffff +DATA ·andMask<>+0x68(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x70(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0x78(SB)/8, $0x0000000000000000 +DATA ·andMask<>+0x80(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0x88(SB)/8, $0x00000000000000ff +DATA ·andMask<>+0x90(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0x98(SB)/8, $0x000000000000ffff +DATA ·andMask<>+0xa0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xa8(SB)/8, $0x0000000000ffffff +DATA ·andMask<>+0xb0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xb8(SB)/8, $0x00000000ffffffff +DATA ·andMask<>+0xc0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xc8(SB)/8, $0x000000ffffffffff +DATA ·andMask<>+0xd0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xd8(SB)/8, $0x0000ffffffffffff +DATA ·andMask<>+0xe0(SB)/8, $0xffffffffffffffff +DATA ·andMask<>+0xe8(SB)/8, $0x00ffffffffffffff + +GLOBL ·chacha20Constants<>(SB), (NOPTR+RODATA), $32 +GLOBL ·rol16<>(SB), (NOPTR+RODATA), $32 +GLOBL ·rol8<>(SB), (NOPTR+RODATA), $32 +GLOBL ·sseIncMask<>(SB), (NOPTR+RODATA), $16 +GLOBL ·avx2IncMask<>(SB), (NOPTR+RODATA), $32 +GLOBL ·avx2InitMask<>(SB), (NOPTR+RODATA), $32 +GLOBL ·polyClampMask<>(SB), (NOPTR+RODATA), $32 +GLOBL ·andMask<>(SB), (NOPTR+RODATA), $240 +// No PALIGNR in Go ASM yet (but VPALIGNR is present). +#define shiftB0Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x04 // PALIGNR $4, X3, X3 +#define shiftB1Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xe4; BYTE $0x04 // PALIGNR $4, X4, X4 +#define shiftB2Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x04 // PALIGNR $4, X5, X5 +#define shiftB3Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x04 // PALIGNR $4, X13, X13 +#define shiftC0Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xf6; BYTE $0x08 // PALIGNR $8, X6, X6 +#define shiftC1Left BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x08 // PALIGNR $8, X7, X7 +#define shiftC2Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xc0; BYTE $0x08 // PALIGNR $8, X8, X8 +#define shiftC3Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xf6; BYTE $0x08 // PALIGNR $8, X14, X14 +#define shiftD0Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xc9; BYTE $0x0c // PALIGNR $12, X9, X9 +#define shiftD1Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xd2; BYTE $0x0c // PALIGNR $12, X10, X10 +#define shiftD2Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x0c // PALIGNR $12, X11, X11 +#define shiftD3Left BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x0c // PALIGNR $12, X15, X15 +#define shiftB0Right BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x0c // PALIGNR $12, X3, X3 +#define shiftB1Right BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xe4; BYTE $0x0c // PALIGNR $12, X4, X4 +#define shiftB2Right BYTE $0x66; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x0c // PALIGNR $12, X5, X5 +#define shiftB3Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xed; BYTE $0x0c // PALIGNR $12, X13, X13 +#define shiftC0Right shiftC0Left +#define shiftC1Right shiftC1Left +#define shiftC2Right shiftC2Left +#define shiftC3Right shiftC3Left +#define shiftD0Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xc9; BYTE $0x04 // PALIGNR $4, X9, X9 +#define shiftD1Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xd2; BYTE $0x04 // PALIGNR $4, X10, X10 +#define shiftD2Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xdb; BYTE $0x04 // PALIGNR $4, X11, X11 +#define shiftD3Right BYTE $0x66; BYTE $0x45; BYTE $0x0f; BYTE $0x3a; BYTE $0x0f; BYTE $0xff; BYTE $0x04 // PALIGNR $4, X15, X15 +// Some macros +#define chachaQR(A, B, C, D, T) \ + PADDD B, A; PXOR A, D; PSHUFB ·rol16<>(SB), D \ + PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $12, T; PSRLL $20, B; PXOR T, B \ + PADDD B, A; PXOR A, D; PSHUFB ·rol8<>(SB), D \ + PADDD D, C; PXOR C, B; MOVO B, T; PSLLL $7, T; PSRLL $25, B; PXOR T, B + +#define chachaQR_AVX2(A, B, C, D, T) \ + VPADDD B, A, A; VPXOR A, D, D; VPSHUFB ·rol16<>(SB), D, D \ + VPADDD D, C, C; VPXOR C, B, B; VPSLLD $12, B, T; VPSRLD $20, B, B; VPXOR T, B, B \ + VPADDD B, A, A; VPXOR A, D, D; VPSHUFB ·rol8<>(SB), D, D \ + VPADDD D, C, C; VPXOR C, B, B; VPSLLD $7, B, T; VPSRLD $25, B, B; VPXOR T, B, B + +#define polyAdd(S) ADDQ S, acc0; ADCQ 8+S, acc1; ADCQ $1, acc2 +#define polyMulStage1 MOVQ (0*8)(BP), AX; MOVQ AX, t2; MULQ acc0; MOVQ AX, t0; MOVQ DX, t1; MOVQ (0*8)(BP), AX; MULQ acc1; IMULQ acc2, t2; ADDQ AX, t1; ADCQ DX, t2 +#define polyMulStage2 MOVQ (1*8)(BP), AX; MOVQ AX, t3; MULQ acc0; ADDQ AX, t1; ADCQ $0, DX; MOVQ DX, acc0; MOVQ (1*8)(BP), AX; MULQ acc1; ADDQ AX, t2; ADCQ $0, DX +#define polyMulStage3 IMULQ acc2, t3; ADDQ acc0, t2; ADCQ DX, t3 +#define polyMulReduceStage MOVQ t0, acc0; MOVQ t1, acc1; MOVQ t2, acc2; ANDQ $3, acc2; MOVQ t2, t0; ANDQ $-4, t0; MOVQ t3, t1; SHRQ $2, t2:t3; SHRQ $2, t3; ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $0, acc2; ADDQ t2, acc0; ADCQ t3, acc1; ADCQ $0, acc2 + +#define polyMulStage1_AVX2 MOVQ (0*8)(BP), DX; MOVQ DX, t2; MULXQ acc0, t0, t1; IMULQ acc2, t2; MULXQ acc1, AX, DX; ADDQ AX, t1; ADCQ DX, t2 +#define polyMulStage2_AVX2 MOVQ (1*8)(BP), DX; MULXQ acc0, acc0, AX; ADDQ acc0, t1; MULXQ acc1, acc1, t3; ADCQ acc1, t2; ADCQ $0, t3 +#define polyMulStage3_AVX2 IMULQ acc2, DX; ADDQ AX, t2; ADCQ DX, t3 + +#define polyMul polyMulStage1; polyMulStage2; polyMulStage3; polyMulReduceStage +#define polyMulAVX2 polyMulStage1_AVX2; polyMulStage2_AVX2; polyMulStage3_AVX2; polyMulReduceStage +// ---------------------------------------------------------------------------- +TEXT polyHashADInternal<>(SB), NOSPLIT, $0 + // adp points to beginning of additional data + // itr2 holds ad length + XORQ acc0, acc0 + XORQ acc1, acc1 + XORQ acc2, acc2 + CMPQ itr2, $13 + JNE hashADLoop + +openFastTLSAD: + // Special treatment for the TLS case of 13 bytes + MOVQ (adp), acc0 + MOVQ 5(adp), acc1 + SHRQ $24, acc1 + MOVQ $1, acc2 + polyMul + RET + +hashADLoop: + // Hash in 16 byte chunks + CMPQ itr2, $16 + JB hashADTail + polyAdd(0(adp)) + LEAQ (1*16)(adp), adp + SUBQ $16, itr2 + polyMul + JMP hashADLoop + +hashADTail: + CMPQ itr2, $0 + JE hashADDone + + // Hash last < 16 byte tail + XORQ t0, t0 + XORQ t1, t1 + XORQ t2, t2 + ADDQ itr2, adp + +hashADTailLoop: + SHLQ $8, t1:t0 + SHLQ $8, t0 + MOVB -1(adp), t2 + XORQ t2, t0 + DECQ adp + DECQ itr2 + JNE hashADTailLoop + +hashADTailFinish: + ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 + polyMul + + // Finished AD +hashADDone: + RET + +// ---------------------------------------------------------------------------- +// func chacha20Poly1305Open(dst, key, src, ad []byte) bool +TEXT ·chacha20Poly1305Open(SB), 0, $288-97 + // For aligned stack access + MOVQ SP, BP + ADDQ $32, BP + ANDQ $-32, BP + MOVQ dst+0(FP), oup + MOVQ key+24(FP), keyp + MOVQ src+48(FP), inp + MOVQ src_len+56(FP), inl + MOVQ ad+72(FP), adp + + // Check for AVX2 support + CMPB ·useAVX2(SB), $1 + JE chacha20Poly1305Open_AVX2 + + // Special optimization, for very short buffers + CMPQ inl, $128 + JBE openSSE128 // About 16% faster + + // For long buffers, prepare the poly key first + MOVOU ·chacha20Constants<>(SB), A0 + MOVOU (1*16)(keyp), B0 + MOVOU (2*16)(keyp), C0 + MOVOU (3*16)(keyp), D0 + MOVO D0, T1 + + // Store state on stack for future use + MOVO B0, state1Store + MOVO C0, state2Store + MOVO D0, ctr3Store + MOVQ $10, itr2 + +openSSEPreparePolyKey: + chachaQR(A0, B0, C0, D0, T0) + shiftB0Left; shiftC0Left; shiftD0Left + chachaQR(A0, B0, C0, D0, T0) + shiftB0Right; shiftC0Right; shiftD0Right + DECQ itr2 + JNE openSSEPreparePolyKey + + // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + PADDL ·chacha20Constants<>(SB), A0; PADDL state1Store, B0 + + // Clamp and store the key + PAND ·polyClampMask<>(SB), A0 + MOVO A0, rStore; MOVO B0, sStore + + // Hash AAD + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + +openSSEMainLoop: + CMPQ inl, $256 + JB openSSEMainLoopDone + + // Load state, increment counter blocks + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + + // Store counters + MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + + // There are 10 ChaCha20 iterations of 2QR each, so for 6 iterations we hash 2 blocks, and for the remaining 4 only 1 block - for a total of 16 + MOVQ $4, itr1 + MOVQ inp, itr2 + +openSSEInternalLoop: + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyAdd(0(itr2)) + shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left + shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left + shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left + polyMulStage1 + polyMulStage2 + LEAQ (2*8)(itr2), itr2 + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + polyMulStage3 + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyMulReduceStage + shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right + shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right + shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right + DECQ itr1 + JGE openSSEInternalLoop + + polyAdd(0(itr2)) + polyMul + LEAQ (2*8)(itr2), itr2 + + CMPQ itr1, $-6 + JG openSSEInternalLoop + + // Add in the state + PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 + PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 + PADDD state2Store, C0; PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 + PADDD ctr0Store, D0; PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + + // Load - xor - store + MOVO D3, tmpStore + MOVOU (0*16)(inp), D3; PXOR D3, A0; MOVOU A0, (0*16)(oup) + MOVOU (1*16)(inp), D3; PXOR D3, B0; MOVOU B0, (1*16)(oup) + MOVOU (2*16)(inp), D3; PXOR D3, C0; MOVOU C0, (2*16)(oup) + MOVOU (3*16)(inp), D3; PXOR D3, D0; MOVOU D0, (3*16)(oup) + MOVOU (4*16)(inp), D0; PXOR D0, A1; MOVOU A1, (4*16)(oup) + MOVOU (5*16)(inp), D0; PXOR D0, B1; MOVOU B1, (5*16)(oup) + MOVOU (6*16)(inp), D0; PXOR D0, C1; MOVOU C1, (6*16)(oup) + MOVOU (7*16)(inp), D0; PXOR D0, D1; MOVOU D1, (7*16)(oup) + MOVOU (8*16)(inp), D0; PXOR D0, A2; MOVOU A2, (8*16)(oup) + MOVOU (9*16)(inp), D0; PXOR D0, B2; MOVOU B2, (9*16)(oup) + MOVOU (10*16)(inp), D0; PXOR D0, C2; MOVOU C2, (10*16)(oup) + MOVOU (11*16)(inp), D0; PXOR D0, D2; MOVOU D2, (11*16)(oup) + MOVOU (12*16)(inp), D0; PXOR D0, A3; MOVOU A3, (12*16)(oup) + MOVOU (13*16)(inp), D0; PXOR D0, B3; MOVOU B3, (13*16)(oup) + MOVOU (14*16)(inp), D0; PXOR D0, C3; MOVOU C3, (14*16)(oup) + MOVOU (15*16)(inp), D0; PXOR tmpStore, D0; MOVOU D0, (15*16)(oup) + LEAQ 256(inp), inp + LEAQ 256(oup), oup + SUBQ $256, inl + JMP openSSEMainLoop + +openSSEMainLoopDone: + // Handle the various tail sizes efficiently + TESTQ inl, inl + JE openSSEFinalize + CMPQ inl, $64 + JBE openSSETail64 + CMPQ inl, $128 + JBE openSSETail128 + CMPQ inl, $192 + JBE openSSETail192 + JMP openSSETail256 + +openSSEFinalize: + // Hash in the PT, AAD lengths + ADDQ ad_len+80(FP), acc0; ADCQ src_len+56(FP), acc1; ADCQ $1, acc2 + polyMul + + // Final reduce + MOVQ acc0, t0 + MOVQ acc1, t1 + MOVQ acc2, t2 + SUBQ $-5, acc0 + SBBQ $-1, acc1 + SBBQ $3, acc2 + CMOVQCS t0, acc0 + CMOVQCS t1, acc1 + CMOVQCS t2, acc2 + + // Add in the "s" part of the key + ADDQ 0+sStore, acc0 + ADCQ 8+sStore, acc1 + + // Finally, constant time compare to the tag at the end of the message + XORQ AX, AX + MOVQ $1, DX + XORQ (0*8)(inp), acc0 + XORQ (1*8)(inp), acc1 + ORQ acc1, acc0 + CMOVQEQ DX, AX + + // Return true iff tags are equal + MOVB AX, ret+96(FP) + RET + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 129 bytes +openSSE128: + // For up to 128 bytes of ciphertext and 64 bytes for the poly key, we require to process three blocks + MOVOU ·chacha20Constants<>(SB), A0; MOVOU (1*16)(keyp), B0; MOVOU (2*16)(keyp), C0; MOVOU (3*16)(keyp), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO B0, T1; MOVO C0, T2; MOVO D1, T3 + MOVQ $10, itr2 + +openSSE128InnerCipherLoop: + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Left; shiftB1Left; shiftB2Left + shiftC0Left; shiftC1Left; shiftC2Left + shiftD0Left; shiftD1Left; shiftD2Left + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Right; shiftB1Right; shiftB2Right + shiftC0Right; shiftC1Right; shiftC2Right + shiftD0Right; shiftD1Right; shiftD2Right + DECQ itr2 + JNE openSSE128InnerCipherLoop + + // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 + PADDL T1, B0; PADDL T1, B1; PADDL T1, B2 + PADDL T2, C1; PADDL T2, C2 + PADDL T3, D1; PADDL ·sseIncMask<>(SB), T3; PADDL T3, D2 + + // Clamp and store the key + PAND ·polyClampMask<>(SB), A0 + MOVOU A0, rStore; MOVOU B0, sStore + + // Hash + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + +openSSE128Open: + CMPQ inl, $16 + JB openSSETail16 + SUBQ $16, inl + + // Load for hashing + polyAdd(0(inp)) + + // Load for decryption + MOVOU (inp), T0; PXOR T0, A1; MOVOU A1, (oup) + LEAQ (1*16)(inp), inp + LEAQ (1*16)(oup), oup + polyMul + + // Shift the stream "left" + MOVO B1, A1 + MOVO C1, B1 + MOVO D1, C1 + MOVO A2, D1 + MOVO B2, A2 + MOVO C2, B2 + MOVO D2, C2 + JMP openSSE128Open + +openSSETail16: + TESTQ inl, inl + JE openSSEFinalize + + // We can safely load the CT from the end, because it is padded with the MAC + MOVQ inl, itr2 + SHLQ $4, itr2 + LEAQ ·andMask<>(SB), t0 + MOVOU (inp), T0 + ADDQ inl, inp + PAND -16(t0)(itr2*1), T0 + MOVO T0, 0+tmpStore + MOVQ T0, t0 + MOVQ 8+tmpStore, t1 + PXOR A1, T0 + + // We can only store one byte at a time, since plaintext can be shorter than 16 bytes +openSSETail16Store: + MOVQ T0, t3 + MOVB t3, (oup) + PSRLDQ $1, T0 + INCQ oup + DECQ inl + JNE openSSETail16Store + ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 + polyMul + JMP openSSEFinalize + +// ---------------------------------------------------------------------------- +// Special optimization for the last 64 bytes of ciphertext +openSSETail64: + // Need to decrypt up to 64 bytes - prepare single block + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr0Store + XORQ itr2, itr2 + MOVQ inl, itr1 + CMPQ itr1, $16 + JB openSSETail64LoopB + +openSSETail64LoopA: + // Perform ChaCha rounds, while hashing the remaining input + polyAdd(0(inp)(itr2*1)) + polyMul + SUBQ $16, itr1 + +openSSETail64LoopB: + ADDQ $16, itr2 + chachaQR(A0, B0, C0, D0, T0) + shiftB0Left; shiftC0Left; shiftD0Left + chachaQR(A0, B0, C0, D0, T0) + shiftB0Right; shiftC0Right; shiftD0Right + + CMPQ itr1, $16 + JAE openSSETail64LoopA + + CMPQ itr2, $160 + JNE openSSETail64LoopB + + PADDL ·chacha20Constants<>(SB), A0; PADDL state1Store, B0; PADDL state2Store, C0; PADDL ctr0Store, D0 + +openSSETail64DecLoop: + CMPQ inl, $16 + JB openSSETail64DecLoopDone + SUBQ $16, inl + MOVOU (inp), T0 + PXOR T0, A0 + MOVOU A0, (oup) + LEAQ 16(inp), inp + LEAQ 16(oup), oup + MOVO B0, A0 + MOVO C0, B0 + MOVO D0, C0 + JMP openSSETail64DecLoop + +openSSETail64DecLoopDone: + MOVO A0, A1 + JMP openSSETail16 + +// ---------------------------------------------------------------------------- +// Special optimization for the last 128 bytes of ciphertext +openSSETail128: + // Need to decrypt up to 128 bytes - prepare two blocks + MOVO ·chacha20Constants<>(SB), A1; MOVO state1Store, B1; MOVO state2Store, C1; MOVO ctr3Store, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr0Store + MOVO A1, A0; MOVO B1, B0; MOVO C1, C0; MOVO D1, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr1Store + XORQ itr2, itr2 + MOVQ inl, itr1 + ANDQ $-16, itr1 + +openSSETail128LoopA: + // Perform ChaCha rounds, while hashing the remaining input + polyAdd(0(inp)(itr2*1)) + polyMul + +openSSETail128LoopB: + ADDQ $16, itr2 + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) + shiftB0Left; shiftC0Left; shiftD0Left + shiftB1Left; shiftC1Left; shiftD1Left + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) + shiftB0Right; shiftC0Right; shiftD0Right + shiftB1Right; shiftC1Right; shiftD1Right + + CMPQ itr2, itr1 + JB openSSETail128LoopA + + CMPQ itr2, $160 + JNE openSSETail128LoopB + + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1 + PADDL state1Store, B0; PADDL state1Store, B1 + PADDL state2Store, C0; PADDL state2Store, C1 + PADDL ctr1Store, D0; PADDL ctr0Store, D1 + + MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 + PXOR T0, A1; PXOR T1, B1; PXOR T2, C1; PXOR T3, D1 + MOVOU A1, (0*16)(oup); MOVOU B1, (1*16)(oup); MOVOU C1, (2*16)(oup); MOVOU D1, (3*16)(oup) + + SUBQ $64, inl + LEAQ 64(inp), inp + LEAQ 64(oup), oup + JMP openSSETail64DecLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 192 bytes of ciphertext +openSSETail192: + // Need to decrypt up to 192 bytes - prepare three blocks + MOVO ·chacha20Constants<>(SB), A2; MOVO state1Store, B2; MOVO state2Store, C2; MOVO ctr3Store, D2; PADDL ·sseIncMask<>(SB), D2; MOVO D2, ctr0Store + MOVO A2, A1; MOVO B2, B1; MOVO C2, C1; MOVO D2, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr1Store + MOVO A1, A0; MOVO B1, B0; MOVO C1, C0; MOVO D1, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr2Store + + MOVQ inl, itr1 + MOVQ $160, itr2 + CMPQ itr1, $160 + CMOVQGT itr2, itr1 + ANDQ $-16, itr1 + XORQ itr2, itr2 + +openSSLTail192LoopA: + // Perform ChaCha rounds, while hashing the remaining input + polyAdd(0(inp)(itr2*1)) + polyMul + +openSSLTail192LoopB: + ADDQ $16, itr2 + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Left; shiftC0Left; shiftD0Left + shiftB1Left; shiftC1Left; shiftD1Left + shiftB2Left; shiftC2Left; shiftD2Left + + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Right; shiftC0Right; shiftD0Right + shiftB1Right; shiftC1Right; shiftD1Right + shiftB2Right; shiftC2Right; shiftD2Right + + CMPQ itr2, itr1 + JB openSSLTail192LoopA + + CMPQ itr2, $160 + JNE openSSLTail192LoopB + + CMPQ inl, $176 + JB openSSLTail192Store + + polyAdd(160(inp)) + polyMul + + CMPQ inl, $192 + JB openSSLTail192Store + + polyAdd(176(inp)) + polyMul + +openSSLTail192Store: + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 + PADDL state1Store, B0; PADDL state1Store, B1; PADDL state1Store, B2 + PADDL state2Store, C0; PADDL state2Store, C1; PADDL state2Store, C2 + PADDL ctr2Store, D0; PADDL ctr1Store, D1; PADDL ctr0Store, D2 + + MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 + PXOR T0, A2; PXOR T1, B2; PXOR T2, C2; PXOR T3, D2 + MOVOU A2, (0*16)(oup); MOVOU B2, (1*16)(oup); MOVOU C2, (2*16)(oup); MOVOU D2, (3*16)(oup) + + MOVOU (4*16)(inp), T0; MOVOU (5*16)(inp), T1; MOVOU (6*16)(inp), T2; MOVOU (7*16)(inp), T3 + PXOR T0, A1; PXOR T1, B1; PXOR T2, C1; PXOR T3, D1 + MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) + + SUBQ $128, inl + LEAQ 128(inp), inp + LEAQ 128(oup), oup + JMP openSSETail64DecLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 256 bytes of ciphertext +openSSETail256: + // Need to decrypt up to 256 bytes - prepare four blocks + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + + // Store counters + MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + XORQ itr2, itr2 + +openSSETail256Loop: + // This loop inteleaves 8 ChaCha quarter rounds with 1 poly multiplication + polyAdd(0(inp)(itr2*1)) + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left + shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left + shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left + polyMulStage1 + polyMulStage2 + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyMulStage3 + polyMulReduceStage + shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right + shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right + shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right + ADDQ $2*8, itr2 + CMPQ itr2, $160 + JB openSSETail256Loop + MOVQ inl, itr1 + ANDQ $-16, itr1 + +openSSETail256HashLoop: + polyAdd(0(inp)(itr2*1)) + polyMul + ADDQ $2*8, itr2 + CMPQ itr2, itr1 + JB openSSETail256HashLoop + + // Add in the state + PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 + PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 + PADDD state2Store, C0; PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 + PADDD ctr0Store, D0; PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + MOVO D3, tmpStore + + // Load - xor - store + MOVOU (0*16)(inp), D3; PXOR D3, A0 + MOVOU (1*16)(inp), D3; PXOR D3, B0 + MOVOU (2*16)(inp), D3; PXOR D3, C0 + MOVOU (3*16)(inp), D3; PXOR D3, D0 + MOVOU A0, (0*16)(oup) + MOVOU B0, (1*16)(oup) + MOVOU C0, (2*16)(oup) + MOVOU D0, (3*16)(oup) + MOVOU (4*16)(inp), A0; MOVOU (5*16)(inp), B0; MOVOU (6*16)(inp), C0; MOVOU (7*16)(inp), D0 + PXOR A0, A1; PXOR B0, B1; PXOR C0, C1; PXOR D0, D1 + MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) + MOVOU (8*16)(inp), A0; MOVOU (9*16)(inp), B0; MOVOU (10*16)(inp), C0; MOVOU (11*16)(inp), D0 + PXOR A0, A2; PXOR B0, B2; PXOR C0, C2; PXOR D0, D2 + MOVOU A2, (8*16)(oup); MOVOU B2, (9*16)(oup); MOVOU C2, (10*16)(oup); MOVOU D2, (11*16)(oup) + LEAQ 192(inp), inp + LEAQ 192(oup), oup + SUBQ $192, inl + MOVO A3, A0 + MOVO B3, B0 + MOVO C3, C0 + MOVO tmpStore, D0 + + JMP openSSETail64DecLoop + +// ---------------------------------------------------------------------------- +// ------------------------- AVX2 Code ---------------------------------------- +chacha20Poly1305Open_AVX2: + VZEROUPPER + VMOVDQU ·chacha20Constants<>(SB), AA0 + BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x70; BYTE $0x10 // broadcasti128 16(r8), ymm14 + BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x20 // broadcasti128 32(r8), ymm12 + BYTE $0xc4; BYTE $0xc2; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x30 // broadcasti128 48(r8), ymm4 + VPADDD ·avx2InitMask<>(SB), DD0, DD0 + + // Special optimization, for very short buffers + CMPQ inl, $192 + JBE openAVX2192 + CMPQ inl, $320 + JBE openAVX2320 + + // For the general key prepare the key first - as a byproduct we have 64 bytes of cipher stream + VMOVDQA BB0, state1StoreAVX2 + VMOVDQA CC0, state2StoreAVX2 + VMOVDQA DD0, ctr3StoreAVX2 + MOVQ $10, itr2 + +openAVX2PreparePolyKey: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $12, DD0, DD0, DD0 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $4, DD0, DD0, DD0 + DECQ itr2 + JNE openAVX2PreparePolyKey + + VPADDD ·chacha20Constants<>(SB), AA0, AA0 + VPADDD state1StoreAVX2, BB0, BB0 + VPADDD state2StoreAVX2, CC0, CC0 + VPADDD ctr3StoreAVX2, DD0, DD0 + + VPERM2I128 $0x02, AA0, BB0, TT0 + + // Clamp and store poly key + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for the first 64 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + + // Hash AD + first 64 bytes + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + XORQ itr1, itr1 + +openAVX2InitialHash64: + polyAdd(0(inp)(itr1*1)) + polyMulAVX2 + ADDQ $16, itr1 + CMPQ itr1, $64 + JNE openAVX2InitialHash64 + + // Decrypt the first 64 bytes + VPXOR (0*32)(inp), AA0, AA0 + VPXOR (1*32)(inp), BB0, BB0 + VMOVDQU AA0, (0*32)(oup) + VMOVDQU BB0, (1*32)(oup) + LEAQ (2*32)(inp), inp + LEAQ (2*32)(oup), oup + SUBQ $64, inl + +openAVX2MainLoop: + CMPQ inl, $512 + JB openAVX2MainLoopDone + + // Load state, increment counter blocks, store the incremented counters + VMOVDQU ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + XORQ itr1, itr1 + +openAVX2InternalLoop: + // Lets just say this spaghetti loop interleaves 2 quarter rounds with 3 poly multiplications + // Effectively per 512 bytes of stream we hash 480 bytes of ciphertext + polyAdd(0*8(inp)(itr1*1)) + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + polyMulStage1_AVX2 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + polyMulStage2_AVX2 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyMulStage3_AVX2 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulReduceStage + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + polyAdd(2*8(inp)(itr1*1)) + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + polyMulStage1_AVX2 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulStage2_AVX2 + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + polyMulStage3_AVX2 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + polyMulReduceStage + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyAdd(4*8(inp)(itr1*1)) + LEAQ (6*8)(itr1), itr1 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulStage1_AVX2 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + polyMulStage2_AVX2 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + polyMulStage3_AVX2 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulReduceStage + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 + CMPQ itr1, $480 + JNE openAVX2InternalLoop + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + VMOVDQA CC3, tmpStoreAVX2 + + // We only hashed 480 of the 512 bytes available - hash the remaining 32 here + polyAdd(480(inp)) + polyMulAVX2 + VPERM2I128 $0x02, AA0, BB0, CC3; VPERM2I128 $0x13, AA0, BB0, BB0; VPERM2I128 $0x02, CC0, DD0, AA0; VPERM2I128 $0x13, CC0, DD0, CC0 + VPXOR (0*32)(inp), CC3, CC3; VPXOR (1*32)(inp), AA0, AA0; VPXOR (2*32)(inp), BB0, BB0; VPXOR (3*32)(inp), CC0, CC0 + VMOVDQU CC3, (0*32)(oup); VMOVDQU AA0, (1*32)(oup); VMOVDQU BB0, (2*32)(oup); VMOVDQU CC0, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 + VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + + // and here + polyAdd(496(inp)) + polyMulAVX2 + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 + VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) + VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 + VPXOR (12*32)(inp), AA0, AA0; VPXOR (13*32)(inp), BB0, BB0; VPXOR (14*32)(inp), CC0, CC0; VPXOR (15*32)(inp), DD0, DD0 + VMOVDQU AA0, (12*32)(oup); VMOVDQU BB0, (13*32)(oup); VMOVDQU CC0, (14*32)(oup); VMOVDQU DD0, (15*32)(oup) + LEAQ (32*16)(inp), inp + LEAQ (32*16)(oup), oup + SUBQ $(32*16), inl + JMP openAVX2MainLoop + +openAVX2MainLoopDone: + // Handle the various tail sizes efficiently + TESTQ inl, inl + JE openSSEFinalize + CMPQ inl, $128 + JBE openAVX2Tail128 + CMPQ inl, $256 + JBE openAVX2Tail256 + CMPQ inl, $384 + JBE openAVX2Tail384 + JMP openAVX2Tail512 + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 193 bytes +openAVX2192: + // For up to 192 bytes of ciphertext and 64 bytes for the poly key, we process four blocks + VMOVDQA AA0, AA1 + VMOVDQA BB0, BB1 + VMOVDQA CC0, CC1 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA AA0, AA2 + VMOVDQA BB0, BB2 + VMOVDQA CC0, CC2 + VMOVDQA DD0, DD2 + VMOVDQA DD1, TT3 + MOVQ $10, itr2 + +openAVX2192InnerCipherLoop: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 + DECQ itr2 + JNE openAVX2192InnerCipherLoop + VPADDD AA2, AA0, AA0; VPADDD AA2, AA1, AA1 + VPADDD BB2, BB0, BB0; VPADDD BB2, BB1, BB1 + VPADDD CC2, CC0, CC0; VPADDD CC2, CC1, CC1 + VPADDD DD2, DD0, DD0; VPADDD TT3, DD1, DD1 + VPERM2I128 $0x02, AA0, BB0, TT0 + + // Clamp and store poly key + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for up to 192 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + VPERM2I128 $0x02, AA1, BB1, CC0 + VPERM2I128 $0x02, CC1, DD1, DD0 + VPERM2I128 $0x13, AA1, BB1, AA1 + VPERM2I128 $0x13, CC1, DD1, BB1 + +openAVX2ShortOpen: + // Hash + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + +openAVX2ShortOpenLoop: + CMPQ inl, $32 + JB openAVX2ShortTail32 + SUBQ $32, inl + + // Load for hashing + polyAdd(0*8(inp)) + polyMulAVX2 + polyAdd(2*8(inp)) + polyMulAVX2 + + // Load for decryption + VPXOR (inp), AA0, AA0 + VMOVDQU AA0, (oup) + LEAQ (1*32)(inp), inp + LEAQ (1*32)(oup), oup + + // Shift stream left + VMOVDQA BB0, AA0 + VMOVDQA CC0, BB0 + VMOVDQA DD0, CC0 + VMOVDQA AA1, DD0 + VMOVDQA BB1, AA1 + VMOVDQA CC1, BB1 + VMOVDQA DD1, CC1 + VMOVDQA AA2, DD1 + VMOVDQA BB2, AA2 + JMP openAVX2ShortOpenLoop + +openAVX2ShortTail32: + CMPQ inl, $16 + VMOVDQA A0, A1 + JB openAVX2ShortDone + + SUBQ $16, inl + + // Load for hashing + polyAdd(0*8(inp)) + polyMulAVX2 + + // Load for decryption + VPXOR (inp), A0, T0 + VMOVDQU T0, (oup) + LEAQ (1*16)(inp), inp + LEAQ (1*16)(oup), oup + VPERM2I128 $0x11, AA0, AA0, AA0 + VMOVDQA A0, A1 + +openAVX2ShortDone: + VZEROUPPER + JMP openSSETail16 + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 321 bytes +openAVX2320: + // For up to 320 bytes of ciphertext and 64 bytes for the poly key, we process six blocks + VMOVDQA AA0, AA1; VMOVDQA BB0, BB1; VMOVDQA CC0, CC1; VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA AA0, AA2; VMOVDQA BB0, BB2; VMOVDQA CC0, CC2; VPADDD ·avx2IncMask<>(SB), DD1, DD2 + VMOVDQA BB0, TT1; VMOVDQA CC0, TT2; VMOVDQA DD0, TT3 + MOVQ $10, itr2 + +openAVX2320InnerCipherLoop: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 + DECQ itr2 + JNE openAVX2320InnerCipherLoop + + VMOVDQA ·chacha20Constants<>(SB), TT0 + VPADDD TT0, AA0, AA0; VPADDD TT0, AA1, AA1; VPADDD TT0, AA2, AA2 + VPADDD TT1, BB0, BB0; VPADDD TT1, BB1, BB1; VPADDD TT1, BB2, BB2 + VPADDD TT2, CC0, CC0; VPADDD TT2, CC1, CC1; VPADDD TT2, CC2, CC2 + VMOVDQA ·avx2IncMask<>(SB), TT0 + VPADDD TT3, DD0, DD0; VPADDD TT0, TT3, TT3 + VPADDD TT3, DD1, DD1; VPADDD TT0, TT3, TT3 + VPADDD TT3, DD2, DD2 + + // Clamp and store poly key + VPERM2I128 $0x02, AA0, BB0, TT0 + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for up to 320 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + VPERM2I128 $0x02, AA1, BB1, CC0 + VPERM2I128 $0x02, CC1, DD1, DD0 + VPERM2I128 $0x13, AA1, BB1, AA1 + VPERM2I128 $0x13, CC1, DD1, BB1 + VPERM2I128 $0x02, AA2, BB2, CC1 + VPERM2I128 $0x02, CC2, DD2, DD1 + VPERM2I128 $0x13, AA2, BB2, AA2 + VPERM2I128 $0x13, CC2, DD2, BB2 + JMP openAVX2ShortOpen + +// ---------------------------------------------------------------------------- +// Special optimization for the last 128 bytes of ciphertext +openAVX2Tail128: + // Need to decrypt up to 128 bytes - prepare two blocks + VMOVDQA ·chacha20Constants<>(SB), AA1 + VMOVDQA state1StoreAVX2, BB1 + VMOVDQA state2StoreAVX2, CC1 + VMOVDQA ctr3StoreAVX2, DD1 + VPADDD ·avx2IncMask<>(SB), DD1, DD1 + VMOVDQA DD1, DD0 + + XORQ itr2, itr2 + MOVQ inl, itr1 + ANDQ $-16, itr1 + TESTQ itr1, itr1 + JE openAVX2Tail128LoopB + +openAVX2Tail128LoopA: + // Perform ChaCha rounds, while hashing the remaining input + polyAdd(0(inp)(itr2*1)) + polyMulAVX2 + +openAVX2Tail128LoopB: + ADDQ $16, itr2 + chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD1, DD1, DD1 + chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD1, DD1, DD1 + CMPQ itr2, itr1 + JB openAVX2Tail128LoopA + CMPQ itr2, $160 + JNE openAVX2Tail128LoopB + + VPADDD ·chacha20Constants<>(SB), AA1, AA1 + VPADDD state1StoreAVX2, BB1, BB1 + VPADDD state2StoreAVX2, CC1, CC1 + VPADDD DD0, DD1, DD1 + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + +openAVX2TailLoop: + CMPQ inl, $32 + JB openAVX2Tail + SUBQ $32, inl + + // Load for decryption + VPXOR (inp), AA0, AA0 + VMOVDQU AA0, (oup) + LEAQ (1*32)(inp), inp + LEAQ (1*32)(oup), oup + VMOVDQA BB0, AA0 + VMOVDQA CC0, BB0 + VMOVDQA DD0, CC0 + JMP openAVX2TailLoop + +openAVX2Tail: + CMPQ inl, $16 + VMOVDQA A0, A1 + JB openAVX2TailDone + SUBQ $16, inl + + // Load for decryption + VPXOR (inp), A0, T0 + VMOVDQU T0, (oup) + LEAQ (1*16)(inp), inp + LEAQ (1*16)(oup), oup + VPERM2I128 $0x11, AA0, AA0, AA0 + VMOVDQA A0, A1 + +openAVX2TailDone: + VZEROUPPER + JMP openSSETail16 + +// ---------------------------------------------------------------------------- +// Special optimization for the last 256 bytes of ciphertext +openAVX2Tail256: + // Need to decrypt up to 256 bytes - prepare four blocks + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA DD0, TT1 + VMOVDQA DD1, TT2 + + // Compute the number of iterations that will hash data + MOVQ inl, tmpStoreAVX2 + MOVQ inl, itr1 + SUBQ $128, itr1 + SHRQ $4, itr1 + MOVQ $10, itr2 + CMPQ itr1, $10 + CMOVQGT itr2, itr1 + MOVQ inp, inl + XORQ itr2, itr2 + +openAVX2Tail256LoopA: + polyAdd(0(inl)) + polyMulAVX2 + LEAQ 16(inl), inl + + // Perform ChaCha rounds, while hashing the remaining input +openAVX2Tail256LoopB: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 + INCQ itr2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 + CMPQ itr2, itr1 + JB openAVX2Tail256LoopA + + CMPQ itr2, $10 + JNE openAVX2Tail256LoopB + + MOVQ inl, itr2 + SUBQ inp, inl + MOVQ inl, itr1 + MOVQ tmpStoreAVX2, inl + + // Hash the remainder of data (if any) +openAVX2Tail256Hash: + ADDQ $16, itr1 + CMPQ itr1, inl + JGT openAVX2Tail256HashEnd + polyAdd (0(itr2)) + polyMulAVX2 + LEAQ 16(itr2), itr2 + JMP openAVX2Tail256Hash + +// Store 128 bytes safely, then go to store loop +openAVX2Tail256HashEnd: + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1 + VPADDD TT1, DD0, DD0; VPADDD TT2, DD1, DD1 + VPERM2I128 $0x02, AA0, BB0, AA2; VPERM2I128 $0x02, CC0, DD0, BB2; VPERM2I128 $0x13, AA0, BB0, CC2; VPERM2I128 $0x13, CC0, DD0, DD2 + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + + VPXOR (0*32)(inp), AA2, AA2; VPXOR (1*32)(inp), BB2, BB2; VPXOR (2*32)(inp), CC2, CC2; VPXOR (3*32)(inp), DD2, DD2 + VMOVDQU AA2, (0*32)(oup); VMOVDQU BB2, (1*32)(oup); VMOVDQU CC2, (2*32)(oup); VMOVDQU DD2, (3*32)(oup) + LEAQ (4*32)(inp), inp + LEAQ (4*32)(oup), oup + SUBQ $4*32, inl + + JMP openAVX2TailLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 384 bytes of ciphertext +openAVX2Tail384: + // Need to decrypt up to 384 bytes - prepare six blocks + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VPADDD ·avx2IncMask<>(SB), DD1, DD2 + VMOVDQA DD0, ctr0StoreAVX2 + VMOVDQA DD1, ctr1StoreAVX2 + VMOVDQA DD2, ctr2StoreAVX2 + + // Compute the number of iterations that will hash two blocks of data + MOVQ inl, tmpStoreAVX2 + MOVQ inl, itr1 + SUBQ $256, itr1 + SHRQ $4, itr1 + ADDQ $6, itr1 + MOVQ $10, itr2 + CMPQ itr1, $10 + CMOVQGT itr2, itr1 + MOVQ inp, inl + XORQ itr2, itr2 + + // Perform ChaCha rounds, while hashing the remaining input +openAVX2Tail384LoopB: + polyAdd(0(inl)) + polyMulAVX2 + LEAQ 16(inl), inl + +openAVX2Tail384LoopA: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 + polyAdd(0(inl)) + polyMulAVX2 + LEAQ 16(inl), inl + INCQ itr2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 + + CMPQ itr2, itr1 + JB openAVX2Tail384LoopB + + CMPQ itr2, $10 + JNE openAVX2Tail384LoopA + + MOVQ inl, itr2 + SUBQ inp, inl + MOVQ inl, itr1 + MOVQ tmpStoreAVX2, inl + +openAVX2Tail384Hash: + ADDQ $16, itr1 + CMPQ itr1, inl + JGT openAVX2Tail384HashEnd + polyAdd(0(itr2)) + polyMulAVX2 + LEAQ 16(itr2), itr2 + JMP openAVX2Tail384Hash + +// Store 256 bytes safely, then go to store loop +openAVX2Tail384HashEnd: + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2 + VPERM2I128 $0x02, AA0, BB0, TT0; VPERM2I128 $0x02, CC0, DD0, TT1; VPERM2I128 $0x13, AA0, BB0, TT2; VPERM2I128 $0x13, CC0, DD0, TT3 + VPXOR (0*32)(inp), TT0, TT0; VPXOR (1*32)(inp), TT1, TT1; VPXOR (2*32)(inp), TT2, TT2; VPXOR (3*32)(inp), TT3, TT3 + VMOVDQU TT0, (0*32)(oup); VMOVDQU TT1, (1*32)(oup); VMOVDQU TT2, (2*32)(oup); VMOVDQU TT3, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, TT0; VPERM2I128 $0x02, CC1, DD1, TT1; VPERM2I128 $0x13, AA1, BB1, TT2; VPERM2I128 $0x13, CC1, DD1, TT3 + VPXOR (4*32)(inp), TT0, TT0; VPXOR (5*32)(inp), TT1, TT1; VPXOR (6*32)(inp), TT2, TT2; VPXOR (7*32)(inp), TT3, TT3 + VMOVDQU TT0, (4*32)(oup); VMOVDQU TT1, (5*32)(oup); VMOVDQU TT2, (6*32)(oup); VMOVDQU TT3, (7*32)(oup) + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + LEAQ (8*32)(inp), inp + LEAQ (8*32)(oup), oup + SUBQ $8*32, inl + JMP openAVX2TailLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 512 bytes of ciphertext +openAVX2Tail512: + VMOVDQU ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + XORQ itr1, itr1 + MOVQ inp, itr2 + +openAVX2Tail512LoopB: + polyAdd(0(itr2)) + polyMulAVX2 + LEAQ (2*8)(itr2), itr2 + +openAVX2Tail512LoopA: + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyAdd(0*8(itr2)) + polyMulAVX2 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyAdd(2*8(itr2)) + polyMulAVX2 + LEAQ (4*8)(itr2), itr2 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 + INCQ itr1 + CMPQ itr1, $4 + JLT openAVX2Tail512LoopB + + CMPQ itr1, $10 + JNE openAVX2Tail512LoopA + + MOVQ inl, itr1 + SUBQ $384, itr1 + ANDQ $-16, itr1 + +openAVX2Tail512HashLoop: + TESTQ itr1, itr1 + JE openAVX2Tail512HashEnd + polyAdd(0(itr2)) + polyMulAVX2 + LEAQ 16(itr2), itr2 + SUBQ $16, itr1 + JMP openAVX2Tail512HashLoop + +openAVX2Tail512HashEnd: + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + VMOVDQA CC3, tmpStoreAVX2 + VPERM2I128 $0x02, AA0, BB0, CC3; VPERM2I128 $0x13, AA0, BB0, BB0; VPERM2I128 $0x02, CC0, DD0, AA0; VPERM2I128 $0x13, CC0, DD0, CC0 + VPXOR (0*32)(inp), CC3, CC3; VPXOR (1*32)(inp), AA0, AA0; VPXOR (2*32)(inp), BB0, BB0; VPXOR (3*32)(inp), CC0, CC0 + VMOVDQU CC3, (0*32)(oup); VMOVDQU AA0, (1*32)(oup); VMOVDQU BB0, (2*32)(oup); VMOVDQU CC0, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 + VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 + VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) + VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 + + LEAQ (12*32)(inp), inp + LEAQ (12*32)(oup), oup + SUBQ $12*32, inl + + JMP openAVX2TailLoop + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- +// func chacha20Poly1305Seal(dst, key, src, ad []byte) +TEXT ·chacha20Poly1305Seal(SB), 0, $288-96 + // For aligned stack access + MOVQ SP, BP + ADDQ $32, BP + ANDQ $-32, BP + MOVQ dst+0(FP), oup + MOVQ key+24(FP), keyp + MOVQ src+48(FP), inp + MOVQ src_len+56(FP), inl + MOVQ ad+72(FP), adp + + CMPB ·useAVX2(SB), $1 + JE chacha20Poly1305Seal_AVX2 + + // Special optimization, for very short buffers + CMPQ inl, $128 + JBE sealSSE128 // About 15% faster + + // In the seal case - prepare the poly key + 3 blocks of stream in the first iteration + MOVOU ·chacha20Constants<>(SB), A0 + MOVOU (1*16)(keyp), B0 + MOVOU (2*16)(keyp), C0 + MOVOU (3*16)(keyp), D0 + + // Store state on stack for future use + MOVO B0, state1Store + MOVO C0, state2Store + + // Load state, increment counter blocks + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + + // Store counters + MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + MOVQ $10, itr2 + +sealSSEIntroLoop: + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left + shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left + shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left + + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right + shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right + shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right + DECQ itr2 + JNE sealSSEIntroLoop + + // Add in the state + PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 + PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 + PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 + PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + + // Clamp and store the key + PAND ·polyClampMask<>(SB), A0 + MOVO A0, rStore + MOVO B0, sStore + + // Hash AAD + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + + MOVOU (0*16)(inp), A0; MOVOU (1*16)(inp), B0; MOVOU (2*16)(inp), C0; MOVOU (3*16)(inp), D0 + PXOR A0, A1; PXOR B0, B1; PXOR C0, C1; PXOR D0, D1 + MOVOU A1, (0*16)(oup); MOVOU B1, (1*16)(oup); MOVOU C1, (2*16)(oup); MOVOU D1, (3*16)(oup) + MOVOU (4*16)(inp), A0; MOVOU (5*16)(inp), B0; MOVOU (6*16)(inp), C0; MOVOU (7*16)(inp), D0 + PXOR A0, A2; PXOR B0, B2; PXOR C0, C2; PXOR D0, D2 + MOVOU A2, (4*16)(oup); MOVOU B2, (5*16)(oup); MOVOU C2, (6*16)(oup); MOVOU D2, (7*16)(oup) + + MOVQ $128, itr1 + SUBQ $128, inl + LEAQ 128(inp), inp + + MOVO A3, A1; MOVO B3, B1; MOVO C3, C1; MOVO D3, D1 + + CMPQ inl, $64 + JBE sealSSE128SealHash + + MOVOU (0*16)(inp), A0; MOVOU (1*16)(inp), B0; MOVOU (2*16)(inp), C0; MOVOU (3*16)(inp), D0 + PXOR A0, A3; PXOR B0, B3; PXOR C0, C3; PXOR D0, D3 + MOVOU A3, (8*16)(oup); MOVOU B3, (9*16)(oup); MOVOU C3, (10*16)(oup); MOVOU D3, (11*16)(oup) + + ADDQ $64, itr1 + SUBQ $64, inl + LEAQ 64(inp), inp + + MOVQ $2, itr1 + MOVQ $8, itr2 + + CMPQ inl, $64 + JBE sealSSETail64 + CMPQ inl, $128 + JBE sealSSETail128 + CMPQ inl, $192 + JBE sealSSETail192 + +sealSSEMainLoop: + // Load state, increment counter blocks + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO A2, A3; MOVO B2, B3; MOVO C2, C3; MOVO D2, D3; PADDL ·sseIncMask<>(SB), D3 + + // Store counters + MOVO D0, ctr0Store; MOVO D1, ctr1Store; MOVO D2, ctr2Store; MOVO D3, ctr3Store + +sealSSEInnerLoop: + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyAdd(0(oup)) + shiftB0Left; shiftB1Left; shiftB2Left; shiftB3Left + shiftC0Left; shiftC1Left; shiftC2Left; shiftC3Left + shiftD0Left; shiftD1Left; shiftD2Left; shiftD3Left + polyMulStage1 + polyMulStage2 + LEAQ (2*8)(oup), oup + MOVO C3, tmpStore + chachaQR(A0, B0, C0, D0, C3); chachaQR(A1, B1, C1, D1, C3); chachaQR(A2, B2, C2, D2, C3) + MOVO tmpStore, C3 + MOVO C1, tmpStore + polyMulStage3 + chachaQR(A3, B3, C3, D3, C1) + MOVO tmpStore, C1 + polyMulReduceStage + shiftB0Right; shiftB1Right; shiftB2Right; shiftB3Right + shiftC0Right; shiftC1Right; shiftC2Right; shiftC3Right + shiftD0Right; shiftD1Right; shiftD2Right; shiftD3Right + DECQ itr2 + JGE sealSSEInnerLoop + polyAdd(0(oup)) + polyMul + LEAQ (2*8)(oup), oup + DECQ itr1 + JG sealSSEInnerLoop + + // Add in the state + PADDD ·chacha20Constants<>(SB), A0; PADDD ·chacha20Constants<>(SB), A1; PADDD ·chacha20Constants<>(SB), A2; PADDD ·chacha20Constants<>(SB), A3 + PADDD state1Store, B0; PADDD state1Store, B1; PADDD state1Store, B2; PADDD state1Store, B3 + PADDD state2Store, C0; PADDD state2Store, C1; PADDD state2Store, C2; PADDD state2Store, C3 + PADDD ctr0Store, D0; PADDD ctr1Store, D1; PADDD ctr2Store, D2; PADDD ctr3Store, D3 + MOVO D3, tmpStore + + // Load - xor - store + MOVOU (0*16)(inp), D3; PXOR D3, A0 + MOVOU (1*16)(inp), D3; PXOR D3, B0 + MOVOU (2*16)(inp), D3; PXOR D3, C0 + MOVOU (3*16)(inp), D3; PXOR D3, D0 + MOVOU A0, (0*16)(oup) + MOVOU B0, (1*16)(oup) + MOVOU C0, (2*16)(oup) + MOVOU D0, (3*16)(oup) + MOVO tmpStore, D3 + + MOVOU (4*16)(inp), A0; MOVOU (5*16)(inp), B0; MOVOU (6*16)(inp), C0; MOVOU (7*16)(inp), D0 + PXOR A0, A1; PXOR B0, B1; PXOR C0, C1; PXOR D0, D1 + MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) + MOVOU (8*16)(inp), A0; MOVOU (9*16)(inp), B0; MOVOU (10*16)(inp), C0; MOVOU (11*16)(inp), D0 + PXOR A0, A2; PXOR B0, B2; PXOR C0, C2; PXOR D0, D2 + MOVOU A2, (8*16)(oup); MOVOU B2, (9*16)(oup); MOVOU C2, (10*16)(oup); MOVOU D2, (11*16)(oup) + ADDQ $192, inp + MOVQ $192, itr1 + SUBQ $192, inl + MOVO A3, A1 + MOVO B3, B1 + MOVO C3, C1 + MOVO D3, D1 + CMPQ inl, $64 + JBE sealSSE128SealHash + MOVOU (0*16)(inp), A0; MOVOU (1*16)(inp), B0; MOVOU (2*16)(inp), C0; MOVOU (3*16)(inp), D0 + PXOR A0, A3; PXOR B0, B3; PXOR C0, C3; PXOR D0, D3 + MOVOU A3, (12*16)(oup); MOVOU B3, (13*16)(oup); MOVOU C3, (14*16)(oup); MOVOU D3, (15*16)(oup) + LEAQ 64(inp), inp + SUBQ $64, inl + MOVQ $6, itr1 + MOVQ $4, itr2 + CMPQ inl, $192 + JG sealSSEMainLoop + + MOVQ inl, itr1 + TESTQ inl, inl + JE sealSSE128SealHash + MOVQ $6, itr1 + CMPQ inl, $64 + JBE sealSSETail64 + CMPQ inl, $128 + JBE sealSSETail128 + JMP sealSSETail192 + +// ---------------------------------------------------------------------------- +// Special optimization for the last 64 bytes of plaintext +sealSSETail64: + // Need to encrypt up to 64 bytes - prepare single block, hash 192 or 256 bytes + MOVO ·chacha20Constants<>(SB), A1 + MOVO state1Store, B1 + MOVO state2Store, C1 + MOVO ctr3Store, D1 + PADDL ·sseIncMask<>(SB), D1 + MOVO D1, ctr0Store + +sealSSETail64LoopA: + // Perform ChaCha rounds, while hashing the previously encrypted ciphertext + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealSSETail64LoopB: + chachaQR(A1, B1, C1, D1, T1) + shiftB1Left; shiftC1Left; shiftD1Left + chachaQR(A1, B1, C1, D1, T1) + shiftB1Right; shiftC1Right; shiftD1Right + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + + DECQ itr1 + JG sealSSETail64LoopA + + DECQ itr2 + JGE sealSSETail64LoopB + PADDL ·chacha20Constants<>(SB), A1 + PADDL state1Store, B1 + PADDL state2Store, C1 + PADDL ctr0Store, D1 + + JMP sealSSE128Seal + +// ---------------------------------------------------------------------------- +// Special optimization for the last 128 bytes of plaintext +sealSSETail128: + // Need to encrypt up to 128 bytes - prepare two blocks, hash 192 or 256 bytes + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr0Store + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr1Store + +sealSSETail128LoopA: + // Perform ChaCha rounds, while hashing the previously encrypted ciphertext + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealSSETail128LoopB: + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) + shiftB0Left; shiftC0Left; shiftD0Left + shiftB1Left; shiftC1Left; shiftD1Left + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0) + shiftB0Right; shiftC0Right; shiftD0Right + shiftB1Right; shiftC1Right; shiftD1Right + + DECQ itr1 + JG sealSSETail128LoopA + + DECQ itr2 + JGE sealSSETail128LoopB + + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1 + PADDL state1Store, B0; PADDL state1Store, B1 + PADDL state2Store, C0; PADDL state2Store, C1 + PADDL ctr0Store, D0; PADDL ctr1Store, D1 + + MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 + PXOR T0, A0; PXOR T1, B0; PXOR T2, C0; PXOR T3, D0 + MOVOU A0, (0*16)(oup); MOVOU B0, (1*16)(oup); MOVOU C0, (2*16)(oup); MOVOU D0, (3*16)(oup) + + MOVQ $64, itr1 + LEAQ 64(inp), inp + SUBQ $64, inl + + JMP sealSSE128SealHash + +// ---------------------------------------------------------------------------- +// Special optimization for the last 192 bytes of plaintext +sealSSETail192: + // Need to encrypt up to 192 bytes - prepare three blocks, hash 192 or 256 bytes + MOVO ·chacha20Constants<>(SB), A0; MOVO state1Store, B0; MOVO state2Store, C0; MOVO ctr3Store, D0; PADDL ·sseIncMask<>(SB), D0; MOVO D0, ctr0Store + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1; MOVO D1, ctr1Store + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2; MOVO D2, ctr2Store + +sealSSETail192LoopA: + // Perform ChaCha rounds, while hashing the previously encrypted ciphertext + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealSSETail192LoopB: + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Left; shiftC0Left; shiftD0Left + shiftB1Left; shiftC1Left; shiftD1Left + shiftB2Left; shiftC2Left; shiftD2Left + + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Right; shiftC0Right; shiftD0Right + shiftB1Right; shiftC1Right; shiftD1Right + shiftB2Right; shiftC2Right; shiftD2Right + + DECQ itr1 + JG sealSSETail192LoopA + + DECQ itr2 + JGE sealSSETail192LoopB + + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 + PADDL state1Store, B0; PADDL state1Store, B1; PADDL state1Store, B2 + PADDL state2Store, C0; PADDL state2Store, C1; PADDL state2Store, C2 + PADDL ctr0Store, D0; PADDL ctr1Store, D1; PADDL ctr2Store, D2 + + MOVOU (0*16)(inp), T0; MOVOU (1*16)(inp), T1; MOVOU (2*16)(inp), T2; MOVOU (3*16)(inp), T3 + PXOR T0, A0; PXOR T1, B0; PXOR T2, C0; PXOR T3, D0 + MOVOU A0, (0*16)(oup); MOVOU B0, (1*16)(oup); MOVOU C0, (2*16)(oup); MOVOU D0, (3*16)(oup) + MOVOU (4*16)(inp), T0; MOVOU (5*16)(inp), T1; MOVOU (6*16)(inp), T2; MOVOU (7*16)(inp), T3 + PXOR T0, A1; PXOR T1, B1; PXOR T2, C1; PXOR T3, D1 + MOVOU A1, (4*16)(oup); MOVOU B1, (5*16)(oup); MOVOU C1, (6*16)(oup); MOVOU D1, (7*16)(oup) + + MOVO A2, A1 + MOVO B2, B1 + MOVO C2, C1 + MOVO D2, D1 + MOVQ $128, itr1 + LEAQ 128(inp), inp + SUBQ $128, inl + + JMP sealSSE128SealHash + +// ---------------------------------------------------------------------------- +// Special seal optimization for buffers smaller than 129 bytes +sealSSE128: + // For up to 128 bytes of ciphertext and 64 bytes for the poly key, we require to process three blocks + MOVOU ·chacha20Constants<>(SB), A0; MOVOU (1*16)(keyp), B0; MOVOU (2*16)(keyp), C0; MOVOU (3*16)(keyp), D0 + MOVO A0, A1; MOVO B0, B1; MOVO C0, C1; MOVO D0, D1; PADDL ·sseIncMask<>(SB), D1 + MOVO A1, A2; MOVO B1, B2; MOVO C1, C2; MOVO D1, D2; PADDL ·sseIncMask<>(SB), D2 + MOVO B0, T1; MOVO C0, T2; MOVO D1, T3 + MOVQ $10, itr2 + +sealSSE128InnerCipherLoop: + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Left; shiftB1Left; shiftB2Left + shiftC0Left; shiftC1Left; shiftC2Left + shiftD0Left; shiftD1Left; shiftD2Left + chachaQR(A0, B0, C0, D0, T0); chachaQR(A1, B1, C1, D1, T0); chachaQR(A2, B2, C2, D2, T0) + shiftB0Right; shiftB1Right; shiftB2Right + shiftC0Right; shiftC1Right; shiftC2Right + shiftD0Right; shiftD1Right; shiftD2Right + DECQ itr2 + JNE sealSSE128InnerCipherLoop + + // A0|B0 hold the Poly1305 32-byte key, C0,D0 can be discarded + PADDL ·chacha20Constants<>(SB), A0; PADDL ·chacha20Constants<>(SB), A1; PADDL ·chacha20Constants<>(SB), A2 + PADDL T1, B0; PADDL T1, B1; PADDL T1, B2 + PADDL T2, C1; PADDL T2, C2 + PADDL T3, D1; PADDL ·sseIncMask<>(SB), T3; PADDL T3, D2 + PAND ·polyClampMask<>(SB), A0 + MOVOU A0, rStore + MOVOU B0, sStore + + // Hash + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + XORQ itr1, itr1 + +sealSSE128SealHash: + // itr1 holds the number of bytes encrypted but not yet hashed + CMPQ itr1, $16 + JB sealSSE128Seal + polyAdd(0(oup)) + polyMul + + SUBQ $16, itr1 + ADDQ $16, oup + + JMP sealSSE128SealHash + +sealSSE128Seal: + CMPQ inl, $16 + JB sealSSETail + SUBQ $16, inl + + // Load for decryption + MOVOU (inp), T0 + PXOR T0, A1 + MOVOU A1, (oup) + LEAQ (1*16)(inp), inp + LEAQ (1*16)(oup), oup + + // Extract for hashing + MOVQ A1, t0 + PSRLDQ $8, A1 + MOVQ A1, t1 + ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 + polyMul + + // Shift the stream "left" + MOVO B1, A1 + MOVO C1, B1 + MOVO D1, C1 + MOVO A2, D1 + MOVO B2, A2 + MOVO C2, B2 + MOVO D2, C2 + JMP sealSSE128Seal + +sealSSETail: + TESTQ inl, inl + JE sealSSEFinalize + + // We can only load the PT one byte at a time to avoid read after end of buffer + MOVQ inl, itr2 + SHLQ $4, itr2 + LEAQ ·andMask<>(SB), t0 + MOVQ inl, itr1 + LEAQ -1(inp)(inl*1), inp + XORQ t2, t2 + XORQ t3, t3 + XORQ AX, AX + +sealSSETailLoadLoop: + SHLQ $8, t2, t3 + SHLQ $8, t2 + MOVB (inp), AX + XORQ AX, t2 + LEAQ -1(inp), inp + DECQ itr1 + JNE sealSSETailLoadLoop + MOVQ t2, 0+tmpStore + MOVQ t3, 8+tmpStore + PXOR 0+tmpStore, A1 + MOVOU A1, (oup) + MOVOU -16(t0)(itr2*1), T0 + PAND T0, A1 + MOVQ A1, t0 + PSRLDQ $8, A1 + MOVQ A1, t1 + ADDQ t0, acc0; ADCQ t1, acc1; ADCQ $1, acc2 + polyMul + + ADDQ inl, oup + +sealSSEFinalize: + // Hash in the buffer lengths + ADDQ ad_len+80(FP), acc0 + ADCQ src_len+56(FP), acc1 + ADCQ $1, acc2 + polyMul + + // Final reduce + MOVQ acc0, t0 + MOVQ acc1, t1 + MOVQ acc2, t2 + SUBQ $-5, acc0 + SBBQ $-1, acc1 + SBBQ $3, acc2 + CMOVQCS t0, acc0 + CMOVQCS t1, acc1 + CMOVQCS t2, acc2 + + // Add in the "s" part of the key + ADDQ 0+sStore, acc0 + ADCQ 8+sStore, acc1 + + // Finally store the tag at the end of the message + MOVQ acc0, (0*8)(oup) + MOVQ acc1, (1*8)(oup) + RET + +// ---------------------------------------------------------------------------- +// ------------------------- AVX2 Code ---------------------------------------- +chacha20Poly1305Seal_AVX2: + VZEROUPPER + VMOVDQU ·chacha20Constants<>(SB), AA0 + BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x70; BYTE $0x10 // broadcasti128 16(r8), ymm14 + BYTE $0xc4; BYTE $0x42; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x20 // broadcasti128 32(r8), ymm12 + BYTE $0xc4; BYTE $0xc2; BYTE $0x7d; BYTE $0x5a; BYTE $0x60; BYTE $0x30 // broadcasti128 48(r8), ymm4 + VPADDD ·avx2InitMask<>(SB), DD0, DD0 + + // Special optimizations, for very short buffers + CMPQ inl, $192 + JBE seal192AVX2 // 33% faster + CMPQ inl, $320 + JBE seal320AVX2 // 17% faster + + // For the general key prepare the key first - as a byproduct we have 64 bytes of cipher stream + VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3; VMOVDQA BB0, state1StoreAVX2 + VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3; VMOVDQA CC0, state2StoreAVX2 + VPADDD ·avx2IncMask<>(SB), DD0, DD1; VMOVDQA DD0, ctr0StoreAVX2 + VPADDD ·avx2IncMask<>(SB), DD1, DD2; VMOVDQA DD1, ctr1StoreAVX2 + VPADDD ·avx2IncMask<>(SB), DD2, DD3; VMOVDQA DD2, ctr2StoreAVX2 + VMOVDQA DD3, ctr3StoreAVX2 + MOVQ $10, itr2 + +sealAVX2IntroLoop: + VMOVDQA CC3, tmpStoreAVX2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) + VMOVDQA tmpStoreAVX2, CC3 + VMOVDQA CC1, tmpStoreAVX2 + chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) + VMOVDQA tmpStoreAVX2, CC1 + + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $12, DD0, DD0, DD0 + VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $12, DD1, DD1, DD1 + VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $12, DD2, DD2, DD2 + VPALIGNR $4, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $12, DD3, DD3, DD3 + + VMOVDQA CC3, tmpStoreAVX2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) + VMOVDQA tmpStoreAVX2, CC3 + VMOVDQA CC1, tmpStoreAVX2 + chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) + VMOVDQA tmpStoreAVX2, CC1 + + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $4, DD0, DD0, DD0 + VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $4, DD1, DD1, DD1 + VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $4, DD2, DD2, DD2 + VPALIGNR $12, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $4, DD3, DD3, DD3 + DECQ itr2 + JNE sealAVX2IntroLoop + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + + VPERM2I128 $0x13, CC0, DD0, CC0 // Stream bytes 96 - 127 + VPERM2I128 $0x02, AA0, BB0, DD0 // The Poly1305 key + VPERM2I128 $0x13, AA0, BB0, AA0 // Stream bytes 64 - 95 + + // Clamp and store poly key + VPAND ·polyClampMask<>(SB), DD0, DD0 + VMOVDQA DD0, rsStoreAVX2 + + // Hash AD + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + + // Can store at least 320 bytes + VPXOR (0*32)(inp), AA0, AA0 + VPXOR (1*32)(inp), CC0, CC0 + VMOVDQU AA0, (0*32)(oup) + VMOVDQU CC0, (1*32)(oup) + + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (2*32)(inp), AA0, AA0; VPXOR (3*32)(inp), BB0, BB0; VPXOR (4*32)(inp), CC0, CC0; VPXOR (5*32)(inp), DD0, DD0 + VMOVDQU AA0, (2*32)(oup); VMOVDQU BB0, (3*32)(oup); VMOVDQU CC0, (4*32)(oup); VMOVDQU DD0, (5*32)(oup) + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (6*32)(inp), AA0, AA0; VPXOR (7*32)(inp), BB0, BB0; VPXOR (8*32)(inp), CC0, CC0; VPXOR (9*32)(inp), DD0, DD0 + VMOVDQU AA0, (6*32)(oup); VMOVDQU BB0, (7*32)(oup); VMOVDQU CC0, (8*32)(oup); VMOVDQU DD0, (9*32)(oup) + + MOVQ $320, itr1 + SUBQ $320, inl + LEAQ 320(inp), inp + + VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, CC3, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, CC3, DD3, DD0 + CMPQ inl, $128 + JBE sealAVX2SealHash + + VPXOR (0*32)(inp), AA0, AA0; VPXOR (1*32)(inp), BB0, BB0; VPXOR (2*32)(inp), CC0, CC0; VPXOR (3*32)(inp), DD0, DD0 + VMOVDQU AA0, (10*32)(oup); VMOVDQU BB0, (11*32)(oup); VMOVDQU CC0, (12*32)(oup); VMOVDQU DD0, (13*32)(oup) + SUBQ $128, inl + LEAQ 128(inp), inp + + MOVQ $8, itr1 + MOVQ $2, itr2 + + CMPQ inl, $128 + JBE sealAVX2Tail128 + CMPQ inl, $256 + JBE sealAVX2Tail256 + CMPQ inl, $384 + JBE sealAVX2Tail384 + CMPQ inl, $512 + JBE sealAVX2Tail512 + + // We have 448 bytes to hash, but main loop hashes 512 bytes at a time - perform some rounds, before the main loop + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + + VMOVDQA CC3, tmpStoreAVX2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) + VMOVDQA tmpStoreAVX2, CC3 + VMOVDQA CC1, tmpStoreAVX2 + chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) + VMOVDQA tmpStoreAVX2, CC1 + + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $12, DD0, DD0, DD0 + VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $12, DD1, DD1, DD1 + VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $12, DD2, DD2, DD2 + VPALIGNR $4, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $12, DD3, DD3, DD3 + + VMOVDQA CC3, tmpStoreAVX2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, CC3); chachaQR_AVX2(AA1, BB1, CC1, DD1, CC3); chachaQR_AVX2(AA2, BB2, CC2, DD2, CC3) + VMOVDQA tmpStoreAVX2, CC3 + VMOVDQA CC1, tmpStoreAVX2 + chachaQR_AVX2(AA3, BB3, CC3, DD3, CC1) + VMOVDQA tmpStoreAVX2, CC1 + + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $4, DD0, DD0, DD0 + VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $4, DD1, DD1, DD1 + VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $4, DD2, DD2, DD2 + VPALIGNR $12, BB3, BB3, BB3; VPALIGNR $8, CC3, CC3, CC3; VPALIGNR $4, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + + SUBQ $16, oup // Adjust the pointer + MOVQ $9, itr1 + JMP sealAVX2InternalLoopStart + +sealAVX2MainLoop: + // Load state, increment counter blocks, store the incremented counters + VMOVDQU ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + MOVQ $10, itr1 + +sealAVX2InternalLoop: + polyAdd(0*8(oup)) + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + polyMulStage1_AVX2 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + polyMulStage2_AVX2 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyMulStage3_AVX2 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulReduceStage + +sealAVX2InternalLoopStart: + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + polyAdd(2*8(oup)) + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + polyMulStage1_AVX2 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulStage2_AVX2 + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + polyMulStage3_AVX2 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + polyMulReduceStage + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyAdd(4*8(oup)) + LEAQ (6*8)(oup), oup + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulStage1_AVX2 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + polyMulStage2_AVX2 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + polyMulStage3_AVX2 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyMulReduceStage + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 + DECQ itr1 + JNE sealAVX2InternalLoop + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + VMOVDQA CC3, tmpStoreAVX2 + + // We only hashed 480 of the 512 bytes available - hash the remaining 32 here + polyAdd(0*8(oup)) + polyMulAVX2 + LEAQ (4*8)(oup), oup + VPERM2I128 $0x02, AA0, BB0, CC3; VPERM2I128 $0x13, AA0, BB0, BB0; VPERM2I128 $0x02, CC0, DD0, AA0; VPERM2I128 $0x13, CC0, DD0, CC0 + VPXOR (0*32)(inp), CC3, CC3; VPXOR (1*32)(inp), AA0, AA0; VPXOR (2*32)(inp), BB0, BB0; VPXOR (3*32)(inp), CC0, CC0 + VMOVDQU CC3, (0*32)(oup); VMOVDQU AA0, (1*32)(oup); VMOVDQU BB0, (2*32)(oup); VMOVDQU CC0, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, AA0; VPERM2I128 $0x02, CC1, DD1, BB0; VPERM2I128 $0x13, AA1, BB1, CC0; VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 + VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + + // and here + polyAdd(-2*8(oup)) + polyMulAVX2 + VPERM2I128 $0x02, AA2, BB2, AA0; VPERM2I128 $0x02, CC2, DD2, BB0; VPERM2I128 $0x13, AA2, BB2, CC0; VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 + VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) + VPERM2I128 $0x02, AA3, BB3, AA0; VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0; VPERM2I128 $0x13, AA3, BB3, CC0; VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 + VPXOR (12*32)(inp), AA0, AA0; VPXOR (13*32)(inp), BB0, BB0; VPXOR (14*32)(inp), CC0, CC0; VPXOR (15*32)(inp), DD0, DD0 + VMOVDQU AA0, (12*32)(oup); VMOVDQU BB0, (13*32)(oup); VMOVDQU CC0, (14*32)(oup); VMOVDQU DD0, (15*32)(oup) + LEAQ (32*16)(inp), inp + SUBQ $(32*16), inl + CMPQ inl, $512 + JG sealAVX2MainLoop + + // Tail can only hash 480 bytes + polyAdd(0*8(oup)) + polyMulAVX2 + polyAdd(2*8(oup)) + polyMulAVX2 + LEAQ 32(oup), oup + + MOVQ $10, itr1 + MOVQ $0, itr2 + CMPQ inl, $128 + JBE sealAVX2Tail128 + CMPQ inl, $256 + JBE sealAVX2Tail256 + CMPQ inl, $384 + JBE sealAVX2Tail384 + JMP sealAVX2Tail512 + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 193 bytes +seal192AVX2: + // For up to 192 bytes of ciphertext and 64 bytes for the poly key, we process four blocks + VMOVDQA AA0, AA1 + VMOVDQA BB0, BB1 + VMOVDQA CC0, CC1 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA AA0, AA2 + VMOVDQA BB0, BB2 + VMOVDQA CC0, CC2 + VMOVDQA DD0, DD2 + VMOVDQA DD1, TT3 + MOVQ $10, itr2 + +sealAVX2192InnerCipherLoop: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 + DECQ itr2 + JNE sealAVX2192InnerCipherLoop + VPADDD AA2, AA0, AA0; VPADDD AA2, AA1, AA1 + VPADDD BB2, BB0, BB0; VPADDD BB2, BB1, BB1 + VPADDD CC2, CC0, CC0; VPADDD CC2, CC1, CC1 + VPADDD DD2, DD0, DD0; VPADDD TT3, DD1, DD1 + VPERM2I128 $0x02, AA0, BB0, TT0 + + // Clamp and store poly key + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for up to 192 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + VPERM2I128 $0x02, AA1, BB1, CC0 + VPERM2I128 $0x02, CC1, DD1, DD0 + VPERM2I128 $0x13, AA1, BB1, AA1 + VPERM2I128 $0x13, CC1, DD1, BB1 + +sealAVX2ShortSeal: + // Hash aad + MOVQ ad_len+80(FP), itr2 + CALL polyHashADInternal<>(SB) + XORQ itr1, itr1 + +sealAVX2SealHash: + // itr1 holds the number of bytes encrypted but not yet hashed + CMPQ itr1, $16 + JB sealAVX2ShortSealLoop + polyAdd(0(oup)) + polyMul + SUBQ $16, itr1 + ADDQ $16, oup + JMP sealAVX2SealHash + +sealAVX2ShortSealLoop: + CMPQ inl, $32 + JB sealAVX2ShortTail32 + SUBQ $32, inl + + // Load for encryption + VPXOR (inp), AA0, AA0 + VMOVDQU AA0, (oup) + LEAQ (1*32)(inp), inp + + // Now can hash + polyAdd(0*8(oup)) + polyMulAVX2 + polyAdd(2*8(oup)) + polyMulAVX2 + LEAQ (1*32)(oup), oup + + // Shift stream left + VMOVDQA BB0, AA0 + VMOVDQA CC0, BB0 + VMOVDQA DD0, CC0 + VMOVDQA AA1, DD0 + VMOVDQA BB1, AA1 + VMOVDQA CC1, BB1 + VMOVDQA DD1, CC1 + VMOVDQA AA2, DD1 + VMOVDQA BB2, AA2 + JMP sealAVX2ShortSealLoop + +sealAVX2ShortTail32: + CMPQ inl, $16 + VMOVDQA A0, A1 + JB sealAVX2ShortDone + + SUBQ $16, inl + + // Load for encryption + VPXOR (inp), A0, T0 + VMOVDQU T0, (oup) + LEAQ (1*16)(inp), inp + + // Hash + polyAdd(0*8(oup)) + polyMulAVX2 + LEAQ (1*16)(oup), oup + VPERM2I128 $0x11, AA0, AA0, AA0 + VMOVDQA A0, A1 + +sealAVX2ShortDone: + VZEROUPPER + JMP sealSSETail + +// ---------------------------------------------------------------------------- +// Special optimization for buffers smaller than 321 bytes +seal320AVX2: + // For up to 320 bytes of ciphertext and 64 bytes for the poly key, we process six blocks + VMOVDQA AA0, AA1; VMOVDQA BB0, BB1; VMOVDQA CC0, CC1; VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA AA0, AA2; VMOVDQA BB0, BB2; VMOVDQA CC0, CC2; VPADDD ·avx2IncMask<>(SB), DD1, DD2 + VMOVDQA BB0, TT1; VMOVDQA CC0, TT2; VMOVDQA DD0, TT3 + MOVQ $10, itr2 + +sealAVX2320InnerCipherLoop: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 + DECQ itr2 + JNE sealAVX2320InnerCipherLoop + + VMOVDQA ·chacha20Constants<>(SB), TT0 + VPADDD TT0, AA0, AA0; VPADDD TT0, AA1, AA1; VPADDD TT0, AA2, AA2 + VPADDD TT1, BB0, BB0; VPADDD TT1, BB1, BB1; VPADDD TT1, BB2, BB2 + VPADDD TT2, CC0, CC0; VPADDD TT2, CC1, CC1; VPADDD TT2, CC2, CC2 + VMOVDQA ·avx2IncMask<>(SB), TT0 + VPADDD TT3, DD0, DD0; VPADDD TT0, TT3, TT3 + VPADDD TT3, DD1, DD1; VPADDD TT0, TT3, TT3 + VPADDD TT3, DD2, DD2 + + // Clamp and store poly key + VPERM2I128 $0x02, AA0, BB0, TT0 + VPAND ·polyClampMask<>(SB), TT0, TT0 + VMOVDQA TT0, rsStoreAVX2 + + // Stream for up to 320 bytes + VPERM2I128 $0x13, AA0, BB0, AA0 + VPERM2I128 $0x13, CC0, DD0, BB0 + VPERM2I128 $0x02, AA1, BB1, CC0 + VPERM2I128 $0x02, CC1, DD1, DD0 + VPERM2I128 $0x13, AA1, BB1, AA1 + VPERM2I128 $0x13, CC1, DD1, BB1 + VPERM2I128 $0x02, AA2, BB2, CC1 + VPERM2I128 $0x02, CC2, DD2, DD1 + VPERM2I128 $0x13, AA2, BB2, AA2 + VPERM2I128 $0x13, CC2, DD2, BB2 + JMP sealAVX2ShortSeal + +// ---------------------------------------------------------------------------- +// Special optimization for the last 128 bytes of ciphertext +sealAVX2Tail128: + // Need to decrypt up to 128 bytes - prepare two blocks + // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed + // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed + VMOVDQA ·chacha20Constants<>(SB), AA0 + VMOVDQA state1StoreAVX2, BB0 + VMOVDQA state2StoreAVX2, CC0 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0 + VMOVDQA DD0, DD1 + +sealAVX2Tail128LoopA: + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealAVX2Tail128LoopB: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) + polyAdd(0(oup)) + polyMul + VPALIGNR $4, BB0, BB0, BB0 + VPALIGNR $8, CC0, CC0, CC0 + VPALIGNR $12, DD0, DD0, DD0 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0) + polyAdd(16(oup)) + polyMul + LEAQ 32(oup), oup + VPALIGNR $12, BB0, BB0, BB0 + VPALIGNR $8, CC0, CC0, CC0 + VPALIGNR $4, DD0, DD0, DD0 + DECQ itr1 + JG sealAVX2Tail128LoopA + DECQ itr2 + JGE sealAVX2Tail128LoopB + + VPADDD ·chacha20Constants<>(SB), AA0, AA1 + VPADDD state1StoreAVX2, BB0, BB1 + VPADDD state2StoreAVX2, CC0, CC1 + VPADDD DD1, DD0, DD1 + + VPERM2I128 $0x02, AA1, BB1, AA0 + VPERM2I128 $0x02, CC1, DD1, BB0 + VPERM2I128 $0x13, AA1, BB1, CC0 + VPERM2I128 $0x13, CC1, DD1, DD0 + JMP sealAVX2ShortSealLoop + +// ---------------------------------------------------------------------------- +// Special optimization for the last 256 bytes of ciphertext +sealAVX2Tail256: + // Need to decrypt up to 256 bytes - prepare two blocks + // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed + // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA ·chacha20Constants<>(SB), AA1 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA state1StoreAVX2, BB1 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA state2StoreAVX2, CC1 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD1 + VMOVDQA DD0, TT1 + VMOVDQA DD1, TT2 + +sealAVX2Tail256LoopA: + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealAVX2Tail256LoopB: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + polyAdd(0(oup)) + polyMul + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0) + polyAdd(16(oup)) + polyMul + LEAQ 32(oup), oup + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1 + DECQ itr1 + JG sealAVX2Tail256LoopA + DECQ itr2 + JGE sealAVX2Tail256LoopB + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1 + VPADDD TT1, DD0, DD0; VPADDD TT2, DD1, DD1 + VPERM2I128 $0x02, AA0, BB0, TT0 + VPERM2I128 $0x02, CC0, DD0, TT1 + VPERM2I128 $0x13, AA0, BB0, TT2 + VPERM2I128 $0x13, CC0, DD0, TT3 + VPXOR (0*32)(inp), TT0, TT0; VPXOR (1*32)(inp), TT1, TT1; VPXOR (2*32)(inp), TT2, TT2; VPXOR (3*32)(inp), TT3, TT3 + VMOVDQU TT0, (0*32)(oup); VMOVDQU TT1, (1*32)(oup); VMOVDQU TT2, (2*32)(oup); VMOVDQU TT3, (3*32)(oup) + MOVQ $128, itr1 + LEAQ 128(inp), inp + SUBQ $128, inl + VPERM2I128 $0x02, AA1, BB1, AA0 + VPERM2I128 $0x02, CC1, DD1, BB0 + VPERM2I128 $0x13, AA1, BB1, CC0 + VPERM2I128 $0x13, CC1, DD1, DD0 + + JMP sealAVX2SealHash + +// ---------------------------------------------------------------------------- +// Special optimization for the last 384 bytes of ciphertext +sealAVX2Tail384: + // Need to decrypt up to 384 bytes - prepare two blocks + // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed + // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2 + VMOVDQA DD0, TT1; VMOVDQA DD1, TT2; VMOVDQA DD2, TT3 + +sealAVX2Tail384LoopA: + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealAVX2Tail384LoopB: + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + polyAdd(0(oup)) + polyMul + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2 + chachaQR_AVX2(AA0, BB0, CC0, DD0, TT0); chachaQR_AVX2(AA1, BB1, CC1, DD1, TT0); chachaQR_AVX2(AA2, BB2, CC2, DD2, TT0) + polyAdd(16(oup)) + polyMul + LEAQ 32(oup), oup + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2 + DECQ itr1 + JG sealAVX2Tail384LoopA + DECQ itr2 + JGE sealAVX2Tail384LoopB + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2 + VPADDD TT1, DD0, DD0; VPADDD TT2, DD1, DD1; VPADDD TT3, DD2, DD2 + VPERM2I128 $0x02, AA0, BB0, TT0 + VPERM2I128 $0x02, CC0, DD0, TT1 + VPERM2I128 $0x13, AA0, BB0, TT2 + VPERM2I128 $0x13, CC0, DD0, TT3 + VPXOR (0*32)(inp), TT0, TT0; VPXOR (1*32)(inp), TT1, TT1; VPXOR (2*32)(inp), TT2, TT2; VPXOR (3*32)(inp), TT3, TT3 + VMOVDQU TT0, (0*32)(oup); VMOVDQU TT1, (1*32)(oup); VMOVDQU TT2, (2*32)(oup); VMOVDQU TT3, (3*32)(oup) + VPERM2I128 $0x02, AA1, BB1, TT0 + VPERM2I128 $0x02, CC1, DD1, TT1 + VPERM2I128 $0x13, AA1, BB1, TT2 + VPERM2I128 $0x13, CC1, DD1, TT3 + VPXOR (4*32)(inp), TT0, TT0; VPXOR (5*32)(inp), TT1, TT1; VPXOR (6*32)(inp), TT2, TT2; VPXOR (7*32)(inp), TT3, TT3 + VMOVDQU TT0, (4*32)(oup); VMOVDQU TT1, (5*32)(oup); VMOVDQU TT2, (6*32)(oup); VMOVDQU TT3, (7*32)(oup) + MOVQ $256, itr1 + LEAQ 256(inp), inp + SUBQ $256, inl + VPERM2I128 $0x02, AA2, BB2, AA0 + VPERM2I128 $0x02, CC2, DD2, BB0 + VPERM2I128 $0x13, AA2, BB2, CC0 + VPERM2I128 $0x13, CC2, DD2, DD0 + + JMP sealAVX2SealHash + +// ---------------------------------------------------------------------------- +// Special optimization for the last 512 bytes of ciphertext +sealAVX2Tail512: + // Need to decrypt up to 512 bytes - prepare two blocks + // If we got here after the main loop - there are 512 encrypted bytes waiting to be hashed + // If we got here before the main loop - there are 448 encrpyred bytes waiting to be hashed + VMOVDQA ·chacha20Constants<>(SB), AA0; VMOVDQA AA0, AA1; VMOVDQA AA0, AA2; VMOVDQA AA0, AA3 + VMOVDQA state1StoreAVX2, BB0; VMOVDQA BB0, BB1; VMOVDQA BB0, BB2; VMOVDQA BB0, BB3 + VMOVDQA state2StoreAVX2, CC0; VMOVDQA CC0, CC1; VMOVDQA CC0, CC2; VMOVDQA CC0, CC3 + VMOVDQA ctr3StoreAVX2, DD0 + VPADDD ·avx2IncMask<>(SB), DD0, DD0; VPADDD ·avx2IncMask<>(SB), DD0, DD1; VPADDD ·avx2IncMask<>(SB), DD1, DD2; VPADDD ·avx2IncMask<>(SB), DD2, DD3 + VMOVDQA DD0, ctr0StoreAVX2; VMOVDQA DD1, ctr1StoreAVX2; VMOVDQA DD2, ctr2StoreAVX2; VMOVDQA DD3, ctr3StoreAVX2 + +sealAVX2Tail512LoopA: + polyAdd(0(oup)) + polyMul + LEAQ 16(oup), oup + +sealAVX2Tail512LoopB: + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + polyAdd(0*8(oup)) + polyMulAVX2 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPALIGNR $4, BB0, BB0, BB0; VPALIGNR $4, BB1, BB1, BB1; VPALIGNR $4, BB2, BB2, BB2; VPALIGNR $4, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $12, DD0, DD0, DD0; VPALIGNR $12, DD1, DD1, DD1; VPALIGNR $12, DD2, DD2, DD2; VPALIGNR $12, DD3, DD3, DD3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol16<>(SB), DD0, DD0; VPSHUFB ·rol16<>(SB), DD1, DD1; VPSHUFB ·rol16<>(SB), DD2, DD2; VPSHUFB ·rol16<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + polyAdd(2*8(oup)) + polyMulAVX2 + LEAQ (4*8)(oup), oup + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $12, BB0, CC3; VPSRLD $20, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $12, BB1, CC3; VPSRLD $20, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $12, BB2, CC3; VPSRLD $20, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $12, BB3, CC3; VPSRLD $20, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPADDD BB0, AA0, AA0; VPADDD BB1, AA1, AA1; VPADDD BB2, AA2, AA2; VPADDD BB3, AA3, AA3 + VPXOR AA0, DD0, DD0; VPXOR AA1, DD1, DD1; VPXOR AA2, DD2, DD2; VPXOR AA3, DD3, DD3 + VPSHUFB ·rol8<>(SB), DD0, DD0; VPSHUFB ·rol8<>(SB), DD1, DD1; VPSHUFB ·rol8<>(SB), DD2, DD2; VPSHUFB ·rol8<>(SB), DD3, DD3 + VPADDD DD0, CC0, CC0; VPADDD DD1, CC1, CC1; VPADDD DD2, CC2, CC2; VPADDD DD3, CC3, CC3 + VPXOR CC0, BB0, BB0; VPXOR CC1, BB1, BB1; VPXOR CC2, BB2, BB2; VPXOR CC3, BB3, BB3 + VMOVDQA CC3, tmpStoreAVX2 + VPSLLD $7, BB0, CC3; VPSRLD $25, BB0, BB0; VPXOR CC3, BB0, BB0 + VPSLLD $7, BB1, CC3; VPSRLD $25, BB1, BB1; VPXOR CC3, BB1, BB1 + VPSLLD $7, BB2, CC3; VPSRLD $25, BB2, BB2; VPXOR CC3, BB2, BB2 + VPSLLD $7, BB3, CC3; VPSRLD $25, BB3, BB3; VPXOR CC3, BB3, BB3 + VMOVDQA tmpStoreAVX2, CC3 + VPALIGNR $12, BB0, BB0, BB0; VPALIGNR $12, BB1, BB1, BB1; VPALIGNR $12, BB2, BB2, BB2; VPALIGNR $12, BB3, BB3, BB3 + VPALIGNR $8, CC0, CC0, CC0; VPALIGNR $8, CC1, CC1, CC1; VPALIGNR $8, CC2, CC2, CC2; VPALIGNR $8, CC3, CC3, CC3 + VPALIGNR $4, DD0, DD0, DD0; VPALIGNR $4, DD1, DD1, DD1; VPALIGNR $4, DD2, DD2, DD2; VPALIGNR $4, DD3, DD3, DD3 + + DECQ itr1 + JG sealAVX2Tail512LoopA + DECQ itr2 + JGE sealAVX2Tail512LoopB + + VPADDD ·chacha20Constants<>(SB), AA0, AA0; VPADDD ·chacha20Constants<>(SB), AA1, AA1; VPADDD ·chacha20Constants<>(SB), AA2, AA2; VPADDD ·chacha20Constants<>(SB), AA3, AA3 + VPADDD state1StoreAVX2, BB0, BB0; VPADDD state1StoreAVX2, BB1, BB1; VPADDD state1StoreAVX2, BB2, BB2; VPADDD state1StoreAVX2, BB3, BB3 + VPADDD state2StoreAVX2, CC0, CC0; VPADDD state2StoreAVX2, CC1, CC1; VPADDD state2StoreAVX2, CC2, CC2; VPADDD state2StoreAVX2, CC3, CC3 + VPADDD ctr0StoreAVX2, DD0, DD0; VPADDD ctr1StoreAVX2, DD1, DD1; VPADDD ctr2StoreAVX2, DD2, DD2; VPADDD ctr3StoreAVX2, DD3, DD3 + VMOVDQA CC3, tmpStoreAVX2 + VPERM2I128 $0x02, AA0, BB0, CC3 + VPXOR (0*32)(inp), CC3, CC3 + VMOVDQU CC3, (0*32)(oup) + VPERM2I128 $0x02, CC0, DD0, CC3 + VPXOR (1*32)(inp), CC3, CC3 + VMOVDQU CC3, (1*32)(oup) + VPERM2I128 $0x13, AA0, BB0, CC3 + VPXOR (2*32)(inp), CC3, CC3 + VMOVDQU CC3, (2*32)(oup) + VPERM2I128 $0x13, CC0, DD0, CC3 + VPXOR (3*32)(inp), CC3, CC3 + VMOVDQU CC3, (3*32)(oup) + + VPERM2I128 $0x02, AA1, BB1, AA0 + VPERM2I128 $0x02, CC1, DD1, BB0 + VPERM2I128 $0x13, AA1, BB1, CC0 + VPERM2I128 $0x13, CC1, DD1, DD0 + VPXOR (4*32)(inp), AA0, AA0; VPXOR (5*32)(inp), BB0, BB0; VPXOR (6*32)(inp), CC0, CC0; VPXOR (7*32)(inp), DD0, DD0 + VMOVDQU AA0, (4*32)(oup); VMOVDQU BB0, (5*32)(oup); VMOVDQU CC0, (6*32)(oup); VMOVDQU DD0, (7*32)(oup) + + VPERM2I128 $0x02, AA2, BB2, AA0 + VPERM2I128 $0x02, CC2, DD2, BB0 + VPERM2I128 $0x13, AA2, BB2, CC0 + VPERM2I128 $0x13, CC2, DD2, DD0 + VPXOR (8*32)(inp), AA0, AA0; VPXOR (9*32)(inp), BB0, BB0; VPXOR (10*32)(inp), CC0, CC0; VPXOR (11*32)(inp), DD0, DD0 + VMOVDQU AA0, (8*32)(oup); VMOVDQU BB0, (9*32)(oup); VMOVDQU CC0, (10*32)(oup); VMOVDQU DD0, (11*32)(oup) + + MOVQ $384, itr1 + LEAQ 384(inp), inp + SUBQ $384, inl + VPERM2I128 $0x02, AA3, BB3, AA0 + VPERM2I128 $0x02, tmpStoreAVX2, DD3, BB0 + VPERM2I128 $0x13, AA3, BB3, CC0 + VPERM2I128 $0x13, tmpStoreAVX2, DD3, DD0 + + JMP sealAVX2SealHash + +// func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) +TEXT ·cpuid(SB), NOSPLIT, $0-24 + MOVL eaxArg+0(FP), AX + MOVL ecxArg+4(FP), CX + CPUID + MOVL AX, eax+8(FP) + MOVL BX, ebx+12(FP) + MOVL CX, ecx+16(FP) + MOVL DX, edx+20(FP) + RET + +// func xgetbv() (eax, edx uint32) +TEXT ·xgetbv(SB),NOSPLIT,$0-8 + MOVL $0, CX + XGETBV + MOVL AX, eax+0(FP) + MOVL DX, edx+4(FP) + RET diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go new file mode 100644 index 0000000..f7e4bfb --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_generic.go @@ -0,0 +1,70 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha20poly1305 + +import ( + "encoding/binary" + + "golang.org/x/crypto/chacha20poly1305/internal/chacha20" + "golang.org/x/crypto/poly1305" +) + +func roundTo16(n int) int { + return 16 * ((n + 15) / 16) +} + +func (c *chacha20poly1305) sealGeneric(dst, nonce, plaintext, additionalData []byte) []byte { + var counter [16]byte + copy(counter[4:], nonce) + + var polyKey [32]byte + chacha20.XORKeyStream(polyKey[:], polyKey[:], &counter, &c.key) + + ret, out := sliceForAppend(dst, len(plaintext)+poly1305.TagSize) + counter[0] = 1 + chacha20.XORKeyStream(out, plaintext, &counter, &c.key) + + polyInput := make([]byte, roundTo16(len(additionalData))+roundTo16(len(plaintext))+8+8) + copy(polyInput, additionalData) + copy(polyInput[roundTo16(len(additionalData)):], out[:len(plaintext)]) + binary.LittleEndian.PutUint64(polyInput[len(polyInput)-16:], uint64(len(additionalData))) + binary.LittleEndian.PutUint64(polyInput[len(polyInput)-8:], uint64(len(plaintext))) + + var tag [poly1305.TagSize]byte + poly1305.Sum(&tag, polyInput, &polyKey) + copy(out[len(plaintext):], tag[:]) + + return ret +} + +func (c *chacha20poly1305) openGeneric(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + var tag [poly1305.TagSize]byte + copy(tag[:], ciphertext[len(ciphertext)-16:]) + ciphertext = ciphertext[:len(ciphertext)-16] + + var counter [16]byte + copy(counter[4:], nonce) + + var polyKey [32]byte + chacha20.XORKeyStream(polyKey[:], polyKey[:], &counter, &c.key) + + polyInput := make([]byte, roundTo16(len(additionalData))+roundTo16(len(ciphertext))+8+8) + copy(polyInput, additionalData) + copy(polyInput[roundTo16(len(additionalData)):], ciphertext) + binary.LittleEndian.PutUint64(polyInput[len(polyInput)-16:], uint64(len(additionalData))) + binary.LittleEndian.PutUint64(polyInput[len(polyInput)-8:], uint64(len(ciphertext))) + + ret, out := sliceForAppend(dst, len(ciphertext)) + if !poly1305.Verify(&tag, polyInput, &polyKey) { + for i := range out { + out[i] = 0 + } + return nil, errOpen + } + + counter[0] = 1 + chacha20.XORKeyStream(out, ciphertext, &counter, &c.key) + return ret, nil +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go new file mode 100644 index 0000000..4c2eb70 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_noasm.go @@ -0,0 +1,15 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64 !go1.7 gccgo appengine + +package chacha20poly1305 + +func (c *chacha20poly1305) seal(dst, nonce, plaintext, additionalData []byte) []byte { + return c.sealGeneric(dst, nonce, plaintext, additionalData) +} + +func (c *chacha20poly1305) open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) { + return c.openGeneric(dst, nonce, ciphertext, additionalData) +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_test.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_test.go new file mode 100644 index 0000000..78f981a --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_test.go @@ -0,0 +1,182 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha20poly1305 + +import ( + "bytes" + cr "crypto/rand" + "encoding/hex" + mr "math/rand" + "testing" +) + +func TestVectors(t *testing.T) { + for i, test := range chacha20Poly1305Tests { + key, _ := hex.DecodeString(test.key) + nonce, _ := hex.DecodeString(test.nonce) + ad, _ := hex.DecodeString(test.aad) + plaintext, _ := hex.DecodeString(test.plaintext) + + aead, err := New(key) + if err != nil { + t.Fatal(err) + } + + ct := aead.Seal(nil, nonce, plaintext, ad) + if ctHex := hex.EncodeToString(ct); ctHex != test.out { + t.Errorf("#%d: got %s, want %s", i, ctHex, test.out) + continue + } + + plaintext2, err := aead.Open(nil, nonce, ct, ad) + if err != nil { + t.Errorf("#%d: Open failed", i) + continue + } + + if !bytes.Equal(plaintext, plaintext2) { + t.Errorf("#%d: plaintext's don't match: got %x vs %x", i, plaintext2, plaintext) + continue + } + + if len(ad) > 0 { + alterAdIdx := mr.Intn(len(ad)) + ad[alterAdIdx] ^= 0x80 + if _, err := aead.Open(nil, nonce, ct, ad); err == nil { + t.Errorf("#%d: Open was successful after altering additional data", i) + } + ad[alterAdIdx] ^= 0x80 + } + + alterNonceIdx := mr.Intn(aead.NonceSize()) + nonce[alterNonceIdx] ^= 0x80 + if _, err := aead.Open(nil, nonce, ct, ad); err == nil { + t.Errorf("#%d: Open was successful after altering nonce", i) + } + nonce[alterNonceIdx] ^= 0x80 + + alterCtIdx := mr.Intn(len(ct)) + ct[alterCtIdx] ^= 0x80 + if _, err := aead.Open(nil, nonce, ct, ad); err == nil { + t.Errorf("#%d: Open was successful after altering ciphertext", i) + } + ct[alterCtIdx] ^= 0x80 + } +} + +func TestRandom(t *testing.T) { + // Some random tests to verify Open(Seal) == Plaintext + for i := 0; i < 256; i++ { + var nonce [12]byte + var key [32]byte + + al := mr.Intn(128) + pl := mr.Intn(16384) + ad := make([]byte, al) + plaintext := make([]byte, pl) + cr.Read(key[:]) + cr.Read(nonce[:]) + cr.Read(ad) + cr.Read(plaintext) + + aead, err := New(key[:]) + if err != nil { + t.Fatal(err) + } + + ct := aead.Seal(nil, nonce[:], plaintext, ad) + + plaintext2, err := aead.Open(nil, nonce[:], ct, ad) + if err != nil { + t.Errorf("Random #%d: Open failed", i) + continue + } + + if !bytes.Equal(plaintext, plaintext2) { + t.Errorf("Random #%d: plaintext's don't match: got %x vs %x", i, plaintext2, plaintext) + continue + } + + if len(ad) > 0 { + alterAdIdx := mr.Intn(len(ad)) + ad[alterAdIdx] ^= 0x80 + if _, err := aead.Open(nil, nonce[:], ct, ad); err == nil { + t.Errorf("Random #%d: Open was successful after altering additional data", i) + } + ad[alterAdIdx] ^= 0x80 + } + + alterNonceIdx := mr.Intn(aead.NonceSize()) + nonce[alterNonceIdx] ^= 0x80 + if _, err := aead.Open(nil, nonce[:], ct, ad); err == nil { + t.Errorf("Random #%d: Open was successful after altering nonce", i) + } + nonce[alterNonceIdx] ^= 0x80 + + alterCtIdx := mr.Intn(len(ct)) + ct[alterCtIdx] ^= 0x80 + if _, err := aead.Open(nil, nonce[:], ct, ad); err == nil { + t.Errorf("Random #%d: Open was successful after altering ciphertext", i) + } + ct[alterCtIdx] ^= 0x80 + } +} + +func benchamarkChaCha20Poly1305Seal(b *testing.B, buf []byte) { + b.SetBytes(int64(len(buf))) + + var key [32]byte + var nonce [12]byte + var ad [13]byte + var out []byte + + aead, _ := New(key[:]) + b.ResetTimer() + for i := 0; i < b.N; i++ { + out = aead.Seal(out[:0], nonce[:], buf[:], ad[:]) + } +} + +func benchamarkChaCha20Poly1305Open(b *testing.B, buf []byte) { + b.SetBytes(int64(len(buf))) + + var key [32]byte + var nonce [12]byte + var ad [13]byte + var ct []byte + var out []byte + + aead, _ := New(key[:]) + ct = aead.Seal(ct[:0], nonce[:], buf[:], ad[:]) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + out, _ = aead.Open(out[:0], nonce[:], ct[:], ad[:]) + } +} + +func BenchmarkChacha20Poly1305Open_64(b *testing.B) { + benchamarkChaCha20Poly1305Open(b, make([]byte, 64)) +} + +func BenchmarkChacha20Poly1305Seal_64(b *testing.B) { + benchamarkChaCha20Poly1305Seal(b, make([]byte, 64)) +} + +func BenchmarkChacha20Poly1305Open_1350(b *testing.B) { + benchamarkChaCha20Poly1305Open(b, make([]byte, 1350)) +} + +func BenchmarkChacha20Poly1305Seal_1350(b *testing.B) { + benchamarkChaCha20Poly1305Seal(b, make([]byte, 1350)) +} + +func BenchmarkChacha20Poly1305Open_8K(b *testing.B) { + benchamarkChaCha20Poly1305Open(b, make([]byte, 8*1024)) +} + +func BenchmarkChacha20Poly1305Seal_8K(b *testing.B) { + benchamarkChaCha20Poly1305Seal(b, make([]byte, 8*1024)) +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_vectors_test.go b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_vectors_test.go new file mode 100644 index 0000000..49f0da6 --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/chacha20poly1305_vectors_test.go @@ -0,0 +1,332 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha20poly1305 + +var chacha20Poly1305Tests = []struct { + plaintext, aad, key, nonce, out string +}{ + { + "4c616469657320616e642047656e746c656d656e206f662074686520636c617373206f66202739393a204966204920636f756c64206f6666657220796f75206f6e6c79206f6e652074697020666f7220746865206675747572652c2073756e73637265656e20776f756c642062652069742e", + "50515253c0c1c2c3c4c5c6c7", + "808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f", + "070000004041424344454647", + "d31a8d34648e60db7b86afbc53ef7ec2a4aded51296e08fea9e2b5a736ee62d63dbea45e8ca9671282fafb69da92728b1a71de0a9e060b2905d6a5b67ecd3b3692ddbd7f2d778b8c9803aee328091b58fab324e4fad675945585808b4831d7bc3ff4def08e4b7a9de576d26586cec64b61161ae10b594f09e26a7e902ecbd0600691", + }, + { + "1400000cebccee3bf561b292340fec60", + "00000000000000001603030010", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "2b487a2941bc07f3cc76d1a531662588ee7c2598e59778c24d5b27559a80d163", + }, + { + "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "3f487a25aa70e9c8391763370569c9e83b7650dd1921c8b78869f241f25d2096c910b180930c5b8747fd90959fe8ca2dcadb4fa50fa1439f916b2301e1cc0810d6725775d3ab86721700f96e22709b0a7a8bef32627dd929b2dd3ba15772b669062bb558bc92e6c241a1d60d9f0035e80c335f854815fe1138ab8af653eab3e122135feeec7dfaba1cc24af82a2b7acccdd824899a7e03cc29c25be8a4f56a66673845b93bae1556f09dafc89a0d22af207718e2a6bb022e9d917597295992ea3b750cc0e7a7c3d33b23c5a8aeab45f5bb542f6c9e6c1747ae5a344aff483ba38577ad534b33b3abc7d284776ea33ed488c2a2475648a4fcda561745ea7787ed60f2368deb27c75adce6ff9b6cc6de1f5e72a741e2d59f64751b3ae482d714e0c90e83c671ff98ed611823afb39e6e5019a6ba548a2a72e829c7b7b4a101ac9deb90a25d3e0c50d22e1fc26c7c02296fa13c6d9c14767f68aaf46450a8d0fd5feb60d9d73c6e68623425b4984a79d619dd6bf896459aa77a681ec9c1a97f645e121f47779b051f8948a817f84d1f55da170d5bbbaf2f64e18b97ed3fd822db2819f523314f1e5ac72e8f69bbe6c87c22daddb0e1ac6790f8534071de2f258064b99789bfb165b065b8fe96f9127cd7dca9f7cb0368420f1e802faa3ca23792f2a5b93773dd405e71c320b211b54f7a26626b03c060e1ab87f32ac588abfa056ce090bd7c69913a700c80f325bfe824fa", + }, + { + "0967de57eefe1aaa999b9b746d88a1a248000d8734e0e938c6aa87", + "e4f0a3a4f90a8250f8806aa319053e8d73c62f150e2f239563037e9cc92823ad18c65111d0d462c954cc6c6ed2aafb45702a5a7e597d13bd8091594ab97cf7d1", + "f2db28620582e05f00f31c808475ca3df1c20e340bf14828352499466d79295f", + "4349e2131d44dc711148dfe3", + "bd06cc144fdc0d8b735fa4452eabbf78fd4ad2966ea41a84f68da40ca2da439777bc2ba6c4ec2de0d003eb", + }, + { + "c4c920fb52a56fe66eaa8aa3fa187c543e3db8e5c8094c4313dc4ed35dfc5821c5791d171e8cfe8d37883031a0ad", + "85deea3dc4", + "05ff881d1e151bab4ca3db7d44880222733fe62686f71ce1e4610f2ea19599a7", + "b34710f65aed442e4a40866b", + "b154452fb7e85d175dd0b0db08591565c5587a725cf22386922f5d27a01015aba778975510b38754b2182e24352f019b7ad493e1ed255906715644aec6e0", + }, + { + "c4b337df5e83823900c6c202e93541cf5bc8c677a9aad8b8d87a4d7221e294e595cbc4f34e462d4e0def50f62491c57f598cf60236cfba0f4908816aea154f80e013732e59a07c668fcc5cb35d2232b7ae29b9e4f874f3417c74ab6689fae6690d5a9766fa13cd8adf293d3d4b70f4f999adde9121d1d29d467d04cf77ea398444d0ea3fe4b7c9c3e106002c76f4260fa204a0c3d5", + "72611bef65eb664f24ea94f4d5d3d88c9c9c6da29c9a1991c02833c4c9f6993b57b5", + "dd0f2d4bb1c9e5ca5aa5f38d69bc8402f7dbb7229857b4a41b3044d481b7655e", + "2bbca0910cc47ca0b8517391", + "83aa28d6d98901e2981d21d3758ae4db8cce07fe08d82ca6f036a68daa88a7dda56eeb38040c942bdda0fd2d369eec44bd070e2c9314992f68dc16989a6ac0c3912c378cf3254f4bae74a66b075e828df6f855c0d8a827ffed3c03582c12a9112eeb7be43dfe8bd78beb2d1e56678b99a0372531727cb7f2b98d2f917ec10de93fe86267100c20356e80528c5066688c8b7acba76e591449952343f663993d5b642e59eb0f", + }, + { + "a9775b8e42b63335439cf1c79fe8a3560b3baebfdfc9ef239d70da02cea0947817f00659a63a8ee9d67fb1756854cc738f7a326e432191e1916be35f0b78d72268de7c0e180af7ee8aa864f2fc30658baa97f9edb88ace49f5b2a8002a8023925e9fa076a997643340c8253cf88ac8a221c190d94c5e224110cb423a4b65cca9046c1fad0483e1444c0680449148e7b20a778c56d5ae97e679d920c43eed6d42598cf05d10d1a15cd722a0686a871b74fea7cad45562bacf3bda937ac701bc218dac7e9d7d20f955429abdac21d821207febf4d54daea4898837035038bf71c66cef63e90f5d3e51f7fcfe18d41f38540a2c2958dacde16304e4b33da324030f1366f923c337", + "74ba3372d308910b5c9c3885f41252d57556", + "9cf77bd06a4ed8fb59349791b98ba40b6019611942f5768e8be2ee88477149e3", + "b928935c4c966c60fd6583c0", + "ec7fd64fd75b254961a2b7fc942470d8620f439258b871d0d00f58028b5e0bee5e139e8108ac439391465d6658f559b1df57aa21cf826ede1a28bc11af885e13eebfc009870928fae8abfdd943a60c54fca93f0502dc23d29c2fd5340f9bc0e6ef2a18b66ef627af95f796d5bbca50de22c8ec802da9397089b25c6ba5262468e3977b45dc112e51896c70731b0a52d7efec7c93b41995823436bf4b0c477ae79684407c9831b487928b2b8303caca752b3edf1f0598e15831155462706f94ef3fa3a9e5f937f37085afa9b4bbf939d275796a61b78f70597acfd25cd87f967021cd99328fc371b5eb5739869520657b30e4a5b0db7c8715cbe275dee78e719b357d3a9731f9eaba95986479bb2004a77822fc115a3d", + }, + { + "b3d3128bce6bbf66fd78f1a18352bae56bfcdae18b65c379ee0aeb37ee54fba1270d2df578ec5b75654d16e89fd1cd0acda7ec580dafd2fbbabd32a8112d49383a762db2638928c8d63eb0750f7e7fdd256b35321b072dd5c45f7dd58cc60dc63d3b79a0c4a1689adf180fef968eccbcfa01ee15091ceacd7b67a3082db0ce6aeb470aafe87249c88b58b721e783dde184ccf68de8e05b6347fe6b74ae3adf9a81e9496a5c9332e7ebe908d26ce6b3f0b2a97e9a89d9fdd0d7694585a3241f240d698e69fcc050e7a959ba153f6d06f117848ba05d887134f1b6b994dad9b9e74247513e08a125b1fadfc7394dcd2a6451b504ae3e75e22f2b9bc405747dedb6c43ef4ccdf1a7edaf9451346123eaa63f3af113124f361508e255503a242b96680ae3360c8b13ac1f64d08088bb26b7f617cb0866f11d6fd362b00d86eba3fee68724e302388f119d6f92161ac8ce00d08919377a26974d99575b1032ff0f1976240c785c8b89e9eb2bf005e4be06b5371ffca14683fedfdb49e00e38ff27af1324177faf91599abd5990920797574eb743effdc7decda318ada1419cc8e0bfecf82f9c99792746c2b", + "7e8da4f3018f673f8e43bd7a1dee05f8031ec49129c361abbc2a434e9eaf791c3c1d0f3dad767d3bba3ab6d728bbcf2bd994bd03571eae1348f161e6a1da03ddf7121ba4", + "7ee32dd501dce849cd492f6e23324c1a4567bfceff9f11d1352bcb8615f1b093", + "8998e043d2961afa51ea262a", + "ba85e72af18cb5ba85a4a0d6c28b4ac1e5509a3a2fdb0e3255cbc559df5e6a661fc560c756a0264dd99b72c61c51a4b7ad56ca4c8ccb7e8edfc48ff3cceac5d1e8ac5fc87096adc4d0e9a27492857b17604c3a694cfe0e70b22df106c8f3c61f840bcd634964cdb571840e125e381e7dd3a0d97972e965f16f775fa4ce555124318290bf508beb7bd77e633042deb0e863631478fc3dc9122862b3c31264471bcce54e0b74040c8bafd481cf798f332e8940f1134d3027d6f28e771d15e154fc89c6c25fe18a5d312807cc2e623bb1bbb4f0b6ec71d009407eb54bb0759f03682f65d0da8812f84d8e97483f6a8d76a8417efcd9526444abba24288647609791578887ef49780b0b89f51b072cae81c5b5014463da3633dda105b82add0f9c2f065dca46eedd2928be2570493c79a996fa78ea6aec0996497fe2dc444432ade4eaa662ee2255f0f4b92d593288a8e3ffe7a15a10e9d33b0203af23f4c9fd2cfcb6160db63b52810869ff1e65423dbe2c4415884b9f8dec3c968e14cd74f323c89053a96111bc9ce59ec483832c49c53a648e5f0f797f53642ac60170c94b473f1f2e7d8a38e46460b81219b52081263027f74cbf63a75af3a7", + }, + { + "68d5ba501e87994ef6bc8042d7c5a99693a835a4796ad044f0e536a0790a7ee1e03832fec0cb4cb688cdf85f92a1f526492acac2949a0684803c24f947a3da27db0c259bd87251603f49bfd1eab4f733dec2f5725cfcf6dc381ad57fbdb0a699bccc34943e86f47dcfb34eba6746ed4508e3b764dfad4117c8169785c63d1e8309531747d90cc4a8bf13622759506c613324c512d10629991dc01fe3fe3d6607907e4f698a1312492674707fc4dde0f701a609d2ac336cc9f38badf1c813f9599148c21b5bd4658249d5010db2e205b3880e863441f2fe357dab2645be1f9e5067616bc335d0457ea6468c5828910cb09f92e5e184e316018e3c464c5ce59cc34608867bd8cbfa7e1286d73a17e3ebb675d097f9b3adfa41ea408d46252a096b3290e70a5be1896d6760a87e439334b863ccb11679ab5763ebe4a9110eb37c4043634b9e44d40cab34b42977475e2faa2ae0c0a38b170776fbb0870a63044aa6679545ac6951579d0581144cdf43f60923b6acaecdb325c864acd2c7b01d6e18b2b3c41c041bb9099cce557b114b84350131e3cee4089648b5691065867e7d38314154355d0e3ef9dc9375eddef922df2a06ad0f0e4357c3ac672932e5a66b16e8bf4b45cd893ea91cb397faadb9d9d7bf86e6ceca3e9176a5baa98b6114a149d3ed8ea176cc4a9380e18d2d9b67045aedeb28b729ba2ece74d759d5ebfb1ebee8ac5f5e79aaf1f98b7f2626e62a81d315a98b3e", + "63b90dd89066ad7b61cc39497899a8f14399eace1810f5fe3b76d2501f5d8f83169c5ba602082164d45aad4df3553e36ef29050739fa067470d8c58f3554124bf06df1f27612564a6c04976059d69648ff9b50389556ad052e729563c6a7", + "7d5c4314a542aff57a454b274a7999dfdc5f878a159c29be27dabdfcf7c06975", + "aeb6159fa88bb1ffd51d036d", + "7597f7f44191e815a409754db7fea688e0105c987fa065e621823ea6dea617aed613092ad566c487cfa1a93f556615d2a575fb30ac34b11e19cd908d74545906f929dc9e59f6f1e1e6eaaabe182748ef87057ef7820ffcf254c40237d3ea9ff004472db783ed54b5a294a46cf90519bf89367b04fc01ce544c5bcdd3197eb1237923ce2c0c99921ca959c53b54176d292e97f6d9696ded6054711721aebda543e3e077c90e6f216cdc275b86d45603521c5aab24f08fd06833b0743c388382f941e19e0283ac7c4ef22383e1b9b08572882769c1382bab9ad127e7f3e09b5330b82d3e0c7d6f0df46edc93265999eef8e7afa0cb1db77df7accf5bff8631a320d146a5c751a637a80f627b0c9a41b44f09212f38c154226de02f4906ef34139bbeacc3f06739c8540e37334392d38ba1cbf4bc7debe77c09b35d2200216db15ed4389f43bfd8ae9bf76fd8243c3d869546e16b8e44a6cd1edbd2c58ef890b5a84cda889131e5cd9402ca4d8271052c6b4fe3f2dff54fb77bcb575c315b9109f90b14bc8e109919808a581c1809e2a188d29fd34ce639088a6683f641925f5b4b3529baa34e080bb47fb7ad9b43d0d67c9e6ae7cacb50527fa74e56d0c8b20149f5d332d686d48ebbe634c2b5d35fc84c69a5bcc93b93dedcf9fdf19a1fb9b75f6df9692d16f6c3490377a06294499e4b8ebeaa0cfd840bfa05fde21c0b5e94d13063b3f5da7b537caefe89069cfa9de9eb8f06e4d30125de64716f821bcc8279c0c7ea2e", + }, + { + "89c1ee38b6697d0190c87a2aa756892ee09fca095df1e31aeedbda5750f604d9b8f2116e5b8f70ec57ea16fe419f2d213ef72b9be90eb5d7e98f2e398632123e2524ac80b31c6c0a07820848223569602d94fc16a3b1ed8c411bc6c74ed80573fcb1f3afce60b9d5e2c21d04f78665241b613abe12274a5343101a91e91f04e5d1f7959f574e743a10913e0817a32c320467f0178e3b6ad14b856234a4661a755eaf14b5fd88ef0e192e1631d14263d6a954ed388f5709dadc6c0f81d229f630d80be6d593d5e3ad03f9ded53c41abe595981d24ef27ffcc930e4d653743960f4e7ce4e251c88f55c16d2afdaed5e3446d00685c276728ba757520acb9b6bb0732a0e9836878d829e5022794d70ad8440a40a132a8c9ec1d3f0ccaf8c285fff425e9788d6150b74753dedb2ae8b36ff2f310249bd911b9181d8310e00810d42ef94cbb5a9d72a1f0507c1a382f892b23994fbe7360778b7efa9c5e03ac3231a57fecff1c5fa10caf1d26e84db0137049622ebcc3a64841a0e49fa390d1d43550c1346c20d578cff39fb7404fcab0982dde55f0849d312581d0c811a19d46f25e7a5e7e50d74d43760583c5cf335dfc11b2ec964f1dbbd0ed83e18f2027817ea2dffcf2b64a352c4fb8f11eeb4f1bfc01079251254d2112d103a1f12a2270cc026cbeb8b6f3e505abd62496253f93274625786b73997e449c1f35c742a593441252fcc845e1cef1b8f287dd311a0477407ce3b31661f7b2802c79c2d20d06e45f03aca4e47a959c6c1d7a9d377e1577fbf82a115921c3d94e3d9c204aa204a9a5b04d8a2be3269700a035371f4aaf1a42d92b9bfbee74492b106975b36d1e581d6ce2484f09e04fa91586c85f35e2a10f0d3c0afcb05327c1bc9d7429bbcc4627af8f76b86fc561844c2ae3810c84901ac09a1670ed3d31a9daa5d296", + "7219bd21a834d917f93a9b45647ec77102578bc2f2a132dfde6489b9095b4f7b740c9c1c4075333ab0ce7f14", + "a7f849b054982cc8a4c8e5e53e181feee79e0233e58882839892134ad582da7c", + "4c46854e9e101090b1436f90", + "ab2e189baf60886bed88eb751bf3560a8bd3cdb6ee621d8c18b5fb3aa418f350048ecf359a7d542daf7090ec8688c3b0fe85914aa49d83be4ae3396f7bdc48051afae6a97fca7b42c0bf612a42d3c79ef6aadceb57f5cfe8d67f89d49add0ea1ffd423da058297239e72a85fa6cd1d82e243a503b1b0e12d7510a9ee98d7921dae2754d7581e52acb8ab9e7f9df3c73410789115cef6ce7c937a5441ad4edf2b7a8c0c6d152d5a5909c4ce839d59594a6163364038c4c71a1507389717f61e2bda1ea66a83ef477762e7834ebcfaa8f2ee61ced1605ba1380108236e1763bf40af5259da07dd3e3d0fb2801868c2e7c839e318678687cbe33384e2ef5750a0a0e2d2e19e869a4277e32a315ed4de79357f6a12a8a25d5b18291316d9bf40dad2d05d1b523ade76650669c700a1c2965f4e51337aa5d45ec7b4981072779401d6d30ed69034053334bccb18425ac68460becf2aeccc75aacd3d6709f07ee10366ed848c8a54904af4ea71fc2117de133f01e1cc031f2a4d0779b997b82682433ee615202d5dfffba6c916f11a00551d56ffde8c36b303263e14adaf45b6eab0bedf344e5214ce52f071d2f40154d788c6870020791a03d2fd4ec5879d9026241954ed45cfddef4937ea3d0d45647f252be31411237983a1be340fc65ebab9a5620abb0e8d475af4e89e842e895eda0cbd283bb5d0bf20236c62d956de733d60ebceb42fc0c9adbf9b69f8d66551b0aca0e260625ad41cad75d752a234af7caf7902c2c5b62f04b6a8e019a6179d44feeb2ad5859ef1c45371e66f1af1fe0de63997266c290e27f0dd62185c53f81e0a50c296a51ace7c90d9cf0dda8b2d7e72a347f64c44262e2a544d1acc7bb05734dc1783bbc1903279092fe7fe434610aa95fc2ce5fc5ee45858f5e8337d8fcb0a468464becb1cef6b7e5ea48ba383ad8a406df9c581f1cac057d8711fcb", + }, + { + "2dcfbb59975f217c445f95634d7c0250afe7d8316a70c47dba99ff94167ab74349729ce1d2bd5d161df27a6a6e7cba1e63924fcd03134abdad4952c3c409060d7ca2ee4e5f4c647c3edee7ad5aa1cbbd341a8a372ed4f4db1e469ee250a4efcc46de1aa52a7e22685d0915b7aae075defbff1529d40a04f250a2d4a046c36c8ca18631cb055334625c4919072a8ee5258efb4e6205525455f428f63aeb62c68de9f758ee4b8c50a7d669ae00f89425868f73e894c53ce9b964dff34f42b9dc2bb03519fbc169a397d25197cae5bc50742f3808f474f2add8d1a0281359043e0a395705fbc0a89293fa2a5ddfe6ae5416e65c0a5b4eb83320585b33b26072bc99c9c1948a6a271d64517a433728974d0ff4586a42109d6268f9961a5908d6f2d198875b02ae7866fff3a9361b41842a35dc9477ec32da542b706f8478457649ddfda5dfab1d45aa10efe12c3065566541ebdc2d1db6814826f0cc9e3642e813408df3ebaa3896bb2777e757dc3dbc1d28994a454fcb8d76bc5914f29cfc05dc89f8c734315def58d4d6b0b0136ccd3c05178155e30fcb9f68df9104dc96e0658fa899c0058818da5ec88a723558ae3a6f2f8f523e5af1a73a82ab16198c7ba8341568399d8013fc499e6e7ef61cb8654b48b88aa2a931dc2cdcf245686eed9c8355d620d5e91c1e878a9c7da655e3f29d9b7c3f44ad1c70890eb5f27ca28efff76420cd4e3cebd5c788536ddd365f7ad1dbb91588d58612e43b0460de9260d5f780a245bc8e1a83166df1f3a3506d742c268ab4fc10c6e04bca40295da0ff5420a199dd2fb36045215138c4a2a539ceccc382c8d349a81e13e848708947c4a9e85d861811e75d323896f6da3b2fa807f22bcfc57477e487602cf8e973bc925b1a19732b00d15d38675313a283bbaa75e6793b5af11fe2514bda3abe96cc19b0e58ddbe55e381ec58c31670fec1184d38bbf2d7cde0fcd29e907e780d30130b98e0c9eec44bcb1d0ed18dfda2a64adb523da3102eafe2bd3051353d8148491a290308ed4ec3fa5da5784b481e861360c3b670e256539f96a4c4c4360d0d40260049035f1cfdacb275e7fa847e0df531b466141ac9a3a16e7865947572e4ab732daec23aac6eed1256d796c4d58bf699f20aa4bbae461a16abbe9c1e9", + "33791b0d653fb72c2d88519b02bde85a7c51f99cfb4456dfa6f84a61e10b4a14846521", + "a0a7b73ca2fc9282a28acc036bd74d7f5cb2a146577a5c29dbc3963fe7ebfd87", + "eaa4d916d261676d632455be", + "c9a631de470fd04dcbf8ea9f4d8ac37c3988878b6381707ac2c91d3720edbb31576ba90731f433a5e13582aca2b3c76ae75ca8881a463ecfa789910d3a776a9ad4800521c6baa120b2f1afd10f32ef8da63f5b69f5e5fd88ee84bf66b0666b15d05c4050f5358a050b9d5cf1503719f56cd48ceba78f29efe2ae8092e37f5134df526831532f86ccb9339637e2c9e9b9036f83cc058fda23e826a188456e7fd3f4ee20f4e4a3221883fe3232b49db607b90a8956133ab95051c9ec33a908ea7e81a1bfa7bd06c09f0143d07bb23a3feeac7f0d7720269c93e2df19d03605828c8713b84d183c9a50954c12fe3b047511ad15ef03a63355520cbd224d06a34de67a671368e6a8f9feeefe48fc273764a8c69c00314e5d693f159cb5270544f3c4e1760b0529e3303ab308e9a6d03835a3a42aef2df5f7643696f707a574d1dcc676aeecdd9947ebe8c13bcf15d30b2d10d2cd95445a307c1d22d39450615ad38f9302c6eb9dc05764b0503d6a7eaff9feb94834853b47bc25660207be3e7c0e27cb3127b5402cb016396e5ff07ddc3df29861dd68a17f53bf660b23352b739d6da72381b8d19a9fc95da7efb79330a2b360dce4309860af429e3fd10cab235c4acc1d80d9e20d67019375bd161ab65648400f308815afe63cfc717f7d0eea150e687caac25b6603287d44dca4a7cc2f67c3bdd54450bd3170340253b03ba054ec003070eddf9c14fb9dc595e228e4968524900cb5d85af6d1e658a42d744e0e7eb6995023823a8dc33528c6715b2e1aa607782c8e1ddddad72026d657bf122ece8685f6e92236e809139325e4a3c069facf94c10b7896995bba01eb22c7b3a87ea2114a7649d7ed3e83d223e5e785c66a75119beab0968d3eaf0cbcc2d7ede95d024041e6db39a880ce3e19efea32fb89a40a2aae22f407e5fd615e51e48dbd50a8b4ec27ce95e2ba1928bf699d0418705482ed0ed7acc858dfbd690403c74667a88dd5221bb79940c6c4a268379c10343aaefb635982c14f33ad83d47ced9682961540bd4f75804d3d48ba8aa67fb2e3a1db83fbcbe57fec9e4ffb1b575e947f8bd8263c680357960e3a39382974774b5a013f2f8514b3c63c21dbfd314fd5d927d82ba616d76629ac018879f54ff84b5808e94af4fcfe1cf8845b65208ca5510b5b593ce6c109611652cd", + }, + { + "c335b055b752e083554b5aa2cbb6556cfcace658d5c11b6b000256fd89e9b24c1e62a2d5b582580acdb2ad9869020465aeeabe83acd9eeacdc44aa652d5cb24bbe542073d6787ea32b2b3c942d40f9db2bb75ed7914c836d902dd2be89840948d82abbaea23952cd648e6191ce5b6cf912cad0a3165410a781e3650b676e5340980eee3b484008acce6a3e9dc5aa96d775677b8bbb8b323c6e9747d6069a169ea904d9f145e29d134cdbb0118647e8fbae638669efb9a55d50ed33568749f5304ece2193b0bfa6fc9a570d209ef61b4c59a2b5485b5aa6ab47d902cf23f7ff71c5210476e0aa727a01809b9f76b6ebcf58a018b3fbbe5f42976111ba58112b1d322f9312da068cdb86277bfcde66cb3607e3ea02a1494439aa56f302671f1f994eb3ab28b937043f5f7f3b3de50673ecea5dee8ba633c45089b852f0d772892525344ede6b521dcad15807b65e7ba348d891d47fc498cf4d50223d2794c64db9fa9b9766edb430be0c38746ab317b38ba9870a6d1fdabb70fcf89790bfe449b97fe01f6c94502aa0889f0a3bb6bdc65f44d1cd64ab88d4a7806b373f5080f9cf60183cf4686694f0059e2bbc5cf21ba0c3e8046e70d815f1444c3094cc29632c429f20aa06b49b0b52c6c7aeb8e34f7bcb53e93c2cfe2d704a5d0416876742c90762730d160e1869d5e0178dc366098ebaf2cae6f1f7563b555a52dcc194a5c8f718d50d27ee76fcce8e8991f4921fae85ea9476e1eab1364403120698b7ce8fd0a49cf79213f360a17cf1950f104494fad80adcc3bb1207bf250d57dcdce6ac8082a312959672361363cc227310b66ee8c04aab7b5cb33a81c0915e9c770a1cfaae2e8f44a0c65703927977a22fe58aef2f366b8be9a50da9376b46ae7562a82391386831febf359039ac326891bc58c0f2c34bdb6858859fc3cb4e392df65cbe2ec4f02c8425bcbdd1ee2562ab7d229d406d79a9c6fe4889c996c2f68d1fb5bbe3a5e867caa4249b934afd3ec71fdb088c54b15252f9dc1b909e121dbdc7d8a16cc00836652dd1f877ce363eed11467966f7ccb8f1a8d48146e69e04ad76a51937ad4f9cda209451eeca90dbdbd65441ce20fabfc8ce400fb4de136154b87a8b65c92740e9bb91d78521b261f806a2c6279c85ef6ac5fe1ea3117ff7c9f9832fc2aa6fab660082eb22344c1a3befe0628b6551f62a5014cd6194c42b8d475a50f2c9fb58c97e43ebb29005ed7fe54f0a4aa10074f1154152a9067d364dd7863fa082976a00db55b26b5ba0ea40eff48b90", + "f5ff810a41d4b34751e9942970d4c9f26b33f24689a4b1e4449b243490afc485af468ff01a42376b2bcb949b9f5e8d0b917f511a", + "a74271c184a82cb074c14b131fd91eb05870cb7c73c9e511ec8140bfe2f34089", + "2403fe689e239c2ed261b381", + "af9be893d5fd23aab42e6a2e59a8e7cb13d4f543db02af87cb0802bc1af7c717cd0093cc8244994cf21189146922b69927ffd5745e57118bea07a6afe7c21d952c13ab636b3c2e461dc9ffb3ae701175360156338be94b1fa7115799831019455cfaf5114010fe45f8fb9c77ec50fe06f2c5a32423edccb3b2210ee1200a78e1a3130c567542377827586ca8cf0c14c19fa1449a2cce9c039bb441b04e9c0a3f9a743b31c828032174fcdb7c894349aa68f5adf97dfe9294d24e6b5fed95eb994397883f58487bf5c57b0aea5268be7cee9efeab370f89805ebe5373ab2e93658fc078955ccf68b554dd5605005751ee8531c35ca5336a5d0ce273370c0dc9307779b86e96d2d1daf2620d67d43e1fb7800ccf250ca3c02eb74047c1d2a2bc7f29fff8320301694b80d0fd975f834337d00d5f0e4215044d52aa4ca21e6a9d7e03f186d7cdd5c48e3765dc926fb0a46bb0f05c50d9f69c9c507527a60366b7dc251aae1d6bb0d9c73735dcfab959f6fd4382fe2a1f6ad07affb0601bb9040f81b55a48f6a6c5f8ac4a2acc2b0c9a6c439198f7926460695fa11e0b0b017e39de5cf0d5d5f84d972b5eee7b5d1e0343b5485cd84b92ad892e5b23f3e803f5b363f2398c11c15be9f13e59922b0d49902dc8483fb142850b4226da2fb84e9b434a34f6bb67f575a9e57fde3354bc3077a876e260311bb2481bb139aa9af55df5074749fe532d7b8a554218a90cc7e7ac69db280bae5d55a174dfc8d325b9909a8da1016d4e162fe5ba70cf8726cdf291f5e47083d9929cd5e32021cbfd982fd0975f6f9baf4322b553cb3174b11c007559879f308419ff9e4e18eee8d3640cec8aea082b90f69cf3c7676c28af0265c24c91cd58a06513198892ce6ce1ab3ee9ac0a2e937b973a9cac06a039a54f8d994c13d42c59187f677352e5feb32a417aebec4d852b2595e7e67450e06dbd183279e3b63022a3813b37257b085bf8454d6890875a2950d20210a8df4f9da746722f62687e92f0e9efc3e5d526d65ccfbcc042fcac7964dbe147932c73924bdcdf62f9eae58d29e8567ffed90048bcf0566b952e986efeae4c477944af18bd243c3eccf8d88c06d07279adad037450cb8547a8aa0a74223f4851747c803cb21a2dd027e7080aed75038cdcecbc4639d87763cdd41829a1b72cedf0d722b180d0d492a5740ea7607b95f3201df352fb1ab28149124d2df5d5ec106867897b537302c3431402348f94d28eebc701ae1b49d10adedea38f1654fbc48885e59e6e6dfd413c6b5a97d8c35dfb07a6cdefe317bf61cf91", + }, + { + "4aba5a776ace38b6e2578f0007e770d264e39c49f588ca3547ad2888365e3a811994f8836330394587c8458eb0b6611499fd5d8e8527c3cdd4ec550b4a8f8c632384e786b420cb3be911c999c72aad60270aefad31b27a069ecf11e95e9d4c81213308d554d3103de4d9d6ab04830c2b8dfbd8bead52c44c21d5357f72810193b5096809dc7846c1521c6c569f78812c735aea21acaf6dce84a24df7234e8ad857f3e1346b27f5bd436113e2da950e4deff96e9ba8db692c7db723a105ae795da15b910c8286cac6e7dda8c172b70f61b07dfd58596684d61da8772356f180f74c1103ce97cd947eab3d401df44f7fa4cc7cfc25e280fc002873237e64a375b0b4797f4b4613c9f150090f44588ee8250ae44aec6546ec8dba0f0c1eb281cf66fa4eb141617b32b28441f6ddcfdf02d9c34cc62893b2b64dc2c26b74433adb3e888c7fea07b19c8cf39269c2716b9c35b7625d4a141397d6d5034b193d2657c6b2d6b0ba874c467adeaf3d501ad985d13be21c4ff6b326cbb671e4f4973bba49116a0399b6491394f850e4122969e4644c00b442b3da0d6a4bf25ee22d182b3f822fd83878ebcc713cb183651a67ca66677ea81b58b685a3a8e385d5fbb0147ddfecb558d881c914324c794db443b31bc15c361912bbbcba9e418f99f2a416d190cb29684df27c7f3ff6ccf339800efbdc4514ee00d1a89f12373804db4fd66c1affd467f251e73147b3248033327b0f7790fd7861a51773dd4f78b89e4e24b94df9203f4a077091bb9411eec78dfe3e1dfbb67ea1cdf17e1d6936bbb75b74055495449e9cb52f5749404610cd444fea3f0568e0d35a5ef0c395ab7bf0208044b5c4e2517911a9c351efd31f33220972287253fbccb1eb8f46960a36b68a7a6b4f5cbdc86d668bbf555fde8881e7faa9594da425ff8fb54526bf7cdc4af64899530561c06bed7fc04c5d48cd4542779e901bc48fab79d4d13850ad8247f51b9afa7d5a656ada25b6376d837cb0fa1b4016dfcfc158a39290f43f133b352ed52fab2f951509bacb41284fbdd849d8185fb7e7200f8ab2a07ef2b3b927e18e568dbeeba2c7a66e08cebdc6a6069ebe6656a586652f3905ae2bb867529af6a827b494c97b3a378408f44aaefbe86c613e11e7a44020a9ee4b62569dfc4c462300daec7b1424ff1c1849ca1332367470475c14877cbe76c820cc651c18ab3f18852b93994f93b568dc7f7b0eb5f07ffc4c9384c851fa9071c6f68ddea1ccf627f889c0471c76aff9f52b07ab1b86a7671a2b2f6b25c0ddebb66ac95737bf7e2f493f7665b5265eaa5166556cecfdd3062802724ec24f3978b903d0f0c24e1f0b8d967142bccfed0d354279223f4c28684e9ab611e9ef89a3f25993b5a8b3c0354931780501651236a78b58e7d7814f251b053605f4c0a8e7193b9cc1ee5cf7378e6f3c8fd44ec57bd91e62b09fb1d6bab60cbfabcc6792e6a32ea7918a9ec9180d05a7e1546d5d2d8bbfde2a71b4e427c0a4d28d0b6473ae", + "921a401db90935c60edda8624a0590d5c46eff3522e35de2872f6f9394e24126fd8143b68a797c995624fba0298b75eef974", + "6a4d35ae03bf277f587da4541dcddf92bbd906dff45d5ff23c0f60ae53b062be", + "231b5780fedfb06d724450b3", + "ba40968282d98849b19d867f8b564ea5a81d657516099362926bca4cb6e9ae02719d10c8061f53008c727a0eeea5e1e36c9e55c117e9434e213316c96840231a1e356b254a9981d4a6ca3c66cfc61018bcaade1a4486506559e6aa3a86bac980d391d835fd5ded98d10f1394d84bf1bbf2cd3397890d704154802f7864ecc753db782fd3d19213ae65ace4770e1bacf32d61c6730aa5adcab4d7e2e437888c11c29abba4890a17a00f67a53b660becd94092df0598df5ac57326f6860593a519e28bd4a39f6481e1a4748881fd5f0456a3cd9f28d1d1e78dc64030cbd8fdb2c5abdab3f13d6ccccd187e71e989f8c486929efcdbf2a763effa95af62db5cef95e9081b818275c69267022fda4b7fdb8c650b491a785b03d4d0186625962b6326ec3f4e176373da4dc1f83a14815adf82c6bffa7c6967d77528d0249754bb4d17656bc4a89449b16152a4a1aea7eb0054a8892f271138971507d2f3b237ba5b620f444544e4a8c2b1ab4f9168762c27478c9f776c47ee2e9ff05bfa35ed127f0cabe7cc053640bb8aa01f8359b74bf89ef43ca94c48fcd201eae39d1835957eeccd6b3a852f4e1bbfef9a469f42c764481ff8408fe5871afeeae7676b58f4202199aad50a596626dff97c8e60d750cc59da9f595ce12ce9afdce14481cb1e39994de8fe4cce07845110d6703dc59d34734e93e9e57e1c52d61f44143a2d290220a4bad5098d098ee65ea4b6757d8a9bf5485aa3d697a7826d4a285186f5da10eff707566c23c6a15033365bcb498c44487c72d96402d1834753fdbf86770239761f03e0dc8963766441da99c0813e4f1df5a1d018c8799861a396562eb24ce305ca15f4022d83ea3c56b68d9a7ceac4742ec0ce50f4d36273df26005ec2b051fa071b319be2d8a5ed26eb75bc1ea83761b8454db234d15d84d6706cd178981c1f156e6d28f774aee3e9a4fade022e71b52b50aa532b8bc7fe464f22d6eb169c69671875d614e987658820c2f584a4fea3008afdcbb646dba3d69020fbf503f121be3480344db23efdda0d255aa058c3ff66abd3a5fe35db977521608bba7eddae72ae801f4fbb12a1de4133039e046ceb8db87e465e5ede1d79a08c857d59076d7ff858942c31e15cbbdae6fc15c3f9545a0825d6ff8583c0aba8a7d143d27b93f6caefb98c0d83bd8715abcab2a49087f55a9daf9090eacdf45be08ad80b5df5070e1719f68c4cc8f8711083f0f7823a09ec092f22df95fe9e95114fdf82a3f6eed0bfc9c0aa65222609442776154a474dbc9e662cd5dce66846572e52417ee5d7eb59287d07ef60a9537fe1f85c7fa74fe84dea0da235ac7574335e6649b54a6bd33397df4bf4a7976c4ab868aa702766d2bc8d2c82c2d1c2653fc8428b8d1e61852ac185a3a0b416dbcf8eb54c44967ff43c44f2b32c6d4a9dbf2c2f3a587b430aef50f0375cdb4c1b319ac9aca486d9bb321141b065f52f7b6decaf1985531ca7bbc3772a561eb1efb8a6297075920bc432131a5b211bf25e35fa31e12833bc77a9de14c7", + }, + { + "6c0056937faf1023032df1e2bfacbbc58bb022eba25ffa020d4eb26f0caf0678af5d0b2f0c1b520f4843f107f0adcc7b5dee66ff4d61025bafb4cabb64d133132e3e423a599549a1d83aa8c8e774444462aa44b00b460bbafad5755ea6a872d4e6b40e3f4957e0229288ea79fc2ebe5fd9020fe4481a9f42ef14a196bd136aa3c779e311d0c333624c1ddc484c9aa7259cb609e4d0a826c0bdc7567adac01da23900b30ac4e66c100348584fe200747eb67e6287268947e3509d5d2b5d7bcd977b80a13f660d4f6956a8b938a82db75eab19e5d2a22cb5f3c9131e278eebbe096b5f49d16c983ac240f3fbe821b247cccb2c9e6e59546122677f49f56a07fed56647a6d3e0e09520d49009f54250c10e7c607cd5b4ddf81b5c4110c6490e9baf56418236211856f5a85feaebafacf92c0c7501c052f9dbae3beb7484f90f334f50b68571cedc67763b5161ebfd5a1709cf18c92112a4cf4d8f43d1895204d8a2ba5e14883a7bff75cc6060cabb77d38a909daca2417befd1bfc05a11c432b47f90c807ca4306400f67a0d92218adaca84a584a8bd4395c93f9b6a4bde9583c79204444634a8473b1244cd33cf980e443d82ecfac672b3f60e2e41ecb3c5a445d9e88c0e90c339a31806e6d79ee52bdc6808c73e8b7b24899966664d3c1a9305f31f0483e24e36fa451dc1d3f2eda05af6678971e2bdfb7c1461c9407c5c466f6b5af34d992a37de3809a22ae75275ddba0f4f9cbd4b18c1acd212192e587889a36bd73c860f0abe08bcd8f00f5ecdb95e1d560b586eccf530df0e5f3776d8dae2a01768bf1226b7ceffa7ce4e75879c82dd97db3c64c06d33cebc6b35854618355d80e46fa79c3e9743fce5b974723c421a077e7ec7dba286881dbc1d53d442a1552700fcb33f83f73c69a0a0ebdcf2f5d461649c4d0712c514ded268a31509f83c1ae4ff4a68e676d29727be641aa4487c08d4b90ff78e24c6508d69759751a1a23690ec9f8763621e8b107295b4bb01bd9fcacd8748e24d996fa70ef6f8b0992f4185bec8e920d7643159f9f604fba394b6611bff435998b2f097a9e948430899c8c752a1e83a061983f00f88ebb32da214399167932a1a83c1b47d09f77593b03cf6521520583ea4483e2d33e14ad60584676d1791779b532c085d238df0d3bae735d0078e0eabd63cc90a2e13d023983780afc8f83b1c14437937c16a1b7c41414c48cf4ae49587ad9fa5b16fc949a749e96032248c4667f58e295f999590dae1d99a2cbe3fa45bcf4a1d3f0356d64d40367f64b2c5cca843e5f7dd7b88a85d52328a00622e6c317879607bc036c9006d38652ffe21c83207c00f8348a7d0aaea5aab4c89077df170de6d41052641726eb6925cd85a9ee01a9e636346340e209ea96d17b0eb0921b96662ce9cb430fb6ac348331dd7133875769bbbba99dc49333950e4145a15ddb0789c4d2ccd38878080ca9e57ddc6cd5452790eec45482f8e990392e319609391fce0beba19463a9a00d8f1de9fbf22f23821de7d69fdfbf3019ed61aff79acfc5a6ba663a1e10da2b9ff7149aea43bd6c61a543008402309df0924de72c1cacd2d6120cf422e61fc1de345cc8771934d8be77d9437a09e06a9b2d51c849fd9a200fa714328d34f36b684f33df6968b827df916a599a4bc3367814fec21198e2213ff653cd2a463892966c72ffd42a26b3bb91", + "0d55dcd08b54e58916f622f81761ef6a2e19b167ac47d3", + "e42e1d6d44138f3d2bf12c951f454686f18d590fd30057405b5a3dc2b317fa97", + "1e46a7486c5a03fd6758d938", + "fd3c1fac10cc82e49235fd57f5aea0ee7a7bd6d539b138d4b3fb623aee591615c1a61228ef9673113a3a90a3687a12d4c6367d5f7bc67d422fdc4106455084d79c2c42c5e86368dd164bcbce7925bfffe7d96c13a2f49aac8e9d1ada3554e3fdc21aab00455a0f33b0c1fdea91b3588e7ad301bfccf9940027332fbdf966463491f7a33c093e0a13831ea9d2183294f89f414cf7b5876af04fa68d594430194429df74fa5915394427259e832bc545c13400aef6cf16620d48280798a6e49773c9316d79fa1dc758e54cde2e2cdb856092d83f4e9b698385cb976fd6cc2538abe055273a5b34a784182ea5e7d3ac9019a05de5e5afe4308a7ed2d363cd50ed6a52df1c616e4a82f607ced768445d13ae4884f2ae1f9fd8313924e8a1a8a23905c92eb231f638dfa6f4cb27bbb9844e05afbbe2ca4d1a3b3a5b371bf33c9ab6f82a7387d61cf8bf662097624145a983839b0cb9f4bd07556800b4054fb3d0bac94f44bcc9b4ac49c39f5571fac4e02ff09f08b3ed5add4bf8bba934e9feb773c0590b45c45fa036382f3fe9782ad19107d4630321e414b7b442b64f18fdd5219039e5740f34b3ce8925d1afe8a39e35ce8db086060bab63b9720700499f82db19a62897c6d845389461260303f9cf2bc7235a898b4620c2191ef05604a5c8c783d58009533a86b27c12b0772635d34ac53993ccf174c9087073e5e69b26c0c3d9f768507ac4d4e2af847b65e3a6e1b7a6dafb0aefc190871cdae6c60f0b1d6137c351d4cb211870791cf4cb8af2ea446f6401eb9ec8a5bcebccce898d1dfb13454df6b35b81ed6d7637e6e261e004080c60944f3a08e8e5fc7e2e4939e7c2607c8cf07d1d10883ba3ad43e2611826f245df571857ae0a7a867df9659f2082c19f94ce400132e48c7f8de2b102c7f83ba5cd1e785597a0ba0d73bb81bba0c00300d4bcd6ec25fb73105a46122873bfa729c0979d8d314ab7ea52391aabab513dbfd1cf01c2990c0a3612f4511c2bcf0f5a07e659a881a7f99c3f1fc4a46e66904427fe26a4a80a904c047d090c861a075c0ae4e29bfbc18b9620aaa42237f4c6fa76ee7491ee638ab5f1cf0b440759828e1ec519679efc776eb1468999a00f667e87199ad6891e98b95fb682e02517b024a6bb803ed23c944010cb7bad0733eccc12d6ab6030c6e88d510ce92e2f98fdcfaa1e37e41fbfb4e99589c0e8efbefd40473db42b3a73b57b22a2f8c9bdaab16831f1b117dd83a77dd01ee8d0c2e92203adb670f4fd65e618823ad196220d70e014c1aafd8863797c61c16382c2600062683ed3a180c70891717c52da15191b02f25d1715ebf33a5e6037092421989c942082f4b836423cc3e976c9bcda185de36f06265dfc250a27d2de0bc48c73b3bff704f3b386f962522f572108458bdb283c6ab3fd33b3ac13a406268fd5d97e17db9c0f780b4b2a8f761d15a4d8b3a0cd73357ecf4d26a6492ee069f19325823ef50bcb2f73326719a57b67eeef506fe8915a1b1ba1a637592268257b91e9c7c5d33cdd947967efc1952005d82ccef9a3ad7ef8ffbb6b658983d64c51242ba53f8f8963245b87a25aa9324c527e53f8c11d55f30aab598401589acd13f090541b3b057b162190f27910718b02a6b8ddbb8ca6cf40bf0d2848f4b76341bd5e78f476862bcdbe2d1bac84c0566fb45b21388221ecd8483d99fe603646b1a9f38a49230cf4dbe5d7883d73eece01bf", + }, + { + "04892b94c65685f2eba438322b29bf8439938590d3e0eb10a29e279d356cb439f6dfcdbc3552af21f7e753221012a649a52bda780bc589ae63b04b981dffd113df9fcf14f17e35e865880a769bb1bf40dc99b9e85e4296c1f2e1590fe02b22bfcaf2d4bb7009a4d692ae4c2d5f0b6d3ca526240368bac55b9b1e6a7b498d3b137f0fcfef1873c5aa2111d7811d45bdc26be1c5d49b8a2f36a999b1f226ec06a5fbd59514485abe696c96ea89dba74b4688101a239b495944e30b3609f73caff3114407599ec5c30a5bad933655de7dddef97018ae15acec46504cd5d417c5052c057ac5f1c6f69781cfdae71db2b4fcac35054a4aa22681027356d68b2bdba721466d130d53ba8f23857631382b2de450232e9ad5551bd7c872ae439e79eabfb057d2bdab8d4ccf02b3003ade2e1f3e514dc92692e4fe5b579c9ee6067995b6c168647ce5a13be8543c23326a3260bb7029d2030ec05e565ced3c5366d20a283a6e95201fd108640d2b96676df712de20e4e12fa53f85f22cb24583844fabcebe40eece11e7221f12c88670bf994ed08e2000236f86258c386b0fccbaab8b68ec6a26fe41491d540193c4c12d1391ab3391de9317f41f505f1f1d09ca9862a6f289a533d2b297d4465c956360371ea3c8ed36e0d1563120654e3a2fd69cd6c9267bfcf92e84cd64e162c84199d6e552b42c33857264b5d7a2e007797cde32934a3f8c68b459cd95bc85e7466ccc9910e8dca65b315c32e43c3a5da908904c42cfc8ab74126919ceeef1054bbdae6ca67b02f1ac5f24808b5eee24577e609a3e3935a24b9ebc1a8dad1fc96abe26012928f2d5782755f3763427dda28867d0b1ad830d3c3f17b9ec278346e5a9480ed23ad44a523a4dd86e65a610ee0de1afab64ace7a3b4918fdc14c6b1ce0ec0903994da9bcf18643d7e0a4e6c08200bb394a89b385d2cb829417eeb0f7dab9fa7306a330f82973cf0917b5ca99b585d2ff0e8584e050077467f5245ecfdd5942e4fc72dc26e5ab2ffc61f996167e68168cee9a6d3ea1e1a696060465e35da8c75a1aa380004faffcb0a992c627fbdcb4e97721271802cdaf08d214ec2fbcb389d75709d7a6b9d35662661c8961f93d4a705e7188613f3769114c55400809cadf60d3b6068c8a5ceef078785171b59be1140c6a754ba1de5ced349df63d67d59d3a8ca3c716ffb506772d57e9e3f2caf7fe346c4ad64aa6c37e43b9bbaa8f58e51bfbac31fa6137728f8e5b728025697e5ad5c8301f6ff39eb2ad595d3cb24257adee88a84fbf1ade4d7550cd9ab94bf48e1424ae83184c35c5a5920157d45805c2e0ad129fc7f0ec3c41b9d6fa04cb8918ef379b0783d1cc2863cd80382585fa05320ca4f9fd90353e490b384ed6c166c6f802cd7bd39aa43667246e8da96992db7537d472c709b01114e95febaac5b1a3c77e1e9a18c2d180e63f0d8fa89f6a1ed63e909e4741af5c2a0e47d4d3f8779b7696358f58060f3f461cceeebb390c92779d30bfdedf1b08ed62dcc05a545bd0ea915f42976e81dd8a50cc4689d8d8007508bf53e7da5bd43c3894968cf0677681c6b818353af6bf8ac205139add1310e5d363ccadbfa0eaf735808325e7f9a6aeb1bee3ebb4a27576a88811859c216b6f84371c43d8063a0d87bd326eb6d81c6896ff534ba2c9c14a51d2cfedf33a5c787279bb4a7ff65706b389756a6191d2f791254233ee047d40d64c2dca878a42f903fd4382f39a89a723fe11848fe37b2008be53f7c2d037981d6462a4eea49df1a2e074957afd3c9dfb4d218a309cab395afe301ccf", + "67b5eccb1790babc2dab5e0d1ff3871c3024177d45a2ae", + "259603e1c3af3fd0ce3257eb627b02e0c0a48ea2f175de3d8c36570a445e5369", + "e14de73c4b17581a7e0d0649", + "33522e67ef932da5fa8abe628b51f3abd5049951dbc982ea95b7769652d4830c588fa45e3fcff094c8602b9008d7b2f9bf6c1c4a8cfb515401c7c44a7ec42ccb967722a710199e121a41160b1ec581507e9bd2e2e506b10c4b5a8d6977435aa08e27504957cd49e756e1574c4ccbbdde937de35128b7ee3455d2e665c596c2e97c253c94e405f85eb5de84874c099b4a97eb8f492d28f2e4bc64b228dd5984e76ca08376d7f1355ba8e0fa60fca96635075417d8b436278e0fb91e3bfc7d61ca8c7407086933c061b2d318f46f352099e1d317d6c44098539d1d2c1b7894db668e7a82ff991864fae236570cc420a4229883f1e2242d05aa07e175bc6abe11cc643cf1786a4456a2de8c066fb1a70fe387f149ffbe8cca7b110e256fd0c09b1d3bd7381cfa82fa700c8db1e79809ccf75ea52d0b349264557046e8703a191ddaace00ccfc513db5e78810eaac0a99d7bb1a5725e722d4e595216a0e12f3a7aab2e623ea9e1dad06169914bcd51b643016fea7dc3f2743b1e65877f1fd5581bee5ef206d86494a587ec8462a170746fcedb2c9f99090674ee687382711b4610ddac599732453dc063518aa36f5b4129098fb9fddc02eb8f8cfc2fdf0d904ef4d6d06014f977b29d0e9aab4044ce9c662a18b1a8db1ceea97854e90704430fe9b1046b221b27ac79054fcc68c3abd6fab7da66e255ff0cbd0506c852e961e619615c944cd9a05c25abb63742f5da7bd9939feb0f2f2208c8ce82f551a9d4d70e935dad018e3e4e6998e39670221601c3e34716ba75eb4e2fdf53c4d471c444330514986de45cf44d77f793c17e36a271fc65e6bf08943aef4c66547dc310c7a430e3fe7a54898de48f69f282f52bbdc4daabdb325cec7ab66fce1aea4e2fd932dc1a316c821f5220ea437447feae2fa478adade7cd515a27d8c132d0299b3ca1bc8516c9d9e7c65c38c238c69f03e104eb42a29cacc8d79b808ea6fb233a5056201e3697f81a2d49ccd8b8efd1ab0fd407c16a210767d1d3ca798ee53a4bbf1ce5090d321b1a64fc2c5f013c23829f5b0d2737936ca71595a1d02711c8a7b0e74654e5d76376ae26977dd49c68e3c0a7b36e047d44be42d732c31f681bd7b1b4b339f004ecd847960377acd005debfab13d0fb88355025877630aff753a7cfddf6851e8bcc8ec37b8f9149830f47e6b601098b2ba19a4c0808e31e8927b2525cb82bfddc9b4bcba2b46bbe768ee278fb89010243d16f9679f5ba4f13cfe76b5beb16c7b28daf99b0873098115c2233ee3402ac0f6c899a2cfcc83b2ccc06676999ad48017c4ace507080a26501993327ebdcbd1e2eaaaa99f4998b716cd9e36eb26b4573a03fd1d18047198fdf675ef4f979864ac85d230a011c69d8b6c45e9efbdc2a03f195c9731b4cefa60208ba845c0978e73d082bf6d6a513b93dc805a4f5973f4158f60a200167ca88704a15ac5ab1f38ed455a426f7c6a96b6bfea2ebc1ae1247cfe5ff29ee81bdbcb53b03b89568bae9a6f311d2b20e31c2d91bd18fd93a37be266d0de8015d52e325f78356dea0b77cc76f28e0f06e4ec705d1328340013a77b0b6196f44b7712fff4ae0ac7f6afab9456a95012b7c6d387285487476d189977e28f6c9d1a3f736320d61302c2d627d5a7ac8cde4988056b55eeba27efe7e640f94c115762ad5849423ae138c76f15b47bd2a2bde2c492489b7980aaf1c4e32a155f858d7be4fcd0f8a18e7b5d97c5a08d7885d6d56222ef49542c7f80498a14a8eed1c092543aac3439966d5b5d0cb9e602f4fd795c09d652b64f9ab67e38f48c88d18e30a9774f37e9c77b7a94cc7310d", + }, + { + "4ab8068988d4bbe0bf1e5bc2fe1c668cbe58019c958dd2ec97164aea7f3f41c9f747527f1c0e5fdb2cbb9d2ad704b6955cb731f14403dddb1a28c5996707635e4eb5dd6ac33d46eff8e319cfe7cf6443869534ca9812a5b23a6b4ca172afffc064dc2b28197117115431e03c00447f87d9b45172c6f724006270a1d41fa094847cbfac9630c3a785f488c1f5cc407ca6f4cd18bac43cba26ad5bfaccfb8f50784efc0e7fc0b504b43dc5a90a0525b0faf3c8b4b7046fdeb1cad87ec667ce3eb6cb4c358b01393f3ffee949030ef9fd01c1b2b9c5219777eb6ff5b1d7c3ef8d8e3bc2193dfb597cf942c5fc50befa527fac0b44cda2bbb811b06ae87459750295371cd232754e2bb7132807d1225950ce64949b0650531800bd0074177677acad937ee008cc0bbfdf33c6b0552000238494be8be412a3e5cfa359e619d092c76310a76bdcb22abbe6f16b3b116b5f95001d20e42fc3c9ff6723e580f378475788eec265a1ed2087de8cc2eff72184f73fa5dc6e68a56dcfc85350bccb97135386d5b827c2d9aea065708f5c921454d1b9303f21d5adf19e00415acbd86d1e5e42d78505b033a515a435713649c50702f54623cbf31469f355c3be2e30dd8c72b4127764451d79e952ea1f9bb0269da56dc07060d5d9542a9c1258ccefe53fa3f7b6073cd38026256b45c01b6c5dc0d91e3139f30a8d1da7a076738f5bb23352693a8e3cbbb46226fa22416680013f9e3278913d06aee4a62457357f0a68d173a360af5e1411840e34c574b4c6b352f92ce33632911ad8b6710d357b7607ee19679e777baffb8ae3c0fe9786b2e97fdeccb5105ecfe81441f549bc6b50ab84b749fb33f8f6bddcb6bb733d6d5dbc4b29725b8741439b8239e53fa435ea29ed3324202b1bdd07d1987b0e06d8cb51013dad897ef02401290940ce3f2af72c5d1b4c8836299008c10b16c7e3e119e41ec66d9db6929ee09bdeaeda08a50665c052edf77b7dff3d8815046bf71d5015e3bdb29a4f507aeb2e28c536cdcc9b8d1e89849a0683d78f99dbfa90f94aa5dc08587657a8f042d718080de5d4a973f232f78c387b63c7143fc2a4380c491414a18b6c4a7bae2194b62e798ad7ec7d09e409425f6d0973accb17e4d860f8ec0283584cff076d93bd9b0c4873f9c57cddcebe3c3bc8afe793c6cb6b26c4582847b07446b7e1d9757de6bdf0df826cbc502bf88cf3a773866d3ff293034abc4afa3091b2126a278f50e47f2f66ebebb616e342098ab690f7f5828bf8cc4742c677d378893e9f188e8397bee983a9a0998de2a31798330f8db59a8581e1c847589bc0e2d95ffa68e39226cc15cf6cae5c4f5174e7848375391dfabafec202565ec2383721339f04c5c5d1da953d88f18cda65745ee8e99805e35203a6545a0416923b38c5db3c8aa00d64354bed27d7c78c4b257534bd7a18107ebe64d8c27b6afdb330d8efba79fd1fae480cd51fd3626bf8d79fb651b7c6cf752aa737a5123558420d48fc86451b358d270aacfa6c17f343b7a9956e6f64e4990c1b3f1e5097605edf5ce4247819b19f245e9a90758dd42c36699ba5cd7f3ed99a7df7eb155749f4b42d192c47cacb6b2865fb9ef2cfca283865cd06e40cdf7f89d76a9e2eb393e2e0ac0e2776da929f3f8e3d325d075a966d289c51347bd0bd523a5c81edef63ce9b72f5114c88b08b16edbd73f518096240a5b37421843173be8df4ac7c587a17ca6f2916f7d9a10dc75f81bc778a1eb730d12b51555cc414eab9c066113a7edba9a7f1a18092ae47f12f0368ba211feaf34a3b48a7ff5c91b81cf7c95675a4001c95a19d284fe4197fe8823909a123fcec5e45935da12416be1bdf14918414ad19b54a41052f5b8417ddbd207ee01d6a3e62fd9b0321b1c13d91d6ce15ea7b2ea0c670a5f5cb290ca8e62c26c6499104ab8e9fafb05170ede246bbf7313625d1fc9576f1609ffd08852a2f4b73c04f1f4eeecefe3f3eeb2185a618b6dd3e87d9d3fdcb349cc83c21f26b6c662bbb857aa95378e991640a160a23cce76153c134508c68ec54a5", + "0d471079ad3c3432b6de852ec71692d12d9df4f984554d458a9dd1f28a2697976da8111ae4454c9a23d1c8eae75bbc14f8b00e7c065bc290f8938282b91a1a26c22b40a6708c40945d087e45633a595beb67d8f1c29a81", + "f3dac58738ce057d3140d68d2b3e651c00ff9dbb2ca0f913be50219dd36f23c6", + "bb2d033de71d570ddf824e85", + "238c4e6be84bfb151557327095c88f6dc2889bce2d6f0329e0c42a5cd7554ab16c8b5a4db26eab30f519c24766b1085e11d40823053ca77adfe2af387b4dcde12bc38502229510606ff086265f45b1087375dc4a022eb0b641101c74ad566ab6f230133b7aa61861aa8202b67beddc30dda506691a42032357010d45adc7ee633b536a2fefb3b2143837bb46db04f66a6e2bc628d6041b3d306ff78e96205ab66847036efa1fb6e6a387cf8d5a105738be7163df9da0db48e3d8fd6a786f0f887968e180ad6888e110fb3d7919c42a7f8c92491d795c813f30ea645fafcddf877f5035f133f864fd0ba1415b3d698f2349ebe03d9e76610355e7fc23221c5c72b1b2628a40b14badf93288fc4abeaff5306d274f21938650ab236a39496d3f8a6e9086eac058e365d4335b51eafac813f9175bb7bebb75605909ec3fde6515694e119f7b6e96aa1d6d6454c3a7dddeacc83bf0c1f5f6c2a9dd2f460f3e5b074a33b8d7904e6988ae43a22a87f0933f812e45c4c518bf83e606bad4c3c55422ab2207e9d3cfcbc5819049f55e35b9663273d9d3a6f8a897fa38b0dca77eb6c344290cc007b68d913187f2cd480a40262623a4e95d90d5701ac2b9d858d70a27f0672f919c2ded1fb89134ac9a8ba6ac62931c832372abb70e811dc50cce264ece65e87338231f18ac007c5f68f3b1c5904ffbb2e1dc361d53914917770d66afe28c547d8cd5896d892cbdadc34cd6af348c93bdb8b072f38b085361e62ded7a38b4368824c759ec7d2cf4caddb9191e5deedc8b8388bc4ba2c0672321bcda3a7343c9ea71ef03750912f35624d81da5fa8a6ee676c4efd99d0c7258b844ded7b35d8c8233a316b508d79c7c0b3edabad5db9543615179b1c111bfd78b79327ac5b4155336d670baa592d441c810cb1b7c07f3d35473a45b57e780b7d997782aeecfc0363976fb608d6967844ed00b63ba75996054d090aeb605c195b1ff86f9d9ab5892d27632cbb59c06b3ccd69d33ed5dea9398f00b7c6404fcfe2fcb5924e4cb75cbcae0a1b084ea8b15eaa5847431e9ab70e4afe15b4c82239f6165e243e3b76d6c91d23b16edecad8bcb16898641f8e323671452034a8ec9b42b29cec0db210bad0444f1c5bf3505cc41d514d5a270d556f0a34333bd06cd6509ba253a6ba7a6db8f1a60c99f0c3d566a038a72f1271a178cc3ff890b0df1e7438c0c1a12d9873643e2d7bfeb92379545de50834abe2a345faf7ca49beeab87ee516dd8598b71196b8cdb15e7200cb5bd814338babd74c565faaf33d9a8ed4209b417345a1ae611880ea22ab2e894d5d14a28fe3835d3b2718125f0e6daabd85327455646290ceab89e579ed5e1d72a0172e4a6d8da70290b5022c941f3866f96cc4218de5d2622d13af6dab15760a1ec5d10918267f9585284058aba611ba07b1d5711cef505869831699bedc2b190fe1d578814065c91d87a8c8dc9b0d4dae0c80cd241f0bda3a6d5e714c894b7a48b1e5eed4555f103eb03c9db30efcb855df422d7451a6d70f28174c7ebff536dd2cd2891f6c3f264d632ca924c4e0d84b37cf8e06e6f2e29efac6cf008cc27f062441278dbc9f09cf44987e0e9ca088a48437b0b89efb9cf00d3d0c5fb449fd4b64e21dc48cf300c2d80a502cb583219f1881e78e647783d91dd2f3b389a1594eefd8ea07d4786f983d13e33cf7a34e4c9a0ec4b791f1666a4eef4e63bde7a241f49b5cf615888bd8130743bc8a6d502bfc73ab64d1184ead9a611832b7e24483a1a0fc475d9ff6166b86a18a3dc96910ff182cf326456c4461ce8acb3467f801890eaf1ce0b24791da9c650876e718c0bf43c475174f9712dd4a228695e8f8b2b23fc4a06358b4a6a8e1afa87a0280c3e098f218f7a6d6bd716f8c105a7eb799ba0220837fa5a96c8a22a826a6f7ea9d7216a24acbc7b0133210cc17c8190507badb421bc54997ff9340cdc1ee415126ac46a4fec9fee12d40f06300f7e397b228250f36d6f0d2ddad5fe1898ea690e4c7cc3a116a70bfaf6d2dc996753fffae40ba5280b8356b7ab4ffbc914ec74eaa070581fdd1d9e5aa2", + }, + { + "4d81b652fee892d575bd13dad913d976cf0517c819d5183a72eba995b1f27efe743451721ce34791a15a6b7a6e44f13d4a080563dd1d9d4f0946e5ba3863b9ac970a1fb4ed66458ec1b1092ff5fa6c3f0271a2df8e3f2e97851352be760b6a0e1589c202f00791b1b89ae0ae944ced96bd90754bcfa3e355b735132d407d3b5507fd57f705e8a8bd82886b16d459ac91e921dcb8c5bf0d7cf420a9349ee589a5e2e19ce7c944a54ccc1062a0690f3152300d0bf5cd1871c1391bf6d7007f7ce26018ca2a5c6f76287fd8c8e9e7f93b1806460dd35f7f95989a8b6f9a0aeb7c6b0346955fb50b8735e34f1ecb4859e34ea0f022ff6fb797094206a34cf120b7f4664c531c57da513b296f0671c8e9bf68d9e1674998fe52da04f627f516dee97c2b3c988216e9bd3f58c3b021ac70898651f1cfeaef21c4f417ebe92dcad3aaf50f4277262c356584f816a5a5862f2bd720fac10f1b86033371ed603bc00a30cf4da8f579dd5bfdd571a37af7d2a5cef29f9001bb1605ee87f24ec3b259f381a69b771f78d21c4e43bfc83a916e08830d9885c8ae8ab6367c05f92e5eecaf0488262300f83f4e3bff177590857e149216995bc52311fb9f16f4cd74e07c7868a39b699bdbb7d7dace4c6a53ca7ee6e11741a63a52a1d96995a6dd752356dec6f14761ccfe38a6cd8511204f8f0630a747d6e19a77bb030c61e0828436604a28a7acf4a5e49b7269ac93b93b99e9e2e1c0c47b377f7e44e05ec6659526afbdcd5bb172404ce5a9f8786234114c16f20cda6d4359eb873a4a4d9fdf734e9c40aa4db3ea9a98939210f6c62142dd144eb78191116d194bb766ea96da38321ae27fcdcc196560ac75567297984fabe6072c771899906350f74de6d18518eb6898b934b11e945d94ead02b821fd6682602e03e9c70a1ec67eed33874eb24dc83dd1035fba5928f8f62ba1282907aa8935ae72fcb881b3277ee6bebda8fc75d6cd792677c25f70c87b11e094298b2d5f39904be211ff0980e5b83e8ea4a455622d8be9efdb5aa8466c88ea861407d54d98112faa10293af5e16974861dc9f83b45d21b112cc367894c421f5049e49dd205bd7c15e6a70bc810704e2e3a3659800864912527f8be743acdc474a26246a81fc2bdf669b9be7a2a0c986432e1e44b5675607e7e1ee2a8dcb72d8f1964272926e52f909ede0ac8daa32d1d850158db76b959e4d83c9da4e3bb23fd1f5b26463045d6cf13d187fe74a50c09a654d52d0e2f01d66b9f8b4f4aaf4c69fa62a02aa876f9bc4871aacd26a6c6ccfb9bea09cafbd0268b5b65d60aa23ff504d02fad4719698f8b044ca1bb037ea6af58a06a448080dfdbe6a5d698d5db9da5fb4aed04a46c8fa8b93153bca00a5bf8aab64d2b371d072db2ddb688a9442e948f0b99236828dc115a2fddfa2a29e2d4e02ff0173cf734efd4eb687e3f8712be82abe1fac4be0c1eddda090803fbdce41bccfb58c43038991ba1074b281a09bac5eba58a99a1a9678ba26f8f9e3c63ba095f02cd8f3b56aadc5de60477efbf3dcb54b854f651cc72042bf19268554c61b44f2f338a75de56c3c45b3ba40a697f5f21c4557380c777bcc91a151e5676c2a59606200bd476cf98d20b4cdc64bc3b8670810a014871be018bc32fe239e287cfe8a7cbcd1e8b55e08692ccfb4ef871cf797bc0b1fd7ec37931e35b6bc5d32bbe7ae77b9962c179f96436e4a32f566298d2235acf921e38c3f1942fb7674b65e222d17b95a2e58f072c63aa4bba1ce48c303f4bd24d84963f18c5e670015c52342dcdc9c0b348c7dfac721b568effe2bf2f2e816ca3279bbbed823beede8e12fc5bdccd0f1584deb1f6ea1875e9fb350919b675ccde0178bb83a4aa5232bd5e8e9a1b8daf905c6197367a0d106532297ef89f3bc690b48224592c768bd9c50a63d0881370d475081aef052b444744b33fd3fef674a37898fc950f887ed482d2a51ae615ef5b1dfa3a23257e6a6a319a4e2080b2c4094bb09e4b390d1fcbefc4d6c5dab620f8b05b1bd5d976300b007e2b8120ef8a6c9028b7d925c795058c6bdb6711fc5fc2476b9810d1d81bd24637537716edd3b7068b802c531531df710d3682f9865530e1ed51b3b56d860ba4e972bbc74662cdd1e2ea24f81bf469193afc02b14143a32e9556e3f2ecef97c65", + "2538d98b64b6aa9258f9141840a5abef66d6037a10356366a3a294719c10d6c148b04cac66f63ebff052d730f8821f5e5822d869573bcffbdd636c7973433abbf38767597da5186df8ef9df071bc4ecade2633366102313e659db8d8e0f293d379fa2df79f456497", + "a5049b0aa153e282457555bf6f82b60fc81aa6fd1c2ea3db031478ffb74b5b5d", + "350287a6bed5709dfba3d35c", + "849670914f5fe318eb01e8849e536374ec11e813acdbbe6a5e82a506f6aef4f916a3a7fb2e41db3adf990175e21f2386d1805af9bbc32a6ac156b13b1a9505958f68599019c4b7297314229c467114754277b10e9f49a4d12837ef24184629c8902ebe2a23f740dc826b01f8963d47100bf617b314835e436104eb207fa9a1079b8feba06d9369b9aa8222d38d87096b73678bc5db9a1add59394530e678b6ec93a80efc6e8320f2909e3e891306d69b016ade0d30cde64c2c903b401f9d01a29b5cb8619dc68ad6c21900b365a6b657f7d9ca4c145fe598a94eeea741e20a9329996b17aba5d7115c93623f2f5d6927068d0f190b49eb885429d771bbbb3980e9293e4d664a71c3cb629d869dc97e58fc3d328331b11df19a38d61e1705ec4c3d779168abe049e9d675337ff658e00d2d610c8f227d1341d1c41f1c01d8b5d83c4b1b30ae4318da9822f46402ee8cd5cfe9f3f22d90a5ec2d0aaa0baa85e10f5295cc6005c5a0887287b0c867a23da1a4c2196f91fe0bd4f0db1ab324c26fe6088d7583f3cd052b7f6fca38e8b21f98fd07fe78b7657da1f586f1fbd3d2b4079e20f21dccc0d269d53a29deb7c7fb63cc291d1d2c50ff163e08ce612310d3bd622f2416e193078ce4e1463f8a3490578af96ca98e665468281f1af9117a2ed23367df19b570885de9d6594f09aaba4090bdd1079720b08d54311793c97bbe14433b031c865b059cb4f75db74779b82c4f83eb4bd829c62eab995027b548063d7cab7d1a6f9642da6cf7181c0ac71594b97fc2c84b1768f81eb287091f63c76623c61e7ba90c922c74d46b9ae5d8094d9752bc1e8020a82601c356a201e0473d540053c707a88f4baad37826152dd245c4cee6b0019583c61e4327fdf6bdcae53584cdba8a503b835bfb5df9d649705fcc1f09376eec96c3da1e105accc1cbc21d90f527041a9beb85f8cbb1ee8db798838bb45374b741618f83b5d0801a3af2f640abdbe74ec3dc15d6711b4c1480aa8d6084defba82ed221ba359c9744705c4feee0955c27ef468cbb816694516f73fb541e0ad4ccf99ec8b67ef090505d1f7c4c3a8ed7e291c820261f12d92bbc6609da6c275349819848c9112826674f243acb9a29ab73f17c8f8af12c7437c11972c824f00db7ad284e51b9b508a925f0664bb259b4443d56463bffc9e5d845c9b9f79b24c1f457088fadd281f48238866e0b92d6253638eb188bbaa8bf6a81d2b1087904974752697cffb00b4ba05e5b7b842a3d2c0a743e4bd691625788fbe9df14600643b1d161bb2916176b6ee40aee38dbb594ec2735d41369ed3a0c6dd9073f1eb51d1b77eb9a967b53670a8ed755f3b2b73a6cb50a9e1ea7549346646dbe4b801c8aa642779d8761b6c2d2e1a9995e758ab92f07c4eb4a23c042171a4b354f434ced5f6d9ccd26cd6c2506e5023dc076ced15566fdabc7364f4a8594cd6ec404e1a9470f52a83052390e4f7789ade9179b069d9f84ca2c7ac9eea51035db817845aded7405bee90cbe92364c8c7cf8a366cbebd7a972438f2a9881395a8610a2cd0c06c46b60cdae5b1f473f4fd6ec48479cf35101656f05485198a470cd36af22838e7ba3e28863cd8ba7bbba7e3c2625c1106a6be44c9e3d9b9938679b26f0713c62c3757a2dc8b2d9eed5e652220a7711cd220bc91a9afd7c940dd8be71616ebb8b2cb0686dfa161c6ef56994a3cafaec5e79bd0a2531fd1c1a42771acb101a38988bcba51ad85bffcd8c67aebec5b37d526b29f7b9d31388e1e7ad7154f8e65516f0d80a30b88c2b868be2541d19ea1d2bcbadd30e2fbb1b4678bfef7f200e0f8309ac0701000c52ebbcd6fa00cb85c8d3ea9c5aceeb3adcf3773cfb3bfc9ac764d031d7c63ab888e9b03eb9fa74554dab4719d426d0875a508c8c86b22cabfeeb70b0f1461db4e5f639d2a2d28a089dbcc48e3f34394ff1acb887b89f75d3236c8143bb9b06273c3878744340ea1858a9f383f8bbdc259250e23a3c3992bf8b7ca7e1a66913547710402bb538a8866772d11cf4214060ed091d403e1c9ca3af75859259f88656a1cfecfdb49d57c193e60a2223627c681a2fbc7390140aeddc19df035a5207adde4f5736bc542bfdc943ae8b094f4a8701618688fadc2284fb423f602c41ad8ee11e5d9fdfa67fb7dc7d4dce7847d4875b3af667168ebb6082f6911c95", + }, + { + "67f0494a728fbfc84e2f4a043e121ee40f3b12b31616c78e157ed970db28674318b08d8b3f4c538d7b9d91b9b0b09ebfebb07201c6398fdbb8684c9390b3d6a8636333a3b086302b24c2e5d47283935d33065efa3fedd5f755218be5d4618d38c5c1db75470ba06bcd853f3f08d39c3cd9fa3618e70b103c2d9b2101fcaf39c1701436b720d723ed5c622d6535c9a10ec4d727abe237e80fd20911ceb84a90285fc6e07f9d036cfa65995f9b6300a927d7d0d2b907bac9d9c4daa87c2438a583fe85029c886f96ed08f5886bf53292cc0265850a1f4ee3e3288b604dc305d0c28ad35e1242f4ff4ae988b6deba48aabcad2fc6cd7eaab0a63510f3f915c4bb9f9719b1d90db123f639d9d4f3227eafcfad769c2b204dd2555dc54e738909122022c4f92f751d25aef6f9a1187750e825c68450e6d1223c2fe88aa27194b492b6788be6eda80b9b9f053cb77c8d9fa15324f23af5147624fc00c66e947b004bf38b31e1343c7cd341b98abe462a5f994e51d343664968624a2ed0dea9d0299d5c5a7e9097fa63d8b3ed96f917f693654766a9adb01110fa3fe0d8e9b102860d5c049df3fe00ccb2ed62ab05583e6aa0a5134d55245d4f643e274def29d3fc86d79979d599458786a8338b0071f6a01609ee6b2e4bba9289e2df780bb27491890d0b5ea650e62df819b8f98aae99a1b8870ce6d3c7785ca957d5b4094946925751f0fda1d62a9aefe3937a912c1b49b4272f87eea7e397feb84c0702929959e38a568460811e5064b1caf5dee53f920c6e19fb16fc9214b5de1cb770b510533f66d8a0e7f6f04ba8ba41869f8018abee31a6042d3919e217359988eaa9db2a10b3caf7aaba43527484d81304f0bef22165f74e9e1031b545ca3d2f74195984cc237b76ddbec85142a06446902339b1883000264031db85fb19b46f320ef3fe316f750f2d3d6070dec5b66ee8ef20701f20965f5171e44c8a99bcbca7afbbd81e30e74c6d48bc4b0d72baf562da6581fafbe14b6cc597f75e53b305036ede219ec56d0c0d29571a9c110ffeeb747fe56f6030dc26c8d3841b868a1ef56840932dad9f3bd7f75573086571f4d9f0d949510a2577d2f8fbed7e850c73ed4c071bf9a656d09dab43a610b49aeaa57333f67d586d4f50683dceee4942db9549f68eef4c5f8df8a2330857cdf2fc4025f2be7d5f0dcdc74a9cb593de91282787b716d416a3ccb8d6d40fa3c70be4ecfda26a5caf3724fad3d98db16ab6d8f26defc68392923b69664b0c2d56f01a549284b042bbd43c8faec940187f190aec08d06f9a62ab03c9f610f64c0010a0939451d5502511dfd3da1fec5a38f64640c7b6db2961def257eee9a3eff944828e9557deba68bd8e42dc7a9c1570e35537993061fa0f5351fd3cf4ec36386ec4cdc5a2882d5f16703b900c5000efa63888d69982e5ecd3e329c8cf5f003e23ce03c55631246ca15ffcadb0fc9d5634252ccda812ba7bf5e343c44244026512062a68374ed4d8add0855dcc22b30148e0cef0f2886be76bafabadf3ae1205b43c6deb8a41c338114895dd6b49deb329ada31b350e02a1bdad4eb05b61b50f9d22fa2863bd607406f552713e302467ddc78213d584b4933202438d63f99d011b97297f5589f35b7e45ccbd76f02453b7a7668c2b1a1f5d1d63eb805c8881771faaf67433eacfb22f9b6fa58b93f9423a5fcf667aeec39751ae17ad36992556431bca77059a29353598dac12bd3036633d2ccadc18f44123e5bc074f4e5ca380095af062fd83b647015259be929011cfbcdc9bc5d0dcf9b688f0f5d74da95746f447a9e1cb5028ccb2827b45129d04cf6990953a6d8ee0e67fe6bdbd8004f4744cae5607fe7ec4a0f14fe603dcead3367b6870d8e751cf57387d04b881f92cce9772d695f19b36e2db2cf6a807c9ee83225f5c09a11b50e99855921a4eced8e631af7c234aa31615c00ccdd7c6ac5ae8fba6e29cc233765a891864c7d73dae08ed1a3c27cd423d8d4efb550597afee8356c12018f496637daec83575f5e38ed2fdbafabafd38483c239d31cb4d104e93d16eacc6050033a3c86929be4ca8914a538bf540b43d7ce7daaea317bee1ab80504846554879f900d312bf2fbb406a0edc5f4f809cbc68675b0b7f09fd1a8a4d52c0929b3a8b9c1dae4b3d599b976867e6a7e8736450dabf5c49c949544386a71419324ea4ce5c4319899ca510f50d07ace57b013655b0929f79dbf3cd629ad17bdd10109b7c53a4f5f04a16e5471e823c898362df43f57ebdd1627b33fd4cafca6cc065d9140acf0454d5f99be47bc87e0f3b4d4320bbf0f21e7c261bb8d5d615963beeaa46bdbe9b83a8277813ffe6132b23564bef5", + "74dfdc364097c39ef91c01b707a522e28edb1c11529d5050ff820234e6c0295aa00591e09d547e9671804d7825705ab44b76c59d1315ed1297ef477db070d85076693013bdafa92e2ff6a654660008b176cd4e8ae23b9c792be3f7db54cf2bca385bddf50a8624397cca8ee3cb96944164e3cb461e68", + "b3b5ccd7ef49a27d2c6d13c0ae77a37abec2e27e0b2d3530cdbb7f36792a7d2c", + "c0494bb7249f864f69beab46", + "ed8d6e964bcde1df68e7f362243073941fd68ac77929c8e480c89f519f748b3dc337b1af6231632c975167a8425b174b42c2c60dfc0ec85a0a212bf5c9aada818a83f9664c8712d96de1036b5e5d8c8298786b753638de3a8da958549f16eb9c723355cdf7b999aac464ec39df7d6c1607e81b88b63043d1c847dab618f1b19336911b4b0145c2a694e61db71e021282006d48e37f10f3b6314dd012a07618228532c28ca84a936e0eff83723d117b2f2db857d14af5bbd5948a0e53018b31e57cc2a81f36aa013a844990753ccb347fe98fab294cbd252a8b8f7246276275d2780511fd3cb7baa2fd1548184f968c422230f7ad73ae9dde91295f79f6b799e7d234dfd6573fee6d6ae748b0a8cd7ed4862ebd957390826f276c2afb01fbb4b64b61a1bfc138508efd630e77580867bdc1e96a48a694cf0db6c2a11f05dd0bc8769e7200bb0749f5798b6f3559de55d0c281eb5df22b731fbbc109da9c68f209b888e61240c4c0ca006d105c0a7f43144021547d3316e5a99f6c429f9ea2f17d77dc68bc9d5125b6260f79bc8b3b8061972e6757d87b6544f21645c0b4debe5224f7c48142c09f35b8e144c0c1e6521f04c170519ff744d61abd59a56d25a26c5ed5972191b25e78e2140f3ce68fe17be9e59a79f6c69619a79b83614c670c7736d19c27fd22515fb5b896a6418cc0b4850e85c07b38b995cffafd9f69763cbbcfa9d1bbea6868244a66a5cc82e815fae09f5775d28437634926d571c2b0d200855e09cbdc67d10f85bd4cc334ded4c83aeea57f8e373a950f135997666b653e8de47a3bc0059525720045996bff500a47baeec97808fe971d7693dfde339e8beca3598fbc053121536c30d0af10f8f5d8e5eeaaaa9586d7abb563fd69e88351f93bcc46520f6d97c1a49ba9f8f6a25cdcfc11b2a722910aabe7435ac8f0dcda9f824fdde80850f21a2d4bcbfd2e9fcbd14dec05c117a9796db49e2f0dc55e74c7f0f615bd049fa7d0bfcf197dcda3ef3de90762e6f6f9f8a8936bd04fcf2a97cf18ecc8f2f118ffbf02b67f252097e4289d02f264161f6f90f79e1e1ef8414b01a9e1a77b88c039ad6eda6df1e28fcfe9370f0d574aa9e857dcebb19eb7ce8af9b19b4481c9fb3e1f0db3b02af483f737ce3ea824b2165e7c0fca8585383d4b0a16eab2c7e3ee5c038f939a97bc8e1c093cc5372ee45d81836c988f3ab3e6ee0e5f9549e4b7bc381a2afac2074cf75ed56b0e757e7966cb253d549fb0902da98294c6dd4de3c2e166b7e45098d2729b1393deb68471d4d3218dea3dfd0183b654ae4092a79357945eea4b28cfd06b40d30d1b4b8f19827895f6f908f0fe511f74ec84cbab2483ca4bdfc6ef50178eabad79b18b58529c9328c13c52c2869858cc20ec36ef7717e1c743d13f9607bbdb0b701d9df6aca7366814e883d23e51ee5b0f20ef70e2c4134ab037d213315fddc89009260981329a1872e541767adbd5ee9501e7df4ef0cdfae9769961f8716ee7dfbab0ec89b3f62e987387d5842e124a69b07245d359052ada50cfd67472d27ce2c4eacb5421b62dd7331da54ebf0989803797f4c8c781d0e2e6477b421c7d5cefc8146aacc0012af3f1f7cd71ce2b1045d86bf48c9a13fe469a1865294e160b4975023d0eb24ed26837afefc250a914f86f8b1f5d67d65e9737e841519148d4dd5dbf2b5a8b073861288ec9793d4b113d71c01727f67d791852fc3946dc912d60fc66bffccf4c45d859eed9f0bfc7f89086df5d5cd830ac919aa7cdb4504018052d67f6a3ca012ed69187cd5fbe91875cfade381bff1e804ba59cd59f0f75cb46dcfba234ab9832c3fb9aa8dde19fc1fb30677ac1793a38d94aefd9ffcd4e777e9e4f6d49e0cdac6c16a36bc2f3ed8e23b80350e3be6d866aaafbc8cbf7c69fe44c2aa80651164803150c23ebe262aa669c77ca94d215895d2ee9c3e325a0bf2c61e419a41e0f7b1ba8ee0508307d49301abccd5b74c054b6c7bd1aa67cffeafee033761d8226d9dbd7214b130a867764062cf4da685deefa23693b8549d5ef5e53df85c19bfb3c43c6bd073e7a836f849587a4747e1a9a3c7194f6d5472d2e3e4c81784a3061fc9bd3b94862c4784974d859134369486f2651f1db94f511c6f59f41da0d75307191602730b88e4e6101fc8d392c87687f3be454dd92fb8ec380715bcd88aadb63717cbce4db91a36821a572c363759d8d0a2ab007e5981b78731dfdea20d900b14f0c5ee6a4a9b532ed2134e6edb4dc267f001cb88dbe43aac4aad453b839d035697df7de98ca7a9ee7601228a79004b89796e9ab971aeb8e62c789bb21f38b77b492c57db402bf6a42ad0cee169e9251d865ea3e5f79b1801ef1e53797aa6c7060d6f9486081", + }, + { + "04cf92a64cbe135f7fc1d7223b95e41d13f04b482018039f4e7ccacba8aa15ac79a752c5666524e527fb076290ec80a3dccbebfce3ee9b316a65fd130f12bf88b9124d1f7772049e6d0c01fef881a1d44c8dd02f7b6b60e6d15df9e06fb86929cab64842284de09659e19451623525aec2f5dd3e603e24319b1d120bd57b34a0317ce25ac9c2f022a4847306b998b57c8d92baeed0de1f6cfb3177d0acab70de275238f1152813b9ac87bf651f74e1ad079b9bd779ba4374ecba459865b5768d08ae7e1dd691d6821895e8380ac9e5116580e8de3a2c5326e698bf4c4d35d955e45772bae8483d01de2539e8ee1ef9539ee132d80d85fff41dbe406af319c0d7703292587bcf5959f49241e2b03a364e1b682729ed261d0ae45d74d77634afe667413ee210983b042a7ce6dbb61c29d18450fa7176177b5a74f032ea24e1d08b220f6d32a7a836d1241cacda39d6acbd26a62f9dbeaaf7329a291dbf0aed4a2cfcb85ea360947585b1215feaf70ba71eb2d6bb7081b2a21bdcbfdae6ad2513a9dd714d3d06c2c2b7e322a1db2d48f9df1fb44fa066f2bb42b196295ebb3c0898ad55d5b317986afaba0bd5e754cec773821613e908ce2bba6454181f9020b73e758df18c255c87df675cc6bb2b8d2eada44196ac10c26674167f94a79f4be515d8d6a1fd3228dc9a85a355b030845dd4c5f481d5b6e74acc66de730629581b022fbcff61e5dcfb6a7f511aafd577849a6b057021ecbaee53986159c1ba74c3e930c34a159f467f1e9799cd6c1151067c56769e43308c96c8edef8aa7634d909310dba9af2128cdb8c29b24d3ec2a4f43a1ed86d1791c9a670b240e6e719f01827aaa319bd3ff53959a776886a1b7c942a54f141e6bae8576d294e44333e6c5ad90f74863f69bf890126016b318e0f6bd2f0adb9bb861118af5f6cd28dc93d56c8a1dd080b8c810ca29267d410673fe367dd9d1353ae2bf2fd88d57b4202c21aa49f12a01b93acbe260492367bc219d3afb6e6f35502f6529bcbcdddce9fe8632efb034a9eaff8b4a48afb105d04e3fcbbcae010ddd6636992213750b12fb3e01ab72aa957136e0bae591bfb5e0fe819cac82a98ae8df230af399160594540640c6b1d537e7b5f1cc47b08127ae02c35b846de56c4c08773fa18d4436e14b76a7fc4bdee301d0af4880306f2f33328ab79f6f24ec779b2b1928704f09bbc5b0b7108e9a115e4959df79c80eacfb98649a0788867e23b2974b22e654ddab0494bc922ecdf17727d0f0efde9dea7601857d890bfbacbd93f7df794bbc254f50e1e17eaed2f5d5a2e6c58083aff68434730d406fb9fd02b0dd7bfb99a04aea812b6830fe5e05a044ca21c77a174bae8b58eefa11ecfcc1c977bc6218064c9931b5c92f13cfd05799f11e130869c293c1b08dd29c899365014fc8195514b286c97cb6dc4b8633e47751f87fbaba137b6aa04d072ae06c2b2f34448449f60b1272c1efbd4722a2be749a3d2e5450aabef1f7c51bd8324607668a8caf8097c2f358b1b09fd3525d47ec9a7640eb20ffdc17c4f7eff63df75dc7830c471ace3a727feb11533d6e9a2a08106af33069cf482ec63724032e81cab18e12cb5c4c3ddc374e2f75bcc99fc5da09b80a738852a14e8ac552b8471c6ad52e35317b730db2c13c277e06c643e0d0fbea43833de4d2c7a9247ff040e9c56f1ff7ea92049c5341c4d1478a14275a10119d934e8165152b89951bca7ee1399dd8232fdcbf831d8354640e698b68799d060ceb877201b2fb96cec514affeb28721e163e1648164b9e5722271db9b0ee1a7f96819fa1b1590e9daa598d9571ffa3882db9d034056e9b2785a8d13686eba61d7d45cf2e9ecdbc391739ce89297211472be18b21401658c5bf29fc3615924382d802a166d05dafe7876e70a0d081e80c63632da379766928a0555eb5e7a238cfa4da267527c66caf34dd40055f2801b29b3f5604a5bf3d46048bfbec2e24abd2fed2481698a4b5cd71f5d2c12dd473b903c9bdb978eaff7d76fb69951005681ed7b0257054eb3dd6d10097fee51ba7e8d565925e4091cbb78d255c9d3ab4ac0264d172c9bcb0908db1288c9634248f198a1167daa323822058decd83936985f83b08b1e7b942756a7af200af168fb8a091107b4443fd649cdc22106f9b9657c69f19be485c23b2c715b3762c332eccc44f380883357d10019f20612ab6b8f155c2af9e2ec340e5d8f45bf5278ac1fbc9f9f44d2f615d21007d822b244b1c7a0dbc182c7f5912485d6e4d74e90f60a2f964e028c63d49c6aadbf1df170e4914ca514139ba538207b1cf7caaceed4db8423dd1086b2adf15f6c0e50dcf2e12898f53c339a745316904ae03c38b417bcd7f5cd5ea77a4f06e65d56c24f37ebe72d271ac79b6ddd2bb8bd67f0727ead49737aa71af4f620da53769ca3ae878adbaea5a249128074ca3ddbbbaf5a68f9cde2a0e8d69708b0ea7f4c8d2dd4180882bdaacccf2a409a681c551776bd10439fb12b7548342532b371c0e045d8e8c895929464bdd4fe25f0533c66104daaaffed52446094978bcbb389c", + "001084c8a5175c0ad43108f9215c35886c82321c800740c6118a3fcd45776a4588ee0e2d056a37d99b40d2bd9c0845088a77240b7e65d18fef105d3488c77910b5873dbbf275948db5", + "d614d2e671066e387f7eee07bca9f9313d86e6a4d1371360900d670e11ecf1e7", + "674a516f8f59f9067e0485e3", + "1ee376e9e3c89b2147bcf75480ff0dec1d0e8cd45ba812f34c84124871d484b4ca87bfc8cf99f85ad452c482933801426e2737a97468809fa36caebebe8eed07a626b3bc3614ef1ceb54f9221ecb16f413f0bd9ed4b3010c40632f05223484af7bf5948c2fb8a3d2ce04c53e3f2682494f3969a0f8eb738cf93c0141799c9e6b68924433f0326991e19626bb19e6fbb5dd46baf39f92e830f9b1ff465a007f031891fb1f1799cc122d3ae7a55624356b5297bd5d948d9ff2e414cd8adf00a53524df43f398938d33c93b2c06bcde2679566c0a7b0177b4a873f35874739d550712d5cfe3d25c19292ba97c01d84224738bb25546e5c252fe5e5f260ca881aaf176a271a6fca2edbb2cf23ae6d4c56c20daadadb8205c2e33881867cd67ae6e59132edccc3601f014b744ff8eb6aef5e09b358607695d3af42ab8fa30e9fdf99ce54427ba9da3699de19f7a8f9be368df47ff0607601a91e7a5fa6e72be50bb32b825427cdeda3972a18a23af290986cde14f5fb9cbddad336f5efcd2d7a0cf3d5b23e54b702352fd5ee52d7e3479441497d56e17d5868574c56cfc421ee47bb00e9c75b84262a1b9e2cbfcccfed9c4c386ef0d2c1be9a7b7556909b5d72a38b7258acdd624de2396c75386e077c34f005f92a2203c82d1072c8998f03b1df22de832ac733977705453b1d72336b8d371cf1ed3923f462ecd22075de5df68c83ab1e6648ede7fd5ee5794a744abcb32af73bcb182cf97d36f37c15535c4107b7c8f2321f9fe0e2b6ccbe74204df3d748c05bc1e0e2c55ae1aee2d4aa4a52e98ca7229d6d06576196ac8e4b14a9ce807075cdc876aaf904c9962741efa8c6caf41e6b87b2ecd6636e2e58f3ecf576e5d8b895162545e618960ff6e336ff17eacd5a1eb335001633fa78c41ed05466d904ef9b81b643a043298c0e291a085e4e67da72e329adfccc407f800709865147db49cbdf4232073b7bc7ad89b3dd901d927ee08ae6497e0f2f9d052ca8d7444d2e2ae2197f930a7b1c8af38d8739ad298464169823684612cb628c484f710cf9c552551b6837b575a43275100bf800b7a3d777adc44d07f67cee5000422b9049dcfbedfccded0f2aa4d189621579b01e3fdaedc4d772dcc593316ca85e7aa248d219dac21c561d318a4936ac0d3bd5c75311486c174e0e2182affdf69bdd6a086534e4a602efba2b9363beeb5346539b45336cbaf479da6b15b226a9ac026482216dedb84ae3443b306820d9f05f78dca7090d727c7481d82c6e5df80e189e24e46f5758e453e542bd91a58eb51a89e07c50afb543c6b998704432e863dc4c0d0236e0672835a7b0b64e14f5ced2904e54da4287597f920bb4d542c35d3b0271cf0eec055656d523d7d2cbd667445d3e8634854f8616b7d7a7f3e14fd32651e9df40e1daedfdff1371f16d5549ed5646adf2d417e4b3a4d145bbe0974ab388c2716861a08296b862e4fd035163281457877eff89dadb160eb2b780414435784804bf4fd36602699d8c2f6a8cbcb509198c38e2df2edaae7bd7c93313ca98a9c2d24419a12ce35b0b3d68c18840e3ff8739d70969927c7db9a6569787bdedf5c99948a9e79b2302a83a71159f4c789b3b3f05f1e574f8a24c899ae3457f8e73f9bd86976fbddd83b1af337eb8da4c0dbac3792921597e18a2fd3a0ac89a270794529d370d36bb6dc7452e754e903781cbf57c8646b92d5d02842e7df229b3d721f9b981f9d61a48f00e53948a5dbc4f739849609d94aba3e3f5f8163d40321576cb8eb8e89953b608a01184d41aafc13f40c47b12240e3ad49413473c26b6843f4514be221c2af632d1a54cba230457f23f00b2608485c381ae03b389ad0a1671fb416de4659cc7f7a9c4b6d9807789c307d061fcf613b96a2d79e5e3e20b863c8b1b75f35c982b40ac8dcb7d2712ef7df94901facef783e8015a9a48574aa6f0cfb0bf6c1a3409028f8d62137c347f5a35ad6a3cd60d71aeb29bae56bb4590f69226fb4e08fab7a9f41e58f4d5784540a70e7a97720c549c8440b089eabd0eb3e4d37a2e54b1160572ce568f4256dd244decec31fec555017ebf488e878945383750eff26a8a1cca73e7d6f52d8cb229d5603360a3bffec23029ee34145c4aade82d486758e0aea9e1b7bf0b4bfbd4fcc96aab66a27fb463b48c6a6c5c5a60253e2fbc5716ef55629277a5f3b89c300e21bf1226241ce0d587fe3f5b11e47f35614169dcfaa375ee1aa589be33a4363765368f5666d155cf72e851d426fa67b982aac4dbbc29356d71deb0715b34e00b9fd8876bbb09ca0701b15615f05cc45e128b3864b26003e6ffe801c4e27402f37b8997e0c29ebc273dc03358cd22fdb68d9cd3b56ff8248a727c2d4ac65acda4d0e0f511bc07ab06cefcf444f1002c151b953d7f7b19695668a86683497c2a2d2e69f19a4997148d2e8d158da859c8f44437d9ce9db92f84a88e89cbffc74c0ef4295088e2543a4f7c6ae9c908bd987bcfd7a074f83ffaf3888bd7f430dc5a5bb70d223c21b1bcd8bff2103408460df864dcc168486f6a66d67ded366c6e10f50bcddada93627cda711764a57ec36035ebc", + }, + { + "ce72c93caa49bb9850774149a87fcf8e23a0c53701554468645554553d54190bc6e247712b02097b794bc421ca94afed34742435ca689d2ebef183fb469c060c7f4d7daa508726c9d2eaeb9c7e9a89b30faee8d9168607d4778acfbd27d5caa623475073ce763ca061273cdfc2c692d1747baa8a01b15f783b2e36620400082747599a16cfd6b630fef310c0b9a2912d1d3bb71eec16972745cd8a49cd927014eb0a2abbe0e1ebded4fb9e8d9e2fbabb6a71da5688717ecd3e08160b9a861f86904a41702b2c4fff28ed8cc61d468187b75bde3fcc5c0c0a642215fea83584387fc5a9aaf2f8a91ae535e0027b618a32bd687289c47e9428a1a92649deab825d702b076223b07c08e55c0b60be95937bfd0504c18398e924420f6e20baf07e2b1b858d3e360a461b66517c24e60f9fe314a4a4973c8dbc7e9d2a9f571a1d8235a21073d81ab9f4800b70a5f17f44d593e8792a2507e6a3a41042fb2a5f7e5f028ed2daa88cce28973ecd88bd125d50fad77b1fde61c38272057d9c65fbfc6789ce41315a105af14e277a0c39d75c34aed7538c39160eab1c8c47818743e8111229426c399c5e88c4d894fdaff0315ec885ea019bf9acb785f3380c37201d494a60b583fc130bc0eb9fbe9b90eff95874e35910dc05c761f8006e2f208b786aeb2eeee841f9a82d9966c82956c181caa4dada81dfa2e2d7a25007c2dc7f2dc7ad1bafef14581cadbee4d614a557df4931b9ca105bade8fdfdefc0d96eeda11c08500b1ca827ca670ba07bb0f85af92914c43a6f71226d6e112d487f1ae99b2239a63ee2cd0849d8a9c488a11f82ca334604a2b7260f25373c6db75656527890f9b772c6bfbb9f687f27099ea9d4d1efd874a6ff83cc36c039ed1690408f20394692ff054d9e6eccc6776b6f4b3c5f24b0052334d159f40b470a9b8799bbc0df4dbfe59a5e536624cad193160ef23abef85df2c9b6e6d4fdf16f848a2a446a77044f1162a278866c491982570cbc16041908cdd0efa2cde011526a3c96d4b39a23c5fcc53d8232869cb4dea871f4ac8afc795aeb1b28cb2d7a3669100a1cab2ee1a7f31e2a25a5c6da836e4b771ad57393305faf582adcd26045e26b618d9943358c615fb206258c8993d700adac7440dcd3ef34fdcb065e10e9c9727662b5abee160aa01d2f2ca6c203a76fb01bb08cee9fc1eb6bc7497bb012ed2774a2d263b9dd03d60c307ccf33233ee33eee702c8e3118f9f86174a97462d0e804a24bbd7f4f938c7f105bb23399967288069e1637b60f2f1883d88ce5a874ea4bc0a7ca0f3b568e4bb1407e4bd6f0d3dc8fe91345f8435d7b1be961c45e4b0f1ef2d92d2d30bb78e1fbf72cd2e7ffae76e8c2bce005195c2003bde46108f37ffacdac28fd67a0de62970b347f0ae3f5f3a5b1d3aacb2fcaceecaf2ff4a2aeef6f5a176cc1b74b234f5658ce603bc353e075278a4056540e43033d37a6eb2615453d8206f5cd294423811283bcd5d79c4afe268a547b98977ed5cf24c0f53a0533bc0b2889356cacb67e2f7353060f9e04362859b1c1f02f96bf5457b58e5ce84a6810d39d7c7f53faaec64db5d6ebb90c1412bdd503ec6bc240c277ce1f5f18876feb24eb6a77e5193e33ce141e8720329add079dc9735f0a35d7d85436f1dba6dcff9147777760b5aa2ec9c8b5e9fb4fc602ec8f754c99ab2372ff5963dbff3fda91865108e606b214cf7acab875197e78060eed52a798751998ce7c73cebc4d5f429f6729a5193d7593072d0921ac8127ba6e796107ee7b9fbcf7128ab35fe9f6fe501fa4695c19fd64460685f287acacf5250efc13899bcf80ad5a340d432a0b9449affda5c8fa090f008e01873aae7d5fbc7972451542c5c29cf9cfdf23db736c8a7112536b1b626caa63f3e4117044cdeab612fff8d8c194d19174f56ce761f6587349c48fab30390f231d209461ee7e18007d10d83ea5aacf199f3b00003259747b1d03274d3c3670595604bb4482d345ffe31d3e88c70da16649a2677bfbdbf618de1d651a53d573aada2eee5c01335ce5519a6d18a70f7ff0b1e66bacc162c49f7f29b9d3fe2c7dd85b6b355c9f9141f02baf08d2be87c36f6d2e1b2e90dfcd100886e306b360df0ecb146a6aa5ac5ad05b63a219ea65885894a386248254348ada17908d776f9b438306ad28b208f80d6b9b265500aead945134b9d388ed5d6205edf07c5d8bbfe0916d0943750150e09c76359d24e3317517ea489fd8a501dd93f159f07d19d00e86d952fbdba2db771910143df346b30a30fba908a1abe5349c3f241958f428dece7ad9a91cb42035c43573b87b26c2ab216cb4c21799f6b3d81acd300ff50edd6fe7868b9ba6c160db3418565ada027b46b63e5d4f3411284fde585ed3673b424ec1cdea678e4a43c262991c3c9b988351d6e0a10af1c959cf21b7a288f2e4d7b3b2c11b400b5e036df71fa993b72ce48d0d8598fe4ef1ce70a970f89b55cf4f07906a479bc84a08bf6ab25221de37afebbc47ea0b38b87be128737d7d43cc84d336cc6ffe1677bd802910a2084751f30398dd0ed09589b2befd2f3b40fbc013318c822fa2faec2323fcc52b43161f47aefc557e92df3050dc5f8b1c5a4b2f8bd7b2ba7aaca79dcfa362fbe7781a2e261683a4a862d5f83e34845a8fcf8a1aa73cd521e87cbeb71f20b20698cc34bee3b8628b1a3784596c", + "08b3fbd73d157e79ea9f61665d19867dcb8c1598c1d37b793606936d8aecd992a0d46addeae857d488b83be5d1c1639d4d78350e4cb08782b61bef4107c9d3a79d3d85", + "a56f38b4bbe83b3d9e562cdf5ef5b30593f08a1a166676c4fb0d5861654e640b", + "8726dc5cae9497936658f603", + "88420357d1ad70e7c7bfd55b3cfd4bf06cd4e9b4ed5cba681045199a06985956d35fe86b28b9a4599964930d05d230a23c55a6a152f67082a453fc31f68489df05c553f9ae5cdb3f611445db384d79af865e52440a876fc4153d896b7a2318dbc2a4495ecdbb2e9dc68022326d35289e82aa55197aedc266dd91ba3018c7b474ba22b4e773773f3e9890ea84bc16a6b235e4bb69e785c40c1adc15b0e0ef03aa147b0d14e62341e27398b84a53f72c9199cc1c94cbcad2bd31aa69c96b06d01775b8c0f80278a43f526664bdd430164863c9c9140ad87798a5b8f38dfe90d37f54d1137709d5311136b728e6c799da244294daa4c8b44bfb0acc603a16c088a081129a0d2cff55ce1c4ccb486fa0ecc3098ef2196f47c49f9d253112bd5746fd99df5d2be577617dc2519c0ad04ee49ee1d7be3d50492017108fffc9a414ea227af39fe49fb2c895fcf00d927bf4a2d78c466fd44df4768e6775d39fa5c834b60979ca27ee9f00faf37a090838f56275a894ddadd265a8d2de74265e4d8d286639ce8f01eccd4f551cf6b4429eae3f08902b6ce6ef422cf91ce8946d9403fe8064784895b62a7f5df76ea294132c59da6b9f53d4195c1e9000bec499c14cf8bad460aebb024a76ac50616f0dcda71c0f56dd3239b11764f3ed6ed06c049b2ad673e4beea391dbb854fde1f01b1900858b9809259f3906b34f95a1c6ce8d24fdf0cf7c2ab7bde2202a7f1482baa6e51caaccef9f541c377da620bfbc63955cae0e6644ec8ed6878f704f1dea30d6b50d4291892bad19b0234582d50c6cc0b4165322cff24a9dc2ce1be35be0fdb3bb7abb777ff0b2f4cf16277388af5a89220d59f1f45ee9cc2a0fd7af9aa8e9e8d548fd65be4e47e7f8ef58f7701f93a42e7ff78f70e807fb63513157fcba96ad9731b2e8f80da85ef407d5c368ad16f0657620bfc122ba1b10d7ac2bf46d8133a9c6fec1fe04882f3d5765da8f825e1984a4313f72b67d806ed45c000dd3ddedd524d474b9b5788547d0712e8edb4c6c586d0cdf8f2384f1e093a7f6dffea6e79df9cb9398f5d0b9a7cbd63d489430fbfa397a0d03ef916b7702f33a54ebab84a7055b7ec6179b0ab7722f03e126ed343b1cdf2af3763df7e3a070162535514b01ad86c6cb051859aba1cc4766b12c8cd57b73fdd3c65af6961c45395aa7b885dd59e115db885f644e1c94bfa26b3804f767601c86e2c7dcecd4daa59955e6a40991a4b4701e63fc82b46dc0ccf59af40a8583171375551c868436ede535705f2e6380c5899cddfcaf9e94314794bab98846cd5ba9e9afbdbe1ea7fec5e22e7b2aae59fa598f4d6c0cc6f936a616e11bf01a2acc891cbfa2bc53c511a8a3a3da2e3aa5907d123ab2a4a3c0009fdb5235a3c33718fe4c504e1539abac6370e06150c402b5fc2f8c32608db4ce2eca9d1e4b96371ee195f6cd632f5b972385f9d5d357b87c78cb4e2c27aa9851534de14de923543f5fd9d55e34d6e8b7e1f3f2735df80046de01f79d0321066f9bbd76299c7386d285f7bf4ac15e033e89a040710c90f87aacc09fb8159f93c8b4860247eef079e32d05707e88aac734a2eadaa853f528d9986e0af3435b5c5f44ddfdab9b0c9ab3eea97676e920f80d1794740067f9b229fb018c804e595aa997533a5e967cb79ee58eea18995a90ac08333f1c69600b17ef4f454f540dbfa8b502457761bc4daa876d9053ae1f55001b6916ce559dc6268d01841255990e56614e6f4ee4ce04472dff0657360d75da4e83a71c852a2585110e53137e91bd89d64d99b5614ab2a5691c876f15d9931b092fc6729c0732db5cc40f966fe440ff99d7d05b24a872f552c27fb0cf2af443340b153214b407fb9ca3750d9c157aa75763b0b7600959663889d00f392d6ebc12835bd2f03ad802a21d0228f1d2e9731d0f0051eb2d5369ab790d1134c38e28d2bc2d5d57d6d897244742c176559961a1e40c84ee5c8225c8d72b92352a011e3785c262aac115cafccc2fe1b5e81a677a0220f207ebadd786b93f58e40eb6ade68ddda5b66c5f0f6b4b95cdb8241156110ba3303beb79acbd54423315768bb43b4fe8c4a465e50c4e63bce272c4d731ea4c797e14b2de31ce4264e2479179b906f67af4a23c56e817abafedc2c7a65aa45f0c89fcd0baba60561a8d013e2d5e0bdf9fbcc1346d3edb20e6e9f9c410982e1ac43039ad8fd0ebd453a6788376951fc20374b59946a6803498929d9fdf2e0f5e58c441329a79d1232e957b3a9ed17231c663b4819dcb6b4e33d205edaeb7d7ec466930bd84a064b40aa67fd76f6ca005408062b45b5aed6f8161836c7160a8c8313dc9aa1c6d42c2c16972a1065e41aea9c58db7916e1670cb42a8b54d85498561b4401761506860b19b446655f8988101fb4c45067e30edc3f00df8d88ee34111dd6626d605d993ff207be09704fd8dc242ce514bae77cecd20f10d4a38435a3f5e545882fdc224586a04ca6a162e118d23716240fa67892b78faf98a17916471f7f121fb9f85497a0b34bf5aaa4ee1ed8a4681bec55d1b4973d4368600115bea70f20a37c9e942b87f6cd1e2ab70fd401e703e3c8334c75fc338508e06d6370779578fbe737a75954b4701bfd92028ec32d3d7ae606caaf9f049d9774f70efa707c1c1174d9fcb5b0a0ae2a961c6f58e48ba82c2db14ebbbdc24288e42879f547b855c86dea9a3b9877e4b105515bd78cc43465", + }, + { + "bf7884fab52251e202afd7b5b46aa53f85bca5fb80a009d8016e276579e401385d853312a884f4aa33cc5fe7360426bbc0ccb7416cc0196e2e40d3a825d5e0825a1394029789acca550bb28b10d847d0a4fe1111be2b7fec6b5294902775128288a784203031ea853c9c104c75571d19552e2a1359a900c5fc9455230968a5920f2ab23f5b9cc49739d4e4ae2c01c7812ff295899b954e9729a3bb330b60c51a8a7759e5131d7d4cf261fa1e62c29f91b4341a4fc968e7f30ca2261702eb328d628b7275a9efc29b50bcb9b27e5844328d5e8256c76949d30b6fea0d5a1c9abca80d3251fcf4ec4db0a5ff2ffd43618aa2e3e1694c2a3c579a2665f443ffb1eb0ce33c09d7285687cd55b6ca9918553bfb36a44860e09ffa0604ef4904a034108370195a986fe165c598305eb08599abbb3df31b1d93162397056d9ba5a1ac2812c582aa356310fafb4058abc5f157802e4a9b4bddb16e75b6db105b7dbc838f820539b76949b1648909104efa67ce28b16a738f1be104d2bd142d3ad1b1c953b6020a1f4cbb84d5c49424befbf2e6ac5c593b783a3f4af75477312528fa78dffd82fe493d821e011642bf1135a5be91fef909383953308dcb61b2f35c2ad259acd1a2e953c0ea6a03a97b384e39c94c33d3846c26b4f9f116abe572d5b7cb81886d6adc2d544630fdc1684bfb32972e051b9a2bd0931de63e025813b923944290fe1ebd5264ee4f25569a2088314e8d4ce8b91c7bd602b9d85acc917d60d30d5ef1cbb055b9ff7b0f999b98caea2517d2de334eb436078c90d41e0e34f11b93e3e643389f43b3afdc4f47a7396cbe0b4bf159ff27618cb835aac6699be1fc7ec840b767836a165fb95d06f2cac4fe15b65714ddb8a095ed4a5b57e63d536405931b6c168683763fe07c32aa4130bff787d4d440746a2dbfc584a502d809076b257482abf7f8ead7741c82b54c41acd41581148aeb4149b0c6eeb39ef7ba091c2e8bc72583b2fdf8ce7fad1bc05aefd6db0360c644a9760a9729a88ee4b2ab123d7238c12435b9f3b4660e74c0fd4a9b00aa614453d84fea01f779e5a924f8e79630a8bb6561ae19c7bc8d88b9d823b98285fdd65d4cc05e443944ed5d3cd4f46c7cafd1dd5deaa519772dd24f508bd2d588a832d5689119a2d506ff11dbf37d57a24e35ff38da18af07eaff5775d12dfe795fd3e1f0ec83c5f283d6cd76532519a15a18d93431893b1b88929159bf8fd21f62b30f4e37d540baab0e30ff3349a08d627ac19303fcae8b8e3fe44eceb66d30697c7ea051bf5afdcd8bfc00d49c8d36164ec9194a78a4d8b78826863e93b6a810354861f4a35ec12e5ac102f74e390d9c0227e67acbbe3254e5b892786e3a88a383ea9726485854a319569a678fa70392cee90c9aa83eee8df6800565bb8e083e78a064c0f8b863120efd799ea57d3073663c0d0e7bfb9b717ca1d6372fdf75a77fd9677791cb899fc8033d6d806de1e6aaeef525ea909666316d9d604c1207cbeb6f427c3acc1b02cf59704fc65135703f2a9529bb2c8fec992c4de53e54b029c3f2a5fdbec1008d1a70dce0c11251003ce62af712b9e4abe631902485404e4933f346f1b4467fceb65baf776d0078aae6a2a1f95b85a441b635663c75b485a8a7cb9a5c12192ac874d940e2d9b88cc05a2db9b5b35df769925da508112ab0b8f64a1408633fd0d81810baf2c846b222736bd826c8cf905b2c35633d6013f5565e0a5ec1492e99613f53530799052a0d70023339d1c394fdf9f73a590a2faf68390d2a823bc3e47a173782b03dacbdadaef1e67fb47a7cad71b6067ce5b5e41fc20ea1fed28578e9bdfa99faa657a754488ed3fc084faa7a05b0f6eb66da0a28e9ab26bb319fa4ee993de840948f94dc1d68d926b783a0bd3396a89970b2c2595de8148e87b87c21f664618af4f567115d403715c3d7d2f66d7a90de2c5237893a4c18c20494e3faf94485ed39ecfe972c36acef0d7ee57bf8755924c790ad02dcc5c4e15aa7db53eb6040244c3ebb7874676782e54dfdddc256018ae6af8cc37450a4cef77f21e2e061062ca0c2a514290c960f5993ec1ce9eea6d09d3293118237e079b6015b966361c3032368174d74ae5cce4148ea2b3690fbd3c28ee544c5c5bd7bc618122979d52c9d3d44eab1f2467f338e695ec5f95998bbe77dffac42bc2809d43a324e0f5feb4ca3d5fd951b7dc8a9e6276ee080079b68849b14c7573cd02c76027a856165d1043acf99554c62fe32896d120974ae71f84986bfa0c28fcc399246bef3ab90f8e55f913aabf339dd7ca6f0861a9ef712e77dd28740615479f39a37e746c7df2b267066d1649fafe0459f665f3d5e7124db43ab1ba5ff94989acc7fe0935e0bbacf718b33103a1355d97ab416d8263ab369e6cf0ee563a77f2f265fc3856b7d54dc0887ed439a421c14f733ec1d6da086536f9539d23cb8026218c5e783423b5f4ac24c8d5d8faa7186dd5ea34afe299e6dbed73ffa8f415da706442a48808a9342d6209f65ca11eba76f8ef26db890da76671971f65bce9e6112c8aa92523dd5295d748e28857acff408c161c0513b37b855a8afb0764d118815bb1b68f8f09156641f7eea994ddea20f4062607b9919d041c880b71592402a4d5b92464b239caf431a99dc67787e76b8e1d7337af004bcb88473cd16b3f7640e8aaa59ad4609f060a2cdc71a4b3ed22c1506a7050a63bd8ed68aa58a8109980bb3f2b9f9fba9599d7620b8c25e8aee739095789af83529cfbfce5941d7f14c8ae30583deafdc7c25fc34e75bbed6ce4f6b47e9647c12333ce08c7db77dc94161cfc43f7ea0bba39def8bf8ae61c6fdcc0de6308af963c6d9ef43916d0cd2cedb970d5937c9fdd4b888cc66e99363b5a04ae62a4349f01c3933ada64080741b1781754e4a722303faef69e382cd9823177e4d5ac83e76017124a7b1a41bcdbb9c4209e7b42c", + "eaae1c53919e2029c137a80f91704d0871be2c1870d0333d8bcf7f94", + "4c434cddb399e52457113cc7e16f046c3f8301f5b6c296979f8a091a9ea557ea", + "b633c1a0e1ddf4727b149b3d", + "f1de487001a580cee6edadb1ef6b700c861a70c6ef16274447b8c61bb10d2d1efbf104d5f7d7172c6a5cf9c06d886165a2919ee9418e2e8f803d47832dae5ef232ee300d1f973a6298c22d777a1b16264353cc731a7a683cfe31e0abc704460788c555c0c24f281b81d7761235a955c736f17f213a896b40a034609ca8456ec3cf5906d01121b7580ce19d89347b6a59c81add318df487b2442a7a8b5e30df78467abbf46bcd5ee5b994a39ca5bd8846caba6f02f4f1335b73d4e20be0b6ad85966f86d1bb857713ebf947ae936782f1f4929498bbd66bdd5ad6fa252364a5a6b46180e93b54cc321b3cf63cf23d55392475c6b8c8c9dc707924b55544151c7c55ae0bf391f793e52bed70829fcd32b2926600f65be0943d6a9a96547675426b0dca9cc7b0f5dbc9d5439d0281014c6c159d055d6bd89d67828ba7fd2a0570ba82996037f7dcce297fe6518331270f6fd5ee63d406cc5081472bc5f2298a9208dba9398ccf807ce9af982885897715b3c5742456f756d79c70434a9baf7b4b6664c9d9f5696c5256b74099e593f97a2d4a469cb3430d0c3eb06083398cabd58af598945a85c9235a3fdd9ba7686e54d0de9afb594b1bb030be8e6bb839f6b45699dbcd2f771db64b0c62bbf6c8672fb412d60c00b3d87f82ffff6512e8308877573323c5a2d6a216ce3e2ce07c9763835ae59d44d7958fd873e3995b62b1b347e489ce86e023ae27a6cb03ddec27a38fb233499a714acd89232a91d38abce30299f38f437f7a46df647f2be862c1e7bcc1e4263c2147b13ee5b345b7fcb973f3ac71db8bc12309f67ddb62659bd73fbd20664eadcd23a79233386aeec1a6fcc8c592053954ee53826cb9b6bba22400648887311cdfa5414c96d5956fe193a3729be1434d923a3f9849f6c419f77ea05fb72f3c4f75ccec03b7f7aef8c8e55c8c5480ee505ae1a7594e6a911dfbc39dbb0ae8656f5972eb644c64203a920fe0078f3d050cc5666ed9747c23df7853d6913005d0156e741a5ead3bb1b22e5bd802c303a73a961f0b60d0fa698041c22577b44eba5d6071de4b545d9f5de24944c151de6a189bfdc223e0507c74ff929f06a2e7497e8c63073294b4aba110a006a6e9510a9617405d9ee711831e085940006761822672549d1d1c70e50002c2227f6f304b9a7f11dc05751be2dfd297087044d2e20ecfa0c091478d62c1bf5f0aacd25bb0384853762a51144b77d30418b633c4c10a6eda7b2eac46905641da0b685f85349749a91cdbaa4027fc50eb97a7dea9e8cbb5b5f386ace0363803ba579cd16ef80dc40ba1044b4ecd0e81e382635d7855e2341b18e0ca705ff46990282fe25093a248ca04a1fff64ebee25065350ea4b9e5990da4dd2e28688ab08b6d6fcb54d70f6d74fd7e5e05d21c12f5b140839aa966aea9ee094a923ee5ec704b5b709ff009c20ed89a75468c48b505d07c7a5ba1ad54ed610886c9d84468eaa598c71b017578404c909dbca431703e0cb1cfb975a696a1677bc015a75db007eccdcb21b9e5e119c48f148c2cffcf29e245e52156ba5ba0a8b0031570e4cbe7b3ac4646353594f0c4a9424c9d97845c5e1a4b4016df9be8df3013e5269484cf32258849afbdd733189ea11783f0f64d3aba9b4f48818011e868cc03ecaa44ff0ab83ed12981a6df445294ff672f3a16d6e0d19b90007d4646e967e0fb1763b3c879f548e1103a75c94f3a7f72be78555eafc086c1c58d1761aac60b843704f234c55b951a1303a12705f2120f784c2bc1494432a94c835d908f0edd5cbb169afd2d38087ca5bc5e5df9c3bd970dd2da4fb2a00933538148ebf669a20b5beef0402e53dbfc3a0f289b33b41ca27eb2f036a22f0d02e0617bd01e8c74be264515c9b46b9ab6fc67403a35837844580794088a9d3c14ad9309435daa0396f48017be524856ab6c191350529962ead64bab33171a01bb3c144b23bed406cb05102c693ce5df36eb541c47e871acf56f2b47de687eb9b3511ae83d06b1f69fbcef3225c3469c304741437fcd0ff4ae3484c117f51d24b6ae1363beb7d85d9b61e01e3dee901b90f2d3272eedb384ddb4d3b9594b9c0926595e500f8ce2e5cd407bd7a4e2c8e6f4315bf693e8c961ba5b8a6c7f5030c68a6b995e9d3f9eaee9eebc9d679eaf72a5f1cb6b2fc66edc7dffa2370dd778ea7ff446121999afba7bb35ceabf626c6269bc466d65f7f812c663bcb2fd87d3e09ab7d71e727f66d20ec48a5d2bf0aaf0aca05d1546d6e974f90df85c1393e3d45731f71ec7b5cb6cfb4e5c29976ead6944a99df2045056e198b19905362d4e9b765adb65eb089233a8b3777352665489c9456cceed593c6590d9f3cc4024d0bb92e1a0dc619bf8ae65be77456c18f8171e4d2d846073cf5c57ba93adbc0db9799e3d98934aa6899372acfa4d7d2ea32e20164b79c71d7bd33c94f9a781a25cbcafe563462eeacaec0e8d9d6c0199de85558a3a05d1ee3483351915d8a4e65ca0ab129a2386a9e26aff9b912c588babbcf25f8c467145061b9b8fbbff19d8c6ded8527d457be7c926c8f490bbcd627b3002044b7729a52e94147f95772591616f6074047e758597f410b3100f9efafaa4137dedfd0edfa85b0927804f0b4fcea1a174622116222004d42b36c2c73d04781f2f49d080f351e57154a3980005bcfb0ea34288e2fafec5bfd01e1f7901b3efc71ae58bf8df4cd7c045856103b77bd78073f0174aaaef4a3c0e8b5b46dc92db55478f012dc1b7d513e215e735573257f105d2390b5366f49b61809033c13ed4e1ebe19ab89313c947f2585f0788a0c5de90b41ad0dbbfc604a0d414d0e5390a0f3c9616cfce4097e38e05888b8bc6e55e40368bacdba7e5b76f4bd8fe619746155c30b38807a1ad325b00ecc3dbcf23014e79f1c39af7cdd0dc7ea58ce733e6611b7eae069deb047aeadfc21960e614db19d2e7e0905a9873268b9a24f856c28059321a742cd6cb3d1527", + }, + { + "c89c3cadc094bffd5ba06c600dabe30ea19ad037316fc13b895fe0e14ac8841264c1bf25557e22b01f8e102c3af43adb8e0a12bf79d3fa0232dae37ca3688e07294e2c7ecc4e2eebdd3f17173351f2c15b0480d4d77bd70955ba86f82214004b622cc92f7bf81a5837326f6a83612bdf65abb33c268a457c45cb7467e074b342a17c711c748c74abbee31541444020a9ecd4e5125e2a8ea3f6030bd677be18183a8a34af16a85ad48b7015cfb036789c0a5daf68883d0c7e401754b8d56cd00ff605be0cad19e03989f608392c81d636de859e66c2aae403c138bb96a58ba69b9064a83e7d8877067e7f40aa0016e0df9b7f455d292a60eb621b8107a727a3378c4b7509d3ec10526c50fc6c66dd4b015c915e85bbbf701ddaf2258119c8b9a5132eafe61bbf38870f35f375123f766ed0d4f38b9364a86e56cdef6f95a815a8d7c48ff283c77992fc6c070eab7d7c7b517006e5d4af532a7c429912ebaebac27249b4f5112d870d998e1c450b98c05d08c742dc769506f2d7a004c24ebf84c10838b619653e27ffcc4344d8db0435e4cb77c0410cc734e36738a6b5f72a7600632d19c86b40c737830b0f5f104443dbbb031dc7ca51ab318951e7817b5d81de8a9aa7f5db6e2d5e7a3cbd8a8100653c048204ced3af005d00e7de7b445f5acff901c4d46ff133e92ef073aff1d9ebf55befc32f9ec38c9eaa6a1aefc974bec2758297e474cacea2ba4151ab1a3ca0762c64a5ca273169d29b83c164f77f266c01bd5075871e17426068ed7aa58ef0d1f2959b19c604eb6187acc57e2becea2da93ba23159ba73b9226034c7ee2498e0ba34fa8038e5e2c092a73ebd9329ea3d648d6ebd47e1776941ab3130cfc91089fd0a0a36f0ecf68293343f275d2a64c1b7d27ffeb3f667f4a19824706235fa5f3f04952ff08bb183c0f1aa1d1b0edfd2e05ed093543788f5d0ac6532e15f912163275053b202d772f381900e906fe070cdb00421e78c16b7387be91adb7b3b3ea28b92548d69c780ea578e7ac66eeb931eefb4067bcabdb345a7cd2022085fc494f118215adfa2443630bffc9faa8fbd9943c3140d81c7532895734a9dd20e31c326531d06f5623c252139c4cbc882640c457819c63f6ceed4e03872b246a3766df69373ebf5af1116e8d5e1b15745bd9dbdd663fd4352d1238a43d5d1e74b3edddfb1c9d460daeb49afccfa0712b7a4cf8d07ccd0599ef3e4e1c9b5c814f3a6f3a46fc80449b34df87f47ff91fea3618cab2d5c04cb50e8ad199d752d901b21348ae939d39c86cc1bcecbadcc6f0e581a3bb51e070507b41ea4294b35456c69cf55a2a3f1296f0df73abac3a9c81cc303d1e20ad6e9bef48de83fc22dac2cfc01ce9ff3f70e00ee49bab2f282ceb6859f989075814e690e36a8d16354fd6056cbff49c30e49b1570363498531ff0ad0979a4518e9ae271f57f883abf5e301c0e24a83f09335479698911bca90269a28c0e040a98e67c9e55f4c91542f921511dd980270cd490766da22306b48ca9309aad3b2393b7b1e9ac7afeff64204081f9c0a8f6a5396d02eb9009901ca2c0a75ffbdae3a38ccd5007cc4f6bec8fedd64086cce5c039e8abc9e23bd694fc8de4e858c89bd585ebdd422b492eab26f4ebbdc1d17dfbba19b5ac458c31320a161a52dea638548205a6ad4ec54875ca34238c059177bfab2d5be0a98d12b3932d0661d33ec655446d0283224af8ec7f1c6874add03448fd8029a71d3c5aa06951123c9fd881d435845757df50444e6cacc31a8cf7537a778d1184b96c3512cd474f5d1fd1214555789d24c8d173358e36400b2d937595109729d9f35eecb0963c0da60d2eeb52a778876059fa95d820d5d34e7948d389dffd53d34c4083d27c917879b053cc57dc43c8263e5dfe5f33c19dad0a7126ea6e8abdbacb318d37c305a183596ddb25b1934beff13a4f24fbdcc2064de8e0bc639e672ecfe45692e9f8164365e1691784b4f775ef369aeb135ce15135c20da95064c810592ea33316b9767caaef842f948b9573b2205ec57d3026a2f2244c42991462e233061549cf9bc66a7b4a8a0fc61f73883fd24dad02644004989c4721a0aa03d3b0191d7fa4d3da102e541fe463936c9365ba30681e706ca70cb3c8ad5dcc710de59e7d8a6247aa809bba74ff4dd182a38bb31baa337841302c19ed89d65e87bbed05465f4ce0dfe89b44d7e9266a8ca21d984c41109d813ca76eb67dbd4e39aa437ff98050c968ec1e40c534ab51d6b8ea2309fab08b3757e9edc5972bff316f6f2affbff458ac0299613734b30dfdad20f797d172cf295cbcfee3d8ee25485d40380d3480a9372a1a6e5ecd7c4c6a9d34027ea6c197f37e86e757750c9fc24cc7cf814878b8628326c140930dbb2041bd9ee87f36ebfdbdc34522cfd4e50c9cb48dd52d4647a06d08e0f0069c104849bf30c8e61cb693dffbc69fc0ab9c5d502a227d606a1dcd630ebd799acdb1e47ce2ad52ff53f6cf4fbd5f0058fb5db915702675ea44334d42e0b6ddae78b22b5b5f7e5aa36519e31278e37b64312479b14aef9b8f12d8c1f39faf920851bd53b13bae5490c847b3312b2e956c430f1d8deea91cf171dee5017e7709d0346d81600bd5f0c41da3f548c28aa50589b293685ba059cd7f3edefdb5d8cdea364f4a42153b0632ef0b7ba18610b71fc34a781eead1dc5a00ab47b6840590ba44dafc6a16029cf50e089684194d93dc881beb62edb7ccee6304a4e71a35915f109db92690461b9e4ea21257ffb62477c20feaafc7a78e2aac2301b66893157920ce9fb114ab4f534d61bb3d17dfb4d9ef9f79a736f7c1d32ac3998356aefc876d8c38722787d564e980a1f15056cb3fe634d71d2c98e0475c79cab318b73a863362f85aeacdcfc44e61b5aeb870de9ea5b5abd24e8c19ab05e45e1e9b8894deeb9d29d65ae99aa94b5047f3c1168276cc2e491aba52b5b03703ced28c63a167f0cb3e4bb4d8e4f0292cf3ea4376510fa49a1a5efcc00f23c3cdf6402197b81262e66e17bf4307d87ffbc2b37213b316bddd65aa9d64ce6122c4a1545c5966bf4fc4c6ff17ded787ca9a3b3cadee435bbba8f6590dc4ba30895b84d5b4eb94f4b05be3c", + "82abb4ff5457b21f359754f151e456e2c0a185c8363d15918bcee0d6d49f12564ac655", + "b63b577e719494032062e3f63682098dcdcfe26cedea2a40893c847a331e4ce9", + "9f1d08be539f1244f0f69ad2", + "88dcdb0309f8c4a96ad5560f8210eda1f5afb31b85b7a8b15525777748967d4ed77c063f65d64ef19b31044f2adc690f5e457faa1abe2e127b38c626eaa94053c9ae1b6b4d0db1f02c8404b50f58210cc9fcc6fa4ecc615631da631031cd6253b4a13a3e88295ffdc775fd4bdf29655d9780dbe02b0a82aad4c4088e90b51f170909c0f98ff93ca3926067ec94be05841603db4f913b7025a9ee34b8d8bc629ed827a2a9857e0814d36b83cba21e670f8f94ceb4be5757e0b8782895b5d8605868e4f584b5bb6a5f3a94edd9b23fc2b6fa06914aec970c260fc370aa245ca68888c90c43eecb68474c9e45c53a7da055f5bfe39b56769fa56264dc8bf4c1616e30262bd501ff9fc5cd78f73ad89e093feba0393a11c6b2cbca765ba025c40dd0417dfa644fce96db5a0362235ad37a317145e7b5f3c7213c7fb3c393be57a1cb55035f06da1f0bf665653c5fe8a0f3ca67dbcbfc59852694d34819d0978cd09b508d103017168f6848258493be737cc24c2112f2afeabf41038bea1f74bc8656d9910b77d33cc691a0d9b12f7c518ecef93423cb4871949a518d2f06e5427823324275b97110f8f88b0d14788741e617f4b194e679a1627da50376a08d4f23b005c0446b46d4f534ed85e4692e7946ec818437089425ee30e47de995e8774b61003801de67939d9fed7bf0cdaf625798d0d0d04a61a2482217b890168e36f20cf1d6b81f9daf1a49a781567c4363ac2f3ebf0252d5adfbed17f98cc264ed2765aa279b7437410ee8b4cf42932e5055f4884deefd2a979ab1328f97cb750b3b7e4615b9c1c61659c90a5ff6d1c736e785587ec85040fb2c6decf789c2707974bfcbd0c7f699627b31e0762321d55bcc6acf1aabbd44abd7766d397bfbb68c424b311611d9eeb6598ca3126f569f688455da8d5ab86eb01f9c96186858c4b5e447aa2b9ca11aa5453f731beed4e09f95bb7376e200212e2f03551b8b09a19d6910f25898d692bc20bf6ed3ac9a0276db560de5c9e264f4db8fec6577042fbbd4510bb7070086508ac451a1fda26582c259412fbf1bd60cd5e921160c2604fde559b5ed4df52b805010b225f999450adadc6e108b70f169a3d8da6efbe1cce1c4908b004e928e3cdfdd0b4c5f742fd72a11c9585aa3517486201b6d9a98739b77970a88072750d29d005a291546f13b576b4249d71f04a9abf8f653ca206d98f738af2a1203bf0975f0a40138df054ee834ab73a3b1d7036567369a7ae15f808904e08adfc84b34a0e1356009d8a82e51c3e8f2170908179bfe47be8ad819cb12e85b6b76bba7c9b9398dfc00f550e32c171b4d5f2d9676063efee0b0b49660c10260ce052dd00addc3359e35c25dc33066d4b05bec7d93f71e0ad7d5ab83d844c7f33137894327f464260688ea4ce9847046e7dd0bfa48d4e15277a9586b4742daf0c5ecc59aceea6867068b03c20aad38d04a814472287d809a9285cd4dcdbf68f3f4ffb794701f4c265b2dff4aee55c9815938689162e08309df150538e60dccc03d495adcc560fb831444b922a6375845cef5dec56eff2910b5bde5f25f0e550ab5a13205de91d20896fe04a8ecc2c83d1371cf381424f8c43d2a5ced374878405f52bb92f4fa3c15d29ec151508488f9b4e42527921e245a8ee4b5d6ee95797f6ec4374d79acd7b467454a1d7eda05a8ae104534b23c46b27581abed6afc3ca555202dda94fc2b93501fe78867730a84f6f726dfd7364bc240b65d6c3022a04e09c89e36a809fbf244cc5522315110e9e33c8a4e1f1396e3e51fcdd53d9ae94fe7bf6c6ccef0ce02048a11441de3c25aa9787c577501977e486f8dfaa4c81e3183e648311148ce5cf3de56878847a9d14c0645777022c158670377dd9553eb63eb17e19ebb06202be8fd9bc2b24878cc86f9938e5996751ad9ca04b636497199f7f27dfa0f5ba2a01c3a491bec6dc5113d127f6aae38fa07ce7539a0c1817f7f0de0da538f4d85ffa394784a42eb50994e28530e3997e3345db28bafbb836fa463d34146d9f46d8d2b28b3954b9bc7f84046828e9b55e2fd663e562aa95caa97873f48f0a003d2251fb3ddbce0b6072fc17e0d3f99b655b8f41e8e6986ef7526544222e2d402489eabed4c219540605b9f5dd321ad902708601e85bc874c11efedd072aab7e10272c87b08b9457223de9fbc3abc2d1346656a524e9c67d79d4053c4257e886d6b430f5b7f57b2e5e92ae69273c1705a3074d5066def69fadea1af8fa9b3bf4890f9cda4b1833e5ed27f22bc4fe4cf452880c7b53320bc7cb748c0af6e7550ffa84e4714ec18d208131ae9e3edc6cd6fa2c60ab8ebc1ee56eafc01fbfba061e55014b9711eb58fdd01f8936d29dd081565de0b175b02989c5ff374e6f58c3383e9bc00d8a93903e6a221c7475e15aaef77594849af877f3807a76e03bdd54ff0b192bf34385d24d858d6f454810ee48141d73e3acf1aa3d19cd4c723a634cd8e25b4fb604c744e408dfd82961e46e8444f001d0991af24b3b6ec57ba41fb45122afc73ec6b25f501f1abd46181247945729337bf5083e5821968502a5a696043ee696c290095feac000957f968ac61ccb572ab2f37008830ab9a81d02456190af99873450b52df1888c3d8b6b13df65a9bb36a4b6d0538a0f179daebca2bed6f94b4670560fc5471c3770f2d004b6a138b8243068d754fd246e9881242638c6675f1611f237146f6e0f72ff2fba96f479fe0a662a81f40928f5400a0bbfb5ed07a87f457d5febdbdd6f323e2a59f749e6fc8a51d08b023734c762a91cc517401be57ffdf6a52b9174ea153abf2190ae2642955c3c02b4a15d72456c9d2f323de6fabbf56dfa3b566f1aa688c86b662bd34cf2511cc4a30621b6f1f1ac382bc1c4fa4c0d4d5a30ae90a5e54a9fb4afc1475e7c612eeb7f0e09e894c2004cd04126df9359d525d7f090e4b531916207c38c3512341c84218c86fc50061043ba1b89ddfb21cd756b391cb53e8c1cd55352be05efe562669e3986c022e30c79a97bdf087889a392e6da0d72cc7ea208aaf23408df23f3a9ea9bf9a935e49c9994a37a5dd0faf1267d5f7db47cf64ae1d3ec166466b2f882eb21698aa375cb50146c0e660e9bbb38d7bbc1c1c6d8333f7031d6a", + }, + { + "68ca38fccd585eb14f953358220027046c14ef965478d3d8f206f63fef4fe3571a1b53e774b298c347cc1b69cc426d39575ccfabd5a284c7a87a0698cae9efe40543cb79f5643c3c3057a5fc991235f06f059c44a7200b509a12e864fbd748001a14790f78b54ba80cf0a4a603da9672df32b68652c1d6edd3be51cf969acfb0ae49c026fe0bce0bfc72b1ff4c47712b7a27b2cce888b9bc470b8bdda55a8d53a34d79a25947ad55b95e5406a5c5311fece3ecd46ca590b3b01b9055761da8196b21bbc468681922c66d286c32598b1e3d77f2a91d835ccd9eec231409cb2e74ede9385552517718be9f84f0f9100e368701dfa4843b7222279537306065a54d4edda3a02f1ab9edba3ddeb34dece9d5edc8797103eb942a80cb5ae130ff2e7eddd11f0cecd8f9a615d75963c44238b10ab1230d9db7371d8291feb2912d306efe4f7aea2773903d4be9a00f2bd8c03589e342269a79441c0b42ce9c6fff0a6e4e845876f7e9b342d25351fe2b1233b4f576db90ef1facfa617b96d17aa03fc824973e1c80f15e5344b0516fc28424b7faff47ea1ef4e47f6f7b50e91b8fb14027f05ca7e1bafa266a4b952cd0b9e4cab82bb4d61f99568e14a6772f36296f5d19cb04fa86ff20f04ab61d1a6f01e5282c99fe4c3254da46fb5276317be58e94b1928e3791af27dc6544f6d445dbfc7275fbbea74f98ee4aea647b654909f9fa9c88312d3759099c9d0070e3db6d55506813f8b7abe602964a7dfb9387f58e237dbf50b4185a50b65ac099352dee8695017e4dac644f42aecc3e415333cf76b08fc764a721b45d7b74f6b0a2e43637e5b4849218d3d4c6a01208f345d76af56631590e520d6bcd82627d2446b45b2c68e0be81b3924753a54f47ea27b1e08de2399b34470701c9697eedaf3248db9b28991cdc2c632fd1b376bbda279b6709d5033d1c0a3ee573bdd222ef1afe8a4397a61fc30a4e94bdc55097ecebfef6c00133dc0b72c17e2f93a11eae9fa9f1364f10fa595e8e1623dead10caac068aad3967b9ab2837dabcd8f96a77a25baef16ba84bc93661ed150ffddfbb0369683cd021e8f959c2b531bb1fa95d7a574fe5ff9aae35fb9b4a0a9829c59b932ed8634fc05ca88211da3e30839baadaea8fd9843e0e80d9598a7282500d157ee579cda5d57628e7506617d301c2adec5186708f94f069ed7bdb70cbe88549cefe1673d48c9bbbdc01d2af03945cefe6e25f757750de64cbb9d496a25adf7058f5e32c827fe75e80ba0e834e6a72344dd2aac4228828ed42fd83e4576254af5737dcd9b6c338377d46baccb02d00fdffaac12133ea0e75e791593ef3aded4ae4c9249b8d5cd20aa28cd652b9d750b88111d9b4fbe729e27882206b2f0eb614d7daaf6436816fd80d452ac71c7a7f9e8c595287407c6ab9fe8a242e98da4270b4f1d4ea7243c27f89ed46a567c643f31f967b5f12e518106f3d3e08178078cc714cb6e39079631966a9becd6f02c18e983ceeaa2106ba9043f9985b791027eb5dddceed563106bcdbc48a4ac64bd95e87c708a8cdc33811bcd16c35e193203e70ef2bc7203183fbf60d46bc581f1bdfe62387b3e6c0c4a29130d872c3f8b134e7dcfb080e7e03048c49c0e468dbc44eff4b02e50bc6889cf7600fba58c0ee409ce948aa684baef4956fd8fd4a9c4c49e84e2ff314b7900b179fc66f5fb4affb9ef7a6064354fad8c3d2d50e6f2157576f864a843dda8f547955c4d80a73d4a86b7aaeaecea886927a5ba0e97df740ec7e8b70bb650010df55d4b75f478b07b205b560d45de666d84206c1bffd02ab7b8d1c37f21c47d1711b89d16214d8151a8e75eeeb5c54c39e5a855d578708d314240a064051d8b26c6183ce755be38fe9597dd5b5d198532b1db083a4b856b8dd60bf1db197cf1df852eb6daecffd97287a6cdd4c05307722e0fac798507f75b03e9361d5627ecdb56a3b633938fa61b2673efe6c6e768e4e7055e6c1d55c7113efd3e95151b606bbf169f4296455dccb93da370150c54fc11b3682f092f30381c6ecd218a3d9d39442c8bea61d9a71b174a8b2c56e028689380879cafb7c4bc2691dda0cf6ada039755edf93f851446df9f63267f8b8f030c069fabbe6457d4f63575b5905fb927a5a720d52c351bfbc48f12440a91471697e6b2564b1a2b314fa0e6dff090079637287b635d875f120671561102ad27aa83d9f0cee41bf023bcd703ad670b43ae23bf01713650834cc1e95dd486757f0a4f6fc9337bb95738805ad5e756198579c886eb0ee77e4ba957997dde0eecd84e4c9171c84ad8f0cb23c6a289e037f3a8beeea7965ce34fa47cbd727baa4ac9e6dc3baf17049fd2386674b246aca5ef6b8496f1d17a3175f6fee86299232c7fff682f066cbed895155d475bf9fd4b5571d257534c88c93377b1a600d4c280d42aafda975eb32c740073cffa610b5fd2dda7262a2fff5da7a0f3a875c62949e0c9247827d7a49bd8185bc27967124c34b9725ee961bc8102a029786652c2571be6cf33be63cf867c2b48e5826b31b714a415fe05c27f0862a870d8fb33200719ef4ac8530a4ecf2597b4a7f2e66f078a7505803774889a1cf963083c831f46725a1ec5545d8489e53921d81f80ef99f5e51a2d5992c7769c2a7ec8bd8e0f2fd81de53c7b69b650a2d838b269185c5efd668c470943bd956e3c5e1bba5d3b927b10cee68a75372d4d6fdfa6782c05659281bc9bc56a2123967f4f50cc7ae3379ba21e1617553354b5030b3d3f0092c1824f5d47b97e6b4fedaa90aa2573e1b115ffc72d44fa8209fd8d372c8dc9ee00193b47c2a9a302875da331731713243d02eb5a57d5dc51c35988ffd742ddd75c191f1eb2c2214a1fc47b82db8ea708818262d9583f2b1b98a40b6ff6e94742f25661a51882ef28475aab12d9422b6ac48e341cbd6f38460333b5fa1cfd4d0f43aeb46c21938468fe3f7bc771972246156652d2c58b18c8cecec2dbbc0feb0fae9f6bc022e029111f94e8913c0ad741612a1426b53cff73fbb24fb7b22ab750ba1310ecf339fe12ced6a3fae17b4c429550794a8d68be891b0e30cd28e81de2fb2ecfee58bdf11794951276005eb8a5af21e03c8aaeb595ace652c5ce60a8b98f6897d82698ffbb2e02213e50d9d3f00bb42c8652d22bffb87ec576ef6e206ed6c846fd5136a87f38c9ad899371799f35a6258878418830b04da79fabd80e7290456fe17c0850a4c20e2e657f97f4a53e1a3db65bb5e71bf38eab9f56aa11e6ef71c85b8a28f04c271", + "ea196b6a64be4b0799b1c2f72281300c3a2577db44e5d3606b8b02fa8fc46c7aded7e442", + "7c86a2c06b7520d60023d18fe73d09c514ed07a91d50d8fd5bff00e7550faed1", + "952f492fe00b26028c560fc6", + "b3f3294815ce461c8843172efe93f73a8254e58a0e71953e35c15aa89a7bd9dfee967853dcbfba73d3b87fa60449cbcabf13b1206d0cb27d2c3fedcfa695b6d41efda37bb6db35449bd470a23787619ee48f981d3f0b1c8e121725b2289b6d67858a4f9ab41683bdaec8a913ca2cc292a9640efe50fb85a1d1f7b286f45d4448f85b3242f45ab44e3281d759db24dfabbae4259f127d6546ecb914d7e93e2c19230c67fba8a6cba6069023ff7ea3d8a170289c2b4391bb97a7b899228d032b36186dfbb29ae8f0e6c06d753f4c6b21982d49ee682bef50a5c2c8434510c5fa2b9c0349592f33f8d7ad6f7243d42b292aee6d210c61e3f898875b91a17a89148275031b74cb34e628d7b701775dbfcf87c79ab279a73dad14d8eed365eb9f29a007b7d2ccc07ceb8cdcdaece67fa0166e135c9a4b939426882eeca98ab887ed2e4888bbebd5afc9f2da3e9162527262b0fa85903246bc8b80df3060c890ebaa516781a2b2a138b98001287e12a9c68471912dd297bc0beadccdc31a27b7c726baf31510cd355a28e4ef786b30084af66ef135909795aa73814cbbc6552270d5e11d46e9497ba30d6d8cecf343d16e7e3357bc9bbfbc7c1dcaa5fafd8a9b07056129da02e6228886463474c5af1d670bc14cf2868b816cc71578ad807a37477341c8192bfc2e8b1f7bfd58827e041f70384f92bb4c6acc415dde5099a1c2b27b709f9e53d1dab07c87a042ca4af7a2a6ee57b37bf2bb42259d372ecfeaf1dc55ac3a9f211f16fef3b2d5f11dc19fd1f425c14779580b2501ec6e0a84220e7e12baf9e0fee3e8cf499a7fba6721a746f598f04ee8ab4df31fb8fa5ce2d2419d5551155c009f2780cdd225ec2c19f94fb9c8b785ad4574b4da766eabfa696a1994e64a2518d1bcade6390cc683a6e80cf8b163c3e58cfa1134ee743079347f08a89c81478668df32ce9cdd7b853db5cf7af13436f3bbb11bcfa8f6b6d727a1df84f99fb3a5c248b8fd5baf669b68fd9af45298030f3251bf0351fa9b58b0b9fba53ecfd838300790ebd689744c1b7b333fbed76c8fb96fc669ecc6695ff5bf8379dd2a3c270af858cc60894be8922d69fb9707bd2a7825f2eec4a5056e5e91714f4dcfa86974259fcbfd5f20d55923a0a9936fb20e5ae9670e2019336e15f530c0be449fe355a7a02c0938d60720d5b8f4f59d2e4213ad5251c6058312b43d47c44ffc8946a98797f5ace279d3e126da63633c0eff1c412febdd47817aaee466c639e43637c1e179f606780ab490d3f0b3c2d79709f1262305fc87c02f68da2dc32f8c544e7b358c3a5d2c27986a19d13fe736c60a3524e94caa55e853eedeece985d16bfa6c487bed6583436cf82077fcdcf90a05f49db50588f46550f7a0c3a1cfca902d66d25dba8d2c53bb5557cc1d87c8a407898b3c30c4f0852df92d839859c191228d0a47324ea9ec2e0ae84513cbe4ff4aff85e77b8587f1044bcb9775099ebc2f28fbcd1cad58a8ce1f072f2228f559fbfdd8405d86f8262c27c3d95e01016b343c6a4e59dec81b59bb6e3c6109a4cffffa85e9752ed2149b5624417c0dfd1a27bd2630bf59814f15820c43bfa317be59ef6f433c95e8be154a8ae94765bcedadebb717f0d8c24e01e1952bd104ba9620f067554ae0faeb78f13c622c45d97b2b5774a3e30cb07f2cf0e8b19d1266d8a8861f3772305e24ec5c9cb714806c7d705a3bed6385f8be4e12562e17ec3df01afb4ef6f7427c48a1bc0e64fc65eb1c3d3ff2d6687e4c275a019f5ab5c63bbe47e3680fb1802d5835c4d494f0f394de1ae47f81eef005127d0971c4589c456ae6a69855f35635c28b590c1b93f155fabcab59b6c7cd8ea1c4ed1f67093aa782c54329cdcf9bf84a40400de707b894587d6e08cf7fd72fa45b6709a26e97ff5ec1269b8042358f872a79e8c2db1c7ebffac014d6b6f71b0c1c1945ddedaf5b6911668059b61b55eea4737aa307c829309c9ea548fba2bede023849bd61b5a467cd1ab1c61205ce64301e2531e5d58d03c74ecdafe1f5b74627be8716cad0d0a0be60984c9f9dfeae24a6c4949170ce2f589326e0a76c447a578ea3a5e4bd9f18884f18843eb1a78aa2fae06a7569a97551b227c34d429c8e1c8c5417ced93c30dcc607cb32a365d87328aaecb4ce57ab8e74f0d9099e267cfb747a3bca9f76b5f6dfb543bc4b5c06c3646062ec14f511058eb2939601913f8a0f1785249cb72b0bb1c12a9508b23caf490537eec53f614f3e06592eb61f75c1cecfa514cf7b500b0375095d5db74556220131390b77d0db72711c0c7229a5769b1d2b3f5105f3a4370beb1cacbd93ce32f89f1fc833c7949211dd204616c013a3399a22f5325f1a00008f4c8ee7dc5bd7476848721fef843123a6213cb0c0b6ae84233ed01a77a115d06e08990b8e60cfa4f41dbc9505cfae76463278b6c6b5ac7c3b83284caaba4a6a1d739c392528ff5b06bc3b82e98060e3001279a44aabaacc661fb14e7581d1235940cbe067c6b386da09454e0467c785ed0b65d41ff4cf36ba5f63d3ff2b45c11c6c22d3ea8ebbf1d52d770e0ebf2ba0c67c7d3641c145cab474a88119335990137fa82a340c2cc8c453752a3aa801127a47aeefe66d1af1a26ee1cd0e6d935bd548f6ce33a9c204be02ba08f9fa03c685665375db7c0c656ddf3e441ddd96b0d2018beff5086cc63339f26bc8332a5e6a1422bfedb69187a3443c23b630a28b02f8075faf3ff2fbeef6cdf02ba4af47a765003de2254b69f487bb5d038759a33ce6885611198b81b0b6fc5d7a531a7a90dbc3556aa758db1657698cb3698b8207b1c1b589efe5d52790667ac483dde9543953c6392d5eb8afdafa205d325e314f810e9c7722cbf5bb76fd6502733149bf21c60717ff5bc366b85ee9f206bb1f330ea72f61a9766090eabde747b1eb9c046cc8713d5a4f8d4b7dcd7c61f2496c5b467608cd9260382b8f11b04c318a5ebb6411a4c7fa060e08c295c6062ac644bd3d10bcbfcfe2e3748eba66f65d904ff21147faa8475f508f21238d42f62b697249b9fceb905127f7684c8130cb8663f09cd25ea038078e1980237389337d1446c3a77bce41b37b50b9c3a020526e7b7b3bef370cd7af71b225700627060eb65693899d277ed130ec5ed9eee75d4886f31aa93bbf302e0c69c9c4499396b43dceb67c02fafaff8b56698308393a03f60babde883f00de2c66831f024fafaf98b2fcf37a9ce01d4f34e95c9408395716dcf83fe86c7a0f5e3e6741c3b63b6ebe9964f1d5005eeb732ce66402007beb3e6a087053", + }, + { + "9100c5b2d7c5d5a854bce55e82f94b89a268da7b66357a661dcf75cba10a1b320ae0e4e1a5b989f9766e57f867a3810a0b5b857191ffd7aece4c796f5694a2617486421940cc12b63a6aaea20d2fac188b318a1c3061cafeae436e04d710654b96a864d674768caee03a50ed6afc06f52d90115df1db5c9f1ecaa4f5da094070b1a447251ad3d4fb0e24e87821ee6d4e7e7eac7059080f77d2b36cacbdac1c6e5063946a376865458c4ebdad3c2afcbba8a82b01b03a7882eee42eab904a19e0aead4ae515b02aa2fee74f3a114bf5b9f320baa35b3225491653f4a69e0d864cbbd031d0805b727e42c2b9530dae0c01cfc6a42af8ca730e1d67b4bb743a072f0a38008b937209d534c2284271344340fae76af2b1dd00cf44b48ab8ee92e8f9cae8845e5a8d338f505cd1c19014018bfb6b7dad487e7c8c32064421982c1a63149ec16f2bf4fe7b50cf3ce1e33d6cdea8e98bf067077c9a0ec1bba6edd5090273ca719ebf6f1a0f3e56f021945cff3c468b2dad92a947a06a024758d7505a4a1bcbe9da3a03e97859da99ed36982a7c23572ab60071566b749dc34bee1d9609e87fe32282cc9adba633c9ddcbf359ef4a83a54af5fbb5699978b487954a907dc9739f4b3f3927e66cf0c338e31c272da0cc7795c72dfe60a5b2e73bfd77b8c6ea58122a913910fe29d3360cef5d398f29b024f0dd225183d538bed2b076989aceaac460e3d45e0ca7941897f151261a024b0adf6d5b62429420144497adde6557a3c53b7723471fb760b6a8b1dcc2b327cd939528f5d7bc16ec00ad99df12f082d82bf9fb7318b3d3ce5b84ab1e38d2ebcb6713c03fd0d62bd083c4af96b4316ee02b6953431c261278aabd96e28f81adf7946e3664446135c825e45ed916ccb941350c84523296cadd5360bfe3e16dda75db10da1f710fe796f3456f0911294a4735cf9968656345b9c3049ca47176194c86f36cf702538df699fcffaa254af15b198ac37eed0837b00cd3547e496ecacf6136c6648a535a235059cd75a3bfd0bc49933b379b72e7a8463c268faaf05f0b27256fb179c9d4c923a13ec6600f83aaa2bee13e30c8e676040c06aefc65ba238a29d403f3a8cc164a0bdcaa1a5f54bc1d35fa4efee0c402eccab1e92f6b0cba94e1bd87898a9dd3957a7eafd9d26bf70866450646090833d4b91c032428bdb9097b409305de669a58e44931b7b428bf1a6dc56177cd944b87b04eabd80c64e287a5758c83db26dbc06f0c772335363ea2fb9f19c833644fe3b3fbbbbf5f9d460412d287eef862ae676f258aa45bc8465667601e9ac46e7d77693936c8d67ccde94e54d746b785ad26aa38ca0500105b6870790235e780ac50b9e3198f5fe678ae3a4ff4f1d4a2177edae183daf2de42625845973fc544907e27a90d868f8634c9d529bbaacbd228a5b4ac7fa68ac208e207a022cce4b24a0b5b5791eaddc6b3b3ef6e5dba41855ff531de9bbca0a39ea743c0732772bd32cd15c4b7f28a6ba579d902331a88920fb970aa75114e14b891d42cb947e9eb14feafccf1393796b21099e52b21773adae8e550f93364b1c438dd7d7fc76994c51860b652974d04a7e6ead207610de149f231422595f4e9ced1674d98d0e15ee841143ad8613f804729524e8a5f30d451611676f70a60c5dcc7127497f4d27f35e7ba0e48f98e9022e0deac400e809170970867a1682c7d2f3ef2c632c44568abff76f4f804841ae462c7247147b6e1debe48802674fd55b2ef1be5b4604d5f60c35358c7d773ab3a3ad0ab81868c6044d4e06a48ddbffacddadf813a2ce09aef34f3b60b666245a032f021b87c81fc506166983f25930cff728d399f6dd48ea1c745ad2da7f2cdd9e3ee915f708db0d1f3481018db1c174ea950ed17247bb8ebc065186758e5403bd4d19a445e4a15519326696e4280bcecd1a903f525bbe1e521f94d79df8db4b35f4ef7bd990c0f2c32789a75f95761ca0064bf251fa00b409a58b979e56d2c44bc2302552f118162891bd78272384c739c0c98bbaca3fc46fbb5bfe123eb25df0e27343e38b5a0c2d0774443af91b64b9d4e0649f20290edb84fcedb3bf4ba491bee8754a32716739e5ab64deb6c9888bb9fd2ada1629a59b16934ec5dee3678dcbdcc7fe5e2f3833da9d1281669b1d108837eaae5180396813883de26b957037623825b0675df431fb06b35191c06229f84cc849ccf1b1e079efc2e575331cd77b3297d2908c048b82b7dd14883f3e707bf6ca38f87c19625bec47c11f54988a97205d27ac51a32f19704391af72021b78cc4461386dc3844a1b45596fede3f70e311eba92b1d9ac221d3dc19f3fdd080c2169348f2cc8c9380e12a7ebf69efa37bda4ca6f7e66919b94532ac43022c0518c04d0a8cd99e0cbac88b7a317a1dac5469534b4fbc64080196b44498e149b0a196bb2d6f59392a21c4a4523ec1ff922a52de790e42810fd9355471169d22b734dde4a3361ecd57e271a92132a8b35cfa91d508d45618ad8c6c1ea209405a3d1d3ee1535caeaa3f20546052fc13aff7a584ff79db1726678344098d8563caa2a2abf6fe5aa03d7af49dccf1b17be85600e7cfdbfff54282394b0fbeafda615185574fdff78d59ec2a26dddba1c531a1ac007cabf5be2e2f0a3dedb9174e0a9da5597c9de6d68911fc66ec9d2b1e3fd71ebb83147ab14384ee303d067f47a324a01fc187f54a98f1b0848fdba2ceb3c18936d503e71887d548c4dbc70b7eecac9ead3393f8cb85a84f1484f2e237b36b6d886f54a0f629e8bb05b0c6839c722149a5b541703aeac04e6eb230a5659b12ed0a668d018f75bc94258218c1f5390b9aee4c0b2836cb76a47da649e2425bcf4cc15c4d51d109e5f78cfdb88137c31b2510264e46f1c4eb6e6b3450ad901ff9517b47a24d508844dc85fc5dbcc079e2d09f301691f401ff5f36500cc66f0617eb4dba389d427c7ac778d78438506608f0961f818a2080ea56d0f61c40fc342b49ee63e730df61f757387b9089e1987977b7fa02d87aec2e4be24b8bdf7fb6286d190f9df870944fa910df32f178ab692fa56b071f57366a3981f51800ab416dc4500abcc19e0c6aaeeb9ca063470993ec749a0bcbd07604516b1d51175ebedbaec8986f67a4d9158f75b5f3bcbe86a83220b4fdf12a0242951f94ac7d52882b1b209b82c4749753ea4d46a60bcc4f3eed033bde2d3d20c25cb46fd907f7052217a0a4db143b2efe8875a59441f4d22ef70d0c244b2de6a7e15581e84c860a6326ae3e3aea6d3972e2de0623d2d852c9e65eed318bd3d86d29595575df60d9050e1740f884796b6657718a294adcf2303adf61c6b23933db93885172e82a78f741b8efc6315a2c88ccb6b11692a346cd82a79334e0c610734e61e6378b5e2ecc161d924778bfcf4475805a0823a0d5a54768d9272ee99b7c4a81b3d5dfe1a2f5ff34", + "3c77f30bbb698b1571aeb54653fcae2c23dc16be58603f0c361eedd813ec0c4f63005a1e69e533da93e820e6e4ce1308aa29c60289060ebf24fc9738e8a4874ca4e26a0dc79ee75b8607416bd554737f", + "0223c0a6052bb3cdc99a284fa169ba76be2df53b677642a606090a9267a60769", + "7d3981073f90c6648c5e9c74", + "61ec5230306b70113f67b340575b77ef76d521ff75b754d551e4177591a02351ad382b2a4067f2b3af7e8e15431c7133e98be9d8293d17ef40161dbad9a4f1a4f30cdd557bb9a8b03b5f1b277c850e23ecfa0fc2ab1102e4b1d5e836a606883c3d43527fc3aa26955964b144a9a56cafa7b174d72a0635b80e7b4f871ead3838a955a14c4b8c5c3c66fd86a5e4ff10dfaa92105378bbc5f76ad29727e5bc4779ba3e6dc19bf45020f6ce4dfb3400df05cac51577d58eec21b22839b8f055226b204e641783bb3305b4461172f1c1d48eec56fe6f82aae564ac6688d7b0994747d9b23a24418e69f8a4fc548f854f86baacbdec78b7597b138c453349034c8cad2ff272781e0e6799ef2f8addaf18528736aef21ef8c2d213161e36b2c7815fcfc40747626e0165684e46a9a2275c533d548e52a9952a556168195d602ead86f6bd699e97ca59f4cb2050ff148f5bdfec358dc4542ff2f700db9861dfe5ba377ec7fdc0fcb2501e72fe6873c7cc76b95b4f300857f76e6e6e370119f403b556115b19fee7009f4f6675ad2d174f44002e35ddc360f309f20a3a1dbf39d90d7e5fa2106c53afb0bf445e4cede59cb50b8a7a2c0961d00b2c251f2d815309f74a46a424838ee87f1229273ff3b66dfb79e3b1ce11bd60e061e60e3f37bd7ac896b618cd78388590f44b1a276b965a4b95f2e3a7a175b30fb45dc7a71d4b3a1a33e98af30dbb46a217c50046ac21b8bbe9537c02f05a5780c8a5d796bd6424fd9e9f3ed5932069bc050bf4a1898a0ef0ca756aa2e2269b709cc92e0c5192ab49d692143388ede2bde4923c85eae8f59db5c7711dabeb33743c692be6dfebd815456958b5e1384a109f891f433e7b4a1031d4f30478b05766dd97eb964a28f2f7b55aa6c27c7f4ebf4d47ee8709bf99915426b3896412a855798e392e111789213af537cff7a976b4509e0eb6ffbb8e886a3596a242d16d95109b0ff562c624e06636a3611f804f9b2e252afe8a4e5e868b48e9e734f688f2da2012d7fdfe2d3aca75fd74730a85aae90353417fd52b92d28a5098b6af358a096b859859916bcd5a8f779676c6e04ea461fe62872050af92d08cdf1124bde1e889ace3c923457ecfe0a635ec757907a131ad7c2ca3f60e1317880f843c5e63f4ba59ab2882a492dd1e070b070af6f60e18cca29541206a7b267c3f75a5327fd9b8ffc9b36b57b73b36e586541d15c85253e17a2581e8f8a1518f275cc79afcf2b5c88a16e9bf553e757df089b5db90a9dcdc1867b788fe75abb5161dd7ee1cf37d3f0faa793ddb1bbf1eca13f4220ea63af8ef7c0e7144d999ba1c5a983e74d48cef708c1d28d3c0a168ab87d0ef70f381693f0d438ce013ffa2cba65a8cf6b498a7120209564535b7372690329cdbd74eaa76765962720f06aae58338a10064ad80f5a67395db2c31d36b1f5eb777306395f192599d2f737327afdcd9f14b3f24155a3f974915d3302427494fad756703b13afcd1764ef9735e7dbff920f1253cb668e9f40632aea1e0b4620db162138e4a97e6f0729b14be4a7c3256250d5e7423ba1238c704503c51cfc9cb68db7001b2f597a15e77138beea02e11e0bb98a72f2a77b7260e9172fe7e60483114ddd836addd966b69570db5eb26a0cfc4f8a8b80d26357ed51a70165bc0dd11ad7467688025bdb532e7222ea12f23c44d08d111b0ad4acb2f5b3d6b45c387d541ffc84466ed57acacefb1436ef00bcb5b6211dfd0650113ac369b9f3e4891acb2693c377467b1e9c949cc0ea6c4a72ef9292964275ed397cd2b1ed25fe1aa8f47e90cde362392da5e53893eef6e4f61decae1a75e3b726f0596f09c3cba62aa08bea89984b484d5768296a5afa8b0759dceba530a169d22b81979212b3343db35ce4e4766dd251ea6a47f5033cc090d6577efbed441bb4f8944937e812f12ef17ede76df621bd4cfa31567ade18b74583a2b783279150d584ca13c0d4784b70156afdf9be8ae96666b82def888465cd3df349de427d5f5b3572e4f963d33f968e6780e381ca196bc04a6664fe93fdc8558b21b84130dfa2a646950eb2e927885925af46d7a28d1507bcc3c02ba98318bfebe5b9eea1bd47935ad869eb701cbc35a9aef5efad88ff54eb350a34ccef2e159de8e16135b81105bf799fbd86aa11653b5ef93a1ab1c367231d61b42b8bdb4f04d8d05396d53247d51890be9b56c51cb19eec0fd1e6b8cdc98376b6c6b30963ac7ab02656ff94dec0e3a0eb3f3ffb8bebd99d5889df98e6c77093c370373dd5f17871fb334c7eb12c6ca22deb75bdac9eaf24281c965dffe03da9c940e13fb382fb6be332797813710a7cd2e7720f5b9e53fc0d98fcceeea4a8e9f787e670d60bfc4a849f34571e5d09b9e9c28cdf2b2d888eca9bb31ea8b9239bd19dca86880ad3e12b1583acc3a6d1f0a438ce3b5a337487279dc4ead1b214272d455e6a2c8cce4ae3bb29abfdbe77a67ababeaff5dd9c96b17f589cd4615c0209eba5e4b1c7167b4b739ca4b9957185961529d1082226f85068890c94aa1f1c244259ef7b120e40114926a49c4412b67b4caef1ff3ce6f3aea3c6107b830cd34df9f4d73d7d978b6b9d5c481e9d76e83d649e742b098334838fe50d80975fb567642d3b72c461ef3072ebb1d03c0099e97575bae6a12cd2352d9d296351df6965d736d7568c2911394a73d199743526ba54dd62c56c598f4e78495c0172739274c0b8c96755e489765723a24a8704093a94544f6c8764dcd1ce6b4bf2917cfad27d85e4442b4e5bd577ea1a88c2b79d61cc1be01ee9028235b36444483b4e45da1087bf6d45ca540620de5aacc644a0d5c4b807b582c7b058e140eebca539947502bf73c9abc81a0e3a618b39d3a38c4ff7f94767fd7e6b9eb61e629806bc3d183bdade7e369d180dd2f57fef677e22ce41be7224f11723a85a3f1d14d7b72dc98ccb2816b77e625ce3db3e2c5753af8b079e0d63939079a01910ee4699cb405d4d9c60e4ac86a7fda3a4c9c290662afbdb7678c3a84c87ff83470fa8a416511a06d3216a1445699d7ad7e6980491fd596d39762d576b08fcbf0825243c1fc01ec8300780857c429c607113160a8354f6699b368a87983464472a5754fd58943fca6f6779764fbe6cbb510d5280292df02c4a7ed9acec8c95ad67ebcda71d0f519ac18db9b43b28244cd34fe02c5d694df57410eb54c5e1ca0f8501e7776a811d7ee81eb9d8c80b2ca50a012b5eecd5428af965b217e7fdac80be88a01f76d473105b027eb557a523f13c55e1670ff34627667649573e0f19dda41c525a8c96c2866a88bd73e66c786767e1657960f6676d8a22be1c6024158a0f0e4ec761148b5a3d8ea481d8fed94855be82479ba23213190054f937838f0e35e00aa74c89b294c29ea25ad7e96b4b6fa952ea8f1cbe5397b7c86d0b74ccc25e22c88736b045fe86110bffa0679f28a1f27162b51410498cb7", + }, + { + "0fcff2c29cbb5cc40bfd2ec573ecf368275ade6a00e5730b77dab17e437b46524b3814e7f470acff6ddac4e0c6b748ed112657120bca1d83a4ce01e74a473995804d7c74bd28732a02370ac8ef52b600790d1284d82f077cfe096448509dddd0eb5944a882b7d384efdd4dde3003dea910f12de82035651e3ec9668e66435f519da3fa1f5bcda34aaaf028daf3068304f7b1ec18e65136241a9db281e011d27db5cc9c1099405a4430821e2488a228805314983966ce5d806b0f014c21d4c9d6a066e63aa6407ed6c29cfa4a3e22ca913762ca9d31271d9c371fe858f3b22e931814cdbe544b9416e88f6026b12bb8e88d8285beaaa35be1c24339b5f567480d7b16cbcf6160e549ef4570a0702889feaa0ebc54b11735735b6e2850d5715e5087291fe8890432784aa219bacaa2b874b075c9628cfed5e76dfe38426f9693f6bfb2de49b710c101b2dabb7c7c74f12de9ba8f75b8645d25629568d12bfbc7eaada63364b6f56569cf21e54c95d6797e9008f3496c506ecfe5d6a010d168fb7f0e2ee3c423492df36a133fffe9b87d7ac070c32cc131fba6089cb7d904b25812e03cd6048504f7ef1736ee00ee6b7aaedb3dda9c6fd6437772fa5076aca9888ce55e906a62875979bd477aabb2f4598d32342aa10a6d187c6768f213117a9ff6d830603bb7b9b475002e20b2237a4055ae6af6b8d70e343e76265188a0f07e7820dfb3d898684d99966d4bb9e78b0e95f5044dcc12810a89a75b11474c8fc06c6e734407db91a072ffeb2be6773a7c6c3ec939514b43daf29feb3aeb7afa57e96d9cf0492d90bb2c7be613f2208f5f5f5898b0a3db8a967a75d065efcabdd83759c88086583bb3d422c6c6425525a1adbd515199dbe71350b77940813618b88fe139153974c80d968ed4d9e3f97a91b7cce250a7c963f880dc38011250b9a131f2b76b677f78fd0e4cd6f1465182fd1d644dc42db0bcad8df4ae9f456841765af8e1c1775abf85a69577ece6f9e9035e36c88be784397479e713be4f5434aa4c166bc4702a4916c0c003a6baecaa182372a30af6dc7e6fc4912d13e662bd327829f6e85340fe130001babaee64d211d6761bcc52993c162a692a10cbe7434310392b64792a777a2b31341995072a6b7d4538cfde74e609dd1019a9f75cec0896186c0f42e3896d15be87aac5b11642f74e11d5c2f7de9f07f848ff543507ea4d73fa8f5683fc6b41831606352c482c7a5a013c51e0db59d824582c595f17a6d2113528943194d6b5aadcead62516507f178cd0f76729cf8b81fce4e0138ab224bfdbb8f16f8ea6196b90ef90a63f0fbdcbdfb5320984be8a80a26b932d1db7ecf870dd67fe838069136ff9b9ae087779e82cacf1b06a7b310ce6c439047c26fcec0364ea87e4549a544d540256cb7c3ef7282fa792aad89e919dd89519fe910501f5ef88da43232e917730e742ac2539d454e066feb9058f56dd246fdbb674dcab636585a788b338ffe41f4190447a65985acb9613d02669ad4ad888004c65acb0ca315752e58f51c9ae9259f20cbe8a668a207a5a46e30891bc909108f53db8bf6f0f11549e621d4cf4763e0035c867bfe9e1192fc421c080b25289a78f4167fe517852efdb6f3ccfe67ad01b4337da2c18f35bdc151c5dc76ee66efd27d5fc784e4e6829bea4f8a41ec8bf61ff998d178ce9f4a10551687337d7705eac6cd7fabb3f2379e31c1d01e4dc63e475f0fb01d9efa3de400b5177e2c2d68f2ead89e9ecad62cfc97fd0ad5b3391d0248dd2fd7c75dcbd802d3463ef0af21eb77b07a3286a72f1e9439f457630159abde7983a5c74f7dda12b40913632afedadb691d62003c70a46664fbd976457544cef8ea863858505b1c596e7f745d4a5fb657b1c694226afa9756c40d9c49425b323ce17a8531c5919b24010f715b5f27a300ee37334931ca9ff5c83c3f0a87713768ebccaaa15e35c56f3536ba945e5d954c94c885c68325bc4b51fb55d96c8d424849ece9a812af0747d5b1dc240f71609439f65acd1c17086e025e376eeb79a7255680cd692fc4b0f5768d1985fe8a1a387074f58c8bfdea8e5c11ed379b845ce2052a5b24ef0c1a658923eb87adf5b01e6aa59ae6937564ef97421722c67404cb9e5fe07d5bfad2e52ebe6cccb41ceb1eb2760545fb6a3582bc4ca572b0aa4e4f0a2ecc56299f3b485d980501a4e010576615ad518fd2d43c1f79aed013ed1f1e1bdb74357aaf7dc84772c9ec62da43c8ffe11a7fb3eeabc3584a936c37b28a438dfe78f89de6b0d5597ac1bc55057544e68fb49a6e505db69af122c2a3ad06219b7f2a2955db0ebf55c06baac5e0efac609436dee484857f75a8421945484ad0c7650a1d3008cc85c938208f19002b7994524878d6ddf85c763a65cb72a09c3a059657459f13cb584bfbd754fbf2de904517092be4f1786b2bde26ae8eb2d884592fc9e84395408f8117e47d1ab30d5fca167bbf07e41a33c230d240e3aac53cda9f251e24659da57d721288252fe7ff3653ae3e47b86209e9344accef0009b99f2ec7b3845558f1d77b89fc9b61ebc1b589fffd3261f71b9631e87541e22ed100e694854bed771358f10fe452fba61875a605b8080cc39e3eac13708e32518f28e60464c38b782c7c7800df63b6e7e95ced9154ea54e32900f6998f38eb1e51c112b6949e2eb11a96b1ea0a68c1e3b5af750a99c9fdb2cae44c5a1d37686ef87b158d19343e23daf00dd558cfb91e6f2e18f8e806abb2faf80d082f657717d08ca4e9c0d30d9bc30b612bcb1a3a3a3843231059dec344c6c04ce625b3fe064092e00175fd9d38f8fe54c4088efe30d211412be01460a6d4ad8d0a618b00a21de0a383de30ccd72f119b27a08958729a999e8aadff21829cbe8cfe398d90476e33db4c64981383a9aeab4a27f3bcb29d4b3d3b3a6ebdd71d3ac546b8658e269959630de176819b153cd53d2091efbddd2cf9178ba6ee98e1a3df9a095db0a2b713a0988a22239f5f08cc8f9abc3d67d9267f54dd5dedbf01bd490b0b09adb21d4e5aa7707e36cf77034f01bf8c7988a2e8dd7046bb2f486878436371f1258f3f7026afee6d7f6560be67103ad098edc9665e00118d4879f58bdd677cf2e6bc631d5c517acbb6db8a1debb4fe7492b7daf0b7ec7df056637c23caf926a1a589bef1db29cd81f547afd0fc9e459f46108ffdfcfdee43515a771c439dbde9177ceaf296a8749be0146cdca2b26be8c2ebd6cfd9b5032b1f7a375307f54c2f622711f8cf8684afaaf17c4da3e83666c40d26adc239c8d1a40024bbf560db5787ed404763d4e70ec6635c6a4b82c10f8ff7ad42217613c57648716ba94cb33129f3789dc86f9c8ec2e8e90e6bba0dfba1bb3dc3215188979a09f33346a6647099ed0e624c9ae10f83da0def840bdb25b718e8d86a616ff46b5327b1f99c22937920f5b5bbd6b53fa0b32f24befa4a7603234e6d94be51f00189a20b15c49e8ee58434a15ae9d10b9cf0204bfa7ab1fd9e006b22bebd22b036c4bb4c9949cb7ecdf01028d9f12466e144b2dbbf64d95d65347013e192d428678f64f0d9306f97208fb00a70d4615229143dd8890725ee3ba6021d38d6359055aa812edaf", + "0c5fb7075f5e15a6733737b614bf46871e29417e4b140bae6e10081623f5c52f557c36b4da4b5a4e82920497514b1e6f745fedbf73f86ee10976f82c6cbd5bc13a917514ddd062", + "e70954c812cac03e367e99f7b82a6dcc073d2f679f965d524872756ee58654cc", + "5f6267f6b3b21423267310e6", + "c53868c0fdc14e891ae1bc257fbb13be210a5d9cdbd9d18fe1b474f9a1929dbba3f25222d8fe8c1be3eef22352100064b922fd9642ad128a202b6382ae0a67c8affb0c5bfa1a80e55c1084cc372485243df872d677a80a3ef1ca3589908bca621f6f50133eb762cb9c05775d13db7dd3eb65ffd3eef96e8dd42928facc68390f6bbc50b17e1ef5ea6310d8756dd177be2cceb63a97bcceaa046794915589ca022d90756b02c22e8634c0ed44192abc3b8b1e2814c855ab27aaae3bdd801a73e6209fdd559ceb59a94fd98a66d12a31a643ca2f4b07ed910bc390f77ab89395d5cd1d783d8940dad4447f0452991b209cfcd998b0c814cebd08f9ff15052818bab0bf51c3b72ac1020d3b0974fbdf4ff941b1ab9c01f284fe82f2fd89c0aeb4b9fbb0a74ece08b3debc7b65e7263e2922fd4aba15ae3cba7885d04127c8e06a67f244e7aa4556f8694a5db6653f6e48d6de54f9e4024d25d3236d4f933205b6a358aa1506f832ef7d556c6a1bfe4aabfce51f3b5ac64bf6ab1e665bddb12fe13db9f07a55db3da3886df36ddb89f3a4939b1e9e5b701301570e3d01c0b947f498dcc6af438cc15e6038cb78a78986da0316cab67bca3e28c95e6b7e6b36cae9202cf4a77a0e15d3c3291d267aeee172dd587a944719b9fbe077603b4d39d4302b9a6415aa07af309a5e1cf7a9379552becdb4bc6a0b5c85d2e63bb141c405afc58a8b2b4188b3883a24eedf98dd50fc54725c440ccdb03514a6f37cab49296b6826b6bc7d7ad8cac0a3425eeb6866d94119acdad468cefe162a29e8831c77aa83321e8ae3e20e968cfe51dbf2b63f4e26c61536e6be4f63d61bbd06af38023b15f4fccb8ae0356d924dbf646bff69d1ac0d6e1c7f40b12d6d16e52d1c15958add5708bd38c514e47fe623a67c9ec211cd625b398fa7fd67a23e6e9f65d42dda2bae94524372fbc1a7e0ab3f1c451c126135536e73c573749aa60177dfb68843752b010e2cb9c1afaf51c94a48cf8ac7aab3fb200aaebcedefc6cccb581848da0121af92d9f4be002f0c2beffdfa65c36bec80e7f62d7009b1eb719d24b96e97059e6b50a52662c2c833738849f342391514349305228b29bfa9c7cf2a931558ca8e704c600148a28bd871465b23af499c11784aa45acd051f276d82789c58b14f12619372be4bc3a285f6cee21d65648d18e61752d6e7957736d3385f8ad36702c451c61ed475997d6d9f11c8be5257d8febce329aa701028aa2b5644b8515a95b5e866780e32754ac2e6f2e31b2c04a4ad35cbcbc25b23e9bf49cb1a5d877ca30880741757c29303af8676546760016f1538991b37cf0cd24ad3b1d877e5e1bd083e4b990af6ff5c0b28e530db3f463d21e76c928c8e1ffaa6c045937ea171a9071827a173e231f50e95430ae4895932c88ce048058ce6d0a50ca5c1842506158e98bb2912a61c7991a2256c97cb9050a4bb3ca32594622756291340561e9e584dd2e096263b6ff8eb898ae86f5f24500320d2d0ebb30d84cb4ef876a877dad23a611b39bf0cba5e22f2850e11c298fa23fed40691b83acc87136f8fa540b1dc40d1b0d0bd489ee9dad785c121955a094a2c6bd3353e142c04f7b88b2eb3305fd00d5eddb391b73fa2b16a6357aaa2abf2059ec979bd3ce06d5fff1c325bbe5c833a101615750613047d8155ac0c3a0734cc6aaeae7cb65d7501cb95f9d6d1161d09c961c0681547faf7983ed2efaf4e0fbb87a06169ecff1d0ee540a9223a73f75584441d4669cac09c2dbdb8aa2aed74eb9a2870f2021eb16e5f5c3e79a24d7110af4bece22a1086d27642550cadfa4f0e03f2c032a2745e1c9277a4f67fa4dc74ba056110fed3a63f643567d079c9430b8d5b3bf57a9b3f02d486d870229fee5462043b6bda8d265c745ddc1b8952bf91828d6db2edcfca7051e74df9dd456dca5e04ba469b9ff6a8130aab3903c05659b8f31cf4ba4c22511493a36541ff9d88c708dfb714d52a3c0356543e6efad37530b598bb63c3724772907abe4cad39c896c62daf5b30cd7d37eb36a7be2494353028c76e8d148b018c7bb755c45d2a33f61944071bae8316881e9aa37e4ec2374aac4f8436ed3c7db2092326538f07fc6644e0239899e3335f73c1e3c4602b12d19d7b639d4968974b6b2703ec1add8cd930cbafff4158f68f06aaac83bb4a2e31466e2ddc247ad71c5f4c49af7defd1394e21819cc24c78380caefb2ce87c0d1050680313037def12ca21cf67bb6692d6e4a9e90a9c9a0b7118ac300c6c6f636337aa25bc59cf1d9749dc183803cc0ccd1ff53210352795c6edb49ff1e5e8ebaee7b3eda6e3c0c340fa60594115e37fab60133b8a3b39d2e63db0bc6a03973e236fca801553912f93feafd8b96766049dd2066f3c5ac9222121ee9d36cbcd8f713adc8779949941f8a8dcc92ade62e46e9f1b292d5f7eced14c3bff50a811cb762ced1f103652773ef946e18569eb5892626627e085d4ffb3102c1586ddf88acbaeed903b22d3e7ccd8b8ddcdfddb872403240bc8e0e46a068f55bbddaf90fffb9a914187aac2ceedf21fefa1fe32fc7bdbb9fd76dcda1fca7b39107d308d11a118e47499dc4092ef0cd28d0d9af84440f095b4feb7adcba198894cd89a324c60ed0b996c520d4b33391bbbef1997256af7ba7ec1069244359066af81543ca23105742fee3480f890373d3205236bed566cd22a62bf69f8c0f27b714f84a203bca1605865e2cc2f9211389e0df7a4b3aab9d10826639357efe1f5fe64a1bd6d06d0b5605658c4d2d12e1bec77e70ea393b0a09043dd7d6684bd53f4c883f2f6928d99ba91873d063d43600f9105d503b11d8dc2b05e34b4fcf18e78b2b6c97d3b2c9249a2f6566ddab2a8a67fed6c9f8af2f4ef98dd579f2d4fb572e178489c503df5d5f03bee9920db347a6e734ed72ec7233387f1579c13725599a33a90915ddf03725dce20fd3806abc1029a20732380596057830ed63b6edcaa4d4418871bbfd58de1d1f2800588ed207f2016e11abd1baf1895f6096e2c75cc5916836a9ddc09cab4c28e53fadbd7d3080088131cc270095315b61011b0cea5b4d64b647bbcea54d20be1eec0992c72fc9c9771cae19191cf6a6f1840acec1deff605626d0a0d79ea8fe0af63ea75e80f8141fa8d7ca6f4c99dc7e78aeacc67762ed0134f1a0b053debfb9ccb145800b9818c2deb46f7124e8655f37c3291af107ed75384afcedb44518ca14cdea341c9657ec638531011cb957ed6b3434b736ae8c8199684cc58862638c5f6c07e1cbe8ae68c5582b1697ca9dbdd01e97023138a9173d6b1294cd99514a28102e6912b1c87ef22cdc611133bcc111e95c355a26b20a3d6f0ead66e932c5e1229b0fc17a7d6f78134c69beb362ca75017b1bf1105ac8970fad48acb8313cb3ff10e9d72c4ff11f95c2dab59575525c98653a9c7d31585a3742267c062d6ffc7a4303a3e81a45bf39e1ce2097623bba70f216aa612c64ba06ed6d596ad6abbdde69d56ab45e25ebcd4e485824449550232be26f987c14008f67c9db9d0f709f567fa44502b9e0839457e5f0aadec0395bf5c38ed8de7529708e58c0a895198fc8b2570fb6e68547630ca7f313526d392ac4776be973205f971854c300454d5", + }, + { + "95a17355dfa9d378a18ba20e58aa4b8711ea1d6e3c65e0b2d3c6382892c7d02768437d47ed50bf8edc619c340be7bb1cd1d88b0d3d6bbf1031f738c4be09eb264c686d39b92cc7958e63c9994a84b61b5c412999ace8a9dee0e2a29eeb8dc537f63271af5f3844ed9c0d86e6913c02ed7d2b862a132f08f311aa92fc3757342d89a5dce8dd20d5792d5c60be9862ab168d3140a061489472f2266f297da357064833ef2554c49f8120ff40b961ebcfee1d0f8e7e5722f049485f72c502c9cc4afdbb70517f0fd2a00e12596ffe285d1b37eb998e0e89d756e9491ceb13e83610a3a66122b533c2c3461b3244438f5f7a7af8088881dfdf6a29fb563ce38c4c8632ada8e7e06baa2686dc6aca6bc944e5c14d6e432c4dad554803912b8fddb1c18a59a86bc452914b2efc1599c5597f87a6edcad33a7728827bbaad0a975ecc22b7748d7cc71ec7f51adc8fe0350e67dcfb31af35a8d7b72391642e29c2fa4b796ed8f535f6bc2b1198baf1cec858aac38959f83130af55c21383ebd57d364eeb0e442104004c1599060667ce5e1191e76a89199a386e5c4bf147206e7d6e598bb27a90b3c6a54cccacb39a0ac42bf22eb40bc8ec7925376a6c57d8eac6317578ac052b72ab773f572ad961ee05531cb95ee5a6d70add4176351960fb4bd673f7db9f698616a8dd41823f2f87924c40f131e6c83bc40ab1f92312f46ee86765c306cf4a1d77275ef9668d80f9d9c1ea0aa7b2456bbcf764e009584ef1c0b4b4c683fee3fa2641f48ccf7485a8356fb3dd22f848deefadbef8050de9c5c19e8c449c6f3ec2b1324f80a7d428dc44dbb966d40244c3af03bcb410a57ad1430615e07553a22686f1a62dc6cf090aaac3707ec5b44274b7fe28c7a3a298e7a8adc71e016944875bebb421babd2b64809be3454f25b90723e2cec68467ad2d14744b15de8f9c397a505a340e85998e207cd46fa18d76c46f458af4ac3821c0ac6cd68afb72c376c31daad1a2435fc2bf333260c1a82430edaf2499e7455a93b1301eada2e12365ffcd36a1119664d0c996318a3e55bb2c04dfc5eb251f7fd64f9d83f27ea6577d748e1f85248355ed19867857dc3383e01249cc37684b0eb8e891aa663801e4ac8f0331b38686a19f0d19f6e94c7ac95ec395962be0a4e3c8358d2f6d8f13191e164ad29cd1733bde8c31c7d8ab90366e26cc9a06707dcfa60bfe139a112db827778ac348fdfe26892fed61db7e9849a464e3aad561797b6c778e0688bbbeaf3349727b4670a2d0a08f317b0dc9c4b12ea85c0309d57e754d0c7bd5c83985fb82f776c968189908a8ca83b5944767c2efc3c5f898436de54fe8bb17224012a437896d9fa106a749d12aff657266276129ec5ac12fc7a77eb06296d2a2a876d931e479d3ea201cbb4b1b20bd81471eaa33786c624013e1f07577c2171f38f0511c6924078a40c2d55ce392dd2ab0885e29f4c06907a1597c181b933853838970edad7777ed394c491cde27478eafa5b7a36520aa0779261f94b957e83ce058298dcfa07b08ecc425caeb6c599a11103d7631e77daa0d9d3fc6f42703d57f2c624ecddd56b9a27b848de7dd28f8ed656f1e4decc95a8908217e2f2453ae50b5fc1d9352d735ce5bc2b538eaae25501d449d090df793151811443c64f28d19eeaaac4081e10edca4c4148e723ade8f7e7b988b732ba08b3ce4c8a0d655bac4ff66048148135decd7727a49ac59d82ad470b5479c55d3d8399b790ff033d3ef99d770e1eacecdc140480aeca1e2167553cbbdef2090c7592b40681b733b0a0d127beefd49bcbe8904c975a5ab8b1afe56d7ed7667b5cf92f537ad6972b876843364817c20400524097ac9b405e4b35bbba0d12355a0b54bd763b4491b2acd4e8e4fcaaf8fcfd398499d4c4e81ffa93ca07a5ff51a1540f178f43a931e07e1ad56ab5ce57a2f7dc3ccca114dc9ba8a6934e95f4efe9f3f76947909b280ea5fd795bbbc0feb3ad2b704e305cd9d8f37d178961f77355eedc9d7f77c58e1db2f7797eb8682255939293c3ef7dacd2eab46c4cbbdf929aac301a13f59831a88fab173803399d96dc216abb9f079e79bbfab667ca590266891c8a7ea4bc1724573e5c5a67e9f1341b5bffaa538e240f78da7733237999ac86141b2ac0324f17609b71c885630c90befc3b027a5f01e33979165ce2a00968c414838446c2aba76e1d7fe3707c742f68af21d30e23b637accc848f6c8df820a27bb4e94e5090ac6e008fde7cf3fdd5931fa891335ec8d01b5d6f77db57a87dc35d6701adf7ae0bf82dda6511c83ab4d7d3460b221eeb3d6c4aa537924db5559b1c6739040534fc330f5144c78bf99f5f4faa715e85aebac043e2529197a82ca40f65a8149a9447a9e58c61618600b0c5ab221420c0cee114a133a648dbc2eceb2894ffc329376d1eb3ce7039cf30ff6a53038b23c26c38739fdebc7b919956ca2e468d577dea6621a8d66b78075ad26a6e6d8e20c9b694698540d516ea2bd108625e5fd038b5f1e19c5d5993b82bfe16897c375322dbbca81c81cef6ad900f0ffe5ed02714c208a12f5234d78e32ee07af155ad1e1077a0d8938f426d8f326c751f6ee66c8f707e8493cbfc76f9ddf1ea329e094315a91ba9385e16c890823db0f0231c7f939a042665009d5edd8e48102c515341fa6eea33cc00fb5d82380d735b29f2eec3f61428f7b186d43fcee46b2037ad1aa6974d729848cf1a80dc8ddb0580c9c876def06d8f7642cf45263a655ee77f047fcd76171546319622bf71283f3bf0b519e123a85765779c8bb201e99981ed184e642f63aa61f9cc206bf45fa6e514bfc637671d9cdfba2891bb112a3cff438a6372ee0dd3e7d9f352ce52f8b367b7799e1f963bfe50638f0c74b94873fcd3d66fc1e342a8bd36fb8b88f33eefabb78eca4dc9c89e2c57aaa010f2140dc5ea7c86cebe2f8bf42a167d1d546cc80bfa9258c35af6efb1a090c293a4cf588e4bdf5c090ee7fe38fd7b5551e71e5ce2b0b5a50bab95bc4c257edfc94d37579816b4a2249ba05c991bb2ea02d047e480fc8a8ba71f48f344c6d20d140a64ac20184e45b4eea14d0953370c237ef0a47a7a2f22997715dd3ee8ea52f24ffe12674d571b3bf968454ca051701e411499bc43bb55bbd033f9b81d4baa6c49bdd49614efd20d58175af868ca16a9deaf65216abbdc3beed5f30b209e786a5b4c006f3bd27d93e9d78b51a1a2fb7f5160a0bc1b7df70952ea1573888ddde3d9dd5314b0d0a899a733eb48d5e6c7274667e362e4da6b37c480aa4d0d8730e66483fb1453a3aefad69942ac7f09d3c571b6275590938c541336a121bdd20722550236a9a5e4a37c7de628fceffbc260b1e9b6417c4295907937b13609b8585ebb8f076073abdcf19104ed80ffafe1b09997f115d987a552be5689c70fe125ca702d2ae4d807d5690bc2e90b72cabb0b61ad203b34c68df21c16b92bf8def5680b204ce327214c32e4363d5600f96162a6819dda472acc6441858f396385a16fa5ee52cc0f9ffef3d53c49d535aa37db2cd4b573ff81d74006677969ec1ad891082b5d18ca5b0b9f975574ccffaca72b805c9f7fdd76bfe3dd384dc953255a5b50b7731a137fb9aad42e77d3da1eff5a7b9eda5814993cf2d289bb25ae1680ffcdf419e073d38b4701021adb2019359bb70ff4cca930be7bb979a0678f20665d14803d8753c8ce54cae92feb026486ba747a861daa449863bd38cb4d5831aa6db1e7f404b0c3587aac8765aeecec686066ee7d11321574f04d3f3da571e71222ce07277eca7ff97607", + "5e24f34a8d53b17bd0c2aee5369e3276dbd7e7c2ea0990f1300fbbb00831b76655aab1e2fd625ecd", + "c1d796f1e651a1ee825855d80206baff6818cc8c247ee6ce62b7531e6e9ac32f", + "240cb25aaae4d085bbb747a5", + "319e968ad291ea5d4a057c38f7afa4ddb9c9565962fa1a7b231e397a268ad8e0c5030a2df09dc4f99402ddf2e0d06e753bf55e1b318b3e5ff0108de2328d3b8d53e23e08bf7d84d59fededd60d47bbb52736b0491f82c616eb5f779c496abd6499555035e4513c8613e7204e6bff8d06dfecd9ce38c6b83efd8d0e41f84f7cfc9ae07113237987a4b2eaa87f7e0a310155e282e57858244e9071712fa026cb781e5a4bfe6fa1bc480e534096394459a3d1354e2d9a54aac6926a60b388410fd0b53f7a3a9116292f37406369c22ea674418c4deeead171e00f74f5cabae5d24a0686a4bcd8ba99aea613a23edd0a019a319daa3779c212fbdca9d772fc3fe612cf178c2aca2aeaf6bce2433494027a474eff699bba95fc7dcf79ca1d77b1e097439a9050a5cc78e0b78bf2e7f50f959ea2986a59be3880519cd84d0a673acb0432feb1945c603e70748445c74600ccfec60efcf9e4d02a7df5f967de4b473f63b0b0499ff4ba350ec1182f3a0ac17ef9ae28945fc9bc714c49909a7c1e2f311aa6ad7652e22e1f48bb51cf53814a2125152813752d86c7f9468a991d0ac84b1a2f3969b8081c228b7f5760718036e26a10e211ff04ea323acdaaddf9b06a08c92ed663d0fdf13fa601cda45c416c2d3803dd9b5ca29cba57e59cf4ad93176c65c64507b1995d638541c90b381ff758833a2ad67b0de44c280fdfd82b3c6d4353ae30b33768863cd3169a2032f26e37ddd57e7da1673cfc7375bf6e6792495a2b434155d684f2a6f2b919f944469d47be5aa7da74eed69d871e6f65c3ae08904a9ad042ba39905188f0b9158fd14094bd6a408fba6ef57566d69eccda86bb54cd3ca7381f51bffeaf8bcc1ae8df91d22c359888e21b70f640d6f3726a34e6100ee269124747f0ca05110f63deee07e3628bd6aacf926036ccec02c0b6bd7259db52ea8b7a686b36ba1d0296c85e43e25d72ce46c66a1e646301dafd2f4c502281e6f949011cea69459c026c65bd130d6ef06be17b23a9c9a84746e39d017b144135025ac527c1e653f233770cd68e9f232c3b623ceda836843b3e9ea313cc6a57d28ce71ccfb7265ce73b06bce1447220645e6f66caeb06b55129b97c8dd8db54c94d771504d24cedc86a8ec706a9f7dcbbcd7fc7cf38005b2913b1cfb77370bd23183ac7b5ca5135a2738cc91d05b2b22640469e3daeb6a7b0f14fc6652563663520f7754aba624a35e5d24529a6ee9f5ef0d019d83c04f5a93a38b68cbce0cecd42a11aae305475806326aebb4f673791f50c9f90894add51a0fd7c02807efd8c1bd21fa717a860e224bc9fa3f40975fd8d558e4844a09f8920256528450d77e546604e2ce2d38efadaf39a0ea3ea12156174aa8a20481e6c1190e448564675f9ca60bcef37cacec5aa218122e7bd25b571ff10f54979d62018b779a2a3d5d7d6cd56ae31efef2c844ba50ff9da88eba7a8e0d9fc5388a805ba4ad35eaa4798e395d2fe112083cce2f11cc850d25ca5c6e60a9996cee4789ca99d519daedb62f4fb1e535b742a35d71d7390117e93821ff18948a78c1fcdcb90a5f1211327d7ee0663ef16ff446e0e22d8cb7b2d3d05469b1c02864f4a87e2d9715f60c9e7be841e308d0a5f6c50161a4a0464aebafb88e0d2df8cefcead93c9623106d5518a9852f320235594be10c45bc0cf06c9daa007100ff97959357f9be8e49c870d0a11c884213e266c35e9131439fb3654fd5f1abd1e778ccb02b8c262753a22653a09272a0c33b6b2683c9045e8f967af756b98dc1797ff605c64ac5bda8252e9ebfe0e4d8d7ca754fcca5e3de3c4b63678da095281d76d60fa12ff4ca818825f346b9c4e426cee16db5818d78a527a901cd088bc2983f9b83430b50683018996996717a1738439680b68e3f61cbdcd0f0e1a6b436af8fa05d3ce2228054e319bad1dc6ac970c75313c552fc1136fabc302fcd1d09ef1b9138d18133a772cbd9cb197ff58c6e898f9e83e4e27206f3b15b6bf2778aaf9fb38e0d50152f8dbf5763816132a04b4b2e9639584b3dc8ea6d95ade024f9497944200ab0aeab206ef099859b9240aaa15f737c1e0fe6d015d04f47261ade4928e3c2ca21d1f5ab4a3f571f2ed92ebeeebf2493e6e39f0063ba931e165384ee1b5081f5f8d26ec24716757037f5158d35effbe67009080ad7b0381292a513f312eb28328cf5ff47a6599e36c14277c3eb5053c5aca530ff5954c21c03fb3fd5fc0facdac36dd819b0495fde421411e0440991da0cc4a20d294446115c0b79045037fbfacfeac574da3bf192fec4bf38c27cef71d03787430223b6069ba6d9273ec8679736a832277c657862ca791b559a5054ee8c7c07618083f75480c8aa01cb086c7317315911802e6cefb15bbe20494b14d97e3a885806db775c216dc15949e3b724f7cbb30bd2c46bd5a2fd6132352c2b21cc2b47891dd9794975f70a6fa7a0791ee761ccf4c263f27f64790826c1aa656c39483e029baef0855935e7e6c133a4035a3699925fbde131ca62948879373346af35bd7fa52b8d6c3338f213bbd9c79977c0d710028d1d386df614c5faf4a1f8fe5506a9af7059370893ff6d07d91383baba67a617b5d829e0e2eb20e541ed5c34be7ef0eaf6c6f6f52d7ca01933a2a4e8de46e422dc95161ba8ad354f6bc7c8e4cf8ab5e08607530147fcd7c9481afc621c5a3230a05e2c4db79db9e1e73f43556a8e8f0dff7ffe420282212f23d4c5f6f8d2febe129b9fe5ba7ddf27f72ae898a4eba270b5d2bb3b6b06e38c546ba80a9b2bc46097d0b47db5ae72485ef2c6419e856c33c2d66a861b9d474699e730eb8a8992e3ea9c1ed74316687d5d9fc611189eba2aa31af5ba8e81179866dc016bda977c59c595e40001c8ab3a4a44cec00ff84c6dbd9ad4be30bcc080e69b9398089d6ea464a70f536ace3b447693301c94850606d0de1299770b5f45e6d28f8ab83e3ffe52178522eb91fdaa9e4a696674ba0f52ee18e960b04415782f018d67479081b1bf9b4c9b90de026cbb66bf7d9d12cddccdd9b2c8ee2f010892571c6f0c0feac9555c71bf61f9cd69553cf7fc2be8d058e0c3430e134adb1ba28985fdc4f0cf71bd3cd09f5f82f303cded0de62f98404477bdd0a846c6c51e3e82ebf72f475afc8e6388aec57206018ba2528ede194345cc1ee95cb2023793f692f708aac3c9e8a682af36b078f5d6c7a3ed07475e9fe73b95d1eee048ab898edfee3fac4beda45f03eeb64b2128f6df9453ed77c6010e13c0270c068f704f49e62fb7410be90ffee47584ca2efc5287dae1f63bcc1819e7548eb9f0d8a3182f9ed00da3817255a2ff735876b75cd21cb25e86aa4b2893f9e5089dfac76194563f9a14335dd37ef06a501c89623caaf6feb4afb792092dfed515ba7518e278c341834a9dd17b50a0fc860b62ec621b69408cb3fbf7d4ab88a3e367fda84c82357376fa9b1161b739361c313b99dcbf4122f3870c8175093298cf432174217398928983ab6cea4759f18e7a21d71fe1b0f3cda05d241e12db0818b8763bd23d958d6e52981ce8d84cd6d82640d2000874a53c0bd14949ec99e48ce6c954ef0d08e6e319de5ebf7e142f25c0f50ff13f6acecde6a270c8d8de05ef4c310ce9e92f40f6f2b77d6e7aa3f056d4a20f7faa7cd0b93d82e3972343a50a26ff462caada10621bc953b73913944246d2a4da25fa52cc6ee1293c436ab9031ee2dc79cce39f139f44d473c236731257c6f65ca4d383e39cf8d33923afea3c80244021d36e0ed43230c44e7d1a1297d35464861f9149d869f26cc51879027169803e43c898d1b4a2a2480197500", + }, + { + "2158abc2472e1b9c061da2c01d0ad9e996fd687cccca331fe8a2baacd12c06f284b1b5cbdfd067e5ed09a60a137ff4a97c5c26482659680ffb22bbcd4ec1bfd272749e52440537320fdd3c225c30ccd98cf221b34b89c247ab7d14f93ed3ccb0486a028c6f3abe7e17fba1742b6d4db85f6e6baaf82df1a3aa059de8d9699821d39bad42d56cc1ec67626092cfad4a2e1cb5d814e2cab78ccf5474a8bd0dc990a877d37de394694af6cadcc57727f393dccba7bf955f4b65b3c00d71cdd701754ed4f231685b7b5e2557239d7e16305be2d81a773765dcea25ea5bf2c15d670f3159409ab5bbf8da121c779132a8ec1480068cb76b68a19152fd83135aeb228b446225f91d1ed4303a4bc16cf3ad8173b30d2a1e75ccafc8c933db231efeae6260d45c7ef230ae2c7b6f986f1c19e2cf260ded9cd99d64a2d03fc5ee3d73509e47ac1c39dcca655839fec75517a9243eb611da8fae3e317e7df66cbb6abd59b16975eb463f509e784e65cd660ef1a4c5027e54b1bc862f397c9cf4e6594d98c2c2830801d3a679220b46881a372cdf3aaa33eb66b91a9f36b6941c0fe1b4d2a437daa50b811f2d8c65b5a69de185d78bb9c2f172dc90a89324c5a2067974aab14f4fbcd06ee95cd49e03717f88480a410afbb4e68b5c79b0211cb69b90604cdfaf08af1ef10cf28f0f630e97ab18d9b5138d9b9ee9154e0b3104a6c164f2a114fa5032eb5c247a6b87880332a0dce7b36982515297a05dc8a4038a09f52b1def7b4fdad8735443fadc462c7c22132f8b9581de2d213bf5c53f7fce34aaeb24263afefead5341a72f88d3acaae6db367c5c14a97d4f9e438e1e11c3c8fde7ee37e5ece5382e8c68b660146046ef96c24caa6bc9fa0a0c88281e4bf01b32df5218cb3750f9c4b8af24cc106abca62d085198d14ba2ded3cafc1fbb17519a696965a1ba5f65720e893f1ef3fbc5200316b9d4615bb23426ae53e1c5a57b2f0ee0d0c83f353b4ebe7a6cb17531d278478b4ca8e6ffdd0cad30ed73d568a2e44972ac88a7e7d665614316d674e84ebc739b645a9a4166477254ba47bc5c2b05ced88e75bf64da21a7f1f71cd946d84de13ca77b7e0dc2f0617d371ed96323a83bb11dfa16f81bbde913d9c259b10f3aeeb6b56cc4775c25f49343cef667763118932c2e8b47ec745ac537b37746ed65fda2d1c11a2de60ec02adcb79152e8a9e614d8715cc4e6b6891d6a0063576560fa3621146308222432ffdbc351c36c37d844a934088fea92ac54920facf870a62e91ba9299dcb6cbdb918e2d54fb642c3f0d60489c4bda489f6c584b64c8f19359ab25f388dbbe636c4d90c048f5ed87024dcf9f98a9e738163f837a07750d61203254a80d120c795f9c3aa791272f9474fe330da81a45be5ac838613d46c25e781606862912ff88af393040605fd4d55d07e2052227c37ceffcdd2d42a08bbab69140dfa4406853799893daf768af546f915a91b81d0da719ebd45b8b5f1641f15621959689e810217bea18e3996c532ac6e4e2e4f289fddd5e5968bd6fa9aec5ca435c532b6c74a7568c8aeff9dd19bfc2fba3b484a191e2faf9a069a24e2e6d928ac0bdf635644cc1ef3bbacc547a8e4f1d42d4bed3b6b8cc56216fa550dc37da9cf4d1d1591d9348594d14adc7a3fde5e5d1a3b9875c85de7df483cdd0baa86dae793e0796d14fef1f649de6079acbec6b6fa5f2cb2bd0481f5316f00dbe5dbc379bc3cd6d13bd8c775a727ef43e6a5fad1051783b22c05a75d64a8394a73fcb430299b015563c8cb0ae0aa4ec750399855411c076d21aeca8656f3d0cae084fb0a1ffc6f73b52a7ea5d4bd6d24e7057a3811719533105fc967439a32241f2d3e3f299da2deb821748cdee1a1c5e71bfdf88d833bade2f505268f375a9e6488cd8e16705cce91d15b60b2fd269a19148296a7be348aa349a12270fbc0d5748e538afeb0598081a4f1349217ceab3c4141d40f765ea2bfffd530fb9606601469fb131a44939be984c07bac8f26d8c068accfdefb729eeb47cfd6ddc646e22031f53a7698c6501d86cbba05e282d64b2f962a1b08b9064078dd1e3f14006f45f599bc8e600cabe6d855fcbae8c3060859202361d929a241f6c0711ac0d050b67a1d44da19e0b0e236adad1f60a327c9c34b2b9c64cdde5b8e4f664f2fc70599d44a63ee2b14d051c27d71231098ecd3d4086038d63e84547dfaa39db1a92785e38b640ea0345062a1c185b25a72862e7ae6574114eba592d6492087e2580dc5d361c473a614d647e66c0a30de806f4976b69a8b92301e68794ee05b96ee116a5fd5edf5eab43dc1103801eec861383f17c2bab9f2d9126c1802b7aee0c909309ee72679ab644abb9c4caa54add283b5954e6f881781e42f849bce6554c7a5e3becc5d5a209805ccd4a0117272a53807e3978ffb19641a9dffd9034490a9284f658599961daf52f24f6464c2099cc9ed3459d84dbde2ebbdbbeef25c882a9beda03573bdd4c6a0143b14d634a1a021d5f9fa23a7ed0f5598ee57e56672814412b6c7c08b8e709fb98575fe2716100d000a20a7e7200d800e556564c7e6a8da9d609b18ff0bb8a8812e96b834a6b534b0d5dc97f5da17f42f8d58e763f1b201625d1a5158c2f9e9e190921637474ae81d278002f197f7211540088931ca8a941794e56067ef4a497fdc6fa713aa9f20c21f23c3a71ae4cc5aed459ca7c020bf55162fbcf56a066546660c5a009b8ad2aaae9651c97b1e145853a10013d1bf68e7df25dd492c328f823ed982da54557502ebc6cc56d4d0bf2881bf3c536ea53b4dcb0886e73b066969dfec343441b9372d7ff38454c4337d45e2b999415ec48f19cd05f0f80c5a61ec369610784f47a5cf3b2a13ff5d8145303ade7189a300936006846812dec9ff15500f8daf47236e724d72619af3a6cb3e854cb8284d5b8843dfe056beaa45c40a4541a98c7507feb27a605d6e07189c8c5554a492a03ce6701d3d2ec782e2c1c8346b54a963435bdda3a93bbac1d837172cebb9cd18903d25cd6bed404eaf18730a6d1c6da0783b5411770ed34f35fa6c11a4292a34565ff1b23d4200ec5a73e6b7905458088fac19f6aafd35e0e791f28bbb2cb0117ca1c3a9e3c4863e487ce5d8c14dd140e9eb4794d87d75b01f683bca84ebdbf19dafab716421bfac9e95755fd346a0cd31e8520a55c7ca652ff63fb4e20ba67fab41e11f7390bc02363162097802c6a9eb18b430d07ea60064d5b546d15bb68cada79c113848136e797577f1783e9b53574f9427be3a28230fdd69d139205dd6c7e9e7f031fb6eab70d69ce905384c5c77d084360aac590a89b2dbb2d339899b13619b455cf9f0cdc08db6c5b5f3223dc3a663ce42bcc8cc6f947f42cdf8dde15a6926b753177513a52be95b1f0b88d2a1ec90e49959b108fe204bbc29199d7382c42ad5dbaff970cbd2dbeade54bd70415e54daa805d396361f525f38efc2bba3fd818f9d7af0594dcc341c20f18c624fe13ce7e7108e1d2fd06c58b03f04642c95e3ba00d4035ea0476ac138f72378d85050bf60dedc90af38e96f67fdc38483a73e847b41d31b894ddcb234f02b0d507bbcb15a8941f9c23b592a291cbeacb3ed213f2f044aa842275a7717757467f121294bba6b357c969e96bfab455c6f328d9e5181d909c3f0543b17d9af7fcac099067b043be79aca8e5a75c3a6d4f6246357a63c516a3ca595447f34b43a055d3070517c67ec36e636aca9ed71a001d4f7b81149124deeb7826dec3697e183d861d544c9c17baff82849d599e9e77ed19f801aa1ce095940674576ff270ac788d00c429187e299a03c6f3a1646a8f7d6290287e70bd1276316ae624da929c67936191abdfba45e2803884e5a3136205a38a841448968a7900709dda033a42969bd3417a8d865d0dbee1f261f4556797dfebab278136a182a63e5ca9789e3f1371808efe06eb0cc5ccfe26c0538d573378035afa39fb7cdf3ad889b277c8c6e84954e74f3ff3140bf13bcb45c822784125d23b5eceb73e", + "088fc7ba068f80efd8d4d62813c93c1eba77e9ff400c7781314abc901873ce200295da09245bf8fd2fce254397616151d94b511957c89a881256182ac9e64acb7b25d4a080cc9daf9ac2f231235483fc9fd415f69caf7eaf0597", + "78d5f86b071bbf8a185e5e2d54faddd2a9e26983b1e7a74be0f0b979b9f4af31", + "d9ce7d249af9496e99c93b36", + "ad542824b49fc520f0b7ff8ce2bff8b3d47baacb4a1c95ed56a306483aac551fffba48e8a8f5e4cc536e9266182f6811d070fb9282f5c542cefb4993ccc7044b42cfd6fc71793dc8dd2de23c630f9ceaeddba45efed9d7fca25fcb07d193c000822478b19c2ee9fb31760cfe01475ba8a003db469d1130318a79345a29d054a9f9412dca1edf6d8f1498af5bb6fdbbd3d5f9a244ff176f62742c53779291ef6294df6540d841f4ee8c7c58fc8497ba74d9cf7947add5373427d81ae928305b93dd26cfc65e63b0ed0812ce759511bfbb10aca98f2abdbc9055c4e5ab82637f6a965bb74f592bdf11118b8eb79d50331e76cb4d10c6b4428cd4ec2ef4cb727bdba2b5375f5184d77772d0f9fd3a3c579a4a548b9c2dadc22c805ae959617af49a514b43f47af834313ed2e4d1fcec2c4b9ea87f328fa3d23129a36e6c54bcd08f7e30645de86e98ebb11bcaf99543503eb1e024bc9fd51fe6bd5e6d749033f2452cdf28b3d0f8a304111bdd26dbde641c02fcb15dc21b1a9baac5e86d35b4126ed1cc8a2c3c2a5b94c99fb9b2008daf1a0c090633bf9e31326428c75a50e821b1e72a6504c9d7bcfcaabecd929163d365832e8971f5efebff99ee3f5b95f957e8904d05b410936d8a81c60b4947f8605c58e5b727d491995c76fbe06e556c8ab5cc661a0c09ebc98d61010050f68b31fbe1f9de8f6481b2704204b0164d8433ba4dc1076908c782826e9b555e8d608463581099a466f92bfd6ac9796eacc0ab771a3f11d03806b0f33ec04c69cef6b87d58c11acb5d1374450ce61ba159456b915043c5c17cb03f0ba66d027105bb6fff41e6422f13e2a466f073358bf68149a3b577cfba7ea08b42f83fbc5a2aff17c5ee7dbdac3ff97389f5b8d1f3750e5c9be651209eeb9574127ea81bd7619da16d1cfab85754883543f6474c8c0cc9d5b80e34bf8262d2b4798f9917bcab4b880339397907a5bafe7d149247fd735523df3cbb17ae5e298846ad3bfb7d4f902aa549b7667d3ea945b002e7b209bc83842a7b120d6d27ce80631404371f31d1f61efc5423e1822032a1cbf4fa1a6b6fe79934a202d5add8c6e3595e49be3dd9553a569521c50e9653bc684ef2b73c3526ff7a0843fcac9cc9ecf46e63df5b9328a54c576bd299a366bbdc0f83a9de67b03f1da16244bd6d52e7e4b52c4ed693827735554b05b3a260cd01a41d7c944d0b7b58ae4b0eb052da34bc22b779d7ad46f90f3d4049c097e0adeaf71bbb30ed24b32ff5c7a65177db77492c2571e9cd99f15e613797e319ea7377038d53b28a4cd66a697e5e8f84cf16bd0f0430b34826114b4e1d1ebaaf2939dff7f9f4ce7c0861e51701c42d9cc9e871018b447ccaf4e402e3d63be164dcdf6799314a389ada8bf5e51a35148acf627e51481b9b0e4bec09c9e6d59229721b151fa9adf8323001fcf33afbc9a949643172f39b0d10ef57b37973683fdd9b9eb46e63054fd05ffbef889ff8fc8f251b0ab41fb00757ec1964ef373fceb8f6d148a7f7c89944b3cfc240d091601b23046188ba70a7cdf7b6f96eb93dcd3d24d4aebdc4a29a749bfe3cf5f6e1a025b62982ce188e6b57245d829c9fc1dcaaa5309a8b9557b8824a78eceef6e977721de4065b474ae008642b974001a5565ef5fe4250194e8b861cc45a8691c461817f10b646fb526bf0fe7790bb0db29d1356e8c7a197ec78df8310431d632a032b5490c2a458eb8d4327a9679d7e8ef8739797b0e820e2c567ce3562592e862a1dfcecd50bf77fcfcd00518db65ee0effb9eb3655d5d401a4a47808faa596d17b316f828cbbc14a7e018a0593da9320140a752f3824b5fcb66aa4c3cb94366ee8b821b09e7bea2c04ece15e8a7be1f58463b525e8cfcfc3fdd395ec5b0575094313557e632d0a65e3099e3c653111a5fb4f0eb2aa710229fc055a2bfd8a7147cbecc10823f1244fbb6894af1408ff9047d6483ef83573b5421b9798ee387dc38f166b11de6c33e9785e9b3d9d28bc24c37890e4f8f8ff24cca298b44d6fb1c6aad28cc634a67dd427205285521a172c2a4884ac5b038e261e38faf0086a02aa29195713cea335c47d03d67fa0dec7a8cb21db741519f5f0ba0143f14d71e33d82c75d6a19b3f7a42e6c16d762354daa2670ffa55bd400637de9cddf9e7964a03b4c8956f36bf54d89cf16de23e8c52957b52eb4572a11d1398be72bdb129e2c1abb58c65cc291bb7b0d2dc326c6125a441863a6c92de0f47a355222d58bf10af0d297a86a98b4e933a8f844fc7f1bbc8ba77919dfc50c41219e3db309b92ba056349faa758daf360b8ac05e43fc2069cd46e63fec399cd7764b111467fc65407ac06f5f84a3179930f6215ac5ec906146c19e0d3e162e77a2bca3582128284282b251cdcac03ecc204266ac3a9cfe8d8854008baf89c0ea0096a400d6a0d2f7c681c99462cf0105f7a3dde690ece0438fbb820b9c73c6cdf6208c336831101b904526cf8ac331d879d71615d8b1f750ac7f0ec692d97a5e21e17e194a98c10172b5c4bc1049a8743188ae7c4d70384a7e68c1353aab7882bb91aa383821046ed0ebabb4b2dd126ccb935f48646b299095cdb71ecd5cc402e4635a3f7a3c8a6f54f4076ba028dedb402bcc92f5668dec3d91dda7319f58382017e306237e42480ee2c1f5930564cf16fdf37a3434585336b8e4535bba87311cd47722b9da727250560624a5dde48a2090ee44592d2fc06edda634b600fad9f843c6b2eaa0697b42858afee8191dd2a31e5685bd104188e2ccb057dd0a8d4d1205d7c846f5b8ec0f06bff61c7f47ac4da30e1bc80a4e95af79b14a83e9af2e0f195cb92d14f752a5f12ff90a05765be453075d799694848fcddb07859336ec101c8052bdc273d4abc313cfb351b543fa340dcd01bf32fea59881ddb8f33c6023ccea70532814ce4a2d0c66c846347b86c29dfc34f6fa4db298911d4367c59939020a3d078194e6a3a3c5126c24ed182398468e77fd61a5b1271f5cb2a97868876954c3f7179d6a045f4bd770f681cd82216cd2b1ceeb4e724b3fddeb74481e662fbd7f5dd45bed6d4f89d21b8dd9c1009ad2b0b16954e97993ab8f3fdd9d61f8db102a945591b4552f419971a9e46a792dd8392c8d9502767c82d9b4f69e66071eb579859e9ca070cad5fe3b7fcb77b8474926ea991ce7ad201421f8a79c051b762a066027ab2b9595a1c97ad57f3149f5872ed4d8e99195d47bd3c03bbee590a50a99d8048e912aaeed797977b52f0240a6cf2c865b108456881adbfda60cf701454da17bae879cf098df808f34e50bccaada2d3edeb1aa73cfe3c512d814eb33897b6ff9d67d3d682517cc333c3c2552adc99860b1f0d1076390de9f84fcc9e802581f77e14f5254da01831c70cb8581630dadb44209377d90447a1a21cc8a2d6d897db62d8420afbcc6ed85ce42f3281255bd43e0afd3e86b27d3b957104ef54959282b0e1b381a26f16057246704c7888126055af5a1f494540f01897e8781e1a5c0193b7bef4b5588d0e9b9c8de74dcdb63f03f7b15cf48fbb71c7c3bbe9329e3d326988bad7d0cb85537c1e0b3cd88f37a3c7765f548f99e495ddc29daed8c7f15dadf2e5b79def91dbbea277c51a5da250e66c305604bcce4789ca2df9a10614d72824ba8e4f179f35ccae7119fd962cce13b282f0f970ca6c4776374c4bc438f0de98aa04fb3cf23d2c6800a4a666c15bd20c486e88e688ff9e5fce906b4ae96ec7c3388d7567ce6c8bc61f6d2373b93f9ddbb02b384084b3f28f54c9ddda232d3084daa5fac5ca356ac0059f2fd3fde5d6a9516d0954653b699aa986f70733538e19721daa41329abb95058450e602eb5726ad5a8b81aa474650659c6f7f6f53f8a6e635bf35f4b1191e0dbefad3be756c6141c7d55f007f4fd131e5d5eaa120ba31cc32b8d4c69d4fa784fe0af7dc272898789c774e7995cb252eb6c8e8053c9e7adb59c27f675952d161dba78bdfb15859fdfe4fe4a44c01efd394bf51d43c600aa9a527d9c490971e188e28b980e77a9c6ea0a4ef6bd38d11b47f5745ecdb", + }, + { + "9cd1c25b5bdab9b9080db3e5e05dc749e0783087c310777d89307138613bdffe0ca259677c13208420d4690031314a11a97a986d8b0fea143f5b4da0972c9ea3cef80b4b0b2bcf2bff392c306a764113f0d9807be86a9027c6ddc85d096600d85e0b236937f295362bc1679537a8a9278229a36a9433925a105ab719c0b7f11fc31488fa071d3032de97c81540713dc29ae02c2e13be8823183f3cd9f72ef8ba4280b4499ee47c7c7c4492bcb5cf7e4fafaa7ec26906e58146215a3d4f52f792d3abdb718f57ed0b9b7fc7504e45a0fdf01ebf5924a4da6ac635a715879ea75a4983cbd9dab9e47638acc687f16684e184443aa9e81513ae4abbc4d1596b2ca3eef77cc9b0603fe90c0570fe6cf4dff0381a99212fadcf7968934ac1ff7664ed6ee0b61e41f5074dfb774b676c2b57a445f1c5749e95ed062837c727ae2c151c0ccb3a4dc1429bbcb9e62325117aca566b8fca0924b70f4defd7749d0389b90f55f35d1635f8d2efdef514f06fde46db6e11e492c8f4dfb7cb5454cedd0ddd32013a4836321a25110f3a017f18475a86583e192132f8d8fd4c2dcb2a3aa95c3be3a57216bf9727cfd1284eea6fa870c8e689e91982c116ceeee2f8298b55646efad684b96eab883fd3d629437e9a0b6523f47ea5b59474a4766ccd01c13170bb08f47576a0fdb573d4dfb65279c1b79cb535426bcab60f4022dc42e40db29f15a6148b461241bae62070389932f035e7257752ef2d6130503d72344b24d360cae8ec11fa2dcbe04d3b18e66d081b552e93a71dc0094d1046bf4491e318f2ae00debffa0b8ada58c5f23e33fb598829ec2f46ad3894bd7f530210371a02e51ae0a414eb2eee43f3e08126dbdbae04c7de4b7416df32953234a6694ea84e6889f27c74206ab8144a393a2614e92adcc77550dd54827387b619f004c13f6c4a31e8bf525277669db0a0c3c589eda15063f12eb774a13e2aba2f2f7b6e9bc69f8485f1d6fc5773acf83671812412d28704003e78a17da25bacd1d61a6d9cb9f121abc71d023bcafa713b7c954e4e1c524e5bcaefd86c4a843e209eabbd579cde0263fc059ec6ff10017ba54fc9c2a1171d6b06f5d85079167117c12e6e5d0c71c008765fce756fd0f1141fbad6c1d2f32cd8e80429611a9a78dbc8e738d458f9ddce58ab43c77b34db9befb25cc1a588998e8dc2efa75c6883244fbbf9a7b4d6750c81b8d3fdedaf98dc61f49d067c369409f984b155ec347a3bef73e2a44957b0ca0f84c7fc335fd89453759ad0ac2fd9a5b38afa9fbe74daaee7bc52301302fb2286c21fb922f74d756de84519171fbecaa9b869682d431614ff6845126a4034f10253aa244bf89ab8e0dfd1f7fe8fc1a8472a10746d26896c8ece7ef80eb2e910069435518ccf096caeda63ad692455b04e6525bb8bae27197ca5118a57fb9a5d8fcfae1b9eb7874d91eafafa0e4fab5cb4d0173f7e3e58fae369843a641e98f3ee460e8cfe95d98f7fd38a8d2235e9d6050015833e6d7d21d7015c3b1ff42f0d3a3d9a38d373c8524752e06987c9408cca550f08c38c2a9a8d86d5ac7a04bab44254ed15c7b5670e0747788e11b81adb0d29e3d0b50d6a429340ee0d44a8c286fcaf9bc46403d26b4a4af95b021336103c1ae0f1274b33bb8b21c8cfca8a56c639f18a9df45d083fa7019aaa14d1ba50eb9a4112e574cd70969640602096265a87b1f77c0e00bbb501555f1626196611b4a824991cf10ab2874a12a8e0390267eaf9e3f8f99eadfbf40d111a26772cda1f50743c417eeec9c80171a83a730f246cf31c6691c96185d672a0fde9ccd7091c4b455dc93326913497396e0a4992773caeddcd783e534eb0f34b99bf23a2db6ee738381b5fc94ff603be014c507888ff55557793a8c5439b11dc5a347f35a2666eda81cda4d1c3a78fc4f3df3c7bde91d05524791b67142c446f60c3a4022912ddabdf817ca3280b671beaa496c935661e5adf39c1f4650563c5c807c8f21aa59df926199c4e2404690ea8ffd7dd65f637452ff93995fe9c5ac7a322b9bdc756b7ed6f533b9357a4a1ffa379dd096f144e9e0d87330c238ed3c6b08c8478e23b65518ea1e4e64585e5e9fec2f26dd7400ce4c73ff0eacdc3b07e4f34f6316f5b82fefc66e442ecc92bea8c1d58635d644724a3380e71fbbeef4bf3e57c6240ff603d65447f510eaa3c9ac794fd24f844489b7c560c7814fbc307e03f6a213eca5ea40fddf51d8731b74ec5b472bdf8ba59751065ed2461b02c41ef96622e60c0d26f9dc78c24f94372bef7e47cf09ed565ae3a52d39b02ffddf1953f1ff500f1659db9f1c2b23534702c19ec1cb7c18166fcd33997d53874c7cdb4e6c2b4d82751911913434e48b37a61a0971861187e5decb7f5c1ef6988bc1d6f7fd147a623d8bf361b0d7ece88df6e1ff8d037762d232e22e51d8c6ddaa9dc597b23ff9efbbfd416cc53e5543253732a23aba151cecf73b3ecff21c6a9fd1f24211fc21cde9633aae918ff1c6b72468f1de7e0ecb6539fa353c069fcbe8920dfa8e2fb86782e3062462f7eb2a2c441bfac21ab62744b05c70b6fc3c9f8e3a8a0c5a4263ed256a019861ecb28e20ce78e2d93f1a1def669e9652cb35d105bfdd5ff2313d27ab3eb00d1b628b4c20f42efa23390802af96a8f261ded3678ea0b780e1f4a88d23588a4ebb058adbf9a9c62ce2ce2f8264c874c697482e25f8d5a6daca4f57fd97d23c42d7b71ec150d4ee33931db5f7d63abe7d72dc936bb23a367c798e6a01509644284d52f9ae27d7d1bae597b2cbc26139354dcca0fff6d76c6065d661b66ca5eeb9f8d85810a029cb95b17e5173ef8ab92d475a1d3e21799e874ff04dbc962c668ef4be9f94d85b2a99d97c0db8f6b6d63e00e36c325cfab9aceaf7597113bff0086e8fad36eac7c0b443de6d3a8533789616d4c863df7200ba795a3b8d0a2b9568bb32af95fa604a3e3ea778c3dae159e1b612458584564ffda07b8aba9710134242b2d83d23127b51b9e41584c56f667b71bc01060240f3a2bc7e5d438e7095c1236e0e468079a83a5dbdcf132d258e9ed18f94d3c098867d06d3c09544565677b454be34ce567f1c143e2f3153bdc0353d65090dfd8f7af4633b89a781e01f4634dd7b0323ea1f38184e697bfc39a1299eaa278c39a2709cde0a346fea53a61f211112450b318d137fe68f6c102085aedabd2b045fab912da5c58d8019239f3a44b18f4fe30c5352e2e2bf030334a1dde1dcd23178636f1e38ec9e42102d8c54df0b94b207e804eacab3edddf89fabda6c8e1bd4e17ae31a57716c679ee8bc7de4412fec3934c6f3e8b4c1d1447dbba0fbc775dd3258f789ca53f1593cadc710fef6fd282bb41c0468ede5ad5b914e4758b4148b0d0c04c75ff6208ca3e79d92de8abafa4ec70ea7a4e454f0759337ce575c4954584e2bb8444c34e823d27b025d25fc9becfb4391df9882452bca0373164cd76e9af316df3f5bb7532e22557b485217254d5ab72ce349620f03758219b259784d4c9f1c7beac3cf08e624742e768b53b3d60ad0b94442c847b84a516a93d9b7d068c44c43980b4c7e2fb0ac964bf05a11fb2adb4f6d938715dde88061b238321afc7e5e84799b02a94baf3f879f89a98ab474ca12085137d639b837ebe069f6dcd8456141d063eb1c032aa392a44d1d58b1e77aba38a280625ab84e3b123507ea7a692c4acd1756c031fa52d637703ee957a993804c13e296cc20c1de55c9b8c032e50afffc51c02e5c12f48383237cdacd005b09243d9fe05e51cea42b77645e5c6f4e48c10e671d216b90a48f0d8f5c1dda553217f5126646d11a62587eb0a4ee0efdaf0d54bc2eb04cd34f5a529b682ce09a34d5acab2c8db58ed6244f7b024e68a14bcd5d7a7daa4dbcf490485cbd38e6f20e839d2b0142b9d766f9527937bb1a737877edf6122ba306bbfb5379243a6b22bdf85dcf3b079691f0e90b28a4259c1c9d8a02afa5b5a661a0f9dac52435e7d22e3591593d37eb2e10f646b51be2d1a96cd4490289ef642ad93eeffd64d7cf830d60dc4a98c768a9bdbf6ec9923062ff04abf19e8b65b95494a9420971018c7e6268b8fb2021a4ddd103976333fa52389643c711a980664e29a8479aa9c4091c2cc2074ce3ac1ab4afa217d39c6a1", + "c22add33457539a957d32dd07ec9110f8cdd2f00ab6ac256b4bc7732f63dd3b867b0ecac262555", + "e71f9a3dd457b4064df1d9055889f105af175a2d10dd7b8729da0d0116c2d9fd", + "7df9824e774c5f86d83cb5d8", + "689683c9e7aa9c48b9fda0cfffea0458ea0c3dedccd21efeb06126f1194780917c9f4f2f44b1daceec3f6b1f75506f4169bdacf12c1f65958784851056fe0b4b42a22aeb043ab35ca73747346ac58c550324c4b849a404c94b8860967b6fc58aff25dad0556f1952c045b91f56ec8eebf6f552c18b2a0641c037e6c6538b289601e1fd5a7bbe7b6e0b224124fec341bf77615183abafb52b3e30082a0abfc2cf224324338c132426011d9f800b382e6b834896ea48a8247f149d92ded7e69c7800096076cd2a729a1fe41c70dafb1f855ffa2ffc27b93e2f5f6827ade7118af60730033675d84de9cde6c260d3d615a945dfe0ed25f33b6cbd2c0e204ee919219d85c7536f4700f06fa61937f8dbbe9bda88db1f4ba8a8d195cd385eec62edd9ce673880800be9aa4430e5c10a5908f6dd349af70f32b32d8db38a7d73821af47b993b622bf168565082d07e88fc48231a440469adeca59263302438ece96d89de11cf8057454d1bfe8e4e36965a4d82618834a0847af39dd8776866d9558a5cff79a1cc9d1e3c22e050677e54ead68b3cf0094daa01330d41bb66708a8bbb8a196fae5c77dc6774629d38905e81d97c5b16d755182f687a8046e55d148419cf9c12139fee50c0533b0f04a805723ce1ea5595fca5b668e58f6b3b396f438308372489b640317cfa3a79392cf6d1afdd8c3359557a83790021a4eb418fa189ad15ba9be0f74182ac76076f102ec171117a3d16ca20b4d200e03e54f1f0ee6308e463a148c0c85aac3ccbe5781cf45b53a313f7c9975a45d1853ed9104a860c08634a8211b87500b5ffa3d8d9d56f22256d485b9b45b24d3873159adb8ae25966cc40f164f342519e88d1ead1e711e1b2bbd4be64c7e83f056f797c2d3a5cf7c5025f92be5637fa7738a1bbba55f761dcd1451ce4b1e85a6628b629a2f7917a86363b01516472c0f8614abe2ad1c9d5501b2a44a68e3eeeb34a64541125bf49138bcd15b7c82dfd40708414b85107d8b982c4f99783a03c707a37787a91a7198063f0e8a2d52dca61755105faaa09c063c7a0849570cba1aa7ddb3600eeba602c7e7c9b90ed00ec731d4d1d8e4bb42f9e9db21616c4aca48dc27b939428834404331288f03c2b5e887103c51748d0257519c3988f6492eb70cabbc2dd8a8a910d737a678d0970ec48bef3b81673bd10b687b37e11d49e7cf90c03c54826ecd833bfd9dbb8174274dd45b139d08371d5d248ee33298193194734c5863adf4bca92bc282bae2f47da5201fc240dd0710a22a8d922faf92c2071a7eede7ee17232d3b6ee5f3ebb1a8b230600b243c860968ab427a5f540912e5e7bfa0271201f288727f2bd5173539d5318e5c1c0a71cba4d9501b91c3bffa7bb61b3713f1751efe94a66e17d2b42da51d13c3df40f4db988dace42a6a1b9d138c4f590b7227990711afbf8f56fa63f2800cc019bbd4a7b3a0983c9b9e5f77562dcad6de96e3b2eb85cd99d28a021a10d6734400a91369236b48ed68528afc68f247d45c79318fc5d634ecb0f3ef8536d8ec2e877adc3308be906c5b96777d0e05970023e5c5dffed12310cc97249e4b95e32451c9acca8394fde699deda57e938bed7167e62e2cb62357f82fbe821ee73b4e09c6e2f512515412c2f27805762a8493e74a3d30bb409e499002a97354381318af28311ce484bdf7c39db53f08f73ca5793945e13fc8c66d503fa95506b37ce134ce2945d75b424ca6367ef4ed47b9cb8ba7de80e773279bf23ac888eb105385ea958b1b49b27c8db6b1e14a5c8ed5d28808a7d0b6bff1a58f24f9c57fd8b8f477a9d1365f89c698b8ba923896181299d474b93e05d3c915b10a69e61910761a6d8644933c593661b0828afeca590ca18e702322d9140d98fcf836c2f7a4f72b59eb529823a52ab05d919c3eee4db2cae1067213c5070450a160fd52fa44bc9bacc5c136701cd7adb1faf484da376477da08f6a4dcaa37af47c7b026c2da9d5fd0b30741357104cb2bc0d3cebd132b5fc7c873ebeceec5492aecab95ab393f35b93b923d2ca071e6bd8522c3ad8598a05e96646504f1620c045aa5734d665acbdda0ef73612be4ca4d95ba069041e042497f7b10445869989ce30f55206a1feb4e64890b7d1f7e9df2e88a352674a52ae4267c06592d425ed1d88101cf94588135892218ac11f3976ab2b47a27f02eb887696c94b13d48b4370eb11222274b5513a0fef905c66d0c1893832ffdb9b333178b65338fd8b81094d8f86f2e4e96a47e72032cd6fd47af87eec295c6e980f595b57f79abeb4654c4039fa03ade732b1e579551898b801ecd6e0fb1c5fd198335834b51673d074a8222640d2a969998f5b878bf897fdcf3426c4e24a7c599e5567643fa79ea5d20e7de581a873ee0181e3632a4e304f9dae09a81f882d4061ec17e588793b160c93a926874d5a8b78727f88de9bc125589a9562db5bb1c01012bbea1b2eeab68877871ce83455db43cc48455effbc71c436aebe362af22c6a319d134f65681c4d0d51f9aa42fb20f48ae3f7065664aeff5d8349624a5d79eb0bef3cbb2a1244ee445f560a6bf7a796b2c950a37dfb85ed5be11e8e305e835c9e077e676aa5ce23edb1f74806278548e3fa35059abc2f032289f9bd76043c8dd1352b6131cf34f66bcd0e7f1d13081f5b08ed0c69136f3b7ad8e05e9fe99a9b73624095f96740c1f40074e5d92ffeccdc0f15502082fdfcfc97a800be511c22b875f2832b2b891cb1aad2a17c7bd0be4427a4549404172f7c14d5e425e14498237c26a7813cd8612d048703cb180f1a6194f688b4644304950b078692faec7a2a5c5bbc482f3a7e8ef2825c4c19032a7a79a2908ca9774c6403e6b15625c485f2dd078902aff769dfee2dca9373704bf63ad981b51f61253910fd48c49ef10e3938f35ca8dd491a8e569baef675df30367b093f1088ebe8f876191dc32055481d074e5e47a4bd728efaea9fee3e83d8556255ffb2fa08194bdc66897d97d1557186d5f873169461494a83368ed8065b9a033fa4c2f07f7c60f945b60479e3c89233d58f674c0c6fa5918150bae0c6de2b65a09ccd490e2ad8571745bc37e70982411af667f3e8e9b9f7f75d863e5fef05c1f0d2acc7c86585a83ee32e0a64a9e67e75b80def5bfeb7cffe6e6822efa7a9cf049689b58336b081c039696e0fd3b2a2a6b0d177c9b3f8fe5cbb1c69ea93c1235b2c5b6934f603127eeafc4ed0728161612acdb2ba894a5ac376c4ef1fa8d49b4722379e5cb39752837395c413dd29a2a88c03849b6fb2221fd85ba6d5a50ba7ee9c09ecc5e6dc66afdaa1b021282cadc68f19529eadab809341187d57cfdfe01d0798ab8a94277b9b868612e575bd98f70de80ebe5f57637c511800373262eb5ac3836b03808ca5d5f732f286a5f18a7b7fb8cd8f60e4debe54731c9c524b84694c5469975443964ed28ccff2f4e8e0cf4c60c1c8a092e986cf12fa90a994e4f26ac89fabe8a0d1e27fdc00f1d3d3fdb73bb76809f93ea113e336cb0a5438147e454e262fbb7d656aa1be1288839bc342b48ba7d0e72c85a2e24be1a97dfb2db85b5d850481e62f3b11a28c6407686e73d550b9f1d0f010602e82af26813d2484a8db2da0814782c8404b2865abfbe3c98a07ffb37eea6de7992cad73a9b81ae96a9acb13ba213eb4111d868cc73b0432d2b6c2d7e0e0ca7ccbdce86d01576e1136871a07c76498eae53fb7ebf2e85fb8561d10dfba740400ef4495ece7eb33ce3bce26344eddd88cf1ed8028ec5fe8e71edda54dbdae08f50f8df6295f6d7ef1163f62262a200456a7777d0565d7f5832fcc7ac144b5c3e0ce3e5c9b7f880a54ed5e80662e96b356ff58f2e372b1dc0d73cb8b96c72caa9e5dd312841a8be23f838bc706d893e1a8a48b2c069874c293c41d00226f73f987aec8686046ac4c0c972c991c38b98cabce30e7255dbf16039b95dc7d103fde630b03441b15bd2c214763fece9d6778d1c6354d2c9478c226175c02cb006006715fffc879a6a2b4111f6234ee330d6c84d453c9ffac08efda1f380110a8ef8c2fe44e2ed644cc3e0146b4d02f76586fbb6d69b827be38b9add444e2bac4d7165007cdbf2ea8c4b967fc1bb70c68b229f19bc3f79cb13ee6265264885f04c09a96583f331ed46de3e5dcaf08313ba6053f3d0c1916a0f", + }, + { + "3ab6cbeebc18df951d371e0f3cce2697fb367476bd9d50ca9e668c77636eeb9d24b68be0ce6a75eca194fbde6221755d57e9d3148623de24896a9becd98789fd3d14de0c7e53f81fe7f3fd491472a66b5b797fe19c5d0525c7a111a0289a9e65ae7c712ccf694cb75c490070bca7db17205af9bdb7fee27f9ff41fc78ebd2d3d399e690908b5c064ffc0d5bb67b0d2880bcb45c2ca2741691b6131aa1e5ee758fc50610406216905e13ec049ee92d1f95e16bc283dfd91595ec2037d20ead51d3a362140578a4538c80581b79852b0f6686c1ea66aafffc872024592ec1aaf2650d167a75bace024b261db4ab48b401cf85ec2620dc12a7fc37012af8ac1d6db923d82eee962129bc4ede578782594708357d29118fd10dc6d228bf7e461d2769e556488b776237b6309f3dc2e884cb2df1f43f71c53d389765f805ac053d05fa835e75fab0adb0f13ceeb425637f43556372d728a00fb005f7c5a20cf2b7f776066d60b70b11a848005c6d63dba0c93f139067b39017c997dd6b94c0138c3619e9a6d0e4b8792cb8d58a2ca12ae5d03e7637f2065fbb9e2d1722fd3aaf234488ca157d829e9a3b642458054f3dd58da41d7fba6d2b488a327b776d1aaab1a364c710e755ab22b9cf7abf1eb8949c5ca20c070f275f8959cb00c6d5ab7879003f89f795351a4ef4850e033d929f9a349b9133b2e0bd1cabbdd381594bfa697b845100b96b5fade05db12de040b814ec49489f39f5abd5b37f570cbb516636d5b7378f12872d02d4de20b52ed8ca0b12029a4c084621bbb578b870ca2ea79fd5df1ef8664bfb3b1a1bf038e4ba33f6ccde42c5146470c9dd293aa747d2372db1561617920142ac1d32e4f1fd18e8b9e72b7efb8fefc56d08f00450d23b7e8381849b1385ddcf9310a4850dbd6db7a4992690190655760f557a5027b5ceab3743365ac9041a5c14bed1126c4eca00d7e0a0e0e6f666f64bd1466387150ece5835192149237d5dd25e703e9d3a4f652ae04601d6acf8228e4e86055394c3abc9dccd02f04a60c298d101260b408b2620c137f77e2019fc6eaff1b234c56dfe922b0192656254fe3356143e969f64b7609cbedebcc8cb2b68bcdd9d723b9c14669da6cbfffbca2351de51e87db6afde435ead0017682b8014f91d9734a9ab9b374257273e114a8fffac786d53183ba666d8a67e30c1fe45bb1bdcefb5787afcbad213f8e36e78d30ae1305df96bf450349ade655cccbb17d887f79e00728abb449ea427fd2d0af80e3b5607a74a57dbe5264131f2fc49cb74415974b3d43ff872d4106ff11b680f56be06fdf85ec9dd850b1f77f759337b9a9ce04e611036d3f45743e562abe4b959eba7424a712fcf7c3f3773886aef22f7cf6168efa83cd3ff70b9521cae1b6689b2b8c423d883a007bb138025f2a31db2147691bcb365ac242efe40cd09a746cc501ae0289e80205993b07f86538d486803da14b74fb0db6ebf1c2bb8c36275137d654c1be56c65891cd50f705247d85621fd0d61ade8c05cf4ec15b84e8adbcbe017d7d5743d5e91025e0154a5d9bac7c6b8297490e9c195c5d74e046219c042219817a5c56636c7c4382c6a01d721d88f4b4d20250eb5eae5f3ef481dbf8a3f47a1d51d080bd4cc33f12645c8481e57835b77a85a2d83301172782f22026e69a43376ac4f5b78734c9eb914e6c76c6a12d4127cf195ad030825322a279093cbc40a680355d086a27f3fb7560713b019e7c286d96833dc60590e9a709f2e3c632894668e74ed20e42cd83a23ebea3dc3bcc49d14f8697541780fb2072dee6a5672d0d4e7bdf5cbdacdf5fea9e03c6d9cf0faa1e954172acc26dcd344bb3d9b2e0e6015cc55d19713d795bdb7c21b44b305e69c69fdb7261483f9693f36f45d356462f1ba4498de1c2e8bc3e0a70893acef2006dcd73cf15b265a8a5d4ed792a34a846d8f1d3b9b3bb75f1c5e57a00b36c00203973ef4e2654f6cb29e4445318ed99f0de6ca992281e83ed03feedb66aeed6a461c6f2871ae95343cd9797e58430d5639d7ef5c59c78b29f76a055e18e2b85eff177770c60ca4f2d61e612e617e749b4653e7901b62ba02dcbf50e59219349120ac01e6b8a6e98eb54abd16b921a1ff85898f90fc49a3c8f8f4ae9b0dd32c3e7f2e1527c4feb67a496390f28532f20acc71abb8bb4f71b434104f41e36b705289858a4e8430b8cd9449b0198ca2244923cff1df0f63833373c275572de5a9a77b23e5ff54aebce8e86d02651f26ae32e69001e5f3951967579ebe8574682cef8c12dee0b18bc999f8cc0f07e2ad3ac94d3caf30c1c8a8295756aecbbecbbb4ade8a2b8015e52a0eb1290693c6316d036e0c443fc4ec591c32f7e7f1b3933c921d5812233d3c21ee5528822b59ef2ec7eb62f7b04f40cc8238a473ec37a07e54f8907825ccaa1421c2964d2c756be450dedc011e1cdd9045720421b9a4a00e9d3076c2fd10d71ee36d5c0fd2c7e42396b034a4cd0245027449242dfdc42c8af4a34df1b4150097726c9745247b78bb2bad5fe8af94eb13ee1f41dbd36e56d801a4c9c5b9ca5d3c26f4714b6fe9f69b87567426eb6f4ac97e8c9541eafc19fc90d3b24aae0f76c4f3f81063d206ff695d638048c2cb023147a78332939d2f2470d16f1ed0e5d3d4dde438affb2809488b99815e54938fac3b02deceaffde310cf422f9027f364f5e79da5d2b5af1b4138ac9f9d301f396b220829c1f60cd2b54ef24576e5ba6ccd4802900db1bb4eea57de7787eda0e30fa90cc19f099444488699bf7c442c398c2ed989d084c8cadc97325484e337848c34562b3dea6f7670f935ed3d5216c970e04351651c1c31a34e862821bdbcbde202d91fed38965e31cc3b6f1e52288f327bd0a787ecd92b3b6f535d1d000b0f02d41ee01ca54e4e6179ad7fcbd60f0e41dfa5c9cc7ee4f7de3844fb385ffa3b24092b30be697f1fd32c9faef29ead346e42fe2ab1d312901b678b43b7758edb7eaa1c2d038b4cd6a7dc759a6b12cec955bcf4179006a7ab6e22ef15986df107080d340b8870e2304d57caa87a9961c04655d7d66c7f71ca9260e02aced131d6de65d256d6b487141c51bc86eb1e4721742f07d09e799b30da7b5ba94c8d701ae34271ba06f8ce134a7a9a2598d1570cf05edd9ec868cfa2e41b4c20a8bc4b8bfebd45f5a60408f08e931617746d1464bbe1f3844ab3272ede635f771f9af30e483903ee4d0cdecbaff4d31451e7791dc97c92042fb932fe1c82652c1d682a55912e33de3b1299db076cef594458670dc4f911f4a244e2bec757dad4b0052a41235e2f5e60b929682608c16a61287826218a1ac3cf0d8286555d5b0552754685c365d4342f0d9c45065daf6786179da791a86b50a5edd6fb4b21f09d9747136aacf79ecbf52b00fb88b0630ec7f0a6699901ba4eff913a3ab33ac85a71ebb51ed343eac86eebb3e79c16e664078ccda09e77ef8e0919b8cc447116b65ccbd5200fbfe86e9bac5637b33c9bcac9596b57c14ad5da548e96a8ffad5f5c69247c68d464c770011da7b45a337f138cda6b4e15311879bfaf12af4c61fba596780e6adcd5dadde372823da6014122dbac70f0dd896a8d387d3c74df282a659028d06cfeab3ae22dcd1fc3ce60f69a0d678aeae0e5681952949e31ccb8975cd167c9d012f4b230b1c1f47022eb1a3042951b338a734cdd17db0ed483a621650deb3510efe74191a94611dc212c0c73b117a73b8ae41892cf176742bd98a7cb73dcdc53b42df56d640739852335f8d44d901fc884286b433fc285fd5b3db8df0a8522cea3182c071f559c328b8516c9252681a94eecec7ebf626c0a9014d9aaaa0c694d14855433dae06656657d1f8a939123d28e00513d72bd3802d211ad7c1e06b9228c0d5656edccad5339bcdddd5e01afdc01f10974be3187804324fc513ba583b7b2da1e9096bbe3d078c1adc6c34d92c54e9c49fccdc17d10e66962120ee5d9b1cfe852569436270cf7c4c3bb12568050e2ca4db08bbac16214238413195dd4d936272fca5d56d7551b9b002df1807ed44abc84c66746387b79bc9e830a635c308a7bfad7c2c22cee6d3d0c5ebd8b230837b7ceaefdf71a67a3a8eaae0c36de86b2d96e759b8b53f8b8604775eb7a7e13223cb21033dc87d775628581a954085c2d66c1c8f225b1aa86091061738e7495cb36a5ff032dc678904bfa39a00285cd6947865b6d4805e3411644b4a4c94a6fffe05ef31e156bae6165d801685dcec195552d029d22e5de393a82ddf3cd3de3ad8cd6bba2325a03982204f07fc3c21518ef17a601fd743b27f7191bb446ff61d3c61d7608777990997e911932532e5b3235f13423756f5b6c786720cf6682932c90092", + "50772c5a0e156ba13a9d86edc0e600021d56f7d31e7e452a74ad53a6775339c7ca6521d87a8c79b42900a1e9e6a1ec03f7e3d615611c3fd5c9927c40e5b508af1a298794b60148df01e9c9e78ab5ea8198c097fadcd6cfa6694be64e00eefe1a1885aece86f6ad87df766e692b58ebc41982bef5", + "93a2561a9904a1787a10e2a668cd6a814f2877a7b512698e94796805875c8d1a", + "588d9bc1d98210d9700ef488", + "165d8c9eabcd5e93e6eff7be122c8c242e1a7f284790c93324f924efabcec4a4ce48262011b7360c2833143d645ff295453853c92f0c48c6dfc2af7ec58d9bec0d13239c7e5593cdb39d49376c6341263df80c0ed2ed79fe9899d0c07de93f6ea95a5dfd307e49bdb5672b158a4df623ee86d54cd1a0fa9a60ce39d1f5f4b6b0ce9daf2a61a907cff3bdd3f29156ac439638e0910d728843ae17ea7368814ad7734732e7c023d4954e1cd5fd19fc9b76e9bb84b61dd4371478917757b14b366b4bfab4eab0d9de746088ad43d8742e2b9e58faff15c2eff084df5f4316111d5dd7d23cc0b1ee1000253f26cd260aa636f03f64a8342e531ca1515b3beecc3ee07a29184988325322d5c09754c278231f92c0d980adc919d4fccf4a1da1d37f1ddb58ca997d6d700946199fa007c43853b6caf5f8049233584087fb23c3952414ac487e452f0c3898486d04e5b008b843122501f9c8a294da9159a04119ad5c8e9f5c211411e34559d3a7bcf2ac10e0174f94f3f2968c80ebdf4498de172884dbdad0acc3a887f9bfe896a6004d54cc424567d53f1198ba33c56aa460edc6af0e437b34322c1144854bafb2434f00703c1992dbad0ceaa0616aec60a380676ca11558cece57a936959d6c2ffe0647eeffd37524fbafa9691f31499701b202d9dc9980e79ea517089eced779aa45b522c9ad193e63ea8b64e8a942f630d44370f23b7e9acfedac51dd9f139f8806b09a8fbbabc76fec3c3721fad5087a6d41f93973af8d787d8bc74a3122d99ea14e2f30a3c90be4b695c8b269784eefafa52d6a79e785eb47a23d72f037ca572b7029d2f37baabce57658119fb02c5b659e3aadfe0052f1cc3c0afc6fe4624533d9700388713945c20c1d175da53738fc73f48fe57fef8305e796b474b6f8d3fc5040042373a13384237d95bb045ce0c20934a964a8372acedfd6e559aa84180a86311a3996cc17bf7f73e5d85d4db2529989e5836edad490aaa5f56d17326825aa20608fd209903335de4b36b79f68b6a52194f6ea8ce42570533df650e65b50c367f69b9f08c32b3ce3e75318106b8b2c6b6d09369c781fbf2aaa35053af215b621f833814ec4778ac683de0dc22c418b077a917a6e405ccbde9f72ed523aa696be1a6f247b096b9235217bcf19b88d43178cce5a7d82335fccb4c079e00280bfd272b9f16ffefa7fea38d09dfb2e4874553b135052595812aed3fa15096abf1eebf9abd598289e0d156974de4c2654c60825d42b662ca7439816d9d3a0255f40a4965504f643f029da535d4b109e8658ec570e99859382ca0ede0b0495d508c63c7f1eff3f648c60e9b773590cc663a751178ba7603a11985ff519056661b9460c1aabc30e83bb0073a927682a06d1b8050c345f7920c1a37546d79587fae2a92c803a986248f90547f0b6c0ad0552d8260d2a0dc3cc76d092ab76b8c12f05dcf141167a6ea300bc23227933396ef6fe9d51a1ba5a754485950f06cfa6964db2d0fd1d4393cc36f0592fca25ac1a6aacda2a32f548ed20287e3d291661848a62d41504e4fcb1cd1785617fa5786712b3005f1a1041733df6cf838ea3ea0b93685889bc6b2857d80a9bc0e7a66f7fb3d805770402f049889311fc112dccc72a25bd127777fd87bf5ab56d39bfe6be2b45a8301c2f324dcc50b27540200d522c24941701f7293b8877ac84cf35638507c7d912a3a94e4384b68c507412df65d0c4ca8ec2da704bd4483eb2e0d13b68c0c2b68c106a55b9710ad0a1436d655a3cf3c419d5e6f027ddf5dcfc896a5b316a7dae9290a7bf81aed539a647c8c98e24e7ed6a4f7f00a11134ca715e5826625c250500f8f16b40de048b095b5dd08268407f58a91c86c36ca5a2bf4f8fc682adf1bf601da24414c74956e1a8fd2888b5260e980c32f6678a4dc4ff73220c22593d23144b84c2ff56920342248876d15ea54fc100c09a81b802dd15f030bda9aa08727ea49e34f0ca8693e0a06d0af06ea7ceddbf0584adfdebeb20510bbac683451d9f84cf0f4e85c34d979e550e07e7f414d6f1011cb3dc28d0df6d4aac113f2d5b04e4486ee2cdcd4157dafcbbd55e8330a7176d1b231d9f47a63da9ee30fec6cc2c5aba3a8c6154f79997af89d972743255355647235ee939f4f305ec655271e0cd562ff6f401b86dd5826c769298445108ad0d9e13c504551f74c507436911331db60ef0ea99dc259b13cfcb0596fa9b3c95cd7fc3b1611e3b012b6719afbcee7548939676dffc372276aecd08e6a14251407cf995266545427d49ae5ab245cd5d534c52542fc71b3973f0b766f3d234c8baaec8b74eaa8ba90abe160b4504769d02e08d7af4e7ecc167780c619cefa58865169b674b2b1e10d82f6560ba0be41a781f4afa46bd722566d941a8e6f87e4a5c03d89685a22a3470354f2922e2915f9d46288a5e8896ed13617dce694a595e379f25fe621dde8ba73d865976950954e5bd07db147a0fb74f87cb06aba49b073942b82fab33a878651df73df2721ef800b658bdc6c359d396f684598e93f38e79639b8736b02dfcc124fb9fc199c35f2fa1d0dc39939c57286e58a7deed7b6c76e02b99a14d9bbf11f65d8eb7fa096fe4baf0f78cb34736499a0ca550f10d7edc8909dc34b039e3abdf1aa67a51d37a2eaf4c07022897d4d8355d3325bcf392d91d02d462488ead90b366e9645b956c3802e4249d34b5b2b2484a1dec15a9477821df6bef5e1626ec5ee9832fc3bd0b63a3c4100d32fac3e9085f0b5ba43123f54beaa7ccbe6ba68231649f35a28acfcbbf97dea2d6cfd96025032b3950ec8437108d0f07baf1bc89e3afbc2cdbb5031d3cd9e20b19018adda466382059229e4c8c54b455eda4280bde43b36afa96e146e408c7104523d5f565d22ef86d4c7cbf9c6e0d0b30e37b37feb9332939c642eacfe19d0dae1259d3267635051ea5f9b518dd74786e45fb8bdf72cbe3753bd50bea2a961b49cc0e2d589e77fd25ebd962463fc728b1d288c38a79a182b124d345872afbcfe792d259e7e5334311244edc75d05f9a12eadb61fd3ff79fe8c097eb01a4ac1f0c339d3be74be3d96b0b6a15e8868d043a0f2007ee8aa51756d78b7a78ad90fd9a26afbcb51fdc20ed7a3947f715c833e363bb87504d8efc9f8b93a993e2e26430f79f3cce203b09093c9b456b1967212eb0db4f7688d4dccd4a523866f75c9d9e7ce07825ae34399c5607a60b771866a647b6d5e1e20795ca906e451f367d8c40ffe79a2cecfe7aa47a402f8d49be9084661c96ebb11f1b48e7e8abd2978ee626f962e98f99db4eb3c6a52aa2bb2e62194120ce1e773b9db784e8c9b5adcfb70e3bd5717293eebf014e9872c5c1bdf3fb296cb88eab5e97a5ac320092033b49f37d840dac23021c19ab2a89190f3c8dde927f6e6b41874bf71ba7747a616682bd5b3f17a1dad40f4993a1b186ce4f44afb4e36af7715450bac62cb1527eb8db1d87bbc4d9c99415d16660e48efd911e02f5777a77e72733af3c3f5315dd0c785d5212b79c46c3bccd74582c57cfac0d50fc0c85370476913f9d8e8e10d0f6602f2271994972de49ab1a91728713c3cfcedb0e61c270b5fb331a980965bcfe10b41251a0f7915d5943f49fb139626f1c424524f2fba3a407e77dd7513669894fd09fff4185fbb997b4e4677f6ea0b52892f013f1691bdb38eee9307a565e396bab484d91cea9268f49aed29e319b0add900b6a75f7461db5486aaf5366f98df05674361308931de753c70777de73337a996f6d4b0e06d63a69849ba7533bb0e446f062edbd6250e61a49f4120f84efc1cf74c1bd30cc61a2d719fa76991dab119fc814a7c56f48bd584c7935679c53bb0ac78905b5d961fcd89a4b567d17a5182651cb07146aa9a94972ce613e8ff9c878a8433c0244052f09980a52d800e97ba65e8ac186862def58c72b9feec91266e26aa5075b3337c7bb8716b3acafe666ffe2df32b78f9995661d3ba28f8a8780436aae1da2a3e6a0a16dc562b8d5df6f68391aab73a10508e0f55208f974a0505f0fc0d8a55049a7b631fc94fab91459ae1f199527362695b41972e50faee34c5cca9e35e8682099f5e9652f88cfe9fa990ff2154c89c1c2a4ed6bb8a889fecfdf048ee0aae7798c55d6cdfd062cbca97ca289578c832d658ceaf26faba54c9c3ee9eb5bac80698c1441b9cba287f749a5e30d5cc715a01c89353ceab0974ae77fecc1d2dfb31a5101783cbc002c73cd155dfd14685c2f9acc170dc437c649b6b4720b676848a7f9b56cc4787eabe72f6e3f2aed776f9bb1432fba93a63bfa44fbcfcb6eaa9ef4b79b32bdbd68cddbb9897cf5a02c6f99fc765790092edf0d5bca7c55cf232a03fbb6f3eae09b12e09a9b49a538e0589394700d16ebd3", + }, + { + "3497e8d61062e6f2084ebf72d00e9a47b550591edeee9746f31ea28039a1646d384c4348af293ab778f92a4807c48fbd14e8dbf3d67339c991dc4aca7dae38b5fb7bfeaaa538611d328b653950f4f664dcd257b345917cd66dc6a1ea75d99f70549d1af9d67b1608077b41576f38bb4c0a13ff4fa47b251142c6fbb79f9a27f43841ed0ebc0416c37f571aef8fd63b99e93ae88db50e9ef7d499ae7433d5686b165579d3598f96d9e7b1c876870310703df8fdf2069beadb34984f676eb7d3840c4c5766dcee3fc39f0739260a499647429339482e232362bc72c92a299cae36e9069cc5f4db8893e2c1b9ec0b4f334de26c951090b9724c2b3b7655d8248bc12a27861e020eb1e4cf6ad0dab903279b6fbdabff761d4ba159c1f631e681f210a8782faa86e08e554b5e30046157a0d1144bd08a691c2cc2dd22f3c3a4e5d44c5d03f7e3e385382ee4683345c0d316d41ee75f87038b49e0ad3ca45121789e7e7b95615e1a9a8dfe02c044c2935a97b141f639448182252ebfc980e0411e5fbcb3c01acd5aa7cc5d67101ffa6ab6acacace5f02d67155c26dedc071ffa66dbad26f67a819d46de0556fdffc1b4ab6d60905d8ef873ea1e51c62571c08b4c6db242e733e02e11e5840ee445c290b2232010b118839b37d4615c4521e8928e9ad475cdb4a3de9928ec7e6daf0e20d22e308347b31e7e877fdacda0c25f2e5c33a329e84707816ff4ffdca30dfc753c2cf883df16016795db34359e9363fac60624ae4d2b30bc1f2f99c23d953779c22ffca145fd08dad83c0f76cf727196799544c6c07483e0a41ca2e1b1da5a730956154f531d292b5a39a229ab13bf24a804eb68786e481c8aebfd3bc557afceadc41d00e1472c3b80ce652be1245089283bf1a1a93abd3325bb6eea121db8c0e1d6c0c31decfe9dba63c89b881824b0531651fc500f2f75ca9e5fdcbb179c9ded5d600a495ea704c2709f4a88c4fadcda4cd82a5b089f25a6fe0161159efe03fb5e0d44bdb5487f25e8c9adacc389860f62b06a6a4f8f104d9171622f70652ace736e8b28b70a4d9fd3fa4b9784d1a6e6811150d0a0601d31d17f6041e58a1058f99b80b0a6cd4f79c79a104b6bb731ecc881bc68e1d99ab358faf43d8504957ea0152e46e27dbfaa17d0f58287276e4fa82ab78a03513d5b4c3199d1362e4fd6447d1c26fadbd011abc69332ed0181952b391f2e8a5c89d68e22a7c451f69a9573b6bb6d918c7e3d52116f3f12f1d43d2af46bb450f58bde1732a268293cfd9cf2b90a844588c1979a30d6ac21aaea4b9e5500ef4a8bcd62bd70cae6acc8839f818d23c615e45daf14335c36dd46817c9b816be60c3848caa812b055da33f45bc01721d6fb7e850fb1e1458f27c70bc34876a955aef11f5703cfacde03a039c3b75b99b2d91fc18b00071a28ce25eb169b946b49858aa0885a4c665deca020a3fbba55d4d9175fd91e7901ec9eec0239806e8305f8238e5270f4af5c94d0008f8a5564636cc33c8a3d3e76db2a7915abe798b0dfbb3e322b33e188c7b188573bddbb9e4a7edbd4bb194b9743c4aceeab449f8affddbc2b109eb3d84f3b2f8b18ea2962680437241d82bb6146674ff1abee7baacc38d5dcd688b425c3e3b0dccdda3e36de755afcf7155d3d7cac2e279baad167e2a743b82ff8ddf3db8ecfa9680ddf468339427a4e9fb8ca4ce6f1e790c24e7269912a9989088c65965b0efe68ed44eb26876674261e3e72042f5995f1a7075b3932f4c23a8027d0db35ce4322122f489995bcc0b3fa32b7298c4c1b3354766c866a2fc0ea5690c58c5e08ae7037f70accb3ca7faefc37d78883f2bcd768285dd2571dbcaead813a0b8ae87cc1df868e93500d414c4418d5c80b919f73b9fd46111a02bfc884f9d30ee14fcfc1d55d54256b9572afad4777b8d8172c911472a22e7461f6f85aca063c19d6fdef3351149ee6864e93cdc54ca5dc7837f0ead91f5e3b155795df5dd1f933cee8671ffc05058353995019e5f6f55d2de6470605a5411afcd7fa5aa8f38d77dbf496d7fa9c5a4d35ab661aa15c77ce42bed44763166160ed5bba954e470c293ca301363f5b837406ea8ea746057588c34acf266030864d8c40e2da88ef04c49205fad1607d456767d30eadd884359bce04c12e35487bc1885d9b104c9fd4dea4ceaf054cf46cb3c77a619ffe963acc9bfcfad0447591ccd32cdd1fccb1fe7080ad75cca2e17f695ce0095a774327123f21e2839773506a9f2d896bde87dc5e35512ad733aa408f8a49e9018d1013cc32f550c968a03308cdbc73ab444f0a79a13450d4de906369da4c6a675d7e338f738358dc238be4f047579c8ba7a60448da541cb9e57f22bfcb8c26280a59b77edd0f5a009a3ef1e2958d6d3c3372840dc6a0c6ab1fe86aeb7590137feacbfdc7da57c77595b8572b45c4677836ec86fd8c4ca8ac351397aaa3aa298d752754507e1cc514d41c3f1ae0a692179218141f65bccb9acf6244730c6d00829455d21371972745b3665f930cf2aa9f0abebe6f7b89094aeb4dbdf7bbbe794f134b6284e289c995ef2929fc1bd39b259259950de29e57cdec15c4a7d33ef6e689596a6ce23301d25c2ace77fe699d90c2329da4d0f471bc093563dc735ac2fdb32c6995606a67bc953534939ed1236003c004d3b47590beabf39a1e4d5d1b00898496e9effda68433da17d1ab3a32aefa3681aeac116c5705077552649153ed15e9d704e67d8819579feb02d91db0d3533182ff43ee5648f5cc9a595ded4772d61e77bd9bffd6f29fc1f478dea44c32d5ce3118bc8860b254fb0bb1e85223bf709a7c0b9a52fd3914f1b1f295fd246bcb568388dee43a32df45e3c798068608a102143b5511746903255b98238003eed68776b46bb0e64af6c9118ecf9896709aaaabefbc1f58bf45b45768345b560ae2cdbe4d7da497736da8013c4098addb4258cafe7823bdbdd715250b707b155248d39fc6773639e4de3b201fd3cdfa1526c4149ee7d15bbee680c956fbdea844b1470a287d430c5c7e2d7b51fa756720397bbe214c19df3399a989958732d93979e361f7266e53a59bcef695435db67cd8749d258e7d582726e1bcad1395e68d7848849fb6d74451a53ae6e8989c64701102959f7fedc6a5cf8352e218396f9181f33037ca74886fae6e57460bbcb71cbe4cbb3d3a81e2090434eb1d6d5baeee4ede251952ad88001ce047279cfe435a4afe97847f798d84ad79a11bd44f09222d2f3b7fdcc47ff8a4c61f40c4629a0f603193e0aa2164579a05726e547c9081abcc0087907f8034469f740a020e19623fad42e9cea64068abb3d6ff2f6680da328061c200e1f646816a5083786ae5b71728a0e5cee14d7a942379c389fa9dbc7afe7e7ae075c061df11e4587bc90f92f1b077c091c43a25e7b3e870ad852c2883aba2632063c4ff74a857ef7267816317f823a8bc5dcda311b513be3a40e6bdeb89210bece50a608e624f00c9d063e0c8878884e45527f50a3ab4447a9a01652322700f087b6f96ddbe96a68ef98656800eda6563015a6d3c0eb1b6a9b21cccd58cdcdd074b73e40a098a980210ef831ec9e881cb42ee07519fbdfa52d9c62766a2046dee7752f880dc9082ed7f050b49ed8d14307b1b811bd87b6db2419418e49885d20fd7ca8fb45a11a1da17ac2304393734b552b5d02a303ddc72d1f456697a287851f207054c18a6262f5349348c806841d21e11fd4e4ed9c01fce1688483e009930079f7d2045a34f98ed83256dec66400a783d58c61619e6e42f6e2c6e6fc69e76651b96aabfe643ac69681955ce595f4696b80dadd1f3910061be6ed0840d47e928dd93e7c3d6932d3ead820d06e2539d9a604a6b53db6bb599da851de7cc060faa9af76d708a9aaf371dbc3eff0fdb99702504c3006f789a49feb730cabe40745837e2c8c17c77f999333798431231b337357637a5efd1eeed891fb7475f2c9f960e67578adf50241287bc5599ee08d0237f08c86ed9b75b62d612a9353e48cb4cb022d78f73fba1fab7f794a5ff64c97e6c91ec464847a81e5a5253989a1ee54a41bcd9b4b77bae6e72421471a7ddf0136edc59b72402d57e542916ee47fb3988b7123c6e8debddff2df171d4ce61e83c3d41f36143c9df97f2f68639f1bfc2a9d1fe175fe9f45e17e5cfebb330d3f06e15e3cf58acaff09ea576d896359a3f06985765824bc499319384e4c458d4326db801c564b0b503552bdbec60752b670d82cc8fce9028ff24ade3e805b81a72701b37d4ccedd72118b20d792739e035bbacc4893ded88619a6c499f246311947e48684a35406c4ef279c71ab2a74f6e5313f7900080f19aec3a39109d4aa41c930c66c84cd2163f4cdd59fe84a86cd8bb6468bce45a56d09490e032da844e6d90b436dd874c1cd32a75d1ae1d3e86d8a2ef948649eb56dd7b360f55ba5dc34a12f9279945436c6fb83d1ed57ba4ae1d9342a3dc2df9baa82fc9fee927c13439ba5bd2ff9f3e6f577b8d2df731db14c51db8a14bb15bf3e125f1ca4cb2fe856c5a576cf995db5010687d0799581c5e76d400c1855bb46680a631cc582f51c589a831", + "823d0cd34e7450550da9716c1f456ce0cbc79431483a6214939266581b0e899e4c95719a09c1ef166a618289a6ee6971b6fea3fe380512cb977823b387ac51d341c26d4a835c61eebde37764d2e1d588df7886177e98e3151106c898b3196bf4dbd83f5f", + "a4639c22fc7f370d8500a53819102df5e86c541c0ca10e8f6564e50b90c28f34", + "34a04df283c45655a52bdd84", + "cd8d1b2e5f65ddb3c0da8f12096134da22ad4d541444964077610aafc1f77f8da5ffc75bee807541cb6eb0526e78d57fd88fa9d9608914cf391ae7ccb8eedb0aa711889f9b6192601163b271c90df5d69fef487b6c05a24fc667469cf16cbd5afd58fc830119fc9f61b26dd50a96ed84c96825a615a3aee84ea4c950152323b20884346b25c9e2a6be3a93505ba059fbb114c224bed8f05f54eab76b2c9c23a0fd942eef9696ff67484b542c8347f1b1fd7df7242872b3528c9e45030447b2bc85eaf191963291e4223b75778335e5f1256618ff87bbd68b5a9e5cbd2ca1dc8aff4625c834edf8fb0d879b1f75ba9b85895a6bb4d7569a41bb3be6cdd020065bcc69b44a8fa335d9418ea2d090d8061e042e8e1a6ac03a6d5525079f14274079734ed42c5c9ab9986f0fee6bc9ee6c485e233e9b4d6de70664902529a135a5675ae129353eb2c00b73f226e84fe8c594272d6eceaca28b6da30492c92074250ec80beddb7208f9b5418944305b0864009b3bbb3dfbfb4cc2bba3313f8f7c6c19860f1dc0f5d7aa06e3b551adfc63dddac980a79d72bd2225d54a87a93717291c7b78bdfc5521f7f3239d5564fe9c9559dfefe76b77efc2e75991f31a0134529a6611ab9ef076491f2d2d81ffc5774ba8f8009dd7e5881e09ddf5116fcb5a44e576aef6cea91ebf52c56c742049639392cfb8b280dc2229252e04d8d394ffafa539290acdd8118656e7e1a4f7bfc0bb689448379e8cedff7590a09a3f5a29bf819fd87297b96ca07431a29a07ae126eb9d65e21824c16707db89868e127f17614a536de6ed268b1600a8b02aac2bca54a09b7cccf8e184448df334f95b9f0221187d56da7bd422f09b4d94228098b563df53414a5a86728962a2ea63023d8c3f03847b36db7cd189ccfef3e623b14842b8cccb18b4f80f01b32a4cec48f3009b98ffa25dbad76089c8700e90848da74aeca81d01f4dab2b7e844a3e48bef21f33c92734b821ab382bdf6d0b1048a9866e676b78ac9398678ff626d5c173a15a0a7514b2544405dd54eccaa2791605c87d7117bc9f8c0ad84623a9d3a2b1733304b492d4dec38f7981db9361b03a2837a95fe937976c7f4341a802dbf583366fbe368a3af3f92618046bb55696cf7af1f465a5a57ec5908621f431ffc762f35abe892f772a60a3f75ad8401321f67981e90083fdd1cce40903ce56a629120d6e13c8871523c4d848664331966298c8b31a5bc8174a8c14f61cbe98ae7ee3e90bc832b04318864d19a9b8b6d49a260f42bb120cef9afbe704faecf0f428d917ead9f020f5e9d772bc8f29600f8a7623d8971c1e3c5f1a3b094191e497bd70f85de124137cc4b9fe0617cb73cd44b89aada072625e25976e7aaa5a8fe9d9e3f32db47d1565aaef0e84d256bfce6aedfa1a2dce5a94976a2bb9a0da95941fb7ed444990b0e0e87627e35f3235a998019650a5e5cae804ecab8cf729a5c712f1e7d17486082dd50cbeb2ee1b0be6a7bf08a66ab3cf1fe9f49c7083f5b8ad183f32fb35fb8a41230e4041bcf0e5ef54bc3d21ecc1fceb08d95d745a997e8f2fc3c0f6b1b6c1c02e03ff02ae0d879d13eedd42d9f9949ca7ebb785764162ceb6c6f9944dcb3927b2f4eab23ab566b2b2bcc0c7d77b82579e88203602264064ce98b5b1ed992c1bb13edce579ae7f5e11697b493749f308b33e47512533350df5c07c3dadff656197884f359cdfcb736d29231aea1524b56e06c92f5a98ea663543f67e44003f5b41907a951dd792468c84c5e0e1b46149a5c9751295e153990b78c0cc712889a21b299b0315150dc50aa3b4f7fb0079ddd39d263a754b1dcc595c76ea9fea6c120384afb38d4bd40491c4689b1afc9dd096dd0327c84802bda6bb6b7a8830bc6c06b308ae9665a8666a5551ec954eb72adb827ef38f036c51698a28c92dc1c9e25c267532da2c04c1bf27f5b683ac750c3ef53a8460dc186331549bf82868f9327422c09afe1cd15e161bc41a70cab2f973efcfc8f01a380b86a432e1ae540e09d404d93d22a20dd5f685a52f0acb863dadea236288b1714700f23d1c19e40e219e8ed21f6a393e541abba850ffbbd4030e5f6567b7202fb66d86cc2a0beabd495814f6a50690e8d74cb8b093e4d43261fff80e7a67ca06dfe808899cbef84c09ece01414baac740cbe4c656b17991868e2a136f4785a0de311aeb18cc95ed33fbece22aaed8cc1e47f58cf6c09a6f92c96f37d2d2485b369093506f5e9f8534f8569655277d0399ddd3d33861bd40c71ac53a44d1981cd744d79202322d47a0228356c0e27efa2ff1009cf2a416fb6e8844eb76b8077a4a3961ff193e1c95b222e72688ba48be82ec5da498e58861ea613782ed1ab50a95b5cc236834af98e61528ab18453c20ff978551b81e1bcc0ff4b7092bdd9ab0b946b7324b7361ef05e1f7d7f6a336281b4bb2c671a95a6ab84be6bef1b9c8c3d2536edb8d79b40637e16d7281ec5243016232d7c9fc07ed9dfcf555055d8ae65f12ad150da81f62f2e1e82b3adacf6d623ee4759ad61a09038905bcf1dbbab671dd28fc1d10a0b7eaaef73a5862ab449bd84c8698d061e79fbe52a86739ba945a01353e0f3916667bd7b4356cc65451c7003927f2aa738d98245760550156dda529be741ce3ae1afdea0de35ada26ac241fcb5d518e6ee7f9930baf88bacf8bdaccbecfdb920f3b26285439912a8902ae029b07f28c1dbcfde780cd2bee6c6e5f4520c5c7ff3ab5448ec86cfb270c39586f80041f3764b5dc77dc5ced0695c89671cf90ed34c4067b4bd938b1493c7902dd94be824810a00bbde4915d138fcc7584790bb0b6682fc0799cd415441ac90c1caa008c7fde3ab4a3aae478c64991ebe07e6c4587d3046c9ebb8e125e795f0be9266bcee5a4e4355a2830c5b34e583b0355b34b89c08011db6f6b8371de003074704e8cdda37ce42c7e395b6a37bae3dfbe67bcfd1f125c9a262d56883ddc028773988270aa30c6dd326cbffee589f38286533e1d5c9486011170be591beab5e0ce98837cf91f0a58d69d872e364aa88daf9cfa71bad167129420282d99ed5884a1276dfffb2c4100c74a8b863b063c07937f2e9c12523deac4ea16178863d975e3a5be5efb5ffbea994d07f7ddc5326bed1f5c9415c1d4ee1667e3a581499bb573595158636ad94d84f7c6e4b8efc2b141f2bfab7932a050fd88a8c7b21877cddd488543db5b11138cc808e1248b6e2ef492faa8a32f9d93e3c060b5cec10f03794248f9662ed8c283a8e0eb493824e2750ec75b3b1292d80ce002083a3c64cc487afc31b20f84a778f386b012ef7bef46e638d0f1cd75487ea46e05621d608482637b3e642a9a2c5371bead4386eff968b3e007fc263086d8a930dc76a8431a4e6907ae35c7b3291075d1c723f02e4895714803c0e97d65b04c0f27d01d5d68001bdb3bbd44dfee1eff1754fe8c182cd9bc6ee273beb2a444ca1766f747d86f36cd8cef6eb1dafe0c38b9327a8cac6e83e076099188f02721cc4de3d940c3ef19d9b067be07b890c798a79ee8c44d96c5e05ee5d5202d941a674378386233a83bc85134dc8c46a7531b2b952fb277d8089cfb13e882bcf7545f0605271fe38bf4754f98dfa13fe6b635a62bcf962553882a8f28a9a5fc0b3f85509b702d4a7555d40c4f7d10fbe80d48b4826995fda7d15f14aa9b95fc6526101cf09c97fd74baca6bd26b4fce8a57b0726e0f68118969ec067e9ca39b2ba59fb0d78eb5cec5b872613b1b76763b3217d859bd6d991bbb5448bd4e49dd6597ddec9e46afb3f71d254aba828c91de51904139ab19138e36e6996a207da80323d96077c97a3e8994296376d4dcb602f1e77371efe8b020b7b6f6f7bd2bd733ad9c06c45b77a2893d73b4a8a57707969af74ba06b2fe7d4079bcad1cfeb3689ab95c8b1215fe0a855eb431f67df4ea589dadbf055086924e42cb142c9031e25b81e8e1167a54008ba1ad7fec6794f203b27f3092dd72bb766c9653a72b2e25c965f53487cf3baf74eb7742702380303af8c0a61cca3eec78d4b709e35e2cc5bd586263d9f56fc12454547bc6165e3f070ce7b2bcace5c8cbf52f987568dd90237cf190dabd4ee7a80494692a5379b013611f4eebeef8e1ab9a9c5ba61926095545e19c3dd61b7b404230729aff7d82b6bbbed6b4a926f6e49189e3bccb578fcb3537951fe9c78ac842350ddd80133275ac0bce3a669183776fee8288f874d29190b452d65bb7d8edfedc6fa0ae147102b92041af6dd8a566932e016763b60a5b9b1e3667f228cab075f966d1c525ac19d12046c6409345799adfd7154b6d8b51eeb1eab3a132ac6a2e08acd1a34bbbbdd019195af9f8a93c6ed5463765173e669cb0d42b6cffee1a4b45987853d43c02f920819f45a4fe0905d8c65aca182b4bf56fa0dc51cb53c642fef003d92c13ef4bc1bac571cbe2ba3673a49694f6311b7dfc17a4069759177930b179748d4403c7259e10a5d221cd0a6b745966e598f894e607b779dd5289fbdae0b4348141ad373a62c76aa454b35b39a7be875598bb30007fc300606ee2537cfcd7c22b6149880fb3cd8eb53054d698a0d20f26a5c3ce468255737a68706784", + }, + { + "5622aa8d2f308dd468a7e4959ccc01f0e80d91f79df65b8201eb44911f6abc758c6703bb97908fff377395d33f96c328a4541f414b7ac34c6607dd85729afbfe01feba988e4997c6bd2c99fcc35d2467b143a8fcbe6b49247226a9e4c0a4e3c1a29d5931e6f1f7a31d90a0e0edc4479f08ef9bc65ae4eacd0b93b1cb38948dda31e60b18d702bbf5935bd580201d1f280cbbee679fd834aa6be576a37a037eabe989c3c18c7fb61fda8b9ffaa8bf22b57a101c19e850c454353af7af3d755b26ff1ee78b9d9daa78294972d108958682a5a29c8ef260e2289ad9d7d74f32fd4e51e5d9ee828366abccd97dd56e035713a6f3a1985383c0ed5d98c4accac2fa1ba7d30a295670d5224952f7b7554fcbfb426c9496f054834dec48f9b70af3d2b1c6dcda1c4daf3e9601364e57851952c785e65d753be1c22729bbde33aeb1e4748dbe90da6ecf716f05bfc68ad819515dffafd33a909562b95140ecfff1d0747f8e0459fcd3ca6cd8893262614bb4bf4b639285f327e7ac782898781968ec98f6f0f2f3c4bc5f9c4691ffa7ddb3662816f8ad092095b598bd4d10d6b5fc6fabed619eb11dfd4d638f4c0b6cff7194156a411e8ad6d3229320336ad52fd9811c3a1fcd571d1bbbac67c6186737ac7ca1ed9b2bc46e4e578f81c164b09ae5cdd4059a2c22b5e7ce1dade684e49200867f9bb1430aff9b99805cfd31f7e3fecbe898f70a4eded86b8bbeef7050eff6cf8ba71395a7ae2e270a2b58010e56cdf6efc4003da3d8a82e96979ee68694b6113cc9a6e377d40a810063830eb95005a81405e5b7de8de67424845bab1911bc55da6338513742d237a555465fa54b07ba50ed712e7a57a39fdcfe4af50f064ae969823aa1c40cd86a621ec90769d0c1babd33e8388a8bd76689215b9827a5819127bb32ecc80a562a291f3192eff34cad2635e5b0c0bc174add72e2041864953f1fc72be7d28111fba0438d9036da3d5c0f220ccfde2319bb96fcbfae6055ed7f1c1967ee9a78e93bbb77cbf151084d602a5a2f087d49c3134582c1a5d7af24f4c88be26204cc9dbf4368b19470fef49a5823a2d66c65e9b1e8ab56bf5a7bb3220696840a6222caa58a7b39fb792d95d25038a8bd9d916e853cc5459640f8b8468e3d51f05f1b95e996cee40ffb7ae14cb289094f1b77d5573c1aee7c12a6c3a1e31491422f272cc5f510d4f18ab63d3c3f468c5abd61b2fa7ba0768d46392e2a4dc06c7ce79841dca916cd33cc0a700b50fc660e5d1808d8b87e65feb89428055495823b2dc317d6d9e50aa5ef7ab14076174ed32f56abe7d410e58ca40e92f8a31433d0d74ba7b130b1561f2b075fa11ead744d031f34d82f1a64d428f6cccb0a009be24b42937bf3e99a1ef1fabf0fa7335dab52918382abe756d3de229ee8223aca6d7c5de87047838e387d4e472481a4cfd4365256e13aacb518ce5300f18dcb5e0a28477a6fca08a74756ef6bd8933bacc98d02abc7ae60df7cb3e06d41abcc4bd313c543ddcdea2424d98ffc6dcaa83658aae11f5841ffd4f5df42368a0e815d2146a0fe138b223764b133d17cdb08d485e9f3dd2bf2b220d1f4565b02d7b9231d592130e4436849f49b1a70772244fc0c38da372a8c57fc80ad57828410a5a16ac6d14e093997fdd5b26e4cd4b248e0ea221715ae6e112e1b68b09f795540e31b1231244bc922207b906c4f42b5302dd7474286b653b4d1bb657134bab117d6c349fa0f121c2f8dac9cdcef510c1c28545eae0ab163db6cc84ca182feb858c10153d0136f00a01c9c7d0bed892715dd85c4e73627c3a2ef0f43710dfccacffd1d9f118c9fb1a83b2eb328b8da3e955f027d95294038184f7b895d77532c7570cb86fd6b37a5a66659cf1e330db3930f302838706050c0dcd91d532d49c89d144e9a7f864026ec99f50acc02bd5f11ee88495ee8991ec4723b189f84e03d992fd718b5173ea1b033ab7d3568dc4656648fb54d28d3119b0f293a930a772c394f45ee66838f17b73a94eca27033f9d5c2ae22eb813386905dc024673850a087958eed191d04d05798bcf909eff2deb2a0009d223323b290e3d6f71b2797a2bc2590d54294a5992d629336518514032614a04847c3fad8a7d1cfc2f86765b48cf58acf892f68b691fbece38100e6a71487ef5c4ae934f1ba03b4b26a1967f70ef1c697202e4eb22a3a95ab3b7b524f0241ab4d2adf3ee5e3f2974d0bfe4419ef0ab11039ffc26339570e74d260c4d5a16f22cb4f60b03253487f5e46c47836ce29460728086a615f78d631d89a06790928455889f58adc3d0a3a84ceb2ba9cdb00a403080e6567873b985fd59fd9dec71e375013c12c51cb67d599198f36f58fdaf897e85dfe6f9896cf6d35a84cfdc6834dd9447a2a10e1ffa9fa8edfef1db9e8b4a245b211de49e04b7e88977b4e1ac9285f43526f2452181ee0f80efeb1f6b2533b656519ae45652ccefca81c17714476b497e5d8e9fdf6c9f504c7a7fa7afa36df5f4f8da5b4b973b1618fc8d2d43e866b235e5420551d1659e5bd545fb78a3e17d9cbbc8e842f3fe6be07b892453ffd689d5188f26f9e4c545ba0b3132af12a03bce6914015d026d3d7df661c1e6384bbb50dae24abfa78079a2b1ac41c44c7d82a59183f293f12011e781d3cdca2f791afa5b55a9f2d6139587bfd74bfc54ce91e642847a33b48c1b366fd8f08f520b79ad5113a0273735aee71ceae361a97547fc09b22fbe4e4ae4ae13e52d65e0971341aab368d1e917c8f5f2ac57ac119f981b51b7c99ff2be3e16935b7c73e28fb58d332e6f2c36281228c479c4d6095cf15b14baeb0769191dfc649a70471a25d45d4433797a5b8ba31ff567e60ec4d759d99244d0fb5dfef7c2896809938ddde0d2015a4c5ce5ef6cdb5752da1c2a33e5bc78b6b7c6a5af892f0792c28560a357720da3cee3833bbeda8e98e6a8cccc6535831cfc28bc8557b4181a3978bd90eabb34b99eb7e55d9263e6790ca34561d8c87ec4e12b4a38df524318db00a9b5bbde6f5a8644a818a88e91b521d716fa9f95bf70b109b9905bfca926fd42ecb9114c039790abb0392a41ee4c190536a89ae6194befc2dc4bcf7562bcb84f65c99b69612c0511552f53436b6c489204d3881e1f67e0fba3a061165d2955c2e2e12c440d31556250a8a5cc04ee5e09b1d627c14e08bce1a92df7f6475db92a3ee57e4c16c3ae677c44237122818ad457a29595ab528744707f3ab7ccf3d20bd94047e013e647802a7af14cfc7c11441ea6e9b9f960fe69d03911ad2cf3a8f633e0d647c71dc7e188c92e75353fc953d6a30dd0040c39d4355b71524f1a4872fb1ecab22c8293b54bb22a80e1e3d4c886d2988adec26f041dd0565cfa9edfe5ad9aa7da1d3b8f68fda9e9df9dbe98148120af6ff30e6400deca6dc9593dbf06c856d0d582503e7ffa185f87c6e7ac58184bb80b4a1c0c18d669e23f9791365fe807356a5763ea418c39d94311759b29b14324fb6f3104359ae66532779b825f92b7c9ea2ba43ba7de04eaef7a86192bc93e17286f1b6e0a01c33c796ebed8f17692eb9237173a051c14e4869afda2643bb98c9ac4ea94c6bdc1401c80190df6abe988d2f0b2d80cc7bc8362ba25c6e5df4370a43e156aebd6aaf856b3f64d5fefc622d078faed40b760a361966a4765adb809dbcd74b7a41faffad3a64823860e5656874133c7f8a46b5a3ac591906359aa4f171ef6bb2ea6b5f24cfe25c2fc7c1973bd5d3bb5f197002c5ca1bccffb570f0265f5cd949c7386d961ac9c5e18b5d1d6030d8bf4a48c10f12dcdb11924b02b8ab5e91f425ca62bbe42b80c6b6dde3160ebbd55803966716734327058e29bd39874f2eac199067fdbbe8c372c5a688d3615e2b65f4937b67d6a26c64cc2a9e5379cc00925c678f174f538915f912e85b7014c064a73bcc7ddd38e1a9627ffddb4bfd6da764fdbfb45048c9495ab1a4cac5642f6c9ffbe97d33cb26964a23719620df3d85dcfc392c4502759fb31a6a797e99e51e94cf9bc79ac15de4e5cf7a05aeb88a8ab4c3b6f9c52b99794503f2c49cd7e230a67df7403e552523249f29d257b35c0c7712053c3d9eb583a1a7473d7f296d25a66566e4ba8b08de2a31b082e40c8e5b1e93985b324dded3f52511744e7e99f4e3ffd99d8ae17bb5122b37f637c5525558eab18a378f5e2cb56fa003ed3af8d139d16ec4b2ea79c415b0ba4d750ca2cdf653582ee3b65a9825fb9b123593e36e645232163cabda515b959ed0a1419e9894f6c677ac200fd11babe3503ec7bfa319f1b9559d94a6f82945c9ca8667621a5d28920949a1da644cbdb58b84742e9d65e7f2027b99fba4dec46f642bd17e88fa109143b26ba7fe285c89add0b74a369f3d381ad633bfb4f72e1822ff96aaf9a73b3c59a6e457cf40e17c1198c64737037f52d9b3118daa3fa5cd3e3c7738e3b3743c595893289974a4aa0d6bf1446e70964823a7d5cee67b9b25b7125d9ac5d1d61f2a6947c3deec6deb575e2fc5cec60df26de3c0545e5b79156dd6af33a78552d1ee9994cc8501b7dc5fe7a22eadaf201a92e06ef03be705a8bdb4db65392d3628c7cbf44cccac292c93cb5a407a7a5a0d5ac9fd95b0033d6eb719d3f14609190dd40d5aa1b983cd4c4e278cc8a1e7d5fbb0d39060d6cdce8de6a17e2dab973a7fa594205e17edab6514372eb51e03b0ced6402fac0efd3af49fb8214a505cc9f5f0ea5308d7fe6dec369ba154", + "9f522375925222a04f5c95ee14b6386412025903ecad0bc3ab78afe1145136b3a3592835ab4ad6faa66be9", + "d1ba82b3ced3e9817642aaacedf482e79bedd0560ef2754215ee792514bbf8e6", + "bb21211f342379370f2642d3", + "1a6683805d3f478ca1c1512b9846468378f83be27393db63956e151ec408368b47334afe610249182f54c4d0a01b704db2aa90a9755b8feb67ef9301f0715d7d6bdfa5cc4497cef1142a43eeb42f7c413e8f489af30d742a706d05a40a0c4a5991f9e2cc5d9fbca6ad3767682e20c146ac35aef38dfb2a77388b738fa022158d5c802e5f0761096bb45b50815ebf09172759521b5c5d459703ebe9ff669ee4d14a86e5d0650b597f4a082ba0aef366a924ea378b91c3262d99f48189eea19c76c0f644079f8415c11033cf24d30d6c149ab13ca5c29deafdc816e457257361c1af4b915da312d2e6c7fc712faa27be3e67c893f9005a0e2c28369991c1dab22d38961d1abd6d94c4d549cf491aa1f8d522be3ffa6d214825a5fde3c94c4e35c29b8d05b2627eb12c9d94f450a85eec6bc963a279a37c2344ca36eb604c4bd11c2bf2ecc0dc16c2c365bbbcad3541bd54f8d0bdbb3ca4a087b62fc19fcc1c13984eab807d2a6a1386643d90d412d027bcd0a638765498cdbb1f4cc1b91b69bd241eab3645f225ece85a56e5008d6094041f8cca6b9a0ae3b15585de6fe0695d79d348f8619431ece40e736957a7627224fe92bbe30df5124f476d97e36b5b08b3787e8e00f0c10013068eb156f82f3494a35d6edd5f7048d1e91954f1013ede22eca8b4ba41699ee08decedde87139180a567c6d169b672af0f12aa09ce20e9cac4e78b8067d31ba4f63606c00d1d787b868cf7643fbb170f8074667c9f7584d36af80b4e6557724013618c28d0dd40bfe9d4b25761b3c99558af528c2d290d04b09821bd7f992c044dd61dde9395bd0c9ddec6d0bf6e044ddf0b4b2d6753f5acf2e9c904caa4e9f310578527b85e6738803758da646919989f735b09c9a5744e63fed2c3982e59fd29d2baeb9771316bf8d29213a4956b66c78d5654436ffdd82d0d572530fd09507b988d13fd743f35333237681f8abbb301a8ea870159f802a57760659094d0e4902036c5a62c563f1fc86c4238e1ce89f5176ecaea194ca112fbdeefbef4fa7c203678cafd34486fe58b2af04f84a1cb620c6e123bfd96301e0a5e5e5abcc95d28b852d0cee2f51faa73e42f22fc335f50de4c3812ee14038633a195083f3944284c1086c34995832c3cceb7d385b4ce86af10685c16005495121105272d1d739c584a07ec7801c3667bb280987a8aa41f9537e9d1812a5dba5b385a0b71d2e9573c6f3e9ebf0bf7267528946a6aa6f43efce908d32525cdc3b825bb11c7239f1de412704d24c17455b9382fd6a873180f0d5d44dc449320973d5cd0d4e67e83946b6ef47e5fc3dabadd80751f1421404e56b1bce748b7bde63c6975ca81f3eaf52586a55242c9745dee3f7c796d4508e818eaa4fa50490c1a79624561b98d2e1139a328806414c905372356a22393ea0da51c83957029edd8c2dfcf46d9564264d74c1c0497034ec018b1dd4c14acebc34b6d2c1a616937c37b8b4a0ee5dcdf787a0de1173798ab929b72e0fa83a6c9b9a99d8024328d9c236a8f57550a4f83e8071eac76adb55939f85f5b5f514174b670a3e8dc2b54656f6201940a81fe4953d2680ae4ec58635ba74d15efab3e06dca6ac269711ef2d4dd49f731e24a92a3b935ebbb3fe8d001cd4062669ae4baa62c2947033afcfaca227d88a11769f87456d5cd1bb6606891e71d63aff9cd5a7d23263a78768ac2ac54ece1441fd37d096cd27e916e68891137fc3cca427febd1947cfb4d7ccfad75b2ec5e809c132111eadf25a73043d68333139bd2435de9941bbc61c5c509897cfc19a21645019eaaccb6d06371e3d0570c09c7556e41a727e44d9bd672fccd1f89cc7d58761c16df8fb75fb8a1dde2caaf088f02dad91b6489114398740e6798f3ea8c7b0cfd974e160a0106d703d9589ab09aae79108e3212f19cb950ea9c0798a1532bc2a065d5900a12054395c0545b0878ac0b1d461f553dccfc2a22bf254ced88dcb538e3889549960b77ba6237ab1458e158f4f46606372e797ec9d9ecc6534acaa1218e7540eef11030bb9c3e5a7816f3b33a590d970619bdd2dc04d5c6f4ec38b7cb4d525234b836eab57f65dd045e02367eede9049e219b8712b8d6fe178080c5f77b821f1a475259ae571a5578eb3b48863162d45486f71a28ecbcedb35b320e5b6401f9e7870aa5418449bf47502626e1f42abf481b48d5a6819c640bfdb64f873d583fc4e40187940a6c3373ea7b47195270a8657898f55568985018abcea9bce1c155d95b426f91a734b2a14ec2c7ca2011a4d30019fd9b3ef63a804e9c30c3de2651c4213e90285a4ba100b31ee402e8a7f23cf9d4dba003bbf982526bc63be5af102dca34e7d362d6fbf6f56046160d7af33b364f2a86074d1c0fdd54aae89b19480efde2a9caef9de7c0f9491e1cf43a48752cef405a0ff16b0fc67bbe433a3c1b9661406c3726092efdc076febd60c436476f24dab1b0b8f8893986d951ed72282990e8b1526f4dcf539b22c01c6a7eb5577cd540a16a81296ebeeb7ddda72e60fcf2840c5b42c5cba30eaea5402f267d1d04bc80da5ef0dd2bf3c7a2be986507617c9bdbc96c6273a0c9e586a0c48c98b4552113149c6f79557fc8ace0b1a512fec3aa09ef191f95c2163113ac5cdd940f0c2120509bc53c3ea493c54703effb902ef752c830c61e85636ca95429bf16937bf6786b3eae1b277bf08dcd69f521a0078d633beb33c9aa0cb33b238e1021ca67df122a403a3698452740bdcac81d22ccfe4ab5f835d1961708d1faf6d40f115f16c6094ea37a7ff15e0534f62c19a6f4ded0967be337cdbdd2a7c58ba16ba2e4c3686e9d075c6fa7d29b2a0335ab4940d2a95c4500295f4db84ae65e46c54b7300909cc5411c725a31fd962d239aa0e2007c285586b4c778e2ac7afec42cd8409a63d7cd9c677031f43f4aaf04258dcf1270c02a4764177aa66db2d8f860eeb1fd06d0b27587537410bcb641f90aaa7bfc6f12bd143f66e7c933a0f3ce6b5048913e1b2d79eaa6c19e7255d5eabd24d5f12426339541a22d600cdfd1781a1a3894740887840aa82e5a461fc324285b0223ac9b95c3eb88160353f168b3d4ae8a2e87b7715b5fd2671f66e6eaaf9365b3d9e3acd9a749faefba6009783771177aa4dc91f72fed7a5bf6b1b7738b84ac0a07b4a5a3f0a9134a39e1e7e3e2f9a92d5644295f31c5a356092bf07c709b4c34305ebf50e857a4f593dd1cce0439d3fd125c1ede1a48f583bbbe0eec7058345129ef78868a96f8a76ba7fbfd1c5eebf75f3e0eeeb9db87474b96f321b87fffc02433513fb467fb74e2fc8feb498d51530c753e9a173e95e0edc5ba9802641a45db281b2e2d87d409057b4fb1925e834e90fa5619ae3a9237d5b104e7ac67c2bdc31001eedb4ec7064b2f72e0379bf8780f67ec4b195db014a2d130e77b1778efe3dc703f1310a566a6d3b5c9b12b1d4e25815493ed1510a516a31ced3b64ca49a783ad63ea71a57290727fa31386d2fbfe41f12d36a618c6c28d8f10405eb3e0a33e8ac2e4133ba75c688c8c9a2bb33c8fa032eaf3ea0d2c27bf89269c4aec55f8232b292e7fa9fc24527184f19187d9d8a3f52335e2feb5dc6d997b9b773a79a31db832b752e5738963ee5d61a1b426414975693f986e165e52d46cb059fdd4f48f008e96d4c1a48306b7c002fd0c861721656074cf11173ca65cbdb694c79f58a3f3365e872b24670b691682c10261eb1ffb2b65da031d070e31542f49704b77970a78bcfb4c4ca517b4c966a4e8e27664704f633e90cb7d7917dc1d3a8b8b7fcf59ea3a8a81305761923cb182cebdd59255803a14ca8a75fd007670d79a25eacda1138d67a0fd1da981529dbf182fc4d7a700ba498e4476a1d415381c9e2ffa3bd46201cf2e454c4aaedbbe3893bb4121a6de02cbecc1f319155eb8c99d1030103bb6194bee51e74fa01f28dbe16092955b9599d5c1f1c3f356e26d48fcad7c4cdf0eef25c25273dd62171785c9d2c5a01b1f3da9b4786b1b399d890e2049b73c12de2fb7177f2bc3d9c645398111ebcfd83b73119897bb994f998f4a6fae1b3d6361e171059dba0bf9de9af7a5a1b21641790baf82a36278945d649cf5d310f3792fdefe8c58986a48118fd94647b786e47733ae703701e18992bc1b143b1da6110a98030bb9895c14d7b8eae1a155a550e219a5b6301b6d26d7956ecfe4c7023eec1ff62538b3606ebc7906a1243bf8357f593b6cfff32e3fc6b51f6a0ffaecb658d526f7a5e9faa6294e4808b779f4832318cc184e49e8957b72bea0d67366e040cf76a85889fc6b04e84afab0d02947d0d83e0de19f12966fa8372f6e82ff402bd7a69195eb1a7864a3375aa9e23736fa4d4b0224647e416474c01f72b7d4af240d7f43395b5b04c8fdef1165ce1d56ee8ba0e350e6ada893e0594facbfb5f0d8829ae203929525951584c21371b86deb0f76ef5daad5e847135a6488b35ea33e3a165fea502975d6421d4567a229bf3ce94605885453610eb9c82f9ea743bee9e14776bc3076a29af268cc72d9092a492d9ff08c345dc2eb2f8003b561d9912ae1198c58107f8b37a08b35075af9863110e6770425e9d59c2dfff9d9942c8bc3bf7904c2a952bcd573706caf1ee14420564ffc433c0f5871c4bda916f2530ac75819ade49fa1de21edacbbf6b7075dba21a84989411c566b7c356b81803c7215ab0f326a6b8910dbc62c1bee3af51f105fcdebc0dbc56a50b22cf81eda563bf8c2eff98b476e8", + }, + { + "99444e82c6c4c47070b164f298ffdf6955ee5bcb3070b9aa95ce658db4db084d2056cfe61a93568b44ba7ddcba5d450f4ba0da7b119425a6628b3416663c638692326cacc5c237097db5e537122b465dcb21d8dcb5fe831789b72deff3907685c2e23187a56990221e755930a09f8d6cc065487563cb8cec82b9dc754952fa0b342c92d99522fbb39854e338f470a4b4d5ed2a39b8b6253b7001b0b953abc588d757616c7a5d1f12b1024aa572ef5a47dc8480943aa6cfaaa78064fb2b29830280e46efa418d0cf38f57980146f2482276c9b6b16f865b1606bf1131e894336979a163ba2e70adbdc746be0d38062fafcfe5603e6bbb55717b66a263fbd5cc7476302ea4a0dc6167221f745a26a309f5886934f4258965a0ef0803eaddd05e54008df8a0695a078b797be59f1eef95a658c99a7d52001d4108212ce5f18a39f1173291808c980b0513f1a531e03ad7380372b65572d3967af4c25fe54d99d664cb67e557fff05c12e10143c13b1bfa3e8db093ff832a7978ecd85d3971349e3c9b83939b73f0ad55f1f1162d0c106b99c0ff98442911bc15e9194f5b4ded97e9702b84e31b31380c224f392e5fa5c720a45f64cd7020e25a3931b5871e4c708e77f4729225aa9f48f9d876597d3e79219dddee0efdd16836021dbd21692dafe121217347cc128fc5eb051e6843978ae17478ef714957a84c74656ddd931cbeb43e32fb0a448acf2f90ee98d38522b4fa9aa36be4fa13306e799d4c0cb90ac0f73cbc018146d1b0d6bf48aa446a5e3e0502aae9fcbd196b36b6b7426fc10367febf687f05392fdcf878863de2e47be7e625d0e3e3e94e199f055c0fc65f76c41ede43231873ff10eb854dcd6ac9b550ee8533d16f81eb0e86471d4da69311c47255e78ac8e79ab36ce880d6b135279fbb5a712adc5c3862a356af49e9c10d5b16f4e5dedb80914868111e194745b802a0292c7c8564de28ba8e71a44f7eff6573e5434e65d496cde5b5e62cfa9e2e9ac85a164dbff5767983e71dd2661d37d9027a27674ebe3433731a606db88e0880e91ecea8134421962b3f68915c9f6a5e1992c56750f99bc313fb30cb89384c72571a1a6a5e3c01897b691bd70985352217fa8a67f3252a06205bd1a9931d1cea3736559572561fedbf3ac4c8bff9ebd7f3753ee69a69ecbac4be6357db7f4213b697a828edc716ac01da75c1d46098c7d5d6ae6f3f9a2903588c5b340c9d47c234efea21b700cdb8db4279afa2117677e824e627bf0f2b179c864ba823926a57825478395545f130886bdf2a7c55a2647a888c3998b750343d9cdc602e46b7b09a2fe9ef74db1ffc46fe27c254c927ce51b307e96a571da7f3f907223fbed2daedbcc96197e95edde7859f3b4ec6099f791089e368a68a5ba0917ddf4f50b93c0c839ea36cfc8053811f8fcfe6986e5fa9f743119ecd6c3e5fea1dae3ad7eb465a89e9c68569190688a8d56e4143ceea3b11fbd9de67173d5134ec8b0bd7d16560ba2be52345ebacedc01a2e03e8183ef91317d87b2e15cc6301586ed829d438e4ff1d074408b332c8ce60ccb6790ab08c228807509dd4b39f2c227755f6b039f5cd413ad6f46c9ec2cc6a79457529d297b1d9e74ead9bedd9bd652fb31568a8e2a9e2b89e4e57601bc1d960360232cdb30cb502b950ef930d54c2c0692a684cd44b0472995bd2b41dac1553ae47216253d6640d2653a033a862f3118c5b5d60a662d240bda5f4da51092eff514f61a425c5b14b19517ec1b371d240cc30a0739273b34f18a72a69b1586802a7caa6cc8f5817a8a995695d063c9dd26c3d45feb0f84dc8a0773151cf9a537664f942f351599cfbee0558f441f5c7ad320cabe305f9aba570ddf6407749b6db42f9ce94526a8f4170e735b1dcfc5f0e090af10e039db3747aa9b4f1f26acc34639ac8b60557f7753e2c261a29852932901a4093b7f307319cbb228e26eec289898b3f8ee236032163293b8caf64be3f7ffed236f1da688d958a1bbb79dd45026884904bbb936c1ebca7aa6b0c68aa8b667dc1575729e4ecb4ffa82ddced2f4571bf902c52fc4a0ea3f47aaf5c243ac2a1fc19f825fde5d9fc8d06d97a351eebf4ae1846aa62554d57cffdb3f3377695338f8d598d723289ff3962796e8065632e7da9d8dffe2636cd23eac15a60568eefe3e77c561906555268cfc1e9342417b1cdf090cc16c79939b15a9311b0210094087dea22833f74eb0e35d44259ecf327dc84f3f24b8c2bfce7be0d97e00d2be88a150a0d557ff963b4cda60eb99935951d288768b4b2649b717133517f5e3909744417c9c3102c77ddd285976cba2c89e2b4f297665632d7c8652847c4625038a6670169772de0550066ec6c2018f503cce79a333ecc0a0632334df6959d2e3b052fa47c5c84d15ceabdc80bd6be0ea2a5a8d5e374e0e9a613369ca8d4cae3d9f98755560b27b2f6e47b01ba390f5ddeb732c22b12abd225e26ecdb639b08f3237e488430b3b39f0b63aaaef4907cd003a8f2b4c3bfd721d6c3fd3a5f062d72746606a529ba34251ddec4026f40d262e9d527ad84fecf5bb2cc8601c2a38437098aec2335104842ff1c455e5d17c136ece8d461d7a3bd9a60339c22d71059e09b3603c0565c0345684893b56054ec4d3db0bf15546cafb4a03bd7775c3157e7676bb7bdb7baf3100396c563eba1a12952503eb6ccde6b6d0a42d456743c4ddb97f5994fa08c5fa41315080eb6b928090956bfc6252b232f6e0785d233c3adcbb9370b59c35b0dd66005d516befd1fc843df8e68fab19858b91e2aecd1c8a88b0fa3d4c2fed2995ee87e65976b755fbf44ee183f9fa08848bea325807bce0b7b61e03e50b2c7af9b360532a17a8250cf6068fef0198738c82a5e58961c54017e343fcef7076e823d63b4deee472fada7989ca7a213d06a4e3eb2d44b16e5c94b1588321cf6c45a5a792938b058d667e1730f8386dfedc50ea0a959b78f12f2949b34b181f90bec622515227dfb8a5f6e89d2e559c0ba686153b218d2c50b67503018e22914ce9b49d3bdb7cf38172db1ea130baacd640c111614e3db204b3b50641d8978dc14b2afc27a7efa819cac6bafa8166d1c127e2237520d57ad38a80146217a12363cb1f8a720e328cd8f846d379ada43bd4865e4aa633c479bd448d205b2e43befa63486c717af84a733f1dececc127c047850aeeb8ce677612f5966e23d92c1d3c758aaeef82f862c1154fadd6766e1dfc780bb447732a5968c0c78b9af4a9d669338458b57cbb77910a24678092857c0b903152035bab6b1c73f7b667a08cd0d31128888de3ff1fed24866eb60beac19c1b139f77bf0b9332024999a2d56975e691fd7475fd93622119d0d725bb99c1d6ac604d6b6be09d6d29360fff9f84e5318259a67fec08a006d9772b9410ec6abd4cb828b898c625c2fc35c19cb9a6cd3b0073baec7b5af254d21de8e209539f560bc80ea38e33658a68262622cdf35dcd6618b9e272ac3644c91f27d372c6297d8e37201c6a86a7d3accdf579c15246276a0009ddac4021755f4848d10f714e9da86eba13f461e6a12edb1aef2d6117986120750d609682bfdfcb90ee3cde8be54d45f841a6dee2d5b9fdc4e65edb7ebffcf3cc5c8a4e1c6919ac57568be23bd8283319ce11fca3caf968b057432f163f22e29cac30b8154a646ca0ef4fdbc7770ee1451fdde9e9d651992d94c843d4eb2570975528ad9f8c193f7c681a43df28242547010e30d75fca04f39247c77d6c3715c25fc261ecdba16844bbab23e4d0482bd1565ca9b526ada9b8f5703661a84b23070d85f3e8265b2ce10750c5d798f1a8ef4d51a473ff4d2bf4be615566ac796db9fe61a224bcce05c31ecb9ab7bc43a609944a7c9398a7875609ddbcb556296f548a117847df7d0afe48a5b504e85b0d7ca589103d3197933a744fefca795e1e036f964a4f14554d5cfa0261e25d6e5e02f86e402906d3637a2352459cb1639f20faea6f0e3fbc6a39becb1b1b3a791e32e85e5bee31be685410adf0c11190e20b7a5119b90e83f2cc4f0de8898606bb6e64165c95d4c5eae472daa6836a888ee4d9a79de72b8fb47a9c9c0323a2be9106d4ee9ba8b3858c256032a9caba37af94df4c7b0adc2f8478cb879b6d452d73191b0fc1ce944df3f4809cbf3ad46eceb3ba4abd9679410f45c8aab20dd72626f235e7c0c934b4beb4507def24ebbdd7a507943c81d54bc69df578aacd9ed0bfd3b7809dec345ba084d88fa9c34d80685415a4d5eaef9b88e51432b2b2037186baf123a6257e47aa56d6531923d38178e8264dd315e95bfafd8dacaf901e354b0f58f135d638df2c0f32453205c7aaeeedf8c102e11cfddea9a98d3ac7c385d71b760cf2afeb1ebe1d64f0222b9b101893d11a74ed175297c1dfd188a2565fbecc6bb07b56ce3973322a965dc5a675587890cc65a71efc68fdcdf1a023505ef0bc0e6b12dca5860fcf1c6c94c2e2ec3a72b8a019d69c82d36a73738dc3d17d7fdfe992bc8e18cb5d3437f1f619dd318b95d1a56b6d273ed79ab2655d83e2dd63cb6f1f5987eab6bb21a7b13b84e2c619b36b842192c3f82c755d8af840675b0bd67a655d641b1886c3c9c147ac87615ff3e58085a879b21dd63c1616a3712279ec87d650a2eed665b797ad631f0ec312f343979cbc49b99385cfa92841cba12d52777df565545a1deb07800a15431c0987b4a543fd5ed6832e80ab6f4b4d9c9ec419932a6ded4759f5c7630a0b80139234b8d53117acb4452c60b477ad50157169a89bd796e2308baa9395b513a94747611c7978c82dbdf48d716c3ac181ac2b2a4702c02a324bd4c5e089d989d020ebec9963b5c721a95492158f54973b7fc1828181acb3cc8078ac095136d97221c60b847bd2a52427383ab68cd1f10b92738c13203fdfa0b78baa09c1837be2498667c459", + "0ce980442336d0f427db869a6799baa6785b5e030567c588e2a7d2680e96c11b7f415fa27730969e0b1c3973b5f3192d4e773153def6dcc09dae29ac44eac7c42c2666a356fd4262197bd5cf6eeefcbd662d104423ec05c19a2e6ddf1834a3445a09e8b1062a1320a5e8ef13d6ebd03c19e1813ccd86fd68b46a", + "1ac8a509db7bf4acb80d8d394a5abf47c273b2093f50f35049e749f3e16cb0fb", + "47cc9eea11f9f3f9aafa23bd", + "088888333340b3a057b05491fb2402301c8654948aa6d5ee1ec75eb045858c22056fef0873d6675f897126052923a47a30675b266ffb6181cbd29ce2da3720e36a227e4c6e53328d789913c0d9cd149a6e49293996b1be7d6c513b24d876445a950e723ade3efc36907c840b9b8cfdb1503811b4044d931a0009b381fd60a5bf1e73d16348cb57eea672709875fb9d56908dbc729d5d7d322a17a41d0f62c9af9a013ab1e19fb7b6c6e7fa0c0b18bec5e3d3e92546c77e3753193389e5fcdb6a6a1896cba461343e71ef7a156b136b27ae6f45be9368301cfade203e9b53824d70f07de9abfea1968b8ff8489b9804422ba05ac3c3adf23ba0848817fa51febab5e9b5500100310479e710b663f064c1ef101c9a5320367cd8bc6e52081a32f070e7d3fd6f4210cdffdb9fcab1de4af5b06a7c6d191dcc12b25b3053e58952bfd1f723afbf570796946c1df9579ad14ea9c8c30389c1de4d1e845c764fec5eb8faaf4c558c5eb5113018c6a21ef653ac7d7f5b6c7e1a8fd48c6f423e9913436202da176a86731287db7331db055508acc94168888040ee37b3c119c8a0d88360241d68745825fe480324a944d56e7cd0375d4d33a5fe7a3863c2aaa899b2d24f65b70bd804039116fe959c32442c9f0b5470463523eb4336985b71125fe5235cbca0c88a6f92416d038e144de5ff8ef6ca749a9e239f02db505bff8e16fad1cba8b1500445f067a674142b6413e9dc0f432242d8301879bfc11fa86d1ac9992ab12319fea8b703e10a13bfd4b017496222be26b56af3ef67610f904f0ca8a3e7cc249ca8122735a542b289f13922904ff23dd197f8883c7ac77150d7331316ef94e0cf13b6ad95070420513599100b0a6d117640b781c622ed7ef7ead29476b3c835bd9dbda2203930bcee7ac01c3b9c89da405ee436ee652ddcc3e96c7f1a94e200eec9a4a226f3cf7ae5725068916e73b61149497d11dd85157f895669f51978d1bea8fd2afabb18d082365daba2682ef623109988b7d0e27ae57bc14d86603f93b5ac040ae52d8db404ee27e6c34cd4246f40eccf9d3f8637a4615a4006918b01d34709bcbebd02ea72958d54db3e87d69e6d783de2f1841029d6975eb11f9b076c247108797d5368c656f888092b82aa81aa26e164e038b359bd68801c22fc107e4083a9d85fc254b002ece9d4545310b0cb22ec1af04a7ee31d210ede4b605dbdbcb70e4301989422ef46edf63f9c96de9cb3f70638b51df5c0abe79b7af8cd97148f2b7bf394bea0f7bbbf6925f83b901b87a6079f2c3b38a98fe1a86dc7f48bf97553701834f557451df4b41e7db984a34432823585380b45c1b84813d6aa21107cae252923fb4673cf660a541e65610ac0127d238285f53bf329b62169f3e42d5efe268dea62578e97da59a58a1314a1bd46cf7a7cae772814130b51411082e30062fdbda1c9e14d6b2bfff89d0379d32461f3b8e833b105f6a89532ae748b5fb43f283fc86450404e8befb8442b65e338aa0408303a70e9c27a1d923d9f2a06e7c6159c50bf2e3ba5b035420ecbd9d0b5fae478eb1ab72fa714f99d00188bb10e60380fa3a3a318c2d359ea3805c2fa0dde17ee52a504f70d6b466bd38d1dd4196be336a9ab4a9e573d1bc6404018a119f688c1dc2a8ed1433e8a8ebf455ce3808c245f0220f0c12d28c771757763bd111ab829294e2429a6f7a59858dfa1fe0b806e986d40aaff934589fefd75ab91097a979f26bc9352267efb2d82c4738e4e6c451b0d5adc398f546c646b9e6b8fc84e91651a1252d5b805a857c7798d102d1e6f90749252bc53588348ecec0897c79f514442fe3b27608c95d0cba999a7e0fbd7f601689b4dc63ecb9ff553ff12eca3e9b26e3eccbde28770bb6aff7c864ad6be77fc09f81f90df6efd0c4025d0916ab5197ab846dfe6121c462761d9cc87112ebbca197b0a222fd34a15b824b7eda06a56a6ffda760fae5f0b527e2798f01e205a3f47947a4bd190f6abfb1dab2e3a53131af95d593bb57e4f4af506440cf20636d9fccc449d9565bf43dec8b6877337ca5a43900c1dc600c877b290342914e909aad8c5f0755bc25652781535c057ed5ab2ff8ad4322a8edf3fc1b5311dae6361a7395919725f4cd87ce0ccba37c64eb3618f9c5a53644ada569b90cd07184fc048f1b589eb29852909e75e7116ef96a268ea85c2bd257cefdde9222d7eda875a2a3abcd3a02a1fb470ba967b20beb54914b8b0c6ed464ba978088d7f8b30d098966b0bde82a8f1210f5d0c3405c9bc73f703134d0b6ee13326f65fa0b8154f4e30808997d4afbd060285942ca1dededc3410a099881492b5730ab7bdc2a4cfd0068f67766d60b5d4945f121459d2083334ac878d067bef644b9ee427bbbd6c9351d7b019bfc051c05ac301ff3792a1c687546dbf6a07a0cf56717374bfa1191c22b7753f6ae02392f8aac9207d1ad0fcd57c5c8b35817574b7dd90a00cab75f508f8a234eabce6618305f94746cb6a8573389d336bb67e1b0d2b6e9bd3959ef344e1eb245b522c35222813b8c6e82df48987436b5592025e9786ca63b6d1a064223bfacf59ada713c2a3116611393aa8446ea79b3cb21e96d13b659ada2d6524686fd46ec66c1b4d8f5ae7831840c9e3db64d528f83a1cef1e0a586a783f8306cb261ed9c2905493e74d35883fcb39cfc5745c282104cc3ce804999231d13e1bc6f2c022f05999fb57575bbdaf00d7a990e17dd2f8b9dfe66a637b42f58ee49ba60f2dd9718d09d7025b6061b2087bc35f0a8c884f5b67a5e18c2b4e857d3b48b79dc7cab6b72f572d22987566238a7153ed6264578424f1ce091fd05b7f14563fe12c76104d3373367af3ed3aca694a21127b5912c0b7eb1ddf9d4a9f03f660d49f7a7f0fb42797fd112414c3eba2b75a04282dcb9645191fd3dbe376e7f60ab40bb7ca1e991053a1912854a68d7dcf854201d1f2c26c6cfaea32e29d80847e6288274713d2ca973b91dab97884326b280c6f06c65b8fd25d314be29139961051a1d8699467d02b67991baabc9b05629660c243ca3b0477362d5e6bf9eaa33beeb52cf399846c77fcae11a89cbfdb2058e443ddd44fe202a3ba5c2efce937d78b9639781b8b2b99077b433189cf3b0733ed73b59bb194c9a98c5aa0cba6e71d1c5522f193defb9e31fd2cd60f22bedaf7008c2fb0b55a8dd52731dfa2bc69b40f835ae95db040cda6a4a1588a5ba4769edfeb7369c1e9a3b1cda293255b4942881d94d771b7b82460004875e71be64c582f2830c5e80dd6de421a311c5852f4912bea1451b0328d01c7029867cf9af99284cdfc1e1f0aa0d8c19ba9bc035dc270b45724247137da5d3fc4daa09e7014fe1439889968eb23fe124f067825d5f7b304f17a983580e009e0e51630ea0006dbc74a30b512cd9eb4d0b315a0ffdbfb581609ea9661b0007cd234ce43c17c92269a7519bfe99c2ca94b5cd3e7654946e67b37d4270a369266db6804336a446022677a024d44cc02cb04108292dc12f790578a0d61cb6fada738902eed3afdf1850bafcb279f18b5798d7466752c6368a594533baff5dbd17974638ecc41753b184845206c79bbab84dfef148eb7f1390f8cb7346a14c88caf540c241cad11ce8869be3bec85d029ef490fc5edacf94fa962be39a33c8efefcbb6b43960d5bc35f8fb72038af3801466aed141b50e9ac7dcf1921f7a6abaf320ff02ac34bbfac265e05e27495e6e027e673a48a874e6f0c33827a050fa21c2efa789c1e3df2ecda95fc52ca7be35dbf17ff6c73f37cb236e5131542e002913d177ffb21ac450e2542e24b894650007c36c52d90f83731009a7c3239ccf11829cf0fb6510d9924e927f14d6a06f8dc772fc9b028a8bbd2d3388985f3e2609abbd08434c46642b97240c9380a831bbafdc5db77be63a1400cc9a4f7362a689b07a77162022c6ba7a1bb9f0446a0b6b460ebdd9111132694fa5f1b29da39be66c5179849ae9720b2da0a012d4bdfd1b18b8fbef0d5c32b92c351dcf2c599f069c3b53f622fc8e904f27584b2d97d43f779abcde6dc1413c0a677dd187b28cfbcf7fa6316f0967b53977432d45944ce8ebd2e265c0bf6b2870c75ae808fed52aa35421ef55667ecd6f9d279c9b91c9314bd9411bce267d6ad52b1d910b3e65147c3eb6021a0af98707408e66bb11ca5abf5e34b2bc85b144fd06ea56f5d7f8939fe0cfa4862e7f306de069cf85f4aa7aa97c6848594f5a6dbcc718d2af77497f4b9d5ffa217fc301127071e9bc9c2c9222ba90e286506e384f321e622f05d81c114953d0f7e9626b74f4a6bea8cfb86ceb4575e5cf4fb84e9efac8291d1f4153ad3cd9a34ce0ffcfbe30b6829c0f986a4f85d63b602ab99ff3934b1e0c46e55d56eb479b79ca0729beb59aed783e9a3ccd55db8d884733dbd93f9fd7a7209fb92fcc49826b2d4356ca676f01b0981637897b3d2f90f37bfd73b214a398a8e4e2f9e5abec01d8192ca690191255dd8304a2d95a69331288bce00385f462e942f4d694dc3560a263c8ac2b5cd1d2c63b90ec67c32eaf5bd947bd8ac730da9c09ebc6888b0b4f3bead157aa9d31c2802df8ff0e4d69b7abfed6f184bf35a16ffb5677ddfc4682322128932d57fe4c32f21e190e1147d8e673ae407b1dbbca31331310b299e9f3db08ebfd2dad3158562c2e47addcbcc831cef0194ac8ba9778d0103c2955c886d439967bf788eae688f2a7459b0ef3bd16808e8d768b8962a24588d918ceb2cd1cd611b504019f65216beca212f44600cb7fac77216b7645c49f18064a3acdc01399315084dc9ea151ee28534fb31628d190bc540ac6b6aba572ba51aee89544015e6fbca2b3c2330f2ac1f68849e99e1a1f7f523599eaee22720392ea52259e26f1101614d4edae481b3783af4e99082d75dcca549049290731bbadd1ec0a93789ad5c9afe8bae44e35b3e59e562362964", + }, + { + "0410d1f8bc890649c250a3819766f4496f339a6384e34acdd72b3a87266edd2a7eae223a372883f978277a108d6e59fca1f35f25d7a9f3aed42d35fa9b12241ac04754f76fd8f0e8ff6af88cd851887a45e89f1c9192ca66bfff605b128575d2ccc9ca3ba1ba23a0251b2cfd6db577b29d17ce2ea998946997f5c4a97a397c46024681a400a54425c071232d269adfc3b1adf15b4586c4dd7b8886f5c1023bc348bc674961ac6e221d914f432c2f06dddcf738227dfcfff88485ed45882809d0e57019461c88683919b87c45e78223c37a5be5f758e4f0dc6add22f2062bc2eb9bdc31b8649af17d526ec339f0e6fc6a41e26299c65276302f982235c3e5205ec1521625ec08a23e766577664b73d18d5533261c859c4cb4346feaf7540a56155c6c3a4874dc86ea42fd518d71221ac65541e2dadd2f8e129e7809f2835f07dfcc4128401dae2b5fac7ced1d9e07e3f348c6cd26f55b3893d4418557a18c366dcd5eadea0dd84ab95437d6f23eb9e5877fb2ad740ee507e2268c39c7186f34e5cee2d0dbba1a940f516a018f23e716a399c317a7a81f89cfabc296c432cba900ad79db67936f76e4d97874fc5f8a9ff84eb7a0f6d629c581ec5c451e27ef1ed468f93bfc68b2e0412a543d89dfdd812d9421236a4be9eb374531556c207340886c7b84d42d651557b952e0982f62c5c383e92dced21905174a5a836acdc3f2393e770d6cdc22c39575a42ea406f36889dc9558aeae5dc5f8b84862850b55bf4accccb6a8ef793d641d6b08235f70ad3b0605eab462afad1af80fa003645f4d302b03d81a7d167e9a8187bee0f76b1cfd7006b2d2b55fedad6e8db1d3ecfe031702dc327ff2b0197337d7542f42702cb276de852b3d72d9acff8a7feb8882028a5e340950e523c41cfa184b3d8878effe56742994e60240e58cbfd01541d39fa007a9f0ecccb409c6cc540354ccf35223677cb74e7ef7330bb60420f7d7bf97de6888cb343cd4fb0928fe5df5f1b018592ccfa7aac6dab57cded573b5950b94fd935f32cf332dd85b2b36501de6687612371dbcfdf77279d647ed8bdcf81fda8b7e0c5ab139330d64695d814fc6f761fd141dfb0c8f74e2d7616db3598d8de40b993fbdd272ca37db27b82aedb08bebc4a8e6d0385ab20fbc20c215ad50fab8e93975bcab3ff38667abb0545b3b3f20e325f01b80a32a3cc3ed51703d4b2826849ee22fddd5b544816599dca0d8fc84feed9f7e90caba53b70bc3f457eb1adb89fd0b67d2c0ab53264430c61d2c4a1b19ea99a9b453fc6b5ebf5fb5ab799134769c9b495c479c828bcc49a8f993c3127d5cbc31afb89c0e78fbc323755457ebf0f3344d3ad1cfc59d186e96ac31a9298e655b3d1df74b95f30fb868631053540388a13d597002f689708d35a2365e309bb96db8b1b94ea4c8060c2b165f7f19e72056409159371ac9c44f6bfaad9b9567094d18c29bbc8aa2c8b5b82735d20f55284fe68186004b4a4fb644fd52d9645b277c1dc238a764005c1d2791ef36e71786cd990ccee4571d9a9b1aec757e479cfa645e320bc33268e05af9cf90e0e616ae7f237c637a99fe15b4ea8a3232262d96855fa248920a28ec03f77ce4dd93925db60ec030a7be455ba9d08edbf6bb717b1a13c3ac1deb9821e21505c0a8971d5ea5dd8e4c9cd3a845a336209af191150ba5d9b8c2c450e3a765e8670d7f846b2461f971fdcd1942704f620a40f4204b99f9035bbd543f64b927cbc7a74f32cbb12c3caef955f169a45374e4479430e08d333c4a877baf41a27a0849ca3a157b6651295fa71ac94b6e3d30b5d160965e93d2a81b4d575cefd264399c9e4e17059f4064465b2d92c96ac27e3b221499b5e642d033992c236b905c072faa1e34495f9890bac6228330e4016c061605bbfc478c30e1b8534c49af54785972aca2d144328b0a540e3b3810a73e26acfa22f48652d53ea521875475ffade8ab50b9f08245fad753350f63dc4e898948ac7dcefe520ca47394f8e993a6d13ff68a2f78cf294f235f5f863bad10c4f5bc41c3ba93cf5e076357f0f7fdc136f34b656b1b8ebb3eed1ac429c7d4edbc902f7f4bc24ea9c9b200b9a9fd7adff0c6445ce1d2171fc031e3e9f8b8d6b448053393c8813d91333d4bdc3bc5bb2b8bff876cd29e8b92cf6f7bc727517b6f57ae031f3040b0637dfb40b8c1fbe44cfb6bb9cd0a445fd9b3daa1da2b1c4a82cb4da1fb8d525e0a4d9ec30e9aa75b951214621c58c1f60c9b97e6c6b330497e7dea790a3cd8158a76d898107ff3a5910707ae60c8a46c633b522aee83736d005de60b9abe202435f8bc4577b0eb08b7f2b617bb5a831e95d6488459bbf15919d764b39684d7cb7c9310f343fbfcfbeeb212a90d96c7a26c1026c5cb171ee4ef839785076e5084026077455c73404a2653f333e9bad555cafc1a9613387a02bb1287c380d7478238bec8943208de585bd18b448b6099565cb3ec70ec6672a778fa6af9d1b17b0970439da24c7bfaa74c85ecd8e5852e42391ab2258024ccf91e37f2f0e86df958b197fafd12f4a45f7990375f1665a14f7f5374ff7740f89677ea8660587fb80916b30629a7aa88213bbf80512421a0a37414a2eb549b81cc85072cdd87e4e69d97ecc63f974e60d20de0233101c3d475d777602b12e2f797e9237570085b0e9f48d4dedf233eb1301ed4621f9736946eadf599bfd79157c0b4cc31bc273f5c6f133a4e3679ff6797d3c9b76aff4bd8ad40726c1703c3d8b78f0974b748d0265b0a75928374f91b48c2d2b2c11d8b6e5efddb75009e4db72e562be59efb0bfa06808c89f585a43d4776ef08947a77f277526777f0b52f1e0b5a03aa560fa45c8f30e584b58ac1fc00b104942b7b86a3cdee1abea349dcaea4e058faeffc567e2c3b03e1c5c4ddc675e25aa15de1442bcf5ee972a8c5204ca5794694759c13a2d716839dda61635043bdf1a09e35cb6d93b4df3b7a00871f79cdb4ee69c79041dd14deb7754107b8fef8589d2d240ac1d8eafc52ea847263512651bbede2fccaf6da816b1b892319817bb6af9fc17078ab6cca95f03cf8426249fd4f2bf91921d39b8cee24af07a52bbe54ca7fc4422a310dbf2149b763ac0060fb2c59154d2cb0da1ad4892279b4e0ce7f5f92c189c3ce48e518ff48c4ffa9bf2b02d4792f84534958dc6bd2914ba010aa32d133f6a07bdbb87a237c7acc3ba5cf101efe947147ed4eb3bfdffe5fefa991c0dc8760586218d286944c52d0f221e0101f74826761d01a20af187f9ec1115e9e98bff6fbd7c8816c15d33c07f51c171490997bf269951218ae92b66fa3150d3bd40336abccb717e18b53e8806fff94009910f202a5041b5396d1c339e6d075bad4ab66a0637d81eed1696e4068024001123204b8371f0bcdf0ce07d79f7c917327f7138a75947846fde68665e9c767fbf96bb3308abffe7a8d05512c81e39fa8dab2334f46ab9543921ca97be31076dc7b2a0d05e90b7f7610d1a391b442398ef56cde3b18737faa8f282572389b4fb3c55cb8ae6737257708c808bc0a414bffae293bc69cba702ce2959e1a30edcdf64985a4b0bcc927c5912f819c71cc9b1ff5d6e5929055be72ea5c8c1a4a591093deb5449b7e6b60109be1ac0cae472ba31e1035ae65f3214f50ad699a077a2de52f7180addde0bd78c2698470b1af13cfbf497d243c9e738c4cdc265356543885c5b933a299f01a5b5a9ecb0b4ddfda0c28573064f6a3f142801795d66bcd5c31868fd3207fee7bd98c47e4da26bee64e1617b20cbaa34e3abbe31126b06d5737fc2b577b19d255a519397f3ff8668d0e7d401a37e368729e4b83c5fbf01c32ec478967605cbc0675f685b5eeeb42fc688216a0667e1204c995c9c485e6f7712d80d88edc9594528b1907790549756dcc8b0d32091f36d2b4009639e68daa130e83a1ea18353ca34f431c548d91c1591ccf8b25eec1f7a3c18ddca71b87bb290a5c13229250c5e193e1352072f6798ec504b3b4c6aa578737332f52baea7bc4468fe6d8dfabb9728cee93fee50c8caa113f5ed7e9b55e21e98d73a377ef68be7e4e965dfa50cf863e6285236f11ce80512c573ae2b55bcb43cf6ebabed6783c250f991f5f68a59dcb2ac13a3c8fba8dbb11c79dc6236809f2d7c4b0ad3cecd24b85f1aaed9748b8c109f2fd98ac8a53bd52f18475598d67305117de8e03b0d988a2847539cc2efad520f86dcd82c08ad4b10e490b9cb03bedc7197bcaca55526cd9c8a5a5f69f7a1697e7e31aa76eee597c386418e89f06b0b9817a83d6cdefaf9594548b33cea1cbb585e55df3d3b66f0b1a88f4b98ea4720f1ef5e6ebe4958078ea0bacb8ad776e325ccb252f81943b9b1c2f54aad3c7baf1bca0dda1355d191f69c5d8163c464898116dc89201032d1e3281c8054882f60522d3a65831bf779a854fb0c195f85aa66522386625658457e74d5c2fcf5234f226da4a579ac1f11f11a1e0a6993a4dfe5c856481ebe9d8d2363401058736f7ad104104aa03f5c91496aaba2fe4072d418d91c2787a9b4ab0cf4bb65681ad0392ef073cf2fc060692b0c0c194c8eed5558098cdfa3317ab02626159e40e5c76fd64b2ef60b8f5f368b6b4fd7ea3d2d3236aa01d9db7c8a01929f9fd38557335b926251ade1a0d47d0c1444e6416218781c1a51e786dbe9297b78fcf0d0304c62929e00744ed4e14af926313a9849b2a464048bead075044bee013cbe318920c4172138560629a0ff4fd229d81bdc7c7fd1086ab17d6efd5b603a1991b33a55ca5b9e2051b7c140f7937adfaf474c2f284489d9b1e8c71d58f126eaa451407eacde9f0e86504f7de3ba4d830199a229de2bf39014baad6dbbc448501588ceb2575db0ddae005b81ba9914bc22b6d600e2c990f7843e553ff29d8008265eba7dac7b5b5a7ba6dc263fe0e262a7b8638a81f4720622c7361554b61d7b04c7f8b133440baeead7d51ac8b77d606fd0eae1c55ce7e8141dfd68d40ae3d8d2dc8a061085b4fb6d8a06263183869154618329be6b01c2890f2b5d0a0f25dcdbbfe2ec3597d79311edb943613fd4b59157df4fc2e1024be03d98ea3cbec7186ea9f4a431dc3743b9f0871b205bc0c1b3a001768", + "113b261414b4b7dfa028668ac8b0cde5734120124991c54f4dd16a87d181efe2bc15f6d0caaeaf6ad615f59ec5c2833904a34b4d34109c82e10609b387f995430e8c13d83ac34310d838af9efa32d7fed6224c0a33", + "cd762390b93369f1e207eb15deeaeb0036f5331e82480d180f84a76c3e44550b", + "e88c14ef96c7768f5dba9de9", + "8d6aaa27892a76fb05a2e96cef9a9b4b7ae0670a12cff95f7b076372456889fbd3b9b4fb5fd98b3bd85b247f15009be2f4e7a0329dd118b6872199b314e159618ede0381dd97db28743461ace1a694c0383d8458150a501d6c45f4b50d5b1bd47e61a51f9ed4929bf2e564f201ed0e6825170027d93e482c1ce268459d2f81cab41f0e7ff281430c16b34a29b5c76630dba72ab9e751bae41122b26121d91f2af271a23e818263f46e05fdd52f319d58330bcabf66637a368c0a8aeeb20cad1916d966e5e0b0de74cc67ebe57e3d1fe01e9743d42a931cb4b98bb762ea43ab937d1e5c42eb08fd56e70e911bdcc1ca4ca0604a329c5364b262ce2de282b4732ea657b89300cc7b7127ba4a2d08c13f581f024fd093ac09c2bc245be60c80e102405597fa8082f4d28cc954a93217edffaba3d2a397bb59ee89c8cc0f33eded78f21183bd1acdce64a923dd609a0620d2911f61e81fb2c8ccad8ad9d81157223253a121ea2bc60d6a3670c563fe06bd75688572b3be83cd31dfeac6b17cf8455267b481219c42034b2252977f32b8e6588fb05166498fa37d17c2b002a655b5711bbc21175348225fdcca041b1f97fae48fb1e222c5bb46b5202191c00666b7e1b2d84aca3edbee7a97dc0f6d1330e929226f8a76c155e973c1ab62c867e1f87be37788754e51825ba31af9f4722b5782ef782fbb70c391a664f252d14e49a805e94790135ff6bd881a687f98b42da96fd34bf240eae4914488af739ec15f13f048a7eb5fa94af14e8b6ac5fae714cbef6268b114813ca2a3920a7a9d5eb506a2ca211758de292047eefdb5a97e18530dcd8410495fc42abed91b1204d9b8ba9d6aed11d2d0fa0d931d46f93f2c1a560ef9f5f7cee1497be770d3cb07c534215cec12c1458bb57aab4d95cf4a15a5e3a3bf8e650206d5cac4af3193d169f1a57638d9a50f6b7c6985d42f7138b9226451670d7359351c2affbca65680557693d03458341198b8e13d0ea6abb7496edea3cd4dee2eb93695e668c7c0901c6809b8ef434e88b85a8b22cab6508b9560fae62900056b7c5c29a8c899bed45a2b5159a1d4929476ef350101317f77f02d48a039cf4cf01c56319cbba16fe908c49ed6f3face88867c0ad3703452baa7b86fe58a00ab8f740b4e8055164b0385dd3fa44502ffbb99cdd843bc3287ea468aafe4cc298a3fc180f284dbf78aa09e0a2f7d8593356eab016ad8dc505420edd376b66598a3d0aaa848fd68c4e07419b8b50e40febe2b6b17ad07726fae1f87e86abd01490a0ce24fb57b533c765504ee0a9ca154187bcf5e6828e3addc7597532643cfd992558d63b1acd00e7aa41b9765094217480c08c43f4f0b3f0127120699b7f2a5ac07c655b6143e467777cdad4bc21d4b57da4d8f9b9a7e4523d8c6fba3614b7f7281e80ff0f9004577adcff1b79fe443c80ca9655ecc102d5df6aab2ff6c3401f344b77666c59ac7d5b92bf4f1e2322f74b75e6ef2bf43ad9e018f164ae76a91451e5221bdf5b65a4fbbaa8dc31e6063b451edbbf4965307f8e65bfae87b15f2453083bea8484017228a9cdc6edab1a28834eed8ce07430f776b916b3bdd2340798955ce9ffcf114c3f6a88bcc4c7b6f2e3842426488c340d00f2c4d2d6fd3b6263dcf7a57f5cea6c77efba7013297bd3320accf033acc0833aaa8e8f95cecba469704214f54a1ed581349878a591f9993371f1daf92e55b2a4faf8f952cf785c687a59b3c258daef1b6d7bf9f904123c7384a859933c3ac31e33edf648a1be4d6264ffade860915bd118f0b9aaec2eb8e16b2015fc25e68caac77a3accea53b9b178f6cf48d15029fac12963b4277df037b7a494cb29b1d9e6d2148531a1f7360519cba5657c080254f130a1cc3ccaadb4298d7ea0223897e63d798b4f4909577cf9b491a82de0275a246bb1211bc4144574c8ef176b382262c0e087975cbef33cc616d32e0131a9efdbe8ad3d9cb5f935d3f4f409852acca22ae2a6e7450e9a426ec3b9183f93b4b7f89d850e1c7053c661936e0cde23e831a261b319b430da45772f0fc0113679d06f025983bbf37ecfba35eeca28de5ff4815a490570491266e92faaf8d0ad4ac8df106faff8fe3c8d050ae9dfc03a01ad177c21d7b653509a80369a668a97eaa532dc9867c32aebaf89ed36586e1ebbe1045347766a354a86ec1e8b2f30c8fdfbb6c5d549e7a84db81b73fb828499c5c4be0d4b2b7ffb197133a0ee18abb5a4e371be0ec0a6535507029316f8decde30833ca47493ffcab781d028edfb91c138609baf1054ad52a5d8ccb98b3ca5b138f253d99bd556afd80f71b39f36e0d96fba4e0cbdb18926894968aa825392f12d98b6497ff85a0e4a91c97f37ba1dcad30fe688b54008b925805104a61dc22b712685202ecdb073fad9b10b5b9ee2ff781f23fd41ecdec87f85b369a304b85bd2af126d08f79d8a9e2bff0b18607a95c4efe35941c5493c94e3f2f3902e79f4cfe84c138b83c7f32d7c5a125b28c6107921e8ac92f1af7da015b46a2f9169369cede770292eee8a5f40d080ea1c267c33cb7d4187093d486dc3911bb2d6cae036cb508e81ca783ab5e95cec751e39f3038003081a252eefa7cd913baf136d4e27076251da9cbf0c7d2586fe02b62ec786790ef08fb3ff3d79bd06868eb1abd9875920e14fccf6dc144e898f578b7295fb5f4e84cbf683722ce3597aafe3195e194736fc317ed03ebbb00d956ce89f7a41a334020e1a88da355d3b47d5bd3965a290f6fbf5dfdc8c8e6347b4eb85151e53a960311582235f3b546ca80a670dcb628fef572dfae0c101bc08c80f78d5630a793bdfe402592c316227f2333b386839a67e6ee8d9396fabc9648ea656a407670efaf80966034958f4a70fe7b920c79dea3d5a0ff05f3ed0516537d51a686efcb258520936fdd415345251c9ac1143a41be295cf12da5d4319e78e1c57ce20507490e5213ca7be92afca8ec8b6a07b33571afe6940daa2afb0dd4dcc1c329474ff8e13d740488e5ced552074fff695a04fc1b70755245895a1e9c387fd9514261dbb0f600ae03f4896e795d1e72f421d8572543243d662f6811eb9402b6a3b8dbb0f32de95bb1ac01b1287663d3b6a3f52339a4f6b27789e15519b2b59f2f4fc8fd33ad1a6e4d02cf0ddf8499f45746da424ee78e72847e3cd3833551b6e6fd6b1aa98c688252b57a1d97660ff006ea1b970a0b8fc7d2e313ffd0b0b85299ded47b60cd2fe9bdd7ebace4b0c1072cdf67231a475045990b35ec761e1dc1dfbd0c402296566eb4b9462979d33c9d652a9295ae70943f38adb212b48bd8ebe82722b1712ab6a3be6060297e2aa54e7d0158e4aba6975237e7c7a1e22b29560b8d262125ff2a6e5c1332acd0f6b5ba15b4a82d3631891a01530321830aa8f2e8ab6b41bc5b5356957a4d0c3bc3eab04df7700305a95d0f9cd18d486c675c963876b25b1a0f78e245deb40dedd14dafdaa9d614fb06eb2538c5411e13be116c76fbd3377ff212eb07c5c035612e4cd7a1de2ceafe95832eff88a9bdb3595cc19287fa40b8d244afe9bd24dca40db49893602a59640d7a1b8e7475825b09cb0cee111864deba9d3d1beac03664279910accb9fac534ef099e398d7f6e3235cef7685fd1ae46e47da093135741894273c0c3486197c26057044b10faa57244721328b47e611633d16d3e4776d90309d68ce4a60d3ecda26c9f39c1c6da67ff79fde4977efc5653d79ad86c3b53090003bb72e78aeedcf4c8107185d9aa65221df4e2104640a1a083845c01000370371fea2a6bc8ae43fbe290949da4e559d3867c16df16b143fdc807616f51ebce8d05bb03c2b0bd587b95e3f6a15d907aa9a5b11622ddf4c81ff9fda4bb49d3e9577551bae649cf64ac0cfd646b02f6f16cdefde09a55e77afd16c74e8a3d777d80b7cc42c51f618a3c467968631119f11ca4385f0f5713e37ab1133b692de475db1d44fbfe9d274b9a09e673dac88aea74ba88cde8db3c831e9b5a0f1e40261281e5aea9d4dfd48c5d9e173f4d9cd56fe7fd610909c838bcbe1d6c729e151ecb4caef511a36a14b03cca7ec5d0feacb4647ea5212a11d18cbcbedf78443127680ac0b1bb65120b4197570288226830e2a92b380e32387bbcd3be2c77d6c7722054d849be9de459cc1832ec3ac8e7f60fba9c81cf5fbad37d228eba137a23227d56cd24970340f2b7599aada9d2424cdba8b50c2b97244dc83f7391e2ceba5bc0a11ba547c142126c791265b33a3db6238321a5f3273ffb01e42adee17b898153e41818b91413ec4f6386ab3dd48db875afe659db9eac94d16f850ac179d087d93784d607349e8711f5f96fd514e8d096de8b4a74122ba914520e93a11fa4adf006700e122e2531e1f39340cccbab4862708d69c117d3efbebabc14a0231916ae1ee8285727c9fc980051360346d53dfc76aa5a11fb1fc8f36f95f741e913bd2cd1031e508b320abd2d3a62baa400dc439969eb44e6abf8223b29d4025c3d1ca08d2dbdbbf9927c625270543e8c0cb5ac5bb5d504d224e66a1895719e4f975d819a95e54cecfa59ec8e385aaacbb023772fdddbe093afaf5a75e63a62d51926254e5b47da1e9b05851196644b9180734d05810dcf3502747c4ece652b67674c02aae74f20d07de2ad5993b3a68d10207eab6be5be34e52ada655aa96c1d82df9b24c2acec35e8f0bec9131c20d0ad8936880af87215611b80d07d7a741a12d8145bd05066c6ac171afd8684b92f72237bb0e4ca4aec1ec280e39f36928852d5d8d02fe463acbad8ecefc103083fd4298f399bb254e7bfa166638460b760ccf2b0f5fec0e3875206bdc8ce096274643824acfad71ba06441c74788356caebdd2208f6f077b056fa9d85aa4357e93bf064a776f5f3b0f288d0afdc51558c8f25cbee17247364c2bb24637dd69017f92bbb43024d9c773439626a02bd0cd44136a642c9c5ae593f32eada790c31a6704030f2e07f1173cbc0dabc410bf9864214c298a6283b3631acbf94b8371681ba81eed1aa81ccf258252d7f90fe733ac770b9744d0170cb554b39e6c72e05919cc237f8f4d7f3545f4d2732f4c9473c77401dcba04c0fd33efc73219f31c08dfab26abee9a7cd4ad3584730768fae899fc", + }, + { + "9c73ac05648e0c50a3ea3a8eea70841e8e06669c1e7520c5e25e093769c4b005375c0a9cea16ec8e00261ceb96a00924a66fc0c4e4e089c63e93fea857aead8e0ab82af4ce1682cf3c9fbad23fc3f7e632b7aa169834ddd6c7db7e1e892cac93e4d787b2ed0a812aa93bfce8fef3ce30ab794743ad241974ff989288c43e1ba815a25a03acdc2d5517293e161d0c46c8858d0b32b124a6b0bc3838807753288cf6838fa25fbcf876e6368c0342d3cbc860d6fa12faa1c2b7d9fb37504e60dd44e36ce74229dfb80f1545125718dd1f78b31a8aadbb4d6494489ce596fcc2dbdf2ec22157a1d966b61e780d36552daf084739b602861a96ceb67b65b23d40916c02b2c3a38c2a59aaa266e1f8939000dac9b6dc50d1731e87ee833a2cc3cb98c57e5b680a85c1b428289520bb252096efd7723fa8e55d2fd4e16900a435986ab3f3d2bd799471a1bc07c1772ce10d1bb8805a6065b8903999f9393d2ed1a7e1c57a9e3e0e10dfca17a04143814f5f3acfb99a34712a6e0a24a7485279ef343e69d27c77e25b41f9fb833d7cd29cb6a15551d5c77b43d19feb19f2640926a272f81eeadb792bd474ae11f080ada72103f8f7ca733a9b1325b50589be2b2b3023491afec246d336f4e4277592ce9695c68d5f39c8fa4cedaf51776d7ca29ea0ecb89eaefe71e5f3560c68e8dafe7da08cdcd954d626418677b8f3f45b9194474a32f548a4da3bfae6a3e2c0a25f602e3b3a821160c397d77c8bcbd71c5f1e669213af36eeea30d48e12953071f55eac2fe0bd8fa355671fe032f6fc9214632428125a16fc8aea8a9c7fba0d7518b9a4f876349ccb9bbbabcdb2a85fc60b83ee1ddd041967efa4036e5e10e377c9886f40bc0b0b57c7b724795f843f6a072e87e532a04c21445090a360731a2afb896ab795750e5c2c33d58bb714f5be427ca3751df09661402604a09a1eca95a8344d3daa5b99d68e6e6245825704c5d4a73af197d052d7f75778917542261d77735a21cff3f75d6159a3e4b1a7a9854ee376e6b3c8bdaa1f353b957862b2efd50d10a40007026261a546124cef979ad20d8085d53e30f5736b8aebcd3cdaa349ea474af249ac53eef2653ae1fcd5b3095538de9368d307d45df2a19acd44e3b78c2da9d5d9fcc4cb61feac5dd35f66299845bc0018c3d476b6761083baf33a4621e41cfae0e0c642de729fb2d206db6a4b976a635b3fd911b5e9946fddceb6feb2d2f893b2bed590317442037a1d6dc5b5d72910160221cbecb53bc983f1c736c3bfc9757e9e05af1248b28d651f521af67b2a0d7e4bd86a0013338404fabac7b9833c372142e6338a98c0efb7130aae8e34bb0c80937680a7a904aba3be735d41af9462f17b967b13566bcb697579f8a9340429c77baa6e24ae1ac86d8d25ae3cb9112e34a7a948fd141367898c5f33c0635c87de06f603b510cb229df0d0d9a9e107de88b12686c539ed4fc54c8285afde0c8ee502919a125cbcaf4c8c89f56e90d3f641f97c07326956f7b5d87c65b689f39b8b84359ee0f14d2c7ed621ec67f5e2a8ee5faf21c805187edd95e3941ed62fa95a65473a569566d46b87c0d27ca37b6b022a8cca30a4480d392ba15701d1015b3648958cddfb614983211bffc4966ac6c1f691f19bd9fed405a02c06712d62a775f73353f3949c76b6b7757a4ee0410fd6d20071abfe46b09e72b70f9f19b61410ea67037e037934bbefaf09cff018a5c218176d165d1eb5cfd5c46eee7b82fe65ea02e3ed7b18a86ac7b139b7c9df79e1f6e6f85304ad22d97190c7ec12c651fcc835ea434d92ae1444e7cb0dc644efbc2ae70f2f94310805c1d0f2d49643d05e78baa1c54d4fd99137a49efde88dba1374c94208fb4a0ebc1a0090b043610ebc1bb08168ff5bf936ff9834e825eefb9ab73da2b287b06fa2b0ff52f46061b07c1131e4108cde478c767b749b696f3520acd8d3338842d53941282da289dd1e9a0e02aa9be0f127566c9bf2d50a27f6b6ffc9e9880bbfc14ce7eeee70cb0c0ad90fb474efa69b46123638e8405fdef65fa7e0e7b29fa8fe8696edf661f9003a08b4aff85a4a3e6d817655c1d533b834da981b8c37c38abd5977b3ba71b3f57967a471c2eeaf2f6f258431fbb7e92f91814b1db80ea775681f282290db170942bb7b04aa2a331950b74a4b6e337affb4c51c6cd4c4e13ce3095e73e4767c2731f72bdb225ff572163fbd8573378427fda194d165750d487f6bbb63e1378a132fb6ee5115e3c32b2380b096b735bdb4d651853bc7928346fe3ea9df7534f2a4eae1f5ffc4b82ae738db7df0103ba4e68c2a2153bca499bae2439a57778cfc616df16032aa8a19e26597d275d2775b5ea17cb25d204b18028eb25a053e5666ac47c6def151f7d4b68ea62c601d87bfbe04711c24bc34274be6815024d7b7d01e7dae10cea6e485348ab195a83854663cc5826181b688cc9c091dc1e0d491fe51400e20e6f2a51a7d56af258e038bcbc80e2c4ac4b41661bd33229d07b39b59f3aa79d99c1ef41974a33e02a7cacd6fd8f9b99cadd0fd6a031f070bd3a364c64ddda0e9fb94036f374171de0b3f4ee3380780e6d77d50db9d58e670fb4a364827d631226a3491a27602808141ce657ad6e560ad62b088ff086e6f03b8a64bdf7c7d01e7b19289279509a9d6d80e50aef3b05b5561e4556952c46d0b6ab8eae735eccee77e570e1360b7ea38c53ae6b8eb420e4c2663b57827228392db6e79105a47f7d89e06ecfebdd63783101d3bfb5f494785acfdfed41f8166faefdf0b49260222c4080ec2c6e4f949f41784f076ce37fc7a34fa4e547bb44e6b9359b4b95cd67d64e4402ac83973bd50f8adc7c6e4c34019bd8f6d3843bba3d7155890712e0ed5134e00db877398d86b459f312a6272431f01b057446bfb1b8053acf181bac79408c7708f3a0867a64e06d7786849bb874a6bdf8fd6daaa572d5648ae100f4318d6b3a811bb0fb709168e817ed83c0622a7e5b17ebf5cd5ecb21d9ac32ddddb039083144c93cb55a95ad72732132d54bb120639d1620ebd142b58d75835b35cc6367012c93c6772963e9ac852c71c0dda2246ab845469997fc170d8f62334bc5aa4ce23e036967674303ec6f75bd3d17d197d026de69beda70bc59d2ff95a899d28ac7e5e42f4d37233996a8e6d3b0b86b80df49ea8e145b4a6e3e39f3d6c3c6518bac45baf97cde23037709d737b242b8918ca31f90fe59ff2c83e2f347a954d3559a8e4f075c620ad36be20b1e24b3afa156cf3255192171ad0474e4adc9b7f35436325b92945665f038611e5d14bdfe7b7d20c09642323346a717f460dfe7b5062a0098be66febe9f5fccfc747aeaeff81ba08e5dd2b1a489c998ea9970afaf9aa03859073707a686c492fb3f7ddb27897ba5e75e578bd82114b2ba85525a2002927909c970a04035334b64b1169c3a923211e0999db8baa26b6537cdcf57c051c0ca1b317a5b66ad96cb5ebd57994f99ab202348d8ddeb343312f1f26ab2442b8c5f5cf6bab394418ef2fed68c3e60275e836027515b6b946e5d86d91fdaf49c2a5182d5051726840a156a8653cabda25e1dd9af693533d782caa09295952ebfe6a194fbc8bb7fc2c0da5914a506c6f31490928dc5d6554890f5eb268b09d671bb6b6d7416dd36e7b78ffc5c86b34fab43d22909a87e5239643d5fef373650e291be56b89b9d90431d8c9fa44fdf4f83a1689d59d6ef833b1ce31a44197b36ab298d53b51ae3f8387087dcb0571c340874c1524ba0d576bdb88101c1fc387d25b5c0dad0b4d309255ad5d5b1e209ba56db0c927bd209399a8a3b5c8663c9ac199a76ea4f49e364a4b93a569b3400e20f0d748adf7db46a07efc68e43802a5d1a914759eb2abe8fe3e8d67f2cd7612bd4d5a6a4535b1e5b3ad4d97e54f3db7f8512c9603d87e01160b6908d8df1b952c750071abb1565e5ea3f643f233faeb84278187ff0089150bf21ee4d13979fdae796f592ac5b88869aecc5be1c64665edc8ececc87502d36720b73859313607aaa561d56a195dd3c7292fa8f0750ddd3df9ca056fccd9d6ec900f45c1454c6ceaad4154c69e288dc85735b8cc42950a3c5f0fab2be8811779905c3ad5a9a6bf56e7141d863caa4e93e0065f229b695efb790926618b3eda1b9a15f143bbb09aa3c4b72900617793417df364185cc213d5cc3a375778117212266356e214f085d8a7aed908256c4aa25faebabc70ce913c08c89380da06920069e8e27dd867567f152f883a9bd2dcfb8097b7f065482d6d11c0edebc67feb3068cead403503c04b324885ce1a62c99af9808a5ec8b7cbd978b8c43e37b06e9f7e1ce0b31fa0fe52e8842002e6e99cdf69263d31de080b56c0cf94f77f0397fd1f77b13e17af90ff33b00119999df802c33534a13d3ff7fd0e8cf58e8f8c8bae033cec1aec7d191f2d1a39c7b731c97a67fd1ca43c13a24b9f97d92e2364dc26a1c9408d4659ac7373e53a2a1704a47e01c0223ed4c489735b62a27ec67ea46747e4f48d3da101b0863bda9d3f7f1b413f3e7f130208875e6a29dc30a78198ef658c7ca32d7d53b4b92e51f8ad6d39ecabb800adc0870b2ab0e85b5769f346ce7fc371ad40c561f9f3b2f2a01f2b8ccae48c78a41383cfc36b2a1bd41d61a39c24144965d9aa5ecc5d506c7c7cf9476085bf049942d35caefd77821ad925b7fd3a006213abc1e008114c848d45cbedcb8af264cdc5c07bc338fddd1123940e5d95717040325048439dccd1e298bead22b011ef76d26a390a68161b8bab29e8409a5880cca9c8104694e1282c9fd64f50e73ec6b9a9ffc31115de9cc0088400a2dc806f85487fcbdd60f409ffca584fb197156b40142e512a0dedea1571ebb74d6b26d3b4a59e9105929a055cf3540e8a6a79ca7ea71ba8b40893c9797e81c6e9a7999d4d382e52cac95727bcac354616ae1094552b3d0a33d0d3ac4e547237fc0cd54944039b0eccf335889f6aceb518de496e0986783c564be8a4a05bdc9c67b1e5abb480b98173ef091259d8c772b611e0c09758fceea3e59243406edfa71fc452d4450b55b8fa5ecb543692c6eda3a6ad3bfea929a18ebbe5ce2ac4754989c71dced37286cdd1512107e4e7f4878da1c28b4beb2dd9a712a8d1d61d1a5fe5382db8aab4857b05a783e98e77711c1933a7641fd43dc6e6e597bd03b11ce8e94aa094fe250f03cc92ed5b0a5e7723911e87b0f3c476d9aa0d96adbfb395a8fd353cfb5a4cfe27deeb82e849f90bdb17928b0a5702e4010f7aaece2d43772a78b325d2ff24f9de0f7bc65974d2348c64", + "bf96bbc17abcd1f56a9f22ad164d25ca72f8c996f1a7a66d6effe140336da4f20460b47e1c8573872496343be35a055552ceec437692b0e4919224c4ffc8b603286a8245eff5cc148b004f6e5a54c4ac22b0f09842a07cd332a09732694d3591b8b7d6a7ada2bb38a30aa7fd5e6baa811b9a195d3a96306d", + "aa2f714d3a184a9883f4199e8e33fbc9c92b36fff2d59f07a9d0d335d7476e81", + "36c79f9f14d431cc8c077439", + "873d0617c986dc9d83e9cdfc50b1f916626a9d9e1c595dc7ccd99d1e993d25d89b04a893c89e205952eef8f1733054bbb55fa5e1b07135787d4fcfae226737b50cafa2c11276e8708451be9b4d7f662e98ef6b705c5c4fc64588728eab1dfee22a0a92bae61828a7394977b0ae8a3b6d0126a23583fec025becf0a72a28891391ac1495732a7a4a1d43a63ed8eb37b280b6d886096fbc4f77aadbc5e441e996334d0e10cd7f3dbba9bb7efb147297986509a07735385c681e0543186dc166291edc3b4664f5c8ffb0965c85bc30ff5e7769a69609c69ebb68f35d104bafe3dbd3e2a40e13865f19bca3612e48592aa930eaee29440b4ebc1c0a59f1c54519857c929709b086bfddd6d4a30940b592be48e0067976099efe71f45f956182dbb300e8076e1207baa32d59c1afef7f34171bd66099d2d7f07b39d16d0f8b085185bf2554c6ad66bcd656f07979e8f19575a116f5c4fb9700ec3b46a3254f28afa1ed51348c1af6dba26fd398098a76d7bfa2ff195eebab41330ef290bf75205a2ee570a2fa46bbaa74aa6ba68a0e63e2731dc1974eb44794f3c89ba58cf96f7a070fcca678185711d97cd9d7d8202351ed589e0b05a7a190e60ae4aa109254a7bcf7013f8addd07a64145e21226795ff7c7b1c225f40ed7c3552da8eb18b9bc9bc70c2e7ecb10c8b20c54f04b6e27b5044a7a67b558407eb330f2083444375c022565c45fe817dc00c7d24c23db320d15949b0b64fbbaedd310e73e423fcebe6e1e98a5cd232d97e6466642e5e3b23f06525ac1cdf8688650cd366b1b7ba2a9033e62d836b14bb73717757b76b9673671bd3d3b2a56628f5a309f3b86ad32abac0590c50f7c5a22e0a920d88dc9fbcb3add08b900a2a2fae4178aa100a0e645ab428e0e79bd90baf4af2755e48262b64838a6fbc21226e323c0a1ba5703e30738fc7b5a7df9eabec6199df5ff6ad58f9df5a734ccd6509e53ecb3de1c881732e26e52ab848a0335b04b25f2254aaf8c130c78b0c9a40b60d402673ac7ec7311d0b00c45bd176bc73ad81c2478611804f59e3c145110aacce922e473ef346f8acaabdbb9f313dd3f8d0a937d0c048e5af789e2e09a816146f9ea28170909caf2572a2f6e2d0d511242909de2815e9ec586b2d12183ddbeb7dd70f32424097e2ec28b4ba62cf78f547e2057a4c050cccdf6b582172343742ec8c85e2847efb1595bccf89ece3b3ebba824d2f097b1987ec26c6e5710544739d54a714060fa91b7995cff0161415eaf55758078772c0271d9d282354e47a25b673eb11497a6ed8db82267d65ad47412300ed525af96f943c5336b1de88676dc346e7339230032463d305b0442f934018bdf0242768511d20474c6ecc82fd752c0c0ca5cee1f3e06e679fa5835540f97870d47ccc6bab233290be7a3bbd4a73f1dc7682049bf7b3cbfb6687479c18d246e3c07161df5c889ee95d39cccd989625a8c9e80f951f8b1832f6378e05daa8566477d7fe547e49ae6e822a68de4df9fc4d6500d5219c3d3bd8887bd7f695151ba378da17c2e750399f7482973510a386721c59683a86003edb9f0ce1ea89bd7bb8a25c222df7ebedcc1b56c8ce18f367b2cae720e0591b477f6ffb498c3d7ce59cabb1b01d7cba84d7180b4b2a165d4b889a6ac361720e768f2913aa50b0b5c88e55c35bb4df4fbc4460338809605f1fd445a2bcd97ec1d2f269b5e779a18c8f215bbc5555c745424484ee5436119eb8754f5e9e91f51fe715353596baa1fbb0a690e99691636e6027cbd4b7be752bc278661e2677070ddc12dccc262d3dd47160345de51359ee8dcf2f61044f95dfdaf323881b2bbff68af6572348f786f6e52d1309cff871ad58148307d7eaedc93ef037922b6092ac62171433adc4934884efdee3052ebd60ee115f76f9dbd0eab7c4c0a77b4ce8078209d23d81d957335f331965b556ebd54732327b5aacc899f9ed0edacad9eb98cb845867f249efb0e1a5fa2483227f78decbf7f1f32d060ab0c01eb985d83920b2cc24b5f9a0d5d869e980129d3b78277fb87e5cda61e340a729d86b6617b8828dffc7c37d4c38080ef3515c2784935973dd184e0a8160f84bb78bcd8a5e691760be4a4d41ed6512ee436ce24650c0e17e7d74b5e01cc39b21e21514a84db262d673f24a82cfd5dfe2a162976171c538b24af16429bf8ed5fa8e37f89ec6e7d63ea1d83ac1087cf89e8f43161f225108889e922493d973e36b510074533cb1cb22174d21c4076959e4191a5df880a8b868b95a9cb5151a7ad47375fcd87725660cc0b59c88ceb86984941268493c49b8aa2baa8c531ecf497853ffc3d26b926a379e72188e246d42073041fbca453bd558f328881c8f8d9e099e898a912530c4be499f2b32229c359ea10e0befe6d94cba5ddafe51d164898166e890b22fd1eebd5724451511dce1f8f7431d712a3f1e50fa5f609da686253311af255b84b2106b09b803e94b51729cfa0826869945d46b9606547e7e33fd9961cf15b400d0f5e01d8fd4d92a83ae526934059d4514b9e0005317a70466aa0b6086d5fcfed201d958a0de55fd23f0919ea29b8aa02440031a9fc206b9feef362a73430a4204869354ec81b6fff92eca97e7f1bb12d25228eae466b8137b4806895ce34b57dc14bdcd107fe160776b0e5daab150ba06976eb884eaa574da393af4de355381c7caa4f611a2ee70a0c78df93a4276f55e6281997b4aeb36888a6d9638cc95444047e5202f41f8bdd787f1ff44a648cc7d39f05e49e5d6989fedb194c526780709763da81a780db0d1534a466cce57e11dd3a4c0e273d9873af1040d52a90e20101e1f80ef296d45769d204cd5417a84e022b6b336675d36d9cbdb16b0cbb08f5e240012967c8067c92f97f981cd19d449084400d76adfb7c610abb73bf21e161db04debe6665fca79d71c8cc50adc3ecf0e52d07773478ca97b8e9821a5704dc58acc647a5bc618d2b681f17942c46c266c73ec211ca403a7d47e42e12c775b370cd500d70a4aac7124f5f6d2d4ca78e1c17a96426c326bb60379ceb0c84a86200f3b450e5e9aaa11f45440f5260eee7675a8b9c47fbc58cf18a651a1dc7b39a911442504f12c103054bb50f15381e512dc6e3af7b414b3db26fe767d83a2a53d7181fec8f6b196c7874befd6628b31797ee3c9260c7b7853b137893e36696e2a47277add98462ea9a0edeb7d2d3c0f2805fd7db64c2c7eff353ff2b36f4de862a42779ffd4dbe77b6a79bc9f4ea3e909474ead915fa3fa990bc82b83a670b163e79300b627fb91c4502e96bb9dde00f716ae6ad14dac647c9f7c2e5b2e505708b5fee996b8e9113a8f4f2caaf414061ee72e76b8bf47ec4f781bd7c589adebc2c267448247e30d659998d8037783494a1fdadcc819d7ad7ea2674f75e10639c3d3055046a00814ddda0e463185454a4455d60b9780250183d591c3db6f27373cd2ce4f02f206ae10a8c32d71226e7cb8d5b05909445977164983c0073434d6c0f2bb62bda66a16792d6e53a49ccb5ac3e285a6baba935f30e9d1ddb812a018ce04f29e2009ad678ba72b6a7112d6e7cfcd3ee7b058ec954a6fd7fd01018a6eba6209687c3130de58147b07bcfa02ec1caf30b59daf87db4618b4a5fad34cbc8014a7529b9458e05eccb9a77ef1621aa95513c6fa4003b0877ffa6d48805e7867dcf53447caf348228ce926233f65d553146584d6ff3dc3ed3296db9bfe69dec6a07add13037b3aade118b2ac3c52350b9691a6cb32356ad93377059fb8ceab68de38d96876d6d383db01f3cf620e47cbfd471bf6dd1f601210482f7c3bdd4c3bd37dd0a7507e1f0fe515151634813dd4ecefe97b52eda28e7a7129993b0af311abd3a07bc463f3cbbcb4fb0eb265a5835663fdbab0d8b8b5a73837ac98ced6582348fdeb41ac8ea9e36f9818ab9c0a41bac1389a6b518ea17df043dd50550f32471645791bf59855ed695b84919aa5cb688e569122786660f06e3a919ef9cf18c355bb397b86710c367362cddb0239aa1d32d489328e4bf92b3abdc3d0dacd76ef1a1efa28fdb848e708aed6780e2d8efb19a2e26fea56b4440dc3eafd796896d73fd150bbd967871f5e6ee5db58995f2f85cc2a15077d7d472bec2e30430af6891193ef03dfc7761e2b3b3b54a72d4f1084a8fc541526fdeb0633dcba14e9485b43065aee8750397ea88d9ff13417149e0fa145be666e6f4afdabe7ad8e4864e777c20ee7a2842db44dedee22f3ce2f97d72919b9ff6059352083be816a7515c48c5140a99af8e81b9e18b10074dc73dab55fae66261421629c8e323d8134f08beefbda555660a51e4b55a9ba4573bdf0396cc413145a941c4175aa672586f7676027f9fe211db87fe07a23962f5b1ad8f566f0d5b13c5146457276f307a02e1e13d00c5032a06d225248215e4bc4be1b672f1eaff16ca95da42513fc4315c7a6663f9101aba80224acbf0c87fd3a2ee9dedd1808c1247c5bebf3cb8d77377a508ddb484ed91203a438ef5ed3ca14e087102bc5f3828d8c3437ecf5c92eeec0331ed93ae33520740abae9b7bfc45f097da70adbb9b9b879e46a7d655dbf75d89773f737b66fd8a8c13506cff7b44bd85dee279ea7053f3ed8447fe79c400cf23726fae800449d27af5e342ecf776378e2eb449a3af27a40fe4a9806487b81c942bfe1a4b0fc146c971a13f83669e0189e337cc9fa2024864436189a9165ade6b864698ecb797ea05fed0d60f0ab4b92cbae36c72ccb5aa45337cc02dd086afed9e5522ecdb75ccf389fcd63c5a4abbf60908e39cb3268c76a08687588be67a856a841eeaaee8ed016f6640ef0f5acce12ab8bb58dda380696e3fb22d0bae0788c4fb79d00cfa5ae3e479dcf7d08b45f4592c2d2a7f8081d5a9398659613ba4932ebfd7382d516b2648ec4ff4477648069b9b2e4decc89547c16ab82a0ad9cf293fee5adb17cea4c95ab7b8e386dcae6acac63ad0d1d13656dfd97d5623dbe45230de597751321bbe5a03c879c303fd7a0d837d48141decb6df4f0865717628c85dbfda29df9a8a69b2c956c75fc66e45c08960c23bbbc706e48395057f989dfe675305067b3ed8d046db339e504d5b2bc978ab4dc261d8afb325c5e794ec79d63d8db53f9dd24b623fbcc202679fae8f7d39f7f7e0667b142c714b6a723996e5254ad2ebafd63c3577f8909981ce6b3eb1a6ad67a4e93c45ac3b34587d153ec5ab67a2697a9741610d5a176cb9b5856bdccb98f69421061c84811dd6660495d9f30548efaa69e36ead246d997c95bad0ca3fdc1a08b4be31b12daf211d3e29d585cdac48af8f2268ec304bb35d", + }, + { + "ceb1f819497c0d631a9c9616655f419b5e3470fd3b19cd0e4fa556bd26cd9df57e960ec7121b2a2cb7c0421c1f84b77eb8277bf341490190ee574d1424eb09a281176a933394bfea5502077486bef23ee66e3127b732b7a58a04b9aeefc35170dabb030d4fc3f8a4c5ff194bbd0b89a379baca30ec81d576868f25755276e62c31e93a80ac322571313ebcee494592c3ff5cf3ecdec962645887d9aafdbfd62ea910af5542d4c7731283625bc9f41ec85012b42edb1792339e6cdd9c2bb3cad4c4792a064df17a5f74dcbb3dd0d90620ebba4fc6d1e1f9704dd60c798ad64d4e5077549d68cefdddaab81a7a91209b7ddbea43accb3d1c191328929dffdfeb4f5740ecbf0ee99cb9a1b73333d7ceb0b2b8f35f84307b9d44a42fe1a30ecdf2650dde251bc8c1d46978089c50d64c028f40611370ddb0b481df9624ed63165370f4788bbc396026b268c2023e0f04cd4f66e0bf439074c46f0ae85d6dfeb0ddf22868af61c8d5133097156fa61a3cf5801db5c3ad29871d336f7aa06d2a7d5f52e50eb3aee3c7de7bdc4d21f68a1776a7cc3954f5c071282febc89c1545fc672a0a1bd8eee2b769be048ab58ea12b356d658a6225fb8a55e752f1fc97ed64c2f87f9ae661514f1f56d9d4e47b001ae865a44b8a9fd5df8628d183bfbee781b6661c9cc76debe6c3c5bba840bbc228206673aa05498a8c715b0f3019f6b2d05cce6c233b5809ff1dc4a75d7f69859fcff94ad442d460b32f6fe348659518c16385e49fddee9efab2455732aedcd17dd51b5117efb2ca1e21ae6787437f48a7042d46e11be4dbcd2932ffd70fd154e4eca5fcdc57c6fa79746100b8e1485fe575a5c79089a25eb2d55d89e42eddc81b82c4f7da8bf153ff5353b7349b161911bbe0a14483fff6585d7f3c8b5c04a6dfc99db9548f0c53e25f0b16fa212f0bdd10ad2193ac18eb09972795f42b3bd3f4d98c4868989c4af7a760f1c88ffda59faac73256df1d607644f56a70303d6409c9ad716149bb58f01b4ab8ab475e4af1257d47049aa77adf9ce54fcd22b3d6ec60484da903a6991ff052ca37b01428d5916fd92c17530bb3385a805b0d57476e9f9417a23ab1c12a038b61b3a0898831f9615d10b468c3edc24448d09b8f3e3a2355dc5e069e880929eabcc97344fb6ca5587c5ac1404783848f531f1e915941e7359fedd328f7fd12b3c685f8c1f29d1a6ef7dbae3e5e32cdb251eb43aa2d2ae0cc18b3f40fb006c2778cba387e5852ec4f2d9b8e8ccd5b3e1f4781c974aca940c45d35d30d3b9584c750bd45a80f32f73dcd85c99ae107b92888839c342cdcf88911cb974d611b14b1d85a59e88c502559d6eef3b7f5addf7d307bb25c57aae669767db6d798ca887124e159b0317e09076cfdbe61aa9ddeda189036703b1cd9b1998f88325910a37ef1fc2e227a382ae635e847df8625b99eb6ef0ef10ce7a2a5762ad7d03a7a4e2b767c4df0b477d6e9601dc8e6438184f97193ea7d7a8c22f1b6fac1f0740f1beb8b68db40e0b22940cff2261273aa0be43df561b88184a9377e6a27f27942dd04abb9448b6b6ecb3a60f14dd39b58b8d94e1991cf9d3a071ba42e0e1d71eb211ca466a70fd4724a34639707feefbfd73dd9680d76a214924642a063b38b85cf30eb763fbfe889f34b20fa4a10ba214d938a5a092c6e9b73b13bd664c75b34f746aa360593c0f8dee0f328f0ad4a3e40d498490007e573b8204a1ce7a550deecfb15f18ed5ea6cb5dd95a68adfe4cab37c13b383f8273b1971580016a8df02a3f4f431c9de9e7ebb33244512080fc5852278081b9f4434109c3427441329e8071d19d0fbb74fb6ea73fbfc7c0ac1012d3a0948d94d7ceae9b0112ec43a16cb582f9c53e7eb0ad15e05ceda108fdb3dc9e585a332018d1cb19e4a75d86041308fdd8476c88e4826931601a3a5dce06fc16512f4669f10183d5a8d15bace4649abcac07358089aeb1e9b8fc3776f3239d5442d3be33d532097e13651af7c9a5b465ace9e626889800318447b8876b45dbbe1989e1eecbfb5cdf5067c71a0d7b7fba6555d0edede12f7228d7f9841dc532274f24060b1f52da6fbaa179b81ce962723f43601d248f8f4d5778c1653e038c8d27828836d562968004003810e9aa9318edf3260272b54fca2e012f6c04abe92c2e6152f3c3e973c7e9abe8c3467bdc246f0226d1b7669bd577bb317c571aa8758bfb694fe4dd17ce78f091cf6c6de3cb601a9d177128fce8d42e652b490d90c4f8fa04ddc71cac300d3dff699be3250bfdb2136edb0057af3ebcca77ba5b3ca34531810c5e2d4c5b5b3bc4e71ee9e30cac067b7706c326357fe0ad2a4bd9cd811b4e9d696bd9b4b70579ae246381210f879c769e5f9cc3cf8d70e9c94ab74a55f5d7bf61a17418b6edb6db4147fc40cf98c75de85421b7d192919add48e5334ebce2a06e56b915447fe085b7dcd677659dd55de1f705c389975e56e0338a2ef07ccf5ec3786407e8449d9011641786f1ecd4d3d3da975d61f5a442293e6119ab20686ea8cc7681010421226838a95a157e2de948c536aabadafcd4095dfda48e5613272289a8238dc945e5f1ef30075d5de096131740cdf23da1fb8b9fa009e5b321083cd93bba9271909460c09bbe1e8c54319394ff85c291814e21215816d4791f01424abbe4cc4c792d0d04db1b812f4d24b44caa76de2bc50f4d1d1611862512d87fcebd3c0b2659082b2423bc5360d107ad7b8e8ba7438ae4509105d6b618af25e75c51e272aafaaddf1e5a227f2b2a2c96a8a83dec23223cb428136a30b290181ee20a819cf52f6c03798e7294a89f3b5137693d5a8b7a0ea38d78e43008fc4eeaf6d077ebffd3ef7952620e0af1395c38a289832df391d1710ab5b103a1ffeea8c06684c03a74399cd63797c770e3f0136d8331611502d21fb883136a82f2034358880392fc3d2fc274b799e59b89f8f90d2a5a123d3c21e5bf3540323743858fdb8912c7c6329a3aea241075ae097ebb23c8cd50f4ff46b42486e65bda6beba5f4fe6dbb30f7e61b1bf690c9f00f7513c83274cd21bb71563257a20cc38da2b88c1063bd0849c8243058ee205853342085a8edb7545f0d96a6af936a3d4612b95676665eb02e72e0875100dfa444f039eddde1422ceed8d38e6c3dbba25064f8c6cb5786f9ca67712b7840cfbd40f99b1edadd4bb9a61f48124cf3b49d68bd642404eb1dcf428eeabadfba6810a4032f8ed06b38867a7098c7744d54dcfab8f0ff941ecee69da9916d54097e080cad86dd08bf53833fec4aa4399f7124586223ec70e2c31e8c647be06df9e86a976f37901e9b134e775de2a0fd53d545c5f92236dbf5455859c138b7bb1112427049d29ed4f5dd5c43cffd3113c276d9bba910879e55efe817189fc239a204a9ebe738c0dd161d10d60a51e9dcc8c38861d41ff029ffd841086803320a17ebf5ff14b6cc2ac3dcf0ce2eea9af7ae23597233599c2321dd2b99e06d93f84989e75e30a388f47079c2af545d96f270e064a43a00c76bddf2f5be5089a69a138de844216148a1eb0b413f58d831d9b8967df297455e7538442388cdda12d157fb25896c6e2b47696c76b234a88bed4f09dfd64f2e4b77627ef03049030190fe271a5a853591ee9218a0c6b12cb3f02683d665b211dd1480cd44c9c0566ace7d751902babae14cc3821374bec774d54b4b4afd5d1811ede556a7a5ad02642a878d2d32380e7efb9082604f49d51495105f827d77945b5cfaf2f2980566b28ce3dfbf1bee2e077eb067bdfa4cc28f5d2211ca99a615e69118d9391e3feb9b13cb4a2fa9682718189ec612db889228aaa3f3345a091aeb11f41420240fbb47caf567646d9e7c762d3288f8bb2b1165cf049a191db5042fa9185fcd180b04d3007c376e0aa3d427d66d10918821f74736816044366463df7cb3ac94cea167cf1daf2d1842f130295e40bad672a22da9238ded69e241395f04d5e3c3875b8294faafbd3d90ed56ff3e01c5a0a3e349d761273143686aa26d408620c7d1a35ccc430a09e3f750d3256298c6068c0fdded270f308f79d2fcba591d723ac0cef703d8f0e7c051bae5b453abbadfab98bcc297ed4201b03ebc195c2e441cfd3b10c63c08868db36c320707ecd6a37593661d70a81f30e6db4a32f98e4fe6b950ace55923631c8f95138781fa2af78d8104fe39242f1fff6942e8e782dfa0d37c863caff9492f8e5cb70046d207c4630cc29c20e1ac105aef093261d8d335456961e552ab14d107cbe14e9de912f0e5d58d16b729270208204469f917af4e710123c3bc38a4b3f485f2926f058344db105b9239829441a2d8ababf04aea615c0e350846d9bc3b5faecdbeb450f38f615f119ad1b5dc748e88107ec2fae01f0915174feec37b3e7248ed2699d0a5fb2fc785f17d6275fbea867aad815acc8a6fd3ca4ea7357d197e5a30082ad5f35a9d894c0aebb206c6487163c9cc20442c040e6aab33d7b4b221e4ba4cbabd975836e353129559d8ddcb3c97876cdba360da0e0c1dd5b0cff7957a444027db985ebefb6154453a221076c997d3954b347f49308d2ee14d1676b75ab6ef365f3de54aaf398fd96b9040253813ba734829bc78a6db59e3f1c0ab4c878a72d6b8681157919130fd3171126994dcdcdcf68955ad64af8156702c92f7a715ce6f7ddfb70f60e80c92691efbfdebc8cae252108fb6c0010d303d9027d4a5e63413b5fb2316d32fb93c3ea52a2a7df50cc0058c76c58d73f5bb041d9fb9f3c3cda9bee0c0920079ce4f1ef8698ced664ce2e2b3b86027ae2b3bcbbae5bf7ea3693d9429cf94938dd3a2763d3f53937c46763ffee6579d018358bc69182b1c7158a09b18352ea618c11c45f07fe97cb65faca535f43237879ae3e0a31efd14679daf8fd2ce25eb8f32218fa20afc586a98fd908d3fd804cabbf56dcae272328011b252dfd83e5f0a5fdebc6acb04c5540255e1322de5fce9db5aa4cdccd74dde8990ae51cefd6c1edc1879971d3efb1f94dc41b2b23e9c9d89415b46189914a229b2f3e8b05ff78c68711385a00e9534dae6f79d15842aaec575e4ee0f098028bc74016cd3f8e93c6a0cb21a0b574ee63e367343ca9de28003d76e02d0ee2b8d622cfa3615d3628fd02499eb7bd8c1aa1f34edd9c2d059c6a7c7c978a5e4f60801e03e17c3a09793c5217f310a30db1965b8e328893cef20f4a899aa8d9fa28f7fe0a733813ed7466046776a874273ecfb57158483f4a588ad4f232adec5ba4ea651822780596de09fd54b1717bf04130619979a0e3d12ab7c35d64afb8099a1d21bc952653742f50c8e1c244d10374329cedd27fbefd37815a9b3112a4cb2fc587c4ebda381b2b01fced45cdf0b9ff8ca7d10b65ce42e728de183a82e369486a2e3345664e70674a5dac174d6616d90de8e472b62759df057119875483cfbfb103041751747f9cd12bb31e91caf79eb2db1168026a4707dc618f30", + "e45eef9561f3acb3672b4f38570256e8cc4d877e2998e72b022e33de8fc20f7320fe0882f2b53559e084923786e8205336a7d15f3fb88a41e7bd20767f2feaa02df2221fa7577988db0bbf61f3dfb429868688c53e130725d0279c505686f083", + "475a44cde0cc931edf9a44b0c1e0001766f09ade023dfe6b59a6af800e549b55", + "7812a320691ca8442767a51a", + "eaa577bd67fe79ce4586f43355c94528e306c1678946e4f7a907d2a8ee7f4281270502522119a8b09b6f05d864921cb515fddf6a1000fc2f67b52d0627998591e2acf5b6faf71c278e5754b2703662ce670dd049da8d6e280c2b84d6a9b29ce28980563c40e03381a49c54608b72faec9b272ef05cfa41957d9eaf3e944b22610c725d8efea90aaac6e782848d368ffc08784d7fe37ea1effbbbb34952def29fc511fb10a1282bb0b6334328e4d00529a44de3259b522553a07d524dc75f431cc9670127c15670c0df419826617cfb5ebdd8788d5f528a9eb1e61324eac5c1746f339aae2e2e2fae598642a389da671482128acf2d69814258d83de98f186468136868b729aa5f0874fef2ff2575a1f87439d64e049e4d0637e9c99ecb7275417af654541306615f30b75a6caaa563e4790dfb28fe9f0e7881ea2d885eefdba99efa7f878925ce7d33e86d888154a1b03189429fe20af8fa3a68d65ced9b690a709031121425cfcd7e1890ed9614f9dc3ecbd0e38c6c84e453e3204978ddc1ef8d7fc6cae28c61a472d8e089e23209f0c36e80c994af771e6505e72ba90e5543f6bad6dcd31fdd468b13533a0254e44797825764ac1f63747d8d6ca019ff16fa732068ee94be382c46b168050ba725379df31a98ab81ec8eb266a3c3f2e1cd95e5f12b3bc79b8b435e4d94098c6184631cec57e9d8913458889223a2a4541f34d2f9df380f34c3e541fc587f0a6cf08c82e99476060eb84709a292f4c7a8551bda3a9eb6735787dbb9d7f1e83937c2e0e49f2cf6e0ab0ad84c40fbafc3c7e61886a8629bea816972fa0afd0f617b6340b1af19e341875e97565c8eb0b25fcf68696ee674d2abdc29396bfd0f282543d2b72a239c6470f76d3b5bff6d1d064e6e2d06f9deef2aae8a259c034373efc820f9a2fdbce36cc27f35dd6386de3b49509d0c305757257f8674d958c580a09e768c0f6ef237416fd53c31511badb2e7cdfee636508482f01899e72052b46b5d844799cf94708520178cfec2b61c8980fa7dfaad8915b0b75ce6eb57ed4a01edcb4a35c1dfcdf8d60f3191bbcdfd522a0e321ea41c2cd87a303522d0f98b82dcbe53232ecbf0e2528de7e1be75569584bf2ec574687fde67ffe9827ebbe78f2e5bc4fb368f3c9b0f588c97f7a139bd82fe86eb605b8e29cee75d07b510da1b24fd62cd2fb366f1621e7dbf268b15937f7f7ea4acf6e615775a32c90733769996dd2c5aebe08ecba73e0bc4781d33971992b2764c1b08aa972859cb61b003406479423254a01ea85a348ef249d408157cc0962d1e24cd9c426e6e6a3784dec6fe935be1f6730b01e8683d97e21d8774b2e2655f85db7149e930a44524d4f86004cd687d8a528b6ceadd890707458cab62809110ee28f61a7277ed79dc41e573fd4a59fabf15393ed4c21bf4d5138ac843e80bbf5e1c39ac2d7f2147f35996eb51a9e835db63faaa196b8aef1823ad72523fbfcb35b5560582a48a25ab770e7528e4b3ef291e6f62f5fac916e2162b3b56304287e46839858daf322b0de083d1691d6bda44d66d085ef0d0ad364eebacdd0a43a4456035e58910d0b2dacce45b1c0beabc784f3620a3e4390c345df6117b86d4fc386523b7ceeaecc21233a2865ec6b63bffba6689fb3323402119db8f0665a4730b2e26ca6411db04f1bcc78ce6272159ed2665a286f1ad7758d6d90090a6fd320e697dafbdfef575077e282b825bd64a4dbcf92d1fc0c6f795154e8466ee4b318f2d44b6f81c52523ab68ff8367e01090c2623e00b4008e784049df873a35c29e0abcfae7acbf27236adba0b913d19a15b4af4996669aba4c656c317084347ca962ac8df15cd2f849f522016eb92de4de62944b917d88200ef9aa2def0d13e5f4ae09d2eb4a2d0800af1d704cb01975f6d59768a2b50e39e78116147fd6dcdfbc08354c1b4033bf6772fa127856a4072556a9f07bd7516d01ef41bcb519005c0a3b2a04400427ec033f1b52fe5fdc1aed8e2521fd0fff663e203defc39d7546281a98a502b8a470af16cc62a6581c9985d7ca516864b799fcc55a803ce80711484f6b81591d2402bb1499c95dfb1dee9846679c22853be87c84b4547138dc4fd46b4e79ad12773a5392540a595954112f0cb1d9be4d4eb3aaa4286b6c01520558d58587d9d7f0df3a0282011ce01c9c17111d10ad61b3675b1826c1ad37fc562bdde951b43f890555d6f74ac4fbdb9abbe8bc1e80bb6d52c13de8960a3ff8f65201265e82981dbe39e0d65cf3f1fb6c56e11f9786210383d0150a5e0cbbdb52ca8b2bc45c12fb572657380df369082685b3de9847d5014beaeef815d63e203cc911061eb53d89a312d187f9f02760bfa71083fb643f5d8c324c410070b7ebde250a185e7359837899bb1568a43fa3418f39c12feb03b148b924bfb98b99352b1fbad3f07ac8e4302f85d1fe9ee4bf7507972670ff8beca105cdeb037f1cc4f944d6ca869d0281653de5ee93a7362420fdba8b01a375ff08fe27873655953ec1c00f53613c6ab8b244e2fc1b6babdca5311428d06f57aa4882dc870165deff75ba877dd2a04d1799f26ebfac97a1be53a83ab77dbc2cd4aa45bd779f61b1283eae1a1866ec8a9c150dd0a4deceb2ddea1bc0f4206cd435600a8f190b999b952337d9eb2bdeb3aba2cb2e7000319056629dc1f00901f0880278509417223a3ea0919fcdcf12bff0771c7cc725bdca292068478ccb2e1f35ae8964e0601789a73e7e7c1769ba53f865910fc3d0085c922d7f7849d27b6e7503d521371351f9d7dfd5afc5df0effdf6ac49617fa228501ad72154a73e07781dc4b07765dbfa721d95cf1dc41e161cbd34fc7883a25e3ba6b03e504b2c3b98c8b12ff629b965c2aefc26d74faff7f784baf09c3fc38c487a9d1f5818261162f97e9dff70cf42eb5dbcd7bebb66d68f26d917ddf2a3efc0db1e3372b170b4cd18da507e44c467943f73648dba74db1053b53f989e481c3054bac22c6342fca2c26d30a859a1312e9c353bf921f68136de2b1589747bc765153927c31ebe749dcdff98b5da84c4b66085451b4c87fe1ba2142f98636bcb268c33f7b8c2b96a6525298814578377aa189dd73d5bb27ec5cd2110d8751c18a3110273df2595d4c3a00809bdeda70d86c4a8169b7010c9cdeabfbc3dd3266518226d0ade9bcc4825f18198c854de329fb8fe456dd3bf35d89bd9d2384f3f3282f6872351a18a2f852bf173ea4426de6d01b3ef4b4685aa82df7dc45b99617a8b8c8a0c65a2237b3eaae8267e1f6c453f485432529d973924a080f6a1cc2cc18f804f53209383ce3601ad9361afc331707be1c88b4370404cb7fe0bc538df04adc5c8d9ced94b4c474b19619a53dca3fddb434cac09ce10c0293fea04e8e1b19fd3ff3d174baa988d91cb604fadc59ac0b61f4f87bfd07eee20f7f3ffd96766dd6f3555cd48da7ecd71d2fef34ab082678bfc4dd007669b3fc7a937a5a46269baa7e4e4e43eff1b2b847ea70b6c6c23905d6fb2fbccd944251087ac00c35c2eedba30641797d36ef9d3cb1afc0e3e8930f5b605a847ee77106995bd44047294d04350194369c5a7bf246d1108e1d18d9a638be0c051f695ce86579db613cd8922e86c683c91800b9a34fe6339e0dd79472daa662f78f04f0151a3acd18f11faa4e1216222843b521fb998c8490ab8bab27fde36395b456501307d07b484b453b189fa339282a634af30fea99c9af8f877e61871fe743238b2cee6cb69dbd17d574b5106ebe4b0fde4ef42fab469a5ba7d62c23b67d857f1af6ac981c320db70cdbb6be41bbca60bb7a159ee1c85cb82e0a220064359c06c660b75de6b49839eea68c80283b75d9d627aa4500c0c0f21edafe4a2cf7ee079d5310479da06ba58b142614fe69cb236c51447d63db31cdff91485b46325c26d40dc6d608d46a5e2fb01df06064a022ddf6d5cce0147d5b2a5aba5f9fadc5e778010a924e00a13e21daeea2cd330f45536ef4f42c2e77be00bb53b3f9a93d3eb327dbf30baccee5d26849cfad654ff3ef2b035b78dd3ef42de3302e5514551a968a205b823dffb040ac9452ae3efb43219b02436d0761ca11470405510e534d56caeaacc40eaf9c47a39475adad266f5ddc813e71223800dd46fa7c02b078353f870049806ed7ba57b40b7c3c6272296667500c4b97dd2d7026698b6bc4985bc01be99e0097013a2632c71740888ffaf902a02bf644b38cf9a42528880d9dd142de967cc2ad3e1f1737f0cb8dc5c59c252496e8cfe4e53c82f4a28d9ba2bfa62b6415ba3e5e09040d7f3e3abfeba53e46575e8817ac5eca806ec8a84c7cf77c9fa86c9dd2940f5b96b25a92d4a8f894d4717c8f80a62a35a51d8511f1e822fd79e6fc27cc3f3097d9e3272447de6f223971657ded9e660ee4f8836359742ce7616fd0ca2de6656c71b212b34b8edc71ff36bc84ac4af58eb1adcba4b2c0cb31468dbd2c2b7ee6752981ee1d152c4e4a9b25b2ce87796820def34b662381806d2e4fc77f0b69d7a87de43d94d62a6a6526a7f8c588392890e96f9c51bb58b4f438eb5d197477ce9b160d1c898c89ab408b3c1d648be93b531a5bb4988592c5a8999ae3acbe586d947fe6dd507cddb92dff4974ae17ab99aad5aec9d07b96bd29489876f51afa67570e86b69321d9e565d86001514638403f86666dbf93f18e0a62bf65db333bb85a3ae12d8411aa3c2a423a29bacbbfeebb8a5bafd90436bfded16f992232360211086a3084d9fd1980dd96631820a2cf25c3ac5c19d164cf5ab9a852399491962100ca4fd640146b7ea5460b4fb9e46bf8d23d508a4eeb8a3e9fad8249ece3648c2ec7705a7414eb8e8d602549204cb437f589161fe40de1447d14efa4d738b775d0333526c845cef5ffcbaf5c957df1d8022176b56eeb198e7ad2dfc3d7ea46b125ed432cd04c77efc011a2dad8573345080d7c3cdf5cc160fbc86c4ee1959ee1b8258056b0f3d9343c22dbb2f7858c5f162f08cffdca1acc866aa68e5f1c00b74f66544e8a61e429335adf6f73e32fa87e48e1adf15bb6c7aeacc93713dbc31cdccc9b0e52f922842679494039c395cc1d95eb97ae4df3bb8aba9a2584d97a236f87cb22f00c0a078b045044a5c456e22b2b94a76a559de2672c880660f9785b76bcc2aaed780e05212415c6e73880ca110654ed155a1004af45d5f15ae8e5bfd4817440c5d3d5589eea2c6c344ca0d85d91460638b37f877ea4cbbed35ea75678ef2335a5922cc8541987cc256c8f58045028d33a1c4899cc32265c619ac782ff998a478996be6a0c5b102a664831b395a884f18e77885d860d6b236c52a8066d2ced25432bce79a31b23117f405ef4ebdf3517de98d288f8c3baf04b63b6817c46c14b646308e9f97170b7dbbf9d1a36480338d8eb7466df56feb6baef42cba75512954fd7e33961d247b7393726e46c6e94e156d5776a89ad3e288554470ca0bc4cf4d2d2b0c01ae4fcafcb65ccd6ead03df1d4d6577bb", + }, + { + "228eabb5ad8b4ff13b10d13b27372bc2152dff149859ba47d9c89b741d4a5340d8fff5858a4576c55547007d7e2b3f94583ea8f0976237712bd2e5481c3988f5387e7ac2c3f18718388795b7b2d44b0a13f3faaa55311b800301c9203a511572cf8f349280bbabb9424070f415bbfe28aef8d20329ee842cef4d4c299e619b6ef1cf00718aab2accec9ac00155be2903b6fb07dfe98b0bd8d8580176b99ce4aa6be51cf59046c17ce1817d363fa63af5a241d48bcce064a438651af102ff9c6de4b86374fe24f1dfa66e16e51550dbb791af425d8fa601c70c1bb90e1a557bfe0dde730b0364eba9d2018ee751699ee219e13fa8874070935b29a1767e1d748bfbe796fe4b81a71e823605d39fa4b5b885f4610c34d1a090fa4106785e7a035a629958ad1b00cb9d36d171d575268efa1bef064fc0a6dfbae8e532466035a0c2cef96fe9f93b872f0cf804811e927b39818189412868fb104e2d56ae62f77031f0df1ae91aa11826991ca7b8af22f130a47a72cce36ddc319b32dffd294f2e192e490249ea1a6f8437173ce6392d16dda888a98bf685bc91b89b8ee1eabdfb1806fd61f018d1744fe8b03521de4bff86d4a811ca2ecd5be668e9c752a6c26aacc0cc9dd89d112785c25ca6a0a7a5267b4e37457c04a0626c8a29be30ec28ddacf47a84918bab164d07bdedae62132ab04a6f2c4e108eba9ab878caa4a1a7509521d427ad7f3dfa86fae8345dfb5e0d46ce3a94dec84f7880c7422468ea74fe0b4825b8c762b34d5d9b82ba96e0c7dcae01718ccac0044a87476ff031e3ee3c2c13f5f375a841d243c38cd9a354b6525527de1fe7e36a6e2ad95e5bbc4c97e85f8cdcd5341da777e03451838807d5dd2eb4fd15976783c140e21cfc2eb3e58e40c16374de0aecbe3e3d41c64417a472cba18762080a2348ec3f441bf229a932ea0ca7c816938655d0c81b14dfbf86aa600d0c68172fb0046ef51f601ec89309d43ad1eacd583f9d205bb1ff1a37a97b44b5e35be4945f52897eb2a74645b01a7f82054cda44e9fa9f9af9bad1a235155718713bacd08d354f3fdd95858db0040fb551e9f93ae399d5dc53a67e88bcd5a02d104dfd9d824cdd5fe262ed9266fc47b7e640f2c9d9c7a62c6d24b429fa55560aa254a824a0858482e771144d6d5b05539cf71d75bec3a22be75655e1ababec4dff9472a019f6220067374dd49252282e4945a407084633ef9c88d14833bd95335107d36afdf56a642cb739bf0a61ed53a6915baed78e9d74166ebc492b517c7c594fe6564550bb7108f43012551e65fbafc0a9874e46fb64b5b7aee0082a5d617a43b8bf9473309c6761aebc7f13b72ed460b522a6b0875b67353c705f99d1d9dc899870fcc90c632aba1fa9ced6d7a2368dc4dd3d4b38a5807415e00de6b9ea70525a6c1b67d04521efeeefc6c591fc5256d990a1123522864a029430bb7ea00dd80d283fdd6d61cc5b509221e28f73386803d97a38fb0182fd95b3b91353c6eb60ef2b3d5c8c0ab8dc9cd9be2b4cf69450d00e88cb0f0bc9a4be82b71148a37237ceaf945ab94c365625f58171eb15c1bb244a87335550d813d28f241a3296520046e65aff3291555786d7c871ec8a2d10d4b44429041c3cd6ab60f0def742de3d28393c5aca92b150697ac15504ee66d8a2aa01a6c63d7c719d6d4f94af2ed1d8670e3231a0e481095e425e6231c43ad36e3b7a3478f6a61563f5aa13237beb8a891dbb29013c325f7f91c1b055fb83c436fdf8aef49ec457946e6ab7e955427373fd9c743acfd4b9609569b591ec79c7ea7276de103a35a4a8a05c91f59e04689ba1ddd570b18ed046f785d7e4ff9fce7115ac814fe126f781828877208ddfbb2ebc919e6d1f6eb417f38bfbf22ac9633f75e58e560b85d88d0e4fad9b2e68c9ebf9675819d50c30c8982bbbc2f41e02690390bf0e16979b24e648bf15b18800aaef58c3c465f38cfd1e47bf1266c17b69523b7868d2138cb95c4bce0dd3ceb7c2267b868b6e12888d5a489fc0091b295b56a1c328b54fe1119aaf1e6d7dd52fa450b52fbfc8b84c2200ebe209060b655cad288562786673121691809366af37b76567762d1fc24f1fad3128b43c8d10e9b6954b2efcbe40124fc0a5b670dd6dd544e30263a551825282aa06be3817a8eeacf31ca8b25cba011d60b78d3d2462810764e4acb566ff371005f5481c9d36c991527143af2c44cc8cfc59c920bb4a281f2ed4d494d30ba4d900edf59e23be2f763072255cb6f1e8b24ab1d305fbfb2429cff8bda303617c034e71a17230d0e860420dbcf9fea4ab48557e4d50797179496936ec6c97686fe6d9115809e14069244d251d4bc9c8931e47e06ec051e709ba1df526b55d959b37a6f3408833aaac80cfc9cb99915eb7d83e26998f0da2492b986fe0f5047b2cab6e6d33a117df21e6a8ec7f394a3712885dab176a4d6095e5cf75dbd3f0077e5e74b1ff8b902072380cf172562884de852ff5f07c55856224fb3df8eb44764ab9284944b86ab6f176a863cdd0e7ab5616a14692f6cbf41bc63113b27689fc2fb145736aaf2a5b26d2bef3a2a59ef8bb3f3e4d360a4251d0736482e9ed7e189fc48c0973b6649988228c2ac72b23826a61cfa06b11f13c8555be6e433d87e20113eb74c94f0e51719a7b38c59eba300089d06b9bc2a72017668e5aa3153ca4282718f1762642e7c1be1f865cd9b65c6387c8fe496f1e60d5acbb78c2f71cea1f35dc955b1e7d1cdc9ca339765995d9e05dd729cdf58aa2a1451b633c374e5b6c2af1c8486ee4250a875e80e1f359c15130eb1e2575c0c7badb2af61378527fa24347ebb12c10bbb36e3c94619556b2c641d0ebb691b2706cdd667f55b8fff8fb46e3ac72f3682661a4bac2391075ff5145eb07d69d77437adec2d096c1c89208ab3e7a9ea6a0ff4a5bc1846b3683bd7c6ec4520c3c95861a5856b0191e4221c9819c67273c66729728f6035e79c0dae8842df4c0c27ada1ad18b34efcd55b94ef120762e87e8c5afdec80d5788e83f0d1533cdd7aea8f27f33266e007b274f6d48c59bcfad607e8b298be2b17322be88558c60033452826778f167f318b660607bfb2f285cadb385399636acb8f5350d819511b5e7931c5f8483529d3ab3fdb5ae2dde0ada918f1327c6c0dfbbf5ed3c8afef171910dd0169022b3cad5b08084dd5e8eb8ef1ecb17e48bf69f80e3db0ae1cc7b73d94b89696e3c3443ecb4c7ca12568201744d1858d90ff759f2d264d49edf47772bd0e0990c14dcf8c8a4c2dafa44dc6e92f4c66b03bdc4f68f28ca2d0811a433e184cced99a8e5614ca83c46ec18b47e0c7ae91037ae06c6d6d0f3dee19711c21cddafb5869416d23c5219296acda7774891877f3f8d46155d39f43ed10500ede3afa26943b83b800b54a9752250ec6ae173e920002f365d692a9b3a2f9b27124ac97b8e81b70e8c0bb7022d07ee97e962810962b03fc019695b5399f77aab414327cfc5dedd51e99453179c42ae85a42f8e06e0cec6f937224dd019c77c5a0ba32ad08107216a9c758138b730bd5b5f4b613f192839514a8621634d9dbd5840e728c1ef4a2c8bbfadc376dd80d13dcb327ce55ab536a43b570789f5c5e135ac0af79b54232613d0e989ae695aeb358c671ae71d508b58a793e19c58c3d204cdc9a021ecc634bcb0bd6a1917554ea3bd688adab8163260a914fc01d7ce05a497a5c5836cf9401cb6aa35cd008470bdecfb97a511c905badd01bbb4d0c05867661debd2162beeccd52399d5a70a929405293916f33ed0d03f8b850f4bdd77b1fb6283118d71de629577383c81cad086f4099ce7476cb787f73c96431a0df4156f7826fce9045f7e7c97bbfd618b845595203cdc8df4638430fac74a07bc5f773486731d8ad29c06695704cbe2882077a85d543551b7ba81b181ccb93d2b3071b1a38f3c762b42df8246aa64cecbdc772830ac79e766fa99e8c65225f28297a32526df9b51227bd368253737f013ae18435a912bc18cc4a95216ce449865e8bd8bc759dce9d4af52f9e789eafa37023e91946952202dfb7243cab7db2f9f98bb66f19750c547a2bf2e2ba92862ab66f33fcf465ffc41d23f0b891a3b28b3f68ea48dde6ad4802902abd22b0d7d9101bd61471c5d88ee9d9477b7cf9f6ac52e0f520c79278da22938745446f1e647ae478ecba416b941aa31f979d0633efe72910bebb8988de1d0013616f31c5da163eb6c07022649ac57422627a5642618f53103adc9918f9992c5b085e10d2744f9934bfbb994a710d6cd387c325e94278f97d5582864f1bb29a1400aaf674ea8fb99a3b42e4ac50418fd804a5b1471eaac4642d4aa338fd3d5d0dd84372b2c32c5cfe7f319acf731a9787b048cedee3833300dde639cb1386c8fbca4bae8d67fb7bd72d1696a0212e27e166e6b04a79e34b47c98502ed0bdbd8d61777537f72df569fe5ed30071b57e8724e98ccb88c07f0458cf32298cefb6ed672b255e581ac756789b57e950d57174bffd3f47bdbe4b168e7e3f1a6df508d4202d327947facfbf9526a9e5fc1a5abb179902d4584deae6cb2900391e080d3f3540b87c3a873ccfaee5b4aaff0e6516a867ea00b4d5e680fee6b91defc65c240614a1409bdd0f49c2c4f3c1d258d77abfc17a749660f49547adb236730e5a7a22fbbabdd8ca079a8efa5b605332db12f455868ab67a1ffd27d1339bdf8d150189cfbf6199c6fc27c05788138a63267eb8ac086e27286b4ef99ee9d92cfedab5ce9916675f128f206a1733f47a597232067aa12da20c7b9cab6575d7634f8c31e9a29948b528681f3f9c13b9f585ebfbff8c28a299a43e4409b31b6c02a79eeb493734fe5f9c1d9e3830572eb54229b5cf525768f695acff48c76b4a6e0936b7406ab69f06d33d3f04946db9d7966ea6e8c50ede5abadda28149edef5223a6938d5c32933070d234043feddbd65c81be218f9d7c497a1ecac30bb9162e60a9bbbcdb4fec4b212050610e2b376aadf58b3c9207860d2650d0310ae6606a8f1b266b6a13b68c3306ed413224abdf19371bac3ea1b964f28996fc70f666ff118c6a7c9f2108d327f5145919c03832f754de35f5979ae72130e39126499037d6fbb3751cbb4843b05d9dc91dd5fc1429da491f72e3069313ea243933b47109af247fcbe0c70f9024ac5a41815655ab309fcaa282d03596ba59cfee0e40f7bd657689453e98d562442fa4c585f970b6983a581b0b8eb1c5e780b3f5c1abb326213c6b5fd440c2187066ddf55f4eabf88804139392c45979440c6f05b7222bd95e963832d7fa4a4760273cc075e8b8feeccb917e8feaf7d3f766d9ae880487e69bc01872ba62b91b8af5dbffdd93fdc95e8f47ed793fc070a5991f2e9ea61439662dab218f643c1959171937aa160008a548f51f87b58f2c4fae5aed556f26bb9cd1dc2b3518458e2f5ec5d974c6e11a0ed639958cc8c1db771cc8cc8bee8727bf6452f47c9782acf548856a0e67841c3dbdb1c98572a4fc8e6cc8195a504019b4930d302a90dc20d8628ae6c90e0206cbb3d05025744db4e115cd3b650e5519a1624acbf226ebca8875b05183b2584e65289f8b9cec3f7d010cb9671a0e80bb70ca8763f1722d79e8decb6b9023baf64b5981e745c06546cc1e", + "ade72c2ea29cf829ffe99c2d63840b2eef9b51a9919c02128347d2e88e9f063b86326928cf6252ce4beefbae7206dc61a22d0b33c90d464d551835e3b73c1e3d6e88663deab80c35a607e4180ec079b0ee84e3b7922904e7423acaf976e837", + "43348cf32211d7daa300de8a4218543c8e3c7373ad10950765c39760f80b733c", + "e4709d225a552e90fb357413", + "562050bfb40451f27b1181c389508550a0f46b53d14ca73143da9dae3d3d2b466e9618db39e3219675d2b6eadded7dd9c741d7c9bf3c5619a521189607acbcf6b3964d469d966fa134444aa06d80749c873f0f976e0c5efc5be8d00a2729f03eda6a7b8630575df8b3a19388ff88daf0d00bb3e7c35a525ded90a4511ce815fe6c8904406cf72d7bfa14ca533566f7b54268835285c5402e22a63f98b5d90c86dae0a76d65eacc1ba85b3f5a1499d5f3432dd5455fab9e8bfbd266e99283c2bddf9b556410956b2f061603d1fc91194766f90da841699ba7da3d53ed5abdd8e98034f8fe734446d92b458a731aa4c578552ec1ac5d1baaccc4153a67b48a290602d5f955d61a08436b27cfb0786a80afef76e1266310a42d90feeb3bcc40ae5c4506432dcc92f7e5758ceaf277255401f5c5f4b10df93a249e38edd9effe7bacdf7fecc451d3b2cea77c9bab0403450c41929775b8c0ace46f6928f4d9cf3adf86832d298ea32b236d3201464e2ff506ef01da0e1e389e26e2b3ddc553b369b48d1aa5dd43edd5cab065e276aeff72a4c43206063fc7eea3bcc783ba2221f5b615a7a43a75cecda6bca5aa159e9208bf66af61e2e465c2daee630c4c62077ea6ef0e8b4b4e272d4e93a5f5284f9da463e1a60f815a8a31698ecdc09dff2b62f00e37aea5fd4b07a110cef27e12466c1814d3b10017cb9b8e12f2f38f10cbe31296de2570d5662b16639fcdc05db81e0d48178d055ef873501148d00903ec771400fa4873c5579dc3265028f531538f6dab1e5607a15c8b90cbfa4835107cba6f453bbdc71d08c7e423f58b44be38a9c8a610469f2551ee6177edf639cde35fe8e02f76b7ed106d691a876a4fda3b42d8ace3e0d3d4e026206c5d7d4d56fdda9dcd30fd7b74217fab3c617903f1aeffb8363443ed128af94c391810e327704d6f655e57dece97658d41e074029823850ddf7c5937af41c64465046d8544bba65c691ac69121bd272107f7eef8cfdb6a25da5da16d1033cede09129d51f6abfe63905a6fba9a64d7832fa35825447150595a60163af848eea878fb31a5fb97b1859efbfcc8586eebce8cfe64386461a9b88aa5efc1db43c64dfd5d4a45aa74803fd178f9e16a3f59acfb6e13a564d645cedd73890d0a82fb6dffeef527694a7cf2a89aed9750c3675a67505bff77de8d046087bd39a85c90aedb085e99baf04c7e3bf92e350b332da1b8af85550a00d68904ca426da61add864496d6ff442bb0b848e9aa463bb0c2085cff1a83a47d6f702bd184cfb5c139752754c8978d27b58d364bd88722b9097ee3a6ae28eabb14ca7c31e40461101e92448dbbc63b55cfe56efd078d0058c5e6146c73bcd949c4b3ec9f881b9a5f7b41ca83301261e0c674f2d35d96761baa00ce0675c082bf73dc52dc726a3e605067569a372d2bb47fc8fe1e74f00078ce6f352a6d9d97fd2834670ba3a45aa6751eafc7ed6694e1e07542860c8ea516f296ee901a3ee16b00b40419c74bf6db12c7230325e85a918f412bc2f6469c1a13a5aa77f028e327749efd05b91053f49d9f1edf49aa552c58c68257233a168db60ac55b4086ddaea275b078869cda7b69493c4b371b4e9c8361357a7ac7d3d3bbb464c960addfa8df2b208b21b090d540c440241598212d33273203d484e0930e22469c2a8e866579a4a2b3db8f8344dbf8baa1b97be0c4d976f6aaf14cc09ec52630139b894b2b6f4dad3a205a7b286253f1522b1d6e43bfa37beaf06f831c6f0945cefb2593b9b298da13b0d910582086c5d7e256ed4067bfb476dbe01bcddb437d46ba716d6ace2ff9912c8e460ad33ab3d8f97b7b08dd4ba9e01968d1949ff85b4b9d5b8da291fc0f90ab1eab1d246f67d76092b7a37528ceb388dd76f8a8f0aabb7490f02a2c8bc6498cb26350d859c466dd611bf0ceb81a8b7899c67742c22697ccee21c4963acb003d15c1a2078112bab05595917584e417db3872a0ff0a29138bbca7314449b19827525340370d7e48fdf9f7c6b4a280e78d00775a291081a5e78e7a00ff915015dd5af5f0a45690baba8b1b503bf85f326c23136f4424be4a559aed03fbc81400ac27a33dadb2155d1704950d98043dcd86df1eee78f3f266c4d14deb8126708f74b59aa15e8b497c6a52924a473f999aaf0abd3d148fee8503a1568efec7bfb0bd463402f563e4019cc9c9e1eb498aa54dcb659f43b86df0a34de4e51ec558bbbade3d69511d3fea2baf44f67e85ada7398d7f72ecadcd9e981f82b0743ed74bd33088ba4cbc85b0c99dc5382c599706dd2d51aa9f470c25a98e7e8248dec216a155495630662bf6ba0b7a4baa2cdad30e9ce3e1a65e3c23d69d5f946606ee8504dd70830aa5a8ddd84f10e064695469727d2efeb46186c9d3b7a170057636f05b9ec4c2de7d935fba504a1e7eddf7a5a95226b253b0b9eccec976ca3c57599850db40c27a51ae755c1f30d392467cb74e5c8235861d11d0f8461b0e1d84f5718d64ea92da62f4de184a6499dba473e82b3d197305de0e494f118a263237c7b4c0652327977edb427ccded35552c00a5804b9557ccf2bca2484d9da2c33f6c1bbf2c666ea10b4644a21e3905e5c4eb417ac3572e783428d23dd7222e75c356b99e8183d033034e29e618c90e66ec2f1e9fca47d82c1cffda8ad14c96045159d9437e91ecef41d24cff89009ff57e18c1a422860aa9cd31dd2a85b07422c72a5decc614a9742e62a4988f394421b6918e51c2412d749bb53b1e8fed7b2ef0873ffe14fa77bc366bbd5fa1432be465f5e25266c6c12b55df1f19b1a491acfc5c9019f122c422243d751d8eaa8ff721397915171556e999b34425f7d3ad6f6c3323b8133b4618c65ac16cb5941edc979472734bdccafc73c08939c0b1e306ae3015faa9cfa09ed6560269a1dc54c2c046a12a178144f4381f7b6fd3fd2d28f778d444d9f7a0dae00ea96c6969b78ef326a962d23275f1518f0e6a2469440612f3710b53538fe99a6179471be8c5b2d682ab3e9a5126e41ed6de000cd9e92fec3974e0f4cb2d2245d03d6ee80d6a793b16efa829d75c796f34d4e918250f457703559bb48ff78f0896be1bda403b7f1fd6a319d68478ff70d88238f2b8afc7d20e51757bb9db3bffb35a8040fc0db913c4f03d48619af7fd24cb8986b3e139058be3cc253b3de9b3bb3f8dab7b8818638279b2e6a0c29cfe16fa7250d3c74362ffa07e2977cf562140fe28afba8f61d81f7c73bdd4a2faddb00752bb049d0a57d05c6475c7387e6716ee31974169930c9fd830cef138659cf56f2212de185186c3d683fc6b7fd36e7821f69d0de041a569765066dc4a1934870a7b80f174e8f9e484942e62404a42b21658467873865ef94fc262c231527f39e82dfec91215947b99567daf75c6a28073ee4e67d4307e4b35b46f85433abd9812f35438b34598ff3b6dbd60b60747ad64565391df45ac80b272d0141702ab807fa27c6a6ba2f42c3facfae0c773940cb2943bb1353b41298258bc0d07542b69483e17ab9ce709e4160b80a0968dae9af8fc7c0324c753ca4a11a6df32dfa79a87b445c988154bb3c503e6884cf6d8f5e062a16b4ff230fbda109a6127d35e3bf2b29bfd3b18ba275af773b1981d603300035e046ef023d51874aa105d136bfcc9c7323bd0513a6b2b397ffea71afb7a8d4695411d86164917099eef504f6cff3c5cefb88f23f56c4ae3e2b09a3f353fa55630f45f06c29e8912e8c3c4f493f25eda781680585580595bba43dca9cfd400d9eaf5081d2c6697da59e012dfd0b875336b88fe16609c2e9876737b9afb868ed52417ed0c6b359d582d585ff82d98edd4e63c6b65cf43d4f69eee2af4819157b8a433966953862d1ff2c6d0cba382644a1b0033ddb7be3d1fa9a204042d7b821b293bd659dca980c108ad1db740800b9bd2fc1a163f9b4066f7604f160a7910bd947cb48ce6c81e680fc6571ff0cd12a3ded9c8cd560970ca5cb480a70a8322d5072edcd257604eba8dcf55f9ec97ea2b14fdcc72fbf615131836fb14e42b8d7171d0a06d2fb3caec2e0759e86b0d8f21e312d9211ed7fe0b48669934ffb892baf1db9aa457c07820723e5446420334bf6479f2099e01ef8adf273adfdd9ed0b741931284515d69c211cc2efead8339e450b13be71b35c36c1f00c2b8ed0cfa9792e422912e14b5b1455ef6abdbbec0035480c6cb69d21321d12ee19d528dd48f43b142cf0502eae5304ce52b7fb827552db9ab885b93e83d56a33346135aef11b7e48efca7cd52e2499a7edab0bd0562862187ff4599b2446bff11c37181092fbb05d0e05220ca6bc37f529d6599e8c29acb9f25616c27df291d4fb07430188e6470df7002f73cfe5fe6907dab0b4f90bb58130fe90241c29c6063a22c9f45d032b282eb92c93736692bd5cbde2a17552e942b595b08e6ba0c91a03b9079e9117fbba8f26ce6c5d0500c69bb6e22e3562a50baece49109c2d42b6714250665afd0f0a7e951182012f21aef4b917cd434d9ca22661437608e32666497516be34652500def6c28ef8f56f2273de5416142ce9606faf7df92ab779ed6aa74cb99bb1bfe758ffd344e1d31f479807326d1a7b98f6811e275545d69198707b0fbf027dc6a5e4815d62ef191535569a452c27c4e25ecf139df949d70dd5935bddc04f33b2f0bcf5073c51fc51c15067963a20569b5659f0e7413b347d6d5ee38a92b7e6e656c199149f07ebafe5281db6b1b2ecd9e0384b6f5a8e27ecea9a0249c61b16564964054f5f9621471a98de132e102f518c1419829e2ae2c8c5fffd1270f0a0b33a383437b0034783d50bce8bd7420c059d16364eecbd55b6ac8df8a70382734d8127f4f5895cc9e508b13c000ea053ab59b87ee639745418ffc566ceebad37a17b842d24d3423ac3f086142c622eceaadc4106f8c90c5dae1f52f407fa0bf1e6bf9385cbcbf3b61006ea3b1e66b693ce704577ca9598587f41e05d36d1de424e0e51290a5f2e2f99f1960c0253a046a49b19eef249ca2dda2af1e8dd78411088eff1e9c23c31bd20abd4fc9e7eab19500827d202f76270fe9f90e95309516343e0fca48e5a12182e91c78ebf2cdd4644629afdc90bbccb77546cd765135910ba1cd8a3e3c00fa77e585865e898bfecd06c01a0a4d7be483801099c61941c4967154af5620b171b426cf229df59d2944ba50754140c3f305c16956953be376fe6e7cf31a2e9c276bb09cc24c4b86b2b26f039b0d8511853adcb7feb8502e7641a34e3242bf2c538006bb1983345ec3cacbf219ef10efc1681d52e6e1b1c60bb556b6b8a63d1d1f6869077841d1b816f3165a35833e33d39a8c6e62a2f7c482c395768fc6a0e3cbfc7a1a6d64da53adad66c8016f76eaa73df1b8ef83012ecbe75c92a8e39b48169433f951a539b28a034d5fdd00639a5e3e17ef14dafe869064d130c90c68be4d5ceddabed1bc94e97e2cdf7313f780cd6e175a9e3eba3eaed896fe464073fcf07ae7b5bd41d58c3160f66ac95a76fdaa7a8cbaebb304fe3c8f03cef927a1182ac2281c3b32378813b24bb99e42cb0774331ad78b74d46b8ce48bbf4ef8431a82d4240edfd61b910c38570ba0bfbd4a41665117e6d5f5a97908462e62d0b76160d06aa56cc6e17aaf4607ba8263648f2a0077e306c25486f5f39a75", + }, + { + "2f6210063cb3071b3d49339185c2cef8357b08ca826d8d1acd852540c16540f1c850f70404fe1f414853d3cd15a1c64a1cce149e3ca1b80926de4ae8438ad90bdad010decf2f201782f3e49794aae1b079f54eb59607bebde508a528927e346d4e444b1d736b34f65e198df2c36fa23c64f1f1fbf8b0b8ddb85d054bdb39b8297d0347f16f7be7cd9474c058e36294485386434b36fb28ee582e393367f15ce5f5a3d6641fbd31b331f10b1554a05da726a0f35c9b1b4af3498426b17582966a266cce452900f85af1046f45a4ccedca6ce02607fb70fa45f420f66aa38cd4c9f8a30e21a3067b940aebdaaeb7c77824a79e2ba20f26e70346dd6de96942b261e5c08288c7fe1cd1e9f680a0bdf8c46497f007a616eea95ccc17463559f8973eb919c68017e25100d9d1a196ca65fb615502076bf0b0c8bcc70ef22006895ebfa2243fba0791bae0625b762cc1718d1673948264454a200c58122d5e9b8b1e3eb05df8b7eeb297510e0d7dcf7f0be5f29f6756e4b177f109891e6825a9866359e35b10d20da7231bb5a0ea34abd0264b377d2fe9f420f27d3e5aa2e8e00541c46052966ef9b989ae5974e2054409507b867f647aa057f7deb19ac6929f0856005aec6e53a5f702fe6be403afed532b73d38fed73e6e551987f182a1e20801e7a6c8ccd1184cf0fefb4139fa166ca15395902ac40e7fed8661602853682a3b0ee307dffb44d0ea3012142a2880cb7c166ba6ea6a16c7e0882808db8023068f060e5ef1432fdb8331ffad6a7078d686d47d613e94291f1c4117e7c13aee4030fcaf223fcefdb300ed606b5dd931e4adbf45dc437eeb5fbff337812e15c15f026071423f6ef5305c559baa2ecd8ecc7cd498b043740ff3673774855d45d45fa64591d5b4970600ec91ab1b6f39d7dc0e709c41e49c355bd3b9d120ffb57095fb127bafa971a086135b917285794e83e9dac5ce76fb1a4aa4fb6b94a0dc3a9beea64b8817ec1e2b37af9dbd18ec30f2b6f6c12df1db6896c6c43b67a066038f0c4f17142b254f62c4dd1fedb950d07047919e397d06d033cb0bab6b61aefa6dee01720926b16beb9e8bc947dca9b8143b565da85d2dec182987838b267de9047f5b0d961c7971aaf54ae2c1e4aad61ff123c84e41a4566b2bd9e64247cf46b72a444d36bdced1a309b464ee5f4afe406eb68eb05ae51b76bf01b906c0ffbdeb440b11f1c9e3a4c3a809a1f7449047b356c663a1ab7f286a70d16141d11f2d151a4f06d422ab97cab539c1f9da09ad20c000c27b8fead5f0cc37329d466fa260aea934c154dc9c0a065df3d057a0f117a1c38321ae59226a8054f7d6b49a3753436c249838b0924f0e861f5627106dd8d3f0fa724a1cecda71d4a1267ed889b234ae4a7d5edcbc5d52cba389dc0152aff24d224c6a0f16dbd3b7f242807bf4b51a3f22690bdeb66eaa59e8766b3b265d784899d247a0ae1b58a06dd91c529e3691b09f9d9f55fc39afd4a00b0fc668880ef25a46a30861fba8cfd4b51262eba4138b41a2d13ddc71128c8c1242e49a51d6f49879fcfa7595ba4a4adcad3670b0b1b26382f03ff402bc70150f54bf513ba3e9a590e41b269e55616af297ebb3499e16cc8e46c0810330a602955553c0f93d668a1181a0bfd7021ad9a9f68ce39493b012da70a3dda149d0369f23f788616e0272efa322b6a54d804f340d32c890e2eb7b538f48f4c9293b584d22d0ae80d321607644271b81a76ac5b49d8e457069b0c3e909b8a222e3fa6016cb1e979e300804742f2005c68acb7b1849c088b3714c9c7af54e9de9390df0041c87924c8fa6b0aec6b6754171e059cba0d27f221f0b9d044a3aed8338dd8745651981e4b0329376f908b86ae9022699d495bbe3a148f7eb73d56eacb2e5e2180f63fcbfa680369f88eefa71f1210bc5b6b7b957f0a1437476a2112998033197673e470dbe7d9d476c97b95db8b5136f6cccc75d6e0ac1e4ace30e34e64fcc4d7e135b2c80e863ed701d3b28c25e982f1b5f8c895a4e6df7216c3c07abf8551a0ba0469c88aa7a08c7b5218a03b9b91f0935985373f65aa56286ad0e7ef2288a926f172b098123c136455b3a0f04590839e16bade7b6434a3cf048abe2612684c03dafd9cec39af508e63f07ea881014697bc24122058b5ef5d3fae835216d055f0cdf1dc06a12c95041d13ac9e15f235d11747f16ffce1cc3b8f508da520e395edd471f3759d8879ba9c2558b1188d822fd4739ed0546b0ce3bb9988db7c1dc8518ebbc62c4440e6e0653f917dcc13aca1864b71dbb67dbe7117474c936414e4f3cfab1f13eb05f3504484ce11977ab21ec523f97ba1b7ecb8fe384b634c30561cdb752fc67a2316bfa7e4d03f5f825d24a556a0460d8cfe0cc54a6f117ac52d553a5d1bb48031732716436675c5c3996b1939b127c6b0338bfaa29c7467cac9a127e455a715c9ce2b0c35a0d2f83a3d1273ee39399e6cc4980e610c752bd51652b96bf9cf34c7fa41fc9b13f5d55007483e4082ddac4675baa7822fd257452411b01de0e5e5da26e17539d64a89dd93c71d15a4c95b1a83039cb2d5f3f7fa04a817e48dfcbfb3de34ecb47f7592123caf27e17982fbfc8597af5b8aa6558f4e6c73db69328e47677afbe6ef8df82c3d1f0db6a108b2279f61822908d7b856432c32ac5ec0f3c53befab2a7ca356b9c2636f646b228b0a830d348be4ece2271814d477d4c73c0fb6e83a338b90ec4ef45cb25f7e3d6a014a9e8d2e8a6f55a383291a57f15667a73ea1daca31c7182523ca85a107efa2518d2f7f179ed4ba21fed479ef2be09669817133b2384bd85b155dfc1c4c9e6dd9ceecf06cc1ab8ebf7f07aeaae7441468b5471aed93f248a84f44c59be33274b11f651de010ab9f8fb24d3a99914e0147951c34280e7dd15ec196f9a4c86e55e7d373c7e31e6672d1b3ac6a45fa6c8c9088c0b8963d89f4ff1feea3e85cf9cf2f6c97128afd845bb131c6f62b3282bbba42745080fd457f1d3322058f1bd4be876bd01269546d1a853310b165926c1fd4e07054deb5d3fbe8f6007711d435994005aba95918c3df4cd390b165fcd139dd418ebbf661b6de57b655698a8a02ca8fad73e8c536c7110957c36e5494a831d536eccb97a2a9ef58fe58e2885aad170720ffcc57c7de601ea1cf723577a30aad8fd544317e33897c8b6c04e5191bec391ab990e197f10038c0726d371677e4a54c28d7ca5c6046e7cc4acde565b91f7f72af6109a0614160d3ae97e9257b8f71a4663b00c681e793cbb478306e97b0e04711eae7722b4845dadf2fff5bbe71ff24acffea2ee67df99bf62a098ddae9d4ebd3bc5dff04a2d9e3d1d83e8f493db3f63c9e24231b1dbe1147c79f21b0730c842f6983330c5c17dd34556d7e932074cfbe98f2dab5b0ebfd778a1e28fe2bac2d942f61a08b787ebfcdeb3d600bb130ca4922a4ffd38ffc4a1a1a7218451e45da4da67ad81ef898ece3d54cef877cb9d09f5dcf72eccbbc06e62f1e2b4d64059b0a807329780b155ce1614b68de04387d6108ef4dd3ab54b9da72e528d6eac3e16a360ae3421f3f23808a8b5e8ec3dbefcbca3c9f76905850033d78d9283bba9272c475b4e3b4d7643e62c2cc259ebbf168f890de88e82f8b26a7654ee31fe055e45609c70ae02b4942ee15678cd158f4c9e8d351d102ddf7a942458c6125e1457bea0d86ca38cf0c26e474b2b5cca77eb57ad0867cad7d25efc2b250e79396637ea3e948dbb855029cc9b452955bd04ad5a0d0514d4d773c0f298df7bc235a3ac64383a1fbd8a397a158e936b3ba81895a51daa89f51e4ae7a71a53794ff715a42f4fc3dcc9fd56df7bea4ab782534d3760e7b15605fc4dad16911656983c0ab77bce9445bbeb1537c55fef57a32c8f1404306a0a2ca7b73348cd99d0f9948875531cbb0ef7c036cd201614c33293d746c44140e0e8f82421c5bdf2bf428b249597df949fafdb5ccfe1618323f56a6ab9abab9a84a3beb6696ca918af244d34cc1cd95bbca4a87c860a0fa9ff6a04a905b0338a53f230bd5ee9c60e0e0332ca200c15dca0be5936b858d0a7b2e540b8958432e9767396c55d5cc35b60062580023b5cb2f9a5e9a1feba59a19f9a5a251e9d0e8500955a5df21da95213ced2260a2ed8f3d4b295c36cef750c89cf21985c302d5cc577aab7855409a912dbcf1d0a9800df4aa692a78607a40fd6d5a82305c58fcb3d2a82b27e8c5b91681aae62a2bf31ed55c494dbdc38eba30e83c6044945df76705228eede8470369f2e9941ddcb2f239fb3ff6bfcdb0efb5ec50f981adf0e8b213769ffbbea364b08cf8cd69abbfa2a6fe9865cc48558134a57bb5526b9d047e14a379d246de82d3d64f3c810ede280c768dd8bee25af287d5a8d94045ddbf5981382bc716ad9aedfcd66e0ab496172a24efe80649db8e1e83675fc8451e22c6564d8d6dfb285af7fec802b35f19dd8308c68952a11770247fcfecc4ed0e8a445c17b1573f0b4e3ed350f13269ceb572943fc435563459d5044699f1542335b03be6077af156b8c5a6a9f71078ad820cec4642427a9b187ee1b17036d5a5e6108cee8a7d444342eaec3afa64e77c71d3c2b3153d4e2dbb30df2b66b4d14cc45d3a4eda7e911d697e5763e23ee05311a20626df55549b8533c6ebe79737abf472f9cff08bec590943bdeb819d3f923f45b81f9a0cba1f3f800a261842d10cb4cbdba456c7fe5f0abb4a8b58891d97cfd6b669e2708922f1934809d51a1589e5f12e3bb82c9ac3e7e44e3f6e6cd63d428da624fd2f46eec38ff798a90d228efe50c9b67c63796347c8a2b53478f27605999a03c8e1f18b70e92419f646a7f49670aa12d324751aec17d0208fc296955b3098241189af8172d39a6819415cafb107c1842b369f174d6f37dd31cd728dfd0ab10f93609006342b6e4d6ccbfd1ed2bea2fdf5411442b04b1fe218916f159b20242f80b535b4e0a3024c6eff6a40bd0d3db24e51f5ff9c14e1b4a650ca4170ee70f0a3a5a58349a7d0b7a63af86347351696870b95231f76d8c5c6a20736907726341dcbb76672871d18c2157c094b929fd29d34f5bcaacd82706f89a60000cd341d98eb830b73a12335b69f3e0131ded3ce12c98bbd960d2d0696d40696a13ab43925374498d868cd8f070c9039ea6407fc2d92b9c39fe7c935bbcfcc5c0980952fb7dac79042951f49a1af828b138a87401c4104bc28cdf1e39dbd3fa63dd4d5f5ae9d85f032a43ad353bc5e6746e5a76326ab1f4e79103116ce70bc0b459200f32f85e461291e347dda92e421778b849e37a3ecb0b31ec6818e828dd3148dc74313aba43cc9d8b9a36a9dc4e229488060eb6c109f8ad6201958adec6d3bb3b04e5e558a272d44cb98e18f7a0ad8fa6ac3667a62f150830aa930f6166baac6b9081b44304988fbe1698a5b746255de26bb5988aca90bb6523cad68a7572f615f4aa58f932d8a749615cf0a7724e99de042268ceb31433e6df0a61547d576a6201b36b348c028ded5f7e94d1cd2eafc141088ff42cb3dafbbe4c402b93aa9d955df8d9d9fb57c75ac65c2c837acc44bbd4d4aff1888aed46c73d625ad7fff035e8ca0fe411c73ed8135b6b8e17a039ec74e9de0d64cb442bf8a676c0a666f68f21066332cd921ae0ed766f0516a8e19b82cf98e78add0373737a3419e13aa902310c44feae5fdf8bc64e80dce772686a31f141bcce452041bf545b908ef4a2b000e7beaf378e2afdccbbcaa42e330e5024400cf2852d3444718", + "fd5008477b0855f6f2486fd4f74b9fb4f6e19726c6996bc66893183bd76054d5b05c1c2b64722256ba912ab2dcca66d2abfdf972966438fff7513acfb18ea461eac08c4e32aea4ed3fcf9f1c9905ee4402e7b6984bef974340d212f160b6524b76de99a98d3e96cc0d35e8a63ad7ea3cbea1d40a906c4dd03e5fc19e1513e9", + "390a5e75c9ff4ad38fb6205ff47f209294337c1f25ff54a3c01eee8e1e220257", + "8bf183347ec1ca4bceff3374", + "19fa2641519e21293094e9d767ee1237f9e0715dc57172794867c3bbe2cb647f9b28a8d3f85c0ff557b91bad66f5ea16e0107757b0277fdd3ca05bf47c19bcb92a958a57e8c142a51af29bddb20af84377b6db65f77494e0dc4d2634a776b3a5d777319873bc0dacbbd4b9ebccfae849fa7e9769cdf54660ecca0d5cf4fa5190713726d54d02b3a3f21857125b8a808c0ca2f99d11dc430ed5113ee49ff8f00bcc08f0370dd510e8100e1285659a7b2c7457a6049f2af7786c4db1471ce5bd164e11c7a2165e83e03a135ae2b3429f82f677de044a067e99e0bda2d65a7270d629c00e1d528212d3aeb2896e58ee5145a93ed06a9c00705ad5c5988d3a192304c1d17661d45257c5d16799ef70771964435b12e3b2ee9d5b467c3b1992f45b7a59871b40d8daa1c280747ecb3d170257b91df1f549ce6d66455b5b6f60b7c6e95c92a67e20cffe8599ceb183de53f1dedfe19bae836447af8e053ba419660e0912cad064d6125b9e978e8d0d5f28f8a4e43ca3cdf2d4c0e9a11221d8184e9eb6c90761b0beac82d0d22793279aedb1c7db3632adbee323bc3bbde4801152694831abf5676979af26af7dcbadfba1cad1306b635840cbca76c558b37db0803b4c12befa27d16f21506b07ade4a838d6beba1816eb29ed5e3c4f132a752fc747bd9ba879156e87e6c1584e911da9f796e1fa4a055e427272559e4bd6d0f54b8257100f8a55d84c27b702bb1fe2f995425c85fd48b0a0610db5b39f7a5031407a12dae9f508b21b1378f14952d1beb2dea81d016b2d9b7f1a67b814569b69c0e619adea02a8683242d63a11d3317d060e5b4d85df5ad73127541ba5314715d187990735aa81f438f8b94070ec506ba536274d98b766c1694e54367891a602b99e370425b47a70b819277a249fa429c5bbd0530267f987e6022f25030c30f3baeedc0d13c95f3d5e4b2b87465d179a3a23b9f9e76a42ceea55226ce072f9488392f40621289124d786109d2498e74fb37e2ef466fe8bf3016d96e34204c32978775765aa80461cac48518157f86d59f6187bad4ee62fba1ddbe166b29452f4a59af1e057300c353440644a8e40ae8171ea028be2fa315804abf518847c7945e8228b7766cfdb08d3a3116b59aab8e94b6d8c8c9ef442c2dc7f923bc2cd3e5c663baca7dded976bf191fe36da16948c89c385fe71434f4aa5dd15fe0e925d2459e3b068b9d82a9cc8b8f9786bd9f5fef9baaaf2d67027d9bfd58bb2c58ec7c746b747ab62f9242e4b53ed14d6fc75f5280eca0de23717c97a2293826e19cc8eb47f946421516c349dc4ba49225b91e4e868874bdebd373700df1f3792aaa140597e58b88f90e163397dbad3941705b53d754e3e0c9003df836a7fb8d23f40362fcb5f3947a4281b24240be4ee89aa8e917b194f94345eeca224df0adc15f22a617b6427f29410bc48ea3f92216163785723efc36301d23ed52780c6fd7924bcfaa03269b13582b7c7ea9c0e4a451f38a469fbdb585dcb7c81452da77945ebe27eb26ff6e8c7b2decea289aac5af74746dc257c9bea44a0847f02c4f586e1d76f39d5bf952355a0875f177a666d1d354ad86ce5ec0aba2c2b20cab050eaffd31095395132f5af80a2d2d53b77bda49f948bbb37bdf31c8a690476488e14e542ff6841e7fbfc2eb84795696562d079dc1612274b6dff362567084f793f0bc2dd8de23392d05aeeeeac6991c9f74387153a4b7da94790375e336a00c8293bad0fcef2dd1880e7094e2e53f738247c860780ebe308410ca02ae409ae720e841f48c9677acc6e7d4ccd18c219c400f8b7e1257f692e09eaef96802b17a1cb7d93eb81d3bfcbc7af4cdf05b98e22556b3d1a8b56d6d83bb5f5724696f8f329839dbe477483ec3c09fa2e0628faeba1bf285c224bea3f6cdc7bbd768133c6ef1da14f248cc3b819b196588811b073a7291817bd1e89c65760435d8d17cbf9423744a92143e0f956e2977b39c54fdead5a57f3a04a0facca01bbf44d3b1fb9c4fa83ae1046985e3f26aa0a437999004dd8adc04c5111759849f919b93558dbc559173a23b069b59f800096d9fcf077c7640f59170bb9a6fffe64778bac272365d27ea62aa956559e90edd3f6393cc8775597bcf7d91990ab9511973d948324a27261059e93f4b5dd2f70caf12e1a08e0493cb05588618764391f355379578cf94dd33e616136eea997ec11c0d4ff064ff51a767e5558433a2e3a9a74c232d8e187f47b8cca010709eb9fea0dac8f1ea53bf18822e154ecd929c83b0eac366e30fffbd5ba6a46d734f58d26e7f5df538e18b3d827884aa857a680823131bcf30a76f1a555bcabb17b02b53aefad96fe76f7312da69719434c580d3ff1bcdcd594e6375935003d5d732cc577e11ea2abb1d04259f50aed4c3af9866e8c4a52a09809046ee330f05c4403acbc297a9416c5208fadb31ed4eb7a3b01b87bf08c75cf44c2b0df84df30872d021d6567ea649859268e5e1b5b6405e1b41e350a32c1af13722959c17c01b52c42241313b26b25995a1c89a53e248488724d280647226195746901929501df36d1e94815d7fe6c4ca2731f3181293217f71b9d7f59c2474856972013924ae4796db4cbd22d8905a6043c959941ca6b556c53d1688c439036c715d33a47a7dfc2fe40e53424c5093020d2e85e4b04aa4c704ea5bfe5a2384878da38319c59d41d66b6add2a443d9ea11edd8d18fa41004251653857733b388b453943eb33df93dcd5d549757fa2967ef0f9a5105836c48826c47fcccb2d9bc349032b286962136b848632bdcf186a08cbeaa52d195efcfc3a440bac154971d11ff4994f293b14fb8c3214ebe7ab8b3d0f2fe0b03ed7b145fafd7730a173e3cc1847f0cdf2cf629f5ea81a07bef716b1a67dd9e3b7a52fea1aaa7a393f53b5bdb5988df78a57a9dad19a8253316835acab8a6b9a9fb42d97bf29b2443322f46de386fd82bd3453ed68e2370c6eac4497b1bde7b42d569c452f377bd38bd50fa5a6792ef5c9ec6c647001149b86fedb3e2f18d4271e9cc4801aa16ecddb31b6a795fecabc613bfbc8e4f5636d71e74595c841fd11b6a6bc7f169317c1added56b82a71fc36d774bb4d661685363e9da5fd2e1f357006dc5b5bbf8b42ee3f869e75a541586fba558a8f490d641b78c27368b9b4c2db046354e9358ae9140e91cd95ebeffc6c0d2676a3ff4ab10d463bf32bed97023a80a79df191ab9858c43537a03072a17c30b1bd99efbd361590ed6b7d5b0ec4e2326fa35904ab9a48596f44491cbbc0112890f9386ed04dec30126be359a05e99b2b77fa2c8f6b7460a6cd590d71c73b2a1b23312ff89306b6e41c76ddc0a099bfa79498e36ae5cf0c560b8854dff32d2b690ce0ac4aabfa723ac6f2e97ad1083235196b464ad67fdd649aec01695d55c8b4bb198f30630ca635aa5a1915f3718341bcfd8b522f764015fa5479004d28eceea7fe67df7ee24a97a9708d528b89589f1899f13242a0d00f7464c3cdfce213699340e754533b934f4a8410224e111f31cf8e54d7b5e90cd8c68bf96edbc8d183894deefdf4fcc1a83162a3f6341dcd9a9aecf171c0df28257a68b1af1b67c54c43c3cff27fed89cc64bc46e23a49ec74a9efbab7981d9f0a018247441e4f0f5b5f68ba9325582f92de4cca4a5f878a0c5c387581e64324e3246d8f3205c838a29f1abeea24446e496421f0e742d411adb55f70272ae4a992e825a3d327e44b8b3762b25aa451d07eb4eac0322b431fa676462632daba2aba7bdeee1b438f051d21d4b1897e2ac2f95ee7c23f9996a805de8fffb3b30b855cd6c5b84c011accf4bf94d304d944079f04b5cadf8fcd6751c22a0f9165ab98998b2d89e6514641f1f3b91b8c0bf057d69c3d893fc4e041e06a2229e2ee58082ffb58cb920972ede58483287d0ace94c1becef26a410b93e4ff402e61dcc574b790d49679f18f4e2004f8b7cc357faba34a80e56821bb5b883d1a8b49c6605002152f270bbc36bc79095644e29ab08cc988deda765d67e4fff12b726d5de135ff9d0cbd9d5f9d440e548836633b93a38330d638468b59a32642da3375cdf70b062d14b46a78569c24a706e179baa2058dcae5c61fb6cadd9e015b017f26e9dbe3e6366cf5f1ec839aa3bbb21dd6c9b8e910245fa95b09b7d6cbf08a4c6c84bef257a70389be962dad14d97a893c128b73bf6580689e540d004f21edf8403f36b1ad7c9a2e83ffceb141af59700c316c8c1e3347187f24819c2ff0c9f9a2360dce354f3374374eab1643d2d8831310a8e3ca6768200ea7759822b82f7027cd450479fcc7f6d04802b15735a137ad489f1e1ee78434a253a9dd16684ad58fc91960cde6754f82e8b38edd5e798fdbbbf8fc2e2380a4e21dd94f8c1c063b18f29d8cd8d89f65deac5640799d4ca2caa29c1e72ad8bc417490d11e4051d94956fbc74289857e5f8e9e87b9a2d83074a994de0b10bc7782f6650cfbdb8c835c81cd88bdce5f04ca939b3c5cd010d4dc5d51224fcacbca9851694b8bf55b22dead859d023eee5a7ad3436a912c3fc0284456d5d72ea5f1afa8545c856676ac2dd9a057028bd3ca0f50e7070fa74152f13997c95c1834c3e67504f1a4165d2b49a96919b88f72caed60f56ca7ab5a3204fb12ad3592c725fdebb048732fc189c7dfed185c6c184a626e07d7356860d00389862d5b9701eaa4e5f7889e6db0f54633369b8d26805c08471de8fc3f8fa1fb0b0711d9e015add5373f7f8b64abaddbac3399c756244b1b07c579d33e4967e5e0cf16de29cb8a7efad07ff9039ca305772a6e45c76bd9b77e24949556766a8b8425c5e595efb431bde4ee222f9eb3fc2d002a1e2d14db2b23135266c942eea33bffd30eb0218405373240e0cd3040436ca895093bf056fd001c00ba59d90502042e6e6c0167105051628895c8164c9ab959400898309cabafdef12be53604fa57df44e0a90a81bd63c331291a93bffefe809e80db0679568f6e94e0d8e2edec0087c35bcb3c4f4725e6013bcf197156cd9d90612423348123383e45c14d27d8833f56ddb04083c069fd6e282fe69c940840f5f747dfb72ad72fd8cf9f3ded15c9e2f4727fd60b4f40e95dbe77a89b47dde7d5326942600554905d9dade9d145ab6da802643f2081678392609c2fdd1b79dd8caec137cbed315374c6f05c0758070f3bb17e23d81ccc39c6aa89913897e487fde889c5aacd422278f8571641cc4f0a93d9768aef9e45d6bd187d1ba637ce0fbd3c573d6778cf7bf5188c00dcdf13be3fd599143952b376220283e34e014e83b214bd5f64eb0ecb098ae8bef883949907cc36e22ece60b893b963cfa73d120513e285aaf70ce5add34edbdac60b3aa7b385b90e339058fb9b3cf984b06f79788016035c5ce490f2de7995b98a8c1c9c80f29603ae2b7fc41886663163e604275cb085f8453b27f4d795b9bad19ade2f98a1c99b43a7581bd991e5d0e5e1a6e713acc522ba9fe8302658a9782558e35436e714ac6bc85ad1d3cd008f24106901fa954f5fefb61210d6f8dc9ff35c480f1d14e59c0e501917a31ee9d00c6bdb06a00af5a8b08c3928cc5f37476248223627cb77eaf0e96213cb0a13e97d3fe9b9814d462690e8d68d02655a32fc271ee73db4f88a33386ea88a5857e15a28d9b3e3a96f00c7cd85aa53f9282ab8c8ca6d6a8afed43aa87fe7fc1ad59b0f0db2dd25c20af96e8c282c19fc883ef01a4060398926a1c82f07bcd3bc314580d7636b623b7bad8ddba05850291a6344df0f346fa4a321a85ee3e9c", + }, + { + "67c6697351ff4aec29cdbaabf2fbe3467cc254f81be8e78d765a2e63339fc99a66320db73158a35a255d051758e95ed4abb2cdc69bb454110e827441213ddc8770e93ea141e1fc673e017e97eadc6b968f385c2aecb03bfb32af3c54ec18db5c021afe43fbfaaa3afb29d1e6053c7c9475d8be6189f95cbba8990f95b1ebf1b305eff700e9a13ae5ca0bcbd0484764bd1f231ea81c7b64c514735ac55e4b79633b706424119e09dcaad4acf21b10af3b33cde3504847155cbb6f2219ba9b7df50be11a1c7f23f829f8a41b13b5ca4ee8983238e0794d3d34bc5f4e77facb6c05ac86212baa1a55a2be70b5733b045cd33694b3afe2f0e49e4f321549fd824ea90870d4b28a2954489a0abcd50e18a844ac5bf38e4cd72d9b", + "0942e506c433afcda3847f2dad", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "588e1356fb8fa32410dad99cf7922aae47b4042502c92f3afe33dc22c1c2e90caf22bc37a254f8dd62a09582c70194f9616982639415178e9fe95740c0f1d497a69b69d4924a7a15290187f9c8acf09cf5b3b3188ecde2d2807207f5bb6a6d3504314b1b47684cf8ba8807eb9a3c497c79ebe1e4c1eca2aa90328563e201425227fca8ee05dcc05fd6c98128626c1e71d2fb3a21860567093db1012dfabe13055c48219d2a301c8a5a49033a811d8d9413bafbb2eefc177226fe578e93c2ef1f309416dc98843bfac387debb1b610b1d2366178ce7212a7312057a3d058357a629f18c78e129e60979a2310455a76207be5611e8b4b840629564020c17f5c9446882e23f610e931246ec434e62de765bf22954cfae02b2ff4b4086fbbd1b6cec23e45481eac5a25d", + }, + { + "67c6697351ff4aec29cdbaabf2fbe3467cc254f81be8e78d765a2e63339fc99a66320db73158a35a255d051758e95ed4abb2cdc69bb454110e827441213ddc8770e93ea141e1fc673e017e97eadc6b968f385c2aecb03bfb32af3c54ec18db5c021afe43fbfaaa3afb29d1e6053c7c9475d8be6189f95cbba8990f95b1ebf1b305eff700e9a13ae5ca0bcbd0484764bd1f231ea81c7b64c514735ac55e4b79633b706424119e09dcaad4acf21b10af3b33cde3504847155cbb6f2219ba9b7df50be11a1c7f23f829f8a41b13b5ca4ee8983238e0794d3d34bc5f4e77facb6c05ac86212baa1a55a2be70b5733b045cd33694b3afe2f0e49e4f321549fd824ea90870d4b28a2954489a0abcd50e18a844ac5bf38e4cd72d9b0942e506c433afcda3847f2dadd47647de321cec4ac430f62023856cfbb20704f4ec0bb920ba86c33e05f1ecd96733b79950a3e314", + "d3d934f75ea0f210a8f6059401", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "588e1356fb8fa32410dad99cf7922aae47b4042502c92f3afe33dc22c1c2e90caf22bc37a254f8dd62a09582c70194f9616982639415178e9fe95740c0f1d497a69b69d4924a7a15290187f9c8acf09cf5b3b3188ecde2d2807207f5bb6a6d3504314b1b47684cf8ba8807eb9a3c497c79ebe1e4c1eca2aa90328563e201425227fca8ee05dcc05fd6c98128626c1e71d2fb3a21860567093db1012dfabe13055c48219d2a301c8a5a49033a811d8d9413bafbb2eefc177226fe578e93c2ef1f309416dc98843bfac387debb1b610b1d2366178ce7212a7312057a3d058357a629f18c78e129e60979a2310455a76207be5611e8b4b840629564020c17f5c9446882e23f610e931246ec434e62de765bf22954cfae02b2ff7c59dfe246e4bb2d6a8afcebdc2beeaabf2a3f43f95a5ea639853f38719875ecdd2bbc0d81bb2a5ed59553b1e76b6365b74f618f685eb7731024bbf6794c3f4c7c5a1cf925", + }, + { + "67c6697351ff4aec29cdbaabf2fbe3467cc254f81be8e78d765a2e63339fc99a66320db73158a35a255d051758e95ed4abb2cdc69bb454110e827441213ddc8770e93ea141e1fc673e017e97eadc6b968f385c2aecb03bfb32af3c54ec18db5c021afe43fbfaaa3afb29d1e6053c7c9475d8be6189f95cbba8990f95b1ebf1b305eff700e9a13ae5ca0bcbd0484764bd1f231ea81c7b64c514735ac55e4b79633b706424119e09dcaad4acf21b10af3b33cde3504847155cbb6f2219ba9b7df50be11a1c7f23f829f8a41b13b5ca4ee8983238e0794d3d34bc5f4e77facb6c05ac86212baa1a55a2be70b5733b045cd33694b3afe2f0e49e4f321549fd824ea90870d4b28a2954489a0abcd50e18a844ac5bf38e4cd72d9b0942e506c433afcda3847f2dadd47647de321cec4ac430f62023856cfbb20704f4ec0bb920ba86c33e05f1ecd96733b79950a3e314", + "d3d934f75ea0f210a8f6059401beb4bc4478fa4969e623d01ada696a7e4c7e5125b34884533a94fb319990325744ee9bbce9e525cf08f5e9e25e5360aad2b2d085fa54d835e8d466826498d9a8877565705a8a3f62802944de7ca5894e5759d351adac869580ec17e485f18c0c66f17cc07cbb", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "588e1356fb8fa32410dad99cf7922aae47b4042502c92f3afe33dc22c1c2e90caf22bc37a254f8dd62a09582c70194f9616982639415178e9fe95740c0f1d497a69b69d4924a7a15290187f9c8acf09cf5b3b3188ecde2d2807207f5bb6a6d3504314b1b47684cf8ba8807eb9a3c497c79ebe1e4c1eca2aa90328563e201425227fca8ee05dcc05fd6c98128626c1e71d2fb3a21860567093db1012dfabe13055c48219d2a301c8a5a49033a811d8d9413bafbb2eefc177226fe578e93c2ef1f309416dc98843bfac387debb1b610b1d2366178ce7212a7312057a3d058357a629f18c78e129e60979a2310455a76207be5611e8b4b840629564020c17f5c9446882e23f610e931246ec434e62de765bf22954cfae02b2ff7c59dfe246e4bb2d6a8afcebdc2beeaabf2a3f43f95a5ea639853f38719875ecdd2bbc0d81bb2a5ed59553b1e76b6365b74f618f68a12d0f1cc99e132db9014100d9668c91", + }, + { + "67c6697351ff4aec29cdbaabf2fbe3467cc254f81be8e78d765a2e63339fc99a66320db73158a35a255d051758e95ed4abb2cdc69bb454110e827441213ddc8770e93ea141e1fc673e017e97eadc6b968f385c2aecb03bfb32af3c54ec18db5c021afe43fbfaaa3afb29d1e6053c7c9475d8be6189f95cbba8990f95b1ebf1b305eff700e9a13ae5ca0bcbd0484764bd1f231ea81c7b64c514735ac55e4b79633b706424119e09dcaad4acf21b10af3b33cde3504847155cbb6f2219ba9b7df50be11a1c7f23f829f8a41b13b5ca4ee8983238e0794d3d34bc5f4e77facb6c05ac86212baa1a55a2be70b5733b045cd33694b3afe2f0e49e4f321549fd824ea90870d4b28a2954489a0abcd50e18a844ac5bf38e4cd72d9b0942e506c433afcda3847f2dadd47647de321cec4ac430f62023856cfbb20704f4ec0bb920ba86c33e05f1ecd96733b79950a3e314d3d934f75ea0f210a8f6059401beb4bc4478fa4969e623d01ada696a7e4c7e5125b34884533a94fb319990325744ee9b", + "bc", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "588e1356fb8fa32410dad99cf7922aae47b4042502c92f3afe33dc22c1c2e90caf22bc37a254f8dd62a09582c70194f9616982639415178e9fe95740c0f1d497a69b69d4924a7a15290187f9c8acf09cf5b3b3188ecde2d2807207f5bb6a6d3504314b1b47684cf8ba8807eb9a3c497c79ebe1e4c1eca2aa90328563e201425227fca8ee05dcc05fd6c98128626c1e71d2fb3a21860567093db1012dfabe13055c48219d2a301c8a5a49033a811d8d9413bafbb2eefc177226fe578e93c2ef1f309416dc98843bfac387debb1b610b1d2366178ce7212a7312057a3d058357a629f18c78e129e60979a2310455a76207be5611e8b4b840629564020c17f5c9446882e23f610e931246ec434e62de765bf22954cfae02b2ff7c59dfe246e4bb2d6a8afcebdc2beeaabf2a3f43f95a5ea639853f38719875ecdd2bbc0d81bb2a5ed59553b1e76b6365b74f618f68d1f05b5662cd6e04de896d3ef5dae4149485a5a2093ff4ec74b20b5e5bf8e61b5c65515938c202beab3eea5a498d2f32d4d00a24b826b6efb16013ef54cbe170", + }, + { + "67c6697351ff4aec29cdbaabf2fbe3467cc254f81be8e78d765a2e63339fc99a66320db73158a35a255d051758e95ed4abb2cdc69bb454110e827441213ddc8770e93ea141e1fc673e017e97eadc6b968f385c2aecb03bfb32af3c54ec18db5c021afe43fbfaaa3afb29d1e6053c7c9475d8be6189f95cbba8990f95b1ebf1b305eff700e9a13ae5ca0bcbd0484764bd1f231ea81c7b64c514735ac55e4b79633b706424119e09dcaad4acf21b10af3b33cde3504847155cbb6f2219ba9b7df50be11a1c7f23f829f8a41b13b5ca4ee8983238e0794d3d34bc5f4e77facb6c05ac86212baa1a55a2be70b5733b045cd33694b3afe2f0e49e4f321549fd824ea90870d4b28a2954489a0abcd50e18a844ac5bf38e4cd72d9b0942e506c433afcda3847f2dadd47647de321cec4ac430f62023856cfbb20704f4ec0bb920ba86c33e05f1ecd96733b79950a3e314d3d934f75ea0f210a8f6059401beb4bc4478fa4969e623d01ada696a7e4c7e5125b34884533a94fb319990325744ee9bbce9e525cf08f5e9e25e5360aad2b2d085fa54d835e8d466826498d9a8877565705a8a3f62802944de7ca5894e5759d351adac869580ec17e485f18c0c66f17cc0", + "7cbb22fce466da610b63af62bc83b4692f3affaf271693ac071fb86d11342d", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "588e1356fb8fa32410dad99cf7922aae47b4042502c92f3afe33dc22c1c2e90caf22bc37a254f8dd62a09582c70194f9616982639415178e9fe95740c0f1d497a69b69d4924a7a15290187f9c8acf09cf5b3b3188ecde2d2807207f5bb6a6d3504314b1b47684cf8ba8807eb9a3c497c79ebe1e4c1eca2aa90328563e201425227fca8ee05dcc05fd6c98128626c1e71d2fb3a21860567093db1012dfabe13055c48219d2a301c8a5a49033a811d8d9413bafbb2eefc177226fe578e93c2ef1f309416dc98843bfac387debb1b610b1d2366178ce7212a7312057a3d058357a629f18c78e129e60979a2310455a76207be5611e8b4b840629564020c17f5c9446882e23f610e931246ec434e62de765bf22954cfae02b2ff7c59dfe246e4bb2d6a8afcebdc2beeaabf2a3f43f95a5ea639853f38719875ecdd2bbc0d81bb2a5ed59553b1e76b6365b74f618f68d1f05b5662cd6e04de896d3ef5dae4149485a5a2093ff4ec74b20b5e5bf8e61b5c65515938c202beab3eea5a498d2f32c38dbb37d04f8272e741da2802c54a9d9aaf8ecf38b36fc9ad0079523f6a4abd5281a22697a3180bc02662a7c13ee23599d18e5c48300dbb831509df4c172f53e524b3c15124a87ac73e5028cde6c94d8d", + }, + { + "67c6697351ff4aec29cdbaabf2fbe3467cc254f81be8e78d765a2e63339fc99a66320db73158a35a255d051758e95ed4abb2cdc69bb454110e827441213ddc8770e93ea141e1fc673e017e97eadc6b968f385c2aecb03bfb32af3c54ec18db5c021afe43fbfaaa3afb29d1e6053c7c9475d8be6189f95cbba8990f95b1ebf1b305eff700e9a13ae5ca0bcbd0484764bd1f231ea81c7b64c514735ac55e4b79633b706424119e09dcaad4acf21b10af3b33cde3504847155cbb6f2219ba9b7df50be11a1c7f23f829f8a41b13b5ca4ee8983238e0794d3d34bc5f4e77facb6c05ac86212baa1a55a2be70b5733b045cd33694b3afe2f0e49e4f321549fd824ea90870d4b28a2954489a0abcd50e18a844ac5bf38e4cd72d9b0942e506c433afcda3847f2dadd47647de321cec4ac430f62023856cfbb20704f4ec0bb920ba86c33e05f1ecd96733b79950a3e314d3d934f75ea0f210a8f6059401beb4bc4478fa4969e623d01ada696a7e4c7e5125b34884533a94fb319990325744ee9bbce9e525", + "", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "588e1356fb8fa32410dad99cf7922aae47b4042502c92f3afe33dc22c1c2e90caf22bc37a254f8dd62a09582c70194f9616982639415178e9fe95740c0f1d497a69b69d4924a7a15290187f9c8acf09cf5b3b3188ecde2d2807207f5bb6a6d3504314b1b47684cf8ba8807eb9a3c497c79ebe1e4c1eca2aa90328563e201425227fca8ee05dcc05fd6c98128626c1e71d2fb3a21860567093db1012dfabe13055c48219d2a301c8a5a49033a811d8d9413bafbb2eefc177226fe578e93c2ef1f309416dc98843bfac387debb1b610b1d2366178ce7212a7312057a3d058357a629f18c78e129e60979a2310455a76207be5611e8b4b840629564020c17f5c9446882e23f610e931246ec434e62de765bf22954cfae02b2ff7c59dfe246e4bb2d6a8afcebdc2beeaabf2a3f43f95a5ea639853f38719875ecdd2bbc0d81bb2a5ed59553b1e76b6365b74f618f68d1f05b5662cd6e04de896d3ef5dae4149485a5a2093ff4ec74b20b5e5bf8e61b5c65515938c202beab3eea5a498d2f32c38dbb370a9bbc3187cc260ddac991f94ce4f0d5", + }, + { + "0fb826ddb2eb5e708de203d0438be12cf708d635ebdbae56278be09077009586b9bc646ba7c2db35a5de05e86ae71461efea96dac64430edcf117d461113cccacf303576f310ab98efb180599894ba877e50614494923163a3afa9b4c2757f91a6b40799c5b331b464b10dfc45c783c317e408ab76390e19e8b7ceaa2c4d3bd201436bc6f69c7a5a4d8756924ed95665bd5e1034971e4d80d51b2a", + "026866d46aa940309fdcabf92a324fbc", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "30f05cf8189bb7b8b4f560e746e228c4cc7e86e8f2fa66e1afe212d1855db51070acd5eb34ce80b2e223957df50fde4c2531d97fc9e573725e7a5e47f0dfc4da1942620320bb2deaf8b17937bae4218d04db8e76f6efe84a117292159507c9f8a09fb2c17921d7762510dbf1dac7b62b1bd7572e3e2cf008d01c445c7fa78833235034281ae180e051451c6a64f22ca9708634bd0d604e4cfcd971b13742efa5b6363e662a875daccb2b00", + }, + { + "c7d4f8790e4c47d4daecbddf5939973521ddbf3b832e564afc66f03b5583c41c58bd956609dc3ae3c8f7c2213059575236168dba44e3044049f47c9e7840bbd0fd5036062d70e9f567ac1797056ee93c8476f6c959fa09a3ee854166c6fc36c34d6cca7adcb36f435f86db65f4c4a1793b974294914b377fd179e697751c5ac289243c65d8aca93732849c27483da083d4e218652d4fe5fec8cb953ee7f00070143dd6ece97f241b03c0424bfee2cfd2c4e738f2361df0ffe8863dcf763d408a7a167763959b7f985bc1e359a4b22c6899645ad0814bcf69d10c38474978d1c48e482723e3a6bb3f689f980c51c474eb28cfbba91a8a12eb964b32dfc303a3524ccb752f71316ed9d007e521cb5a0cf429c79d4351b02ee7fb60c7be636a10af3586dfa7b74d80875466a820c0b514e97cb12cce615ab55cba7c1b1de72bcd1cb1acc368f944ef4eaa986e6a4d8253c9337f9795d94df193c90cb0b0387dcde929905223d441717ed9dfe826613bf094ba872993d41b269e27d74e5f541b497eac9ba180dc12ffb6f1e7dc5223cce6dd541071282b97c6526e15b2c330fb41dc96e25d72f45c28e543053766d11d44252db54e584c14abbb295d7e5a58bf36eea1936095ef897a338eb1995fcedd85fc92d354dfe7ff9a115c186bb4d7a1a27835030d248c87571a38f17906cefe0261d15740b9", + "56", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "f89c825ca43cae1ce3fbdee85c505edd1aabefe69a0f9efd740f027aa7dee48a91ad24e69ad061648f0a52b4afb19d7ffccdc21f4b4247dfd89f5f9f998cb3c02b226173fedb6f8770aceef9271e7236fefd19fb3b87d08a5c587ac7918e80aa4b477f22602189811e270d686bc4949137a41d11d95ec96ee9d26c6126f6e923ab37638b34d1538d2e46d6df6216da4f193a3cecb731e632e109ced643056a1673059355d2d1314df35ded8364efed7de490201090a6f2d1751748585f64d26041637ba3723cbc4b60e226f10a19699d223075bc1f27d82e7f560c0db630ea670b3f8a70a8950894af4d1c7b3f674a3fa00d19ee4cc2b6174c1d259a297424bf2c3943a29a16a9830ce11abaa79cd2eb77b53a02b365b1838e7bfd5ae1bd044ffc885c61c6b2186a357e8b8f732b7ab96517969aeb70c7b493bbaca9462a61815a3c6135c748bf9c8487ac0631807aa69243fa09cd3b8efb63f8d4e090ad30b6c2f08bf4e82f191cedfa5cbe2b42268d67ecd105918181e44fc9879efd642d20be84e6f74717e03fb94fcbaa6ed3b307431d2a9384b8a2b3e5825ffce8d99af48f177e43bb4272226d8a5edd37d53807f768feb9e0733b437a1d0f84779ab68a1804e92a5eecca56364f0fa6dca152203b249fdc8fbd950fdc37c1887596308a90ba3a5751c7096bfbd1cb177bb17847b33c4379b43938a67674459cd9a06e3017ccac5b", + }, + { + "135a28170fe89066da7bcff3a9ccc1b27dfe942a6f47b23835ef746aaea63dc10066d90f4e697528e5451b8e11dd408fdbd4b94a1c6c82515bf7bc099df9cb9d5fa4acad0d22d5f267f18078cec107a995c1f3b12d7603886dbf910ab85ca7180053c50e759b00dc8c81555a425c03d71df6894a6c8cd2d94b64e303c08a1bc1dee1cf537ccf300850856292e1656aff5bf349c87f1ca1ca8085cd400fe901edcad04146a0714ef0f6b083d715edd670e020385f3cda29bc5ff6fc6edffe5ca9ce9def6e0e3d5f04ede2db02cfb2", + "73afd2ab0e0e8537cae42dc6530dc4afb6934ca6", + "a5117e70953568bf750862df9e6f92af81677c3a188e847917a4a915bda7792e", + "129039b5572e8a7a8131f76a", + "2c125232a59879aee36cacc4aca5085a4688c4f776667a8fbd86862b5cfb1d57c976688fdd652eafa2b88b1b8e358aa2110ff6ef13cdc1ceca9c9f087c35c38d89d6fbd8de89538070f17916ecb19ca3ef4a1c834f0bdaa1df62aaabef2e117106787056c909e61ecd208357dd5c363f11c5d6cf24992cc873cf69f59360a820fcf290bd90b2cab24c47286acb4e1033962b6d41e562a206a94796a8ab1c6b8bade804ff9bdf5ba6062d2c1f8fe0f4dfc05720bd9a612b92c26789f9f6a7ce43f5e8e3aee99a9cd7d6c11eaa611983c36935b0dda57d898a60a0ab7c4b54", + }, +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_generic.go b/vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_generic.go new file mode 100644 index 0000000..0f8efdb --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_generic.go @@ -0,0 +1,198 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ChaCha20 implements the core ChaCha20 function as specified in https://tools.ietf.org/html/rfc7539#section-2.3. +package chacha20 + +import "encoding/binary" + +const rounds = 20 + +// core applies the ChaCha20 core function to 16-byte input in, 32-byte key k, +// and 16-byte constant c, and puts the result into 64-byte array out. +func core(out *[64]byte, in *[16]byte, k *[32]byte) { + j0 := uint32(0x61707865) + j1 := uint32(0x3320646e) + j2 := uint32(0x79622d32) + j3 := uint32(0x6b206574) + j4 := binary.LittleEndian.Uint32(k[0:4]) + j5 := binary.LittleEndian.Uint32(k[4:8]) + j6 := binary.LittleEndian.Uint32(k[8:12]) + j7 := binary.LittleEndian.Uint32(k[12:16]) + j8 := binary.LittleEndian.Uint32(k[16:20]) + j9 := binary.LittleEndian.Uint32(k[20:24]) + j10 := binary.LittleEndian.Uint32(k[24:28]) + j11 := binary.LittleEndian.Uint32(k[28:32]) + j12 := binary.LittleEndian.Uint32(in[0:4]) + j13 := binary.LittleEndian.Uint32(in[4:8]) + j14 := binary.LittleEndian.Uint32(in[8:12]) + j15 := binary.LittleEndian.Uint32(in[12:16]) + + x0, x1, x2, x3, x4, x5, x6, x7 := j0, j1, j2, j3, j4, j5, j6, j7 + x8, x9, x10, x11, x12, x13, x14, x15 := j8, j9, j10, j11, j12, j13, j14, j15 + + for i := 0; i < rounds; i += 2 { + x0 += x4 + x12 ^= x0 + x12 = (x12 << 16) | (x12 >> (16)) + x8 += x12 + x4 ^= x8 + x4 = (x4 << 12) | (x4 >> (20)) + x0 += x4 + x12 ^= x0 + x12 = (x12 << 8) | (x12 >> (24)) + x8 += x12 + x4 ^= x8 + x4 = (x4 << 7) | (x4 >> (25)) + x1 += x5 + x13 ^= x1 + x13 = (x13 << 16) | (x13 >> 16) + x9 += x13 + x5 ^= x9 + x5 = (x5 << 12) | (x5 >> 20) + x1 += x5 + x13 ^= x1 + x13 = (x13 << 8) | (x13 >> 24) + x9 += x13 + x5 ^= x9 + x5 = (x5 << 7) | (x5 >> 25) + x2 += x6 + x14 ^= x2 + x14 = (x14 << 16) | (x14 >> 16) + x10 += x14 + x6 ^= x10 + x6 = (x6 << 12) | (x6 >> 20) + x2 += x6 + x14 ^= x2 + x14 = (x14 << 8) | (x14 >> 24) + x10 += x14 + x6 ^= x10 + x6 = (x6 << 7) | (x6 >> 25) + x3 += x7 + x15 ^= x3 + x15 = (x15 << 16) | (x15 >> 16) + x11 += x15 + x7 ^= x11 + x7 = (x7 << 12) | (x7 >> 20) + x3 += x7 + x15 ^= x3 + x15 = (x15 << 8) | (x15 >> 24) + x11 += x15 + x7 ^= x11 + x7 = (x7 << 7) | (x7 >> 25) + x0 += x5 + x15 ^= x0 + x15 = (x15 << 16) | (x15 >> 16) + x10 += x15 + x5 ^= x10 + x5 = (x5 << 12) | (x5 >> 20) + x0 += x5 + x15 ^= x0 + x15 = (x15 << 8) | (x15 >> 24) + x10 += x15 + x5 ^= x10 + x5 = (x5 << 7) | (x5 >> 25) + x1 += x6 + x12 ^= x1 + x12 = (x12 << 16) | (x12 >> 16) + x11 += x12 + x6 ^= x11 + x6 = (x6 << 12) | (x6 >> 20) + x1 += x6 + x12 ^= x1 + x12 = (x12 << 8) | (x12 >> 24) + x11 += x12 + x6 ^= x11 + x6 = (x6 << 7) | (x6 >> 25) + x2 += x7 + x13 ^= x2 + x13 = (x13 << 16) | (x13 >> 16) + x8 += x13 + x7 ^= x8 + x7 = (x7 << 12) | (x7 >> 20) + x2 += x7 + x13 ^= x2 + x13 = (x13 << 8) | (x13 >> 24) + x8 += x13 + x7 ^= x8 + x7 = (x7 << 7) | (x7 >> 25) + x3 += x4 + x14 ^= x3 + x14 = (x14 << 16) | (x14 >> 16) + x9 += x14 + x4 ^= x9 + x4 = (x4 << 12) | (x4 >> 20) + x3 += x4 + x14 ^= x3 + x14 = (x14 << 8) | (x14 >> 24) + x9 += x14 + x4 ^= x9 + x4 = (x4 << 7) | (x4 >> 25) + } + + x0 += j0 + x1 += j1 + x2 += j2 + x3 += j3 + x4 += j4 + x5 += j5 + x6 += j6 + x7 += j7 + x8 += j8 + x9 += j9 + x10 += j10 + x11 += j11 + x12 += j12 + x13 += j13 + x14 += j14 + x15 += j15 + + binary.LittleEndian.PutUint32(out[0:4], x0) + binary.LittleEndian.PutUint32(out[4:8], x1) + binary.LittleEndian.PutUint32(out[8:12], x2) + binary.LittleEndian.PutUint32(out[12:16], x3) + binary.LittleEndian.PutUint32(out[16:20], x4) + binary.LittleEndian.PutUint32(out[20:24], x5) + binary.LittleEndian.PutUint32(out[24:28], x6) + binary.LittleEndian.PutUint32(out[28:32], x7) + binary.LittleEndian.PutUint32(out[32:36], x8) + binary.LittleEndian.PutUint32(out[36:40], x9) + binary.LittleEndian.PutUint32(out[40:44], x10) + binary.LittleEndian.PutUint32(out[44:48], x11) + binary.LittleEndian.PutUint32(out[48:52], x12) + binary.LittleEndian.PutUint32(out[52:56], x13) + binary.LittleEndian.PutUint32(out[56:60], x14) + binary.LittleEndian.PutUint32(out[60:64], x15) +} + +// XORKeyStream crypts bytes from in to out using the given key and counters. +// In and out must overlap entirely or not at all. Counter contains the raw +// ChaCha20 counter bytes (i.e. block counter followed by nonce). +func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { + var block [64]byte + var counterCopy [16]byte + copy(counterCopy[:], counter[:]) + + for len(in) >= 64 { + core(&block, &counterCopy, key) + for i, x := range block { + out[i] = in[i] ^ x + } + u := uint32(1) + for i := 0; i < 4; i++ { + u += uint32(counterCopy[i]) + counterCopy[i] = byte(u) + u >>= 8 + } + in = in[64:] + out = out[64:] + } + + if len(in) > 0 { + core(&block, &counterCopy, key) + for i, v := range in { + out[i] = v ^ block[i] + } + } +} diff --git a/vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_test.go b/vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_test.go new file mode 100644 index 0000000..b80d34c --- /dev/null +++ b/vendor/golang.org/x/crypto/chacha20poly1305/internal/chacha20/chacha_test.go @@ -0,0 +1,33 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package chacha20 + +import ( + "encoding/hex" + "testing" +) + +func TestCore(t *testing.T) { + // This is just a smoke test that checks the example from + // https://tools.ietf.org/html/rfc7539#section-2.3.2. The + // chacha20poly1305 package contains much more extensive tests of this + // code. + var key [32]byte + for i := range key { + key[i] = byte(i) + } + + var input [16]byte + input[0] = 1 + input[7] = 9 + input[11] = 0x4a + + var out [64]byte + XORKeyStream(out[:], out[:], &input, &key) + const expected = "10f1e7e4d13b5915500fdd1fa32071c4c7d1f4c733c068030422aa9ac3d46c4ed2826446079faa0914c2d705d98b02a2b5129cd1de164eb9cbd083e8a2503c4e" + if result := hex.EncodeToString(out[:]); result != expected { + t.Errorf("wanted %x but got %x", expected, result) + } +} diff --git a/vendor/golang.org/x/crypto/codereview.cfg b/vendor/golang.org/x/crypto/codereview.cfg new file mode 100644 index 0000000..3f8b14b --- /dev/null +++ b/vendor/golang.org/x/crypto/codereview.cfg @@ -0,0 +1 @@ +issuerepo: golang/go diff --git a/vendor/golang.org/x/crypto/cryptobyte/asn1.go b/vendor/golang.org/x/crypto/cryptobyte/asn1.go new file mode 100644 index 0000000..88ec8b4 --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/asn1.go @@ -0,0 +1,732 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cryptobyte + +import ( + encoding_asn1 "encoding/asn1" + "fmt" + "math/big" + "reflect" + "time" + + "golang.org/x/crypto/cryptobyte/asn1" +) + +// This file contains ASN.1-related methods for String and Builder. + +// Builder + +// AddASN1Int64 appends a DER-encoded ASN.1 INTEGER. +func (b *Builder) AddASN1Int64(v int64) { + b.addASN1Signed(asn1.INTEGER, v) +} + +// AddASN1Enum appends a DER-encoded ASN.1 ENUMERATION. +func (b *Builder) AddASN1Enum(v int64) { + b.addASN1Signed(asn1.ENUM, v) +} + +func (b *Builder) addASN1Signed(tag asn1.Tag, v int64) { + b.AddASN1(tag, func(c *Builder) { + length := 1 + for i := v; i >= 0x80 || i < -0x80; i >>= 8 { + length++ + } + + for ; length > 0; length-- { + i := v >> uint((length-1)*8) & 0xff + c.AddUint8(uint8(i)) + } + }) +} + +// AddASN1Uint64 appends a DER-encoded ASN.1 INTEGER. +func (b *Builder) AddASN1Uint64(v uint64) { + b.AddASN1(asn1.INTEGER, func(c *Builder) { + length := 1 + for i := v; i >= 0x80; i >>= 8 { + length++ + } + + for ; length > 0; length-- { + i := v >> uint((length-1)*8) & 0xff + c.AddUint8(uint8(i)) + } + }) +} + +// AddASN1BigInt appends a DER-encoded ASN.1 INTEGER. +func (b *Builder) AddASN1BigInt(n *big.Int) { + if b.err != nil { + return + } + + b.AddASN1(asn1.INTEGER, func(c *Builder) { + if n.Sign() < 0 { + // A negative number has to be converted to two's-complement form. So we + // invert and subtract 1. If the most-significant-bit isn't set then + // we'll need to pad the beginning with 0xff in order to keep the number + // negative. + nMinus1 := new(big.Int).Neg(n) + nMinus1.Sub(nMinus1, bigOne) + bytes := nMinus1.Bytes() + for i := range bytes { + bytes[i] ^= 0xff + } + if bytes[0]&0x80 == 0 { + c.add(0xff) + } + c.add(bytes...) + } else if n.Sign() == 0 { + c.add(0) + } else { + bytes := n.Bytes() + if bytes[0]&0x80 != 0 { + c.add(0) + } + c.add(bytes...) + } + }) +} + +// AddASN1OctetString appends a DER-encoded ASN.1 OCTET STRING. +func (b *Builder) AddASN1OctetString(bytes []byte) { + b.AddASN1(asn1.OCTET_STRING, func(c *Builder) { + c.AddBytes(bytes) + }) +} + +const generalizedTimeFormatStr = "20060102150405Z0700" + +// AddASN1GeneralizedTime appends a DER-encoded ASN.1 GENERALIZEDTIME. +func (b *Builder) AddASN1GeneralizedTime(t time.Time) { + if t.Year() < 0 || t.Year() > 9999 { + b.err = fmt.Errorf("cryptobyte: cannot represent %v as a GeneralizedTime", t) + return + } + b.AddASN1(asn1.GeneralizedTime, func(c *Builder) { + c.AddBytes([]byte(t.Format(generalizedTimeFormatStr))) + }) +} + +// AddASN1BitString appends a DER-encoded ASN.1 BIT STRING. This does not +// support BIT STRINGs that are not a whole number of bytes. +func (b *Builder) AddASN1BitString(data []byte) { + b.AddASN1(asn1.BIT_STRING, func(b *Builder) { + b.AddUint8(0) + b.AddBytes(data) + }) +} + +func (b *Builder) addBase128Int(n int64) { + var length int + if n == 0 { + length = 1 + } else { + for i := n; i > 0; i >>= 7 { + length++ + } + } + + for i := length - 1; i >= 0; i-- { + o := byte(n >> uint(i*7)) + o &= 0x7f + if i != 0 { + o |= 0x80 + } + + b.add(o) + } +} + +func isValidOID(oid encoding_asn1.ObjectIdentifier) bool { + if len(oid) < 2 { + return false + } + + if oid[0] > 2 || (oid[0] <= 1 && oid[1] >= 40) { + return false + } + + for _, v := range oid { + if v < 0 { + return false + } + } + + return true +} + +func (b *Builder) AddASN1ObjectIdentifier(oid encoding_asn1.ObjectIdentifier) { + b.AddASN1(asn1.OBJECT_IDENTIFIER, func(b *Builder) { + if !isValidOID(oid) { + b.err = fmt.Errorf("cryptobyte: invalid OID: %v", oid) + return + } + + b.addBase128Int(int64(oid[0])*40 + int64(oid[1])) + for _, v := range oid[2:] { + b.addBase128Int(int64(v)) + } + }) +} + +func (b *Builder) AddASN1Boolean(v bool) { + b.AddASN1(asn1.BOOLEAN, func(b *Builder) { + if v { + b.AddUint8(0xff) + } else { + b.AddUint8(0) + } + }) +} + +func (b *Builder) AddASN1NULL() { + b.add(uint8(asn1.NULL), 0) +} + +// MarshalASN1 calls encoding_asn1.Marshal on its input and appends the result if +// successful or records an error if one occurred. +func (b *Builder) MarshalASN1(v interface{}) { + // NOTE(martinkr): This is somewhat of a hack to allow propagation of + // encoding_asn1.Marshal errors into Builder.err. N.B. if you call MarshalASN1 with a + // value embedded into a struct, its tag information is lost. + if b.err != nil { + return + } + bytes, err := encoding_asn1.Marshal(v) + if err != nil { + b.err = err + return + } + b.AddBytes(bytes) +} + +// AddASN1 appends an ASN.1 object. The object is prefixed with the given tag. +// Tags greater than 30 are not supported and result in an error (i.e. +// low-tag-number form only). The child builder passed to the +// BuilderContinuation can be used to build the content of the ASN.1 object. +func (b *Builder) AddASN1(tag asn1.Tag, f BuilderContinuation) { + if b.err != nil { + return + } + // Identifiers with the low five bits set indicate high-tag-number format + // (two or more octets), which we don't support. + if tag&0x1f == 0x1f { + b.err = fmt.Errorf("cryptobyte: high-tag number identifier octects not supported: 0x%x", tag) + return + } + b.AddUint8(uint8(tag)) + b.addLengthPrefixed(1, true, f) +} + +// String + +func (s *String) ReadASN1Boolean(out *bool) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.INTEGER) || len(bytes) != 1 { + return false + } + + switch bytes[0] { + case 0: + *out = false + case 0xff: + *out = true + default: + return false + } + + return true +} + +var bigIntType = reflect.TypeOf((*big.Int)(nil)).Elem() + +// ReadASN1Integer decodes an ASN.1 INTEGER into out and advances. If out does +// not point to an integer or to a big.Int, it panics. It returns true on +// success and false on error. +func (s *String) ReadASN1Integer(out interface{}) bool { + if reflect.TypeOf(out).Kind() != reflect.Ptr { + panic("out is not a pointer") + } + switch reflect.ValueOf(out).Elem().Kind() { + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + var i int64 + if !s.readASN1Int64(&i) || reflect.ValueOf(out).Elem().OverflowInt(i) { + return false + } + reflect.ValueOf(out).Elem().SetInt(i) + return true + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + var u uint64 + if !s.readASN1Uint64(&u) || reflect.ValueOf(out).Elem().OverflowUint(u) { + return false + } + reflect.ValueOf(out).Elem().SetUint(u) + return true + case reflect.Struct: + if reflect.TypeOf(out).Elem() == bigIntType { + return s.readASN1BigInt(out.(*big.Int)) + } + } + panic("out does not point to an integer type") +} + +func checkASN1Integer(bytes []byte) bool { + if len(bytes) == 0 { + // An INTEGER is encoded with at least one octet. + return false + } + if len(bytes) == 1 { + return true + } + if bytes[0] == 0 && bytes[1]&0x80 == 0 || bytes[0] == 0xff && bytes[1]&0x80 == 0x80 { + // Value is not minimally encoded. + return false + } + return true +} + +var bigOne = big.NewInt(1) + +func (s *String) readASN1BigInt(out *big.Int) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.INTEGER) || !checkASN1Integer(bytes) { + return false + } + if bytes[0]&0x80 == 0x80 { + // Negative number. + neg := make([]byte, len(bytes)) + for i, b := range bytes { + neg[i] = ^b + } + out.SetBytes(neg) + out.Add(out, bigOne) + out.Neg(out) + } else { + out.SetBytes(bytes) + } + return true +} + +func (s *String) readASN1Int64(out *int64) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.INTEGER) || !checkASN1Integer(bytes) || !asn1Signed(out, bytes) { + return false + } + return true +} + +func asn1Signed(out *int64, n []byte) bool { + length := len(n) + if length > 8 { + return false + } + for i := 0; i < length; i++ { + *out <<= 8 + *out |= int64(n[i]) + } + // Shift up and down in order to sign extend the result. + *out <<= 64 - uint8(length)*8 + *out >>= 64 - uint8(length)*8 + return true +} + +func (s *String) readASN1Uint64(out *uint64) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.INTEGER) || !checkASN1Integer(bytes) || !asn1Unsigned(out, bytes) { + return false + } + return true +} + +func asn1Unsigned(out *uint64, n []byte) bool { + length := len(n) + if length > 9 || length == 9 && n[0] != 0 { + // Too large for uint64. + return false + } + if n[0]&0x80 != 0 { + // Negative number. + return false + } + for i := 0; i < length; i++ { + *out <<= 8 + *out |= uint64(n[i]) + } + return true +} + +// ReadASN1Enum decodes an ASN.1 ENUMERATION into out and advances. It returns +// true on success and false on error. +func (s *String) ReadASN1Enum(out *int) bool { + var bytes String + var i int64 + if !s.ReadASN1(&bytes, asn1.ENUM) || !checkASN1Integer(bytes) || !asn1Signed(&i, bytes) { + return false + } + if int64(int(i)) != i { + return false + } + *out = int(i) + return true +} + +func (s *String) readBase128Int(out *int) bool { + ret := 0 + for i := 0; len(*s) > 0; i++ { + if i == 4 { + return false + } + ret <<= 7 + b := s.read(1)[0] + ret |= int(b & 0x7f) + if b&0x80 == 0 { + *out = ret + return true + } + } + return false // truncated +} + +// ReadASN1ObjectIdentifier decodes an ASN.1 OBJECT IDENTIFIER into out and +// advances. It returns true on success and false on error. +func (s *String) ReadASN1ObjectIdentifier(out *encoding_asn1.ObjectIdentifier) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.OBJECT_IDENTIFIER) || len(bytes) == 0 { + return false + } + + // In the worst case, we get two elements from the first byte (which is + // encoded differently) and then every varint is a single byte long. + components := make([]int, len(bytes)+1) + + // The first varint is 40*value1 + value2: + // According to this packing, value1 can take the values 0, 1 and 2 only. + // When value1 = 0 or value1 = 1, then value2 is <= 39. When value1 = 2, + // then there are no restrictions on value2. + var v int + if !bytes.readBase128Int(&v) { + return false + } + if v < 80 { + components[0] = v / 40 + components[1] = v % 40 + } else { + components[0] = 2 + components[1] = v - 80 + } + + i := 2 + for ; len(bytes) > 0; i++ { + if !bytes.readBase128Int(&v) { + return false + } + components[i] = v + } + *out = components[:i] + return true +} + +// ReadASN1GeneralizedTime decodes an ASN.1 GENERALIZEDTIME into out and +// advances. It returns true on success and false on error. +func (s *String) ReadASN1GeneralizedTime(out *time.Time) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.GeneralizedTime) { + return false + } + t := string(bytes) + res, err := time.Parse(generalizedTimeFormatStr, t) + if err != nil { + return false + } + if serialized := res.Format(generalizedTimeFormatStr); serialized != t { + return false + } + *out = res + return true +} + +// ReadASN1BitString decodes an ASN.1 BIT STRING into out and advances. It +// returns true on success and false on error. +func (s *String) ReadASN1BitString(out *encoding_asn1.BitString) bool { + var bytes String + if !s.ReadASN1(&bytes, asn1.BIT_STRING) || len(bytes) == 0 { + return false + } + + paddingBits := uint8(bytes[0]) + bytes = bytes[1:] + if paddingBits > 7 || + len(bytes) == 0 && paddingBits != 0 || + len(bytes) > 0 && bytes[len(bytes)-1]&(1< 4 || len(*s) < int(2+lenLen) { + return false + } + + lenBytes := String((*s)[2 : 2+lenLen]) + if !lenBytes.readUnsigned(&len32, int(lenLen)) { + return false + } + + // ITU-T X.690 section 10.1 (DER length forms) requires encoding the length + // with the minimum number of octets. + if len32 < 128 { + // Length should have used short-form encoding. + return false + } + if len32>>((lenLen-1)*8) == 0 { + // Leading octet is 0. Length should have been at least one byte shorter. + return false + } + + headerLen = 2 + uint32(lenLen) + if headerLen+len32 < len32 { + // Overflow. + return false + } + length = headerLen + len32 + } + + if uint32(int(length)) != length || !s.ReadBytes((*[]byte)(out), int(length)) { + return false + } + if skipHeader && !out.Skip(int(headerLen)) { + panic("cryptobyte: internal error") + } + + return true +} diff --git a/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go b/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go new file mode 100644 index 0000000..cda8e3e --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/asn1/asn1.go @@ -0,0 +1,46 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package asn1 contains supporting types for parsing and building ASN.1 +// messages with the cryptobyte package. +package asn1 // import "golang.org/x/crypto/cryptobyte/asn1" + +// Tag represents an ASN.1 identifier octet, consisting of a tag number +// (indicating a type) and class (such as context-specific or constructed). +// +// Methods in the cryptobyte package only support the low-tag-number form, i.e. +// a single identifier octet with bits 7-8 encoding the class and bits 1-6 +// encoding the tag number. +type Tag uint8 + +const ( + classConstructed = 0x20 + classContextSpecific = 0x80 +) + +// Constructed returns t with the constructed class bit set. +func (t Tag) Constructed() Tag { return t | classConstructed } + +// ContextSpecific returns t with the context-specific class bit set. +func (t Tag) ContextSpecific() Tag { return t | classContextSpecific } + +// The following is a list of standard tag and class combinations. +const ( + BOOLEAN = Tag(1) + INTEGER = Tag(2) + BIT_STRING = Tag(3) + OCTET_STRING = Tag(4) + NULL = Tag(5) + OBJECT_IDENTIFIER = Tag(6) + ENUM = Tag(10) + UTF8String = Tag(12) + SEQUENCE = Tag(16 | classConstructed) + SET = Tag(17 | classConstructed) + PrintableString = Tag(19) + T61String = Tag(20) + IA5String = Tag(22) + UTCTime = Tag(23) + GeneralizedTime = Tag(24) + GeneralString = Tag(27) +) diff --git a/vendor/golang.org/x/crypto/cryptobyte/asn1_test.go b/vendor/golang.org/x/crypto/cryptobyte/asn1_test.go new file mode 100644 index 0000000..ee6674a --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/asn1_test.go @@ -0,0 +1,300 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cryptobyte + +import ( + "bytes" + encoding_asn1 "encoding/asn1" + "math/big" + "reflect" + "testing" + "time" + + "golang.org/x/crypto/cryptobyte/asn1" +) + +type readASN1Test struct { + name string + in []byte + tag asn1.Tag + ok bool + out interface{} +} + +var readASN1TestData = []readASN1Test{ + {"valid", []byte{0x30, 2, 1, 2}, 0x30, true, []byte{1, 2}}, + {"truncated", []byte{0x30, 3, 1, 2}, 0x30, false, nil}, + {"zero length of length", []byte{0x30, 0x80}, 0x30, false, nil}, + {"invalid long form length", []byte{0x30, 0x81, 1, 1}, 0x30, false, nil}, + {"non-minimal length", append([]byte{0x30, 0x82, 0, 0x80}, make([]byte, 0x80)...), 0x30, false, nil}, + {"invalid tag", []byte{0xa1, 3, 0x4, 1, 1}, 31, false, nil}, + {"high tag", []byte{0x1f, 0x81, 0x80, 0x01, 2, 1, 2}, 0xff /* actually 0x4001, but tag is uint8 */, false, nil}, +} + +func TestReadASN1(t *testing.T) { + for _, test := range readASN1TestData { + t.Run(test.name, func(t *testing.T) { + var in, out String = test.in, nil + ok := in.ReadASN1(&out, test.tag) + if ok != test.ok || ok && !bytes.Equal(out, test.out.([]byte)) { + t.Errorf("in.ReadASN1() = %v, want %v; out = %v, want %v", ok, test.ok, out, test.out) + } + }) + } +} + +func TestReadASN1Optional(t *testing.T) { + var empty String + var present bool + ok := empty.ReadOptionalASN1(nil, &present, 0xa0) + if !ok || present { + t.Errorf("empty.ReadOptionalASN1() = %v, want true; present = %v want false", ok, present) + } + + var in, out String = []byte{0xa1, 3, 0x4, 1, 1}, nil + ok = in.ReadOptionalASN1(&out, &present, 0xa0) + if !ok || present { + t.Errorf("in.ReadOptionalASN1() = %v, want true, present = %v, want false", ok, present) + } + ok = in.ReadOptionalASN1(&out, &present, 0xa1) + wantBytes := []byte{4, 1, 1} + if !ok || !present || !bytes.Equal(out, wantBytes) { + t.Errorf("in.ReadOptionalASN1() = %v, want true; present = %v, want true; out = %v, want = %v", ok, present, out, wantBytes) + } +} + +var optionalOctetStringTestData = []struct { + readASN1Test + present bool +}{ + {readASN1Test{"empty", []byte{}, 0xa0, true, []byte{}}, false}, + {readASN1Test{"invalid", []byte{0xa1, 3, 0x4, 2, 1}, 0xa1, false, []byte{}}, true}, + {readASN1Test{"missing", []byte{0xa1, 3, 0x4, 1, 1}, 0xa0, true, []byte{}}, false}, + {readASN1Test{"present", []byte{0xa1, 3, 0x4, 1, 1}, 0xa1, true, []byte{1}}, true}, +} + +func TestReadASN1OptionalOctetString(t *testing.T) { + for _, test := range optionalOctetStringTestData { + t.Run(test.name, func(t *testing.T) { + in := String(test.in) + var out []byte + var present bool + ok := in.ReadOptionalASN1OctetString(&out, &present, test.tag) + if ok != test.ok || present != test.present || !bytes.Equal(out, test.out.([]byte)) { + t.Errorf("in.ReadOptionalASN1OctetString() = %v, want %v; present = %v want %v; out = %v, want %v", ok, test.ok, present, test.present, out, test.out) + } + }) + } +} + +const defaultInt = -1 + +var optionalIntTestData = []readASN1Test{ + {"empty", []byte{}, 0xa0, true, defaultInt}, + {"invalid", []byte{0xa1, 3, 0x2, 2, 127}, 0xa1, false, 0}, + {"missing", []byte{0xa1, 3, 0x2, 1, 127}, 0xa0, true, defaultInt}, + {"present", []byte{0xa1, 3, 0x2, 1, 42}, 0xa1, true, 42}, +} + +func TestReadASN1OptionalInteger(t *testing.T) { + for _, test := range optionalIntTestData { + t.Run(test.name, func(t *testing.T) { + in := String(test.in) + var out int + ok := in.ReadOptionalASN1Integer(&out, test.tag, defaultInt) + if ok != test.ok || ok && out != test.out.(int) { + t.Errorf("in.ReadOptionalASN1Integer() = %v, want %v; out = %v, want %v", ok, test.ok, out, test.out) + } + }) + } +} + +func TestReadASN1IntegerSigned(t *testing.T) { + testData64 := []struct { + in []byte + out int64 + }{ + {[]byte{2, 3, 128, 0, 0}, -0x800000}, + {[]byte{2, 2, 255, 0}, -256}, + {[]byte{2, 2, 255, 127}, -129}, + {[]byte{2, 1, 128}, -128}, + {[]byte{2, 1, 255}, -1}, + {[]byte{2, 1, 0}, 0}, + {[]byte{2, 1, 1}, 1}, + {[]byte{2, 1, 2}, 2}, + {[]byte{2, 1, 127}, 127}, + {[]byte{2, 2, 0, 128}, 128}, + {[]byte{2, 2, 1, 0}, 256}, + {[]byte{2, 4, 0, 128, 0, 0}, 0x800000}, + } + for i, test := range testData64 { + in := String(test.in) + var out int64 + ok := in.ReadASN1Integer(&out) + if !ok || out != test.out { + t.Errorf("#%d: in.ReadASN1Integer() = %v, want true; out = %d, want %d", i, ok, out, test.out) + } + } + + // Repeat the same cases, reading into a big.Int. + t.Run("big.Int", func(t *testing.T) { + for i, test := range testData64 { + in := String(test.in) + var out big.Int + ok := in.ReadASN1Integer(&out) + if !ok || out.Int64() != test.out { + t.Errorf("#%d: in.ReadASN1Integer() = %v, want true; out = %d, want %d", i, ok, out.Int64(), test.out) + } + } + }) +} + +func TestReadASN1IntegerUnsigned(t *testing.T) { + testData := []struct { + in []byte + out uint64 + }{ + {[]byte{2, 1, 0}, 0}, + {[]byte{2, 1, 1}, 1}, + {[]byte{2, 1, 2}, 2}, + {[]byte{2, 1, 127}, 127}, + {[]byte{2, 2, 0, 128}, 128}, + {[]byte{2, 2, 1, 0}, 256}, + {[]byte{2, 4, 0, 128, 0, 0}, 0x800000}, + {[]byte{2, 8, 127, 255, 255, 255, 255, 255, 255, 255}, 0x7fffffffffffffff}, + {[]byte{2, 9, 0, 128, 0, 0, 0, 0, 0, 0, 0}, 0x8000000000000000}, + {[]byte{2, 9, 0, 255, 255, 255, 255, 255, 255, 255, 255}, 0xffffffffffffffff}, + } + for i, test := range testData { + in := String(test.in) + var out uint64 + ok := in.ReadASN1Integer(&out) + if !ok || out != test.out { + t.Errorf("#%d: in.ReadASN1Integer() = %v, want true; out = %d, want %d", i, ok, out, test.out) + } + } +} + +func TestReadASN1IntegerInvalid(t *testing.T) { + testData := []String{ + []byte{3, 1, 0}, // invalid tag + // truncated + []byte{2, 1}, + []byte{2, 2, 0}, + // not minimally encoded + []byte{2, 2, 0, 1}, + []byte{2, 2, 0xff, 0xff}, + } + + for i, test := range testData { + var out int64 + if test.ReadASN1Integer(&out) { + t.Errorf("#%d: in.ReadASN1Integer() = true, want false (out = %d)", i, out) + } + } +} + +func TestASN1ObjectIdentifier(t *testing.T) { + testData := []struct { + in []byte + ok bool + out []int + }{ + {[]byte{}, false, []int{}}, + {[]byte{6, 0}, false, []int{}}, + {[]byte{5, 1, 85}, false, []int{2, 5}}, + {[]byte{6, 1, 85}, true, []int{2, 5}}, + {[]byte{6, 2, 85, 0x02}, true, []int{2, 5, 2}}, + {[]byte{6, 4, 85, 0x02, 0xc0, 0x00}, true, []int{2, 5, 2, 0x2000}}, + {[]byte{6, 3, 0x81, 0x34, 0x03}, true, []int{2, 100, 3}}, + {[]byte{6, 7, 85, 0x02, 0xc0, 0x80, 0x80, 0x80, 0x80}, false, []int{}}, + } + + for i, test := range testData { + in := String(test.in) + var out encoding_asn1.ObjectIdentifier + ok := in.ReadASN1ObjectIdentifier(&out) + if ok != test.ok || ok && !out.Equal(test.out) { + t.Errorf("#%d: in.ReadASN1ObjectIdentifier() = %v, want %v; out = %v, want %v", i, ok, test.ok, out, test.out) + continue + } + + var b Builder + b.AddASN1ObjectIdentifier(out) + result, err := b.Bytes() + if builderOk := err == nil; test.ok != builderOk { + t.Errorf("#%d: error from Builder.Bytes: %s", i, err) + continue + } + if test.ok && !bytes.Equal(result, test.in) { + t.Errorf("#%d: reserialisation didn't match, got %x, want %x", i, result, test.in) + continue + } + } +} + +func TestReadASN1GeneralizedTime(t *testing.T) { + testData := []struct { + in string + ok bool + out time.Time + }{ + {"20100102030405Z", true, time.Date(2010, 01, 02, 03, 04, 05, 0, time.UTC)}, + {"20100102030405", false, time.Time{}}, + {"20100102030405+0607", true, time.Date(2010, 01, 02, 03, 04, 05, 0, time.FixedZone("", 6*60*60+7*60))}, + {"20100102030405-0607", true, time.Date(2010, 01, 02, 03, 04, 05, 0, time.FixedZone("", -6*60*60-7*60))}, + /* These are invalid times. However, the time package normalises times + * and they were accepted in some versions. See #11134. */ + {"00000100000000Z", false, time.Time{}}, + {"20101302030405Z", false, time.Time{}}, + {"20100002030405Z", false, time.Time{}}, + {"20100100030405Z", false, time.Time{}}, + {"20100132030405Z", false, time.Time{}}, + {"20100231030405Z", false, time.Time{}}, + {"20100102240405Z", false, time.Time{}}, + {"20100102036005Z", false, time.Time{}}, + {"20100102030460Z", false, time.Time{}}, + {"-20100102030410Z", false, time.Time{}}, + {"2010-0102030410Z", false, time.Time{}}, + {"2010-0002030410Z", false, time.Time{}}, + {"201001-02030410Z", false, time.Time{}}, + {"20100102-030410Z", false, time.Time{}}, + {"2010010203-0410Z", false, time.Time{}}, + {"201001020304-10Z", false, time.Time{}}, + } + for i, test := range testData { + in := String(append([]byte{byte(asn1.GeneralizedTime), byte(len(test.in))}, test.in...)) + var out time.Time + ok := in.ReadASN1GeneralizedTime(&out) + if ok != test.ok || ok && !reflect.DeepEqual(out, test.out) { + t.Errorf("#%d: in.ReadASN1GeneralizedTime() = %v, want %v; out = %q, want %q", i, ok, test.ok, out, test.out) + } + } +} + +func TestReadASN1BitString(t *testing.T) { + testData := []struct { + in []byte + ok bool + out encoding_asn1.BitString + }{ + {[]byte{}, false, encoding_asn1.BitString{}}, + {[]byte{0x00}, true, encoding_asn1.BitString{}}, + {[]byte{0x07, 0x00}, true, encoding_asn1.BitString{Bytes: []byte{0}, BitLength: 1}}, + {[]byte{0x07, 0x01}, false, encoding_asn1.BitString{}}, + {[]byte{0x07, 0x40}, false, encoding_asn1.BitString{}}, + {[]byte{0x08, 0x00}, false, encoding_asn1.BitString{}}, + {[]byte{0xff}, false, encoding_asn1.BitString{}}, + {[]byte{0xfe, 0x00}, false, encoding_asn1.BitString{}}, + } + for i, test := range testData { + in := String(append([]byte{3, byte(len(test.in))}, test.in...)) + var out encoding_asn1.BitString + ok := in.ReadASN1BitString(&out) + if ok != test.ok || ok && (!bytes.Equal(out.Bytes, test.out.Bytes) || out.BitLength != test.out.BitLength) { + t.Errorf("#%d: in.ReadASN1BitString() = %v, want %v; out = %v, want %v", i, ok, test.ok, out, test.out) + } + } +} diff --git a/vendor/golang.org/x/crypto/cryptobyte/builder.go b/vendor/golang.org/x/crypto/cryptobyte/builder.go new file mode 100644 index 0000000..29b4c76 --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/builder.go @@ -0,0 +1,309 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cryptobyte + +import ( + "errors" + "fmt" +) + +// A Builder builds byte strings from fixed-length and length-prefixed values. +// Builders either allocate space as needed, or are ‘fixed’, which means that +// they write into a given buffer and produce an error if it's exhausted. +// +// The zero value is a usable Builder that allocates space as needed. +// +// Simple values are marshaled and appended to a Builder using methods on the +// Builder. Length-prefixed values are marshaled by providing a +// BuilderContinuation, which is a function that writes the inner contents of +// the value to a given Builder. See the documentation for BuilderContinuation +// for details. +type Builder struct { + err error + result []byte + fixedSize bool + child *Builder + offset int + pendingLenLen int + pendingIsASN1 bool + inContinuation *bool +} + +// NewBuilder creates a Builder that appends its output to the given buffer. +// Like append(), the slice will be reallocated if its capacity is exceeded. +// Use Bytes to get the final buffer. +func NewBuilder(buffer []byte) *Builder { + return &Builder{ + result: buffer, + } +} + +// NewFixedBuilder creates a Builder that appends its output into the given +// buffer. This builder does not reallocate the output buffer. Writes that +// would exceed the buffer's capacity are treated as an error. +func NewFixedBuilder(buffer []byte) *Builder { + return &Builder{ + result: buffer, + fixedSize: true, + } +} + +// Bytes returns the bytes written by the builder or an error if one has +// occurred during during building. +func (b *Builder) Bytes() ([]byte, error) { + if b.err != nil { + return nil, b.err + } + return b.result[b.offset:], nil +} + +// BytesOrPanic returns the bytes written by the builder or panics if an error +// has occurred during building. +func (b *Builder) BytesOrPanic() []byte { + if b.err != nil { + panic(b.err) + } + return b.result[b.offset:] +} + +// AddUint8 appends an 8-bit value to the byte string. +func (b *Builder) AddUint8(v uint8) { + b.add(byte(v)) +} + +// AddUint16 appends a big-endian, 16-bit value to the byte string. +func (b *Builder) AddUint16(v uint16) { + b.add(byte(v>>8), byte(v)) +} + +// AddUint24 appends a big-endian, 24-bit value to the byte string. The highest +// byte of the 32-bit input value is silently truncated. +func (b *Builder) AddUint24(v uint32) { + b.add(byte(v>>16), byte(v>>8), byte(v)) +} + +// AddUint32 appends a big-endian, 32-bit value to the byte string. +func (b *Builder) AddUint32(v uint32) { + b.add(byte(v>>24), byte(v>>16), byte(v>>8), byte(v)) +} + +// AddBytes appends a sequence of bytes to the byte string. +func (b *Builder) AddBytes(v []byte) { + b.add(v...) +} + +// BuilderContinuation is continuation-passing interface for building +// length-prefixed byte sequences. Builder methods for length-prefixed +// sequences (AddUint8LengthPrefixed etc) will invoke the BuilderContinuation +// supplied to them. The child builder passed to the continuation can be used +// to build the content of the length-prefixed sequence. For example: +// +// parent := cryptobyte.NewBuilder() +// parent.AddUint8LengthPrefixed(func (child *Builder) { +// child.AddUint8(42) +// child.AddUint8LengthPrefixed(func (grandchild *Builder) { +// grandchild.AddUint8(5) +// }) +// }) +// +// It is an error to write more bytes to the child than allowed by the reserved +// length prefix. After the continuation returns, the child must be considered +// invalid, i.e. users must not store any copies or references of the child +// that outlive the continuation. +// +// If the continuation panics with a value of type BuildError then the inner +// error will be returned as the error from Bytes. If the child panics +// otherwise then Bytes will repanic with the same value. +type BuilderContinuation func(child *Builder) + +// BuildError wraps an error. If a BuilderContinuation panics with this value, +// the panic will be recovered and the inner error will be returned from +// Builder.Bytes. +type BuildError struct { + Err error +} + +// AddUint8LengthPrefixed adds a 8-bit length-prefixed byte sequence. +func (b *Builder) AddUint8LengthPrefixed(f BuilderContinuation) { + b.addLengthPrefixed(1, false, f) +} + +// AddUint16LengthPrefixed adds a big-endian, 16-bit length-prefixed byte sequence. +func (b *Builder) AddUint16LengthPrefixed(f BuilderContinuation) { + b.addLengthPrefixed(2, false, f) +} + +// AddUint24LengthPrefixed adds a big-endian, 24-bit length-prefixed byte sequence. +func (b *Builder) AddUint24LengthPrefixed(f BuilderContinuation) { + b.addLengthPrefixed(3, false, f) +} + +// AddUint32LengthPrefixed adds a big-endian, 32-bit length-prefixed byte sequence. +func (b *Builder) AddUint32LengthPrefixed(f BuilderContinuation) { + b.addLengthPrefixed(4, false, f) +} + +func (b *Builder) callContinuation(f BuilderContinuation, arg *Builder) { + if !*b.inContinuation { + *b.inContinuation = true + + defer func() { + *b.inContinuation = false + + r := recover() + if r == nil { + return + } + + if buildError, ok := r.(BuildError); ok { + b.err = buildError.Err + } else { + panic(r) + } + }() + } + + f(arg) +} + +func (b *Builder) addLengthPrefixed(lenLen int, isASN1 bool, f BuilderContinuation) { + // Subsequent writes can be ignored if the builder has encountered an error. + if b.err != nil { + return + } + + offset := len(b.result) + b.add(make([]byte, lenLen)...) + + if b.inContinuation == nil { + b.inContinuation = new(bool) + } + + b.child = &Builder{ + result: b.result, + fixedSize: b.fixedSize, + offset: offset, + pendingLenLen: lenLen, + pendingIsASN1: isASN1, + inContinuation: b.inContinuation, + } + + b.callContinuation(f, b.child) + b.flushChild() + if b.child != nil { + panic("cryptobyte: internal error") + } +} + +func (b *Builder) flushChild() { + if b.child == nil { + return + } + b.child.flushChild() + child := b.child + b.child = nil + + if child.err != nil { + b.err = child.err + return + } + + length := len(child.result) - child.pendingLenLen - child.offset + + if length < 0 { + panic("cryptobyte: internal error") // result unexpectedly shrunk + } + + if child.pendingIsASN1 { + // For ASN.1, we reserved a single byte for the length. If that turned out + // to be incorrect, we have to move the contents along in order to make + // space. + if child.pendingLenLen != 1 { + panic("cryptobyte: internal error") + } + var lenLen, lenByte uint8 + if int64(length) > 0xfffffffe { + b.err = errors.New("pending ASN.1 child too long") + return + } else if length > 0xffffff { + lenLen = 5 + lenByte = 0x80 | 4 + } else if length > 0xffff { + lenLen = 4 + lenByte = 0x80 | 3 + } else if length > 0xff { + lenLen = 3 + lenByte = 0x80 | 2 + } else if length > 0x7f { + lenLen = 2 + lenByte = 0x80 | 1 + } else { + lenLen = 1 + lenByte = uint8(length) + length = 0 + } + + // Insert the initial length byte, make space for successive length bytes, + // and adjust the offset. + child.result[child.offset] = lenByte + extraBytes := int(lenLen - 1) + if extraBytes != 0 { + child.add(make([]byte, extraBytes)...) + childStart := child.offset + child.pendingLenLen + copy(child.result[childStart+extraBytes:], child.result[childStart:]) + } + child.offset++ + child.pendingLenLen = extraBytes + } + + l := length + for i := child.pendingLenLen - 1; i >= 0; i-- { + child.result[child.offset+i] = uint8(l) + l >>= 8 + } + if l != 0 { + b.err = fmt.Errorf("cryptobyte: pending child length %d exceeds %d-byte length prefix", length, child.pendingLenLen) + return + } + + if !b.fixedSize { + b.result = child.result // In case child reallocated result. + } +} + +func (b *Builder) add(bytes ...byte) { + if b.err != nil { + return + } + if b.child != nil { + panic("attempted write while child is pending") + } + if len(b.result)+len(bytes) < len(bytes) { + b.err = errors.New("cryptobyte: length overflow") + } + if b.fixedSize && len(b.result)+len(bytes) > cap(b.result) { + b.err = errors.New("cryptobyte: Builder is exceeding its fixed-size buffer") + return + } + b.result = append(b.result, bytes...) +} + +// A MarshalingValue marshals itself into a Builder. +type MarshalingValue interface { + // Marshal is called by Builder.AddValue. It receives a pointer to a builder + // to marshal itself into. It may return an error that occurred during + // marshaling, such as unset or invalid values. + Marshal(b *Builder) error +} + +// AddValue calls Marshal on v, passing a pointer to the builder to append to. +// If Marshal returns an error, it is set on the Builder so that subsequent +// appends don't have an effect. +func (b *Builder) AddValue(v MarshalingValue) { + err := v.Marshal(b) + if err != nil { + b.err = err + } +} diff --git a/vendor/golang.org/x/crypto/cryptobyte/cryptobyte_test.go b/vendor/golang.org/x/crypto/cryptobyte/cryptobyte_test.go new file mode 100644 index 0000000..f294dd5 --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/cryptobyte_test.go @@ -0,0 +1,428 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cryptobyte + +import ( + "bytes" + "errors" + "fmt" + "testing" +) + +func builderBytesEq(b *Builder, want ...byte) error { + got := b.BytesOrPanic() + if !bytes.Equal(got, want) { + return fmt.Errorf("Bytes() = %v, want %v", got, want) + } + return nil +} + +func TestContinuationError(t *testing.T) { + const errorStr = "TestContinuationError" + var b Builder + b.AddUint8LengthPrefixed(func(b *Builder) { + b.AddUint8(1) + panic(BuildError{Err: errors.New(errorStr)}) + }) + + ret, err := b.Bytes() + if ret != nil { + t.Error("expected nil result") + } + if err == nil { + t.Fatal("unexpected nil error") + } + if s := err.Error(); s != errorStr { + t.Errorf("expected error %q, got %v", errorStr, s) + } +} + +func TestContinuationNonError(t *testing.T) { + defer func() { + recover() + }() + + var b Builder + b.AddUint8LengthPrefixed(func(b *Builder) { + b.AddUint8(1) + panic(1) + }) + + t.Error("Builder did not panic") +} + +func TestGeneratedPanic(t *testing.T) { + defer func() { + recover() + }() + + var b Builder + b.AddUint8LengthPrefixed(func(b *Builder) { + var p *byte + *p = 0 + }) + + t.Error("Builder did not panic") +} + +func TestBytes(t *testing.T) { + var b Builder + v := []byte("foobarbaz") + b.AddBytes(v[0:3]) + b.AddBytes(v[3:4]) + b.AddBytes(v[4:9]) + if err := builderBytesEq(&b, v...); err != nil { + t.Error(err) + } + s := String(b.BytesOrPanic()) + for _, w := range []string{"foo", "bar", "baz"} { + var got []byte + if !s.ReadBytes(&got, 3) { + t.Errorf("ReadBytes() = false, want true (w = %v)", w) + } + want := []byte(w) + if !bytes.Equal(got, want) { + t.Errorf("ReadBytes(): got = %v, want %v", got, want) + } + } + if len(s) != 0 { + t.Errorf("len(s) = %d, want 0", len(s)) + } +} + +func TestUint8(t *testing.T) { + var b Builder + b.AddUint8(42) + if err := builderBytesEq(&b, 42); err != nil { + t.Error(err) + } + + var s String = b.BytesOrPanic() + var v uint8 + if !s.ReadUint8(&v) { + t.Error("ReadUint8() = false, want true") + } + if v != 42 { + t.Errorf("v = %d, want 42", v) + } + if len(s) != 0 { + t.Errorf("len(s) = %d, want 0", len(s)) + } +} + +func TestUint16(t *testing.T) { + var b Builder + b.AddUint16(65534) + if err := builderBytesEq(&b, 255, 254); err != nil { + t.Error(err) + } + var s String = b.BytesOrPanic() + var v uint16 + if !s.ReadUint16(&v) { + t.Error("ReadUint16() == false, want true") + } + if v != 65534 { + t.Errorf("v = %d, want 65534", v) + } + if len(s) != 0 { + t.Errorf("len(s) = %d, want 0", len(s)) + } +} + +func TestUint24(t *testing.T) { + var b Builder + b.AddUint24(0xfffefd) + if err := builderBytesEq(&b, 255, 254, 253); err != nil { + t.Error(err) + } + + var s String = b.BytesOrPanic() + var v uint32 + if !s.ReadUint24(&v) { + t.Error("ReadUint8() = false, want true") + } + if v != 0xfffefd { + t.Errorf("v = %d, want fffefd", v) + } + if len(s) != 0 { + t.Errorf("len(s) = %d, want 0", len(s)) + } +} + +func TestUint24Truncation(t *testing.T) { + var b Builder + b.AddUint24(0x10111213) + if err := builderBytesEq(&b, 0x11, 0x12, 0x13); err != nil { + t.Error(err) + } +} + +func TestUint32(t *testing.T) { + var b Builder + b.AddUint32(0xfffefdfc) + if err := builderBytesEq(&b, 255, 254, 253, 252); err != nil { + t.Error(err) + } + + var s String = b.BytesOrPanic() + var v uint32 + if !s.ReadUint32(&v) { + t.Error("ReadUint8() = false, want true") + } + if v != 0xfffefdfc { + t.Errorf("v = %x, want fffefdfc", v) + } + if len(s) != 0 { + t.Errorf("len(s) = %d, want 0", len(s)) + } +} + +func TestUMultiple(t *testing.T) { + var b Builder + b.AddUint8(23) + b.AddUint32(0xfffefdfc) + b.AddUint16(42) + if err := builderBytesEq(&b, 23, 255, 254, 253, 252, 0, 42); err != nil { + t.Error(err) + } + + var s String = b.BytesOrPanic() + var ( + x uint8 + y uint32 + z uint16 + ) + if !s.ReadUint8(&x) || !s.ReadUint32(&y) || !s.ReadUint16(&z) { + t.Error("ReadUint8() = false, want true") + } + if x != 23 || y != 0xfffefdfc || z != 42 { + t.Errorf("x, y, z = %d, %d, %d; want 23, 4294901244, 5", x, y, z) + } + if len(s) != 0 { + t.Errorf("len(s) = %d, want 0", len(s)) + } +} + +func TestUint8LengthPrefixedSimple(t *testing.T) { + var b Builder + b.AddUint8LengthPrefixed(func(c *Builder) { + c.AddUint8(23) + c.AddUint8(42) + }) + if err := builderBytesEq(&b, 2, 23, 42); err != nil { + t.Error(err) + } + + var base, child String = b.BytesOrPanic(), nil + var x, y uint8 + if !base.ReadUint8LengthPrefixed(&child) || !child.ReadUint8(&x) || + !child.ReadUint8(&y) { + t.Error("parsing failed") + } + if x != 23 || y != 42 { + t.Errorf("want x, y == 23, 42; got %d, %d", x, y) + } + if len(base) != 0 { + t.Errorf("len(base) = %d, want 0", len(base)) + } + if len(child) != 0 { + t.Errorf("len(child) = %d, want 0", len(child)) + } +} + +func TestUint8LengthPrefixedMulti(t *testing.T) { + var b Builder + b.AddUint8LengthPrefixed(func(c *Builder) { + c.AddUint8(23) + c.AddUint8(42) + }) + b.AddUint8(5) + b.AddUint8LengthPrefixed(func(c *Builder) { + c.AddUint8(123) + c.AddUint8(234) + }) + if err := builderBytesEq(&b, 2, 23, 42, 5, 2, 123, 234); err != nil { + t.Error(err) + } + + var s, child String = b.BytesOrPanic(), nil + var u, v, w, x, y uint8 + if !s.ReadUint8LengthPrefixed(&child) || !child.ReadUint8(&u) || !child.ReadUint8(&v) || + !s.ReadUint8(&w) || !s.ReadUint8LengthPrefixed(&child) || !child.ReadUint8(&x) || !child.ReadUint8(&y) { + t.Error("parsing failed") + } + if u != 23 || v != 42 || w != 5 || x != 123 || y != 234 { + t.Errorf("u, v, w, x, y = %d, %d, %d, %d, %d; want 23, 42, 5, 123, 234", + u, v, w, x, y) + } + if len(s) != 0 { + t.Errorf("len(s) = %d, want 0", len(s)) + } + if len(child) != 0 { + t.Errorf("len(child) = %d, want 0", len(child)) + } +} + +func TestUint8LengthPrefixedNested(t *testing.T) { + var b Builder + b.AddUint8LengthPrefixed(func(c *Builder) { + c.AddUint8(5) + c.AddUint8LengthPrefixed(func(d *Builder) { + d.AddUint8(23) + d.AddUint8(42) + }) + c.AddUint8(123) + }) + if err := builderBytesEq(&b, 5, 5, 2, 23, 42, 123); err != nil { + t.Error(err) + } + + var base, child1, child2 String = b.BytesOrPanic(), nil, nil + var u, v, w, x uint8 + if !base.ReadUint8LengthPrefixed(&child1) { + t.Error("parsing base failed") + } + if !child1.ReadUint8(&u) || !child1.ReadUint8LengthPrefixed(&child2) || !child1.ReadUint8(&x) { + t.Error("parsing child1 failed") + } + if !child2.ReadUint8(&v) || !child2.ReadUint8(&w) { + t.Error("parsing child2 failed") + } + if u != 5 || v != 23 || w != 42 || x != 123 { + t.Errorf("u, v, w, x = %d, %d, %d, %d, want 5, 23, 42, 123", + u, v, w, x) + } + if len(base) != 0 { + t.Errorf("len(base) = %d, want 0", len(base)) + } + if len(child1) != 0 { + t.Errorf("len(child1) = %d, want 0", len(child1)) + } + if len(base) != 0 { + t.Errorf("len(child2) = %d, want 0", len(child2)) + } +} + +func TestPreallocatedBuffer(t *testing.T) { + var buf [5]byte + b := NewBuilder(buf[0:0]) + b.AddUint8(1) + b.AddUint8LengthPrefixed(func(c *Builder) { + c.AddUint8(3) + c.AddUint8(4) + }) + b.AddUint16(1286) // Outgrow buf by one byte. + want := []byte{1, 2, 3, 4, 0} + if !bytes.Equal(buf[:], want) { + t.Errorf("buf = %v want %v", buf, want) + } + if err := builderBytesEq(b, 1, 2, 3, 4, 5, 6); err != nil { + t.Error(err) + } +} + +func TestWriteWithPendingChild(t *testing.T) { + var b Builder + b.AddUint8LengthPrefixed(func(c *Builder) { + c.AddUint8LengthPrefixed(func(d *Builder) { + defer func() { + if recover() == nil { + t.Errorf("recover() = nil, want error; c.AddUint8() did not panic") + } + }() + c.AddUint8(2) // panics + + defer func() { + if recover() == nil { + t.Errorf("recover() = nil, want error; b.AddUint8() did not panic") + } + }() + b.AddUint8(2) // panics + }) + + defer func() { + if recover() == nil { + t.Errorf("recover() = nil, want error; b.AddUint8() did not panic") + } + }() + b.AddUint8(2) // panics + }) +} + +// ASN.1 + +func TestASN1Int64(t *testing.T) { + tests := []struct { + in int64 + want []byte + }{ + {-0x800000, []byte{2, 3, 128, 0, 0}}, + {-256, []byte{2, 2, 255, 0}}, + {-129, []byte{2, 2, 255, 127}}, + {-128, []byte{2, 1, 128}}, + {-1, []byte{2, 1, 255}}, + {0, []byte{2, 1, 0}}, + {1, []byte{2, 1, 1}}, + {2, []byte{2, 1, 2}}, + {127, []byte{2, 1, 127}}, + {128, []byte{2, 2, 0, 128}}, + {256, []byte{2, 2, 1, 0}}, + {0x800000, []byte{2, 4, 0, 128, 0, 0}}, + } + for i, tt := range tests { + var b Builder + b.AddASN1Int64(tt.in) + if err := builderBytesEq(&b, tt.want...); err != nil { + t.Errorf("%v, (i = %d; in = %v)", err, i, tt.in) + } + + var n int64 + s := String(b.BytesOrPanic()) + ok := s.ReadASN1Integer(&n) + if !ok || n != tt.in { + t.Errorf("s.ReadASN1Integer(&n) = %v, n = %d; want true, n = %d (i = %d)", + ok, n, tt.in, i) + } + if len(s) != 0 { + t.Errorf("len(s) = %d, want 0", len(s)) + } + } +} + +func TestASN1Uint64(t *testing.T) { + tests := []struct { + in uint64 + want []byte + }{ + {0, []byte{2, 1, 0}}, + {1, []byte{2, 1, 1}}, + {2, []byte{2, 1, 2}}, + {127, []byte{2, 1, 127}}, + {128, []byte{2, 2, 0, 128}}, + {256, []byte{2, 2, 1, 0}}, + {0x800000, []byte{2, 4, 0, 128, 0, 0}}, + {0x7fffffffffffffff, []byte{2, 8, 127, 255, 255, 255, 255, 255, 255, 255}}, + {0x8000000000000000, []byte{2, 9, 0, 128, 0, 0, 0, 0, 0, 0, 0}}, + {0xffffffffffffffff, []byte{2, 9, 0, 255, 255, 255, 255, 255, 255, 255, 255}}, + } + for i, tt := range tests { + var b Builder + b.AddASN1Uint64(tt.in) + if err := builderBytesEq(&b, tt.want...); err != nil { + t.Errorf("%v, (i = %d; in = %v)", err, i, tt.in) + } + + var n uint64 + s := String(b.BytesOrPanic()) + ok := s.ReadASN1Integer(&n) + if !ok || n != tt.in { + t.Errorf("s.ReadASN1Integer(&n) = %v, n = %d; want true, n = %d (i = %d)", + ok, n, tt.in, i) + } + if len(s) != 0 { + t.Errorf("len(s) = %d, want 0", len(s)) + } + } +} diff --git a/vendor/golang.org/x/crypto/cryptobyte/example_test.go b/vendor/golang.org/x/crypto/cryptobyte/example_test.go new file mode 100644 index 0000000..86c098a --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/example_test.go @@ -0,0 +1,154 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cryptobyte_test + +import ( + "errors" + "fmt" + + "golang.org/x/crypto/cryptobyte" + "golang.org/x/crypto/cryptobyte/asn1" +) + +func ExampleString_lengthPrefixed() { + // This is an example of parsing length-prefixed data (as found in, for + // example, TLS). Imagine a 16-bit prefixed series of 8-bit prefixed + // strings. + + input := cryptobyte.String([]byte{0, 12, 5, 'h', 'e', 'l', 'l', 'o', 5, 'w', 'o', 'r', 'l', 'd'}) + var result []string + + var values cryptobyte.String + if !input.ReadUint16LengthPrefixed(&values) || + !input.Empty() { + panic("bad format") + } + + for !values.Empty() { + var value cryptobyte.String + if !values.ReadUint8LengthPrefixed(&value) { + panic("bad format") + } + + result = append(result, string(value)) + } + + // Output: []string{"hello", "world"} + fmt.Printf("%#v\n", result) +} + +func ExampleString_aSN1() { + // This is an example of parsing ASN.1 data that looks like: + // Foo ::= SEQUENCE { + // version [6] INTEGER DEFAULT 0 + // data OCTET STRING + // } + + input := cryptobyte.String([]byte{0x30, 12, 0xa6, 3, 2, 1, 2, 4, 5, 'h', 'e', 'l', 'l', 'o'}) + + var ( + version int64 + data, inner, versionBytes cryptobyte.String + haveVersion bool + ) + if !input.ReadASN1(&inner, asn1.SEQUENCE) || + !input.Empty() || + !inner.ReadOptionalASN1(&versionBytes, &haveVersion, asn1.Tag(6).Constructed().ContextSpecific()) || + (haveVersion && !versionBytes.ReadASN1Integer(&version)) || + (haveVersion && !versionBytes.Empty()) || + !inner.ReadASN1(&data, asn1.OCTET_STRING) || + !inner.Empty() { + panic("bad format") + } + + // Output: haveVersion: true, version: 2, data: hello + fmt.Printf("haveVersion: %t, version: %d, data: %s\n", haveVersion, version, string(data)) +} + +func ExampleBuilder_aSN1() { + // This is an example of building ASN.1 data that looks like: + // Foo ::= SEQUENCE { + // version [6] INTEGER DEFAULT 0 + // data OCTET STRING + // } + + version := int64(2) + data := []byte("hello") + const defaultVersion = 0 + + var b cryptobyte.Builder + b.AddASN1(asn1.SEQUENCE, func(b *cryptobyte.Builder) { + if version != defaultVersion { + b.AddASN1(asn1.Tag(6).Constructed().ContextSpecific(), func(b *cryptobyte.Builder) { + b.AddASN1Int64(version) + }) + } + b.AddASN1OctetString(data) + }) + + result, err := b.Bytes() + if err != nil { + panic(err) + } + + // Output: 300ca603020102040568656c6c6f + fmt.Printf("%x\n", result) +} + +func ExampleBuilder_lengthPrefixed() { + // This is an example of building length-prefixed data (as found in, + // for example, TLS). Imagine a 16-bit prefixed series of 8-bit + // prefixed strings. + input := []string{"hello", "world"} + + var b cryptobyte.Builder + b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { + for _, value := range input { + b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddBytes([]byte(value)) + }) + } + }) + + result, err := b.Bytes() + if err != nil { + panic(err) + } + + // Output: 000c0568656c6c6f05776f726c64 + fmt.Printf("%x\n", result) +} + +func ExampleBuilder_lengthPrefixOverflow() { + // Writing more data that can be expressed by the length prefix results + // in an error from Bytes(). + + tooLarge := make([]byte, 256) + + var b cryptobyte.Builder + b.AddUint8LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddBytes(tooLarge) + }) + + result, err := b.Bytes() + fmt.Printf("len=%d err=%s\n", len(result), err) + + // Output: len=0 err=cryptobyte: pending child length 256 exceeds 1-byte length prefix +} + +func ExampleBuilderContinuation_errorHandling() { + var b cryptobyte.Builder + // Continuations that panic with a BuildError will cause Bytes to + // return the inner error. + b.AddUint16LengthPrefixed(func(b *cryptobyte.Builder) { + b.AddUint32(0) + panic(cryptobyte.BuildError{Err: errors.New("example error")}) + }) + + result, err := b.Bytes() + fmt.Printf("len=%d err=%s\n", len(result), err) + + // Output: len=0 err=example error +} diff --git a/vendor/golang.org/x/crypto/cryptobyte/string.go b/vendor/golang.org/x/crypto/cryptobyte/string.go new file mode 100644 index 0000000..7636fb9 --- /dev/null +++ b/vendor/golang.org/x/crypto/cryptobyte/string.go @@ -0,0 +1,167 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package cryptobyte contains types that help with parsing and constructing +// length-prefixed, binary messages, including ASN.1 DER. (The asn1 subpackage +// contains useful ASN.1 constants.) +// +// The String type is for parsing. It wraps a []byte slice and provides helper +// functions for consuming structures, value by value. +// +// The Builder type is for constructing messages. It providers helper functions +// for appending values and also for appending length-prefixed submessages – +// without having to worry about calculating the length prefix ahead of time. +// +// See the documentation and examples for the Builder and String types to get +// started. +package cryptobyte // import "golang.org/x/crypto/cryptobyte" + +// String represents a string of bytes. It provides methods for parsing +// fixed-length and length-prefixed values from it. +type String []byte + +// read advances a String by n bytes and returns them. If less than n bytes +// remain, it returns nil. +func (s *String) read(n int) []byte { + if len(*s) < n { + return nil + } + v := (*s)[:n] + *s = (*s)[n:] + return v +} + +// Skip advances the String by n byte and reports whether it was successful. +func (s *String) Skip(n int) bool { + return s.read(n) != nil +} + +// ReadUint8 decodes an 8-bit value into out and advances over it. It +// returns true on success and false on error. +func (s *String) ReadUint8(out *uint8) bool { + v := s.read(1) + if v == nil { + return false + } + *out = uint8(v[0]) + return true +} + +// ReadUint16 decodes a big-endian, 16-bit value into out and advances over it. +// It returns true on success and false on error. +func (s *String) ReadUint16(out *uint16) bool { + v := s.read(2) + if v == nil { + return false + } + *out = uint16(v[0])<<8 | uint16(v[1]) + return true +} + +// ReadUint24 decodes a big-endian, 24-bit value into out and advances over it. +// It returns true on success and false on error. +func (s *String) ReadUint24(out *uint32) bool { + v := s.read(3) + if v == nil { + return false + } + *out = uint32(v[0])<<16 | uint32(v[1])<<8 | uint32(v[2]) + return true +} + +// ReadUint32 decodes a big-endian, 32-bit value into out and advances over it. +// It returns true on success and false on error. +func (s *String) ReadUint32(out *uint32) bool { + v := s.read(4) + if v == nil { + return false + } + *out = uint32(v[0])<<24 | uint32(v[1])<<16 | uint32(v[2])<<8 | uint32(v[3]) + return true +} + +func (s *String) readUnsigned(out *uint32, length int) bool { + v := s.read(length) + if v == nil { + return false + } + var result uint32 + for i := 0; i < length; i++ { + result <<= 8 + result |= uint32(v[i]) + } + *out = result + return true +} + +func (s *String) readLengthPrefixed(lenLen int, outChild *String) bool { + lenBytes := s.read(lenLen) + if lenBytes == nil { + return false + } + var length uint32 + for _, b := range lenBytes { + length = length << 8 + length = length | uint32(b) + } + if int(length) < 0 { + // This currently cannot overflow because we read uint24 at most, but check + // anyway in case that changes in the future. + return false + } + v := s.read(int(length)) + if v == nil { + return false + } + *outChild = v + return true +} + +// ReadUint8LengthPrefixed reads the content of an 8-bit length-prefixed value +// into out and advances over it. It returns true on success and false on +// error. +func (s *String) ReadUint8LengthPrefixed(out *String) bool { + return s.readLengthPrefixed(1, out) +} + +// ReadUint16LengthPrefixed reads the content of a big-endian, 16-bit +// length-prefixed value into out and advances over it. It returns true on +// success and false on error. +func (s *String) ReadUint16LengthPrefixed(out *String) bool { + return s.readLengthPrefixed(2, out) +} + +// ReadUint24LengthPrefixed reads the content of a big-endian, 24-bit +// length-prefixed value into out and advances over it. It returns true on +// success and false on error. +func (s *String) ReadUint24LengthPrefixed(out *String) bool { + return s.readLengthPrefixed(3, out) +} + +// ReadBytes reads n bytes into out and advances over them. It returns true on +// success and false and error. +func (s *String) ReadBytes(out *[]byte, n int) bool { + v := s.read(n) + if v == nil { + return false + } + *out = v + return true +} + +// CopyBytes copies len(out) bytes into out and advances over them. It returns +// true on success and false on error. +func (s *String) CopyBytes(out []byte) bool { + n := len(out) + v := s.read(n) + if v == nil { + return false + } + return copy(out, v) == n +} + +// Empty reports whether the string does not contain any bytes. +func (s String) Empty() bool { + return len(s) == 0 +} diff --git a/vendor/golang.org/x/crypto/curve25519/const_amd64.h b/vendor/golang.org/x/crypto/curve25519/const_amd64.h new file mode 100644 index 0000000..b3f7416 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/const_amd64.h @@ -0,0 +1,8 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html + +#define REDMASK51 0x0007FFFFFFFFFFFF diff --git a/vendor/golang.org/x/crypto/curve25519/const_amd64.s b/vendor/golang.org/x/crypto/curve25519/const_amd64.s new file mode 100644 index 0000000..ee7b4bd --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/const_amd64.s @@ -0,0 +1,20 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +// These constants cannot be encoded in non-MOVQ immediates. +// We access them directly from memory instead. + +DATA ·_121666_213(SB)/8, $996687872 +GLOBL ·_121666_213(SB), 8, $8 + +DATA ·_2P0(SB)/8, $0xFFFFFFFFFFFDA +GLOBL ·_2P0(SB), 8, $8 + +DATA ·_2P1234(SB)/8, $0xFFFFFFFFFFFFE +GLOBL ·_2P1234(SB), 8, $8 diff --git a/vendor/golang.org/x/crypto/curve25519/cswap_amd64.s b/vendor/golang.org/x/crypto/curve25519/cswap_amd64.s new file mode 100644 index 0000000..cd793a5 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/cswap_amd64.s @@ -0,0 +1,65 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +// func cswap(inout *[4][5]uint64, v uint64) +TEXT ·cswap(SB),7,$0 + MOVQ inout+0(FP),DI + MOVQ v+8(FP),SI + + SUBQ $1, SI + NOTQ SI + MOVQ SI, X15 + PSHUFD $0x44, X15, X15 + + MOVOU 0(DI), X0 + MOVOU 16(DI), X2 + MOVOU 32(DI), X4 + MOVOU 48(DI), X6 + MOVOU 64(DI), X8 + MOVOU 80(DI), X1 + MOVOU 96(DI), X3 + MOVOU 112(DI), X5 + MOVOU 128(DI), X7 + MOVOU 144(DI), X9 + + MOVO X1, X10 + MOVO X3, X11 + MOVO X5, X12 + MOVO X7, X13 + MOVO X9, X14 + + PXOR X0, X10 + PXOR X2, X11 + PXOR X4, X12 + PXOR X6, X13 + PXOR X8, X14 + PAND X15, X10 + PAND X15, X11 + PAND X15, X12 + PAND X15, X13 + PAND X15, X14 + PXOR X10, X0 + PXOR X10, X1 + PXOR X11, X2 + PXOR X11, X3 + PXOR X12, X4 + PXOR X12, X5 + PXOR X13, X6 + PXOR X13, X7 + PXOR X14, X8 + PXOR X14, X9 + + MOVOU X0, 0(DI) + MOVOU X2, 16(DI) + MOVOU X4, 32(DI) + MOVOU X6, 48(DI) + MOVOU X8, 64(DI) + MOVOU X1, 80(DI) + MOVOU X3, 96(DI) + MOVOU X5, 112(DI) + MOVOU X7, 128(DI) + MOVOU X9, 144(DI) + RET diff --git a/vendor/golang.org/x/crypto/curve25519/curve25519.go b/vendor/golang.org/x/crypto/curve25519/curve25519.go new file mode 100644 index 0000000..cb8fbc5 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/curve25519.go @@ -0,0 +1,834 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// We have an implementation in amd64 assembly so this code is only run on +// non-amd64 platforms. The amd64 assembly does not support gccgo. +// +build !amd64 gccgo appengine + +package curve25519 + +import ( + "encoding/binary" +) + +// This code is a port of the public domain, "ref10" implementation of +// curve25519 from SUPERCOP 20130419 by D. J. Bernstein. + +// fieldElement represents an element of the field GF(2^255 - 19). An element +// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77 +// t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on +// context. +type fieldElement [10]int32 + +func feZero(fe *fieldElement) { + for i := range fe { + fe[i] = 0 + } +} + +func feOne(fe *fieldElement) { + feZero(fe) + fe[0] = 1 +} + +func feAdd(dst, a, b *fieldElement) { + for i := range dst { + dst[i] = a[i] + b[i] + } +} + +func feSub(dst, a, b *fieldElement) { + for i := range dst { + dst[i] = a[i] - b[i] + } +} + +func feCopy(dst, src *fieldElement) { + for i := range dst { + dst[i] = src[i] + } +} + +// feCSwap replaces (f,g) with (g,f) if b == 1; replaces (f,g) with (f,g) if b == 0. +// +// Preconditions: b in {0,1}. +func feCSwap(f, g *fieldElement, b int32) { + b = -b + for i := range f { + t := b & (f[i] ^ g[i]) + f[i] ^= t + g[i] ^= t + } +} + +// load3 reads a 24-bit, little-endian value from in. +func load3(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + return r +} + +// load4 reads a 32-bit, little-endian value from in. +func load4(in []byte) int64 { + return int64(binary.LittleEndian.Uint32(in)) +} + +func feFromBytes(dst *fieldElement, src *[32]byte) { + h0 := load4(src[:]) + h1 := load3(src[4:]) << 6 + h2 := load3(src[7:]) << 5 + h3 := load3(src[10:]) << 3 + h4 := load3(src[13:]) << 2 + h5 := load4(src[16:]) + h6 := load3(src[20:]) << 7 + h7 := load3(src[23:]) << 5 + h8 := load3(src[26:]) << 4 + h9 := load3(src[29:]) << 2 + + var carry [10]int64 + carry[9] = (h9 + 1<<24) >> 25 + h0 += carry[9] * 19 + h9 -= carry[9] << 25 + carry[1] = (h1 + 1<<24) >> 25 + h2 += carry[1] + h1 -= carry[1] << 25 + carry[3] = (h3 + 1<<24) >> 25 + h4 += carry[3] + h3 -= carry[3] << 25 + carry[5] = (h5 + 1<<24) >> 25 + h6 += carry[5] + h5 -= carry[5] << 25 + carry[7] = (h7 + 1<<24) >> 25 + h8 += carry[7] + h7 -= carry[7] << 25 + + carry[0] = (h0 + 1<<25) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + carry[2] = (h2 + 1<<25) >> 26 + h3 += carry[2] + h2 -= carry[2] << 26 + carry[4] = (h4 + 1<<25) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + carry[6] = (h6 + 1<<25) >> 26 + h7 += carry[6] + h6 -= carry[6] << 26 + carry[8] = (h8 + 1<<25) >> 26 + h9 += carry[8] + h8 -= carry[8] << 26 + + dst[0] = int32(h0) + dst[1] = int32(h1) + dst[2] = int32(h2) + dst[3] = int32(h3) + dst[4] = int32(h4) + dst[5] = int32(h5) + dst[6] = int32(h6) + dst[7] = int32(h7) + dst[8] = int32(h8) + dst[9] = int32(h9) +} + +// feToBytes marshals h to s. +// Preconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Write p=2^255-19; q=floor(h/p). +// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). +// +// Proof: +// Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. +// Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4. +// +// Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). +// Then 0> 25 + q = (h[0] + q) >> 26 + q = (h[1] + q) >> 25 + q = (h[2] + q) >> 26 + q = (h[3] + q) >> 25 + q = (h[4] + q) >> 26 + q = (h[5] + q) >> 25 + q = (h[6] + q) >> 26 + q = (h[7] + q) >> 25 + q = (h[8] + q) >> 26 + q = (h[9] + q) >> 25 + + // Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. + h[0] += 19 * q + // Goal: Output h-2^255 q, which is between 0 and 2^255-20. + + carry[0] = h[0] >> 26 + h[1] += carry[0] + h[0] -= carry[0] << 26 + carry[1] = h[1] >> 25 + h[2] += carry[1] + h[1] -= carry[1] << 25 + carry[2] = h[2] >> 26 + h[3] += carry[2] + h[2] -= carry[2] << 26 + carry[3] = h[3] >> 25 + h[4] += carry[3] + h[3] -= carry[3] << 25 + carry[4] = h[4] >> 26 + h[5] += carry[4] + h[4] -= carry[4] << 26 + carry[5] = h[5] >> 25 + h[6] += carry[5] + h[5] -= carry[5] << 25 + carry[6] = h[6] >> 26 + h[7] += carry[6] + h[6] -= carry[6] << 26 + carry[7] = h[7] >> 25 + h[8] += carry[7] + h[7] -= carry[7] << 25 + carry[8] = h[8] >> 26 + h[9] += carry[8] + h[8] -= carry[8] << 26 + carry[9] = h[9] >> 25 + h[9] -= carry[9] << 25 + // h10 = carry9 + + // Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20. + // Have h[0]+...+2^230 h[9] between 0 and 2^255-1; + // evidently 2^255 h10-2^255 q = 0. + // Goal: Output h[0]+...+2^230 h[9]. + + s[0] = byte(h[0] >> 0) + s[1] = byte(h[0] >> 8) + s[2] = byte(h[0] >> 16) + s[3] = byte((h[0] >> 24) | (h[1] << 2)) + s[4] = byte(h[1] >> 6) + s[5] = byte(h[1] >> 14) + s[6] = byte((h[1] >> 22) | (h[2] << 3)) + s[7] = byte(h[2] >> 5) + s[8] = byte(h[2] >> 13) + s[9] = byte((h[2] >> 21) | (h[3] << 5)) + s[10] = byte(h[3] >> 3) + s[11] = byte(h[3] >> 11) + s[12] = byte((h[3] >> 19) | (h[4] << 6)) + s[13] = byte(h[4] >> 2) + s[14] = byte(h[4] >> 10) + s[15] = byte(h[4] >> 18) + s[16] = byte(h[5] >> 0) + s[17] = byte(h[5] >> 8) + s[18] = byte(h[5] >> 16) + s[19] = byte((h[5] >> 24) | (h[6] << 1)) + s[20] = byte(h[6] >> 7) + s[21] = byte(h[6] >> 15) + s[22] = byte((h[6] >> 23) | (h[7] << 3)) + s[23] = byte(h[7] >> 5) + s[24] = byte(h[7] >> 13) + s[25] = byte((h[7] >> 21) | (h[8] << 4)) + s[26] = byte(h[8] >> 4) + s[27] = byte(h[8] >> 12) + s[28] = byte((h[8] >> 20) | (h[9] << 6)) + s[29] = byte(h[9] >> 2) + s[30] = byte(h[9] >> 10) + s[31] = byte(h[9] >> 18) +} + +// feMul calculates h = f * g +// Can overlap h with f or g. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Notes on implementation strategy: +// +// Using schoolbook multiplication. +// Karatsuba would save a little in some cost models. +// +// Most multiplications by 2 and 19 are 32-bit precomputations; +// cheaper than 64-bit postcomputations. +// +// There is one remaining multiplication by 19 in the carry chain; +// one *19 precomputation can be merged into this, +// but the resulting data flow is considerably less clean. +// +// There are 12 carries below. +// 10 of them are 2-way parallelizable and vectorizable. +// Can get away with 11 carries, but then data flow is much deeper. +// +// With tighter constraints on inputs can squeeze carries into int32. +func feMul(h, f, g *fieldElement) { + f0 := f[0] + f1 := f[1] + f2 := f[2] + f3 := f[3] + f4 := f[4] + f5 := f[5] + f6 := f[6] + f7 := f[7] + f8 := f[8] + f9 := f[9] + g0 := g[0] + g1 := g[1] + g2 := g[2] + g3 := g[3] + g4 := g[4] + g5 := g[5] + g6 := g[6] + g7 := g[7] + g8 := g[8] + g9 := g[9] + g1_19 := 19 * g1 // 1.4*2^29 + g2_19 := 19 * g2 // 1.4*2^30; still ok + g3_19 := 19 * g3 + g4_19 := 19 * g4 + g5_19 := 19 * g5 + g6_19 := 19 * g6 + g7_19 := 19 * g7 + g8_19 := 19 * g8 + g9_19 := 19 * g9 + f1_2 := 2 * f1 + f3_2 := 2 * f3 + f5_2 := 2 * f5 + f7_2 := 2 * f7 + f9_2 := 2 * f9 + f0g0 := int64(f0) * int64(g0) + f0g1 := int64(f0) * int64(g1) + f0g2 := int64(f0) * int64(g2) + f0g3 := int64(f0) * int64(g3) + f0g4 := int64(f0) * int64(g4) + f0g5 := int64(f0) * int64(g5) + f0g6 := int64(f0) * int64(g6) + f0g7 := int64(f0) * int64(g7) + f0g8 := int64(f0) * int64(g8) + f0g9 := int64(f0) * int64(g9) + f1g0 := int64(f1) * int64(g0) + f1g1_2 := int64(f1_2) * int64(g1) + f1g2 := int64(f1) * int64(g2) + f1g3_2 := int64(f1_2) * int64(g3) + f1g4 := int64(f1) * int64(g4) + f1g5_2 := int64(f1_2) * int64(g5) + f1g6 := int64(f1) * int64(g6) + f1g7_2 := int64(f1_2) * int64(g7) + f1g8 := int64(f1) * int64(g8) + f1g9_38 := int64(f1_2) * int64(g9_19) + f2g0 := int64(f2) * int64(g0) + f2g1 := int64(f2) * int64(g1) + f2g2 := int64(f2) * int64(g2) + f2g3 := int64(f2) * int64(g3) + f2g4 := int64(f2) * int64(g4) + f2g5 := int64(f2) * int64(g5) + f2g6 := int64(f2) * int64(g6) + f2g7 := int64(f2) * int64(g7) + f2g8_19 := int64(f2) * int64(g8_19) + f2g9_19 := int64(f2) * int64(g9_19) + f3g0 := int64(f3) * int64(g0) + f3g1_2 := int64(f3_2) * int64(g1) + f3g2 := int64(f3) * int64(g2) + f3g3_2 := int64(f3_2) * int64(g3) + f3g4 := int64(f3) * int64(g4) + f3g5_2 := int64(f3_2) * int64(g5) + f3g6 := int64(f3) * int64(g6) + f3g7_38 := int64(f3_2) * int64(g7_19) + f3g8_19 := int64(f3) * int64(g8_19) + f3g9_38 := int64(f3_2) * int64(g9_19) + f4g0 := int64(f4) * int64(g0) + f4g1 := int64(f4) * int64(g1) + f4g2 := int64(f4) * int64(g2) + f4g3 := int64(f4) * int64(g3) + f4g4 := int64(f4) * int64(g4) + f4g5 := int64(f4) * int64(g5) + f4g6_19 := int64(f4) * int64(g6_19) + f4g7_19 := int64(f4) * int64(g7_19) + f4g8_19 := int64(f4) * int64(g8_19) + f4g9_19 := int64(f4) * int64(g9_19) + f5g0 := int64(f5) * int64(g0) + f5g1_2 := int64(f5_2) * int64(g1) + f5g2 := int64(f5) * int64(g2) + f5g3_2 := int64(f5_2) * int64(g3) + f5g4 := int64(f5) * int64(g4) + f5g5_38 := int64(f5_2) * int64(g5_19) + f5g6_19 := int64(f5) * int64(g6_19) + f5g7_38 := int64(f5_2) * int64(g7_19) + f5g8_19 := int64(f5) * int64(g8_19) + f5g9_38 := int64(f5_2) * int64(g9_19) + f6g0 := int64(f6) * int64(g0) + f6g1 := int64(f6) * int64(g1) + f6g2 := int64(f6) * int64(g2) + f6g3 := int64(f6) * int64(g3) + f6g4_19 := int64(f6) * int64(g4_19) + f6g5_19 := int64(f6) * int64(g5_19) + f6g6_19 := int64(f6) * int64(g6_19) + f6g7_19 := int64(f6) * int64(g7_19) + f6g8_19 := int64(f6) * int64(g8_19) + f6g9_19 := int64(f6) * int64(g9_19) + f7g0 := int64(f7) * int64(g0) + f7g1_2 := int64(f7_2) * int64(g1) + f7g2 := int64(f7) * int64(g2) + f7g3_38 := int64(f7_2) * int64(g3_19) + f7g4_19 := int64(f7) * int64(g4_19) + f7g5_38 := int64(f7_2) * int64(g5_19) + f7g6_19 := int64(f7) * int64(g6_19) + f7g7_38 := int64(f7_2) * int64(g7_19) + f7g8_19 := int64(f7) * int64(g8_19) + f7g9_38 := int64(f7_2) * int64(g9_19) + f8g0 := int64(f8) * int64(g0) + f8g1 := int64(f8) * int64(g1) + f8g2_19 := int64(f8) * int64(g2_19) + f8g3_19 := int64(f8) * int64(g3_19) + f8g4_19 := int64(f8) * int64(g4_19) + f8g5_19 := int64(f8) * int64(g5_19) + f8g6_19 := int64(f8) * int64(g6_19) + f8g7_19 := int64(f8) * int64(g7_19) + f8g8_19 := int64(f8) * int64(g8_19) + f8g9_19 := int64(f8) * int64(g9_19) + f9g0 := int64(f9) * int64(g0) + f9g1_38 := int64(f9_2) * int64(g1_19) + f9g2_19 := int64(f9) * int64(g2_19) + f9g3_38 := int64(f9_2) * int64(g3_19) + f9g4_19 := int64(f9) * int64(g4_19) + f9g5_38 := int64(f9_2) * int64(g5_19) + f9g6_19 := int64(f9) * int64(g6_19) + f9g7_38 := int64(f9_2) * int64(g7_19) + f9g8_19 := int64(f9) * int64(g8_19) + f9g9_38 := int64(f9_2) * int64(g9_19) + h0 := f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38 + h1 := f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19 + h2 := f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38 + h3 := f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19 + h4 := f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38 + h5 := f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19 + h6 := f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38 + h7 := f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19 + h8 := f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38 + h9 := f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0 + var carry [10]int64 + + // |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38)) + // i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8 + // |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19)) + // i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + // |h0| <= 2^25 + // |h4| <= 2^25 + // |h1| <= 1.51*2^58 + // |h5| <= 1.51*2^58 + + carry[1] = (h1 + (1 << 24)) >> 25 + h2 += carry[1] + h1 -= carry[1] << 25 + carry[5] = (h5 + (1 << 24)) >> 25 + h6 += carry[5] + h5 -= carry[5] << 25 + // |h1| <= 2^24; from now on fits into int32 + // |h5| <= 2^24; from now on fits into int32 + // |h2| <= 1.21*2^59 + // |h6| <= 1.21*2^59 + + carry[2] = (h2 + (1 << 25)) >> 26 + h3 += carry[2] + h2 -= carry[2] << 26 + carry[6] = (h6 + (1 << 25)) >> 26 + h7 += carry[6] + h6 -= carry[6] << 26 + // |h2| <= 2^25; from now on fits into int32 unchanged + // |h6| <= 2^25; from now on fits into int32 unchanged + // |h3| <= 1.51*2^58 + // |h7| <= 1.51*2^58 + + carry[3] = (h3 + (1 << 24)) >> 25 + h4 += carry[3] + h3 -= carry[3] << 25 + carry[7] = (h7 + (1 << 24)) >> 25 + h8 += carry[7] + h7 -= carry[7] << 25 + // |h3| <= 2^24; from now on fits into int32 unchanged + // |h7| <= 2^24; from now on fits into int32 unchanged + // |h4| <= 1.52*2^33 + // |h8| <= 1.52*2^33 + + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + carry[8] = (h8 + (1 << 25)) >> 26 + h9 += carry[8] + h8 -= carry[8] << 26 + // |h4| <= 2^25; from now on fits into int32 unchanged + // |h8| <= 2^25; from now on fits into int32 unchanged + // |h5| <= 1.01*2^24 + // |h9| <= 1.51*2^58 + + carry[9] = (h9 + (1 << 24)) >> 25 + h0 += carry[9] * 19 + h9 -= carry[9] << 25 + // |h9| <= 2^24; from now on fits into int32 unchanged + // |h0| <= 1.8*2^37 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + // |h0| <= 2^25; from now on fits into int32 unchanged + // |h1| <= 1.01*2^24 + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// feSquare calculates h = f*f. Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func feSquare(h, f *fieldElement) { + f0 := f[0] + f1 := f[1] + f2 := f[2] + f3 := f[3] + f4 := f[4] + f5 := f[5] + f6 := f[6] + f7 := f[7] + f8 := f[8] + f9 := f[9] + f0_2 := 2 * f0 + f1_2 := 2 * f1 + f2_2 := 2 * f2 + f3_2 := 2 * f3 + f4_2 := 2 * f4 + f5_2 := 2 * f5 + f6_2 := 2 * f6 + f7_2 := 2 * f7 + f5_38 := 38 * f5 // 1.31*2^30 + f6_19 := 19 * f6 // 1.31*2^30 + f7_38 := 38 * f7 // 1.31*2^30 + f8_19 := 19 * f8 // 1.31*2^30 + f9_38 := 38 * f9 // 1.31*2^30 + f0f0 := int64(f0) * int64(f0) + f0f1_2 := int64(f0_2) * int64(f1) + f0f2_2 := int64(f0_2) * int64(f2) + f0f3_2 := int64(f0_2) * int64(f3) + f0f4_2 := int64(f0_2) * int64(f4) + f0f5_2 := int64(f0_2) * int64(f5) + f0f6_2 := int64(f0_2) * int64(f6) + f0f7_2 := int64(f0_2) * int64(f7) + f0f8_2 := int64(f0_2) * int64(f8) + f0f9_2 := int64(f0_2) * int64(f9) + f1f1_2 := int64(f1_2) * int64(f1) + f1f2_2 := int64(f1_2) * int64(f2) + f1f3_4 := int64(f1_2) * int64(f3_2) + f1f4_2 := int64(f1_2) * int64(f4) + f1f5_4 := int64(f1_2) * int64(f5_2) + f1f6_2 := int64(f1_2) * int64(f6) + f1f7_4 := int64(f1_2) * int64(f7_2) + f1f8_2 := int64(f1_2) * int64(f8) + f1f9_76 := int64(f1_2) * int64(f9_38) + f2f2 := int64(f2) * int64(f2) + f2f3_2 := int64(f2_2) * int64(f3) + f2f4_2 := int64(f2_2) * int64(f4) + f2f5_2 := int64(f2_2) * int64(f5) + f2f6_2 := int64(f2_2) * int64(f6) + f2f7_2 := int64(f2_2) * int64(f7) + f2f8_38 := int64(f2_2) * int64(f8_19) + f2f9_38 := int64(f2) * int64(f9_38) + f3f3_2 := int64(f3_2) * int64(f3) + f3f4_2 := int64(f3_2) * int64(f4) + f3f5_4 := int64(f3_2) * int64(f5_2) + f3f6_2 := int64(f3_2) * int64(f6) + f3f7_76 := int64(f3_2) * int64(f7_38) + f3f8_38 := int64(f3_2) * int64(f8_19) + f3f9_76 := int64(f3_2) * int64(f9_38) + f4f4 := int64(f4) * int64(f4) + f4f5_2 := int64(f4_2) * int64(f5) + f4f6_38 := int64(f4_2) * int64(f6_19) + f4f7_38 := int64(f4) * int64(f7_38) + f4f8_38 := int64(f4_2) * int64(f8_19) + f4f9_38 := int64(f4) * int64(f9_38) + f5f5_38 := int64(f5) * int64(f5_38) + f5f6_38 := int64(f5_2) * int64(f6_19) + f5f7_76 := int64(f5_2) * int64(f7_38) + f5f8_38 := int64(f5_2) * int64(f8_19) + f5f9_76 := int64(f5_2) * int64(f9_38) + f6f6_19 := int64(f6) * int64(f6_19) + f6f7_38 := int64(f6) * int64(f7_38) + f6f8_38 := int64(f6_2) * int64(f8_19) + f6f9_38 := int64(f6) * int64(f9_38) + f7f7_38 := int64(f7) * int64(f7_38) + f7f8_38 := int64(f7_2) * int64(f8_19) + f7f9_76 := int64(f7_2) * int64(f9_38) + f8f8_19 := int64(f8) * int64(f8_19) + f8f9_38 := int64(f8) * int64(f9_38) + f9f9_38 := int64(f9) * int64(f9_38) + h0 := f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38 + h1 := f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38 + h2 := f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19 + h3 := f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38 + h4 := f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38 + h5 := f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38 + h6 := f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19 + h7 := f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38 + h8 := f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38 + h9 := f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2 + var carry [10]int64 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + + carry[1] = (h1 + (1 << 24)) >> 25 + h2 += carry[1] + h1 -= carry[1] << 25 + carry[5] = (h5 + (1 << 24)) >> 25 + h6 += carry[5] + h5 -= carry[5] << 25 + + carry[2] = (h2 + (1 << 25)) >> 26 + h3 += carry[2] + h2 -= carry[2] << 26 + carry[6] = (h6 + (1 << 25)) >> 26 + h7 += carry[6] + h6 -= carry[6] << 26 + + carry[3] = (h3 + (1 << 24)) >> 25 + h4 += carry[3] + h3 -= carry[3] << 25 + carry[7] = (h7 + (1 << 24)) >> 25 + h8 += carry[7] + h7 -= carry[7] << 25 + + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + carry[8] = (h8 + (1 << 25)) >> 26 + h9 += carry[8] + h8 -= carry[8] << 26 + + carry[9] = (h9 + (1 << 24)) >> 25 + h0 += carry[9] * 19 + h9 -= carry[9] << 25 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// feMul121666 calculates h = f * 121666. Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func feMul121666(h, f *fieldElement) { + h0 := int64(f[0]) * 121666 + h1 := int64(f[1]) * 121666 + h2 := int64(f[2]) * 121666 + h3 := int64(f[3]) * 121666 + h4 := int64(f[4]) * 121666 + h5 := int64(f[5]) * 121666 + h6 := int64(f[6]) * 121666 + h7 := int64(f[7]) * 121666 + h8 := int64(f[8]) * 121666 + h9 := int64(f[9]) * 121666 + var carry [10]int64 + + carry[9] = (h9 + (1 << 24)) >> 25 + h0 += carry[9] * 19 + h9 -= carry[9] << 25 + carry[1] = (h1 + (1 << 24)) >> 25 + h2 += carry[1] + h1 -= carry[1] << 25 + carry[3] = (h3 + (1 << 24)) >> 25 + h4 += carry[3] + h3 -= carry[3] << 25 + carry[5] = (h5 + (1 << 24)) >> 25 + h6 += carry[5] + h5 -= carry[5] << 25 + carry[7] = (h7 + (1 << 24)) >> 25 + h8 += carry[7] + h7 -= carry[7] << 25 + + carry[0] = (h0 + (1 << 25)) >> 26 + h1 += carry[0] + h0 -= carry[0] << 26 + carry[2] = (h2 + (1 << 25)) >> 26 + h3 += carry[2] + h2 -= carry[2] << 26 + carry[4] = (h4 + (1 << 25)) >> 26 + h5 += carry[4] + h4 -= carry[4] << 26 + carry[6] = (h6 + (1 << 25)) >> 26 + h7 += carry[6] + h6 -= carry[6] << 26 + carry[8] = (h8 + (1 << 25)) >> 26 + h9 += carry[8] + h8 -= carry[8] << 26 + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// feInvert sets out = z^-1. +func feInvert(out, z *fieldElement) { + var t0, t1, t2, t3 fieldElement + var i int + + feSquare(&t0, z) + for i = 1; i < 1; i++ { + feSquare(&t0, &t0) + } + feSquare(&t1, &t0) + for i = 1; i < 2; i++ { + feSquare(&t1, &t1) + } + feMul(&t1, z, &t1) + feMul(&t0, &t0, &t1) + feSquare(&t2, &t0) + for i = 1; i < 1; i++ { + feSquare(&t2, &t2) + } + feMul(&t1, &t1, &t2) + feSquare(&t2, &t1) + for i = 1; i < 5; i++ { + feSquare(&t2, &t2) + } + feMul(&t1, &t2, &t1) + feSquare(&t2, &t1) + for i = 1; i < 10; i++ { + feSquare(&t2, &t2) + } + feMul(&t2, &t2, &t1) + feSquare(&t3, &t2) + for i = 1; i < 20; i++ { + feSquare(&t3, &t3) + } + feMul(&t2, &t3, &t2) + feSquare(&t2, &t2) + for i = 1; i < 10; i++ { + feSquare(&t2, &t2) + } + feMul(&t1, &t2, &t1) + feSquare(&t2, &t1) + for i = 1; i < 50; i++ { + feSquare(&t2, &t2) + } + feMul(&t2, &t2, &t1) + feSquare(&t3, &t2) + for i = 1; i < 100; i++ { + feSquare(&t3, &t3) + } + feMul(&t2, &t3, &t2) + feSquare(&t2, &t2) + for i = 1; i < 50; i++ { + feSquare(&t2, &t2) + } + feMul(&t1, &t2, &t1) + feSquare(&t1, &t1) + for i = 1; i < 5; i++ { + feSquare(&t1, &t1) + } + feMul(out, &t1, &t0) +} + +func scalarMult(out, in, base *[32]byte) { + var e [32]byte + + copy(e[:], in[:]) + e[0] &= 248 + e[31] &= 127 + e[31] |= 64 + + var x1, x2, z2, x3, z3, tmp0, tmp1 fieldElement + feFromBytes(&x1, base) + feOne(&x2) + feCopy(&x3, &x1) + feOne(&z3) + + swap := int32(0) + for pos := 254; pos >= 0; pos-- { + b := e[pos/8] >> uint(pos&7) + b &= 1 + swap ^= int32(b) + feCSwap(&x2, &x3, swap) + feCSwap(&z2, &z3, swap) + swap = int32(b) + + feSub(&tmp0, &x3, &z3) + feSub(&tmp1, &x2, &z2) + feAdd(&x2, &x2, &z2) + feAdd(&z2, &x3, &z3) + feMul(&z3, &tmp0, &x2) + feMul(&z2, &z2, &tmp1) + feSquare(&tmp0, &tmp1) + feSquare(&tmp1, &x2) + feAdd(&x3, &z3, &z2) + feSub(&z2, &z3, &z2) + feMul(&x2, &tmp1, &tmp0) + feSub(&tmp1, &tmp1, &tmp0) + feSquare(&z2, &z2) + feMul121666(&z3, &tmp1) + feSquare(&x3, &x3) + feAdd(&tmp0, &tmp0, &z3) + feMul(&z3, &x1, &z2) + feMul(&z2, &tmp1, &tmp0) + } + + feCSwap(&x2, &x3, swap) + feCSwap(&z2, &z3, swap) + + feInvert(&z2, &z2) + feMul(&x2, &x2, &z2) + feToBytes(out, &x2) +} diff --git a/vendor/golang.org/x/crypto/curve25519/curve25519_test.go b/vendor/golang.org/x/crypto/curve25519/curve25519_test.go new file mode 100644 index 0000000..051a830 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/curve25519_test.go @@ -0,0 +1,39 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package curve25519 + +import ( + "fmt" + "testing" +) + +const expectedHex = "89161fde887b2b53de549af483940106ecc114d6982daa98256de23bdf77661a" + +func TestBaseScalarMult(t *testing.T) { + var a, b [32]byte + in := &a + out := &b + a[0] = 1 + + for i := 0; i < 200; i++ { + ScalarBaseMult(out, in) + in, out = out, in + } + + result := fmt.Sprintf("%x", in[:]) + if result != expectedHex { + t.Errorf("incorrect result: got %s, want %s", result, expectedHex) + } +} + +func BenchmarkScalarBaseMult(b *testing.B) { + var in, out [32]byte + in[0] = 1 + + b.SetBytes(32) + for i := 0; i < b.N; i++ { + ScalarBaseMult(&out, &in) + } +} diff --git a/vendor/golang.org/x/crypto/curve25519/doc.go b/vendor/golang.org/x/crypto/curve25519/doc.go new file mode 100644 index 0000000..da9b10d --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/doc.go @@ -0,0 +1,23 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package curve25519 provides an implementation of scalar multiplication on +// the elliptic curve known as curve25519. See https://cr.yp.to/ecdh.html +package curve25519 // import "golang.org/x/crypto/curve25519" + +// basePoint is the x coordinate of the generator of the curve. +var basePoint = [32]byte{9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} + +// ScalarMult sets dst to the product in*base where dst and base are the x +// coordinates of group points and all values are in little-endian form. +func ScalarMult(dst, in, base *[32]byte) { + scalarMult(dst, in, base) +} + +// ScalarBaseMult sets dst to the product in*base where dst and base are the x +// coordinates of group points, base is the standard generator and all values +// are in little-endian form. +func ScalarBaseMult(dst, in *[32]byte) { + ScalarMult(dst, in, &basePoint) +} diff --git a/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s b/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s new file mode 100644 index 0000000..3908161 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/freeze_amd64.s @@ -0,0 +1,73 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +#include "const_amd64.h" + +// func freeze(inout *[5]uint64) +TEXT ·freeze(SB),7,$0-8 + MOVQ inout+0(FP), DI + + MOVQ 0(DI),SI + MOVQ 8(DI),DX + MOVQ 16(DI),CX + MOVQ 24(DI),R8 + MOVQ 32(DI),R9 + MOVQ $REDMASK51,AX + MOVQ AX,R10 + SUBQ $18,R10 + MOVQ $3,R11 +REDUCELOOP: + MOVQ SI,R12 + SHRQ $51,R12 + ANDQ AX,SI + ADDQ R12,DX + MOVQ DX,R12 + SHRQ $51,R12 + ANDQ AX,DX + ADDQ R12,CX + MOVQ CX,R12 + SHRQ $51,R12 + ANDQ AX,CX + ADDQ R12,R8 + MOVQ R8,R12 + SHRQ $51,R12 + ANDQ AX,R8 + ADDQ R12,R9 + MOVQ R9,R12 + SHRQ $51,R12 + ANDQ AX,R9 + IMUL3Q $19,R12,R12 + ADDQ R12,SI + SUBQ $1,R11 + JA REDUCELOOP + MOVQ $1,R12 + CMPQ R10,SI + CMOVQLT R11,R12 + CMPQ AX,DX + CMOVQNE R11,R12 + CMPQ AX,CX + CMOVQNE R11,R12 + CMPQ AX,R8 + CMOVQNE R11,R12 + CMPQ AX,R9 + CMOVQNE R11,R12 + NEGQ R12 + ANDQ R12,AX + ANDQ R12,R10 + SUBQ R10,SI + SUBQ AX,DX + SUBQ AX,CX + SUBQ AX,R8 + SUBQ AX,R9 + MOVQ SI,0(DI) + MOVQ DX,8(DI) + MOVQ CX,16(DI) + MOVQ R8,24(DI) + MOVQ R9,32(DI) + RET diff --git a/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s b/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s new file mode 100644 index 0000000..9e9040b --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/ladderstep_amd64.s @@ -0,0 +1,1377 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +#include "const_amd64.h" + +// func ladderstep(inout *[5][5]uint64) +TEXT ·ladderstep(SB),0,$296-8 + MOVQ inout+0(FP),DI + + MOVQ 40(DI),SI + MOVQ 48(DI),DX + MOVQ 56(DI),CX + MOVQ 64(DI),R8 + MOVQ 72(DI),R9 + MOVQ SI,AX + MOVQ DX,R10 + MOVQ CX,R11 + MOVQ R8,R12 + MOVQ R9,R13 + ADDQ ·_2P0(SB),AX + ADDQ ·_2P1234(SB),R10 + ADDQ ·_2P1234(SB),R11 + ADDQ ·_2P1234(SB),R12 + ADDQ ·_2P1234(SB),R13 + ADDQ 80(DI),SI + ADDQ 88(DI),DX + ADDQ 96(DI),CX + ADDQ 104(DI),R8 + ADDQ 112(DI),R9 + SUBQ 80(DI),AX + SUBQ 88(DI),R10 + SUBQ 96(DI),R11 + SUBQ 104(DI),R12 + SUBQ 112(DI),R13 + MOVQ SI,0(SP) + MOVQ DX,8(SP) + MOVQ CX,16(SP) + MOVQ R8,24(SP) + MOVQ R9,32(SP) + MOVQ AX,40(SP) + MOVQ R10,48(SP) + MOVQ R11,56(SP) + MOVQ R12,64(SP) + MOVQ R13,72(SP) + MOVQ 40(SP),AX + MULQ 40(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 40(SP),AX + SHLQ $1,AX + MULQ 48(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 40(SP),AX + SHLQ $1,AX + MULQ 56(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 40(SP),AX + SHLQ $1,AX + MULQ 64(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 40(SP),AX + SHLQ $1,AX + MULQ 72(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 48(SP),AX + MULQ 48(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 48(SP),AX + SHLQ $1,AX + MULQ 56(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 48(SP),AX + SHLQ $1,AX + MULQ 64(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 48(SP),DX + IMUL3Q $38,DX,AX + MULQ 72(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 56(SP),AX + MULQ 56(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 56(SP),DX + IMUL3Q $38,DX,AX + MULQ 64(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 56(SP),DX + IMUL3Q $38,DX,AX + MULQ 72(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 64(SP),DX + IMUL3Q $19,DX,AX + MULQ 64(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 64(SP),DX + IMUL3Q $38,DX,AX + MULQ 72(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 72(SP),DX + IMUL3Q $19,DX,AX + MULQ 72(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ $REDMASK51,DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + ANDQ DX,SI + MOVQ CX,R8 + SHRQ $51,CX + ADDQ R10,CX + ANDQ DX,R8 + MOVQ CX,R9 + SHRQ $51,CX + ADDQ R12,CX + ANDQ DX,R9 + MOVQ CX,AX + SHRQ $51,CX + ADDQ R14,CX + ANDQ DX,AX + MOVQ CX,R10 + SHRQ $51,CX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,80(SP) + MOVQ R8,88(SP) + MOVQ R9,96(SP) + MOVQ AX,104(SP) + MOVQ R10,112(SP) + MOVQ 0(SP),AX + MULQ 0(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 0(SP),AX + SHLQ $1,AX + MULQ 8(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 0(SP),AX + SHLQ $1,AX + MULQ 16(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 0(SP),AX + SHLQ $1,AX + MULQ 24(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 0(SP),AX + SHLQ $1,AX + MULQ 32(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 8(SP),AX + MULQ 8(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 8(SP),AX + SHLQ $1,AX + MULQ 16(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 8(SP),AX + SHLQ $1,AX + MULQ 24(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 8(SP),DX + IMUL3Q $38,DX,AX + MULQ 32(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 16(SP),AX + MULQ 16(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 16(SP),DX + IMUL3Q $38,DX,AX + MULQ 24(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 16(SP),DX + IMUL3Q $38,DX,AX + MULQ 32(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 24(SP),DX + IMUL3Q $19,DX,AX + MULQ 24(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 24(SP),DX + IMUL3Q $38,DX,AX + MULQ 32(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 32(SP),DX + IMUL3Q $19,DX,AX + MULQ 32(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ $REDMASK51,DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + ANDQ DX,SI + MOVQ CX,R8 + SHRQ $51,CX + ADDQ R10,CX + ANDQ DX,R8 + MOVQ CX,R9 + SHRQ $51,CX + ADDQ R12,CX + ANDQ DX,R9 + MOVQ CX,AX + SHRQ $51,CX + ADDQ R14,CX + ANDQ DX,AX + MOVQ CX,R10 + SHRQ $51,CX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,120(SP) + MOVQ R8,128(SP) + MOVQ R9,136(SP) + MOVQ AX,144(SP) + MOVQ R10,152(SP) + MOVQ SI,SI + MOVQ R8,DX + MOVQ R9,CX + MOVQ AX,R8 + MOVQ R10,R9 + ADDQ ·_2P0(SB),SI + ADDQ ·_2P1234(SB),DX + ADDQ ·_2P1234(SB),CX + ADDQ ·_2P1234(SB),R8 + ADDQ ·_2P1234(SB),R9 + SUBQ 80(SP),SI + SUBQ 88(SP),DX + SUBQ 96(SP),CX + SUBQ 104(SP),R8 + SUBQ 112(SP),R9 + MOVQ SI,160(SP) + MOVQ DX,168(SP) + MOVQ CX,176(SP) + MOVQ R8,184(SP) + MOVQ R9,192(SP) + MOVQ 120(DI),SI + MOVQ 128(DI),DX + MOVQ 136(DI),CX + MOVQ 144(DI),R8 + MOVQ 152(DI),R9 + MOVQ SI,AX + MOVQ DX,R10 + MOVQ CX,R11 + MOVQ R8,R12 + MOVQ R9,R13 + ADDQ ·_2P0(SB),AX + ADDQ ·_2P1234(SB),R10 + ADDQ ·_2P1234(SB),R11 + ADDQ ·_2P1234(SB),R12 + ADDQ ·_2P1234(SB),R13 + ADDQ 160(DI),SI + ADDQ 168(DI),DX + ADDQ 176(DI),CX + ADDQ 184(DI),R8 + ADDQ 192(DI),R9 + SUBQ 160(DI),AX + SUBQ 168(DI),R10 + SUBQ 176(DI),R11 + SUBQ 184(DI),R12 + SUBQ 192(DI),R13 + MOVQ SI,200(SP) + MOVQ DX,208(SP) + MOVQ CX,216(SP) + MOVQ R8,224(SP) + MOVQ R9,232(SP) + MOVQ AX,240(SP) + MOVQ R10,248(SP) + MOVQ R11,256(SP) + MOVQ R12,264(SP) + MOVQ R13,272(SP) + MOVQ 224(SP),SI + IMUL3Q $19,SI,AX + MOVQ AX,280(SP) + MULQ 56(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 232(SP),DX + IMUL3Q $19,DX,AX + MOVQ AX,288(SP) + MULQ 48(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 200(SP),AX + MULQ 40(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 200(SP),AX + MULQ 48(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 200(SP),AX + MULQ 56(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 200(SP),AX + MULQ 64(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 200(SP),AX + MULQ 72(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 208(SP),AX + MULQ 40(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 208(SP),AX + MULQ 48(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 208(SP),AX + MULQ 56(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 208(SP),AX + MULQ 64(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 208(SP),DX + IMUL3Q $19,DX,AX + MULQ 72(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 216(SP),AX + MULQ 40(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 216(SP),AX + MULQ 48(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 216(SP),AX + MULQ 56(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 216(SP),DX + IMUL3Q $19,DX,AX + MULQ 64(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 216(SP),DX + IMUL3Q $19,DX,AX + MULQ 72(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 224(SP),AX + MULQ 40(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 224(SP),AX + MULQ 48(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 280(SP),AX + MULQ 64(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 280(SP),AX + MULQ 72(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 232(SP),AX + MULQ 40(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 288(SP),AX + MULQ 56(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 288(SP),AX + MULQ 64(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 288(SP),AX + MULQ 72(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ $REDMASK51,DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,40(SP) + MOVQ R8,48(SP) + MOVQ R9,56(SP) + MOVQ AX,64(SP) + MOVQ R10,72(SP) + MOVQ 264(SP),SI + IMUL3Q $19,SI,AX + MOVQ AX,200(SP) + MULQ 16(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 272(SP),DX + IMUL3Q $19,DX,AX + MOVQ AX,208(SP) + MULQ 8(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 240(SP),AX + MULQ 0(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 240(SP),AX + MULQ 8(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 240(SP),AX + MULQ 16(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 240(SP),AX + MULQ 24(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 240(SP),AX + MULQ 32(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 248(SP),AX + MULQ 0(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 248(SP),AX + MULQ 8(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 248(SP),AX + MULQ 16(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 248(SP),AX + MULQ 24(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 248(SP),DX + IMUL3Q $19,DX,AX + MULQ 32(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 256(SP),AX + MULQ 0(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 256(SP),AX + MULQ 8(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 256(SP),AX + MULQ 16(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 256(SP),DX + IMUL3Q $19,DX,AX + MULQ 24(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 256(SP),DX + IMUL3Q $19,DX,AX + MULQ 32(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 264(SP),AX + MULQ 0(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 264(SP),AX + MULQ 8(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 200(SP),AX + MULQ 24(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 200(SP),AX + MULQ 32(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 272(SP),AX + MULQ 0(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 208(SP),AX + MULQ 16(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 208(SP),AX + MULQ 24(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 208(SP),AX + MULQ 32(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ $REDMASK51,DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,DX + MOVQ R8,CX + MOVQ R9,R11 + MOVQ AX,R12 + MOVQ R10,R13 + ADDQ ·_2P0(SB),DX + ADDQ ·_2P1234(SB),CX + ADDQ ·_2P1234(SB),R11 + ADDQ ·_2P1234(SB),R12 + ADDQ ·_2P1234(SB),R13 + ADDQ 40(SP),SI + ADDQ 48(SP),R8 + ADDQ 56(SP),R9 + ADDQ 64(SP),AX + ADDQ 72(SP),R10 + SUBQ 40(SP),DX + SUBQ 48(SP),CX + SUBQ 56(SP),R11 + SUBQ 64(SP),R12 + SUBQ 72(SP),R13 + MOVQ SI,120(DI) + MOVQ R8,128(DI) + MOVQ R9,136(DI) + MOVQ AX,144(DI) + MOVQ R10,152(DI) + MOVQ DX,160(DI) + MOVQ CX,168(DI) + MOVQ R11,176(DI) + MOVQ R12,184(DI) + MOVQ R13,192(DI) + MOVQ 120(DI),AX + MULQ 120(DI) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 120(DI),AX + SHLQ $1,AX + MULQ 128(DI) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 120(DI),AX + SHLQ $1,AX + MULQ 136(DI) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 120(DI),AX + SHLQ $1,AX + MULQ 144(DI) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 120(DI),AX + SHLQ $1,AX + MULQ 152(DI) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 128(DI),AX + MULQ 128(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 128(DI),AX + SHLQ $1,AX + MULQ 136(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 128(DI),AX + SHLQ $1,AX + MULQ 144(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 128(DI),DX + IMUL3Q $38,DX,AX + MULQ 152(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 136(DI),AX + MULQ 136(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 136(DI),DX + IMUL3Q $38,DX,AX + MULQ 144(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 136(DI),DX + IMUL3Q $38,DX,AX + MULQ 152(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 144(DI),DX + IMUL3Q $19,DX,AX + MULQ 144(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 144(DI),DX + IMUL3Q $38,DX,AX + MULQ 152(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 152(DI),DX + IMUL3Q $19,DX,AX + MULQ 152(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ $REDMASK51,DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + ANDQ DX,SI + MOVQ CX,R8 + SHRQ $51,CX + ADDQ R10,CX + ANDQ DX,R8 + MOVQ CX,R9 + SHRQ $51,CX + ADDQ R12,CX + ANDQ DX,R9 + MOVQ CX,AX + SHRQ $51,CX + ADDQ R14,CX + ANDQ DX,AX + MOVQ CX,R10 + SHRQ $51,CX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,120(DI) + MOVQ R8,128(DI) + MOVQ R9,136(DI) + MOVQ AX,144(DI) + MOVQ R10,152(DI) + MOVQ 160(DI),AX + MULQ 160(DI) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 160(DI),AX + SHLQ $1,AX + MULQ 168(DI) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 160(DI),AX + SHLQ $1,AX + MULQ 176(DI) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 160(DI),AX + SHLQ $1,AX + MULQ 184(DI) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 160(DI),AX + SHLQ $1,AX + MULQ 192(DI) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 168(DI),AX + MULQ 168(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 168(DI),AX + SHLQ $1,AX + MULQ 176(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 168(DI),AX + SHLQ $1,AX + MULQ 184(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 168(DI),DX + IMUL3Q $38,DX,AX + MULQ 192(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(DI),AX + MULQ 176(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 176(DI),DX + IMUL3Q $38,DX,AX + MULQ 184(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(DI),DX + IMUL3Q $38,DX,AX + MULQ 192(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 184(DI),DX + IMUL3Q $19,DX,AX + MULQ 184(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 184(DI),DX + IMUL3Q $38,DX,AX + MULQ 192(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 192(DI),DX + IMUL3Q $19,DX,AX + MULQ 192(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ $REDMASK51,DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + ANDQ DX,SI + MOVQ CX,R8 + SHRQ $51,CX + ADDQ R10,CX + ANDQ DX,R8 + MOVQ CX,R9 + SHRQ $51,CX + ADDQ R12,CX + ANDQ DX,R9 + MOVQ CX,AX + SHRQ $51,CX + ADDQ R14,CX + ANDQ DX,AX + MOVQ CX,R10 + SHRQ $51,CX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,160(DI) + MOVQ R8,168(DI) + MOVQ R9,176(DI) + MOVQ AX,184(DI) + MOVQ R10,192(DI) + MOVQ 184(DI),SI + IMUL3Q $19,SI,AX + MOVQ AX,0(SP) + MULQ 16(DI) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 192(DI),DX + IMUL3Q $19,DX,AX + MOVQ AX,8(SP) + MULQ 8(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 160(DI),AX + MULQ 0(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 160(DI),AX + MULQ 8(DI) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 160(DI),AX + MULQ 16(DI) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 160(DI),AX + MULQ 24(DI) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 160(DI),AX + MULQ 32(DI) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 168(DI),AX + MULQ 0(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 168(DI),AX + MULQ 8(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 168(DI),AX + MULQ 16(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 168(DI),AX + MULQ 24(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 168(DI),DX + IMUL3Q $19,DX,AX + MULQ 32(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(DI),AX + MULQ 0(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 176(DI),AX + MULQ 8(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 176(DI),AX + MULQ 16(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 176(DI),DX + IMUL3Q $19,DX,AX + MULQ 24(DI) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 176(DI),DX + IMUL3Q $19,DX,AX + MULQ 32(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 184(DI),AX + MULQ 0(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 184(DI),AX + MULQ 8(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 0(SP),AX + MULQ 24(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 0(SP),AX + MULQ 32(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 192(DI),AX + MULQ 0(DI) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 8(SP),AX + MULQ 16(DI) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 8(SP),AX + MULQ 24(DI) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 8(SP),AX + MULQ 32(DI) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ $REDMASK51,DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,160(DI) + MOVQ R8,168(DI) + MOVQ R9,176(DI) + MOVQ AX,184(DI) + MOVQ R10,192(DI) + MOVQ 144(SP),SI + IMUL3Q $19,SI,AX + MOVQ AX,0(SP) + MULQ 96(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 152(SP),DX + IMUL3Q $19,DX,AX + MOVQ AX,8(SP) + MULQ 88(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 120(SP),AX + MULQ 80(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 120(SP),AX + MULQ 88(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 120(SP),AX + MULQ 96(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 120(SP),AX + MULQ 104(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 120(SP),AX + MULQ 112(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 128(SP),AX + MULQ 80(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 128(SP),AX + MULQ 88(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 128(SP),AX + MULQ 96(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 128(SP),AX + MULQ 104(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 128(SP),DX + IMUL3Q $19,DX,AX + MULQ 112(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 136(SP),AX + MULQ 80(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 136(SP),AX + MULQ 88(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 136(SP),AX + MULQ 96(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 136(SP),DX + IMUL3Q $19,DX,AX + MULQ 104(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 136(SP),DX + IMUL3Q $19,DX,AX + MULQ 112(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 144(SP),AX + MULQ 80(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 144(SP),AX + MULQ 88(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 0(SP),AX + MULQ 104(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 0(SP),AX + MULQ 112(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 152(SP),AX + MULQ 80(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 8(SP),AX + MULQ 96(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 8(SP),AX + MULQ 104(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 8(SP),AX + MULQ 112(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ $REDMASK51,DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,40(DI) + MOVQ R8,48(DI) + MOVQ R9,56(DI) + MOVQ AX,64(DI) + MOVQ R10,72(DI) + MOVQ 160(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + MOVQ AX,SI + MOVQ DX,CX + MOVQ 168(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + ADDQ AX,CX + MOVQ DX,R8 + MOVQ 176(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + ADDQ AX,R8 + MOVQ DX,R9 + MOVQ 184(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + ADDQ AX,R9 + MOVQ DX,R10 + MOVQ 192(SP),AX + MULQ ·_121666_213(SB) + SHRQ $13,AX + ADDQ AX,R10 + IMUL3Q $19,DX,DX + ADDQ DX,SI + ADDQ 80(SP),SI + ADDQ 88(SP),CX + ADDQ 96(SP),R8 + ADDQ 104(SP),R9 + ADDQ 112(SP),R10 + MOVQ SI,80(DI) + MOVQ CX,88(DI) + MOVQ R8,96(DI) + MOVQ R9,104(DI) + MOVQ R10,112(DI) + MOVQ 104(DI),SI + IMUL3Q $19,SI,AX + MOVQ AX,0(SP) + MULQ 176(SP) + MOVQ AX,SI + MOVQ DX,CX + MOVQ 112(DI),DX + IMUL3Q $19,DX,AX + MOVQ AX,8(SP) + MULQ 168(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 80(DI),AX + MULQ 160(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 80(DI),AX + MULQ 168(SP) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 80(DI),AX + MULQ 176(SP) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 80(DI),AX + MULQ 184(SP) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 80(DI),AX + MULQ 192(SP) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 88(DI),AX + MULQ 160(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 88(DI),AX + MULQ 168(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 88(DI),AX + MULQ 176(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 88(DI),AX + MULQ 184(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 88(DI),DX + IMUL3Q $19,DX,AX + MULQ 192(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 96(DI),AX + MULQ 160(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 96(DI),AX + MULQ 168(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 96(DI),AX + MULQ 176(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 96(DI),DX + IMUL3Q $19,DX,AX + MULQ 184(SP) + ADDQ AX,SI + ADCQ DX,CX + MOVQ 96(DI),DX + IMUL3Q $19,DX,AX + MULQ 192(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 104(DI),AX + MULQ 160(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 104(DI),AX + MULQ 168(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 0(SP),AX + MULQ 184(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 0(SP),AX + MULQ 192(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 112(DI),AX + MULQ 160(SP) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 8(SP),AX + MULQ 176(SP) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 8(SP),AX + MULQ 184(SP) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 8(SP),AX + MULQ 192(SP) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ $REDMASK51,DX + SHLQ $13,CX:SI + ANDQ DX,SI + SHLQ $13,R9:R8 + ANDQ DX,R8 + ADDQ CX,R8 + SHLQ $13,R11:R10 + ANDQ DX,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ DX,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ DX,R14 + ADDQ R13,R14 + IMUL3Q $19,R15,CX + ADDQ CX,SI + MOVQ SI,CX + SHRQ $51,CX + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $51,CX + ANDQ DX,SI + ADDQ R10,CX + MOVQ CX,R9 + SHRQ $51,CX + ANDQ DX,R8 + ADDQ R12,CX + MOVQ CX,AX + SHRQ $51,CX + ANDQ DX,R9 + ADDQ R14,CX + MOVQ CX,R10 + SHRQ $51,CX + ANDQ DX,AX + IMUL3Q $19,CX,CX + ADDQ CX,SI + ANDQ DX,R10 + MOVQ SI,80(DI) + MOVQ R8,88(DI) + MOVQ R9,96(DI) + MOVQ AX,104(DI) + MOVQ R10,112(DI) + RET diff --git a/vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go b/vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go new file mode 100644 index 0000000..5822bd5 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/mont25519_amd64.go @@ -0,0 +1,240 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +package curve25519 + +// These functions are implemented in the .s files. The names of the functions +// in the rest of the file are also taken from the SUPERCOP sources to help +// people following along. + +//go:noescape + +func cswap(inout *[5]uint64, v uint64) + +//go:noescape + +func ladderstep(inout *[5][5]uint64) + +//go:noescape + +func freeze(inout *[5]uint64) + +//go:noescape + +func mul(dest, a, b *[5]uint64) + +//go:noescape + +func square(out, in *[5]uint64) + +// mladder uses a Montgomery ladder to calculate (xr/zr) *= s. +func mladder(xr, zr *[5]uint64, s *[32]byte) { + var work [5][5]uint64 + + work[0] = *xr + setint(&work[1], 1) + setint(&work[2], 0) + work[3] = *xr + setint(&work[4], 1) + + j := uint(6) + var prevbit byte + + for i := 31; i >= 0; i-- { + for j < 8 { + bit := ((*s)[i] >> j) & 1 + swap := bit ^ prevbit + prevbit = bit + cswap(&work[1], uint64(swap)) + ladderstep(&work) + j-- + } + j = 7 + } + + *xr = work[1] + *zr = work[2] +} + +func scalarMult(out, in, base *[32]byte) { + var e [32]byte + copy(e[:], (*in)[:]) + e[0] &= 248 + e[31] &= 127 + e[31] |= 64 + + var t, z [5]uint64 + unpack(&t, base) + mladder(&t, &z, &e) + invert(&z, &z) + mul(&t, &t, &z) + pack(out, &t) +} + +func setint(r *[5]uint64, v uint64) { + r[0] = v + r[1] = 0 + r[2] = 0 + r[3] = 0 + r[4] = 0 +} + +// unpack sets r = x where r consists of 5, 51-bit limbs in little-endian +// order. +func unpack(r *[5]uint64, x *[32]byte) { + r[0] = uint64(x[0]) | + uint64(x[1])<<8 | + uint64(x[2])<<16 | + uint64(x[3])<<24 | + uint64(x[4])<<32 | + uint64(x[5])<<40 | + uint64(x[6]&7)<<48 + + r[1] = uint64(x[6])>>3 | + uint64(x[7])<<5 | + uint64(x[8])<<13 | + uint64(x[9])<<21 | + uint64(x[10])<<29 | + uint64(x[11])<<37 | + uint64(x[12]&63)<<45 + + r[2] = uint64(x[12])>>6 | + uint64(x[13])<<2 | + uint64(x[14])<<10 | + uint64(x[15])<<18 | + uint64(x[16])<<26 | + uint64(x[17])<<34 | + uint64(x[18])<<42 | + uint64(x[19]&1)<<50 + + r[3] = uint64(x[19])>>1 | + uint64(x[20])<<7 | + uint64(x[21])<<15 | + uint64(x[22])<<23 | + uint64(x[23])<<31 | + uint64(x[24])<<39 | + uint64(x[25]&15)<<47 + + r[4] = uint64(x[25])>>4 | + uint64(x[26])<<4 | + uint64(x[27])<<12 | + uint64(x[28])<<20 | + uint64(x[29])<<28 | + uint64(x[30])<<36 | + uint64(x[31]&127)<<44 +} + +// pack sets out = x where out is the usual, little-endian form of the 5, +// 51-bit limbs in x. +func pack(out *[32]byte, x *[5]uint64) { + t := *x + freeze(&t) + + out[0] = byte(t[0]) + out[1] = byte(t[0] >> 8) + out[2] = byte(t[0] >> 16) + out[3] = byte(t[0] >> 24) + out[4] = byte(t[0] >> 32) + out[5] = byte(t[0] >> 40) + out[6] = byte(t[0] >> 48) + + out[6] ^= byte(t[1]<<3) & 0xf8 + out[7] = byte(t[1] >> 5) + out[8] = byte(t[1] >> 13) + out[9] = byte(t[1] >> 21) + out[10] = byte(t[1] >> 29) + out[11] = byte(t[1] >> 37) + out[12] = byte(t[1] >> 45) + + out[12] ^= byte(t[2]<<6) & 0xc0 + out[13] = byte(t[2] >> 2) + out[14] = byte(t[2] >> 10) + out[15] = byte(t[2] >> 18) + out[16] = byte(t[2] >> 26) + out[17] = byte(t[2] >> 34) + out[18] = byte(t[2] >> 42) + out[19] = byte(t[2] >> 50) + + out[19] ^= byte(t[3]<<1) & 0xfe + out[20] = byte(t[3] >> 7) + out[21] = byte(t[3] >> 15) + out[22] = byte(t[3] >> 23) + out[23] = byte(t[3] >> 31) + out[24] = byte(t[3] >> 39) + out[25] = byte(t[3] >> 47) + + out[25] ^= byte(t[4]<<4) & 0xf0 + out[26] = byte(t[4] >> 4) + out[27] = byte(t[4] >> 12) + out[28] = byte(t[4] >> 20) + out[29] = byte(t[4] >> 28) + out[30] = byte(t[4] >> 36) + out[31] = byte(t[4] >> 44) +} + +// invert calculates r = x^-1 mod p using Fermat's little theorem. +func invert(r *[5]uint64, x *[5]uint64) { + var z2, z9, z11, z2_5_0, z2_10_0, z2_20_0, z2_50_0, z2_100_0, t [5]uint64 + + square(&z2, x) /* 2 */ + square(&t, &z2) /* 4 */ + square(&t, &t) /* 8 */ + mul(&z9, &t, x) /* 9 */ + mul(&z11, &z9, &z2) /* 11 */ + square(&t, &z11) /* 22 */ + mul(&z2_5_0, &t, &z9) /* 2^5 - 2^0 = 31 */ + + square(&t, &z2_5_0) /* 2^6 - 2^1 */ + for i := 1; i < 5; i++ { /* 2^20 - 2^10 */ + square(&t, &t) + } + mul(&z2_10_0, &t, &z2_5_0) /* 2^10 - 2^0 */ + + square(&t, &z2_10_0) /* 2^11 - 2^1 */ + for i := 1; i < 10; i++ { /* 2^20 - 2^10 */ + square(&t, &t) + } + mul(&z2_20_0, &t, &z2_10_0) /* 2^20 - 2^0 */ + + square(&t, &z2_20_0) /* 2^21 - 2^1 */ + for i := 1; i < 20; i++ { /* 2^40 - 2^20 */ + square(&t, &t) + } + mul(&t, &t, &z2_20_0) /* 2^40 - 2^0 */ + + square(&t, &t) /* 2^41 - 2^1 */ + for i := 1; i < 10; i++ { /* 2^50 - 2^10 */ + square(&t, &t) + } + mul(&z2_50_0, &t, &z2_10_0) /* 2^50 - 2^0 */ + + square(&t, &z2_50_0) /* 2^51 - 2^1 */ + for i := 1; i < 50; i++ { /* 2^100 - 2^50 */ + square(&t, &t) + } + mul(&z2_100_0, &t, &z2_50_0) /* 2^100 - 2^0 */ + + square(&t, &z2_100_0) /* 2^101 - 2^1 */ + for i := 1; i < 100; i++ { /* 2^200 - 2^100 */ + square(&t, &t) + } + mul(&t, &t, &z2_100_0) /* 2^200 - 2^0 */ + + square(&t, &t) /* 2^201 - 2^1 */ + for i := 1; i < 50; i++ { /* 2^250 - 2^50 */ + square(&t, &t) + } + mul(&t, &t, &z2_50_0) /* 2^250 - 2^0 */ + + square(&t, &t) /* 2^251 - 2^1 */ + square(&t, &t) /* 2^252 - 2^2 */ + square(&t, &t) /* 2^253 - 2^3 */ + + square(&t, &t) /* 2^254 - 2^4 */ + + square(&t, &t) /* 2^255 - 2^5 */ + mul(r, &t, &z11) /* 2^255 - 21 */ +} diff --git a/vendor/golang.org/x/crypto/curve25519/mul_amd64.s b/vendor/golang.org/x/crypto/curve25519/mul_amd64.s new file mode 100644 index 0000000..5ce80a2 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/mul_amd64.s @@ -0,0 +1,169 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +#include "const_amd64.h" + +// func mul(dest, a, b *[5]uint64) +TEXT ·mul(SB),0,$16-24 + MOVQ dest+0(FP), DI + MOVQ a+8(FP), SI + MOVQ b+16(FP), DX + + MOVQ DX,CX + MOVQ 24(SI),DX + IMUL3Q $19,DX,AX + MOVQ AX,0(SP) + MULQ 16(CX) + MOVQ AX,R8 + MOVQ DX,R9 + MOVQ 32(SI),DX + IMUL3Q $19,DX,AX + MOVQ AX,8(SP) + MULQ 8(CX) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 0(SI),AX + MULQ 0(CX) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 0(SI),AX + MULQ 8(CX) + MOVQ AX,R10 + MOVQ DX,R11 + MOVQ 0(SI),AX + MULQ 16(CX) + MOVQ AX,R12 + MOVQ DX,R13 + MOVQ 0(SI),AX + MULQ 24(CX) + MOVQ AX,R14 + MOVQ DX,R15 + MOVQ 0(SI),AX + MULQ 32(CX) + MOVQ AX,BX + MOVQ DX,BP + MOVQ 8(SI),AX + MULQ 0(CX) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 8(SI),AX + MULQ 8(CX) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 8(SI),AX + MULQ 16(CX) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 8(SI),AX + MULQ 24(CX) + ADDQ AX,BX + ADCQ DX,BP + MOVQ 8(SI),DX + IMUL3Q $19,DX,AX + MULQ 32(CX) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 16(SI),AX + MULQ 0(CX) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 16(SI),AX + MULQ 8(CX) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 16(SI),AX + MULQ 16(CX) + ADDQ AX,BX + ADCQ DX,BP + MOVQ 16(SI),DX + IMUL3Q $19,DX,AX + MULQ 24(CX) + ADDQ AX,R8 + ADCQ DX,R9 + MOVQ 16(SI),DX + IMUL3Q $19,DX,AX + MULQ 32(CX) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 24(SI),AX + MULQ 0(CX) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ 24(SI),AX + MULQ 8(CX) + ADDQ AX,BX + ADCQ DX,BP + MOVQ 0(SP),AX + MULQ 24(CX) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 0(SP),AX + MULQ 32(CX) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 32(SI),AX + MULQ 0(CX) + ADDQ AX,BX + ADCQ DX,BP + MOVQ 8(SP),AX + MULQ 16(CX) + ADDQ AX,R10 + ADCQ DX,R11 + MOVQ 8(SP),AX + MULQ 24(CX) + ADDQ AX,R12 + ADCQ DX,R13 + MOVQ 8(SP),AX + MULQ 32(CX) + ADDQ AX,R14 + ADCQ DX,R15 + MOVQ $REDMASK51,SI + SHLQ $13,R9:R8 + ANDQ SI,R8 + SHLQ $13,R11:R10 + ANDQ SI,R10 + ADDQ R9,R10 + SHLQ $13,R13:R12 + ANDQ SI,R12 + ADDQ R11,R12 + SHLQ $13,R15:R14 + ANDQ SI,R14 + ADDQ R13,R14 + SHLQ $13,BP:BX + ANDQ SI,BX + ADDQ R15,BX + IMUL3Q $19,BP,DX + ADDQ DX,R8 + MOVQ R8,DX + SHRQ $51,DX + ADDQ R10,DX + MOVQ DX,CX + SHRQ $51,DX + ANDQ SI,R8 + ADDQ R12,DX + MOVQ DX,R9 + SHRQ $51,DX + ANDQ SI,CX + ADDQ R14,DX + MOVQ DX,AX + SHRQ $51,DX + ANDQ SI,R9 + ADDQ BX,DX + MOVQ DX,R10 + SHRQ $51,DX + ANDQ SI,AX + IMUL3Q $19,DX,DX + ADDQ DX,R8 + ANDQ SI,R10 + MOVQ R8,0(DI) + MOVQ CX,8(DI) + MOVQ R9,16(DI) + MOVQ AX,24(DI) + MOVQ R10,32(DI) + RET diff --git a/vendor/golang.org/x/crypto/curve25519/square_amd64.s b/vendor/golang.org/x/crypto/curve25519/square_amd64.s new file mode 100644 index 0000000..12f7373 --- /dev/null +++ b/vendor/golang.org/x/crypto/curve25519/square_amd64.s @@ -0,0 +1,132 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html + +// +build amd64,!gccgo,!appengine + +#include "const_amd64.h" + +// func square(out, in *[5]uint64) +TEXT ·square(SB),7,$0-16 + MOVQ out+0(FP), DI + MOVQ in+8(FP), SI + + MOVQ 0(SI),AX + MULQ 0(SI) + MOVQ AX,CX + MOVQ DX,R8 + MOVQ 0(SI),AX + SHLQ $1,AX + MULQ 8(SI) + MOVQ AX,R9 + MOVQ DX,R10 + MOVQ 0(SI),AX + SHLQ $1,AX + MULQ 16(SI) + MOVQ AX,R11 + MOVQ DX,R12 + MOVQ 0(SI),AX + SHLQ $1,AX + MULQ 24(SI) + MOVQ AX,R13 + MOVQ DX,R14 + MOVQ 0(SI),AX + SHLQ $1,AX + MULQ 32(SI) + MOVQ AX,R15 + MOVQ DX,BX + MOVQ 8(SI),AX + MULQ 8(SI) + ADDQ AX,R11 + ADCQ DX,R12 + MOVQ 8(SI),AX + SHLQ $1,AX + MULQ 16(SI) + ADDQ AX,R13 + ADCQ DX,R14 + MOVQ 8(SI),AX + SHLQ $1,AX + MULQ 24(SI) + ADDQ AX,R15 + ADCQ DX,BX + MOVQ 8(SI),DX + IMUL3Q $38,DX,AX + MULQ 32(SI) + ADDQ AX,CX + ADCQ DX,R8 + MOVQ 16(SI),AX + MULQ 16(SI) + ADDQ AX,R15 + ADCQ DX,BX + MOVQ 16(SI),DX + IMUL3Q $38,DX,AX + MULQ 24(SI) + ADDQ AX,CX + ADCQ DX,R8 + MOVQ 16(SI),DX + IMUL3Q $38,DX,AX + MULQ 32(SI) + ADDQ AX,R9 + ADCQ DX,R10 + MOVQ 24(SI),DX + IMUL3Q $19,DX,AX + MULQ 24(SI) + ADDQ AX,R9 + ADCQ DX,R10 + MOVQ 24(SI),DX + IMUL3Q $38,DX,AX + MULQ 32(SI) + ADDQ AX,R11 + ADCQ DX,R12 + MOVQ 32(SI),DX + IMUL3Q $19,DX,AX + MULQ 32(SI) + ADDQ AX,R13 + ADCQ DX,R14 + MOVQ $REDMASK51,SI + SHLQ $13,R8:CX + ANDQ SI,CX + SHLQ $13,R10:R9 + ANDQ SI,R9 + ADDQ R8,R9 + SHLQ $13,R12:R11 + ANDQ SI,R11 + ADDQ R10,R11 + SHLQ $13,R14:R13 + ANDQ SI,R13 + ADDQ R12,R13 + SHLQ $13,BX:R15 + ANDQ SI,R15 + ADDQ R14,R15 + IMUL3Q $19,BX,DX + ADDQ DX,CX + MOVQ CX,DX + SHRQ $51,DX + ADDQ R9,DX + ANDQ SI,CX + MOVQ DX,R8 + SHRQ $51,DX + ADDQ R11,DX + ANDQ SI,R8 + MOVQ DX,R9 + SHRQ $51,DX + ADDQ R13,DX + ANDQ SI,R9 + MOVQ DX,AX + SHRQ $51,DX + ADDQ R15,DX + ANDQ SI,AX + MOVQ DX,R10 + SHRQ $51,DX + IMUL3Q $19,DX,DX + ADDQ DX,CX + ANDQ SI,R10 + MOVQ CX,0(DI) + MOVQ R8,8(DI) + MOVQ R9,16(DI) + MOVQ AX,24(DI) + MOVQ R10,32(DI) + RET diff --git a/vendor/golang.org/x/crypto/ed25519/ed25519.go b/vendor/golang.org/x/crypto/ed25519/ed25519.go new file mode 100644 index 0000000..4f26b49 --- /dev/null +++ b/vendor/golang.org/x/crypto/ed25519/ed25519.go @@ -0,0 +1,181 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ed25519 implements the Ed25519 signature algorithm. See +// https://ed25519.cr.yp.to/. +// +// These functions are also compatible with the “Ed25519” function defined in +// RFC 8032. +package ed25519 + +// This code is a port of the public domain, “ref10” implementation of ed25519 +// from SUPERCOP. + +import ( + "bytes" + "crypto" + cryptorand "crypto/rand" + "crypto/sha512" + "errors" + "io" + "strconv" + + "golang.org/x/crypto/ed25519/internal/edwards25519" +) + +const ( + // PublicKeySize is the size, in bytes, of public keys as used in this package. + PublicKeySize = 32 + // PrivateKeySize is the size, in bytes, of private keys as used in this package. + PrivateKeySize = 64 + // SignatureSize is the size, in bytes, of signatures generated and verified by this package. + SignatureSize = 64 +) + +// PublicKey is the type of Ed25519 public keys. +type PublicKey []byte + +// PrivateKey is the type of Ed25519 private keys. It implements crypto.Signer. +type PrivateKey []byte + +// Public returns the PublicKey corresponding to priv. +func (priv PrivateKey) Public() crypto.PublicKey { + publicKey := make([]byte, PublicKeySize) + copy(publicKey, priv[32:]) + return PublicKey(publicKey) +} + +// Sign signs the given message with priv. +// Ed25519 performs two passes over messages to be signed and therefore cannot +// handle pre-hashed messages. Thus opts.HashFunc() must return zero to +// indicate the message hasn't been hashed. This can be achieved by passing +// crypto.Hash(0) as the value for opts. +func (priv PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error) { + if opts.HashFunc() != crypto.Hash(0) { + return nil, errors.New("ed25519: cannot sign hashed message") + } + + return Sign(priv, message), nil +} + +// GenerateKey generates a public/private key pair using entropy from rand. +// If rand is nil, crypto/rand.Reader will be used. +func GenerateKey(rand io.Reader) (publicKey PublicKey, privateKey PrivateKey, err error) { + if rand == nil { + rand = cryptorand.Reader + } + + privateKey = make([]byte, PrivateKeySize) + publicKey = make([]byte, PublicKeySize) + _, err = io.ReadFull(rand, privateKey[:32]) + if err != nil { + return nil, nil, err + } + + digest := sha512.Sum512(privateKey[:32]) + digest[0] &= 248 + digest[31] &= 127 + digest[31] |= 64 + + var A edwards25519.ExtendedGroupElement + var hBytes [32]byte + copy(hBytes[:], digest[:]) + edwards25519.GeScalarMultBase(&A, &hBytes) + var publicKeyBytes [32]byte + A.ToBytes(&publicKeyBytes) + + copy(privateKey[32:], publicKeyBytes[:]) + copy(publicKey, publicKeyBytes[:]) + + return publicKey, privateKey, nil +} + +// Sign signs the message with privateKey and returns a signature. It will +// panic if len(privateKey) is not PrivateKeySize. +func Sign(privateKey PrivateKey, message []byte) []byte { + if l := len(privateKey); l != PrivateKeySize { + panic("ed25519: bad private key length: " + strconv.Itoa(l)) + } + + h := sha512.New() + h.Write(privateKey[:32]) + + var digest1, messageDigest, hramDigest [64]byte + var expandedSecretKey [32]byte + h.Sum(digest1[:0]) + copy(expandedSecretKey[:], digest1[:]) + expandedSecretKey[0] &= 248 + expandedSecretKey[31] &= 63 + expandedSecretKey[31] |= 64 + + h.Reset() + h.Write(digest1[32:]) + h.Write(message) + h.Sum(messageDigest[:0]) + + var messageDigestReduced [32]byte + edwards25519.ScReduce(&messageDigestReduced, &messageDigest) + var R edwards25519.ExtendedGroupElement + edwards25519.GeScalarMultBase(&R, &messageDigestReduced) + + var encodedR [32]byte + R.ToBytes(&encodedR) + + h.Reset() + h.Write(encodedR[:]) + h.Write(privateKey[32:]) + h.Write(message) + h.Sum(hramDigest[:0]) + var hramDigestReduced [32]byte + edwards25519.ScReduce(&hramDigestReduced, &hramDigest) + + var s [32]byte + edwards25519.ScMulAdd(&s, &hramDigestReduced, &expandedSecretKey, &messageDigestReduced) + + signature := make([]byte, SignatureSize) + copy(signature[:], encodedR[:]) + copy(signature[32:], s[:]) + + return signature +} + +// Verify reports whether sig is a valid signature of message by publicKey. It +// will panic if len(publicKey) is not PublicKeySize. +func Verify(publicKey PublicKey, message, sig []byte) bool { + if l := len(publicKey); l != PublicKeySize { + panic("ed25519: bad public key length: " + strconv.Itoa(l)) + } + + if len(sig) != SignatureSize || sig[63]&224 != 0 { + return false + } + + var A edwards25519.ExtendedGroupElement + var publicKeyBytes [32]byte + copy(publicKeyBytes[:], publicKey) + if !A.FromBytes(&publicKeyBytes) { + return false + } + edwards25519.FeNeg(&A.X, &A.X) + edwards25519.FeNeg(&A.T, &A.T) + + h := sha512.New() + h.Write(sig[:32]) + h.Write(publicKey[:]) + h.Write(message) + var digest [64]byte + h.Sum(digest[:0]) + + var hReduced [32]byte + edwards25519.ScReduce(&hReduced, &digest) + + var R edwards25519.ProjectiveGroupElement + var b [32]byte + copy(b[:], sig[32:]) + edwards25519.GeDoubleScalarMultVartime(&R, &hReduced, &A, &b) + + var checkR [32]byte + R.ToBytes(&checkR) + return bytes.Equal(sig[:32], checkR[:]) +} diff --git a/vendor/golang.org/x/crypto/ed25519/ed25519_test.go b/vendor/golang.org/x/crypto/ed25519/ed25519_test.go new file mode 100644 index 0000000..e272f8a --- /dev/null +++ b/vendor/golang.org/x/crypto/ed25519/ed25519_test.go @@ -0,0 +1,183 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ed25519 + +import ( + "bufio" + "bytes" + "compress/gzip" + "crypto" + "crypto/rand" + "encoding/hex" + "os" + "strings" + "testing" + + "golang.org/x/crypto/ed25519/internal/edwards25519" +) + +type zeroReader struct{} + +func (zeroReader) Read(buf []byte) (int, error) { + for i := range buf { + buf[i] = 0 + } + return len(buf), nil +} + +func TestUnmarshalMarshal(t *testing.T) { + pub, _, _ := GenerateKey(rand.Reader) + + var A edwards25519.ExtendedGroupElement + var pubBytes [32]byte + copy(pubBytes[:], pub) + if !A.FromBytes(&pubBytes) { + t.Fatalf("ExtendedGroupElement.FromBytes failed") + } + + var pub2 [32]byte + A.ToBytes(&pub2) + + if pubBytes != pub2 { + t.Errorf("FromBytes(%v)->ToBytes does not round-trip, got %x\n", pubBytes, pub2) + } +} + +func TestSignVerify(t *testing.T) { + var zero zeroReader + public, private, _ := GenerateKey(zero) + + message := []byte("test message") + sig := Sign(private, message) + if !Verify(public, message, sig) { + t.Errorf("valid signature rejected") + } + + wrongMessage := []byte("wrong message") + if Verify(public, wrongMessage, sig) { + t.Errorf("signature of different message accepted") + } +} + +func TestCryptoSigner(t *testing.T) { + var zero zeroReader + public, private, _ := GenerateKey(zero) + + signer := crypto.Signer(private) + + publicInterface := signer.Public() + public2, ok := publicInterface.(PublicKey) + if !ok { + t.Fatalf("expected PublicKey from Public() but got %T", publicInterface) + } + + if !bytes.Equal(public, public2) { + t.Errorf("public keys do not match: original:%x vs Public():%x", public, public2) + } + + message := []byte("message") + var noHash crypto.Hash + signature, err := signer.Sign(zero, message, noHash) + if err != nil { + t.Fatalf("error from Sign(): %s", err) + } + + if !Verify(public, message, signature) { + t.Errorf("Verify failed on signature from Sign()") + } +} + +func TestGolden(t *testing.T) { + // sign.input.gz is a selection of test cases from + // https://ed25519.cr.yp.to/python/sign.input + testDataZ, err := os.Open("testdata/sign.input.gz") + if err != nil { + t.Fatal(err) + } + defer testDataZ.Close() + testData, err := gzip.NewReader(testDataZ) + if err != nil { + t.Fatal(err) + } + defer testData.Close() + + scanner := bufio.NewScanner(testData) + lineNo := 0 + + for scanner.Scan() { + lineNo++ + + line := scanner.Text() + parts := strings.Split(line, ":") + if len(parts) != 5 { + t.Fatalf("bad number of parts on line %d", lineNo) + } + + privBytes, _ := hex.DecodeString(parts[0]) + pubKey, _ := hex.DecodeString(parts[1]) + msg, _ := hex.DecodeString(parts[2]) + sig, _ := hex.DecodeString(parts[3]) + // The signatures in the test vectors also include the message + // at the end, but we just want R and S. + sig = sig[:SignatureSize] + + if l := len(pubKey); l != PublicKeySize { + t.Fatalf("bad public key length on line %d: got %d bytes", lineNo, l) + } + + var priv [PrivateKeySize]byte + copy(priv[:], privBytes) + copy(priv[32:], pubKey) + + sig2 := Sign(priv[:], msg) + if !bytes.Equal(sig, sig2[:]) { + t.Errorf("different signature result on line %d: %x vs %x", lineNo, sig, sig2) + } + + if !Verify(pubKey, msg, sig2) { + t.Errorf("signature failed to verify on line %d", lineNo) + } + } + + if err := scanner.Err(); err != nil { + t.Fatalf("error reading test data: %s", err) + } +} + +func BenchmarkKeyGeneration(b *testing.B) { + var zero zeroReader + for i := 0; i < b.N; i++ { + if _, _, err := GenerateKey(zero); err != nil { + b.Fatal(err) + } + } +} + +func BenchmarkSigning(b *testing.B) { + var zero zeroReader + _, priv, err := GenerateKey(zero) + if err != nil { + b.Fatal(err) + } + message := []byte("Hello, world!") + b.ResetTimer() + for i := 0; i < b.N; i++ { + Sign(priv, message) + } +} + +func BenchmarkVerification(b *testing.B) { + var zero zeroReader + pub, priv, err := GenerateKey(zero) + if err != nil { + b.Fatal(err) + } + message := []byte("Hello, world!") + signature := Sign(priv, message) + b.ResetTimer() + for i := 0; i < b.N; i++ { + Verify(pub, message, signature) + } +} diff --git a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go new file mode 100644 index 0000000..e39f086 --- /dev/null +++ b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/const.go @@ -0,0 +1,1422 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package edwards25519 + +// These values are from the public domain, “ref10” implementation of ed25519 +// from SUPERCOP. + +// d is a constant in the Edwards curve equation. +var d = FieldElement{ + -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116, +} + +// d2 is 2*d. +var d2 = FieldElement{ + -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199, +} + +// SqrtM1 is the square-root of -1 in the field. +var SqrtM1 = FieldElement{ + -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482, +} + +// A is a constant in the Montgomery-form of curve25519. +var A = FieldElement{ + 486662, 0, 0, 0, 0, 0, 0, 0, 0, 0, +} + +// bi contains precomputed multiples of the base-point. See the Ed25519 paper +// for a discussion about how these values are used. +var bi = [8]PreComputedGroupElement{ + { + FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, + }, + { + FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, + }, + { + FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, + }, + { + FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, + }, + { + FieldElement{-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877}, + FieldElement{-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951}, + FieldElement{4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784}, + }, + { + FieldElement{-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436}, + FieldElement{25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918}, + FieldElement{23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877}, + }, + { + FieldElement{-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800}, + FieldElement{-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305}, + FieldElement{-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300}, + }, + { + FieldElement{-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876}, + FieldElement{-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619}, + FieldElement{-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683}, + }, +} + +// base contains precomputed multiples of the base-point. See the Ed25519 paper +// for a discussion about how these values are used. +var base = [32][8]PreComputedGroupElement{ + { + { + FieldElement{25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605}, + FieldElement{-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378}, + FieldElement{-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546}, + }, + { + FieldElement{-12815894, -12976347, -21581243, 11784320, -25355658, -2750717, -11717903, -3814571, -358445, -10211303}, + FieldElement{-21703237, 6903825, 27185491, 6451973, -29577724, -9554005, -15616551, 11189268, -26829678, -5319081}, + FieldElement{26966642, 11152617, 32442495, 15396054, 14353839, -12752335, -3128826, -9541118, -15472047, -4166697}, + }, + { + FieldElement{15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024}, + FieldElement{16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574}, + FieldElement{30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357}, + }, + { + FieldElement{-17036878, 13921892, 10945806, -6033431, 27105052, -16084379, -28926210, 15006023, 3284568, -6276540}, + FieldElement{23599295, -8306047, -11193664, -7687416, 13236774, 10506355, 7464579, 9656445, 13059162, 10374397}, + FieldElement{7798556, 16710257, 3033922, 2874086, 28997861, 2835604, 32406664, -3839045, -641708, -101325}, + }, + { + FieldElement{10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380}, + FieldElement{4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306}, + FieldElement{19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942}, + }, + { + FieldElement{-15371964, -12862754, 32573250, 4720197, -26436522, 5875511, -19188627, -15224819, -9818940, -12085777}, + FieldElement{-8549212, 109983, 15149363, 2178705, 22900618, 4543417, 3044240, -15689887, 1762328, 14866737}, + FieldElement{-18199695, -15951423, -10473290, 1707278, -17185920, 3916101, -28236412, 3959421, 27914454, 4383652}, + }, + { + FieldElement{5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766}, + FieldElement{-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701}, + FieldElement{28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300}, + }, + { + FieldElement{14499471, -2729599, -33191113, -4254652, 28494862, 14271267, 30290735, 10876454, -33154098, 2381726}, + FieldElement{-7195431, -2655363, -14730155, 462251, -27724326, 3941372, -6236617, 3696005, -32300832, 15351955}, + FieldElement{27431194, 8222322, 16448760, -3907995, -18707002, 11938355, -32961401, -2970515, 29551813, 10109425}, + }, + }, + { + { + FieldElement{-13657040, -13155431, -31283750, 11777098, 21447386, 6519384, -2378284, -1627556, 10092783, -4764171}, + FieldElement{27939166, 14210322, 4677035, 16277044, -22964462, -12398139, -32508754, 12005538, -17810127, 12803510}, + FieldElement{17228999, -15661624, -1233527, 300140, -1224870, -11714777, 30364213, -9038194, 18016357, 4397660}, + }, + { + FieldElement{-10958843, -7690207, 4776341, -14954238, 27850028, -15602212, -26619106, 14544525, -17477504, 982639}, + FieldElement{29253598, 15796703, -2863982, -9908884, 10057023, 3163536, 7332899, -4120128, -21047696, 9934963}, + FieldElement{5793303, 16271923, -24131614, -10116404, 29188560, 1206517, -14747930, 4559895, -30123922, -10897950}, + }, + { + FieldElement{-27643952, -11493006, 16282657, -11036493, 28414021, -15012264, 24191034, 4541697, -13338309, 5500568}, + FieldElement{12650548, -1497113, 9052871, 11355358, -17680037, -8400164, -17430592, 12264343, 10874051, 13524335}, + FieldElement{25556948, -3045990, 714651, 2510400, 23394682, -10415330, 33119038, 5080568, -22528059, 5376628}, + }, + { + FieldElement{-26088264, -4011052, -17013699, -3537628, -6726793, 1920897, -22321305, -9447443, 4535768, 1569007}, + FieldElement{-2255422, 14606630, -21692440, -8039818, 28430649, 8775819, -30494562, 3044290, 31848280, 12543772}, + FieldElement{-22028579, 2943893, -31857513, 6777306, 13784462, -4292203, -27377195, -2062731, 7718482, 14474653}, + }, + { + FieldElement{2385315, 2454213, -22631320, 46603, -4437935, -15680415, 656965, -7236665, 24316168, -5253567}, + FieldElement{13741529, 10911568, -33233417, -8603737, -20177830, -1033297, 33040651, -13424532, -20729456, 8321686}, + FieldElement{21060490, -2212744, 15712757, -4336099, 1639040, 10656336, 23845965, -11874838, -9984458, 608372}, + }, + { + FieldElement{-13672732, -15087586, -10889693, -7557059, -6036909, 11305547, 1123968, -6780577, 27229399, 23887}, + FieldElement{-23244140, -294205, -11744728, 14712571, -29465699, -2029617, 12797024, -6440308, -1633405, 16678954}, + FieldElement{-29500620, 4770662, -16054387, 14001338, 7830047, 9564805, -1508144, -4795045, -17169265, 4904953}, + }, + { + FieldElement{24059557, 14617003, 19037157, -15039908, 19766093, -14906429, 5169211, 16191880, 2128236, -4326833}, + FieldElement{-16981152, 4124966, -8540610, -10653797, 30336522, -14105247, -29806336, 916033, -6882542, -2986532}, + FieldElement{-22630907, 12419372, -7134229, -7473371, -16478904, 16739175, 285431, 2763829, 15736322, 4143876}, + }, + { + FieldElement{2379352, 11839345, -4110402, -5988665, 11274298, 794957, 212801, -14594663, 23527084, -16458268}, + FieldElement{33431127, -11130478, -17838966, -15626900, 8909499, 8376530, -32625340, 4087881, -15188911, -14416214}, + FieldElement{1767683, 7197987, -13205226, -2022635, -13091350, 448826, 5799055, 4357868, -4774191, -16323038}, + }, + }, + { + { + FieldElement{6721966, 13833823, -23523388, -1551314, 26354293, -11863321, 23365147, -3949732, 7390890, 2759800}, + FieldElement{4409041, 2052381, 23373853, 10530217, 7676779, -12885954, 21302353, -4264057, 1244380, -12919645}, + FieldElement{-4421239, 7169619, 4982368, -2957590, 30256825, -2777540, 14086413, 9208236, 15886429, 16489664}, + }, + { + FieldElement{1996075, 10375649, 14346367, 13311202, -6874135, -16438411, -13693198, 398369, -30606455, -712933}, + FieldElement{-25307465, 9795880, -2777414, 14878809, -33531835, 14780363, 13348553, 12076947, -30836462, 5113182}, + FieldElement{-17770784, 11797796, 31950843, 13929123, -25888302, 12288344, -30341101, -7336386, 13847711, 5387222}, + }, + { + FieldElement{-18582163, -3416217, 17824843, -2340966, 22744343, -10442611, 8763061, 3617786, -19600662, 10370991}, + FieldElement{20246567, -14369378, 22358229, -543712, 18507283, -10413996, 14554437, -8746092, 32232924, 16763880}, + FieldElement{9648505, 10094563, 26416693, 14745928, -30374318, -6472621, 11094161, 15689506, 3140038, -16510092}, + }, + { + FieldElement{-16160072, 5472695, 31895588, 4744994, 8823515, 10365685, -27224800, 9448613, -28774454, 366295}, + FieldElement{19153450, 11523972, -11096490, -6503142, -24647631, 5420647, 28344573, 8041113, 719605, 11671788}, + FieldElement{8678025, 2694440, -6808014, 2517372, 4964326, 11152271, -15432916, -15266516, 27000813, -10195553}, + }, + { + FieldElement{-15157904, 7134312, 8639287, -2814877, -7235688, 10421742, 564065, 5336097, 6750977, -14521026}, + FieldElement{11836410, -3979488, 26297894, 16080799, 23455045, 15735944, 1695823, -8819122, 8169720, 16220347}, + FieldElement{-18115838, 8653647, 17578566, -6092619, -8025777, -16012763, -11144307, -2627664, -5990708, -14166033}, + }, + { + FieldElement{-23308498, -10968312, 15213228, -10081214, -30853605, -11050004, 27884329, 2847284, 2655861, 1738395}, + FieldElement{-27537433, -14253021, -25336301, -8002780, -9370762, 8129821, 21651608, -3239336, -19087449, -11005278}, + FieldElement{1533110, 3437855, 23735889, 459276, 29970501, 11335377, 26030092, 5821408, 10478196, 8544890}, + }, + { + FieldElement{32173121, -16129311, 24896207, 3921497, 22579056, -3410854, 19270449, 12217473, 17789017, -3395995}, + FieldElement{-30552961, -2228401, -15578829, -10147201, 13243889, 517024, 15479401, -3853233, 30460520, 1052596}, + FieldElement{-11614875, 13323618, 32618793, 8175907, -15230173, 12596687, 27491595, -4612359, 3179268, -9478891}, + }, + { + FieldElement{31947069, -14366651, -4640583, -15339921, -15125977, -6039709, -14756777, -16411740, 19072640, -9511060}, + FieldElement{11685058, 11822410, 3158003, -13952594, 33402194, -4165066, 5977896, -5215017, 473099, 5040608}, + FieldElement{-20290863, 8198642, -27410132, 11602123, 1290375, -2799760, 28326862, 1721092, -19558642, -3131606}, + }, + }, + { + { + FieldElement{7881532, 10687937, 7578723, 7738378, -18951012, -2553952, 21820786, 8076149, -27868496, 11538389}, + FieldElement{-19935666, 3899861, 18283497, -6801568, -15728660, -11249211, 8754525, 7446702, -5676054, 5797016}, + FieldElement{-11295600, -3793569, -15782110, -7964573, 12708869, -8456199, 2014099, -9050574, -2369172, -5877341}, + }, + { + FieldElement{-22472376, -11568741, -27682020, 1146375, 18956691, 16640559, 1192730, -3714199, 15123619, 10811505}, + FieldElement{14352098, -3419715, -18942044, 10822655, 32750596, 4699007, -70363, 15776356, -28886779, -11974553}, + FieldElement{-28241164, -8072475, -4978962, -5315317, 29416931, 1847569, -20654173, -16484855, 4714547, -9600655}, + }, + { + FieldElement{15200332, 8368572, 19679101, 15970074, -31872674, 1959451, 24611599, -4543832, -11745876, 12340220}, + FieldElement{12876937, -10480056, 33134381, 6590940, -6307776, 14872440, 9613953, 8241152, 15370987, 9608631}, + FieldElement{-4143277, -12014408, 8446281, -391603, 4407738, 13629032, -7724868, 15866074, -28210621, -8814099}, + }, + { + FieldElement{26660628, -15677655, 8393734, 358047, -7401291, 992988, -23904233, 858697, 20571223, 8420556}, + FieldElement{14620715, 13067227, -15447274, 8264467, 14106269, 15080814, 33531827, 12516406, -21574435, -12476749}, + FieldElement{236881, 10476226, 57258, -14677024, 6472998, 2466984, 17258519, 7256740, 8791136, 15069930}, + }, + { + FieldElement{1276410, -9371918, 22949635, -16322807, -23493039, -5702186, 14711875, 4874229, -30663140, -2331391}, + FieldElement{5855666, 4990204, -13711848, 7294284, -7804282, 1924647, -1423175, -7912378, -33069337, 9234253}, + FieldElement{20590503, -9018988, 31529744, -7352666, -2706834, 10650548, 31559055, -11609587, 18979186, 13396066}, + }, + { + FieldElement{24474287, 4968103, 22267082, 4407354, 24063882, -8325180, -18816887, 13594782, 33514650, 7021958}, + FieldElement{-11566906, -6565505, -21365085, 15928892, -26158305, 4315421, -25948728, -3916677, -21480480, 12868082}, + FieldElement{-28635013, 13504661, 19988037, -2132761, 21078225, 6443208, -21446107, 2244500, -12455797, -8089383}, + }, + { + FieldElement{-30595528, 13793479, -5852820, 319136, -25723172, -6263899, 33086546, 8957937, -15233648, 5540521}, + FieldElement{-11630176, -11503902, -8119500, -7643073, 2620056, 1022908, -23710744, -1568984, -16128528, -14962807}, + FieldElement{23152971, 775386, 27395463, 14006635, -9701118, 4649512, 1689819, 892185, -11513277, -15205948}, + }, + { + FieldElement{9770129, 9586738, 26496094, 4324120, 1556511, -3550024, 27453819, 4763127, -19179614, 5867134}, + FieldElement{-32765025, 1927590, 31726409, -4753295, 23962434, -16019500, 27846559, 5931263, -29749703, -16108455}, + FieldElement{27461885, -2977536, 22380810, 1815854, -23033753, -3031938, 7283490, -15148073, -19526700, 7734629}, + }, + }, + { + { + FieldElement{-8010264, -9590817, -11120403, 6196038, 29344158, -13430885, 7585295, -3176626, 18549497, 15302069}, + FieldElement{-32658337, -6171222, -7672793, -11051681, 6258878, 13504381, 10458790, -6418461, -8872242, 8424746}, + FieldElement{24687205, 8613276, -30667046, -3233545, 1863892, -1830544, 19206234, 7134917, -11284482, -828919}, + }, + { + FieldElement{11334899, -9218022, 8025293, 12707519, 17523892, -10476071, 10243738, -14685461, -5066034, 16498837}, + FieldElement{8911542, 6887158, -9584260, -6958590, 11145641, -9543680, 17303925, -14124238, 6536641, 10543906}, + FieldElement{-28946384, 15479763, -17466835, 568876, -1497683, 11223454, -2669190, -16625574, -27235709, 8876771}, + }, + { + FieldElement{-25742899, -12566864, -15649966, -846607, -33026686, -796288, -33481822, 15824474, -604426, -9039817}, + FieldElement{10330056, 70051, 7957388, -9002667, 9764902, 15609756, 27698697, -4890037, 1657394, 3084098}, + FieldElement{10477963, -7470260, 12119566, -13250805, 29016247, -5365589, 31280319, 14396151, -30233575, 15272409}, + }, + { + FieldElement{-12288309, 3169463, 28813183, 16658753, 25116432, -5630466, -25173957, -12636138, -25014757, 1950504}, + FieldElement{-26180358, 9489187, 11053416, -14746161, -31053720, 5825630, -8384306, -8767532, 15341279, 8373727}, + FieldElement{28685821, 7759505, -14378516, -12002860, -31971820, 4079242, 298136, -10232602, -2878207, 15190420}, + }, + { + FieldElement{-32932876, 13806336, -14337485, -15794431, -24004620, 10940928, 8669718, 2742393, -26033313, -6875003}, + FieldElement{-1580388, -11729417, -25979658, -11445023, -17411874, -10912854, 9291594, -16247779, -12154742, 6048605}, + FieldElement{-30305315, 14843444, 1539301, 11864366, 20201677, 1900163, 13934231, 5128323, 11213262, 9168384}, + }, + { + FieldElement{-26280513, 11007847, 19408960, -940758, -18592965, -4328580, -5088060, -11105150, 20470157, -16398701}, + FieldElement{-23136053, 9282192, 14855179, -15390078, -7362815, -14408560, -22783952, 14461608, 14042978, 5230683}, + FieldElement{29969567, -2741594, -16711867, -8552442, 9175486, -2468974, 21556951, 3506042, -5933891, -12449708}, + }, + { + FieldElement{-3144746, 8744661, 19704003, 4581278, -20430686, 6830683, -21284170, 8971513, -28539189, 15326563}, + FieldElement{-19464629, 10110288, -17262528, -3503892, -23500387, 1355669, -15523050, 15300988, -20514118, 9168260}, + FieldElement{-5353335, 4488613, -23803248, 16314347, 7780487, -15638939, -28948358, 9601605, 33087103, -9011387}, + }, + { + FieldElement{-19443170, -15512900, -20797467, -12445323, -29824447, 10229461, -27444329, -15000531, -5996870, 15664672}, + FieldElement{23294591, -16632613, -22650781, -8470978, 27844204, 11461195, 13099750, -2460356, 18151676, 13417686}, + FieldElement{-24722913, -4176517, -31150679, 5988919, -26858785, 6685065, 1661597, -12551441, 15271676, -15452665}, + }, + }, + { + { + FieldElement{11433042, -13228665, 8239631, -5279517, -1985436, -725718, -18698764, 2167544, -6921301, -13440182}, + FieldElement{-31436171, 15575146, 30436815, 12192228, -22463353, 9395379, -9917708, -8638997, 12215110, 12028277}, + FieldElement{14098400, 6555944, 23007258, 5757252, -15427832, -12950502, 30123440, 4617780, -16900089, -655628}, + }, + { + FieldElement{-4026201, -15240835, 11893168, 13718664, -14809462, 1847385, -15819999, 10154009, 23973261, -12684474}, + FieldElement{-26531820, -3695990, -1908898, 2534301, -31870557, -16550355, 18341390, -11419951, 32013174, -10103539}, + FieldElement{-25479301, 10876443, -11771086, -14625140, -12369567, 1838104, 21911214, 6354752, 4425632, -837822}, + }, + { + FieldElement{-10433389, -14612966, 22229858, -3091047, -13191166, 776729, -17415375, -12020462, 4725005, 14044970}, + FieldElement{19268650, -7304421, 1555349, 8692754, -21474059, -9910664, 6347390, -1411784, -19522291, -16109756}, + FieldElement{-24864089, 12986008, -10898878, -5558584, -11312371, -148526, 19541418, 8180106, 9282262, 10282508}, + }, + { + FieldElement{-26205082, 4428547, -8661196, -13194263, 4098402, -14165257, 15522535, 8372215, 5542595, -10702683}, + FieldElement{-10562541, 14895633, 26814552, -16673850, -17480754, -2489360, -2781891, 6993761, -18093885, 10114655}, + FieldElement{-20107055, -929418, 31422704, 10427861, -7110749, 6150669, -29091755, -11529146, 25953725, -106158}, + }, + { + FieldElement{-4234397, -8039292, -9119125, 3046000, 2101609, -12607294, 19390020, 6094296, -3315279, 12831125}, + FieldElement{-15998678, 7578152, 5310217, 14408357, -33548620, -224739, 31575954, 6326196, 7381791, -2421839}, + FieldElement{-20902779, 3296811, 24736065, -16328389, 18374254, 7318640, 6295303, 8082724, -15362489, 12339664}, + }, + { + FieldElement{27724736, 2291157, 6088201, -14184798, 1792727, 5857634, 13848414, 15768922, 25091167, 14856294}, + FieldElement{-18866652, 8331043, 24373479, 8541013, -701998, -9269457, 12927300, -12695493, -22182473, -9012899}, + FieldElement{-11423429, -5421590, 11632845, 3405020, 30536730, -11674039, -27260765, 13866390, 30146206, 9142070}, + }, + { + FieldElement{3924129, -15307516, -13817122, -10054960, 12291820, -668366, -27702774, 9326384, -8237858, 4171294}, + FieldElement{-15921940, 16037937, 6713787, 16606682, -21612135, 2790944, 26396185, 3731949, 345228, -5462949}, + FieldElement{-21327538, 13448259, 25284571, 1143661, 20614966, -8849387, 2031539, -12391231, -16253183, -13582083}, + }, + { + FieldElement{31016211, -16722429, 26371392, -14451233, -5027349, 14854137, 17477601, 3842657, 28012650, -16405420}, + FieldElement{-5075835, 9368966, -8562079, -4600902, -15249953, 6970560, -9189873, 16292057, -8867157, 3507940}, + FieldElement{29439664, 3537914, 23333589, 6997794, -17555561, -11018068, -15209202, -15051267, -9164929, 6580396}, + }, + }, + { + { + FieldElement{-12185861, -7679788, 16438269, 10826160, -8696817, -6235611, 17860444, -9273846, -2095802, 9304567}, + FieldElement{20714564, -4336911, 29088195, 7406487, 11426967, -5095705, 14792667, -14608617, 5289421, -477127}, + FieldElement{-16665533, -10650790, -6160345, -13305760, 9192020, -1802462, 17271490, 12349094, 26939669, -3752294}, + }, + { + FieldElement{-12889898, 9373458, 31595848, 16374215, 21471720, 13221525, -27283495, -12348559, -3698806, 117887}, + FieldElement{22263325, -6560050, 3984570, -11174646, -15114008, -566785, 28311253, 5358056, -23319780, 541964}, + FieldElement{16259219, 3261970, 2309254, -15534474, -16885711, -4581916, 24134070, -16705829, -13337066, -13552195}, + }, + { + FieldElement{9378160, -13140186, -22845982, -12745264, 28198281, -7244098, -2399684, -717351, 690426, 14876244}, + FieldElement{24977353, -314384, -8223969, -13465086, 28432343, -1176353, -13068804, -12297348, -22380984, 6618999}, + FieldElement{-1538174, 11685646, 12944378, 13682314, -24389511, -14413193, 8044829, -13817328, 32239829, -5652762}, + }, + { + FieldElement{-18603066, 4762990, -926250, 8885304, -28412480, -3187315, 9781647, -10350059, 32779359, 5095274}, + FieldElement{-33008130, -5214506, -32264887, -3685216, 9460461, -9327423, -24601656, 14506724, 21639561, -2630236}, + FieldElement{-16400943, -13112215, 25239338, 15531969, 3987758, -4499318, -1289502, -6863535, 17874574, 558605}, + }, + { + FieldElement{-13600129, 10240081, 9171883, 16131053, -20869254, 9599700, 33499487, 5080151, 2085892, 5119761}, + FieldElement{-22205145, -2519528, -16381601, 414691, -25019550, 2170430, 30634760, -8363614, -31999993, -5759884}, + FieldElement{-6845704, 15791202, 8550074, -1312654, 29928809, -12092256, 27534430, -7192145, -22351378, 12961482}, + }, + { + FieldElement{-24492060, -9570771, 10368194, 11582341, -23397293, -2245287, 16533930, 8206996, -30194652, -5159638}, + FieldElement{-11121496, -3382234, 2307366, 6362031, -135455, 8868177, -16835630, 7031275, 7589640, 8945490}, + FieldElement{-32152748, 8917967, 6661220, -11677616, -1192060, -15793393, 7251489, -11182180, 24099109, -14456170}, + }, + { + FieldElement{5019558, -7907470, 4244127, -14714356, -26933272, 6453165, -19118182, -13289025, -6231896, -10280736}, + FieldElement{10853594, 10721687, 26480089, 5861829, -22995819, 1972175, -1866647, -10557898, -3363451, -6441124}, + FieldElement{-17002408, 5906790, 221599, -6563147, 7828208, -13248918, 24362661, -2008168, -13866408, 7421392}, + }, + { + FieldElement{8139927, -6546497, 32257646, -5890546, 30375719, 1886181, -21175108, 15441252, 28826358, -4123029}, + FieldElement{6267086, 9695052, 7709135, -16603597, -32869068, -1886135, 14795160, -7840124, 13746021, -1742048}, + FieldElement{28584902, 7787108, -6732942, -15050729, 22846041, -7571236, -3181936, -363524, 4771362, -8419958}, + }, + }, + { + { + FieldElement{24949256, 6376279, -27466481, -8174608, -18646154, -9930606, 33543569, -12141695, 3569627, 11342593}, + FieldElement{26514989, 4740088, 27912651, 3697550, 19331575, -11472339, 6809886, 4608608, 7325975, -14801071}, + FieldElement{-11618399, -14554430, -24321212, 7655128, -1369274, 5214312, -27400540, 10258390, -17646694, -8186692}, + }, + { + FieldElement{11431204, 15823007, 26570245, 14329124, 18029990, 4796082, -31446179, 15580664, 9280358, -3973687}, + FieldElement{-160783, -10326257, -22855316, -4304997, -20861367, -13621002, -32810901, -11181622, -15545091, 4387441}, + FieldElement{-20799378, 12194512, 3937617, -5805892, -27154820, 9340370, -24513992, 8548137, 20617071, -7482001}, + }, + { + FieldElement{-938825, -3930586, -8714311, 16124718, 24603125, -6225393, -13775352, -11875822, 24345683, 10325460}, + FieldElement{-19855277, -1568885, -22202708, 8714034, 14007766, 6928528, 16318175, -1010689, 4766743, 3552007}, + FieldElement{-21751364, -16730916, 1351763, -803421, -4009670, 3950935, 3217514, 14481909, 10988822, -3994762}, + }, + { + FieldElement{15564307, -14311570, 3101243, 5684148, 30446780, -8051356, 12677127, -6505343, -8295852, 13296005}, + FieldElement{-9442290, 6624296, -30298964, -11913677, -4670981, -2057379, 31521204, 9614054, -30000824, 12074674}, + FieldElement{4771191, -135239, 14290749, -13089852, 27992298, 14998318, -1413936, -1556716, 29832613, -16391035}, + }, + { + FieldElement{7064884, -7541174, -19161962, -5067537, -18891269, -2912736, 25825242, 5293297, -27122660, 13101590}, + FieldElement{-2298563, 2439670, -7466610, 1719965, -27267541, -16328445, 32512469, -5317593, -30356070, -4190957}, + FieldElement{-30006540, 10162316, -33180176, 3981723, -16482138, -13070044, 14413974, 9515896, 19568978, 9628812}, + }, + { + FieldElement{33053803, 199357, 15894591, 1583059, 27380243, -4580435, -17838894, -6106839, -6291786, 3437740}, + FieldElement{-18978877, 3884493, 19469877, 12726490, 15913552, 13614290, -22961733, 70104, 7463304, 4176122}, + FieldElement{-27124001, 10659917, 11482427, -16070381, 12771467, -6635117, -32719404, -5322751, 24216882, 5944158}, + }, + { + FieldElement{8894125, 7450974, -2664149, -9765752, -28080517, -12389115, 19345746, 14680796, 11632993, 5847885}, + FieldElement{26942781, -2315317, 9129564, -4906607, 26024105, 11769399, -11518837, 6367194, -9727230, 4782140}, + FieldElement{19916461, -4828410, -22910704, -11414391, 25606324, -5972441, 33253853, 8220911, 6358847, -1873857}, + }, + { + FieldElement{801428, -2081702, 16569428, 11065167, 29875704, 96627, 7908388, -4480480, -13538503, 1387155}, + FieldElement{19646058, 5720633, -11416706, 12814209, 11607948, 12749789, 14147075, 15156355, -21866831, 11835260}, + FieldElement{19299512, 1155910, 28703737, 14890794, 2925026, 7269399, 26121523, 15467869, -26560550, 5052483}, + }, + }, + { + { + FieldElement{-3017432, 10058206, 1980837, 3964243, 22160966, 12322533, -6431123, -12618185, 12228557, -7003677}, + FieldElement{32944382, 14922211, -22844894, 5188528, 21913450, -8719943, 4001465, 13238564, -6114803, 8653815}, + FieldElement{22865569, -4652735, 27603668, -12545395, 14348958, 8234005, 24808405, 5719875, 28483275, 2841751}, + }, + { + FieldElement{-16420968, -1113305, -327719, -12107856, 21886282, -15552774, -1887966, -315658, 19932058, -12739203}, + FieldElement{-11656086, 10087521, -8864888, -5536143, -19278573, -3055912, 3999228, 13239134, -4777469, -13910208}, + FieldElement{1382174, -11694719, 17266790, 9194690, -13324356, 9720081, 20403944, 11284705, -14013818, 3093230}, + }, + { + FieldElement{16650921, -11037932, -1064178, 1570629, -8329746, 7352753, -302424, 16271225, -24049421, -6691850}, + FieldElement{-21911077, -5927941, -4611316, -5560156, -31744103, -10785293, 24123614, 15193618, -21652117, -16739389}, + FieldElement{-9935934, -4289447, -25279823, 4372842, 2087473, 10399484, 31870908, 14690798, 17361620, 11864968}, + }, + { + FieldElement{-11307610, 6210372, 13206574, 5806320, -29017692, -13967200, -12331205, -7486601, -25578460, -16240689}, + FieldElement{14668462, -12270235, 26039039, 15305210, 25515617, 4542480, 10453892, 6577524, 9145645, -6443880}, + FieldElement{5974874, 3053895, -9433049, -10385191, -31865124, 3225009, -7972642, 3936128, -5652273, -3050304}, + }, + { + FieldElement{30625386, -4729400, -25555961, -12792866, -20484575, 7695099, 17097188, -16303496, -27999779, 1803632}, + FieldElement{-3553091, 9865099, -5228566, 4272701, -5673832, -16689700, 14911344, 12196514, -21405489, 7047412}, + FieldElement{20093277, 9920966, -11138194, -5343857, 13161587, 12044805, -32856851, 4124601, -32343828, -10257566}, + }, + { + FieldElement{-20788824, 14084654, -13531713, 7842147, 19119038, -13822605, 4752377, -8714640, -21679658, 2288038}, + FieldElement{-26819236, -3283715, 29965059, 3039786, -14473765, 2540457, 29457502, 14625692, -24819617, 12570232}, + FieldElement{-1063558, -11551823, 16920318, 12494842, 1278292, -5869109, -21159943, -3498680, -11974704, 4724943}, + }, + { + FieldElement{17960970, -11775534, -4140968, -9702530, -8876562, -1410617, -12907383, -8659932, -29576300, 1903856}, + FieldElement{23134274, -14279132, -10681997, -1611936, 20684485, 15770816, -12989750, 3190296, 26955097, 14109738}, + FieldElement{15308788, 5320727, -30113809, -14318877, 22902008, 7767164, 29425325, -11277562, 31960942, 11934971}, + }, + { + FieldElement{-27395711, 8435796, 4109644, 12222639, -24627868, 14818669, 20638173, 4875028, 10491392, 1379718}, + FieldElement{-13159415, 9197841, 3875503, -8936108, -1383712, -5879801, 33518459, 16176658, 21432314, 12180697}, + FieldElement{-11787308, 11500838, 13787581, -13832590, -22430679, 10140205, 1465425, 12689540, -10301319, -13872883}, + }, + }, + { + { + FieldElement{5414091, -15386041, -21007664, 9643570, 12834970, 1186149, -2622916, -1342231, 26128231, 6032912}, + FieldElement{-26337395, -13766162, 32496025, -13653919, 17847801, -12669156, 3604025, 8316894, -25875034, -10437358}, + FieldElement{3296484, 6223048, 24680646, -12246460, -23052020, 5903205, -8862297, -4639164, 12376617, 3188849}, + }, + { + FieldElement{29190488, -14659046, 27549113, -1183516, 3520066, -10697301, 32049515, -7309113, -16109234, -9852307}, + FieldElement{-14744486, -9309156, 735818, -598978, -20407687, -5057904, 25246078, -15795669, 18640741, -960977}, + FieldElement{-6928835, -16430795, 10361374, 5642961, 4910474, 12345252, -31638386, -494430, 10530747, 1053335}, + }, + { + FieldElement{-29265967, -14186805, -13538216, -12117373, -19457059, -10655384, -31462369, -2948985, 24018831, 15026644}, + FieldElement{-22592535, -3145277, -2289276, 5953843, -13440189, 9425631, 25310643, 13003497, -2314791, -15145616}, + FieldElement{-27419985, -603321, -8043984, -1669117, -26092265, 13987819, -27297622, 187899, -23166419, -2531735}, + }, + { + FieldElement{-21744398, -13810475, 1844840, 5021428, -10434399, -15911473, 9716667, 16266922, -5070217, 726099}, + FieldElement{29370922, -6053998, 7334071, -15342259, 9385287, 2247707, -13661962, -4839461, 30007388, -15823341}, + FieldElement{-936379, 16086691, 23751945, -543318, -1167538, -5189036, 9137109, 730663, 9835848, 4555336}, + }, + { + FieldElement{-23376435, 1410446, -22253753, -12899614, 30867635, 15826977, 17693930, 544696, -11985298, 12422646}, + FieldElement{31117226, -12215734, -13502838, 6561947, -9876867, -12757670, -5118685, -4096706, 29120153, 13924425}, + FieldElement{-17400879, -14233209, 19675799, -2734756, -11006962, -5858820, -9383939, -11317700, 7240931, -237388}, + }, + { + FieldElement{-31361739, -11346780, -15007447, -5856218, -22453340, -12152771, 1222336, 4389483, 3293637, -15551743}, + FieldElement{-16684801, -14444245, 11038544, 11054958, -13801175, -3338533, -24319580, 7733547, 12796905, -6335822}, + FieldElement{-8759414, -10817836, -25418864, 10783769, -30615557, -9746811, -28253339, 3647836, 3222231, -11160462}, + }, + { + FieldElement{18606113, 1693100, -25448386, -15170272, 4112353, 10045021, 23603893, -2048234, -7550776, 2484985}, + FieldElement{9255317, -3131197, -12156162, -1004256, 13098013, -9214866, 16377220, -2102812, -19802075, -3034702}, + FieldElement{-22729289, 7496160, -5742199, 11329249, 19991973, -3347502, -31718148, 9936966, -30097688, -10618797}, + }, + { + FieldElement{21878590, -5001297, 4338336, 13643897, -3036865, 13160960, 19708896, 5415497, -7360503, -4109293}, + FieldElement{27736861, 10103576, 12500508, 8502413, -3413016, -9633558, 10436918, -1550276, -23659143, -8132100}, + FieldElement{19492550, -12104365, -29681976, -852630, -3208171, 12403437, 30066266, 8367329, 13243957, 8709688}, + }, + }, + { + { + FieldElement{12015105, 2801261, 28198131, 10151021, 24818120, -4743133, -11194191, -5645734, 5150968, 7274186}, + FieldElement{2831366, -12492146, 1478975, 6122054, 23825128, -12733586, 31097299, 6083058, 31021603, -9793610}, + FieldElement{-2529932, -2229646, 445613, 10720828, -13849527, -11505937, -23507731, 16354465, 15067285, -14147707}, + }, + { + FieldElement{7840942, 14037873, -33364863, 15934016, -728213, -3642706, 21403988, 1057586, -19379462, -12403220}, + FieldElement{915865, -16469274, 15608285, -8789130, -24357026, 6060030, -17371319, 8410997, -7220461, 16527025}, + FieldElement{32922597, -556987, 20336074, -16184568, 10903705, -5384487, 16957574, 52992, 23834301, 6588044}, + }, + { + FieldElement{32752030, 11232950, 3381995, -8714866, 22652988, -10744103, 17159699, 16689107, -20314580, -1305992}, + FieldElement{-4689649, 9166776, -25710296, -10847306, 11576752, 12733943, 7924251, -2752281, 1976123, -7249027}, + FieldElement{21251222, 16309901, -2983015, -6783122, 30810597, 12967303, 156041, -3371252, 12331345, -8237197}, + }, + { + FieldElement{8651614, -4477032, -16085636, -4996994, 13002507, 2950805, 29054427, -5106970, 10008136, -4667901}, + FieldElement{31486080, 15114593, -14261250, 12951354, 14369431, -7387845, 16347321, -13662089, 8684155, -10532952}, + FieldElement{19443825, 11385320, 24468943, -9659068, -23919258, 2187569, -26263207, -6086921, 31316348, 14219878}, + }, + { + FieldElement{-28594490, 1193785, 32245219, 11392485, 31092169, 15722801, 27146014, 6992409, 29126555, 9207390}, + FieldElement{32382935, 1110093, 18477781, 11028262, -27411763, -7548111, -4980517, 10843782, -7957600, -14435730}, + FieldElement{2814918, 7836403, 27519878, -7868156, -20894015, -11553689, -21494559, 8550130, 28346258, 1994730}, + }, + { + FieldElement{-19578299, 8085545, -14000519, -3948622, 2785838, -16231307, -19516951, 7174894, 22628102, 8115180}, + FieldElement{-30405132, 955511, -11133838, -15078069, -32447087, -13278079, -25651578, 3317160, -9943017, 930272}, + FieldElement{-15303681, -6833769, 28856490, 1357446, 23421993, 1057177, 24091212, -1388970, -22765376, -10650715}, + }, + { + FieldElement{-22751231, -5303997, -12907607, -12768866, -15811511, -7797053, -14839018, -16554220, -1867018, 8398970}, + FieldElement{-31969310, 2106403, -4736360, 1362501, 12813763, 16200670, 22981545, -6291273, 18009408, -15772772}, + FieldElement{-17220923, -9545221, -27784654, 14166835, 29815394, 7444469, 29551787, -3727419, 19288549, 1325865}, + }, + { + FieldElement{15100157, -15835752, -23923978, -1005098, -26450192, 15509408, 12376730, -3479146, 33166107, -8042750}, + FieldElement{20909231, 13023121, -9209752, 16251778, -5778415, -8094914, 12412151, 10018715, 2213263, -13878373}, + FieldElement{32529814, -11074689, 30361439, -16689753, -9135940, 1513226, 22922121, 6382134, -5766928, 8371348}, + }, + }, + { + { + FieldElement{9923462, 11271500, 12616794, 3544722, -29998368, -1721626, 12891687, -8193132, -26442943, 10486144}, + FieldElement{-22597207, -7012665, 8587003, -8257861, 4084309, -12970062, 361726, 2610596, -23921530, -11455195}, + FieldElement{5408411, -1136691, -4969122, 10561668, 24145918, 14240566, 31319731, -4235541, 19985175, -3436086}, + }, + { + FieldElement{-13994457, 16616821, 14549246, 3341099, 32155958, 13648976, -17577068, 8849297, 65030, 8370684}, + FieldElement{-8320926, -12049626, 31204563, 5839400, -20627288, -1057277, -19442942, 6922164, 12743482, -9800518}, + FieldElement{-2361371, 12678785, 28815050, 4759974, -23893047, 4884717, 23783145, 11038569, 18800704, 255233}, + }, + { + FieldElement{-5269658, -1773886, 13957886, 7990715, 23132995, 728773, 13393847, 9066957, 19258688, -14753793}, + FieldElement{-2936654, -10827535, -10432089, 14516793, -3640786, 4372541, -31934921, 2209390, -1524053, 2055794}, + FieldElement{580882, 16705327, 5468415, -2683018, -30926419, -14696000, -7203346, -8994389, -30021019, 7394435}, + }, + { + FieldElement{23838809, 1822728, -15738443, 15242727, 8318092, -3733104, -21672180, -3492205, -4821741, 14799921}, + FieldElement{13345610, 9759151, 3371034, -16137791, 16353039, 8577942, 31129804, 13496856, -9056018, 7402518}, + FieldElement{2286874, -4435931, -20042458, -2008336, -13696227, 5038122, 11006906, -15760352, 8205061, 1607563}, + }, + { + FieldElement{14414086, -8002132, 3331830, -3208217, 22249151, -5594188, 18364661, -2906958, 30019587, -9029278}, + FieldElement{-27688051, 1585953, -10775053, 931069, -29120221, -11002319, -14410829, 12029093, 9944378, 8024}, + FieldElement{4368715, -3709630, 29874200, -15022983, -20230386, -11410704, -16114594, -999085, -8142388, 5640030}, + }, + { + FieldElement{10299610, 13746483, 11661824, 16234854, 7630238, 5998374, 9809887, -16694564, 15219798, -14327783}, + FieldElement{27425505, -5719081, 3055006, 10660664, 23458024, 595578, -15398605, -1173195, -18342183, 9742717}, + FieldElement{6744077, 2427284, 26042789, 2720740, -847906, 1118974, 32324614, 7406442, 12420155, 1994844}, + }, + { + FieldElement{14012521, -5024720, -18384453, -9578469, -26485342, -3936439, -13033478, -10909803, 24319929, -6446333}, + FieldElement{16412690, -4507367, 10772641, 15929391, -17068788, -4658621, 10555945, -10484049, -30102368, -4739048}, + FieldElement{22397382, -7767684, -9293161, -12792868, 17166287, -9755136, -27333065, 6199366, 21880021, -12250760}, + }, + { + FieldElement{-4283307, 5368523, -31117018, 8163389, -30323063, 3209128, 16557151, 8890729, 8840445, 4957760}, + FieldElement{-15447727, 709327, -6919446, -10870178, -29777922, 6522332, -21720181, 12130072, -14796503, 5005757}, + FieldElement{-2114751, -14308128, 23019042, 15765735, -25269683, 6002752, 10183197, -13239326, -16395286, -2176112}, + }, + }, + { + { + FieldElement{-19025756, 1632005, 13466291, -7995100, -23640451, 16573537, -32013908, -3057104, 22208662, 2000468}, + FieldElement{3065073, -1412761, -25598674, -361432, -17683065, -5703415, -8164212, 11248527, -3691214, -7414184}, + FieldElement{10379208, -6045554, 8877319, 1473647, -29291284, -12507580, 16690915, 2553332, -3132688, 16400289}, + }, + { + FieldElement{15716668, 1254266, -18472690, 7446274, -8448918, 6344164, -22097271, -7285580, 26894937, 9132066}, + FieldElement{24158887, 12938817, 11085297, -8177598, -28063478, -4457083, -30576463, 64452, -6817084, -2692882}, + FieldElement{13488534, 7794716, 22236231, 5989356, 25426474, -12578208, 2350710, -3418511, -4688006, 2364226}, + }, + { + FieldElement{16335052, 9132434, 25640582, 6678888, 1725628, 8517937, -11807024, -11697457, 15445875, -7798101}, + FieldElement{29004207, -7867081, 28661402, -640412, -12794003, -7943086, 31863255, -4135540, -278050, -15759279}, + FieldElement{-6122061, -14866665, -28614905, 14569919, -10857999, -3591829, 10343412, -6976290, -29828287, -10815811}, + }, + { + FieldElement{27081650, 3463984, 14099042, -4517604, 1616303, -6205604, 29542636, 15372179, 17293797, 960709}, + FieldElement{20263915, 11434237, -5765435, 11236810, 13505955, -10857102, -16111345, 6493122, -19384511, 7639714}, + FieldElement{-2830798, -14839232, 25403038, -8215196, -8317012, -16173699, 18006287, -16043750, 29994677, -15808121}, + }, + { + FieldElement{9769828, 5202651, -24157398, -13631392, -28051003, -11561624, -24613141, -13860782, -31184575, 709464}, + FieldElement{12286395, 13076066, -21775189, -1176622, -25003198, 4057652, -32018128, -8890874, 16102007, 13205847}, + FieldElement{13733362, 5599946, 10557076, 3195751, -5557991, 8536970, -25540170, 8525972, 10151379, 10394400}, + }, + { + FieldElement{4024660, -16137551, 22436262, 12276534, -9099015, -2686099, 19698229, 11743039, -33302334, 8934414}, + FieldElement{-15879800, -4525240, -8580747, -2934061, 14634845, -698278, -9449077, 3137094, -11536886, 11721158}, + FieldElement{17555939, -5013938, 8268606, 2331751, -22738815, 9761013, 9319229, 8835153, -9205489, -1280045}, + }, + { + FieldElement{-461409, -7830014, 20614118, 16688288, -7514766, -4807119, 22300304, 505429, 6108462, -6183415}, + FieldElement{-5070281, 12367917, -30663534, 3234473, 32617080, -8422642, 29880583, -13483331, -26898490, -7867459}, + FieldElement{-31975283, 5726539, 26934134, 10237677, -3173717, -605053, 24199304, 3795095, 7592688, -14992079}, + }, + { + FieldElement{21594432, -14964228, 17466408, -4077222, 32537084, 2739898, 6407723, 12018833, -28256052, 4298412}, + FieldElement{-20650503, -11961496, -27236275, 570498, 3767144, -1717540, 13891942, -1569194, 13717174, 10805743}, + FieldElement{-14676630, -15644296, 15287174, 11927123, 24177847, -8175568, -796431, 14860609, -26938930, -5863836}, + }, + }, + { + { + FieldElement{12962541, 5311799, -10060768, 11658280, 18855286, -7954201, 13286263, -12808704, -4381056, 9882022}, + FieldElement{18512079, 11319350, -20123124, 15090309, 18818594, 5271736, -22727904, 3666879, -23967430, -3299429}, + FieldElement{-6789020, -3146043, 16192429, 13241070, 15898607, -14206114, -10084880, -6661110, -2403099, 5276065}, + }, + { + FieldElement{30169808, -5317648, 26306206, -11750859, 27814964, 7069267, 7152851, 3684982, 1449224, 13082861}, + FieldElement{10342826, 3098505, 2119311, 193222, 25702612, 12233820, 23697382, 15056736, -21016438, -8202000}, + FieldElement{-33150110, 3261608, 22745853, 7948688, 19370557, -15177665, -26171976, 6482814, -10300080, -11060101}, + }, + { + FieldElement{32869458, -5408545, 25609743, 15678670, -10687769, -15471071, 26112421, 2521008, -22664288, 6904815}, + FieldElement{29506923, 4457497, 3377935, -9796444, -30510046, 12935080, 1561737, 3841096, -29003639, -6657642}, + FieldElement{10340844, -6630377, -18656632, -2278430, 12621151, -13339055, 30878497, -11824370, -25584551, 5181966}, + }, + { + FieldElement{25940115, -12658025, 17324188, -10307374, -8671468, 15029094, 24396252, -16450922, -2322852, -12388574}, + FieldElement{-21765684, 9916823, -1300409, 4079498, -1028346, 11909559, 1782390, 12641087, 20603771, -6561742}, + FieldElement{-18882287, -11673380, 24849422, 11501709, 13161720, -4768874, 1925523, 11914390, 4662781, 7820689}, + }, + { + FieldElement{12241050, -425982, 8132691, 9393934, 32846760, -1599620, 29749456, 12172924, 16136752, 15264020}, + FieldElement{-10349955, -14680563, -8211979, 2330220, -17662549, -14545780, 10658213, 6671822, 19012087, 3772772}, + FieldElement{3753511, -3421066, 10617074, 2028709, 14841030, -6721664, 28718732, -15762884, 20527771, 12988982}, + }, + { + FieldElement{-14822485, -5797269, -3707987, 12689773, -898983, -10914866, -24183046, -10564943, 3299665, -12424953}, + FieldElement{-16777703, -15253301, -9642417, 4978983, 3308785, 8755439, 6943197, 6461331, -25583147, 8991218}, + FieldElement{-17226263, 1816362, -1673288, -6086439, 31783888, -8175991, -32948145, 7417950, -30242287, 1507265}, + }, + { + FieldElement{29692663, 6829891, -10498800, 4334896, 20945975, -11906496, -28887608, 8209391, 14606362, -10647073}, + FieldElement{-3481570, 8707081, 32188102, 5672294, 22096700, 1711240, -33020695, 9761487, 4170404, -2085325}, + FieldElement{-11587470, 14855945, -4127778, -1531857, -26649089, 15084046, 22186522, 16002000, -14276837, -8400798}, + }, + { + FieldElement{-4811456, 13761029, -31703877, -2483919, -3312471, 7869047, -7113572, -9620092, 13240845, 10965870}, + FieldElement{-7742563, -8256762, -14768334, -13656260, -23232383, 12387166, 4498947, 14147411, 29514390, 4302863}, + FieldElement{-13413405, -12407859, 20757302, -13801832, 14785143, 8976368, -5061276, -2144373, 17846988, -13971927}, + }, + }, + { + { + FieldElement{-2244452, -754728, -4597030, -1066309, -6247172, 1455299, -21647728, -9214789, -5222701, 12650267}, + FieldElement{-9906797, -16070310, 21134160, 12198166, -27064575, 708126, 387813, 13770293, -19134326, 10958663}, + FieldElement{22470984, 12369526, 23446014, -5441109, -21520802, -9698723, -11772496, -11574455, -25083830, 4271862}, + }, + { + FieldElement{-25169565, -10053642, -19909332, 15361595, -5984358, 2159192, 75375, -4278529, -32526221, 8469673}, + FieldElement{15854970, 4148314, -8893890, 7259002, 11666551, 13824734, -30531198, 2697372, 24154791, -9460943}, + FieldElement{15446137, -15806644, 29759747, 14019369, 30811221, -9610191, -31582008, 12840104, 24913809, 9815020}, + }, + { + FieldElement{-4709286, -5614269, -31841498, -12288893, -14443537, 10799414, -9103676, 13438769, 18735128, 9466238}, + FieldElement{11933045, 9281483, 5081055, -5183824, -2628162, -4905629, -7727821, -10896103, -22728655, 16199064}, + FieldElement{14576810, 379472, -26786533, -8317236, -29426508, -10812974, -102766, 1876699, 30801119, 2164795}, + }, + { + FieldElement{15995086, 3199873, 13672555, 13712240, -19378835, -4647646, -13081610, -15496269, -13492807, 1268052}, + FieldElement{-10290614, -3659039, -3286592, 10948818, 23037027, 3794475, -3470338, -12600221, -17055369, 3565904}, + FieldElement{29210088, -9419337, -5919792, -4952785, 10834811, -13327726, -16512102, -10820713, -27162222, -14030531}, + }, + { + FieldElement{-13161890, 15508588, 16663704, -8156150, -28349942, 9019123, -29183421, -3769423, 2244111, -14001979}, + FieldElement{-5152875, -3800936, -9306475, -6071583, 16243069, 14684434, -25673088, -16180800, 13491506, 4641841}, + FieldElement{10813417, 643330, -19188515, -728916, 30292062, -16600078, 27548447, -7721242, 14476989, -12767431}, + }, + { + FieldElement{10292079, 9984945, 6481436, 8279905, -7251514, 7032743, 27282937, -1644259, -27912810, 12651324}, + FieldElement{-31185513, -813383, 22271204, 11835308, 10201545, 15351028, 17099662, 3988035, 21721536, -3148940}, + FieldElement{10202177, -6545839, -31373232, -9574638, -32150642, -8119683, -12906320, 3852694, 13216206, 14842320}, + }, + { + FieldElement{-15815640, -10601066, -6538952, -7258995, -6984659, -6581778, -31500847, 13765824, -27434397, 9900184}, + FieldElement{14465505, -13833331, -32133984, -14738873, -27443187, 12990492, 33046193, 15796406, -7051866, -8040114}, + FieldElement{30924417, -8279620, 6359016, -12816335, 16508377, 9071735, -25488601, 15413635, 9524356, -7018878}, + }, + { + FieldElement{12274201, -13175547, 32627641, -1785326, 6736625, 13267305, 5237659, -5109483, 15663516, 4035784}, + FieldElement{-2951309, 8903985, 17349946, 601635, -16432815, -4612556, -13732739, -15889334, -22258478, 4659091}, + FieldElement{-16916263, -4952973, -30393711, -15158821, 20774812, 15897498, 5736189, 15026997, -2178256, -13455585}, + }, + }, + { + { + FieldElement{-8858980, -2219056, 28571666, -10155518, -474467, -10105698, -3801496, 278095, 23440562, -290208}, + FieldElement{10226241, -5928702, 15139956, 120818, -14867693, 5218603, 32937275, 11551483, -16571960, -7442864}, + FieldElement{17932739, -12437276, -24039557, 10749060, 11316803, 7535897, 22503767, 5561594, -3646624, 3898661}, + }, + { + FieldElement{7749907, -969567, -16339731, -16464, -25018111, 15122143, -1573531, 7152530, 21831162, 1245233}, + FieldElement{26958459, -14658026, 4314586, 8346991, -5677764, 11960072, -32589295, -620035, -30402091, -16716212}, + FieldElement{-12165896, 9166947, 33491384, 13673479, 29787085, 13096535, 6280834, 14587357, -22338025, 13987525}, + }, + { + FieldElement{-24349909, 7778775, 21116000, 15572597, -4833266, -5357778, -4300898, -5124639, -7469781, -2858068}, + FieldElement{9681908, -6737123, -31951644, 13591838, -6883821, 386950, 31622781, 6439245, -14581012, 4091397}, + FieldElement{-8426427, 1470727, -28109679, -1596990, 3978627, -5123623, -19622683, 12092163, 29077877, -14741988}, + }, + { + FieldElement{5269168, -6859726, -13230211, -8020715, 25932563, 1763552, -5606110, -5505881, -20017847, 2357889}, + FieldElement{32264008, -15407652, -5387735, -1160093, -2091322, -3946900, 23104804, -12869908, 5727338, 189038}, + FieldElement{14609123, -8954470, -6000566, -16622781, -14577387, -7743898, -26745169, 10942115, -25888931, -14884697}, + }, + { + FieldElement{20513500, 5557931, -15604613, 7829531, 26413943, -2019404, -21378968, 7471781, 13913677, -5137875}, + FieldElement{-25574376, 11967826, 29233242, 12948236, -6754465, 4713227, -8940970, 14059180, 12878652, 8511905}, + FieldElement{-25656801, 3393631, -2955415, -7075526, -2250709, 9366908, -30223418, 6812974, 5568676, -3127656}, + }, + { + FieldElement{11630004, 12144454, 2116339, 13606037, 27378885, 15676917, -17408753, -13504373, -14395196, 8070818}, + FieldElement{27117696, -10007378, -31282771, -5570088, 1127282, 12772488, -29845906, 10483306, -11552749, -1028714}, + FieldElement{10637467, -5688064, 5674781, 1072708, -26343588, -6982302, -1683975, 9177853, -27493162, 15431203}, + }, + { + FieldElement{20525145, 10892566, -12742472, 12779443, -29493034, 16150075, -28240519, 14943142, -15056790, -7935931}, + FieldElement{-30024462, 5626926, -551567, -9981087, 753598, 11981191, 25244767, -3239766, -3356550, 9594024}, + FieldElement{-23752644, 2636870, -5163910, -10103818, 585134, 7877383, 11345683, -6492290, 13352335, -10977084}, + }, + { + FieldElement{-1931799, -5407458, 3304649, -12884869, 17015806, -4877091, -29783850, -7752482, -13215537, -319204}, + FieldElement{20239939, 6607058, 6203985, 3483793, -18386976, -779229, -20723742, 15077870, -22750759, 14523817}, + FieldElement{27406042, -6041657, 27423596, -4497394, 4996214, 10002360, -28842031, -4545494, -30172742, -4805667}, + }, + }, + { + { + FieldElement{11374242, 12660715, 17861383, -12540833, 10935568, 1099227, -13886076, -9091740, -27727044, 11358504}, + FieldElement{-12730809, 10311867, 1510375, 10778093, -2119455, -9145702, 32676003, 11149336, -26123651, 4985768}, + FieldElement{-19096303, 341147, -6197485, -239033, 15756973, -8796662, -983043, 13794114, -19414307, -15621255}, + }, + { + FieldElement{6490081, 11940286, 25495923, -7726360, 8668373, -8751316, 3367603, 6970005, -1691065, -9004790}, + FieldElement{1656497, 13457317, 15370807, 6364910, 13605745, 8362338, -19174622, -5475723, -16796596, -5031438}, + FieldElement{-22273315, -13524424, -64685, -4334223, -18605636, -10921968, -20571065, -7007978, -99853, -10237333}, + }, + { + FieldElement{17747465, 10039260, 19368299, -4050591, -20630635, -16041286, 31992683, -15857976, -29260363, -5511971}, + FieldElement{31932027, -4986141, -19612382, 16366580, 22023614, 88450, 11371999, -3744247, 4882242, -10626905}, + FieldElement{29796507, 37186, 19818052, 10115756, -11829032, 3352736, 18551198, 3272828, -5190932, -4162409}, + }, + { + FieldElement{12501286, 4044383, -8612957, -13392385, -32430052, 5136599, -19230378, -3529697, 330070, -3659409}, + FieldElement{6384877, 2899513, 17807477, 7663917, -2358888, 12363165, 25366522, -8573892, -271295, 12071499}, + FieldElement{-8365515, -4042521, 25133448, -4517355, -6211027, 2265927, -32769618, 1936675, -5159697, 3829363}, + }, + { + FieldElement{28425966, -5835433, -577090, -4697198, -14217555, 6870930, 7921550, -6567787, 26333140, 14267664}, + FieldElement{-11067219, 11871231, 27385719, -10559544, -4585914, -11189312, 10004786, -8709488, -21761224, 8930324}, + FieldElement{-21197785, -16396035, 25654216, -1725397, 12282012, 11008919, 1541940, 4757911, -26491501, -16408940}, + }, + { + FieldElement{13537262, -7759490, -20604840, 10961927, -5922820, -13218065, -13156584, 6217254, -15943699, 13814990}, + FieldElement{-17422573, 15157790, 18705543, 29619, 24409717, -260476, 27361681, 9257833, -1956526, -1776914}, + FieldElement{-25045300, -10191966, 15366585, 15166509, -13105086, 8423556, -29171540, 12361135, -18685978, 4578290}, + }, + { + FieldElement{24579768, 3711570, 1342322, -11180126, -27005135, 14124956, -22544529, 14074919, 21964432, 8235257}, + FieldElement{-6528613, -2411497, 9442966, -5925588, 12025640, -1487420, -2981514, -1669206, 13006806, 2355433}, + FieldElement{-16304899, -13605259, -6632427, -5142349, 16974359, -10911083, 27202044, 1719366, 1141648, -12796236}, + }, + { + FieldElement{-12863944, -13219986, -8318266, -11018091, -6810145, -4843894, 13475066, -3133972, 32674895, 13715045}, + FieldElement{11423335, -5468059, 32344216, 8962751, 24989809, 9241752, -13265253, 16086212, -28740881, -15642093}, + FieldElement{-1409668, 12530728, -6368726, 10847387, 19531186, -14132160, -11709148, 7791794, -27245943, 4383347}, + }, + }, + { + { + FieldElement{-28970898, 5271447, -1266009, -9736989, -12455236, 16732599, -4862407, -4906449, 27193557, 6245191}, + FieldElement{-15193956, 5362278, -1783893, 2695834, 4960227, 12840725, 23061898, 3260492, 22510453, 8577507}, + FieldElement{-12632451, 11257346, -32692994, 13548177, -721004, 10879011, 31168030, 13952092, -29571492, -3635906}, + }, + { + FieldElement{3877321, -9572739, 32416692, 5405324, -11004407, -13656635, 3759769, 11935320, 5611860, 8164018}, + FieldElement{-16275802, 14667797, 15906460, 12155291, -22111149, -9039718, 32003002, -8832289, 5773085, -8422109}, + FieldElement{-23788118, -8254300, 1950875, 8937633, 18686727, 16459170, -905725, 12376320, 31632953, 190926}, + }, + { + FieldElement{-24593607, -16138885, -8423991, 13378746, 14162407, 6901328, -8288749, 4508564, -25341555, -3627528}, + FieldElement{8884438, -5884009, 6023974, 10104341, -6881569, -4941533, 18722941, -14786005, -1672488, 827625}, + FieldElement{-32720583, -16289296, -32503547, 7101210, 13354605, 2659080, -1800575, -14108036, -24878478, 1541286}, + }, + { + FieldElement{2901347, -1117687, 3880376, -10059388, -17620940, -3612781, -21802117, -3567481, 20456845, -1885033}, + FieldElement{27019610, 12299467, -13658288, -1603234, -12861660, -4861471, -19540150, -5016058, 29439641, 15138866}, + FieldElement{21536104, -6626420, -32447818, -10690208, -22408077, 5175814, -5420040, -16361163, 7779328, 109896}, + }, + { + FieldElement{30279744, 14648750, -8044871, 6425558, 13639621, -743509, 28698390, 12180118, 23177719, -554075}, + FieldElement{26572847, 3405927, -31701700, 12890905, -19265668, 5335866, -6493768, 2378492, 4439158, -13279347}, + FieldElement{-22716706, 3489070, -9225266, -332753, 18875722, -1140095, 14819434, -12731527, -17717757, -5461437}, + }, + { + FieldElement{-5056483, 16566551, 15953661, 3767752, -10436499, 15627060, -820954, 2177225, 8550082, -15114165}, + FieldElement{-18473302, 16596775, -381660, 15663611, 22860960, 15585581, -27844109, -3582739, -23260460, -8428588}, + FieldElement{-32480551, 15707275, -8205912, -5652081, 29464558, 2713815, -22725137, 15860482, -21902570, 1494193}, + }, + { + FieldElement{-19562091, -14087393, -25583872, -9299552, 13127842, 759709, 21923482, 16529112, 8742704, 12967017}, + FieldElement{-28464899, 1553205, 32536856, -10473729, -24691605, -406174, -8914625, -2933896, -29903758, 15553883}, + FieldElement{21877909, 3230008, 9881174, 10539357, -4797115, 2841332, 11543572, 14513274, 19375923, -12647961}, + }, + { + FieldElement{8832269, -14495485, 13253511, 5137575, 5037871, 4078777, 24880818, -6222716, 2862653, 9455043}, + FieldElement{29306751, 5123106, 20245049, -14149889, 9592566, 8447059, -2077124, -2990080, 15511449, 4789663}, + FieldElement{-20679756, 7004547, 8824831, -9434977, -4045704, -3750736, -5754762, 108893, 23513200, 16652362}, + }, + }, + { + { + FieldElement{-33256173, 4144782, -4476029, -6579123, 10770039, -7155542, -6650416, -12936300, -18319198, 10212860}, + FieldElement{2756081, 8598110, 7383731, -6859892, 22312759, -1105012, 21179801, 2600940, -9988298, -12506466}, + FieldElement{-24645692, 13317462, -30449259, -15653928, 21365574, -10869657, 11344424, 864440, -2499677, -16710063}, + }, + { + FieldElement{-26432803, 6148329, -17184412, -14474154, 18782929, -275997, -22561534, 211300, 2719757, 4940997}, + FieldElement{-1323882, 3911313, -6948744, 14759765, -30027150, 7851207, 21690126, 8518463, 26699843, 5276295}, + FieldElement{-13149873, -6429067, 9396249, 365013, 24703301, -10488939, 1321586, 149635, -15452774, 7159369}, + }, + { + FieldElement{9987780, -3404759, 17507962, 9505530, 9731535, -2165514, 22356009, 8312176, 22477218, -8403385}, + FieldElement{18155857, -16504990, 19744716, 9006923, 15154154, -10538976, 24256460, -4864995, -22548173, 9334109}, + FieldElement{2986088, -4911893, 10776628, -3473844, 10620590, -7083203, -21413845, 14253545, -22587149, 536906}, + }, + { + FieldElement{4377756, 8115836, 24567078, 15495314, 11625074, 13064599, 7390551, 10589625, 10838060, -15420424}, + FieldElement{-19342404, 867880, 9277171, -3218459, -14431572, -1986443, 19295826, -15796950, 6378260, 699185}, + FieldElement{7895026, 4057113, -7081772, -13077756, -17886831, -323126, -716039, 15693155, -5045064, -13373962}, + }, + { + FieldElement{-7737563, -5869402, -14566319, -7406919, 11385654, 13201616, 31730678, -10962840, -3918636, -9669325}, + FieldElement{10188286, -15770834, -7336361, 13427543, 22223443, 14896287, 30743455, 7116568, -21786507, 5427593}, + FieldElement{696102, 13206899, 27047647, -10632082, 15285305, -9853179, 10798490, -4578720, 19236243, 12477404}, + }, + { + FieldElement{-11229439, 11243796, -17054270, -8040865, -788228, -8167967, -3897669, 11180504, -23169516, 7733644}, + FieldElement{17800790, -14036179, -27000429, -11766671, 23887827, 3149671, 23466177, -10538171, 10322027, 15313801}, + FieldElement{26246234, 11968874, 32263343, -5468728, 6830755, -13323031, -15794704, -101982, -24449242, 10890804}, + }, + { + FieldElement{-31365647, 10271363, -12660625, -6267268, 16690207, -13062544, -14982212, 16484931, 25180797, -5334884}, + FieldElement{-586574, 10376444, -32586414, -11286356, 19801893, 10997610, 2276632, 9482883, 316878, 13820577}, + FieldElement{-9882808, -4510367, -2115506, 16457136, -11100081, 11674996, 30756178, -7515054, 30696930, -3712849}, + }, + { + FieldElement{32988917, -9603412, 12499366, 7910787, -10617257, -11931514, -7342816, -9985397, -32349517, 7392473}, + FieldElement{-8855661, 15927861, 9866406, -3649411, -2396914, -16655781, -30409476, -9134995, 25112947, -2926644}, + FieldElement{-2504044, -436966, 25621774, -5678772, 15085042, -5479877, -24884878, -13526194, 5537438, -13914319}, + }, + }, + { + { + FieldElement{-11225584, 2320285, -9584280, 10149187, -33444663, 5808648, -14876251, -1729667, 31234590, 6090599}, + FieldElement{-9633316, 116426, 26083934, 2897444, -6364437, -2688086, 609721, 15878753, -6970405, -9034768}, + FieldElement{-27757857, 247744, -15194774, -9002551, 23288161, -10011936, -23869595, 6503646, 20650474, 1804084}, + }, + { + FieldElement{-27589786, 15456424, 8972517, 8469608, 15640622, 4439847, 3121995, -10329713, 27842616, -202328}, + FieldElement{-15306973, 2839644, 22530074, 10026331, 4602058, 5048462, 28248656, 5031932, -11375082, 12714369}, + FieldElement{20807691, -7270825, 29286141, 11421711, -27876523, -13868230, -21227475, 1035546, -19733229, 12796920}, + }, + { + FieldElement{12076899, -14301286, -8785001, -11848922, -25012791, 16400684, -17591495, -12899438, 3480665, -15182815}, + FieldElement{-32361549, 5457597, 28548107, 7833186, 7303070, -11953545, -24363064, -15921875, -33374054, 2771025}, + FieldElement{-21389266, 421932, 26597266, 6860826, 22486084, -6737172, -17137485, -4210226, -24552282, 15673397}, + }, + { + FieldElement{-20184622, 2338216, 19788685, -9620956, -4001265, -8740893, -20271184, 4733254, 3727144, -12934448}, + FieldElement{6120119, 814863, -11794402, -622716, 6812205, -15747771, 2019594, 7975683, 31123697, -10958981}, + FieldElement{30069250, -11435332, 30434654, 2958439, 18399564, -976289, 12296869, 9204260, -16432438, 9648165}, + }, + { + FieldElement{32705432, -1550977, 30705658, 7451065, -11805606, 9631813, 3305266, 5248604, -26008332, -11377501}, + FieldElement{17219865, 2375039, -31570947, -5575615, -19459679, 9219903, 294711, 15298639, 2662509, -16297073}, + FieldElement{-1172927, -7558695, -4366770, -4287744, -21346413, -8434326, 32087529, -1222777, 32247248, -14389861}, + }, + { + FieldElement{14312628, 1221556, 17395390, -8700143, -4945741, -8684635, -28197744, -9637817, -16027623, -13378845}, + FieldElement{-1428825, -9678990, -9235681, 6549687, -7383069, -468664, 23046502, 9803137, 17597934, 2346211}, + FieldElement{18510800, 15337574, 26171504, 981392, -22241552, 7827556, -23491134, -11323352, 3059833, -11782870}, + }, + { + FieldElement{10141598, 6082907, 17829293, -1947643, 9830092, 13613136, -25556636, -5544586, -33502212, 3592096}, + FieldElement{33114168, -15889352, -26525686, -13343397, 33076705, 8716171, 1151462, 1521897, -982665, -6837803}, + FieldElement{-32939165, -4255815, 23947181, -324178, -33072974, -12305637, -16637686, 3891704, 26353178, 693168}, + }, + { + FieldElement{30374239, 1595580, -16884039, 13186931, 4600344, 406904, 9585294, -400668, 31375464, 14369965}, + FieldElement{-14370654, -7772529, 1510301, 6434173, -18784789, -6262728, 32732230, -13108839, 17901441, 16011505}, + FieldElement{18171223, -11934626, -12500402, 15197122, -11038147, -15230035, -19172240, -16046376, 8764035, 12309598}, + }, + }, + { + { + FieldElement{5975908, -5243188, -19459362, -9681747, -11541277, 14015782, -23665757, 1228319, 17544096, -10593782}, + FieldElement{5811932, -1715293, 3442887, -2269310, -18367348, -8359541, -18044043, -15410127, -5565381, 12348900}, + FieldElement{-31399660, 11407555, 25755363, 6891399, -3256938, 14872274, -24849353, 8141295, -10632534, -585479}, + }, + { + FieldElement{-12675304, 694026, -5076145, 13300344, 14015258, -14451394, -9698672, -11329050, 30944593, 1130208}, + FieldElement{8247766, -6710942, -26562381, -7709309, -14401939, -14648910, 4652152, 2488540, 23550156, -271232}, + FieldElement{17294316, -3788438, 7026748, 15626851, 22990044, 113481, 2267737, -5908146, -408818, -137719}, + }, + { + FieldElement{16091085, -16253926, 18599252, 7340678, 2137637, -1221657, -3364161, 14550936, 3260525, -7166271}, + FieldElement{-4910104, -13332887, 18550887, 10864893, -16459325, -7291596, -23028869, -13204905, -12748722, 2701326}, + FieldElement{-8574695, 16099415, 4629974, -16340524, -20786213, -6005432, -10018363, 9276971, 11329923, 1862132}, + }, + { + FieldElement{14763076, -15903608, -30918270, 3689867, 3511892, 10313526, -21951088, 12219231, -9037963, -940300}, + FieldElement{8894987, -3446094, 6150753, 3013931, 301220, 15693451, -31981216, -2909717, -15438168, 11595570}, + FieldElement{15214962, 3537601, -26238722, -14058872, 4418657, -15230761, 13947276, 10730794, -13489462, -4363670}, + }, + { + FieldElement{-2538306, 7682793, 32759013, 263109, -29984731, -7955452, -22332124, -10188635, 977108, 699994}, + FieldElement{-12466472, 4195084, -9211532, 550904, -15565337, 12917920, 19118110, -439841, -30534533, -14337913}, + FieldElement{31788461, -14507657, 4799989, 7372237, 8808585, -14747943, 9408237, -10051775, 12493932, -5409317}, + }, + { + FieldElement{-25680606, 5260744, -19235809, -6284470, -3695942, 16566087, 27218280, 2607121, 29375955, 6024730}, + FieldElement{842132, -2794693, -4763381, -8722815, 26332018, -12405641, 11831880, 6985184, -9940361, 2854096}, + FieldElement{-4847262, -7969331, 2516242, -5847713, 9695691, -7221186, 16512645, 960770, 12121869, 16648078}, + }, + { + FieldElement{-15218652, 14667096, -13336229, 2013717, 30598287, -464137, -31504922, -7882064, 20237806, 2838411}, + FieldElement{-19288047, 4453152, 15298546, -16178388, 22115043, -15972604, 12544294, -13470457, 1068881, -12499905}, + FieldElement{-9558883, -16518835, 33238498, 13506958, 30505848, -1114596, -8486907, -2630053, 12521378, 4845654}, + }, + { + FieldElement{-28198521, 10744108, -2958380, 10199664, 7759311, -13088600, 3409348, -873400, -6482306, -12885870}, + FieldElement{-23561822, 6230156, -20382013, 10655314, -24040585, -11621172, 10477734, -1240216, -3113227, 13974498}, + FieldElement{12966261, 15550616, -32038948, -1615346, 21025980, -629444, 5642325, 7188737, 18895762, 12629579}, + }, + }, + { + { + FieldElement{14741879, -14946887, 22177208, -11721237, 1279741, 8058600, 11758140, 789443, 32195181, 3895677}, + FieldElement{10758205, 15755439, -4509950, 9243698, -4879422, 6879879, -2204575, -3566119, -8982069, 4429647}, + FieldElement{-2453894, 15725973, -20436342, -10410672, -5803908, -11040220, -7135870, -11642895, 18047436, -15281743}, + }, + { + FieldElement{-25173001, -11307165, 29759956, 11776784, -22262383, -15820455, 10993114, -12850837, -17620701, -9408468}, + FieldElement{21987233, 700364, -24505048, 14972008, -7774265, -5718395, 32155026, 2581431, -29958985, 8773375}, + FieldElement{-25568350, 454463, -13211935, 16126715, 25240068, 8594567, 20656846, 12017935, -7874389, -13920155}, + }, + { + FieldElement{6028182, 6263078, -31011806, -11301710, -818919, 2461772, -31841174, -5468042, -1721788, -2776725}, + FieldElement{-12278994, 16624277, 987579, -5922598, 32908203, 1248608, 7719845, -4166698, 28408820, 6816612}, + FieldElement{-10358094, -8237829, 19549651, -12169222, 22082623, 16147817, 20613181, 13982702, -10339570, 5067943}, + }, + { + FieldElement{-30505967, -3821767, 12074681, 13582412, -19877972, 2443951, -19719286, 12746132, 5331210, -10105944}, + FieldElement{30528811, 3601899, -1957090, 4619785, -27361822, -15436388, 24180793, -12570394, 27679908, -1648928}, + FieldElement{9402404, -13957065, 32834043, 10838634, -26580150, -13237195, 26653274, -8685565, 22611444, -12715406}, + }, + { + FieldElement{22190590, 1118029, 22736441, 15130463, -30460692, -5991321, 19189625, -4648942, 4854859, 6622139}, + FieldElement{-8310738, -2953450, -8262579, -3388049, -10401731, -271929, 13424426, -3567227, 26404409, 13001963}, + FieldElement{-31241838, -15415700, -2994250, 8939346, 11562230, -12840670, -26064365, -11621720, -15405155, 11020693}, + }, + { + FieldElement{1866042, -7949489, -7898649, -10301010, 12483315, 13477547, 3175636, -12424163, 28761762, 1406734}, + FieldElement{-448555, -1777666, 13018551, 3194501, -9580420, -11161737, 24760585, -4347088, 25577411, -13378680}, + FieldElement{-24290378, 4759345, -690653, -1852816, 2066747, 10693769, -29595790, 9884936, -9368926, 4745410}, + }, + { + FieldElement{-9141284, 6049714, -19531061, -4341411, -31260798, 9944276, -15462008, -11311852, 10931924, -11931931}, + FieldElement{-16561513, 14112680, -8012645, 4817318, -8040464, -11414606, -22853429, 10856641, -20470770, 13434654}, + FieldElement{22759489, -10073434, -16766264, -1871422, 13637442, -10168091, 1765144, -12654326, 28445307, -5364710}, + }, + { + FieldElement{29875063, 12493613, 2795536, -3786330, 1710620, 15181182, -10195717, -8788675, 9074234, 1167180}, + FieldElement{-26205683, 11014233, -9842651, -2635485, -26908120, 7532294, -18716888, -9535498, 3843903, 9367684}, + FieldElement{-10969595, -6403711, 9591134, 9582310, 11349256, 108879, 16235123, 8601684, -139197, 4242895}, + }, + }, + { + { + FieldElement{22092954, -13191123, -2042793, -11968512, 32186753, -11517388, -6574341, 2470660, -27417366, 16625501}, + FieldElement{-11057722, 3042016, 13770083, -9257922, 584236, -544855, -7770857, 2602725, -27351616, 14247413}, + FieldElement{6314175, -10264892, -32772502, 15957557, -10157730, 168750, -8618807, 14290061, 27108877, -1180880}, + }, + { + FieldElement{-8586597, -7170966, 13241782, 10960156, -32991015, -13794596, 33547976, -11058889, -27148451, 981874}, + FieldElement{22833440, 9293594, -32649448, -13618667, -9136966, 14756819, -22928859, -13970780, -10479804, -16197962}, + FieldElement{-7768587, 3326786, -28111797, 10783824, 19178761, 14905060, 22680049, 13906969, -15933690, 3797899}, + }, + { + FieldElement{21721356, -4212746, -12206123, 9310182, -3882239, -13653110, 23740224, -2709232, 20491983, -8042152}, + FieldElement{9209270, -15135055, -13256557, -6167798, -731016, 15289673, 25947805, 15286587, 30997318, -6703063}, + FieldElement{7392032, 16618386, 23946583, -8039892, -13265164, -1533858, -14197445, -2321576, 17649998, -250080}, + }, + { + FieldElement{-9301088, -14193827, 30609526, -3049543, -25175069, -1283752, -15241566, -9525724, -2233253, 7662146}, + FieldElement{-17558673, 1763594, -33114336, 15908610, -30040870, -12174295, 7335080, -8472199, -3174674, 3440183}, + FieldElement{-19889700, -5977008, -24111293, -9688870, 10799743, -16571957, 40450, -4431835, 4862400, 1133}, + }, + { + FieldElement{-32856209, -7873957, -5422389, 14860950, -16319031, 7956142, 7258061, 311861, -30594991, -7379421}, + FieldElement{-3773428, -1565936, 28985340, 7499440, 24445838, 9325937, 29727763, 16527196, 18278453, 15405622}, + FieldElement{-4381906, 8508652, -19898366, -3674424, -5984453, 15149970, -13313598, 843523, -21875062, 13626197}, + }, + { + FieldElement{2281448, -13487055, -10915418, -2609910, 1879358, 16164207, -10783882, 3953792, 13340839, 15928663}, + FieldElement{31727126, -7179855, -18437503, -8283652, 2875793, -16390330, -25269894, -7014826, -23452306, 5964753}, + FieldElement{4100420, -5959452, -17179337, 6017714, -18705837, 12227141, -26684835, 11344144, 2538215, -7570755}, + }, + { + FieldElement{-9433605, 6123113, 11159803, -2156608, 30016280, 14966241, -20474983, 1485421, -629256, -15958862}, + FieldElement{-26804558, 4260919, 11851389, 9658551, -32017107, 16367492, -20205425, -13191288, 11659922, -11115118}, + FieldElement{26180396, 10015009, -30844224, -8581293, 5418197, 9480663, 2231568, -10170080, 33100372, -1306171}, + }, + { + FieldElement{15121113, -5201871, -10389905, 15427821, -27509937, -15992507, 21670947, 4486675, -5931810, -14466380}, + FieldElement{16166486, -9483733, -11104130, 6023908, -31926798, -1364923, 2340060, -16254968, -10735770, -10039824}, + FieldElement{28042865, -3557089, -12126526, 12259706, -3717498, -6945899, 6766453, -8689599, 18036436, 5803270}, + }, + }, + { + { + FieldElement{-817581, 6763912, 11803561, 1585585, 10958447, -2671165, 23855391, 4598332, -6159431, -14117438}, + FieldElement{-31031306, -14256194, 17332029, -2383520, 31312682, -5967183, 696309, 50292, -20095739, 11763584}, + FieldElement{-594563, -2514283, -32234153, 12643980, 12650761, 14811489, 665117, -12613632, -19773211, -10713562}, + }, + { + FieldElement{30464590, -11262872, -4127476, -12734478, 19835327, -7105613, -24396175, 2075773, -17020157, 992471}, + FieldElement{18357185, -6994433, 7766382, 16342475, -29324918, 411174, 14578841, 8080033, -11574335, -10601610}, + FieldElement{19598397, 10334610, 12555054, 2555664, 18821899, -10339780, 21873263, 16014234, 26224780, 16452269}, + }, + { + FieldElement{-30223925, 5145196, 5944548, 16385966, 3976735, 2009897, -11377804, -7618186, -20533829, 3698650}, + FieldElement{14187449, 3448569, -10636236, -10810935, -22663880, -3433596, 7268410, -10890444, 27394301, 12015369}, + FieldElement{19695761, 16087646, 28032085, 12999827, 6817792, 11427614, 20244189, -1312777, -13259127, -3402461}, + }, + { + FieldElement{30860103, 12735208, -1888245, -4699734, -16974906, 2256940, -8166013, 12298312, -8550524, -10393462}, + FieldElement{-5719826, -11245325, -1910649, 15569035, 26642876, -7587760, -5789354, -15118654, -4976164, 12651793}, + FieldElement{-2848395, 9953421, 11531313, -5282879, 26895123, -12697089, -13118820, -16517902, 9768698, -2533218}, + }, + { + FieldElement{-24719459, 1894651, -287698, -4704085, 15348719, -8156530, 32767513, 12765450, 4940095, 10678226}, + FieldElement{18860224, 15980149, -18987240, -1562570, -26233012, -11071856, -7843882, 13944024, -24372348, 16582019}, + FieldElement{-15504260, 4970268, -29893044, 4175593, -20993212, -2199756, -11704054, 15444560, -11003761, 7989037}, + }, + { + FieldElement{31490452, 5568061, -2412803, 2182383, -32336847, 4531686, -32078269, 6200206, -19686113, -14800171}, + FieldElement{-17308668, -15879940, -31522777, -2831, -32887382, 16375549, 8680158, -16371713, 28550068, -6857132}, + FieldElement{-28126887, -5688091, 16837845, -1820458, -6850681, 12700016, -30039981, 4364038, 1155602, 5988841}, + }, + { + FieldElement{21890435, -13272907, -12624011, 12154349, -7831873, 15300496, 23148983, -4470481, 24618407, 8283181}, + FieldElement{-33136107, -10512751, 9975416, 6841041, -31559793, 16356536, 3070187, -7025928, 1466169, 10740210}, + FieldElement{-1509399, -15488185, -13503385, -10655916, 32799044, 909394, -13938903, -5779719, -32164649, -15327040}, + }, + { + FieldElement{3960823, -14267803, -28026090, -15918051, -19404858, 13146868, 15567327, 951507, -3260321, -573935}, + FieldElement{24740841, 5052253, -30094131, 8961361, 25877428, 6165135, -24368180, 14397372, -7380369, -6144105}, + FieldElement{-28888365, 3510803, -28103278, -1158478, -11238128, -10631454, -15441463, -14453128, -1625486, -6494814}, + }, + }, + { + { + FieldElement{793299, -9230478, 8836302, -6235707, -27360908, -2369593, 33152843, -4885251, -9906200, -621852}, + FieldElement{5666233, 525582, 20782575, -8038419, -24538499, 14657740, 16099374, 1468826, -6171428, -15186581}, + FieldElement{-4859255, -3779343, -2917758, -6748019, 7778750, 11688288, -30404353, -9871238, -1558923, -9863646}, + }, + { + FieldElement{10896332, -7719704, 824275, 472601, -19460308, 3009587, 25248958, 14783338, -30581476, -15757844}, + FieldElement{10566929, 12612572, -31944212, 11118703, -12633376, 12362879, 21752402, 8822496, 24003793, 14264025}, + FieldElement{27713862, -7355973, -11008240, 9227530, 27050101, 2504721, 23886875, -13117525, 13958495, -5732453}, + }, + { + FieldElement{-23481610, 4867226, -27247128, 3900521, 29838369, -8212291, -31889399, -10041781, 7340521, -15410068}, + FieldElement{4646514, -8011124, -22766023, -11532654, 23184553, 8566613, 31366726, -1381061, -15066784, -10375192}, + FieldElement{-17270517, 12723032, -16993061, 14878794, 21619651, -6197576, 27584817, 3093888, -8843694, 3849921}, + }, + { + FieldElement{-9064912, 2103172, 25561640, -15125738, -5239824, 9582958, 32477045, -9017955, 5002294, -15550259}, + FieldElement{-12057553, -11177906, 21115585, -13365155, 8808712, -12030708, 16489530, 13378448, -25845716, 12741426}, + FieldElement{-5946367, 10645103, -30911586, 15390284, -3286982, -7118677, 24306472, 15852464, 28834118, -7646072}, + }, + { + FieldElement{-17335748, -9107057, -24531279, 9434953, -8472084, -583362, -13090771, 455841, 20461858, 5491305}, + FieldElement{13669248, -16095482, -12481974, -10203039, -14569770, -11893198, -24995986, 11293807, -28588204, -9421832}, + FieldElement{28497928, 6272777, -33022994, 14470570, 8906179, -1225630, 18504674, -14165166, 29867745, -8795943}, + }, + { + FieldElement{-16207023, 13517196, -27799630, -13697798, 24009064, -6373891, -6367600, -13175392, 22853429, -4012011}, + FieldElement{24191378, 16712145, -13931797, 15217831, 14542237, 1646131, 18603514, -11037887, 12876623, -2112447}, + FieldElement{17902668, 4518229, -411702, -2829247, 26878217, 5258055, -12860753, 608397, 16031844, 3723494}, + }, + { + FieldElement{-28632773, 12763728, -20446446, 7577504, 33001348, -13017745, 17558842, -7872890, 23896954, -4314245}, + FieldElement{-20005381, -12011952, 31520464, 605201, 2543521, 5991821, -2945064, 7229064, -9919646, -8826859}, + FieldElement{28816045, 298879, -28165016, -15920938, 19000928, -1665890, -12680833, -2949325, -18051778, -2082915}, + }, + { + FieldElement{16000882, -344896, 3493092, -11447198, -29504595, -13159789, 12577740, 16041268, -19715240, 7847707}, + FieldElement{10151868, 10572098, 27312476, 7922682, 14825339, 4723128, -32855931, -6519018, -10020567, 3852848}, + FieldElement{-11430470, 15697596, -21121557, -4420647, 5386314, 15063598, 16514493, -15932110, 29330899, -15076224}, + }, + }, + { + { + FieldElement{-25499735, -4378794, -15222908, -6901211, 16615731, 2051784, 3303702, 15490, -27548796, 12314391}, + FieldElement{15683520, -6003043, 18109120, -9980648, 15337968, -5997823, -16717435, 15921866, 16103996, -3731215}, + FieldElement{-23169824, -10781249, 13588192, -1628807, -3798557, -1074929, -19273607, 5402699, -29815713, -9841101}, + }, + { + FieldElement{23190676, 2384583, -32714340, 3462154, -29903655, -1529132, -11266856, 8911517, -25205859, 2739713}, + FieldElement{21374101, -3554250, -33524649, 9874411, 15377179, 11831242, -33529904, 6134907, 4931255, 11987849}, + FieldElement{-7732, -2978858, -16223486, 7277597, 105524, -322051, -31480539, 13861388, -30076310, 10117930}, + }, + { + FieldElement{-29501170, -10744872, -26163768, 13051539, -25625564, 5089643, -6325503, 6704079, 12890019, 15728940}, + FieldElement{-21972360, -11771379, -951059, -4418840, 14704840, 2695116, 903376, -10428139, 12885167, 8311031}, + FieldElement{-17516482, 5352194, 10384213, -13811658, 7506451, 13453191, 26423267, 4384730, 1888765, -5435404}, + }, + { + FieldElement{-25817338, -3107312, -13494599, -3182506, 30896459, -13921729, -32251644, -12707869, -19464434, -3340243}, + FieldElement{-23607977, -2665774, -526091, 4651136, 5765089, 4618330, 6092245, 14845197, 17151279, -9854116}, + FieldElement{-24830458, -12733720, -15165978, 10367250, -29530908, -265356, 22825805, -7087279, -16866484, 16176525}, + }, + { + FieldElement{-23583256, 6564961, 20063689, 3798228, -4740178, 7359225, 2006182, -10363426, -28746253, -10197509}, + FieldElement{-10626600, -4486402, -13320562, -5125317, 3432136, -6393229, 23632037, -1940610, 32808310, 1099883}, + FieldElement{15030977, 5768825, -27451236, -2887299, -6427378, -15361371, -15277896, -6809350, 2051441, -15225865}, + }, + { + FieldElement{-3362323, -7239372, 7517890, 9824992, 23555850, 295369, 5148398, -14154188, -22686354, 16633660}, + FieldElement{4577086, -16752288, 13249841, -15304328, 19958763, -14537274, 18559670, -10759549, 8402478, -9864273}, + FieldElement{-28406330, -1051581, -26790155, -907698, -17212414, -11030789, 9453451, -14980072, 17983010, 9967138}, + }, + { + FieldElement{-25762494, 6524722, 26585488, 9969270, 24709298, 1220360, -1677990, 7806337, 17507396, 3651560}, + FieldElement{-10420457, -4118111, 14584639, 15971087, -15768321, 8861010, 26556809, -5574557, -18553322, -11357135}, + FieldElement{2839101, 14284142, 4029895, 3472686, 14402957, 12689363, -26642121, 8459447, -5605463, -7621941}, + }, + { + FieldElement{-4839289, -3535444, 9744961, 2871048, 25113978, 3187018, -25110813, -849066, 17258084, -7977739}, + FieldElement{18164541, -10595176, -17154882, -1542417, 19237078, -9745295, 23357533, -15217008, 26908270, 12150756}, + FieldElement{-30264870, -7647865, 5112249, -7036672, -1499807, -6974257, 43168, -5537701, -32302074, 16215819}, + }, + }, + { + { + FieldElement{-6898905, 9824394, -12304779, -4401089, -31397141, -6276835, 32574489, 12532905, -7503072, -8675347}, + FieldElement{-27343522, -16515468, -27151524, -10722951, 946346, 16291093, 254968, 7168080, 21676107, -1943028}, + FieldElement{21260961, -8424752, -16831886, -11920822, -23677961, 3968121, -3651949, -6215466, -3556191, -7913075}, + }, + { + FieldElement{16544754, 13250366, -16804428, 15546242, -4583003, 12757258, -2462308, -8680336, -18907032, -9662799}, + FieldElement{-2415239, -15577728, 18312303, 4964443, -15272530, -12653564, 26820651, 16690659, 25459437, -4564609}, + FieldElement{-25144690, 11425020, 28423002, -11020557, -6144921, -15826224, 9142795, -2391602, -6432418, -1644817}, + }, + { + FieldElement{-23104652, 6253476, 16964147, -3768872, -25113972, -12296437, -27457225, -16344658, 6335692, 7249989}, + FieldElement{-30333227, 13979675, 7503222, -12368314, -11956721, -4621693, -30272269, 2682242, 25993170, -12478523}, + FieldElement{4364628, 5930691, 32304656, -10044554, -8054781, 15091131, 22857016, -10598955, 31820368, 15075278}, + }, + { + FieldElement{31879134, -8918693, 17258761, 90626, -8041836, -4917709, 24162788, -9650886, -17970238, 12833045}, + FieldElement{19073683, 14851414, -24403169, -11860168, 7625278, 11091125, -19619190, 2074449, -9413939, 14905377}, + FieldElement{24483667, -11935567, -2518866, -11547418, -1553130, 15355506, -25282080, 9253129, 27628530, -7555480}, + }, + { + FieldElement{17597607, 8340603, 19355617, 552187, 26198470, -3176583, 4593324, -9157582, -14110875, 15297016}, + FieldElement{510886, 14337390, -31785257, 16638632, 6328095, 2713355, -20217417, -11864220, 8683221, 2921426}, + FieldElement{18606791, 11874196, 27155355, -5281482, -24031742, 6265446, -25178240, -1278924, 4674690, 13890525}, + }, + { + FieldElement{13609624, 13069022, -27372361, -13055908, 24360586, 9592974, 14977157, 9835105, 4389687, 288396}, + FieldElement{9922506, -519394, 13613107, 5883594, -18758345, -434263, -12304062, 8317628, 23388070, 16052080}, + FieldElement{12720016, 11937594, -31970060, -5028689, 26900120, 8561328, -20155687, -11632979, -14754271, -10812892}, + }, + { + FieldElement{15961858, 14150409, 26716931, -665832, -22794328, 13603569, 11829573, 7467844, -28822128, 929275}, + FieldElement{11038231, -11582396, -27310482, -7316562, -10498527, -16307831, -23479533, -9371869, -21393143, 2465074}, + FieldElement{20017163, -4323226, 27915242, 1529148, 12396362, 15675764, 13817261, -9658066, 2463391, -4622140}, + }, + { + FieldElement{-16358878, -12663911, -12065183, 4996454, -1256422, 1073572, 9583558, 12851107, 4003896, 12673717}, + FieldElement{-1731589, -15155870, -3262930, 16143082, 19294135, 13385325, 14741514, -9103726, 7903886, 2348101}, + FieldElement{24536016, -16515207, 12715592, -3862155, 1511293, 10047386, -3842346, -7129159, -28377538, 10048127}, + }, + }, + { + { + FieldElement{-12622226, -6204820, 30718825, 2591312, -10617028, 12192840, 18873298, -7297090, -32297756, 15221632}, + FieldElement{-26478122, -11103864, 11546244, -1852483, 9180880, 7656409, -21343950, 2095755, 29769758, 6593415}, + FieldElement{-31994208, -2907461, 4176912, 3264766, 12538965, -868111, 26312345, -6118678, 30958054, 8292160}, + }, + { + FieldElement{31429822, -13959116, 29173532, 15632448, 12174511, -2760094, 32808831, 3977186, 26143136, -3148876}, + FieldElement{22648901, 1402143, -22799984, 13746059, 7936347, 365344, -8668633, -1674433, -3758243, -2304625}, + FieldElement{-15491917, 8012313, -2514730, -12702462, -23965846, -10254029, -1612713, -1535569, -16664475, 8194478}, + }, + { + FieldElement{27338066, -7507420, -7414224, 10140405, -19026427, -6589889, 27277191, 8855376, 28572286, 3005164}, + FieldElement{26287124, 4821776, 25476601, -4145903, -3764513, -15788984, -18008582, 1182479, -26094821, -13079595}, + FieldElement{-7171154, 3178080, 23970071, 6201893, -17195577, -4489192, -21876275, -13982627, 32208683, -1198248}, + }, + { + FieldElement{-16657702, 2817643, -10286362, 14811298, 6024667, 13349505, -27315504, -10497842, -27672585, -11539858}, + FieldElement{15941029, -9405932, -21367050, 8062055, 31876073, -238629, -15278393, -1444429, 15397331, -4130193}, + FieldElement{8934485, -13485467, -23286397, -13423241, -32446090, 14047986, 31170398, -1441021, -27505566, 15087184}, + }, + { + FieldElement{-18357243, -2156491, 24524913, -16677868, 15520427, -6360776, -15502406, 11461896, 16788528, -5868942}, + FieldElement{-1947386, 16013773, 21750665, 3714552, -17401782, -16055433, -3770287, -10323320, 31322514, -11615635}, + FieldElement{21426655, -5650218, -13648287, -5347537, -28812189, -4920970, -18275391, -14621414, 13040862, -12112948}, + }, + { + FieldElement{11293895, 12478086, -27136401, 15083750, -29307421, 14748872, 14555558, -13417103, 1613711, 4896935}, + FieldElement{-25894883, 15323294, -8489791, -8057900, 25967126, -13425460, 2825960, -4897045, -23971776, -11267415}, + FieldElement{-15924766, -5229880, -17443532, 6410664, 3622847, 10243618, 20615400, 12405433, -23753030, -8436416}, + }, + { + FieldElement{-7091295, 12556208, -20191352, 9025187, -17072479, 4333801, 4378436, 2432030, 23097949, -566018}, + FieldElement{4565804, -16025654, 20084412, -7842817, 1724999, 189254, 24767264, 10103221, -18512313, 2424778}, + FieldElement{366633, -11976806, 8173090, -6890119, 30788634, 5745705, -7168678, 1344109, -3642553, 12412659}, + }, + { + FieldElement{-24001791, 7690286, 14929416, -168257, -32210835, -13412986, 24162697, -15326504, -3141501, 11179385}, + FieldElement{18289522, -14724954, 8056945, 16430056, -21729724, 7842514, -6001441, -1486897, -18684645, -11443503}, + FieldElement{476239, 6601091, -6152790, -9723375, 17503545, -4863900, 27672959, 13403813, 11052904, 5219329}, + }, + }, + { + { + FieldElement{20678546, -8375738, -32671898, 8849123, -5009758, 14574752, 31186971, -3973730, 9014762, -8579056}, + FieldElement{-13644050, -10350239, -15962508, 5075808, -1514661, -11534600, -33102500, 9160280, 8473550, -3256838}, + FieldElement{24900749, 14435722, 17209120, -15292541, -22592275, 9878983, -7689309, -16335821, -24568481, 11788948}, + }, + { + FieldElement{-3118155, -11395194, -13802089, 14797441, 9652448, -6845904, -20037437, 10410733, -24568470, -1458691}, + FieldElement{-15659161, 16736706, -22467150, 10215878, -9097177, 7563911, 11871841, -12505194, -18513325, 8464118}, + FieldElement{-23400612, 8348507, -14585951, -861714, -3950205, -6373419, 14325289, 8628612, 33313881, -8370517}, + }, + { + FieldElement{-20186973, -4967935, 22367356, 5271547, -1097117, -4788838, -24805667, -10236854, -8940735, -5818269}, + FieldElement{-6948785, -1795212, -32625683, -16021179, 32635414, -7374245, 15989197, -12838188, 28358192, -4253904}, + FieldElement{-23561781, -2799059, -32351682, -1661963, -9147719, 10429267, -16637684, 4072016, -5351664, 5596589}, + }, + { + FieldElement{-28236598, -3390048, 12312896, 6213178, 3117142, 16078565, 29266239, 2557221, 1768301, 15373193}, + FieldElement{-7243358, -3246960, -4593467, -7553353, -127927, -912245, -1090902, -4504991, -24660491, 3442910}, + FieldElement{-30210571, 5124043, 14181784, 8197961, 18964734, -11939093, 22597931, 7176455, -18585478, 13365930}, + }, + { + FieldElement{-7877390, -1499958, 8324673, 4690079, 6261860, 890446, 24538107, -8570186, -9689599, -3031667}, + FieldElement{25008904, -10771599, -4305031, -9638010, 16265036, 15721635, 683793, -11823784, 15723479, -15163481}, + FieldElement{-9660625, 12374379, -27006999, -7026148, -7724114, -12314514, 11879682, 5400171, 519526, -1235876}, + }, + { + FieldElement{22258397, -16332233, -7869817, 14613016, -22520255, -2950923, -20353881, 7315967, 16648397, 7605640}, + FieldElement{-8081308, -8464597, -8223311, 9719710, 19259459, -15348212, 23994942, -5281555, -9468848, 4763278}, + FieldElement{-21699244, 9220969, -15730624, 1084137, -25476107, -2852390, 31088447, -7764523, -11356529, 728112}, + }, + { + FieldElement{26047220, -11751471, -6900323, -16521798, 24092068, 9158119, -4273545, -12555558, -29365436, -5498272}, + FieldElement{17510331, -322857, 5854289, 8403524, 17133918, -3112612, -28111007, 12327945, 10750447, 10014012}, + FieldElement{-10312768, 3936952, 9156313, -8897683, 16498692, -994647, -27481051, -666732, 3424691, 7540221}, + }, + { + FieldElement{30322361, -6964110, 11361005, -4143317, 7433304, 4989748, -7071422, -16317219, -9244265, 15258046}, + FieldElement{13054562, -2779497, 19155474, 469045, -12482797, 4566042, 5631406, 2711395, 1062915, -5136345}, + FieldElement{-19240248, -11254599, -29509029, -7499965, -5835763, 13005411, -6066489, 12194497, 32960380, 1459310}, + }, + }, + { + { + FieldElement{19852034, 7027924, 23669353, 10020366, 8586503, -6657907, 394197, -6101885, 18638003, -11174937}, + FieldElement{31395534, 15098109, 26581030, 8030562, -16527914, -5007134, 9012486, -7584354, -6643087, -5442636}, + FieldElement{-9192165, -2347377, -1997099, 4529534, 25766844, 607986, -13222, 9677543, -32294889, -6456008}, + }, + { + FieldElement{-2444496, -149937, 29348902, 8186665, 1873760, 12489863, -30934579, -7839692, -7852844, -8138429}, + FieldElement{-15236356, -15433509, 7766470, 746860, 26346930, -10221762, -27333451, 10754588, -9431476, 5203576}, + FieldElement{31834314, 14135496, -770007, 5159118, 20917671, -16768096, -7467973, -7337524, 31809243, 7347066}, + }, + { + FieldElement{-9606723, -11874240, 20414459, 13033986, 13716524, -11691881, 19797970, -12211255, 15192876, -2087490}, + FieldElement{-12663563, -2181719, 1168162, -3804809, 26747877, -14138091, 10609330, 12694420, 33473243, -13382104}, + FieldElement{33184999, 11180355, 15832085, -11385430, -1633671, 225884, 15089336, -11023903, -6135662, 14480053}, + }, + { + FieldElement{31308717, -5619998, 31030840, -1897099, 15674547, -6582883, 5496208, 13685227, 27595050, 8737275}, + FieldElement{-20318852, -15150239, 10933843, -16178022, 8335352, -7546022, -31008351, -12610604, 26498114, 66511}, + FieldElement{22644454, -8761729, -16671776, 4884562, -3105614, -13559366, 30540766, -4286747, -13327787, -7515095}, + }, + { + FieldElement{-28017847, 9834845, 18617207, -2681312, -3401956, -13307506, 8205540, 13585437, -17127465, 15115439}, + FieldElement{23711543, -672915, 31206561, -8362711, 6164647, -9709987, -33535882, -1426096, 8236921, 16492939}, + FieldElement{-23910559, -13515526, -26299483, -4503841, 25005590, -7687270, 19574902, 10071562, 6708380, -6222424}, + }, + { + FieldElement{2101391, -4930054, 19702731, 2367575, -15427167, 1047675, 5301017, 9328700, 29955601, -11678310}, + FieldElement{3096359, 9271816, -21620864, -15521844, -14847996, -7592937, -25892142, -12635595, -9917575, 6216608}, + FieldElement{-32615849, 338663, -25195611, 2510422, -29213566, -13820213, 24822830, -6146567, -26767480, 7525079}, + }, + { + FieldElement{-23066649, -13985623, 16133487, -7896178, -3389565, 778788, -910336, -2782495, -19386633, 11994101}, + FieldElement{21691500, -13624626, -641331, -14367021, 3285881, -3483596, -25064666, 9718258, -7477437, 13381418}, + FieldElement{18445390, -4202236, 14979846, 11622458, -1727110, -3582980, 23111648, -6375247, 28535282, 15779576}, + }, + { + FieldElement{30098053, 3089662, -9234387, 16662135, -21306940, 11308411, -14068454, 12021730, 9955285, -16303356}, + FieldElement{9734894, -14576830, -7473633, -9138735, 2060392, 11313496, -18426029, 9924399, 20194861, 13380996}, + FieldElement{-26378102, -7965207, -22167821, 15789297, -18055342, -6168792, -1984914, 15707771, 26342023, 10146099}, + }, + }, + { + { + FieldElement{-26016874, -219943, 21339191, -41388, 19745256, -2878700, -29637280, 2227040, 21612326, -545728}, + FieldElement{-13077387, 1184228, 23562814, -5970442, -20351244, -6348714, 25764461, 12243797, -20856566, 11649658}, + FieldElement{-10031494, 11262626, 27384172, 2271902, 26947504, -15997771, 39944, 6114064, 33514190, 2333242}, + }, + { + FieldElement{-21433588, -12421821, 8119782, 7219913, -21830522, -9016134, -6679750, -12670638, 24350578, -13450001}, + FieldElement{-4116307, -11271533, -23886186, 4843615, -30088339, 690623, -31536088, -10406836, 8317860, 12352766}, + FieldElement{18200138, -14475911, -33087759, -2696619, -23702521, -9102511, -23552096, -2287550, 20712163, 6719373}, + }, + { + FieldElement{26656208, 6075253, -7858556, 1886072, -28344043, 4262326, 11117530, -3763210, 26224235, -3297458}, + FieldElement{-17168938, -14854097, -3395676, -16369877, -19954045, 14050420, 21728352, 9493610, 18620611, -16428628}, + FieldElement{-13323321, 13325349, 11432106, 5964811, 18609221, 6062965, -5269471, -9725556, -30701573, -16479657}, + }, + { + FieldElement{-23860538, -11233159, 26961357, 1640861, -32413112, -16737940, 12248509, -5240639, 13735342, 1934062}, + FieldElement{25089769, 6742589, 17081145, -13406266, 21909293, -16067981, -15136294, -3765346, -21277997, 5473616}, + FieldElement{31883677, -7961101, 1083432, -11572403, 22828471, 13290673, -7125085, 12469656, 29111212, -5451014}, + }, + { + FieldElement{24244947, -15050407, -26262976, 2791540, -14997599, 16666678, 24367466, 6388839, -10295587, 452383}, + FieldElement{-25640782, -3417841, 5217916, 16224624, 19987036, -4082269, -24236251, -5915248, 15766062, 8407814}, + FieldElement{-20406999, 13990231, 15495425, 16395525, 5377168, 15166495, -8917023, -4388953, -8067909, 2276718}, + }, + { + FieldElement{30157918, 12924066, -17712050, 9245753, 19895028, 3368142, -23827587, 5096219, 22740376, -7303417}, + FieldElement{2041139, -14256350, 7783687, 13876377, -25946985, -13352459, 24051124, 13742383, -15637599, 13295222}, + FieldElement{33338237, -8505733, 12532113, 7977527, 9106186, -1715251, -17720195, -4612972, -4451357, -14669444}, + }, + { + FieldElement{-20045281, 5454097, -14346548, 6447146, 28862071, 1883651, -2469266, -4141880, 7770569, 9620597}, + FieldElement{23208068, 7979712, 33071466, 8149229, 1758231, -10834995, 30945528, -1694323, -33502340, -14767970}, + FieldElement{1439958, -16270480, -1079989, -793782, 4625402, 10647766, -5043801, 1220118, 30494170, -11440799}, + }, + { + FieldElement{-5037580, -13028295, -2970559, -3061767, 15640974, -6701666, -26739026, 926050, -1684339, -13333647}, + FieldElement{13908495, -3549272, 30919928, -6273825, -21521863, 7989039, 9021034, 9078865, 3353509, 4033511}, + FieldElement{-29663431, -15113610, 32259991, -344482, 24295849, -12912123, 23161163, 8839127, 27485041, 7356032}, + }, + }, + { + { + FieldElement{9661027, 705443, 11980065, -5370154, -1628543, 14661173, -6346142, 2625015, 28431036, -16771834}, + FieldElement{-23839233, -8311415, -25945511, 7480958, -17681669, -8354183, -22545972, 14150565, 15970762, 4099461}, + FieldElement{29262576, 16756590, 26350592, -8793563, 8529671, -11208050, 13617293, -9937143, 11465739, 8317062}, + }, + { + FieldElement{-25493081, -6962928, 32500200, -9419051, -23038724, -2302222, 14898637, 3848455, 20969334, -5157516}, + FieldElement{-20384450, -14347713, -18336405, 13884722, -33039454, 2842114, -21610826, -3649888, 11177095, 14989547}, + FieldElement{-24496721, -11716016, 16959896, 2278463, 12066309, 10137771, 13515641, 2581286, -28487508, 9930240}, + }, + { + FieldElement{-17751622, -2097826, 16544300, -13009300, -15914807, -14949081, 18345767, -13403753, 16291481, -5314038}, + FieldElement{-33229194, 2553288, 32678213, 9875984, 8534129, 6889387, -9676774, 6957617, 4368891, 9788741}, + FieldElement{16660756, 7281060, -10830758, 12911820, 20108584, -8101676, -21722536, -8613148, 16250552, -11111103}, + }, + { + FieldElement{-19765507, 2390526, -16551031, 14161980, 1905286, 6414907, 4689584, 10604807, -30190403, 4782747}, + FieldElement{-1354539, 14736941, -7367442, -13292886, 7710542, -14155590, -9981571, 4383045, 22546403, 437323}, + FieldElement{31665577, -12180464, -16186830, 1491339, -18368625, 3294682, 27343084, 2786261, -30633590, -14097016}, + }, + { + FieldElement{-14467279, -683715, -33374107, 7448552, 19294360, 14334329, -19690631, 2355319, -19284671, -6114373}, + FieldElement{15121312, -15796162, 6377020, -6031361, -10798111, -12957845, 18952177, 15496498, -29380133, 11754228}, + FieldElement{-2637277, -13483075, 8488727, -14303896, 12728761, -1622493, 7141596, 11724556, 22761615, -10134141}, + }, + { + FieldElement{16918416, 11729663, -18083579, 3022987, -31015732, -13339659, -28741185, -12227393, 32851222, 11717399}, + FieldElement{11166634, 7338049, -6722523, 4531520, -29468672, -7302055, 31474879, 3483633, -1193175, -4030831}, + FieldElement{-185635, 9921305, 31456609, -13536438, -12013818, 13348923, 33142652, 6546660, -19985279, -3948376}, + }, + { + FieldElement{-32460596, 11266712, -11197107, -7899103, 31703694, 3855903, -8537131, -12833048, -30772034, -15486313}, + FieldElement{-18006477, 12709068, 3991746, -6479188, -21491523, -10550425, -31135347, -16049879, 10928917, 3011958}, + FieldElement{-6957757, -15594337, 31696059, 334240, 29576716, 14796075, -30831056, -12805180, 18008031, 10258577}, + }, + { + FieldElement{-22448644, 15655569, 7018479, -4410003, -30314266, -1201591, -1853465, 1367120, 25127874, 6671743}, + FieldElement{29701166, -14373934, -10878120, 9279288, -17568, 13127210, 21382910, 11042292, 25838796, 4642684}, + FieldElement{-20430234, 14955537, -24126347, 8124619, -5369288, -5990470, 30468147, -13900640, 18423289, 4177476}, + }, + }, +} diff --git a/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go new file mode 100644 index 0000000..5f8b994 --- /dev/null +++ b/vendor/golang.org/x/crypto/ed25519/internal/edwards25519/edwards25519.go @@ -0,0 +1,1771 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package edwards25519 + +// This code is a port of the public domain, “ref10” implementation of ed25519 +// from SUPERCOP. + +// FieldElement represents an element of the field GF(2^255 - 19). An element +// t, entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77 +// t[3]+2^102 t[4]+...+2^230 t[9]. Bounds on each t[i] vary depending on +// context. +type FieldElement [10]int32 + +var zero FieldElement + +func FeZero(fe *FieldElement) { + copy(fe[:], zero[:]) +} + +func FeOne(fe *FieldElement) { + FeZero(fe) + fe[0] = 1 +} + +func FeAdd(dst, a, b *FieldElement) { + dst[0] = a[0] + b[0] + dst[1] = a[1] + b[1] + dst[2] = a[2] + b[2] + dst[3] = a[3] + b[3] + dst[4] = a[4] + b[4] + dst[5] = a[5] + b[5] + dst[6] = a[6] + b[6] + dst[7] = a[7] + b[7] + dst[8] = a[8] + b[8] + dst[9] = a[9] + b[9] +} + +func FeSub(dst, a, b *FieldElement) { + dst[0] = a[0] - b[0] + dst[1] = a[1] - b[1] + dst[2] = a[2] - b[2] + dst[3] = a[3] - b[3] + dst[4] = a[4] - b[4] + dst[5] = a[5] - b[5] + dst[6] = a[6] - b[6] + dst[7] = a[7] - b[7] + dst[8] = a[8] - b[8] + dst[9] = a[9] - b[9] +} + +func FeCopy(dst, src *FieldElement) { + copy(dst[:], src[:]) +} + +// Replace (f,g) with (g,g) if b == 1; +// replace (f,g) with (f,g) if b == 0. +// +// Preconditions: b in {0,1}. +func FeCMove(f, g *FieldElement, b int32) { + b = -b + f[0] ^= b & (f[0] ^ g[0]) + f[1] ^= b & (f[1] ^ g[1]) + f[2] ^= b & (f[2] ^ g[2]) + f[3] ^= b & (f[3] ^ g[3]) + f[4] ^= b & (f[4] ^ g[4]) + f[5] ^= b & (f[5] ^ g[5]) + f[6] ^= b & (f[6] ^ g[6]) + f[7] ^= b & (f[7] ^ g[7]) + f[8] ^= b & (f[8] ^ g[8]) + f[9] ^= b & (f[9] ^ g[9]) +} + +func load3(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + return r +} + +func load4(in []byte) int64 { + var r int64 + r = int64(in[0]) + r |= int64(in[1]) << 8 + r |= int64(in[2]) << 16 + r |= int64(in[3]) << 24 + return r +} + +func FeFromBytes(dst *FieldElement, src *[32]byte) { + h0 := load4(src[:]) + h1 := load3(src[4:]) << 6 + h2 := load3(src[7:]) << 5 + h3 := load3(src[10:]) << 3 + h4 := load3(src[13:]) << 2 + h5 := load4(src[16:]) + h6 := load3(src[20:]) << 7 + h7 := load3(src[23:]) << 5 + h8 := load3(src[26:]) << 4 + h9 := (load3(src[29:]) & 8388607) << 2 + + FeCombine(dst, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +// FeToBytes marshals h to s. +// Preconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Write p=2^255-19; q=floor(h/p). +// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))). +// +// Proof: +// Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4. +// Also have |h-2^230 h9|<2^230 so |19 2^(-255)(h-2^230 h9)|<1/4. +// +// Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9). +// Then 0> 25 + q = (h[0] + q) >> 26 + q = (h[1] + q) >> 25 + q = (h[2] + q) >> 26 + q = (h[3] + q) >> 25 + q = (h[4] + q) >> 26 + q = (h[5] + q) >> 25 + q = (h[6] + q) >> 26 + q = (h[7] + q) >> 25 + q = (h[8] + q) >> 26 + q = (h[9] + q) >> 25 + + // Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. + h[0] += 19 * q + // Goal: Output h-2^255 q, which is between 0 and 2^255-20. + + carry[0] = h[0] >> 26 + h[1] += carry[0] + h[0] -= carry[0] << 26 + carry[1] = h[1] >> 25 + h[2] += carry[1] + h[1] -= carry[1] << 25 + carry[2] = h[2] >> 26 + h[3] += carry[2] + h[2] -= carry[2] << 26 + carry[3] = h[3] >> 25 + h[4] += carry[3] + h[3] -= carry[3] << 25 + carry[4] = h[4] >> 26 + h[5] += carry[4] + h[4] -= carry[4] << 26 + carry[5] = h[5] >> 25 + h[6] += carry[5] + h[5] -= carry[5] << 25 + carry[6] = h[6] >> 26 + h[7] += carry[6] + h[6] -= carry[6] << 26 + carry[7] = h[7] >> 25 + h[8] += carry[7] + h[7] -= carry[7] << 25 + carry[8] = h[8] >> 26 + h[9] += carry[8] + h[8] -= carry[8] << 26 + carry[9] = h[9] >> 25 + h[9] -= carry[9] << 25 + // h10 = carry9 + + // Goal: Output h[0]+...+2^255 h10-2^255 q, which is between 0 and 2^255-20. + // Have h[0]+...+2^230 h[9] between 0 and 2^255-1; + // evidently 2^255 h10-2^255 q = 0. + // Goal: Output h[0]+...+2^230 h[9]. + + s[0] = byte(h[0] >> 0) + s[1] = byte(h[0] >> 8) + s[2] = byte(h[0] >> 16) + s[3] = byte((h[0] >> 24) | (h[1] << 2)) + s[4] = byte(h[1] >> 6) + s[5] = byte(h[1] >> 14) + s[6] = byte((h[1] >> 22) | (h[2] << 3)) + s[7] = byte(h[2] >> 5) + s[8] = byte(h[2] >> 13) + s[9] = byte((h[2] >> 21) | (h[3] << 5)) + s[10] = byte(h[3] >> 3) + s[11] = byte(h[3] >> 11) + s[12] = byte((h[3] >> 19) | (h[4] << 6)) + s[13] = byte(h[4] >> 2) + s[14] = byte(h[4] >> 10) + s[15] = byte(h[4] >> 18) + s[16] = byte(h[5] >> 0) + s[17] = byte(h[5] >> 8) + s[18] = byte(h[5] >> 16) + s[19] = byte((h[5] >> 24) | (h[6] << 1)) + s[20] = byte(h[6] >> 7) + s[21] = byte(h[6] >> 15) + s[22] = byte((h[6] >> 23) | (h[7] << 3)) + s[23] = byte(h[7] >> 5) + s[24] = byte(h[7] >> 13) + s[25] = byte((h[7] >> 21) | (h[8] << 4)) + s[26] = byte(h[8] >> 4) + s[27] = byte(h[8] >> 12) + s[28] = byte((h[8] >> 20) | (h[9] << 6)) + s[29] = byte(h[9] >> 2) + s[30] = byte(h[9] >> 10) + s[31] = byte(h[9] >> 18) +} + +func FeIsNegative(f *FieldElement) byte { + var s [32]byte + FeToBytes(&s, f) + return s[0] & 1 +} + +func FeIsNonZero(f *FieldElement) int32 { + var s [32]byte + FeToBytes(&s, f) + var x uint8 + for _, b := range s { + x |= b + } + x |= x >> 4 + x |= x >> 2 + x |= x >> 1 + return int32(x & 1) +} + +// FeNeg sets h = -f +// +// Preconditions: +// |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func FeNeg(h, f *FieldElement) { + h[0] = -f[0] + h[1] = -f[1] + h[2] = -f[2] + h[3] = -f[3] + h[4] = -f[4] + h[5] = -f[5] + h[6] = -f[6] + h[7] = -f[7] + h[8] = -f[8] + h[9] = -f[9] +} + +func FeCombine(h *FieldElement, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { + var c0, c1, c2, c3, c4, c5, c6, c7, c8, c9 int64 + + /* + |h0| <= (1.1*1.1*2^52*(1+19+19+19+19)+1.1*1.1*2^50*(38+38+38+38+38)) + i.e. |h0| <= 1.2*2^59; narrower ranges for h2, h4, h6, h8 + |h1| <= (1.1*1.1*2^51*(1+1+19+19+19+19+19+19+19+19)) + i.e. |h1| <= 1.5*2^58; narrower ranges for h3, h5, h7, h9 + */ + + c0 = (h0 + (1 << 25)) >> 26 + h1 += c0 + h0 -= c0 << 26 + c4 = (h4 + (1 << 25)) >> 26 + h5 += c4 + h4 -= c4 << 26 + /* |h0| <= 2^25 */ + /* |h4| <= 2^25 */ + /* |h1| <= 1.51*2^58 */ + /* |h5| <= 1.51*2^58 */ + + c1 = (h1 + (1 << 24)) >> 25 + h2 += c1 + h1 -= c1 << 25 + c5 = (h5 + (1 << 24)) >> 25 + h6 += c5 + h5 -= c5 << 25 + /* |h1| <= 2^24; from now on fits into int32 */ + /* |h5| <= 2^24; from now on fits into int32 */ + /* |h2| <= 1.21*2^59 */ + /* |h6| <= 1.21*2^59 */ + + c2 = (h2 + (1 << 25)) >> 26 + h3 += c2 + h2 -= c2 << 26 + c6 = (h6 + (1 << 25)) >> 26 + h7 += c6 + h6 -= c6 << 26 + /* |h2| <= 2^25; from now on fits into int32 unchanged */ + /* |h6| <= 2^25; from now on fits into int32 unchanged */ + /* |h3| <= 1.51*2^58 */ + /* |h7| <= 1.51*2^58 */ + + c3 = (h3 + (1 << 24)) >> 25 + h4 += c3 + h3 -= c3 << 25 + c7 = (h7 + (1 << 24)) >> 25 + h8 += c7 + h7 -= c7 << 25 + /* |h3| <= 2^24; from now on fits into int32 unchanged */ + /* |h7| <= 2^24; from now on fits into int32 unchanged */ + /* |h4| <= 1.52*2^33 */ + /* |h8| <= 1.52*2^33 */ + + c4 = (h4 + (1 << 25)) >> 26 + h5 += c4 + h4 -= c4 << 26 + c8 = (h8 + (1 << 25)) >> 26 + h9 += c8 + h8 -= c8 << 26 + /* |h4| <= 2^25; from now on fits into int32 unchanged */ + /* |h8| <= 2^25; from now on fits into int32 unchanged */ + /* |h5| <= 1.01*2^24 */ + /* |h9| <= 1.51*2^58 */ + + c9 = (h9 + (1 << 24)) >> 25 + h0 += c9 * 19 + h9 -= c9 << 25 + /* |h9| <= 2^24; from now on fits into int32 unchanged */ + /* |h0| <= 1.8*2^37 */ + + c0 = (h0 + (1 << 25)) >> 26 + h1 += c0 + h0 -= c0 << 26 + /* |h0| <= 2^25; from now on fits into int32 unchanged */ + /* |h1| <= 1.01*2^24 */ + + h[0] = int32(h0) + h[1] = int32(h1) + h[2] = int32(h2) + h[3] = int32(h3) + h[4] = int32(h4) + h[5] = int32(h5) + h[6] = int32(h6) + h[7] = int32(h7) + h[8] = int32(h8) + h[9] = int32(h9) +} + +// FeMul calculates h = f * g +// Can overlap h with f or g. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// |g| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +// +// Notes on implementation strategy: +// +// Using schoolbook multiplication. +// Karatsuba would save a little in some cost models. +// +// Most multiplications by 2 and 19 are 32-bit precomputations; +// cheaper than 64-bit postcomputations. +// +// There is one remaining multiplication by 19 in the carry chain; +// one *19 precomputation can be merged into this, +// but the resulting data flow is considerably less clean. +// +// There are 12 carries below. +// 10 of them are 2-way parallelizable and vectorizable. +// Can get away with 11 carries, but then data flow is much deeper. +// +// With tighter constraints on inputs, can squeeze carries into int32. +func FeMul(h, f, g *FieldElement) { + f0 := int64(f[0]) + f1 := int64(f[1]) + f2 := int64(f[2]) + f3 := int64(f[3]) + f4 := int64(f[4]) + f5 := int64(f[5]) + f6 := int64(f[6]) + f7 := int64(f[7]) + f8 := int64(f[8]) + f9 := int64(f[9]) + + f1_2 := int64(2 * f[1]) + f3_2 := int64(2 * f[3]) + f5_2 := int64(2 * f[5]) + f7_2 := int64(2 * f[7]) + f9_2 := int64(2 * f[9]) + + g0 := int64(g[0]) + g1 := int64(g[1]) + g2 := int64(g[2]) + g3 := int64(g[3]) + g4 := int64(g[4]) + g5 := int64(g[5]) + g6 := int64(g[6]) + g7 := int64(g[7]) + g8 := int64(g[8]) + g9 := int64(g[9]) + + g1_19 := int64(19 * g[1]) /* 1.4*2^29 */ + g2_19 := int64(19 * g[2]) /* 1.4*2^30; still ok */ + g3_19 := int64(19 * g[3]) + g4_19 := int64(19 * g[4]) + g5_19 := int64(19 * g[5]) + g6_19 := int64(19 * g[6]) + g7_19 := int64(19 * g[7]) + g8_19 := int64(19 * g[8]) + g9_19 := int64(19 * g[9]) + + h0 := f0*g0 + f1_2*g9_19 + f2*g8_19 + f3_2*g7_19 + f4*g6_19 + f5_2*g5_19 + f6*g4_19 + f7_2*g3_19 + f8*g2_19 + f9_2*g1_19 + h1 := f0*g1 + f1*g0 + f2*g9_19 + f3*g8_19 + f4*g7_19 + f5*g6_19 + f6*g5_19 + f7*g4_19 + f8*g3_19 + f9*g2_19 + h2 := f0*g2 + f1_2*g1 + f2*g0 + f3_2*g9_19 + f4*g8_19 + f5_2*g7_19 + f6*g6_19 + f7_2*g5_19 + f8*g4_19 + f9_2*g3_19 + h3 := f0*g3 + f1*g2 + f2*g1 + f3*g0 + f4*g9_19 + f5*g8_19 + f6*g7_19 + f7*g6_19 + f8*g5_19 + f9*g4_19 + h4 := f0*g4 + f1_2*g3 + f2*g2 + f3_2*g1 + f4*g0 + f5_2*g9_19 + f6*g8_19 + f7_2*g7_19 + f8*g6_19 + f9_2*g5_19 + h5 := f0*g5 + f1*g4 + f2*g3 + f3*g2 + f4*g1 + f5*g0 + f6*g9_19 + f7*g8_19 + f8*g7_19 + f9*g6_19 + h6 := f0*g6 + f1_2*g5 + f2*g4 + f3_2*g3 + f4*g2 + f5_2*g1 + f6*g0 + f7_2*g9_19 + f8*g8_19 + f9_2*g7_19 + h7 := f0*g7 + f1*g6 + f2*g5 + f3*g4 + f4*g3 + f5*g2 + f6*g1 + f7*g0 + f8*g9_19 + f9*g8_19 + h8 := f0*g8 + f1_2*g7 + f2*g6 + f3_2*g5 + f4*g4 + f5_2*g3 + f6*g2 + f7_2*g1 + f8*g0 + f9_2*g9_19 + h9 := f0*g9 + f1*g8 + f2*g7 + f3*g6 + f4*g5 + f5*g4 + f6*g3 + f7*g2 + f8*g1 + f9*g0 + + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +func feSquare(f *FieldElement) (h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 int64) { + f0 := int64(f[0]) + f1 := int64(f[1]) + f2 := int64(f[2]) + f3 := int64(f[3]) + f4 := int64(f[4]) + f5 := int64(f[5]) + f6 := int64(f[6]) + f7 := int64(f[7]) + f8 := int64(f[8]) + f9 := int64(f[9]) + f0_2 := int64(2 * f[0]) + f1_2 := int64(2 * f[1]) + f2_2 := int64(2 * f[2]) + f3_2 := int64(2 * f[3]) + f4_2 := int64(2 * f[4]) + f5_2 := int64(2 * f[5]) + f6_2 := int64(2 * f[6]) + f7_2 := int64(2 * f[7]) + f5_38 := 38 * f5 // 1.31*2^30 + f6_19 := 19 * f6 // 1.31*2^30 + f7_38 := 38 * f7 // 1.31*2^30 + f8_19 := 19 * f8 // 1.31*2^30 + f9_38 := 38 * f9 // 1.31*2^30 + + h0 = f0*f0 + f1_2*f9_38 + f2_2*f8_19 + f3_2*f7_38 + f4_2*f6_19 + f5*f5_38 + h1 = f0_2*f1 + f2*f9_38 + f3_2*f8_19 + f4*f7_38 + f5_2*f6_19 + h2 = f0_2*f2 + f1_2*f1 + f3_2*f9_38 + f4_2*f8_19 + f5_2*f7_38 + f6*f6_19 + h3 = f0_2*f3 + f1_2*f2 + f4*f9_38 + f5_2*f8_19 + f6*f7_38 + h4 = f0_2*f4 + f1_2*f3_2 + f2*f2 + f5_2*f9_38 + f6_2*f8_19 + f7*f7_38 + h5 = f0_2*f5 + f1_2*f4 + f2_2*f3 + f6*f9_38 + f7_2*f8_19 + h6 = f0_2*f6 + f1_2*f5_2 + f2_2*f4 + f3_2*f3 + f7_2*f9_38 + f8*f8_19 + h7 = f0_2*f7 + f1_2*f6 + f2_2*f5 + f3_2*f4 + f8*f9_38 + h8 = f0_2*f8 + f1_2*f7_2 + f2_2*f6 + f3_2*f5_2 + f4*f4 + f9*f9_38 + h9 = f0_2*f9 + f1_2*f8 + f2_2*f7 + f3_2*f6 + f4_2*f5 + + return +} + +// FeSquare calculates h = f*f. Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. +func FeSquare(h, f *FieldElement) { + h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +// FeSquare2 sets h = 2 * f * f +// +// Can overlap h with f. +// +// Preconditions: +// |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc. +// +// Postconditions: +// |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc. +// See fe_mul.c for discussion of implementation strategy. +func FeSquare2(h, f *FieldElement) { + h0, h1, h2, h3, h4, h5, h6, h7, h8, h9 := feSquare(f) + + h0 += h0 + h1 += h1 + h2 += h2 + h3 += h3 + h4 += h4 + h5 += h5 + h6 += h6 + h7 += h7 + h8 += h8 + h9 += h9 + + FeCombine(h, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9) +} + +func FeInvert(out, z *FieldElement) { + var t0, t1, t2, t3 FieldElement + var i int + + FeSquare(&t0, z) // 2^1 + FeSquare(&t1, &t0) // 2^2 + for i = 1; i < 2; i++ { // 2^3 + FeSquare(&t1, &t1) + } + FeMul(&t1, z, &t1) // 2^3 + 2^0 + FeMul(&t0, &t0, &t1) // 2^3 + 2^1 + 2^0 + FeSquare(&t2, &t0) // 2^4 + 2^2 + 2^1 + FeMul(&t1, &t1, &t2) // 2^4 + 2^3 + 2^2 + 2^1 + 2^0 + FeSquare(&t2, &t1) // 5,4,3,2,1 + for i = 1; i < 5; i++ { // 9,8,7,6,5 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 9,8,7,6,5,4,3,2,1,0 + FeSquare(&t2, &t1) // 10..1 + for i = 1; i < 10; i++ { // 19..10 + FeSquare(&t2, &t2) + } + FeMul(&t2, &t2, &t1) // 19..0 + FeSquare(&t3, &t2) // 20..1 + for i = 1; i < 20; i++ { // 39..20 + FeSquare(&t3, &t3) + } + FeMul(&t2, &t3, &t2) // 39..0 + FeSquare(&t2, &t2) // 40..1 + for i = 1; i < 10; i++ { // 49..10 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 49..0 + FeSquare(&t2, &t1) // 50..1 + for i = 1; i < 50; i++ { // 99..50 + FeSquare(&t2, &t2) + } + FeMul(&t2, &t2, &t1) // 99..0 + FeSquare(&t3, &t2) // 100..1 + for i = 1; i < 100; i++ { // 199..100 + FeSquare(&t3, &t3) + } + FeMul(&t2, &t3, &t2) // 199..0 + FeSquare(&t2, &t2) // 200..1 + for i = 1; i < 50; i++ { // 249..50 + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) // 249..0 + FeSquare(&t1, &t1) // 250..1 + for i = 1; i < 5; i++ { // 254..5 + FeSquare(&t1, &t1) + } + FeMul(out, &t1, &t0) // 254..5,3,1,0 +} + +func fePow22523(out, z *FieldElement) { + var t0, t1, t2 FieldElement + var i int + + FeSquare(&t0, z) + for i = 1; i < 1; i++ { + FeSquare(&t0, &t0) + } + FeSquare(&t1, &t0) + for i = 1; i < 2; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, z, &t1) + FeMul(&t0, &t0, &t1) + FeSquare(&t0, &t0) + for i = 1; i < 1; i++ { + FeSquare(&t0, &t0) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 5; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 10; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, &t1, &t0) + FeSquare(&t2, &t1) + for i = 1; i < 20; i++ { + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) + FeSquare(&t1, &t1) + for i = 1; i < 10; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t1, &t0) + for i = 1; i < 50; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t1, &t1, &t0) + FeSquare(&t2, &t1) + for i = 1; i < 100; i++ { + FeSquare(&t2, &t2) + } + FeMul(&t1, &t2, &t1) + FeSquare(&t1, &t1) + for i = 1; i < 50; i++ { + FeSquare(&t1, &t1) + } + FeMul(&t0, &t1, &t0) + FeSquare(&t0, &t0) + for i = 1; i < 2; i++ { + FeSquare(&t0, &t0) + } + FeMul(out, &t0, z) +} + +// Group elements are members of the elliptic curve -x^2 + y^2 = 1 + d * x^2 * +// y^2 where d = -121665/121666. +// +// Several representations are used: +// ProjectiveGroupElement: (X:Y:Z) satisfying x=X/Z, y=Y/Z +// ExtendedGroupElement: (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT +// CompletedGroupElement: ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T +// PreComputedGroupElement: (y+x,y-x,2dxy) + +type ProjectiveGroupElement struct { + X, Y, Z FieldElement +} + +type ExtendedGroupElement struct { + X, Y, Z, T FieldElement +} + +type CompletedGroupElement struct { + X, Y, Z, T FieldElement +} + +type PreComputedGroupElement struct { + yPlusX, yMinusX, xy2d FieldElement +} + +type CachedGroupElement struct { + yPlusX, yMinusX, Z, T2d FieldElement +} + +func (p *ProjectiveGroupElement) Zero() { + FeZero(&p.X) + FeOne(&p.Y) + FeOne(&p.Z) +} + +func (p *ProjectiveGroupElement) Double(r *CompletedGroupElement) { + var t0 FieldElement + + FeSquare(&r.X, &p.X) + FeSquare(&r.Z, &p.Y) + FeSquare2(&r.T, &p.Z) + FeAdd(&r.Y, &p.X, &p.Y) + FeSquare(&t0, &r.Y) + FeAdd(&r.Y, &r.Z, &r.X) + FeSub(&r.Z, &r.Z, &r.X) + FeSub(&r.X, &t0, &r.Y) + FeSub(&r.T, &r.T, &r.Z) +} + +func (p *ProjectiveGroupElement) ToBytes(s *[32]byte) { + var recip, x, y FieldElement + + FeInvert(&recip, &p.Z) + FeMul(&x, &p.X, &recip) + FeMul(&y, &p.Y, &recip) + FeToBytes(s, &y) + s[31] ^= FeIsNegative(&x) << 7 +} + +func (p *ExtendedGroupElement) Zero() { + FeZero(&p.X) + FeOne(&p.Y) + FeOne(&p.Z) + FeZero(&p.T) +} + +func (p *ExtendedGroupElement) Double(r *CompletedGroupElement) { + var q ProjectiveGroupElement + p.ToProjective(&q) + q.Double(r) +} + +func (p *ExtendedGroupElement) ToCached(r *CachedGroupElement) { + FeAdd(&r.yPlusX, &p.Y, &p.X) + FeSub(&r.yMinusX, &p.Y, &p.X) + FeCopy(&r.Z, &p.Z) + FeMul(&r.T2d, &p.T, &d2) +} + +func (p *ExtendedGroupElement) ToProjective(r *ProjectiveGroupElement) { + FeCopy(&r.X, &p.X) + FeCopy(&r.Y, &p.Y) + FeCopy(&r.Z, &p.Z) +} + +func (p *ExtendedGroupElement) ToBytes(s *[32]byte) { + var recip, x, y FieldElement + + FeInvert(&recip, &p.Z) + FeMul(&x, &p.X, &recip) + FeMul(&y, &p.Y, &recip) + FeToBytes(s, &y) + s[31] ^= FeIsNegative(&x) << 7 +} + +func (p *ExtendedGroupElement) FromBytes(s *[32]byte) bool { + var u, v, v3, vxx, check FieldElement + + FeFromBytes(&p.Y, s) + FeOne(&p.Z) + FeSquare(&u, &p.Y) + FeMul(&v, &u, &d) + FeSub(&u, &u, &p.Z) // y = y^2-1 + FeAdd(&v, &v, &p.Z) // v = dy^2+1 + + FeSquare(&v3, &v) + FeMul(&v3, &v3, &v) // v3 = v^3 + FeSquare(&p.X, &v3) + FeMul(&p.X, &p.X, &v) + FeMul(&p.X, &p.X, &u) // x = uv^7 + + fePow22523(&p.X, &p.X) // x = (uv^7)^((q-5)/8) + FeMul(&p.X, &p.X, &v3) + FeMul(&p.X, &p.X, &u) // x = uv^3(uv^7)^((q-5)/8) + + var tmpX, tmp2 [32]byte + + FeSquare(&vxx, &p.X) + FeMul(&vxx, &vxx, &v) + FeSub(&check, &vxx, &u) // vx^2-u + if FeIsNonZero(&check) == 1 { + FeAdd(&check, &vxx, &u) // vx^2+u + if FeIsNonZero(&check) == 1 { + return false + } + FeMul(&p.X, &p.X, &SqrtM1) + + FeToBytes(&tmpX, &p.X) + for i, v := range tmpX { + tmp2[31-i] = v + } + } + + if FeIsNegative(&p.X) != (s[31] >> 7) { + FeNeg(&p.X, &p.X) + } + + FeMul(&p.T, &p.X, &p.Y) + return true +} + +func (p *CompletedGroupElement) ToProjective(r *ProjectiveGroupElement) { + FeMul(&r.X, &p.X, &p.T) + FeMul(&r.Y, &p.Y, &p.Z) + FeMul(&r.Z, &p.Z, &p.T) +} + +func (p *CompletedGroupElement) ToExtended(r *ExtendedGroupElement) { + FeMul(&r.X, &p.X, &p.T) + FeMul(&r.Y, &p.Y, &p.Z) + FeMul(&r.Z, &p.Z, &p.T) + FeMul(&r.T, &p.X, &p.Y) +} + +func (p *PreComputedGroupElement) Zero() { + FeOne(&p.yPlusX) + FeOne(&p.yMinusX) + FeZero(&p.xy2d) +} + +func geAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yPlusX) + FeMul(&r.Y, &r.Y, &q.yMinusX) + FeMul(&r.T, &q.T2d, &p.T) + FeMul(&r.X, &p.Z, &q.Z) + FeAdd(&t0, &r.X, &r.X) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeAdd(&r.Z, &t0, &r.T) + FeSub(&r.T, &t0, &r.T) +} + +func geSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *CachedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yMinusX) + FeMul(&r.Y, &r.Y, &q.yPlusX) + FeMul(&r.T, &q.T2d, &p.T) + FeMul(&r.X, &p.Z, &q.Z) + FeAdd(&t0, &r.X, &r.X) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeSub(&r.Z, &t0, &r.T) + FeAdd(&r.T, &t0, &r.T) +} + +func geMixedAdd(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yPlusX) + FeMul(&r.Y, &r.Y, &q.yMinusX) + FeMul(&r.T, &q.xy2d, &p.T) + FeAdd(&t0, &p.Z, &p.Z) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeAdd(&r.Z, &t0, &r.T) + FeSub(&r.T, &t0, &r.T) +} + +func geMixedSub(r *CompletedGroupElement, p *ExtendedGroupElement, q *PreComputedGroupElement) { + var t0 FieldElement + + FeAdd(&r.X, &p.Y, &p.X) + FeSub(&r.Y, &p.Y, &p.X) + FeMul(&r.Z, &r.X, &q.yMinusX) + FeMul(&r.Y, &r.Y, &q.yPlusX) + FeMul(&r.T, &q.xy2d, &p.T) + FeAdd(&t0, &p.Z, &p.Z) + FeSub(&r.X, &r.Z, &r.Y) + FeAdd(&r.Y, &r.Z, &r.Y) + FeSub(&r.Z, &t0, &r.T) + FeAdd(&r.T, &t0, &r.T) +} + +func slide(r *[256]int8, a *[32]byte) { + for i := range r { + r[i] = int8(1 & (a[i>>3] >> uint(i&7))) + } + + for i := range r { + if r[i] != 0 { + for b := 1; b <= 6 && i+b < 256; b++ { + if r[i+b] != 0 { + if r[i]+(r[i+b]<= -15 { + r[i] -= r[i+b] << uint(b) + for k := i + b; k < 256; k++ { + if r[k] == 0 { + r[k] = 1 + break + } + r[k] = 0 + } + } else { + break + } + } + } + } + } +} + +// GeDoubleScalarMultVartime sets r = a*A + b*B +// where a = a[0]+256*a[1]+...+256^31 a[31]. +// and b = b[0]+256*b[1]+...+256^31 b[31]. +// B is the Ed25519 base point (x,4/5) with x positive. +func GeDoubleScalarMultVartime(r *ProjectiveGroupElement, a *[32]byte, A *ExtendedGroupElement, b *[32]byte) { + var aSlide, bSlide [256]int8 + var Ai [8]CachedGroupElement // A,3A,5A,7A,9A,11A,13A,15A + var t CompletedGroupElement + var u, A2 ExtendedGroupElement + var i int + + slide(&aSlide, a) + slide(&bSlide, b) + + A.ToCached(&Ai[0]) + A.Double(&t) + t.ToExtended(&A2) + + for i := 0; i < 7; i++ { + geAdd(&t, &A2, &Ai[i]) + t.ToExtended(&u) + u.ToCached(&Ai[i+1]) + } + + r.Zero() + + for i = 255; i >= 0; i-- { + if aSlide[i] != 0 || bSlide[i] != 0 { + break + } + } + + for ; i >= 0; i-- { + r.Double(&t) + + if aSlide[i] > 0 { + t.ToExtended(&u) + geAdd(&t, &u, &Ai[aSlide[i]/2]) + } else if aSlide[i] < 0 { + t.ToExtended(&u) + geSub(&t, &u, &Ai[(-aSlide[i])/2]) + } + + if bSlide[i] > 0 { + t.ToExtended(&u) + geMixedAdd(&t, &u, &bi[bSlide[i]/2]) + } else if bSlide[i] < 0 { + t.ToExtended(&u) + geMixedSub(&t, &u, &bi[(-bSlide[i])/2]) + } + + t.ToProjective(r) + } +} + +// equal returns 1 if b == c and 0 otherwise, assuming that b and c are +// non-negative. +func equal(b, c int32) int32 { + x := uint32(b ^ c) + x-- + return int32(x >> 31) +} + +// negative returns 1 if b < 0 and 0 otherwise. +func negative(b int32) int32 { + return (b >> 31) & 1 +} + +func PreComputedGroupElementCMove(t, u *PreComputedGroupElement, b int32) { + FeCMove(&t.yPlusX, &u.yPlusX, b) + FeCMove(&t.yMinusX, &u.yMinusX, b) + FeCMove(&t.xy2d, &u.xy2d, b) +} + +func selectPoint(t *PreComputedGroupElement, pos int32, b int32) { + var minusT PreComputedGroupElement + bNegative := negative(b) + bAbs := b - (((-bNegative) & b) << 1) + + t.Zero() + for i := int32(0); i < 8; i++ { + PreComputedGroupElementCMove(t, &base[pos][i], equal(bAbs, i+1)) + } + FeCopy(&minusT.yPlusX, &t.yMinusX) + FeCopy(&minusT.yMinusX, &t.yPlusX) + FeNeg(&minusT.xy2d, &t.xy2d) + PreComputedGroupElementCMove(t, &minusT, bNegative) +} + +// GeScalarMultBase computes h = a*B, where +// a = a[0]+256*a[1]+...+256^31 a[31] +// B is the Ed25519 base point (x,4/5) with x positive. +// +// Preconditions: +// a[31] <= 127 +func GeScalarMultBase(h *ExtendedGroupElement, a *[32]byte) { + var e [64]int8 + + for i, v := range a { + e[2*i] = int8(v & 15) + e[2*i+1] = int8((v >> 4) & 15) + } + + // each e[i] is between 0 and 15 and e[63] is between 0 and 7. + + carry := int8(0) + for i := 0; i < 63; i++ { + e[i] += carry + carry = (e[i] + 8) >> 4 + e[i] -= carry << 4 + } + e[63] += carry + // each e[i] is between -8 and 8. + + h.Zero() + var t PreComputedGroupElement + var r CompletedGroupElement + for i := int32(1); i < 64; i += 2 { + selectPoint(&t, i/2, int32(e[i])) + geMixedAdd(&r, h, &t) + r.ToExtended(h) + } + + var s ProjectiveGroupElement + + h.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToProjective(&s) + s.Double(&r) + r.ToExtended(h) + + for i := int32(0); i < 64; i += 2 { + selectPoint(&t, i/2, int32(e[i])) + geMixedAdd(&r, h, &t) + r.ToExtended(h) + } +} + +// The scalars are GF(2^252 + 27742317777372353535851937790883648493). + +// Input: +// a[0]+256*a[1]+...+256^31*a[31] = a +// b[0]+256*b[1]+...+256^31*b[31] = b +// c[0]+256*c[1]+...+256^31*c[31] = c +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +func ScMulAdd(s, a, b, c *[32]byte) { + a0 := 2097151 & load3(a[:]) + a1 := 2097151 & (load4(a[2:]) >> 5) + a2 := 2097151 & (load3(a[5:]) >> 2) + a3 := 2097151 & (load4(a[7:]) >> 7) + a4 := 2097151 & (load4(a[10:]) >> 4) + a5 := 2097151 & (load3(a[13:]) >> 1) + a6 := 2097151 & (load4(a[15:]) >> 6) + a7 := 2097151 & (load3(a[18:]) >> 3) + a8 := 2097151 & load3(a[21:]) + a9 := 2097151 & (load4(a[23:]) >> 5) + a10 := 2097151 & (load3(a[26:]) >> 2) + a11 := (load4(a[28:]) >> 7) + b0 := 2097151 & load3(b[:]) + b1 := 2097151 & (load4(b[2:]) >> 5) + b2 := 2097151 & (load3(b[5:]) >> 2) + b3 := 2097151 & (load4(b[7:]) >> 7) + b4 := 2097151 & (load4(b[10:]) >> 4) + b5 := 2097151 & (load3(b[13:]) >> 1) + b6 := 2097151 & (load4(b[15:]) >> 6) + b7 := 2097151 & (load3(b[18:]) >> 3) + b8 := 2097151 & load3(b[21:]) + b9 := 2097151 & (load4(b[23:]) >> 5) + b10 := 2097151 & (load3(b[26:]) >> 2) + b11 := (load4(b[28:]) >> 7) + c0 := 2097151 & load3(c[:]) + c1 := 2097151 & (load4(c[2:]) >> 5) + c2 := 2097151 & (load3(c[5:]) >> 2) + c3 := 2097151 & (load4(c[7:]) >> 7) + c4 := 2097151 & (load4(c[10:]) >> 4) + c5 := 2097151 & (load3(c[13:]) >> 1) + c6 := 2097151 & (load4(c[15:]) >> 6) + c7 := 2097151 & (load3(c[18:]) >> 3) + c8 := 2097151 & load3(c[21:]) + c9 := 2097151 & (load4(c[23:]) >> 5) + c10 := 2097151 & (load3(c[26:]) >> 2) + c11 := (load4(c[28:]) >> 7) + var carry [23]int64 + + s0 := c0 + a0*b0 + s1 := c1 + a0*b1 + a1*b0 + s2 := c2 + a0*b2 + a1*b1 + a2*b0 + s3 := c3 + a0*b3 + a1*b2 + a2*b1 + a3*b0 + s4 := c4 + a0*b4 + a1*b3 + a2*b2 + a3*b1 + a4*b0 + s5 := c5 + a0*b5 + a1*b4 + a2*b3 + a3*b2 + a4*b1 + a5*b0 + s6 := c6 + a0*b6 + a1*b5 + a2*b4 + a3*b3 + a4*b2 + a5*b1 + a6*b0 + s7 := c7 + a0*b7 + a1*b6 + a2*b5 + a3*b4 + a4*b3 + a5*b2 + a6*b1 + a7*b0 + s8 := c8 + a0*b8 + a1*b7 + a2*b6 + a3*b5 + a4*b4 + a5*b3 + a6*b2 + a7*b1 + a8*b0 + s9 := c9 + a0*b9 + a1*b8 + a2*b7 + a3*b6 + a4*b5 + a5*b4 + a6*b3 + a7*b2 + a8*b1 + a9*b0 + s10 := c10 + a0*b10 + a1*b9 + a2*b8 + a3*b7 + a4*b6 + a5*b5 + a6*b4 + a7*b3 + a8*b2 + a9*b1 + a10*b0 + s11 := c11 + a0*b11 + a1*b10 + a2*b9 + a3*b8 + a4*b7 + a5*b6 + a6*b5 + a7*b4 + a8*b3 + a9*b2 + a10*b1 + a11*b0 + s12 := a1*b11 + a2*b10 + a3*b9 + a4*b8 + a5*b7 + a6*b6 + a7*b5 + a8*b4 + a9*b3 + a10*b2 + a11*b1 + s13 := a2*b11 + a3*b10 + a4*b9 + a5*b8 + a6*b7 + a7*b6 + a8*b5 + a9*b4 + a10*b3 + a11*b2 + s14 := a3*b11 + a4*b10 + a5*b9 + a6*b8 + a7*b7 + a8*b6 + a9*b5 + a10*b4 + a11*b3 + s15 := a4*b11 + a5*b10 + a6*b9 + a7*b8 + a8*b7 + a9*b6 + a10*b5 + a11*b4 + s16 := a5*b11 + a6*b10 + a7*b9 + a8*b8 + a9*b7 + a10*b6 + a11*b5 + s17 := a6*b11 + a7*b10 + a8*b9 + a9*b8 + a10*b7 + a11*b6 + s18 := a7*b11 + a8*b10 + a9*b9 + a10*b8 + a11*b7 + s19 := a8*b11 + a9*b10 + a10*b9 + a11*b8 + s20 := a9*b11 + a10*b10 + a11*b9 + s21 := a10*b11 + a11*b10 + s22 := a11 * b11 + s23 := int64(0) + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + carry[18] = (s18 + (1 << 20)) >> 21 + s19 += carry[18] + s18 -= carry[18] << 21 + carry[20] = (s20 + (1 << 20)) >> 21 + s21 += carry[20] + s20 -= carry[20] << 21 + carry[22] = (s22 + (1 << 20)) >> 21 + s23 += carry[22] + s22 -= carry[22] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + carry[17] = (s17 + (1 << 20)) >> 21 + s18 += carry[17] + s17 -= carry[17] << 21 + carry[19] = (s19 + (1 << 20)) >> 21 + s20 += carry[19] + s19 -= carry[19] << 21 + carry[21] = (s21 + (1 << 20)) >> 21 + s22 += carry[21] + s21 -= carry[21] << 21 + + s11 += s23 * 666643 + s12 += s23 * 470296 + s13 += s23 * 654183 + s14 -= s23 * 997805 + s15 += s23 * 136657 + s16 -= s23 * 683901 + s23 = 0 + + s10 += s22 * 666643 + s11 += s22 * 470296 + s12 += s22 * 654183 + s13 -= s22 * 997805 + s14 += s22 * 136657 + s15 -= s22 * 683901 + s22 = 0 + + s9 += s21 * 666643 + s10 += s21 * 470296 + s11 += s21 * 654183 + s12 -= s21 * 997805 + s13 += s21 * 136657 + s14 -= s21 * 683901 + s21 = 0 + + s8 += s20 * 666643 + s9 += s20 * 470296 + s10 += s20 * 654183 + s11 -= s20 * 997805 + s12 += s20 * 136657 + s13 -= s20 * 683901 + s20 = 0 + + s7 += s19 * 666643 + s8 += s19 * 470296 + s9 += s19 * 654183 + s10 -= s19 * 997805 + s11 += s19 * 136657 + s12 -= s19 * 683901 + s19 = 0 + + s6 += s18 * 666643 + s7 += s18 * 470296 + s8 += s18 * 654183 + s9 -= s18 * 997805 + s10 += s18 * 136657 + s11 -= s18 * 683901 + s18 = 0 + + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + + s5 += s17 * 666643 + s6 += s17 * 470296 + s7 += s17 * 654183 + s8 -= s17 * 997805 + s9 += s17 * 136657 + s10 -= s17 * 683901 + s17 = 0 + + s4 += s16 * 666643 + s5 += s16 * 470296 + s6 += s16 * 654183 + s7 -= s16 * 997805 + s8 += s16 * 136657 + s9 -= s16 * 683901 + s16 = 0 + + s3 += s15 * 666643 + s4 += s15 * 470296 + s5 += s15 * 654183 + s6 -= s15 * 997805 + s7 += s15 * 136657 + s8 -= s15 * 683901 + s15 = 0 + + s2 += s14 * 666643 + s3 += s14 * 470296 + s4 += s14 * 654183 + s5 -= s14 * 997805 + s6 += s14 * 136657 + s7 -= s14 * 683901 + s14 = 0 + + s1 += s13 * 666643 + s2 += s13 * 470296 + s3 += s13 * 654183 + s4 -= s13 * 997805 + s5 += s13 * 136657 + s6 -= s13 * 683901 + s13 = 0 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[11] = s11 >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + s[0] = byte(s0 >> 0) + s[1] = byte(s0 >> 8) + s[2] = byte((s0 >> 16) | (s1 << 5)) + s[3] = byte(s1 >> 3) + s[4] = byte(s1 >> 11) + s[5] = byte((s1 >> 19) | (s2 << 2)) + s[6] = byte(s2 >> 6) + s[7] = byte((s2 >> 14) | (s3 << 7)) + s[8] = byte(s3 >> 1) + s[9] = byte(s3 >> 9) + s[10] = byte((s3 >> 17) | (s4 << 4)) + s[11] = byte(s4 >> 4) + s[12] = byte(s4 >> 12) + s[13] = byte((s4 >> 20) | (s5 << 1)) + s[14] = byte(s5 >> 7) + s[15] = byte((s5 >> 15) | (s6 << 6)) + s[16] = byte(s6 >> 2) + s[17] = byte(s6 >> 10) + s[18] = byte((s6 >> 18) | (s7 << 3)) + s[19] = byte(s7 >> 5) + s[20] = byte(s7 >> 13) + s[21] = byte(s8 >> 0) + s[22] = byte(s8 >> 8) + s[23] = byte((s8 >> 16) | (s9 << 5)) + s[24] = byte(s9 >> 3) + s[25] = byte(s9 >> 11) + s[26] = byte((s9 >> 19) | (s10 << 2)) + s[27] = byte(s10 >> 6) + s[28] = byte((s10 >> 14) | (s11 << 7)) + s[29] = byte(s11 >> 1) + s[30] = byte(s11 >> 9) + s[31] = byte(s11 >> 17) +} + +// Input: +// s[0]+256*s[1]+...+256^63*s[63] = s +// +// Output: +// s[0]+256*s[1]+...+256^31*s[31] = s mod l +// where l = 2^252 + 27742317777372353535851937790883648493. +func ScReduce(out *[32]byte, s *[64]byte) { + s0 := 2097151 & load3(s[:]) + s1 := 2097151 & (load4(s[2:]) >> 5) + s2 := 2097151 & (load3(s[5:]) >> 2) + s3 := 2097151 & (load4(s[7:]) >> 7) + s4 := 2097151 & (load4(s[10:]) >> 4) + s5 := 2097151 & (load3(s[13:]) >> 1) + s6 := 2097151 & (load4(s[15:]) >> 6) + s7 := 2097151 & (load3(s[18:]) >> 3) + s8 := 2097151 & load3(s[21:]) + s9 := 2097151 & (load4(s[23:]) >> 5) + s10 := 2097151 & (load3(s[26:]) >> 2) + s11 := 2097151 & (load4(s[28:]) >> 7) + s12 := 2097151 & (load4(s[31:]) >> 4) + s13 := 2097151 & (load3(s[34:]) >> 1) + s14 := 2097151 & (load4(s[36:]) >> 6) + s15 := 2097151 & (load3(s[39:]) >> 3) + s16 := 2097151 & load3(s[42:]) + s17 := 2097151 & (load4(s[44:]) >> 5) + s18 := 2097151 & (load3(s[47:]) >> 2) + s19 := 2097151 & (load4(s[49:]) >> 7) + s20 := 2097151 & (load4(s[52:]) >> 4) + s21 := 2097151 & (load3(s[55:]) >> 1) + s22 := 2097151 & (load4(s[57:]) >> 6) + s23 := (load4(s[60:]) >> 3) + + s11 += s23 * 666643 + s12 += s23 * 470296 + s13 += s23 * 654183 + s14 -= s23 * 997805 + s15 += s23 * 136657 + s16 -= s23 * 683901 + s23 = 0 + + s10 += s22 * 666643 + s11 += s22 * 470296 + s12 += s22 * 654183 + s13 -= s22 * 997805 + s14 += s22 * 136657 + s15 -= s22 * 683901 + s22 = 0 + + s9 += s21 * 666643 + s10 += s21 * 470296 + s11 += s21 * 654183 + s12 -= s21 * 997805 + s13 += s21 * 136657 + s14 -= s21 * 683901 + s21 = 0 + + s8 += s20 * 666643 + s9 += s20 * 470296 + s10 += s20 * 654183 + s11 -= s20 * 997805 + s12 += s20 * 136657 + s13 -= s20 * 683901 + s20 = 0 + + s7 += s19 * 666643 + s8 += s19 * 470296 + s9 += s19 * 654183 + s10 -= s19 * 997805 + s11 += s19 * 136657 + s12 -= s19 * 683901 + s19 = 0 + + s6 += s18 * 666643 + s7 += s18 * 470296 + s8 += s18 * 654183 + s9 -= s18 * 997805 + s10 += s18 * 136657 + s11 -= s18 * 683901 + s18 = 0 + + var carry [17]int64 + + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[12] = (s12 + (1 << 20)) >> 21 + s13 += carry[12] + s12 -= carry[12] << 21 + carry[14] = (s14 + (1 << 20)) >> 21 + s15 += carry[14] + s14 -= carry[14] << 21 + carry[16] = (s16 + (1 << 20)) >> 21 + s17 += carry[16] + s16 -= carry[16] << 21 + + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + carry[13] = (s13 + (1 << 20)) >> 21 + s14 += carry[13] + s13 -= carry[13] << 21 + carry[15] = (s15 + (1 << 20)) >> 21 + s16 += carry[15] + s15 -= carry[15] << 21 + + s5 += s17 * 666643 + s6 += s17 * 470296 + s7 += s17 * 654183 + s8 -= s17 * 997805 + s9 += s17 * 136657 + s10 -= s17 * 683901 + s17 = 0 + + s4 += s16 * 666643 + s5 += s16 * 470296 + s6 += s16 * 654183 + s7 -= s16 * 997805 + s8 += s16 * 136657 + s9 -= s16 * 683901 + s16 = 0 + + s3 += s15 * 666643 + s4 += s15 * 470296 + s5 += s15 * 654183 + s6 -= s15 * 997805 + s7 += s15 * 136657 + s8 -= s15 * 683901 + s15 = 0 + + s2 += s14 * 666643 + s3 += s14 * 470296 + s4 += s14 * 654183 + s5 -= s14 * 997805 + s6 += s14 * 136657 + s7 -= s14 * 683901 + s14 = 0 + + s1 += s13 * 666643 + s2 += s13 * 470296 + s3 += s13 * 654183 + s4 -= s13 * 997805 + s5 += s13 * 136657 + s6 -= s13 * 683901 + s13 = 0 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = (s0 + (1 << 20)) >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[2] = (s2 + (1 << 20)) >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[4] = (s4 + (1 << 20)) >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[6] = (s6 + (1 << 20)) >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[8] = (s8 + (1 << 20)) >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[10] = (s10 + (1 << 20)) >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + carry[1] = (s1 + (1 << 20)) >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[3] = (s3 + (1 << 20)) >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[5] = (s5 + (1 << 20)) >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[7] = (s7 + (1 << 20)) >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[9] = (s9 + (1 << 20)) >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[11] = (s11 + (1 << 20)) >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + carry[11] = s11 >> 21 + s12 += carry[11] + s11 -= carry[11] << 21 + + s0 += s12 * 666643 + s1 += s12 * 470296 + s2 += s12 * 654183 + s3 -= s12 * 997805 + s4 += s12 * 136657 + s5 -= s12 * 683901 + s12 = 0 + + carry[0] = s0 >> 21 + s1 += carry[0] + s0 -= carry[0] << 21 + carry[1] = s1 >> 21 + s2 += carry[1] + s1 -= carry[1] << 21 + carry[2] = s2 >> 21 + s3 += carry[2] + s2 -= carry[2] << 21 + carry[3] = s3 >> 21 + s4 += carry[3] + s3 -= carry[3] << 21 + carry[4] = s4 >> 21 + s5 += carry[4] + s4 -= carry[4] << 21 + carry[5] = s5 >> 21 + s6 += carry[5] + s5 -= carry[5] << 21 + carry[6] = s6 >> 21 + s7 += carry[6] + s6 -= carry[6] << 21 + carry[7] = s7 >> 21 + s8 += carry[7] + s7 -= carry[7] << 21 + carry[8] = s8 >> 21 + s9 += carry[8] + s8 -= carry[8] << 21 + carry[9] = s9 >> 21 + s10 += carry[9] + s9 -= carry[9] << 21 + carry[10] = s10 >> 21 + s11 += carry[10] + s10 -= carry[10] << 21 + + out[0] = byte(s0 >> 0) + out[1] = byte(s0 >> 8) + out[2] = byte((s0 >> 16) | (s1 << 5)) + out[3] = byte(s1 >> 3) + out[4] = byte(s1 >> 11) + out[5] = byte((s1 >> 19) | (s2 << 2)) + out[6] = byte(s2 >> 6) + out[7] = byte((s2 >> 14) | (s3 << 7)) + out[8] = byte(s3 >> 1) + out[9] = byte(s3 >> 9) + out[10] = byte((s3 >> 17) | (s4 << 4)) + out[11] = byte(s4 >> 4) + out[12] = byte(s4 >> 12) + out[13] = byte((s4 >> 20) | (s5 << 1)) + out[14] = byte(s5 >> 7) + out[15] = byte((s5 >> 15) | (s6 << 6)) + out[16] = byte(s6 >> 2) + out[17] = byte(s6 >> 10) + out[18] = byte((s6 >> 18) | (s7 << 3)) + out[19] = byte(s7 >> 5) + out[20] = byte(s7 >> 13) + out[21] = byte(s8 >> 0) + out[22] = byte(s8 >> 8) + out[23] = byte((s8 >> 16) | (s9 << 5)) + out[24] = byte(s9 >> 3) + out[25] = byte(s9 >> 11) + out[26] = byte((s9 >> 19) | (s10 << 2)) + out[27] = byte(s10 >> 6) + out[28] = byte((s10 >> 14) | (s11 << 7)) + out[29] = byte(s11 >> 1) + out[30] = byte(s11 >> 9) + out[31] = byte(s11 >> 17) +} diff --git a/vendor/golang.org/x/crypto/ed25519/testdata/sign.input.gz b/vendor/golang.org/x/crypto/ed25519/testdata/sign.input.gz new file mode 100644 index 0000000000000000000000000000000000000000..41030690c0db39a0279304a46f002a625caa9080 GIT binary patch literal 50330 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¤ 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 T!|y*De*gRjX1oxufGGk1?cM`* literal 0 HcmV?d00001 diff --git a/vendor/golang.org/x/crypto/hkdf/example_test.go b/vendor/golang.org/x/crypto/hkdf/example_test.go new file mode 100644 index 0000000..df84395 --- /dev/null +++ b/vendor/golang.org/x/crypto/hkdf/example_test.go @@ -0,0 +1,61 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package hkdf_test + +import ( + "bytes" + "crypto/rand" + "crypto/sha256" + "fmt" + "golang.org/x/crypto/hkdf" + "io" +) + +// Usage example that expands one master key into three other cryptographically +// secure keys. +func Example_usage() { + // Underlying hash function to use + hash := sha256.New + + // Cryptographically secure master key. + master := []byte{0x00, 0x01, 0x02, 0x03} // i.e. NOT this. + + // Non secret salt, optional (can be nil) + // Recommended: hash-length sized random + salt := make([]byte, hash().Size()) + n, err := io.ReadFull(rand.Reader, salt) + if n != len(salt) || err != nil { + fmt.Println("error:", err) + return + } + + // Non secret context specific info, optional (can be nil). + // Note, independent from the master key. + info := []byte{0x03, 0x14, 0x15, 0x92, 0x65} + + // Create the key derivation function + hkdf := hkdf.New(hash, master, salt, info) + + // Generate the required keys + keys := make([][]byte, 3) + for i := 0; i < len(keys); i++ { + keys[i] = make([]byte, 24) + n, err := io.ReadFull(hkdf, keys[i]) + if n != len(keys[i]) || err != nil { + fmt.Println("error:", err) + return + } + } + + // Keys should contain 192 bit random keys + for i := 1; i <= len(keys); i++ { + fmt.Printf("Key #%d: %v\n", i, !bytes.Equal(keys[i-1], make([]byte, 24))) + } + + // Output: + // Key #1: true + // Key #2: true + // Key #3: true +} diff --git a/vendor/golang.org/x/crypto/hkdf/hkdf.go b/vendor/golang.org/x/crypto/hkdf/hkdf.go new file mode 100644 index 0000000..5bc2463 --- /dev/null +++ b/vendor/golang.org/x/crypto/hkdf/hkdf.go @@ -0,0 +1,75 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package hkdf implements the HMAC-based Extract-and-Expand Key Derivation +// Function (HKDF) as defined in RFC 5869. +// +// HKDF is a cryptographic key derivation function (KDF) with the goal of +// expanding limited input keying material into one or more cryptographically +// strong secret keys. +// +// RFC 5869: https://tools.ietf.org/html/rfc5869 +package hkdf // import "golang.org/x/crypto/hkdf" + +import ( + "crypto/hmac" + "errors" + "hash" + "io" +) + +type hkdf struct { + expander hash.Hash + size int + + info []byte + counter byte + + prev []byte + cache []byte +} + +func (f *hkdf) Read(p []byte) (int, error) { + // Check whether enough data can be generated + need := len(p) + remains := len(f.cache) + int(255-f.counter+1)*f.size + if remains < need { + return 0, errors.New("hkdf: entropy limit reached") + } + // Read from the cache, if enough data is present + n := copy(p, f.cache) + p = p[n:] + + // Fill the buffer + for len(p) > 0 { + f.expander.Reset() + f.expander.Write(f.prev) + f.expander.Write(f.info) + f.expander.Write([]byte{f.counter}) + f.prev = f.expander.Sum(f.prev[:0]) + f.counter++ + + // Copy the new batch into p + f.cache = f.prev + n = copy(p, f.cache) + p = p[n:] + } + // Save leftovers for next run + f.cache = f.cache[n:] + + return need, nil +} + +// New returns a new HKDF using the given hash, the secret keying material to expand +// and optional salt and info fields. +func New(hash func() hash.Hash, secret, salt, info []byte) io.Reader { + if salt == nil { + salt = make([]byte, hash().Size()) + } + extractor := hmac.New(hash, salt) + extractor.Write(secret) + prk := extractor.Sum(nil) + + return &hkdf{hmac.New(hash, prk), extractor.Size(), info, 1, nil, nil} +} diff --git a/vendor/golang.org/x/crypto/hkdf/hkdf_test.go b/vendor/golang.org/x/crypto/hkdf/hkdf_test.go new file mode 100644 index 0000000..cee659b --- /dev/null +++ b/vendor/golang.org/x/crypto/hkdf/hkdf_test.go @@ -0,0 +1,370 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +package hkdf + +import ( + "bytes" + "crypto/md5" + "crypto/sha1" + "crypto/sha256" + "crypto/sha512" + "hash" + "io" + "testing" +) + +type hkdfTest struct { + hash func() hash.Hash + master []byte + salt []byte + info []byte + out []byte +} + +var hkdfTests = []hkdfTest{ + // Tests from RFC 5869 + { + sha256.New, + []byte{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + }, + []byte{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, + }, + []byte{ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, + }, + []byte{ + 0x3c, 0xb2, 0x5f, 0x25, 0xfa, 0xac, 0xd5, 0x7a, + 0x90, 0x43, 0x4f, 0x64, 0xd0, 0x36, 0x2f, 0x2a, + 0x2d, 0x2d, 0x0a, 0x90, 0xcf, 0x1a, 0x5a, 0x4c, + 0x5d, 0xb0, 0x2d, 0x56, 0xec, 0xc4, 0xc5, 0xbf, + 0x34, 0x00, 0x72, 0x08, 0xd5, 0xb8, 0x87, 0x18, + 0x58, 0x65, + }, + }, + { + sha256.New, + []byte{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + }, + []byte{ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + }, + []byte{ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + }, + []byte{ + 0xb1, 0x1e, 0x39, 0x8d, 0xc8, 0x03, 0x27, 0xa1, + 0xc8, 0xe7, 0xf7, 0x8c, 0x59, 0x6a, 0x49, 0x34, + 0x4f, 0x01, 0x2e, 0xda, 0x2d, 0x4e, 0xfa, 0xd8, + 0xa0, 0x50, 0xcc, 0x4c, 0x19, 0xaf, 0xa9, 0x7c, + 0x59, 0x04, 0x5a, 0x99, 0xca, 0xc7, 0x82, 0x72, + 0x71, 0xcb, 0x41, 0xc6, 0x5e, 0x59, 0x0e, 0x09, + 0xda, 0x32, 0x75, 0x60, 0x0c, 0x2f, 0x09, 0xb8, + 0x36, 0x77, 0x93, 0xa9, 0xac, 0xa3, 0xdb, 0x71, + 0xcc, 0x30, 0xc5, 0x81, 0x79, 0xec, 0x3e, 0x87, + 0xc1, 0x4c, 0x01, 0xd5, 0xc1, 0xf3, 0x43, 0x4f, + 0x1d, 0x87, + }, + }, + { + sha256.New, + []byte{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + }, + []byte{}, + []byte{}, + []byte{ + 0x8d, 0xa4, 0xe7, 0x75, 0xa5, 0x63, 0xc1, 0x8f, + 0x71, 0x5f, 0x80, 0x2a, 0x06, 0x3c, 0x5a, 0x31, + 0xb8, 0xa1, 0x1f, 0x5c, 0x5e, 0xe1, 0x87, 0x9e, + 0xc3, 0x45, 0x4e, 0x5f, 0x3c, 0x73, 0x8d, 0x2d, + 0x9d, 0x20, 0x13, 0x95, 0xfa, 0xa4, 0xb6, 0x1a, + 0x96, 0xc8, + }, + }, + { + sha1.New, + []byte{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, + }, + []byte{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, + }, + []byte{ + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, + }, + []byte{ + 0x08, 0x5a, 0x01, 0xea, 0x1b, 0x10, 0xf3, 0x69, + 0x33, 0x06, 0x8b, 0x56, 0xef, 0xa5, 0xad, 0x81, + 0xa4, 0xf1, 0x4b, 0x82, 0x2f, 0x5b, 0x09, 0x15, + 0x68, 0xa9, 0xcd, 0xd4, 0xf1, 0x55, 0xfd, 0xa2, + 0xc2, 0x2e, 0x42, 0x24, 0x78, 0xd3, 0x05, 0xf3, + 0xf8, 0x96, + }, + }, + { + sha1.New, + []byte{ + 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, + 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, + 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, + }, + []byte{ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, + 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, + 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, + 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + }, + []byte{ + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, + 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, + 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, + 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, + 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + }, + []byte{ + 0x0b, 0xd7, 0x70, 0xa7, 0x4d, 0x11, 0x60, 0xf7, + 0xc9, 0xf1, 0x2c, 0xd5, 0x91, 0x2a, 0x06, 0xeb, + 0xff, 0x6a, 0xdc, 0xae, 0x89, 0x9d, 0x92, 0x19, + 0x1f, 0xe4, 0x30, 0x56, 0x73, 0xba, 0x2f, 0xfe, + 0x8f, 0xa3, 0xf1, 0xa4, 0xe5, 0xad, 0x79, 0xf3, + 0xf3, 0x34, 0xb3, 0xb2, 0x02, 0xb2, 0x17, 0x3c, + 0x48, 0x6e, 0xa3, 0x7c, 0xe3, 0xd3, 0x97, 0xed, + 0x03, 0x4c, 0x7f, 0x9d, 0xfe, 0xb1, 0x5c, 0x5e, + 0x92, 0x73, 0x36, 0xd0, 0x44, 0x1f, 0x4c, 0x43, + 0x00, 0xe2, 0xcf, 0xf0, 0xd0, 0x90, 0x0b, 0x52, + 0xd3, 0xb4, + }, + }, + { + sha1.New, + []byte{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + }, + []byte{}, + []byte{}, + []byte{ + 0x0a, 0xc1, 0xaf, 0x70, 0x02, 0xb3, 0xd7, 0x61, + 0xd1, 0xe5, 0x52, 0x98, 0xda, 0x9d, 0x05, 0x06, + 0xb9, 0xae, 0x52, 0x05, 0x72, 0x20, 0xa3, 0x06, + 0xe0, 0x7b, 0x6b, 0x87, 0xe8, 0xdf, 0x21, 0xd0, + 0xea, 0x00, 0x03, 0x3d, 0xe0, 0x39, 0x84, 0xd3, + 0x49, 0x18, + }, + }, + { + sha1.New, + []byte{ + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, + }, + nil, + []byte{}, + []byte{ + 0x2c, 0x91, 0x11, 0x72, 0x04, 0xd7, 0x45, 0xf3, + 0x50, 0x0d, 0x63, 0x6a, 0x62, 0xf6, 0x4f, 0x0a, + 0xb3, 0xba, 0xe5, 0x48, 0xaa, 0x53, 0xd4, 0x23, + 0xb0, 0xd1, 0xf2, 0x7e, 0xbb, 0xa6, 0xf5, 0xe5, + 0x67, 0x3a, 0x08, 0x1d, 0x70, 0xcc, 0xe7, 0xac, + 0xfc, 0x48, + }, + }, +} + +func TestHKDF(t *testing.T) { + for i, tt := range hkdfTests { + hkdf := New(tt.hash, tt.master, tt.salt, tt.info) + out := make([]byte, len(tt.out)) + + n, err := io.ReadFull(hkdf, out) + if n != len(tt.out) || err != nil { + t.Errorf("test %d: not enough output bytes: %d.", i, n) + } + + if !bytes.Equal(out, tt.out) { + t.Errorf("test %d: incorrect output: have %v, need %v.", i, out, tt.out) + } + } +} + +func TestHKDFMultiRead(t *testing.T) { + for i, tt := range hkdfTests { + hkdf := New(tt.hash, tt.master, tt.salt, tt.info) + out := make([]byte, len(tt.out)) + + for b := 0; b < len(tt.out); b++ { + n, err := io.ReadFull(hkdf, out[b:b+1]) + if n != 1 || err != nil { + t.Errorf("test %d.%d: not enough output bytes: have %d, need %d .", i, b, n, len(tt.out)) + } + } + + if !bytes.Equal(out, tt.out) { + t.Errorf("test %d: incorrect output: have %v, need %v.", i, out, tt.out) + } + } +} + +func TestHKDFLimit(t *testing.T) { + hash := sha1.New + master := []byte{0x00, 0x01, 0x02, 0x03} + info := []byte{} + + hkdf := New(hash, master, nil, info) + limit := hash().Size() * 255 + out := make([]byte, limit) + + // The maximum output bytes should be extractable + n, err := io.ReadFull(hkdf, out) + if n != limit || err != nil { + t.Errorf("not enough output bytes: %d, %v.", n, err) + } + + // Reading one more should fail + n, err = io.ReadFull(hkdf, make([]byte, 1)) + if n > 0 || err == nil { + t.Errorf("key expansion overflowed: n = %d, err = %v", n, err) + } +} + +func Benchmark16ByteMD5Single(b *testing.B) { + benchmarkHKDFSingle(md5.New, 16, b) +} + +func Benchmark20ByteSHA1Single(b *testing.B) { + benchmarkHKDFSingle(sha1.New, 20, b) +} + +func Benchmark32ByteSHA256Single(b *testing.B) { + benchmarkHKDFSingle(sha256.New, 32, b) +} + +func Benchmark64ByteSHA512Single(b *testing.B) { + benchmarkHKDFSingle(sha512.New, 64, b) +} + +func Benchmark8ByteMD5Stream(b *testing.B) { + benchmarkHKDFStream(md5.New, 8, b) +} + +func Benchmark16ByteMD5Stream(b *testing.B) { + benchmarkHKDFStream(md5.New, 16, b) +} + +func Benchmark8ByteSHA1Stream(b *testing.B) { + benchmarkHKDFStream(sha1.New, 8, b) +} + +func Benchmark20ByteSHA1Stream(b *testing.B) { + benchmarkHKDFStream(sha1.New, 20, b) +} + +func Benchmark8ByteSHA256Stream(b *testing.B) { + benchmarkHKDFStream(sha256.New, 8, b) +} + +func Benchmark32ByteSHA256Stream(b *testing.B) { + benchmarkHKDFStream(sha256.New, 32, b) +} + +func Benchmark8ByteSHA512Stream(b *testing.B) { + benchmarkHKDFStream(sha512.New, 8, b) +} + +func Benchmark64ByteSHA512Stream(b *testing.B) { + benchmarkHKDFStream(sha512.New, 64, b) +} + +func benchmarkHKDFSingle(hasher func() hash.Hash, block int, b *testing.B) { + master := []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07} + salt := []byte{0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17} + info := []byte{0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27} + out := make([]byte, block) + + b.SetBytes(int64(block)) + b.ResetTimer() + + for i := 0; i < b.N; i++ { + hkdf := New(hasher, master, salt, info) + io.ReadFull(hkdf, out) + } +} + +func benchmarkHKDFStream(hasher func() hash.Hash, block int, b *testing.B) { + master := []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07} + salt := []byte{0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17} + info := []byte{0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27} + out := make([]byte, block) + + b.SetBytes(int64(block)) + b.ResetTimer() + + hkdf := New(hasher, master, salt, info) + for i := 0; i < b.N; i++ { + _, err := io.ReadFull(hkdf, out) + if err != nil { + hkdf = New(hasher, master, salt, info) + i-- + } + } +} diff --git a/vendor/golang.org/x/crypto/md4/example_test.go b/vendor/golang.org/x/crypto/md4/example_test.go new file mode 100644 index 0000000..db3f59b --- /dev/null +++ b/vendor/golang.org/x/crypto/md4/example_test.go @@ -0,0 +1,20 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package md4_test + +import ( + "fmt" + "io" + + "golang.org/x/crypto/md4" +) + +func ExampleNew() { + h := md4.New() + data := "These pretzels are making me thirsty." + io.WriteString(h, data) + fmt.Printf("%x", h.Sum(nil)) + // Output: 48c4e365090b30a32f084c4888deceaa +} diff --git a/vendor/golang.org/x/crypto/md4/md4.go b/vendor/golang.org/x/crypto/md4/md4.go new file mode 100644 index 0000000..6d9ba9e --- /dev/null +++ b/vendor/golang.org/x/crypto/md4/md4.go @@ -0,0 +1,118 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package md4 implements the MD4 hash algorithm as defined in RFC 1320. +package md4 // import "golang.org/x/crypto/md4" + +import ( + "crypto" + "hash" +) + +func init() { + crypto.RegisterHash(crypto.MD4, New) +} + +// The size of an MD4 checksum in bytes. +const Size = 16 + +// The blocksize of MD4 in bytes. +const BlockSize = 64 + +const ( + _Chunk = 64 + _Init0 = 0x67452301 + _Init1 = 0xEFCDAB89 + _Init2 = 0x98BADCFE + _Init3 = 0x10325476 +) + +// digest represents the partial evaluation of a checksum. +type digest struct { + s [4]uint32 + x [_Chunk]byte + nx int + len uint64 +} + +func (d *digest) Reset() { + d.s[0] = _Init0 + d.s[1] = _Init1 + d.s[2] = _Init2 + d.s[3] = _Init3 + d.nx = 0 + d.len = 0 +} + +// New returns a new hash.Hash computing the MD4 checksum. +func New() hash.Hash { + d := new(digest) + d.Reset() + return d +} + +func (d *digest) Size() int { return Size } + +func (d *digest) BlockSize() int { return BlockSize } + +func (d *digest) Write(p []byte) (nn int, err error) { + nn = len(p) + d.len += uint64(nn) + if d.nx > 0 { + n := len(p) + if n > _Chunk-d.nx { + n = _Chunk - d.nx + } + for i := 0; i < n; i++ { + d.x[d.nx+i] = p[i] + } + d.nx += n + if d.nx == _Chunk { + _Block(d, d.x[0:]) + d.nx = 0 + } + p = p[n:] + } + n := _Block(d, p) + p = p[n:] + if len(p) > 0 { + d.nx = copy(d.x[:], p) + } + return +} + +func (d0 *digest) Sum(in []byte) []byte { + // Make a copy of d0, so that caller can keep writing and summing. + d := new(digest) + *d = *d0 + + // Padding. Add a 1 bit and 0 bits until 56 bytes mod 64. + len := d.len + var tmp [64]byte + tmp[0] = 0x80 + if len%64 < 56 { + d.Write(tmp[0 : 56-len%64]) + } else { + d.Write(tmp[0 : 64+56-len%64]) + } + + // Length in bits. + len <<= 3 + for i := uint(0); i < 8; i++ { + tmp[i] = byte(len >> (8 * i)) + } + d.Write(tmp[0:8]) + + if d.nx != 0 { + panic("d.nx != 0") + } + + for _, s := range d.s { + in = append(in, byte(s>>0)) + in = append(in, byte(s>>8)) + in = append(in, byte(s>>16)) + in = append(in, byte(s>>24)) + } + return in +} diff --git a/vendor/golang.org/x/crypto/md4/md4_test.go b/vendor/golang.org/x/crypto/md4/md4_test.go new file mode 100644 index 0000000..b56edd7 --- /dev/null +++ b/vendor/golang.org/x/crypto/md4/md4_test.go @@ -0,0 +1,71 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package md4 + +import ( + "fmt" + "io" + "testing" +) + +type md4Test struct { + out string + in string +} + +var golden = []md4Test{ + {"31d6cfe0d16ae931b73c59d7e0c089c0", ""}, + {"bde52cb31de33e46245e05fbdbd6fb24", "a"}, + {"ec388dd78999dfc7cf4632465693b6bf", "ab"}, + {"a448017aaf21d8525fc10ae87aa6729d", "abc"}, + {"41decd8f579255c5200f86a4bb3ba740", "abcd"}, + {"9803f4a34e8eb14f96adba49064a0c41", "abcde"}, + {"804e7f1c2586e50b49ac65db5b645131", "abcdef"}, + {"752f4adfe53d1da0241b5bc216d098fc", "abcdefg"}, + {"ad9daf8d49d81988590a6f0e745d15dd", "abcdefgh"}, + {"1e4e28b05464316b56402b3815ed2dfd", "abcdefghi"}, + {"dc959c6f5d6f9e04e4380777cc964b3d", "abcdefghij"}, + {"1b5701e265778898ef7de5623bbe7cc0", "Discard medicine more than two years old."}, + {"d7f087e090fe7ad4a01cb59dacc9a572", "He who has a shady past knows that nice guys finish last."}, + {"a6f8fd6df617c72837592fc3570595c9", "I wouldn't marry him with a ten foot pole."}, + {"c92a84a9526da8abc240c05d6b1a1ce0", "Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave"}, + {"f6013160c4dcb00847069fee3bb09803", "The days of the digital watch are numbered. -Tom Stoppard"}, + {"2c3bb64f50b9107ed57640fe94bec09f", "Nepal premier won't resign."}, + {"45b7d8a32c7806f2f7f897332774d6e4", "For every action there is an equal and opposite government program."}, + {"b5b4f9026b175c62d7654bdc3a1cd438", "His money is twice tainted: 'taint yours and 'taint mine."}, + {"caf44e80f2c20ce19b5ba1cab766e7bd", "There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977"}, + {"191fae6707f496aa54a6bce9f2ecf74d", "It's a tiny change to the code and not completely disgusting. - Bob Manchek"}, + {"9ddc753e7a4ccee6081cd1b45b23a834", "size: a.out: bad magic"}, + {"8d050f55b1cadb9323474564be08a521", "The major problem is with sendmail. -Mark Horton"}, + {"ad6e2587f74c3e3cc19146f6127fa2e3", "Give me a rock, paper and scissors and I will move the world. CCFestoon"}, + {"1d616d60a5fabe85589c3f1566ca7fca", "If the enemy is within range, then so are you."}, + {"aec3326a4f496a2ced65a1963f84577f", "It's well we cannot hear the screams/That we create in others' dreams."}, + {"77b4fd762d6b9245e61c50bf6ebf118b", "You remind me of a TV show, but that's all right: I watch it anyway."}, + {"e8f48c726bae5e516f6ddb1a4fe62438", "C is as portable as Stonehedge!!"}, + {"a3a84366e7219e887423b01f9be7166e", "Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley"}, + {"a6b7aa35157e984ef5d9b7f32e5fbb52", "The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction. Lewis-Randall Rule"}, + {"75661f0545955f8f9abeeb17845f3fd6", "How can you write a big system without C++? -Paul Glick"}, +} + +func TestGolden(t *testing.T) { + for i := 0; i < len(golden); i++ { + g := golden[i] + c := New() + for j := 0; j < 3; j++ { + if j < 2 { + io.WriteString(c, g.in) + } else { + io.WriteString(c, g.in[0:len(g.in)/2]) + c.Sum(nil) + io.WriteString(c, g.in[len(g.in)/2:]) + } + s := fmt.Sprintf("%x", c.Sum(nil)) + if s != g.out { + t.Fatalf("md4[%d](%s) = %s want %s", j, g.in, s, g.out) + } + c.Reset() + } + } +} diff --git a/vendor/golang.org/x/crypto/md4/md4block.go b/vendor/golang.org/x/crypto/md4/md4block.go new file mode 100644 index 0000000..3fed475 --- /dev/null +++ b/vendor/golang.org/x/crypto/md4/md4block.go @@ -0,0 +1,89 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// MD4 block step. +// In its own file so that a faster assembly or C version +// can be substituted easily. + +package md4 + +var shift1 = []uint{3, 7, 11, 19} +var shift2 = []uint{3, 5, 9, 13} +var shift3 = []uint{3, 9, 11, 15} + +var xIndex2 = []uint{0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15} +var xIndex3 = []uint{0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15} + +func _Block(dig *digest, p []byte) int { + a := dig.s[0] + b := dig.s[1] + c := dig.s[2] + d := dig.s[3] + n := 0 + var X [16]uint32 + for len(p) >= _Chunk { + aa, bb, cc, dd := a, b, c, d + + j := 0 + for i := 0; i < 16; i++ { + X[i] = uint32(p[j]) | uint32(p[j+1])<<8 | uint32(p[j+2])<<16 | uint32(p[j+3])<<24 + j += 4 + } + + // If this needs to be made faster in the future, + // the usual trick is to unroll each of these + // loops by a factor of 4; that lets you replace + // the shift[] lookups with constants and, + // with suitable variable renaming in each + // unrolled body, delete the a, b, c, d = d, a, b, c + // (or you can let the optimizer do the renaming). + // + // The index variables are uint so that % by a power + // of two can be optimized easily by a compiler. + + // Round 1. + for i := uint(0); i < 16; i++ { + x := i + s := shift1[i%4] + f := ((c ^ d) & b) ^ d + a += f + X[x] + a = a<>(32-s) + a, b, c, d = d, a, b, c + } + + // Round 2. + for i := uint(0); i < 16; i++ { + x := xIndex2[i] + s := shift2[i%4] + g := (b & c) | (b & d) | (c & d) + a += g + X[x] + 0x5a827999 + a = a<>(32-s) + a, b, c, d = d, a, b, c + } + + // Round 3. + for i := uint(0); i < 16; i++ { + x := xIndex3[i] + s := shift3[i%4] + h := b ^ c ^ d + a += h + X[x] + 0x6ed9eba1 + a = a<>(32-s) + a, b, c, d = d, a, b, c + } + + a += aa + b += bb + c += cc + d += dd + + p = p[_Chunk:] + n += _Chunk + } + + dig.s[0] = a + dig.s[1] = b + dig.s[2] = c + dig.s[3] = d + return n +} diff --git a/vendor/golang.org/x/crypto/nacl/auth/auth.go b/vendor/golang.org/x/crypto/nacl/auth/auth.go new file mode 100644 index 0000000..0835d3b --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/auth/auth.go @@ -0,0 +1,58 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package auth authenticates a message using a secret key. + +The Sum function, viewed as a function of the message for a uniform random +key, is designed to meet the standard notion of unforgeability. This means +that an attacker cannot find authenticators for any messages not authenticated +by the sender, even if the attacker has adaptively influenced the messages +authenticated by the sender. For a formal definition see, e.g., Section 2.4 +of Bellare, Kilian, and Rogaway, "The security of the cipher block chaining +message authentication code," Journal of Computer and System Sciences 61 (2000), +362–399; http://www-cse.ucsd.edu/~mihir/papers/cbc.html. + +auth does not make any promises regarding "strong" unforgeability; perhaps +one valid authenticator can be converted into another valid authenticator for +the same message. NaCl also does not make any promises regarding "truncated +unforgeability." + +This package is interoperable with NaCl: https://nacl.cr.yp.to/auth.html. +*/ +package auth + +import ( + "crypto/hmac" + "crypto/sha512" +) + +const ( + // Size is the size, in bytes, of an authenticated digest. + Size = 32 + // KeySize is the size, in bytes, of an authentication key. + KeySize = 32 +) + +// Sum generates an authenticator for m using a secret key and returns the +// 32-byte digest. +func Sum(m []byte, key *[KeySize]byte) *[Size]byte { + mac := hmac.New(sha512.New, key[:]) + mac.Write(m) + out := new([KeySize]byte) + copy(out[:], mac.Sum(nil)[:Size]) + return out +} + +// Verify checks that digest is a valid authenticator of message m under the +// given secret key. Verify does not leak timing information. +func Verify(digest []byte, m []byte, key *[32]byte) bool { + if len(digest) != Size { + return false + } + mac := hmac.New(sha512.New, key[:]) + mac.Write(m) + expectedMAC := mac.Sum(nil) // first 256 bits of 512-bit sum + return hmac.Equal(digest, expectedMAC[:Size]) +} diff --git a/vendor/golang.org/x/crypto/nacl/auth/auth_test.go b/vendor/golang.org/x/crypto/nacl/auth/auth_test.go new file mode 100644 index 0000000..92074b5 --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/auth/auth_test.go @@ -0,0 +1,172 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package auth + +import ( + "bytes" + rand "crypto/rand" + mrand "math/rand" + "testing" +) + +// Test cases are from RFC 4231, and match those present in the tests directory +// of the download here: https://nacl.cr.yp.to/install.html +var testCases = []struct { + key [32]byte + msg []byte + out [32]byte +}{ + { + key: [32]byte{ + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, + 0x0b, 0x0b, 0x0b, 0x0b, + }, + msg: []byte("Hi There"), + out: [32]byte{ + 0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d, + 0x4f, 0xf0, 0xb4, 0x24, 0x1a, 0x1d, 0x6c, 0xb0, + 0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78, + 0x7a, 0xd0, 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde, + }, + }, + { + key: [32]byte{'J', 'e', 'f', 'e'}, + msg: []byte("what do ya want for nothing?"), + out: [32]byte{ + 0x16, 0x4b, 0x7a, 0x7b, 0xfc, 0xf8, 0x19, 0xe2, + 0xe3, 0x95, 0xfb, 0xe7, 0x3b, 0x56, 0xe0, 0xa3, + 0x87, 0xbd, 0x64, 0x22, 0x2e, 0x83, 0x1f, 0xd6, + 0x10, 0x27, 0x0c, 0xd7, 0xea, 0x25, 0x05, 0x54, + }, + }, + { + key: [32]byte{ + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, + }, + msg: []byte{ // 50 bytes of 0xdd + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, + 0xdd, 0xdd, + }, + out: [32]byte{ + 0xfa, 0x73, 0xb0, 0x08, 0x9d, 0x56, 0xa2, 0x84, + 0xef, 0xb0, 0xf0, 0x75, 0x6c, 0x89, 0x0b, 0xe9, + 0xb1, 0xb5, 0xdb, 0xdd, 0x8e, 0xe8, 0x1a, 0x36, + 0x55, 0xf8, 0x3e, 0x33, 0xb2, 0x27, 0x9d, 0x39, + }, + }, + { + key: [32]byte{ + 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, + 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, + 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, + 0x19, + }, + msg: []byte{ + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, + 0xcd, 0xcd, + }, + out: [32]byte{ + 0xb0, 0xba, 0x46, 0x56, 0x37, 0x45, 0x8c, 0x69, + 0x90, 0xe5, 0xa8, 0xc5, 0xf6, 0x1d, 0x4a, 0xf7, + 0xe5, 0x76, 0xd9, 0x7f, 0xf9, 0x4b, 0x87, 0x2d, + 0xe7, 0x6f, 0x80, 0x50, 0x36, 0x1e, 0xe3, 0xdb, + }, + }, +} + +func TestSum(t *testing.T) { + for i, test := range testCases { + tag := Sum(test.msg, &test.key) + if !bytes.Equal(tag[:], test.out[:]) { + t.Errorf("#%d: Sum: got\n%x\nwant\n%x", i, tag, test.out) + } + } +} + +func TestVerify(t *testing.T) { + wrongMsg := []byte("unknown msg") + + for i, test := range testCases { + if !Verify(test.out[:], test.msg, &test.key) { + t.Errorf("#%d: Verify(%x, %q, %x) failed", i, test.out, test.msg, test.key) + } + if Verify(test.out[:], wrongMsg, &test.key) { + t.Errorf("#%d: Verify(%x, %q, %x) unexpectedly passed", i, test.out, wrongMsg, test.key) + } + } +} + +func TestStress(t *testing.T) { + if testing.Short() { + t.Skip("exhaustiveness test") + } + + var key [32]byte + msg := make([]byte, 10000) + prng := mrand.New(mrand.NewSource(0)) + + // copied from tests/auth5.c in nacl + for i := 0; i < 10000; i++ { + if _, err := rand.Read(key[:]); err != nil { + t.Fatal(err) + } + if _, err := rand.Read(msg[:i]); err != nil { + t.Fatal(err) + } + tag := Sum(msg[:i], &key) + if !Verify(tag[:], msg[:i], &key) { + t.Errorf("#%d: unexpected failure from Verify", i) + } + if i > 0 { + msgIndex := prng.Intn(i) + oldMsgByte := msg[msgIndex] + msg[msgIndex] += byte(1 + prng.Intn(255)) + if Verify(tag[:], msg[:i], &key) { + t.Errorf("#%d: unexpected success from Verify after corrupting message", i) + } + msg[msgIndex] = oldMsgByte + + tag[prng.Intn(len(tag))] += byte(1 + prng.Intn(255)) + if Verify(tag[:], msg[:i], &key) { + t.Errorf("#%d: unexpected success from Verify after corrupting authenticator", i) + } + } + } +} + +func BenchmarkAuth(b *testing.B) { + var key [32]byte + if _, err := rand.Read(key[:]); err != nil { + b.Fatal(err) + } + buf := make([]byte, 1024) + if _, err := rand.Read(buf[:]); err != nil { + b.Fatal(err) + } + + b.SetBytes(int64(len(buf))) + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + tag := Sum(buf, &key) + if Verify(tag[:], buf, &key) == false { + b.Fatal("unexpected failure from Verify") + } + } +} diff --git a/vendor/golang.org/x/crypto/nacl/auth/example_test.go b/vendor/golang.org/x/crypto/nacl/auth/example_test.go new file mode 100644 index 0000000..02a2cd6 --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/auth/example_test.go @@ -0,0 +1,36 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package auth_test + +import ( + "encoding/hex" + "fmt" + + "golang.org/x/crypto/nacl/auth" +) + +func Example() { + // Load your secret key from a safe place and reuse it across multiple + // Sum calls. (Obviously don't use this example key for anything + // real.) If you want to convert a passphrase to a key, use a suitable + // package like bcrypt or scrypt. + secretKeyBytes, err := hex.DecodeString("6368616e676520746869732070617373776f726420746f206120736563726574") + if err != nil { + panic(err) + } + + var secretKey [32]byte + copy(secretKey[:], secretKeyBytes) + + mac := auth.Sum([]byte("hello world"), &secretKey) + fmt.Printf("%x\n", *mac) + result := auth.Verify(mac[:], []byte("hello world"), &secretKey) + fmt.Println(result) + badResult := auth.Verify(mac[:], []byte("different message"), &secretKey) + fmt.Println(badResult) + // Output: eca5a521f3d77b63f567fb0cb6f5f2d200641bc8dada42f60c5f881260c30317 + // true + // false +} diff --git a/vendor/golang.org/x/crypto/nacl/box/box.go b/vendor/golang.org/x/crypto/nacl/box/box.go new file mode 100644 index 0000000..31b697b --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/box/box.go @@ -0,0 +1,103 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package box authenticates and encrypts small messages using public-key cryptography. + +Box uses Curve25519, XSalsa20 and Poly1305 to encrypt and authenticate +messages. The length of messages is not hidden. + +It is the caller's responsibility to ensure the uniqueness of nonces—for +example, by using nonce 1 for the first message, nonce 2 for the second +message, etc. Nonces are long enough that randomly generated nonces have +negligible risk of collision. + +Messages should be small because: + +1. The whole message needs to be held in memory to be processed. + +2. Using large messages pressures implementations on small machines to decrypt +and process plaintext before authenticating it. This is very dangerous, and +this API does not allow it, but a protocol that uses excessive message sizes +might present some implementations with no other choice. + +3. Fixed overheads will be sufficiently amortised by messages as small as 8KB. + +4. Performance may be improved by working with messages that fit into data caches. + +Thus large amounts of data should be chunked so that each message is small. +(Each message still needs a unique nonce.) If in doubt, 16KB is a reasonable +chunk size. + +This package is interoperable with NaCl: https://nacl.cr.yp.to/box.html. +*/ +package box // import "golang.org/x/crypto/nacl/box" + +import ( + "io" + + "golang.org/x/crypto/curve25519" + "golang.org/x/crypto/nacl/secretbox" + "golang.org/x/crypto/salsa20/salsa" +) + +// Overhead is the number of bytes of overhead when boxing a message. +const Overhead = secretbox.Overhead + +// GenerateKey generates a new public/private key pair suitable for use with +// Seal and Open. +func GenerateKey(rand io.Reader) (publicKey, privateKey *[32]byte, err error) { + publicKey = new([32]byte) + privateKey = new([32]byte) + _, err = io.ReadFull(rand, privateKey[:]) + if err != nil { + publicKey = nil + privateKey = nil + return + } + + curve25519.ScalarBaseMult(publicKey, privateKey) + return +} + +var zeros [16]byte + +// Precompute calculates the shared key between peersPublicKey and privateKey +// and writes it to sharedKey. The shared key can be used with +// OpenAfterPrecomputation and SealAfterPrecomputation to speed up processing +// when using the same pair of keys repeatedly. +func Precompute(sharedKey, peersPublicKey, privateKey *[32]byte) { + curve25519.ScalarMult(sharedKey, privateKey, peersPublicKey) + salsa.HSalsa20(sharedKey, &zeros, sharedKey, &salsa.Sigma) +} + +// Seal appends an encrypted and authenticated copy of message to out, which +// will be Overhead bytes longer than the original and must not overlap it. The +// nonce must be unique for each distinct message for a given pair of keys. +func Seal(out, message []byte, nonce *[24]byte, peersPublicKey, privateKey *[32]byte) []byte { + var sharedKey [32]byte + Precompute(&sharedKey, peersPublicKey, privateKey) + return secretbox.Seal(out, message, nonce, &sharedKey) +} + +// SealAfterPrecomputation performs the same actions as Seal, but takes a +// shared key as generated by Precompute. +func SealAfterPrecomputation(out, message []byte, nonce *[24]byte, sharedKey *[32]byte) []byte { + return secretbox.Seal(out, message, nonce, sharedKey) +} + +// Open authenticates and decrypts a box produced by Seal and appends the +// message to out, which must not overlap box. The output will be Overhead +// bytes smaller than box. +func Open(out, box []byte, nonce *[24]byte, peersPublicKey, privateKey *[32]byte) ([]byte, bool) { + var sharedKey [32]byte + Precompute(&sharedKey, peersPublicKey, privateKey) + return secretbox.Open(out, box, nonce, &sharedKey) +} + +// OpenAfterPrecomputation performs the same actions as Open, but takes a +// shared key as generated by Precompute. +func OpenAfterPrecomputation(out, box []byte, nonce *[24]byte, sharedKey *[32]byte) ([]byte, bool) { + return secretbox.Open(out, box, nonce, sharedKey) +} diff --git a/vendor/golang.org/x/crypto/nacl/box/box_test.go b/vendor/golang.org/x/crypto/nacl/box/box_test.go new file mode 100644 index 0000000..481ade2 --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/box/box_test.go @@ -0,0 +1,78 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package box + +import ( + "bytes" + "crypto/rand" + "encoding/hex" + "testing" + + "golang.org/x/crypto/curve25519" +) + +func TestSealOpen(t *testing.T) { + publicKey1, privateKey1, _ := GenerateKey(rand.Reader) + publicKey2, privateKey2, _ := GenerateKey(rand.Reader) + + if *privateKey1 == *privateKey2 { + t.Fatalf("private keys are equal!") + } + if *publicKey1 == *publicKey2 { + t.Fatalf("public keys are equal!") + } + message := []byte("test message") + var nonce [24]byte + + box := Seal(nil, message, &nonce, publicKey1, privateKey2) + opened, ok := Open(nil, box, &nonce, publicKey2, privateKey1) + if !ok { + t.Fatalf("failed to open box") + } + + if !bytes.Equal(opened, message) { + t.Fatalf("got %x, want %x", opened, message) + } + + for i := range box { + box[i] ^= 0x40 + _, ok := Open(nil, box, &nonce, publicKey2, privateKey1) + if ok { + t.Fatalf("opened box with byte %d corrupted", i) + } + box[i] ^= 0x40 + } +} + +func TestBox(t *testing.T) { + var privateKey1, privateKey2 [32]byte + for i := range privateKey1[:] { + privateKey1[i] = 1 + } + for i := range privateKey2[:] { + privateKey2[i] = 2 + } + + var publicKey1 [32]byte + curve25519.ScalarBaseMult(&publicKey1, &privateKey1) + var message [64]byte + for i := range message[:] { + message[i] = 3 + } + + var nonce [24]byte + for i := range nonce[:] { + nonce[i] = 4 + } + + box := Seal(nil, message[:], &nonce, &publicKey1, &privateKey2) + + // expected was generated using the C implementation of NaCl. + expected, _ := hex.DecodeString("78ea30b19d2341ebbdba54180f821eec265cf86312549bea8a37652a8bb94f07b78a73ed1708085e6ddd0e943bbdeb8755079a37eb31d86163ce241164a47629c0539f330b4914cd135b3855bc2a2dfc") + + if !bytes.Equal(box, expected) { + t.Fatalf("box didn't match, got\n%x\n, expected\n%x", box, expected) + } +} diff --git a/vendor/golang.org/x/crypto/nacl/box/example_test.go b/vendor/golang.org/x/crypto/nacl/box/example_test.go new file mode 100644 index 0000000..25e42d2 --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/box/example_test.go @@ -0,0 +1,95 @@ +package box_test + +import ( + crypto_rand "crypto/rand" // Custom so it's clear which rand we're using. + "fmt" + "io" + + "golang.org/x/crypto/nacl/box" +) + +func Example() { + senderPublicKey, senderPrivateKey, err := box.GenerateKey(crypto_rand.Reader) + if err != nil { + panic(err) + } + + recipientPublicKey, recipientPrivateKey, err := box.GenerateKey(crypto_rand.Reader) + if err != nil { + panic(err) + } + + // You must use a different nonce for each message you encrypt with the + // same key. Since the nonce here is 192 bits long, a random value + // provides a sufficiently small probability of repeats. + var nonce [24]byte + if _, err := io.ReadFull(crypto_rand.Reader, nonce[:]); err != nil { + panic(err) + } + + msg := []byte("Alas, poor Yorick! I knew him, Horatio") + // This encrypts msg and appends the result to the nonce. + encrypted := box.Seal(nonce[:], msg, &nonce, recipientPublicKey, senderPrivateKey) + + // The recipient can decrypt the message using their private key and the + // sender's public key. When you decrypt, you must use the same nonce you + // used to encrypt the message. One way to achieve this is to store the + // nonce alongside the encrypted message. Above, we stored the nonce in the + // first 24 bytes of the encrypted text. + var decryptNonce [24]byte + copy(decryptNonce[:], encrypted[:24]) + decrypted, ok := box.Open(nil, encrypted[24:], &decryptNonce, senderPublicKey, recipientPrivateKey) + if !ok { + panic("decryption error") + } + fmt.Println(string(decrypted)) + // Output: Alas, poor Yorick! I knew him, Horatio +} + +func Example_precompute() { + senderPublicKey, senderPrivateKey, err := box.GenerateKey(crypto_rand.Reader) + if err != nil { + panic(err) + } + + recipientPublicKey, recipientPrivateKey, err := box.GenerateKey(crypto_rand.Reader) + if err != nil { + panic(err) + } + + // The shared key can be used to speed up processing when using the same + // pair of keys repeatedly. + sharedEncryptKey := new([32]byte) + box.Precompute(sharedEncryptKey, recipientPublicKey, senderPrivateKey) + + // You must use a different nonce for each message you encrypt with the + // same key. Since the nonce here is 192 bits long, a random value + // provides a sufficiently small probability of repeats. + var nonce [24]byte + if _, err := io.ReadFull(crypto_rand.Reader, nonce[:]); err != nil { + panic(err) + } + + msg := []byte("A fellow of infinite jest, of most excellent fancy") + // This encrypts msg and appends the result to the nonce. + encrypted := box.SealAfterPrecomputation(nonce[:], msg, &nonce, sharedEncryptKey) + + // The shared key can be used to speed up processing when using the same + // pair of keys repeatedly. + var sharedDecryptKey [32]byte + box.Precompute(&sharedDecryptKey, senderPublicKey, recipientPrivateKey) + + // The recipient can decrypt the message using the shared key. When you + // decrypt, you must use the same nonce you used to encrypt the message. + // One way to achieve this is to store the nonce alongside the encrypted + // message. Above, we stored the nonce in the first 24 bytes of the + // encrypted text. + var decryptNonce [24]byte + copy(decryptNonce[:], encrypted[:24]) + decrypted, ok := box.OpenAfterPrecomputation(nil, encrypted[24:], &decryptNonce, &sharedDecryptKey) + if !ok { + panic("decryption error") + } + fmt.Println(string(decrypted)) + // Output: A fellow of infinite jest, of most excellent fancy +} diff --git a/vendor/golang.org/x/crypto/nacl/secretbox/example_test.go b/vendor/golang.org/x/crypto/nacl/secretbox/example_test.go new file mode 100644 index 0000000..789f4ff --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/secretbox/example_test.go @@ -0,0 +1,53 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package secretbox_test + +import ( + "crypto/rand" + "encoding/hex" + "fmt" + "io" + + "golang.org/x/crypto/nacl/secretbox" +) + +func Example() { + // Load your secret key from a safe place and reuse it across multiple + // Seal calls. (Obviously don't use this example key for anything + // real.) If you want to convert a passphrase to a key, use a suitable + // package like bcrypt or scrypt. + secretKeyBytes, err := hex.DecodeString("6368616e676520746869732070617373776f726420746f206120736563726574") + if err != nil { + panic(err) + } + + var secretKey [32]byte + copy(secretKey[:], secretKeyBytes) + + // You must use a different nonce for each message you encrypt with the + // same key. Since the nonce here is 192 bits long, a random value + // provides a sufficiently small probability of repeats. + var nonce [24]byte + if _, err := io.ReadFull(rand.Reader, nonce[:]); err != nil { + panic(err) + } + + // This encrypts "hello world" and appends the result to the nonce. + encrypted := secretbox.Seal(nonce[:], []byte("hello world"), &nonce, &secretKey) + + // When you decrypt, you must use the same nonce and key you used to + // encrypt the message. One way to achieve this is to store the nonce + // alongside the encrypted message. Above, we stored the nonce in the first + // 24 bytes of the encrypted text. + var decryptNonce [24]byte + copy(decryptNonce[:], encrypted[:24]) + decrypted, ok := secretbox.Open(nil, encrypted[24:], &decryptNonce, &secretKey) + if !ok { + panic("decryption error") + } + + fmt.Println(string(decrypted)) + // Output: hello world +} diff --git a/vendor/golang.org/x/crypto/nacl/secretbox/secretbox.go b/vendor/golang.org/x/crypto/nacl/secretbox/secretbox.go new file mode 100644 index 0000000..53ee83c --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/secretbox/secretbox.go @@ -0,0 +1,166 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package secretbox encrypts and authenticates small messages. + +Secretbox uses XSalsa20 and Poly1305 to encrypt and authenticate messages with +secret-key cryptography. The length of messages is not hidden. + +It is the caller's responsibility to ensure the uniqueness of nonces—for +example, by using nonce 1 for the first message, nonce 2 for the second +message, etc. Nonces are long enough that randomly generated nonces have +negligible risk of collision. + +Messages should be small because: + +1. The whole message needs to be held in memory to be processed. + +2. Using large messages pressures implementations on small machines to decrypt +and process plaintext before authenticating it. This is very dangerous, and +this API does not allow it, but a protocol that uses excessive message sizes +might present some implementations with no other choice. + +3. Fixed overheads will be sufficiently amortised by messages as small as 8KB. + +4. Performance may be improved by working with messages that fit into data caches. + +Thus large amounts of data should be chunked so that each message is small. +(Each message still needs a unique nonce.) If in doubt, 16KB is a reasonable +chunk size. + +This package is interoperable with NaCl: https://nacl.cr.yp.to/secretbox.html. +*/ +package secretbox // import "golang.org/x/crypto/nacl/secretbox" + +import ( + "golang.org/x/crypto/poly1305" + "golang.org/x/crypto/salsa20/salsa" +) + +// Overhead is the number of bytes of overhead when boxing a message. +const Overhead = poly1305.TagSize + +// setup produces a sub-key and Salsa20 counter given a nonce and key. +func setup(subKey *[32]byte, counter *[16]byte, nonce *[24]byte, key *[32]byte) { + // We use XSalsa20 for encryption so first we need to generate a + // key and nonce with HSalsa20. + var hNonce [16]byte + copy(hNonce[:], nonce[:]) + salsa.HSalsa20(subKey, &hNonce, key, &salsa.Sigma) + + // The final 8 bytes of the original nonce form the new nonce. + copy(counter[:], nonce[16:]) +} + +// sliceForAppend takes a slice and a requested number of bytes. It returns a +// slice with the contents of the given slice followed by that many bytes and a +// second slice that aliases into it and contains only the extra bytes. If the +// original slice has sufficient capacity then no allocation is performed. +func sliceForAppend(in []byte, n int) (head, tail []byte) { + if total := len(in) + n; cap(in) >= total { + head = in[:total] + } else { + head = make([]byte, total) + copy(head, in) + } + tail = head[len(in):] + return +} + +// Seal appends an encrypted and authenticated copy of message to out, which +// must not overlap message. The key and nonce pair must be unique for each +// distinct message and the output will be Overhead bytes longer than message. +func Seal(out, message []byte, nonce *[24]byte, key *[32]byte) []byte { + var subKey [32]byte + var counter [16]byte + setup(&subKey, &counter, nonce, key) + + // The Poly1305 key is generated by encrypting 32 bytes of zeros. Since + // Salsa20 works with 64-byte blocks, we also generate 32 bytes of + // keystream as a side effect. + var firstBlock [64]byte + salsa.XORKeyStream(firstBlock[:], firstBlock[:], &counter, &subKey) + + var poly1305Key [32]byte + copy(poly1305Key[:], firstBlock[:]) + + ret, out := sliceForAppend(out, len(message)+poly1305.TagSize) + + // We XOR up to 32 bytes of message with the keystream generated from + // the first block. + firstMessageBlock := message + if len(firstMessageBlock) > 32 { + firstMessageBlock = firstMessageBlock[:32] + } + + tagOut := out + out = out[poly1305.TagSize:] + for i, x := range firstMessageBlock { + out[i] = firstBlock[32+i] ^ x + } + message = message[len(firstMessageBlock):] + ciphertext := out + out = out[len(firstMessageBlock):] + + // Now encrypt the rest. + counter[8] = 1 + salsa.XORKeyStream(out, message, &counter, &subKey) + + var tag [poly1305.TagSize]byte + poly1305.Sum(&tag, ciphertext, &poly1305Key) + copy(tagOut, tag[:]) + + return ret +} + +// Open authenticates and decrypts a box produced by Seal and appends the +// message to out, which must not overlap box. The output will be Overhead +// bytes smaller than box. +func Open(out []byte, box []byte, nonce *[24]byte, key *[32]byte) ([]byte, bool) { + if len(box) < Overhead { + return nil, false + } + + var subKey [32]byte + var counter [16]byte + setup(&subKey, &counter, nonce, key) + + // The Poly1305 key is generated by encrypting 32 bytes of zeros. Since + // Salsa20 works with 64-byte blocks, we also generate 32 bytes of + // keystream as a side effect. + var firstBlock [64]byte + salsa.XORKeyStream(firstBlock[:], firstBlock[:], &counter, &subKey) + + var poly1305Key [32]byte + copy(poly1305Key[:], firstBlock[:]) + var tag [poly1305.TagSize]byte + copy(tag[:], box) + + if !poly1305.Verify(&tag, box[poly1305.TagSize:], &poly1305Key) { + return nil, false + } + + ret, out := sliceForAppend(out, len(box)-Overhead) + + // We XOR up to 32 bytes of box with the keystream generated from + // the first block. + box = box[Overhead:] + firstMessageBlock := box + if len(firstMessageBlock) > 32 { + firstMessageBlock = firstMessageBlock[:32] + } + for i, x := range firstMessageBlock { + out[i] = firstBlock[32+i] ^ x + } + + box = box[len(firstMessageBlock):] + out = out[len(firstMessageBlock):] + + // Now decrypt the rest. + counter[8] = 1 + salsa.XORKeyStream(out, box, &counter, &subKey) + + return ret, true +} diff --git a/vendor/golang.org/x/crypto/nacl/secretbox/secretbox_test.go b/vendor/golang.org/x/crypto/nacl/secretbox/secretbox_test.go new file mode 100644 index 0000000..3c70b0f --- /dev/null +++ b/vendor/golang.org/x/crypto/nacl/secretbox/secretbox_test.go @@ -0,0 +1,154 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package secretbox + +import ( + "bytes" + "crypto/rand" + "encoding/hex" + "testing" +) + +func TestSealOpen(t *testing.T) { + var key [32]byte + var nonce [24]byte + + rand.Reader.Read(key[:]) + rand.Reader.Read(nonce[:]) + + var box, opened []byte + + for msgLen := 0; msgLen < 128; msgLen += 17 { + message := make([]byte, msgLen) + rand.Reader.Read(message) + + box = Seal(box[:0], message, &nonce, &key) + var ok bool + opened, ok = Open(opened[:0], box, &nonce, &key) + if !ok { + t.Errorf("%d: failed to open box", msgLen) + continue + } + + if !bytes.Equal(opened, message) { + t.Errorf("%d: got %x, expected %x", msgLen, opened, message) + continue + } + } + + for i := range box { + box[i] ^= 0x20 + _, ok := Open(opened[:0], box, &nonce, &key) + if ok { + t.Errorf("box was opened after corrupting byte %d", i) + } + box[i] ^= 0x20 + } +} + +func TestSecretBox(t *testing.T) { + var key [32]byte + var nonce [24]byte + var message [64]byte + + for i := range key[:] { + key[i] = 1 + } + for i := range nonce[:] { + nonce[i] = 2 + } + for i := range message[:] { + message[i] = 3 + } + + box := Seal(nil, message[:], &nonce, &key) + // expected was generated using the C implementation of NaCl. + expected, _ := hex.DecodeString("8442bc313f4626f1359e3b50122b6ce6fe66ddfe7d39d14e637eb4fd5b45beadab55198df6ab5368439792a23c87db70acb6156dc5ef957ac04f6276cf6093b84be77ff0849cc33e34b7254d5a8f65ad") + + if !bytes.Equal(box, expected) { + t.Fatalf("box didn't match, got\n%x\n, expected\n%x", box, expected) + } +} + +func TestAppend(t *testing.T) { + var key [32]byte + var nonce [24]byte + var message [8]byte + + out := make([]byte, 4) + box := Seal(out, message[:], &nonce, &key) + if !bytes.Equal(box[:4], out[:4]) { + t.Fatalf("Seal didn't correctly append") + } + + out = make([]byte, 4, 100) + box = Seal(out, message[:], &nonce, &key) + if !bytes.Equal(box[:4], out[:4]) { + t.Fatalf("Seal didn't correctly append with sufficient capacity.") + } +} + +func benchmarkSealSize(b *testing.B, size int) { + message := make([]byte, size) + out := make([]byte, size+Overhead) + var nonce [24]byte + var key [32]byte + + b.SetBytes(int64(size)) + b.ResetTimer() + + for i := 0; i < b.N; i++ { + out = Seal(out[:0], message, &nonce, &key) + } +} + +func BenchmarkSeal8Bytes(b *testing.B) { + benchmarkSealSize(b, 8) +} + +func BenchmarkSeal100Bytes(b *testing.B) { + benchmarkSealSize(b, 100) +} + +func BenchmarkSeal1K(b *testing.B) { + benchmarkSealSize(b, 1024) +} + +func BenchmarkSeal8K(b *testing.B) { + benchmarkSealSize(b, 8192) +} + +func benchmarkOpenSize(b *testing.B, size int) { + msg := make([]byte, size) + result := make([]byte, size) + var nonce [24]byte + var key [32]byte + box := Seal(nil, msg, &nonce, &key) + + b.SetBytes(int64(size)) + b.ResetTimer() + + for i := 0; i < b.N; i++ { + if _, ok := Open(result[:0], box, &nonce, &key); !ok { + panic("Open failed") + } + } +} + +func BenchmarkOpen8Bytes(b *testing.B) { + benchmarkOpenSize(b, 8) +} + +func BenchmarkOpen100Bytes(b *testing.B) { + benchmarkOpenSize(b, 100) +} + +func BenchmarkOpen1K(b *testing.B) { + benchmarkOpenSize(b, 1024) +} + +func BenchmarkOpen8K(b *testing.B) { + benchmarkOpenSize(b, 8192) +} diff --git a/vendor/golang.org/x/crypto/ocsp/ocsp.go b/vendor/golang.org/x/crypto/ocsp/ocsp.go new file mode 100644 index 0000000..5e73146 --- /dev/null +++ b/vendor/golang.org/x/crypto/ocsp/ocsp.go @@ -0,0 +1,778 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ocsp parses OCSP responses as specified in RFC 2560. OCSP responses +// are signed messages attesting to the validity of a certificate for a small +// period of time. This is used to manage revocation for X.509 certificates. +package ocsp // import "golang.org/x/crypto/ocsp" + +import ( + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + _ "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" + "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" + "errors" + "fmt" + "math/big" + "strconv" + "time" +) + +var idPKIXOCSPBasic = asn1.ObjectIdentifier([]int{1, 3, 6, 1, 5, 5, 7, 48, 1, 1}) + +// ResponseStatus contains the result of an OCSP request. See +// https://tools.ietf.org/html/rfc6960#section-2.3 +type ResponseStatus int + +const ( + Success ResponseStatus = 0 + Malformed ResponseStatus = 1 + InternalError ResponseStatus = 2 + TryLater ResponseStatus = 3 + // Status code four is unused in OCSP. See + // https://tools.ietf.org/html/rfc6960#section-4.2.1 + SignatureRequired ResponseStatus = 5 + Unauthorized ResponseStatus = 6 +) + +func (r ResponseStatus) String() string { + switch r { + case Success: + return "success" + case Malformed: + return "malformed" + case InternalError: + return "internal error" + case TryLater: + return "try later" + case SignatureRequired: + return "signature required" + case Unauthorized: + return "unauthorized" + default: + return "unknown OCSP status: " + strconv.Itoa(int(r)) + } +} + +// ResponseError is an error that may be returned by ParseResponse to indicate +// that the response itself is an error, not just that its indicating that a +// certificate is revoked, unknown, etc. +type ResponseError struct { + Status ResponseStatus +} + +func (r ResponseError) Error() string { + return "ocsp: error from server: " + r.Status.String() +} + +// These are internal structures that reflect the ASN.1 structure of an OCSP +// response. See RFC 2560, section 4.2. + +type certID struct { + HashAlgorithm pkix.AlgorithmIdentifier + NameHash []byte + IssuerKeyHash []byte + SerialNumber *big.Int +} + +// https://tools.ietf.org/html/rfc2560#section-4.1.1 +type ocspRequest struct { + TBSRequest tbsRequest +} + +type tbsRequest struct { + Version int `asn1:"explicit,tag:0,default:0,optional"` + RequestorName pkix.RDNSequence `asn1:"explicit,tag:1,optional"` + RequestList []request +} + +type request struct { + Cert certID +} + +type responseASN1 struct { + Status asn1.Enumerated + Response responseBytes `asn1:"explicit,tag:0,optional"` +} + +type responseBytes struct { + ResponseType asn1.ObjectIdentifier + Response []byte +} + +type basicResponse struct { + TBSResponseData responseData + SignatureAlgorithm pkix.AlgorithmIdentifier + Signature asn1.BitString + Certificates []asn1.RawValue `asn1:"explicit,tag:0,optional"` +} + +type responseData struct { + Raw asn1.RawContent + Version int `asn1:"optional,default:0,explicit,tag:0"` + RawResponderID asn1.RawValue + ProducedAt time.Time `asn1:"generalized"` + Responses []singleResponse +} + +type singleResponse struct { + CertID certID + Good asn1.Flag `asn1:"tag:0,optional"` + Revoked revokedInfo `asn1:"tag:1,optional"` + Unknown asn1.Flag `asn1:"tag:2,optional"` + ThisUpdate time.Time `asn1:"generalized"` + NextUpdate time.Time `asn1:"generalized,explicit,tag:0,optional"` + SingleExtensions []pkix.Extension `asn1:"explicit,tag:1,optional"` +} + +type revokedInfo struct { + RevocationTime time.Time `asn1:"generalized"` + Reason asn1.Enumerated `asn1:"explicit,tag:0,optional"` +} + +var ( + oidSignatureMD2WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 2} + oidSignatureMD5WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 4} + oidSignatureSHA1WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 5} + oidSignatureSHA256WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 11} + oidSignatureSHA384WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 12} + oidSignatureSHA512WithRSA = asn1.ObjectIdentifier{1, 2, 840, 113549, 1, 1, 13} + oidSignatureDSAWithSHA1 = asn1.ObjectIdentifier{1, 2, 840, 10040, 4, 3} + oidSignatureDSAWithSHA256 = asn1.ObjectIdentifier{2, 16, 840, 1, 101, 3, 4, 3, 2} + oidSignatureECDSAWithSHA1 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 1} + oidSignatureECDSAWithSHA256 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 2} + oidSignatureECDSAWithSHA384 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 3} + oidSignatureECDSAWithSHA512 = asn1.ObjectIdentifier{1, 2, 840, 10045, 4, 3, 4} +) + +var hashOIDs = map[crypto.Hash]asn1.ObjectIdentifier{ + crypto.SHA1: asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26}), + crypto.SHA256: asn1.ObjectIdentifier([]int{2, 16, 840, 1, 101, 3, 4, 2, 1}), + crypto.SHA384: asn1.ObjectIdentifier([]int{2, 16, 840, 1, 101, 3, 4, 2, 2}), + crypto.SHA512: asn1.ObjectIdentifier([]int{2, 16, 840, 1, 101, 3, 4, 2, 3}), +} + +// TODO(rlb): This is also from crypto/x509, so same comment as AGL's below +var signatureAlgorithmDetails = []struct { + algo x509.SignatureAlgorithm + oid asn1.ObjectIdentifier + pubKeyAlgo x509.PublicKeyAlgorithm + hash crypto.Hash +}{ + {x509.MD2WithRSA, oidSignatureMD2WithRSA, x509.RSA, crypto.Hash(0) /* no value for MD2 */}, + {x509.MD5WithRSA, oidSignatureMD5WithRSA, x509.RSA, crypto.MD5}, + {x509.SHA1WithRSA, oidSignatureSHA1WithRSA, x509.RSA, crypto.SHA1}, + {x509.SHA256WithRSA, oidSignatureSHA256WithRSA, x509.RSA, crypto.SHA256}, + {x509.SHA384WithRSA, oidSignatureSHA384WithRSA, x509.RSA, crypto.SHA384}, + {x509.SHA512WithRSA, oidSignatureSHA512WithRSA, x509.RSA, crypto.SHA512}, + {x509.DSAWithSHA1, oidSignatureDSAWithSHA1, x509.DSA, crypto.SHA1}, + {x509.DSAWithSHA256, oidSignatureDSAWithSHA256, x509.DSA, crypto.SHA256}, + {x509.ECDSAWithSHA1, oidSignatureECDSAWithSHA1, x509.ECDSA, crypto.SHA1}, + {x509.ECDSAWithSHA256, oidSignatureECDSAWithSHA256, x509.ECDSA, crypto.SHA256}, + {x509.ECDSAWithSHA384, oidSignatureECDSAWithSHA384, x509.ECDSA, crypto.SHA384}, + {x509.ECDSAWithSHA512, oidSignatureECDSAWithSHA512, x509.ECDSA, crypto.SHA512}, +} + +// TODO(rlb): This is also from crypto/x509, so same comment as AGL's below +func signingParamsForPublicKey(pub interface{}, requestedSigAlgo x509.SignatureAlgorithm) (hashFunc crypto.Hash, sigAlgo pkix.AlgorithmIdentifier, err error) { + var pubType x509.PublicKeyAlgorithm + + switch pub := pub.(type) { + case *rsa.PublicKey: + pubType = x509.RSA + hashFunc = crypto.SHA256 + sigAlgo.Algorithm = oidSignatureSHA256WithRSA + sigAlgo.Parameters = asn1.RawValue{ + Tag: 5, + } + + case *ecdsa.PublicKey: + pubType = x509.ECDSA + + switch pub.Curve { + case elliptic.P224(), elliptic.P256(): + hashFunc = crypto.SHA256 + sigAlgo.Algorithm = oidSignatureECDSAWithSHA256 + case elliptic.P384(): + hashFunc = crypto.SHA384 + sigAlgo.Algorithm = oidSignatureECDSAWithSHA384 + case elliptic.P521(): + hashFunc = crypto.SHA512 + sigAlgo.Algorithm = oidSignatureECDSAWithSHA512 + default: + err = errors.New("x509: unknown elliptic curve") + } + + default: + err = errors.New("x509: only RSA and ECDSA keys supported") + } + + if err != nil { + return + } + + if requestedSigAlgo == 0 { + return + } + + found := false + for _, details := range signatureAlgorithmDetails { + if details.algo == requestedSigAlgo { + if details.pubKeyAlgo != pubType { + err = errors.New("x509: requested SignatureAlgorithm does not match private key type") + return + } + sigAlgo.Algorithm, hashFunc = details.oid, details.hash + if hashFunc == 0 { + err = errors.New("x509: cannot sign with hash function requested") + return + } + found = true + break + } + } + + if !found { + err = errors.New("x509: unknown SignatureAlgorithm") + } + + return +} + +// TODO(agl): this is taken from crypto/x509 and so should probably be exported +// from crypto/x509 or crypto/x509/pkix. +func getSignatureAlgorithmFromOID(oid asn1.ObjectIdentifier) x509.SignatureAlgorithm { + for _, details := range signatureAlgorithmDetails { + if oid.Equal(details.oid) { + return details.algo + } + } + return x509.UnknownSignatureAlgorithm +} + +// TODO(rlb): This is not taken from crypto/x509, but it's of the same general form. +func getHashAlgorithmFromOID(target asn1.ObjectIdentifier) crypto.Hash { + for hash, oid := range hashOIDs { + if oid.Equal(target) { + return hash + } + } + return crypto.Hash(0) +} + +func getOIDFromHashAlgorithm(target crypto.Hash) asn1.ObjectIdentifier { + for hash, oid := range hashOIDs { + if hash == target { + return oid + } + } + return nil +} + +// This is the exposed reflection of the internal OCSP structures. + +// The status values that can be expressed in OCSP. See RFC 6960. +const ( + // Good means that the certificate is valid. + Good = iota + // Revoked means that the certificate has been deliberately revoked. + Revoked + // Unknown means that the OCSP responder doesn't know about the certificate. + Unknown + // ServerFailed is unused and was never used (see + // https://go-review.googlesource.com/#/c/18944). ParseResponse will + // return a ResponseError when an error response is parsed. + ServerFailed +) + +// The enumerated reasons for revoking a certificate. See RFC 5280. +const ( + Unspecified = 0 + KeyCompromise = 1 + CACompromise = 2 + AffiliationChanged = 3 + Superseded = 4 + CessationOfOperation = 5 + CertificateHold = 6 + + RemoveFromCRL = 8 + PrivilegeWithdrawn = 9 + AACompromise = 10 +) + +// Request represents an OCSP request. See RFC 6960. +type Request struct { + HashAlgorithm crypto.Hash + IssuerNameHash []byte + IssuerKeyHash []byte + SerialNumber *big.Int +} + +// Marshal marshals the OCSP request to ASN.1 DER encoded form. +func (req *Request) Marshal() ([]byte, error) { + hashAlg := getOIDFromHashAlgorithm(req.HashAlgorithm) + if hashAlg == nil { + return nil, errors.New("Unknown hash algorithm") + } + return asn1.Marshal(ocspRequest{ + tbsRequest{ + Version: 0, + RequestList: []request{ + { + Cert: certID{ + pkix.AlgorithmIdentifier{ + Algorithm: hashAlg, + Parameters: asn1.RawValue{Tag: 5 /* ASN.1 NULL */}, + }, + req.IssuerNameHash, + req.IssuerKeyHash, + req.SerialNumber, + }, + }, + }, + }, + }) +} + +// Response represents an OCSP response containing a single SingleResponse. See +// RFC 6960. +type Response struct { + // Status is one of {Good, Revoked, Unknown} + Status int + SerialNumber *big.Int + ProducedAt, ThisUpdate, NextUpdate, RevokedAt time.Time + RevocationReason int + Certificate *x509.Certificate + // TBSResponseData contains the raw bytes of the signed response. If + // Certificate is nil then this can be used to verify Signature. + TBSResponseData []byte + Signature []byte + SignatureAlgorithm x509.SignatureAlgorithm + + // IssuerHash is the hash used to compute the IssuerNameHash and IssuerKeyHash. + // Valid values are crypto.SHA1, crypto.SHA256, crypto.SHA384, and crypto.SHA512. + // If zero, the default is crypto.SHA1. + IssuerHash crypto.Hash + + // RawResponderName optionally contains the DER-encoded subject of the + // responder certificate. Exactly one of RawResponderName and + // ResponderKeyHash is set. + RawResponderName []byte + // ResponderKeyHash optionally contains the SHA-1 hash of the + // responder's public key. Exactly one of RawResponderName and + // ResponderKeyHash is set. + ResponderKeyHash []byte + + // Extensions contains raw X.509 extensions from the singleExtensions field + // of the OCSP response. When parsing certificates, this can be used to + // extract non-critical extensions that are not parsed by this package. When + // marshaling OCSP responses, the Extensions field is ignored, see + // ExtraExtensions. + Extensions []pkix.Extension + + // ExtraExtensions contains extensions to be copied, raw, into any marshaled + // OCSP response (in the singleExtensions field). Values override any + // extensions that would otherwise be produced based on the other fields. The + // ExtraExtensions field is not populated when parsing certificates, see + // Extensions. + ExtraExtensions []pkix.Extension +} + +// These are pre-serialized error responses for the various non-success codes +// defined by OCSP. The Unauthorized code in particular can be used by an OCSP +// responder that supports only pre-signed responses as a response to requests +// for certificates with unknown status. See RFC 5019. +var ( + MalformedRequestErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x01} + InternalErrorErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x02} + TryLaterErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x03} + SigRequredErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x05} + UnauthorizedErrorResponse = []byte{0x30, 0x03, 0x0A, 0x01, 0x06} +) + +// CheckSignatureFrom checks that the signature in resp is a valid signature +// from issuer. This should only be used if resp.Certificate is nil. Otherwise, +// the OCSP response contained an intermediate certificate that created the +// signature. That signature is checked by ParseResponse and only +// resp.Certificate remains to be validated. +func (resp *Response) CheckSignatureFrom(issuer *x509.Certificate) error { + return issuer.CheckSignature(resp.SignatureAlgorithm, resp.TBSResponseData, resp.Signature) +} + +// ParseError results from an invalid OCSP response. +type ParseError string + +func (p ParseError) Error() string { + return string(p) +} + +// ParseRequest parses an OCSP request in DER form. It only supports +// requests for a single certificate. Signed requests are not supported. +// If a request includes a signature, it will result in a ParseError. +func ParseRequest(bytes []byte) (*Request, error) { + var req ocspRequest + rest, err := asn1.Unmarshal(bytes, &req) + if err != nil { + return nil, err + } + if len(rest) > 0 { + return nil, ParseError("trailing data in OCSP request") + } + + if len(req.TBSRequest.RequestList) == 0 { + return nil, ParseError("OCSP request contains no request body") + } + innerRequest := req.TBSRequest.RequestList[0] + + hashFunc := getHashAlgorithmFromOID(innerRequest.Cert.HashAlgorithm.Algorithm) + if hashFunc == crypto.Hash(0) { + return nil, ParseError("OCSP request uses unknown hash function") + } + + return &Request{ + HashAlgorithm: hashFunc, + IssuerNameHash: innerRequest.Cert.NameHash, + IssuerKeyHash: innerRequest.Cert.IssuerKeyHash, + SerialNumber: innerRequest.Cert.SerialNumber, + }, nil +} + +// ParseResponse parses an OCSP response in DER form. It only supports +// responses for a single certificate. If the response contains a certificate +// then the signature over the response is checked. If issuer is not nil then +// it will be used to validate the signature or embedded certificate. +// +// Invalid responses and parse failures will result in a ParseError. +// Error responses will result in a ResponseError. +func ParseResponse(bytes []byte, issuer *x509.Certificate) (*Response, error) { + return ParseResponseForCert(bytes, nil, issuer) +} + +// ParseResponseForCert parses an OCSP response in DER form and searches for a +// Response relating to cert. If such a Response is found and the OCSP response +// contains a certificate then the signature over the response is checked. If +// issuer is not nil then it will be used to validate the signature or embedded +// certificate. +// +// Invalid responses and parse failures will result in a ParseError. +// Error responses will result in a ResponseError. +func ParseResponseForCert(bytes []byte, cert, issuer *x509.Certificate) (*Response, error) { + var resp responseASN1 + rest, err := asn1.Unmarshal(bytes, &resp) + if err != nil { + return nil, err + } + if len(rest) > 0 { + return nil, ParseError("trailing data in OCSP response") + } + + if status := ResponseStatus(resp.Status); status != Success { + return nil, ResponseError{status} + } + + if !resp.Response.ResponseType.Equal(idPKIXOCSPBasic) { + return nil, ParseError("bad OCSP response type") + } + + var basicResp basicResponse + rest, err = asn1.Unmarshal(resp.Response.Response, &basicResp) + if err != nil { + return nil, err + } + + if len(basicResp.Certificates) > 1 { + return nil, ParseError("OCSP response contains bad number of certificates") + } + + if n := len(basicResp.TBSResponseData.Responses); n == 0 || cert == nil && n > 1 { + return nil, ParseError("OCSP response contains bad number of responses") + } + + var singleResp singleResponse + if cert == nil { + singleResp = basicResp.TBSResponseData.Responses[0] + } else { + match := false + for _, resp := range basicResp.TBSResponseData.Responses { + if cert.SerialNumber.Cmp(resp.CertID.SerialNumber) == 0 { + singleResp = resp + match = true + break + } + } + if !match { + return nil, ParseError("no response matching the supplied certificate") + } + } + + ret := &Response{ + TBSResponseData: basicResp.TBSResponseData.Raw, + Signature: basicResp.Signature.RightAlign(), + SignatureAlgorithm: getSignatureAlgorithmFromOID(basicResp.SignatureAlgorithm.Algorithm), + Extensions: singleResp.SingleExtensions, + SerialNumber: singleResp.CertID.SerialNumber, + ProducedAt: basicResp.TBSResponseData.ProducedAt, + ThisUpdate: singleResp.ThisUpdate, + NextUpdate: singleResp.NextUpdate, + } + + // Handle the ResponderID CHOICE tag. ResponderID can be flattened into + // TBSResponseData once https://go-review.googlesource.com/34503 has been + // released. + rawResponderID := basicResp.TBSResponseData.RawResponderID + switch rawResponderID.Tag { + case 1: // Name + var rdn pkix.RDNSequence + if rest, err := asn1.Unmarshal(rawResponderID.Bytes, &rdn); err != nil || len(rest) != 0 { + return nil, ParseError("invalid responder name") + } + ret.RawResponderName = rawResponderID.Bytes + case 2: // KeyHash + if rest, err := asn1.Unmarshal(rawResponderID.Bytes, &ret.ResponderKeyHash); err != nil || len(rest) != 0 { + return nil, ParseError("invalid responder key hash") + } + default: + return nil, ParseError("invalid responder id tag") + } + + if len(basicResp.Certificates) > 0 { + ret.Certificate, err = x509.ParseCertificate(basicResp.Certificates[0].FullBytes) + if err != nil { + return nil, err + } + + if err := ret.CheckSignatureFrom(ret.Certificate); err != nil { + return nil, ParseError("bad signature on embedded certificate: " + err.Error()) + } + + if issuer != nil { + if err := issuer.CheckSignature(ret.Certificate.SignatureAlgorithm, ret.Certificate.RawTBSCertificate, ret.Certificate.Signature); err != nil { + return nil, ParseError("bad OCSP signature: " + err.Error()) + } + } + } else if issuer != nil { + if err := ret.CheckSignatureFrom(issuer); err != nil { + return nil, ParseError("bad OCSP signature: " + err.Error()) + } + } + + for _, ext := range singleResp.SingleExtensions { + if ext.Critical { + return nil, ParseError("unsupported critical extension") + } + } + + for h, oid := range hashOIDs { + if singleResp.CertID.HashAlgorithm.Algorithm.Equal(oid) { + ret.IssuerHash = h + break + } + } + if ret.IssuerHash == 0 { + return nil, ParseError("unsupported issuer hash algorithm") + } + + switch { + case bool(singleResp.Good): + ret.Status = Good + case bool(singleResp.Unknown): + ret.Status = Unknown + default: + ret.Status = Revoked + ret.RevokedAt = singleResp.Revoked.RevocationTime + ret.RevocationReason = int(singleResp.Revoked.Reason) + } + + return ret, nil +} + +// RequestOptions contains options for constructing OCSP requests. +type RequestOptions struct { + // Hash contains the hash function that should be used when + // constructing the OCSP request. If zero, SHA-1 will be used. + Hash crypto.Hash +} + +func (opts *RequestOptions) hash() crypto.Hash { + if opts == nil || opts.Hash == 0 { + // SHA-1 is nearly universally used in OCSP. + return crypto.SHA1 + } + return opts.Hash +} + +// CreateRequest returns a DER-encoded, OCSP request for the status of cert. If +// opts is nil then sensible defaults are used. +func CreateRequest(cert, issuer *x509.Certificate, opts *RequestOptions) ([]byte, error) { + hashFunc := opts.hash() + + // OCSP seems to be the only place where these raw hash identifiers are + // used. I took the following from + // http://msdn.microsoft.com/en-us/library/ff635603.aspx + _, ok := hashOIDs[hashFunc] + if !ok { + return nil, x509.ErrUnsupportedAlgorithm + } + + if !hashFunc.Available() { + return nil, x509.ErrUnsupportedAlgorithm + } + h := opts.hash().New() + + var publicKeyInfo struct { + Algorithm pkix.AlgorithmIdentifier + PublicKey asn1.BitString + } + if _, err := asn1.Unmarshal(issuer.RawSubjectPublicKeyInfo, &publicKeyInfo); err != nil { + return nil, err + } + + h.Write(publicKeyInfo.PublicKey.RightAlign()) + issuerKeyHash := h.Sum(nil) + + h.Reset() + h.Write(issuer.RawSubject) + issuerNameHash := h.Sum(nil) + + req := &Request{ + HashAlgorithm: hashFunc, + IssuerNameHash: issuerNameHash, + IssuerKeyHash: issuerKeyHash, + SerialNumber: cert.SerialNumber, + } + return req.Marshal() +} + +// CreateResponse returns a DER-encoded OCSP response with the specified contents. +// The fields in the response are populated as follows: +// +// The responder cert is used to populate the responder's name field, and the +// certificate itself is provided alongside the OCSP response signature. +// +// The issuer cert is used to puplate the IssuerNameHash and IssuerKeyHash fields. +// +// The template is used to populate the SerialNumber, Status, RevokedAt, +// RevocationReason, ThisUpdate, and NextUpdate fields. +// +// If template.IssuerHash is not set, SHA1 will be used. +// +// The ProducedAt date is automatically set to the current date, to the nearest minute. +func CreateResponse(issuer, responderCert *x509.Certificate, template Response, priv crypto.Signer) ([]byte, error) { + var publicKeyInfo struct { + Algorithm pkix.AlgorithmIdentifier + PublicKey asn1.BitString + } + if _, err := asn1.Unmarshal(issuer.RawSubjectPublicKeyInfo, &publicKeyInfo); err != nil { + return nil, err + } + + if template.IssuerHash == 0 { + template.IssuerHash = crypto.SHA1 + } + hashOID := getOIDFromHashAlgorithm(template.IssuerHash) + if hashOID == nil { + return nil, errors.New("unsupported issuer hash algorithm") + } + + if !template.IssuerHash.Available() { + return nil, fmt.Errorf("issuer hash algorithm %v not linked into binary", template.IssuerHash) + } + h := template.IssuerHash.New() + h.Write(publicKeyInfo.PublicKey.RightAlign()) + issuerKeyHash := h.Sum(nil) + + h.Reset() + h.Write(issuer.RawSubject) + issuerNameHash := h.Sum(nil) + + innerResponse := singleResponse{ + CertID: certID{ + HashAlgorithm: pkix.AlgorithmIdentifier{ + Algorithm: hashOID, + Parameters: asn1.RawValue{Tag: 5 /* ASN.1 NULL */}, + }, + NameHash: issuerNameHash, + IssuerKeyHash: issuerKeyHash, + SerialNumber: template.SerialNumber, + }, + ThisUpdate: template.ThisUpdate.UTC(), + NextUpdate: template.NextUpdate.UTC(), + SingleExtensions: template.ExtraExtensions, + } + + switch template.Status { + case Good: + innerResponse.Good = true + case Unknown: + innerResponse.Unknown = true + case Revoked: + innerResponse.Revoked = revokedInfo{ + RevocationTime: template.RevokedAt.UTC(), + Reason: asn1.Enumerated(template.RevocationReason), + } + } + + rawResponderID := asn1.RawValue{ + Class: 2, // context-specific + Tag: 1, // Name (explicit tag) + IsCompound: true, + Bytes: responderCert.RawSubject, + } + tbsResponseData := responseData{ + Version: 0, + RawResponderID: rawResponderID, + ProducedAt: time.Now().Truncate(time.Minute).UTC(), + Responses: []singleResponse{innerResponse}, + } + + tbsResponseDataDER, err := asn1.Marshal(tbsResponseData) + if err != nil { + return nil, err + } + + hashFunc, signatureAlgorithm, err := signingParamsForPublicKey(priv.Public(), template.SignatureAlgorithm) + if err != nil { + return nil, err + } + + responseHash := hashFunc.New() + responseHash.Write(tbsResponseDataDER) + signature, err := priv.Sign(rand.Reader, responseHash.Sum(nil), hashFunc) + if err != nil { + return nil, err + } + + response := basicResponse{ + TBSResponseData: tbsResponseData, + SignatureAlgorithm: signatureAlgorithm, + Signature: asn1.BitString{ + Bytes: signature, + BitLength: 8 * len(signature), + }, + } + if template.Certificate != nil { + response.Certificates = []asn1.RawValue{ + asn1.RawValue{FullBytes: template.Certificate.Raw}, + } + } + responseDER, err := asn1.Marshal(response) + if err != nil { + return nil, err + } + + return asn1.Marshal(responseASN1{ + Status: asn1.Enumerated(Success), + Response: responseBytes{ + ResponseType: idPKIXOCSPBasic, + Response: responseDER, + }, + }) +} diff --git a/vendor/golang.org/x/crypto/ocsp/ocsp_test.go b/vendor/golang.org/x/crypto/ocsp/ocsp_test.go new file mode 100644 index 0000000..df674b3 --- /dev/null +++ b/vendor/golang.org/x/crypto/ocsp/ocsp_test.go @@ -0,0 +1,875 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package ocsp + +import ( + "bytes" + "crypto" + "crypto/sha1" + "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" + "encoding/hex" + "math/big" + "reflect" + "testing" + "time" +) + +func TestOCSPDecode(t *testing.T) { + responseBytes, _ := hex.DecodeString(ocspResponseHex) + resp, err := ParseResponse(responseBytes, nil) + if err != nil { + t.Fatal(err) + } + + responderCert, _ := hex.DecodeString(startComResponderCertHex) + responder, err := x509.ParseCertificate(responderCert) + if err != nil { + t.Fatal(err) + } + + expected := Response{ + Status: Good, + SerialNumber: big.NewInt(0x1d0fa), + RevocationReason: Unspecified, + ThisUpdate: time.Date(2010, 7, 7, 15, 1, 5, 0, time.UTC), + NextUpdate: time.Date(2010, 7, 7, 18, 35, 17, 0, time.UTC), + RawResponderName: responder.RawSubject, + } + + if !reflect.DeepEqual(resp.ThisUpdate, expected.ThisUpdate) { + t.Errorf("resp.ThisUpdate: got %d, want %d", resp.ThisUpdate, expected.ThisUpdate) + } + + if !reflect.DeepEqual(resp.NextUpdate, expected.NextUpdate) { + t.Errorf("resp.NextUpdate: got %d, want %d", resp.NextUpdate, expected.NextUpdate) + } + + if resp.Status != expected.Status { + t.Errorf("resp.Status: got %d, want %d", resp.Status, expected.Status) + } + + if resp.SerialNumber.Cmp(expected.SerialNumber) != 0 { + t.Errorf("resp.SerialNumber: got %x, want %x", resp.SerialNumber, expected.SerialNumber) + } + + if resp.RevocationReason != expected.RevocationReason { + t.Errorf("resp.RevocationReason: got %d, want %d", resp.RevocationReason, expected.RevocationReason) + } + + if !bytes.Equal(resp.RawResponderName, expected.RawResponderName) { + t.Errorf("resp.RawResponderName: got %x, want %x", resp.RawResponderName, expected.RawResponderName) + } + + if !bytes.Equal(resp.ResponderKeyHash, expected.ResponderKeyHash) { + t.Errorf("resp.ResponderKeyHash: got %x, want %x", resp.ResponderKeyHash, expected.ResponderKeyHash) + } +} + +func TestOCSPDecodeWithoutCert(t *testing.T) { + responseBytes, _ := hex.DecodeString(ocspResponseWithoutCertHex) + _, err := ParseResponse(responseBytes, nil) + if err != nil { + t.Error(err) + } +} + +func TestOCSPDecodeWithExtensions(t *testing.T) { + responseBytes, _ := hex.DecodeString(ocspResponseWithCriticalExtensionHex) + _, err := ParseResponse(responseBytes, nil) + if err == nil { + t.Error(err) + } + + responseBytes, _ = hex.DecodeString(ocspResponseWithExtensionHex) + response, err := ParseResponse(responseBytes, nil) + if err != nil { + t.Fatal(err) + } + + if len(response.Extensions) != 1 { + t.Errorf("len(response.Extensions): got %v, want %v", len(response.Extensions), 1) + } + + extensionBytes := response.Extensions[0].Value + expectedBytes, _ := hex.DecodeString(ocspExtensionValueHex) + if !bytes.Equal(extensionBytes, expectedBytes) { + t.Errorf("response.Extensions[0]: got %x, want %x", extensionBytes, expectedBytes) + } +} + +func TestOCSPSignature(t *testing.T) { + issuerCert, _ := hex.DecodeString(startComHex) + issuer, err := x509.ParseCertificate(issuerCert) + if err != nil { + t.Fatal(err) + } + + response, _ := hex.DecodeString(ocspResponseHex) + if _, err := ParseResponse(response, issuer); err != nil { + t.Error(err) + } +} + +func TestOCSPRequest(t *testing.T) { + leafCert, _ := hex.DecodeString(leafCertHex) + cert, err := x509.ParseCertificate(leafCert) + if err != nil { + t.Fatal(err) + } + + issuerCert, _ := hex.DecodeString(issuerCertHex) + issuer, err := x509.ParseCertificate(issuerCert) + if err != nil { + t.Fatal(err) + } + + request, err := CreateRequest(cert, issuer, nil) + if err != nil { + t.Fatal(err) + } + + expectedBytes, _ := hex.DecodeString(ocspRequestHex) + if !bytes.Equal(request, expectedBytes) { + t.Errorf("request: got %x, wanted %x", request, expectedBytes) + } + + decodedRequest, err := ParseRequest(expectedBytes) + if err != nil { + t.Fatal(err) + } + + if decodedRequest.HashAlgorithm != crypto.SHA1 { + t.Errorf("request.HashAlgorithm: got %v, want %v", decodedRequest.HashAlgorithm, crypto.SHA1) + } + + var publicKeyInfo struct { + Algorithm pkix.AlgorithmIdentifier + PublicKey asn1.BitString + } + _, err = asn1.Unmarshal(issuer.RawSubjectPublicKeyInfo, &publicKeyInfo) + if err != nil { + t.Fatal(err) + } + + h := sha1.New() + h.Write(publicKeyInfo.PublicKey.RightAlign()) + issuerKeyHash := h.Sum(nil) + + h.Reset() + h.Write(issuer.RawSubject) + issuerNameHash := h.Sum(nil) + + if got := decodedRequest.IssuerKeyHash; !bytes.Equal(got, issuerKeyHash) { + t.Errorf("request.IssuerKeyHash: got %x, want %x", got, issuerKeyHash) + } + + if got := decodedRequest.IssuerNameHash; !bytes.Equal(got, issuerNameHash) { + t.Errorf("request.IssuerKeyHash: got %x, want %x", got, issuerNameHash) + } + + if got := decodedRequest.SerialNumber; got.Cmp(cert.SerialNumber) != 0 { + t.Errorf("request.SerialNumber: got %x, want %x", got, cert.SerialNumber) + } + + marshaledRequest, err := decodedRequest.Marshal() + if err != nil { + t.Fatal(err) + } + + if bytes.Compare(expectedBytes, marshaledRequest) != 0 { + t.Errorf( + "Marshaled request doesn't match expected: wanted %x, got %x", + expectedBytes, + marshaledRequest, + ) + } +} + +func TestOCSPResponse(t *testing.T) { + leafCert, _ := hex.DecodeString(leafCertHex) + leaf, err := x509.ParseCertificate(leafCert) + if err != nil { + t.Fatal(err) + } + + issuerCert, _ := hex.DecodeString(issuerCertHex) + issuer, err := x509.ParseCertificate(issuerCert) + if err != nil { + t.Fatal(err) + } + + responderCert, _ := hex.DecodeString(responderCertHex) + responder, err := x509.ParseCertificate(responderCert) + if err != nil { + t.Fatal(err) + } + + responderPrivateKeyDER, _ := hex.DecodeString(responderPrivateKeyHex) + responderPrivateKey, err := x509.ParsePKCS1PrivateKey(responderPrivateKeyDER) + if err != nil { + t.Fatal(err) + } + + extensionBytes, _ := hex.DecodeString(ocspExtensionValueHex) + extensions := []pkix.Extension{ + pkix.Extension{ + Id: ocspExtensionOID, + Critical: false, + Value: extensionBytes, + }, + } + + thisUpdate := time.Date(2010, 7, 7, 15, 1, 5, 0, time.UTC) + nextUpdate := time.Date(2010, 7, 7, 18, 35, 17, 0, time.UTC) + template := Response{ + Status: Revoked, + SerialNumber: leaf.SerialNumber, + ThisUpdate: thisUpdate, + NextUpdate: nextUpdate, + RevokedAt: thisUpdate, + RevocationReason: KeyCompromise, + Certificate: responder, + ExtraExtensions: extensions, + } + + template.IssuerHash = crypto.MD5 + _, err = CreateResponse(issuer, responder, template, responderPrivateKey) + if err == nil { + t.Fatal("CreateResponse didn't fail with non-valid template.IssuerHash value crypto.MD5") + } + + testCases := []struct { + name string + issuerHash crypto.Hash + }{ + {"Zero value", 0}, + {"crypto.SHA1", crypto.SHA1}, + {"crypto.SHA256", crypto.SHA256}, + {"crypto.SHA384", crypto.SHA384}, + {"crypto.SHA512", crypto.SHA512}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + template.IssuerHash = tc.issuerHash + responseBytes, err := CreateResponse(issuer, responder, template, responderPrivateKey) + if err != nil { + t.Fatalf("CreateResponse failed: %s", err) + } + + resp, err := ParseResponse(responseBytes, nil) + if err != nil { + t.Fatalf("ParseResponse failed: %s", err) + } + + if !reflect.DeepEqual(resp.ThisUpdate, template.ThisUpdate) { + t.Errorf("resp.ThisUpdate: got %d, want %d", resp.ThisUpdate, template.ThisUpdate) + } + + if !reflect.DeepEqual(resp.NextUpdate, template.NextUpdate) { + t.Errorf("resp.NextUpdate: got %d, want %d", resp.NextUpdate, template.NextUpdate) + } + + if !reflect.DeepEqual(resp.RevokedAt, template.RevokedAt) { + t.Errorf("resp.RevokedAt: got %d, want %d", resp.RevokedAt, template.RevokedAt) + } + + if !reflect.DeepEqual(resp.Extensions, template.ExtraExtensions) { + t.Errorf("resp.Extensions: got %v, want %v", resp.Extensions, template.ExtraExtensions) + } + + delay := time.Since(resp.ProducedAt) + if delay < -time.Hour || delay > time.Hour { + t.Errorf("resp.ProducedAt: got %s, want close to current time (%s)", resp.ProducedAt, time.Now()) + } + + if resp.Status != template.Status { + t.Errorf("resp.Status: got %d, want %d", resp.Status, template.Status) + } + + if resp.SerialNumber.Cmp(template.SerialNumber) != 0 { + t.Errorf("resp.SerialNumber: got %x, want %x", resp.SerialNumber, template.SerialNumber) + } + + if resp.RevocationReason != template.RevocationReason { + t.Errorf("resp.RevocationReason: got %d, want %d", resp.RevocationReason, template.RevocationReason) + } + + expectedHash := tc.issuerHash + if tc.issuerHash == 0 { + expectedHash = crypto.SHA1 + } + + if resp.IssuerHash != expectedHash { + t.Errorf("resp.IssuerHash: got %d, want %d", resp.IssuerHash, expectedHash) + } + }) + } +} + +func TestErrorResponse(t *testing.T) { + responseBytes, _ := hex.DecodeString(errorResponseHex) + _, err := ParseResponse(responseBytes, nil) + + respErr, ok := err.(ResponseError) + if !ok { + t.Fatalf("expected ResponseError from ParseResponse but got %#v", err) + } + if respErr.Status != Malformed { + t.Fatalf("expected Malformed status from ParseResponse but got %d", respErr.Status) + } +} + +func TestOCSPDecodeMultiResponse(t *testing.T) { + inclCert, _ := hex.DecodeString(ocspMultiResponseCertHex) + cert, err := x509.ParseCertificate(inclCert) + if err != nil { + t.Fatal(err) + } + + responseBytes, _ := hex.DecodeString(ocspMultiResponseHex) + resp, err := ParseResponseForCert(responseBytes, cert, nil) + if err != nil { + t.Fatal(err) + } + + if resp.SerialNumber.Cmp(cert.SerialNumber) != 0 { + t.Errorf("resp.SerialNumber: got %x, want %x", resp.SerialNumber, cert.SerialNumber) + } +} + +func TestOCSPDecodeMultiResponseWithoutMatchingCert(t *testing.T) { + wrongCert, _ := hex.DecodeString(startComHex) + cert, err := x509.ParseCertificate(wrongCert) + if err != nil { + t.Fatal(err) + } + + responseBytes, _ := hex.DecodeString(ocspMultiResponseHex) + _, err = ParseResponseForCert(responseBytes, cert, nil) + want := ParseError("no response matching the supplied certificate") + if err != want { + t.Errorf("err: got %q, want %q", err, want) + } +} + +// This OCSP response was taken from Thawte's public OCSP responder. +// To recreate: +// $ openssl s_client -tls1 -showcerts -servername www.google.com -connect www.google.com:443 +// Copy and paste the first certificate into /tmp/cert.crt and the second into +// /tmp/intermediate.crt +// $ openssl ocsp -issuer /tmp/intermediate.crt -cert /tmp/cert.crt -url http://ocsp.thawte.com -resp_text -respout /tmp/ocsp.der +// Then hex encode the result: +// $ python -c 'print file("/tmp/ocsp.der", "r").read().encode("hex")' + +const ocspResponseHex = "308206bc0a0100a08206b5308206b106092b0601050507300101048206a23082069e3081" + + "c9a14e304c310b300906035504061302494c31163014060355040a130d5374617274436f" + + "6d204c74642e312530230603550403131c5374617274436f6d20436c6173732031204f43" + + "5350205369676e6572180f32303130303730373137333531375a30663064303c30090605" + + "2b0e03021a050004146568874f40750f016a3475625e1f5c93e5a26d580414eb4234d098" + + "b0ab9ff41b6b08f7cc642eef0e2c45020301d0fa8000180f323031303037303731353031" + + "30355aa011180f32303130303730373138333531375a300d06092a864886f70d01010505" + + "000382010100ab557ff070d1d7cebbb5f0ec91a15c3fed22eb2e1b8244f1b84545f013a4" + + "fb46214c5e3fbfbebb8a56acc2b9db19f68fd3c3201046b3824d5ba689f99864328710cb" + + "467195eb37d84f539e49f859316b32964dc3e47e36814ce94d6c56dd02733b1d0802f7ff" + + "4eebdbbd2927dcf580f16cbc290f91e81b53cb365e7223f1d6e20a88ea064104875e0145" + + "672b20fc14829d51ca122f5f5d77d3ad6c83889c55c7dc43680ba2fe3cef8b05dbcabdc0" + + "d3e09aaf9725597f8c858c2fa38c0d6aed2e6318194420dd1a1137445d13e1c97ab47896" + + "17a4e08925f46f867b72e3a4dc1f08cb870b2b0717f7207faa0ac512e628a029aba7457a" + + "e63dcf3281e2162d9349a08204ba308204b6308204b23082039aa003020102020101300d" + + "06092a864886f70d010105050030818c310b300906035504061302494c31163014060355" + + "040a130d5374617274436f6d204c74642e312b3029060355040b13225365637572652044" + + "69676974616c204365727469666963617465205369676e696e6731383036060355040313" + + "2f5374617274436f6d20436c6173732031205072696d61727920496e7465726d65646961" + + "746520536572766572204341301e170d3037313032353030323330365a170d3132313032" + + "333030323330365a304c310b300906035504061302494c31163014060355040a130d5374" + + "617274436f6d204c74642e312530230603550403131c5374617274436f6d20436c617373" + + "2031204f435350205369676e657230820122300d06092a864886f70d0101010500038201" + + "0f003082010a0282010100b9561b4c45318717178084e96e178df2255e18ed8d8ecc7c2b" + + "7b51a6c1c2e6bf0aa3603066f132fe10ae97b50e99fa24b83fc53dd2777496387d14e1c3" + + "a9b6a4933e2ac12413d085570a95b8147414a0bc007c7bcf222446ef7f1a156d7ea1c577" + + "fc5f0facdfd42eb0f5974990cb2f5cefebceef4d1bdc7ae5c1075c5a99a93171f2b0845b" + + "4ff0864e973fcfe32f9d7511ff87a3e943410c90a4493a306b6944359340a9ca96f02b66" + + "ce67f028df2980a6aaee8d5d5d452b8b0eb93f923cc1e23fcccbdbe7ffcb114d08fa7a6a" + + "3c404f825d1a0e715935cf623a8c7b59670014ed0622f6089a9447a7a19010f7fe58f841" + + "29a2765ea367824d1c3bb2fda308530203010001a382015c30820158300c0603551d1301" + + "01ff04023000300b0603551d0f0404030203a8301e0603551d250417301506082b060105" + + "0507030906092b0601050507300105301d0603551d0e0416041445e0a36695414c5dd449" + + "bc00e33cdcdbd2343e173081a80603551d230481a030819d8014eb4234d098b0ab9ff41b" + + "6b08f7cc642eef0e2c45a18181a47f307d310b300906035504061302494c311630140603" + + "55040a130d5374617274436f6d204c74642e312b3029060355040b132253656375726520" + + "4469676974616c204365727469666963617465205369676e696e67312930270603550403" + + "13205374617274436f6d2043657274696669636174696f6e20417574686f726974798201" + + "0a30230603551d12041c301a8618687474703a2f2f7777772e737461727473736c2e636f" + + "6d2f302c06096086480186f842010d041f161d5374617274436f6d205265766f63617469" + + "6f6e20417574686f72697479300d06092a864886f70d01010505000382010100182d2215" + + "8f0fc0291324fa8574c49bb8ff2835085adcbf7b7fc4191c397ab6951328253fffe1e5ec" + + "2a7da0d50fca1a404e6968481366939e666c0a6209073eca57973e2fefa9ed1718e8176f" + + "1d85527ff522c08db702e3b2b180f1cbff05d98128252cf0f450f7dd2772f4188047f19d" + + "c85317366f94bc52d60f453a550af58e308aaab00ced33040b62bf37f5b1ab2a4f7f0f80" + + "f763bf4d707bc8841d7ad9385ee2a4244469260b6f2bf085977af9074796048ecc2f9d48" + + "a1d24ce16e41a9941568fec5b42771e118f16c106a54ccc339a4b02166445a167902e75e" + + "6d8620b0825dcd18a069b90fd851d10fa8effd409deec02860d26d8d833f304b10669b42" + +const startComResponderCertHex = "308204b23082039aa003020102020101300d06092a864886f70d010105050030818c310b" + + "300906035504061302494c31163014060355040a130d5374617274436f6d204c74642e31" + + "2b3029060355040b1322536563757265204469676974616c204365727469666963617465" + + "205369676e696e67313830360603550403132f5374617274436f6d20436c617373203120" + + "5072696d61727920496e7465726d65646961746520536572766572204341301e170d3037" + + "313032353030323330365a170d3132313032333030323330365a304c310b300906035504" + + "061302494c31163014060355040a130d5374617274436f6d204c74642e31253023060355" + + "0403131c5374617274436f6d20436c6173732031204f435350205369676e657230820122" + + "300d06092a864886f70d01010105000382010f003082010a0282010100b9561b4c453187" + + "17178084e96e178df2255e18ed8d8ecc7c2b7b51a6c1c2e6bf0aa3603066f132fe10ae97" + + "b50e99fa24b83fc53dd2777496387d14e1c3a9b6a4933e2ac12413d085570a95b8147414" + + "a0bc007c7bcf222446ef7f1a156d7ea1c577fc5f0facdfd42eb0f5974990cb2f5cefebce" + + "ef4d1bdc7ae5c1075c5a99a93171f2b0845b4ff0864e973fcfe32f9d7511ff87a3e94341" + + "0c90a4493a306b6944359340a9ca96f02b66ce67f028df2980a6aaee8d5d5d452b8b0eb9" + + "3f923cc1e23fcccbdbe7ffcb114d08fa7a6a3c404f825d1a0e715935cf623a8c7b596700" + + "14ed0622f6089a9447a7a19010f7fe58f84129a2765ea367824d1c3bb2fda30853020301" + + "0001a382015c30820158300c0603551d130101ff04023000300b0603551d0f0404030203" + + "a8301e0603551d250417301506082b0601050507030906092b0601050507300105301d06" + + "03551d0e0416041445e0a36695414c5dd449bc00e33cdcdbd2343e173081a80603551d23" + + "0481a030819d8014eb4234d098b0ab9ff41b6b08f7cc642eef0e2c45a18181a47f307d31" + + "0b300906035504061302494c31163014060355040a130d5374617274436f6d204c74642e" + + "312b3029060355040b1322536563757265204469676974616c2043657274696669636174" + + "65205369676e696e6731293027060355040313205374617274436f6d2043657274696669" + + "636174696f6e20417574686f7269747982010a30230603551d12041c301a861868747470" + + "3a2f2f7777772e737461727473736c2e636f6d2f302c06096086480186f842010d041f16" + + "1d5374617274436f6d205265766f636174696f6e20417574686f72697479300d06092a86" + + "4886f70d01010505000382010100182d22158f0fc0291324fa8574c49bb8ff2835085adc" + + "bf7b7fc4191c397ab6951328253fffe1e5ec2a7da0d50fca1a404e6968481366939e666c" + + "0a6209073eca57973e2fefa9ed1718e8176f1d85527ff522c08db702e3b2b180f1cbff05" + + "d98128252cf0f450f7dd2772f4188047f19dc85317366f94bc52d60f453a550af58e308a" + + "aab00ced33040b62bf37f5b1ab2a4f7f0f80f763bf4d707bc8841d7ad9385ee2a4244469" + + "260b6f2bf085977af9074796048ecc2f9d48a1d24ce16e41a9941568fec5b42771e118f1" + + "6c106a54ccc339a4b02166445a167902e75e6d8620b0825dcd18a069b90fd851d10fa8ef" + + "fd409deec02860d26d8d833f304b10669b42" + +const startComHex = "308206343082041ca003020102020118300d06092a864886f70d0101050500307d310b30" + + "0906035504061302494c31163014060355040a130d5374617274436f6d204c74642e312b" + + "3029060355040b1322536563757265204469676974616c20436572746966696361746520" + + "5369676e696e6731293027060355040313205374617274436f6d20436572746966696361" + + "74696f6e20417574686f72697479301e170d3037313032343230353431375a170d313731" + + "3032343230353431375a30818c310b300906035504061302494c31163014060355040a13" + + "0d5374617274436f6d204c74642e312b3029060355040b13225365637572652044696769" + + "74616c204365727469666963617465205369676e696e67313830360603550403132f5374" + + "617274436f6d20436c6173732031205072696d61727920496e7465726d65646961746520" + + "53657276657220434130820122300d06092a864886f70d01010105000382010f00308201" + + "0a0282010100b689c6acef09527807ac9263d0f44418188480561f91aee187fa3250b4d3" + + "4706f0e6075f700e10f71dc0ce103634855a0f92ac83c6ac58523fba38e8fce7a724e240" + + "a60876c0926e9e2a6d4d3f6e61200adb59ded27d63b33e46fefa215118d7cd30a6ed076e" + + "3b7087b4f9faebee823c056f92f7a4dc0a301e9373fe07cad75f809d225852ae06da8b87" + + "2369b0e42ad8ea83d2bdf371db705a280faf5a387045123f304dcd3baf17e50fcba0a95d" + + "48aab16150cb34cd3c5cc30be810c08c9bf0030362feb26c3e720eee1c432ac9480e5739" + + "c43121c810c12c87fe5495521f523c31129b7fe7c0a0a559d5e28f3ef0d5a8e1d77031a9" + + "c4b3cfaf6d532f06f4a70203010001a38201ad308201a9300f0603551d130101ff040530" + + "030101ff300e0603551d0f0101ff040403020106301d0603551d0e04160414eb4234d098" + + "b0ab9ff41b6b08f7cc642eef0e2c45301f0603551d230418301680144e0bef1aa4405ba5" + + "17698730ca346843d041aef2306606082b06010505070101045a3058302706082b060105" + + "05073001861b687474703a2f2f6f6373702e737461727473736c2e636f6d2f6361302d06" + + "082b060105050730028621687474703a2f2f7777772e737461727473736c2e636f6d2f73" + + "667363612e637274305b0603551d1f045430523027a025a0238621687474703a2f2f7777" + + "772e737461727473736c2e636f6d2f73667363612e63726c3027a025a023862168747470" + + "3a2f2f63726c2e737461727473736c2e636f6d2f73667363612e63726c3081800603551d" + + "20047930773075060b2b0601040181b5370102013066302e06082b060105050702011622" + + "687474703a2f2f7777772e737461727473736c2e636f6d2f706f6c6963792e7064663034" + + "06082b060105050702011628687474703a2f2f7777772e737461727473736c2e636f6d2f" + + "696e7465726d6564696174652e706466300d06092a864886f70d01010505000382020100" + + "2109493ea5886ee00b8b48da314d8ff75657a2e1d36257e9b556f38545753be5501f048b" + + "e6a05a3ee700ae85d0fbff200364cbad02e1c69172f8a34dd6dee8cc3fa18aa2e37c37a7" + + "c64f8f35d6f4d66e067bdd21d9cf56ffcb302249fe8904f385e5aaf1e71fe875904dddf9" + + "46f74234f745580c110d84b0c6da5d3ef9019ee7e1da5595be741c7bfc4d144fac7e5547" + + "7d7bf4a50d491e95e8f712c1ccff76a62547d0f37535be97b75816ebaa5c786fec5330af" + + "ea044dcca902e3f0b60412f630b1113d904e5664d7dc3c435f7339ef4baf87ebf6fe6888" + + "4472ead207c669b0c1a18bef1749d761b145485f3b2021e95bb2ccf4d7e931f50b15613b" + + "7a94e3ebd9bc7f94ae6ae3626296a8647cb887f399327e92a252bebbf865cfc9f230fc8b" + + "c1c2a696d75f89e15c3480f58f47072fb491bfb1a27e5f4b5ad05b9f248605515a690365" + + "434971c5e06f94346bf61bd8a9b04c7e53eb8f48dfca33b548fa364a1a53a6330cd089cd" + + "4915cd89313c90c072d7654b52358a461144b93d8e2865a63e799e5c084429adb035112e" + + "214eb8d2e7103e5d8483b3c3c2e4d2c6fd094b7409ddf1b3d3193e800da20b19f038e7c5" + + "c2afe223db61e29d5c6e2089492e236ab262c145b49faf8ba7f1223bf87de290d07a19fb" + + "4a4ce3d27d5f4a8303ed27d6239e6b8db459a2d9ef6c8229dd75193c3f4c108defbb7527" + + "d2ae83a7a8ce5ba7" + +const ocspResponseWithoutCertHex = "308201d40a0100a08201cd308201c906092b0601050507300101048201ba3082" + + "01b630819fa2160414884451ff502a695e2d88f421bad90cf2cecbea7c180f3230313330" + + "3631383037323434335a30743072304a300906052b0e03021a0500041448b60d38238df8" + + "456e4ee5843ea394111802979f0414884451ff502a695e2d88f421bad90cf2cecbea7c02" + + "1100f78b13b946fc9635d8ab49de9d2148218000180f3230313330363138303732343433" + + "5aa011180f32303133303632323037323434335a300d06092a864886f70d010105050003" + + "82010100103e18b3d297a5e7a6c07a4fc52ac46a15c0eba96f3be17f0ffe84de5b8c8e05" + + "5a8f577586a849dc4abd6440eb6fedde4622451e2823c1cbf3558b4e8184959c9fe96eff" + + "8bc5f95866c58c6d087519faabfdae37e11d9874f1bc0db292208f645dd848185e4dd38b" + + "6a8547dfa7b74d514a8470015719064d35476b95bebb03d4d2845c5ca15202d2784878f2" + + "0f904c24f09736f044609e9c271381713400e563023d212db422236440c6f377bbf24b2b" + + "9e7dec8698e36a8df68b7592ad3489fb2937afb90eb85d2aa96b81c94c25057dbd4759d9" + + "20a1a65c7f0b6427a224b3c98edd96b9b61f706099951188b0289555ad30a216fb774651" + + "5a35fca2e054dfa8" + +// PKIX nonce extension +var ocspExtensionOID = asn1.ObjectIdentifier{1, 3, 6, 1, 5, 5, 7, 48, 1, 2} +var ocspExtensionValueHex = "0403000000" + +const ocspResponseWithCriticalExtensionHex = "308204fe0a0100a08204f7308204f306092b0601050507300101048204e4308204e03081" + + "dba003020100a11b3019311730150603550403130e4f43535020526573706f6e64657218" + + "0f32303136303130343137303130305a3081a53081a23049300906052b0e03021a050004" + + "14c0fe0278fc99188891b3f212e9c7e1b21ab7bfc004140dfc1df0a9e0f01ce7f2b21317" + + "7e6f8d157cd4f60210017f77deb3bcbb235d44ccc7dba62e72a116180f32303130303730" + + "373135303130355aa0030a0101180f32303130303730373135303130355aa011180f3230" + + "3130303730373138333531375aa1193017301506092b06010505073001020101ff040504" + + "03000000300d06092a864886f70d01010b0500038201010031c730ca60a7a0d92d8e4010" + + "911b469de95b4d27e89de6537552436237967694f76f701cf6b45c932bd308bca4a8d092" + + "5c604ba94796903091d9e6c000178e72c1f0a24a277dd262835af5d17d3f9d7869606c9f" + + "e7c8e708a41645699895beee38bfa63bb46296683761c5d1d65439b8ab868dc3017c9eeb" + + "b70b82dbf3a31c55b457d48bb9e82b335ed49f445042eaf606b06a3e0639824924c89c63" + + "eccddfe85e6694314138b2536f5e15e07085d0f6e26d4b2f8244bab0d70de07283ac6384" + + "a0501fc3dea7cf0adfd4c7f34871080900e252ddc403e3f0265f2a704af905d3727504ed" + + "28f3214a219d898a022463c78439799ca81c8cbafdbcec34ea937cd6a08202ea308202e6" + + "308202e2308201caa003020102020101300d06092a864886f70d01010b05003019311730" + + "150603550403130e4f43535020526573706f6e646572301e170d31353031333031353530" + + "33335a170d3136303133303135353033335a3019311730150603550403130e4f43535020" + + "526573706f6e64657230820122300d06092a864886f70d01010105000382010f00308201" + + "0a0282010100e8155f2d3e6f2e8d14c62a788bd462f9f844e7a6977c83ef1099f0f6616e" + + "c5265b56f356e62c5400f0b06a2e7945a82752c636df32a895152d6074df1701dc6ccfbc" + + "bec75a70bd2b55ae2be7e6cad3b5fd4cd5b7790ab401a436d3f5f346074ffde8a99d5b72" + + "3350f0a112076614b12ef79c78991b119453445acf2416ab0046b540db14c9fc0f27b898" + + "9ad0f63aa4b8aefc91aa8a72160c36307c60fec78a93d3fddf4259902aa77e7332971c7d" + + "285b6a04f648993c6922a3e9da9adf5f81508c3228791843e5d49f24db2f1290bafd97e6" + + "55b1049a199f652cd603c4fafa330c390b0da78fbbc67e8fa021cbd74eb96222b12ace31" + + "a77dcf920334dc94581b0203010001a3353033300e0603551d0f0101ff04040302078030" + + "130603551d25040c300a06082b06010505070309300c0603551d130101ff04023000300d" + + "06092a864886f70d01010b05000382010100718012761b5063e18f0dc44644d8e6ab8612" + + "31c15fd5357805425d82aec1de85bf6d3e30fce205e3e3b8b795bbe52e40a439286d2288" + + "9064f4aeeb150359b9425f1da51b3a5c939018555d13ac42c565a0603786a919328f3267" + + "09dce52c22ad958ecb7873b9771d1148b1c4be2efe80ba868919fc9f68b6090c2f33c156" + + "d67156e42766a50b5d51e79637b7e58af74c2a951b1e642fa7741fec982cc937de37eff5" + + "9e2005d5939bfc031589ca143e6e8ab83f40ee08cc20a6b4a95a318352c28d18528dcaf9" + + "66705de17afa19d6e8ae91ddf33179d16ebb6ac2c69cae8373d408ebf8c55308be6c04d9" + + "3a25439a94299a65a709756c7a3e568be049d5c38839" + +const ocspResponseWithExtensionHex = "308204fb0a0100a08204f4308204f006092b0601050507300101048204e1308204dd3081" + + "d8a003020100a11b3019311730150603550403130e4f43535020526573706f6e64657218" + + "0f32303136303130343136353930305a3081a230819f3049300906052b0e03021a050004" + + "14c0fe0278fc99188891b3f212e9c7e1b21ab7bfc004140dfc1df0a9e0f01ce7f2b21317" + + "7e6f8d157cd4f60210017f77deb3bcbb235d44ccc7dba62e72a116180f32303130303730" + + "373135303130355aa0030a0101180f32303130303730373135303130355aa011180f3230" + + "3130303730373138333531375aa1163014301206092b0601050507300102040504030000" + + "00300d06092a864886f70d01010b05000382010100c09a33e0b2324c852421bb83f85ac9" + + "9113f5426012bd2d2279a8166e9241d18a33c870894250622ffc7ed0c4601b16d624f90b" + + "779265442cdb6868cf40ab304ab4b66e7315ed02cf663b1601d1d4751772b31bc299db23" + + "9aebac78ed6797c06ed815a7a8d18d63cfbb609cafb47ec2e89e37db255216eb09307848" + + "d01be0a3e943653c78212b96ff524b74c9ec456b17cdfb950cc97645c577b2e09ff41dde" + + "b03afb3adaa381cc0f7c1d95663ef22a0f72f2c45613ae8e2b2d1efc96e8463c7d1d8a1d" + + "7e3b35df8fe73a301fc3f804b942b2b3afa337ff105fc1462b7b1c1d75eb4566c8665e59" + + "f80393b0adbf8004ff6c3327ed34f007cb4a3348a7d55e06e3a08202ea308202e6308202" + + "e2308201caa003020102020101300d06092a864886f70d01010b05003019311730150603" + + "550403130e4f43535020526573706f6e646572301e170d3135303133303135353033335a" + + "170d3136303133303135353033335a3019311730150603550403130e4f43535020526573" + + "706f6e64657230820122300d06092a864886f70d01010105000382010f003082010a0282" + + "010100e8155f2d3e6f2e8d14c62a788bd462f9f844e7a6977c83ef1099f0f6616ec5265b" + + "56f356e62c5400f0b06a2e7945a82752c636df32a895152d6074df1701dc6ccfbcbec75a" + + "70bd2b55ae2be7e6cad3b5fd4cd5b7790ab401a436d3f5f346074ffde8a99d5b723350f0" + + "a112076614b12ef79c78991b119453445acf2416ab0046b540db14c9fc0f27b8989ad0f6" + + "3aa4b8aefc91aa8a72160c36307c60fec78a93d3fddf4259902aa77e7332971c7d285b6a" + + "04f648993c6922a3e9da9adf5f81508c3228791843e5d49f24db2f1290bafd97e655b104" + + "9a199f652cd603c4fafa330c390b0da78fbbc67e8fa021cbd74eb96222b12ace31a77dcf" + + "920334dc94581b0203010001a3353033300e0603551d0f0101ff04040302078030130603" + + "551d25040c300a06082b06010505070309300c0603551d130101ff04023000300d06092a" + + "864886f70d01010b05000382010100718012761b5063e18f0dc44644d8e6ab861231c15f" + + "d5357805425d82aec1de85bf6d3e30fce205e3e3b8b795bbe52e40a439286d22889064f4" + + "aeeb150359b9425f1da51b3a5c939018555d13ac42c565a0603786a919328f326709dce5" + + "2c22ad958ecb7873b9771d1148b1c4be2efe80ba868919fc9f68b6090c2f33c156d67156" + + "e42766a50b5d51e79637b7e58af74c2a951b1e642fa7741fec982cc937de37eff59e2005" + + "d5939bfc031589ca143e6e8ab83f40ee08cc20a6b4a95a318352c28d18528dcaf966705d" + + "e17afa19d6e8ae91ddf33179d16ebb6ac2c69cae8373d408ebf8c55308be6c04d93a2543" + + "9a94299a65a709756c7a3e568be049d5c38839" + +const ocspMultiResponseHex = "30820ee60a0100a0820edf30820edb06092b060105050730010104820ecc30820ec83082" + + "0839a216041445ac2ecd75f53f1cf6e4c51d3de0047ad0aa7465180f3230313530363032" + + "3130303033305a3082080c3065303d300906052b0e03021a05000414f7452a0080601527" + + "72e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f0204" + + "5456656a8000180f32303135303630323039303230375aa011180f323031353036303331" + + "30303033305a3065303d300906052b0e03021a05000414f7452a008060152772e4a135e7" + + "6e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f02045456656b80" + + "00180f32303135303630323039303230375aa011180f3230313530363033313030303330" + + "5a3065303d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0" + + "f1580414edd8f2ee977252853a330b297a18f5c993853b3f02045456656c8000180f3230" + + "3135303630323039303230375aa011180f32303135303630333130303033305a3065303d" + + "300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414ed" + + "d8f2ee977252853a330b297a18f5c993853b3f02045456656d8000180f32303135303630" + + "323039303230375aa011180f32303135303630333130303033305a3065303d300906052b" + + "0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee9772" + + "52853a330b297a18f5c993853b3f02045456656e8000180f323031353036303230393032" + + "30375aa011180f32303135303630333130303033305a3065303d300906052b0e03021a05" + + "000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b" + + "297a18f5c993853b3f02045456656f8000180f32303135303630323039303230375aa011" + + "180f32303135303630333130303033305a3065303d300906052b0e03021a05000414f745" + + "2a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c9" + + "93853b3f0204545665708000180f32303135303630323039303230375aa011180f323031" + + "35303630333130303033305a3065303d300906052b0e03021a05000414f7452a00806015" + + "2772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f02" + + "04545665718000180f32303135303630323039303230375aa011180f3230313530363033" + + "3130303033305a3065303d300906052b0e03021a05000414f7452a008060152772e4a135" + + "e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f020454566572" + + "8000180f32303135303630323039303230375aa011180f32303135303630333130303033" + + "305a3065303d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fd" + + "e0f1580414edd8f2ee977252853a330b297a18f5c993853b3f0204545665738000180f32" + + "303135303630323039303230375aa011180f32303135303630333130303033305a306530" + + "3d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414" + + "edd8f2ee977252853a330b297a18f5c993853b3f0204545665748000180f323031353036" + + "30323039303230375aa011180f32303135303630333130303033305a3065303d30090605" + + "2b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee97" + + "7252853a330b297a18f5c993853b3f0204545665758000180f3230313530363032303930" + + "3230375aa011180f32303135303630333130303033305a3065303d300906052b0e03021a" + + "05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a33" + + "0b297a18f5c993853b3f0204545665768000180f32303135303630323039303230375aa0" + + "11180f32303135303630333130303033305a3065303d300906052b0e03021a05000414f7" + + "452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5" + + "c993853b3f0204545665778000180f32303135303630323039303230375aa011180f3230" + + "3135303630333130303033305a3065303d300906052b0e03021a05000414f7452a008060" + + "152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f" + + "0204545665788000180f32303135303630323039303230375aa011180f32303135303630" + + "333130303033305a3065303d300906052b0e03021a05000414f7452a008060152772e4a1" + + "35e76e9e52fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f0204545665" + + "798000180f32303135303630323039303230375aa011180f323031353036303331303030" + + "33305a3065303d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52" + + "fde0f1580414edd8f2ee977252853a330b297a18f5c993853b3f02045456657a8000180f" + + "32303135303630323039303230375aa011180f32303135303630333130303033305a3065" + + "303d300906052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f15804" + + "14edd8f2ee977252853a330b297a18f5c993853b3f02045456657b8000180f3230313530" + + "3630323039303230375aa011180f32303135303630333130303033305a3065303d300906" + + "052b0e03021a05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee" + + "977252853a330b297a18f5c993853b3f02045456657c8000180f32303135303630323039" + + "303230375aa011180f32303135303630333130303033305a3065303d300906052b0e0302" + + "1a05000414f7452a008060152772e4a135e76e9e52fde0f1580414edd8f2ee977252853a" + + "330b297a18f5c993853b3f02045456657d8000180f32303135303630323039303230375a" + + "a011180f32303135303630333130303033305a300d06092a864886f70d01010505000382" + + "01010016b73b92859979f27d15eb018cf069eed39c3d280213565f3026de11ba15bdb94d" + + "764cf2d0fdd204ef926c588d7b183483c8a2b1995079c7ed04dcefcc650c1965be4b6832" + + "a8839e832f7f60f638425eccdf9bc3a81fbe700fda426ddf4f06c29bee431bbbe81effda" + + "a60b7da5b378f199af2f3c8380be7ba6c21c8e27124f8a4d8989926aea19055700848d33" + + "799e833512945fd75364edbd2dd18b783c1e96e332266b17979a0b88c35b43f47c87c493" + + "19155056ad8dbbae5ff2afad3c0e1c69ed111206ffda49875e8e4efc0926264823bc4423" + + "c8a002f34288c4bc22516f98f54fc609943721f590ddd8d24f989457526b599b0eb75cb5" + + "a80da1ad93a621a08205733082056f3082056b30820453a0030201020204545638c4300d" + + "06092a864886f70d01010b0500308182310b300906035504061302555331183016060355" + + "040a130f552e532e20476f7665726e6d656e7431233021060355040b131a446570617274" + + "6d656e74206f662074686520547265617375727931223020060355040b13194365727469" + + "6669636174696f6e20417574686f7269746965733110300e060355040b13074f43494f20" + + "4341301e170d3135303332303131353531335a170d3135303633303034303030305a3081" + + "98310b300906035504061302555331183016060355040a130f552e532e20476f7665726e" + + "6d656e7431233021060355040b131a4465706172746d656e74206f662074686520547265" + + "617375727931223020060355040b131943657274696669636174696f6e20417574686f72" + + "69746965733110300e060355040b13074f43494f204341311430120603550403130b4f43" + + "5350205369676e657230820122300d06092a864886f70d01010105000382010f00308201" + + "0a0282010100c1b6fe1ba1ad50bb98c855811acbd67fe68057f48b8e08d3800e7f2c51b7" + + "9e20551934971fd92b9c9e6c49453097927cba83a94c0b2fea7124ba5ac442b38e37dba6" + + "7303d4962dd7d92b22a04b0e0e182e9ea67620b1c6ce09ee607c19e0e6e3adae81151db1" + + "2bb7f706149349a292e21c1eb28565b6839df055e1a838a772ff34b5a1452618e2c26042" + + "705d53f0af4b57aae6163f58216af12f3887813fe44b0321827b3a0c52b0e47d0aab94a2" + + "f768ab0ba3901d22f8bb263823090b0e37a7f8856db4b0d165c42f3aa7e94f5f6ce1855e" + + "98dc57adea0ae98ad39f67ecdec00b88685566e9e8d69f6cefb6ddced53015d0d3b862bc" + + "be21f3d72251eefcec730203010001a38201cf308201cb300e0603551d0f0101ff040403" + + "020780306b0603551d2004643062300c060a60864801650302010502300c060a60864801" + + "650302010503300c060a60864801650302010504300c060a60864801650302010507300c" + + "060a60864801650302010508300c060a6086480165030201030d300c060a608648016503" + + "020103113081e506082b060105050701010481d83081d5303006082b0601050507300286" + + "24687474703a2f2f706b692e74726561732e676f762f746f63615f65655f6169612e7037" + + "633081a006082b060105050730028681936c6461703a2f2f6c6461702e74726561732e67" + + "6f762f6f753d4f43494f25323043412c6f753d43657274696669636174696f6e25323041" + + "7574686f7269746965732c6f753d4465706172746d656e742532306f6625323074686525" + + "323054726561737572792c6f3d552e532e253230476f7665726e6d656e742c633d55533f" + + "634143657274696669636174653b62696e61727930130603551d25040c300a06082b0601" + + "0505070309300f06092b060105050730010504020500301f0603551d23041830168014a2" + + "13a8e5c607546c243d4eb72b27a2a7711ab5af301d0603551d0e0416041451f98046818a" + + "e46d953ac90c210ccfaa1a06980c300d06092a864886f70d01010b050003820101003a37" + + "0b301d14ffdeb370883639bec5ae6f572dcbddadd672af16ee2a8303316b14e1fbdca8c2" + + "8f4bad9c7b1410250e149c14e9830ca6f17370a8d13151205d956e28c141cc0500379596" + + "c5b9239fcfa3d2de8f1d4f1a2b1bf2d1851bed1c86012ee8135bdc395cd4496ce69fadd0" + + "3b682b90350ca7b4f458190b7a0ab5c33a04cf1347a77d541877a380a4c94988c5658908" + + "44fdc22637a72b9fa410333e2caf969477f9fe07f50e3681c204fb3bf073b9da01cd8d91" + + "8044c40b1159955af12a3263ab1d34119d7f59bfa6cae88ed058addc4e08250263f8f836" + + "2f5bdffd45636fea7474c60a55c535954477b2f286e1b2535f0dd12c162f1b353c370e08" + + "be67" + +const ocspMultiResponseCertHex = "308207943082067ca003020102020454566573300d06092a864886f70d01010b05003081" + + "82310b300906035504061302555331183016060355040a130f552e532e20476f7665726e" + + "6d656e7431233021060355040b131a4465706172746d656e74206f662074686520547265" + + "617375727931223020060355040b131943657274696669636174696f6e20417574686f72" + + "69746965733110300e060355040b13074f43494f204341301e170d313530343130313535" + + "3733385a170d3138303431303136323733385a30819d310b300906035504061302555331" + + "183016060355040a130f552e532e20476f7665726e6d656e7431233021060355040b131a" + + "4465706172746d656e74206f662074686520547265617375727931253023060355040b13" + + "1c427572656175206f66207468652046697363616c20536572766963653110300e060355" + + "040b130744657669636573311630140603550403130d706b692e74726561732e676f7630" + + "820122300d06092a864886f70d01010105000382010f003082010a0282010100c7273623" + + "8c49c48bf501515a2490ef6e5ae0c06e0ad2aa9a6bb77f3d0370d846b2571581ebf38fd3" + + "1948daad3dec7a4da095f1dcbe9654e65bcf7acdfd4ee802421dad9b90536c721d2bca58" + + "8413e6bfd739a72470560bb7d64f9a09284f90ff8af1d5a3c5c84d0f95a00f9c6d988dd0" + + "d87f1d0d3344580901c955139f54d09de0acdbd3322b758cb0c58881bf04913243401f44" + + "013fd9f6d8348044cc8bb0a71978ad93366b2a4687a5274b2ee07d0fb40225453eb244ed" + + "b20152251ac77c59455260ff07eeceb3cb3c60fb8121cf92afd3daa2a4650e1942ccb555" + + "de10b3d481feb299838ef05d0fd1810b146753472ae80da65dd34da25ca1f89971f10039" + + "0203010001a38203f3308203ef300e0603551d0f0101ff0404030205a030170603551d20" + + "0410300e300c060a60864801650302010503301106096086480186f84201010404030206" + + "4030130603551d25040c300a06082b060105050703013082010806082b06010505070101" + + "0481fb3081f8303006082b060105050730028624687474703a2f2f706b692e7472656173" + + "2e676f762f746f63615f65655f6169612e7037633081a006082b06010505073002868193" + + "6c6461703a2f2f6c6461702e74726561732e676f762f6f753d4f43494f25323043412c6f" + + "753d43657274696669636174696f6e253230417574686f7269746965732c6f753d446570" + + "6172746d656e742532306f6625323074686525323054726561737572792c6f3d552e532e" + + "253230476f7665726e6d656e742c633d55533f634143657274696669636174653b62696e" + + "617279302106082b060105050730018615687474703a2f2f6f6373702e74726561732e67" + + "6f76307b0603551d1104743072811c6373612d7465616d4066697363616c2e7472656173" + + "7572792e676f768210706b692e74726561737572792e676f768210706b692e64696d632e" + + "6468732e676f76820d706b692e74726561732e676f76811f6563622d686f7374696e6740" + + "66697363616c2e74726561737572792e676f76308201890603551d1f048201803082017c" + + "3027a025a0238621687474703a2f2f706b692e74726561732e676f762f4f43494f5f4341" + + "332e63726c3082014fa082014ba0820147a48197308194310b3009060355040613025553" + + "31183016060355040a130f552e532e20476f7665726e6d656e7431233021060355040b13" + + "1a4465706172746d656e74206f662074686520547265617375727931223020060355040b" + + "131943657274696669636174696f6e20417574686f7269746965733110300e060355040b" + + "13074f43494f2043413110300e0603550403130743524c313430398681aa6c6461703a2f" + + "2f6c6461702e74726561732e676f762f636e3d43524c313430392c6f753d4f43494f2532" + + "3043412c6f753d43657274696669636174696f6e253230417574686f7269746965732c6f" + + "753d4465706172746d656e742532306f6625323074686525323054726561737572792c6f" + + "3d552e532e253230476f7665726e6d656e742c633d55533f636572746966696361746552" + + "65766f636174696f6e4c6973743b62696e617279302b0603551d1004243022800f323031" + + "35303431303135353733385a810f32303138303431303136323733385a301f0603551d23" + + "041830168014a213a8e5c607546c243d4eb72b27a2a7711ab5af301d0603551d0e041604" + + "14b0869c12c293914cd460e33ed43e6c5a26e0d68f301906092a864886f67d074100040c" + + "300a1b0456382e31030203a8300d06092a864886f70d01010b050003820101004968d182" + + "8f9efdc147e747bb5dda15536a42a079b32d3d7f87e619b483aeee70b7e26bda393c6028" + + "7c733ecb468fe8b8b11bf809ff76add6b90eb25ad8d3a1052e43ee281e48a3a1ebe7efb5" + + "9e2c4a48765dedeb23f5346242145786cc988c762d230d28dd33bf4c2405d80cbb2cb1d6" + + "4c8f10ba130d50cb174f6ffb9cfc12808297a2cefba385f4fad170f39b51ebd87c12abf9" + + "3c51fc000af90d8aaba78f48923908804a5eb35f617ccf71d201e3708a559e6d16f9f13e" + + "074361eb9007e28d86bb4e0bfa13aad0e9ddd9124e84519de60e2fc6040b18d9fd602b02" + + "684b4c071c3019fc842197d00c120c41654bcbfbc4a096a1c637b79112b81ce1fa3899f9" + +const ocspRequestHex = "3051304f304d304b3049300906052b0e03021a05000414c0fe0278fc99188891b3f212e9" + + "c7e1b21ab7bfc004140dfc1df0a9e0f01ce7f2b213177e6f8d157cd4f60210017f77deb3" + + "bcbb235d44ccc7dba62e72" + +const leafCertHex = "308203c830820331a0030201020210017f77deb3bcbb235d44ccc7dba62e72300d06092a" + + "864886f70d01010505003081ba311f301d060355040a1316566572695369676e20547275" + + "7374204e6574776f726b31173015060355040b130e566572695369676e2c20496e632e31" + + "333031060355040b132a566572695369676e20496e7465726e6174696f6e616c20536572" + + "766572204341202d20436c617373203331493047060355040b13407777772e7665726973" + + "69676e2e636f6d2f43505320496e636f72702e6279205265662e204c494142494c495459" + + "204c54442e286329393720566572695369676e301e170d3132303632313030303030305a" + + "170d3133313233313233353935395a3068310b3009060355040613025553311330110603" + + "550408130a43616c69666f726e6961311230100603550407130950616c6f20416c746f31" + + "173015060355040a130e46616365626f6f6b2c20496e632e311730150603550403140e2a" + + "2e66616365626f6f6b2e636f6d30819f300d06092a864886f70d010101050003818d0030" + + "818902818100ae94b171e2deccc1693e051063240102e0689ae83c39b6b3e74b97d48d7b" + + "23689100b0b496ee62f0e6d356bcf4aa0f50643402f5d1766aa972835a7564723f39bbef" + + "5290ded9bcdbf9d3d55dfad23aa03dc604c54d29cf1d4b3bdbd1a809cfae47b44c7eae17" + + "c5109bee24a9cf4a8d911bb0fd0415ae4c3f430aa12a557e2ae10203010001a382011e30" + + "82011a30090603551d130402300030440603551d20043d303b3039060b6086480186f845" + + "01071703302a302806082b06010505070201161c68747470733a2f2f7777772e76657269" + + "7369676e2e636f6d2f727061303c0603551d1f043530333031a02fa02d862b687474703a" + + "2f2f535652496e746c2d63726c2e766572697369676e2e636f6d2f535652496e746c2e63" + + "726c301d0603551d250416301406082b0601050507030106082b06010505070302300b06" + + "03551d0f0404030205a0303406082b0601050507010104283026302406082b0601050507" + + "30018618687474703a2f2f6f6373702e766572697369676e2e636f6d30270603551d1104" + + "20301e820e2a2e66616365626f6f6b2e636f6d820c66616365626f6f6b2e636f6d300d06" + + "092a864886f70d0101050500038181005b6c2b75f8ed30aa51aad36aba595e555141951f" + + "81a53b447910ac1f76ff78fc2781616b58f3122afc1c87010425e9ed43df1a7ba6498060" + + "67e2688af03db58c7df4ee03309a6afc247ccb134dc33e54c6bc1d5133a532a73273b1d7" + + "9cadc08e7e1a83116d34523340b0305427a21742827c98916698ee7eaf8c3bdd71700817" + +const issuerCertHex = "30820383308202eca003020102021046fcebbab4d02f0f926098233f93078f300d06092a" + + "864886f70d0101050500305f310b300906035504061302555331173015060355040a130e" + + "566572695369676e2c20496e632e31373035060355040b132e436c617373203320507562" + + "6c6963205072696d6172792043657274696669636174696f6e20417574686f7269747930" + + "1e170d3937303431373030303030305a170d3136313032343233353935395a3081ba311f" + + "301d060355040a1316566572695369676e205472757374204e6574776f726b3117301506" + + "0355040b130e566572695369676e2c20496e632e31333031060355040b132a5665726953" + + "69676e20496e7465726e6174696f6e616c20536572766572204341202d20436c61737320" + + "3331493047060355040b13407777772e766572697369676e2e636f6d2f43505320496e63" + + "6f72702e6279205265662e204c494142494c495459204c54442e28632939372056657269" + + "5369676e30819f300d06092a864886f70d010101050003818d0030818902818100d88280" + + "e8d619027d1f85183925a2652be1bfd405d3bce6363baaf04c6c5bb6e7aa3c734555b2f1" + + "bdea9742ed9a340a15d4a95cf54025ddd907c132b2756cc4cabba3fe56277143aa63f530" + + "3e9328e5faf1093bf3b74d4e39f75c495ab8c11dd3b28afe70309542cbfe2b518b5a3c3a" + + "f9224f90b202a7539c4f34e7ab04b27b6f0203010001a381e33081e0300f0603551d1304" + + "0830060101ff02010030440603551d20043d303b3039060b6086480186f8450107010130" + + "2a302806082b06010505070201161c68747470733a2f2f7777772e766572697369676e2e" + + "636f6d2f43505330340603551d25042d302b06082b0601050507030106082b0601050507" + + "030206096086480186f8420401060a6086480186f845010801300b0603551d0f04040302" + + "0106301106096086480186f842010104040302010630310603551d1f042a30283026a024" + + "a0228620687474703a2f2f63726c2e766572697369676e2e636f6d2f706361332e63726c" + + "300d06092a864886f70d010105050003818100408e4997968a73dd8e4def3e61b7caa062" + + "adf40e0abb753de26ed82cc7bff4b98c369bcaa2d09c724639f6a682036511c4bcbf2da6" + + "f5d93b0ab598fab378b91ef22b4c62d5fdb27a1ddf33fd73f9a5d82d8c2aead1fcb028b6" + + "e94948134b838a1b487b24f738de6f4154b8ab576b06dfc7a2d4a9f6f136628088f28b75" + + "d68071" + +// Key and certificate for the OCSP responder were not taken from the Thawte +// responder, since CreateResponse requires that we have the private key. +// Instead, they were generated randomly. +const responderPrivateKeyHex = "308204a40201000282010100e8155f2d3e6f2e8d14c62a788bd462f9f844e7a6977c83ef" + + "1099f0f6616ec5265b56f356e62c5400f0b06a2e7945a82752c636df32a895152d6074df" + + "1701dc6ccfbcbec75a70bd2b55ae2be7e6cad3b5fd4cd5b7790ab401a436d3f5f346074f" + + "fde8a99d5b723350f0a112076614b12ef79c78991b119453445acf2416ab0046b540db14" + + "c9fc0f27b8989ad0f63aa4b8aefc91aa8a72160c36307c60fec78a93d3fddf4259902aa7" + + "7e7332971c7d285b6a04f648993c6922a3e9da9adf5f81508c3228791843e5d49f24db2f" + + "1290bafd97e655b1049a199f652cd603c4fafa330c390b0da78fbbc67e8fa021cbd74eb9" + + "6222b12ace31a77dcf920334dc94581b02030100010282010100bcf0b93d7238bda329a8" + + "72e7149f61bcb37c154330ccb3f42a85c9002c2e2bdea039d77d8581cd19bed94078794e" + + "56293d601547fc4bf6a2f9002fe5772b92b21b254403b403585e3130cc99ccf08f0ef81a" + + "575b38f597ba4660448b54f44bfbb97072b5a2bf043bfeca828cf7741d13698e3f38162b" + + "679faa646b82abd9a72c5c7d722c5fc577a76d2c2daac588accad18516d1bbad10b0dfa2" + + "05cfe246b59e28608a43942e1b71b0c80498075121de5b900d727c31c42c78cf1db5c0aa" + + "5b491e10ea4ed5c0962aaf2ae025dd81fa4ce490d9d6b4a4465411d8e542fc88617e5695" + + "1aa4fc8ea166f2b4d0eb89ef17f2b206bd5f1014bf8fe0e71fe62f2cccf102818100f2dc" + + "ddf878d553286daad68bac4070a82ffec3dc4666a2750f47879eec913f91836f1d976b60" + + "daf9356e078446dafab5bd2e489e5d64f8572ba24a4ba4f3729b5e106c4dd831cc2497a7" + + "e6c7507df05cb64aeb1bbc81c1e340d58b5964cf39cff84ea30c29ec5d3f005ee1362698" + + "07395037955955655292c3e85f6187fa1f9502818100f4a33c102630840705f8c778a47b" + + "87e8da31e68809af981ac5e5999cf1551685d761cdf0d6520361b99aebd5777a940fa64d" + + "327c09fa63746fbb3247ec73a86edf115f1fe5c83598db803881ade71c33c6e956118345" + + "497b98b5e07bb5be75971465ec78f2f9467e1b74956ca9d4c7c3e314e742a72d8b33889c" + + "6c093a466cef0281801d3df0d02124766dd0be98349b19eb36a508c4e679e793ba0a8bef" + + "4d786888c1e9947078b1ea28938716677b4ad8c5052af12eb73ac194915264a913709a0b" + + "7b9f98d4a18edd781a13d49899f91c20dbd8eb2e61d991ba19b5cdc08893f5cb9d39e5a6" + + "0629ea16d426244673b1b3ee72bd30e41fac8395acac40077403de5efd028180050731dd" + + "d71b1a2b96c8d538ba90bb6b62c8b1c74c03aae9a9f59d21a7a82b0d572ef06fa9c807bf" + + "c373d6b30d809c7871df96510c577421d9860c7383fda0919ece19996b3ca13562159193" + + "c0c246471e287f975e8e57034e5136aaf44254e2650def3d51292474c515b1588969112e" + + "0a85cc77073e9d64d2c2fc497844284b02818100d71d63eabf416cf677401ebf965f8314" + + "120b568a57dd3bd9116c629c40dc0c6948bab3a13cc544c31c7da40e76132ef5dd3f7534" + + "45a635930c74326ae3df0edd1bfb1523e3aa259873ac7cf1ac31151ec8f37b528c275622" + + "48f99b8bed59fd4da2576aa6ee20d93a684900bf907e80c66d6e2261ae15e55284b4ed9d" + + "6bdaa059" + +const responderCertHex = "308202e2308201caa003020102020101300d06092a864886f70d01010b05003019311730" + + "150603550403130e4f43535020526573706f6e646572301e170d31353031333031353530" + + "33335a170d3136303133303135353033335a3019311730150603550403130e4f43535020" + + "526573706f6e64657230820122300d06092a864886f70d01010105000382010f00308201" + + "0a0282010100e8155f2d3e6f2e8d14c62a788bd462f9f844e7a6977c83ef1099f0f6616e" + + "c5265b56f356e62c5400f0b06a2e7945a82752c636df32a895152d6074df1701dc6ccfbc" + + "bec75a70bd2b55ae2be7e6cad3b5fd4cd5b7790ab401a436d3f5f346074ffde8a99d5b72" + + "3350f0a112076614b12ef79c78991b119453445acf2416ab0046b540db14c9fc0f27b898" + + "9ad0f63aa4b8aefc91aa8a72160c36307c60fec78a93d3fddf4259902aa77e7332971c7d" + + "285b6a04f648993c6922a3e9da9adf5f81508c3228791843e5d49f24db2f1290bafd97e6" + + "55b1049a199f652cd603c4fafa330c390b0da78fbbc67e8fa021cbd74eb96222b12ace31" + + "a77dcf920334dc94581b0203010001a3353033300e0603551d0f0101ff04040302078030" + + "130603551d25040c300a06082b06010505070309300c0603551d130101ff04023000300d" + + "06092a864886f70d01010b05000382010100718012761b5063e18f0dc44644d8e6ab8612" + + "31c15fd5357805425d82aec1de85bf6d3e30fce205e3e3b8b795bbe52e40a439286d2288" + + "9064f4aeeb150359b9425f1da51b3a5c939018555d13ac42c565a0603786a919328f3267" + + "09dce52c22ad958ecb7873b9771d1148b1c4be2efe80ba868919fc9f68b6090c2f33c156" + + "d67156e42766a50b5d51e79637b7e58af74c2a951b1e642fa7741fec982cc937de37eff5" + + "9e2005d5939bfc031589ca143e6e8ab83f40ee08cc20a6b4a95a318352c28d18528dcaf9" + + "66705de17afa19d6e8ae91ddf33179d16ebb6ac2c69cae8373d408ebf8c55308be6c04d9" + + "3a25439a94299a65a709756c7a3e568be049d5c38839" + +const errorResponseHex = "30030a0101" diff --git a/vendor/golang.org/x/crypto/openpgp/armor/armor.go b/vendor/golang.org/x/crypto/openpgp/armor/armor.go new file mode 100644 index 0000000..592d186 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/armor/armor.go @@ -0,0 +1,219 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package armor implements OpenPGP ASCII Armor, see RFC 4880. OpenPGP Armor is +// very similar to PEM except that it has an additional CRC checksum. +package armor // import "golang.org/x/crypto/openpgp/armor" + +import ( + "bufio" + "bytes" + "encoding/base64" + "golang.org/x/crypto/openpgp/errors" + "io" +) + +// A Block represents an OpenPGP armored structure. +// +// The encoded form is: +// -----BEGIN Type----- +// Headers +// +// base64-encoded Bytes +// '=' base64 encoded checksum +// -----END Type----- +// where Headers is a possibly empty sequence of Key: Value lines. +// +// Since the armored data can be very large, this package presents a streaming +// interface. +type Block struct { + Type string // The type, taken from the preamble (i.e. "PGP SIGNATURE"). + Header map[string]string // Optional headers. + Body io.Reader // A Reader from which the contents can be read + lReader lineReader + oReader openpgpReader +} + +var ArmorCorrupt error = errors.StructuralError("armor invalid") + +const crc24Init = 0xb704ce +const crc24Poly = 0x1864cfb +const crc24Mask = 0xffffff + +// crc24 calculates the OpenPGP checksum as specified in RFC 4880, section 6.1 +func crc24(crc uint32, d []byte) uint32 { + for _, b := range d { + crc ^= uint32(b) << 16 + for i := 0; i < 8; i++ { + crc <<= 1 + if crc&0x1000000 != 0 { + crc ^= crc24Poly + } + } + } + return crc +} + +var armorStart = []byte("-----BEGIN ") +var armorEnd = []byte("-----END ") +var armorEndOfLine = []byte("-----") + +// lineReader wraps a line based reader. It watches for the end of an armor +// block and records the expected CRC value. +type lineReader struct { + in *bufio.Reader + buf []byte + eof bool + crc uint32 +} + +func (l *lineReader) Read(p []byte) (n int, err error) { + if l.eof { + return 0, io.EOF + } + + if len(l.buf) > 0 { + n = copy(p, l.buf) + l.buf = l.buf[n:] + return + } + + line, isPrefix, err := l.in.ReadLine() + if err != nil { + return + } + if isPrefix { + return 0, ArmorCorrupt + } + + if len(line) == 5 && line[0] == '=' { + // This is the checksum line + var expectedBytes [3]byte + var m int + m, err = base64.StdEncoding.Decode(expectedBytes[0:], line[1:]) + if m != 3 || err != nil { + return + } + l.crc = uint32(expectedBytes[0])<<16 | + uint32(expectedBytes[1])<<8 | + uint32(expectedBytes[2]) + + line, _, err = l.in.ReadLine() + if err != nil && err != io.EOF { + return + } + if !bytes.HasPrefix(line, armorEnd) { + return 0, ArmorCorrupt + } + + l.eof = true + return 0, io.EOF + } + + if len(line) > 96 { + return 0, ArmorCorrupt + } + + n = copy(p, line) + bytesToSave := len(line) - n + if bytesToSave > 0 { + if cap(l.buf) < bytesToSave { + l.buf = make([]byte, 0, bytesToSave) + } + l.buf = l.buf[0:bytesToSave] + copy(l.buf, line[n:]) + } + + return +} + +// openpgpReader passes Read calls to the underlying base64 decoder, but keeps +// a running CRC of the resulting data and checks the CRC against the value +// found by the lineReader at EOF. +type openpgpReader struct { + lReader *lineReader + b64Reader io.Reader + currentCRC uint32 +} + +func (r *openpgpReader) Read(p []byte) (n int, err error) { + n, err = r.b64Reader.Read(p) + r.currentCRC = crc24(r.currentCRC, p[:n]) + + if err == io.EOF { + if r.lReader.crc != uint32(r.currentCRC&crc24Mask) { + return 0, ArmorCorrupt + } + } + + return +} + +// Decode reads a PGP armored block from the given Reader. It will ignore +// leading garbage. If it doesn't find a block, it will return nil, io.EOF. The +// given Reader is not usable after calling this function: an arbitrary amount +// of data may have been read past the end of the block. +func Decode(in io.Reader) (p *Block, err error) { + r := bufio.NewReaderSize(in, 100) + var line []byte + ignoreNext := false + +TryNextBlock: + p = nil + + // Skip leading garbage + for { + ignoreThis := ignoreNext + line, ignoreNext, err = r.ReadLine() + if err != nil { + return + } + if ignoreNext || ignoreThis { + continue + } + line = bytes.TrimSpace(line) + if len(line) > len(armorStart)+len(armorEndOfLine) && bytes.HasPrefix(line, armorStart) { + break + } + } + + p = new(Block) + p.Type = string(line[len(armorStart) : len(line)-len(armorEndOfLine)]) + p.Header = make(map[string]string) + nextIsContinuation := false + var lastKey string + + // Read headers + for { + isContinuation := nextIsContinuation + line, nextIsContinuation, err = r.ReadLine() + if err != nil { + p = nil + return + } + if isContinuation { + p.Header[lastKey] += string(line) + continue + } + line = bytes.TrimSpace(line) + if len(line) == 0 { + break + } + + i := bytes.Index(line, []byte(": ")) + if i == -1 { + goto TryNextBlock + } + lastKey = string(line[:i]) + p.Header[lastKey] = string(line[i+2:]) + } + + p.lReader.in = r + p.oReader.currentCRC = crc24Init + p.oReader.lReader = &p.lReader + p.oReader.b64Reader = base64.NewDecoder(base64.StdEncoding, &p.lReader) + p.Body = &p.oReader + + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/armor/armor_test.go b/vendor/golang.org/x/crypto/openpgp/armor/armor_test.go new file mode 100644 index 0000000..9334e94 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/armor/armor_test.go @@ -0,0 +1,95 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package armor + +import ( + "bytes" + "hash/adler32" + "io/ioutil" + "testing" +) + +func TestDecodeEncode(t *testing.T) { + buf := bytes.NewBuffer([]byte(armorExample1)) + result, err := Decode(buf) + if err != nil { + t.Error(err) + } + expectedType := "PGP SIGNATURE" + if result.Type != expectedType { + t.Errorf("result.Type: got:%s want:%s", result.Type, expectedType) + } + if len(result.Header) != 1 { + t.Errorf("len(result.Header): got:%d want:1", len(result.Header)) + } + v, ok := result.Header["Version"] + if !ok || v != "GnuPG v1.4.10 (GNU/Linux)" { + t.Errorf("result.Header: got:%#v", result.Header) + } + + contents, err := ioutil.ReadAll(result.Body) + if err != nil { + t.Error(err) + } + + if adler32.Checksum(contents) != 0x27b144be { + t.Errorf("contents: got: %x", contents) + } + + buf = bytes.NewBuffer(nil) + w, err := Encode(buf, result.Type, result.Header) + if err != nil { + t.Error(err) + } + _, err = w.Write(contents) + if err != nil { + t.Error(err) + } + w.Close() + + if !bytes.Equal(buf.Bytes(), []byte(armorExample1)) { + t.Errorf("got: %s\nwant: %s", string(buf.Bytes()), armorExample1) + } +} + +func TestLongHeader(t *testing.T) { + buf := bytes.NewBuffer([]byte(armorLongLine)) + result, err := Decode(buf) + if err != nil { + t.Error(err) + return + } + value, ok := result.Header["Version"] + if !ok { + t.Errorf("missing Version header") + } + if value != longValueExpected { + t.Errorf("got: %s want: %s", value, longValueExpected) + } +} + +const armorExample1 = `-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.10 (GNU/Linux) + +iJwEAAECAAYFAk1Fv/0ACgkQo01+GMIMMbsYTwQAiAw+QAaNfY6WBdplZ/uMAccm +4g+81QPmTSGHnetSb6WBiY13kVzK4HQiZH8JSkmmroMLuGeJwsRTEL4wbjRyUKEt +p1xwUZDECs234F1xiG5enc5SGlRtP7foLBz9lOsjx+LEcA4sTl5/2eZR9zyFZqWW +TxRjs+fJCIFuo71xb1g= +=/teI +-----END PGP SIGNATURE-----` + +const armorLongLine = `-----BEGIN PGP SIGNATURE----- +Version: 0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz + +iQEcBAABAgAGBQJMtFESAAoJEKsQXJGvOPsVj40H/1WW6jaMXv4BW+1ueDSMDwM8 +kx1fLOXbVM5/Kn5LStZNt1jWWnpxdz7eq3uiqeCQjmqUoRde3YbB2EMnnwRbAhpp +cacnAvy9ZQ78OTxUdNW1mhX5bS6q1MTEJnl+DcyigD70HG/yNNQD7sOPMdYQw0TA +byQBwmLwmTsuZsrYqB68QyLHI+DUugn+kX6Hd2WDB62DKa2suoIUIHQQCd/ofwB3 +WfCYInXQKKOSxu2YOg2Eb4kLNhSMc1i9uKUWAH+sdgJh7NBgdoE4MaNtBFkHXRvv +okWuf3+xA9ksp1npSY/mDvgHijmjvtpRDe6iUeqfCn8N9u9CBg8geANgaG8+QA4= +=wfQG +-----END PGP SIGNATURE-----` + +const longValueExpected = "0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz" diff --git a/vendor/golang.org/x/crypto/openpgp/armor/encode.go b/vendor/golang.org/x/crypto/openpgp/armor/encode.go new file mode 100644 index 0000000..6f07582 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/armor/encode.go @@ -0,0 +1,160 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package armor + +import ( + "encoding/base64" + "io" +) + +var armorHeaderSep = []byte(": ") +var blockEnd = []byte("\n=") +var newline = []byte("\n") +var armorEndOfLineOut = []byte("-----\n") + +// writeSlices writes its arguments to the given Writer. +func writeSlices(out io.Writer, slices ...[]byte) (err error) { + for _, s := range slices { + _, err = out.Write(s) + if err != nil { + return err + } + } + return +} + +// lineBreaker breaks data across several lines, all of the same byte length +// (except possibly the last). Lines are broken with a single '\n'. +type lineBreaker struct { + lineLength int + line []byte + used int + out io.Writer + haveWritten bool +} + +func newLineBreaker(out io.Writer, lineLength int) *lineBreaker { + return &lineBreaker{ + lineLength: lineLength, + line: make([]byte, lineLength), + used: 0, + out: out, + } +} + +func (l *lineBreaker) Write(b []byte) (n int, err error) { + n = len(b) + + if n == 0 { + return + } + + if l.used == 0 && l.haveWritten { + _, err = l.out.Write([]byte{'\n'}) + if err != nil { + return + } + } + + if l.used+len(b) < l.lineLength { + l.used += copy(l.line[l.used:], b) + return + } + + l.haveWritten = true + _, err = l.out.Write(l.line[0:l.used]) + if err != nil { + return + } + excess := l.lineLength - l.used + l.used = 0 + + _, err = l.out.Write(b[0:excess]) + if err != nil { + return + } + + _, err = l.Write(b[excess:]) + return +} + +func (l *lineBreaker) Close() (err error) { + if l.used > 0 { + _, err = l.out.Write(l.line[0:l.used]) + if err != nil { + return + } + } + + return +} + +// encoding keeps track of a running CRC24 over the data which has been written +// to it and outputs a OpenPGP checksum when closed, followed by an armor +// trailer. +// +// It's built into a stack of io.Writers: +// encoding -> base64 encoder -> lineBreaker -> out +type encoding struct { + out io.Writer + breaker *lineBreaker + b64 io.WriteCloser + crc uint32 + blockType []byte +} + +func (e *encoding) Write(data []byte) (n int, err error) { + e.crc = crc24(e.crc, data) + return e.b64.Write(data) +} + +func (e *encoding) Close() (err error) { + err = e.b64.Close() + if err != nil { + return + } + e.breaker.Close() + + var checksumBytes [3]byte + checksumBytes[0] = byte(e.crc >> 16) + checksumBytes[1] = byte(e.crc >> 8) + checksumBytes[2] = byte(e.crc) + + var b64ChecksumBytes [4]byte + base64.StdEncoding.Encode(b64ChecksumBytes[:], checksumBytes[:]) + + return writeSlices(e.out, blockEnd, b64ChecksumBytes[:], newline, armorEnd, e.blockType, armorEndOfLine) +} + +// Encode returns a WriteCloser which will encode the data written to it in +// OpenPGP armor. +func Encode(out io.Writer, blockType string, headers map[string]string) (w io.WriteCloser, err error) { + bType := []byte(blockType) + err = writeSlices(out, armorStart, bType, armorEndOfLineOut) + if err != nil { + return + } + + for k, v := range headers { + err = writeSlices(out, []byte(k), armorHeaderSep, []byte(v), newline) + if err != nil { + return + } + } + + _, err = out.Write(newline) + if err != nil { + return + } + + e := &encoding{ + out: out, + breaker: newLineBreaker(out, 64), + crc: crc24Init, + blockType: bType, + } + e.b64 = base64.NewEncoder(base64.StdEncoding, e.breaker) + return e, nil +} diff --git a/vendor/golang.org/x/crypto/openpgp/canonical_text.go b/vendor/golang.org/x/crypto/openpgp/canonical_text.go new file mode 100644 index 0000000..e601e38 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/canonical_text.go @@ -0,0 +1,59 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import "hash" + +// NewCanonicalTextHash reformats text written to it into the canonical +// form and then applies the hash h. See RFC 4880, section 5.2.1. +func NewCanonicalTextHash(h hash.Hash) hash.Hash { + return &canonicalTextHash{h, 0} +} + +type canonicalTextHash struct { + h hash.Hash + s int +} + +var newline = []byte{'\r', '\n'} + +func (cth *canonicalTextHash) Write(buf []byte) (int, error) { + start := 0 + + for i, c := range buf { + switch cth.s { + case 0: + if c == '\r' { + cth.s = 1 + } else if c == '\n' { + cth.h.Write(buf[start:i]) + cth.h.Write(newline) + start = i + 1 + } + case 1: + cth.s = 0 + } + } + + cth.h.Write(buf[start:]) + return len(buf), nil +} + +func (cth *canonicalTextHash) Sum(in []byte) []byte { + return cth.h.Sum(in) +} + +func (cth *canonicalTextHash) Reset() { + cth.h.Reset() + cth.s = 0 +} + +func (cth *canonicalTextHash) Size() int { + return cth.h.Size() +} + +func (cth *canonicalTextHash) BlockSize() int { + return cth.h.BlockSize() +} diff --git a/vendor/golang.org/x/crypto/openpgp/canonical_text_test.go b/vendor/golang.org/x/crypto/openpgp/canonical_text_test.go new file mode 100644 index 0000000..8f3ba2a --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/canonical_text_test.go @@ -0,0 +1,52 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "bytes" + "testing" +) + +type recordingHash struct { + buf *bytes.Buffer +} + +func (r recordingHash) Write(b []byte) (n int, err error) { + return r.buf.Write(b) +} + +func (r recordingHash) Sum(in []byte) []byte { + return append(in, r.buf.Bytes()...) +} + +func (r recordingHash) Reset() { + panic("shouldn't be called") +} + +func (r recordingHash) Size() int { + panic("shouldn't be called") +} + +func (r recordingHash) BlockSize() int { + panic("shouldn't be called") +} + +func testCanonicalText(t *testing.T, input, expected string) { + r := recordingHash{bytes.NewBuffer(nil)} + c := NewCanonicalTextHash(r) + c.Write([]byte(input)) + result := c.Sum(nil) + if expected != string(result) { + t.Errorf("input: %x got: %x want: %x", input, result, expected) + } +} + +func TestCanonicalText(t *testing.T) { + testCanonicalText(t, "foo\n", "foo\r\n") + testCanonicalText(t, "foo", "foo") + testCanonicalText(t, "foo\r\n", "foo\r\n") + testCanonicalText(t, "foo\r\nbar", "foo\r\nbar") + testCanonicalText(t, "foo\r\nbar\n\n", "foo\r\nbar\r\n\r\n") +} diff --git a/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go new file mode 100644 index 0000000..def4cab --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign.go @@ -0,0 +1,376 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package clearsign generates and processes OpenPGP, clear-signed data. See +// RFC 4880, section 7. +// +// Clearsigned messages are cryptographically signed, but the contents of the +// message are kept in plaintext so that it can be read without special tools. +package clearsign // import "golang.org/x/crypto/openpgp/clearsign" + +import ( + "bufio" + "bytes" + "crypto" + "hash" + "io" + "net/textproto" + "strconv" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" +) + +// A Block represents a clearsigned message. A signature on a Block can +// be checked by passing Bytes into openpgp.CheckDetachedSignature. +type Block struct { + Headers textproto.MIMEHeader // Optional message headers + Plaintext []byte // The original message text + Bytes []byte // The signed message + ArmoredSignature *armor.Block // The signature block +} + +// start is the marker which denotes the beginning of a clearsigned message. +var start = []byte("\n-----BEGIN PGP SIGNED MESSAGE-----") + +// dashEscape is prefixed to any lines that begin with a hyphen so that they +// can't be confused with endText. +var dashEscape = []byte("- ") + +// endText is a marker which denotes the end of the message and the start of +// an armored signature. +var endText = []byte("-----BEGIN PGP SIGNATURE-----") + +// end is a marker which denotes the end of the armored signature. +var end = []byte("\n-----END PGP SIGNATURE-----") + +var crlf = []byte("\r\n") +var lf = byte('\n') + +// getLine returns the first \r\n or \n delineated line from the given byte +// array. The line does not include the \r\n or \n. The remainder of the byte +// array (also not including the new line bytes) is also returned and this will +// always be smaller than the original argument. +func getLine(data []byte) (line, rest []byte) { + i := bytes.Index(data, []byte{'\n'}) + var j int + if i < 0 { + i = len(data) + j = i + } else { + j = i + 1 + if i > 0 && data[i-1] == '\r' { + i-- + } + } + return data[0:i], data[j:] +} + +// Decode finds the first clearsigned message in data and returns it, as well +// as the suffix of data which remains after the message. +func Decode(data []byte) (b *Block, rest []byte) { + // start begins with a newline. However, at the very beginning of + // the byte array, we'll accept the start string without it. + rest = data + if bytes.HasPrefix(data, start[1:]) { + rest = rest[len(start)-1:] + } else if i := bytes.Index(data, start); i >= 0 { + rest = rest[i+len(start):] + } else { + return nil, data + } + + // Consume the start line. + _, rest = getLine(rest) + + var line []byte + b = &Block{ + Headers: make(textproto.MIMEHeader), + } + + // Next come a series of header lines. + for { + // This loop terminates because getLine's second result is + // always smaller than its argument. + if len(rest) == 0 { + return nil, data + } + // An empty line marks the end of the headers. + if line, rest = getLine(rest); len(line) == 0 { + break + } + + i := bytes.Index(line, []byte{':'}) + if i == -1 { + return nil, data + } + + key, val := line[0:i], line[i+1:] + key = bytes.TrimSpace(key) + val = bytes.TrimSpace(val) + b.Headers.Add(string(key), string(val)) + } + + firstLine := true + for { + start := rest + + line, rest = getLine(rest) + if len(line) == 0 && len(rest) == 0 { + // No armored data was found, so this isn't a complete message. + return nil, data + } + if bytes.Equal(line, endText) { + // Back up to the start of the line because armor expects to see the + // header line. + rest = start + break + } + + // The final CRLF isn't included in the hash so we don't write it until + // we've seen the next line. + if firstLine { + firstLine = false + } else { + b.Bytes = append(b.Bytes, crlf...) + } + + if bytes.HasPrefix(line, dashEscape) { + line = line[2:] + } + line = bytes.TrimRight(line, " \t") + b.Bytes = append(b.Bytes, line...) + + b.Plaintext = append(b.Plaintext, line...) + b.Plaintext = append(b.Plaintext, lf) + } + + // We want to find the extent of the armored data (including any newlines at + // the end). + i := bytes.Index(rest, end) + if i == -1 { + return nil, data + } + i += len(end) + for i < len(rest) && (rest[i] == '\r' || rest[i] == '\n') { + i++ + } + armored := rest[:i] + rest = rest[i:] + + var err error + b.ArmoredSignature, err = armor.Decode(bytes.NewBuffer(armored)) + if err != nil { + return nil, data + } + + return b, rest +} + +// A dashEscaper is an io.WriteCloser which processes the body of a clear-signed +// message. The clear-signed message is written to buffered and a hash, suitable +// for signing, is maintained in h. +// +// When closed, an armored signature is created and written to complete the +// message. +type dashEscaper struct { + buffered *bufio.Writer + h hash.Hash + hashType crypto.Hash + + atBeginningOfLine bool + isFirstLine bool + + whitespace []byte + byteBuf []byte // a one byte buffer to save allocations + + privateKey *packet.PrivateKey + config *packet.Config +} + +func (d *dashEscaper) Write(data []byte) (n int, err error) { + for _, b := range data { + d.byteBuf[0] = b + + if d.atBeginningOfLine { + // The final CRLF isn't included in the hash so we have to wait + // until this point (the start of the next line) before writing it. + if !d.isFirstLine { + d.h.Write(crlf) + } + d.isFirstLine = false + } + + // Any whitespace at the end of the line has to be removed so we + // buffer it until we find out whether there's more on this line. + if b == ' ' || b == '\t' || b == '\r' { + d.whitespace = append(d.whitespace, b) + d.atBeginningOfLine = false + continue + } + + if d.atBeginningOfLine { + // At the beginning of a line, hyphens have to be escaped. + if b == '-' { + // The signature isn't calculated over the dash-escaped text so + // the escape is only written to buffered. + if _, err = d.buffered.Write(dashEscape); err != nil { + return + } + d.h.Write(d.byteBuf) + d.atBeginningOfLine = false + } else if b == '\n' { + // Nothing to do because we delay writing CRLF to the hash. + } else { + d.h.Write(d.byteBuf) + d.atBeginningOfLine = false + } + if err = d.buffered.WriteByte(b); err != nil { + return + } + } else { + if b == '\n' { + // We got a raw \n. Drop any trailing whitespace and write a + // CRLF. + d.whitespace = d.whitespace[:0] + // We delay writing CRLF to the hash until the start of the + // next line. + if err = d.buffered.WriteByte(b); err != nil { + return + } + d.atBeginningOfLine = true + } else { + // Any buffered whitespace wasn't at the end of the line so + // we need to write it out. + if len(d.whitespace) > 0 { + d.h.Write(d.whitespace) + if _, err = d.buffered.Write(d.whitespace); err != nil { + return + } + d.whitespace = d.whitespace[:0] + } + d.h.Write(d.byteBuf) + if err = d.buffered.WriteByte(b); err != nil { + return + } + } + } + } + + n = len(data) + return +} + +func (d *dashEscaper) Close() (err error) { + if !d.atBeginningOfLine { + if err = d.buffered.WriteByte(lf); err != nil { + return + } + } + sig := new(packet.Signature) + sig.SigType = packet.SigTypeText + sig.PubKeyAlgo = d.privateKey.PubKeyAlgo + sig.Hash = d.hashType + sig.CreationTime = d.config.Now() + sig.IssuerKeyId = &d.privateKey.KeyId + + if err = sig.Sign(d.h, d.privateKey, d.config); err != nil { + return + } + + out, err := armor.Encode(d.buffered, "PGP SIGNATURE", nil) + if err != nil { + return + } + + if err = sig.Serialize(out); err != nil { + return + } + if err = out.Close(); err != nil { + return + } + if err = d.buffered.Flush(); err != nil { + return + } + return +} + +// Encode returns a WriteCloser which will clear-sign a message with privateKey +// and write it to w. If config is nil, sensible defaults are used. +func Encode(w io.Writer, privateKey *packet.PrivateKey, config *packet.Config) (plaintext io.WriteCloser, err error) { + if privateKey.Encrypted { + return nil, errors.InvalidArgumentError("signing key is encrypted") + } + + hashType := config.Hash() + name := nameOfHash(hashType) + if len(name) == 0 { + return nil, errors.UnsupportedError("unknown hash type: " + strconv.Itoa(int(hashType))) + } + + if !hashType.Available() { + return nil, errors.UnsupportedError("unsupported hash type: " + strconv.Itoa(int(hashType))) + } + h := hashType.New() + + buffered := bufio.NewWriter(w) + // start has a \n at the beginning that we don't want here. + if _, err = buffered.Write(start[1:]); err != nil { + return + } + if err = buffered.WriteByte(lf); err != nil { + return + } + if _, err = buffered.WriteString("Hash: "); err != nil { + return + } + if _, err = buffered.WriteString(name); err != nil { + return + } + if err = buffered.WriteByte(lf); err != nil { + return + } + if err = buffered.WriteByte(lf); err != nil { + return + } + + plaintext = &dashEscaper{ + buffered: buffered, + h: h, + hashType: hashType, + + atBeginningOfLine: true, + isFirstLine: true, + + byteBuf: make([]byte, 1), + + privateKey: privateKey, + config: config, + } + + return +} + +// nameOfHash returns the OpenPGP name for the given hash, or the empty string +// if the name isn't known. See RFC 4880, section 9.4. +func nameOfHash(h crypto.Hash) string { + switch h { + case crypto.MD5: + return "MD5" + case crypto.SHA1: + return "SHA1" + case crypto.RIPEMD160: + return "RIPEMD160" + case crypto.SHA224: + return "SHA224" + case crypto.SHA256: + return "SHA256" + case crypto.SHA384: + return "SHA384" + case crypto.SHA512: + return "SHA512" + } + return "" +} diff --git a/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign_test.go b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign_test.go new file mode 100644 index 0000000..2c09480 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/clearsign/clearsign_test.go @@ -0,0 +1,210 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package clearsign + +import ( + "bytes" + "golang.org/x/crypto/openpgp" + "testing" +) + +func testParse(t *testing.T, input []byte, expected, expectedPlaintext string) { + b, rest := Decode(input) + if b == nil { + t.Fatal("failed to decode clearsign message") + } + if !bytes.Equal(rest, []byte("trailing")) { + t.Errorf("unexpected remaining bytes returned: %s", string(rest)) + } + if b.ArmoredSignature.Type != "PGP SIGNATURE" { + t.Errorf("bad armor type, got:%s, want:PGP SIGNATURE", b.ArmoredSignature.Type) + } + if !bytes.Equal(b.Bytes, []byte(expected)) { + t.Errorf("bad body, got:%x want:%x", b.Bytes, expected) + } + + if !bytes.Equal(b.Plaintext, []byte(expectedPlaintext)) { + t.Errorf("bad plaintext, got:%x want:%x", b.Plaintext, expectedPlaintext) + } + + keyring, err := openpgp.ReadArmoredKeyRing(bytes.NewBufferString(signingKey)) + if err != nil { + t.Errorf("failed to parse public key: %s", err) + } + + if _, err := openpgp.CheckDetachedSignature(keyring, bytes.NewBuffer(b.Bytes), b.ArmoredSignature.Body); err != nil { + t.Errorf("failed to check signature: %s", err) + } +} + +func TestParse(t *testing.T) { + testParse(t, clearsignInput, "Hello world\r\nline 2", "Hello world\nline 2\n") + testParse(t, clearsignInput2, "\r\n\r\n(This message has a couple of blank lines at the start and end.)\r\n\r\n", "\n\n(This message has a couple of blank lines at the start and end.)\n\n\n") +} + +func TestParseInvalid(t *testing.T) { + if b, _ := Decode(clearsignInput3); b != nil { + t.Fatal("decoded a bad clearsigned message without any error") + } +} + +func TestParseWithNoNewlineAtEnd(t *testing.T) { + input := clearsignInput + input = input[:len(input)-len("trailing")-1] + b, rest := Decode(input) + if b == nil { + t.Fatal("failed to decode clearsign message") + } + if len(rest) > 0 { + t.Errorf("unexpected remaining bytes returned: %s", string(rest)) + } +} + +var signingTests = []struct { + in, signed, plaintext string +}{ + {"", "", ""}, + {"a", "a", "a\n"}, + {"a\n", "a", "a\n"}, + {"-a\n", "-a", "-a\n"}, + {"--a\nb", "--a\r\nb", "--a\nb\n"}, + // leading whitespace + {" a\n", " a", " a\n"}, + {" a\n", " a", " a\n"}, + // trailing whitespace (should be stripped) + {"a \n", "a", "a\n"}, + {"a ", "a", "a\n"}, + // whitespace-only lines (should be stripped) + {" \n", "", "\n"}, + {" ", "", "\n"}, + {"a\n \n \nb\n", "a\r\n\r\n\r\nb", "a\n\n\nb\n"}, +} + +func TestSigning(t *testing.T) { + keyring, err := openpgp.ReadArmoredKeyRing(bytes.NewBufferString(signingKey)) + if err != nil { + t.Errorf("failed to parse public key: %s", err) + } + + for i, test := range signingTests { + var buf bytes.Buffer + + plaintext, err := Encode(&buf, keyring[0].PrivateKey, nil) + if err != nil { + t.Errorf("#%d: error from Encode: %s", i, err) + continue + } + if _, err := plaintext.Write([]byte(test.in)); err != nil { + t.Errorf("#%d: error from Write: %s", i, err) + continue + } + if err := plaintext.Close(); err != nil { + t.Fatalf("#%d: error from Close: %s", i, err) + continue + } + + b, _ := Decode(buf.Bytes()) + if b == nil { + t.Errorf("#%d: failed to decode clearsign message", i) + continue + } + if !bytes.Equal(b.Bytes, []byte(test.signed)) { + t.Errorf("#%d: bad result, got:%x, want:%x", i, b.Bytes, test.signed) + continue + } + if !bytes.Equal(b.Plaintext, []byte(test.plaintext)) { + t.Errorf("#%d: bad result, got:%x, want:%x", i, b.Plaintext, test.plaintext) + continue + } + + if _, err := openpgp.CheckDetachedSignature(keyring, bytes.NewBuffer(b.Bytes), b.ArmoredSignature.Body); err != nil { + t.Errorf("#%d: failed to check signature: %s", i, err) + } + } +} + +var clearsignInput = []byte(` +;lasjlkfdsa + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +Hello world +line 2 +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.10 (GNU/Linux) + +iJwEAQECAAYFAk8kMuEACgkQO9o98PRieSpMsAQAhmY/vwmNpflrPgmfWsYhk5O8 +pjnBUzZwqTDoDeINjZEoPDSpQAHGhjFjgaDx/Gj4fAl0dM4D0wuUEBb6QOrwflog +2A2k9kfSOMOtk0IH/H5VuFN1Mie9L/erYXjTQIptv9t9J7NoRBMU0QOOaFU0JaO9 +MyTpno24AjIAGb+mH1U= +=hIJ6 +-----END PGP SIGNATURE----- +trailing`) + +var clearsignInput2 = []byte(` +asdlfkjasdlkfjsadf + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + + + +(This message has a couple of blank lines at the start and end.) + + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1.4.11 (GNU/Linux) + +iJwEAQEIAAYFAlPpSREACgkQO9o98PRieSpZTAP+M8QUoCt/7Rf3YbXPcdzIL32v +pt1I+cMNeopzfLy0u4ioEFi8s5VkwpL1AFmirvgViCwlf82inoRxzZRiW05JQ5LI +ESEzeCoy2LIdRCQ2hcrG8pIUPzUO4TqO5D/dMbdHwNH4h5nNmGJUAEG6FpURlPm+ +qZg6BaTvOxepqOxnhVU= +=e+C6 +-----END PGP SIGNATURE----- + +trailing`) + +var clearsignInput3 = []byte(` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +(This message was truncated.) +`) + +var signingKey = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: GnuPG v1.4.10 (GNU/Linux) + +lQHYBE2rFNoBBADFwqWQIW/DSqcB4yCQqnAFTJ27qS5AnB46ccAdw3u4Greeu3Bp +idpoHdjULy7zSKlwR1EA873dO/k/e11Ml3dlAFUinWeejWaK2ugFP6JjiieSsrKn +vWNicdCS4HTWn0X4sjl0ZiAygw6GNhqEQ3cpLeL0g8E9hnYzJKQ0LWJa0QARAQAB +AAP/TB81EIo2VYNmTq0pK1ZXwUpxCrvAAIG3hwKjEzHcbQznsjNvPUihZ+NZQ6+X +0HCfPAdPkGDCLCb6NavcSW+iNnLTrdDnSI6+3BbIONqWWdRDYJhqZCkqmG6zqSfL +IdkJgCw94taUg5BWP/AAeQrhzjChvpMQTVKQL5mnuZbUCeMCAN5qrYMP2S9iKdnk +VANIFj7656ARKt/nf4CBzxcpHTyB8+d2CtPDKCmlJP6vL8t58Jmih+kHJMvC0dzn +gr5f5+sCAOOe5gt9e0am7AvQWhdbHVfJU0TQJx+m2OiCJAqGTB1nvtBLHdJnfdC9 +TnXXQ6ZXibqLyBies/xeY2sCKL5qtTMCAKnX9+9d/5yQxRyrQUHt1NYhaXZnJbHx +q4ytu0eWz+5i68IYUSK69jJ1NWPM0T6SkqpB3KCAIv68VFm9PxqG1KmhSrQIVGVz +dCBLZXmIuAQTAQIAIgUCTasU2gIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AA +CgkQO9o98PRieSoLhgQAkLEZex02Qt7vGhZzMwuN0R22w3VwyYyjBx+fM3JFETy1 +ut4xcLJoJfIaF5ZS38UplgakHG0FQ+b49i8dMij0aZmDqGxrew1m4kBfjXw9B/v+ +eIqpODryb6cOSwyQFH0lQkXC040pjq9YqDsO5w0WYNXYKDnzRV0p4H1pweo2VDid +AdgETasU2gEEAN46UPeWRqKHvA99arOxee38fBt2CI08iiWyI8T3J6ivtFGixSqV +bRcPxYO/qLpVe5l84Nb3X71GfVXlc9hyv7CD6tcowL59hg1E/DC5ydI8K8iEpUmK +/UnHdIY5h8/kqgGxkY/T/hgp5fRQgW1ZoZxLajVlMRZ8W4tFtT0DeA+JABEBAAEA +A/0bE1jaaZKj6ndqcw86jd+QtD1SF+Cf21CWRNeLKnUds4FRRvclzTyUMuWPkUeX +TaNNsUOFqBsf6QQ2oHUBBK4VCHffHCW4ZEX2cd6umz7mpHW6XzN4DECEzOVksXtc +lUC1j4UB91DC/RNQqwX1IV2QLSwssVotPMPqhOi0ZLNY7wIA3n7DWKInxYZZ4K+6 +rQ+POsz6brEoRHwr8x6XlHenq1Oki855pSa1yXIARoTrSJkBtn5oI+f8AzrnN0BN +oyeQAwIA/7E++3HDi5aweWrViiul9cd3rcsS0dEnksPhvS0ozCJiHsq/6GFmy7J8 +QSHZPteedBnZyNp5jR+H7cIfVN3KgwH/Skq4PsuPhDq5TKK6i8Pc1WW8MA6DXTdU +nLkX7RGmMwjC0DBf7KWAlPjFaONAX3a8ndnz//fy1q7u2l9AZwrj1qa1iJ8EGAEC +AAkFAk2rFNoCGwwACgkQO9o98PRieSo2/QP/WTzr4ioINVsvN1akKuekmEMI3LAp +BfHwatufxxP1U+3Si/6YIk7kuPB9Hs+pRqCXzbvPRrI8NHZBmc8qIGthishdCYad +AHcVnXjtxrULkQFGbGvhKURLvS9WnzD/m1K2zzwxzkPTzT9/Yf06O6Mal5AdugPL +VrM0m72/jnpKo04= +=zNCn +-----END PGP PRIVATE KEY BLOCK----- +` diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go new file mode 100644 index 0000000..73f4fe3 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal.go @@ -0,0 +1,122 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package elgamal implements ElGamal encryption, suitable for OpenPGP, +// as specified in "A Public-Key Cryptosystem and a Signature Scheme Based on +// Discrete Logarithms," IEEE Transactions on Information Theory, v. IT-31, +// n. 4, 1985, pp. 469-472. +// +// This form of ElGamal embeds PKCS#1 v1.5 padding, which may make it +// unsuitable for other protocols. RSA should be used in preference in any +// case. +package elgamal // import "golang.org/x/crypto/openpgp/elgamal" + +import ( + "crypto/rand" + "crypto/subtle" + "errors" + "io" + "math/big" +) + +// PublicKey represents an ElGamal public key. +type PublicKey struct { + G, P, Y *big.Int +} + +// PrivateKey represents an ElGamal private key. +type PrivateKey struct { + PublicKey + X *big.Int +} + +// Encrypt encrypts the given message to the given public key. The result is a +// pair of integers. Errors can result from reading random, or because msg is +// too large to be encrypted to the public key. +func Encrypt(random io.Reader, pub *PublicKey, msg []byte) (c1, c2 *big.Int, err error) { + pLen := (pub.P.BitLen() + 7) / 8 + if len(msg) > pLen-11 { + err = errors.New("elgamal: message too long") + return + } + + // EM = 0x02 || PS || 0x00 || M + em := make([]byte, pLen-1) + em[0] = 2 + ps, mm := em[1:len(em)-len(msg)-1], em[len(em)-len(msg):] + err = nonZeroRandomBytes(ps, random) + if err != nil { + return + } + em[len(em)-len(msg)-1] = 0 + copy(mm, msg) + + m := new(big.Int).SetBytes(em) + + k, err := rand.Int(random, pub.P) + if err != nil { + return + } + + c1 = new(big.Int).Exp(pub.G, k, pub.P) + s := new(big.Int).Exp(pub.Y, k, pub.P) + c2 = s.Mul(s, m) + c2.Mod(c2, pub.P) + + return +} + +// Decrypt takes two integers, resulting from an ElGamal encryption, and +// returns the plaintext of the message. An error can result only if the +// ciphertext is invalid. Users should keep in mind that this is a padding +// oracle and thus, if exposed to an adaptive chosen ciphertext attack, can +// be used to break the cryptosystem. See ``Chosen Ciphertext Attacks +// Against Protocols Based on the RSA Encryption Standard PKCS #1'', Daniel +// Bleichenbacher, Advances in Cryptology (Crypto '98), +func Decrypt(priv *PrivateKey, c1, c2 *big.Int) (msg []byte, err error) { + s := new(big.Int).Exp(c1, priv.X, priv.P) + s.ModInverse(s, priv.P) + s.Mul(s, c2) + s.Mod(s, priv.P) + em := s.Bytes() + + firstByteIsTwo := subtle.ConstantTimeByteEq(em[0], 2) + + // The remainder of the plaintext must be a string of non-zero random + // octets, followed by a 0, followed by the message. + // lookingForIndex: 1 iff we are still looking for the zero. + // index: the offset of the first zero byte. + var lookingForIndex, index int + lookingForIndex = 1 + + for i := 1; i < len(em); i++ { + equals0 := subtle.ConstantTimeByteEq(em[i], 0) + index = subtle.ConstantTimeSelect(lookingForIndex&equals0, i, index) + lookingForIndex = subtle.ConstantTimeSelect(equals0, 0, lookingForIndex) + } + + if firstByteIsTwo != 1 || lookingForIndex != 0 || index < 9 { + return nil, errors.New("elgamal: decryption error") + } + return em[index+1:], nil +} + +// nonZeroRandomBytes fills the given slice with non-zero random octets. +func nonZeroRandomBytes(s []byte, rand io.Reader) (err error) { + _, err = io.ReadFull(rand, s) + if err != nil { + return + } + + for i := 0; i < len(s); i++ { + for s[i] == 0 { + _, err = io.ReadFull(rand, s[i:i+1]) + if err != nil { + return + } + } + } + + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal_test.go b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal_test.go new file mode 100644 index 0000000..c4f99f5 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/elgamal/elgamal_test.go @@ -0,0 +1,49 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package elgamal + +import ( + "bytes" + "crypto/rand" + "math/big" + "testing" +) + +// This is the 1024-bit MODP group from RFC 5114, section 2.1: +const primeHex = "B10B8F96A080E01DDE92DE5EAE5D54EC52C99FBCFB06A3C69A6A9DCA52D23B616073E28675A23D189838EF1E2EE652C013ECB4AEA906112324975C3CD49B83BFACCBDD7D90C4BD7098488E9C219A73724EFFD6FAE5644738FAA31A4FF55BCCC0A151AF5F0DC8B4BD45BF37DF365C1A65E68CFDA76D4DA708DF1FB2BC2E4A4371" + +const generatorHex = "A4D1CBD5C3FD34126765A442EFB99905F8104DD258AC507FD6406CFF14266D31266FEA1E5C41564B777E690F5504F213160217B4B01B886A5E91547F9E2749F4D7FBD7D3B9A92EE1909D0D2263F80A76A6A24C087A091F531DBF0A0169B6A28AD662A4D18E73AFA32D779D5918D08BC8858F4DCEF97C2A24855E6EEB22B3B2E5" + +func fromHex(hex string) *big.Int { + n, ok := new(big.Int).SetString(hex, 16) + if !ok { + panic("failed to parse hex number") + } + return n +} + +func TestEncryptDecrypt(t *testing.T) { + priv := &PrivateKey{ + PublicKey: PublicKey{ + G: fromHex(generatorHex), + P: fromHex(primeHex), + }, + X: fromHex("42"), + } + priv.Y = new(big.Int).Exp(priv.G, priv.X, priv.P) + + message := []byte("hello world") + c1, c2, err := Encrypt(rand.Reader, &priv.PublicKey, message) + if err != nil { + t.Errorf("error encrypting: %s", err) + } + message2, err := Decrypt(priv, c1, c2) + if err != nil { + t.Errorf("error decrypting: %s", err) + } + if !bytes.Equal(message2, message) { + t.Errorf("decryption failed, got: %x, want: %x", message2, message) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/errors/errors.go b/vendor/golang.org/x/crypto/openpgp/errors/errors.go new file mode 100644 index 0000000..eb0550b --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/errors/errors.go @@ -0,0 +1,72 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package errors contains common error types for the OpenPGP packages. +package errors // import "golang.org/x/crypto/openpgp/errors" + +import ( + "strconv" +) + +// A StructuralError is returned when OpenPGP data is found to be syntactically +// invalid. +type StructuralError string + +func (s StructuralError) Error() string { + return "openpgp: invalid data: " + string(s) +} + +// UnsupportedError indicates that, although the OpenPGP data is valid, it +// makes use of currently unimplemented features. +type UnsupportedError string + +func (s UnsupportedError) Error() string { + return "openpgp: unsupported feature: " + string(s) +} + +// InvalidArgumentError indicates that the caller is in error and passed an +// incorrect value. +type InvalidArgumentError string + +func (i InvalidArgumentError) Error() string { + return "openpgp: invalid argument: " + string(i) +} + +// SignatureError indicates that a syntactically valid signature failed to +// validate. +type SignatureError string + +func (b SignatureError) Error() string { + return "openpgp: invalid signature: " + string(b) +} + +type keyIncorrectError int + +func (ki keyIncorrectError) Error() string { + return "openpgp: incorrect key" +} + +var ErrKeyIncorrect error = keyIncorrectError(0) + +type unknownIssuerError int + +func (unknownIssuerError) Error() string { + return "openpgp: signature made by unknown entity" +} + +var ErrUnknownIssuer error = unknownIssuerError(0) + +type keyRevokedError int + +func (keyRevokedError) Error() string { + return "openpgp: signature made by revoked key" +} + +var ErrKeyRevoked error = keyRevokedError(0) + +type UnknownPacketTypeError uint8 + +func (upte UnknownPacketTypeError) Error() string { + return "openpgp: unknown packet type: " + strconv.Itoa(int(upte)) +} diff --git a/vendor/golang.org/x/crypto/openpgp/keys.go b/vendor/golang.org/x/crypto/openpgp/keys.go new file mode 100644 index 0000000..68b14c6 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/keys.go @@ -0,0 +1,637 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "crypto/rsa" + "io" + "time" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" +) + +// PublicKeyType is the armor type for a PGP public key. +var PublicKeyType = "PGP PUBLIC KEY BLOCK" + +// PrivateKeyType is the armor type for a PGP private key. +var PrivateKeyType = "PGP PRIVATE KEY BLOCK" + +// An Entity represents the components of an OpenPGP key: a primary public key +// (which must be a signing key), one or more identities claimed by that key, +// and zero or more subkeys, which may be encryption keys. +type Entity struct { + PrimaryKey *packet.PublicKey + PrivateKey *packet.PrivateKey + Identities map[string]*Identity // indexed by Identity.Name + Revocations []*packet.Signature + Subkeys []Subkey +} + +// An Identity represents an identity claimed by an Entity and zero or more +// assertions by other entities about that claim. +type Identity struct { + Name string // by convention, has the form "Full Name (comment) " + UserId *packet.UserId + SelfSignature *packet.Signature + Signatures []*packet.Signature +} + +// A Subkey is an additional public key in an Entity. Subkeys can be used for +// encryption. +type Subkey struct { + PublicKey *packet.PublicKey + PrivateKey *packet.PrivateKey + Sig *packet.Signature +} + +// A Key identifies a specific public key in an Entity. This is either the +// Entity's primary key or a subkey. +type Key struct { + Entity *Entity + PublicKey *packet.PublicKey + PrivateKey *packet.PrivateKey + SelfSignature *packet.Signature +} + +// A KeyRing provides access to public and private keys. +type KeyRing interface { + // KeysById returns the set of keys that have the given key id. + KeysById(id uint64) []Key + // KeysByIdAndUsage returns the set of keys with the given id + // that also meet the key usage given by requiredUsage. + // The requiredUsage is expressed as the bitwise-OR of + // packet.KeyFlag* values. + KeysByIdUsage(id uint64, requiredUsage byte) []Key + // DecryptionKeys returns all private keys that are valid for + // decryption. + DecryptionKeys() []Key +} + +// primaryIdentity returns the Identity marked as primary or the first identity +// if none are so marked. +func (e *Entity) primaryIdentity() *Identity { + var firstIdentity *Identity + for _, ident := range e.Identities { + if firstIdentity == nil { + firstIdentity = ident + } + if ident.SelfSignature.IsPrimaryId != nil && *ident.SelfSignature.IsPrimaryId { + return ident + } + } + return firstIdentity +} + +// encryptionKey returns the best candidate Key for encrypting a message to the +// given Entity. +func (e *Entity) encryptionKey(now time.Time) (Key, bool) { + candidateSubkey := -1 + + // Iterate the keys to find the newest key + var maxTime time.Time + for i, subkey := range e.Subkeys { + if subkey.Sig.FlagsValid && + subkey.Sig.FlagEncryptCommunications && + subkey.PublicKey.PubKeyAlgo.CanEncrypt() && + !subkey.Sig.KeyExpired(now) && + (maxTime.IsZero() || subkey.Sig.CreationTime.After(maxTime)) { + candidateSubkey = i + maxTime = subkey.Sig.CreationTime + } + } + + if candidateSubkey != -1 { + subkey := e.Subkeys[candidateSubkey] + return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig}, true + } + + // If we don't have any candidate subkeys for encryption and + // the primary key doesn't have any usage metadata then we + // assume that the primary key is ok. Or, if the primary key is + // marked as ok to encrypt to, then we can obviously use it. + i := e.primaryIdentity() + if !i.SelfSignature.FlagsValid || i.SelfSignature.FlagEncryptCommunications && + e.PrimaryKey.PubKeyAlgo.CanEncrypt() && + !i.SelfSignature.KeyExpired(now) { + return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature}, true + } + + // This Entity appears to be signing only. + return Key{}, false +} + +// signingKey return the best candidate Key for signing a message with this +// Entity. +func (e *Entity) signingKey(now time.Time) (Key, bool) { + candidateSubkey := -1 + + for i, subkey := range e.Subkeys { + if subkey.Sig.FlagsValid && + subkey.Sig.FlagSign && + subkey.PublicKey.PubKeyAlgo.CanSign() && + !subkey.Sig.KeyExpired(now) { + candidateSubkey = i + break + } + } + + if candidateSubkey != -1 { + subkey := e.Subkeys[candidateSubkey] + return Key{e, subkey.PublicKey, subkey.PrivateKey, subkey.Sig}, true + } + + // If we have no candidate subkey then we assume that it's ok to sign + // with the primary key. + i := e.primaryIdentity() + if !i.SelfSignature.FlagsValid || i.SelfSignature.FlagSign && + !i.SelfSignature.KeyExpired(now) { + return Key{e, e.PrimaryKey, e.PrivateKey, i.SelfSignature}, true + } + + return Key{}, false +} + +// An EntityList contains one or more Entities. +type EntityList []*Entity + +// KeysById returns the set of keys that have the given key id. +func (el EntityList) KeysById(id uint64) (keys []Key) { + for _, e := range el { + if e.PrimaryKey.KeyId == id { + var selfSig *packet.Signature + for _, ident := range e.Identities { + if selfSig == nil { + selfSig = ident.SelfSignature + } else if ident.SelfSignature.IsPrimaryId != nil && *ident.SelfSignature.IsPrimaryId { + selfSig = ident.SelfSignature + break + } + } + keys = append(keys, Key{e, e.PrimaryKey, e.PrivateKey, selfSig}) + } + + for _, subKey := range e.Subkeys { + if subKey.PublicKey.KeyId == id { + keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig}) + } + } + } + return +} + +// KeysByIdAndUsage returns the set of keys with the given id that also meet +// the key usage given by requiredUsage. The requiredUsage is expressed as +// the bitwise-OR of packet.KeyFlag* values. +func (el EntityList) KeysByIdUsage(id uint64, requiredUsage byte) (keys []Key) { + for _, key := range el.KeysById(id) { + if len(key.Entity.Revocations) > 0 { + continue + } + + if key.SelfSignature.RevocationReason != nil { + continue + } + + if key.SelfSignature.FlagsValid && requiredUsage != 0 { + var usage byte + if key.SelfSignature.FlagCertify { + usage |= packet.KeyFlagCertify + } + if key.SelfSignature.FlagSign { + usage |= packet.KeyFlagSign + } + if key.SelfSignature.FlagEncryptCommunications { + usage |= packet.KeyFlagEncryptCommunications + } + if key.SelfSignature.FlagEncryptStorage { + usage |= packet.KeyFlagEncryptStorage + } + if usage&requiredUsage != requiredUsage { + continue + } + } + + keys = append(keys, key) + } + return +} + +// DecryptionKeys returns all private keys that are valid for decryption. +func (el EntityList) DecryptionKeys() (keys []Key) { + for _, e := range el { + for _, subKey := range e.Subkeys { + if subKey.PrivateKey != nil && (!subKey.Sig.FlagsValid || subKey.Sig.FlagEncryptStorage || subKey.Sig.FlagEncryptCommunications) { + keys = append(keys, Key{e, subKey.PublicKey, subKey.PrivateKey, subKey.Sig}) + } + } + } + return +} + +// ReadArmoredKeyRing reads one or more public/private keys from an armor keyring file. +func ReadArmoredKeyRing(r io.Reader) (EntityList, error) { + block, err := armor.Decode(r) + if err == io.EOF { + return nil, errors.InvalidArgumentError("no armored data found") + } + if err != nil { + return nil, err + } + if block.Type != PublicKeyType && block.Type != PrivateKeyType { + return nil, errors.InvalidArgumentError("expected public or private key block, got: " + block.Type) + } + + return ReadKeyRing(block.Body) +} + +// ReadKeyRing reads one or more public/private keys. Unsupported keys are +// ignored as long as at least a single valid key is found. +func ReadKeyRing(r io.Reader) (el EntityList, err error) { + packets := packet.NewReader(r) + var lastUnsupportedError error + + for { + var e *Entity + e, err = ReadEntity(packets) + if err != nil { + // TODO: warn about skipped unsupported/unreadable keys + if _, ok := err.(errors.UnsupportedError); ok { + lastUnsupportedError = err + err = readToNextPublicKey(packets) + } else if _, ok := err.(errors.StructuralError); ok { + // Skip unreadable, badly-formatted keys + lastUnsupportedError = err + err = readToNextPublicKey(packets) + } + if err == io.EOF { + err = nil + break + } + if err != nil { + el = nil + break + } + } else { + el = append(el, e) + } + } + + if len(el) == 0 && err == nil { + err = lastUnsupportedError + } + return +} + +// readToNextPublicKey reads packets until the start of the entity and leaves +// the first packet of the new entity in the Reader. +func readToNextPublicKey(packets *packet.Reader) (err error) { + var p packet.Packet + for { + p, err = packets.Next() + if err == io.EOF { + return + } else if err != nil { + if _, ok := err.(errors.UnsupportedError); ok { + err = nil + continue + } + return + } + + if pk, ok := p.(*packet.PublicKey); ok && !pk.IsSubkey { + packets.Unread(p) + return + } + } +} + +// ReadEntity reads an entity (public key, identities, subkeys etc) from the +// given Reader. +func ReadEntity(packets *packet.Reader) (*Entity, error) { + e := new(Entity) + e.Identities = make(map[string]*Identity) + + p, err := packets.Next() + if err != nil { + return nil, err + } + + var ok bool + if e.PrimaryKey, ok = p.(*packet.PublicKey); !ok { + if e.PrivateKey, ok = p.(*packet.PrivateKey); !ok { + packets.Unread(p) + return nil, errors.StructuralError("first packet was not a public/private key") + } else { + e.PrimaryKey = &e.PrivateKey.PublicKey + } + } + + if !e.PrimaryKey.PubKeyAlgo.CanSign() { + return nil, errors.StructuralError("primary key cannot be used for signatures") + } + + var current *Identity + var revocations []*packet.Signature +EachPacket: + for { + p, err := packets.Next() + if err == io.EOF { + break + } else if err != nil { + return nil, err + } + + switch pkt := p.(type) { + case *packet.UserId: + current = new(Identity) + current.Name = pkt.Id + current.UserId = pkt + e.Identities[pkt.Id] = current + + for { + p, err = packets.Next() + if err == io.EOF { + return nil, io.ErrUnexpectedEOF + } else if err != nil { + return nil, err + } + + sig, ok := p.(*packet.Signature) + if !ok { + return nil, errors.StructuralError("user ID packet not followed by self-signature") + } + + if (sig.SigType == packet.SigTypePositiveCert || sig.SigType == packet.SigTypeGenericCert) && sig.IssuerKeyId != nil && *sig.IssuerKeyId == e.PrimaryKey.KeyId { + if err = e.PrimaryKey.VerifyUserIdSignature(pkt.Id, e.PrimaryKey, sig); err != nil { + return nil, errors.StructuralError("user ID self-signature invalid: " + err.Error()) + } + current.SelfSignature = sig + break + } + current.Signatures = append(current.Signatures, sig) + } + case *packet.Signature: + if pkt.SigType == packet.SigTypeKeyRevocation { + revocations = append(revocations, pkt) + } else if pkt.SigType == packet.SigTypeDirectSignature { + // TODO: RFC4880 5.2.1 permits signatures + // directly on keys (eg. to bind additional + // revocation keys). + } else if current == nil { + return nil, errors.StructuralError("signature packet found before user id packet") + } else { + current.Signatures = append(current.Signatures, pkt) + } + case *packet.PrivateKey: + if pkt.IsSubkey == false { + packets.Unread(p) + break EachPacket + } + err = addSubkey(e, packets, &pkt.PublicKey, pkt) + if err != nil { + return nil, err + } + case *packet.PublicKey: + if pkt.IsSubkey == false { + packets.Unread(p) + break EachPacket + } + err = addSubkey(e, packets, pkt, nil) + if err != nil { + return nil, err + } + default: + // we ignore unknown packets + } + } + + if len(e.Identities) == 0 { + return nil, errors.StructuralError("entity without any identities") + } + + for _, revocation := range revocations { + err = e.PrimaryKey.VerifyRevocationSignature(revocation) + if err == nil { + e.Revocations = append(e.Revocations, revocation) + } else { + // TODO: RFC 4880 5.2.3.15 defines revocation keys. + return nil, errors.StructuralError("revocation signature signed by alternate key") + } + } + + return e, nil +} + +func addSubkey(e *Entity, packets *packet.Reader, pub *packet.PublicKey, priv *packet.PrivateKey) error { + var subKey Subkey + subKey.PublicKey = pub + subKey.PrivateKey = priv + p, err := packets.Next() + if err == io.EOF { + return io.ErrUnexpectedEOF + } + if err != nil { + return errors.StructuralError("subkey signature invalid: " + err.Error()) + } + var ok bool + subKey.Sig, ok = p.(*packet.Signature) + if !ok { + return errors.StructuralError("subkey packet not followed by signature") + } + if subKey.Sig.SigType != packet.SigTypeSubkeyBinding && subKey.Sig.SigType != packet.SigTypeSubkeyRevocation { + return errors.StructuralError("subkey signature with wrong type") + } + err = e.PrimaryKey.VerifyKeySignature(subKey.PublicKey, subKey.Sig) + if err != nil { + return errors.StructuralError("subkey signature invalid: " + err.Error()) + } + e.Subkeys = append(e.Subkeys, subKey) + return nil +} + +const defaultRSAKeyBits = 2048 + +// NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a +// single identity composed of the given full name, comment and email, any of +// which may be empty but must not contain any of "()<>\x00". +// If config is nil, sensible defaults will be used. +func NewEntity(name, comment, email string, config *packet.Config) (*Entity, error) { + currentTime := config.Now() + + bits := defaultRSAKeyBits + if config != nil && config.RSABits != 0 { + bits = config.RSABits + } + + uid := packet.NewUserId(name, comment, email) + if uid == nil { + return nil, errors.InvalidArgumentError("user id field contained invalid characters") + } + signingPriv, err := rsa.GenerateKey(config.Random(), bits) + if err != nil { + return nil, err + } + encryptingPriv, err := rsa.GenerateKey(config.Random(), bits) + if err != nil { + return nil, err + } + + e := &Entity{ + PrimaryKey: packet.NewRSAPublicKey(currentTime, &signingPriv.PublicKey), + PrivateKey: packet.NewRSAPrivateKey(currentTime, signingPriv), + Identities: make(map[string]*Identity), + } + isPrimaryId := true + e.Identities[uid.Id] = &Identity{ + Name: uid.Name, + UserId: uid, + SelfSignature: &packet.Signature{ + CreationTime: currentTime, + SigType: packet.SigTypePositiveCert, + PubKeyAlgo: packet.PubKeyAlgoRSA, + Hash: config.Hash(), + IsPrimaryId: &isPrimaryId, + FlagsValid: true, + FlagSign: true, + FlagCertify: true, + IssuerKeyId: &e.PrimaryKey.KeyId, + }, + } + + // If the user passes in a DefaultHash via packet.Config, + // set the PreferredHash for the SelfSignature. + if config != nil && config.DefaultHash != 0 { + e.Identities[uid.Id].SelfSignature.PreferredHash = []uint8{hashToHashId(config.DefaultHash)} + } + + e.Subkeys = make([]Subkey, 1) + e.Subkeys[0] = Subkey{ + PublicKey: packet.NewRSAPublicKey(currentTime, &encryptingPriv.PublicKey), + PrivateKey: packet.NewRSAPrivateKey(currentTime, encryptingPriv), + Sig: &packet.Signature{ + CreationTime: currentTime, + SigType: packet.SigTypeSubkeyBinding, + PubKeyAlgo: packet.PubKeyAlgoRSA, + Hash: config.Hash(), + FlagsValid: true, + FlagEncryptStorage: true, + FlagEncryptCommunications: true, + IssuerKeyId: &e.PrimaryKey.KeyId, + }, + } + e.Subkeys[0].PublicKey.IsSubkey = true + e.Subkeys[0].PrivateKey.IsSubkey = true + + return e, nil +} + +// SerializePrivate serializes an Entity, including private key material, to +// the given Writer. For now, it must only be used on an Entity returned from +// NewEntity. +// If config is nil, sensible defaults will be used. +func (e *Entity) SerializePrivate(w io.Writer, config *packet.Config) (err error) { + err = e.PrivateKey.Serialize(w) + if err != nil { + return + } + for _, ident := range e.Identities { + err = ident.UserId.Serialize(w) + if err != nil { + return + } + err = ident.SelfSignature.SignUserId(ident.UserId.Id, e.PrimaryKey, e.PrivateKey, config) + if err != nil { + return + } + err = ident.SelfSignature.Serialize(w) + if err != nil { + return + } + } + for _, subkey := range e.Subkeys { + err = subkey.PrivateKey.Serialize(w) + if err != nil { + return + } + err = subkey.Sig.SignKey(subkey.PublicKey, e.PrivateKey, config) + if err != nil { + return + } + err = subkey.Sig.Serialize(w) + if err != nil { + return + } + } + return nil +} + +// Serialize writes the public part of the given Entity to w. (No private +// key material will be output). +func (e *Entity) Serialize(w io.Writer) error { + err := e.PrimaryKey.Serialize(w) + if err != nil { + return err + } + for _, ident := range e.Identities { + err = ident.UserId.Serialize(w) + if err != nil { + return err + } + err = ident.SelfSignature.Serialize(w) + if err != nil { + return err + } + for _, sig := range ident.Signatures { + err = sig.Serialize(w) + if err != nil { + return err + } + } + } + for _, subkey := range e.Subkeys { + err = subkey.PublicKey.Serialize(w) + if err != nil { + return err + } + err = subkey.Sig.Serialize(w) + if err != nil { + return err + } + } + return nil +} + +// SignIdentity adds a signature to e, from signer, attesting that identity is +// associated with e. The provided identity must already be an element of +// e.Identities and the private key of signer must have been decrypted if +// necessary. +// If config is nil, sensible defaults will be used. +func (e *Entity) SignIdentity(identity string, signer *Entity, config *packet.Config) error { + if signer.PrivateKey == nil { + return errors.InvalidArgumentError("signing Entity must have a private key") + } + if signer.PrivateKey.Encrypted { + return errors.InvalidArgumentError("signing Entity's private key must be decrypted") + } + ident, ok := e.Identities[identity] + if !ok { + return errors.InvalidArgumentError("given identity string not found in Entity") + } + + sig := &packet.Signature{ + SigType: packet.SigTypeGenericCert, + PubKeyAlgo: signer.PrivateKey.PubKeyAlgo, + Hash: config.Hash(), + CreationTime: config.Now(), + IssuerKeyId: &signer.PrivateKey.KeyId, + } + if err := sig.SignUserId(identity, e.PrimaryKey, signer.PrivateKey, config); err != nil { + return err + } + ident.Signatures = append(ident.Signatures, sig) + return nil +} diff --git a/vendor/golang.org/x/crypto/openpgp/keys_test.go b/vendor/golang.org/x/crypto/openpgp/keys_test.go new file mode 100644 index 0000000..76ba13e --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/keys_test.go @@ -0,0 +1,419 @@ +package openpgp + +import ( + "bytes" + "crypto" + "strings" + "testing" + "time" + + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" +) + +func TestKeyExpiry(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(expiringKeyHex)) + if err != nil { + t.Fatal(err) + } + entity := kring[0] + + const timeFormat = "2006-01-02" + time1, _ := time.Parse(timeFormat, "2013-07-01") + + // The expiringKeyHex key is structured as: + // + // pub 1024R/5E237D8C created: 2013-07-01 expires: 2013-07-31 usage: SC + // sub 1024R/1ABB25A0 created: 2013-07-01 23:11:07 +0200 CEST expires: 2013-07-08 usage: E + // sub 1024R/96A672F5 created: 2013-07-01 23:11:23 +0200 CEST expires: 2013-07-31 usage: E + // + // So this should select the newest, non-expired encryption key. + key, _ := entity.encryptionKey(time1) + if id := key.PublicKey.KeyIdShortString(); id != "96A672F5" { + t.Errorf("Expected key 1ABB25A0 at time %s, but got key %s", time1.Format(timeFormat), id) + } + + // Once the first encryption subkey has expired, the second should be + // selected. + time2, _ := time.Parse(timeFormat, "2013-07-09") + key, _ = entity.encryptionKey(time2) + if id := key.PublicKey.KeyIdShortString(); id != "96A672F5" { + t.Errorf("Expected key 96A672F5 at time %s, but got key %s", time2.Format(timeFormat), id) + } + + // Once all the keys have expired, nothing should be returned. + time3, _ := time.Parse(timeFormat, "2013-08-01") + if key, ok := entity.encryptionKey(time3); ok { + t.Errorf("Expected no key at time %s, but got key %s", time3.Format(timeFormat), key.PublicKey.KeyIdShortString()) + } +} + +func TestMissingCrossSignature(t *testing.T) { + // This public key has a signing subkey, but the subkey does not + // contain a cross-signature. + keys, err := ReadArmoredKeyRing(bytes.NewBufferString(missingCrossSignatureKey)) + if len(keys) != 0 { + t.Errorf("Accepted key with missing cross signature") + } + if err == nil { + t.Fatal("Failed to detect error in keyring with missing cross signature") + } + structural, ok := err.(errors.StructuralError) + if !ok { + t.Fatalf("Unexpected class of error: %T. Wanted StructuralError", err) + } + const expectedMsg = "signing subkey is missing cross-signature" + if !strings.Contains(string(structural), expectedMsg) { + t.Fatalf("Unexpected error: %q. Expected it to contain %q", err, expectedMsg) + } +} + +func TestInvalidCrossSignature(t *testing.T) { + // This public key has a signing subkey, and the subkey has an + // embedded cross-signature. However, the cross-signature does + // not correctly validate over the primary and subkey. + keys, err := ReadArmoredKeyRing(bytes.NewBufferString(invalidCrossSignatureKey)) + if len(keys) != 0 { + t.Errorf("Accepted key with invalid cross signature") + } + if err == nil { + t.Fatal("Failed to detect error in keyring with an invalid cross signature") + } + structural, ok := err.(errors.StructuralError) + if !ok { + t.Fatalf("Unexpected class of error: %T. Wanted StructuralError", err) + } + const expectedMsg = "subkey signature invalid" + if !strings.Contains(string(structural), expectedMsg) { + t.Fatalf("Unexpected error: %q. Expected it to contain %q", err, expectedMsg) + } +} + +func TestGoodCrossSignature(t *testing.T) { + // This public key has a signing subkey, and the subkey has an + // embedded cross-signature which correctly validates over the + // primary and subkey. + keys, err := ReadArmoredKeyRing(bytes.NewBufferString(goodCrossSignatureKey)) + if err != nil { + t.Fatal(err) + } + if len(keys) != 1 { + t.Errorf("Failed to accept key with good cross signature, %d", len(keys)) + } + if len(keys[0].Subkeys) != 1 { + t.Errorf("Failed to accept good subkey, %d", len(keys[0].Subkeys)) + } +} + +// TestExternallyRevokableKey attempts to load and parse a key with a third party revocation permission. +func TestExternallyRevocableKey(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(subkeyUsageHex)) + if err != nil { + t.Fatal(err) + } + + // The 0xA42704B92866382A key can be revoked by 0xBE3893CB843D0FE70C + // according to this signature that appears within the key: + // :signature packet: algo 1, keyid A42704B92866382A + // version 4, created 1396409682, md5len 0, sigclass 0x1f + // digest algo 2, begin of digest a9 84 + // hashed subpkt 2 len 4 (sig created 2014-04-02) + // hashed subpkt 12 len 22 (revocation key: c=80 a=1 f=CE094AA433F7040BB2DDF0BE3893CB843D0FE70C) + // hashed subpkt 7 len 1 (not revocable) + // subpkt 16 len 8 (issuer key ID A42704B92866382A) + // data: [1024 bits] + + id := uint64(0xA42704B92866382A) + keys := kring.KeysById(id) + if len(keys) != 1 { + t.Errorf("Expected to find key id %X, but got %d matches", id, len(keys)) + } +} + +func TestKeyRevocation(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(revokedKeyHex)) + if err != nil { + t.Fatal(err) + } + + // revokedKeyHex contains these keys: + // pub 1024R/9A34F7C0 2014-03-25 [revoked: 2014-03-25] + // sub 1024R/1BA3CD60 2014-03-25 [revoked: 2014-03-25] + ids := []uint64{0xA401D9F09A34F7C0, 0x5CD3BE0A1BA3CD60} + + for _, id := range ids { + keys := kring.KeysById(id) + if len(keys) != 1 { + t.Errorf("Expected KeysById to find revoked key %X, but got %d matches", id, len(keys)) + } + keys = kring.KeysByIdUsage(id, 0) + if len(keys) != 0 { + t.Errorf("Expected KeysByIdUsage to filter out revoked key %X, but got %d matches", id, len(keys)) + } + } +} + +func TestSubkeyRevocation(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(revokedSubkeyHex)) + if err != nil { + t.Fatal(err) + } + + // revokedSubkeyHex contains these keys: + // pub 1024R/4EF7E4BECCDE97F0 2014-03-25 + // sub 1024R/D63636E2B96AE423 2014-03-25 + // sub 1024D/DBCE4EE19529437F 2014-03-25 + // sub 1024R/677815E371C2FD23 2014-03-25 [revoked: 2014-03-25] + validKeys := []uint64{0x4EF7E4BECCDE97F0, 0xD63636E2B96AE423, 0xDBCE4EE19529437F} + revokedKey := uint64(0x677815E371C2FD23) + + for _, id := range validKeys { + keys := kring.KeysById(id) + if len(keys) != 1 { + t.Errorf("Expected KeysById to find key %X, but got %d matches", id, len(keys)) + } + keys = kring.KeysByIdUsage(id, 0) + if len(keys) != 1 { + t.Errorf("Expected KeysByIdUsage to find key %X, but got %d matches", id, len(keys)) + } + } + + keys := kring.KeysById(revokedKey) + if len(keys) != 1 { + t.Errorf("Expected KeysById to find key %X, but got %d matches", revokedKey, len(keys)) + } + + keys = kring.KeysByIdUsage(revokedKey, 0) + if len(keys) != 0 { + t.Errorf("Expected KeysByIdUsage to filter out revoked key %X, but got %d matches", revokedKey, len(keys)) + } +} + +func TestKeyUsage(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(subkeyUsageHex)) + if err != nil { + t.Fatal(err) + } + + // subkeyUsageHex contains these keys: + // pub 1024R/2866382A created: 2014-04-01 expires: never usage: SC + // sub 1024R/936C9153 created: 2014-04-01 expires: never usage: E + // sub 1024R/64D5F5BB created: 2014-04-02 expires: never usage: E + // sub 1024D/BC0BA992 created: 2014-04-02 expires: never usage: S + certifiers := []uint64{0xA42704B92866382A} + signers := []uint64{0xA42704B92866382A, 0x42CE2C64BC0BA992} + encrypters := []uint64{0x09C0C7D9936C9153, 0xC104E98664D5F5BB} + + for _, id := range certifiers { + keys := kring.KeysByIdUsage(id, packet.KeyFlagCertify) + if len(keys) == 1 { + if keys[0].PublicKey.KeyId != id { + t.Errorf("Expected to find certifier key id %X, but got %X", id, keys[0].PublicKey.KeyId) + } + } else { + t.Errorf("Expected one match for certifier key id %X, but got %d matches", id, len(keys)) + } + } + + for _, id := range signers { + keys := kring.KeysByIdUsage(id, packet.KeyFlagSign) + if len(keys) == 1 { + if keys[0].PublicKey.KeyId != id { + t.Errorf("Expected to find signing key id %X, but got %X", id, keys[0].PublicKey.KeyId) + } + } else { + t.Errorf("Expected one match for signing key id %X, but got %d matches", id, len(keys)) + } + + // This keyring contains no encryption keys that are also good for signing. + keys = kring.KeysByIdUsage(id, packet.KeyFlagEncryptStorage|packet.KeyFlagEncryptCommunications) + if len(keys) != 0 { + t.Errorf("Unexpected match for encryption key id %X", id) + } + } + + for _, id := range encrypters { + keys := kring.KeysByIdUsage(id, packet.KeyFlagEncryptStorage|packet.KeyFlagEncryptCommunications) + if len(keys) == 1 { + if keys[0].PublicKey.KeyId != id { + t.Errorf("Expected to find encryption key id %X, but got %X", id, keys[0].PublicKey.KeyId) + } + } else { + t.Errorf("Expected one match for encryption key id %X, but got %d matches", id, len(keys)) + } + + // This keyring contains no encryption keys that are also good for signing. + keys = kring.KeysByIdUsage(id, packet.KeyFlagSign) + if len(keys) != 0 { + t.Errorf("Unexpected match for signing key id %X", id) + } + } +} + +func TestIdVerification(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + if err != nil { + t.Fatal(err) + } + if err := kring[1].PrivateKey.Decrypt([]byte("passphrase")); err != nil { + t.Fatal(err) + } + + const identity = "Test Key 1 (RSA)" + if err := kring[0].SignIdentity(identity, kring[1], nil); err != nil { + t.Fatal(err) + } + + ident, ok := kring[0].Identities[identity] + if !ok { + t.Fatal("identity missing from key after signing") + } + + checked := false + for _, sig := range ident.Signatures { + if sig.IssuerKeyId == nil || *sig.IssuerKeyId != kring[1].PrimaryKey.KeyId { + continue + } + + if err := kring[1].PrimaryKey.VerifyUserIdSignature(identity, kring[0].PrimaryKey, sig); err != nil { + t.Fatalf("error verifying new identity signature: %s", err) + } + checked = true + break + } + + if !checked { + t.Fatal("didn't find identity signature in Entity") + } +} + +func TestNewEntityWithPreferredHash(t *testing.T) { + c := &packet.Config{ + DefaultHash: crypto.SHA256, + } + entity, err := NewEntity("Golang Gopher", "Test Key", "no-reply@golang.com", c) + if err != nil { + t.Fatal(err) + } + + for _, identity := range entity.Identities { + if len(identity.SelfSignature.PreferredHash) == 0 { + t.Fatal("didn't find a preferred hash in self signature") + } + ph := hashToHashId(c.DefaultHash) + if identity.SelfSignature.PreferredHash[0] != ph { + t.Fatalf("Expected preferred hash to be %d, got %d", ph, identity.SelfSignature.PreferredHash[0]) + } + } +} + +func TestNewEntityWithoutPreferredHash(t *testing.T) { + entity, err := NewEntity("Golang Gopher", "Test Key", "no-reply@golang.com", nil) + if err != nil { + t.Fatal(err) + } + + for _, identity := range entity.Identities { + if len(identity.SelfSignature.PreferredHash) != 0 { + t.Fatalf("Expected preferred hash to be empty but got length %d", len(identity.SelfSignature.PreferredHash)) + } + } +} + +const expiringKeyHex = "988d0451d1ec5d010400ba3385721f2dc3f4ab096b2ee867ab77213f0a27a8538441c35d2fa225b08798a1439a66a5150e6bdc3f40f5d28d588c712394c632b6299f77db8c0d48d37903fb72ebd794d61be6aa774688839e5fdecfe06b2684cc115d240c98c66cb1ef22ae84e3aa0c2b0c28665c1e7d4d044e7f270706193f5223c8d44e0d70b7b8da830011010001b40f4578706972792074657374206b657988be041301020028050251d1ec5d021b03050900278d00060b090807030206150802090a0b0416020301021e01021780000a091072589ad75e237d8c033503fd10506d72837834eb7f994117740723adc39227104b0d326a1161871c0b415d25b4aedef946ca77ea4c05af9c22b32cf98be86ab890111fced1ee3f75e87b7cc3c00dc63bbc85dfab91c0dc2ad9de2c4d13a34659333a85c6acc1a669c5e1d6cecb0cf1e56c10e72d855ae177ddc9e766f9b2dda57ccbb75f57156438bbdb4e42b88d0451d1ec5d0104009c64906559866c5cb61578f5846a94fcee142a489c9b41e67b12bb54cfe86eb9bc8566460f9a720cb00d6526fbccfd4f552071a8e3f7744b1882d01036d811ee5a3fb91a1c568055758f43ba5d2c6a9676b012f3a1a89e47bbf624f1ad571b208f3cc6224eb378f1645dd3d47584463f9eadeacfd1ce6f813064fbfdcc4b5a53001101000188a504180102000f021b0c050251d1f06b050900093e89000a091072589ad75e237d8c20e00400ab8310a41461425b37889c4da28129b5fae6084fafbc0a47dd1adc74a264c6e9c9cc125f40462ee1433072a58384daef88c961c390ed06426a81b464a53194c4e291ddd7e2e2ba3efced01537d713bd111f48437bde2363446200995e8e0d4e528dda377fd1e8f8ede9c8e2198b393bd86852ce7457a7e3daf74d510461a5b77b88d0451d1ece8010400b3a519f83ab0010307e83bca895170acce8964a044190a2b368892f7a244758d9fc193482648acb1fb9780d28cc22d171931f38bb40279389fc9bf2110876d4f3db4fcfb13f22f7083877fe56592b3b65251312c36f83ffcb6d313c6a17f197dd471f0712aad15a8537b435a92471ba2e5b0c72a6c72536c3b567c558d7b6051001101000188a504180102000f021b0c050251d1f07b050900279091000a091072589ad75e237d8ce69e03fe286026afacf7c97ee20673864d4459a2240b5655219950643c7dba0ac384b1d4359c67805b21d98211f7b09c2a0ccf6410c8c04d4ff4a51293725d8d6570d9d8bb0e10c07d22357caeb49626df99c180be02d77d1fe8ed25e7a54481237646083a9f89a11566cd20b9e995b1487c5f9e02aeb434f3a1897cd416dd0a87861838da3e9e" +const subkeyUsageHex = "988d04533a52bc010400d26af43085558f65b9e7dbc90cb9238015259aed5e954637adcfa2181548b2d0b60c65f1f42ec5081cbf1bc0a8aa4900acfb77070837c58f26012fbce297d70afe96e759ad63531f0037538e70dbf8e384569b9720d99d8eb39d8d0a2947233ed242436cb6ac7dfe74123354b3d0119b5c235d3dd9c9d6c004f8ffaf67ad8583001101000188b7041f010200210502533b8552170c8001ce094aa433f7040bb2ddf0be3893cb843d0fe70c020700000a0910a42704b92866382aa98404009d63d916a27543da4221c60087c33f1c44bec9998c5438018ed370cca4962876c748e94b73eb39c58eb698063f3fd6346d58dd2a11c0247934c4a9d71f24754f7468f96fb24c3e791dd2392b62f626148ad724189498cbf993db2df7c0cdc2d677c35da0f16cb16c9ce7c33b4de65a4a91b1d21a130ae9cc26067718910ef8e2b417556d627261203c756d627261407379642e65642e61753e88b80413010200220502533a52bc021b03060b090807030206150802090a0b0416020301021e01021780000a0910a42704b92866382a47840400c0c2bd04f5fca586de408b395b3c280a278259c93eaaa8b79a53b97003f8ed502a8a00446dd9947fb462677e4fcac0dac2f0701847d15130aadb6cd9e0705ea0cf5f92f129136c7be21a718d46c8e641eb7f044f2adae573e11ae423a0a9ca51324f03a8a2f34b91fa40c3cc764bee4dccadedb54c768ba0469b683ea53f1c29b88d04533a52bc01040099c92a5d6f8b744224da27bc2369127c35269b58bec179de6bbc038f749344222f85a31933224f26b70243c4e4b2d242f0c4777eaef7b5502f9dad6d8bf3aaeb471210674b74de2d7078af497d55f5cdad97c7bedfbc1b41e8065a97c9c3d344b21fc81d27723af8e374bc595da26ea242dccb6ae497be26eea57e563ed517e90011010001889f0418010200090502533a52bc021b0c000a0910a42704b92866382afa1403ff70284c2de8a043ff51d8d29772602fa98009b7861c540535f874f2c230af8caf5638151a636b21f8255003997ccd29747fdd06777bb24f9593bd7d98a3e887689bf902f999915fcc94625ae487e5d13e6616f89090ebc4fdc7eb5cad8943e4056995bb61c6af37f8043016876a958ec7ebf39c43d20d53b7f546cfa83e8d2604b88d04533b8283010400c0b529316dbdf58b4c54461e7e669dc11c09eb7f73819f178ccd4177b9182b91d138605fcf1e463262fabefa73f94a52b5e15d1904635541c7ea540f07050ce0fb51b73e6f88644cec86e91107c957a114f69554548a85295d2b70bd0b203992f76eb5d493d86d9eabcaa7ef3fc7db7e458438db3fcdb0ca1cc97c638439a9170011010001889f0418010200090502533b8283021b0c000a0910a42704b92866382adc6d0400cfff6258485a21675adb7a811c3e19ebca18851533f75a7ba317950b9997fda8d1a4c8c76505c08c04b6c2cc31dc704d33da36a21273f2b388a1a706f7c3378b66d887197a525936ed9a69acb57fe7f718133da85ec742001c5d1864e9c6c8ea1b94f1c3759cebfd93b18606066c063a63be86085b7e37bdbc65f9a915bf084bb901a204533b85cd110400aed3d2c52af2b38b5b67904b0ef73d6dd7aef86adb770e2b153cd22489654dcc91730892087bb9856ae2d9f7ed1eb48f214243fe86bfe87b349ebd7c30e630e49c07b21fdabf78b7a95c8b7f969e97e3d33f2e074c63552ba64a2ded7badc05ce0ea2be6d53485f6900c7860c7aa76560376ce963d7271b9b54638a4028b573f00a0d8854bfcdb04986141568046202192263b9b67350400aaa1049dbc7943141ef590a70dcb028d730371d92ea4863de715f7f0f16d168bd3dc266c2450457d46dcbbf0b071547e5fbee7700a820c3750b236335d8d5848adb3c0da010e998908dfd93d961480084f3aea20b247034f8988eccb5546efaa35a92d0451df3aaf1aee5aa36a4c4d462c760ecd9cebcabfbe1412b1f21450f203fd126687cd486496e971a87fd9e1a8a765fe654baa219a6871ab97768596ab05c26c1aeea8f1a2c72395a58dbc12ef9640d2b95784e974a4d2d5a9b17c25fedacfe551bda52602de8f6d2e48443f5dd1a2a2a8e6a5e70ecdb88cd6e766ad9745c7ee91d78cc55c3d06536b49c3fee6c3d0b6ff0fb2bf13a314f57c953b8f4d93bf88e70418010200090502533b85cd021b0200520910a42704b92866382a47200419110200060502533b85cd000a091042ce2c64bc0ba99214b2009e26b26852c8b13b10c35768e40e78fbbb48bd084100a0c79d9ea0844fa5853dd3c85ff3ecae6f2c9dd6c557aa04008bbbc964cd65b9b8299d4ebf31f41cc7264b8cf33a00e82c5af022331fac79efc9563a822497ba012953cefe2629f1242fcdcb911dbb2315985bab060bfd58261ace3c654bdbbe2e8ed27a46e836490145c86dc7bae15c011f7e1ffc33730109b9338cd9f483e7cef3d2f396aab5bd80efb6646d7e778270ee99d934d187dd98" +const revokedKeyHex = "988d045331ce82010400c4fdf7b40a5477f206e6ee278eaef888ca73bf9128a9eef9f2f1ddb8b7b71a4c07cfa241f028a04edb405e4d916c61d6beabc333813dc7b484d2b3c52ee233c6a79b1eea4e9cc51596ba9cd5ac5aeb9df62d86ea051055b79d03f8a4fa9f38386f5bd17529138f3325d46801514ea9047977e0829ed728e68636802796801be10011010001889f04200102000905025331d0e3021d03000a0910a401d9f09a34f7c042aa040086631196405b7e6af71026b88e98012eab44aa9849f6ef3fa930c7c9f23deaedba9db1538830f8652fb7648ec3fcade8dbcbf9eaf428e83c6cbcc272201bfe2fbb90d41963397a7c0637a1a9d9448ce695d9790db2dc95433ad7be19eb3de72dacf1d6db82c3644c13eae2a3d072b99bb341debba012c5ce4006a7d34a1f4b94b444526567205265766f6b657220283c52656727732022424d204261726973746122204b657920262530305c303e5c29203c72656740626d626172697374612e636f2e61753e88b704130102002205025331ce82021b03060b090807030206150802090a0b0416020301021e01021780000a0910a401d9f09a34f7c0019c03f75edfbeb6a73e7225ad3cc52724e2872e04260d7daf0d693c170d8c4b243b8767bc7785763533febc62ec2600c30603c433c095453ede59ff2fcabeb84ce32e0ed9d5cf15ffcbc816202b64370d4d77c1e9077d74e94a16fb4fa2e5bec23a56d7a73cf275f91691ae1801a976fcde09e981a2f6327ac27ea1fecf3185df0d56889c04100102000605025331cfb5000a0910fe9645554e8266b64b4303fc084075396674fb6f778d302ac07cef6bc0b5d07b66b2004c44aef711cbac79617ef06d836b4957522d8772dd94bf41a2f4ac8b1ee6d70c57503f837445a74765a076d07b829b8111fc2a918423ddb817ead7ca2a613ef0bfb9c6b3562aec6c3cf3c75ef3031d81d95f6563e4cdcc9960bcb386c5d757b104fcca5fe11fc709df884604101102000605025331cfe7000a09107b15a67f0b3ddc0317f6009e360beea58f29c1d963a22b962b80788c3fa6c84e009d148cfde6b351469b8eae91187eff07ad9d08fcaab88d045331ce820104009f25e20a42b904f3fa555530fe5c46737cf7bd076c35a2a0d22b11f7e0b61a69320b768f4a80fe13980ce380d1cfc4a0cd8fbe2d2e2ef85416668b77208baa65bf973fe8e500e78cc310d7c8705cdb34328bf80e24f0385fce5845c33bc7943cf6b11b02348a23da0bf6428e57c05135f2dc6bd7c1ce325d666d5a5fd2fd5e410011010001889f04180102000905025331ce82021b0c000a0910a401d9f09a34f7c0418003fe34feafcbeaef348a800a0d908a7a6809cc7304017d820f70f0474d5e23cb17e38b67dc6dca282c6ca00961f4ec9edf2738d0f087b1d81e4871ef08e1798010863afb4eac4c44a376cb343be929c5be66a78cfd4456ae9ec6a99d97f4e1c3ff3583351db2147a65c0acef5c003fb544ab3a2e2dc4d43646f58b811a6c3a369d1f" +const revokedSubkeyHex = "988d04533121f6010400aefc803a3e4bb1a61c86e8a86d2726c6a43e0079e9f2713f1fa017e9854c83877f4aced8e331d675c67ea83ddab80aacbfa0b9040bb12d96f5a3d6be09455e2a76546cbd21677537db941cab710216b6d24ec277ee0bd65b910f416737ed120f6b93a9d3b306245c8cfd8394606fdb462e5cf43c551438d2864506c63367fc890011010001b41d416c696365203c616c69636540626d626172697374612e636f2e61753e88bb041301020025021b03060b090807030206150802090a0b0416020301021e01021780050253312798021901000a09104ef7e4beccde97f015a803ff5448437780f63263b0df8442a995e7f76c221351a51edd06f2063d8166cf3157aada4923dfc44aa0f2a6a4da5cf83b7fe722ba8ab416c976e77c6b5682e7f1069026673bd0de56ba06fd5d7a9f177607f277d9b55ff940a638c3e68525c67517e2b3d976899b93ca267f705b3e5efad7d61220e96b618a4497eab8d04403d23f8846041011020006050253312910000a09107b15a67f0b3ddc03d96e009f50b6365d86c4be5d5e9d0ea42d5e56f5794c617700a0ab274e19c2827780016d23417ce89e0a2c0d987d889c04100102000605025331cf7a000a0910a401d9f09a34f7c0ee970400aca292f213041c9f3b3fc49148cbda9d84afee6183c8dd6c5ff2600b29482db5fecd4303797be1ee6d544a20a858080fec43412061c9a71fae4039fd58013b4ae341273e6c66ad4c7cdd9e68245bedb260562e7b166f2461a1032f2b38c0e0e5715fb3d1656979e052b55ca827a76f872b78a9fdae64bc298170bfcebedc1271b41a416c696365203c616c696365407379646973702e6f722e61753e88b804130102002205025331278b021b03060b090807030206150802090a0b0416020301021e01021780000a09104ef7e4beccde97f06a7003fa03c3af68d272ebc1fa08aa72a03b02189c26496a2833d90450801c4e42c5b5f51ad96ce2d2c9cef4b7c02a6a2fcf1412d6a2d486098eb762f5010a201819c17fd2888aec8eda20c65a3b75744de7ee5cc8ac7bfc470cbe3cb982720405a27a3c6a8c229cfe36905f881b02ed5680f6a8f05866efb9d6c5844897e631deb949ca8846041011020006050253312910000a09107b15a67f0b3ddc0347bc009f7fa35db59147469eb6f2c5aaf6428accb138b22800a0caa2f5f0874bacc5909c652a57a31beda65eddd5889c04100102000605025331cf7a000a0910a401d9f09a34f7c0316403ff46f2a5c101256627f16384d34a38fb47a6c88ba60506843e532d91614339fccae5f884a5741e7582ffaf292ba38ee10a270a05f139bde3814b6a077e8cd2db0f105ebea2a83af70d385f13b507fac2ad93ff79d84950328bb86f3074745a8b7f9b64990fb142e2a12976e27e8d09a28dc5621f957ac49091116da410ac3cbde1b88d04533121f6010400cbd785b56905e4192e2fb62a720727d43c4fa487821203cf72138b884b78b701093243e1d8c92a0248a6c0203a5a88693da34af357499abacaf4b3309c640797d03093870a323b4b6f37865f6eaa2838148a67df4735d43a90ca87942554cdf1c4a751b1e75f9fd4ce4e97e278d6c1c7ed59d33441df7d084f3f02beb68896c70011010001889f0418010200090502533121f6021b0c000a09104ef7e4beccde97f0b98b03fc0a5ccf6a372995835a2f5da33b282a7d612c0ab2a97f59cf9fff73e9110981aac2858c41399afa29624a7fd8a0add11654e3d882c0fd199e161bdad65e5e2548f7b68a437ea64293db1246e3011cbb94dc1bcdeaf0f2539bd88ff16d95547144d97cead6a8c5927660a91e6db0d16eb36b7b49a3525b54d1644e65599b032b7eb901a204533127a0110400bd3edaa09eff9809c4edc2c2a0ebe52e53c50a19c1e49ab78e6167bf61473bb08f2050d78a5cbbc6ed66aff7b42cd503f16b4a0b99fa1609681fca9b7ce2bbb1a5b3864d6cdda4d7ef7849d156d534dea30fb0efb9e4cf8959a2b2ce623905882d5430b995a15c3b9fe92906086788b891002924f94abe139b42cbbfaaabe42f00a0b65dc1a1ad27d798adbcb5b5ad02d2688c89477b03ff4eebb6f7b15a73b96a96bed201c0e5e4ea27e4c6e2dd1005b94d4b90137a5b1cf5e01c6226c070c4cc999938101578877ee76d296b9aab8246d57049caacf489e80a3f40589cade790a020b1ac146d6f7a6241184b8c7fcde680eae3188f5dcbe846d7f7bdad34f6fcfca08413e19c1d5df83fc7c7c627d493492e009c2f52a80400a2fe82de87136fd2e8845888c4431b032ba29d9a29a804277e31002a8201fb8591a3e55c7a0d0881496caf8b9fb07544a5a4879291d0dc026a0ea9e5bd88eb4aa4947bbd694b25012e208a250d65ddc6f1eea59d3aed3b4ec15fcab85e2afaa23a40ab1ef9ce3e11e1bc1c34a0e758e7aa64deb8739276df0af7d4121f834a9b88e70418010200090502533127a0021b02005209104ef7e4beccde97f047200419110200060502533127a0000a0910dbce4ee19529437fe045009c0b32f5ead48ee8a7e98fac0dea3d3e6c0e2c552500a0ad71fadc5007cfaf842d9b7db3335a8cdad15d3d1a6404009b08e2c68fe8f3b45c1bb72a4b3278cdf3012aa0f229883ad74aa1f6000bb90b18301b2f85372ca5d6b9bf478d235b733b1b197d19ccca48e9daf8e890cb64546b4ce1b178faccfff07003c172a2d4f5ebaba9f57153955f3f61a9b80a4f5cb959908f8b211b03b7026a8a82fc612bfedd3794969bcf458c4ce92be215a1176ab88d045331d144010400a5063000c5aaf34953c1aa3bfc95045b3aab9882b9a8027fecfe2142dc6b47ba8aca667399990244d513dd0504716908c17d92c65e74219e004f7b83fc125e575dd58efec3ab6dd22e3580106998523dea42ec75bf9aa111734c82df54630bebdff20fe981cfc36c76f865eb1c2fb62c9e85bc3a6e5015a361a2eb1c8431578d0011010001889f04280102000905025331d433021d03000a09104ef7e4beccde97f02e5503ff5e0630d1b65291f4882b6d40a29da4616bb5088717d469fbcc3648b8276de04a04988b1f1b9f3e18f52265c1f8b6c85861691c1a6b8a3a25a1809a0b32ad330aec5667cb4262f4450649184e8113849b05e5ad06a316ea80c001e8e71838190339a6e48bbde30647bcf245134b9a97fa875c1d83a9862cae87ffd7e2c4ce3a1b89013d04180102000905025331d144021b0200a809104ef7e4beccde97f09d2004190102000605025331d144000a0910677815e371c2fd23522203fe22ab62b8e7a151383cea3edd3a12995693911426f8ccf125e1f6426388c0010f88d9ca7da2224aee8d1c12135998640c5e1813d55a93df472faae75bef858457248db41b4505827590aeccf6f9eb646da7f980655dd3050c6897feddddaca90676dee856d66db8923477d251712bb9b3186b4d0114daf7d6b59272b53218dd1da94a03ff64006fcbe71211e5daecd9961fba66cdb6de3f914882c58ba5beddeba7dcb950c1156d7fba18c19ea880dccc800eae335deec34e3b84ac75ffa24864f782f87815cda1c0f634b3dd2fa67cea30811d21723d21d9551fa12ccbcfa62b6d3a15d01307b99925707992556d50065505b090aadb8579083a20fe65bd2a270da9b011" +const missingCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Charset: UTF-8 + +mQENBFMYynYBCACVOZ3/e8Bm2b9KH9QyIlHGo/i1bnkpqsgXj8tpJ2MIUOnXMMAY +ztW7kKFLCmgVdLIC0vSoLA4yhaLcMojznh/2CcUglZeb6Ao8Gtelr//Rd5DRfPpG +zqcfUo+m+eO1co2Orabw0tZDfGpg5p3AYl0hmxhUyYSc/xUq93xL1UJzBFgYXY54 +QsM8dgeQgFseSk/YvdP5SMx1ev+eraUyiiUtWzWrWC1TdyRa5p4UZg6Rkoppf+WJ +QrW6BWrhAtqATHc8ozV7uJjeONjUEq24roRc/OFZdmQQGK6yrzKnnbA6MdHhqpdo +9kWDcXYb7pSE63Lc+OBa5X2GUVvXJLS/3nrtABEBAAG0F2ludmFsaWQtc2lnbmlu +Zy1zdWJrZXlziQEoBBMBAgASBQJTnKB5AhsBAgsHAhUIAh4BAAoJEO3UDQUIHpI/ +dN4H/idX4FQ1LIZCnpHS/oxoWQWfpRgdKAEM0qCqjMgiipJeEwSQbqjTCynuh5/R +JlODDz85ABR06aoF4l5ebGLQWFCYifPnJZ/Yf5OYcMGtb7dIbqxWVFL9iLMO/oDL +ioI3dotjPui5e+2hI9pVH1UHB/bZ/GvMGo6Zg0XxLPolKQODMVjpjLAQ0YJ3spew +RAmOGre6tIvbDsMBnm8qREt7a07cBJ6XK7xjxYaZHQBiHVxyEWDa6gyANONx8duW +/fhQ/zDTnyVM/ik6VO0Ty9BhPpcEYLFwh5c1ilFari1ta3e6qKo6ZGa9YMk/REhu +yBHd9nTkI+0CiQUmbckUiVjDKKe5AQ0EUxjKdgEIAJcXQeP+NmuciE99YcJoffxv +2gVLU4ZXBNHEaP0mgaJ1+tmMD089vUQAcyGRvw8jfsNsVZQIOAuRxY94aHQhIRHR +bUzBN28ofo/AJJtfx62C15xt6fDKRV6HXYqAiygrHIpEoRLyiN69iScUsjIJeyFL +C8wa72e8pSL6dkHoaV1N9ZH/xmrJ+k0vsgkQaAh9CzYufncDxcwkoP+aOlGtX1gP +WwWoIbz0JwLEMPHBWvDDXQcQPQTYQyj+LGC9U6f9VZHN25E94subM1MjuT9OhN9Y +MLfWaaIc5WyhLFyQKW2Upofn9wSFi8ubyBnv640Dfd0rVmaWv7LNTZpoZ/GbJAMA +EQEAAYkBHwQYAQIACQUCU5ygeQIbAgAKCRDt1A0FCB6SP0zCB/sEzaVR38vpx+OQ +MMynCBJrakiqDmUZv9xtplY7zsHSQjpd6xGflbU2n+iX99Q+nav0ETQZifNUEd4N +1ljDGQejcTyKD6Pkg6wBL3x9/RJye7Zszazm4+toJXZ8xJ3800+BtaPoI39akYJm ++ijzbskvN0v/j5GOFJwQO0pPRAFtdHqRs9Kf4YanxhedB4dIUblzlIJuKsxFit6N +lgGRblagG3Vv2eBszbxzPbJjHCgVLR3RmrVezKOsZjr/2i7X+xLWIR0uD3IN1qOW +CXQxLBizEEmSNVNxsp7KPGTLnqO3bPtqFirxS9PJLIMPTPLNBY7ZYuPNTMqVIUWF +4artDmrG +=7FfJ +-----END PGP PUBLIC KEY BLOCK-----` + +const invalidCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFMYynYBCACVOZ3/e8Bm2b9KH9QyIlHGo/i1bnkpqsgXj8tpJ2MIUOnXMMAY +ztW7kKFLCmgVdLIC0vSoLA4yhaLcMojznh/2CcUglZeb6Ao8Gtelr//Rd5DRfPpG +zqcfUo+m+eO1co2Orabw0tZDfGpg5p3AYl0hmxhUyYSc/xUq93xL1UJzBFgYXY54 +QsM8dgeQgFseSk/YvdP5SMx1ev+eraUyiiUtWzWrWC1TdyRa5p4UZg6Rkoppf+WJ +QrW6BWrhAtqATHc8ozV7uJjeONjUEq24roRc/OFZdmQQGK6yrzKnnbA6MdHhqpdo +9kWDcXYb7pSE63Lc+OBa5X2GUVvXJLS/3nrtABEBAAG0F2ludmFsaWQtc2lnbmlu +Zy1zdWJrZXlziQEoBBMBAgASBQJTnKB5AhsBAgsHAhUIAh4BAAoJEO3UDQUIHpI/ +dN4H/idX4FQ1LIZCnpHS/oxoWQWfpRgdKAEM0qCqjMgiipJeEwSQbqjTCynuh5/R +JlODDz85ABR06aoF4l5ebGLQWFCYifPnJZ/Yf5OYcMGtb7dIbqxWVFL9iLMO/oDL +ioI3dotjPui5e+2hI9pVH1UHB/bZ/GvMGo6Zg0XxLPolKQODMVjpjLAQ0YJ3spew +RAmOGre6tIvbDsMBnm8qREt7a07cBJ6XK7xjxYaZHQBiHVxyEWDa6gyANONx8duW +/fhQ/zDTnyVM/ik6VO0Ty9BhPpcEYLFwh5c1ilFari1ta3e6qKo6ZGa9YMk/REhu +yBHd9nTkI+0CiQUmbckUiVjDKKe5AQ0EUxjKdgEIAIINDqlj7X6jYKc6DjwrOkjQ +UIRWbQQar0LwmNilehmt70g5DCL1SYm9q4LcgJJ2Nhxj0/5qqsYib50OSWMcKeEe +iRXpXzv1ObpcQtI5ithp0gR53YPXBib80t3bUzomQ5UyZqAAHzMp3BKC54/vUrSK +FeRaxDzNLrCeyI00+LHNUtwghAqHvdNcsIf8VRumK8oTm3RmDh0TyjASWYbrt9c8 +R1Um3zuoACOVy+mEIgIzsfHq0u7dwYwJB5+KeM7ZLx+HGIYdUYzHuUE1sLwVoELh ++SHIGHI1HDicOjzqgajShuIjj5hZTyQySVprrsLKiXS6NEwHAP20+XjayJ/R3tEA +EQEAAYkCPgQYAQIBKAUCU5ygeQIbAsBdIAQZAQIABgUCU5ygeQAKCRCpVlnFZmhO +52RJB/9uD1MSa0wjY6tHOIgquZcP3bHBvHmrHNMw9HR2wRCMO91ZkhrpdS3ZHtgb +u3/55etj0FdvDo1tb8P8FGSVtO5Vcwf5APM8sbbqoi8L951Q3i7qt847lfhu6sMl +w0LWFvPTOLHrliZHItPRjOltS1WAWfr2jUYhsU9ytaDAJmvf9DujxEOsN5G1YJep +54JCKVCkM/y585Zcnn+yxk/XwqoNQ0/iJUT9qRrZWvoeasxhl1PQcwihCwss44A+ +YXaAt3hbk+6LEQuZoYS73yR3WHj+42tfm7YxRGeubXfgCEz/brETEWXMh4pe0vCL +bfWrmfSPq2rDegYcAybxRQz0lF8PAAoJEO3UDQUIHpI/exkH/0vQfdHA8g/N4T6E +i6b1CUVBAkvtdJpCATZjWPhXmShOw62gkDw306vHPilL4SCvEEi4KzG72zkp6VsB +DSRcpxCwT4mHue+duiy53/aRMtSJ+vDfiV1Vhq+3sWAck/yUtfDU9/u4eFaiNok1 +8/Gd7reyuZt5CiJnpdPpjCwelK21l2w7sHAnJF55ITXdOxI8oG3BRKufz0z5lyDY +s2tXYmhhQIggdgelN8LbcMhWs/PBbtUr6uZlNJG2lW1yscD4aI529VjwJlCeo745 +U7pO4eF05VViUJ2mmfoivL3tkhoTUWhx8xs8xCUcCg8DoEoSIhxtOmoTPR22Z9BL +6LCg2mg= +=Dhm4 +-----END PGP PUBLIC KEY BLOCK-----` + +const goodCrossSignatureKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mI0EVUqeVwEEAMufHRrMPWK3gyvi0O0tABCs/oON9zV9KDZlr1a1M91ShCSFwCPo +7r80PxdWVWcj0V5h50/CJYtpN3eE/mUIgW2z1uDYQF1OzrQ8ubrksfsJvpAhENom +lTQEppv9mV8qhcM278teb7TX0pgrUHLYF5CfPdp1L957JLLXoQR/lwLVABEBAAG0 +E2dvb2Qtc2lnbmluZy1zdWJrZXmIuAQTAQIAIgUCVUqeVwIbAwYLCQgHAwIGFQgC +CQoLBBYCAwECHgECF4AACgkQNRjL95IRWP69XQQAlH6+eyXJN4DZTLX78KGjHrsw +6FCvxxClEPtPUjcJy/1KCRQmtLAt9PbbA78dvgzjDeZMZqRAwdjyJhjyg/fkU2OH +7wq4ktjUu+dLcOBb+BFMEY+YjKZhf6EJuVfxoTVr5f82XNPbYHfTho9/OABKH6kv +X70PaKZhbwnwij8Nts65AaIEVUqftREEAJ3WxZfqAX0bTDbQPf2CMT2IVMGDfhK7 +GyubOZgDFFjwUJQvHNvsrbeGLZ0xOBumLINyPO1amIfTgJNm1iiWFWfmnHReGcDl +y5mpYG60Mb79Whdcer7CMm3AqYh/dW4g6IB02NwZMKoUHo3PXmFLxMKXnWyJ0clw +R0LI/Qn509yXAKDh1SO20rqrBM+EAP2c5bfI98kyNwQAi3buu94qo3RR1ZbvfxgW +CKXDVm6N99jdZGNK7FbRifXqzJJDLcXZKLnstnC4Sd3uyfyf1uFhmDLIQRryn5m+ +LBYHfDBPN3kdm7bsZDDq9GbTHiFZUfm/tChVKXWxkhpAmHhU/tH6GGzNSMXuIWSO +aOz3Rqq0ED4NXyNKjdF9MiwD/i83S0ZBc0LmJYt4Z10jtH2B6tYdqnAK29uQaadx +yZCX2scE09UIm32/w7pV77CKr1Cp/4OzAXS1tmFzQ+bX7DR+Gl8t4wxr57VeEMvl +BGw4Vjh3X8//m3xynxycQU18Q1zJ6PkiMyPw2owZ/nss3hpSRKFJsxMLhW3fKmKr +Ey2KiOcEGAECAAkFAlVKn7UCGwIAUgkQNRjL95IRWP5HIAQZEQIABgUCVUqftQAK +CRD98VjDN10SqkWrAKDTpEY8D8HC02E/KVC5YUI01B30wgCgurpILm20kXEDCeHp +C5pygfXw1DJrhAP+NyPJ4um/bU1I+rXaHHJYroYJs8YSweiNcwiHDQn0Engh/mVZ +SqLHvbKh2dL/RXymC3+rjPvQf5cup9bPxNMa6WagdYBNAfzWGtkVISeaQW+cTEp/ +MtgVijRGXR/lGLGETPg2X3Afwn9N9bLMBkBprKgbBqU7lpaoPupxT61bL70= +=vtbN +-----END PGP PUBLIC KEY BLOCK-----` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/compressed.go b/vendor/golang.org/x/crypto/openpgp/packet/compressed.go new file mode 100644 index 0000000..e8f0b5c --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/compressed.go @@ -0,0 +1,123 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "compress/bzip2" + "compress/flate" + "compress/zlib" + "golang.org/x/crypto/openpgp/errors" + "io" + "strconv" +) + +// Compressed represents a compressed OpenPGP packet. The decompressed contents +// will contain more OpenPGP packets. See RFC 4880, section 5.6. +type Compressed struct { + Body io.Reader +} + +const ( + NoCompression = flate.NoCompression + BestSpeed = flate.BestSpeed + BestCompression = flate.BestCompression + DefaultCompression = flate.DefaultCompression +) + +// CompressionConfig contains compressor configuration settings. +type CompressionConfig struct { + // Level is the compression level to use. It must be set to + // between -1 and 9, with -1 causing the compressor to use the + // default compression level, 0 causing the compressor to use + // no compression and 1 to 9 representing increasing (better, + // slower) compression levels. If Level is less than -1 or + // more then 9, a non-nil error will be returned during + // encryption. See the constants above for convenient common + // settings for Level. + Level int +} + +func (c *Compressed) parse(r io.Reader) error { + var buf [1]byte + _, err := readFull(r, buf[:]) + if err != nil { + return err + } + + switch buf[0] { + case 1: + c.Body = flate.NewReader(r) + case 2: + c.Body, err = zlib.NewReader(r) + case 3: + c.Body = bzip2.NewReader(r) + default: + err = errors.UnsupportedError("unknown compression algorithm: " + strconv.Itoa(int(buf[0]))) + } + + return err +} + +// compressedWriterCloser represents the serialized compression stream +// header and the compressor. Its Close() method ensures that both the +// compressor and serialized stream header are closed. Its Write() +// method writes to the compressor. +type compressedWriteCloser struct { + sh io.Closer // Stream Header + c io.WriteCloser // Compressor +} + +func (cwc compressedWriteCloser) Write(p []byte) (int, error) { + return cwc.c.Write(p) +} + +func (cwc compressedWriteCloser) Close() (err error) { + err = cwc.c.Close() + if err != nil { + return err + } + + return cwc.sh.Close() +} + +// SerializeCompressed serializes a compressed data packet to w and +// returns a WriteCloser to which the literal data packets themselves +// can be written and which MUST be closed on completion. If cc is +// nil, sensible defaults will be used to configure the compression +// algorithm. +func SerializeCompressed(w io.WriteCloser, algo CompressionAlgo, cc *CompressionConfig) (literaldata io.WriteCloser, err error) { + compressed, err := serializeStreamHeader(w, packetTypeCompressed) + if err != nil { + return + } + + _, err = compressed.Write([]byte{uint8(algo)}) + if err != nil { + return + } + + level := DefaultCompression + if cc != nil { + level = cc.Level + } + + var compressor io.WriteCloser + switch algo { + case CompressionZIP: + compressor, err = flate.NewWriter(compressed, level) + case CompressionZLIB: + compressor, err = zlib.NewWriterLevel(compressed, level) + default: + s := strconv.Itoa(int(algo)) + err = errors.UnsupportedError("Unsupported compression algorithm: " + s) + } + if err != nil { + return + } + + literaldata = compressedWriteCloser{compressed, compressor} + + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/compressed_test.go b/vendor/golang.org/x/crypto/openpgp/packet/compressed_test.go new file mode 100644 index 0000000..cb2d70b --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/compressed_test.go @@ -0,0 +1,41 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "io" + "io/ioutil" + "testing" +) + +func TestCompressed(t *testing.T) { + packet, err := Read(readerFromHex(compressedHex)) + if err != nil { + t.Errorf("failed to read Compressed: %s", err) + return + } + + c, ok := packet.(*Compressed) + if !ok { + t.Error("didn't find Compressed packet") + return + } + + contents, err := ioutil.ReadAll(c.Body) + if err != nil && err != io.EOF { + t.Error(err) + return + } + + expected, _ := hex.DecodeString(compressedExpectedHex) + if !bytes.Equal(expected, contents) { + t.Errorf("got:%x want:%x", contents, expected) + } +} + +const compressedHex = "a3013b2d90c4e02b72e25f727e5e496a5e49b11e1700" +const compressedExpectedHex = "cb1062004d14c8fe636f6e74656e74732e0a" diff --git a/vendor/golang.org/x/crypto/openpgp/packet/config.go b/vendor/golang.org/x/crypto/openpgp/packet/config.go new file mode 100644 index 0000000..c76eecc --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/config.go @@ -0,0 +1,91 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "crypto/rand" + "io" + "time" +) + +// Config collects a number of parameters along with sensible defaults. +// A nil *Config is valid and results in all default values. +type Config struct { + // Rand provides the source of entropy. + // If nil, the crypto/rand Reader is used. + Rand io.Reader + // DefaultHash is the default hash function to be used. + // If zero, SHA-256 is used. + DefaultHash crypto.Hash + // DefaultCipher is the cipher to be used. + // If zero, AES-128 is used. + DefaultCipher CipherFunction + // Time returns the current time as the number of seconds since the + // epoch. If Time is nil, time.Now is used. + Time func() time.Time + // DefaultCompressionAlgo is the compression algorithm to be + // applied to the plaintext before encryption. If zero, no + // compression is done. + DefaultCompressionAlgo CompressionAlgo + // CompressionConfig configures the compression settings. + CompressionConfig *CompressionConfig + // S2KCount is only used for symmetric encryption. It + // determines the strength of the passphrase stretching when + // the said passphrase is hashed to produce a key. S2KCount + // should be between 1024 and 65011712, inclusive. If Config + // is nil or S2KCount is 0, the value 65536 used. Not all + // values in the above range can be represented. S2KCount will + // be rounded up to the next representable value if it cannot + // be encoded exactly. When set, it is strongly encrouraged to + // use a value that is at least 65536. See RFC 4880 Section + // 3.7.1.3. + S2KCount int + // RSABits is the number of bits in new RSA keys made with NewEntity. + // If zero, then 2048 bit keys are created. + RSABits int +} + +func (c *Config) Random() io.Reader { + if c == nil || c.Rand == nil { + return rand.Reader + } + return c.Rand +} + +func (c *Config) Hash() crypto.Hash { + if c == nil || uint(c.DefaultHash) == 0 { + return crypto.SHA256 + } + return c.DefaultHash +} + +func (c *Config) Cipher() CipherFunction { + if c == nil || uint8(c.DefaultCipher) == 0 { + return CipherAES128 + } + return c.DefaultCipher +} + +func (c *Config) Now() time.Time { + if c == nil || c.Time == nil { + return time.Now() + } + return c.Time() +} + +func (c *Config) Compression() CompressionAlgo { + if c == nil { + return CompressionNone + } + return c.DefaultCompressionAlgo +} + +func (c *Config) PasswordHashIterations() int { + if c == nil || c.S2KCount == 0 { + return 0 + } + return c.S2KCount +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go new file mode 100644 index 0000000..266840d --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key.go @@ -0,0 +1,199 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto/rsa" + "encoding/binary" + "io" + "math/big" + "strconv" + + "golang.org/x/crypto/openpgp/elgamal" + "golang.org/x/crypto/openpgp/errors" +) + +const encryptedKeyVersion = 3 + +// EncryptedKey represents a public-key encrypted session key. See RFC 4880, +// section 5.1. +type EncryptedKey struct { + KeyId uint64 + Algo PublicKeyAlgorithm + CipherFunc CipherFunction // only valid after a successful Decrypt + Key []byte // only valid after a successful Decrypt + + encryptedMPI1, encryptedMPI2 parsedMPI +} + +func (e *EncryptedKey) parse(r io.Reader) (err error) { + var buf [10]byte + _, err = readFull(r, buf[:]) + if err != nil { + return + } + if buf[0] != encryptedKeyVersion { + return errors.UnsupportedError("unknown EncryptedKey version " + strconv.Itoa(int(buf[0]))) + } + e.KeyId = binary.BigEndian.Uint64(buf[1:9]) + e.Algo = PublicKeyAlgorithm(buf[9]) + switch e.Algo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + e.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r) + case PubKeyAlgoElGamal: + e.encryptedMPI1.bytes, e.encryptedMPI1.bitLength, err = readMPI(r) + if err != nil { + return + } + e.encryptedMPI2.bytes, e.encryptedMPI2.bitLength, err = readMPI(r) + } + _, err = consumeAll(r) + return +} + +func checksumKeyMaterial(key []byte) uint16 { + var checksum uint16 + for _, v := range key { + checksum += uint16(v) + } + return checksum +} + +// Decrypt decrypts an encrypted session key with the given private key. The +// private key must have been decrypted first. +// If config is nil, sensible defaults will be used. +func (e *EncryptedKey) Decrypt(priv *PrivateKey, config *Config) error { + var err error + var b []byte + + // TODO(agl): use session key decryption routines here to avoid + // padding oracle attacks. + switch priv.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + b, err = rsa.DecryptPKCS1v15(config.Random(), priv.PrivateKey.(*rsa.PrivateKey), e.encryptedMPI1.bytes) + case PubKeyAlgoElGamal: + c1 := new(big.Int).SetBytes(e.encryptedMPI1.bytes) + c2 := new(big.Int).SetBytes(e.encryptedMPI2.bytes) + b, err = elgamal.Decrypt(priv.PrivateKey.(*elgamal.PrivateKey), c1, c2) + default: + err = errors.InvalidArgumentError("cannot decrypted encrypted session key with private key of type " + strconv.Itoa(int(priv.PubKeyAlgo))) + } + + if err != nil { + return err + } + + e.CipherFunc = CipherFunction(b[0]) + e.Key = b[1 : len(b)-2] + expectedChecksum := uint16(b[len(b)-2])<<8 | uint16(b[len(b)-1]) + checksum := checksumKeyMaterial(e.Key) + if checksum != expectedChecksum { + return errors.StructuralError("EncryptedKey checksum incorrect") + } + + return nil +} + +// Serialize writes the encrypted key packet, e, to w. +func (e *EncryptedKey) Serialize(w io.Writer) error { + var mpiLen int + switch e.Algo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + mpiLen = 2 + len(e.encryptedMPI1.bytes) + case PubKeyAlgoElGamal: + mpiLen = 2 + len(e.encryptedMPI1.bytes) + 2 + len(e.encryptedMPI2.bytes) + default: + return errors.InvalidArgumentError("don't know how to serialize encrypted key type " + strconv.Itoa(int(e.Algo))) + } + + serializeHeader(w, packetTypeEncryptedKey, 1 /* version */ +8 /* key id */ +1 /* algo */ +mpiLen) + + w.Write([]byte{encryptedKeyVersion}) + binary.Write(w, binary.BigEndian, e.KeyId) + w.Write([]byte{byte(e.Algo)}) + + switch e.Algo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + writeMPIs(w, e.encryptedMPI1) + case PubKeyAlgoElGamal: + writeMPIs(w, e.encryptedMPI1, e.encryptedMPI2) + default: + panic("internal error") + } + + return nil +} + +// SerializeEncryptedKey serializes an encrypted key packet to w that contains +// key, encrypted to pub. +// If config is nil, sensible defaults will be used. +func SerializeEncryptedKey(w io.Writer, pub *PublicKey, cipherFunc CipherFunction, key []byte, config *Config) error { + var buf [10]byte + buf[0] = encryptedKeyVersion + binary.BigEndian.PutUint64(buf[1:9], pub.KeyId) + buf[9] = byte(pub.PubKeyAlgo) + + keyBlock := make([]byte, 1 /* cipher type */ +len(key)+2 /* checksum */) + keyBlock[0] = byte(cipherFunc) + copy(keyBlock[1:], key) + checksum := checksumKeyMaterial(key) + keyBlock[1+len(key)] = byte(checksum >> 8) + keyBlock[1+len(key)+1] = byte(checksum) + + switch pub.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly: + return serializeEncryptedKeyRSA(w, config.Random(), buf, pub.PublicKey.(*rsa.PublicKey), keyBlock) + case PubKeyAlgoElGamal: + return serializeEncryptedKeyElGamal(w, config.Random(), buf, pub.PublicKey.(*elgamal.PublicKey), keyBlock) + case PubKeyAlgoDSA, PubKeyAlgoRSASignOnly: + return errors.InvalidArgumentError("cannot encrypt to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo))) + } + + return errors.UnsupportedError("encrypting a key to public key of type " + strconv.Itoa(int(pub.PubKeyAlgo))) +} + +func serializeEncryptedKeyRSA(w io.Writer, rand io.Reader, header [10]byte, pub *rsa.PublicKey, keyBlock []byte) error { + cipherText, err := rsa.EncryptPKCS1v15(rand, pub, keyBlock) + if err != nil { + return errors.InvalidArgumentError("RSA encryption failed: " + err.Error()) + } + + packetLen := 10 /* header length */ + 2 /* mpi size */ + len(cipherText) + + err = serializeHeader(w, packetTypeEncryptedKey, packetLen) + if err != nil { + return err + } + _, err = w.Write(header[:]) + if err != nil { + return err + } + return writeMPI(w, 8*uint16(len(cipherText)), cipherText) +} + +func serializeEncryptedKeyElGamal(w io.Writer, rand io.Reader, header [10]byte, pub *elgamal.PublicKey, keyBlock []byte) error { + c1, c2, err := elgamal.Encrypt(rand, pub, keyBlock) + if err != nil { + return errors.InvalidArgumentError("ElGamal encryption failed: " + err.Error()) + } + + packetLen := 10 /* header length */ + packetLen += 2 /* mpi size */ + (c1.BitLen()+7)/8 + packetLen += 2 /* mpi size */ + (c2.BitLen()+7)/8 + + err = serializeHeader(w, packetTypeEncryptedKey, packetLen) + if err != nil { + return err + } + _, err = w.Write(header[:]) + if err != nil { + return err + } + err = writeBig(w, c1) + if err != nil { + return err + } + return writeBig(w, c2) +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go new file mode 100644 index 0000000..fee14cf --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/encrypted_key_test.go @@ -0,0 +1,146 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto/rsa" + "encoding/hex" + "fmt" + "math/big" + "testing" +) + +func bigFromBase10(s string) *big.Int { + b, ok := new(big.Int).SetString(s, 10) + if !ok { + panic("bigFromBase10 failed") + } + return b +} + +var encryptedKeyPub = rsa.PublicKey{ + E: 65537, + N: bigFromBase10("115804063926007623305902631768113868327816898845124614648849934718568541074358183759250136204762053879858102352159854352727097033322663029387610959884180306668628526686121021235757016368038585212410610742029286439607686208110250133174279811431933746643015923132833417396844716207301518956640020862630546868823"), +} + +var encryptedKeyRSAPriv = &rsa.PrivateKey{ + PublicKey: encryptedKeyPub, + D: bigFromBase10("32355588668219869544751561565313228297765464314098552250409557267371233892496951383426602439009993875125222579159850054973310859166139474359774543943714622292329487391199285040721944491839695981199720170366763547754915493640685849961780092241140181198779299712578774460837139360803883139311171713302987058393"), +} + +var encryptedKeyPriv = &PrivateKey{ + PublicKey: PublicKey{ + PubKeyAlgo: PubKeyAlgoRSA, + }, + PrivateKey: encryptedKeyRSAPriv, +} + +func TestDecryptingEncryptedKey(t *testing.T) { + const encryptedKeyHex = "c18c032a67d68660df41c70104005789d0de26b6a50c985a02a13131ca829c413a35d0e6fa8d6842599252162808ac7439c72151c8c6183e76923fe3299301414d0c25a2f06a2257db3839e7df0ec964773f6e4c4ac7ff3b48c444237166dd46ba8ff443a5410dc670cb486672fdbe7c9dfafb75b4fea83af3a204fe2a7dfa86bd20122b4f3d2646cbeecb8f7be8" + const expectedKeyHex = "d930363f7e0308c333b9618617ea728963d8df993665ae7be1092d4926fd864b" + + p, err := Read(readerFromHex(encryptedKeyHex)) + if err != nil { + t.Errorf("error from Read: %s", err) + return + } + ek, ok := p.(*EncryptedKey) + if !ok { + t.Errorf("didn't parse an EncryptedKey, got %#v", p) + return + } + + if ek.KeyId != 0x2a67d68660df41c7 || ek.Algo != PubKeyAlgoRSA { + t.Errorf("unexpected EncryptedKey contents: %#v", ek) + return + } + + err = ek.Decrypt(encryptedKeyPriv, nil) + if err != nil { + t.Errorf("error from Decrypt: %s", err) + return + } + + if ek.CipherFunc != CipherAES256 { + t.Errorf("unexpected EncryptedKey contents: %#v", ek) + return + } + + keyHex := fmt.Sprintf("%x", ek.Key) + if keyHex != expectedKeyHex { + t.Errorf("bad key, got %s want %x", keyHex, expectedKeyHex) + } +} + +func TestEncryptingEncryptedKey(t *testing.T) { + key := []byte{1, 2, 3, 4} + const expectedKeyHex = "01020304" + const keyId = 42 + + pub := &PublicKey{ + PublicKey: &encryptedKeyPub, + KeyId: keyId, + PubKeyAlgo: PubKeyAlgoRSAEncryptOnly, + } + + buf := new(bytes.Buffer) + err := SerializeEncryptedKey(buf, pub, CipherAES128, key, nil) + if err != nil { + t.Errorf("error writing encrypted key packet: %s", err) + } + + p, err := Read(buf) + if err != nil { + t.Errorf("error from Read: %s", err) + return + } + ek, ok := p.(*EncryptedKey) + if !ok { + t.Errorf("didn't parse an EncryptedKey, got %#v", p) + return + } + + if ek.KeyId != keyId || ek.Algo != PubKeyAlgoRSAEncryptOnly { + t.Errorf("unexpected EncryptedKey contents: %#v", ek) + return + } + + err = ek.Decrypt(encryptedKeyPriv, nil) + if err != nil { + t.Errorf("error from Decrypt: %s", err) + return + } + + if ek.CipherFunc != CipherAES128 { + t.Errorf("unexpected EncryptedKey contents: %#v", ek) + return + } + + keyHex := fmt.Sprintf("%x", ek.Key) + if keyHex != expectedKeyHex { + t.Errorf("bad key, got %s want %x", keyHex, expectedKeyHex) + } +} + +func TestSerializingEncryptedKey(t *testing.T) { + const encryptedKeyHex = "c18c032a67d68660df41c70104005789d0de26b6a50c985a02a13131ca829c413a35d0e6fa8d6842599252162808ac7439c72151c8c6183e76923fe3299301414d0c25a2f06a2257db3839e7df0ec964773f6e4c4ac7ff3b48c444237166dd46ba8ff443a5410dc670cb486672fdbe7c9dfafb75b4fea83af3a204fe2a7dfa86bd20122b4f3d2646cbeecb8f7be8" + + p, err := Read(readerFromHex(encryptedKeyHex)) + if err != nil { + t.Fatalf("error from Read: %s", err) + } + ek, ok := p.(*EncryptedKey) + if !ok { + t.Fatalf("didn't parse an EncryptedKey, got %#v", p) + } + + var buf bytes.Buffer + ek.Serialize(&buf) + + if bufHex := hex.EncodeToString(buf.Bytes()); bufHex != encryptedKeyHex { + t.Fatalf("serialization of encrypted key differed from original. Original was %s, but reserialized as %s", encryptedKeyHex, bufHex) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/literal.go b/vendor/golang.org/x/crypto/openpgp/packet/literal.go new file mode 100644 index 0000000..1a9ec6e --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/literal.go @@ -0,0 +1,89 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "encoding/binary" + "io" +) + +// LiteralData represents an encrypted file. See RFC 4880, section 5.9. +type LiteralData struct { + IsBinary bool + FileName string + Time uint32 // Unix epoch time. Either creation time or modification time. 0 means undefined. + Body io.Reader +} + +// ForEyesOnly returns whether the contents of the LiteralData have been marked +// as especially sensitive. +func (l *LiteralData) ForEyesOnly() bool { + return l.FileName == "_CONSOLE" +} + +func (l *LiteralData) parse(r io.Reader) (err error) { + var buf [256]byte + + _, err = readFull(r, buf[:2]) + if err != nil { + return + } + + l.IsBinary = buf[0] == 'b' + fileNameLen := int(buf[1]) + + _, err = readFull(r, buf[:fileNameLen]) + if err != nil { + return + } + + l.FileName = string(buf[:fileNameLen]) + + _, err = readFull(r, buf[:4]) + if err != nil { + return + } + + l.Time = binary.BigEndian.Uint32(buf[:4]) + l.Body = r + return +} + +// SerializeLiteral serializes a literal data packet to w and returns a +// WriteCloser to which the data itself can be written and which MUST be closed +// on completion. The fileName is truncated to 255 bytes. +func SerializeLiteral(w io.WriteCloser, isBinary bool, fileName string, time uint32) (plaintext io.WriteCloser, err error) { + var buf [4]byte + buf[0] = 't' + if isBinary { + buf[0] = 'b' + } + if len(fileName) > 255 { + fileName = fileName[:255] + } + buf[1] = byte(len(fileName)) + + inner, err := serializeStreamHeader(w, packetTypeLiteralData) + if err != nil { + return + } + + _, err = inner.Write(buf[:2]) + if err != nil { + return + } + _, err = inner.Write([]byte(fileName)) + if err != nil { + return + } + binary.BigEndian.PutUint32(buf[:], time) + _, err = inner.Write(buf[:]) + if err != nil { + return + } + + plaintext = inner + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/ocfb.go b/vendor/golang.org/x/crypto/openpgp/packet/ocfb.go new file mode 100644 index 0000000..ce2a33a --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/ocfb.go @@ -0,0 +1,143 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// OpenPGP CFB Mode. http://tools.ietf.org/html/rfc4880#section-13.9 + +package packet + +import ( + "crypto/cipher" +) + +type ocfbEncrypter struct { + b cipher.Block + fre []byte + outUsed int +} + +// An OCFBResyncOption determines if the "resynchronization step" of OCFB is +// performed. +type OCFBResyncOption bool + +const ( + OCFBResync OCFBResyncOption = true + OCFBNoResync OCFBResyncOption = false +) + +// NewOCFBEncrypter returns a cipher.Stream which encrypts data with OpenPGP's +// cipher feedback mode using the given cipher.Block, and an initial amount of +// ciphertext. randData must be random bytes and be the same length as the +// cipher.Block's block size. Resync determines if the "resynchronization step" +// from RFC 4880, 13.9 step 7 is performed. Different parts of OpenPGP vary on +// this point. +func NewOCFBEncrypter(block cipher.Block, randData []byte, resync OCFBResyncOption) (cipher.Stream, []byte) { + blockSize := block.BlockSize() + if len(randData) != blockSize { + return nil, nil + } + + x := &ocfbEncrypter{ + b: block, + fre: make([]byte, blockSize), + outUsed: 0, + } + prefix := make([]byte, blockSize+2) + + block.Encrypt(x.fre, x.fre) + for i := 0; i < blockSize; i++ { + prefix[i] = randData[i] ^ x.fre[i] + } + + block.Encrypt(x.fre, prefix[:blockSize]) + prefix[blockSize] = x.fre[0] ^ randData[blockSize-2] + prefix[blockSize+1] = x.fre[1] ^ randData[blockSize-1] + + if resync { + block.Encrypt(x.fre, prefix[2:]) + } else { + x.fre[0] = prefix[blockSize] + x.fre[1] = prefix[blockSize+1] + x.outUsed = 2 + } + return x, prefix +} + +func (x *ocfbEncrypter) XORKeyStream(dst, src []byte) { + for i := 0; i < len(src); i++ { + if x.outUsed == len(x.fre) { + x.b.Encrypt(x.fre, x.fre) + x.outUsed = 0 + } + + x.fre[x.outUsed] ^= src[i] + dst[i] = x.fre[x.outUsed] + x.outUsed++ + } +} + +type ocfbDecrypter struct { + b cipher.Block + fre []byte + outUsed int +} + +// NewOCFBDecrypter returns a cipher.Stream which decrypts data with OpenPGP's +// cipher feedback mode using the given cipher.Block. Prefix must be the first +// blockSize + 2 bytes of the ciphertext, where blockSize is the cipher.Block's +// block size. If an incorrect key is detected then nil is returned. On +// successful exit, blockSize+2 bytes of decrypted data are written into +// prefix. Resync determines if the "resynchronization step" from RFC 4880, +// 13.9 step 7 is performed. Different parts of OpenPGP vary on this point. +func NewOCFBDecrypter(block cipher.Block, prefix []byte, resync OCFBResyncOption) cipher.Stream { + blockSize := block.BlockSize() + if len(prefix) != blockSize+2 { + return nil + } + + x := &ocfbDecrypter{ + b: block, + fre: make([]byte, blockSize), + outUsed: 0, + } + prefixCopy := make([]byte, len(prefix)) + copy(prefixCopy, prefix) + + block.Encrypt(x.fre, x.fre) + for i := 0; i < blockSize; i++ { + prefixCopy[i] ^= x.fre[i] + } + + block.Encrypt(x.fre, prefix[:blockSize]) + prefixCopy[blockSize] ^= x.fre[0] + prefixCopy[blockSize+1] ^= x.fre[1] + + if prefixCopy[blockSize-2] != prefixCopy[blockSize] || + prefixCopy[blockSize-1] != prefixCopy[blockSize+1] { + return nil + } + + if resync { + block.Encrypt(x.fre, prefix[2:]) + } else { + x.fre[0] = prefix[blockSize] + x.fre[1] = prefix[blockSize+1] + x.outUsed = 2 + } + copy(prefix, prefixCopy) + return x +} + +func (x *ocfbDecrypter) XORKeyStream(dst, src []byte) { + for i := 0; i < len(src); i++ { + if x.outUsed == len(x.fre) { + x.b.Encrypt(x.fre, x.fre) + x.outUsed = 0 + } + + c := src[i] + dst[i] = x.fre[x.outUsed] ^ src[i] + x.fre[x.outUsed] = c + x.outUsed++ + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/ocfb_test.go b/vendor/golang.org/x/crypto/openpgp/packet/ocfb_test.go new file mode 100644 index 0000000..91022c0 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/ocfb_test.go @@ -0,0 +1,46 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto/aes" + "crypto/rand" + "testing" +) + +var commonKey128 = []byte{0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6, 0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c} + +func testOCFB(t *testing.T, resync OCFBResyncOption) { + block, err := aes.NewCipher(commonKey128) + if err != nil { + t.Error(err) + return + } + + plaintext := []byte("this is the plaintext, which is long enough to span several blocks.") + randData := make([]byte, block.BlockSize()) + rand.Reader.Read(randData) + ocfb, prefix := NewOCFBEncrypter(block, randData, resync) + ciphertext := make([]byte, len(plaintext)) + ocfb.XORKeyStream(ciphertext, plaintext) + + ocfbdec := NewOCFBDecrypter(block, prefix, resync) + if ocfbdec == nil { + t.Errorf("NewOCFBDecrypter failed (resync: %t)", resync) + return + } + plaintextCopy := make([]byte, len(plaintext)) + ocfbdec.XORKeyStream(plaintextCopy, ciphertext) + + if !bytes.Equal(plaintextCopy, plaintext) { + t.Errorf("got: %x, want: %x (resync: %t)", plaintextCopy, plaintext, resync) + } +} + +func TestOCFB(t *testing.T) { + testOCFB(t, OCFBNoResync) + testOCFB(t, OCFBResync) +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go b/vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go new file mode 100644 index 0000000..1713503 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/one_pass_signature.go @@ -0,0 +1,73 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "encoding/binary" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" + "io" + "strconv" +) + +// OnePassSignature represents a one-pass signature packet. See RFC 4880, +// section 5.4. +type OnePassSignature struct { + SigType SignatureType + Hash crypto.Hash + PubKeyAlgo PublicKeyAlgorithm + KeyId uint64 + IsLast bool +} + +const onePassSignatureVersion = 3 + +func (ops *OnePassSignature) parse(r io.Reader) (err error) { + var buf [13]byte + + _, err = readFull(r, buf[:]) + if err != nil { + return + } + if buf[0] != onePassSignatureVersion { + err = errors.UnsupportedError("one-pass-signature packet version " + strconv.Itoa(int(buf[0]))) + } + + var ok bool + ops.Hash, ok = s2k.HashIdToHash(buf[2]) + if !ok { + return errors.UnsupportedError("hash function: " + strconv.Itoa(int(buf[2]))) + } + + ops.SigType = SignatureType(buf[1]) + ops.PubKeyAlgo = PublicKeyAlgorithm(buf[3]) + ops.KeyId = binary.BigEndian.Uint64(buf[4:12]) + ops.IsLast = buf[12] != 0 + return +} + +// Serialize marshals the given OnePassSignature to w. +func (ops *OnePassSignature) Serialize(w io.Writer) error { + var buf [13]byte + buf[0] = onePassSignatureVersion + buf[1] = uint8(ops.SigType) + var ok bool + buf[2], ok = s2k.HashToHashId(ops.Hash) + if !ok { + return errors.UnsupportedError("hash type: " + strconv.Itoa(int(ops.Hash))) + } + buf[3] = uint8(ops.PubKeyAlgo) + binary.BigEndian.PutUint64(buf[4:12], ops.KeyId) + if ops.IsLast { + buf[12] = 1 + } + + if err := serializeHeader(w, packetTypeOnePassSignature, len(buf)); err != nil { + return err + } + _, err := w.Write(buf[:]) + return err +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/opaque.go b/vendor/golang.org/x/crypto/openpgp/packet/opaque.go new file mode 100644 index 0000000..456d807 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/opaque.go @@ -0,0 +1,162 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "io" + "io/ioutil" + + "golang.org/x/crypto/openpgp/errors" +) + +// OpaquePacket represents an OpenPGP packet as raw, unparsed data. This is +// useful for splitting and storing the original packet contents separately, +// handling unsupported packet types or accessing parts of the packet not yet +// implemented by this package. +type OpaquePacket struct { + // Packet type + Tag uint8 + // Reason why the packet was parsed opaquely + Reason error + // Binary contents of the packet data + Contents []byte +} + +func (op *OpaquePacket) parse(r io.Reader) (err error) { + op.Contents, err = ioutil.ReadAll(r) + return +} + +// Serialize marshals the packet to a writer in its original form, including +// the packet header. +func (op *OpaquePacket) Serialize(w io.Writer) (err error) { + err = serializeHeader(w, packetType(op.Tag), len(op.Contents)) + if err == nil { + _, err = w.Write(op.Contents) + } + return +} + +// Parse attempts to parse the opaque contents into a structure supported by +// this package. If the packet is not known then the result will be another +// OpaquePacket. +func (op *OpaquePacket) Parse() (p Packet, err error) { + hdr := bytes.NewBuffer(nil) + err = serializeHeader(hdr, packetType(op.Tag), len(op.Contents)) + if err != nil { + op.Reason = err + return op, err + } + p, err = Read(io.MultiReader(hdr, bytes.NewBuffer(op.Contents))) + if err != nil { + op.Reason = err + p = op + } + return +} + +// OpaqueReader reads OpaquePackets from an io.Reader. +type OpaqueReader struct { + r io.Reader +} + +func NewOpaqueReader(r io.Reader) *OpaqueReader { + return &OpaqueReader{r: r} +} + +// Read the next OpaquePacket. +func (or *OpaqueReader) Next() (op *OpaquePacket, err error) { + tag, _, contents, err := readHeader(or.r) + if err != nil { + return + } + op = &OpaquePacket{Tag: uint8(tag), Reason: err} + err = op.parse(contents) + if err != nil { + consumeAll(contents) + } + return +} + +// OpaqueSubpacket represents an unparsed OpenPGP subpacket, +// as found in signature and user attribute packets. +type OpaqueSubpacket struct { + SubType uint8 + Contents []byte +} + +// OpaqueSubpackets extracts opaque, unparsed OpenPGP subpackets from +// their byte representation. +func OpaqueSubpackets(contents []byte) (result []*OpaqueSubpacket, err error) { + var ( + subHeaderLen int + subPacket *OpaqueSubpacket + ) + for len(contents) > 0 { + subHeaderLen, subPacket, err = nextSubpacket(contents) + if err != nil { + break + } + result = append(result, subPacket) + contents = contents[subHeaderLen+len(subPacket.Contents):] + } + return +} + +func nextSubpacket(contents []byte) (subHeaderLen int, subPacket *OpaqueSubpacket, err error) { + // RFC 4880, section 5.2.3.1 + var subLen uint32 + if len(contents) < 1 { + goto Truncated + } + subPacket = &OpaqueSubpacket{} + switch { + case contents[0] < 192: + subHeaderLen = 2 // 1 length byte, 1 subtype byte + if len(contents) < subHeaderLen { + goto Truncated + } + subLen = uint32(contents[0]) + contents = contents[1:] + case contents[0] < 255: + subHeaderLen = 3 // 2 length bytes, 1 subtype + if len(contents) < subHeaderLen { + goto Truncated + } + subLen = uint32(contents[0]-192)<<8 + uint32(contents[1]) + 192 + contents = contents[2:] + default: + subHeaderLen = 6 // 5 length bytes, 1 subtype + if len(contents) < subHeaderLen { + goto Truncated + } + subLen = uint32(contents[1])<<24 | + uint32(contents[2])<<16 | + uint32(contents[3])<<8 | + uint32(contents[4]) + contents = contents[5:] + } + if subLen > uint32(len(contents)) || subLen == 0 { + goto Truncated + } + subPacket.SubType = contents[0] + subPacket.Contents = contents[1:subLen] + return +Truncated: + err = errors.StructuralError("subpacket truncated") + return +} + +func (osp *OpaqueSubpacket) Serialize(w io.Writer) (err error) { + buf := make([]byte, 6) + n := serializeSubpacketLength(buf, len(osp.Contents)+1) + buf[n] = osp.SubType + if _, err = w.Write(buf[:n+1]); err != nil { + return + } + _, err = w.Write(osp.Contents) + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/opaque_test.go b/vendor/golang.org/x/crypto/openpgp/packet/opaque_test.go new file mode 100644 index 0000000..f27bbfe --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/opaque_test.go @@ -0,0 +1,67 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "io" + "testing" +) + +// Test packet.Read error handling in OpaquePacket.Parse, +// which attempts to re-read an OpaquePacket as a supported +// Packet type. +func TestOpaqueParseReason(t *testing.T) { + buf, err := hex.DecodeString(UnsupportedKeyHex) + if err != nil { + t.Fatal(err) + } + or := NewOpaqueReader(bytes.NewBuffer(buf)) + count := 0 + badPackets := 0 + var uid *UserId + for { + op, err := or.Next() + if err == io.EOF { + break + } else if err != nil { + t.Errorf("#%d: opaque read error: %v", count, err) + break + } + // try to parse opaque packet + p, err := op.Parse() + switch pkt := p.(type) { + case *UserId: + uid = pkt + case *OpaquePacket: + // If an OpaquePacket can't re-parse, packet.Read + // certainly had its reasons. + if pkt.Reason == nil { + t.Errorf("#%d: opaque packet, no reason", count) + } else { + badPackets++ + } + } + count++ + } + + const expectedBad = 3 + // Test post-conditions, make sure we actually parsed packets as expected. + if badPackets != expectedBad { + t.Errorf("unexpected # unparseable packets: %d (want %d)", badPackets, expectedBad) + } + if uid == nil { + t.Errorf("failed to find expected UID in unsupported keyring") + } else if uid.Id != "Armin M. Warda " { + t.Errorf("unexpected UID: %v", uid.Id) + } +} + +// This key material has public key and signature packet versions modified to +// an unsupported value (1), so that trying to parse the OpaquePacket to +// a typed packet will get an error. It also contains a GnuPG trust packet. +// (Created with: od -An -t x1 pubring.gpg | xargs | sed 's/ //g') +const UnsupportedKeyHex = `988d012e7a18a20000010400d6ac00d92b89c1f4396c243abb9b76d2e9673ad63483291fed88e22b82e255e441c078c6abbbf7d2d195e50b62eeaa915b85b0ec20c225ce2c64c167cacb6e711daf2e45da4a8356a059b8160e3b3628ac0dd8437b31f06d53d6e8ea4214d4a26406a6b63e1001406ef23e0bb3069fac9a99a91f77dfafd5de0f188a5da5e3c9000511b42741726d696e204d2e205761726461203c7761726461406e657068696c696d2e727568722e64653e8900950105102e8936c705d1eb399e58489901013f0e03ff5a0c4f421e34fcfa388129166420c08cd76987bcdec6f01bd0271459a85cc22048820dd4e44ac2c7d23908d540f54facf1b36b0d9c20488781ce9dca856531e76e2e846826e9951338020a03a09b57aa5faa82e9267458bd76105399885ac35af7dc1cbb6aaed7c39e1039f3b5beda2c0e916bd38560509bab81235d1a0ead83b0020000` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet.go b/vendor/golang.org/x/crypto/openpgp/packet/packet.go new file mode 100644 index 0000000..3eded93 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/packet.go @@ -0,0 +1,537 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package packet implements parsing and serialization of OpenPGP packets, as +// specified in RFC 4880. +package packet // import "golang.org/x/crypto/openpgp/packet" + +import ( + "bufio" + "crypto/aes" + "crypto/cipher" + "crypto/des" + "golang.org/x/crypto/cast5" + "golang.org/x/crypto/openpgp/errors" + "io" + "math/big" +) + +// readFull is the same as io.ReadFull except that reading zero bytes returns +// ErrUnexpectedEOF rather than EOF. +func readFull(r io.Reader, buf []byte) (n int, err error) { + n, err = io.ReadFull(r, buf) + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + return +} + +// readLength reads an OpenPGP length from r. See RFC 4880, section 4.2.2. +func readLength(r io.Reader) (length int64, isPartial bool, err error) { + var buf [4]byte + _, err = readFull(r, buf[:1]) + if err != nil { + return + } + switch { + case buf[0] < 192: + length = int64(buf[0]) + case buf[0] < 224: + length = int64(buf[0]-192) << 8 + _, err = readFull(r, buf[0:1]) + if err != nil { + return + } + length += int64(buf[0]) + 192 + case buf[0] < 255: + length = int64(1) << (buf[0] & 0x1f) + isPartial = true + default: + _, err = readFull(r, buf[0:4]) + if err != nil { + return + } + length = int64(buf[0])<<24 | + int64(buf[1])<<16 | + int64(buf[2])<<8 | + int64(buf[3]) + } + return +} + +// partialLengthReader wraps an io.Reader and handles OpenPGP partial lengths. +// The continuation lengths are parsed and removed from the stream and EOF is +// returned at the end of the packet. See RFC 4880, section 4.2.2.4. +type partialLengthReader struct { + r io.Reader + remaining int64 + isPartial bool +} + +func (r *partialLengthReader) Read(p []byte) (n int, err error) { + for r.remaining == 0 { + if !r.isPartial { + return 0, io.EOF + } + r.remaining, r.isPartial, err = readLength(r.r) + if err != nil { + return 0, err + } + } + + toRead := int64(len(p)) + if toRead > r.remaining { + toRead = r.remaining + } + + n, err = r.r.Read(p[:int(toRead)]) + r.remaining -= int64(n) + if n < int(toRead) && err == io.EOF { + err = io.ErrUnexpectedEOF + } + return +} + +// partialLengthWriter writes a stream of data using OpenPGP partial lengths. +// See RFC 4880, section 4.2.2.4. +type partialLengthWriter struct { + w io.WriteCloser + lengthByte [1]byte +} + +func (w *partialLengthWriter) Write(p []byte) (n int, err error) { + for len(p) > 0 { + for power := uint(14); power < 32; power-- { + l := 1 << power + if len(p) >= l { + w.lengthByte[0] = 224 + uint8(power) + _, err = w.w.Write(w.lengthByte[:]) + if err != nil { + return + } + var m int + m, err = w.w.Write(p[:l]) + n += m + if err != nil { + return + } + p = p[l:] + break + } + } + } + return +} + +func (w *partialLengthWriter) Close() error { + w.lengthByte[0] = 0 + _, err := w.w.Write(w.lengthByte[:]) + if err != nil { + return err + } + return w.w.Close() +} + +// A spanReader is an io.LimitReader, but it returns ErrUnexpectedEOF if the +// underlying Reader returns EOF before the limit has been reached. +type spanReader struct { + r io.Reader + n int64 +} + +func (l *spanReader) Read(p []byte) (n int, err error) { + if l.n <= 0 { + return 0, io.EOF + } + if int64(len(p)) > l.n { + p = p[0:l.n] + } + n, err = l.r.Read(p) + l.n -= int64(n) + if l.n > 0 && err == io.EOF { + err = io.ErrUnexpectedEOF + } + return +} + +// readHeader parses a packet header and returns an io.Reader which will return +// the contents of the packet. See RFC 4880, section 4.2. +func readHeader(r io.Reader) (tag packetType, length int64, contents io.Reader, err error) { + var buf [4]byte + _, err = io.ReadFull(r, buf[:1]) + if err != nil { + return + } + if buf[0]&0x80 == 0 { + err = errors.StructuralError("tag byte does not have MSB set") + return + } + if buf[0]&0x40 == 0 { + // Old format packet + tag = packetType((buf[0] & 0x3f) >> 2) + lengthType := buf[0] & 3 + if lengthType == 3 { + length = -1 + contents = r + return + } + lengthBytes := 1 << lengthType + _, err = readFull(r, buf[0:lengthBytes]) + if err != nil { + return + } + for i := 0; i < lengthBytes; i++ { + length <<= 8 + length |= int64(buf[i]) + } + contents = &spanReader{r, length} + return + } + + // New format packet + tag = packetType(buf[0] & 0x3f) + length, isPartial, err := readLength(r) + if err != nil { + return + } + if isPartial { + contents = &partialLengthReader{ + remaining: length, + isPartial: true, + r: r, + } + length = -1 + } else { + contents = &spanReader{r, length} + } + return +} + +// serializeHeader writes an OpenPGP packet header to w. See RFC 4880, section +// 4.2. +func serializeHeader(w io.Writer, ptype packetType, length int) (err error) { + var buf [6]byte + var n int + + buf[0] = 0x80 | 0x40 | byte(ptype) + if length < 192 { + buf[1] = byte(length) + n = 2 + } else if length < 8384 { + length -= 192 + buf[1] = 192 + byte(length>>8) + buf[2] = byte(length) + n = 3 + } else { + buf[1] = 255 + buf[2] = byte(length >> 24) + buf[3] = byte(length >> 16) + buf[4] = byte(length >> 8) + buf[5] = byte(length) + n = 6 + } + + _, err = w.Write(buf[:n]) + return +} + +// serializeStreamHeader writes an OpenPGP packet header to w where the +// length of the packet is unknown. It returns a io.WriteCloser which can be +// used to write the contents of the packet. See RFC 4880, section 4.2. +func serializeStreamHeader(w io.WriteCloser, ptype packetType) (out io.WriteCloser, err error) { + var buf [1]byte + buf[0] = 0x80 | 0x40 | byte(ptype) + _, err = w.Write(buf[:]) + if err != nil { + return + } + out = &partialLengthWriter{w: w} + return +} + +// Packet represents an OpenPGP packet. Users are expected to try casting +// instances of this interface to specific packet types. +type Packet interface { + parse(io.Reader) error +} + +// consumeAll reads from the given Reader until error, returning the number of +// bytes read. +func consumeAll(r io.Reader) (n int64, err error) { + var m int + var buf [1024]byte + + for { + m, err = r.Read(buf[:]) + n += int64(m) + if err == io.EOF { + err = nil + return + } + if err != nil { + return + } + } +} + +// packetType represents the numeric ids of the different OpenPGP packet types. See +// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-2 +type packetType uint8 + +const ( + packetTypeEncryptedKey packetType = 1 + packetTypeSignature packetType = 2 + packetTypeSymmetricKeyEncrypted packetType = 3 + packetTypeOnePassSignature packetType = 4 + packetTypePrivateKey packetType = 5 + packetTypePublicKey packetType = 6 + packetTypePrivateSubkey packetType = 7 + packetTypeCompressed packetType = 8 + packetTypeSymmetricallyEncrypted packetType = 9 + packetTypeLiteralData packetType = 11 + packetTypeUserId packetType = 13 + packetTypePublicSubkey packetType = 14 + packetTypeUserAttribute packetType = 17 + packetTypeSymmetricallyEncryptedMDC packetType = 18 +) + +// peekVersion detects the version of a public key packet about to +// be read. A bufio.Reader at the original position of the io.Reader +// is returned. +func peekVersion(r io.Reader) (bufr *bufio.Reader, ver byte, err error) { + bufr = bufio.NewReader(r) + var verBuf []byte + if verBuf, err = bufr.Peek(1); err != nil { + return + } + ver = verBuf[0] + return +} + +// Read reads a single OpenPGP packet from the given io.Reader. If there is an +// error parsing a packet, the whole packet is consumed from the input. +func Read(r io.Reader) (p Packet, err error) { + tag, _, contents, err := readHeader(r) + if err != nil { + return + } + + switch tag { + case packetTypeEncryptedKey: + p = new(EncryptedKey) + case packetTypeSignature: + var version byte + // Detect signature version + if contents, version, err = peekVersion(contents); err != nil { + return + } + if version < 4 { + p = new(SignatureV3) + } else { + p = new(Signature) + } + case packetTypeSymmetricKeyEncrypted: + p = new(SymmetricKeyEncrypted) + case packetTypeOnePassSignature: + p = new(OnePassSignature) + case packetTypePrivateKey, packetTypePrivateSubkey: + pk := new(PrivateKey) + if tag == packetTypePrivateSubkey { + pk.IsSubkey = true + } + p = pk + case packetTypePublicKey, packetTypePublicSubkey: + var version byte + if contents, version, err = peekVersion(contents); err != nil { + return + } + isSubkey := tag == packetTypePublicSubkey + if version < 4 { + p = &PublicKeyV3{IsSubkey: isSubkey} + } else { + p = &PublicKey{IsSubkey: isSubkey} + } + case packetTypeCompressed: + p = new(Compressed) + case packetTypeSymmetricallyEncrypted: + p = new(SymmetricallyEncrypted) + case packetTypeLiteralData: + p = new(LiteralData) + case packetTypeUserId: + p = new(UserId) + case packetTypeUserAttribute: + p = new(UserAttribute) + case packetTypeSymmetricallyEncryptedMDC: + se := new(SymmetricallyEncrypted) + se.MDC = true + p = se + default: + err = errors.UnknownPacketTypeError(tag) + } + if p != nil { + err = p.parse(contents) + } + if err != nil { + consumeAll(contents) + } + return +} + +// SignatureType represents the different semantic meanings of an OpenPGP +// signature. See RFC 4880, section 5.2.1. +type SignatureType uint8 + +const ( + SigTypeBinary SignatureType = 0 + SigTypeText = 1 + SigTypeGenericCert = 0x10 + SigTypePersonaCert = 0x11 + SigTypeCasualCert = 0x12 + SigTypePositiveCert = 0x13 + SigTypeSubkeyBinding = 0x18 + SigTypePrimaryKeyBinding = 0x19 + SigTypeDirectSignature = 0x1F + SigTypeKeyRevocation = 0x20 + SigTypeSubkeyRevocation = 0x28 +) + +// PublicKeyAlgorithm represents the different public key system specified for +// OpenPGP. See +// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-12 +type PublicKeyAlgorithm uint8 + +const ( + PubKeyAlgoRSA PublicKeyAlgorithm = 1 + PubKeyAlgoRSAEncryptOnly PublicKeyAlgorithm = 2 + PubKeyAlgoRSASignOnly PublicKeyAlgorithm = 3 + PubKeyAlgoElGamal PublicKeyAlgorithm = 16 + PubKeyAlgoDSA PublicKeyAlgorithm = 17 + // RFC 6637, Section 5. + PubKeyAlgoECDH PublicKeyAlgorithm = 18 + PubKeyAlgoECDSA PublicKeyAlgorithm = 19 +) + +// CanEncrypt returns true if it's possible to encrypt a message to a public +// key of the given type. +func (pka PublicKeyAlgorithm) CanEncrypt() bool { + switch pka { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoElGamal: + return true + } + return false +} + +// CanSign returns true if it's possible for a public key of the given type to +// sign a message. +func (pka PublicKeyAlgorithm) CanSign() bool { + switch pka { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA: + return true + } + return false +} + +// CipherFunction represents the different block ciphers specified for OpenPGP. See +// http://www.iana.org/assignments/pgp-parameters/pgp-parameters.xhtml#pgp-parameters-13 +type CipherFunction uint8 + +const ( + Cipher3DES CipherFunction = 2 + CipherCAST5 CipherFunction = 3 + CipherAES128 CipherFunction = 7 + CipherAES192 CipherFunction = 8 + CipherAES256 CipherFunction = 9 +) + +// KeySize returns the key size, in bytes, of cipher. +func (cipher CipherFunction) KeySize() int { + switch cipher { + case Cipher3DES: + return 24 + case CipherCAST5: + return cast5.KeySize + case CipherAES128: + return 16 + case CipherAES192: + return 24 + case CipherAES256: + return 32 + } + return 0 +} + +// blockSize returns the block size, in bytes, of cipher. +func (cipher CipherFunction) blockSize() int { + switch cipher { + case Cipher3DES: + return des.BlockSize + case CipherCAST5: + return 8 + case CipherAES128, CipherAES192, CipherAES256: + return 16 + } + return 0 +} + +// new returns a fresh instance of the given cipher. +func (cipher CipherFunction) new(key []byte) (block cipher.Block) { + switch cipher { + case Cipher3DES: + block, _ = des.NewTripleDESCipher(key) + case CipherCAST5: + block, _ = cast5.NewCipher(key) + case CipherAES128, CipherAES192, CipherAES256: + block, _ = aes.NewCipher(key) + } + return +} + +// readMPI reads a big integer from r. The bit length returned is the bit +// length that was specified in r. This is preserved so that the integer can be +// reserialized exactly. +func readMPI(r io.Reader) (mpi []byte, bitLength uint16, err error) { + var buf [2]byte + _, err = readFull(r, buf[0:]) + if err != nil { + return + } + bitLength = uint16(buf[0])<<8 | uint16(buf[1]) + numBytes := (int(bitLength) + 7) / 8 + mpi = make([]byte, numBytes) + _, err = readFull(r, mpi) + return +} + +// mpiLength returns the length of the given *big.Int when serialized as an +// MPI. +func mpiLength(n *big.Int) (mpiLengthInBytes int) { + mpiLengthInBytes = 2 /* MPI length */ + mpiLengthInBytes += (n.BitLen() + 7) / 8 + return +} + +// writeMPI serializes a big integer to w. +func writeMPI(w io.Writer, bitLength uint16, mpiBytes []byte) (err error) { + _, err = w.Write([]byte{byte(bitLength >> 8), byte(bitLength)}) + if err == nil { + _, err = w.Write(mpiBytes) + } + return +} + +// writeBig serializes a *big.Int to w. +func writeBig(w io.Writer, i *big.Int) error { + return writeMPI(w, uint16(i.BitLen()), i.Bytes()) +} + +// CompressionAlgo Represents the different compression algorithms +// supported by OpenPGP (except for BZIP2, which is not currently +// supported). See Section 9.3 of RFC 4880. +type CompressionAlgo uint8 + +const ( + CompressionNone CompressionAlgo = 0 + CompressionZIP CompressionAlgo = 1 + CompressionZLIB CompressionAlgo = 2 +) diff --git a/vendor/golang.org/x/crypto/openpgp/packet/packet_test.go b/vendor/golang.org/x/crypto/openpgp/packet/packet_test.go new file mode 100644 index 0000000..1dab5c3 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/packet_test.go @@ -0,0 +1,255 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "fmt" + "golang.org/x/crypto/openpgp/errors" + "io" + "io/ioutil" + "testing" +) + +func TestReadFull(t *testing.T) { + var out [4]byte + + b := bytes.NewBufferString("foo") + n, err := readFull(b, out[:3]) + if n != 3 || err != nil { + t.Errorf("full read failed n:%d err:%s", n, err) + } + + b = bytes.NewBufferString("foo") + n, err = readFull(b, out[:4]) + if n != 3 || err != io.ErrUnexpectedEOF { + t.Errorf("partial read failed n:%d err:%s", n, err) + } + + b = bytes.NewBuffer(nil) + n, err = readFull(b, out[:3]) + if n != 0 || err != io.ErrUnexpectedEOF { + t.Errorf("empty read failed n:%d err:%s", n, err) + } +} + +func readerFromHex(s string) io.Reader { + data, err := hex.DecodeString(s) + if err != nil { + panic("readerFromHex: bad input") + } + return bytes.NewBuffer(data) +} + +var readLengthTests = []struct { + hexInput string + length int64 + isPartial bool + err error +}{ + {"", 0, false, io.ErrUnexpectedEOF}, + {"1f", 31, false, nil}, + {"c0", 0, false, io.ErrUnexpectedEOF}, + {"c101", 256 + 1 + 192, false, nil}, + {"e0", 1, true, nil}, + {"e1", 2, true, nil}, + {"e2", 4, true, nil}, + {"ff", 0, false, io.ErrUnexpectedEOF}, + {"ff00", 0, false, io.ErrUnexpectedEOF}, + {"ff0000", 0, false, io.ErrUnexpectedEOF}, + {"ff000000", 0, false, io.ErrUnexpectedEOF}, + {"ff00000000", 0, false, nil}, + {"ff01020304", 16909060, false, nil}, +} + +func TestReadLength(t *testing.T) { + for i, test := range readLengthTests { + length, isPartial, err := readLength(readerFromHex(test.hexInput)) + if test.err != nil { + if err != test.err { + t.Errorf("%d: expected different error got:%s want:%s", i, err, test.err) + } + continue + } + if err != nil { + t.Errorf("%d: unexpected error: %s", i, err) + continue + } + if length != test.length || isPartial != test.isPartial { + t.Errorf("%d: bad result got:(%d,%t) want:(%d,%t)", i, length, isPartial, test.length, test.isPartial) + } + } +} + +var partialLengthReaderTests = []struct { + hexInput string + err error + hexOutput string +}{ + {"e0", io.ErrUnexpectedEOF, ""}, + {"e001", io.ErrUnexpectedEOF, ""}, + {"e0010102", nil, "0102"}, + {"ff00000000", nil, ""}, + {"e10102e1030400", nil, "01020304"}, + {"e101", io.ErrUnexpectedEOF, ""}, +} + +func TestPartialLengthReader(t *testing.T) { + for i, test := range partialLengthReaderTests { + r := &partialLengthReader{readerFromHex(test.hexInput), 0, true} + out, err := ioutil.ReadAll(r) + if test.err != nil { + if err != test.err { + t.Errorf("%d: expected different error got:%s want:%s", i, err, test.err) + } + continue + } + if err != nil { + t.Errorf("%d: unexpected error: %s", i, err) + continue + } + + got := fmt.Sprintf("%x", out) + if got != test.hexOutput { + t.Errorf("%d: got:%s want:%s", i, test.hexOutput, got) + } + } +} + +var readHeaderTests = []struct { + hexInput string + structuralError bool + unexpectedEOF bool + tag int + length int64 + hexOutput string +}{ + {"", false, false, 0, 0, ""}, + {"7f", true, false, 0, 0, ""}, + + // Old format headers + {"80", false, true, 0, 0, ""}, + {"8001", false, true, 0, 1, ""}, + {"800102", false, false, 0, 1, "02"}, + {"81000102", false, false, 0, 1, "02"}, + {"820000000102", false, false, 0, 1, "02"}, + {"860000000102", false, false, 1, 1, "02"}, + {"83010203", false, false, 0, -1, "010203"}, + + // New format headers + {"c0", false, true, 0, 0, ""}, + {"c000", false, false, 0, 0, ""}, + {"c00102", false, false, 0, 1, "02"}, + {"c0020203", false, false, 0, 2, "0203"}, + {"c00202", false, true, 0, 2, ""}, + {"c3020203", false, false, 3, 2, "0203"}, +} + +func TestReadHeader(t *testing.T) { + for i, test := range readHeaderTests { + tag, length, contents, err := readHeader(readerFromHex(test.hexInput)) + if test.structuralError { + if _, ok := err.(errors.StructuralError); ok { + continue + } + t.Errorf("%d: expected StructuralError, got:%s", i, err) + continue + } + if err != nil { + if len(test.hexInput) == 0 && err == io.EOF { + continue + } + if !test.unexpectedEOF || err != io.ErrUnexpectedEOF { + t.Errorf("%d: unexpected error from readHeader: %s", i, err) + } + continue + } + if int(tag) != test.tag || length != test.length { + t.Errorf("%d: got:(%d,%d) want:(%d,%d)", i, int(tag), length, test.tag, test.length) + continue + } + + body, err := ioutil.ReadAll(contents) + if err != nil { + if !test.unexpectedEOF || err != io.ErrUnexpectedEOF { + t.Errorf("%d: unexpected error from contents: %s", i, err) + } + continue + } + if test.unexpectedEOF { + t.Errorf("%d: expected ErrUnexpectedEOF from contents but got no error", i) + continue + } + got := fmt.Sprintf("%x", body) + if got != test.hexOutput { + t.Errorf("%d: got:%s want:%s", i, got, test.hexOutput) + } + } +} + +func TestSerializeHeader(t *testing.T) { + tag := packetTypePublicKey + lengths := []int{0, 1, 2, 64, 192, 193, 8000, 8384, 8385, 10000} + + for _, length := range lengths { + buf := bytes.NewBuffer(nil) + serializeHeader(buf, tag, length) + tag2, length2, _, err := readHeader(buf) + if err != nil { + t.Errorf("length %d, err: %s", length, err) + } + if tag2 != tag { + t.Errorf("length %d, tag incorrect (got %d, want %d)", length, tag2, tag) + } + if int(length2) != length { + t.Errorf("length %d, length incorrect (got %d)", length, length2) + } + } +} + +func TestPartialLengths(t *testing.T) { + buf := bytes.NewBuffer(nil) + w := new(partialLengthWriter) + w.w = noOpCloser{buf} + + const maxChunkSize = 64 + + var b [maxChunkSize]byte + var n uint8 + for l := 1; l <= maxChunkSize; l++ { + for i := 0; i < l; i++ { + b[i] = n + n++ + } + m, err := w.Write(b[:l]) + if m != l { + t.Errorf("short write got: %d want: %d", m, l) + } + if err != nil { + t.Errorf("error from write: %s", err) + } + } + w.Close() + + want := (maxChunkSize * (maxChunkSize + 1)) / 2 + copyBuf := bytes.NewBuffer(nil) + r := &partialLengthReader{buf, 0, true} + m, err := io.Copy(copyBuf, r) + if m != int64(want) { + t.Errorf("short copy got: %d want: %d", m, want) + } + if err != nil { + t.Errorf("error from copy: %s", err) + } + + copyBytes := copyBuf.Bytes() + for i := 0; i < want; i++ { + if copyBytes[i] != uint8(i) { + t.Errorf("bad pattern in copy at %d", i) + break + } + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/private_key.go b/vendor/golang.org/x/crypto/openpgp/packet/private_key.go new file mode 100644 index 0000000..34734cc --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/private_key.go @@ -0,0 +1,380 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "crypto/cipher" + "crypto/dsa" + "crypto/ecdsa" + "crypto/rsa" + "crypto/sha1" + "io" + "io/ioutil" + "math/big" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/elgamal" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" +) + +// PrivateKey represents a possibly encrypted private key. See RFC 4880, +// section 5.5.3. +type PrivateKey struct { + PublicKey + Encrypted bool // if true then the private key is unavailable until Decrypt has been called. + encryptedData []byte + cipher CipherFunction + s2k func(out, in []byte) + PrivateKey interface{} // An *{rsa|dsa|ecdsa}.PrivateKey or a crypto.Signer. + sha1Checksum bool + iv []byte +} + +func NewRSAPrivateKey(currentTime time.Time, priv *rsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewRSAPublicKey(currentTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewDSAPrivateKey(currentTime time.Time, priv *dsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewDSAPublicKey(currentTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewElGamalPrivateKey(currentTime time.Time, priv *elgamal.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewElGamalPublicKey(currentTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +func NewECDSAPrivateKey(currentTime time.Time, priv *ecdsa.PrivateKey) *PrivateKey { + pk := new(PrivateKey) + pk.PublicKey = *NewECDSAPublicKey(currentTime, &priv.PublicKey) + pk.PrivateKey = priv + return pk +} + +// NewSignerPrivateKey creates a sign-only PrivateKey from a crypto.Signer that +// implements RSA or ECDSA. +func NewSignerPrivateKey(currentTime time.Time, signer crypto.Signer) *PrivateKey { + pk := new(PrivateKey) + switch pubkey := signer.Public().(type) { + case rsa.PublicKey: + pk.PublicKey = *NewRSAPublicKey(currentTime, &pubkey) + pk.PubKeyAlgo = PubKeyAlgoRSASignOnly + case ecdsa.PublicKey: + pk.PublicKey = *NewECDSAPublicKey(currentTime, &pubkey) + default: + panic("openpgp: unknown crypto.Signer type in NewSignerPrivateKey") + } + pk.PrivateKey = signer + return pk +} + +func (pk *PrivateKey) parse(r io.Reader) (err error) { + err = (&pk.PublicKey).parse(r) + if err != nil { + return + } + var buf [1]byte + _, err = readFull(r, buf[:]) + if err != nil { + return + } + + s2kType := buf[0] + + switch s2kType { + case 0: + pk.s2k = nil + pk.Encrypted = false + case 254, 255: + _, err = readFull(r, buf[:]) + if err != nil { + return + } + pk.cipher = CipherFunction(buf[0]) + pk.Encrypted = true + pk.s2k, err = s2k.Parse(r) + if err != nil { + return + } + if s2kType == 254 { + pk.sha1Checksum = true + } + default: + return errors.UnsupportedError("deprecated s2k function in private key") + } + + if pk.Encrypted { + blockSize := pk.cipher.blockSize() + if blockSize == 0 { + return errors.UnsupportedError("unsupported cipher in private key: " + strconv.Itoa(int(pk.cipher))) + } + pk.iv = make([]byte, blockSize) + _, err = readFull(r, pk.iv) + if err != nil { + return + } + } + + pk.encryptedData, err = ioutil.ReadAll(r) + if err != nil { + return + } + + if !pk.Encrypted { + return pk.parsePrivateKey(pk.encryptedData) + } + + return +} + +func mod64kHash(d []byte) uint16 { + var h uint16 + for _, b := range d { + h += uint16(b) + } + return h +} + +func (pk *PrivateKey) Serialize(w io.Writer) (err error) { + // TODO(agl): support encrypted private keys + buf := bytes.NewBuffer(nil) + err = pk.PublicKey.serializeWithoutHeaders(buf) + if err != nil { + return + } + buf.WriteByte(0 /* no encryption */) + + privateKeyBuf := bytes.NewBuffer(nil) + + switch priv := pk.PrivateKey.(type) { + case *rsa.PrivateKey: + err = serializeRSAPrivateKey(privateKeyBuf, priv) + case *dsa.PrivateKey: + err = serializeDSAPrivateKey(privateKeyBuf, priv) + case *elgamal.PrivateKey: + err = serializeElGamalPrivateKey(privateKeyBuf, priv) + case *ecdsa.PrivateKey: + err = serializeECDSAPrivateKey(privateKeyBuf, priv) + default: + err = errors.InvalidArgumentError("unknown private key type") + } + if err != nil { + return + } + + ptype := packetTypePrivateKey + contents := buf.Bytes() + privateKeyBytes := privateKeyBuf.Bytes() + if pk.IsSubkey { + ptype = packetTypePrivateSubkey + } + err = serializeHeader(w, ptype, len(contents)+len(privateKeyBytes)+2) + if err != nil { + return + } + _, err = w.Write(contents) + if err != nil { + return + } + _, err = w.Write(privateKeyBytes) + if err != nil { + return + } + + checksum := mod64kHash(privateKeyBytes) + var checksumBytes [2]byte + checksumBytes[0] = byte(checksum >> 8) + checksumBytes[1] = byte(checksum) + _, err = w.Write(checksumBytes[:]) + + return +} + +func serializeRSAPrivateKey(w io.Writer, priv *rsa.PrivateKey) error { + err := writeBig(w, priv.D) + if err != nil { + return err + } + err = writeBig(w, priv.Primes[1]) + if err != nil { + return err + } + err = writeBig(w, priv.Primes[0]) + if err != nil { + return err + } + return writeBig(w, priv.Precomputed.Qinv) +} + +func serializeDSAPrivateKey(w io.Writer, priv *dsa.PrivateKey) error { + return writeBig(w, priv.X) +} + +func serializeElGamalPrivateKey(w io.Writer, priv *elgamal.PrivateKey) error { + return writeBig(w, priv.X) +} + +func serializeECDSAPrivateKey(w io.Writer, priv *ecdsa.PrivateKey) error { + return writeBig(w, priv.D) +} + +// Decrypt decrypts an encrypted private key using a passphrase. +func (pk *PrivateKey) Decrypt(passphrase []byte) error { + if !pk.Encrypted { + return nil + } + + key := make([]byte, pk.cipher.KeySize()) + pk.s2k(key, passphrase) + block := pk.cipher.new(key) + cfb := cipher.NewCFBDecrypter(block, pk.iv) + + data := make([]byte, len(pk.encryptedData)) + cfb.XORKeyStream(data, pk.encryptedData) + + if pk.sha1Checksum { + if len(data) < sha1.Size { + return errors.StructuralError("truncated private key data") + } + h := sha1.New() + h.Write(data[:len(data)-sha1.Size]) + sum := h.Sum(nil) + if !bytes.Equal(sum, data[len(data)-sha1.Size:]) { + return errors.StructuralError("private key checksum failure") + } + data = data[:len(data)-sha1.Size] + } else { + if len(data) < 2 { + return errors.StructuralError("truncated private key data") + } + var sum uint16 + for i := 0; i < len(data)-2; i++ { + sum += uint16(data[i]) + } + if data[len(data)-2] != uint8(sum>>8) || + data[len(data)-1] != uint8(sum) { + return errors.StructuralError("private key checksum failure") + } + data = data[:len(data)-2] + } + + return pk.parsePrivateKey(data) +} + +func (pk *PrivateKey) parsePrivateKey(data []byte) (err error) { + switch pk.PublicKey.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoRSAEncryptOnly: + return pk.parseRSAPrivateKey(data) + case PubKeyAlgoDSA: + return pk.parseDSAPrivateKey(data) + case PubKeyAlgoElGamal: + return pk.parseElGamalPrivateKey(data) + case PubKeyAlgoECDSA: + return pk.parseECDSAPrivateKey(data) + } + panic("impossible") +} + +func (pk *PrivateKey) parseRSAPrivateKey(data []byte) (err error) { + rsaPub := pk.PublicKey.PublicKey.(*rsa.PublicKey) + rsaPriv := new(rsa.PrivateKey) + rsaPriv.PublicKey = *rsaPub + + buf := bytes.NewBuffer(data) + d, _, err := readMPI(buf) + if err != nil { + return + } + p, _, err := readMPI(buf) + if err != nil { + return + } + q, _, err := readMPI(buf) + if err != nil { + return + } + + rsaPriv.D = new(big.Int).SetBytes(d) + rsaPriv.Primes = make([]*big.Int, 2) + rsaPriv.Primes[0] = new(big.Int).SetBytes(p) + rsaPriv.Primes[1] = new(big.Int).SetBytes(q) + if err := rsaPriv.Validate(); err != nil { + return err + } + rsaPriv.Precompute() + pk.PrivateKey = rsaPriv + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} + +func (pk *PrivateKey) parseDSAPrivateKey(data []byte) (err error) { + dsaPub := pk.PublicKey.PublicKey.(*dsa.PublicKey) + dsaPriv := new(dsa.PrivateKey) + dsaPriv.PublicKey = *dsaPub + + buf := bytes.NewBuffer(data) + x, _, err := readMPI(buf) + if err != nil { + return + } + + dsaPriv.X = new(big.Int).SetBytes(x) + pk.PrivateKey = dsaPriv + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} + +func (pk *PrivateKey) parseElGamalPrivateKey(data []byte) (err error) { + pub := pk.PublicKey.PublicKey.(*elgamal.PublicKey) + priv := new(elgamal.PrivateKey) + priv.PublicKey = *pub + + buf := bytes.NewBuffer(data) + x, _, err := readMPI(buf) + if err != nil { + return + } + + priv.X = new(big.Int).SetBytes(x) + pk.PrivateKey = priv + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} + +func (pk *PrivateKey) parseECDSAPrivateKey(data []byte) (err error) { + ecdsaPub := pk.PublicKey.PublicKey.(*ecdsa.PublicKey) + + buf := bytes.NewBuffer(data) + d, _, err := readMPI(buf) + if err != nil { + return + } + + pk.PrivateKey = &ecdsa.PrivateKey{ + PublicKey: *ecdsaPub, + D: new(big.Int).SetBytes(d), + } + pk.Encrypted = false + pk.encryptedData = nil + + return nil +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/private_key_test.go b/vendor/golang.org/x/crypto/openpgp/packet/private_key_test.go new file mode 100644 index 0000000..ac651d9 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/private_key_test.go @@ -0,0 +1,270 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/hex" + "hash" + "io" + "testing" + "time" +) + +var privateKeyTests = []struct { + privateKeyHex string + creationTime time.Time +}{ + { + privKeyRSAHex, + time.Unix(0x4cc349a8, 0), + }, + { + privKeyElGamalHex, + time.Unix(0x4df9ee1a, 0), + }, +} + +func TestPrivateKeyRead(t *testing.T) { + for i, test := range privateKeyTests { + packet, err := Read(readerFromHex(test.privateKeyHex)) + if err != nil { + t.Errorf("#%d: failed to parse: %s", i, err) + continue + } + + privKey := packet.(*PrivateKey) + + if !privKey.Encrypted { + t.Errorf("#%d: private key isn't encrypted", i) + continue + } + + err = privKey.Decrypt([]byte("wrong password")) + if err == nil { + t.Errorf("#%d: decrypted with incorrect key", i) + continue + } + + err = privKey.Decrypt([]byte("testing")) + if err != nil { + t.Errorf("#%d: failed to decrypt: %s", i, err) + continue + } + + if !privKey.CreationTime.Equal(test.creationTime) || privKey.Encrypted { + t.Errorf("#%d: bad result, got: %#v", i, privKey) + } + } +} + +func populateHash(hashFunc crypto.Hash, msg []byte) (hash.Hash, error) { + h := hashFunc.New() + if _, err := h.Write(msg); err != nil { + return nil, err + } + return h, nil +} + +func TestRSAPrivateKey(t *testing.T) { + privKeyDER, _ := hex.DecodeString(pkcs1PrivKeyHex) + rsaPriv, err := x509.ParsePKCS1PrivateKey(privKeyDER) + if err != nil { + t.Fatal(err) + } + + var buf bytes.Buffer + if err := NewRSAPrivateKey(time.Now(), rsaPriv).Serialize(&buf); err != nil { + t.Fatal(err) + } + + p, err := Read(&buf) + if err != nil { + t.Fatal(err) + } + + priv, ok := p.(*PrivateKey) + if !ok { + t.Fatal("didn't parse private key") + } + + sig := &Signature{ + PubKeyAlgo: PubKeyAlgoRSA, + Hash: crypto.SHA256, + } + msg := []byte("Hello World!") + + h, err := populateHash(sig.Hash, msg) + if err != nil { + t.Fatal(err) + } + if err := sig.Sign(h, priv, nil); err != nil { + t.Fatal(err) + } + + if h, err = populateHash(sig.Hash, msg); err != nil { + t.Fatal(err) + } + if err := priv.VerifySignature(h, sig); err != nil { + t.Fatal(err) + } +} + +func TestECDSAPrivateKey(t *testing.T) { + ecdsaPriv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + + var buf bytes.Buffer + if err := NewECDSAPrivateKey(time.Now(), ecdsaPriv).Serialize(&buf); err != nil { + t.Fatal(err) + } + + p, err := Read(&buf) + if err != nil { + t.Fatal(err) + } + + priv, ok := p.(*PrivateKey) + if !ok { + t.Fatal("didn't parse private key") + } + + sig := &Signature{ + PubKeyAlgo: PubKeyAlgoECDSA, + Hash: crypto.SHA256, + } + msg := []byte("Hello World!") + + h, err := populateHash(sig.Hash, msg) + if err != nil { + t.Fatal(err) + } + if err := sig.Sign(h, priv, nil); err != nil { + t.Fatal(err) + } + + if h, err = populateHash(sig.Hash, msg); err != nil { + t.Fatal(err) + } + if err := priv.VerifySignature(h, sig); err != nil { + t.Fatal(err) + } +} + +type rsaSigner struct { + priv *rsa.PrivateKey +} + +func (s *rsaSigner) Public() crypto.PublicKey { + return s.priv.PublicKey +} + +func (s *rsaSigner) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error) { + return s.priv.Sign(rand, msg, opts) +} + +func TestRSASignerPrivateKey(t *testing.T) { + rsaPriv, err := rsa.GenerateKey(rand.Reader, 1024) + if err != nil { + t.Fatal(err) + } + + priv := NewSignerPrivateKey(time.Now(), &rsaSigner{rsaPriv}) + + if priv.PubKeyAlgo != PubKeyAlgoRSASignOnly { + t.Fatal("NewSignerPrivateKey should have made a sign-only RSA private key") + } + + sig := &Signature{ + PubKeyAlgo: PubKeyAlgoRSASignOnly, + Hash: crypto.SHA256, + } + msg := []byte("Hello World!") + + h, err := populateHash(sig.Hash, msg) + if err != nil { + t.Fatal(err) + } + if err := sig.Sign(h, priv, nil); err != nil { + t.Fatal(err) + } + + if h, err = populateHash(sig.Hash, msg); err != nil { + t.Fatal(err) + } + if err := priv.VerifySignature(h, sig); err != nil { + t.Fatal(err) + } +} + +type ecdsaSigner struct { + priv *ecdsa.PrivateKey +} + +func (s *ecdsaSigner) Public() crypto.PublicKey { + return s.priv.PublicKey +} + +func (s *ecdsaSigner) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error) { + return s.priv.Sign(rand, msg, opts) +} + +func TestECDSASignerPrivateKey(t *testing.T) { + ecdsaPriv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + t.Fatal(err) + } + + priv := NewSignerPrivateKey(time.Now(), &ecdsaSigner{ecdsaPriv}) + + if priv.PubKeyAlgo != PubKeyAlgoECDSA { + t.Fatal("NewSignerPrivateKey should have made an ECSDA private key") + } + + sig := &Signature{ + PubKeyAlgo: PubKeyAlgoECDSA, + Hash: crypto.SHA256, + } + msg := []byte("Hello World!") + + h, err := populateHash(sig.Hash, msg) + if err != nil { + t.Fatal(err) + } + if err := sig.Sign(h, priv, nil); err != nil { + t.Fatal(err) + } + + if h, err = populateHash(sig.Hash, msg); err != nil { + t.Fatal(err) + } + if err := priv.VerifySignature(h, sig); err != nil { + t.Fatal(err) + } +} + +func TestIssue11505(t *testing.T) { + // parsing a rsa private key with p or q == 1 used to panic due to a divide by zero + _, _ = Read(readerFromHex("9c3004303030300100000011303030000000000000010130303030303030303030303030303030303030303030303030303030303030303030303030303030303030")) +} + +// Generated with `gpg --export-secret-keys "Test Key 2"` +const privKeyRSAHex = "9501fe044cc349a8010400b70ca0010e98c090008d45d1ee8f9113bd5861fd57b88bacb7c68658747663f1e1a3b5a98f32fda6472373c024b97359cd2efc88ff60f77751adfbf6af5e615e6a1408cfad8bf0cea30b0d5f53aa27ad59089ba9b15b7ebc2777a25d7b436144027e3bcd203909f147d0e332b240cf63d3395f5dfe0df0a6c04e8655af7eacdf0011010001fe0303024a252e7d475fd445607de39a265472aa74a9320ba2dac395faa687e9e0336aeb7e9a7397e511b5afd9dc84557c80ac0f3d4d7bfec5ae16f20d41c8c84a04552a33870b930420e230e179564f6d19bb153145e76c33ae993886c388832b0fa042ddda7f133924f3854481533e0ede31d51278c0519b29abc3bf53da673e13e3e1214b52413d179d7f66deee35cac8eacb060f78379d70ef4af8607e68131ff529439668fc39c9ce6dfef8a5ac234d234802cbfb749a26107db26406213ae5c06d4673253a3cbee1fcbae58d6ab77e38d6e2c0e7c6317c48e054edadb5a40d0d48acb44643d998139a8a66bb820be1f3f80185bc777d14b5954b60effe2448a036d565c6bc0b915fcea518acdd20ab07bc1529f561c58cd044f723109b93f6fd99f876ff891d64306b5d08f48bab59f38695e9109c4dec34013ba3153488ce070268381ba923ee1eb77125b36afcb4347ec3478c8f2735b06ef17351d872e577fa95d0c397c88c71b59629a36aec" + +// Generated by `gpg --export-secret-keys` followed by a manual extraction of +// the ElGamal subkey from the packets. +const privKeyElGamalHex = "9d0157044df9ee1a100400eb8e136a58ec39b582629cdadf830bc64e0a94ed8103ca8bb247b27b11b46d1d25297ef4bcc3071785ba0c0bedfe89eabc5287fcc0edf81ab5896c1c8e4b20d27d79813c7aede75320b33eaeeaa586edc00fd1036c10133e6ba0ff277245d0d59d04b2b3421b7244aca5f4a8d870c6f1c1fbff9e1c26699a860b9504f35ca1d700030503fd1ededd3b840795be6d9ccbe3c51ee42e2f39233c432b831ddd9c4e72b7025a819317e47bf94f9ee316d7273b05d5fcf2999c3a681f519b1234bbfa6d359b4752bd9c3f77d6b6456cde152464763414ca130f4e91d91041432f90620fec0e6d6b5116076c2985d5aeaae13be492b9b329efcaf7ee25120159a0a30cd976b42d7afe030302dae7eb80db744d4960c4df930d57e87fe81412eaace9f900e6c839817a614ddb75ba6603b9417c33ea7b6c93967dfa2bcff3fa3c74a5ce2c962db65b03aece14c96cbd0038fc" + +// pkcs1PrivKeyHex is a PKCS#1, RSA private key. +// Generated by `openssl genrsa 1024 | openssl rsa -outform DER | xxd -p` +const pkcs1PrivKeyHex = "3082025d02010002818100e98edfa1c3b35884a54d0b36a6a603b0290fa85e49e30fa23fc94fef9c6790bc4849928607aa48d809da326fb42a969d06ad756b98b9c1a90f5d4a2b6d0ac05953c97f4da3120164a21a679793ce181c906dc01d235cc085ddcdf6ea06c389b6ab8885dfd685959e693138856a68a7e5db263337ff82a088d583a897cf2d59e9020301000102818100b6d5c9eb70b02d5369b3ee5b520a14490b5bde8a317d36f7e4c74b7460141311d1e5067735f8f01d6f5908b2b96fbd881f7a1ab9a84d82753e39e19e2d36856be960d05ac9ef8e8782ea1b6d65aee28fdfe1d61451e8cff0adfe84322f12cf455028b581cf60eb9e0e140ba5d21aeba6c2634d7c65318b9a665fc01c3191ca21024100fa5e818da3705b0fa33278bb28d4b6f6050388af2d4b75ec9375dd91ccf2e7d7068086a8b82a8f6282e4fbbdb8a7f2622eb97295249d87acea7f5f816f54d347024100eecf9406d7dc49cdfb95ab1eff4064de84c7a30f64b2798936a0d2018ba9eb52e4b636f82e96c49cc63b80b675e91e40d1b2e4017d4b9adaf33ab3d9cf1c214f024100c173704ace742c082323066226a4655226819a85304c542b9dacbeacbf5d1881ee863485fcf6f59f3a604f9b42289282067447f2b13dfeed3eab7851fc81e0550240741fc41f3fc002b382eed8730e33c5d8de40256e4accee846667f536832f711ab1d4590e7db91a8a116ac5bff3be13d3f9243ff2e976662aa9b395d907f8e9c9024046a5696c9ef882363e06c9fa4e2f5b580906452befba03f4a99d0f873697ef1f851d2226ca7934b30b7c3e80cb634a67172bbbf4781735fe3e09263e2dd723e7" diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key.go new file mode 100644 index 0000000..ead2623 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/public_key.go @@ -0,0 +1,748 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rsa" + "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" + "encoding/binary" + "fmt" + "hash" + "io" + "math/big" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/elgamal" + "golang.org/x/crypto/openpgp/errors" +) + +var ( + // NIST curve P-256 + oidCurveP256 []byte = []byte{0x2A, 0x86, 0x48, 0xCE, 0x3D, 0x03, 0x01, 0x07} + // NIST curve P-384 + oidCurveP384 []byte = []byte{0x2B, 0x81, 0x04, 0x00, 0x22} + // NIST curve P-521 + oidCurveP521 []byte = []byte{0x2B, 0x81, 0x04, 0x00, 0x23} +) + +const maxOIDLength = 8 + +// ecdsaKey stores the algorithm-specific fields for ECDSA keys. +// as defined in RFC 6637, Section 9. +type ecdsaKey struct { + // oid contains the OID byte sequence identifying the elliptic curve used + oid []byte + // p contains the elliptic curve point that represents the public key + p parsedMPI +} + +// parseOID reads the OID for the curve as defined in RFC 6637, Section 9. +func parseOID(r io.Reader) (oid []byte, err error) { + buf := make([]byte, maxOIDLength) + if _, err = readFull(r, buf[:1]); err != nil { + return + } + oidLen := buf[0] + if int(oidLen) > len(buf) { + err = errors.UnsupportedError("invalid oid length: " + strconv.Itoa(int(oidLen))) + return + } + oid = buf[:oidLen] + _, err = readFull(r, oid) + return +} + +func (f *ecdsaKey) parse(r io.Reader) (err error) { + if f.oid, err = parseOID(r); err != nil { + return err + } + f.p.bytes, f.p.bitLength, err = readMPI(r) + return +} + +func (f *ecdsaKey) serialize(w io.Writer) (err error) { + buf := make([]byte, maxOIDLength+1) + buf[0] = byte(len(f.oid)) + copy(buf[1:], f.oid) + if _, err = w.Write(buf[:len(f.oid)+1]); err != nil { + return + } + return writeMPIs(w, f.p) +} + +func (f *ecdsaKey) newECDSA() (*ecdsa.PublicKey, error) { + var c elliptic.Curve + if bytes.Equal(f.oid, oidCurveP256) { + c = elliptic.P256() + } else if bytes.Equal(f.oid, oidCurveP384) { + c = elliptic.P384() + } else if bytes.Equal(f.oid, oidCurveP521) { + c = elliptic.P521() + } else { + return nil, errors.UnsupportedError(fmt.Sprintf("unsupported oid: %x", f.oid)) + } + x, y := elliptic.Unmarshal(c, f.p.bytes) + if x == nil { + return nil, errors.UnsupportedError("failed to parse EC point") + } + return &ecdsa.PublicKey{Curve: c, X: x, Y: y}, nil +} + +func (f *ecdsaKey) byteLen() int { + return 1 + len(f.oid) + 2 + len(f.p.bytes) +} + +type kdfHashFunction byte +type kdfAlgorithm byte + +// ecdhKdf stores key derivation function parameters +// used for ECDH encryption. See RFC 6637, Section 9. +type ecdhKdf struct { + KdfHash kdfHashFunction + KdfAlgo kdfAlgorithm +} + +func (f *ecdhKdf) parse(r io.Reader) (err error) { + buf := make([]byte, 1) + if _, err = readFull(r, buf); err != nil { + return + } + kdfLen := int(buf[0]) + if kdfLen < 3 { + return errors.UnsupportedError("Unsupported ECDH KDF length: " + strconv.Itoa(kdfLen)) + } + buf = make([]byte, kdfLen) + if _, err = readFull(r, buf); err != nil { + return + } + reserved := int(buf[0]) + f.KdfHash = kdfHashFunction(buf[1]) + f.KdfAlgo = kdfAlgorithm(buf[2]) + if reserved != 0x01 { + return errors.UnsupportedError("Unsupported KDF reserved field: " + strconv.Itoa(reserved)) + } + return +} + +func (f *ecdhKdf) serialize(w io.Writer) (err error) { + buf := make([]byte, 4) + // See RFC 6637, Section 9, Algorithm-Specific Fields for ECDH keys. + buf[0] = byte(0x03) // Length of the following fields + buf[1] = byte(0x01) // Reserved for future extensions, must be 1 for now + buf[2] = byte(f.KdfHash) + buf[3] = byte(f.KdfAlgo) + _, err = w.Write(buf[:]) + return +} + +func (f *ecdhKdf) byteLen() int { + return 4 +} + +// PublicKey represents an OpenPGP public key. See RFC 4880, section 5.5.2. +type PublicKey struct { + CreationTime time.Time + PubKeyAlgo PublicKeyAlgorithm + PublicKey interface{} // *rsa.PublicKey, *dsa.PublicKey or *ecdsa.PublicKey + Fingerprint [20]byte + KeyId uint64 + IsSubkey bool + + n, e, p, q, g, y parsedMPI + + // RFC 6637 fields + ec *ecdsaKey + ecdh *ecdhKdf +} + +// signingKey provides a convenient abstraction over signature verification +// for v3 and v4 public keys. +type signingKey interface { + SerializeSignaturePrefix(io.Writer) + serializeWithoutHeaders(io.Writer) error +} + +func fromBig(n *big.Int) parsedMPI { + return parsedMPI{ + bytes: n.Bytes(), + bitLength: uint16(n.BitLen()), + } +} + +// NewRSAPublicKey returns a PublicKey that wraps the given rsa.PublicKey. +func NewRSAPublicKey(creationTime time.Time, pub *rsa.PublicKey) *PublicKey { + pk := &PublicKey{ + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoRSA, + PublicKey: pub, + n: fromBig(pub.N), + e: fromBig(big.NewInt(int64(pub.E))), + } + + pk.setFingerPrintAndKeyId() + return pk +} + +// NewDSAPublicKey returns a PublicKey that wraps the given dsa.PublicKey. +func NewDSAPublicKey(creationTime time.Time, pub *dsa.PublicKey) *PublicKey { + pk := &PublicKey{ + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoDSA, + PublicKey: pub, + p: fromBig(pub.P), + q: fromBig(pub.Q), + g: fromBig(pub.G), + y: fromBig(pub.Y), + } + + pk.setFingerPrintAndKeyId() + return pk +} + +// NewElGamalPublicKey returns a PublicKey that wraps the given elgamal.PublicKey. +func NewElGamalPublicKey(creationTime time.Time, pub *elgamal.PublicKey) *PublicKey { + pk := &PublicKey{ + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoElGamal, + PublicKey: pub, + p: fromBig(pub.P), + g: fromBig(pub.G), + y: fromBig(pub.Y), + } + + pk.setFingerPrintAndKeyId() + return pk +} + +func NewECDSAPublicKey(creationTime time.Time, pub *ecdsa.PublicKey) *PublicKey { + pk := &PublicKey{ + CreationTime: creationTime, + PubKeyAlgo: PubKeyAlgoECDSA, + PublicKey: pub, + ec: new(ecdsaKey), + } + + switch pub.Curve { + case elliptic.P256(): + pk.ec.oid = oidCurveP256 + case elliptic.P384(): + pk.ec.oid = oidCurveP384 + case elliptic.P521(): + pk.ec.oid = oidCurveP521 + default: + panic("unknown elliptic curve") + } + + pk.ec.p.bytes = elliptic.Marshal(pub.Curve, pub.X, pub.Y) + pk.ec.p.bitLength = uint16(8 * len(pk.ec.p.bytes)) + + pk.setFingerPrintAndKeyId() + return pk +} + +func (pk *PublicKey) parse(r io.Reader) (err error) { + // RFC 4880, section 5.5.2 + var buf [6]byte + _, err = readFull(r, buf[:]) + if err != nil { + return + } + if buf[0] != 4 { + return errors.UnsupportedError("public key version") + } + pk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0) + pk.PubKeyAlgo = PublicKeyAlgorithm(buf[5]) + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + err = pk.parseRSA(r) + case PubKeyAlgoDSA: + err = pk.parseDSA(r) + case PubKeyAlgoElGamal: + err = pk.parseElGamal(r) + case PubKeyAlgoECDSA: + pk.ec = new(ecdsaKey) + if err = pk.ec.parse(r); err != nil { + return err + } + pk.PublicKey, err = pk.ec.newECDSA() + case PubKeyAlgoECDH: + pk.ec = new(ecdsaKey) + if err = pk.ec.parse(r); err != nil { + return + } + pk.ecdh = new(ecdhKdf) + if err = pk.ecdh.parse(r); err != nil { + return + } + // The ECDH key is stored in an ecdsa.PublicKey for convenience. + pk.PublicKey, err = pk.ec.newECDSA() + default: + err = errors.UnsupportedError("public key type: " + strconv.Itoa(int(pk.PubKeyAlgo))) + } + if err != nil { + return + } + + pk.setFingerPrintAndKeyId() + return +} + +func (pk *PublicKey) setFingerPrintAndKeyId() { + // RFC 4880, section 12.2 + fingerPrint := sha1.New() + pk.SerializeSignaturePrefix(fingerPrint) + pk.serializeWithoutHeaders(fingerPrint) + copy(pk.Fingerprint[:], fingerPrint.Sum(nil)) + pk.KeyId = binary.BigEndian.Uint64(pk.Fingerprint[12:20]) +} + +// parseRSA parses RSA public key material from the given Reader. See RFC 4880, +// section 5.5.2. +func (pk *PublicKey) parseRSA(r io.Reader) (err error) { + pk.n.bytes, pk.n.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.e.bytes, pk.e.bitLength, err = readMPI(r) + if err != nil { + return + } + + if len(pk.e.bytes) > 3 { + err = errors.UnsupportedError("large public exponent") + return + } + rsa := &rsa.PublicKey{ + N: new(big.Int).SetBytes(pk.n.bytes), + E: 0, + } + for i := 0; i < len(pk.e.bytes); i++ { + rsa.E <<= 8 + rsa.E |= int(pk.e.bytes[i]) + } + pk.PublicKey = rsa + return +} + +// parseDSA parses DSA public key material from the given Reader. See RFC 4880, +// section 5.5.2. +func (pk *PublicKey) parseDSA(r io.Reader) (err error) { + pk.p.bytes, pk.p.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.q.bytes, pk.q.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.g.bytes, pk.g.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.y.bytes, pk.y.bitLength, err = readMPI(r) + if err != nil { + return + } + + dsa := new(dsa.PublicKey) + dsa.P = new(big.Int).SetBytes(pk.p.bytes) + dsa.Q = new(big.Int).SetBytes(pk.q.bytes) + dsa.G = new(big.Int).SetBytes(pk.g.bytes) + dsa.Y = new(big.Int).SetBytes(pk.y.bytes) + pk.PublicKey = dsa + return +} + +// parseElGamal parses ElGamal public key material from the given Reader. See +// RFC 4880, section 5.5.2. +func (pk *PublicKey) parseElGamal(r io.Reader) (err error) { + pk.p.bytes, pk.p.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.g.bytes, pk.g.bitLength, err = readMPI(r) + if err != nil { + return + } + pk.y.bytes, pk.y.bitLength, err = readMPI(r) + if err != nil { + return + } + + elgamal := new(elgamal.PublicKey) + elgamal.P = new(big.Int).SetBytes(pk.p.bytes) + elgamal.G = new(big.Int).SetBytes(pk.g.bytes) + elgamal.Y = new(big.Int).SetBytes(pk.y.bytes) + pk.PublicKey = elgamal + return +} + +// SerializeSignaturePrefix writes the prefix for this public key to the given Writer. +// The prefix is used when calculating a signature over this public key. See +// RFC 4880, section 5.2.4. +func (pk *PublicKey) SerializeSignaturePrefix(h io.Writer) { + var pLength uint16 + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + pLength += 2 + uint16(len(pk.n.bytes)) + pLength += 2 + uint16(len(pk.e.bytes)) + case PubKeyAlgoDSA: + pLength += 2 + uint16(len(pk.p.bytes)) + pLength += 2 + uint16(len(pk.q.bytes)) + pLength += 2 + uint16(len(pk.g.bytes)) + pLength += 2 + uint16(len(pk.y.bytes)) + case PubKeyAlgoElGamal: + pLength += 2 + uint16(len(pk.p.bytes)) + pLength += 2 + uint16(len(pk.g.bytes)) + pLength += 2 + uint16(len(pk.y.bytes)) + case PubKeyAlgoECDSA: + pLength += uint16(pk.ec.byteLen()) + case PubKeyAlgoECDH: + pLength += uint16(pk.ec.byteLen()) + pLength += uint16(pk.ecdh.byteLen()) + default: + panic("unknown public key algorithm") + } + pLength += 6 + h.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)}) + return +} + +func (pk *PublicKey) Serialize(w io.Writer) (err error) { + length := 6 // 6 byte header + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + length += 2 + len(pk.n.bytes) + length += 2 + len(pk.e.bytes) + case PubKeyAlgoDSA: + length += 2 + len(pk.p.bytes) + length += 2 + len(pk.q.bytes) + length += 2 + len(pk.g.bytes) + length += 2 + len(pk.y.bytes) + case PubKeyAlgoElGamal: + length += 2 + len(pk.p.bytes) + length += 2 + len(pk.g.bytes) + length += 2 + len(pk.y.bytes) + case PubKeyAlgoECDSA: + length += pk.ec.byteLen() + case PubKeyAlgoECDH: + length += pk.ec.byteLen() + length += pk.ecdh.byteLen() + default: + panic("unknown public key algorithm") + } + + packetType := packetTypePublicKey + if pk.IsSubkey { + packetType = packetTypePublicSubkey + } + err = serializeHeader(w, packetType, length) + if err != nil { + return + } + return pk.serializeWithoutHeaders(w) +} + +// serializeWithoutHeaders marshals the PublicKey to w in the form of an +// OpenPGP public key packet, not including the packet header. +func (pk *PublicKey) serializeWithoutHeaders(w io.Writer) (err error) { + var buf [6]byte + buf[0] = 4 + t := uint32(pk.CreationTime.Unix()) + buf[1] = byte(t >> 24) + buf[2] = byte(t >> 16) + buf[3] = byte(t >> 8) + buf[4] = byte(t) + buf[5] = byte(pk.PubKeyAlgo) + + _, err = w.Write(buf[:]) + if err != nil { + return + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + return writeMPIs(w, pk.n, pk.e) + case PubKeyAlgoDSA: + return writeMPIs(w, pk.p, pk.q, pk.g, pk.y) + case PubKeyAlgoElGamal: + return writeMPIs(w, pk.p, pk.g, pk.y) + case PubKeyAlgoECDSA: + return pk.ec.serialize(w) + case PubKeyAlgoECDH: + if err = pk.ec.serialize(w); err != nil { + return + } + return pk.ecdh.serialize(w) + } + return errors.InvalidArgumentError("bad public-key algorithm") +} + +// CanSign returns true iff this public key can generate signatures +func (pk *PublicKey) CanSign() bool { + return pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly && pk.PubKeyAlgo != PubKeyAlgoElGamal +} + +// VerifySignature returns nil iff sig is a valid signature, made by this +// public key, of the data hashed into signed. signed is mutated by this call. +func (pk *PublicKey) VerifySignature(signed hash.Hash, sig *Signature) (err error) { + if !pk.CanSign() { + return errors.InvalidArgumentError("public key cannot generate signatures") + } + + signed.Write(sig.HashSuffix) + hashBytes := signed.Sum(nil) + + if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { + return errors.SignatureError("hash tag doesn't match") + } + + if pk.PubKeyAlgo != sig.PubKeyAlgo { + return errors.InvalidArgumentError("public key and signature use different algorithms") + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + rsaPublicKey, _ := pk.PublicKey.(*rsa.PublicKey) + err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes) + if err != nil { + return errors.SignatureError("RSA verification failure") + } + return nil + case PubKeyAlgoDSA: + dsaPublicKey, _ := pk.PublicKey.(*dsa.PublicKey) + // Need to truncate hashBytes to match FIPS 186-3 section 4.6. + subgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8 + if len(hashBytes) > subgroupSize { + hashBytes = hashBytes[:subgroupSize] + } + if !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.bytes), new(big.Int).SetBytes(sig.DSASigS.bytes)) { + return errors.SignatureError("DSA verification failure") + } + return nil + case PubKeyAlgoECDSA: + ecdsaPublicKey := pk.PublicKey.(*ecdsa.PublicKey) + if !ecdsa.Verify(ecdsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.ECDSASigR.bytes), new(big.Int).SetBytes(sig.ECDSASigS.bytes)) { + return errors.SignatureError("ECDSA verification failure") + } + return nil + default: + return errors.SignatureError("Unsupported public key algorithm used in signature") + } +} + +// VerifySignatureV3 returns nil iff sig is a valid signature, made by this +// public key, of the data hashed into signed. signed is mutated by this call. +func (pk *PublicKey) VerifySignatureV3(signed hash.Hash, sig *SignatureV3) (err error) { + if !pk.CanSign() { + return errors.InvalidArgumentError("public key cannot generate signatures") + } + + suffix := make([]byte, 5) + suffix[0] = byte(sig.SigType) + binary.BigEndian.PutUint32(suffix[1:], uint32(sig.CreationTime.Unix())) + signed.Write(suffix) + hashBytes := signed.Sum(nil) + + if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { + return errors.SignatureError("hash tag doesn't match") + } + + if pk.PubKeyAlgo != sig.PubKeyAlgo { + return errors.InvalidArgumentError("public key and signature use different algorithms") + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + rsaPublicKey := pk.PublicKey.(*rsa.PublicKey) + if err = rsa.VerifyPKCS1v15(rsaPublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes); err != nil { + return errors.SignatureError("RSA verification failure") + } + return + case PubKeyAlgoDSA: + dsaPublicKey := pk.PublicKey.(*dsa.PublicKey) + // Need to truncate hashBytes to match FIPS 186-3 section 4.6. + subgroupSize := (dsaPublicKey.Q.BitLen() + 7) / 8 + if len(hashBytes) > subgroupSize { + hashBytes = hashBytes[:subgroupSize] + } + if !dsa.Verify(dsaPublicKey, hashBytes, new(big.Int).SetBytes(sig.DSASigR.bytes), new(big.Int).SetBytes(sig.DSASigS.bytes)) { + return errors.SignatureError("DSA verification failure") + } + return nil + default: + panic("shouldn't happen") + } +} + +// keySignatureHash returns a Hash of the message that needs to be signed for +// pk to assert a subkey relationship to signed. +func keySignatureHash(pk, signed signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { + if !hashFunc.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hashFunc.New() + + // RFC 4880, section 5.2.4 + pk.SerializeSignaturePrefix(h) + pk.serializeWithoutHeaders(h) + signed.SerializeSignaturePrefix(h) + signed.serializeWithoutHeaders(h) + return +} + +// VerifyKeySignature returns nil iff sig is a valid signature, made by this +// public key, of signed. +func (pk *PublicKey) VerifyKeySignature(signed *PublicKey, sig *Signature) error { + h, err := keySignatureHash(pk, signed, sig.Hash) + if err != nil { + return err + } + if err = pk.VerifySignature(h, sig); err != nil { + return err + } + + if sig.FlagSign { + // Signing subkeys must be cross-signed. See + // https://www.gnupg.org/faq/subkey-cross-certify.html. + if sig.EmbeddedSignature == nil { + return errors.StructuralError("signing subkey is missing cross-signature") + } + // Verify the cross-signature. This is calculated over the same + // data as the main signature, so we cannot just recursively + // call signed.VerifyKeySignature(...) + if h, err = keySignatureHash(pk, signed, sig.EmbeddedSignature.Hash); err != nil { + return errors.StructuralError("error while hashing for cross-signature: " + err.Error()) + } + if err := signed.VerifySignature(h, sig.EmbeddedSignature); err != nil { + return errors.StructuralError("error while verifying cross-signature: " + err.Error()) + } + } + + return nil +} + +func keyRevocationHash(pk signingKey, hashFunc crypto.Hash) (h hash.Hash, err error) { + if !hashFunc.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hashFunc.New() + + // RFC 4880, section 5.2.4 + pk.SerializeSignaturePrefix(h) + pk.serializeWithoutHeaders(h) + + return +} + +// VerifyRevocationSignature returns nil iff sig is a valid signature, made by this +// public key. +func (pk *PublicKey) VerifyRevocationSignature(sig *Signature) (err error) { + h, err := keyRevocationHash(pk, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignature(h, sig) +} + +// userIdSignatureHash returns a Hash of the message that needs to be signed +// to assert that pk is a valid key for id. +func userIdSignatureHash(id string, pk *PublicKey, hashFunc crypto.Hash) (h hash.Hash, err error) { + if !hashFunc.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hashFunc.New() + + // RFC 4880, section 5.2.4 + pk.SerializeSignaturePrefix(h) + pk.serializeWithoutHeaders(h) + + var buf [5]byte + buf[0] = 0xb4 + buf[1] = byte(len(id) >> 24) + buf[2] = byte(len(id) >> 16) + buf[3] = byte(len(id) >> 8) + buf[4] = byte(len(id)) + h.Write(buf[:]) + h.Write([]byte(id)) + + return +} + +// VerifyUserIdSignature returns nil iff sig is a valid signature, made by this +// public key, that id is the identity of pub. +func (pk *PublicKey) VerifyUserIdSignature(id string, pub *PublicKey, sig *Signature) (err error) { + h, err := userIdSignatureHash(id, pub, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignature(h, sig) +} + +// VerifyUserIdSignatureV3 returns nil iff sig is a valid signature, made by this +// public key, that id is the identity of pub. +func (pk *PublicKey) VerifyUserIdSignatureV3(id string, pub *PublicKey, sig *SignatureV3) (err error) { + h, err := userIdSignatureV3Hash(id, pub, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignatureV3(h, sig) +} + +// KeyIdString returns the public key's fingerprint in capital hex +// (e.g. "6C7EE1B8621CC013"). +func (pk *PublicKey) KeyIdString() string { + return fmt.Sprintf("%X", pk.Fingerprint[12:20]) +} + +// KeyIdShortString returns the short form of public key's fingerprint +// in capital hex, as shown by gpg --list-keys (e.g. "621CC013"). +func (pk *PublicKey) KeyIdShortString() string { + return fmt.Sprintf("%X", pk.Fingerprint[16:20]) +} + +// A parsedMPI is used to store the contents of a big integer, along with the +// bit length that was specified in the original input. This allows the MPI to +// be reserialized exactly. +type parsedMPI struct { + bytes []byte + bitLength uint16 +} + +// writeMPIs is a utility function for serializing several big integers to the +// given Writer. +func writeMPIs(w io.Writer, mpis ...parsedMPI) (err error) { + for _, mpi := range mpis { + err = writeMPI(w, mpi.bitLength, mpi.bytes) + if err != nil { + return + } + } + return +} + +// BitLength returns the bit length for the given public key. +func (pk *PublicKey) BitLength() (bitLength uint16, err error) { + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + bitLength = pk.n.bitLength + case PubKeyAlgoDSA: + bitLength = pk.p.bitLength + case PubKeyAlgoElGamal: + bitLength = pk.p.bitLength + default: + err = errors.InvalidArgumentError("bad public-key algorithm") + } + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key_test.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key_test.go new file mode 100644 index 0000000..7ad7d91 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/public_key_test.go @@ -0,0 +1,202 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "testing" + "time" +) + +var pubKeyTests = []struct { + hexData string + hexFingerprint string + creationTime time.Time + pubKeyAlgo PublicKeyAlgorithm + keyId uint64 + keyIdString string + keyIdShort string +}{ + {rsaPkDataHex, rsaFingerprintHex, time.Unix(0x4d3c5c10, 0), PubKeyAlgoRSA, 0xa34d7e18c20c31bb, "A34D7E18C20C31BB", "C20C31BB"}, + {dsaPkDataHex, dsaFingerprintHex, time.Unix(0x4d432f89, 0), PubKeyAlgoDSA, 0x8e8fbe54062f19ed, "8E8FBE54062F19ED", "062F19ED"}, + {ecdsaPkDataHex, ecdsaFingerprintHex, time.Unix(0x5071c294, 0), PubKeyAlgoECDSA, 0x43fe956c542ca00b, "43FE956C542CA00B", "542CA00B"}, +} + +func TestPublicKeyRead(t *testing.T) { + for i, test := range pubKeyTests { + packet, err := Read(readerFromHex(test.hexData)) + if err != nil { + t.Errorf("#%d: Read error: %s", i, err) + continue + } + pk, ok := packet.(*PublicKey) + if !ok { + t.Errorf("#%d: failed to parse, got: %#v", i, packet) + continue + } + if pk.PubKeyAlgo != test.pubKeyAlgo { + t.Errorf("#%d: bad public key algorithm got:%x want:%x", i, pk.PubKeyAlgo, test.pubKeyAlgo) + } + if !pk.CreationTime.Equal(test.creationTime) { + t.Errorf("#%d: bad creation time got:%v want:%v", i, pk.CreationTime, test.creationTime) + } + expectedFingerprint, _ := hex.DecodeString(test.hexFingerprint) + if !bytes.Equal(expectedFingerprint, pk.Fingerprint[:]) { + t.Errorf("#%d: bad fingerprint got:%x want:%x", i, pk.Fingerprint[:], expectedFingerprint) + } + if pk.KeyId != test.keyId { + t.Errorf("#%d: bad keyid got:%x want:%x", i, pk.KeyId, test.keyId) + } + if g, e := pk.KeyIdString(), test.keyIdString; g != e { + t.Errorf("#%d: bad KeyIdString got:%q want:%q", i, g, e) + } + if g, e := pk.KeyIdShortString(), test.keyIdShort; g != e { + t.Errorf("#%d: bad KeyIdShortString got:%q want:%q", i, g, e) + } + } +} + +func TestPublicKeySerialize(t *testing.T) { + for i, test := range pubKeyTests { + packet, err := Read(readerFromHex(test.hexData)) + if err != nil { + t.Errorf("#%d: Read error: %s", i, err) + continue + } + pk, ok := packet.(*PublicKey) + if !ok { + t.Errorf("#%d: failed to parse, got: %#v", i, packet) + continue + } + serializeBuf := bytes.NewBuffer(nil) + err = pk.Serialize(serializeBuf) + if err != nil { + t.Errorf("#%d: failed to serialize: %s", i, err) + continue + } + + packet, err = Read(serializeBuf) + if err != nil { + t.Errorf("#%d: Read error (from serialized data): %s", i, err) + continue + } + pk, ok = packet.(*PublicKey) + if !ok { + t.Errorf("#%d: failed to parse serialized data, got: %#v", i, packet) + continue + } + } +} + +func TestEcc384Serialize(t *testing.T) { + r := readerFromHex(ecc384PubHex) + var w bytes.Buffer + for i := 0; i < 2; i++ { + // Public key + p, err := Read(r) + if err != nil { + t.Error(err) + } + pubkey := p.(*PublicKey) + if !bytes.Equal(pubkey.ec.oid, []byte{0x2b, 0x81, 0x04, 0x00, 0x22}) { + t.Errorf("Unexpected pubkey OID: %x", pubkey.ec.oid) + } + if !bytes.Equal(pubkey.ec.p.bytes[:5], []byte{0x04, 0xf6, 0xb8, 0xc5, 0xac}) { + t.Errorf("Unexpected pubkey P[:5]: %x", pubkey.ec.p.bytes) + } + if pubkey.KeyId != 0x098033880F54719F { + t.Errorf("Unexpected pubkey ID: %x", pubkey.KeyId) + } + err = pubkey.Serialize(&w) + if err != nil { + t.Error(err) + } + // User ID + p, err = Read(r) + if err != nil { + t.Error(err) + } + uid := p.(*UserId) + if uid.Id != "ec_dsa_dh_384 " { + t.Error("Unexpected UID:", uid.Id) + } + err = uid.Serialize(&w) + if err != nil { + t.Error(err) + } + // User ID Sig + p, err = Read(r) + if err != nil { + t.Error(err) + } + uidSig := p.(*Signature) + err = pubkey.VerifyUserIdSignature(uid.Id, pubkey, uidSig) + if err != nil { + t.Error(err, ": UID") + } + err = uidSig.Serialize(&w) + if err != nil { + t.Error(err) + } + // Subkey + p, err = Read(r) + if err != nil { + t.Error(err) + } + subkey := p.(*PublicKey) + if !bytes.Equal(subkey.ec.oid, []byte{0x2b, 0x81, 0x04, 0x00, 0x22}) { + t.Errorf("Unexpected subkey OID: %x", subkey.ec.oid) + } + if !bytes.Equal(subkey.ec.p.bytes[:5], []byte{0x04, 0x2f, 0xaa, 0x84, 0x02}) { + t.Errorf("Unexpected subkey P[:5]: %x", subkey.ec.p.bytes) + } + if subkey.ecdh.KdfHash != 0x09 { + t.Error("Expected KDF hash function SHA384 (0x09), got", subkey.ecdh.KdfHash) + } + if subkey.ecdh.KdfAlgo != 0x09 { + t.Error("Expected KDF symmetric alg AES256 (0x09), got", subkey.ecdh.KdfAlgo) + } + if subkey.KeyId != 0xAA8B938F9A201946 { + t.Errorf("Unexpected subkey ID: %x", subkey.KeyId) + } + err = subkey.Serialize(&w) + if err != nil { + t.Error(err) + } + // Subkey Sig + p, err = Read(r) + if err != nil { + t.Error(err) + } + subkeySig := p.(*Signature) + err = pubkey.VerifyKeySignature(subkey, subkeySig) + if err != nil { + t.Error(err) + } + err = subkeySig.Serialize(&w) + if err != nil { + t.Error(err) + } + // Now read back what we've written again + r = bytes.NewBuffer(w.Bytes()) + w.Reset() + } +} + +const rsaFingerprintHex = "5fb74b1d03b1e3cb31bc2f8aa34d7e18c20c31bb" + +const rsaPkDataHex = "988d044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd0011010001" + +const dsaFingerprintHex = "eece4c094db002103714c63c8e8fbe54062f19ed" + +const dsaPkDataHex = "9901a2044d432f89110400cd581334f0d7a1e1bdc8b9d6d8c0baf68793632735d2bb0903224cbaa1dfbf35a60ee7a13b92643421e1eb41aa8d79bea19a115a677f6b8ba3c7818ce53a6c2a24a1608bd8b8d6e55c5090cbde09dd26e356267465ae25e69ec8bdd57c7bbb2623e4d73336f73a0a9098f7f16da2e25252130fd694c0e8070c55a812a423ae7f00a0ebf50e70c2f19c3520a551bd4b08d30f23530d3d03ff7d0bf4a53a64a09dc5e6e6e35854b7d70c882b0c60293401958b1bd9e40abec3ea05ba87cf64899299d4bd6aa7f459c201d3fbbd6c82004bdc5e8a9eb8082d12054cc90fa9d4ec251a843236a588bf49552441817436c4f43326966fe85447d4e6d0acf8fa1ef0f014730770603ad7634c3088dc52501c237328417c31c89ed70400b2f1a98b0bf42f11fefc430704bebbaa41d9f355600c3facee1e490f64208e0e094ea55e3a598a219a58500bf78ac677b670a14f4e47e9cf8eab4f368cc1ddcaa18cc59309d4cc62dd4f680e73e6cc3e1ce87a84d0925efbcb26c575c093fc42eecf45135fabf6403a25c2016e1774c0484e440a18319072c617cc97ac0a3bb0" + +const ecdsaFingerprintHex = "9892270b38b8980b05c8d56d43fe956c542ca00b" + +const ecdsaPkDataHex = "9893045071c29413052b8104002304230401f4867769cedfa52c325018896245443968e52e51d0c2df8d939949cb5b330f2921711fbee1c9b9dddb95d15cb0255e99badeddda7cc23d9ddcaacbc290969b9f24019375d61c2e4e3b36953a28d8b2bc95f78c3f1d592fb24499be348656a7b17e3963187b4361afe497bc5f9f81213f04069f8e1fb9e6a6290ae295ca1a92b894396cb4" + +// Source: https://sites.google.com/site/brainhub/pgpecckeys#TOC-ECC-NIST-P-384-key +const ecc384PubHex = `99006f044d53059213052b81040022030304f6b8c5aced5b84ef9f4a209db2e4a9dfb70d28cb8c10ecd57674a9fa5a67389942b62d5e51367df4c7bfd3f8e500feecf07ed265a621a8ebbbe53e947ec78c677eba143bd1533c2b350e1c29f82313e1e1108eba063be1e64b10e6950e799c2db42465635f6473615f64685f333834203c6f70656e70677040627261696e6875622e6f72673e8900cb04101309005305024d530592301480000000002000077072656665727265642d656d61696c2d656e636f64696e67407067702e636f6d7067706d696d65040b090807021901051b03000000021602051e010000000415090a08000a0910098033880f54719fca2b0180aa37350968bd5f115afd8ce7bc7b103822152dbff06d0afcda835329510905b98cb469ba208faab87c7412b799e7b633017f58364ea480e8a1a3f253a0c5f22c446e8be9a9fce6210136ee30811abbd49139de28b5bdf8dc36d06ae748579e9ff503b90073044d53059212052b810400220303042faa84024a20b6735c4897efa5bfb41bf85b7eefeab5ca0cb9ffc8ea04a46acb25534a577694f9e25340a4ab5223a9dd1eda530c8aa2e6718db10d7e672558c7736fe09369ea5739a2a3554bf16d41faa50562f11c6d39bbd5dffb6b9a9ec9180301090989008404181309000c05024d530592051b0c000000000a0910098033880f54719f80970180eee7a6d8fcee41ee4f9289df17f9bcf9d955dca25c583b94336f3a2b2d4986dc5cf417b8d2dc86f741a9e1a6d236c0e3017d1c76575458a0cfb93ae8a2b274fcc65ceecd7a91eec83656ba13219969f06945b48c56bd04152c3a0553c5f2f4bd1267` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go new file mode 100644 index 0000000..5daf7b6 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3.go @@ -0,0 +1,279 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "crypto/md5" + "crypto/rsa" + "encoding/binary" + "fmt" + "hash" + "io" + "math/big" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/errors" +) + +// PublicKeyV3 represents older, version 3 public keys. These keys are less secure and +// should not be used for signing or encrypting. They are supported here only for +// parsing version 3 key material and validating signatures. +// See RFC 4880, section 5.5.2. +type PublicKeyV3 struct { + CreationTime time.Time + DaysToExpire uint16 + PubKeyAlgo PublicKeyAlgorithm + PublicKey *rsa.PublicKey + Fingerprint [16]byte + KeyId uint64 + IsSubkey bool + + n, e parsedMPI +} + +// newRSAPublicKeyV3 returns a PublicKey that wraps the given rsa.PublicKey. +// Included here for testing purposes only. RFC 4880, section 5.5.2: +// "an implementation MUST NOT generate a V3 key, but MAY accept it." +func newRSAPublicKeyV3(creationTime time.Time, pub *rsa.PublicKey) *PublicKeyV3 { + pk := &PublicKeyV3{ + CreationTime: creationTime, + PublicKey: pub, + n: fromBig(pub.N), + e: fromBig(big.NewInt(int64(pub.E))), + } + + pk.setFingerPrintAndKeyId() + return pk +} + +func (pk *PublicKeyV3) parse(r io.Reader) (err error) { + // RFC 4880, section 5.5.2 + var buf [8]byte + if _, err = readFull(r, buf[:]); err != nil { + return + } + if buf[0] < 2 || buf[0] > 3 { + return errors.UnsupportedError("public key version") + } + pk.CreationTime = time.Unix(int64(uint32(buf[1])<<24|uint32(buf[2])<<16|uint32(buf[3])<<8|uint32(buf[4])), 0) + pk.DaysToExpire = binary.BigEndian.Uint16(buf[5:7]) + pk.PubKeyAlgo = PublicKeyAlgorithm(buf[7]) + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + err = pk.parseRSA(r) + default: + err = errors.UnsupportedError("public key type: " + strconv.Itoa(int(pk.PubKeyAlgo))) + } + if err != nil { + return + } + + pk.setFingerPrintAndKeyId() + return +} + +func (pk *PublicKeyV3) setFingerPrintAndKeyId() { + // RFC 4880, section 12.2 + fingerPrint := md5.New() + fingerPrint.Write(pk.n.bytes) + fingerPrint.Write(pk.e.bytes) + fingerPrint.Sum(pk.Fingerprint[:0]) + pk.KeyId = binary.BigEndian.Uint64(pk.n.bytes[len(pk.n.bytes)-8:]) +} + +// parseRSA parses RSA public key material from the given Reader. See RFC 4880, +// section 5.5.2. +func (pk *PublicKeyV3) parseRSA(r io.Reader) (err error) { + if pk.n.bytes, pk.n.bitLength, err = readMPI(r); err != nil { + return + } + if pk.e.bytes, pk.e.bitLength, err = readMPI(r); err != nil { + return + } + + // RFC 4880 Section 12.2 requires the low 8 bytes of the + // modulus to form the key id. + if len(pk.n.bytes) < 8 { + return errors.StructuralError("v3 public key modulus is too short") + } + if len(pk.e.bytes) > 3 { + err = errors.UnsupportedError("large public exponent") + return + } + rsa := &rsa.PublicKey{N: new(big.Int).SetBytes(pk.n.bytes)} + for i := 0; i < len(pk.e.bytes); i++ { + rsa.E <<= 8 + rsa.E |= int(pk.e.bytes[i]) + } + pk.PublicKey = rsa + return +} + +// SerializeSignaturePrefix writes the prefix for this public key to the given Writer. +// The prefix is used when calculating a signature over this public key. See +// RFC 4880, section 5.2.4. +func (pk *PublicKeyV3) SerializeSignaturePrefix(w io.Writer) { + var pLength uint16 + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + pLength += 2 + uint16(len(pk.n.bytes)) + pLength += 2 + uint16(len(pk.e.bytes)) + default: + panic("unknown public key algorithm") + } + pLength += 6 + w.Write([]byte{0x99, byte(pLength >> 8), byte(pLength)}) + return +} + +func (pk *PublicKeyV3) Serialize(w io.Writer) (err error) { + length := 8 // 8 byte header + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + length += 2 + len(pk.n.bytes) + length += 2 + len(pk.e.bytes) + default: + panic("unknown public key algorithm") + } + + packetType := packetTypePublicKey + if pk.IsSubkey { + packetType = packetTypePublicSubkey + } + if err = serializeHeader(w, packetType, length); err != nil { + return + } + return pk.serializeWithoutHeaders(w) +} + +// serializeWithoutHeaders marshals the PublicKey to w in the form of an +// OpenPGP public key packet, not including the packet header. +func (pk *PublicKeyV3) serializeWithoutHeaders(w io.Writer) (err error) { + var buf [8]byte + // Version 3 + buf[0] = 3 + // Creation time + t := uint32(pk.CreationTime.Unix()) + buf[1] = byte(t >> 24) + buf[2] = byte(t >> 16) + buf[3] = byte(t >> 8) + buf[4] = byte(t) + // Days to expire + buf[5] = byte(pk.DaysToExpire >> 8) + buf[6] = byte(pk.DaysToExpire) + // Public key algorithm + buf[7] = byte(pk.PubKeyAlgo) + + if _, err = w.Write(buf[:]); err != nil { + return + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + return writeMPIs(w, pk.n, pk.e) + } + return errors.InvalidArgumentError("bad public-key algorithm") +} + +// CanSign returns true iff this public key can generate signatures +func (pk *PublicKeyV3) CanSign() bool { + return pk.PubKeyAlgo != PubKeyAlgoRSAEncryptOnly +} + +// VerifySignatureV3 returns nil iff sig is a valid signature, made by this +// public key, of the data hashed into signed. signed is mutated by this call. +func (pk *PublicKeyV3) VerifySignatureV3(signed hash.Hash, sig *SignatureV3) (err error) { + if !pk.CanSign() { + return errors.InvalidArgumentError("public key cannot generate signatures") + } + + suffix := make([]byte, 5) + suffix[0] = byte(sig.SigType) + binary.BigEndian.PutUint32(suffix[1:], uint32(sig.CreationTime.Unix())) + signed.Write(suffix) + hashBytes := signed.Sum(nil) + + if hashBytes[0] != sig.HashTag[0] || hashBytes[1] != sig.HashTag[1] { + return errors.SignatureError("hash tag doesn't match") + } + + if pk.PubKeyAlgo != sig.PubKeyAlgo { + return errors.InvalidArgumentError("public key and signature use different algorithms") + } + + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + if err = rsa.VerifyPKCS1v15(pk.PublicKey, sig.Hash, hashBytes, sig.RSASignature.bytes); err != nil { + return errors.SignatureError("RSA verification failure") + } + return + default: + // V3 public keys only support RSA. + panic("shouldn't happen") + } +} + +// VerifyUserIdSignatureV3 returns nil iff sig is a valid signature, made by this +// public key, that id is the identity of pub. +func (pk *PublicKeyV3) VerifyUserIdSignatureV3(id string, pub *PublicKeyV3, sig *SignatureV3) (err error) { + h, err := userIdSignatureV3Hash(id, pk, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignatureV3(h, sig) +} + +// VerifyKeySignatureV3 returns nil iff sig is a valid signature, made by this +// public key, of signed. +func (pk *PublicKeyV3) VerifyKeySignatureV3(signed *PublicKeyV3, sig *SignatureV3) (err error) { + h, err := keySignatureHash(pk, signed, sig.Hash) + if err != nil { + return err + } + return pk.VerifySignatureV3(h, sig) +} + +// userIdSignatureV3Hash returns a Hash of the message that needs to be signed +// to assert that pk is a valid key for id. +func userIdSignatureV3Hash(id string, pk signingKey, hfn crypto.Hash) (h hash.Hash, err error) { + if !hfn.Available() { + return nil, errors.UnsupportedError("hash function") + } + h = hfn.New() + + // RFC 4880, section 5.2.4 + pk.SerializeSignaturePrefix(h) + pk.serializeWithoutHeaders(h) + + h.Write([]byte(id)) + + return +} + +// KeyIdString returns the public key's fingerprint in capital hex +// (e.g. "6C7EE1B8621CC013"). +func (pk *PublicKeyV3) KeyIdString() string { + return fmt.Sprintf("%X", pk.KeyId) +} + +// KeyIdShortString returns the short form of public key's fingerprint +// in capital hex, as shown by gpg --list-keys (e.g. "621CC013"). +func (pk *PublicKeyV3) KeyIdShortString() string { + return fmt.Sprintf("%X", pk.KeyId&0xFFFFFFFF) +} + +// BitLength returns the bit length for the given public key. +func (pk *PublicKeyV3) BitLength() (bitLength uint16, err error) { + switch pk.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSAEncryptOnly, PubKeyAlgoRSASignOnly: + bitLength = pk.n.bitLength + default: + err = errors.InvalidArgumentError("bad public-key algorithm") + } + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3_test.go b/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3_test.go new file mode 100644 index 0000000..e064059 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/public_key_v3_test.go @@ -0,0 +1,82 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "testing" + "time" +) + +var pubKeyV3Test = struct { + hexFingerprint string + creationTime time.Time + pubKeyAlgo PublicKeyAlgorithm + keyId uint64 + keyIdString string + keyIdShort string +}{ + "103BECF5BD1E837C89D19E98487767F7", + time.Unix(779753634, 0), + PubKeyAlgoRSA, + 0xDE0F188A5DA5E3C9, + "DE0F188A5DA5E3C9", + "5DA5E3C9"} + +func TestPublicKeyV3Read(t *testing.T) { + i, test := 0, pubKeyV3Test + packet, err := Read(v3KeyReader(t)) + if err != nil { + t.Fatalf("#%d: Read error: %s", i, err) + } + pk, ok := packet.(*PublicKeyV3) + if !ok { + t.Fatalf("#%d: failed to parse, got: %#v", i, packet) + } + if pk.PubKeyAlgo != test.pubKeyAlgo { + t.Errorf("#%d: bad public key algorithm got:%x want:%x", i, pk.PubKeyAlgo, test.pubKeyAlgo) + } + if !pk.CreationTime.Equal(test.creationTime) { + t.Errorf("#%d: bad creation time got:%v want:%v", i, pk.CreationTime, test.creationTime) + } + expectedFingerprint, _ := hex.DecodeString(test.hexFingerprint) + if !bytes.Equal(expectedFingerprint, pk.Fingerprint[:]) { + t.Errorf("#%d: bad fingerprint got:%x want:%x", i, pk.Fingerprint[:], expectedFingerprint) + } + if pk.KeyId != test.keyId { + t.Errorf("#%d: bad keyid got:%x want:%x", i, pk.KeyId, test.keyId) + } + if g, e := pk.KeyIdString(), test.keyIdString; g != e { + t.Errorf("#%d: bad KeyIdString got:%q want:%q", i, g, e) + } + if g, e := pk.KeyIdShortString(), test.keyIdShort; g != e { + t.Errorf("#%d: bad KeyIdShortString got:%q want:%q", i, g, e) + } +} + +func TestPublicKeyV3Serialize(t *testing.T) { + //for i, test := range pubKeyV3Tests { + i := 0 + packet, err := Read(v3KeyReader(t)) + if err != nil { + t.Fatalf("#%d: Read error: %s", i, err) + } + pk, ok := packet.(*PublicKeyV3) + if !ok { + t.Fatalf("#%d: failed to parse, got: %#v", i, packet) + } + var serializeBuf bytes.Buffer + if err = pk.Serialize(&serializeBuf); err != nil { + t.Fatalf("#%d: failed to serialize: %s", i, err) + } + + if packet, err = Read(bytes.NewBuffer(serializeBuf.Bytes())); err != nil { + t.Fatalf("#%d: Read error (from serialized data): %s", i, err) + } + if pk, ok = packet.(*PublicKeyV3); !ok { + t.Fatalf("#%d: failed to parse serialized data, got: %#v", i, packet) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/reader.go b/vendor/golang.org/x/crypto/openpgp/packet/reader.go new file mode 100644 index 0000000..34bc7c6 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/reader.go @@ -0,0 +1,76 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "golang.org/x/crypto/openpgp/errors" + "io" +) + +// Reader reads packets from an io.Reader and allows packets to be 'unread' so +// that they result from the next call to Next. +type Reader struct { + q []Packet + readers []io.Reader +} + +// New io.Readers are pushed when a compressed or encrypted packet is processed +// and recursively treated as a new source of packets. However, a carefully +// crafted packet can trigger an infinite recursive sequence of packets. See +// http://mumble.net/~campbell/misc/pgp-quine +// https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4402 +// This constant limits the number of recursive packets that may be pushed. +const maxReaders = 32 + +// Next returns the most recently unread Packet, or reads another packet from +// the top-most io.Reader. Unknown packet types are skipped. +func (r *Reader) Next() (p Packet, err error) { + if len(r.q) > 0 { + p = r.q[len(r.q)-1] + r.q = r.q[:len(r.q)-1] + return + } + + for len(r.readers) > 0 { + p, err = Read(r.readers[len(r.readers)-1]) + if err == nil { + return + } + if err == io.EOF { + r.readers = r.readers[:len(r.readers)-1] + continue + } + if _, ok := err.(errors.UnknownPacketTypeError); !ok { + return nil, err + } + } + + return nil, io.EOF +} + +// Push causes the Reader to start reading from a new io.Reader. When an EOF +// error is seen from the new io.Reader, it is popped and the Reader continues +// to read from the next most recent io.Reader. Push returns a StructuralError +// if pushing the reader would exceed the maximum recursion level, otherwise it +// returns nil. +func (r *Reader) Push(reader io.Reader) (err error) { + if len(r.readers) >= maxReaders { + return errors.StructuralError("too many layers of packets") + } + r.readers = append(r.readers, reader) + return nil +} + +// Unread causes the given Packet to be returned from the next call to Next. +func (r *Reader) Unread(p Packet) { + r.q = append(r.q, p) +} + +func NewReader(r io.Reader) *Reader { + return &Reader{ + q: nil, + readers: []io.Reader{r}, + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature.go b/vendor/golang.org/x/crypto/openpgp/packet/signature.go new file mode 100644 index 0000000..6ce0cbe --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/signature.go @@ -0,0 +1,731 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "encoding/asn1" + "encoding/binary" + "hash" + "io" + "math/big" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" +) + +const ( + // See RFC 4880, section 5.2.3.21 for details. + KeyFlagCertify = 1 << iota + KeyFlagSign + KeyFlagEncryptCommunications + KeyFlagEncryptStorage +) + +// Signature represents a signature. See RFC 4880, section 5.2. +type Signature struct { + SigType SignatureType + PubKeyAlgo PublicKeyAlgorithm + Hash crypto.Hash + + // HashSuffix is extra data that is hashed in after the signed data. + HashSuffix []byte + // HashTag contains the first two bytes of the hash for fast rejection + // of bad signed data. + HashTag [2]byte + CreationTime time.Time + + RSASignature parsedMPI + DSASigR, DSASigS parsedMPI + ECDSASigR, ECDSASigS parsedMPI + + // rawSubpackets contains the unparsed subpackets, in order. + rawSubpackets []outputSubpacket + + // The following are optional so are nil when not included in the + // signature. + + SigLifetimeSecs, KeyLifetimeSecs *uint32 + PreferredSymmetric, PreferredHash, PreferredCompression []uint8 + IssuerKeyId *uint64 + IsPrimaryId *bool + + // FlagsValid is set if any flags were given. See RFC 4880, section + // 5.2.3.21 for details. + FlagsValid bool + FlagCertify, FlagSign, FlagEncryptCommunications, FlagEncryptStorage bool + + // RevocationReason is set if this signature has been revoked. + // See RFC 4880, section 5.2.3.23 for details. + RevocationReason *uint8 + RevocationReasonText string + + // MDC is set if this signature has a feature packet that indicates + // support for MDC subpackets. + MDC bool + + // EmbeddedSignature, if non-nil, is a signature of the parent key, by + // this key. This prevents an attacker from claiming another's signing + // subkey as their own. + EmbeddedSignature *Signature + + outSubpackets []outputSubpacket +} + +func (sig *Signature) parse(r io.Reader) (err error) { + // RFC 4880, section 5.2.3 + var buf [5]byte + _, err = readFull(r, buf[:1]) + if err != nil { + return + } + if buf[0] != 4 { + err = errors.UnsupportedError("signature packet version " + strconv.Itoa(int(buf[0]))) + return + } + + _, err = readFull(r, buf[:5]) + if err != nil { + return + } + sig.SigType = SignatureType(buf[0]) + sig.PubKeyAlgo = PublicKeyAlgorithm(buf[1]) + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA, PubKeyAlgoECDSA: + default: + err = errors.UnsupportedError("public key algorithm " + strconv.Itoa(int(sig.PubKeyAlgo))) + return + } + + var ok bool + sig.Hash, ok = s2k.HashIdToHash(buf[2]) + if !ok { + return errors.UnsupportedError("hash function " + strconv.Itoa(int(buf[2]))) + } + + hashedSubpacketsLength := int(buf[3])<<8 | int(buf[4]) + l := 6 + hashedSubpacketsLength + sig.HashSuffix = make([]byte, l+6) + sig.HashSuffix[0] = 4 + copy(sig.HashSuffix[1:], buf[:5]) + hashedSubpackets := sig.HashSuffix[6:l] + _, err = readFull(r, hashedSubpackets) + if err != nil { + return + } + // See RFC 4880, section 5.2.4 + trailer := sig.HashSuffix[l:] + trailer[0] = 4 + trailer[1] = 0xff + trailer[2] = uint8(l >> 24) + trailer[3] = uint8(l >> 16) + trailer[4] = uint8(l >> 8) + trailer[5] = uint8(l) + + err = parseSignatureSubpackets(sig, hashedSubpackets, true) + if err != nil { + return + } + + _, err = readFull(r, buf[:2]) + if err != nil { + return + } + unhashedSubpacketsLength := int(buf[0])<<8 | int(buf[1]) + unhashedSubpackets := make([]byte, unhashedSubpacketsLength) + _, err = readFull(r, unhashedSubpackets) + if err != nil { + return + } + err = parseSignatureSubpackets(sig, unhashedSubpackets, false) + if err != nil { + return + } + + _, err = readFull(r, sig.HashTag[:2]) + if err != nil { + return + } + + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + sig.RSASignature.bytes, sig.RSASignature.bitLength, err = readMPI(r) + case PubKeyAlgoDSA: + sig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r) + if err == nil { + sig.DSASigS.bytes, sig.DSASigS.bitLength, err = readMPI(r) + } + case PubKeyAlgoECDSA: + sig.ECDSASigR.bytes, sig.ECDSASigR.bitLength, err = readMPI(r) + if err == nil { + sig.ECDSASigS.bytes, sig.ECDSASigS.bitLength, err = readMPI(r) + } + default: + panic("unreachable") + } + return +} + +// parseSignatureSubpackets parses subpackets of the main signature packet. See +// RFC 4880, section 5.2.3.1. +func parseSignatureSubpackets(sig *Signature, subpackets []byte, isHashed bool) (err error) { + for len(subpackets) > 0 { + subpackets, err = parseSignatureSubpacket(sig, subpackets, isHashed) + if err != nil { + return + } + } + + if sig.CreationTime.IsZero() { + err = errors.StructuralError("no creation time in signature") + } + + return +} + +type signatureSubpacketType uint8 + +const ( + creationTimeSubpacket signatureSubpacketType = 2 + signatureExpirationSubpacket signatureSubpacketType = 3 + keyExpirationSubpacket signatureSubpacketType = 9 + prefSymmetricAlgosSubpacket signatureSubpacketType = 11 + issuerSubpacket signatureSubpacketType = 16 + prefHashAlgosSubpacket signatureSubpacketType = 21 + prefCompressionSubpacket signatureSubpacketType = 22 + primaryUserIdSubpacket signatureSubpacketType = 25 + keyFlagsSubpacket signatureSubpacketType = 27 + reasonForRevocationSubpacket signatureSubpacketType = 29 + featuresSubpacket signatureSubpacketType = 30 + embeddedSignatureSubpacket signatureSubpacketType = 32 +) + +// parseSignatureSubpacket parses a single subpacket. len(subpacket) is >= 1. +func parseSignatureSubpacket(sig *Signature, subpacket []byte, isHashed bool) (rest []byte, err error) { + // RFC 4880, section 5.2.3.1 + var ( + length uint32 + packetType signatureSubpacketType + isCritical bool + ) + switch { + case subpacket[0] < 192: + length = uint32(subpacket[0]) + subpacket = subpacket[1:] + case subpacket[0] < 255: + if len(subpacket) < 2 { + goto Truncated + } + length = uint32(subpacket[0]-192)<<8 + uint32(subpacket[1]) + 192 + subpacket = subpacket[2:] + default: + if len(subpacket) < 5 { + goto Truncated + } + length = uint32(subpacket[1])<<24 | + uint32(subpacket[2])<<16 | + uint32(subpacket[3])<<8 | + uint32(subpacket[4]) + subpacket = subpacket[5:] + } + if length > uint32(len(subpacket)) { + goto Truncated + } + rest = subpacket[length:] + subpacket = subpacket[:length] + if len(subpacket) == 0 { + err = errors.StructuralError("zero length signature subpacket") + return + } + packetType = signatureSubpacketType(subpacket[0] & 0x7f) + isCritical = subpacket[0]&0x80 == 0x80 + subpacket = subpacket[1:] + sig.rawSubpackets = append(sig.rawSubpackets, outputSubpacket{isHashed, packetType, isCritical, subpacket}) + switch packetType { + case creationTimeSubpacket: + if !isHashed { + err = errors.StructuralError("signature creation time in non-hashed area") + return + } + if len(subpacket) != 4 { + err = errors.StructuralError("signature creation time not four bytes") + return + } + t := binary.BigEndian.Uint32(subpacket) + sig.CreationTime = time.Unix(int64(t), 0) + case signatureExpirationSubpacket: + // Signature expiration time, section 5.2.3.10 + if !isHashed { + return + } + if len(subpacket) != 4 { + err = errors.StructuralError("expiration subpacket with bad length") + return + } + sig.SigLifetimeSecs = new(uint32) + *sig.SigLifetimeSecs = binary.BigEndian.Uint32(subpacket) + case keyExpirationSubpacket: + // Key expiration time, section 5.2.3.6 + if !isHashed { + return + } + if len(subpacket) != 4 { + err = errors.StructuralError("key expiration subpacket with bad length") + return + } + sig.KeyLifetimeSecs = new(uint32) + *sig.KeyLifetimeSecs = binary.BigEndian.Uint32(subpacket) + case prefSymmetricAlgosSubpacket: + // Preferred symmetric algorithms, section 5.2.3.7 + if !isHashed { + return + } + sig.PreferredSymmetric = make([]byte, len(subpacket)) + copy(sig.PreferredSymmetric, subpacket) + case issuerSubpacket: + // Issuer, section 5.2.3.5 + if len(subpacket) != 8 { + err = errors.StructuralError("issuer subpacket with bad length") + return + } + sig.IssuerKeyId = new(uint64) + *sig.IssuerKeyId = binary.BigEndian.Uint64(subpacket) + case prefHashAlgosSubpacket: + // Preferred hash algorithms, section 5.2.3.8 + if !isHashed { + return + } + sig.PreferredHash = make([]byte, len(subpacket)) + copy(sig.PreferredHash, subpacket) + case prefCompressionSubpacket: + // Preferred compression algorithms, section 5.2.3.9 + if !isHashed { + return + } + sig.PreferredCompression = make([]byte, len(subpacket)) + copy(sig.PreferredCompression, subpacket) + case primaryUserIdSubpacket: + // Primary User ID, section 5.2.3.19 + if !isHashed { + return + } + if len(subpacket) != 1 { + err = errors.StructuralError("primary user id subpacket with bad length") + return + } + sig.IsPrimaryId = new(bool) + if subpacket[0] > 0 { + *sig.IsPrimaryId = true + } + case keyFlagsSubpacket: + // Key flags, section 5.2.3.21 + if !isHashed { + return + } + if len(subpacket) == 0 { + err = errors.StructuralError("empty key flags subpacket") + return + } + sig.FlagsValid = true + if subpacket[0]&KeyFlagCertify != 0 { + sig.FlagCertify = true + } + if subpacket[0]&KeyFlagSign != 0 { + sig.FlagSign = true + } + if subpacket[0]&KeyFlagEncryptCommunications != 0 { + sig.FlagEncryptCommunications = true + } + if subpacket[0]&KeyFlagEncryptStorage != 0 { + sig.FlagEncryptStorage = true + } + case reasonForRevocationSubpacket: + // Reason For Revocation, section 5.2.3.23 + if !isHashed { + return + } + if len(subpacket) == 0 { + err = errors.StructuralError("empty revocation reason subpacket") + return + } + sig.RevocationReason = new(uint8) + *sig.RevocationReason = subpacket[0] + sig.RevocationReasonText = string(subpacket[1:]) + case featuresSubpacket: + // Features subpacket, section 5.2.3.24 specifies a very general + // mechanism for OpenPGP implementations to signal support for new + // features. In practice, the subpacket is used exclusively to + // indicate support for MDC-protected encryption. + sig.MDC = len(subpacket) >= 1 && subpacket[0]&1 == 1 + case embeddedSignatureSubpacket: + // Only usage is in signatures that cross-certify + // signing subkeys. section 5.2.3.26 describes the + // format, with its usage described in section 11.1 + if sig.EmbeddedSignature != nil { + err = errors.StructuralError("Cannot have multiple embedded signatures") + return + } + sig.EmbeddedSignature = new(Signature) + // Embedded signatures are required to be v4 signatures see + // section 12.1. However, we only parse v4 signatures in this + // file anyway. + if err := sig.EmbeddedSignature.parse(bytes.NewBuffer(subpacket)); err != nil { + return nil, err + } + if sigType := sig.EmbeddedSignature.SigType; sigType != SigTypePrimaryKeyBinding { + return nil, errors.StructuralError("cross-signature has unexpected type " + strconv.Itoa(int(sigType))) + } + default: + if isCritical { + err = errors.UnsupportedError("unknown critical signature subpacket type " + strconv.Itoa(int(packetType))) + return + } + } + return + +Truncated: + err = errors.StructuralError("signature subpacket truncated") + return +} + +// subpacketLengthLength returns the length, in bytes, of an encoded length value. +func subpacketLengthLength(length int) int { + if length < 192 { + return 1 + } + if length < 16320 { + return 2 + } + return 5 +} + +// serializeSubpacketLength marshals the given length into to. +func serializeSubpacketLength(to []byte, length int) int { + // RFC 4880, Section 4.2.2. + if length < 192 { + to[0] = byte(length) + return 1 + } + if length < 16320 { + length -= 192 + to[0] = byte((length >> 8) + 192) + to[1] = byte(length) + return 2 + } + to[0] = 255 + to[1] = byte(length >> 24) + to[2] = byte(length >> 16) + to[3] = byte(length >> 8) + to[4] = byte(length) + return 5 +} + +// subpacketsLength returns the serialized length, in bytes, of the given +// subpackets. +func subpacketsLength(subpackets []outputSubpacket, hashed bool) (length int) { + for _, subpacket := range subpackets { + if subpacket.hashed == hashed { + length += subpacketLengthLength(len(subpacket.contents) + 1) + length += 1 // type byte + length += len(subpacket.contents) + } + } + return +} + +// serializeSubpackets marshals the given subpackets into to. +func serializeSubpackets(to []byte, subpackets []outputSubpacket, hashed bool) { + for _, subpacket := range subpackets { + if subpacket.hashed == hashed { + n := serializeSubpacketLength(to, len(subpacket.contents)+1) + to[n] = byte(subpacket.subpacketType) + to = to[1+n:] + n = copy(to, subpacket.contents) + to = to[n:] + } + } + return +} + +// KeyExpired returns whether sig is a self-signature of a key that has +// expired. +func (sig *Signature) KeyExpired(currentTime time.Time) bool { + if sig.KeyLifetimeSecs == nil { + return false + } + expiry := sig.CreationTime.Add(time.Duration(*sig.KeyLifetimeSecs) * time.Second) + return currentTime.After(expiry) +} + +// buildHashSuffix constructs the HashSuffix member of sig in preparation for signing. +func (sig *Signature) buildHashSuffix() (err error) { + hashedSubpacketsLen := subpacketsLength(sig.outSubpackets, true) + + var ok bool + l := 6 + hashedSubpacketsLen + sig.HashSuffix = make([]byte, l+6) + sig.HashSuffix[0] = 4 + sig.HashSuffix[1] = uint8(sig.SigType) + sig.HashSuffix[2] = uint8(sig.PubKeyAlgo) + sig.HashSuffix[3], ok = s2k.HashToHashId(sig.Hash) + if !ok { + sig.HashSuffix = nil + return errors.InvalidArgumentError("hash cannot be represented in OpenPGP: " + strconv.Itoa(int(sig.Hash))) + } + sig.HashSuffix[4] = byte(hashedSubpacketsLen >> 8) + sig.HashSuffix[5] = byte(hashedSubpacketsLen) + serializeSubpackets(sig.HashSuffix[6:l], sig.outSubpackets, true) + trailer := sig.HashSuffix[l:] + trailer[0] = 4 + trailer[1] = 0xff + trailer[2] = byte(l >> 24) + trailer[3] = byte(l >> 16) + trailer[4] = byte(l >> 8) + trailer[5] = byte(l) + return +} + +func (sig *Signature) signPrepareHash(h hash.Hash) (digest []byte, err error) { + err = sig.buildHashSuffix() + if err != nil { + return + } + + h.Write(sig.HashSuffix) + digest = h.Sum(nil) + copy(sig.HashTag[:], digest) + return +} + +// Sign signs a message with a private key. The hash, h, must contain +// the hash of the message to be signed and will be mutated by this function. +// On success, the signature is stored in sig. Call Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) Sign(h hash.Hash, priv *PrivateKey, config *Config) (err error) { + sig.outSubpackets = sig.buildSubpackets() + digest, err := sig.signPrepareHash(h) + if err != nil { + return + } + + switch priv.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + // supports both *rsa.PrivateKey and crypto.Signer + sig.RSASignature.bytes, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, sig.Hash) + sig.RSASignature.bitLength = uint16(8 * len(sig.RSASignature.bytes)) + case PubKeyAlgoDSA: + dsaPriv := priv.PrivateKey.(*dsa.PrivateKey) + + // Need to truncate hashBytes to match FIPS 186-3 section 4.6. + subgroupSize := (dsaPriv.Q.BitLen() + 7) / 8 + if len(digest) > subgroupSize { + digest = digest[:subgroupSize] + } + r, s, err := dsa.Sign(config.Random(), dsaPriv, digest) + if err == nil { + sig.DSASigR.bytes = r.Bytes() + sig.DSASigR.bitLength = uint16(8 * len(sig.DSASigR.bytes)) + sig.DSASigS.bytes = s.Bytes() + sig.DSASigS.bitLength = uint16(8 * len(sig.DSASigS.bytes)) + } + case PubKeyAlgoECDSA: + var r, s *big.Int + if pk, ok := priv.PrivateKey.(*ecdsa.PrivateKey); ok { + // direct support, avoid asn1 wrapping/unwrapping + r, s, err = ecdsa.Sign(config.Random(), pk, digest) + } else { + var b []byte + b, err = priv.PrivateKey.(crypto.Signer).Sign(config.Random(), digest, nil) + if err == nil { + r, s, err = unwrapECDSASig(b) + } + } + if err == nil { + sig.ECDSASigR = fromBig(r) + sig.ECDSASigS = fromBig(s) + } + default: + err = errors.UnsupportedError("public key algorithm: " + strconv.Itoa(int(sig.PubKeyAlgo))) + } + + return +} + +// unwrapECDSASig parses the two integer components of an ASN.1-encoded ECDSA +// signature. +func unwrapECDSASig(b []byte) (r, s *big.Int, err error) { + var ecsdaSig struct { + R, S *big.Int + } + _, err = asn1.Unmarshal(b, &ecsdaSig) + if err != nil { + return + } + return ecsdaSig.R, ecsdaSig.S, nil +} + +// SignUserId computes a signature from priv, asserting that pub is a valid +// key for the identity id. On success, the signature is stored in sig. Call +// Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) SignUserId(id string, pub *PublicKey, priv *PrivateKey, config *Config) error { + h, err := userIdSignatureHash(id, pub, sig.Hash) + if err != nil { + return err + } + return sig.Sign(h, priv, config) +} + +// SignKey computes a signature from priv, asserting that pub is a subkey. On +// success, the signature is stored in sig. Call Serialize to write it out. +// If config is nil, sensible defaults will be used. +func (sig *Signature) SignKey(pub *PublicKey, priv *PrivateKey, config *Config) error { + h, err := keySignatureHash(&priv.PublicKey, pub, sig.Hash) + if err != nil { + return err + } + return sig.Sign(h, priv, config) +} + +// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been +// called first. +func (sig *Signature) Serialize(w io.Writer) (err error) { + if len(sig.outSubpackets) == 0 { + sig.outSubpackets = sig.rawSubpackets + } + if sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil && sig.ECDSASigR.bytes == nil { + return errors.InvalidArgumentError("Signature: need to call Sign, SignUserId or SignKey before Serialize") + } + + sigLength := 0 + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + sigLength = 2 + len(sig.RSASignature.bytes) + case PubKeyAlgoDSA: + sigLength = 2 + len(sig.DSASigR.bytes) + sigLength += 2 + len(sig.DSASigS.bytes) + case PubKeyAlgoECDSA: + sigLength = 2 + len(sig.ECDSASigR.bytes) + sigLength += 2 + len(sig.ECDSASigS.bytes) + default: + panic("impossible") + } + + unhashedSubpacketsLen := subpacketsLength(sig.outSubpackets, false) + length := len(sig.HashSuffix) - 6 /* trailer not included */ + + 2 /* length of unhashed subpackets */ + unhashedSubpacketsLen + + 2 /* hash tag */ + sigLength + err = serializeHeader(w, packetTypeSignature, length) + if err != nil { + return + } + + _, err = w.Write(sig.HashSuffix[:len(sig.HashSuffix)-6]) + if err != nil { + return + } + + unhashedSubpackets := make([]byte, 2+unhashedSubpacketsLen) + unhashedSubpackets[0] = byte(unhashedSubpacketsLen >> 8) + unhashedSubpackets[1] = byte(unhashedSubpacketsLen) + serializeSubpackets(unhashedSubpackets[2:], sig.outSubpackets, false) + + _, err = w.Write(unhashedSubpackets) + if err != nil { + return + } + _, err = w.Write(sig.HashTag[:]) + if err != nil { + return + } + + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + err = writeMPIs(w, sig.RSASignature) + case PubKeyAlgoDSA: + err = writeMPIs(w, sig.DSASigR, sig.DSASigS) + case PubKeyAlgoECDSA: + err = writeMPIs(w, sig.ECDSASigR, sig.ECDSASigS) + default: + panic("impossible") + } + return +} + +// outputSubpacket represents a subpacket to be marshaled. +type outputSubpacket struct { + hashed bool // true if this subpacket is in the hashed area. + subpacketType signatureSubpacketType + isCritical bool + contents []byte +} + +func (sig *Signature) buildSubpackets() (subpackets []outputSubpacket) { + creationTime := make([]byte, 4) + binary.BigEndian.PutUint32(creationTime, uint32(sig.CreationTime.Unix())) + subpackets = append(subpackets, outputSubpacket{true, creationTimeSubpacket, false, creationTime}) + + if sig.IssuerKeyId != nil { + keyId := make([]byte, 8) + binary.BigEndian.PutUint64(keyId, *sig.IssuerKeyId) + subpackets = append(subpackets, outputSubpacket{true, issuerSubpacket, false, keyId}) + } + + if sig.SigLifetimeSecs != nil && *sig.SigLifetimeSecs != 0 { + sigLifetime := make([]byte, 4) + binary.BigEndian.PutUint32(sigLifetime, *sig.SigLifetimeSecs) + subpackets = append(subpackets, outputSubpacket{true, signatureExpirationSubpacket, true, sigLifetime}) + } + + // Key flags may only appear in self-signatures or certification signatures. + + if sig.FlagsValid { + var flags byte + if sig.FlagCertify { + flags |= KeyFlagCertify + } + if sig.FlagSign { + flags |= KeyFlagSign + } + if sig.FlagEncryptCommunications { + flags |= KeyFlagEncryptCommunications + } + if sig.FlagEncryptStorage { + flags |= KeyFlagEncryptStorage + } + subpackets = append(subpackets, outputSubpacket{true, keyFlagsSubpacket, false, []byte{flags}}) + } + + // The following subpackets may only appear in self-signatures + + if sig.KeyLifetimeSecs != nil && *sig.KeyLifetimeSecs != 0 { + keyLifetime := make([]byte, 4) + binary.BigEndian.PutUint32(keyLifetime, *sig.KeyLifetimeSecs) + subpackets = append(subpackets, outputSubpacket{true, keyExpirationSubpacket, true, keyLifetime}) + } + + if sig.IsPrimaryId != nil && *sig.IsPrimaryId { + subpackets = append(subpackets, outputSubpacket{true, primaryUserIdSubpacket, false, []byte{1}}) + } + + if len(sig.PreferredSymmetric) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefSymmetricAlgosSubpacket, false, sig.PreferredSymmetric}) + } + + if len(sig.PreferredHash) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefHashAlgosSubpacket, false, sig.PreferredHash}) + } + + if len(sig.PreferredCompression) > 0 { + subpackets = append(subpackets, outputSubpacket{true, prefCompressionSubpacket, false, sig.PreferredCompression}) + } + + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go b/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go new file mode 100644 index 0000000..56e7611 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/signature_test.go @@ -0,0 +1,78 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "encoding/hex" + "testing" +) + +func TestSignatureRead(t *testing.T) { + packet, err := Read(readerFromHex(signatureDataHex)) + if err != nil { + t.Error(err) + return + } + sig, ok := packet.(*Signature) + if !ok || sig.SigType != SigTypeBinary || sig.PubKeyAlgo != PubKeyAlgoRSA || sig.Hash != crypto.SHA1 { + t.Errorf("failed to parse, got: %#v", packet) + } +} + +func TestSignatureReserialize(t *testing.T) { + packet, _ := Read(readerFromHex(signatureDataHex)) + sig := packet.(*Signature) + out := new(bytes.Buffer) + err := sig.Serialize(out) + if err != nil { + t.Errorf("error reserializing: %s", err) + return + } + + expected, _ := hex.DecodeString(signatureDataHex) + if !bytes.Equal(expected, out.Bytes()) { + t.Errorf("output doesn't match input (got vs expected):\n%s\n%s", hex.Dump(out.Bytes()), hex.Dump(expected)) + } +} + +func TestSignUserId(t *testing.T) { + sig := &Signature{ + SigType: SigTypeGenericCert, + PubKeyAlgo: PubKeyAlgoRSA, + Hash: 0, // invalid hash function + } + + packet, err := Read(readerFromHex(rsaPkDataHex)) + if err != nil { + t.Fatalf("failed to deserialize public key: %v", err) + } + pubKey := packet.(*PublicKey) + + packet, err = Read(readerFromHex(privKeyRSAHex)) + if err != nil { + t.Fatalf("failed to deserialize private key: %v", err) + } + privKey := packet.(*PrivateKey) + + err = sig.SignUserId("", pubKey, privKey, nil) + if err == nil { + t.Errorf("did not receive an error when expected") + } + + sig.Hash = crypto.SHA256 + err = privKey.Decrypt([]byte("testing")) + if err != nil { + t.Fatalf("failed to decrypt private key: %v", err) + } + + err = sig.SignUserId("", pubKey, privKey, nil) + if err != nil { + t.Errorf("failed to sign user id: %v", err) + } +} + +const signatureDataHex = "c2c05c04000102000605024cb45112000a0910ab105c91af38fb158f8d07ff5596ea368c5efe015bed6e78348c0f033c931d5f2ce5db54ce7f2a7e4b4ad64db758d65a7a71773edeab7ba2a9e0908e6a94a1175edd86c1d843279f045b021a6971a72702fcbd650efc393c5474d5b59a15f96d2eaad4c4c426797e0dcca2803ef41c6ff234d403eec38f31d610c344c06f2401c262f0993b2e66cad8a81ebc4322c723e0d4ba09fe917e8777658307ad8329adacba821420741009dfe87f007759f0982275d028a392c6ed983a0d846f890b36148c7358bdb8a516007fac760261ecd06076813831a36d0459075d1befa245ae7f7fb103d92ca759e9498fe60ef8078a39a3beda510deea251ea9f0a7f0df6ef42060f20780360686f3e400e" diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go b/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go new file mode 100644 index 0000000..6edff88 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/signature_v3.go @@ -0,0 +1,146 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto" + "encoding/binary" + "fmt" + "io" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" +) + +// SignatureV3 represents older version 3 signatures. These signatures are less secure +// than version 4 and should not be used to create new signatures. They are included +// here for backwards compatibility to read and validate with older key material. +// See RFC 4880, section 5.2.2. +type SignatureV3 struct { + SigType SignatureType + CreationTime time.Time + IssuerKeyId uint64 + PubKeyAlgo PublicKeyAlgorithm + Hash crypto.Hash + HashTag [2]byte + + RSASignature parsedMPI + DSASigR, DSASigS parsedMPI +} + +func (sig *SignatureV3) parse(r io.Reader) (err error) { + // RFC 4880, section 5.2.2 + var buf [8]byte + if _, err = readFull(r, buf[:1]); err != nil { + return + } + if buf[0] < 2 || buf[0] > 3 { + err = errors.UnsupportedError("signature packet version " + strconv.Itoa(int(buf[0]))) + return + } + if _, err = readFull(r, buf[:1]); err != nil { + return + } + if buf[0] != 5 { + err = errors.UnsupportedError( + "invalid hashed material length " + strconv.Itoa(int(buf[0]))) + return + } + + // Read hashed material: signature type + creation time + if _, err = readFull(r, buf[:5]); err != nil { + return + } + sig.SigType = SignatureType(buf[0]) + t := binary.BigEndian.Uint32(buf[1:5]) + sig.CreationTime = time.Unix(int64(t), 0) + + // Eight-octet Key ID of signer. + if _, err = readFull(r, buf[:8]); err != nil { + return + } + sig.IssuerKeyId = binary.BigEndian.Uint64(buf[:]) + + // Public-key and hash algorithm + if _, err = readFull(r, buf[:2]); err != nil { + return + } + sig.PubKeyAlgo = PublicKeyAlgorithm(buf[0]) + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly, PubKeyAlgoDSA: + default: + err = errors.UnsupportedError("public key algorithm " + strconv.Itoa(int(sig.PubKeyAlgo))) + return + } + var ok bool + if sig.Hash, ok = s2k.HashIdToHash(buf[1]); !ok { + return errors.UnsupportedError("hash function " + strconv.Itoa(int(buf[2]))) + } + + // Two-octet field holding left 16 bits of signed hash value. + if _, err = readFull(r, sig.HashTag[:2]); err != nil { + return + } + + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + sig.RSASignature.bytes, sig.RSASignature.bitLength, err = readMPI(r) + case PubKeyAlgoDSA: + if sig.DSASigR.bytes, sig.DSASigR.bitLength, err = readMPI(r); err != nil { + return + } + sig.DSASigS.bytes, sig.DSASigS.bitLength, err = readMPI(r) + default: + panic("unreachable") + } + return +} + +// Serialize marshals sig to w. Sign, SignUserId or SignKey must have been +// called first. +func (sig *SignatureV3) Serialize(w io.Writer) (err error) { + buf := make([]byte, 8) + + // Write the sig type and creation time + buf[0] = byte(sig.SigType) + binary.BigEndian.PutUint32(buf[1:5], uint32(sig.CreationTime.Unix())) + if _, err = w.Write(buf[:5]); err != nil { + return + } + + // Write the issuer long key ID + binary.BigEndian.PutUint64(buf[:8], sig.IssuerKeyId) + if _, err = w.Write(buf[:8]); err != nil { + return + } + + // Write public key algorithm, hash ID, and hash value + buf[0] = byte(sig.PubKeyAlgo) + hashId, ok := s2k.HashToHashId(sig.Hash) + if !ok { + return errors.UnsupportedError(fmt.Sprintf("hash function %v", sig.Hash)) + } + buf[1] = hashId + copy(buf[2:4], sig.HashTag[:]) + if _, err = w.Write(buf[:4]); err != nil { + return + } + + if sig.RSASignature.bytes == nil && sig.DSASigR.bytes == nil { + return errors.InvalidArgumentError("Signature: need to call Sign, SignUserId or SignKey before Serialize") + } + + switch sig.PubKeyAlgo { + case PubKeyAlgoRSA, PubKeyAlgoRSASignOnly: + err = writeMPIs(w, sig.RSASignature) + case PubKeyAlgoDSA: + err = writeMPIs(w, sig.DSASigR, sig.DSASigS) + default: + panic("impossible") + } + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go b/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go new file mode 100644 index 0000000..ad7b62a --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/signature_v3_test.go @@ -0,0 +1,92 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto" + "encoding/hex" + "io" + "io/ioutil" + "testing" + + "golang.org/x/crypto/openpgp/armor" +) + +func TestSignatureV3Read(t *testing.T) { + r := v3KeyReader(t) + Read(r) // Skip public key + Read(r) // Skip uid + packet, err := Read(r) // Signature + if err != nil { + t.Error(err) + return + } + sig, ok := packet.(*SignatureV3) + if !ok || sig.SigType != SigTypeGenericCert || sig.PubKeyAlgo != PubKeyAlgoRSA || sig.Hash != crypto.MD5 { + t.Errorf("failed to parse, got: %#v", packet) + } +} + +func TestSignatureV3Reserialize(t *testing.T) { + r := v3KeyReader(t) + Read(r) // Skip public key + Read(r) // Skip uid + packet, err := Read(r) + if err != nil { + t.Error(err) + return + } + sig := packet.(*SignatureV3) + out := new(bytes.Buffer) + if err = sig.Serialize(out); err != nil { + t.Errorf("error reserializing: %s", err) + return + } + expected, err := ioutil.ReadAll(v3KeyReader(t)) + if err != nil { + t.Error(err) + return + } + expected = expected[4+141+4+39:] // See pgpdump offsets below, this is where the sig starts + if !bytes.Equal(expected, out.Bytes()) { + t.Errorf("output doesn't match input (got vs expected):\n%s\n%s", hex.Dump(out.Bytes()), hex.Dump(expected)) + } +} + +func v3KeyReader(t *testing.T) io.Reader { + armorBlock, err := armor.Decode(bytes.NewBufferString(keySigV3Armor)) + if err != nil { + t.Fatalf("armor Decode failed: %v", err) + } + return armorBlock.Body +} + +// keySigV3Armor is some V3 public key I found in an SKS dump. +// Old: Public Key Packet(tag 6)(141 bytes) +// Ver 4 - new +// Public key creation time - Fri Sep 16 17:13:54 CDT 1994 +// Pub alg - unknown(pub 0) +// Unknown public key(pub 0) +// Old: User ID Packet(tag 13)(39 bytes) +// User ID - Armin M. Warda +// Old: Signature Packet(tag 2)(149 bytes) +// Ver 4 - new +// Sig type - unknown(05) +// Pub alg - ElGamal Encrypt-Only(pub 16) +// Hash alg - unknown(hash 46) +// Hashed Sub: unknown(sub 81, critical)(1988 bytes) +const keySigV3Armor = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: SKS 1.0.10 + +mI0CLnoYogAAAQQA1qwA2SuJwfQ5bCQ6u5t20ulnOtY0gykf7YjiK4LiVeRBwHjGq7v30tGV +5Qti7qqRW4Ww7CDCJc4sZMFnystucR2vLkXaSoNWoFm4Fg47NiisDdhDezHwbVPW6OpCFNSi +ZAamtj4QAUBu8j4LswafrJqZqR9336/V3g8Yil2l48kABRG0J0FybWluIE0uIFdhcmRhIDx3 +YXJkYUBuZXBoaWxpbS5ydWhyLmRlPoiVAgUQLok2xwXR6zmeWEiZAQE/DgP/WgxPQh40/Po4 +gSkWZCDAjNdph7zexvAb0CcUWahcwiBIgg3U5ErCx9I5CNVA9U+s8bNrDZwgSIeBzp3KhWUx +524uhGgm6ZUTOAIKA6CbV6pfqoLpJnRYvXYQU5mIWsNa99wcu2qu18OeEDnztb7aLA6Ra9OF +YFCbq4EjXRoOrYM= +=LPjs +-----END PGP PUBLIC KEY BLOCK-----` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go new file mode 100644 index 0000000..744c2d2 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted.go @@ -0,0 +1,155 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto/cipher" + "io" + "strconv" + + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/s2k" +) + +// This is the largest session key that we'll support. Since no 512-bit cipher +// has even been seriously used, this is comfortably large. +const maxSessionKeySizeInBytes = 64 + +// SymmetricKeyEncrypted represents a passphrase protected session key. See RFC +// 4880, section 5.3. +type SymmetricKeyEncrypted struct { + CipherFunc CipherFunction + s2k func(out, in []byte) + encryptedKey []byte +} + +const symmetricKeyEncryptedVersion = 4 + +func (ske *SymmetricKeyEncrypted) parse(r io.Reader) error { + // RFC 4880, section 5.3. + var buf [2]byte + if _, err := readFull(r, buf[:]); err != nil { + return err + } + if buf[0] != symmetricKeyEncryptedVersion { + return errors.UnsupportedError("SymmetricKeyEncrypted version") + } + ske.CipherFunc = CipherFunction(buf[1]) + + if ske.CipherFunc.KeySize() == 0 { + return errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(buf[1]))) + } + + var err error + ske.s2k, err = s2k.Parse(r) + if err != nil { + return err + } + + encryptedKey := make([]byte, maxSessionKeySizeInBytes) + // The session key may follow. We just have to try and read to find + // out. If it exists then we limit it to maxSessionKeySizeInBytes. + n, err := readFull(r, encryptedKey) + if err != nil && err != io.ErrUnexpectedEOF { + return err + } + + if n != 0 { + if n == maxSessionKeySizeInBytes { + return errors.UnsupportedError("oversized encrypted session key") + } + ske.encryptedKey = encryptedKey[:n] + } + + return nil +} + +// Decrypt attempts to decrypt an encrypted session key and returns the key and +// the cipher to use when decrypting a subsequent Symmetrically Encrypted Data +// packet. +func (ske *SymmetricKeyEncrypted) Decrypt(passphrase []byte) ([]byte, CipherFunction, error) { + key := make([]byte, ske.CipherFunc.KeySize()) + ske.s2k(key, passphrase) + + if len(ske.encryptedKey) == 0 { + return key, ske.CipherFunc, nil + } + + // the IV is all zeros + iv := make([]byte, ske.CipherFunc.blockSize()) + c := cipher.NewCFBDecrypter(ske.CipherFunc.new(key), iv) + plaintextKey := make([]byte, len(ske.encryptedKey)) + c.XORKeyStream(plaintextKey, ske.encryptedKey) + cipherFunc := CipherFunction(plaintextKey[0]) + if cipherFunc.blockSize() == 0 { + return nil, ske.CipherFunc, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(cipherFunc))) + } + plaintextKey = plaintextKey[1:] + if l, cipherKeySize := len(plaintextKey), cipherFunc.KeySize(); l != cipherFunc.KeySize() { + return nil, cipherFunc, errors.StructuralError("length of decrypted key (" + strconv.Itoa(l) + ") " + + "not equal to cipher keysize (" + strconv.Itoa(cipherKeySize) + ")") + } + return plaintextKey, cipherFunc, nil +} + +// SerializeSymmetricKeyEncrypted serializes a symmetric key packet to w. The +// packet contains a random session key, encrypted by a key derived from the +// given passphrase. The session key is returned and must be passed to +// SerializeSymmetricallyEncrypted. +// If config is nil, sensible defaults will be used. +func SerializeSymmetricKeyEncrypted(w io.Writer, passphrase []byte, config *Config) (key []byte, err error) { + cipherFunc := config.Cipher() + keySize := cipherFunc.KeySize() + if keySize == 0 { + return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(cipherFunc))) + } + + s2kBuf := new(bytes.Buffer) + keyEncryptingKey := make([]byte, keySize) + // s2k.Serialize salts and stretches the passphrase, and writes the + // resulting key to keyEncryptingKey and the s2k descriptor to s2kBuf. + err = s2k.Serialize(s2kBuf, keyEncryptingKey, config.Random(), passphrase, &s2k.Config{Hash: config.Hash(), S2KCount: config.PasswordHashIterations()}) + if err != nil { + return + } + s2kBytes := s2kBuf.Bytes() + + packetLength := 2 /* header */ + len(s2kBytes) + 1 /* cipher type */ + keySize + err = serializeHeader(w, packetTypeSymmetricKeyEncrypted, packetLength) + if err != nil { + return + } + + var buf [2]byte + buf[0] = symmetricKeyEncryptedVersion + buf[1] = byte(cipherFunc) + _, err = w.Write(buf[:]) + if err != nil { + return + } + _, err = w.Write(s2kBytes) + if err != nil { + return + } + + sessionKey := make([]byte, keySize) + _, err = io.ReadFull(config.Random(), sessionKey) + if err != nil { + return + } + iv := make([]byte, cipherFunc.blockSize()) + c := cipher.NewCFBEncrypter(cipherFunc.new(keyEncryptingKey), iv) + encryptedCipherAndKey := make([]byte, keySize+1) + c.XORKeyStream(encryptedCipherAndKey, buf[1:]) + c.XORKeyStream(encryptedCipherAndKey[1:], sessionKey) + _, err = w.Write(encryptedCipherAndKey) + if err != nil { + return + } + + key = sessionKey + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go new file mode 100644 index 0000000..e1d52c1 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetric_key_encrypted_test.go @@ -0,0 +1,117 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/hex" + "io" + "io/ioutil" + "testing" +) + +func TestSymmetricKeyEncrypted(t *testing.T) { + buf := readerFromHex(symmetricallyEncryptedHex) + packet, err := Read(buf) + if err != nil { + t.Errorf("failed to read SymmetricKeyEncrypted: %s", err) + return + } + ske, ok := packet.(*SymmetricKeyEncrypted) + if !ok { + t.Error("didn't find SymmetricKeyEncrypted packet") + return + } + key, cipherFunc, err := ske.Decrypt([]byte("password")) + if err != nil { + t.Error(err) + return + } + + packet, err = Read(buf) + if err != nil { + t.Errorf("failed to read SymmetricallyEncrypted: %s", err) + return + } + se, ok := packet.(*SymmetricallyEncrypted) + if !ok { + t.Error("didn't find SymmetricallyEncrypted packet") + return + } + r, err := se.Decrypt(cipherFunc, key) + if err != nil { + t.Error(err) + return + } + + contents, err := ioutil.ReadAll(r) + if err != nil && err != io.EOF { + t.Error(err) + return + } + + expectedContents, _ := hex.DecodeString(symmetricallyEncryptedContentsHex) + if !bytes.Equal(expectedContents, contents) { + t.Errorf("bad contents got:%x want:%x", contents, expectedContents) + } +} + +const symmetricallyEncryptedHex = "8c0d04030302371a0b38d884f02060c91cf97c9973b8e58e028e9501708ccfe618fb92afef7fa2d80ddadd93cf" +const symmetricallyEncryptedContentsHex = "cb1062004d14c4df636f6e74656e74732e0a" + +func TestSerializeSymmetricKeyEncryptedCiphers(t *testing.T) { + tests := [...]struct { + cipherFunc CipherFunction + name string + }{ + {Cipher3DES, "Cipher3DES"}, + {CipherCAST5, "CipherCAST5"}, + {CipherAES128, "CipherAES128"}, + {CipherAES192, "CipherAES192"}, + {CipherAES256, "CipherAES256"}, + } + + for _, test := range tests { + var buf bytes.Buffer + passphrase := []byte("testing") + config := &Config{ + DefaultCipher: test.cipherFunc, + } + + key, err := SerializeSymmetricKeyEncrypted(&buf, passphrase, config) + if err != nil { + t.Errorf("cipher(%s) failed to serialize: %s", test.name, err) + continue + } + + p, err := Read(&buf) + if err != nil { + t.Errorf("cipher(%s) failed to reparse: %s", test.name, err) + continue + } + + ske, ok := p.(*SymmetricKeyEncrypted) + if !ok { + t.Errorf("cipher(%s) parsed a different packet type: %#v", test.name, p) + continue + } + + if ske.CipherFunc != config.DefaultCipher { + t.Errorf("cipher(%s) SKE cipher function is %d (expected %d)", test.name, ske.CipherFunc, config.DefaultCipher) + } + parsedKey, parsedCipherFunc, err := ske.Decrypt(passphrase) + if err != nil { + t.Errorf("cipher(%s) failed to decrypt reparsed SKE: %s", test.name, err) + continue + } + if !bytes.Equal(key, parsedKey) { + t.Errorf("cipher(%s) keys don't match after Decrypt: %x (original) vs %x (parsed)", test.name, key, parsedKey) + } + if parsedCipherFunc != test.cipherFunc { + t.Errorf("cipher(%s) cipher function doesn't match after Decrypt: %d (original) vs %d (parsed)", + test.name, test.cipherFunc, parsedCipherFunc) + } + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go new file mode 100644 index 0000000..6126030 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted.go @@ -0,0 +1,290 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "crypto/cipher" + "crypto/sha1" + "crypto/subtle" + "golang.org/x/crypto/openpgp/errors" + "hash" + "io" + "strconv" +) + +// SymmetricallyEncrypted represents a symmetrically encrypted byte string. The +// encrypted contents will consist of more OpenPGP packets. See RFC 4880, +// sections 5.7 and 5.13. +type SymmetricallyEncrypted struct { + MDC bool // true iff this is a type 18 packet and thus has an embedded MAC. + contents io.Reader + prefix []byte +} + +const symmetricallyEncryptedVersion = 1 + +func (se *SymmetricallyEncrypted) parse(r io.Reader) error { + if se.MDC { + // See RFC 4880, section 5.13. + var buf [1]byte + _, err := readFull(r, buf[:]) + if err != nil { + return err + } + if buf[0] != symmetricallyEncryptedVersion { + return errors.UnsupportedError("unknown SymmetricallyEncrypted version") + } + } + se.contents = r + return nil +} + +// Decrypt returns a ReadCloser, from which the decrypted contents of the +// packet can be read. An incorrect key can, with high probability, be detected +// immediately and this will result in a KeyIncorrect error being returned. +func (se *SymmetricallyEncrypted) Decrypt(c CipherFunction, key []byte) (io.ReadCloser, error) { + keySize := c.KeySize() + if keySize == 0 { + return nil, errors.UnsupportedError("unknown cipher: " + strconv.Itoa(int(c))) + } + if len(key) != keySize { + return nil, errors.InvalidArgumentError("SymmetricallyEncrypted: incorrect key length") + } + + if se.prefix == nil { + se.prefix = make([]byte, c.blockSize()+2) + _, err := readFull(se.contents, se.prefix) + if err != nil { + return nil, err + } + } else if len(se.prefix) != c.blockSize()+2 { + return nil, errors.InvalidArgumentError("can't try ciphers with different block lengths") + } + + ocfbResync := OCFBResync + if se.MDC { + // MDC packets use a different form of OCFB mode. + ocfbResync = OCFBNoResync + } + + s := NewOCFBDecrypter(c.new(key), se.prefix, ocfbResync) + if s == nil { + return nil, errors.ErrKeyIncorrect + } + + plaintext := cipher.StreamReader{S: s, R: se.contents} + + if se.MDC { + // MDC packets have an embedded hash that we need to check. + h := sha1.New() + h.Write(se.prefix) + return &seMDCReader{in: plaintext, h: h}, nil + } + + // Otherwise, we just need to wrap plaintext so that it's a valid ReadCloser. + return seReader{plaintext}, nil +} + +// seReader wraps an io.Reader with a no-op Close method. +type seReader struct { + in io.Reader +} + +func (ser seReader) Read(buf []byte) (int, error) { + return ser.in.Read(buf) +} + +func (ser seReader) Close() error { + return nil +} + +const mdcTrailerSize = 1 /* tag byte */ + 1 /* length byte */ + sha1.Size + +// An seMDCReader wraps an io.Reader, maintains a running hash and keeps hold +// of the most recent 22 bytes (mdcTrailerSize). Upon EOF, those bytes form an +// MDC packet containing a hash of the previous contents which is checked +// against the running hash. See RFC 4880, section 5.13. +type seMDCReader struct { + in io.Reader + h hash.Hash + trailer [mdcTrailerSize]byte + scratch [mdcTrailerSize]byte + trailerUsed int + error bool + eof bool +} + +func (ser *seMDCReader) Read(buf []byte) (n int, err error) { + if ser.error { + err = io.ErrUnexpectedEOF + return + } + if ser.eof { + err = io.EOF + return + } + + // If we haven't yet filled the trailer buffer then we must do that + // first. + for ser.trailerUsed < mdcTrailerSize { + n, err = ser.in.Read(ser.trailer[ser.trailerUsed:]) + ser.trailerUsed += n + if err == io.EOF { + if ser.trailerUsed != mdcTrailerSize { + n = 0 + err = io.ErrUnexpectedEOF + ser.error = true + return + } + ser.eof = true + n = 0 + return + } + + if err != nil { + n = 0 + return + } + } + + // If it's a short read then we read into a temporary buffer and shift + // the data into the caller's buffer. + if len(buf) <= mdcTrailerSize { + n, err = readFull(ser.in, ser.scratch[:len(buf)]) + copy(buf, ser.trailer[:n]) + ser.h.Write(buf[:n]) + copy(ser.trailer[:], ser.trailer[n:]) + copy(ser.trailer[mdcTrailerSize-n:], ser.scratch[:]) + if n < len(buf) { + ser.eof = true + err = io.EOF + } + return + } + + n, err = ser.in.Read(buf[mdcTrailerSize:]) + copy(buf, ser.trailer[:]) + ser.h.Write(buf[:n]) + copy(ser.trailer[:], buf[n:]) + + if err == io.EOF { + ser.eof = true + } + return +} + +// This is a new-format packet tag byte for a type 19 (MDC) packet. +const mdcPacketTagByte = byte(0x80) | 0x40 | 19 + +func (ser *seMDCReader) Close() error { + if ser.error { + return errors.SignatureError("error during reading") + } + + for !ser.eof { + // We haven't seen EOF so we need to read to the end + var buf [1024]byte + _, err := ser.Read(buf[:]) + if err == io.EOF { + break + } + if err != nil { + return errors.SignatureError("error during reading") + } + } + + if ser.trailer[0] != mdcPacketTagByte || ser.trailer[1] != sha1.Size { + return errors.SignatureError("MDC packet not found") + } + ser.h.Write(ser.trailer[:2]) + + final := ser.h.Sum(nil) + if subtle.ConstantTimeCompare(final, ser.trailer[2:]) != 1 { + return errors.SignatureError("hash mismatch") + } + return nil +} + +// An seMDCWriter writes through to an io.WriteCloser while maintains a running +// hash of the data written. On close, it emits an MDC packet containing the +// running hash. +type seMDCWriter struct { + w io.WriteCloser + h hash.Hash +} + +func (w *seMDCWriter) Write(buf []byte) (n int, err error) { + w.h.Write(buf) + return w.w.Write(buf) +} + +func (w *seMDCWriter) Close() (err error) { + var buf [mdcTrailerSize]byte + + buf[0] = mdcPacketTagByte + buf[1] = sha1.Size + w.h.Write(buf[:2]) + digest := w.h.Sum(nil) + copy(buf[2:], digest) + + _, err = w.w.Write(buf[:]) + if err != nil { + return + } + return w.w.Close() +} + +// noOpCloser is like an ioutil.NopCloser, but for an io.Writer. +type noOpCloser struct { + w io.Writer +} + +func (c noOpCloser) Write(data []byte) (n int, err error) { + return c.w.Write(data) +} + +func (c noOpCloser) Close() error { + return nil +} + +// SerializeSymmetricallyEncrypted serializes a symmetrically encrypted packet +// to w and returns a WriteCloser to which the to-be-encrypted packets can be +// written. +// If config is nil, sensible defaults will be used. +func SerializeSymmetricallyEncrypted(w io.Writer, c CipherFunction, key []byte, config *Config) (contents io.WriteCloser, err error) { + if c.KeySize() != len(key) { + return nil, errors.InvalidArgumentError("SymmetricallyEncrypted.Serialize: bad key length") + } + writeCloser := noOpCloser{w} + ciphertext, err := serializeStreamHeader(writeCloser, packetTypeSymmetricallyEncryptedMDC) + if err != nil { + return + } + + _, err = ciphertext.Write([]byte{symmetricallyEncryptedVersion}) + if err != nil { + return + } + + block := c.new(key) + blockSize := block.BlockSize() + iv := make([]byte, blockSize) + _, err = config.Random().Read(iv) + if err != nil { + return + } + s, prefix := NewOCFBEncrypter(block, iv, OCFBNoResync) + _, err = ciphertext.Write(prefix) + if err != nil { + return + } + plaintext := cipher.StreamWriter{S: s, W: ciphertext} + + h := sha1.New() + h.Write(iv) + h.Write(iv[blockSize-2:]) + contents = &seMDCWriter{w: plaintext, h: h} + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go new file mode 100644 index 0000000..c5c00f7 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/symmetrically_encrypted_test.go @@ -0,0 +1,123 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "crypto/sha1" + "encoding/hex" + "golang.org/x/crypto/openpgp/errors" + "io" + "io/ioutil" + "testing" +) + +// TestReader wraps a []byte and returns reads of a specific length. +type testReader struct { + data []byte + stride int +} + +func (t *testReader) Read(buf []byte) (n int, err error) { + n = t.stride + if n > len(t.data) { + n = len(t.data) + } + if n > len(buf) { + n = len(buf) + } + copy(buf, t.data) + t.data = t.data[n:] + if len(t.data) == 0 { + err = io.EOF + } + return +} + +func testMDCReader(t *testing.T) { + mdcPlaintext, _ := hex.DecodeString(mdcPlaintextHex) + + for stride := 1; stride < len(mdcPlaintext)/2; stride++ { + r := &testReader{data: mdcPlaintext, stride: stride} + mdcReader := &seMDCReader{in: r, h: sha1.New()} + body, err := ioutil.ReadAll(mdcReader) + if err != nil { + t.Errorf("stride: %d, error: %s", stride, err) + continue + } + if !bytes.Equal(body, mdcPlaintext[:len(mdcPlaintext)-22]) { + t.Errorf("stride: %d: bad contents %x", stride, body) + continue + } + + err = mdcReader.Close() + if err != nil { + t.Errorf("stride: %d, error on Close: %s", stride, err) + } + } + + mdcPlaintext[15] ^= 80 + + r := &testReader{data: mdcPlaintext, stride: 2} + mdcReader := &seMDCReader{in: r, h: sha1.New()} + _, err := ioutil.ReadAll(mdcReader) + if err != nil { + t.Errorf("corruption test, error: %s", err) + return + } + err = mdcReader.Close() + if err == nil { + t.Error("corruption: no error") + } else if _, ok := err.(*errors.SignatureError); !ok { + t.Errorf("corruption: expected SignatureError, got: %s", err) + } +} + +const mdcPlaintextHex = "a302789c3b2d93c4e0eb9aba22283539b3203335af44a134afb800c849cb4c4de10200aff40b45d31432c80cb384299a0655966d6939dfdeed1dddf980" + +func TestSerialize(t *testing.T) { + buf := bytes.NewBuffer(nil) + c := CipherAES128 + key := make([]byte, c.KeySize()) + + w, err := SerializeSymmetricallyEncrypted(buf, c, key, nil) + if err != nil { + t.Errorf("error from SerializeSymmetricallyEncrypted: %s", err) + return + } + + contents := []byte("hello world\n") + + w.Write(contents) + w.Close() + + p, err := Read(buf) + if err != nil { + t.Errorf("error from Read: %s", err) + return + } + + se, ok := p.(*SymmetricallyEncrypted) + if !ok { + t.Errorf("didn't read a *SymmetricallyEncrypted") + return + } + + r, err := se.Decrypt(c, key) + if err != nil { + t.Errorf("error from Decrypt: %s", err) + return + } + + contentsCopy := bytes.NewBuffer(nil) + _, err = io.Copy(contentsCopy, r) + if err != nil { + t.Errorf("error from io.Copy: %s", err) + return + } + if !bytes.Equal(contentsCopy.Bytes(), contents) { + t.Errorf("contents not equal got: %x want: %x", contentsCopy.Bytes(), contents) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go b/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go new file mode 100644 index 0000000..96a2b38 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/userattribute.go @@ -0,0 +1,91 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "image" + "image/jpeg" + "io" + "io/ioutil" +) + +const UserAttrImageSubpacket = 1 + +// UserAttribute is capable of storing other types of data about a user +// beyond name, email and a text comment. In practice, user attributes are typically used +// to store a signed thumbnail photo JPEG image of the user. +// See RFC 4880, section 5.12. +type UserAttribute struct { + Contents []*OpaqueSubpacket +} + +// NewUserAttributePhoto creates a user attribute packet +// containing the given images. +func NewUserAttributePhoto(photos ...image.Image) (uat *UserAttribute, err error) { + uat = new(UserAttribute) + for _, photo := range photos { + var buf bytes.Buffer + // RFC 4880, Section 5.12.1. + data := []byte{ + 0x10, 0x00, // Little-endian image header length (16 bytes) + 0x01, // Image header version 1 + 0x01, // JPEG + 0, 0, 0, 0, // 12 reserved octets, must be all zero. + 0, 0, 0, 0, + 0, 0, 0, 0} + if _, err = buf.Write(data); err != nil { + return + } + if err = jpeg.Encode(&buf, photo, nil); err != nil { + return + } + uat.Contents = append(uat.Contents, &OpaqueSubpacket{ + SubType: UserAttrImageSubpacket, + Contents: buf.Bytes()}) + } + return +} + +// NewUserAttribute creates a new user attribute packet containing the given subpackets. +func NewUserAttribute(contents ...*OpaqueSubpacket) *UserAttribute { + return &UserAttribute{Contents: contents} +} + +func (uat *UserAttribute) parse(r io.Reader) (err error) { + // RFC 4880, section 5.13 + b, err := ioutil.ReadAll(r) + if err != nil { + return + } + uat.Contents, err = OpaqueSubpackets(b) + return +} + +// Serialize marshals the user attribute to w in the form of an OpenPGP packet, including +// header. +func (uat *UserAttribute) Serialize(w io.Writer) (err error) { + var buf bytes.Buffer + for _, sp := range uat.Contents { + sp.Serialize(&buf) + } + if err = serializeHeader(w, packetTypeUserAttribute, buf.Len()); err != nil { + return err + } + _, err = w.Write(buf.Bytes()) + return +} + +// ImageData returns zero or more byte slices, each containing +// JPEG File Interchange Format (JFIF), for each photo in the +// the user attribute packet. +func (uat *UserAttribute) ImageData() (imageData [][]byte) { + for _, sp := range uat.Contents { + if sp.SubType == UserAttrImageSubpacket && len(sp.Contents) > 16 { + imageData = append(imageData, sp.Contents[16:]) + } + } + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go b/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go new file mode 100644 index 0000000..13ca514 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/userattribute_test.go @@ -0,0 +1,109 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "bytes" + "encoding/base64" + "image/color" + "image/jpeg" + "testing" +) + +func TestParseUserAttribute(t *testing.T) { + r := base64.NewDecoder(base64.StdEncoding, bytes.NewBufferString(userAttributePacket)) + for i := 0; i < 2; i++ { + p, err := Read(r) + if err != nil { + t.Fatal(err) + } + uat := p.(*UserAttribute) + imgs := uat.ImageData() + if len(imgs) != 1 { + t.Errorf("Unexpected number of images in user attribute packet: %d", len(imgs)) + } + if len(imgs[0]) != 3395 { + t.Errorf("Unexpected JPEG image size: %d", len(imgs[0])) + } + img, err := jpeg.Decode(bytes.NewBuffer(imgs[0])) + if err != nil { + t.Errorf("Error decoding JPEG image: %v", err) + } + // A pixel in my right eye. + pixel := color.NRGBAModel.Convert(img.At(56, 36)) + ref := color.NRGBA{R: 157, G: 128, B: 124, A: 255} + if pixel != ref { + t.Errorf("Unexpected pixel color: %v", pixel) + } + w := bytes.NewBuffer(nil) + err = uat.Serialize(w) + if err != nil { + t.Errorf("Error writing user attribute: %v", err) + } + r = bytes.NewBuffer(w.Bytes()) + } +} + +const userAttributePacket = ` +0cyWzJQBEAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpGSUYAAQIAAAEAAQAA/9sAQwAFAwQEBAMFBAQE +BQUFBgcMCAcHBwcPCgsJDBEPEhIRDxEQExYcFxMUGhUQERghGBocHR8fHxMXIiQiHiQcHh8e/9sA +QwEFBQUHBgcOCAgOHhQRFB4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4e +Hh4eHh4eHh4e/8AAEQgAZABkAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYH +CAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHw +JDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6 +g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk +5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgMEBQYHCAkKC//EALURAAIB +AgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEX +GBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKT +lJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX2 +9/j5+v/aAAwDAQACEQMRAD8A5uGP06VehQ4pIox04q5EnHSvAep+hIIl4zVuMHGPWmRrUWtalaaN +pU2oXsgSGJSxPr6ClvoitErs0Itqjc7BQOpPAFYmrfEnwjojtHNqaXEynBjtx5hH4jj9a8B8d+Od +W8UXZjWR4LJT+7t0Jwfc+prnIdO1CWZEW2mZ3HyDactXXDB3V5s8evm1namj6r0H4weCLtxG+ova +ueP30RA/MV6not1bX0Ed1ZzxzwyDKvGwZSPqK+Ff+ES8R8t/ZV2oHUmM10Hgbxp4m8BatEfNnWBH +/eWshOxx9Kmpg4te49RUM1kn+8Wh9zQ4P1FaMC7l465rjPh14y0fxnoseoaXOpfaPOgJ+eI98j09 +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` diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userid.go b/vendor/golang.org/x/crypto/openpgp/packet/userid.go new file mode 100644 index 0000000..d6bea7d --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/userid.go @@ -0,0 +1,160 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "io" + "io/ioutil" + "strings" +) + +// UserId contains text that is intended to represent the name and email +// address of the key holder. See RFC 4880, section 5.11. By convention, this +// takes the form "Full Name (Comment) " +type UserId struct { + Id string // By convention, this takes the form "Full Name (Comment) " which is split out in the fields below. + + Name, Comment, Email string +} + +func hasInvalidCharacters(s string) bool { + for _, c := range s { + switch c { + case '(', ')', '<', '>', 0: + return true + } + } + return false +} + +// NewUserId returns a UserId or nil if any of the arguments contain invalid +// characters. The invalid characters are '\x00', '(', ')', '<' and '>' +func NewUserId(name, comment, email string) *UserId { + // RFC 4880 doesn't deal with the structure of userid strings; the + // name, comment and email form is just a convention. However, there's + // no convention about escaping the metacharacters and GPG just refuses + // to create user ids where, say, the name contains a '('. We mirror + // this behaviour. + + if hasInvalidCharacters(name) || hasInvalidCharacters(comment) || hasInvalidCharacters(email) { + return nil + } + + uid := new(UserId) + uid.Name, uid.Comment, uid.Email = name, comment, email + uid.Id = name + if len(comment) > 0 { + if len(uid.Id) > 0 { + uid.Id += " " + } + uid.Id += "(" + uid.Id += comment + uid.Id += ")" + } + if len(email) > 0 { + if len(uid.Id) > 0 { + uid.Id += " " + } + uid.Id += "<" + uid.Id += email + uid.Id += ">" + } + return uid +} + +func (uid *UserId) parse(r io.Reader) (err error) { + // RFC 4880, section 5.11 + b, err := ioutil.ReadAll(r) + if err != nil { + return + } + uid.Id = string(b) + uid.Name, uid.Comment, uid.Email = parseUserId(uid.Id) + return +} + +// Serialize marshals uid to w in the form of an OpenPGP packet, including +// header. +func (uid *UserId) Serialize(w io.Writer) error { + err := serializeHeader(w, packetTypeUserId, len(uid.Id)) + if err != nil { + return err + } + _, err = w.Write([]byte(uid.Id)) + return err +} + +// parseUserId extracts the name, comment and email from a user id string that +// is formatted as "Full Name (Comment) ". +func parseUserId(id string) (name, comment, email string) { + var n, c, e struct { + start, end int + } + var state int + + for offset, rune := range id { + switch state { + case 0: + // Entering name + n.start = offset + state = 1 + fallthrough + case 1: + // In name + if rune == '(' { + state = 2 + n.end = offset + } else if rune == '<' { + state = 5 + n.end = offset + } + case 2: + // Entering comment + c.start = offset + state = 3 + fallthrough + case 3: + // In comment + if rune == ')' { + state = 4 + c.end = offset + } + case 4: + // Between comment and email + if rune == '<' { + state = 5 + } + case 5: + // Entering email + e.start = offset + state = 6 + fallthrough + case 6: + // In email + if rune == '>' { + state = 7 + e.end = offset + } + default: + // After email + } + } + switch state { + case 1: + // ended in the name + n.end = len(id) + case 3: + // ended in comment + c.end = len(id) + case 6: + // ended in email + e.end = len(id) + } + + name = strings.TrimSpace(id[n.start:n.end]) + comment = strings.TrimSpace(id[c.start:c.end]) + email = strings.TrimSpace(id[e.start:e.end]) + return +} diff --git a/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go b/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go new file mode 100644 index 0000000..2968193 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/packet/userid_test.go @@ -0,0 +1,87 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package packet + +import ( + "testing" +) + +var userIdTests = []struct { + id string + name, comment, email string +}{ + {"", "", "", ""}, + {"John Smith", "John Smith", "", ""}, + {"John Smith ()", "John Smith", "", ""}, + {"John Smith () <>", "John Smith", "", ""}, + {"(comment", "", "comment", ""}, + {"(comment)", "", "comment", ""}, + {" sdfk", "", "", "email"}, + {" John Smith ( Comment ) asdkflj < email > lksdfj", "John Smith", "Comment", "email"}, + {" John Smith < email > lksdfj", "John Smith", "", "email"}, + {"("}, + {"foo", "bar", "", "foo (bar)"}, + {"foo", "", "baz", "foo "}, + {"", "bar", "baz", "(bar) "}, + {"foo", "bar", "baz", "foo (bar) "}, +} + +func TestNewUserId(t *testing.T) { + for i, test := range newUserIdTests { + uid := NewUserId(test.name, test.comment, test.email) + if uid == nil { + t.Errorf("#%d: returned nil", i) + continue + } + if uid.Id != test.id { + t.Errorf("#%d: got '%s', want '%s'", i, uid.Id, test.id) + } + } +} + +var invalidNewUserIdTests = []struct { + name, comment, email string +}{ + {"foo(", "", ""}, + {"foo<", "", ""}, + {"", "bar)", ""}, + {"", "bar<", ""}, + {"", "", "baz>"}, + {"", "", "baz)"}, + {"", "", "baz\x00"}, +} + +func TestNewUserIdWithInvalidInput(t *testing.T) { + for i, test := range invalidNewUserIdTests { + if uid := NewUserId(test.name, test.comment, test.email); uid != nil { + t.Errorf("#%d: returned non-nil value: %#v", i, uid) + } + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/read.go b/vendor/golang.org/x/crypto/openpgp/read.go new file mode 100644 index 0000000..6ec664f --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/read.go @@ -0,0 +1,442 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package openpgp implements high level operations on OpenPGP messages. +package openpgp // import "golang.org/x/crypto/openpgp" + +import ( + "crypto" + _ "crypto/sha256" + "hash" + "io" + "strconv" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" +) + +// SignatureType is the armor type for a PGP signature. +var SignatureType = "PGP SIGNATURE" + +// readArmored reads an armored block with the given type. +func readArmored(r io.Reader, expectedType string) (body io.Reader, err error) { + block, err := armor.Decode(r) + if err != nil { + return + } + + if block.Type != expectedType { + return nil, errors.InvalidArgumentError("expected '" + expectedType + "', got: " + block.Type) + } + + return block.Body, nil +} + +// MessageDetails contains the result of parsing an OpenPGP encrypted and/or +// signed message. +type MessageDetails struct { + IsEncrypted bool // true if the message was encrypted. + EncryptedToKeyIds []uint64 // the list of recipient key ids. + IsSymmetricallyEncrypted bool // true if a passphrase could have decrypted the message. + DecryptedWith Key // the private key used to decrypt the message, if any. + IsSigned bool // true if the message is signed. + SignedByKeyId uint64 // the key id of the signer, if any. + SignedBy *Key // the key of the signer, if available. + LiteralData *packet.LiteralData // the metadata of the contents + UnverifiedBody io.Reader // the contents of the message. + + // If IsSigned is true and SignedBy is non-zero then the signature will + // be verified as UnverifiedBody is read. The signature cannot be + // checked until the whole of UnverifiedBody is read so UnverifiedBody + // must be consumed until EOF before the data can be trusted. Even if a + // message isn't signed (or the signer is unknown) the data may contain + // an authentication code that is only checked once UnverifiedBody has + // been consumed. Once EOF has been seen, the following fields are + // valid. (An authentication code failure is reported as a + // SignatureError error when reading from UnverifiedBody.) + SignatureError error // nil if the signature is good. + Signature *packet.Signature // the signature packet itself, if v4 (default) + SignatureV3 *packet.SignatureV3 // the signature packet if it is a v2 or v3 signature + + decrypted io.ReadCloser +} + +// A PromptFunction is used as a callback by functions that may need to decrypt +// a private key, or prompt for a passphrase. It is called with a list of +// acceptable, encrypted private keys and a boolean that indicates whether a +// passphrase is usable. It should either decrypt a private key or return a +// passphrase to try. If the decrypted private key or given passphrase isn't +// correct, the function will be called again, forever. Any error returned will +// be passed up. +type PromptFunction func(keys []Key, symmetric bool) ([]byte, error) + +// A keyEnvelopePair is used to store a private key with the envelope that +// contains a symmetric key, encrypted with that key. +type keyEnvelopePair struct { + key Key + encryptedKey *packet.EncryptedKey +} + +// ReadMessage parses an OpenPGP message that may be signed and/or encrypted. +// The given KeyRing should contain both public keys (for signature +// verification) and, possibly encrypted, private keys for decrypting. +// If config is nil, sensible defaults will be used. +func ReadMessage(r io.Reader, keyring KeyRing, prompt PromptFunction, config *packet.Config) (md *MessageDetails, err error) { + var p packet.Packet + + var symKeys []*packet.SymmetricKeyEncrypted + var pubKeys []keyEnvelopePair + var se *packet.SymmetricallyEncrypted + + packets := packet.NewReader(r) + md = new(MessageDetails) + md.IsEncrypted = true + + // The message, if encrypted, starts with a number of packets + // containing an encrypted decryption key. The decryption key is either + // encrypted to a public key, or with a passphrase. This loop + // collects these packets. +ParsePackets: + for { + p, err = packets.Next() + if err != nil { + return nil, err + } + switch p := p.(type) { + case *packet.SymmetricKeyEncrypted: + // This packet contains the decryption key encrypted with a passphrase. + md.IsSymmetricallyEncrypted = true + symKeys = append(symKeys, p) + case *packet.EncryptedKey: + // This packet contains the decryption key encrypted to a public key. + md.EncryptedToKeyIds = append(md.EncryptedToKeyIds, p.KeyId) + switch p.Algo { + case packet.PubKeyAlgoRSA, packet.PubKeyAlgoRSAEncryptOnly, packet.PubKeyAlgoElGamal: + break + default: + continue + } + var keys []Key + if p.KeyId == 0 { + keys = keyring.DecryptionKeys() + } else { + keys = keyring.KeysById(p.KeyId) + } + for _, k := range keys { + pubKeys = append(pubKeys, keyEnvelopePair{k, p}) + } + case *packet.SymmetricallyEncrypted: + se = p + break ParsePackets + case *packet.Compressed, *packet.LiteralData, *packet.OnePassSignature: + // This message isn't encrypted. + if len(symKeys) != 0 || len(pubKeys) != 0 { + return nil, errors.StructuralError("key material not followed by encrypted message") + } + packets.Unread(p) + return readSignedMessage(packets, nil, keyring) + } + } + + var candidates []Key + var decrypted io.ReadCloser + + // Now that we have the list of encrypted keys we need to decrypt at + // least one of them or, if we cannot, we need to call the prompt + // function so that it can decrypt a key or give us a passphrase. +FindKey: + for { + // See if any of the keys already have a private key available + candidates = candidates[:0] + candidateFingerprints := make(map[string]bool) + + for _, pk := range pubKeys { + if pk.key.PrivateKey == nil { + continue + } + if !pk.key.PrivateKey.Encrypted { + if len(pk.encryptedKey.Key) == 0 { + pk.encryptedKey.Decrypt(pk.key.PrivateKey, config) + } + if len(pk.encryptedKey.Key) == 0 { + continue + } + decrypted, err = se.Decrypt(pk.encryptedKey.CipherFunc, pk.encryptedKey.Key) + if err != nil && err != errors.ErrKeyIncorrect { + return nil, err + } + if decrypted != nil { + md.DecryptedWith = pk.key + break FindKey + } + } else { + fpr := string(pk.key.PublicKey.Fingerprint[:]) + if v := candidateFingerprints[fpr]; v { + continue + } + candidates = append(candidates, pk.key) + candidateFingerprints[fpr] = true + } + } + + if len(candidates) == 0 && len(symKeys) == 0 { + return nil, errors.ErrKeyIncorrect + } + + if prompt == nil { + return nil, errors.ErrKeyIncorrect + } + + passphrase, err := prompt(candidates, len(symKeys) != 0) + if err != nil { + return nil, err + } + + // Try the symmetric passphrase first + if len(symKeys) != 0 && passphrase != nil { + for _, s := range symKeys { + key, cipherFunc, err := s.Decrypt(passphrase) + if err == nil { + decrypted, err = se.Decrypt(cipherFunc, key) + if err != nil && err != errors.ErrKeyIncorrect { + return nil, err + } + if decrypted != nil { + break FindKey + } + } + + } + } + } + + md.decrypted = decrypted + if err := packets.Push(decrypted); err != nil { + return nil, err + } + return readSignedMessage(packets, md, keyring) +} + +// readSignedMessage reads a possibly signed message if mdin is non-zero then +// that structure is updated and returned. Otherwise a fresh MessageDetails is +// used. +func readSignedMessage(packets *packet.Reader, mdin *MessageDetails, keyring KeyRing) (md *MessageDetails, err error) { + if mdin == nil { + mdin = new(MessageDetails) + } + md = mdin + + var p packet.Packet + var h hash.Hash + var wrappedHash hash.Hash +FindLiteralData: + for { + p, err = packets.Next() + if err != nil { + return nil, err + } + switch p := p.(type) { + case *packet.Compressed: + if err := packets.Push(p.Body); err != nil { + return nil, err + } + case *packet.OnePassSignature: + if !p.IsLast { + return nil, errors.UnsupportedError("nested signatures") + } + + h, wrappedHash, err = hashForSignature(p.Hash, p.SigType) + if err != nil { + md = nil + return + } + + md.IsSigned = true + md.SignedByKeyId = p.KeyId + keys := keyring.KeysByIdUsage(p.KeyId, packet.KeyFlagSign) + if len(keys) > 0 { + md.SignedBy = &keys[0] + } + case *packet.LiteralData: + md.LiteralData = p + break FindLiteralData + } + } + + if md.SignedBy != nil { + md.UnverifiedBody = &signatureCheckReader{packets, h, wrappedHash, md} + } else if md.decrypted != nil { + md.UnverifiedBody = checkReader{md} + } else { + md.UnverifiedBody = md.LiteralData.Body + } + + return md, nil +} + +// hashForSignature returns a pair of hashes that can be used to verify a +// signature. The signature may specify that the contents of the signed message +// should be preprocessed (i.e. to normalize line endings). Thus this function +// returns two hashes. The second should be used to hash the message itself and +// performs any needed preprocessing. +func hashForSignature(hashId crypto.Hash, sigType packet.SignatureType) (hash.Hash, hash.Hash, error) { + if !hashId.Available() { + return nil, nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hashId))) + } + h := hashId.New() + + switch sigType { + case packet.SigTypeBinary: + return h, h, nil + case packet.SigTypeText: + return h, NewCanonicalTextHash(h), nil + } + + return nil, nil, errors.UnsupportedError("unsupported signature type: " + strconv.Itoa(int(sigType))) +} + +// checkReader wraps an io.Reader from a LiteralData packet. When it sees EOF +// it closes the ReadCloser from any SymmetricallyEncrypted packet to trigger +// MDC checks. +type checkReader struct { + md *MessageDetails +} + +func (cr checkReader) Read(buf []byte) (n int, err error) { + n, err = cr.md.LiteralData.Body.Read(buf) + if err == io.EOF { + mdcErr := cr.md.decrypted.Close() + if mdcErr != nil { + err = mdcErr + } + } + return +} + +// signatureCheckReader wraps an io.Reader from a LiteralData packet and hashes +// the data as it is read. When it sees an EOF from the underlying io.Reader +// it parses and checks a trailing Signature packet and triggers any MDC checks. +type signatureCheckReader struct { + packets *packet.Reader + h, wrappedHash hash.Hash + md *MessageDetails +} + +func (scr *signatureCheckReader) Read(buf []byte) (n int, err error) { + n, err = scr.md.LiteralData.Body.Read(buf) + scr.wrappedHash.Write(buf[:n]) + if err == io.EOF { + var p packet.Packet + p, scr.md.SignatureError = scr.packets.Next() + if scr.md.SignatureError != nil { + return + } + + var ok bool + if scr.md.Signature, ok = p.(*packet.Signature); ok { + scr.md.SignatureError = scr.md.SignedBy.PublicKey.VerifySignature(scr.h, scr.md.Signature) + } else if scr.md.SignatureV3, ok = p.(*packet.SignatureV3); ok { + scr.md.SignatureError = scr.md.SignedBy.PublicKey.VerifySignatureV3(scr.h, scr.md.SignatureV3) + } else { + scr.md.SignatureError = errors.StructuralError("LiteralData not followed by Signature") + return + } + + // The SymmetricallyEncrypted packet, if any, might have an + // unsigned hash of its own. In order to check this we need to + // close that Reader. + if scr.md.decrypted != nil { + mdcErr := scr.md.decrypted.Close() + if mdcErr != nil { + err = mdcErr + } + } + } + return +} + +// CheckDetachedSignature takes a signed file and a detached signature and +// returns the signer if the signature is valid. If the signer isn't known, +// ErrUnknownIssuer is returned. +func CheckDetachedSignature(keyring KeyRing, signed, signature io.Reader) (signer *Entity, err error) { + var issuerKeyId uint64 + var hashFunc crypto.Hash + var sigType packet.SignatureType + var keys []Key + var p packet.Packet + + packets := packet.NewReader(signature) + for { + p, err = packets.Next() + if err == io.EOF { + return nil, errors.ErrUnknownIssuer + } + if err != nil { + return nil, err + } + + switch sig := p.(type) { + case *packet.Signature: + if sig.IssuerKeyId == nil { + return nil, errors.StructuralError("signature doesn't have an issuer") + } + issuerKeyId = *sig.IssuerKeyId + hashFunc = sig.Hash + sigType = sig.SigType + case *packet.SignatureV3: + issuerKeyId = sig.IssuerKeyId + hashFunc = sig.Hash + sigType = sig.SigType + default: + return nil, errors.StructuralError("non signature packet found") + } + + keys = keyring.KeysByIdUsage(issuerKeyId, packet.KeyFlagSign) + if len(keys) > 0 { + break + } + } + + if len(keys) == 0 { + panic("unreachable") + } + + h, wrappedHash, err := hashForSignature(hashFunc, sigType) + if err != nil { + return nil, err + } + + if _, err := io.Copy(wrappedHash, signed); err != nil && err != io.EOF { + return nil, err + } + + for _, key := range keys { + switch sig := p.(type) { + case *packet.Signature: + err = key.PublicKey.VerifySignature(h, sig) + case *packet.SignatureV3: + err = key.PublicKey.VerifySignatureV3(h, sig) + default: + panic("unreachable") + } + + if err == nil { + return key.Entity, nil + } + } + + return nil, err +} + +// CheckArmoredDetachedSignature performs the same actions as +// CheckDetachedSignature but expects the signature to be armored. +func CheckArmoredDetachedSignature(keyring KeyRing, signed, signature io.Reader) (signer *Entity, err error) { + body, err := readArmored(signature, SignatureType) + if err != nil { + return + } + + return CheckDetachedSignature(keyring, signed, body) +} diff --git a/vendor/golang.org/x/crypto/openpgp/read_test.go b/vendor/golang.org/x/crypto/openpgp/read_test.go new file mode 100644 index 0000000..1fbfbac --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/read_test.go @@ -0,0 +1,613 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "bytes" + _ "crypto/sha512" + "encoding/hex" + "io" + "io/ioutil" + "strings" + "testing" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" +) + +func readerFromHex(s string) io.Reader { + data, err := hex.DecodeString(s) + if err != nil { + panic("readerFromHex: bad input") + } + return bytes.NewBuffer(data) +} + +func TestReadKeyRing(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + if err != nil { + t.Error(err) + return + } + if len(kring) != 2 || uint32(kring[0].PrimaryKey.KeyId) != 0xC20C31BB || uint32(kring[1].PrimaryKey.KeyId) != 0x1E35246B { + t.Errorf("bad keyring: %#v", kring) + } +} + +func TestRereadKeyRing(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + if err != nil { + t.Errorf("error in initial parse: %s", err) + return + } + out := new(bytes.Buffer) + err = kring[0].Serialize(out) + if err != nil { + t.Errorf("error in serialization: %s", err) + return + } + kring, err = ReadKeyRing(out) + if err != nil { + t.Errorf("error in second parse: %s", err) + return + } + + if len(kring) != 1 || uint32(kring[0].PrimaryKey.KeyId) != 0xC20C31BB { + t.Errorf("bad keyring: %#v", kring) + } +} + +func TestReadPrivateKeyRing(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + if err != nil { + t.Error(err) + return + } + if len(kring) != 2 || uint32(kring[0].PrimaryKey.KeyId) != 0xC20C31BB || uint32(kring[1].PrimaryKey.KeyId) != 0x1E35246B || kring[0].PrimaryKey == nil { + t.Errorf("bad keyring: %#v", kring) + } +} + +func TestReadDSAKey(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(dsaTestKeyHex)) + if err != nil { + t.Error(err) + return + } + if len(kring) != 1 || uint32(kring[0].PrimaryKey.KeyId) != 0x0CCC0360 { + t.Errorf("bad parse: %#v", kring) + } +} + +func TestReadP256Key(t *testing.T) { + kring, err := ReadKeyRing(readerFromHex(p256TestKeyHex)) + if err != nil { + t.Error(err) + return + } + if len(kring) != 1 || uint32(kring[0].PrimaryKey.KeyId) != 0x5918513E { + t.Errorf("bad parse: %#v", kring) + } +} + +func TestDSAHashTruncatation(t *testing.T) { + // dsaKeyWithSHA512 was generated with GnuPG and --cert-digest-algo + // SHA512 in order to require DSA hash truncation to verify correctly. + _, err := ReadKeyRing(readerFromHex(dsaKeyWithSHA512)) + if err != nil { + t.Error(err) + } +} + +func TestGetKeyById(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + + keys := kring.KeysById(0xa34d7e18c20c31bb) + if len(keys) != 1 || keys[0].Entity != kring[0] { + t.Errorf("bad result for 0xa34d7e18c20c31bb: %#v", keys) + } + + keys = kring.KeysById(0xfd94408d4543314f) + if len(keys) != 1 || keys[0].Entity != kring[0] { + t.Errorf("bad result for 0xa34d7e18c20c31bb: %#v", keys) + } +} + +func checkSignedMessage(t *testing.T, signedHex, expected string) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + + md, err := ReadMessage(readerFromHex(signedHex), kring, nil, nil) + if err != nil { + t.Error(err) + return + } + + if !md.IsSigned || md.SignedByKeyId != 0xa34d7e18c20c31bb || md.SignedBy == nil || md.IsEncrypted || md.IsSymmetricallyEncrypted || len(md.EncryptedToKeyIds) != 0 || md.IsSymmetricallyEncrypted { + t.Errorf("bad MessageDetails: %#v", md) + } + + contents, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("error reading UnverifiedBody: %s", err) + } + if string(contents) != expected { + t.Errorf("bad UnverifiedBody got:%s want:%s", string(contents), expected) + } + if md.SignatureError != nil || md.Signature == nil { + t.Errorf("failed to validate: %s", md.SignatureError) + } +} + +func TestSignedMessage(t *testing.T) { + checkSignedMessage(t, signedMessageHex, signedInput) +} + +func TestTextSignedMessage(t *testing.T) { + checkSignedMessage(t, signedTextMessageHex, signedTextInput) +} + +// The reader should detect "compressed quines", which are compressed +// packets that expand into themselves and cause an infinite recursive +// parsing loop. +// The packet in this test case comes from Taylor R. Campbell at +// http://mumble.net/~campbell/misc/pgp-quine/ +func TestCampbellQuine(t *testing.T) { + md, err := ReadMessage(readerFromHex(campbellQuine), nil, nil, nil) + if md != nil { + t.Errorf("Reading a compressed quine should not return any data: %#v", md) + } + structural, ok := err.(errors.StructuralError) + if !ok { + t.Fatalf("Unexpected class of error: %T", err) + } + if !strings.Contains(string(structural), "too many layers of packets") { + t.Fatalf("Unexpected error: %s", err) + } +} + +var signedEncryptedMessageTests = []struct { + keyRingHex string + messageHex string + signedByKeyId uint64 + encryptedToKeyId uint64 +}{ + { + testKeys1And2PrivateHex, + signedEncryptedMessageHex, + 0xa34d7e18c20c31bb, + 0x2a67d68660df41c7, + }, + { + dsaElGamalTestKeysHex, + signedEncryptedMessage2Hex, + 0x33af447ccd759b09, + 0xcf6a7abcd43e3673, + }, +} + +func TestSignedEncryptedMessage(t *testing.T) { + for i, test := range signedEncryptedMessageTests { + expected := "Signed and encrypted message\n" + kring, _ := ReadKeyRing(readerFromHex(test.keyRingHex)) + prompt := func(keys []Key, symmetric bool) ([]byte, error) { + if symmetric { + t.Errorf("prompt: message was marked as symmetrically encrypted") + return nil, errors.ErrKeyIncorrect + } + + if len(keys) == 0 { + t.Error("prompt: no keys requested") + return nil, errors.ErrKeyIncorrect + } + + err := keys[0].PrivateKey.Decrypt([]byte("passphrase")) + if err != nil { + t.Errorf("prompt: error decrypting key: %s", err) + return nil, errors.ErrKeyIncorrect + } + + return nil, nil + } + + md, err := ReadMessage(readerFromHex(test.messageHex), kring, prompt, nil) + if err != nil { + t.Errorf("#%d: error reading message: %s", i, err) + return + } + + if !md.IsSigned || md.SignedByKeyId != test.signedByKeyId || md.SignedBy == nil || !md.IsEncrypted || md.IsSymmetricallyEncrypted || len(md.EncryptedToKeyIds) == 0 || md.EncryptedToKeyIds[0] != test.encryptedToKeyId { + t.Errorf("#%d: bad MessageDetails: %#v", i, md) + } + + contents, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("#%d: error reading UnverifiedBody: %s", i, err) + } + if string(contents) != expected { + t.Errorf("#%d: bad UnverifiedBody got:%s want:%s", i, string(contents), expected) + } + + if md.SignatureError != nil || md.Signature == nil { + t.Errorf("#%d: failed to validate: %s", i, md.SignatureError) + } + } +} + +func TestUnspecifiedRecipient(t *testing.T) { + expected := "Recipient unspecified\n" + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + + md, err := ReadMessage(readerFromHex(recipientUnspecifiedHex), kring, nil, nil) + if err != nil { + t.Errorf("error reading message: %s", err) + return + } + + contents, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("error reading UnverifiedBody: %s", err) + } + if string(contents) != expected { + t.Errorf("bad UnverifiedBody got:%s want:%s", string(contents), expected) + } +} + +func TestSymmetricallyEncrypted(t *testing.T) { + firstTimeCalled := true + + prompt := func(keys []Key, symmetric bool) ([]byte, error) { + if len(keys) != 0 { + t.Errorf("prompt: len(keys) = %d (want 0)", len(keys)) + } + + if !symmetric { + t.Errorf("symmetric is not set") + } + + if firstTimeCalled { + firstTimeCalled = false + return []byte("wrongpassword"), nil + } + + return []byte("password"), nil + } + + md, err := ReadMessage(readerFromHex(symmetricallyEncryptedCompressedHex), nil, prompt, nil) + if err != nil { + t.Errorf("ReadMessage: %s", err) + return + } + + contents, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("ReadAll: %s", err) + } + + expectedCreationTime := uint32(1295992998) + if md.LiteralData.Time != expectedCreationTime { + t.Errorf("LiteralData.Time is %d, want %d", md.LiteralData.Time, expectedCreationTime) + } + + const expected = "Symmetrically encrypted.\n" + if string(contents) != expected { + t.Errorf("contents got: %s want: %s", string(contents), expected) + } +} + +func testDetachedSignature(t *testing.T, kring KeyRing, signature io.Reader, sigInput, tag string, expectedSignerKeyId uint64) { + signed := bytes.NewBufferString(sigInput) + signer, err := CheckDetachedSignature(kring, signed, signature) + if err != nil { + t.Errorf("%s: signature error: %s", tag, err) + return + } + if signer == nil { + t.Errorf("%s: signer is nil", tag) + return + } + if signer.PrimaryKey.KeyId != expectedSignerKeyId { + t.Errorf("%s: wrong signer got:%x want:%x", tag, signer.PrimaryKey.KeyId, expectedSignerKeyId) + } +} + +func TestDetachedSignature(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureHex), signedInput, "binary", testKey1KeyId) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureTextHex), signedInput, "text", testKey1KeyId) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureV3TextHex), signedInput, "v3", testKey1KeyId) + + incorrectSignedInput := signedInput + "X" + _, err := CheckDetachedSignature(kring, bytes.NewBufferString(incorrectSignedInput), readerFromHex(detachedSignatureHex)) + if err == nil { + t.Fatal("CheckDetachedSignature returned without error for bad signature") + } + if err == errors.ErrUnknownIssuer { + t.Fatal("CheckDetachedSignature returned ErrUnknownIssuer when the signer was known, but the signature invalid") + } +} + +func TestDetachedSignatureDSA(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(dsaTestKeyHex)) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureDSAHex), signedInput, "binary", testKey3KeyId) +} + +func TestMultipleSignaturePacketsDSA(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(dsaTestKeyHex)) + testDetachedSignature(t, kring, readerFromHex(missingHashFunctionHex+detachedSignatureDSAHex), signedInput, "binary", testKey3KeyId) +} + +func TestDetachedSignatureP256(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(p256TestKeyHex)) + testDetachedSignature(t, kring, readerFromHex(detachedSignatureP256Hex), signedInput, "binary", testKeyP256KeyId) +} + +func testHashFunctionError(t *testing.T, signatureHex string) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + _, err := CheckDetachedSignature(kring, nil, readerFromHex(signatureHex)) + if err == nil { + t.Fatal("Packet with bad hash type was correctly parsed") + } + unsupported, ok := err.(errors.UnsupportedError) + if !ok { + t.Fatalf("Unexpected class of error: %s", err) + } + if !strings.Contains(string(unsupported), "hash ") { + t.Fatalf("Unexpected error: %s", err) + } +} + +func TestUnknownHashFunction(t *testing.T) { + // unknownHashFunctionHex contains a signature packet with hash + // function type 153 (which isn't a real hash function id). + testHashFunctionError(t, unknownHashFunctionHex) +} + +func TestMissingHashFunction(t *testing.T) { + // missingHashFunctionHex contains a signature packet that uses + // RIPEMD160, which isn't compiled in. Since that's the only signature + // packet we don't find any suitable packets and end up with ErrUnknownIssuer + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2Hex)) + _, err := CheckDetachedSignature(kring, nil, readerFromHex(missingHashFunctionHex)) + if err == nil { + t.Fatal("Packet with missing hash type was correctly parsed") + } + if err != errors.ErrUnknownIssuer { + t.Fatalf("Unexpected class of error: %s", err) + } +} + +func TestReadingArmoredPrivateKey(t *testing.T) { + el, err := ReadArmoredKeyRing(bytes.NewBufferString(armoredPrivateKeyBlock)) + if err != nil { + t.Error(err) + } + if len(el) != 1 { + t.Errorf("got %d entities, wanted 1\n", len(el)) + } +} + +func TestReadingArmoredPublicKey(t *testing.T) { + el, err := ReadArmoredKeyRing(bytes.NewBufferString(e2ePublicKey)) + if err != nil { + t.Error(err) + } + if len(el) != 1 { + t.Errorf("didn't get a valid entity") + } +} + +func TestNoArmoredData(t *testing.T) { + _, err := ReadArmoredKeyRing(bytes.NewBufferString("foo")) + if _, ok := err.(errors.InvalidArgumentError); !ok { + t.Errorf("error was not an InvalidArgumentError: %s", err) + } +} + +func testReadMessageError(t *testing.T, messageHex string) { + buf, err := hex.DecodeString(messageHex) + if err != nil { + t.Errorf("hex.DecodeString(): %v", err) + } + + kr, err := ReadKeyRing(new(bytes.Buffer)) + if err != nil { + t.Errorf("ReadKeyring(): %v", err) + } + + _, err = ReadMessage(bytes.NewBuffer(buf), kr, + func([]Key, bool) ([]byte, error) { + return []byte("insecure"), nil + }, nil) + + if err == nil { + t.Errorf("ReadMessage(): Unexpected nil error") + } +} + +func TestIssue11503(t *testing.T) { + testReadMessageError(t, "8c040402000aa430aa8228b9248b01fc899a91197130303030") +} + +func TestIssue11504(t *testing.T) { + testReadMessageError(t, "9303000130303030303030303030983002303030303030030000000130") +} + +// TestSignatureV3Message tests the verification of V3 signature, generated +// with a modern V4-style key. Some people have their clients set to generate +// V3 signatures, so it's useful to be able to verify them. +func TestSignatureV3Message(t *testing.T) { + sig, err := armor.Decode(strings.NewReader(signedMessageV3)) + if err != nil { + t.Error(err) + return + } + key, err := ReadArmoredKeyRing(strings.NewReader(keyV4forVerifyingSignedMessageV3)) + if err != nil { + t.Error(err) + return + } + md, err := ReadMessage(sig.Body, key, nil, nil) + if err != nil { + t.Error(err) + return + } + + _, err = ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Error(err) + return + } + + // We'll see a sig error here after reading in the UnverifiedBody above, + // if there was one to see. + if err = md.SignatureError; err != nil { + t.Error(err) + return + } + + if md.SignatureV3 == nil { + t.Errorf("No available signature after checking signature") + return + } + if md.Signature != nil { + t.Errorf("Did not expect a signature V4 back") + return + } + return +} + +const testKey1KeyId = 0xA34D7E18C20C31BB +const testKey3KeyId = 0x338934250CCC0360 +const testKeyP256KeyId = 0xd44a2c495918513e + +const signedInput = "Signed message\nline 2\nline 3\n" +const signedTextInput = "Signed message\r\nline 2\r\nline 3\r\n" + +const recipientUnspecifiedHex = "848c0300000000000000000103ff62d4d578d03cf40c3da998dfe216c074fa6ddec5e31c197c9666ba292830d91d18716a80f699f9d897389a90e6d62d0238f5f07a5248073c0f24920e4bc4a30c2d17ee4e0cae7c3d4aaa4e8dced50e3010a80ee692175fa0385f62ecca4b56ee6e9980aa3ec51b61b077096ac9e800edaf161268593eedb6cc7027ff5cb32745d250010d407a6221ae22ef18469b444f2822478c4d190b24d36371a95cb40087cdd42d9399c3d06a53c0673349bfb607927f20d1e122bde1e2bf3aa6cae6edf489629bcaa0689539ae3b718914d88ededc3b" + +const detachedSignatureHex = "889c04000102000605024d449cd1000a0910a34d7e18c20c31bb167603ff57718d09f28a519fdc7b5a68b6a3336da04df85e38c5cd5d5bd2092fa4629848a33d85b1729402a2aab39c3ac19f9d573f773cc62c264dc924c067a79dfd8a863ae06c7c8686120760749f5fd9b1e03a64d20a7df3446ddc8f0aeadeaeba7cbaee5c1e366d65b6a0c6cc749bcb912d2f15013f812795c2e29eb7f7b77f39ce77" + +const detachedSignatureTextHex = "889c04010102000605024d449d21000a0910a34d7e18c20c31bbc8c60400a24fbef7342603a41cb1165767bd18985d015fb72fe05db42db36cfb2f1d455967f1e491194fbf6cf88146222b23bf6ffbd50d17598d976a0417d3192ff9cc0034fd00f287b02e90418bbefe609484b09231e4e7a5f3562e199bf39909ab5276c4d37382fe088f6b5c3426fc1052865da8b3ab158672d58b6264b10823dc4b39" + +const detachedSignatureV3TextHex = "8900950305005255c25ca34d7e18c20c31bb0102bb3f04009f6589ef8a028d6e54f6eaf25432e590d31c3a41f4710897585e10c31e5e332c7f9f409af8512adceaff24d0da1474ab07aa7bce4f674610b010fccc5b579ae5eb00a127f272fb799f988ab8e4574c141da6dbfecfef7e6b2c478d9a3d2551ba741f260ee22bec762812f0053e05380bfdd55ad0f22d8cdf71b233fe51ae8a24" + +const detachedSignatureDSAHex = "884604001102000605024d6c4eac000a0910338934250ccc0360f18d00a087d743d6405ed7b87755476629600b8b694a39e900a0abff8126f46faf1547c1743c37b21b4ea15b8f83" + +const detachedSignatureP256Hex = "885e0400130a0006050256e5bb00000a0910d44a2c495918513edef001009841a4f792beb0befccb35c8838a6a87d9b936beaa86db6745ddc7b045eee0cf00fd1ac1f78306b17e965935dd3f8bae4587a76587e4af231efe19cc4011a8434817" + +const testKeys1And2Hex = "988d044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd0011010001b41054657374204b6579203120285253412988b804130102002205024d3c5c10021b03060b090807030206150802090a0b0416020301021e01021780000a0910a34d7e18c20c31bbb5b304009cc45fe610b641a2c146331be94dade0a396e73ca725e1b25c21708d9cab46ecca5ccebc23055879df8f99eea39b377962a400f2ebdc36a7c99c333d74aeba346315137c3ff9d0a09b0273299090343048afb8107cf94cbd1400e3026f0ccac7ecebbc4d78588eb3e478fe2754d3ca664bcf3eac96ca4a6b0c8d7df5102f60f6b0020003b88d044d3c5c10010400b201df61d67487301f11879d514f4248ade90c8f68c7af1284c161098de4c28c2850f1ec7b8e30f959793e571542ffc6532189409cb51c3d30dad78c4ad5165eda18b20d9826d8707d0f742e2ab492103a85bbd9ddf4f5720f6de7064feb0d39ee002219765bb07bcfb8b877f47abe270ddeda4f676108cecb6b9bb2ad484a4f0011010001889f04180102000905024d3c5c10021b0c000a0910a34d7e18c20c31bb1a03040085c8d62e16d05dc4e9dad64953c8a2eed8b6c12f92b1575eeaa6dcf7be9473dd5b24b37b6dffbb4e7c99ed1bd3cb11634be19b3e6e207bed7505c7ca111ccf47cb323bf1f8851eb6360e8034cbff8dd149993c959de89f8f77f38e7e98b8e3076323aa719328e2b408db5ec0d03936efd57422ba04f925cdc7b4c1af7590e40ab0020003988d044d3c5c33010400b488c3e5f83f4d561f317817538d9d0397981e9aef1321ca68ebfae1cf8b7d388e19f4b5a24a82e2fbbf1c6c26557a6c5845307a03d815756f564ac7325b02bc83e87d5480a8fae848f07cb891f2d51ce7df83dcafdc12324517c86d472cc0ee10d47a68fd1d9ae49a6c19bbd36d82af597a0d88cc9c49de9df4e696fc1f0b5d0011010001b42754657374204b6579203220285253412c20656e637279707465642070726976617465206b65792988b804130102002205024d3c5c33021b03060b090807030206150802090a0b0416020301021e01021780000a0910d4984f961e35246b98940400908a73b6a6169f700434f076c6c79015a49bee37130eaf23aaa3cfa9ce60bfe4acaa7bc95f1146ada5867e0079babb38804891f4f0b8ebca57a86b249dee786161a755b7a342e68ccf3f78ed6440a93a6626beb9a37aa66afcd4f888790cb4bb46d94a4ae3eb3d7d3e6b00f6bfec940303e89ec5b32a1eaaacce66497d539328b0020003b88d044d3c5c33010400a4e913f9442abcc7f1804ccab27d2f787ffa592077ca935a8bb23165bd8d57576acac647cc596b2c3f814518cc8c82953c7a4478f32e0cf645630a5ba38d9618ef2bc3add69d459ae3dece5cab778938d988239f8c5ae437807075e06c828019959c644ff05ef6a5a1dab72227c98e3a040b0cf219026640698d7a13d8538a570011010001889f04180102000905024d3c5c33021b0c000a0910d4984f961e35246b26c703ff7ee29ef53bc1ae1ead533c408fa136db508434e233d6e62be621e031e5940bbd4c08142aed0f82217e7c3e1ec8de574bc06ccf3c36633be41ad78a9eacd209f861cae7b064100758545cc9dd83db71806dc1cfd5fb9ae5c7474bba0c19c44034ae61bae5eca379383339dece94ff56ff7aa44a582f3e5c38f45763af577c0934b0020003" + +const testKeys1And2PrivateHex = "9501d8044d3c5c10010400b1d13382944bd5aba23a4312968b5095d14f947f600eb478e14a6fcb16b0e0cac764884909c020bc495cfcc39a935387c661507bdb236a0612fb582cac3af9b29cc2c8c70090616c41b662f4da4c1201e195472eb7f4ae1ccbcbf9940fe21d985e379a5563dde5b9a23d35f1cfaa5790da3b79db26f23695107bfaca8e7b5bcd00110100010003ff4d91393b9a8e3430b14d6209df42f98dc927425b881f1209f319220841273a802a97c7bdb8b3a7740b3ab5866c4d1d308ad0d3a79bd1e883aacf1ac92dfe720285d10d08752a7efe3c609b1d00f17f2805b217be53999a7da7e493bfc3e9618fd17018991b8128aea70a05dbce30e4fbe626aa45775fa255dd9177aabf4df7cf0200c1ded12566e4bc2bb590455e5becfb2e2c9796482270a943343a7835de41080582c2be3caf5981aa838140e97afa40ad652a0b544f83eb1833b0957dce26e47b0200eacd6046741e9ce2ec5beb6fb5e6335457844fb09477f83b050a96be7da043e17f3a9523567ed40e7a521f818813a8b8a72209f1442844843ccc7eb9805442570200bdafe0438d97ac36e773c7162028d65844c4d463e2420aa2228c6e50dc2743c3d6c72d0d782a5173fe7be2169c8a9f4ef8a7cf3e37165e8c61b89c346cdc6c1799d2b41054657374204b6579203120285253412988b804130102002205024d3c5c10021b03060b090807030206150802090a0b0416020301021e01021780000a0910a34d7e18c20c31bbb5b304009cc45fe610b641a2c146331be94dade0a396e73ca725e1b25c21708d9cab46ecca5ccebc23055879df8f99eea39b377962a400f2ebdc36a7c99c333d74aeba346315137c3ff9d0a09b0273299090343048afb8107cf94cbd1400e3026f0ccac7ecebbc4d78588eb3e478fe2754d3ca664bcf3eac96ca4a6b0c8d7df5102f60f6b00200009d01d8044d3c5c10010400b201df61d67487301f11879d514f4248ade90c8f68c7af1284c161098de4c28c2850f1ec7b8e30f959793e571542ffc6532189409cb51c3d30dad78c4ad5165eda18b20d9826d8707d0f742e2ab492103a85bbd9ddf4f5720f6de7064feb0d39ee002219765bb07bcfb8b877f47abe270ddeda4f676108cecb6b9bb2ad484a4f00110100010003fd17a7490c22a79c59281fb7b20f5e6553ec0c1637ae382e8adaea295f50241037f8997cf42c1ce26417e015091451b15424b2c59eb8d4161b0975630408e394d3b00f88d4b4e18e2cc85e8251d4753a27c639c83f5ad4a571c4f19d7cd460b9b73c25ade730c99df09637bd173d8e3e981ac64432078263bb6dc30d3e974150dd0200d0ee05be3d4604d2146fb0457f31ba17c057560785aa804e8ca5530a7cd81d3440d0f4ba6851efcfd3954b7e68908fc0ba47f7ac37bf559c6c168b70d3a7c8cd0200da1c677c4bce06a068070f2b3733b0a714e88d62aa3f9a26c6f5216d48d5c2b5624144f3807c0df30be66b3268eeeca4df1fbded58faf49fc95dc3c35f134f8b01fd1396b6c0fc1b6c4f0eb8f5e44b8eace1e6073e20d0b8bc5385f86f1cf3f050f66af789f3ef1fc107b7f4421e19e0349c730c68f0a226981f4e889054fdb4dc149e8e889f04180102000905024d3c5c10021b0c000a0910a34d7e18c20c31bb1a03040085c8d62e16d05dc4e9dad64953c8a2eed8b6c12f92b1575eeaa6dcf7be9473dd5b24b37b6dffbb4e7c99ed1bd3cb11634be19b3e6e207bed7505c7ca111ccf47cb323bf1f8851eb6360e8034cbff8dd149993c959de89f8f77f38e7e98b8e3076323aa719328e2b408db5ec0d03936efd57422ba04f925cdc7b4c1af7590e40ab00200009501fe044d3c5c33010400b488c3e5f83f4d561f317817538d9d0397981e9aef1321ca68ebfae1cf8b7d388e19f4b5a24a82e2fbbf1c6c26557a6c5845307a03d815756f564ac7325b02bc83e87d5480a8fae848f07cb891f2d51ce7df83dcafdc12324517c86d472cc0ee10d47a68fd1d9ae49a6c19bbd36d82af597a0d88cc9c49de9df4e696fc1f0b5d0011010001fe030302e9030f3c783e14856063f16938530e148bc57a7aa3f3e4f90df9dceccdc779bc0835e1ad3d006e4a8d7b36d08b8e0de5a0d947254ecfbd22037e6572b426bcfdc517796b224b0036ff90bc574b5509bede85512f2eefb520fb4b02aa523ba739bff424a6fe81c5041f253f8d757e69a503d3563a104d0d49e9e890b9d0c26f96b55b743883b472caa7050c4acfd4a21f875bdf1258d88bd61224d303dc9df77f743137d51e6d5246b88c406780528fd9a3e15bab5452e5b93970d9dcc79f48b38651b9f15bfbcf6da452837e9cc70683d1bdca94507870f743e4ad902005812488dd342f836e72869afd00ce1850eea4cfa53ce10e3608e13d3c149394ee3cbd0e23d018fcbcb6e2ec5a1a22972d1d462ca05355d0d290dd2751e550d5efb38c6c89686344df64852bf4ff86638708f644e8ec6bd4af9b50d8541cb91891a431326ab2e332faa7ae86cfb6e0540aa63160c1e5cdd5a4add518b303fff0a20117c6bc77f7cfbaf36b04c865c6c2b42754657374204b6579203220285253412c20656e637279707465642070726976617465206b65792988b804130102002205024d3c5c33021b03060b090807030206150802090a0b0416020301021e01021780000a0910d4984f961e35246b98940400908a73b6a6169f700434f076c6c79015a49bee37130eaf23aaa3cfa9ce60bfe4acaa7bc95f1146ada5867e0079babb38804891f4f0b8ebca57a86b249dee786161a755b7a342e68ccf3f78ed6440a93a6626beb9a37aa66afcd4f888790cb4bb46d94a4ae3eb3d7d3e6b00f6bfec940303e89ec5b32a1eaaacce66497d539328b00200009d01fe044d3c5c33010400a4e913f9442abcc7f1804ccab27d2f787ffa592077ca935a8bb23165bd8d57576acac647cc596b2c3f814518cc8c82953c7a4478f32e0cf645630a5ba38d9618ef2bc3add69d459ae3dece5cab778938d988239f8c5ae437807075e06c828019959c644ff05ef6a5a1dab72227c98e3a040b0cf219026640698d7a13d8538a570011010001fe030302e9030f3c783e148560f936097339ae381d63116efcf802ff8b1c9360767db5219cc987375702a4123fd8657d3e22700f23f95020d1b261eda5257e9a72f9a918e8ef22dd5b3323ae03bbc1923dd224db988cadc16acc04b120a9f8b7e84da9716c53e0334d7b66586ddb9014df604b41be1e960dcfcbc96f4ed150a1a0dd070b9eb14276b9b6be413a769a75b519a53d3ecc0c220e85cd91ca354d57e7344517e64b43b6e29823cbd87eae26e2b2e78e6dedfbb76e3e9f77bcb844f9a8932eb3db2c3f9e44316e6f5d60e9e2a56e46b72abe6b06dc9a31cc63f10023d1f5e12d2a3ee93b675c96f504af0001220991c88db759e231b3320dcedf814dcf723fd9857e3d72d66a0f2af26950b915abdf56c1596f46a325bf17ad4810d3535fb02a259b247ac3dbd4cc3ecf9c51b6c07cebb009c1506fba0a89321ec8683e3fd009a6e551d50243e2d5092fefb3321083a4bad91320dc624bd6b5dddf93553e3d53924c05bfebec1fb4bd47e89a1a889f04180102000905024d3c5c33021b0c000a0910d4984f961e35246b26c703ff7ee29ef53bc1ae1ead533c408fa136db508434e233d6e62be621e031e5940bbd4c08142aed0f82217e7c3e1ec8de574bc06ccf3c36633be41ad78a9eacd209f861cae7b064100758545cc9dd83db71806dc1cfd5fb9ae5c7474bba0c19c44034ae61bae5eca379383339dece94ff56ff7aa44a582f3e5c38f45763af577c0934b0020000" + +const dsaElGamalTestKeysHex = "9501e1044dfcb16a110400aa3e5c1a1f43dd28c2ffae8abf5cfce555ee874134d8ba0a0f7b868ce2214beddc74e5e1e21ded354a95d18acdaf69e5e342371a71fbb9093162e0c5f3427de413a7f2c157d83f5cd2f9d791256dc4f6f0e13f13c3302af27f2384075ab3021dff7a050e14854bbde0a1094174855fc02f0bae8e00a340d94a1f22b32e48485700a0cec672ac21258fb95f61de2ce1af74b2c4fa3e6703ff698edc9be22c02ae4d916e4fa223f819d46582c0516235848a77b577ea49018dcd5e9e15cff9dbb4663a1ae6dd7580fa40946d40c05f72814b0f88481207e6c0832c3bded4853ebba0a7e3bd8e8c66df33d5a537cd4acf946d1080e7a3dcea679cb2b11a72a33a2b6a9dc85f466ad2ddf4c3db6283fa645343286971e3dd700703fc0c4e290d45767f370831a90187e74e9972aae5bff488eeff7d620af0362bfb95c1a6c3413ab5d15a2e4139e5d07a54d72583914661ed6a87cce810be28a0aa8879a2dd39e52fb6fe800f4f181ac7e328f740cde3d09a05cecf9483e4cca4253e60d4429ffd679d9996a520012aad119878c941e3cf151459873bdfc2a9563472fe0303027a728f9feb3b864260a1babe83925ce794710cfd642ee4ae0e5b9d74cee49e9c67b6cd0ea5dfbb582132195a121356a1513e1bca73e5b80c58c7ccb4164453412f456c47616d616c2054657374204b65792031886204131102002205024dfcb16a021b03060b090807030206150802090a0b0416020301021e01021780000a091033af447ccd759b09fadd00a0b8fd6f5a790bad7e9f2dbb7632046dc4493588db009c087c6a9ba9f7f49fab221587a74788c00db4889ab00200009d0157044dfcb16a1004008dec3f9291205255ccff8c532318133a6840739dd68b03ba942676f9038612071447bf07d00d559c5c0875724ea16a4c774f80d8338b55fca691a0522e530e604215b467bbc9ccfd483a1da99d7bc2648b4318fdbd27766fc8bfad3fddb37c62b8ae7ccfe9577e9b8d1e77c1d417ed2c2ef02d52f4da11600d85d3229607943700030503ff506c94c87c8cab778e963b76cf63770f0a79bf48fb49d3b4e52234620fc9f7657f9f8d56c96a2b7c7826ae6b57ebb2221a3fe154b03b6637cea7e6d98e3e45d87cf8dc432f723d3d71f89c5192ac8d7290684d2c25ce55846a80c9a7823f6acd9bb29fa6cd71f20bc90eccfca20451d0c976e460e672b000df49466408d527affe0303027a728f9feb3b864260abd761730327bca2aaa4ea0525c175e92bf240682a0e83b226f97ecb2e935b62c9a133858ce31b271fa8eb41f6a1b3cd72a63025ce1a75ee4180dcc284884904181102000905024dfcb16a021b0c000a091033af447ccd759b09dd0b009e3c3e7296092c81bee5a19929462caaf2fff3ae26009e218c437a2340e7ea628149af1ec98ec091a43992b00200009501e1044dfcb1be1104009f61faa61aa43df75d128cbe53de528c4aec49ce9360c992e70c77072ad5623de0a3a6212771b66b39a30dad6781799e92608316900518ec01184a85d872365b7d2ba4bacfb5882ea3c2473d3750dc6178cc1cf82147fb58caa28b28e9f12f6d1efcb0534abed644156c91cca4ab78834268495160b2400bc422beb37d237c2300a0cac94911b6d493bda1e1fbc6feeca7cb7421d34b03fe22cec6ccb39675bb7b94a335c2b7be888fd3906a1125f33301d8aa6ec6ee6878f46f73961c8d57a3e9544d8ef2a2cbfd4d52da665b1266928cfe4cb347a58c412815f3b2d2369dec04b41ac9a71cc9547426d5ab941cccf3b18575637ccfb42df1a802df3cfe0a999f9e7109331170e3a221991bf868543960f8c816c28097e503fe319db10fb98049f3a57d7c80c420da66d56f3644371631fad3f0ff4040a19a4fedc2d07727a1b27576f75a4d28c47d8246f27071e12d7a8de62aad216ddbae6aa02efd6b8a3e2818cda48526549791ab277e447b3a36c57cefe9b592f5eab73959743fcc8e83cbefec03a329b55018b53eec196765ae40ef9e20521a603c551efe0303020950d53a146bf9c66034d00c23130cce95576a2ff78016ca471276e8227fb30b1ffbd92e61804fb0c3eff9e30b1a826ee8f3e4730b4d86273ca977b4164453412f456c47616d616c2054657374204b65792032886204131102002205024dfcb1be021b03060b090807030206150802090a0b0416020301021e01021780000a0910a86bf526325b21b22bd9009e34511620415c974750a20df5cb56b182f3b48e6600a0a9466cb1a1305a84953445f77d461593f1d42bc1b00200009d0157044dfcb1be1004009565a951da1ee87119d600c077198f1c1bceb0f7aa54552489298e41ff788fa8f0d43a69871f0f6f77ebdfb14a4260cf9fbeb65d5844b4272a1904dd95136d06c3da745dc46327dd44a0f16f60135914368c8039a34033862261806bb2c5ce1152e2840254697872c85441ccb7321431d75a747a4bfb1d2c66362b51ce76311700030503fc0ea76601c196768070b7365a200e6ddb09307f262d5f39eec467b5f5784e22abdf1aa49226f59ab37cb49969d8f5230ea65caf56015abda62604544ed526c5c522bf92bed178a078789f6c807b6d34885688024a5bed9e9f8c58d11d4b82487b44c5f470c5606806a0443b79cadb45e0f897a561a53f724e5349b9267c75ca17fe0303020950d53a146bf9c660bc5f4ce8f072465e2d2466434320c1e712272fafc20e342fe7608101580fa1a1a367e60486a7cd1246b7ef5586cf5e10b32762b710a30144f12dd17dd4884904181102000905024dfcb1be021b0c000a0910a86bf526325b21b2904c00a0b2b66b4b39ccffda1d10f3ea8d58f827e30a8b8e009f4255b2d8112a184e40cde43a34e8655ca7809370b0020000" + +const signedMessageHex = "a3019bc0cbccc0c4b8d8b74ee2108fe16ec6d3ca490cbe362d3f8333d3f352531472538b8b13d353b97232f352158c20943157c71c16064626063656269052062e4e01987e9b6fccff4b7df3a34c534b23e679cbec3bc0f8f6e64dfb4b55fe3f8efa9ce110ddb5cd79faf1d753c51aecfa669f7e7aa043436596cccc3359cb7dd6bbe9ecaa69e5989d9e57209571edc0b2fa7f57b9b79a64ee6e99ce1371395fee92fec2796f7b15a77c386ff668ee27f6d38f0baa6c438b561657377bf6acff3c5947befd7bf4c196252f1d6e5c524d0300" + +const signedTextMessageHex = "a3019bc0cbccc8c4b8d8b74ee2108fe16ec6d36a250cbece0c178233d3f352531472538b8b13d35379b97232f352158ca0b4312f57c71c1646462606365626906a062e4e019811591798ff99bf8afee860b0d8a8c2a85c3387e3bcf0bb3b17987f2bbcfab2aa526d930cbfd3d98757184df3995c9f3e7790e36e3e9779f06089d4c64e9e47dd6202cb6e9bc73c5d11bb59fbaf89d22d8dc7cf199ddf17af96e77c5f65f9bbed56f427bd8db7af37f6c9984bf9385efaf5f184f986fb3e6adb0ecfe35bbf92d16a7aa2a344fb0bc52fb7624f0200" + +const signedEncryptedMessageHex = "848c032a67d68660df41c70103ff5789d0de26b6a50c985a02a13131ca829c413a35d0e6fa8d6842599252162808ac7439c72151c8c6183e76923fe3299301414d0c25a2f06a2257db3839e7df0ec964773f6e4c4ac7ff3b48c444237166dd46ba8ff443a5410dc670cb486672fdbe7c9dfafb75b4fea83af3a204fe2a7dfa86bd20122b4f3d2646cbeecb8f7be8d2c03b018bd210b1d3791e1aba74b0f1034e122ab72e760492c192383cf5e20b5628bd043272d63df9b923f147eb6091cd897553204832aba48fec54aa447547bb16305a1024713b90e77fd0065f1918271947549205af3c74891af22ee0b56cd29bfec6d6e351901cd4ab3ece7c486f1e32a792d4e474aed98ee84b3f591c7dff37b64e0ecd68fd036d517e412dcadf85840ce184ad7921ad446c4ee28db80447aea1ca8d4f574db4d4e37688158ddd19e14ee2eab4873d46947d65d14a23e788d912cf9a19624ca7352469b72a83866b7c23cb5ace3deab3c7018061b0ba0f39ed2befe27163e5083cf9b8271e3e3d52cc7ad6e2a3bd81d4c3d7022f8d" + +const signedEncryptedMessage2Hex = "85010e03cf6a7abcd43e36731003fb057f5495b79db367e277cdbe4ab90d924ddee0c0381494112ff8c1238fb0184af35d1731573b01bc4c55ecacd2aafbe2003d36310487d1ecc9ac994f3fada7f9f7f5c3a64248ab7782906c82c6ff1303b69a84d9a9529c31ecafbcdb9ba87e05439897d87e8a2a3dec55e14df19bba7f7bd316291c002ae2efd24f83f9e3441203fc081c0c23dc3092a454ca8a082b27f631abf73aca341686982e8fbda7e0e7d863941d68f3de4a755c2964407f4b5e0477b3196b8c93d551dd23c8beef7d0f03fbb1b6066f78907faf4bf1677d8fcec72651124080e0b7feae6b476e72ab207d38d90b958759fdedfc3c6c35717c9dbfc979b3cfbbff0a76d24a5e57056bb88acbd2a901ef64bc6e4db02adc05b6250ff378de81dca18c1910ab257dff1b9771b85bb9bbe0a69f5989e6d1710a35e6dfcceb7d8fb5ccea8db3932b3d9ff3fe0d327597c68b3622aec8e3716c83a6c93f497543b459b58ba504ed6bcaa747d37d2ca746fe49ae0a6ce4a8b694234e941b5159ff8bd34b9023da2814076163b86f40eed7c9472f81b551452d5ab87004a373c0172ec87ea6ce42ccfa7dbdad66b745496c4873d8019e8c28d6b3" + +const symmetricallyEncryptedCompressedHex = "8c0d04030302eb4a03808145d0d260c92f714339e13de5a79881216431925bf67ee2898ea61815f07894cd0703c50d0a76ef64d482196f47a8bc729af9b80bb6" + +const dsaTestKeyHex = "9901a2044d6c49de110400cb5ce438cf9250907ac2ba5bf6547931270b89f7c4b53d9d09f4d0213a5ef2ec1f26806d3d259960f872a4a102ef1581ea3f6d6882d15134f21ef6a84de933cc34c47cc9106efe3bd84c6aec12e78523661e29bc1a61f0aab17fa58a627fd5fd33f5149153fbe8cd70edf3d963bc287ef875270ff14b5bfdd1bca4483793923b00a0fe46d76cb6e4cbdc568435cd5480af3266d610d303fe33ae8273f30a96d4d34f42fa28ce1112d425b2e3bf7ea553d526e2db6b9255e9dc7419045ce817214d1a0056dbc8d5289956a4b1b69f20f1105124096e6a438f41f2e2495923b0f34b70642607d45559595c7fe94d7fa85fc41bf7d68c1fd509ebeaa5f315f6059a446b9369c277597e4f474a9591535354c7e7f4fd98a08aa60400b130c24ff20bdfbf683313f5daebf1c9b34b3bdadfc77f2ddd72ee1fb17e56c473664bc21d66467655dd74b9005e3a2bacce446f1920cd7017231ae447b67036c9b431b8179deacd5120262d894c26bc015bffe3d827ba7087ad9b700d2ca1f6d16cc1786581e5dd065f293c31209300f9b0afcc3f7c08dd26d0a22d87580b4db41054657374204b65792033202844534129886204131102002205024d6c49de021b03060b090807030206150802090a0b0416020301021e01021780000a0910338934250ccc03607e0400a0bdb9193e8a6b96fc2dfc108ae848914b504481f100a09c4dc148cb693293a67af24dd40d2b13a9e36794" + +const dsaTestKeyPrivateHex = "9501bb044d6c49de110400cb5ce438cf9250907ac2ba5bf6547931270b89f7c4b53d9d09f4d0213a5ef2ec1f26806d3d259960f872a4a102ef1581ea3f6d6882d15134f21ef6a84de933cc34c47cc9106efe3bd84c6aec12e78523661e29bc1a61f0aab17fa58a627fd5fd33f5149153fbe8cd70edf3d963bc287ef875270ff14b5bfdd1bca4483793923b00a0fe46d76cb6e4cbdc568435cd5480af3266d610d303fe33ae8273f30a96d4d34f42fa28ce1112d425b2e3bf7ea553d526e2db6b9255e9dc7419045ce817214d1a0056dbc8d5289956a4b1b69f20f1105124096e6a438f41f2e2495923b0f34b70642607d45559595c7fe94d7fa85fc41bf7d68c1fd509ebeaa5f315f6059a446b9369c277597e4f474a9591535354c7e7f4fd98a08aa60400b130c24ff20bdfbf683313f5daebf1c9b34b3bdadfc77f2ddd72ee1fb17e56c473664bc21d66467655dd74b9005e3a2bacce446f1920cd7017231ae447b67036c9b431b8179deacd5120262d894c26bc015bffe3d827ba7087ad9b700d2ca1f6d16cc1786581e5dd065f293c31209300f9b0afcc3f7c08dd26d0a22d87580b4d00009f592e0619d823953577d4503061706843317e4fee083db41054657374204b65792033202844534129886204131102002205024d6c49de021b03060b090807030206150802090a0b0416020301021e01021780000a0910338934250ccc03607e0400a0bdb9193e8a6b96fc2dfc108ae848914b504481f100a09c4dc148cb693293a67af24dd40d2b13a9e36794" + +const p256TestKeyHex = "98520456e5b83813082a8648ce3d030107020304a2072cd6d21321266c758cc5b83fab0510f751cb8d91897cddb7047d8d6f185546e2107111b0a95cb8ef063c33245502af7a65f004d5919d93ee74eb71a66253b424502d3235362054657374204b6579203c696e76616c6964406578616d706c652e636f6d3e8879041313080021050256e5b838021b03050b09080702061508090a0b020416020301021e01021780000a0910d44a2c495918513e54e50100dfa64f97d9b47766fc1943c6314ba3f2b2a103d71ad286dc5b1efb96a345b0c80100dbc8150b54241f559da6ef4baacea6d31902b4f4b1bdc09b34bf0502334b7754b8560456e5b83812082a8648ce3d030107020304bfe3cea9cee13486f8d518aa487fecab451f25467d2bf08e58f63e5fa525d5482133e6a79299c274b068ef0be448152ad65cf11cf764348588ca4f6a0bcf22b6030108078861041813080009050256e5b838021b0c000a0910d44a2c495918513e4a4800ff49d589fa64024ad30be363a032e3a0e0e6f5db56ba4c73db850518bf0121b8f20100fd78e065f4c70ea5be9df319ea67e493b936fc78da834a71828043d3154af56e" + +const p256TestKeyPrivateHex = "94a50456e5b83813082a8648ce3d030107020304a2072cd6d21321266c758cc5b83fab0510f751cb8d91897cddb7047d8d6f185546e2107111b0a95cb8ef063c33245502af7a65f004d5919d93ee74eb71a66253fe070302f0c2bfb0b6c30f87ee1599472b8636477eab23ced13b271886a4b50ed34c9d8436af5af5b8f88921f0efba6ef8c37c459bbb88bc1c6a13bbd25c4ce9b1e97679569ee77645d469bf4b43de637f5561b424502d3235362054657374204b6579203c696e76616c6964406578616d706c652e636f6d3e8879041313080021050256e5b838021b03050b09080702061508090a0b020416020301021e01021780000a0910d44a2c495918513e54e50100dfa64f97d9b47766fc1943c6314ba3f2b2a103d71ad286dc5b1efb96a345b0c80100dbc8150b54241f559da6ef4baacea6d31902b4f4b1bdc09b34bf0502334b77549ca90456e5b83812082a8648ce3d030107020304bfe3cea9cee13486f8d518aa487fecab451f25467d2bf08e58f63e5fa525d5482133e6a79299c274b068ef0be448152ad65cf11cf764348588ca4f6a0bcf22b603010807fe0703027510012471a603cfee2968dce19f732721ddf03e966fd133b4e3c7a685b788705cbc46fb026dc94724b830c9edbaecd2fb2c662f23169516cacd1fe423f0475c364ecc10abcabcfd4bbbda1a36a1bd8861041813080009050256e5b838021b0c000a0910d44a2c495918513e4a4800ff49d589fa64024ad30be363a032e3a0e0e6f5db56ba4c73db850518bf0121b8f20100fd78e065f4c70ea5be9df319ea67e493b936fc78da834a71828043d3154af56e" + +const armoredPrivateKeyBlock = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: GnuPG v1.4.10 (GNU/Linux) + +lQHYBE2rFNoBBADFwqWQIW/DSqcB4yCQqnAFTJ27qS5AnB46ccAdw3u4Greeu3Bp +idpoHdjULy7zSKlwR1EA873dO/k/e11Ml3dlAFUinWeejWaK2ugFP6JjiieSsrKn +vWNicdCS4HTWn0X4sjl0ZiAygw6GNhqEQ3cpLeL0g8E9hnYzJKQ0LWJa0QARAQAB +AAP/TB81EIo2VYNmTq0pK1ZXwUpxCrvAAIG3hwKjEzHcbQznsjNvPUihZ+NZQ6+X +0HCfPAdPkGDCLCb6NavcSW+iNnLTrdDnSI6+3BbIONqWWdRDYJhqZCkqmG6zqSfL +IdkJgCw94taUg5BWP/AAeQrhzjChvpMQTVKQL5mnuZbUCeMCAN5qrYMP2S9iKdnk +VANIFj7656ARKt/nf4CBzxcpHTyB8+d2CtPDKCmlJP6vL8t58Jmih+kHJMvC0dzn +gr5f5+sCAOOe5gt9e0am7AvQWhdbHVfJU0TQJx+m2OiCJAqGTB1nvtBLHdJnfdC9 +TnXXQ6ZXibqLyBies/xeY2sCKL5qtTMCAKnX9+9d/5yQxRyrQUHt1NYhaXZnJbHx +q4ytu0eWz+5i68IYUSK69jJ1NWPM0T6SkqpB3KCAIv68VFm9PxqG1KmhSrQIVGVz +dCBLZXmIuAQTAQIAIgUCTasU2gIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AA +CgkQO9o98PRieSoLhgQAkLEZex02Qt7vGhZzMwuN0R22w3VwyYyjBx+fM3JFETy1 +ut4xcLJoJfIaF5ZS38UplgakHG0FQ+b49i8dMij0aZmDqGxrew1m4kBfjXw9B/v+ +eIqpODryb6cOSwyQFH0lQkXC040pjq9YqDsO5w0WYNXYKDnzRV0p4H1pweo2VDid +AdgETasU2gEEAN46UPeWRqKHvA99arOxee38fBt2CI08iiWyI8T3J6ivtFGixSqV +bRcPxYO/qLpVe5l84Nb3X71GfVXlc9hyv7CD6tcowL59hg1E/DC5ydI8K8iEpUmK +/UnHdIY5h8/kqgGxkY/T/hgp5fRQgW1ZoZxLajVlMRZ8W4tFtT0DeA+JABEBAAEA +A/0bE1jaaZKj6ndqcw86jd+QtD1SF+Cf21CWRNeLKnUds4FRRvclzTyUMuWPkUeX +TaNNsUOFqBsf6QQ2oHUBBK4VCHffHCW4ZEX2cd6umz7mpHW6XzN4DECEzOVksXtc +lUC1j4UB91DC/RNQqwX1IV2QLSwssVotPMPqhOi0ZLNY7wIA3n7DWKInxYZZ4K+6 +rQ+POsz6brEoRHwr8x6XlHenq1Oki855pSa1yXIARoTrSJkBtn5oI+f8AzrnN0BN +oyeQAwIA/7E++3HDi5aweWrViiul9cd3rcsS0dEnksPhvS0ozCJiHsq/6GFmy7J8 +QSHZPteedBnZyNp5jR+H7cIfVN3KgwH/Skq4PsuPhDq5TKK6i8Pc1WW8MA6DXTdU +nLkX7RGmMwjC0DBf7KWAlPjFaONAX3a8ndnz//fy1q7u2l9AZwrj1qa1iJ8EGAEC +AAkFAk2rFNoCGwwACgkQO9o98PRieSo2/QP/WTzr4ioINVsvN1akKuekmEMI3LAp +BfHwatufxxP1U+3Si/6YIk7kuPB9Hs+pRqCXzbvPRrI8NHZBmc8qIGthishdCYad +AHcVnXjtxrULkQFGbGvhKURLvS9WnzD/m1K2zzwxzkPTzT9/Yf06O6Mal5AdugPL +VrM0m72/jnpKo04= +=zNCn +-----END PGP PRIVATE KEY BLOCK-----` + +const e2ePublicKey = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Charset: UTF-8 + +xv8AAABSBAAAAAATCCqGSM49AwEHAgME1LRoXSpOxtHXDUdmuvzchyg6005qIBJ4 +sfaSxX7QgH9RV2ONUhC+WiayCNADq+UMzuR/vunSr4aQffXvuGnR383/AAAAFDxk +Z2lsQHlhaG9vLWluYy5jb20+wv8AAACGBBATCAA4/wAAAAWCVGvAG/8AAAACiwn/ +AAAACZC2VkQCOjdvYf8AAAAFlQgJCgv/AAAAA5YBAv8AAAACngEAAE1BAP0X8veD +24IjmI5/C6ZAfVNXxgZZFhTAACFX75jUA3oD6AEAzoSwKf1aqH6oq62qhCN/pekX ++WAsVMBhNwzLpqtCRjLO/wAAAFYEAAAAABIIKoZIzj0DAQcCAwT50ain7vXiIRv8 +B1DO3x3cE/aattZ5sHNixJzRCXi2vQIA5QmOxZ6b5jjUekNbdHG3SZi1a2Ak5mfX +fRxC/5VGAwEIB8L/AAAAZQQYEwgAGP8AAAAFglRrwBz/AAAACZC2VkQCOjdvYQAA +FJAA9isX3xtGyMLYwp2F3nXm7QEdY5bq5VUcD/RJlj792VwA/1wH0pCzVLl4Q9F9 +ex7En5r7rHR5xwX82Msc+Rq9dSyO +=7MrZ +-----END PGP PUBLIC KEY BLOCK-----` + +const dsaKeyWithSHA512 = `9901a2044f04b07f110400db244efecc7316553ee08d179972aab87bb1214de7692593fcf5b6feb1c80fba268722dd464748539b85b81d574cd2d7ad0ca2444de4d849b8756bad7768c486c83a824f9bba4af773d11742bdfb4ac3b89ef8cc9452d4aad31a37e4b630d33927bff68e879284a1672659b8b298222fc68f370f3e24dccacc4a862442b9438b00a0ea444a24088dc23e26df7daf8f43cba3bffc4fe703fe3d6cd7fdca199d54ed8ae501c30e3ec7871ea9cdd4cf63cfe6fc82281d70a5b8bb493f922cd99fba5f088935596af087c8d818d5ec4d0b9afa7f070b3d7c1dd32a84fca08d8280b4890c8da1dde334de8e3cad8450eed2a4a4fcc2db7b8e5528b869a74a7f0189e11ef097ef1253582348de072bb07a9fa8ab838e993cef0ee203ff49298723e2d1f549b00559f886cd417a41692ce58d0ac1307dc71d85a8af21b0cf6eaa14baf2922d3a70389bedf17cc514ba0febbd107675a372fe84b90162a9e88b14d4b1c6be855b96b33fb198c46f058568817780435b6936167ebb3724b680f32bf27382ada2e37a879b3d9de2abe0c3f399350afd1ad438883f4791e2e3b4184453412068617368207472756e636174696f6e207465737488620413110a002205024f04b07f021b03060b090807030206150802090a0b0416020301021e01021780000a0910ef20e0cefca131581318009e2bf3bf047a44d75a9bacd00161ee04d435522397009a03a60d51bd8a568c6c021c8d7cf1be8d990d6417b0020003` + +const unknownHashFunctionHex = `8a00000040040001990006050253863c24000a09103b4fe6acc0b21f32ffff01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101` + +const missingHashFunctionHex = `8a00000040040001030006050253863c24000a09103b4fe6acc0b21f32ffff0101010101010101010101010101010101010101010101010101010101010101010101010101` + +const campbellQuine = `a0b001000300fcffa0b001000d00f2ff000300fcffa0b001000d00f2ff8270a01c00000500faff8270a01c00000500faff000500faff001400ebff8270a01c00000500faff000500faff001400ebff428821c400001400ebff428821c400001400ebff428821c400001400ebff428821c400001400ebff428821c400000000ffff000000ffff000b00f4ff428821c400000000ffff000000ffff000b00f4ff0233214c40000100feff000233214c40000100feff0000` + +const keyV4forVerifyingSignedMessageV3 = `-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: GPGTools - https://gpgtools.org + +mI0EVfxoFQEEAMBIqmbDfYygcvP6Phr1wr1XI41IF7Qixqybs/foBF8qqblD9gIY +BKpXjnBOtbkcVOJ0nljd3/sQIfH4E0vQwK5/4YRQSI59eKOqd6Fx+fWQOLG+uu6z +tewpeCj9LLHvibx/Sc7VWRnrznia6ftrXxJ/wHMezSab3tnGC0YPVdGNABEBAAG0 +JEdvY3J5cHRvIFRlc3QgS2V5IDx0aGVtYXhAZ21haWwuY29tPoi5BBMBCgAjBQJV +/GgVAhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQeXnQmhdGW9PFVAP+ +K7TU0qX5ArvIONIxh/WAweyOk884c5cE8f+3NOPOOCRGyVy0FId5A7MmD5GOQh4H +JseOZVEVCqlmngEvtHZb3U1VYtVGE5WZ+6rQhGsMcWP5qaT4soYwMBlSYxgYwQcx +YhN9qOr292f9j2Y//TTIJmZT4Oa+lMxhWdqTfX+qMgG4jQRV/GgVAQQArhFSiij1 +b+hT3dnapbEU+23Z1yTu1DfF6zsxQ4XQWEV3eR8v+8mEDDNcz8oyyF56k6UQ3rXi +UMTIwRDg4V6SbZmaFbZYCOwp/EmXJ3rfhm7z7yzXj2OFN22luuqbyVhuL7LRdB0M +pxgmjXb4tTvfgKd26x34S+QqUJ7W6uprY4sAEQEAAYifBBgBCgAJBQJV/GgVAhsM +AAoJEHl50JoXRlvT7y8D/02ckx4OMkKBZo7viyrBw0MLG92i+DC2bs35PooHR6zz +786mitjOp5z2QWNLBvxC70S0qVfCIz8jKupO1J6rq6Z8CcbLF3qjm6h1omUBf8Nd +EfXKD2/2HV6zMKVknnKzIEzauh+eCKS2CeJUSSSryap/QLVAjRnckaES/OsEWhNB +=RZia +-----END PGP PUBLIC KEY BLOCK----- +` + +const signedMessageV3 = `-----BEGIN PGP MESSAGE----- +Comment: GPGTools - https://gpgtools.org + +owGbwMvMwMVYWXlhlrhb9GXG03JJDKF/MtxDMjKLFYAoUaEktbhEITe1uDgxPVWP +q5NhKjMrWAVcC9evD8z/bF/uWNjqtk/X3y5/38XGRQHm/57rrDRYuGnTw597Xqka +uM3137/hH3Os+Jf2dc0fXOITKwJvXJvecPVs0ta+Vg7ZO1MLn8w58Xx+6L58mbka +DGHyU9yTueZE8D+QF/Tz28Y78dqtF56R1VPn9Xw4uJqrWYdd7b3vIZ1V6R4Nh05d +iT57d/OhWwA= +=hG7R +-----END PGP MESSAGE----- +` diff --git a/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go b/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go new file mode 100644 index 0000000..4b9a44c --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/s2k/s2k.go @@ -0,0 +1,273 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package s2k implements the various OpenPGP string-to-key transforms as +// specified in RFC 4800 section 3.7.1. +package s2k // import "golang.org/x/crypto/openpgp/s2k" + +import ( + "crypto" + "hash" + "io" + "strconv" + + "golang.org/x/crypto/openpgp/errors" +) + +// Config collects configuration parameters for s2k key-stretching +// transformatioms. A nil *Config is valid and results in all default +// values. Currently, Config is used only by the Serialize function in +// this package. +type Config struct { + // Hash is the default hash function to be used. If + // nil, SHA1 is used. + Hash crypto.Hash + // S2KCount is only used for symmetric encryption. It + // determines the strength of the passphrase stretching when + // the said passphrase is hashed to produce a key. S2KCount + // should be between 1024 and 65011712, inclusive. If Config + // is nil or S2KCount is 0, the value 65536 used. Not all + // values in the above range can be represented. S2KCount will + // be rounded up to the next representable value if it cannot + // be encoded exactly. When set, it is strongly encrouraged to + // use a value that is at least 65536. See RFC 4880 Section + // 3.7.1.3. + S2KCount int +} + +func (c *Config) hash() crypto.Hash { + if c == nil || uint(c.Hash) == 0 { + // SHA1 is the historical default in this package. + return crypto.SHA1 + } + + return c.Hash +} + +func (c *Config) encodedCount() uint8 { + if c == nil || c.S2KCount == 0 { + return 96 // The common case. Correspoding to 65536 + } + + i := c.S2KCount + switch { + // Behave like GPG. Should we make 65536 the lowest value used? + case i < 1024: + i = 1024 + case i > 65011712: + i = 65011712 + } + + return encodeCount(i) +} + +// encodeCount converts an iterative "count" in the range 1024 to +// 65011712, inclusive, to an encoded count. The return value is the +// octet that is actually stored in the GPG file. encodeCount panics +// if i is not in the above range (encodedCount above takes care to +// pass i in the correct range). See RFC 4880 Section 3.7.7.1. +func encodeCount(i int) uint8 { + if i < 1024 || i > 65011712 { + panic("count arg i outside the required range") + } + + for encoded := 0; encoded < 256; encoded++ { + count := decodeCount(uint8(encoded)) + if count >= i { + return uint8(encoded) + } + } + + return 255 +} + +// decodeCount returns the s2k mode 3 iterative "count" corresponding to +// the encoded octet c. +func decodeCount(c uint8) int { + return (16 + int(c&15)) << (uint32(c>>4) + 6) +} + +// Simple writes to out the result of computing the Simple S2K function (RFC +// 4880, section 3.7.1.1) using the given hash and input passphrase. +func Simple(out []byte, h hash.Hash, in []byte) { + Salted(out, h, in, nil) +} + +var zero [1]byte + +// Salted writes to out the result of computing the Salted S2K function (RFC +// 4880, section 3.7.1.2) using the given hash, input passphrase and salt. +func Salted(out []byte, h hash.Hash, in []byte, salt []byte) { + done := 0 + var digest []byte + + for i := 0; done < len(out); i++ { + h.Reset() + for j := 0; j < i; j++ { + h.Write(zero[:]) + } + h.Write(salt) + h.Write(in) + digest = h.Sum(digest[:0]) + n := copy(out[done:], digest) + done += n + } +} + +// Iterated writes to out the result of computing the Iterated and Salted S2K +// function (RFC 4880, section 3.7.1.3) using the given hash, input passphrase, +// salt and iteration count. +func Iterated(out []byte, h hash.Hash, in []byte, salt []byte, count int) { + combined := make([]byte, len(in)+len(salt)) + copy(combined, salt) + copy(combined[len(salt):], in) + + if count < len(combined) { + count = len(combined) + } + + done := 0 + var digest []byte + for i := 0; done < len(out); i++ { + h.Reset() + for j := 0; j < i; j++ { + h.Write(zero[:]) + } + written := 0 + for written < count { + if written+len(combined) > count { + todo := count - written + h.Write(combined[:todo]) + written = count + } else { + h.Write(combined) + written += len(combined) + } + } + digest = h.Sum(digest[:0]) + n := copy(out[done:], digest) + done += n + } +} + +// Parse reads a binary specification for a string-to-key transformation from r +// and returns a function which performs that transform. +func Parse(r io.Reader) (f func(out, in []byte), err error) { + var buf [9]byte + + _, err = io.ReadFull(r, buf[:2]) + if err != nil { + return + } + + hash, ok := HashIdToHash(buf[1]) + if !ok { + return nil, errors.UnsupportedError("hash for S2K function: " + strconv.Itoa(int(buf[1]))) + } + if !hash.Available() { + return nil, errors.UnsupportedError("hash not available: " + strconv.Itoa(int(hash))) + } + h := hash.New() + + switch buf[0] { + case 0: + f := func(out, in []byte) { + Simple(out, h, in) + } + return f, nil + case 1: + _, err = io.ReadFull(r, buf[:8]) + if err != nil { + return + } + f := func(out, in []byte) { + Salted(out, h, in, buf[:8]) + } + return f, nil + case 3: + _, err = io.ReadFull(r, buf[:9]) + if err != nil { + return + } + count := decodeCount(buf[8]) + f := func(out, in []byte) { + Iterated(out, h, in, buf[:8], count) + } + return f, nil + } + + return nil, errors.UnsupportedError("S2K function") +} + +// Serialize salts and stretches the given passphrase and writes the +// resulting key into key. It also serializes an S2K descriptor to +// w. The key stretching can be configured with c, which may be +// nil. In that case, sensible defaults will be used. +func Serialize(w io.Writer, key []byte, rand io.Reader, passphrase []byte, c *Config) error { + var buf [11]byte + buf[0] = 3 /* iterated and salted */ + buf[1], _ = HashToHashId(c.hash()) + salt := buf[2:10] + if _, err := io.ReadFull(rand, salt); err != nil { + return err + } + encodedCount := c.encodedCount() + count := decodeCount(encodedCount) + buf[10] = encodedCount + if _, err := w.Write(buf[:]); err != nil { + return err + } + + Iterated(key, c.hash().New(), passphrase, salt, count) + return nil +} + +// hashToHashIdMapping contains pairs relating OpenPGP's hash identifier with +// Go's crypto.Hash type. See RFC 4880, section 9.4. +var hashToHashIdMapping = []struct { + id byte + hash crypto.Hash + name string +}{ + {1, crypto.MD5, "MD5"}, + {2, crypto.SHA1, "SHA1"}, + {3, crypto.RIPEMD160, "RIPEMD160"}, + {8, crypto.SHA256, "SHA256"}, + {9, crypto.SHA384, "SHA384"}, + {10, crypto.SHA512, "SHA512"}, + {11, crypto.SHA224, "SHA224"}, +} + +// HashIdToHash returns a crypto.Hash which corresponds to the given OpenPGP +// hash id. +func HashIdToHash(id byte) (h crypto.Hash, ok bool) { + for _, m := range hashToHashIdMapping { + if m.id == id { + return m.hash, true + } + } + return 0, false +} + +// HashIdToString returns the name of the hash function corresponding to the +// given OpenPGP hash id. +func HashIdToString(id byte) (name string, ok bool) { + for _, m := range hashToHashIdMapping { + if m.id == id { + return m.name, true + } + } + + return "", false +} + +// HashIdToHash returns an OpenPGP hash id which corresponds the given Hash. +func HashToHashId(h crypto.Hash) (id byte, ok bool) { + for _, m := range hashToHashIdMapping { + if m.hash == h { + return m.id, true + } + } + return 0, false +} diff --git a/vendor/golang.org/x/crypto/openpgp/s2k/s2k_test.go b/vendor/golang.org/x/crypto/openpgp/s2k/s2k_test.go new file mode 100644 index 0000000..183d260 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/s2k/s2k_test.go @@ -0,0 +1,137 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package s2k + +import ( + "bytes" + "crypto" + _ "crypto/md5" + "crypto/rand" + "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" + "encoding/hex" + "testing" + + _ "golang.org/x/crypto/ripemd160" +) + +var saltedTests = []struct { + in, out string +}{ + {"hello", "10295ac1"}, + {"world", "ac587a5e"}, + {"foo", "4dda8077"}, + {"bar", "bd8aac6b9ea9cae04eae6a91c6133b58b5d9a61c14f355516ed9370456"}, + {"x", "f1d3f289"}, + {"xxxxxxxxxxxxxxxxxxxxxxx", "e00d7b45"}, +} + +func TestSalted(t *testing.T) { + h := sha1.New() + salt := [4]byte{1, 2, 3, 4} + + for i, test := range saltedTests { + expected, _ := hex.DecodeString(test.out) + out := make([]byte, len(expected)) + Salted(out, h, []byte(test.in), salt[:]) + if !bytes.Equal(expected, out) { + t.Errorf("#%d, got: %x want: %x", i, out, expected) + } + } +} + +var iteratedTests = []struct { + in, out string +}{ + {"hello", "83126105"}, + {"world", "6fa317f9"}, + {"foo", "8fbc35b9"}, + {"bar", "2af5a99b54f093789fd657f19bd245af7604d0f6ae06f66602a46a08ae"}, + {"x", "5a684dfe"}, + {"xxxxxxxxxxxxxxxxxxxxxxx", "18955174"}, +} + +func TestIterated(t *testing.T) { + h := sha1.New() + salt := [4]byte{4, 3, 2, 1} + + for i, test := range iteratedTests { + expected, _ := hex.DecodeString(test.out) + out := make([]byte, len(expected)) + Iterated(out, h, []byte(test.in), salt[:], 31) + if !bytes.Equal(expected, out) { + t.Errorf("#%d, got: %x want: %x", i, out, expected) + } + } +} + +var parseTests = []struct { + spec, in, out string +}{ + /* Simple with SHA1 */ + {"0002", "hello", "aaf4c61d"}, + /* Salted with SHA1 */ + {"01020102030405060708", "hello", "f4f7d67e"}, + /* Iterated with SHA1 */ + {"03020102030405060708f1", "hello", "f2a57b7c"}, +} + +func TestParse(t *testing.T) { + for i, test := range parseTests { + spec, _ := hex.DecodeString(test.spec) + buf := bytes.NewBuffer(spec) + f, err := Parse(buf) + if err != nil { + t.Errorf("%d: Parse returned error: %s", i, err) + continue + } + + expected, _ := hex.DecodeString(test.out) + out := make([]byte, len(expected)) + f(out, []byte(test.in)) + if !bytes.Equal(out, expected) { + t.Errorf("%d: output got: %x want: %x", i, out, expected) + } + if testing.Short() { + break + } + } +} + +func TestSerialize(t *testing.T) { + hashes := []crypto.Hash{crypto.MD5, crypto.SHA1, crypto.RIPEMD160, + crypto.SHA256, crypto.SHA384, crypto.SHA512, crypto.SHA224} + testCounts := []int{-1, 0, 1024, 65536, 4063232, 65011712} + for _, h := range hashes { + for _, c := range testCounts { + testSerializeConfig(t, &Config{Hash: h, S2KCount: c}) + } + } +} + +func testSerializeConfig(t *testing.T, c *Config) { + t.Logf("Running testSerializeConfig() with config: %+v", c) + + buf := bytes.NewBuffer(nil) + key := make([]byte, 16) + passphrase := []byte("testing") + err := Serialize(buf, key, rand.Reader, passphrase, c) + if err != nil { + t.Errorf("failed to serialize: %s", err) + return + } + + f, err := Parse(buf) + if err != nil { + t.Errorf("failed to reparse: %s", err) + return + } + key2 := make([]byte, len(key)) + f(key2, passphrase) + if !bytes.Equal(key2, key) { + t.Errorf("keys don't match: %x (serialied) vs %x (parsed)", key, key2) + } +} diff --git a/vendor/golang.org/x/crypto/openpgp/write.go b/vendor/golang.org/x/crypto/openpgp/write.go new file mode 100644 index 0000000..65a304c --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/write.go @@ -0,0 +1,378 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "crypto" + "hash" + "io" + "strconv" + "time" + + "golang.org/x/crypto/openpgp/armor" + "golang.org/x/crypto/openpgp/errors" + "golang.org/x/crypto/openpgp/packet" + "golang.org/x/crypto/openpgp/s2k" +) + +// DetachSign signs message with the private key from signer (which must +// already have been decrypted) and writes the signature to w. +// If config is nil, sensible defaults will be used. +func DetachSign(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error { + return detachSign(w, signer, message, packet.SigTypeBinary, config) +} + +// ArmoredDetachSign signs message with the private key from signer (which +// must already have been decrypted) and writes an armored signature to w. +// If config is nil, sensible defaults will be used. +func ArmoredDetachSign(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) (err error) { + return armoredDetachSign(w, signer, message, packet.SigTypeBinary, config) +} + +// DetachSignText signs message (after canonicalising the line endings) with +// the private key from signer (which must already have been decrypted) and +// writes the signature to w. +// If config is nil, sensible defaults will be used. +func DetachSignText(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error { + return detachSign(w, signer, message, packet.SigTypeText, config) +} + +// ArmoredDetachSignText signs message (after canonicalising the line endings) +// with the private key from signer (which must already have been decrypted) +// and writes an armored signature to w. +// If config is nil, sensible defaults will be used. +func ArmoredDetachSignText(w io.Writer, signer *Entity, message io.Reader, config *packet.Config) error { + return armoredDetachSign(w, signer, message, packet.SigTypeText, config) +} + +func armoredDetachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.SignatureType, config *packet.Config) (err error) { + out, err := armor.Encode(w, SignatureType, nil) + if err != nil { + return + } + err = detachSign(out, signer, message, sigType, config) + if err != nil { + return + } + return out.Close() +} + +func detachSign(w io.Writer, signer *Entity, message io.Reader, sigType packet.SignatureType, config *packet.Config) (err error) { + if signer.PrivateKey == nil { + return errors.InvalidArgumentError("signing key doesn't have a private key") + } + if signer.PrivateKey.Encrypted { + return errors.InvalidArgumentError("signing key is encrypted") + } + + sig := new(packet.Signature) + sig.SigType = sigType + sig.PubKeyAlgo = signer.PrivateKey.PubKeyAlgo + sig.Hash = config.Hash() + sig.CreationTime = config.Now() + sig.IssuerKeyId = &signer.PrivateKey.KeyId + + h, wrappedHash, err := hashForSignature(sig.Hash, sig.SigType) + if err != nil { + return + } + io.Copy(wrappedHash, message) + + err = sig.Sign(h, signer.PrivateKey, config) + if err != nil { + return + } + + return sig.Serialize(w) +} + +// FileHints contains metadata about encrypted files. This metadata is, itself, +// encrypted. +type FileHints struct { + // IsBinary can be set to hint that the contents are binary data. + IsBinary bool + // FileName hints at the name of the file that should be written. It's + // truncated to 255 bytes if longer. It may be empty to suggest that the + // file should not be written to disk. It may be equal to "_CONSOLE" to + // suggest the data should not be written to disk. + FileName string + // ModTime contains the modification time of the file, or the zero time if not applicable. + ModTime time.Time +} + +// SymmetricallyEncrypt acts like gpg -c: it encrypts a file with a passphrase. +// The resulting WriteCloser must be closed after the contents of the file have +// been written. +// If config is nil, sensible defaults will be used. +func SymmetricallyEncrypt(ciphertext io.Writer, passphrase []byte, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { + if hints == nil { + hints = &FileHints{} + } + + key, err := packet.SerializeSymmetricKeyEncrypted(ciphertext, passphrase, config) + if err != nil { + return + } + w, err := packet.SerializeSymmetricallyEncrypted(ciphertext, config.Cipher(), key, config) + if err != nil { + return + } + + literaldata := w + if algo := config.Compression(); algo != packet.CompressionNone { + var compConfig *packet.CompressionConfig + if config != nil { + compConfig = config.CompressionConfig + } + literaldata, err = packet.SerializeCompressed(w, algo, compConfig) + if err != nil { + return + } + } + + var epochSeconds uint32 + if !hints.ModTime.IsZero() { + epochSeconds = uint32(hints.ModTime.Unix()) + } + return packet.SerializeLiteral(literaldata, hints.IsBinary, hints.FileName, epochSeconds) +} + +// intersectPreferences mutates and returns a prefix of a that contains only +// the values in the intersection of a and b. The order of a is preserved. +func intersectPreferences(a []uint8, b []uint8) (intersection []uint8) { + var j int + for _, v := range a { + for _, v2 := range b { + if v == v2 { + a[j] = v + j++ + break + } + } + } + + return a[:j] +} + +func hashToHashId(h crypto.Hash) uint8 { + v, ok := s2k.HashToHashId(h) + if !ok { + panic("tried to convert unknown hash") + } + return v +} + +// Encrypt encrypts a message to a number of recipients and, optionally, signs +// it. hints contains optional information, that is also encrypted, that aids +// the recipients in processing the message. The resulting WriteCloser must +// be closed after the contents of the file have been written. +// If config is nil, sensible defaults will be used. +func Encrypt(ciphertext io.Writer, to []*Entity, signed *Entity, hints *FileHints, config *packet.Config) (plaintext io.WriteCloser, err error) { + var signer *packet.PrivateKey + if signed != nil { + signKey, ok := signed.signingKey(config.Now()) + if !ok { + return nil, errors.InvalidArgumentError("no valid signing keys") + } + signer = signKey.PrivateKey + if signer == nil { + return nil, errors.InvalidArgumentError("no private key in signing key") + } + if signer.Encrypted { + return nil, errors.InvalidArgumentError("signing key must be decrypted") + } + } + + // These are the possible ciphers that we'll use for the message. + candidateCiphers := []uint8{ + uint8(packet.CipherAES128), + uint8(packet.CipherAES256), + uint8(packet.CipherCAST5), + } + // These are the possible hash functions that we'll use for the signature. + candidateHashes := []uint8{ + hashToHashId(crypto.SHA256), + hashToHashId(crypto.SHA512), + hashToHashId(crypto.SHA1), + hashToHashId(crypto.RIPEMD160), + } + // In the event that a recipient doesn't specify any supported ciphers + // or hash functions, these are the ones that we assume that every + // implementation supports. + defaultCiphers := candidateCiphers[len(candidateCiphers)-1:] + defaultHashes := candidateHashes[len(candidateHashes)-1:] + + encryptKeys := make([]Key, len(to)) + for i := range to { + var ok bool + encryptKeys[i], ok = to[i].encryptionKey(config.Now()) + if !ok { + return nil, errors.InvalidArgumentError("cannot encrypt a message to key id " + strconv.FormatUint(to[i].PrimaryKey.KeyId, 16) + " because it has no encryption keys") + } + + sig := to[i].primaryIdentity().SelfSignature + + preferredSymmetric := sig.PreferredSymmetric + if len(preferredSymmetric) == 0 { + preferredSymmetric = defaultCiphers + } + preferredHashes := sig.PreferredHash + if len(preferredHashes) == 0 { + preferredHashes = defaultHashes + } + candidateCiphers = intersectPreferences(candidateCiphers, preferredSymmetric) + candidateHashes = intersectPreferences(candidateHashes, preferredHashes) + } + + if len(candidateCiphers) == 0 || len(candidateHashes) == 0 { + return nil, errors.InvalidArgumentError("cannot encrypt because recipient set shares no common algorithms") + } + + cipher := packet.CipherFunction(candidateCiphers[0]) + // If the cipher specified by config is a candidate, we'll use that. + configuredCipher := config.Cipher() + for _, c := range candidateCiphers { + cipherFunc := packet.CipherFunction(c) + if cipherFunc == configuredCipher { + cipher = cipherFunc + break + } + } + + var hash crypto.Hash + for _, hashId := range candidateHashes { + if h, ok := s2k.HashIdToHash(hashId); ok && h.Available() { + hash = h + break + } + } + + // If the hash specified by config is a candidate, we'll use that. + if configuredHash := config.Hash(); configuredHash.Available() { + for _, hashId := range candidateHashes { + if h, ok := s2k.HashIdToHash(hashId); ok && h == configuredHash { + hash = h + break + } + } + } + + if hash == 0 { + hashId := candidateHashes[0] + name, ok := s2k.HashIdToString(hashId) + if !ok { + name = "#" + strconv.Itoa(int(hashId)) + } + return nil, errors.InvalidArgumentError("cannot encrypt because no candidate hash functions are compiled in. (Wanted " + name + " in this case.)") + } + + symKey := make([]byte, cipher.KeySize()) + if _, err := io.ReadFull(config.Random(), symKey); err != nil { + return nil, err + } + + for _, key := range encryptKeys { + if err := packet.SerializeEncryptedKey(ciphertext, key.PublicKey, cipher, symKey, config); err != nil { + return nil, err + } + } + + encryptedData, err := packet.SerializeSymmetricallyEncrypted(ciphertext, cipher, symKey, config) + if err != nil { + return + } + + if signer != nil { + ops := &packet.OnePassSignature{ + SigType: packet.SigTypeBinary, + Hash: hash, + PubKeyAlgo: signer.PubKeyAlgo, + KeyId: signer.KeyId, + IsLast: true, + } + if err := ops.Serialize(encryptedData); err != nil { + return nil, err + } + } + + if hints == nil { + hints = &FileHints{} + } + + w := encryptedData + if signer != nil { + // If we need to write a signature packet after the literal + // data then we need to stop literalData from closing + // encryptedData. + w = noOpCloser{encryptedData} + + } + var epochSeconds uint32 + if !hints.ModTime.IsZero() { + epochSeconds = uint32(hints.ModTime.Unix()) + } + literalData, err := packet.SerializeLiteral(w, hints.IsBinary, hints.FileName, epochSeconds) + if err != nil { + return nil, err + } + + if signer != nil { + return signatureWriter{encryptedData, literalData, hash, hash.New(), signer, config}, nil + } + return literalData, nil +} + +// signatureWriter hashes the contents of a message while passing it along to +// literalData. When closed, it closes literalData, writes a signature packet +// to encryptedData and then also closes encryptedData. +type signatureWriter struct { + encryptedData io.WriteCloser + literalData io.WriteCloser + hashType crypto.Hash + h hash.Hash + signer *packet.PrivateKey + config *packet.Config +} + +func (s signatureWriter) Write(data []byte) (int, error) { + s.h.Write(data) + return s.literalData.Write(data) +} + +func (s signatureWriter) Close() error { + sig := &packet.Signature{ + SigType: packet.SigTypeBinary, + PubKeyAlgo: s.signer.PubKeyAlgo, + Hash: s.hashType, + CreationTime: s.config.Now(), + IssuerKeyId: &s.signer.KeyId, + } + + if err := sig.Sign(s.h, s.signer, s.config); err != nil { + return err + } + if err := s.literalData.Close(); err != nil { + return err + } + if err := sig.Serialize(s.encryptedData); err != nil { + return err + } + return s.encryptedData.Close() +} + +// noOpCloser is like an ioutil.NopCloser, but for an io.Writer. +// TODO: we have two of these in OpenPGP packages alone. This probably needs +// to be promoted somewhere more common. +type noOpCloser struct { + w io.Writer +} + +func (c noOpCloser) Write(data []byte) (n int, err error) { + return c.w.Write(data) +} + +func (c noOpCloser) Close() error { + return nil +} diff --git a/vendor/golang.org/x/crypto/openpgp/write_test.go b/vendor/golang.org/x/crypto/openpgp/write_test.go new file mode 100644 index 0000000..f2d50a0 --- /dev/null +++ b/vendor/golang.org/x/crypto/openpgp/write_test.go @@ -0,0 +1,273 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package openpgp + +import ( + "bytes" + "io" + "io/ioutil" + "testing" + "time" + + "golang.org/x/crypto/openpgp/packet" +) + +func TestSignDetached(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + out := bytes.NewBuffer(nil) + message := bytes.NewBufferString(signedInput) + err := DetachSign(out, kring[0], message, nil) + if err != nil { + t.Error(err) + } + + testDetachedSignature(t, kring, out, signedInput, "check", testKey1KeyId) +} + +func TestSignTextDetached(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(testKeys1And2PrivateHex)) + out := bytes.NewBuffer(nil) + message := bytes.NewBufferString(signedInput) + err := DetachSignText(out, kring[0], message, nil) + if err != nil { + t.Error(err) + } + + testDetachedSignature(t, kring, out, signedInput, "check", testKey1KeyId) +} + +func TestSignDetachedDSA(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(dsaTestKeyPrivateHex)) + out := bytes.NewBuffer(nil) + message := bytes.NewBufferString(signedInput) + err := DetachSign(out, kring[0], message, nil) + if err != nil { + t.Error(err) + } + + testDetachedSignature(t, kring, out, signedInput, "check", testKey3KeyId) +} + +func TestSignDetachedP256(t *testing.T) { + kring, _ := ReadKeyRing(readerFromHex(p256TestKeyPrivateHex)) + kring[0].PrivateKey.Decrypt([]byte("passphrase")) + + out := bytes.NewBuffer(nil) + message := bytes.NewBufferString(signedInput) + err := DetachSign(out, kring[0], message, nil) + if err != nil { + t.Error(err) + } + + testDetachedSignature(t, kring, out, signedInput, "check", testKeyP256KeyId) +} + +func TestNewEntity(t *testing.T) { + if testing.Short() { + return + } + + // Check bit-length with no config. + e, err := NewEntity("Test User", "test", "test@example.com", nil) + if err != nil { + t.Errorf("failed to create entity: %s", err) + return + } + bl, err := e.PrimaryKey.BitLength() + if err != nil { + t.Errorf("failed to find bit length: %s", err) + } + if int(bl) != defaultRSAKeyBits { + t.Errorf("BitLength %v, expected %v", int(bl), defaultRSAKeyBits) + } + + // Check bit-length with a config. + cfg := &packet.Config{RSABits: 1024} + e, err = NewEntity("Test User", "test", "test@example.com", cfg) + if err != nil { + t.Errorf("failed to create entity: %s", err) + return + } + bl, err = e.PrimaryKey.BitLength() + if err != nil { + t.Errorf("failed to find bit length: %s", err) + } + if int(bl) != cfg.RSABits { + t.Errorf("BitLength %v, expected %v", bl, cfg.RSABits) + } + + w := bytes.NewBuffer(nil) + if err := e.SerializePrivate(w, nil); err != nil { + t.Errorf("failed to serialize entity: %s", err) + return + } + serialized := w.Bytes() + + el, err := ReadKeyRing(w) + if err != nil { + t.Errorf("failed to reparse entity: %s", err) + return + } + + if len(el) != 1 { + t.Errorf("wrong number of entities found, got %d, want 1", len(el)) + } + + w = bytes.NewBuffer(nil) + if err := e.SerializePrivate(w, nil); err != nil { + t.Errorf("failed to serialize entity second time: %s", err) + return + } + + if !bytes.Equal(w.Bytes(), serialized) { + t.Errorf("results differed") + } +} + +func TestSymmetricEncryption(t *testing.T) { + buf := new(bytes.Buffer) + plaintext, err := SymmetricallyEncrypt(buf, []byte("testing"), nil, nil) + if err != nil { + t.Errorf("error writing headers: %s", err) + return + } + message := []byte("hello world\n") + _, err = plaintext.Write(message) + if err != nil { + t.Errorf("error writing to plaintext writer: %s", err) + } + err = plaintext.Close() + if err != nil { + t.Errorf("error closing plaintext writer: %s", err) + } + + md, err := ReadMessage(buf, nil, func(keys []Key, symmetric bool) ([]byte, error) { + return []byte("testing"), nil + }, nil) + if err != nil { + t.Errorf("error rereading message: %s", err) + } + messageBuf := bytes.NewBuffer(nil) + _, err = io.Copy(messageBuf, md.UnverifiedBody) + if err != nil { + t.Errorf("error rereading message: %s", err) + } + if !bytes.Equal(message, messageBuf.Bytes()) { + t.Errorf("recovered message incorrect got '%s', want '%s'", messageBuf.Bytes(), message) + } +} + +var testEncryptionTests = []struct { + keyRingHex string + isSigned bool +}{ + { + testKeys1And2PrivateHex, + false, + }, + { + testKeys1And2PrivateHex, + true, + }, + { + dsaElGamalTestKeysHex, + false, + }, + { + dsaElGamalTestKeysHex, + true, + }, +} + +func TestEncryption(t *testing.T) { + for i, test := range testEncryptionTests { + kring, _ := ReadKeyRing(readerFromHex(test.keyRingHex)) + + passphrase := []byte("passphrase") + for _, entity := range kring { + if entity.PrivateKey != nil && entity.PrivateKey.Encrypted { + err := entity.PrivateKey.Decrypt(passphrase) + if err != nil { + t.Errorf("#%d: failed to decrypt key", i) + } + } + for _, subkey := range entity.Subkeys { + if subkey.PrivateKey != nil && subkey.PrivateKey.Encrypted { + err := subkey.PrivateKey.Decrypt(passphrase) + if err != nil { + t.Errorf("#%d: failed to decrypt subkey", i) + } + } + } + } + + var signed *Entity + if test.isSigned { + signed = kring[0] + } + + buf := new(bytes.Buffer) + w, err := Encrypt(buf, kring[:1], signed, nil /* no hints */, nil) + if err != nil { + t.Errorf("#%d: error in Encrypt: %s", i, err) + continue + } + + const message = "testing" + _, err = w.Write([]byte(message)) + if err != nil { + t.Errorf("#%d: error writing plaintext: %s", i, err) + continue + } + err = w.Close() + if err != nil { + t.Errorf("#%d: error closing WriteCloser: %s", i, err) + continue + } + + md, err := ReadMessage(buf, kring, nil /* no prompt */, nil) + if err != nil { + t.Errorf("#%d: error reading message: %s", i, err) + continue + } + + testTime, _ := time.Parse("2006-01-02", "2013-07-01") + if test.isSigned { + signKey, _ := kring[0].signingKey(testTime) + expectedKeyId := signKey.PublicKey.KeyId + if md.SignedByKeyId != expectedKeyId { + t.Errorf("#%d: message signed by wrong key id, got: %v, want: %v", i, *md.SignedBy, expectedKeyId) + } + if md.SignedBy == nil { + t.Errorf("#%d: failed to find the signing Entity", i) + } + } + + plaintext, err := ioutil.ReadAll(md.UnverifiedBody) + if err != nil { + t.Errorf("#%d: error reading encrypted contents: %s", i, err) + continue + } + + encryptKey, _ := kring[0].encryptionKey(testTime) + expectedKeyId := encryptKey.PublicKey.KeyId + if len(md.EncryptedToKeyIds) != 1 || md.EncryptedToKeyIds[0] != expectedKeyId { + t.Errorf("#%d: expected message to be encrypted to %v, but got %#v", i, expectedKeyId, md.EncryptedToKeyIds) + } + + if string(plaintext) != message { + t.Errorf("#%d: got: %s, want: %s", i, string(plaintext), message) + } + + if test.isSigned { + if md.SignatureError != nil { + t.Errorf("#%d: signature error: %s", i, md.SignatureError) + } + if md.Signature == nil { + t.Error("signature missing") + } + } + } +} diff --git a/vendor/golang.org/x/crypto/otr/libotr_test_helper.c b/vendor/golang.org/x/crypto/otr/libotr_test_helper.c new file mode 100644 index 0000000..b3ca072 --- /dev/null +++ b/vendor/golang.org/x/crypto/otr/libotr_test_helper.c @@ -0,0 +1,197 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This code can be compiled and used to test the otr package against libotr. +// See otr_test.go. + +// +build ignore + +#include +#include +#include + +#include +#include +#include + +static int g_session_established = 0; + +OtrlPolicy policy(void *opdata, ConnContext *context) { + return OTRL_POLICY_ALWAYS; +} + +int is_logged_in(void *opdata, const char *accountname, const char *protocol, + const char *recipient) { + return 1; +} + +void inject_message(void *opdata, const char *accountname, const char *protocol, + const char *recipient, const char *message) { + printf("%s\n", message); + fflush(stdout); + fprintf(stderr, "libotr helper sent: %s\n", message); +} + +void update_context_list(void *opdata) {} + +void new_fingerprint(void *opdata, OtrlUserState us, const char *accountname, + const char *protocol, const char *username, + unsigned char fingerprint[20]) { + fprintf(stderr, "NEW FINGERPRINT\n"); + g_session_established = 1; +} + +void write_fingerprints(void *opdata) {} + +void gone_secure(void *opdata, ConnContext *context) {} + +void gone_insecure(void *opdata, ConnContext *context) {} + +void still_secure(void *opdata, ConnContext *context, int is_reply) {} + +int max_message_size(void *opdata, ConnContext *context) { return 99999; } + +const char *account_name(void *opdata, const char *account, + const char *protocol) { + return "ACCOUNT"; +} + +void account_name_free(void *opdata, const char *account_name) {} + +const char *error_message(void *opdata, ConnContext *context, + OtrlErrorCode err_code) { + return "ERR"; +} + +void error_message_free(void *opdata, const char *msg) {} + +void resent_msg_prefix_free(void *opdata, const char *prefix) {} + +void handle_smp_event(void *opdata, OtrlSMPEvent smp_event, + ConnContext *context, unsigned short progress_event, + char *question) {} + +void handle_msg_event(void *opdata, OtrlMessageEvent msg_event, + ConnContext *context, const char *message, + gcry_error_t err) { + fprintf(stderr, "msg event: %d %s\n", msg_event, message); +} + +OtrlMessageAppOps uiops = { + policy, + NULL, + is_logged_in, + inject_message, + update_context_list, + new_fingerprint, + write_fingerprints, + gone_secure, + gone_insecure, + still_secure, + max_message_size, + account_name, + account_name_free, + NULL, /* received_symkey */ + error_message, + error_message_free, + NULL, /* resent_msg_prefix */ + resent_msg_prefix_free, + handle_smp_event, + handle_msg_event, + NULL /* create_instag */, + NULL /* convert_msg */, + NULL /* convert_free */, + NULL /* timer_control */, +}; + +static const char kPrivateKeyData[] = + "(privkeys (account (name \"account\") (protocol proto) (private-key (dsa " + "(p " + "#00FC07ABCF0DC916AFF6E9AE47BEF60C7AB9B4D6B2469E436630E36F8A489BE812486A09F" + "30B71224508654940A835301ACC525A4FF133FC152CC53DCC59D65C30A54F1993FE13FE63E" + "5823D4C746DB21B90F9B9C00B49EC7404AB1D929BA7FBA12F2E45C6E0A651689750E8528AB" + "8C031D3561FECEE72EBB4A090D450A9B7A857#) (q " + "#00997BD266EF7B1F60A5C23F3A741F2AEFD07A2081#) (g " + "#535E360E8A95EBA46A4F7DE50AD6E9B2A6DB785A66B64EB9F20338D2A3E8FB0E94725848F" + "1AA6CC567CB83A1CC517EC806F2E92EAE71457E80B2210A189B91250779434B41FC8A8873F" + "6DB94BEA7D177F5D59E7E114EE10A49CFD9CEF88AE43387023B672927BA74B04EB6BBB5E57" + "597766A2F9CE3857D7ACE3E1E3BC1FC6F26#) (y " + "#0AC8670AD767D7A8D9D14CC1AC6744CD7D76F993B77FFD9E39DF01E5A6536EF65E775FCEF" + "2A983E2A19BD6415500F6979715D9FD1257E1FE2B6F5E1E74B333079E7C880D39868462A93" + "454B41877BE62E5EF0A041C2EE9C9E76BD1E12AE25D9628DECB097025DD625EF49C3258A1A" + "3C0FF501E3DC673B76D7BABF349009B6ECF#) (x " + "#14D0345A3562C480A039E3C72764F72D79043216#)))))\n"; + +int main() { + OTRL_INIT; + + // We have to write the private key information to a file because the libotr + // API demands a filename to read from. + const char *tmpdir = "/tmp"; + if (getenv("TMP")) { + tmpdir = getenv("TMP"); + } + + char private_key_file[256]; + snprintf(private_key_file, sizeof(private_key_file), + "%s/libotr_test_helper_privatekeys-XXXXXX", tmpdir); + int fd = mkstemp(private_key_file); + if (fd == -1) { + perror("creating temp file"); + } + write(fd, kPrivateKeyData, sizeof(kPrivateKeyData) - 1); + close(fd); + + OtrlUserState userstate = otrl_userstate_create(); + otrl_privkey_read(userstate, private_key_file); + unlink(private_key_file); + + fprintf(stderr, "libotr helper started\n"); + + char buf[4096]; + + for (;;) { + char *message = fgets(buf, sizeof(buf), stdin); + if (strlen(message) == 0) { + break; + } + message[strlen(message) - 1] = 0; + fprintf(stderr, "libotr helper got: %s\n", message); + + char *newmessage = NULL; + OtrlTLV *tlvs; + int ignore_message = otrl_message_receiving( + userstate, &uiops, NULL, "account", "proto", "peer", message, + &newmessage, &tlvs, NULL, NULL, NULL); + if (tlvs) { + otrl_tlv_free(tlvs); + } + + if (newmessage != NULL) { + fprintf(stderr, "libotr got: %s\n", newmessage); + otrl_message_free(newmessage); + + gcry_error_t err; + char *newmessage = NULL; + + err = otrl_message_sending(userstate, &uiops, NULL, "account", "proto", + "peer", 0, "test message", NULL, &newmessage, + OTRL_FRAGMENT_SEND_SKIP, NULL, NULL, NULL); + if (newmessage == NULL) { + fprintf(stderr, "libotr didn't encrypt message\n"); + return 1; + } + write(1, newmessage, strlen(newmessage)); + write(1, "\n", 1); + fprintf(stderr, "libotr sent: %s\n", newmessage); + otrl_message_free(newmessage); + + g_session_established = 0; + write(1, "?OTRv2?\n", 8); + fprintf(stderr, "libotr sent: ?OTRv2\n"); + } + } + + return 0; +} diff --git a/vendor/golang.org/x/crypto/otr/otr.go b/vendor/golang.org/x/crypto/otr/otr.go new file mode 100644 index 0000000..173b753 --- /dev/null +++ b/vendor/golang.org/x/crypto/otr/otr.go @@ -0,0 +1,1415 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package otr implements the Off The Record protocol as specified in +// http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html +package otr // import "golang.org/x/crypto/otr" + +import ( + "bytes" + "crypto/aes" + "crypto/cipher" + "crypto/dsa" + "crypto/hmac" + "crypto/rand" + "crypto/sha1" + "crypto/sha256" + "crypto/subtle" + "encoding/base64" + "encoding/hex" + "errors" + "hash" + "io" + "math/big" + "strconv" +) + +// SecurityChange describes a change in the security state of a Conversation. +type SecurityChange int + +const ( + NoChange SecurityChange = iota + // NewKeys indicates that a key exchange has completed. This occurs + // when a conversation first becomes encrypted, and when the keys are + // renegotiated within an encrypted conversation. + NewKeys + // SMPSecretNeeded indicates that the peer has started an + // authentication and that we need to supply a secret. Call SMPQuestion + // to get the optional, human readable challenge and then Authenticate + // to supply the matching secret. + SMPSecretNeeded + // SMPComplete indicates that an authentication completed. The identity + // of the peer has now been confirmed. + SMPComplete + // SMPFailed indicates that an authentication failed. + SMPFailed + // ConversationEnded indicates that the peer ended the secure + // conversation. + ConversationEnded +) + +// QueryMessage can be sent to a peer to start an OTR conversation. +var QueryMessage = "?OTRv2?" + +// ErrorPrefix can be used to make an OTR error by appending an error message +// to it. +var ErrorPrefix = "?OTR Error:" + +var ( + fragmentPartSeparator = []byte(",") + fragmentPrefix = []byte("?OTR,") + msgPrefix = []byte("?OTR:") + queryMarker = []byte("?OTR") +) + +// isQuery attempts to parse an OTR query from msg and returns the greatest +// common version, or 0 if msg is not an OTR query. +func isQuery(msg []byte) (greatestCommonVersion int) { + pos := bytes.Index(msg, queryMarker) + if pos == -1 { + return 0 + } + for i, c := range msg[pos+len(queryMarker):] { + if i == 0 { + if c == '?' { + // Indicates support for version 1, but we don't + // implement that. + continue + } + + if c != 'v' { + // Invalid message + return 0 + } + + continue + } + + if c == '?' { + // End of message + return + } + + if c == ' ' || c == '\t' { + // Probably an invalid message + return 0 + } + + if c == '2' { + greatestCommonVersion = 2 + } + } + + return 0 +} + +const ( + statePlaintext = iota + stateEncrypted + stateFinished +) + +const ( + authStateNone = iota + authStateAwaitingDHKey + authStateAwaitingRevealSig + authStateAwaitingSig +) + +const ( + msgTypeDHCommit = 2 + msgTypeData = 3 + msgTypeDHKey = 10 + msgTypeRevealSig = 17 + msgTypeSig = 18 +) + +const ( + // If the requested fragment size is less than this, it will be ignored. + minFragmentSize = 18 + // Messages are padded to a multiple of this number of bytes. + paddingGranularity = 256 + // The number of bytes in a Diffie-Hellman private value (320-bits). + dhPrivateBytes = 40 + // The number of bytes needed to represent an element of the DSA + // subgroup (160-bits). + dsaSubgroupBytes = 20 + // The number of bytes of the MAC that are sent on the wire (160-bits). + macPrefixBytes = 20 +) + +// These are the global, common group parameters for OTR. +var ( + p *big.Int // group prime + g *big.Int // group generator + q *big.Int // group order + pMinus2 *big.Int +) + +func init() { + p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF", 16) + q, _ = new(big.Int).SetString("7FFFFFFFFFFFFFFFE487ED5110B4611A62633145C06E0E68948127044533E63A0105DF531D89CD9128A5043CC71A026EF7CA8CD9E69D218D98158536F92F8A1BA7F09AB6B6A8E122F242DABB312F3F637A262174D31BF6B585FFAE5B7A035BF6F71C35FDAD44CFD2D74F9208BE258FF324943328F6722D9EE1003E5C50B1DF82CC6D241B0E2AE9CD348B1FD47E9267AFC1B2AE91EE51D6CB0E3179AB1042A95DCF6A9483B84B4B36B3861AA7255E4C0278BA36046511B993FFFFFFFFFFFFFFFF", 16) + g = new(big.Int).SetInt64(2) + pMinus2 = new(big.Int).Sub(p, g) +} + +// Conversation represents a relation with a peer. The zero value is a valid +// Conversation, although PrivateKey must be set. +// +// When communicating with a peer, all inbound messages should be passed to +// Conversation.Receive and all outbound messages to Conversation.Send. The +// Conversation will take care of maintaining the encryption state and +// negotiating encryption as needed. +type Conversation struct { + // PrivateKey contains the private key to use to sign key exchanges. + PrivateKey *PrivateKey + + // Rand can be set to override the entropy source. Otherwise, + // crypto/rand will be used. + Rand io.Reader + // If FragmentSize is set, all messages produced by Receive and Send + // will be fragmented into messages of, at most, this number of bytes. + FragmentSize int + + // Once Receive has returned NewKeys once, the following fields are + // valid. + SSID [8]byte + TheirPublicKey PublicKey + + state, authState int + + r [16]byte + x, y *big.Int + gx, gy *big.Int + gxBytes []byte + digest [sha256.Size]byte + + revealKeys, sigKeys akeKeys + + myKeyId uint32 + myCurrentDHPub *big.Int + myCurrentDHPriv *big.Int + myLastDHPub *big.Int + myLastDHPriv *big.Int + + theirKeyId uint32 + theirCurrentDHPub *big.Int + theirLastDHPub *big.Int + + keySlots [4]keySlot + + myCounter [8]byte + theirLastCtr [8]byte + oldMACs []byte + + k, n int // fragment state + frag []byte + + smp smpState +} + +// A keySlot contains key material for a specific (their keyid, my keyid) pair. +type keySlot struct { + // used is true if this slot is valid. If false, it's free for reuse. + used bool + theirKeyId uint32 + myKeyId uint32 + sendAESKey, recvAESKey []byte + sendMACKey, recvMACKey []byte + theirLastCtr [8]byte +} + +// akeKeys are generated during key exchange. There's one set for the reveal +// signature message and another for the signature message. In the protocol +// spec the latter are indicated with a prime mark. +type akeKeys struct { + c [16]byte + m1, m2 [32]byte +} + +func (c *Conversation) rand() io.Reader { + if c.Rand != nil { + return c.Rand + } + return rand.Reader +} + +func (c *Conversation) randMPI(buf []byte) *big.Int { + _, err := io.ReadFull(c.rand(), buf) + if err != nil { + panic("otr: short read from random source") + } + + return new(big.Int).SetBytes(buf) +} + +// tlv represents the type-length value from the protocol. +type tlv struct { + typ, length uint16 + data []byte +} + +const ( + tlvTypePadding = 0 + tlvTypeDisconnected = 1 + tlvTypeSMP1 = 2 + tlvTypeSMP2 = 3 + tlvTypeSMP3 = 4 + tlvTypeSMP4 = 5 + tlvTypeSMPAbort = 6 + tlvTypeSMP1WithQuestion = 7 +) + +// Receive handles a message from a peer. It returns a human readable message, +// an indicator of whether that message was encrypted, a hint about the +// encryption state and zero or more messages to send back to the peer. +// These messages do not need to be passed to Send before transmission. +func (c *Conversation) Receive(in []byte) (out []byte, encrypted bool, change SecurityChange, toSend [][]byte, err error) { + if bytes.HasPrefix(in, fragmentPrefix) { + in, err = c.processFragment(in) + if in == nil || err != nil { + return + } + } + + if bytes.HasPrefix(in, msgPrefix) && in[len(in)-1] == '.' { + in = in[len(msgPrefix) : len(in)-1] + } else if version := isQuery(in); version > 0 { + c.authState = authStateAwaitingDHKey + c.reset() + toSend = c.encode(c.generateDHCommit()) + return + } else { + // plaintext message + out = in + return + } + + msg := make([]byte, base64.StdEncoding.DecodedLen(len(in))) + msgLen, err := base64.StdEncoding.Decode(msg, in) + if err != nil { + err = errors.New("otr: invalid base64 encoding in message") + return + } + msg = msg[:msgLen] + + // The first two bytes are the protocol version (2) + if len(msg) < 3 || msg[0] != 0 || msg[1] != 2 { + err = errors.New("otr: invalid OTR message") + return + } + + msgType := int(msg[2]) + msg = msg[3:] + + switch msgType { + case msgTypeDHCommit: + switch c.authState { + case authStateNone: + c.authState = authStateAwaitingRevealSig + if err = c.processDHCommit(msg); err != nil { + return + } + c.reset() + toSend = c.encode(c.generateDHKey()) + return + case authStateAwaitingDHKey: + // This is a 'SYN-crossing'. The greater digest wins. + var cmp int + if cmp, err = c.compareToDHCommit(msg); err != nil { + return + } + if cmp > 0 { + // We win. Retransmit DH commit. + toSend = c.encode(c.serializeDHCommit()) + return + } else { + // They win. We forget about our DH commit. + c.authState = authStateAwaitingRevealSig + if err = c.processDHCommit(msg); err != nil { + return + } + c.reset() + toSend = c.encode(c.generateDHKey()) + return + } + case authStateAwaitingRevealSig: + if err = c.processDHCommit(msg); err != nil { + return + } + toSend = c.encode(c.serializeDHKey()) + case authStateAwaitingSig: + if err = c.processDHCommit(msg); err != nil { + return + } + c.reset() + toSend = c.encode(c.generateDHKey()) + c.authState = authStateAwaitingRevealSig + default: + panic("bad state") + } + case msgTypeDHKey: + switch c.authState { + case authStateAwaitingDHKey: + var isSame bool + if isSame, err = c.processDHKey(msg); err != nil { + return + } + if isSame { + err = errors.New("otr: unexpected duplicate DH key") + return + } + toSend = c.encode(c.generateRevealSig()) + c.authState = authStateAwaitingSig + case authStateAwaitingSig: + var isSame bool + if isSame, err = c.processDHKey(msg); err != nil { + return + } + if isSame { + toSend = c.encode(c.serializeDHKey()) + } + } + case msgTypeRevealSig: + if c.authState != authStateAwaitingRevealSig { + return + } + if err = c.processRevealSig(msg); err != nil { + return + } + toSend = c.encode(c.generateSig()) + c.authState = authStateNone + c.state = stateEncrypted + change = NewKeys + case msgTypeSig: + if c.authState != authStateAwaitingSig { + return + } + if err = c.processSig(msg); err != nil { + return + } + c.authState = authStateNone + c.state = stateEncrypted + change = NewKeys + case msgTypeData: + if c.state != stateEncrypted { + err = errors.New("otr: encrypted message received without encrypted session established") + return + } + var tlvs []tlv + out, tlvs, err = c.processData(msg) + encrypted = true + + EachTLV: + for _, inTLV := range tlvs { + switch inTLV.typ { + case tlvTypeDisconnected: + change = ConversationEnded + c.state = stateFinished + break EachTLV + case tlvTypeSMP1, tlvTypeSMP2, tlvTypeSMP3, tlvTypeSMP4, tlvTypeSMPAbort, tlvTypeSMP1WithQuestion: + var reply tlv + var complete bool + reply, complete, err = c.processSMP(inTLV) + if err == smpSecretMissingError { + err = nil + change = SMPSecretNeeded + c.smp.saved = &inTLV + return + } + if err == smpFailureError { + err = nil + change = SMPFailed + } else if complete { + change = SMPComplete + } + if reply.typ != 0 { + toSend = c.encode(c.generateData(nil, &reply)) + } + break EachTLV + default: + // skip unknown TLVs + } + } + default: + err = errors.New("otr: unknown message type " + strconv.Itoa(msgType)) + } + + return +} + +// Send takes a human readable message from the local user, possibly encrypts +// it and returns zero one or more messages to send to the peer. +func (c *Conversation) Send(msg []byte) ([][]byte, error) { + switch c.state { + case statePlaintext: + return [][]byte{msg}, nil + case stateEncrypted: + return c.encode(c.generateData(msg, nil)), nil + case stateFinished: + return nil, errors.New("otr: cannot send message because secure conversation has finished") + } + + return nil, errors.New("otr: cannot send message in current state") +} + +// SMPQuestion returns the human readable challenge question from the peer. +// It's only valid after Receive has returned SMPSecretNeeded. +func (c *Conversation) SMPQuestion() string { + return c.smp.question +} + +// Authenticate begins an authentication with the peer. Authentication involves +// an optional challenge message and a shared secret. The authentication +// proceeds until either Receive returns SMPComplete, SMPSecretNeeded (which +// indicates that a new authentication is happening and thus this one was +// aborted) or SMPFailed. +func (c *Conversation) Authenticate(question string, mutualSecret []byte) (toSend [][]byte, err error) { + if c.state != stateEncrypted { + err = errors.New("otr: can't authenticate a peer without a secure conversation established") + return + } + + if c.smp.saved != nil { + c.calcSMPSecret(mutualSecret, false /* they started it */) + + var out tlv + var complete bool + out, complete, err = c.processSMP(*c.smp.saved) + if complete { + panic("SMP completed on the first message") + } + c.smp.saved = nil + if out.typ != 0 { + toSend = c.encode(c.generateData(nil, &out)) + } + return + } + + c.calcSMPSecret(mutualSecret, true /* we started it */) + outs := c.startSMP(question) + for _, out := range outs { + toSend = append(toSend, c.encode(c.generateData(nil, &out))...) + } + return +} + +// End ends a secure conversation by generating a termination message for +// the peer and switches to unencrypted communication. +func (c *Conversation) End() (toSend [][]byte) { + switch c.state { + case statePlaintext: + return nil + case stateEncrypted: + c.state = statePlaintext + return c.encode(c.generateData(nil, &tlv{typ: tlvTypeDisconnected})) + case stateFinished: + c.state = statePlaintext + return nil + } + panic("unreachable") +} + +// IsEncrypted returns true if a message passed to Send would be encrypted +// before transmission. This result remains valid until the next call to +// Receive or End, which may change the state of the Conversation. +func (c *Conversation) IsEncrypted() bool { + return c.state == stateEncrypted +} + +var fragmentError = errors.New("otr: invalid OTR fragment") + +// processFragment processes a fragmented OTR message and possibly returns a +// complete message. Fragmented messages look like "?OTR,k,n,msg," where k is +// the fragment number (starting from 1), n is the number of fragments in this +// message and msg is a substring of the base64 encoded message. +func (c *Conversation) processFragment(in []byte) (out []byte, err error) { + in = in[len(fragmentPrefix):] // remove "?OTR," + parts := bytes.Split(in, fragmentPartSeparator) + if len(parts) != 4 || len(parts[3]) != 0 { + return nil, fragmentError + } + + k, err := strconv.Atoi(string(parts[0])) + if err != nil { + return nil, fragmentError + } + + n, err := strconv.Atoi(string(parts[1])) + if err != nil { + return nil, fragmentError + } + + if k < 1 || n < 1 || k > n { + return nil, fragmentError + } + + if k == 1 { + c.frag = append(c.frag[:0], parts[2]...) + c.k, c.n = k, n + } else if n == c.n && k == c.k+1 { + c.frag = append(c.frag, parts[2]...) + c.k++ + } else { + c.frag = c.frag[:0] + c.n, c.k = 0, 0 + } + + if c.n > 0 && c.k == c.n { + c.n, c.k = 0, 0 + return c.frag, nil + } + + return nil, nil +} + +func (c *Conversation) generateDHCommit() []byte { + _, err := io.ReadFull(c.rand(), c.r[:]) + if err != nil { + panic("otr: short read from random source") + } + + var xBytes [dhPrivateBytes]byte + c.x = c.randMPI(xBytes[:]) + c.gx = new(big.Int).Exp(g, c.x, p) + c.gy = nil + c.gxBytes = appendMPI(nil, c.gx) + + h := sha256.New() + h.Write(c.gxBytes) + h.Sum(c.digest[:0]) + + aesCipher, err := aes.NewCipher(c.r[:]) + if err != nil { + panic(err.Error()) + } + + var iv [aes.BlockSize]byte + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(c.gxBytes, c.gxBytes) + + return c.serializeDHCommit() +} + +func (c *Conversation) serializeDHCommit() []byte { + var ret []byte + ret = appendU16(ret, 2) // protocol version + ret = append(ret, msgTypeDHCommit) + ret = appendData(ret, c.gxBytes) + ret = appendData(ret, c.digest[:]) + return ret +} + +func (c *Conversation) processDHCommit(in []byte) error { + var ok1, ok2 bool + c.gxBytes, in, ok1 = getData(in) + digest, in, ok2 := getData(in) + if !ok1 || !ok2 || len(in) > 0 { + return errors.New("otr: corrupt DH commit message") + } + copy(c.digest[:], digest) + return nil +} + +func (c *Conversation) compareToDHCommit(in []byte) (int, error) { + _, in, ok1 := getData(in) + digest, in, ok2 := getData(in) + if !ok1 || !ok2 || len(in) > 0 { + return 0, errors.New("otr: corrupt DH commit message") + } + return bytes.Compare(c.digest[:], digest), nil +} + +func (c *Conversation) generateDHKey() []byte { + var yBytes [dhPrivateBytes]byte + c.y = c.randMPI(yBytes[:]) + c.gy = new(big.Int).Exp(g, c.y, p) + return c.serializeDHKey() +} + +func (c *Conversation) serializeDHKey() []byte { + var ret []byte + ret = appendU16(ret, 2) // protocol version + ret = append(ret, msgTypeDHKey) + ret = appendMPI(ret, c.gy) + return ret +} + +func (c *Conversation) processDHKey(in []byte) (isSame bool, err error) { + gy, in, ok := getMPI(in) + if !ok { + err = errors.New("otr: corrupt DH key message") + return + } + if gy.Cmp(g) < 0 || gy.Cmp(pMinus2) > 0 { + err = errors.New("otr: DH value out of range") + return + } + if c.gy != nil { + isSame = c.gy.Cmp(gy) == 0 + return + } + c.gy = gy + return +} + +func (c *Conversation) generateEncryptedSignature(keys *akeKeys, xFirst bool) ([]byte, []byte) { + var xb []byte + xb = c.PrivateKey.PublicKey.Serialize(xb) + + var verifyData []byte + if xFirst { + verifyData = appendMPI(verifyData, c.gx) + verifyData = appendMPI(verifyData, c.gy) + } else { + verifyData = appendMPI(verifyData, c.gy) + verifyData = appendMPI(verifyData, c.gx) + } + verifyData = append(verifyData, xb...) + verifyData = appendU32(verifyData, c.myKeyId) + + mac := hmac.New(sha256.New, keys.m1[:]) + mac.Write(verifyData) + mb := mac.Sum(nil) + + xb = appendU32(xb, c.myKeyId) + xb = append(xb, c.PrivateKey.Sign(c.rand(), mb)...) + + aesCipher, err := aes.NewCipher(keys.c[:]) + if err != nil { + panic(err.Error()) + } + var iv [aes.BlockSize]byte + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(xb, xb) + + mac = hmac.New(sha256.New, keys.m2[:]) + encryptedSig := appendData(nil, xb) + mac.Write(encryptedSig) + + return encryptedSig, mac.Sum(nil) +} + +func (c *Conversation) generateRevealSig() []byte { + s := new(big.Int).Exp(c.gy, c.x, p) + c.calcAKEKeys(s) + c.myKeyId++ + + encryptedSig, mac := c.generateEncryptedSignature(&c.revealKeys, true /* gx comes first */) + + c.myCurrentDHPub = c.gx + c.myCurrentDHPriv = c.x + c.rotateDHKeys() + incCounter(&c.myCounter) + + var ret []byte + ret = appendU16(ret, 2) + ret = append(ret, msgTypeRevealSig) + ret = appendData(ret, c.r[:]) + ret = append(ret, encryptedSig...) + ret = append(ret, mac[:20]...) + return ret +} + +func (c *Conversation) processEncryptedSig(encryptedSig, theirMAC []byte, keys *akeKeys, xFirst bool) error { + mac := hmac.New(sha256.New, keys.m2[:]) + mac.Write(appendData(nil, encryptedSig)) + myMAC := mac.Sum(nil)[:20] + + if len(myMAC) != len(theirMAC) || subtle.ConstantTimeCompare(myMAC, theirMAC) == 0 { + return errors.New("bad signature MAC in encrypted signature") + } + + aesCipher, err := aes.NewCipher(keys.c[:]) + if err != nil { + panic(err.Error()) + } + var iv [aes.BlockSize]byte + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(encryptedSig, encryptedSig) + + sig := encryptedSig + sig, ok1 := c.TheirPublicKey.Parse(sig) + keyId, sig, ok2 := getU32(sig) + if !ok1 || !ok2 { + return errors.New("otr: corrupt encrypted signature") + } + + var verifyData []byte + if xFirst { + verifyData = appendMPI(verifyData, c.gx) + verifyData = appendMPI(verifyData, c.gy) + } else { + verifyData = appendMPI(verifyData, c.gy) + verifyData = appendMPI(verifyData, c.gx) + } + verifyData = c.TheirPublicKey.Serialize(verifyData) + verifyData = appendU32(verifyData, keyId) + + mac = hmac.New(sha256.New, keys.m1[:]) + mac.Write(verifyData) + mb := mac.Sum(nil) + + sig, ok1 = c.TheirPublicKey.Verify(mb, sig) + if !ok1 { + return errors.New("bad signature in encrypted signature") + } + if len(sig) > 0 { + return errors.New("corrupt encrypted signature") + } + + c.theirKeyId = keyId + zero(c.theirLastCtr[:]) + return nil +} + +func (c *Conversation) processRevealSig(in []byte) error { + r, in, ok1 := getData(in) + encryptedSig, in, ok2 := getData(in) + theirMAC := in + if !ok1 || !ok2 || len(theirMAC) != 20 { + return errors.New("otr: corrupt reveal signature message") + } + + aesCipher, err := aes.NewCipher(r) + if err != nil { + return errors.New("otr: cannot create AES cipher from reveal signature message: " + err.Error()) + } + var iv [aes.BlockSize]byte + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(c.gxBytes, c.gxBytes) + h := sha256.New() + h.Write(c.gxBytes) + digest := h.Sum(nil) + if len(digest) != len(c.digest) || subtle.ConstantTimeCompare(digest, c.digest[:]) == 0 { + return errors.New("otr: bad commit MAC in reveal signature message") + } + var rest []byte + c.gx, rest, ok1 = getMPI(c.gxBytes) + if !ok1 || len(rest) > 0 { + return errors.New("otr: gx corrupt after decryption") + } + if c.gx.Cmp(g) < 0 || c.gx.Cmp(pMinus2) > 0 { + return errors.New("otr: DH value out of range") + } + s := new(big.Int).Exp(c.gx, c.y, p) + c.calcAKEKeys(s) + + if err := c.processEncryptedSig(encryptedSig, theirMAC, &c.revealKeys, true /* gx comes first */); err != nil { + return errors.New("otr: in reveal signature message: " + err.Error()) + } + + c.theirCurrentDHPub = c.gx + c.theirLastDHPub = nil + + return nil +} + +func (c *Conversation) generateSig() []byte { + c.myKeyId++ + + encryptedSig, mac := c.generateEncryptedSignature(&c.sigKeys, false /* gy comes first */) + + c.myCurrentDHPub = c.gy + c.myCurrentDHPriv = c.y + c.rotateDHKeys() + incCounter(&c.myCounter) + + var ret []byte + ret = appendU16(ret, 2) + ret = append(ret, msgTypeSig) + ret = append(ret, encryptedSig...) + ret = append(ret, mac[:macPrefixBytes]...) + return ret +} + +func (c *Conversation) processSig(in []byte) error { + encryptedSig, in, ok1 := getData(in) + theirMAC := in + if !ok1 || len(theirMAC) != macPrefixBytes { + return errors.New("otr: corrupt signature message") + } + + if err := c.processEncryptedSig(encryptedSig, theirMAC, &c.sigKeys, false /* gy comes first */); err != nil { + return errors.New("otr: in signature message: " + err.Error()) + } + + c.theirCurrentDHPub = c.gy + c.theirLastDHPub = nil + + return nil +} + +func (c *Conversation) rotateDHKeys() { + // evict slots using our retired key id + for i := range c.keySlots { + slot := &c.keySlots[i] + if slot.used && slot.myKeyId == c.myKeyId-1 { + slot.used = false + c.oldMACs = append(c.oldMACs, slot.recvMACKey...) + } + } + + c.myLastDHPriv = c.myCurrentDHPriv + c.myLastDHPub = c.myCurrentDHPub + + var xBytes [dhPrivateBytes]byte + c.myCurrentDHPriv = c.randMPI(xBytes[:]) + c.myCurrentDHPub = new(big.Int).Exp(g, c.myCurrentDHPriv, p) + c.myKeyId++ +} + +func (c *Conversation) processData(in []byte) (out []byte, tlvs []tlv, err error) { + origIn := in + flags, in, ok1 := getU8(in) + theirKeyId, in, ok2 := getU32(in) + myKeyId, in, ok3 := getU32(in) + y, in, ok4 := getMPI(in) + counter, in, ok5 := getNBytes(in, 8) + encrypted, in, ok6 := getData(in) + macedData := origIn[:len(origIn)-len(in)] + theirMAC, in, ok7 := getNBytes(in, macPrefixBytes) + _, in, ok8 := getData(in) + if !ok1 || !ok2 || !ok3 || !ok4 || !ok5 || !ok6 || !ok7 || !ok8 || len(in) > 0 { + err = errors.New("otr: corrupt data message") + return + } + + ignoreErrors := flags&1 != 0 + + slot, err := c.calcDataKeys(myKeyId, theirKeyId) + if err != nil { + if ignoreErrors { + err = nil + } + return + } + + mac := hmac.New(sha1.New, slot.recvMACKey) + mac.Write([]byte{0, 2, 3}) + mac.Write(macedData) + myMAC := mac.Sum(nil) + if len(myMAC) != len(theirMAC) || subtle.ConstantTimeCompare(myMAC, theirMAC) == 0 { + if !ignoreErrors { + err = errors.New("otr: bad MAC on data message") + } + return + } + + if bytes.Compare(counter, slot.theirLastCtr[:]) <= 0 { + err = errors.New("otr: counter regressed") + return + } + copy(slot.theirLastCtr[:], counter) + + var iv [aes.BlockSize]byte + copy(iv[:], counter) + aesCipher, err := aes.NewCipher(slot.recvAESKey) + if err != nil { + panic(err.Error()) + } + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(encrypted, encrypted) + decrypted := encrypted + + if myKeyId == c.myKeyId { + c.rotateDHKeys() + } + if theirKeyId == c.theirKeyId { + // evict slots using their retired key id + for i := range c.keySlots { + slot := &c.keySlots[i] + if slot.used && slot.theirKeyId == theirKeyId-1 { + slot.used = false + c.oldMACs = append(c.oldMACs, slot.recvMACKey...) + } + } + + c.theirLastDHPub = c.theirCurrentDHPub + c.theirKeyId++ + c.theirCurrentDHPub = y + } + + if nulPos := bytes.IndexByte(decrypted, 0); nulPos >= 0 { + out = decrypted[:nulPos] + tlvData := decrypted[nulPos+1:] + for len(tlvData) > 0 { + var t tlv + var ok1, ok2, ok3 bool + + t.typ, tlvData, ok1 = getU16(tlvData) + t.length, tlvData, ok2 = getU16(tlvData) + t.data, tlvData, ok3 = getNBytes(tlvData, int(t.length)) + if !ok1 || !ok2 || !ok3 { + err = errors.New("otr: corrupt tlv data") + return + } + tlvs = append(tlvs, t) + } + } else { + out = decrypted + } + + return +} + +func (c *Conversation) generateData(msg []byte, extra *tlv) []byte { + slot, err := c.calcDataKeys(c.myKeyId-1, c.theirKeyId) + if err != nil { + panic("otr: failed to generate sending keys: " + err.Error()) + } + + var plaintext []byte + plaintext = append(plaintext, msg...) + plaintext = append(plaintext, 0) + + padding := paddingGranularity - ((len(plaintext) + 4) % paddingGranularity) + plaintext = appendU16(plaintext, tlvTypePadding) + plaintext = appendU16(plaintext, uint16(padding)) + for i := 0; i < padding; i++ { + plaintext = append(plaintext, 0) + } + + if extra != nil { + plaintext = appendU16(plaintext, extra.typ) + plaintext = appendU16(plaintext, uint16(len(extra.data))) + plaintext = append(plaintext, extra.data...) + } + + encrypted := make([]byte, len(plaintext)) + + var iv [aes.BlockSize]byte + copy(iv[:], c.myCounter[:]) + aesCipher, err := aes.NewCipher(slot.sendAESKey) + if err != nil { + panic(err.Error()) + } + ctr := cipher.NewCTR(aesCipher, iv[:]) + ctr.XORKeyStream(encrypted, plaintext) + + var ret []byte + ret = appendU16(ret, 2) + ret = append(ret, msgTypeData) + ret = append(ret, 0 /* flags */) + ret = appendU32(ret, c.myKeyId-1) + ret = appendU32(ret, c.theirKeyId) + ret = appendMPI(ret, c.myCurrentDHPub) + ret = append(ret, c.myCounter[:]...) + ret = appendData(ret, encrypted) + + mac := hmac.New(sha1.New, slot.sendMACKey) + mac.Write(ret) + ret = append(ret, mac.Sum(nil)[:macPrefixBytes]...) + ret = appendData(ret, c.oldMACs) + c.oldMACs = nil + incCounter(&c.myCounter) + + return ret +} + +func incCounter(counter *[8]byte) { + for i := 7; i >= 0; i-- { + counter[i]++ + if counter[i] > 0 { + break + } + } +} + +// calcDataKeys computes the keys used to encrypt a data message given the key +// IDs. +func (c *Conversation) calcDataKeys(myKeyId, theirKeyId uint32) (slot *keySlot, err error) { + // Check for a cache hit. + for i := range c.keySlots { + slot = &c.keySlots[i] + if slot.used && slot.theirKeyId == theirKeyId && slot.myKeyId == myKeyId { + return + } + } + + // Find an empty slot to write into. + slot = nil + for i := range c.keySlots { + if !c.keySlots[i].used { + slot = &c.keySlots[i] + break + } + } + if slot == nil { + return nil, errors.New("otr: internal error: no more key slots") + } + + var myPriv, myPub, theirPub *big.Int + + if myKeyId == c.myKeyId { + myPriv = c.myCurrentDHPriv + myPub = c.myCurrentDHPub + } else if myKeyId == c.myKeyId-1 { + myPriv = c.myLastDHPriv + myPub = c.myLastDHPub + } else { + err = errors.New("otr: peer requested keyid " + strconv.FormatUint(uint64(myKeyId), 10) + " when I'm on " + strconv.FormatUint(uint64(c.myKeyId), 10)) + return + } + + if theirKeyId == c.theirKeyId { + theirPub = c.theirCurrentDHPub + } else if theirKeyId == c.theirKeyId-1 && c.theirLastDHPub != nil { + theirPub = c.theirLastDHPub + } else { + err = errors.New("otr: peer requested keyid " + strconv.FormatUint(uint64(myKeyId), 10) + " when they're on " + strconv.FormatUint(uint64(c.myKeyId), 10)) + return + } + + var sendPrefixByte, recvPrefixByte [1]byte + + if myPub.Cmp(theirPub) > 0 { + // we're the high end + sendPrefixByte[0], recvPrefixByte[0] = 1, 2 + } else { + // we're the low end + sendPrefixByte[0], recvPrefixByte[0] = 2, 1 + } + + s := new(big.Int).Exp(theirPub, myPriv, p) + sBytes := appendMPI(nil, s) + + h := sha1.New() + h.Write(sendPrefixByte[:]) + h.Write(sBytes) + slot.sendAESKey = h.Sum(slot.sendAESKey[:0])[:16] + + h.Reset() + h.Write(slot.sendAESKey) + slot.sendMACKey = h.Sum(slot.sendMACKey[:0]) + + h.Reset() + h.Write(recvPrefixByte[:]) + h.Write(sBytes) + slot.recvAESKey = h.Sum(slot.recvAESKey[:0])[:16] + + h.Reset() + h.Write(slot.recvAESKey) + slot.recvMACKey = h.Sum(slot.recvMACKey[:0]) + + slot.theirKeyId = theirKeyId + slot.myKeyId = myKeyId + slot.used = true + + zero(slot.theirLastCtr[:]) + return +} + +func (c *Conversation) calcAKEKeys(s *big.Int) { + mpi := appendMPI(nil, s) + h := sha256.New() + + var cBytes [32]byte + hashWithPrefix(c.SSID[:], 0, mpi, h) + + hashWithPrefix(cBytes[:], 1, mpi, h) + copy(c.revealKeys.c[:], cBytes[:16]) + copy(c.sigKeys.c[:], cBytes[16:]) + + hashWithPrefix(c.revealKeys.m1[:], 2, mpi, h) + hashWithPrefix(c.revealKeys.m2[:], 3, mpi, h) + hashWithPrefix(c.sigKeys.m1[:], 4, mpi, h) + hashWithPrefix(c.sigKeys.m2[:], 5, mpi, h) +} + +func hashWithPrefix(out []byte, prefix byte, in []byte, h hash.Hash) { + h.Reset() + var p [1]byte + p[0] = prefix + h.Write(p[:]) + h.Write(in) + if len(out) == h.Size() { + h.Sum(out[:0]) + } else { + digest := h.Sum(nil) + copy(out, digest) + } +} + +func (c *Conversation) encode(msg []byte) [][]byte { + b64 := make([]byte, base64.StdEncoding.EncodedLen(len(msg))+len(msgPrefix)+1) + base64.StdEncoding.Encode(b64[len(msgPrefix):], msg) + copy(b64, msgPrefix) + b64[len(b64)-1] = '.' + + if c.FragmentSize < minFragmentSize || len(b64) <= c.FragmentSize { + // We can encode this in a single fragment. + return [][]byte{b64} + } + + // We have to fragment this message. + var ret [][]byte + bytesPerFragment := c.FragmentSize - minFragmentSize + numFragments := (len(b64) + bytesPerFragment) / bytesPerFragment + + for i := 0; i < numFragments; i++ { + frag := []byte("?OTR," + strconv.Itoa(i+1) + "," + strconv.Itoa(numFragments) + ",") + todo := bytesPerFragment + if todo > len(b64) { + todo = len(b64) + } + frag = append(frag, b64[:todo]...) + b64 = b64[todo:] + frag = append(frag, ',') + ret = append(ret, frag) + } + + return ret +} + +func (c *Conversation) reset() { + c.myKeyId = 0 + + for i := range c.keySlots { + c.keySlots[i].used = false + } +} + +type PublicKey struct { + dsa.PublicKey +} + +func (pk *PublicKey) Parse(in []byte) ([]byte, bool) { + var ok bool + var pubKeyType uint16 + + if pubKeyType, in, ok = getU16(in); !ok || pubKeyType != 0 { + return nil, false + } + if pk.P, in, ok = getMPI(in); !ok { + return nil, false + } + if pk.Q, in, ok = getMPI(in); !ok { + return nil, false + } + if pk.G, in, ok = getMPI(in); !ok { + return nil, false + } + if pk.Y, in, ok = getMPI(in); !ok { + return nil, false + } + + return in, true +} + +func (pk *PublicKey) Serialize(in []byte) []byte { + in = appendU16(in, 0) + in = appendMPI(in, pk.P) + in = appendMPI(in, pk.Q) + in = appendMPI(in, pk.G) + in = appendMPI(in, pk.Y) + return in +} + +// Fingerprint returns the 20-byte, binary fingerprint of the PublicKey. +func (pk *PublicKey) Fingerprint() []byte { + b := pk.Serialize(nil) + h := sha1.New() + h.Write(b[2:]) + return h.Sum(nil) +} + +func (pk *PublicKey) Verify(hashed, sig []byte) ([]byte, bool) { + if len(sig) != 2*dsaSubgroupBytes { + return nil, false + } + r := new(big.Int).SetBytes(sig[:dsaSubgroupBytes]) + s := new(big.Int).SetBytes(sig[dsaSubgroupBytes:]) + ok := dsa.Verify(&pk.PublicKey, hashed, r, s) + return sig[dsaSubgroupBytes*2:], ok +} + +type PrivateKey struct { + PublicKey + dsa.PrivateKey +} + +func (priv *PrivateKey) Sign(rand io.Reader, hashed []byte) []byte { + r, s, err := dsa.Sign(rand, &priv.PrivateKey, hashed) + if err != nil { + panic(err.Error()) + } + rBytes := r.Bytes() + sBytes := s.Bytes() + if len(rBytes) > dsaSubgroupBytes || len(sBytes) > dsaSubgroupBytes { + panic("DSA signature too large") + } + + out := make([]byte, 2*dsaSubgroupBytes) + copy(out[dsaSubgroupBytes-len(rBytes):], rBytes) + copy(out[len(out)-len(sBytes):], sBytes) + return out +} + +func (priv *PrivateKey) Serialize(in []byte) []byte { + in = priv.PublicKey.Serialize(in) + in = appendMPI(in, priv.PrivateKey.X) + return in +} + +func (priv *PrivateKey) Parse(in []byte) ([]byte, bool) { + in, ok := priv.PublicKey.Parse(in) + if !ok { + return in, ok + } + priv.PrivateKey.PublicKey = priv.PublicKey.PublicKey + priv.PrivateKey.X, in, ok = getMPI(in) + return in, ok +} + +func (priv *PrivateKey) Generate(rand io.Reader) { + if err := dsa.GenerateParameters(&priv.PrivateKey.PublicKey.Parameters, rand, dsa.L1024N160); err != nil { + panic(err.Error()) + } + if err := dsa.GenerateKey(&priv.PrivateKey, rand); err != nil { + panic(err.Error()) + } + priv.PublicKey.PublicKey = priv.PrivateKey.PublicKey +} + +func notHex(r rune) bool { + if r >= '0' && r <= '9' || + r >= 'a' && r <= 'f' || + r >= 'A' && r <= 'F' { + return false + } + + return true +} + +// Import parses the contents of a libotr private key file. +func (priv *PrivateKey) Import(in []byte) bool { + mpiStart := []byte(" #") + + mpis := make([]*big.Int, 5) + + for i := 0; i < len(mpis); i++ { + start := bytes.Index(in, mpiStart) + if start == -1 { + return false + } + in = in[start+len(mpiStart):] + end := bytes.IndexFunc(in, notHex) + if end == -1 { + return false + } + hexBytes := in[:end] + in = in[end:] + + if len(hexBytes)&1 != 0 { + return false + } + + mpiBytes := make([]byte, len(hexBytes)/2) + if _, err := hex.Decode(mpiBytes, hexBytes); err != nil { + return false + } + + mpis[i] = new(big.Int).SetBytes(mpiBytes) + } + + for _, mpi := range mpis { + if mpi.Sign() <= 0 { + return false + } + } + + priv.PrivateKey.P = mpis[0] + priv.PrivateKey.Q = mpis[1] + priv.PrivateKey.G = mpis[2] + priv.PrivateKey.Y = mpis[3] + priv.PrivateKey.X = mpis[4] + priv.PublicKey.PublicKey = priv.PrivateKey.PublicKey + + a := new(big.Int).Exp(priv.PrivateKey.G, priv.PrivateKey.X, priv.PrivateKey.P) + return a.Cmp(priv.PrivateKey.Y) == 0 +} + +func getU8(in []byte) (uint8, []byte, bool) { + if len(in) < 1 { + return 0, in, false + } + return in[0], in[1:], true +} + +func getU16(in []byte) (uint16, []byte, bool) { + if len(in) < 2 { + return 0, in, false + } + r := uint16(in[0])<<8 | uint16(in[1]) + return r, in[2:], true +} + +func getU32(in []byte) (uint32, []byte, bool) { + if len(in) < 4 { + return 0, in, false + } + r := uint32(in[0])<<24 | uint32(in[1])<<16 | uint32(in[2])<<8 | uint32(in[3]) + return r, in[4:], true +} + +func getMPI(in []byte) (*big.Int, []byte, bool) { + l, in, ok := getU32(in) + if !ok || uint32(len(in)) < l { + return nil, in, false + } + r := new(big.Int).SetBytes(in[:l]) + return r, in[l:], true +} + +func getData(in []byte) ([]byte, []byte, bool) { + l, in, ok := getU32(in) + if !ok || uint32(len(in)) < l { + return nil, in, false + } + return in[:l], in[l:], true +} + +func getNBytes(in []byte, n int) ([]byte, []byte, bool) { + if len(in) < n { + return nil, in, false + } + return in[:n], in[n:], true +} + +func appendU16(out []byte, v uint16) []byte { + out = append(out, byte(v>>8), byte(v)) + return out +} + +func appendU32(out []byte, v uint32) []byte { + out = append(out, byte(v>>24), byte(v>>16), byte(v>>8), byte(v)) + return out +} + +func appendData(out, v []byte) []byte { + out = appendU32(out, uint32(len(v))) + out = append(out, v...) + return out +} + +func appendMPI(out []byte, v *big.Int) []byte { + vBytes := v.Bytes() + out = appendU32(out, uint32(len(vBytes))) + out = append(out, vBytes...) + return out +} + +func appendMPIs(out []byte, mpis ...*big.Int) []byte { + for _, mpi := range mpis { + out = appendMPI(out, mpi) + } + return out +} + +func zero(b []byte) { + for i := range b { + b[i] = 0 + } +} diff --git a/vendor/golang.org/x/crypto/otr/otr_test.go b/vendor/golang.org/x/crypto/otr/otr_test.go new file mode 100644 index 0000000..cfcd062 --- /dev/null +++ b/vendor/golang.org/x/crypto/otr/otr_test.go @@ -0,0 +1,470 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package otr + +import ( + "bufio" + "bytes" + "crypto/rand" + "encoding/hex" + "math/big" + "os" + "os/exec" + "testing" +) + +var isQueryTests = []struct { + msg string + expectedVersion int +}{ + {"foo", 0}, + {"?OtR", 0}, + {"?OtR?", 0}, + {"?OTR?", 0}, + {"?OTRv?", 0}, + {"?OTRv1?", 0}, + {"?OTR?v1?", 0}, + {"?OTR?v?", 0}, + {"?OTR?v2?", 2}, + {"?OTRv2?", 2}, + {"?OTRv23?", 2}, + {"?OTRv23 ?", 0}, +} + +func TestIsQuery(t *testing.T) { + for i, test := range isQueryTests { + version := isQuery([]byte(test.msg)) + if version != test.expectedVersion { + t.Errorf("#%d: got %d, want %d", i, version, test.expectedVersion) + } + } +} + +var alicePrivateKeyHex = "000000000080c81c2cb2eb729b7e6fd48e975a932c638b3a9055478583afa46755683e30102447f6da2d8bec9f386bbb5da6403b0040fee8650b6ab2d7f32c55ab017ae9b6aec8c324ab5844784e9a80e194830d548fb7f09a0410df2c4d5c8bc2b3e9ad484e65412be689cf0834694e0839fb2954021521ffdffb8f5c32c14dbf2020b3ce7500000014da4591d58def96de61aea7b04a8405fe1609308d000000808ddd5cb0b9d66956e3dea5a915d9aba9d8a6e7053b74dadb2fc52f9fe4e5bcc487d2305485ed95fed026ad93f06ebb8c9e8baf693b7887132c7ffdd3b0f72f4002ff4ed56583ca7c54458f8c068ca3e8a4dfa309d1dd5d34e2a4b68e6f4338835e5e0fb4317c9e4c7e4806dafda3ef459cd563775a586dd91b1319f72621bf3f00000080b8147e74d8c45e6318c37731b8b33b984a795b3653c2cd1d65cc99efe097cb7eb2fa49569bab5aab6e8a1c261a27d0f7840a5e80b317e6683042b59b6dceca2879c6ffc877a465be690c15e4a42f9a7588e79b10faac11b1ce3741fcef7aba8ce05327a2c16d279ee1b3d77eb783fb10e3356caa25635331e26dd42b8396c4d00000001420bec691fea37ecea58a5c717142f0b804452f57" + +var aliceFingerprintHex = "0bb01c360424522e94ee9c346ce877a1a4288b2f" + +var bobPrivateKeyHex = "000000000080a5138eb3d3eb9c1d85716faecadb718f87d31aaed1157671d7fee7e488f95e8e0ba60ad449ec732710a7dec5190f7182af2e2f98312d98497221dff160fd68033dd4f3a33b7c078d0d9f66e26847e76ca7447d4bab35486045090572863d9e4454777f24d6706f63e02548dfec2d0a620af37bbc1d24f884708a212c343b480d00000014e9c58f0ea21a5e4dfd9f44b6a9f7f6a9961a8fa9000000803c4d111aebd62d3c50c2889d420a32cdf1e98b70affcc1fcf44d59cca2eb019f6b774ef88153fb9b9615441a5fe25ea2d11b74ce922ca0232bd81b3c0fcac2a95b20cb6e6c0c5c1ace2e26f65dc43c751af0edbb10d669890e8ab6beea91410b8b2187af1a8347627a06ecea7e0f772c28aae9461301e83884860c9b656c722f0000008065af8625a555ea0e008cd04743671a3cda21162e83af045725db2eb2bb52712708dc0cc1a84c08b3649b88a966974bde27d8612c2861792ec9f08786a246fcadd6d8d3a81a32287745f309238f47618c2bd7612cb8b02d940571e0f30b96420bcd462ff542901b46109b1e5ad6423744448d20a57818a8cbb1647d0fea3b664e0000001440f9f2eb554cb00d45a5826b54bfa419b6980e48" + +func TestKeySerialization(t *testing.T) { + var priv PrivateKey + alicePrivateKey, _ := hex.DecodeString(alicePrivateKeyHex) + rest, ok := priv.Parse(alicePrivateKey) + if !ok { + t.Error("failed to parse private key") + } + if len(rest) > 0 { + t.Error("data remaining after parsing private key") + } + + out := priv.Serialize(nil) + if !bytes.Equal(alicePrivateKey, out) { + t.Errorf("serialization (%x) is not equal to original (%x)", out, alicePrivateKey) + } + + aliceFingerprint, _ := hex.DecodeString(aliceFingerprintHex) + fingerprint := priv.PublicKey.Fingerprint() + if !bytes.Equal(aliceFingerprint, fingerprint) { + t.Errorf("fingerprint (%x) is not equal to expected value (%x)", fingerprint, aliceFingerprint) + } +} + +const libOTRPrivateKey = `(privkeys + (account +(name "foo@example.com") +(protocol prpl-jabber) +(private-key + (dsa + (p #00FC07ABCF0DC916AFF6E9AE47BEF60C7AB9B4D6B2469E436630E36F8A489BE812486A09F30B71224508654940A835301ACC525A4FF133FC152CC53DCC59D65C30A54F1993FE13FE63E5823D4C746DB21B90F9B9C00B49EC7404AB1D929BA7FBA12F2E45C6E0A651689750E8528AB8C031D3561FECEE72EBB4A090D450A9B7A857#) + (q #00997BD266EF7B1F60A5C23F3A741F2AEFD07A2081#) + (g #535E360E8A95EBA46A4F7DE50AD6E9B2A6DB785A66B64EB9F20338D2A3E8FB0E94725848F1AA6CC567CB83A1CC517EC806F2E92EAE71457E80B2210A189B91250779434B41FC8A8873F6DB94BEA7D177F5D59E7E114EE10A49CFD9CEF88AE43387023B672927BA74B04EB6BBB5E57597766A2F9CE3857D7ACE3E1E3BC1FC6F26#) + (y #0AC8670AD767D7A8D9D14CC1AC6744CD7D76F993B77FFD9E39DF01E5A6536EF65E775FCEF2A983E2A19BD6415500F6979715D9FD1257E1FE2B6F5E1E74B333079E7C880D39868462A93454B41877BE62E5EF0A041C2EE9C9E76BD1E12AE25D9628DECB097025DD625EF49C3258A1A3C0FF501E3DC673B76D7BABF349009B6ECF#) + (x #14D0345A3562C480A039E3C72764F72D79043216#) + ) + ) + ) +)` + +func TestParseLibOTRPrivateKey(t *testing.T) { + var priv PrivateKey + + if !priv.Import([]byte(libOTRPrivateKey)) { + t.Fatalf("Failed to import sample private key") + } +} + +func TestSignVerify(t *testing.T) { + var priv PrivateKey + alicePrivateKey, _ := hex.DecodeString(alicePrivateKeyHex) + _, ok := priv.Parse(alicePrivateKey) + if !ok { + t.Error("failed to parse private key") + } + + var msg [32]byte + rand.Reader.Read(msg[:]) + + sig := priv.Sign(rand.Reader, msg[:]) + rest, ok := priv.PublicKey.Verify(msg[:], sig) + if !ok { + t.Errorf("signature (%x) of %x failed to verify", sig, msg[:]) + } else if len(rest) > 0 { + t.Error("signature data remains after verification") + } + + sig[10] ^= 80 + _, ok = priv.PublicKey.Verify(msg[:], sig) + if ok { + t.Errorf("corrupted signature (%x) of %x verified", sig, msg[:]) + } +} + +func setupConversation(t *testing.T) (alice, bob *Conversation) { + alicePrivateKey, _ := hex.DecodeString(alicePrivateKeyHex) + bobPrivateKey, _ := hex.DecodeString(bobPrivateKeyHex) + + alice, bob = new(Conversation), new(Conversation) + + alice.PrivateKey = new(PrivateKey) + bob.PrivateKey = new(PrivateKey) + alice.PrivateKey.Parse(alicePrivateKey) + bob.PrivateKey.Parse(bobPrivateKey) + alice.FragmentSize = 100 + bob.FragmentSize = 100 + + if alice.IsEncrypted() { + t.Error("Alice believes that the conversation is secure before we've started") + } + if bob.IsEncrypted() { + t.Error("Bob believes that the conversation is secure before we've started") + } + + performHandshake(t, alice, bob) + return alice, bob +} + +func performHandshake(t *testing.T, alice, bob *Conversation) { + var alicesMessage, bobsMessage [][]byte + var out []byte + var aliceChange, bobChange SecurityChange + var err error + alicesMessage = append(alicesMessage, []byte(QueryMessage)) + + for round := 0; len(alicesMessage) > 0 || len(bobsMessage) > 0; round++ { + bobsMessage = nil + for i, msg := range alicesMessage { + out, _, bobChange, bobsMessage, err = bob.Receive(msg) + if len(out) > 0 { + t.Errorf("Bob generated output during key exchange, round %d, message %d", round, i) + } + if err != nil { + t.Fatalf("Bob returned an error, round %d, message %d (%x): %s", round, i, msg, err) + } + if len(bobsMessage) > 0 && i != len(alicesMessage)-1 { + t.Errorf("Bob produced output while processing a fragment, round %d, message %d", round, i) + } + } + + alicesMessage = nil + for i, msg := range bobsMessage { + out, _, aliceChange, alicesMessage, err = alice.Receive(msg) + if len(out) > 0 { + t.Errorf("Alice generated output during key exchange, round %d, message %d", round, i) + } + if err != nil { + t.Fatalf("Alice returned an error, round %d, message %d (%x): %s", round, i, msg, err) + } + if len(alicesMessage) > 0 && i != len(bobsMessage)-1 { + t.Errorf("Alice produced output while processing a fragment, round %d, message %d", round, i) + } + } + } + + if aliceChange != NewKeys { + t.Errorf("Alice terminated without signaling new keys") + } + if bobChange != NewKeys { + t.Errorf("Bob terminated without signaling new keys") + } + + if !bytes.Equal(alice.SSID[:], bob.SSID[:]) { + t.Errorf("Session identifiers don't match. Alice has %x, Bob has %x", alice.SSID[:], bob.SSID[:]) + } + + if !alice.IsEncrypted() { + t.Error("Alice doesn't believe that the conversation is secure") + } + if !bob.IsEncrypted() { + t.Error("Bob doesn't believe that the conversation is secure") + } +} + +const ( + firstRoundTrip = iota + subsequentRoundTrip + noMACKeyCheck +) + +func roundTrip(t *testing.T, alice, bob *Conversation, message []byte, macKeyCheck int) { + alicesMessage, err := alice.Send(message) + if err != nil { + t.Errorf("Error from Alice sending message: %s", err) + } + + if len(alice.oldMACs) != 0 { + t.Errorf("Alice has not revealed all MAC keys") + } + + for i, msg := range alicesMessage { + out, encrypted, _, _, err := bob.Receive(msg) + + if err != nil { + t.Errorf("Error generated while processing test message: %s", err.Error()) + } + if len(out) > 0 { + if i != len(alicesMessage)-1 { + t.Fatal("Bob produced a message while processing a fragment of Alice's") + } + if !encrypted { + t.Errorf("Message was not marked as encrypted") + } + if !bytes.Equal(out, message) { + t.Errorf("Message corrupted: got %x, want %x", out, message) + } + } + } + + switch macKeyCheck { + case firstRoundTrip: + if len(bob.oldMACs) != 0 { + t.Errorf("Bob should not have MAC keys to reveal") + } + case subsequentRoundTrip: + if len(bob.oldMACs) != 40 { + t.Errorf("Bob has %d bytes of MAC keys to reveal, but should have 40", len(bob.oldMACs)) + } + } + + bobsMessage, err := bob.Send(message) + if err != nil { + t.Errorf("Error from Bob sending message: %s", err) + } + + if len(bob.oldMACs) != 0 { + t.Errorf("Bob has not revealed all MAC keys") + } + + for i, msg := range bobsMessage { + out, encrypted, _, _, err := alice.Receive(msg) + + if err != nil { + t.Errorf("Error generated while processing test message: %s", err.Error()) + } + if len(out) > 0 { + if i != len(bobsMessage)-1 { + t.Fatal("Alice produced a message while processing a fragment of Bob's") + } + if !encrypted { + t.Errorf("Message was not marked as encrypted") + } + if !bytes.Equal(out, message) { + t.Errorf("Message corrupted: got %x, want %x", out, message) + } + } + } + + switch macKeyCheck { + case firstRoundTrip: + if len(alice.oldMACs) != 20 { + t.Errorf("Alice has %d bytes of MAC keys to reveal, but should have 20", len(alice.oldMACs)) + } + case subsequentRoundTrip: + if len(alice.oldMACs) != 40 { + t.Errorf("Alice has %d bytes of MAC keys to reveal, but should have 40", len(alice.oldMACs)) + } + } +} + +func TestConversation(t *testing.T) { + alice, bob := setupConversation(t) + + var testMessages = [][]byte{ + []byte("hello"), []byte("bye"), + } + + roundTripType := firstRoundTrip + + for _, testMessage := range testMessages { + roundTrip(t, alice, bob, testMessage, roundTripType) + roundTripType = subsequentRoundTrip + } +} + +func TestGoodSMP(t *testing.T) { + var alice, bob Conversation + + alice.smp.secret = new(big.Int).SetInt64(42) + bob.smp.secret = alice.smp.secret + + var alicesMessages, bobsMessages []tlv + var aliceComplete, bobComplete bool + var err error + var out tlv + + alicesMessages = alice.startSMP("") + for round := 0; len(alicesMessages) > 0 || len(bobsMessages) > 0; round++ { + bobsMessages = bobsMessages[:0] + for i, msg := range alicesMessages { + out, bobComplete, err = bob.processSMP(msg) + if err != nil { + t.Errorf("Error from Bob in round %d: %s", round, err) + } + if bobComplete && i != len(alicesMessages)-1 { + t.Errorf("Bob returned a completed signal before processing all of Alice's messages in round %d", round) + } + if out.typ != 0 { + bobsMessages = append(bobsMessages, out) + } + } + + alicesMessages = alicesMessages[:0] + for i, msg := range bobsMessages { + out, aliceComplete, err = alice.processSMP(msg) + if err != nil { + t.Errorf("Error from Alice in round %d: %s", round, err) + } + if aliceComplete && i != len(bobsMessages)-1 { + t.Errorf("Alice returned a completed signal before processing all of Bob's messages in round %d", round) + } + if out.typ != 0 { + alicesMessages = append(alicesMessages, out) + } + } + } + + if !aliceComplete || !bobComplete { + t.Errorf("SMP completed without both sides reporting success: alice: %v, bob: %v\n", aliceComplete, bobComplete) + } +} + +func TestBadSMP(t *testing.T) { + var alice, bob Conversation + + alice.smp.secret = new(big.Int).SetInt64(42) + bob.smp.secret = new(big.Int).SetInt64(43) + + var alicesMessages, bobsMessages []tlv + + alicesMessages = alice.startSMP("") + for round := 0; len(alicesMessages) > 0 || len(bobsMessages) > 0; round++ { + bobsMessages = bobsMessages[:0] + for _, msg := range alicesMessages { + out, complete, _ := bob.processSMP(msg) + if complete { + t.Errorf("Bob signaled completion in round %d", round) + } + if out.typ != 0 { + bobsMessages = append(bobsMessages, out) + } + } + + alicesMessages = alicesMessages[:0] + for _, msg := range bobsMessages { + out, complete, _ := alice.processSMP(msg) + if complete { + t.Errorf("Alice signaled completion in round %d", round) + } + if out.typ != 0 { + alicesMessages = append(alicesMessages, out) + } + } + } +} + +func TestRehandshaking(t *testing.T) { + alice, bob := setupConversation(t) + roundTrip(t, alice, bob, []byte("test"), firstRoundTrip) + roundTrip(t, alice, bob, []byte("test 2"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 3"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 4"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 5"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 6"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 7"), subsequentRoundTrip) + roundTrip(t, alice, bob, []byte("test 8"), subsequentRoundTrip) + performHandshake(t, alice, bob) + roundTrip(t, alice, bob, []byte("test"), noMACKeyCheck) + roundTrip(t, alice, bob, []byte("test 2"), noMACKeyCheck) +} + +func TestAgainstLibOTR(t *testing.T) { + // This test requires otr.c.test to be built as /tmp/a.out. + // If enabled, this tests runs forever performing OTR handshakes in a + // loop. + return + + alicePrivateKey, _ := hex.DecodeString(alicePrivateKeyHex) + var alice Conversation + alice.PrivateKey = new(PrivateKey) + alice.PrivateKey.Parse(alicePrivateKey) + + cmd := exec.Command("/tmp/a.out") + cmd.Stderr = os.Stderr + + out, err := cmd.StdinPipe() + if err != nil { + t.Fatal(err) + } + defer out.Close() + stdout, err := cmd.StdoutPipe() + if err != nil { + t.Fatal(err) + } + in := bufio.NewReader(stdout) + + if err := cmd.Start(); err != nil { + t.Fatal(err) + } + + out.Write([]byte(QueryMessage)) + out.Write([]byte("\n")) + var expectedText = []byte("test message") + + for { + line, isPrefix, err := in.ReadLine() + if isPrefix { + t.Fatal("line from subprocess too long") + } + if err != nil { + t.Fatal(err) + } + text, encrypted, change, alicesMessage, err := alice.Receive(line) + if err != nil { + t.Fatal(err) + } + for _, msg := range alicesMessage { + out.Write(msg) + out.Write([]byte("\n")) + } + if change == NewKeys { + alicesMessage, err := alice.Send([]byte("Go -> libotr test message")) + if err != nil { + t.Fatalf("error sending message: %s", err.Error()) + } else { + for _, msg := range alicesMessage { + out.Write(msg) + out.Write([]byte("\n")) + } + } + } + if len(text) > 0 { + if !bytes.Equal(text, expectedText) { + t.Fatalf("expected %x, but got %x", expectedText, text) + } + if !encrypted { + t.Fatal("message wasn't encrypted") + } + } + } +} diff --git a/vendor/golang.org/x/crypto/otr/smp.go b/vendor/golang.org/x/crypto/otr/smp.go new file mode 100644 index 0000000..dc6de4e --- /dev/null +++ b/vendor/golang.org/x/crypto/otr/smp.go @@ -0,0 +1,572 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file implements the Socialist Millionaires Protocol as described in +// http://www.cypherpunks.ca/otr/Protocol-v2-3.1.0.html. The protocol +// specification is required in order to understand this code and, where +// possible, the variable names in the code match up with the spec. + +package otr + +import ( + "bytes" + "crypto/sha256" + "errors" + "hash" + "math/big" +) + +type smpFailure string + +func (s smpFailure) Error() string { + return string(s) +} + +var smpFailureError = smpFailure("otr: SMP protocol failed") +var smpSecretMissingError = smpFailure("otr: mutual secret needed") + +const smpVersion = 1 + +const ( + smpState1 = iota + smpState2 + smpState3 + smpState4 +) + +type smpState struct { + state int + a2, a3, b2, b3, pb, qb *big.Int + g2a, g3a *big.Int + g2, g3 *big.Int + g3b, papb, qaqb, ra *big.Int + saved *tlv + secret *big.Int + question string +} + +func (c *Conversation) startSMP(question string) (tlvs []tlv) { + if c.smp.state != smpState1 { + tlvs = append(tlvs, c.generateSMPAbort()) + } + tlvs = append(tlvs, c.generateSMP1(question)) + c.smp.question = "" + c.smp.state = smpState2 + return +} + +func (c *Conversation) resetSMP() { + c.smp.state = smpState1 + c.smp.secret = nil + c.smp.question = "" +} + +func (c *Conversation) processSMP(in tlv) (out tlv, complete bool, err error) { + data := in.data + + switch in.typ { + case tlvTypeSMPAbort: + if c.smp.state != smpState1 { + err = smpFailureError + } + c.resetSMP() + return + case tlvTypeSMP1WithQuestion: + // We preprocess this into a SMP1 message. + nulPos := bytes.IndexByte(data, 0) + if nulPos == -1 { + err = errors.New("otr: SMP message with question didn't contain a NUL byte") + return + } + c.smp.question = string(data[:nulPos]) + data = data[nulPos+1:] + } + + numMPIs, data, ok := getU32(data) + if !ok || numMPIs > 20 { + err = errors.New("otr: corrupt SMP message") + return + } + + mpis := make([]*big.Int, numMPIs) + for i := range mpis { + var ok bool + mpis[i], data, ok = getMPI(data) + if !ok { + err = errors.New("otr: corrupt SMP message") + return + } + } + + switch in.typ { + case tlvTypeSMP1, tlvTypeSMP1WithQuestion: + if c.smp.state != smpState1 { + c.resetSMP() + out = c.generateSMPAbort() + return + } + if c.smp.secret == nil { + err = smpSecretMissingError + return + } + if err = c.processSMP1(mpis); err != nil { + return + } + c.smp.state = smpState3 + out = c.generateSMP2() + case tlvTypeSMP2: + if c.smp.state != smpState2 { + c.resetSMP() + out = c.generateSMPAbort() + return + } + if out, err = c.processSMP2(mpis); err != nil { + out = c.generateSMPAbort() + return + } + c.smp.state = smpState4 + case tlvTypeSMP3: + if c.smp.state != smpState3 { + c.resetSMP() + out = c.generateSMPAbort() + return + } + if out, err = c.processSMP3(mpis); err != nil { + return + } + c.smp.state = smpState1 + c.smp.secret = nil + complete = true + case tlvTypeSMP4: + if c.smp.state != smpState4 { + c.resetSMP() + out = c.generateSMPAbort() + return + } + if err = c.processSMP4(mpis); err != nil { + out = c.generateSMPAbort() + return + } + c.smp.state = smpState1 + c.smp.secret = nil + complete = true + default: + panic("unknown SMP message") + } + + return +} + +func (c *Conversation) calcSMPSecret(mutualSecret []byte, weStarted bool) { + h := sha256.New() + h.Write([]byte{smpVersion}) + if weStarted { + h.Write(c.PrivateKey.PublicKey.Fingerprint()) + h.Write(c.TheirPublicKey.Fingerprint()) + } else { + h.Write(c.TheirPublicKey.Fingerprint()) + h.Write(c.PrivateKey.PublicKey.Fingerprint()) + } + h.Write(c.SSID[:]) + h.Write(mutualSecret) + c.smp.secret = new(big.Int).SetBytes(h.Sum(nil)) +} + +func (c *Conversation) generateSMP1(question string) tlv { + var randBuf [16]byte + c.smp.a2 = c.randMPI(randBuf[:]) + c.smp.a3 = c.randMPI(randBuf[:]) + g2a := new(big.Int).Exp(g, c.smp.a2, p) + g3a := new(big.Int).Exp(g, c.smp.a3, p) + h := sha256.New() + + r2 := c.randMPI(randBuf[:]) + r := new(big.Int).Exp(g, r2, p) + c2 := new(big.Int).SetBytes(hashMPIs(h, 1, r)) + d2 := new(big.Int).Mul(c.smp.a2, c2) + d2.Sub(r2, d2) + d2.Mod(d2, q) + if d2.Sign() < 0 { + d2.Add(d2, q) + } + + r3 := c.randMPI(randBuf[:]) + r.Exp(g, r3, p) + c3 := new(big.Int).SetBytes(hashMPIs(h, 2, r)) + d3 := new(big.Int).Mul(c.smp.a3, c3) + d3.Sub(r3, d3) + d3.Mod(d3, q) + if d3.Sign() < 0 { + d3.Add(d3, q) + } + + var ret tlv + if len(question) > 0 { + ret.typ = tlvTypeSMP1WithQuestion + ret.data = append(ret.data, question...) + ret.data = append(ret.data, 0) + } else { + ret.typ = tlvTypeSMP1 + } + ret.data = appendU32(ret.data, 6) + ret.data = appendMPIs(ret.data, g2a, c2, d2, g3a, c3, d3) + return ret +} + +func (c *Conversation) processSMP1(mpis []*big.Int) error { + if len(mpis) != 6 { + return errors.New("otr: incorrect number of arguments in SMP1 message") + } + g2a := mpis[0] + c2 := mpis[1] + d2 := mpis[2] + g3a := mpis[3] + c3 := mpis[4] + d3 := mpis[5] + h := sha256.New() + + r := new(big.Int).Exp(g, d2, p) + s := new(big.Int).Exp(g2a, c2, p) + r.Mul(r, s) + r.Mod(r, p) + t := new(big.Int).SetBytes(hashMPIs(h, 1, r)) + if c2.Cmp(t) != 0 { + return errors.New("otr: ZKP c2 incorrect in SMP1 message") + } + r.Exp(g, d3, p) + s.Exp(g3a, c3, p) + r.Mul(r, s) + r.Mod(r, p) + t.SetBytes(hashMPIs(h, 2, r)) + if c3.Cmp(t) != 0 { + return errors.New("otr: ZKP c3 incorrect in SMP1 message") + } + + c.smp.g2a = g2a + c.smp.g3a = g3a + return nil +} + +func (c *Conversation) generateSMP2() tlv { + var randBuf [16]byte + b2 := c.randMPI(randBuf[:]) + c.smp.b3 = c.randMPI(randBuf[:]) + r2 := c.randMPI(randBuf[:]) + r3 := c.randMPI(randBuf[:]) + r4 := c.randMPI(randBuf[:]) + r5 := c.randMPI(randBuf[:]) + r6 := c.randMPI(randBuf[:]) + + g2b := new(big.Int).Exp(g, b2, p) + g3b := new(big.Int).Exp(g, c.smp.b3, p) + + r := new(big.Int).Exp(g, r2, p) + h := sha256.New() + c2 := new(big.Int).SetBytes(hashMPIs(h, 3, r)) + d2 := new(big.Int).Mul(b2, c2) + d2.Sub(r2, d2) + d2.Mod(d2, q) + if d2.Sign() < 0 { + d2.Add(d2, q) + } + + r.Exp(g, r3, p) + c3 := new(big.Int).SetBytes(hashMPIs(h, 4, r)) + d3 := new(big.Int).Mul(c.smp.b3, c3) + d3.Sub(r3, d3) + d3.Mod(d3, q) + if d3.Sign() < 0 { + d3.Add(d3, q) + } + + c.smp.g2 = new(big.Int).Exp(c.smp.g2a, b2, p) + c.smp.g3 = new(big.Int).Exp(c.smp.g3a, c.smp.b3, p) + c.smp.pb = new(big.Int).Exp(c.smp.g3, r4, p) + c.smp.qb = new(big.Int).Exp(g, r4, p) + r.Exp(c.smp.g2, c.smp.secret, p) + c.smp.qb.Mul(c.smp.qb, r) + c.smp.qb.Mod(c.smp.qb, p) + + s := new(big.Int) + s.Exp(c.smp.g2, r6, p) + r.Exp(g, r5, p) + s.Mul(r, s) + s.Mod(s, p) + r.Exp(c.smp.g3, r5, p) + cp := new(big.Int).SetBytes(hashMPIs(h, 5, r, s)) + + // D5 = r5 - r4 cP mod q and D6 = r6 - y cP mod q + + s.Mul(r4, cp) + r.Sub(r5, s) + d5 := new(big.Int).Mod(r, q) + if d5.Sign() < 0 { + d5.Add(d5, q) + } + + s.Mul(c.smp.secret, cp) + r.Sub(r6, s) + d6 := new(big.Int).Mod(r, q) + if d6.Sign() < 0 { + d6.Add(d6, q) + } + + var ret tlv + ret.typ = tlvTypeSMP2 + ret.data = appendU32(ret.data, 11) + ret.data = appendMPIs(ret.data, g2b, c2, d2, g3b, c3, d3, c.smp.pb, c.smp.qb, cp, d5, d6) + return ret +} + +func (c *Conversation) processSMP2(mpis []*big.Int) (out tlv, err error) { + if len(mpis) != 11 { + err = errors.New("otr: incorrect number of arguments in SMP2 message") + return + } + g2b := mpis[0] + c2 := mpis[1] + d2 := mpis[2] + g3b := mpis[3] + c3 := mpis[4] + d3 := mpis[5] + pb := mpis[6] + qb := mpis[7] + cp := mpis[8] + d5 := mpis[9] + d6 := mpis[10] + h := sha256.New() + + r := new(big.Int).Exp(g, d2, p) + s := new(big.Int).Exp(g2b, c2, p) + r.Mul(r, s) + r.Mod(r, p) + s.SetBytes(hashMPIs(h, 3, r)) + if c2.Cmp(s) != 0 { + err = errors.New("otr: ZKP c2 failed in SMP2 message") + return + } + + r.Exp(g, d3, p) + s.Exp(g3b, c3, p) + r.Mul(r, s) + r.Mod(r, p) + s.SetBytes(hashMPIs(h, 4, r)) + if c3.Cmp(s) != 0 { + err = errors.New("otr: ZKP c3 failed in SMP2 message") + return + } + + c.smp.g2 = new(big.Int).Exp(g2b, c.smp.a2, p) + c.smp.g3 = new(big.Int).Exp(g3b, c.smp.a3, p) + + r.Exp(g, d5, p) + s.Exp(c.smp.g2, d6, p) + r.Mul(r, s) + s.Exp(qb, cp, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(c.smp.g3, d5, p) + t := new(big.Int).Exp(pb, cp, p) + s.Mul(s, t) + s.Mod(s, p) + t.SetBytes(hashMPIs(h, 5, s, r)) + if cp.Cmp(t) != 0 { + err = errors.New("otr: ZKP cP failed in SMP2 message") + return + } + + var randBuf [16]byte + r4 := c.randMPI(randBuf[:]) + r5 := c.randMPI(randBuf[:]) + r6 := c.randMPI(randBuf[:]) + r7 := c.randMPI(randBuf[:]) + + pa := new(big.Int).Exp(c.smp.g3, r4, p) + r.Exp(c.smp.g2, c.smp.secret, p) + qa := new(big.Int).Exp(g, r4, p) + qa.Mul(qa, r) + qa.Mod(qa, p) + + r.Exp(g, r5, p) + s.Exp(c.smp.g2, r6, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(c.smp.g3, r5, p) + cp.SetBytes(hashMPIs(h, 6, s, r)) + + r.Mul(r4, cp) + d5 = new(big.Int).Sub(r5, r) + d5.Mod(d5, q) + if d5.Sign() < 0 { + d5.Add(d5, q) + } + + r.Mul(c.smp.secret, cp) + d6 = new(big.Int).Sub(r6, r) + d6.Mod(d6, q) + if d6.Sign() < 0 { + d6.Add(d6, q) + } + + r.ModInverse(qb, p) + qaqb := new(big.Int).Mul(qa, r) + qaqb.Mod(qaqb, p) + + ra := new(big.Int).Exp(qaqb, c.smp.a3, p) + r.Exp(qaqb, r7, p) + s.Exp(g, r7, p) + cr := new(big.Int).SetBytes(hashMPIs(h, 7, s, r)) + + r.Mul(c.smp.a3, cr) + d7 := new(big.Int).Sub(r7, r) + d7.Mod(d7, q) + if d7.Sign() < 0 { + d7.Add(d7, q) + } + + c.smp.g3b = g3b + c.smp.qaqb = qaqb + + r.ModInverse(pb, p) + c.smp.papb = new(big.Int).Mul(pa, r) + c.smp.papb.Mod(c.smp.papb, p) + c.smp.ra = ra + + out.typ = tlvTypeSMP3 + out.data = appendU32(out.data, 8) + out.data = appendMPIs(out.data, pa, qa, cp, d5, d6, ra, cr, d7) + return +} + +func (c *Conversation) processSMP3(mpis []*big.Int) (out tlv, err error) { + if len(mpis) != 8 { + err = errors.New("otr: incorrect number of arguments in SMP3 message") + return + } + pa := mpis[0] + qa := mpis[1] + cp := mpis[2] + d5 := mpis[3] + d6 := mpis[4] + ra := mpis[5] + cr := mpis[6] + d7 := mpis[7] + h := sha256.New() + + r := new(big.Int).Exp(g, d5, p) + s := new(big.Int).Exp(c.smp.g2, d6, p) + r.Mul(r, s) + s.Exp(qa, cp, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(c.smp.g3, d5, p) + t := new(big.Int).Exp(pa, cp, p) + s.Mul(s, t) + s.Mod(s, p) + t.SetBytes(hashMPIs(h, 6, s, r)) + if t.Cmp(cp) != 0 { + err = errors.New("otr: ZKP cP failed in SMP3 message") + return + } + + r.ModInverse(c.smp.qb, p) + qaqb := new(big.Int).Mul(qa, r) + qaqb.Mod(qaqb, p) + + r.Exp(qaqb, d7, p) + s.Exp(ra, cr, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(g, d7, p) + t.Exp(c.smp.g3a, cr, p) + s.Mul(s, t) + s.Mod(s, p) + t.SetBytes(hashMPIs(h, 7, s, r)) + if t.Cmp(cr) != 0 { + err = errors.New("otr: ZKP cR failed in SMP3 message") + return + } + + var randBuf [16]byte + r7 := c.randMPI(randBuf[:]) + rb := new(big.Int).Exp(qaqb, c.smp.b3, p) + + r.Exp(qaqb, r7, p) + s.Exp(g, r7, p) + cr = new(big.Int).SetBytes(hashMPIs(h, 8, s, r)) + + r.Mul(c.smp.b3, cr) + d7 = new(big.Int).Sub(r7, r) + d7.Mod(d7, q) + if d7.Sign() < 0 { + d7.Add(d7, q) + } + + out.typ = tlvTypeSMP4 + out.data = appendU32(out.data, 3) + out.data = appendMPIs(out.data, rb, cr, d7) + + r.ModInverse(c.smp.pb, p) + r.Mul(pa, r) + r.Mod(r, p) + s.Exp(ra, c.smp.b3, p) + if r.Cmp(s) != 0 { + err = smpFailureError + } + + return +} + +func (c *Conversation) processSMP4(mpis []*big.Int) error { + if len(mpis) != 3 { + return errors.New("otr: incorrect number of arguments in SMP4 message") + } + rb := mpis[0] + cr := mpis[1] + d7 := mpis[2] + h := sha256.New() + + r := new(big.Int).Exp(c.smp.qaqb, d7, p) + s := new(big.Int).Exp(rb, cr, p) + r.Mul(r, s) + r.Mod(r, p) + + s.Exp(g, d7, p) + t := new(big.Int).Exp(c.smp.g3b, cr, p) + s.Mul(s, t) + s.Mod(s, p) + t.SetBytes(hashMPIs(h, 8, s, r)) + if t.Cmp(cr) != 0 { + return errors.New("otr: ZKP cR failed in SMP4 message") + } + + r.Exp(rb, c.smp.a3, p) + if r.Cmp(c.smp.papb) != 0 { + return smpFailureError + } + + return nil +} + +func (c *Conversation) generateSMPAbort() tlv { + return tlv{typ: tlvTypeSMPAbort} +} + +func hashMPIs(h hash.Hash, magic byte, mpis ...*big.Int) []byte { + if h != nil { + h.Reset() + } else { + h = sha256.New() + } + + h.Write([]byte{magic}) + for _, mpi := range mpis { + h.Write(appendMPI(nil, mpi)) + } + return h.Sum(nil) +} diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go new file mode 100644 index 0000000..593f653 --- /dev/null +++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go @@ -0,0 +1,77 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package pbkdf2 implements the key derivation function PBKDF2 as defined in RFC +2898 / PKCS #5 v2.0. + +A key derivation function is useful when encrypting data based on a password +or any other not-fully-random data. It uses a pseudorandom function to derive +a secure encryption key based on the password. + +While v2.0 of the standard defines only one pseudorandom function to use, +HMAC-SHA1, the drafted v2.1 specification allows use of all five FIPS Approved +Hash Functions SHA-1, SHA-224, SHA-256, SHA-384 and SHA-512 for HMAC. To +choose, you can pass the `New` functions from the different SHA packages to +pbkdf2.Key. +*/ +package pbkdf2 // import "golang.org/x/crypto/pbkdf2" + +import ( + "crypto/hmac" + "hash" +) + +// Key derives a key from the password, salt and iteration count, returning a +// []byte of length keylen that can be used as cryptographic key. The key is +// derived based on the method described as PBKDF2 with the HMAC variant using +// the supplied hash function. +// +// For example, to use a HMAC-SHA-1 based PBKDF2 key derivation function, you +// can get a derived key for e.g. AES-256 (which needs a 32-byte key) by +// doing: +// +// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) +// +// Remember to get a good random salt. At least 8 bytes is recommended by the +// RFC. +// +// Using a higher iteration count will increase the cost of an exhaustive +// search but will also make derivation proportionally slower. +func Key(password, salt []byte, iter, keyLen int, h func() hash.Hash) []byte { + prf := hmac.New(h, password) + hashLen := prf.Size() + numBlocks := (keyLen + hashLen - 1) / hashLen + + var buf [4]byte + dk := make([]byte, 0, numBlocks*hashLen) + U := make([]byte, hashLen) + for block := 1; block <= numBlocks; block++ { + // N.B.: || means concatenation, ^ means XOR + // for each block T_i = U_1 ^ U_2 ^ ... ^ U_iter + // U_1 = PRF(password, salt || uint(i)) + prf.Reset() + prf.Write(salt) + buf[0] = byte(block >> 24) + buf[1] = byte(block >> 16) + buf[2] = byte(block >> 8) + buf[3] = byte(block) + prf.Write(buf[:4]) + dk = prf.Sum(dk) + T := dk[len(dk)-hashLen:] + copy(U, T) + + // U_n = PRF(password, U_(n-1)) + for n := 2; n <= iter; n++ { + prf.Reset() + prf.Write(U) + U = U[:0] + U = prf.Sum(U) + for x := range U { + T[x] ^= U[x] + } + } + } + return dk[:keyLen] +} diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go new file mode 100644 index 0000000..1379240 --- /dev/null +++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2_test.go @@ -0,0 +1,157 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pbkdf2 + +import ( + "bytes" + "crypto/sha1" + "crypto/sha256" + "hash" + "testing" +) + +type testVector struct { + password string + salt string + iter int + output []byte +} + +// Test vectors from RFC 6070, http://tools.ietf.org/html/rfc6070 +var sha1TestVectors = []testVector{ + { + "password", + "salt", + 1, + []byte{ + 0x0c, 0x60, 0xc8, 0x0f, 0x96, 0x1f, 0x0e, 0x71, + 0xf3, 0xa9, 0xb5, 0x24, 0xaf, 0x60, 0x12, 0x06, + 0x2f, 0xe0, 0x37, 0xa6, + }, + }, + { + "password", + "salt", + 2, + []byte{ + 0xea, 0x6c, 0x01, 0x4d, 0xc7, 0x2d, 0x6f, 0x8c, + 0xcd, 0x1e, 0xd9, 0x2a, 0xce, 0x1d, 0x41, 0xf0, + 0xd8, 0xde, 0x89, 0x57, + }, + }, + { + "password", + "salt", + 4096, + []byte{ + 0x4b, 0x00, 0x79, 0x01, 0xb7, 0x65, 0x48, 0x9a, + 0xbe, 0xad, 0x49, 0xd9, 0x26, 0xf7, 0x21, 0xd0, + 0x65, 0xa4, 0x29, 0xc1, + }, + }, + // // This one takes too long + // { + // "password", + // "salt", + // 16777216, + // []byte{ + // 0xee, 0xfe, 0x3d, 0x61, 0xcd, 0x4d, 0xa4, 0xe4, + // 0xe9, 0x94, 0x5b, 0x3d, 0x6b, 0xa2, 0x15, 0x8c, + // 0x26, 0x34, 0xe9, 0x84, + // }, + // }, + { + "passwordPASSWORDpassword", + "saltSALTsaltSALTsaltSALTsaltSALTsalt", + 4096, + []byte{ + 0x3d, 0x2e, 0xec, 0x4f, 0xe4, 0x1c, 0x84, 0x9b, + 0x80, 0xc8, 0xd8, 0x36, 0x62, 0xc0, 0xe4, 0x4a, + 0x8b, 0x29, 0x1a, 0x96, 0x4c, 0xf2, 0xf0, 0x70, + 0x38, + }, + }, + { + "pass\000word", + "sa\000lt", + 4096, + []byte{ + 0x56, 0xfa, 0x6a, 0xa7, 0x55, 0x48, 0x09, 0x9d, + 0xcc, 0x37, 0xd7, 0xf0, 0x34, 0x25, 0xe0, 0xc3, + }, + }, +} + +// Test vectors from +// http://stackoverflow.com/questions/5130513/pbkdf2-hmac-sha2-test-vectors +var sha256TestVectors = []testVector{ + { + "password", + "salt", + 1, + []byte{ + 0x12, 0x0f, 0xb6, 0xcf, 0xfc, 0xf8, 0xb3, 0x2c, + 0x43, 0xe7, 0x22, 0x52, 0x56, 0xc4, 0xf8, 0x37, + 0xa8, 0x65, 0x48, 0xc9, + }, + }, + { + "password", + "salt", + 2, + []byte{ + 0xae, 0x4d, 0x0c, 0x95, 0xaf, 0x6b, 0x46, 0xd3, + 0x2d, 0x0a, 0xdf, 0xf9, 0x28, 0xf0, 0x6d, 0xd0, + 0x2a, 0x30, 0x3f, 0x8e, + }, + }, + { + "password", + "salt", + 4096, + []byte{ + 0xc5, 0xe4, 0x78, 0xd5, 0x92, 0x88, 0xc8, 0x41, + 0xaa, 0x53, 0x0d, 0xb6, 0x84, 0x5c, 0x4c, 0x8d, + 0x96, 0x28, 0x93, 0xa0, + }, + }, + { + "passwordPASSWORDpassword", + "saltSALTsaltSALTsaltSALTsaltSALTsalt", + 4096, + []byte{ + 0x34, 0x8c, 0x89, 0xdb, 0xcb, 0xd3, 0x2b, 0x2f, + 0x32, 0xd8, 0x14, 0xb8, 0x11, 0x6e, 0x84, 0xcf, + 0x2b, 0x17, 0x34, 0x7e, 0xbc, 0x18, 0x00, 0x18, + 0x1c, + }, + }, + { + "pass\000word", + "sa\000lt", + 4096, + []byte{ + 0x89, 0xb6, 0x9d, 0x05, 0x16, 0xf8, 0x29, 0x89, + 0x3c, 0x69, 0x62, 0x26, 0x65, 0x0a, 0x86, 0x87, + }, + }, +} + +func testHash(t *testing.T, h func() hash.Hash, hashName string, vectors []testVector) { + for i, v := range vectors { + o := Key([]byte(v.password), []byte(v.salt), v.iter, len(v.output), h) + if !bytes.Equal(o, v.output) { + t.Errorf("%s %d: expected %x, got %x", hashName, i, v.output, o) + } + } +} + +func TestWithHMACSHA1(t *testing.T) { + testHash(t, sha1.New, "SHA1", sha1TestVectors) +} + +func TestWithHMACSHA256(t *testing.T) { + testHash(t, sha256.New, "SHA256", sha256TestVectors) +} diff --git a/vendor/golang.org/x/crypto/pkcs12/bmp-string.go b/vendor/golang.org/x/crypto/pkcs12/bmp-string.go new file mode 100644 index 0000000..233b8b6 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/bmp-string.go @@ -0,0 +1,50 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "errors" + "unicode/utf16" +) + +// bmpString returns s encoded in UCS-2 with a zero terminator. +func bmpString(s string) ([]byte, error) { + // References: + // https://tools.ietf.org/html/rfc7292#appendix-B.1 + // https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane + // - non-BMP characters are encoded in UTF 16 by using a surrogate pair of 16-bit codes + // EncodeRune returns 0xfffd if the rune does not need special encoding + // - the above RFC provides the info that BMPStrings are NULL terminated. + + ret := make([]byte, 0, 2*len(s)+2) + + for _, r := range s { + if t, _ := utf16.EncodeRune(r); t != 0xfffd { + return nil, errors.New("pkcs12: string contains characters that cannot be encoded in UCS-2") + } + ret = append(ret, byte(r/256), byte(r%256)) + } + + return append(ret, 0, 0), nil +} + +func decodeBMPString(bmpString []byte) (string, error) { + if len(bmpString)%2 != 0 { + return "", errors.New("pkcs12: odd-length BMP string") + } + + // strip terminator if present + if l := len(bmpString); l >= 2 && bmpString[l-1] == 0 && bmpString[l-2] == 0 { + bmpString = bmpString[:l-2] + } + + s := make([]uint16, 0, len(bmpString)/2) + for len(bmpString) > 0 { + s = append(s, uint16(bmpString[0])<<8+uint16(bmpString[1])) + bmpString = bmpString[2:] + } + + return string(utf16.Decode(s)), nil +} diff --git a/vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go b/vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go new file mode 100644 index 0000000..7fca55f --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/bmp-string_test.go @@ -0,0 +1,63 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "encoding/hex" + "testing" +) + +var bmpStringTests = []struct { + in string + expectedHex string + shouldFail bool +}{ + {"", "0000", false}, + // Example from https://tools.ietf.org/html/rfc7292#appendix-B. + {"Beavis", "0042006500610076006900730000", false}, + // Some characters from the "Letterlike Symbols Unicode block". + {"\u2115 - Double-struck N", "21150020002d00200044006f00750062006c0065002d00730074007200750063006b0020004e0000", false}, + // any character outside the BMP should trigger an error. + {"\U0001f000 East wind (Mahjong)", "", true}, +} + +func TestBMPString(t *testing.T) { + for i, test := range bmpStringTests { + expected, err := hex.DecodeString(test.expectedHex) + if err != nil { + t.Fatalf("#%d: failed to decode expectation", i) + } + + out, err := bmpString(test.in) + if err == nil && test.shouldFail { + t.Errorf("#%d: expected to fail, but produced %x", i, out) + continue + } + + if err != nil && !test.shouldFail { + t.Errorf("#%d: failed unexpectedly: %s", i, err) + continue + } + + if !test.shouldFail { + if !bytes.Equal(out, expected) { + t.Errorf("#%d: expected %s, got %x", i, test.expectedHex, out) + continue + } + + roundTrip, err := decodeBMPString(out) + if err != nil { + t.Errorf("#%d: decoding output gave an error: %s", i, err) + continue + } + + if roundTrip != test.in { + t.Errorf("#%d: decoding output resulted in %q, but it should have been %q", i, roundTrip, test.in) + continue + } + } + } +} diff --git a/vendor/golang.org/x/crypto/pkcs12/crypto.go b/vendor/golang.org/x/crypto/pkcs12/crypto.go new file mode 100644 index 0000000..484ca51 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/crypto.go @@ -0,0 +1,131 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "crypto/cipher" + "crypto/des" + "crypto/x509/pkix" + "encoding/asn1" + "errors" + + "golang.org/x/crypto/pkcs12/internal/rc2" +) + +var ( + oidPBEWithSHAAnd3KeyTripleDESCBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 3}) + oidPBEWithSHAAnd40BitRC2CBC = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 6}) +) + +// pbeCipher is an abstraction of a PKCS#12 cipher. +type pbeCipher interface { + // create returns a cipher.Block given a key. + create(key []byte) (cipher.Block, error) + // deriveKey returns a key derived from the given password and salt. + deriveKey(salt, password []byte, iterations int) []byte + // deriveKey returns an IV derived from the given password and salt. + deriveIV(salt, password []byte, iterations int) []byte +} + +type shaWithTripleDESCBC struct{} + +func (shaWithTripleDESCBC) create(key []byte) (cipher.Block, error) { + return des.NewTripleDESCipher(key) +} + +func (shaWithTripleDESCBC) deriveKey(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 24) +} + +func (shaWithTripleDESCBC) deriveIV(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8) +} + +type shaWith40BitRC2CBC struct{} + +func (shaWith40BitRC2CBC) create(key []byte) (cipher.Block, error) { + return rc2.New(key, len(key)*8) +} + +func (shaWith40BitRC2CBC) deriveKey(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 1, 5) +} + +func (shaWith40BitRC2CBC) deriveIV(salt, password []byte, iterations int) []byte { + return pbkdf(sha1Sum, 20, 64, salt, password, iterations, 2, 8) +} + +type pbeParams struct { + Salt []byte + Iterations int +} + +func pbDecrypterFor(algorithm pkix.AlgorithmIdentifier, password []byte) (cipher.BlockMode, int, error) { + var cipherType pbeCipher + + switch { + case algorithm.Algorithm.Equal(oidPBEWithSHAAnd3KeyTripleDESCBC): + cipherType = shaWithTripleDESCBC{} + case algorithm.Algorithm.Equal(oidPBEWithSHAAnd40BitRC2CBC): + cipherType = shaWith40BitRC2CBC{} + default: + return nil, 0, NotImplementedError("algorithm " + algorithm.Algorithm.String() + " is not supported") + } + + var params pbeParams + if err := unmarshal(algorithm.Parameters.FullBytes, ¶ms); err != nil { + return nil, 0, err + } + + key := cipherType.deriveKey(params.Salt, password, params.Iterations) + iv := cipherType.deriveIV(params.Salt, password, params.Iterations) + + block, err := cipherType.create(key) + if err != nil { + return nil, 0, err + } + + return cipher.NewCBCDecrypter(block, iv), block.BlockSize(), nil +} + +func pbDecrypt(info decryptable, password []byte) (decrypted []byte, err error) { + cbc, blockSize, err := pbDecrypterFor(info.Algorithm(), password) + if err != nil { + return nil, err + } + + encrypted := info.Data() + if len(encrypted) == 0 { + return nil, errors.New("pkcs12: empty encrypted data") + } + if len(encrypted)%blockSize != 0 { + return nil, errors.New("pkcs12: input is not a multiple of the block size") + } + decrypted = make([]byte, len(encrypted)) + cbc.CryptBlocks(decrypted, encrypted) + + psLen := int(decrypted[len(decrypted)-1]) + if psLen == 0 || psLen > blockSize { + return nil, ErrDecryption + } + + if len(decrypted) < psLen { + return nil, ErrDecryption + } + ps := decrypted[len(decrypted)-psLen:] + decrypted = decrypted[:len(decrypted)-psLen] + if bytes.Compare(ps, bytes.Repeat([]byte{byte(psLen)}, psLen)) != 0 { + return nil, ErrDecryption + } + + return +} + +// decryptable abstracts an object that contains ciphertext. +type decryptable interface { + Algorithm() pkix.AlgorithmIdentifier + Data() []byte +} diff --git a/vendor/golang.org/x/crypto/pkcs12/crypto_test.go b/vendor/golang.org/x/crypto/pkcs12/crypto_test.go new file mode 100644 index 0000000..eb4dae8 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/crypto_test.go @@ -0,0 +1,125 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "crypto/x509/pkix" + "encoding/asn1" + "testing" +) + +var sha1WithTripleDES = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 1, 3}) + +func TestPbDecrypterFor(t *testing.T) { + params, _ := asn1.Marshal(pbeParams{ + Salt: []byte{1, 2, 3, 4, 5, 6, 7, 8}, + Iterations: 2048, + }) + alg := pkix.AlgorithmIdentifier{ + Algorithm: asn1.ObjectIdentifier([]int{1, 2, 3}), + Parameters: asn1.RawValue{ + FullBytes: params, + }, + } + + pass, _ := bmpString("Sesame open") + + _, _, err := pbDecrypterFor(alg, pass) + if _, ok := err.(NotImplementedError); !ok { + t.Errorf("expected not implemented error, got: %T %s", err, err) + } + + alg.Algorithm = sha1WithTripleDES + cbc, blockSize, err := pbDecrypterFor(alg, pass) + if err != nil { + t.Errorf("unexpected error from pbDecrypterFor %v", err) + } + if blockSize != 8 { + t.Errorf("unexpected block size %d, wanted 8", blockSize) + } + + plaintext := []byte{1, 2, 3, 4, 5, 6, 7, 8} + expectedCiphertext := []byte{185, 73, 135, 249, 137, 1, 122, 247} + ciphertext := make([]byte, len(plaintext)) + cbc.CryptBlocks(ciphertext, plaintext) + + if bytes.Compare(ciphertext, expectedCiphertext) != 0 { + t.Errorf("bad ciphertext, got %x but wanted %x", ciphertext, expectedCiphertext) + } +} + +var pbDecryptTests = []struct { + in []byte + expected []byte + expectedError error +}{ + { + []byte("\x33\x73\xf3\x9f\xda\x49\xae\xfc\xa0\x9a\xdf\x5a\x58\xa0\xea\x46"), // 7 padding bytes + []byte("A secret!"), + nil, + }, + { + []byte("\x33\x73\xf3\x9f\xda\x49\xae\xfc\x96\x24\x2f\x71\x7e\x32\x3f\xe7"), // 8 padding bytes + []byte("A secret"), + nil, + }, + { + []byte("\x35\x0c\xc0\x8d\xab\xa9\x5d\x30\x7f\x9a\xec\x6a\xd8\x9b\x9c\xd9"), // 9 padding bytes, incorrect + nil, + ErrDecryption, + }, + { + []byte("\xb2\xf9\x6e\x06\x60\xae\x20\xcf\x08\xa0\x7b\xd9\x6b\x20\xef\x41"), // incorrect padding bytes: [ ... 0x04 0x02 ] + nil, + ErrDecryption, + }, +} + +func TestPbDecrypt(t *testing.T) { + for i, test := range pbDecryptTests { + decryptable := testDecryptable{ + data: test.in, + algorithm: pkix.AlgorithmIdentifier{ + Algorithm: sha1WithTripleDES, + Parameters: pbeParams{ + Salt: []byte("\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8"), + Iterations: 4096, + }.RawASN1(), + }, + } + password, _ := bmpString("sesame") + + plaintext, err := pbDecrypt(decryptable, password) + if err != test.expectedError { + t.Errorf("#%d: got error %q, but wanted %q", i, err, test.expectedError) + continue + } + + if !bytes.Equal(plaintext, test.expected) { + t.Errorf("#%d: got %x, but wanted %x", i, plaintext, test.expected) + } + } +} + +type testDecryptable struct { + data []byte + algorithm pkix.AlgorithmIdentifier +} + +func (d testDecryptable) Algorithm() pkix.AlgorithmIdentifier { return d.algorithm } +func (d testDecryptable) Data() []byte { return d.data } + +func (params pbeParams) RawASN1() (raw asn1.RawValue) { + asn1Bytes, err := asn1.Marshal(params) + if err != nil { + panic(err) + } + _, err = asn1.Unmarshal(asn1Bytes, &raw) + if err != nil { + panic(err) + } + return +} diff --git a/vendor/golang.org/x/crypto/pkcs12/errors.go b/vendor/golang.org/x/crypto/pkcs12/errors.go new file mode 100644 index 0000000..7377ce6 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/errors.go @@ -0,0 +1,23 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import "errors" + +var ( + // ErrDecryption represents a failure to decrypt the input. + ErrDecryption = errors.New("pkcs12: decryption error, incorrect padding") + + // ErrIncorrectPassword is returned when an incorrect password is detected. + // Usually, P12/PFX data is signed to be able to verify the password. + ErrIncorrectPassword = errors.New("pkcs12: decryption password incorrect") +) + +// NotImplementedError indicates that the input is not currently supported. +type NotImplementedError string + +func (e NotImplementedError) Error() string { + return "pkcs12: " + string(e) +} diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go new file mode 100644 index 0000000..3347f33 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/bench_test.go @@ -0,0 +1,27 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rc2 + +import ( + "testing" +) + +func BenchmarkEncrypt(b *testing.B) { + r, _ := New([]byte{0, 0, 0, 0, 0, 0, 0, 0}, 64) + b.ResetTimer() + var src [8]byte + for i := 0; i < b.N; i++ { + r.Encrypt(src[:], src[:]) + } +} + +func BenchmarkDecrypt(b *testing.B) { + r, _ := New([]byte{0, 0, 0, 0, 0, 0, 0, 0}, 64) + b.ResetTimer() + var src [8]byte + for i := 0; i < b.N; i++ { + r.Decrypt(src[:], src[:]) + } +} diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go new file mode 100644 index 0000000..8c70902 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2.go @@ -0,0 +1,274 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package rc2 implements the RC2 cipher +/* +https://www.ietf.org/rfc/rfc2268.txt +http://people.csail.mit.edu/rivest/pubs/KRRR98.pdf + +This code is licensed under the MIT license. +*/ +package rc2 + +import ( + "crypto/cipher" + "encoding/binary" +) + +// The rc2 block size in bytes +const BlockSize = 8 + +type rc2Cipher struct { + k [64]uint16 +} + +// New returns a new rc2 cipher with the given key and effective key length t1 +func New(key []byte, t1 int) (cipher.Block, error) { + // TODO(dgryski): error checking for key length + return &rc2Cipher{ + k: expandKey(key, t1), + }, nil +} + +func (*rc2Cipher) BlockSize() int { return BlockSize } + +var piTable = [256]byte{ + 0xd9, 0x78, 0xf9, 0xc4, 0x19, 0xdd, 0xb5, 0xed, 0x28, 0xe9, 0xfd, 0x79, 0x4a, 0xa0, 0xd8, 0x9d, + 0xc6, 0x7e, 0x37, 0x83, 0x2b, 0x76, 0x53, 0x8e, 0x62, 0x4c, 0x64, 0x88, 0x44, 0x8b, 0xfb, 0xa2, + 0x17, 0x9a, 0x59, 0xf5, 0x87, 0xb3, 0x4f, 0x13, 0x61, 0x45, 0x6d, 0x8d, 0x09, 0x81, 0x7d, 0x32, + 0xbd, 0x8f, 0x40, 0xeb, 0x86, 0xb7, 0x7b, 0x0b, 0xf0, 0x95, 0x21, 0x22, 0x5c, 0x6b, 0x4e, 0x82, + 0x54, 0xd6, 0x65, 0x93, 0xce, 0x60, 0xb2, 0x1c, 0x73, 0x56, 0xc0, 0x14, 0xa7, 0x8c, 0xf1, 0xdc, + 0x12, 0x75, 0xca, 0x1f, 0x3b, 0xbe, 0xe4, 0xd1, 0x42, 0x3d, 0xd4, 0x30, 0xa3, 0x3c, 0xb6, 0x26, + 0x6f, 0xbf, 0x0e, 0xda, 0x46, 0x69, 0x07, 0x57, 0x27, 0xf2, 0x1d, 0x9b, 0xbc, 0x94, 0x43, 0x03, + 0xf8, 0x11, 0xc7, 0xf6, 0x90, 0xef, 0x3e, 0xe7, 0x06, 0xc3, 0xd5, 0x2f, 0xc8, 0x66, 0x1e, 0xd7, + 0x08, 0xe8, 0xea, 0xde, 0x80, 0x52, 0xee, 0xf7, 0x84, 0xaa, 0x72, 0xac, 0x35, 0x4d, 0x6a, 0x2a, + 0x96, 0x1a, 0xd2, 0x71, 0x5a, 0x15, 0x49, 0x74, 0x4b, 0x9f, 0xd0, 0x5e, 0x04, 0x18, 0xa4, 0xec, + 0xc2, 0xe0, 0x41, 0x6e, 0x0f, 0x51, 0xcb, 0xcc, 0x24, 0x91, 0xaf, 0x50, 0xa1, 0xf4, 0x70, 0x39, + 0x99, 0x7c, 0x3a, 0x85, 0x23, 0xb8, 0xb4, 0x7a, 0xfc, 0x02, 0x36, 0x5b, 0x25, 0x55, 0x97, 0x31, + 0x2d, 0x5d, 0xfa, 0x98, 0xe3, 0x8a, 0x92, 0xae, 0x05, 0xdf, 0x29, 0x10, 0x67, 0x6c, 0xba, 0xc9, + 0xd3, 0x00, 0xe6, 0xcf, 0xe1, 0x9e, 0xa8, 0x2c, 0x63, 0x16, 0x01, 0x3f, 0x58, 0xe2, 0x89, 0xa9, + 0x0d, 0x38, 0x34, 0x1b, 0xab, 0x33, 0xff, 0xb0, 0xbb, 0x48, 0x0c, 0x5f, 0xb9, 0xb1, 0xcd, 0x2e, + 0xc5, 0xf3, 0xdb, 0x47, 0xe5, 0xa5, 0x9c, 0x77, 0x0a, 0xa6, 0x20, 0x68, 0xfe, 0x7f, 0xc1, 0xad, +} + +func expandKey(key []byte, t1 int) [64]uint16 { + + l := make([]byte, 128) + copy(l, key) + + var t = len(key) + var t8 = (t1 + 7) / 8 + var tm = byte(255 % uint(1<<(8+uint(t1)-8*uint(t8)))) + + for i := len(key); i < 128; i++ { + l[i] = piTable[l[i-1]+l[uint8(i-t)]] + } + + l[128-t8] = piTable[l[128-t8]&tm] + + for i := 127 - t8; i >= 0; i-- { + l[i] = piTable[l[i+1]^l[i+t8]] + } + + var k [64]uint16 + + for i := range k { + k[i] = uint16(l[2*i]) + uint16(l[2*i+1])*256 + } + + return k +} + +func rotl16(x uint16, b uint) uint16 { + return (x >> (16 - b)) | (x << b) +} + +func (c *rc2Cipher) Encrypt(dst, src []byte) { + + r0 := binary.LittleEndian.Uint16(src[0:]) + r1 := binary.LittleEndian.Uint16(src[2:]) + r2 := binary.LittleEndian.Uint16(src[4:]) + r3 := binary.LittleEndian.Uint16(src[6:]) + + var j int + + for j <= 16 { + // mix r0 + r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) + r0 = rotl16(r0, 1) + j++ + + // mix r1 + r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) + r1 = rotl16(r1, 2) + j++ + + // mix r2 + r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) + r2 = rotl16(r2, 3) + j++ + + // mix r3 + r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) + r3 = rotl16(r3, 5) + j++ + + } + + r0 = r0 + c.k[r3&63] + r1 = r1 + c.k[r0&63] + r2 = r2 + c.k[r1&63] + r3 = r3 + c.k[r2&63] + + for j <= 40 { + + // mix r0 + r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) + r0 = rotl16(r0, 1) + j++ + + // mix r1 + r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) + r1 = rotl16(r1, 2) + j++ + + // mix r2 + r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) + r2 = rotl16(r2, 3) + j++ + + // mix r3 + r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) + r3 = rotl16(r3, 5) + j++ + + } + + r0 = r0 + c.k[r3&63] + r1 = r1 + c.k[r0&63] + r2 = r2 + c.k[r1&63] + r3 = r3 + c.k[r2&63] + + for j <= 60 { + + // mix r0 + r0 = r0 + c.k[j] + (r3 & r2) + ((^r3) & r1) + r0 = rotl16(r0, 1) + j++ + + // mix r1 + r1 = r1 + c.k[j] + (r0 & r3) + ((^r0) & r2) + r1 = rotl16(r1, 2) + j++ + + // mix r2 + r2 = r2 + c.k[j] + (r1 & r0) + ((^r1) & r3) + r2 = rotl16(r2, 3) + j++ + + // mix r3 + r3 = r3 + c.k[j] + (r2 & r1) + ((^r2) & r0) + r3 = rotl16(r3, 5) + j++ + } + + binary.LittleEndian.PutUint16(dst[0:], r0) + binary.LittleEndian.PutUint16(dst[2:], r1) + binary.LittleEndian.PutUint16(dst[4:], r2) + binary.LittleEndian.PutUint16(dst[6:], r3) +} + +func (c *rc2Cipher) Decrypt(dst, src []byte) { + + r0 := binary.LittleEndian.Uint16(src[0:]) + r1 := binary.LittleEndian.Uint16(src[2:]) + r2 := binary.LittleEndian.Uint16(src[4:]) + r3 := binary.LittleEndian.Uint16(src[6:]) + + j := 63 + + for j >= 44 { + // unmix r3 + r3 = rotl16(r3, 16-5) + r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) + j-- + + // unmix r2 + r2 = rotl16(r2, 16-3) + r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) + j-- + + // unmix r1 + r1 = rotl16(r1, 16-2) + r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) + j-- + + // unmix r0 + r0 = rotl16(r0, 16-1) + r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) + j-- + } + + r3 = r3 - c.k[r2&63] + r2 = r2 - c.k[r1&63] + r1 = r1 - c.k[r0&63] + r0 = r0 - c.k[r3&63] + + for j >= 20 { + // unmix r3 + r3 = rotl16(r3, 16-5) + r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) + j-- + + // unmix r2 + r2 = rotl16(r2, 16-3) + r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) + j-- + + // unmix r1 + r1 = rotl16(r1, 16-2) + r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) + j-- + + // unmix r0 + r0 = rotl16(r0, 16-1) + r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) + j-- + + } + + r3 = r3 - c.k[r2&63] + r2 = r2 - c.k[r1&63] + r1 = r1 - c.k[r0&63] + r0 = r0 - c.k[r3&63] + + for j >= 0 { + + // unmix r3 + r3 = rotl16(r3, 16-5) + r3 = r3 - c.k[j] - (r2 & r1) - ((^r2) & r0) + j-- + + // unmix r2 + r2 = rotl16(r2, 16-3) + r2 = r2 - c.k[j] - (r1 & r0) - ((^r1) & r3) + j-- + + // unmix r1 + r1 = rotl16(r1, 16-2) + r1 = r1 - c.k[j] - (r0 & r3) - ((^r0) & r2) + j-- + + // unmix r0 + r0 = rotl16(r0, 16-1) + r0 = r0 - c.k[j] - (r3 & r2) - ((^r3) & r1) + j-- + + } + + binary.LittleEndian.PutUint16(dst[0:], r0) + binary.LittleEndian.PutUint16(dst[2:], r1) + binary.LittleEndian.PutUint16(dst[4:], r2) + binary.LittleEndian.PutUint16(dst[6:], r3) +} diff --git a/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go new file mode 100644 index 0000000..8a49dfa --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/internal/rc2/rc2_test.go @@ -0,0 +1,93 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package rc2 + +import ( + "bytes" + "encoding/hex" + "testing" +) + +func TestEncryptDecrypt(t *testing.T) { + + // TODO(dgryski): add the rest of the test vectors from the RFC + var tests = []struct { + key string + plain string + cipher string + t1 int + }{ + { + "0000000000000000", + "0000000000000000", + "ebb773f993278eff", + 63, + }, + { + "ffffffffffffffff", + "ffffffffffffffff", + "278b27e42e2f0d49", + 64, + }, + { + "3000000000000000", + "1000000000000001", + "30649edf9be7d2c2", + 64, + }, + { + "88", + "0000000000000000", + "61a8a244adacccf0", + 64, + }, + { + "88bca90e90875a", + "0000000000000000", + "6ccf4308974c267f", + 64, + }, + { + "88bca90e90875a7f0f79c384627bafb2", + "0000000000000000", + "1a807d272bbe5db1", + 64, + }, + { + "88bca90e90875a7f0f79c384627bafb2", + "0000000000000000", + "2269552ab0f85ca6", + 128, + }, + { + "88bca90e90875a7f0f79c384627bafb216f80a6f85920584c42fceb0be255daf1e", + "0000000000000000", + "5b78d3a43dfff1f1", + 129, + }, + } + + for _, tt := range tests { + k, _ := hex.DecodeString(tt.key) + p, _ := hex.DecodeString(tt.plain) + c, _ := hex.DecodeString(tt.cipher) + + b, _ := New(k, tt.t1) + + var dst [8]byte + + b.Encrypt(dst[:], p) + + if !bytes.Equal(dst[:], c) { + t.Errorf("encrypt failed: got % 2x wanted % 2x\n", dst, c) + } + + b.Decrypt(dst[:], c) + + if !bytes.Equal(dst[:], p) { + t.Errorf("decrypt failed: got % 2x wanted % 2x\n", dst, p) + } + } +} diff --git a/vendor/golang.org/x/crypto/pkcs12/mac.go b/vendor/golang.org/x/crypto/pkcs12/mac.go new file mode 100644 index 0000000..5f38aa7 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/mac.go @@ -0,0 +1,45 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "crypto/hmac" + "crypto/sha1" + "crypto/x509/pkix" + "encoding/asn1" +) + +type macData struct { + Mac digestInfo + MacSalt []byte + Iterations int `asn1:"optional,default:1"` +} + +// from PKCS#7: +type digestInfo struct { + Algorithm pkix.AlgorithmIdentifier + Digest []byte +} + +var ( + oidSHA1 = asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26}) +) + +func verifyMac(macData *macData, message, password []byte) error { + if !macData.Mac.Algorithm.Algorithm.Equal(oidSHA1) { + return NotImplementedError("unknown digest algorithm: " + macData.Mac.Algorithm.Algorithm.String()) + } + + key := pbkdf(sha1Sum, 20, 64, macData.MacSalt, password, macData.Iterations, 3, 20) + + mac := hmac.New(sha1.New, key) + mac.Write(message) + expectedMAC := mac.Sum(nil) + + if !hmac.Equal(macData.Mac.Digest, expectedMAC) { + return ErrIncorrectPassword + } + return nil +} diff --git a/vendor/golang.org/x/crypto/pkcs12/mac_test.go b/vendor/golang.org/x/crypto/pkcs12/mac_test.go new file mode 100644 index 0000000..1ed4ff2 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/mac_test.go @@ -0,0 +1,42 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "encoding/asn1" + "testing" +) + +func TestVerifyMac(t *testing.T) { + td := macData{ + Mac: digestInfo{ + Digest: []byte{0x18, 0x20, 0x3d, 0xff, 0x1e, 0x16, 0xf4, 0x92, 0xf2, 0xaf, 0xc8, 0x91, 0xa9, 0xba, 0xd6, 0xca, 0x9d, 0xee, 0x51, 0x93}, + }, + MacSalt: []byte{1, 2, 3, 4, 5, 6, 7, 8}, + Iterations: 2048, + } + + message := []byte{11, 12, 13, 14, 15} + password, _ := bmpString("") + + td.Mac.Algorithm.Algorithm = asn1.ObjectIdentifier([]int{1, 2, 3}) + err := verifyMac(&td, message, password) + if _, ok := err.(NotImplementedError); !ok { + t.Errorf("err: %v", err) + } + + td.Mac.Algorithm.Algorithm = asn1.ObjectIdentifier([]int{1, 3, 14, 3, 2, 26}) + err = verifyMac(&td, message, password) + if err != ErrIncorrectPassword { + t.Errorf("Expected incorrect password, got err: %v", err) + } + + password, _ = bmpString("Sesame open") + err = verifyMac(&td, message, password) + if err != nil { + t.Errorf("err: %v", err) + } + +} diff --git a/vendor/golang.org/x/crypto/pkcs12/pbkdf.go b/vendor/golang.org/x/crypto/pkcs12/pbkdf.go new file mode 100644 index 0000000..5c419d4 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/pbkdf.go @@ -0,0 +1,170 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "crypto/sha1" + "math/big" +) + +var ( + one = big.NewInt(1) +) + +// sha1Sum returns the SHA-1 hash of in. +func sha1Sum(in []byte) []byte { + sum := sha1.Sum(in) + return sum[:] +} + +// fillWithRepeats returns v*ceiling(len(pattern) / v) bytes consisting of +// repeats of pattern. +func fillWithRepeats(pattern []byte, v int) []byte { + if len(pattern) == 0 { + return nil + } + outputLen := v * ((len(pattern) + v - 1) / v) + return bytes.Repeat(pattern, (outputLen+len(pattern)-1)/len(pattern))[:outputLen] +} + +func pbkdf(hash func([]byte) []byte, u, v int, salt, password []byte, r int, ID byte, size int) (key []byte) { + // implementation of https://tools.ietf.org/html/rfc7292#appendix-B.2 , RFC text verbatim in comments + + // Let H be a hash function built around a compression function f: + + // Z_2^u x Z_2^v -> Z_2^u + + // (that is, H has a chaining variable and output of length u bits, and + // the message input to the compression function of H is v bits). The + // values for u and v are as follows: + + // HASH FUNCTION VALUE u VALUE v + // MD2, MD5 128 512 + // SHA-1 160 512 + // SHA-224 224 512 + // SHA-256 256 512 + // SHA-384 384 1024 + // SHA-512 512 1024 + // SHA-512/224 224 1024 + // SHA-512/256 256 1024 + + // Furthermore, let r be the iteration count. + + // We assume here that u and v are both multiples of 8, as are the + // lengths of the password and salt strings (which we denote by p and s, + // respectively) and the number n of pseudorandom bits required. In + // addition, u and v are of course non-zero. + + // For information on security considerations for MD5 [19], see [25] and + // [1], and on those for MD2, see [18]. + + // The following procedure can be used to produce pseudorandom bits for + // a particular "purpose" that is identified by a byte called "ID". + // This standard specifies 3 different values for the ID byte: + + // 1. If ID=1, then the pseudorandom bits being produced are to be used + // as key material for performing encryption or decryption. + + // 2. If ID=2, then the pseudorandom bits being produced are to be used + // as an IV (Initial Value) for encryption or decryption. + + // 3. If ID=3, then the pseudorandom bits being produced are to be used + // as an integrity key for MACing. + + // 1. Construct a string, D (the "diversifier"), by concatenating v/8 + // copies of ID. + var D []byte + for i := 0; i < v; i++ { + D = append(D, ID) + } + + // 2. Concatenate copies of the salt together to create a string S of + // length v(ceiling(s/v)) bits (the final copy of the salt may be + // truncated to create S). Note that if the salt is the empty + // string, then so is S. + + S := fillWithRepeats(salt, v) + + // 3. Concatenate copies of the password together to create a string P + // of length v(ceiling(p/v)) bits (the final copy of the password + // may be truncated to create P). Note that if the password is the + // empty string, then so is P. + + P := fillWithRepeats(password, v) + + // 4. Set I=S||P to be the concatenation of S and P. + I := append(S, P...) + + // 5. Set c=ceiling(n/u). + c := (size + u - 1) / u + + // 6. For i=1, 2, ..., c, do the following: + A := make([]byte, c*20) + var IjBuf []byte + for i := 0; i < c; i++ { + // A. Set A2=H^r(D||I). (i.e., the r-th hash of D||1, + // H(H(H(... H(D||I)))) + Ai := hash(append(D, I...)) + for j := 1; j < r; j++ { + Ai = hash(Ai) + } + copy(A[i*20:], Ai[:]) + + if i < c-1 { // skip on last iteration + // B. Concatenate copies of Ai to create a string B of length v + // bits (the final copy of Ai may be truncated to create B). + var B []byte + for len(B) < v { + B = append(B, Ai[:]...) + } + B = B[:v] + + // C. Treating I as a concatenation I_0, I_1, ..., I_(k-1) of v-bit + // blocks, where k=ceiling(s/v)+ceiling(p/v), modify I by + // setting I_j=(I_j+B+1) mod 2^v for each j. + { + Bbi := new(big.Int).SetBytes(B) + Ij := new(big.Int) + + for j := 0; j < len(I)/v; j++ { + Ij.SetBytes(I[j*v : (j+1)*v]) + Ij.Add(Ij, Bbi) + Ij.Add(Ij, one) + Ijb := Ij.Bytes() + // We expect Ijb to be exactly v bytes, + // if it is longer or shorter we must + // adjust it accordingly. + if len(Ijb) > v { + Ijb = Ijb[len(Ijb)-v:] + } + if len(Ijb) < v { + if IjBuf == nil { + IjBuf = make([]byte, v) + } + bytesShort := v - len(Ijb) + for i := 0; i < bytesShort; i++ { + IjBuf[i] = 0 + } + copy(IjBuf[bytesShort:], Ijb) + Ijb = IjBuf + } + copy(I[j*v:(j+1)*v], Ijb) + } + } + } + } + // 7. Concatenate A_1, A_2, ..., A_c together to form a pseudorandom + // bit string, A. + + // 8. Use the first n bits of A as the output of this entire process. + return A[:size] + + // If the above process is being used to generate a DES key, the process + // should be used to create 64 random bits, and the key's parity bits + // should be set after the 64 bits have been produced. Similar concerns + // hold for 2-key and 3-key triple-DES keys, for CDMF keys, and for any + // similar keys with parity bits "built into them". +} diff --git a/vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go b/vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go new file mode 100644 index 0000000..262037d --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/pbkdf_test.go @@ -0,0 +1,34 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "bytes" + "testing" +) + +func TestThatPBKDFWorksCorrectlyForLongKeys(t *testing.T) { + cipherInfo := shaWithTripleDESCBC{} + + salt := []byte("\xff\xff\xff\xff\xff\xff\xff\xff") + password, _ := bmpString("sesame") + key := cipherInfo.deriveKey(salt, password, 2048) + + if expected := []byte("\x7c\xd9\xfd\x3e\x2b\x3b\xe7\x69\x1a\x44\xe3\xbe\xf0\xf9\xea\x0f\xb9\xb8\x97\xd4\xe3\x25\xd9\xd1"); bytes.Compare(key, expected) != 0 { + t.Fatalf("expected key '%x', but found '%x'", expected, key) + } +} + +func TestThatPBKDFHandlesLeadingZeros(t *testing.T) { + // This test triggers a case where I_j (in step 6C) ends up with leading zero + // byte, meaning that len(Ijb) < v (leading zeros get stripped by big.Int). + // This was previously causing bug whereby certain inputs would break the + // derivation and produce the wrong output. + key := pbkdf(sha1Sum, 20, 64, []byte("\xf3\x7e\x05\xb5\x18\x32\x4b\x4b"), []byte("\x00\x00"), 2048, 1, 24) + expected := []byte("\x00\xf7\x59\xff\x47\xd1\x4d\xd0\x36\x65\xd5\x94\x3c\xb3\xc4\xa3\x9a\x25\x55\xc0\x2a\xed\x66\xe1") + if bytes.Compare(key, expected) != 0 { + t.Fatalf("expected key '%x', but found '%x'", expected, key) + } +} diff --git a/vendor/golang.org/x/crypto/pkcs12/pkcs12.go b/vendor/golang.org/x/crypto/pkcs12/pkcs12.go new file mode 100644 index 0000000..eff9ad3 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/pkcs12.go @@ -0,0 +1,346 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package pkcs12 implements some of PKCS#12. +// +// This implementation is distilled from https://tools.ietf.org/html/rfc7292 +// and referenced documents. It is intended for decoding P12/PFX-stored +// certificates and keys for use with the crypto/tls package. +package pkcs12 + +import ( + "crypto/ecdsa" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/asn1" + "encoding/hex" + "encoding/pem" + "errors" +) + +var ( + oidDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 1}) + oidEncryptedDataContentType = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 7, 6}) + + oidFriendlyName = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 20}) + oidLocalKeyID = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 21}) + oidMicrosoftCSPName = asn1.ObjectIdentifier([]int{1, 3, 6, 1, 4, 1, 311, 17, 1}) +) + +type pfxPdu struct { + Version int + AuthSafe contentInfo + MacData macData `asn1:"optional"` +} + +type contentInfo struct { + ContentType asn1.ObjectIdentifier + Content asn1.RawValue `asn1:"tag:0,explicit,optional"` +} + +type encryptedData struct { + Version int + EncryptedContentInfo encryptedContentInfo +} + +type encryptedContentInfo struct { + ContentType asn1.ObjectIdentifier + ContentEncryptionAlgorithm pkix.AlgorithmIdentifier + EncryptedContent []byte `asn1:"tag:0,optional"` +} + +func (i encryptedContentInfo) Algorithm() pkix.AlgorithmIdentifier { + return i.ContentEncryptionAlgorithm +} + +func (i encryptedContentInfo) Data() []byte { return i.EncryptedContent } + +type safeBag struct { + Id asn1.ObjectIdentifier + Value asn1.RawValue `asn1:"tag:0,explicit"` + Attributes []pkcs12Attribute `asn1:"set,optional"` +} + +type pkcs12Attribute struct { + Id asn1.ObjectIdentifier + Value asn1.RawValue `asn1:"set"` +} + +type encryptedPrivateKeyInfo struct { + AlgorithmIdentifier pkix.AlgorithmIdentifier + EncryptedData []byte +} + +func (i encryptedPrivateKeyInfo) Algorithm() pkix.AlgorithmIdentifier { + return i.AlgorithmIdentifier +} + +func (i encryptedPrivateKeyInfo) Data() []byte { + return i.EncryptedData +} + +// PEM block types +const ( + certificateType = "CERTIFICATE" + privateKeyType = "PRIVATE KEY" +) + +// unmarshal calls asn1.Unmarshal, but also returns an error if there is any +// trailing data after unmarshaling. +func unmarshal(in []byte, out interface{}) error { + trailing, err := asn1.Unmarshal(in, out) + if err != nil { + return err + } + if len(trailing) != 0 { + return errors.New("pkcs12: trailing data found") + } + return nil +} + +// ConvertToPEM converts all "safe bags" contained in pfxData to PEM blocks. +func ToPEM(pfxData []byte, password string) ([]*pem.Block, error) { + encodedPassword, err := bmpString(password) + if err != nil { + return nil, ErrIncorrectPassword + } + + bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword) + + if err != nil { + return nil, err + } + + blocks := make([]*pem.Block, 0, len(bags)) + for _, bag := range bags { + block, err := convertBag(&bag, encodedPassword) + if err != nil { + return nil, err + } + blocks = append(blocks, block) + } + + return blocks, nil +} + +func convertBag(bag *safeBag, password []byte) (*pem.Block, error) { + block := &pem.Block{ + Headers: make(map[string]string), + } + + for _, attribute := range bag.Attributes { + k, v, err := convertAttribute(&attribute) + if err != nil { + return nil, err + } + block.Headers[k] = v + } + + switch { + case bag.Id.Equal(oidCertBag): + block.Type = certificateType + certsData, err := decodeCertBag(bag.Value.Bytes) + if err != nil { + return nil, err + } + block.Bytes = certsData + case bag.Id.Equal(oidPKCS8ShroundedKeyBag): + block.Type = privateKeyType + + key, err := decodePkcs8ShroudedKeyBag(bag.Value.Bytes, password) + if err != nil { + return nil, err + } + + switch key := key.(type) { + case *rsa.PrivateKey: + block.Bytes = x509.MarshalPKCS1PrivateKey(key) + case *ecdsa.PrivateKey: + block.Bytes, err = x509.MarshalECPrivateKey(key) + if err != nil { + return nil, err + } + default: + return nil, errors.New("found unknown private key type in PKCS#8 wrapping") + } + default: + return nil, errors.New("don't know how to convert a safe bag of type " + bag.Id.String()) + } + return block, nil +} + +func convertAttribute(attribute *pkcs12Attribute) (key, value string, err error) { + isString := false + + switch { + case attribute.Id.Equal(oidFriendlyName): + key = "friendlyName" + isString = true + case attribute.Id.Equal(oidLocalKeyID): + key = "localKeyId" + case attribute.Id.Equal(oidMicrosoftCSPName): + // This key is chosen to match OpenSSL. + key = "Microsoft CSP Name" + isString = true + default: + return "", "", errors.New("pkcs12: unknown attribute with OID " + attribute.Id.String()) + } + + if isString { + if err := unmarshal(attribute.Value.Bytes, &attribute.Value); err != nil { + return "", "", err + } + if value, err = decodeBMPString(attribute.Value.Bytes); err != nil { + return "", "", err + } + } else { + var id []byte + if err := unmarshal(attribute.Value.Bytes, &id); err != nil { + return "", "", err + } + value = hex.EncodeToString(id) + } + + return key, value, nil +} + +// Decode extracts a certificate and private key from pfxData. This function +// assumes that there is only one certificate and only one private key in the +// pfxData. +func Decode(pfxData []byte, password string) (privateKey interface{}, certificate *x509.Certificate, err error) { + encodedPassword, err := bmpString(password) + if err != nil { + return nil, nil, err + } + + bags, encodedPassword, err := getSafeContents(pfxData, encodedPassword) + if err != nil { + return nil, nil, err + } + + if len(bags) != 2 { + err = errors.New("pkcs12: expected exactly two safe bags in the PFX PDU") + return + } + + for _, bag := range bags { + switch { + case bag.Id.Equal(oidCertBag): + if certificate != nil { + err = errors.New("pkcs12: expected exactly one certificate bag") + } + + certsData, err := decodeCertBag(bag.Value.Bytes) + if err != nil { + return nil, nil, err + } + certs, err := x509.ParseCertificates(certsData) + if err != nil { + return nil, nil, err + } + if len(certs) != 1 { + err = errors.New("pkcs12: expected exactly one certificate in the certBag") + return nil, nil, err + } + certificate = certs[0] + + case bag.Id.Equal(oidPKCS8ShroundedKeyBag): + if privateKey != nil { + err = errors.New("pkcs12: expected exactly one key bag") + } + + if privateKey, err = decodePkcs8ShroudedKeyBag(bag.Value.Bytes, encodedPassword); err != nil { + return nil, nil, err + } + } + } + + if certificate == nil { + return nil, nil, errors.New("pkcs12: certificate missing") + } + if privateKey == nil { + return nil, nil, errors.New("pkcs12: private key missing") + } + + return +} + +func getSafeContents(p12Data, password []byte) (bags []safeBag, updatedPassword []byte, err error) { + pfx := new(pfxPdu) + if err := unmarshal(p12Data, pfx); err != nil { + return nil, nil, errors.New("pkcs12: error reading P12 data: " + err.Error()) + } + + if pfx.Version != 3 { + return nil, nil, NotImplementedError("can only decode v3 PFX PDU's") + } + + if !pfx.AuthSafe.ContentType.Equal(oidDataContentType) { + return nil, nil, NotImplementedError("only password-protected PFX is implemented") + } + + // unmarshal the explicit bytes in the content for type 'data' + if err := unmarshal(pfx.AuthSafe.Content.Bytes, &pfx.AuthSafe.Content); err != nil { + return nil, nil, err + } + + if len(pfx.MacData.Mac.Algorithm.Algorithm) == 0 { + return nil, nil, errors.New("pkcs12: no MAC in data") + } + + if err := verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password); err != nil { + if err == ErrIncorrectPassword && len(password) == 2 && password[0] == 0 && password[1] == 0 { + // some implementations use an empty byte array + // for the empty string password try one more + // time with empty-empty password + password = nil + err = verifyMac(&pfx.MacData, pfx.AuthSafe.Content.Bytes, password) + } + if err != nil { + return nil, nil, err + } + } + + var authenticatedSafe []contentInfo + if err := unmarshal(pfx.AuthSafe.Content.Bytes, &authenticatedSafe); err != nil { + return nil, nil, err + } + + if len(authenticatedSafe) != 2 { + return nil, nil, NotImplementedError("expected exactly two items in the authenticated safe") + } + + for _, ci := range authenticatedSafe { + var data []byte + + switch { + case ci.ContentType.Equal(oidDataContentType): + if err := unmarshal(ci.Content.Bytes, &data); err != nil { + return nil, nil, err + } + case ci.ContentType.Equal(oidEncryptedDataContentType): + var encryptedData encryptedData + if err := unmarshal(ci.Content.Bytes, &encryptedData); err != nil { + return nil, nil, err + } + if encryptedData.Version != 0 { + return nil, nil, NotImplementedError("only version 0 of EncryptedData is supported") + } + if data, err = pbDecrypt(encryptedData.EncryptedContentInfo, password); err != nil { + return nil, nil, err + } + default: + return nil, nil, NotImplementedError("only data and encryptedData content types are supported in authenticated safe") + } + + var safeContents []safeBag + if err := unmarshal(data, &safeContents); err != nil { + return nil, nil, err + } + bags = append(bags, safeContents...) + } + + return bags, password, nil +} diff --git a/vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go b/vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go new file mode 100644 index 0000000..14dd2a6 --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/pkcs12_test.go @@ -0,0 +1,138 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "crypto/rsa" + "crypto/tls" + "encoding/base64" + "encoding/pem" + "testing" +) + +func TestPfx(t *testing.T) { + for commonName, base64P12 := range testdata { + p12, _ := base64.StdEncoding.DecodeString(base64P12) + + priv, cert, err := Decode(p12, "") + if err != nil { + t.Fatal(err) + } + + if err := priv.(*rsa.PrivateKey).Validate(); err != nil { + t.Errorf("error while validating private key: %v", err) + } + + if cert.Subject.CommonName != commonName { + t.Errorf("expected common name to be %q, but found %q", commonName, cert.Subject.CommonName) + } + } +} + +func TestPEM(t *testing.T) { + for commonName, base64P12 := range testdata { + p12, _ := base64.StdEncoding.DecodeString(base64P12) + + blocks, err := ToPEM(p12, "") + if err != nil { + t.Fatalf("error while converting to PEM: %s", err) + } + + var pemData []byte + for _, b := range blocks { + pemData = append(pemData, pem.EncodeToMemory(b)...) + } + + cert, err := tls.X509KeyPair(pemData, pemData) + if err != nil { + t.Errorf("err while converting to key pair: %v", err) + } + config := tls.Config{ + Certificates: []tls.Certificate{cert}, + } + config.BuildNameToCertificate() + + if _, exists := config.NameToCertificate[commonName]; !exists { + t.Errorf("did not find our cert in PEM?: %v", config.NameToCertificate) + } + } +} + +func ExampleToPEM() { + p12, _ := base64.StdEncoding.DecodeString(`MIIJzgIBAzCCCZQGCS ... CA+gwggPk==`) + + blocks, err := ToPEM(p12, "password") + if err != nil { + panic(err) + } + + var pemData []byte + for _, b := range blocks { + pemData = append(pemData, pem.EncodeToMemory(b)...) + } + + // then use PEM data for tls to construct tls certificate: + cert, err := tls.X509KeyPair(pemData, pemData) + if err != nil { + panic(err) + } + + config := &tls.Config{ + Certificates: []tls.Certificate{cert}, + } + + _ = config +} + +var testdata = map[string]string{ + // 'null' password test case + "Windows Azure Tools": `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`, + // empty string password test case + "testing@example.com": `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 +HQ8CAggA`, +} diff --git a/vendor/golang.org/x/crypto/pkcs12/safebags.go b/vendor/golang.org/x/crypto/pkcs12/safebags.go new file mode 100644 index 0000000..def1f7b --- /dev/null +++ b/vendor/golang.org/x/crypto/pkcs12/safebags.go @@ -0,0 +1,57 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package pkcs12 + +import ( + "crypto/x509" + "encoding/asn1" + "errors" +) + +var ( + // see https://tools.ietf.org/html/rfc7292#appendix-D + oidCertTypeX509Certificate = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 9, 22, 1}) + oidPKCS8ShroundedKeyBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 2}) + oidCertBag = asn1.ObjectIdentifier([]int{1, 2, 840, 113549, 1, 12, 10, 1, 3}) +) + +type certBag struct { + Id asn1.ObjectIdentifier + Data []byte `asn1:"tag:0,explicit"` +} + +func decodePkcs8ShroudedKeyBag(asn1Data, password []byte) (privateKey interface{}, err error) { + pkinfo := new(encryptedPrivateKeyInfo) + if err = unmarshal(asn1Data, pkinfo); err != nil { + return nil, errors.New("pkcs12: error decoding PKCS#8 shrouded key bag: " + err.Error()) + } + + pkData, err := pbDecrypt(pkinfo, password) + if err != nil { + return nil, errors.New("pkcs12: error decrypting PKCS#8 shrouded key bag: " + err.Error()) + } + + ret := new(asn1.RawValue) + if err = unmarshal(pkData, ret); err != nil { + return nil, errors.New("pkcs12: error unmarshaling decrypted private key: " + err.Error()) + } + + if privateKey, err = x509.ParsePKCS8PrivateKey(pkData); err != nil { + return nil, errors.New("pkcs12: error parsing PKCS#8 private key: " + err.Error()) + } + + return privateKey, nil +} + +func decodeCertBag(asn1Data []byte) (x509Certificates []byte, err error) { + bag := new(certBag) + if err := unmarshal(asn1Data, bag); err != nil { + return nil, errors.New("pkcs12: error decoding cert bag: " + err.Error()) + } + if !bag.Id.Equal(oidCertTypeX509Certificate) { + return nil, NotImplementedError("only X509 certificates are supported") + } + return bag.Data, nil +} diff --git a/vendor/golang.org/x/crypto/poly1305/poly1305.go b/vendor/golang.org/x/crypto/poly1305/poly1305.go new file mode 100644 index 0000000..f562fa5 --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/poly1305.go @@ -0,0 +1,33 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package poly1305 implements Poly1305 one-time message authentication code as +specified in https://cr.yp.to/mac/poly1305-20050329.pdf. + +Poly1305 is a fast, one-time authentication function. It is infeasible for an +attacker to generate an authenticator for a message without the key. However, a +key must only be used for a single message. Authenticating two different +messages with the same key allows an attacker to forge authenticators for other +messages with the same key. + +Poly1305 was originally coupled with AES in order to make Poly1305-AES. AES was +used with a fixed key in order to generate one-time keys from an nonce. +However, in this package AES isn't used and the one-time key is specified +directly. +*/ +package poly1305 // import "golang.org/x/crypto/poly1305" + +import "crypto/subtle" + +// TagSize is the size, in bytes, of a poly1305 authenticator. +const TagSize = 16 + +// Verify returns true if mac is a valid authenticator for m with the given +// key. +func Verify(mac *[16]byte, m []byte, key *[32]byte) bool { + var tmp [16]byte + Sum(&tmp, m, key) + return subtle.ConstantTimeCompare(tmp[:], mac[:]) == 1 +} diff --git a/vendor/golang.org/x/crypto/poly1305/poly1305_test.go b/vendor/golang.org/x/crypto/poly1305/poly1305_test.go new file mode 100644 index 0000000..017027f --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/poly1305_test.go @@ -0,0 +1,159 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package poly1305 + +import ( + "bytes" + "encoding/hex" + "flag" + "testing" + "unsafe" +) + +var stressFlag = flag.Bool("stress", false, "run slow stress tests") + +var testData = []struct { + in, k, correct []byte +}{ + { + []byte("Hello world!"), + []byte("this is 32-byte key for Poly1305"), + []byte{0xa6, 0xf7, 0x45, 0x00, 0x8f, 0x81, 0xc9, 0x16, 0xa2, 0x0d, 0xcc, 0x74, 0xee, 0xf2, 0xb2, 0xf0}, + }, + { + make([]byte, 32), + []byte("this is 32-byte key for Poly1305"), + []byte{0x49, 0xec, 0x78, 0x09, 0x0e, 0x48, 0x1e, 0xc6, 0xc2, 0x6b, 0x33, 0xb9, 0x1c, 0xcc, 0x03, 0x07}, + }, + { + make([]byte, 2007), + []byte("this is 32-byte key for Poly1305"), + []byte{0xda, 0x84, 0xbc, 0xab, 0x02, 0x67, 0x6c, 0x38, 0xcd, 0xb0, 0x15, 0x60, 0x42, 0x74, 0xc2, 0xaa}, + }, + { + make([]byte, 2007), + make([]byte, 32), + make([]byte, 16), + }, + { + // This test triggers an edge-case. See https://go-review.googlesource.com/#/c/30101/. + []byte{0x81, 0xd8, 0xb2, 0xe4, 0x6a, 0x25, 0x21, 0x3b, 0x58, 0xfe, 0xe4, 0x21, 0x3a, 0x2a, 0x28, 0xe9, 0x21, 0xc1, 0x2a, 0x96, 0x32, 0x51, 0x6d, 0x3b, 0x73, 0x27, 0x27, 0x27, 0xbe, 0xcf, 0x21, 0x29}, + []byte{0x3b, 0x3a, 0x29, 0xe9, 0x3b, 0x21, 0x3a, 0x5c, 0x5c, 0x3b, 0x3b, 0x05, 0x3a, 0x3a, 0x8c, 0x0d}, + []byte{0x6d, 0xc1, 0x8b, 0x8c, 0x34, 0x4c, 0xd7, 0x99, 0x27, 0x11, 0x8b, 0xbe, 0x84, 0xb7, 0xf3, 0x14}, + }, + { + // This test generates a result of (2^130-1) % (2^130-5). + []byte{ + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + []byte{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + []byte{4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }, + { + // This test generates a result of (2^130-6) % (2^130-5). + []byte{ + 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + []byte{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + []byte{0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, + }, + { + // This test generates a result of (2^130-5) % (2^130-5). + []byte{ + 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + }, + []byte{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + }, +} + +func testSum(t *testing.T, unaligned bool) { + var out [16]byte + var key [32]byte + + for i, v := range testData { + in := v.in + if unaligned { + in = unalignBytes(in) + } + copy(key[:], v.k) + Sum(&out, in, &key) + if !bytes.Equal(out[:], v.correct) { + t.Errorf("%d: expected %x, got %x", i, v.correct, out[:]) + } + } +} + +func TestBurnin(t *testing.T) { + // This test can be used to sanity-check significant changes. It can + // take about many minutes to run, even on fast machines. It's disabled + // by default. + if !*stressFlag { + t.Skip("skipping without -stress") + } + + var key [32]byte + var input [25]byte + var output [16]byte + + for i := range key { + key[i] = 1 + } + for i := range input { + input[i] = 2 + } + + for i := uint64(0); i < 1e10; i++ { + Sum(&output, input[:], &key) + copy(key[0:], output[:]) + copy(key[16:], output[:]) + copy(input[:], output[:]) + copy(input[16:], output[:]) + } + + const expected = "5e3b866aea0b636d240c83c428f84bfa" + if got := hex.EncodeToString(output[:]); got != expected { + t.Errorf("expected %s, got %s", expected, got) + } +} + +func TestSum(t *testing.T) { testSum(t, false) } +func TestSumUnaligned(t *testing.T) { testSum(t, true) } + +func benchmark(b *testing.B, size int, unaligned bool) { + var out [16]byte + var key [32]byte + in := make([]byte, size) + if unaligned { + in = unalignBytes(in) + } + b.SetBytes(int64(len(in))) + b.ResetTimer() + for i := 0; i < b.N; i++ { + Sum(&out, in, &key) + } +} + +func Benchmark64(b *testing.B) { benchmark(b, 64, false) } +func Benchmark1K(b *testing.B) { benchmark(b, 1024, false) } +func Benchmark64Unaligned(b *testing.B) { benchmark(b, 64, true) } +func Benchmark1KUnaligned(b *testing.B) { benchmark(b, 1024, true) } + +func unalignBytes(in []byte) []byte { + out := make([]byte, len(in)+1) + if uintptr(unsafe.Pointer(&out[0]))&(unsafe.Alignof(uint32(0))-1) == 0 { + out = out[1:] + } else { + out = out[:len(in)] + } + copy(out, in) + return out +} diff --git a/vendor/golang.org/x/crypto/poly1305/sum_amd64.go b/vendor/golang.org/x/crypto/poly1305/sum_amd64.go new file mode 100644 index 0000000..4dd72fe --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/sum_amd64.go @@ -0,0 +1,22 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +package poly1305 + +// This function is implemented in sum_amd64.s +//go:noescape +func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]byte) + +// Sum generates an authenticator for m using a one-time key and puts the +// 16-byte result into out. Authenticating two different messages with the same +// key allows an attacker to forge messages at will. +func Sum(out *[16]byte, m []byte, key *[32]byte) { + var mPtr *byte + if len(m) > 0 { + mPtr = &m[0] + } + poly1305(out, mPtr, uint64(len(m)), key) +} diff --git a/vendor/golang.org/x/crypto/poly1305/sum_amd64.s b/vendor/golang.org/x/crypto/poly1305/sum_amd64.s new file mode 100644 index 0000000..2edae63 --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/sum_amd64.s @@ -0,0 +1,125 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!gccgo,!appengine + +#include "textflag.h" + +#define POLY1305_ADD(msg, h0, h1, h2) \ + ADDQ 0(msg), h0; \ + ADCQ 8(msg), h1; \ + ADCQ $1, h2; \ + LEAQ 16(msg), msg + +#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3) \ + MOVQ r0, AX; \ + MULQ h0; \ + MOVQ AX, t0; \ + MOVQ DX, t1; \ + MOVQ r0, AX; \ + MULQ h1; \ + ADDQ AX, t1; \ + ADCQ $0, DX; \ + MOVQ r0, t2; \ + IMULQ h2, t2; \ + ADDQ DX, t2; \ + \ + MOVQ r1, AX; \ + MULQ h0; \ + ADDQ AX, t1; \ + ADCQ $0, DX; \ + MOVQ DX, h0; \ + MOVQ r1, t3; \ + IMULQ h2, t3; \ + MOVQ r1, AX; \ + MULQ h1; \ + ADDQ AX, t2; \ + ADCQ DX, t3; \ + ADDQ h0, t2; \ + ADCQ $0, t3; \ + \ + MOVQ t0, h0; \ + MOVQ t1, h1; \ + MOVQ t2, h2; \ + ANDQ $3, h2; \ + MOVQ t2, t0; \ + ANDQ $0xFFFFFFFFFFFFFFFC, t0; \ + ADDQ t0, h0; \ + ADCQ t3, h1; \ + ADCQ $0, h2; \ + SHRQ $2, t3, t2; \ + SHRQ $2, t3; \ + ADDQ t2, h0; \ + ADCQ t3, h1; \ + ADCQ $0, h2 + +DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF +DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC +GLOBL ·poly1305Mask<>(SB), RODATA, $16 + +// func poly1305(out *[16]byte, m *byte, mlen uint64, key *[32]key) +TEXT ·poly1305(SB), $0-32 + MOVQ out+0(FP), DI + MOVQ m+8(FP), SI + MOVQ mlen+16(FP), R15 + MOVQ key+24(FP), AX + + MOVQ 0(AX), R11 + MOVQ 8(AX), R12 + ANDQ ·poly1305Mask<>(SB), R11 // r0 + ANDQ ·poly1305Mask<>+8(SB), R12 // r1 + XORQ R8, R8 // h0 + XORQ R9, R9 // h1 + XORQ R10, R10 // h2 + + CMPQ R15, $16 + JB bytes_between_0_and_15 + +loop: + POLY1305_ADD(SI, R8, R9, R10) + +multiply: + POLY1305_MUL(R8, R9, R10, R11, R12, BX, CX, R13, R14) + SUBQ $16, R15 + CMPQ R15, $16 + JAE loop + +bytes_between_0_and_15: + TESTQ R15, R15 + JZ done + MOVQ $1, BX + XORQ CX, CX + XORQ R13, R13 + ADDQ R15, SI + +flush_buffer: + SHLQ $8, BX, CX + SHLQ $8, BX + MOVB -1(SI), R13 + XORQ R13, BX + DECQ SI + DECQ R15 + JNZ flush_buffer + + ADDQ BX, R8 + ADCQ CX, R9 + ADCQ $0, R10 + MOVQ $16, R15 + JMP multiply + +done: + MOVQ R8, AX + MOVQ R9, BX + SUBQ $0xFFFFFFFFFFFFFFFB, AX + SBBQ $0xFFFFFFFFFFFFFFFF, BX + SBBQ $3, R10 + CMOVQCS R8, AX + CMOVQCS R9, BX + MOVQ key+24(FP), R8 + ADDQ 16(R8), AX + ADCQ 24(R8), BX + + MOVQ AX, 0(DI) + MOVQ BX, 8(DI) + RET diff --git a/vendor/golang.org/x/crypto/poly1305/sum_arm.go b/vendor/golang.org/x/crypto/poly1305/sum_arm.go new file mode 100644 index 0000000..5dc321c --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/sum_arm.go @@ -0,0 +1,22 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,!gccgo,!appengine,!nacl + +package poly1305 + +// This function is implemented in sum_arm.s +//go:noescape +func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]byte) + +// Sum generates an authenticator for m using a one-time key and puts the +// 16-byte result into out. Authenticating two different messages with the same +// key allows an attacker to forge messages at will. +func Sum(out *[16]byte, m []byte, key *[32]byte) { + var mPtr *byte + if len(m) > 0 { + mPtr = &m[0] + } + poly1305_auth_armv6(out, mPtr, uint32(len(m)), key) +} diff --git a/vendor/golang.org/x/crypto/poly1305/sum_arm.s b/vendor/golang.org/x/crypto/poly1305/sum_arm.s new file mode 100644 index 0000000..f70b4ac --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/sum_arm.s @@ -0,0 +1,427 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,!gccgo,!appengine,!nacl + +#include "textflag.h" + +// This code was translated into a form compatible with 5a from the public +// domain source by Andrew Moon: github.com/floodyberry/poly1305-opt/blob/master/app/extensions/poly1305. + +DATA ·poly1305_init_constants_armv6<>+0x00(SB)/4, $0x3ffffff +DATA ·poly1305_init_constants_armv6<>+0x04(SB)/4, $0x3ffff03 +DATA ·poly1305_init_constants_armv6<>+0x08(SB)/4, $0x3ffc0ff +DATA ·poly1305_init_constants_armv6<>+0x0c(SB)/4, $0x3f03fff +DATA ·poly1305_init_constants_armv6<>+0x10(SB)/4, $0x00fffff +GLOBL ·poly1305_init_constants_armv6<>(SB), 8, $20 + +// Warning: the linker may use R11 to synthesize certain instructions. Please +// take care and verify that no synthetic instructions use it. + +TEXT poly1305_init_ext_armv6<>(SB), NOSPLIT, $0 + // Needs 16 bytes of stack and 64 bytes of space pointed to by R0. (It + // might look like it's only 60 bytes of space but the final four bytes + // will be written by another function.) We need to skip over four + // bytes of stack because that's saving the value of 'g'. + ADD $4, R13, R8 + MOVM.IB [R4-R7], (R8) + MOVM.IA.W (R1), [R2-R5] + MOVW $·poly1305_init_constants_armv6<>(SB), R7 + MOVW R2, R8 + MOVW R2>>26, R9 + MOVW R3>>20, g + MOVW R4>>14, R11 + MOVW R5>>8, R12 + ORR R3<<6, R9, R9 + ORR R4<<12, g, g + ORR R5<<18, R11, R11 + MOVM.IA (R7), [R2-R6] + AND R8, R2, R2 + AND R9, R3, R3 + AND g, R4, R4 + AND R11, R5, R5 + AND R12, R6, R6 + MOVM.IA.W [R2-R6], (R0) + EOR R2, R2, R2 + EOR R3, R3, R3 + EOR R4, R4, R4 + EOR R5, R5, R5 + EOR R6, R6, R6 + MOVM.IA.W [R2-R6], (R0) + MOVM.IA.W (R1), [R2-R5] + MOVM.IA [R2-R6], (R0) + ADD $20, R13, R0 + MOVM.DA (R0), [R4-R7] + RET + +#define MOVW_UNALIGNED(Rsrc, Rdst, Rtmp, offset) \ + MOVBU (offset+0)(Rsrc), Rtmp; \ + MOVBU Rtmp, (offset+0)(Rdst); \ + MOVBU (offset+1)(Rsrc), Rtmp; \ + MOVBU Rtmp, (offset+1)(Rdst); \ + MOVBU (offset+2)(Rsrc), Rtmp; \ + MOVBU Rtmp, (offset+2)(Rdst); \ + MOVBU (offset+3)(Rsrc), Rtmp; \ + MOVBU Rtmp, (offset+3)(Rdst) + +TEXT poly1305_blocks_armv6<>(SB), NOSPLIT, $0 + // Needs 24 bytes of stack for saved registers and then 88 bytes of + // scratch space after that. We assume that 24 bytes at (R13) have + // already been used: four bytes for the link register saved in the + // prelude of poly1305_auth_armv6, four bytes for saving the value of g + // in that function and 16 bytes of scratch space used around + // poly1305_finish_ext_armv6_skip1. + ADD $24, R13, R12 + MOVM.IB [R4-R8, R14], (R12) + MOVW R0, 88(R13) + MOVW R1, 92(R13) + MOVW R2, 96(R13) + MOVW R1, R14 + MOVW R2, R12 + MOVW 56(R0), R8 + WORD $0xe1180008 // TST R8, R8 not working see issue 5921 + EOR R6, R6, R6 + MOVW.EQ $(1<<24), R6 + MOVW R6, 84(R13) + ADD $116, R13, g + MOVM.IA (R0), [R0-R9] + MOVM.IA [R0-R4], (g) + CMP $16, R12 + BLO poly1305_blocks_armv6_done + +poly1305_blocks_armv6_mainloop: + WORD $0xe31e0003 // TST R14, #3 not working see issue 5921 + BEQ poly1305_blocks_armv6_mainloop_aligned + ADD $100, R13, g + MOVW_UNALIGNED(R14, g, R0, 0) + MOVW_UNALIGNED(R14, g, R0, 4) + MOVW_UNALIGNED(R14, g, R0, 8) + MOVW_UNALIGNED(R14, g, R0, 12) + MOVM.IA (g), [R0-R3] + ADD $16, R14 + B poly1305_blocks_armv6_mainloop_loaded + +poly1305_blocks_armv6_mainloop_aligned: + MOVM.IA.W (R14), [R0-R3] + +poly1305_blocks_armv6_mainloop_loaded: + MOVW R0>>26, g + MOVW R1>>20, R11 + MOVW R2>>14, R12 + MOVW R14, 92(R13) + MOVW R3>>8, R4 + ORR R1<<6, g, g + ORR R2<<12, R11, R11 + ORR R3<<18, R12, R12 + BIC $0xfc000000, R0, R0 + BIC $0xfc000000, g, g + MOVW 84(R13), R3 + BIC $0xfc000000, R11, R11 + BIC $0xfc000000, R12, R12 + ADD R0, R5, R5 + ADD g, R6, R6 + ORR R3, R4, R4 + ADD R11, R7, R7 + ADD $116, R13, R14 + ADD R12, R8, R8 + ADD R4, R9, R9 + MOVM.IA (R14), [R0-R4] + MULLU R4, R5, (R11, g) + MULLU R3, R5, (R14, R12) + MULALU R3, R6, (R11, g) + MULALU R2, R6, (R14, R12) + MULALU R2, R7, (R11, g) + MULALU R1, R7, (R14, R12) + ADD R4<<2, R4, R4 + ADD R3<<2, R3, R3 + MULALU R1, R8, (R11, g) + MULALU R0, R8, (R14, R12) + MULALU R0, R9, (R11, g) + MULALU R4, R9, (R14, R12) + MOVW g, 76(R13) + MOVW R11, 80(R13) + MOVW R12, 68(R13) + MOVW R14, 72(R13) + MULLU R2, R5, (R11, g) + MULLU R1, R5, (R14, R12) + MULALU R1, R6, (R11, g) + MULALU R0, R6, (R14, R12) + MULALU R0, R7, (R11, g) + MULALU R4, R7, (R14, R12) + ADD R2<<2, R2, R2 + ADD R1<<2, R1, R1 + MULALU R4, R8, (R11, g) + MULALU R3, R8, (R14, R12) + MULALU R3, R9, (R11, g) + MULALU R2, R9, (R14, R12) + MOVW g, 60(R13) + MOVW R11, 64(R13) + MOVW R12, 52(R13) + MOVW R14, 56(R13) + MULLU R0, R5, (R11, g) + MULALU R4, R6, (R11, g) + MULALU R3, R7, (R11, g) + MULALU R2, R8, (R11, g) + MULALU R1, R9, (R11, g) + ADD $52, R13, R0 + MOVM.IA (R0), [R0-R7] + MOVW g>>26, R12 + MOVW R4>>26, R14 + ORR R11<<6, R12, R12 + ORR R5<<6, R14, R14 + BIC $0xfc000000, g, g + BIC $0xfc000000, R4, R4 + ADD.S R12, R0, R0 + ADC $0, R1, R1 + ADD.S R14, R6, R6 + ADC $0, R7, R7 + MOVW R0>>26, R12 + MOVW R6>>26, R14 + ORR R1<<6, R12, R12 + ORR R7<<6, R14, R14 + BIC $0xfc000000, R0, R0 + BIC $0xfc000000, R6, R6 + ADD R14<<2, R14, R14 + ADD.S R12, R2, R2 + ADC $0, R3, R3 + ADD R14, g, g + MOVW R2>>26, R12 + MOVW g>>26, R14 + ORR R3<<6, R12, R12 + BIC $0xfc000000, g, R5 + BIC $0xfc000000, R2, R7 + ADD R12, R4, R4 + ADD R14, R0, R0 + MOVW R4>>26, R12 + BIC $0xfc000000, R4, R8 + ADD R12, R6, R9 + MOVW 96(R13), R12 + MOVW 92(R13), R14 + MOVW R0, R6 + CMP $32, R12 + SUB $16, R12, R12 + MOVW R12, 96(R13) + BHS poly1305_blocks_armv6_mainloop + +poly1305_blocks_armv6_done: + MOVW 88(R13), R12 + MOVW R5, 20(R12) + MOVW R6, 24(R12) + MOVW R7, 28(R12) + MOVW R8, 32(R12) + MOVW R9, 36(R12) + ADD $48, R13, R0 + MOVM.DA (R0), [R4-R8, R14] + RET + +#define MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp) \ + MOVBU.P 1(Rsrc), Rtmp; \ + MOVBU.P Rtmp, 1(Rdst); \ + MOVBU.P 1(Rsrc), Rtmp; \ + MOVBU.P Rtmp, 1(Rdst) + +#define MOVWP_UNALIGNED(Rsrc, Rdst, Rtmp) \ + MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp); \ + MOVHUP_UNALIGNED(Rsrc, Rdst, Rtmp) + +// func poly1305_auth_armv6(out *[16]byte, m *byte, mlen uint32, key *[32]key) +TEXT ·poly1305_auth_armv6(SB), $196-16 + // The value 196, just above, is the sum of 64 (the size of the context + // structure) and 132 (the amount of stack needed). + // + // At this point, the stack pointer (R13) has been moved down. It + // points to the saved link register and there's 196 bytes of free + // space above it. + // + // The stack for this function looks like: + // + // +--------------------- + // | + // | 64 bytes of context structure + // | + // +--------------------- + // | + // | 112 bytes for poly1305_blocks_armv6 + // | + // +--------------------- + // | 16 bytes of final block, constructed at + // | poly1305_finish_ext_armv6_skip8 + // +--------------------- + // | four bytes of saved 'g' + // +--------------------- + // | lr, saved by prelude <- R13 points here + // +--------------------- + MOVW g, 4(R13) + + MOVW out+0(FP), R4 + MOVW m+4(FP), R5 + MOVW mlen+8(FP), R6 + MOVW key+12(FP), R7 + + ADD $136, R13, R0 // 136 = 4 + 4 + 16 + 112 + MOVW R7, R1 + + // poly1305_init_ext_armv6 will write to the stack from R13+4, but + // that's ok because none of the other values have been written yet. + BL poly1305_init_ext_armv6<>(SB) + BIC.S $15, R6, R2 + BEQ poly1305_auth_armv6_noblocks + ADD $136, R13, R0 + MOVW R5, R1 + ADD R2, R5, R5 + SUB R2, R6, R6 + BL poly1305_blocks_armv6<>(SB) + +poly1305_auth_armv6_noblocks: + ADD $136, R13, R0 + MOVW R5, R1 + MOVW R6, R2 + MOVW R4, R3 + + MOVW R0, R5 + MOVW R1, R6 + MOVW R2, R7 + MOVW R3, R8 + AND.S R2, R2, R2 + BEQ poly1305_finish_ext_armv6_noremaining + EOR R0, R0 + ADD $8, R13, R9 // 8 = offset to 16 byte scratch space + MOVW R0, (R9) + MOVW R0, 4(R9) + MOVW R0, 8(R9) + MOVW R0, 12(R9) + WORD $0xe3110003 // TST R1, #3 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_aligned + WORD $0xe3120008 // TST R2, #8 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip8 + MOVWP_UNALIGNED(R1, R9, g) + MOVWP_UNALIGNED(R1, R9, g) + +poly1305_finish_ext_armv6_skip8: + WORD $0xe3120004 // TST $4, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip4 + MOVWP_UNALIGNED(R1, R9, g) + +poly1305_finish_ext_armv6_skip4: + WORD $0xe3120002 // TST $2, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip2 + MOVHUP_UNALIGNED(R1, R9, g) + B poly1305_finish_ext_armv6_skip2 + +poly1305_finish_ext_armv6_aligned: + WORD $0xe3120008 // TST R2, #8 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip8_aligned + MOVM.IA.W (R1), [g-R11] + MOVM.IA.W [g-R11], (R9) + +poly1305_finish_ext_armv6_skip8_aligned: + WORD $0xe3120004 // TST $4, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip4_aligned + MOVW.P 4(R1), g + MOVW.P g, 4(R9) + +poly1305_finish_ext_armv6_skip4_aligned: + WORD $0xe3120002 // TST $2, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip2 + MOVHU.P 2(R1), g + MOVH.P g, 2(R9) + +poly1305_finish_ext_armv6_skip2: + WORD $0xe3120001 // TST $1, R2 not working see issue 5921 + BEQ poly1305_finish_ext_armv6_skip1 + MOVBU.P 1(R1), g + MOVBU.P g, 1(R9) + +poly1305_finish_ext_armv6_skip1: + MOVW $1, R11 + MOVBU R11, 0(R9) + MOVW R11, 56(R5) + MOVW R5, R0 + ADD $8, R13, R1 + MOVW $16, R2 + BL poly1305_blocks_armv6<>(SB) + +poly1305_finish_ext_armv6_noremaining: + MOVW 20(R5), R0 + MOVW 24(R5), R1 + MOVW 28(R5), R2 + MOVW 32(R5), R3 + MOVW 36(R5), R4 + MOVW R4>>26, R12 + BIC $0xfc000000, R4, R4 + ADD R12<<2, R12, R12 + ADD R12, R0, R0 + MOVW R0>>26, R12 + BIC $0xfc000000, R0, R0 + ADD R12, R1, R1 + MOVW R1>>26, R12 + BIC $0xfc000000, R1, R1 + ADD R12, R2, R2 + MOVW R2>>26, R12 + BIC $0xfc000000, R2, R2 + ADD R12, R3, R3 + MOVW R3>>26, R12 + BIC $0xfc000000, R3, R3 + ADD R12, R4, R4 + ADD $5, R0, R6 + MOVW R6>>26, R12 + BIC $0xfc000000, R6, R6 + ADD R12, R1, R7 + MOVW R7>>26, R12 + BIC $0xfc000000, R7, R7 + ADD R12, R2, g + MOVW g>>26, R12 + BIC $0xfc000000, g, g + ADD R12, R3, R11 + MOVW $-(1<<26), R12 + ADD R11>>26, R12, R12 + BIC $0xfc000000, R11, R11 + ADD R12, R4, R9 + MOVW R9>>31, R12 + SUB $1, R12 + AND R12, R6, R6 + AND R12, R7, R7 + AND R12, g, g + AND R12, R11, R11 + AND R12, R9, R9 + MVN R12, R12 + AND R12, R0, R0 + AND R12, R1, R1 + AND R12, R2, R2 + AND R12, R3, R3 + AND R12, R4, R4 + ORR R6, R0, R0 + ORR R7, R1, R1 + ORR g, R2, R2 + ORR R11, R3, R3 + ORR R9, R4, R4 + ORR R1<<26, R0, R0 + MOVW R1>>6, R1 + ORR R2<<20, R1, R1 + MOVW R2>>12, R2 + ORR R3<<14, R2, R2 + MOVW R3>>18, R3 + ORR R4<<8, R3, R3 + MOVW 40(R5), R6 + MOVW 44(R5), R7 + MOVW 48(R5), g + MOVW 52(R5), R11 + ADD.S R6, R0, R0 + ADC.S R7, R1, R1 + ADC.S g, R2, R2 + ADC.S R11, R3, R3 + MOVM.IA [R0-R3], (R8) + MOVW R5, R12 + EOR R0, R0, R0 + EOR R1, R1, R1 + EOR R2, R2, R2 + EOR R3, R3, R3 + EOR R4, R4, R4 + EOR R5, R5, R5 + EOR R6, R6, R6 + EOR R7, R7, R7 + MOVM.IA.W [R0-R7], (R12) + MOVM.IA [R0-R7], (R12) + MOVW 4(R13), g + RET diff --git a/vendor/golang.org/x/crypto/poly1305/sum_ref.go b/vendor/golang.org/x/crypto/poly1305/sum_ref.go new file mode 100644 index 0000000..b2805a5 --- /dev/null +++ b/vendor/golang.org/x/crypto/poly1305/sum_ref.go @@ -0,0 +1,141 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64,!arm gccgo appengine nacl + +package poly1305 + +import "encoding/binary" + +// Sum generates an authenticator for msg using a one-time key and puts the +// 16-byte result into out. Authenticating two different messages with the same +// key allows an attacker to forge messages at will. +func Sum(out *[TagSize]byte, msg []byte, key *[32]byte) { + var ( + h0, h1, h2, h3, h4 uint32 // the hash accumulators + r0, r1, r2, r3, r4 uint64 // the r part of the key + ) + + r0 = uint64(binary.LittleEndian.Uint32(key[0:]) & 0x3ffffff) + r1 = uint64((binary.LittleEndian.Uint32(key[3:]) >> 2) & 0x3ffff03) + r2 = uint64((binary.LittleEndian.Uint32(key[6:]) >> 4) & 0x3ffc0ff) + r3 = uint64((binary.LittleEndian.Uint32(key[9:]) >> 6) & 0x3f03fff) + r4 = uint64((binary.LittleEndian.Uint32(key[12:]) >> 8) & 0x00fffff) + + R1, R2, R3, R4 := r1*5, r2*5, r3*5, r4*5 + + for len(msg) >= TagSize { + // h += msg + h0 += binary.LittleEndian.Uint32(msg[0:]) & 0x3ffffff + h1 += (binary.LittleEndian.Uint32(msg[3:]) >> 2) & 0x3ffffff + h2 += (binary.LittleEndian.Uint32(msg[6:]) >> 4) & 0x3ffffff + h3 += (binary.LittleEndian.Uint32(msg[9:]) >> 6) & 0x3ffffff + h4 += (binary.LittleEndian.Uint32(msg[12:]) >> 8) | (1 << 24) + + // h *= r + d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1) + d1 := (d0 >> 26) + (uint64(h0) * r1) + (uint64(h1) * r0) + (uint64(h2) * R4) + (uint64(h3) * R3) + (uint64(h4) * R2) + d2 := (d1 >> 26) + (uint64(h0) * r2) + (uint64(h1) * r1) + (uint64(h2) * r0) + (uint64(h3) * R4) + (uint64(h4) * R3) + d3 := (d2 >> 26) + (uint64(h0) * r3) + (uint64(h1) * r2) + (uint64(h2) * r1) + (uint64(h3) * r0) + (uint64(h4) * R4) + d4 := (d3 >> 26) + (uint64(h0) * r4) + (uint64(h1) * r3) + (uint64(h2) * r2) + (uint64(h3) * r1) + (uint64(h4) * r0) + + // h %= p + h0 = uint32(d0) & 0x3ffffff + h1 = uint32(d1) & 0x3ffffff + h2 = uint32(d2) & 0x3ffffff + h3 = uint32(d3) & 0x3ffffff + h4 = uint32(d4) & 0x3ffffff + + h0 += uint32(d4>>26) * 5 + h1 += h0 >> 26 + h0 = h0 & 0x3ffffff + + msg = msg[TagSize:] + } + + if len(msg) > 0 { + var block [TagSize]byte + off := copy(block[:], msg) + block[off] = 0x01 + + // h += msg + h0 += binary.LittleEndian.Uint32(block[0:]) & 0x3ffffff + h1 += (binary.LittleEndian.Uint32(block[3:]) >> 2) & 0x3ffffff + h2 += (binary.LittleEndian.Uint32(block[6:]) >> 4) & 0x3ffffff + h3 += (binary.LittleEndian.Uint32(block[9:]) >> 6) & 0x3ffffff + h4 += (binary.LittleEndian.Uint32(block[12:]) >> 8) + + // h *= r + d0 := (uint64(h0) * r0) + (uint64(h1) * R4) + (uint64(h2) * R3) + (uint64(h3) * R2) + (uint64(h4) * R1) + d1 := (d0 >> 26) + (uint64(h0) * r1) + (uint64(h1) * r0) + (uint64(h2) * R4) + (uint64(h3) * R3) + (uint64(h4) * R2) + d2 := (d1 >> 26) + (uint64(h0) * r2) + (uint64(h1) * r1) + (uint64(h2) * r0) + (uint64(h3) * R4) + (uint64(h4) * R3) + d3 := (d2 >> 26) + (uint64(h0) * r3) + (uint64(h1) * r2) + (uint64(h2) * r1) + (uint64(h3) * r0) + (uint64(h4) * R4) + d4 := (d3 >> 26) + (uint64(h0) * r4) + (uint64(h1) * r3) + (uint64(h2) * r2) + (uint64(h3) * r1) + (uint64(h4) * r0) + + // h %= p + h0 = uint32(d0) & 0x3ffffff + h1 = uint32(d1) & 0x3ffffff + h2 = uint32(d2) & 0x3ffffff + h3 = uint32(d3) & 0x3ffffff + h4 = uint32(d4) & 0x3ffffff + + h0 += uint32(d4>>26) * 5 + h1 += h0 >> 26 + h0 = h0 & 0x3ffffff + } + + // h %= p reduction + h2 += h1 >> 26 + h1 &= 0x3ffffff + h3 += h2 >> 26 + h2 &= 0x3ffffff + h4 += h3 >> 26 + h3 &= 0x3ffffff + h0 += 5 * (h4 >> 26) + h4 &= 0x3ffffff + h1 += h0 >> 26 + h0 &= 0x3ffffff + + // h - p + t0 := h0 + 5 + t1 := h1 + (t0 >> 26) + t2 := h2 + (t1 >> 26) + t3 := h3 + (t2 >> 26) + t4 := h4 + (t3 >> 26) - (1 << 26) + t0 &= 0x3ffffff + t1 &= 0x3ffffff + t2 &= 0x3ffffff + t3 &= 0x3ffffff + + // select h if h < p else h - p + t_mask := (t4 >> 31) - 1 + h_mask := ^t_mask + h0 = (h0 & h_mask) | (t0 & t_mask) + h1 = (h1 & h_mask) | (t1 & t_mask) + h2 = (h2 & h_mask) | (t2 & t_mask) + h3 = (h3 & h_mask) | (t3 & t_mask) + h4 = (h4 & h_mask) | (t4 & t_mask) + + // h %= 2^128 + h0 |= h1 << 26 + h1 = ((h1 >> 6) | (h2 << 20)) + h2 = ((h2 >> 12) | (h3 << 14)) + h3 = ((h3 >> 18) | (h4 << 8)) + + // s: the s part of the key + // tag = (h + s) % (2^128) + t := uint64(h0) + uint64(binary.LittleEndian.Uint32(key[16:])) + h0 = uint32(t) + t = uint64(h1) + uint64(binary.LittleEndian.Uint32(key[20:])) + (t >> 32) + h1 = uint32(t) + t = uint64(h2) + uint64(binary.LittleEndian.Uint32(key[24:])) + (t >> 32) + h2 = uint32(t) + t = uint64(h3) + uint64(binary.LittleEndian.Uint32(key[28:])) + (t >> 32) + h3 = uint32(t) + + binary.LittleEndian.PutUint32(out[0:], h0) + binary.LittleEndian.PutUint32(out[4:], h1) + binary.LittleEndian.PutUint32(out[8:], h2) + binary.LittleEndian.PutUint32(out[12:], h3) +} diff --git a/vendor/golang.org/x/crypto/ripemd160/ripemd160.go b/vendor/golang.org/x/crypto/ripemd160/ripemd160.go new file mode 100644 index 0000000..6c6e842 --- /dev/null +++ b/vendor/golang.org/x/crypto/ripemd160/ripemd160.go @@ -0,0 +1,120 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package ripemd160 implements the RIPEMD-160 hash algorithm. +package ripemd160 // import "golang.org/x/crypto/ripemd160" + +// RIPEMD-160 is designed by by Hans Dobbertin, Antoon Bosselaers, and Bart +// Preneel with specifications available at: +// http://homes.esat.kuleuven.be/~cosicart/pdf/AB-9601/AB-9601.pdf. + +import ( + "crypto" + "hash" +) + +func init() { + crypto.RegisterHash(crypto.RIPEMD160, New) +} + +// The size of the checksum in bytes. +const Size = 20 + +// The block size of the hash algorithm in bytes. +const BlockSize = 64 + +const ( + _s0 = 0x67452301 + _s1 = 0xefcdab89 + _s2 = 0x98badcfe + _s3 = 0x10325476 + _s4 = 0xc3d2e1f0 +) + +// digest represents the partial evaluation of a checksum. +type digest struct { + s [5]uint32 // running context + x [BlockSize]byte // temporary buffer + nx int // index into x + tc uint64 // total count of bytes processed +} + +func (d *digest) Reset() { + d.s[0], d.s[1], d.s[2], d.s[3], d.s[4] = _s0, _s1, _s2, _s3, _s4 + d.nx = 0 + d.tc = 0 +} + +// New returns a new hash.Hash computing the checksum. +func New() hash.Hash { + result := new(digest) + result.Reset() + return result +} + +func (d *digest) Size() int { return Size } + +func (d *digest) BlockSize() int { return BlockSize } + +func (d *digest) Write(p []byte) (nn int, err error) { + nn = len(p) + d.tc += uint64(nn) + if d.nx > 0 { + n := len(p) + if n > BlockSize-d.nx { + n = BlockSize - d.nx + } + for i := 0; i < n; i++ { + d.x[d.nx+i] = p[i] + } + d.nx += n + if d.nx == BlockSize { + _Block(d, d.x[0:]) + d.nx = 0 + } + p = p[n:] + } + n := _Block(d, p) + p = p[n:] + if len(p) > 0 { + d.nx = copy(d.x[:], p) + } + return +} + +func (d0 *digest) Sum(in []byte) []byte { + // Make a copy of d0 so that caller can keep writing and summing. + d := *d0 + + // Padding. Add a 1 bit and 0 bits until 56 bytes mod 64. + tc := d.tc + var tmp [64]byte + tmp[0] = 0x80 + if tc%64 < 56 { + d.Write(tmp[0 : 56-tc%64]) + } else { + d.Write(tmp[0 : 64+56-tc%64]) + } + + // Length in bits. + tc <<= 3 + for i := uint(0); i < 8; i++ { + tmp[i] = byte(tc >> (8 * i)) + } + d.Write(tmp[0:8]) + + if d.nx != 0 { + panic("d.nx != 0") + } + + var digest [Size]byte + for i, s := range d.s { + digest[i*4] = byte(s) + digest[i*4+1] = byte(s >> 8) + digest[i*4+2] = byte(s >> 16) + digest[i*4+3] = byte(s >> 24) + } + + return append(in, digest[:]...) +} diff --git a/vendor/golang.org/x/crypto/ripemd160/ripemd160_test.go b/vendor/golang.org/x/crypto/ripemd160/ripemd160_test.go new file mode 100644 index 0000000..5df1b25 --- /dev/null +++ b/vendor/golang.org/x/crypto/ripemd160/ripemd160_test.go @@ -0,0 +1,64 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ripemd160 + +// Test vectors are from: +// http://homes.esat.kuleuven.be/~bosselae/ripemd160.html + +import ( + "fmt" + "io" + "testing" +) + +type mdTest struct { + out string + in string +} + +var vectors = [...]mdTest{ + {"9c1185a5c5e9fc54612808977ee8f548b2258d31", ""}, + {"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe", "a"}, + {"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc", "abc"}, + {"5d0689ef49d2fae572b881b123a85ffa21595f36", "message digest"}, + {"f71c27109c692c1b56bbdceb5b9d2865b3708dbc", "abcdefghijklmnopqrstuvwxyz"}, + {"12a053384a9c0c88e405a06c27dcf49ada62eb2b", "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"}, + {"b0e20b6e3116640286ed3a87a5713079b21f5189", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"}, + {"9b752e45573d4b39f4dbd3323cab82bf63326bfb", "12345678901234567890123456789012345678901234567890123456789012345678901234567890"}, +} + +func TestVectors(t *testing.T) { + for i := 0; i < len(vectors); i++ { + tv := vectors[i] + md := New() + for j := 0; j < 3; j++ { + if j < 2 { + io.WriteString(md, tv.in) + } else { + io.WriteString(md, tv.in[0:len(tv.in)/2]) + md.Sum(nil) + io.WriteString(md, tv.in[len(tv.in)/2:]) + } + s := fmt.Sprintf("%x", md.Sum(nil)) + if s != tv.out { + t.Fatalf("RIPEMD-160[%d](%s) = %s, expected %s", j, tv.in, s, tv.out) + } + md.Reset() + } + } +} + +func TestMillionA(t *testing.T) { + md := New() + for i := 0; i < 100000; i++ { + io.WriteString(md, "aaaaaaaaaa") + } + out := "52783243c1697bdbe16d37f97f68f08325dc1528" + s := fmt.Sprintf("%x", md.Sum(nil)) + if s != out { + t.Fatalf("RIPEMD-160 (1 million 'a') = %s, expected %s", s, out) + } + md.Reset() +} diff --git a/vendor/golang.org/x/crypto/ripemd160/ripemd160block.go b/vendor/golang.org/x/crypto/ripemd160/ripemd160block.go new file mode 100644 index 0000000..7bc8e6c --- /dev/null +++ b/vendor/golang.org/x/crypto/ripemd160/ripemd160block.go @@ -0,0 +1,161 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// RIPEMD-160 block step. +// In its own file so that a faster assembly or C version +// can be substituted easily. + +package ripemd160 + +// work buffer indices and roll amounts for one line +var _n = [80]uint{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, + 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, + 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, + 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13, +} + +var _r = [80]uint{ + 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, + 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, + 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, + 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, + 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6, +} + +// same for the other parallel one +var n_ = [80]uint{ + 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, + 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, + 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, + 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, + 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11, +} + +var r_ = [80]uint{ + 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, + 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, + 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, + 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, + 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11, +} + +func _Block(md *digest, p []byte) int { + n := 0 + var x [16]uint32 + var alpha, beta uint32 + for len(p) >= BlockSize { + a, b, c, d, e := md.s[0], md.s[1], md.s[2], md.s[3], md.s[4] + aa, bb, cc, dd, ee := a, b, c, d, e + j := 0 + for i := 0; i < 16; i++ { + x[i] = uint32(p[j]) | uint32(p[j+1])<<8 | uint32(p[j+2])<<16 | uint32(p[j+3])<<24 + j += 4 + } + + // round 1 + i := 0 + for i < 16 { + alpha = a + (b ^ c ^ d) + x[_n[i]] + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb ^ (cc | ^dd)) + x[n_[i]] + 0x50a28be6 + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // round 2 + for i < 32 { + alpha = a + (b&c | ^b&d) + x[_n[i]] + 0x5a827999 + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb&dd | cc&^dd) + x[n_[i]] + 0x5c4dd124 + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // round 3 + for i < 48 { + alpha = a + (b | ^c ^ d) + x[_n[i]] + 0x6ed9eba1 + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb | ^cc ^ dd) + x[n_[i]] + 0x6d703ef3 + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // round 4 + for i < 64 { + alpha = a + (b&d | c&^d) + x[_n[i]] + 0x8f1bbcdc + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb&cc | ^bb&dd) + x[n_[i]] + 0x7a6d76e9 + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // round 5 + for i < 80 { + alpha = a + (b ^ (c | ^d)) + x[_n[i]] + 0xa953fd4e + s := _r[i] + alpha = (alpha<>(32-s)) + e + beta = c<<10 | c>>22 + a, b, c, d, e = e, alpha, b, beta, d + + // parallel line + alpha = aa + (bb ^ cc ^ dd) + x[n_[i]] + s = r_[i] + alpha = (alpha<>(32-s)) + ee + beta = cc<<10 | cc>>22 + aa, bb, cc, dd, ee = ee, alpha, bb, beta, dd + + i++ + } + + // combine results + dd += c + md.s[1] + md.s[1] = md.s[2] + d + ee + md.s[2] = md.s[3] + e + aa + md.s[3] = md.s[4] + a + bb + md.s[4] = md.s[0] + b + cc + md.s[0] = dd + + p = p[BlockSize:] + n += BlockSize + } + return n +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go new file mode 100644 index 0000000..4c96147 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go @@ -0,0 +1,144 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package salsa provides low-level access to functions in the Salsa family. +package salsa // import "golang.org/x/crypto/salsa20/salsa" + +// Sigma is the Salsa20 constant for 256-bit keys. +var Sigma = [16]byte{'e', 'x', 'p', 'a', 'n', 'd', ' ', '3', '2', '-', 'b', 'y', 't', 'e', ' ', 'k'} + +// HSalsa20 applies the HSalsa20 core function to a 16-byte input in, 32-byte +// key k, and 16-byte constant c, and puts the result into the 32-byte array +// out. +func HSalsa20(out *[32]byte, in *[16]byte, k *[32]byte, c *[16]byte) { + x0 := uint32(c[0]) | uint32(c[1])<<8 | uint32(c[2])<<16 | uint32(c[3])<<24 + x1 := uint32(k[0]) | uint32(k[1])<<8 | uint32(k[2])<<16 | uint32(k[3])<<24 + x2 := uint32(k[4]) | uint32(k[5])<<8 | uint32(k[6])<<16 | uint32(k[7])<<24 + x3 := uint32(k[8]) | uint32(k[9])<<8 | uint32(k[10])<<16 | uint32(k[11])<<24 + x4 := uint32(k[12]) | uint32(k[13])<<8 | uint32(k[14])<<16 | uint32(k[15])<<24 + x5 := uint32(c[4]) | uint32(c[5])<<8 | uint32(c[6])<<16 | uint32(c[7])<<24 + x6 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 + x7 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 + x8 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 + x9 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 + x10 := uint32(c[8]) | uint32(c[9])<<8 | uint32(c[10])<<16 | uint32(c[11])<<24 + x11 := uint32(k[16]) | uint32(k[17])<<8 | uint32(k[18])<<16 | uint32(k[19])<<24 + x12 := uint32(k[20]) | uint32(k[21])<<8 | uint32(k[22])<<16 | uint32(k[23])<<24 + x13 := uint32(k[24]) | uint32(k[25])<<8 | uint32(k[26])<<16 | uint32(k[27])<<24 + x14 := uint32(k[28]) | uint32(k[29])<<8 | uint32(k[30])<<16 | uint32(k[31])<<24 + x15 := uint32(c[12]) | uint32(c[13])<<8 | uint32(c[14])<<16 | uint32(c[15])<<24 + + for i := 0; i < 20; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + out[0] = byte(x0) + out[1] = byte(x0 >> 8) + out[2] = byte(x0 >> 16) + out[3] = byte(x0 >> 24) + + out[4] = byte(x5) + out[5] = byte(x5 >> 8) + out[6] = byte(x5 >> 16) + out[7] = byte(x5 >> 24) + + out[8] = byte(x10) + out[9] = byte(x10 >> 8) + out[10] = byte(x10 >> 16) + out[11] = byte(x10 >> 24) + + out[12] = byte(x15) + out[13] = byte(x15 >> 8) + out[14] = byte(x15 >> 16) + out[15] = byte(x15 >> 24) + + out[16] = byte(x6) + out[17] = byte(x6 >> 8) + out[18] = byte(x6 >> 16) + out[19] = byte(x6 >> 24) + + out[20] = byte(x7) + out[21] = byte(x7 >> 8) + out[22] = byte(x7 >> 16) + out[23] = byte(x7 >> 24) + + out[24] = byte(x8) + out[25] = byte(x8 >> 8) + out[26] = byte(x8 >> 16) + out[27] = byte(x8 >> 24) + + out[28] = byte(x9) + out[29] = byte(x9 >> 8) + out[30] = byte(x9 >> 16) + out[31] = byte(x9 >> 24) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa2020_amd64.s b/vendor/golang.org/x/crypto/salsa20/salsa/salsa2020_amd64.s new file mode 100644 index 0000000..22afbdc --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa2020_amd64.s @@ -0,0 +1,889 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!appengine,!gccgo + +// This code was translated into a form compatible with 6a from the public +// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html + +// func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte) +// This needs up to 64 bytes at 360(SP); hence the non-obvious frame size. +TEXT ·salsa2020XORKeyStream(SB),0,$456-40 // frame = 424 + 32 byte alignment + MOVQ out+0(FP),DI + MOVQ in+8(FP),SI + MOVQ n+16(FP),DX + MOVQ nonce+24(FP),CX + MOVQ key+32(FP),R8 + + MOVQ SP,R12 + MOVQ SP,R9 + ADDQ $31, R9 + ANDQ $~31, R9 + MOVQ R9, SP + + MOVQ DX,R9 + MOVQ CX,DX + MOVQ R8,R10 + CMPQ R9,$0 + JBE DONE + START: + MOVL 20(R10),CX + MOVL 0(R10),R8 + MOVL 0(DX),AX + MOVL 16(R10),R11 + MOVL CX,0(SP) + MOVL R8, 4 (SP) + MOVL AX, 8 (SP) + MOVL R11, 12 (SP) + MOVL 8(DX),CX + MOVL 24(R10),R8 + MOVL 4(R10),AX + MOVL 4(DX),R11 + MOVL CX,16(SP) + MOVL R8, 20 (SP) + MOVL AX, 24 (SP) + MOVL R11, 28 (SP) + MOVL 12(DX),CX + MOVL 12(R10),DX + MOVL 28(R10),R8 + MOVL 8(R10),AX + MOVL DX,32(SP) + MOVL CX, 36 (SP) + MOVL R8, 40 (SP) + MOVL AX, 44 (SP) + MOVQ $1634760805,DX + MOVQ $857760878,CX + MOVQ $2036477234,R8 + MOVQ $1797285236,AX + MOVL DX,48(SP) + MOVL CX, 52 (SP) + MOVL R8, 56 (SP) + MOVL AX, 60 (SP) + CMPQ R9,$256 + JB BYTESBETWEEN1AND255 + MOVOA 48(SP),X0 + PSHUFL $0X55,X0,X1 + PSHUFL $0XAA,X0,X2 + PSHUFL $0XFF,X0,X3 + PSHUFL $0X00,X0,X0 + MOVOA X1,64(SP) + MOVOA X2,80(SP) + MOVOA X3,96(SP) + MOVOA X0,112(SP) + MOVOA 0(SP),X0 + PSHUFL $0XAA,X0,X1 + PSHUFL $0XFF,X0,X2 + PSHUFL $0X00,X0,X3 + PSHUFL $0X55,X0,X0 + MOVOA X1,128(SP) + MOVOA X2,144(SP) + MOVOA X3,160(SP) + MOVOA X0,176(SP) + MOVOA 16(SP),X0 + PSHUFL $0XFF,X0,X1 + PSHUFL $0X55,X0,X2 + PSHUFL $0XAA,X0,X0 + MOVOA X1,192(SP) + MOVOA X2,208(SP) + MOVOA X0,224(SP) + MOVOA 32(SP),X0 + PSHUFL $0X00,X0,X1 + PSHUFL $0XAA,X0,X2 + PSHUFL $0XFF,X0,X0 + MOVOA X1,240(SP) + MOVOA X2,256(SP) + MOVOA X0,272(SP) + BYTESATLEAST256: + MOVL 16(SP),DX + MOVL 36 (SP),CX + MOVL DX,288(SP) + MOVL CX,304(SP) + ADDQ $1,DX + SHLQ $32,CX + ADDQ CX,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX, 292 (SP) + MOVL CX, 308 (SP) + ADDQ $1,DX + SHLQ $32,CX + ADDQ CX,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX, 296 (SP) + MOVL CX, 312 (SP) + ADDQ $1,DX + SHLQ $32,CX + ADDQ CX,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX, 300 (SP) + MOVL CX, 316 (SP) + ADDQ $1,DX + SHLQ $32,CX + ADDQ CX,DX + MOVQ DX,CX + SHRQ $32,CX + MOVL DX,16(SP) + MOVL CX, 36 (SP) + MOVQ R9,352(SP) + MOVQ $20,DX + MOVOA 64(SP),X0 + MOVOA 80(SP),X1 + MOVOA 96(SP),X2 + MOVOA 256(SP),X3 + MOVOA 272(SP),X4 + MOVOA 128(SP),X5 + MOVOA 144(SP),X6 + MOVOA 176(SP),X7 + MOVOA 192(SP),X8 + MOVOA 208(SP),X9 + MOVOA 224(SP),X10 + MOVOA 304(SP),X11 + MOVOA 112(SP),X12 + MOVOA 160(SP),X13 + MOVOA 240(SP),X14 + MOVOA 288(SP),X15 + MAINLOOP1: + MOVOA X1,320(SP) + MOVOA X2,336(SP) + MOVOA X13,X1 + PADDL X12,X1 + MOVOA X1,X2 + PSLLL $7,X1 + PXOR X1,X14 + PSRLL $25,X2 + PXOR X2,X14 + MOVOA X7,X1 + PADDL X0,X1 + MOVOA X1,X2 + PSLLL $7,X1 + PXOR X1,X11 + PSRLL $25,X2 + PXOR X2,X11 + MOVOA X12,X1 + PADDL X14,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X15 + PSRLL $23,X2 + PXOR X2,X15 + MOVOA X0,X1 + PADDL X11,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X9 + PSRLL $23,X2 + PXOR X2,X9 + MOVOA X14,X1 + PADDL X15,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X13 + PSRLL $19,X2 + PXOR X2,X13 + MOVOA X11,X1 + PADDL X9,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X7 + PSRLL $19,X2 + PXOR X2,X7 + MOVOA X15,X1 + PADDL X13,X1 + MOVOA X1,X2 + PSLLL $18,X1 + PXOR X1,X12 + PSRLL $14,X2 + PXOR X2,X12 + MOVOA 320(SP),X1 + MOVOA X12,320(SP) + MOVOA X9,X2 + PADDL X7,X2 + MOVOA X2,X12 + PSLLL $18,X2 + PXOR X2,X0 + PSRLL $14,X12 + PXOR X12,X0 + MOVOA X5,X2 + PADDL X1,X2 + MOVOA X2,X12 + PSLLL $7,X2 + PXOR X2,X3 + PSRLL $25,X12 + PXOR X12,X3 + MOVOA 336(SP),X2 + MOVOA X0,336(SP) + MOVOA X6,X0 + PADDL X2,X0 + MOVOA X0,X12 + PSLLL $7,X0 + PXOR X0,X4 + PSRLL $25,X12 + PXOR X12,X4 + MOVOA X1,X0 + PADDL X3,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X10 + PSRLL $23,X12 + PXOR X12,X10 + MOVOA X2,X0 + PADDL X4,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X8 + PSRLL $23,X12 + PXOR X12,X8 + MOVOA X3,X0 + PADDL X10,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X5 + PSRLL $19,X12 + PXOR X12,X5 + MOVOA X4,X0 + PADDL X8,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X6 + PSRLL $19,X12 + PXOR X12,X6 + MOVOA X10,X0 + PADDL X5,X0 + MOVOA X0,X12 + PSLLL $18,X0 + PXOR X0,X1 + PSRLL $14,X12 + PXOR X12,X1 + MOVOA 320(SP),X0 + MOVOA X1,320(SP) + MOVOA X4,X1 + PADDL X0,X1 + MOVOA X1,X12 + PSLLL $7,X1 + PXOR X1,X7 + PSRLL $25,X12 + PXOR X12,X7 + MOVOA X8,X1 + PADDL X6,X1 + MOVOA X1,X12 + PSLLL $18,X1 + PXOR X1,X2 + PSRLL $14,X12 + PXOR X12,X2 + MOVOA 336(SP),X12 + MOVOA X2,336(SP) + MOVOA X14,X1 + PADDL X12,X1 + MOVOA X1,X2 + PSLLL $7,X1 + PXOR X1,X5 + PSRLL $25,X2 + PXOR X2,X5 + MOVOA X0,X1 + PADDL X7,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X10 + PSRLL $23,X2 + PXOR X2,X10 + MOVOA X12,X1 + PADDL X5,X1 + MOVOA X1,X2 + PSLLL $9,X1 + PXOR X1,X8 + PSRLL $23,X2 + PXOR X2,X8 + MOVOA X7,X1 + PADDL X10,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X4 + PSRLL $19,X2 + PXOR X2,X4 + MOVOA X5,X1 + PADDL X8,X1 + MOVOA X1,X2 + PSLLL $13,X1 + PXOR X1,X14 + PSRLL $19,X2 + PXOR X2,X14 + MOVOA X10,X1 + PADDL X4,X1 + MOVOA X1,X2 + PSLLL $18,X1 + PXOR X1,X0 + PSRLL $14,X2 + PXOR X2,X0 + MOVOA 320(SP),X1 + MOVOA X0,320(SP) + MOVOA X8,X0 + PADDL X14,X0 + MOVOA X0,X2 + PSLLL $18,X0 + PXOR X0,X12 + PSRLL $14,X2 + PXOR X2,X12 + MOVOA X11,X0 + PADDL X1,X0 + MOVOA X0,X2 + PSLLL $7,X0 + PXOR X0,X6 + PSRLL $25,X2 + PXOR X2,X6 + MOVOA 336(SP),X2 + MOVOA X12,336(SP) + MOVOA X3,X0 + PADDL X2,X0 + MOVOA X0,X12 + PSLLL $7,X0 + PXOR X0,X13 + PSRLL $25,X12 + PXOR X12,X13 + MOVOA X1,X0 + PADDL X6,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X15 + PSRLL $23,X12 + PXOR X12,X15 + MOVOA X2,X0 + PADDL X13,X0 + MOVOA X0,X12 + PSLLL $9,X0 + PXOR X0,X9 + PSRLL $23,X12 + PXOR X12,X9 + MOVOA X6,X0 + PADDL X15,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X11 + PSRLL $19,X12 + PXOR X12,X11 + MOVOA X13,X0 + PADDL X9,X0 + MOVOA X0,X12 + PSLLL $13,X0 + PXOR X0,X3 + PSRLL $19,X12 + PXOR X12,X3 + MOVOA X15,X0 + PADDL X11,X0 + MOVOA X0,X12 + PSLLL $18,X0 + PXOR X0,X1 + PSRLL $14,X12 + PXOR X12,X1 + MOVOA X9,X0 + PADDL X3,X0 + MOVOA X0,X12 + PSLLL $18,X0 + PXOR X0,X2 + PSRLL $14,X12 + PXOR X12,X2 + MOVOA 320(SP),X12 + MOVOA 336(SP),X0 + SUBQ $2,DX + JA MAINLOOP1 + PADDL 112(SP),X12 + PADDL 176(SP),X7 + PADDL 224(SP),X10 + PADDL 272(SP),X4 + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + PSHUFL $0X39,X12,X12 + PSHUFL $0X39,X7,X7 + PSHUFL $0X39,X10,X10 + PSHUFL $0X39,X4,X4 + XORL 0(SI),DX + XORL 4(SI),CX + XORL 8(SI),R8 + XORL 12(SI),R9 + MOVL DX,0(DI) + MOVL CX,4(DI) + MOVL R8,8(DI) + MOVL R9,12(DI) + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + PSHUFL $0X39,X12,X12 + PSHUFL $0X39,X7,X7 + PSHUFL $0X39,X10,X10 + PSHUFL $0X39,X4,X4 + XORL 64(SI),DX + XORL 68(SI),CX + XORL 72(SI),R8 + XORL 76(SI),R9 + MOVL DX,64(DI) + MOVL CX,68(DI) + MOVL R8,72(DI) + MOVL R9,76(DI) + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + PSHUFL $0X39,X12,X12 + PSHUFL $0X39,X7,X7 + PSHUFL $0X39,X10,X10 + PSHUFL $0X39,X4,X4 + XORL 128(SI),DX + XORL 132(SI),CX + XORL 136(SI),R8 + XORL 140(SI),R9 + MOVL DX,128(DI) + MOVL CX,132(DI) + MOVL R8,136(DI) + MOVL R9,140(DI) + MOVD X12,DX + MOVD X7,CX + MOVD X10,R8 + MOVD X4,R9 + XORL 192(SI),DX + XORL 196(SI),CX + XORL 200(SI),R8 + XORL 204(SI),R9 + MOVL DX,192(DI) + MOVL CX,196(DI) + MOVL R8,200(DI) + MOVL R9,204(DI) + PADDL 240(SP),X14 + PADDL 64(SP),X0 + PADDL 128(SP),X5 + PADDL 192(SP),X8 + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + PSHUFL $0X39,X14,X14 + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X5,X5 + PSHUFL $0X39,X8,X8 + XORL 16(SI),DX + XORL 20(SI),CX + XORL 24(SI),R8 + XORL 28(SI),R9 + MOVL DX,16(DI) + MOVL CX,20(DI) + MOVL R8,24(DI) + MOVL R9,28(DI) + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + PSHUFL $0X39,X14,X14 + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X5,X5 + PSHUFL $0X39,X8,X8 + XORL 80(SI),DX + XORL 84(SI),CX + XORL 88(SI),R8 + XORL 92(SI),R9 + MOVL DX,80(DI) + MOVL CX,84(DI) + MOVL R8,88(DI) + MOVL R9,92(DI) + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + PSHUFL $0X39,X14,X14 + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X5,X5 + PSHUFL $0X39,X8,X8 + XORL 144(SI),DX + XORL 148(SI),CX + XORL 152(SI),R8 + XORL 156(SI),R9 + MOVL DX,144(DI) + MOVL CX,148(DI) + MOVL R8,152(DI) + MOVL R9,156(DI) + MOVD X14,DX + MOVD X0,CX + MOVD X5,R8 + MOVD X8,R9 + XORL 208(SI),DX + XORL 212(SI),CX + XORL 216(SI),R8 + XORL 220(SI),R9 + MOVL DX,208(DI) + MOVL CX,212(DI) + MOVL R8,216(DI) + MOVL R9,220(DI) + PADDL 288(SP),X15 + PADDL 304(SP),X11 + PADDL 80(SP),X1 + PADDL 144(SP),X6 + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + PSHUFL $0X39,X15,X15 + PSHUFL $0X39,X11,X11 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X6,X6 + XORL 32(SI),DX + XORL 36(SI),CX + XORL 40(SI),R8 + XORL 44(SI),R9 + MOVL DX,32(DI) + MOVL CX,36(DI) + MOVL R8,40(DI) + MOVL R9,44(DI) + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + PSHUFL $0X39,X15,X15 + PSHUFL $0X39,X11,X11 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X6,X6 + XORL 96(SI),DX + XORL 100(SI),CX + XORL 104(SI),R8 + XORL 108(SI),R9 + MOVL DX,96(DI) + MOVL CX,100(DI) + MOVL R8,104(DI) + MOVL R9,108(DI) + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + PSHUFL $0X39,X15,X15 + PSHUFL $0X39,X11,X11 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X6,X6 + XORL 160(SI),DX + XORL 164(SI),CX + XORL 168(SI),R8 + XORL 172(SI),R9 + MOVL DX,160(DI) + MOVL CX,164(DI) + MOVL R8,168(DI) + MOVL R9,172(DI) + MOVD X15,DX + MOVD X11,CX + MOVD X1,R8 + MOVD X6,R9 + XORL 224(SI),DX + XORL 228(SI),CX + XORL 232(SI),R8 + XORL 236(SI),R9 + MOVL DX,224(DI) + MOVL CX,228(DI) + MOVL R8,232(DI) + MOVL R9,236(DI) + PADDL 160(SP),X13 + PADDL 208(SP),X9 + PADDL 256(SP),X3 + PADDL 96(SP),X2 + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + PSHUFL $0X39,X13,X13 + PSHUFL $0X39,X9,X9 + PSHUFL $0X39,X3,X3 + PSHUFL $0X39,X2,X2 + XORL 48(SI),DX + XORL 52(SI),CX + XORL 56(SI),R8 + XORL 60(SI),R9 + MOVL DX,48(DI) + MOVL CX,52(DI) + MOVL R8,56(DI) + MOVL R9,60(DI) + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + PSHUFL $0X39,X13,X13 + PSHUFL $0X39,X9,X9 + PSHUFL $0X39,X3,X3 + PSHUFL $0X39,X2,X2 + XORL 112(SI),DX + XORL 116(SI),CX + XORL 120(SI),R8 + XORL 124(SI),R9 + MOVL DX,112(DI) + MOVL CX,116(DI) + MOVL R8,120(DI) + MOVL R9,124(DI) + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + PSHUFL $0X39,X13,X13 + PSHUFL $0X39,X9,X9 + PSHUFL $0X39,X3,X3 + PSHUFL $0X39,X2,X2 + XORL 176(SI),DX + XORL 180(SI),CX + XORL 184(SI),R8 + XORL 188(SI),R9 + MOVL DX,176(DI) + MOVL CX,180(DI) + MOVL R8,184(DI) + MOVL R9,188(DI) + MOVD X13,DX + MOVD X9,CX + MOVD X3,R8 + MOVD X2,R9 + XORL 240(SI),DX + XORL 244(SI),CX + XORL 248(SI),R8 + XORL 252(SI),R9 + MOVL DX,240(DI) + MOVL CX,244(DI) + MOVL R8,248(DI) + MOVL R9,252(DI) + MOVQ 352(SP),R9 + SUBQ $256,R9 + ADDQ $256,SI + ADDQ $256,DI + CMPQ R9,$256 + JAE BYTESATLEAST256 + CMPQ R9,$0 + JBE DONE + BYTESBETWEEN1AND255: + CMPQ R9,$64 + JAE NOCOPY + MOVQ DI,DX + LEAQ 360(SP),DI + MOVQ R9,CX + REP; MOVSB + LEAQ 360(SP),DI + LEAQ 360(SP),SI + NOCOPY: + MOVQ R9,352(SP) + MOVOA 48(SP),X0 + MOVOA 0(SP),X1 + MOVOA 16(SP),X2 + MOVOA 32(SP),X3 + MOVOA X1,X4 + MOVQ $20,CX + MAINLOOP2: + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X3 + PXOR X6,X3 + PADDL X3,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X3,X3 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X1 + PSHUFL $0X4E,X2,X2 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X1,X1 + PXOR X6,X0 + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X1 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X1,X1 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X3 + PSHUFL $0X4E,X2,X2 + PXOR X6,X3 + PADDL X3,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X3,X3 + PXOR X6,X0 + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X3 + PXOR X6,X3 + PADDL X3,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X3,X3 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X1 + PSHUFL $0X4E,X2,X2 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X3,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X1,X1 + PXOR X6,X0 + PADDL X0,X4 + MOVOA X0,X5 + MOVOA X4,X6 + PSLLL $7,X4 + PSRLL $25,X6 + PXOR X4,X1 + PXOR X6,X1 + PADDL X1,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $9,X5 + PSRLL $23,X6 + PXOR X5,X2 + PSHUFL $0X93,X1,X1 + PXOR X6,X2 + PADDL X2,X4 + MOVOA X2,X5 + MOVOA X4,X6 + PSLLL $13,X4 + PSRLL $19,X6 + PXOR X4,X3 + PSHUFL $0X4E,X2,X2 + PXOR X6,X3 + SUBQ $4,CX + PADDL X3,X5 + MOVOA X1,X4 + MOVOA X5,X6 + PSLLL $18,X5 + PXOR X7,X7 + PSRLL $14,X6 + PXOR X5,X0 + PSHUFL $0X39,X3,X3 + PXOR X6,X0 + JA MAINLOOP2 + PADDL 48(SP),X0 + PADDL 0(SP),X1 + PADDL 16(SP),X2 + PADDL 32(SP),X3 + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X2,X2 + PSHUFL $0X39,X3,X3 + XORL 0(SI),CX + XORL 48(SI),R8 + XORL 32(SI),R9 + XORL 16(SI),AX + MOVL CX,0(DI) + MOVL R8,48(DI) + MOVL R9,32(DI) + MOVL AX,16(DI) + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X2,X2 + PSHUFL $0X39,X3,X3 + XORL 20(SI),CX + XORL 4(SI),R8 + XORL 52(SI),R9 + XORL 36(SI),AX + MOVL CX,20(DI) + MOVL R8,4(DI) + MOVL R9,52(DI) + MOVL AX,36(DI) + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + PSHUFL $0X39,X0,X0 + PSHUFL $0X39,X1,X1 + PSHUFL $0X39,X2,X2 + PSHUFL $0X39,X3,X3 + XORL 40(SI),CX + XORL 24(SI),R8 + XORL 8(SI),R9 + XORL 56(SI),AX + MOVL CX,40(DI) + MOVL R8,24(DI) + MOVL R9,8(DI) + MOVL AX,56(DI) + MOVD X0,CX + MOVD X1,R8 + MOVD X2,R9 + MOVD X3,AX + XORL 60(SI),CX + XORL 44(SI),R8 + XORL 28(SI),R9 + XORL 12(SI),AX + MOVL CX,60(DI) + MOVL R8,44(DI) + MOVL R9,28(DI) + MOVL AX,12(DI) + MOVQ 352(SP),R9 + MOVL 16(SP),CX + MOVL 36 (SP),R8 + ADDQ $1,CX + SHLQ $32,R8 + ADDQ R8,CX + MOVQ CX,R8 + SHRQ $32,R8 + MOVL CX,16(SP) + MOVL R8, 36 (SP) + CMPQ R9,$64 + JA BYTESATLEAST65 + JAE BYTESATLEAST64 + MOVQ DI,SI + MOVQ DX,DI + MOVQ R9,CX + REP; MOVSB + BYTESATLEAST64: + DONE: + MOVQ R12,SP + RET + BYTESATLEAST65: + SUBQ $64,R9 + ADDQ $64,DI + ADDQ $64,SI + JMP BYTESBETWEEN1AND255 diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go new file mode 100644 index 0000000..9bfc092 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa208.go @@ -0,0 +1,199 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package salsa + +// Core208 applies the Salsa20/8 core function to the 64-byte array in and puts +// the result into the 64-byte array out. The input and output may be the same array. +func Core208(out *[64]byte, in *[64]byte) { + j0 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 + j1 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 + j2 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 + j3 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 + j4 := uint32(in[16]) | uint32(in[17])<<8 | uint32(in[18])<<16 | uint32(in[19])<<24 + j5 := uint32(in[20]) | uint32(in[21])<<8 | uint32(in[22])<<16 | uint32(in[23])<<24 + j6 := uint32(in[24]) | uint32(in[25])<<8 | uint32(in[26])<<16 | uint32(in[27])<<24 + j7 := uint32(in[28]) | uint32(in[29])<<8 | uint32(in[30])<<16 | uint32(in[31])<<24 + j8 := uint32(in[32]) | uint32(in[33])<<8 | uint32(in[34])<<16 | uint32(in[35])<<24 + j9 := uint32(in[36]) | uint32(in[37])<<8 | uint32(in[38])<<16 | uint32(in[39])<<24 + j10 := uint32(in[40]) | uint32(in[41])<<8 | uint32(in[42])<<16 | uint32(in[43])<<24 + j11 := uint32(in[44]) | uint32(in[45])<<8 | uint32(in[46])<<16 | uint32(in[47])<<24 + j12 := uint32(in[48]) | uint32(in[49])<<8 | uint32(in[50])<<16 | uint32(in[51])<<24 + j13 := uint32(in[52]) | uint32(in[53])<<8 | uint32(in[54])<<16 | uint32(in[55])<<24 + j14 := uint32(in[56]) | uint32(in[57])<<8 | uint32(in[58])<<16 | uint32(in[59])<<24 + j15 := uint32(in[60]) | uint32(in[61])<<8 | uint32(in[62])<<16 | uint32(in[63])<<24 + + x0, x1, x2, x3, x4, x5, x6, x7, x8 := j0, j1, j2, j3, j4, j5, j6, j7, j8 + x9, x10, x11, x12, x13, x14, x15 := j9, j10, j11, j12, j13, j14, j15 + + for i := 0; i < 8; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + x0 += j0 + x1 += j1 + x2 += j2 + x3 += j3 + x4 += j4 + x5 += j5 + x6 += j6 + x7 += j7 + x8 += j8 + x9 += j9 + x10 += j10 + x11 += j11 + x12 += j12 + x13 += j13 + x14 += j14 + x15 += j15 + + out[0] = byte(x0) + out[1] = byte(x0 >> 8) + out[2] = byte(x0 >> 16) + out[3] = byte(x0 >> 24) + + out[4] = byte(x1) + out[5] = byte(x1 >> 8) + out[6] = byte(x1 >> 16) + out[7] = byte(x1 >> 24) + + out[8] = byte(x2) + out[9] = byte(x2 >> 8) + out[10] = byte(x2 >> 16) + out[11] = byte(x2 >> 24) + + out[12] = byte(x3) + out[13] = byte(x3 >> 8) + out[14] = byte(x3 >> 16) + out[15] = byte(x3 >> 24) + + out[16] = byte(x4) + out[17] = byte(x4 >> 8) + out[18] = byte(x4 >> 16) + out[19] = byte(x4 >> 24) + + out[20] = byte(x5) + out[21] = byte(x5 >> 8) + out[22] = byte(x5 >> 16) + out[23] = byte(x5 >> 24) + + out[24] = byte(x6) + out[25] = byte(x6 >> 8) + out[26] = byte(x6 >> 16) + out[27] = byte(x6 >> 24) + + out[28] = byte(x7) + out[29] = byte(x7 >> 8) + out[30] = byte(x7 >> 16) + out[31] = byte(x7 >> 24) + + out[32] = byte(x8) + out[33] = byte(x8 >> 8) + out[34] = byte(x8 >> 16) + out[35] = byte(x8 >> 24) + + out[36] = byte(x9) + out[37] = byte(x9 >> 8) + out[38] = byte(x9 >> 16) + out[39] = byte(x9 >> 24) + + out[40] = byte(x10) + out[41] = byte(x10 >> 8) + out[42] = byte(x10 >> 16) + out[43] = byte(x10 >> 24) + + out[44] = byte(x11) + out[45] = byte(x11 >> 8) + out[46] = byte(x11 >> 16) + out[47] = byte(x11 >> 24) + + out[48] = byte(x12) + out[49] = byte(x12 >> 8) + out[50] = byte(x12 >> 16) + out[51] = byte(x12 >> 24) + + out[52] = byte(x13) + out[53] = byte(x13 >> 8) + out[54] = byte(x13 >> 16) + out[55] = byte(x13 >> 24) + + out[56] = byte(x14) + out[57] = byte(x14 >> 8) + out[58] = byte(x14 >> 16) + out[59] = byte(x14 >> 24) + + out[60] = byte(x15) + out[61] = byte(x15 >> 8) + out[62] = byte(x15 >> 16) + out[63] = byte(x15 >> 24) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go new file mode 100644 index 0000000..f9269c3 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.go @@ -0,0 +1,24 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!appengine,!gccgo + +package salsa + +// This function is implemented in salsa2020_amd64.s. + +//go:noescape + +func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte) + +// XORKeyStream crypts bytes from in to out using the given key and counters. +// In and out must overlap entirely or not at all. Counter +// contains the raw salsa20 counter bytes (both nonce and block counter). +func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { + if len(in) == 0 { + return + } + _ = out[len(in)-1] + salsa2020XORKeyStream(&out[0], &in[0], uint64(len(in)), &counter[0], &key[0]) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go new file mode 100644 index 0000000..22126d1 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_ref.go @@ -0,0 +1,234 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64 appengine gccgo + +package salsa + +const rounds = 20 + +// core applies the Salsa20 core function to 16-byte input in, 32-byte key k, +// and 16-byte constant c, and puts the result into 64-byte array out. +func core(out *[64]byte, in *[16]byte, k *[32]byte, c *[16]byte) { + j0 := uint32(c[0]) | uint32(c[1])<<8 | uint32(c[2])<<16 | uint32(c[3])<<24 + j1 := uint32(k[0]) | uint32(k[1])<<8 | uint32(k[2])<<16 | uint32(k[3])<<24 + j2 := uint32(k[4]) | uint32(k[5])<<8 | uint32(k[6])<<16 | uint32(k[7])<<24 + j3 := uint32(k[8]) | uint32(k[9])<<8 | uint32(k[10])<<16 | uint32(k[11])<<24 + j4 := uint32(k[12]) | uint32(k[13])<<8 | uint32(k[14])<<16 | uint32(k[15])<<24 + j5 := uint32(c[4]) | uint32(c[5])<<8 | uint32(c[6])<<16 | uint32(c[7])<<24 + j6 := uint32(in[0]) | uint32(in[1])<<8 | uint32(in[2])<<16 | uint32(in[3])<<24 + j7 := uint32(in[4]) | uint32(in[5])<<8 | uint32(in[6])<<16 | uint32(in[7])<<24 + j8 := uint32(in[8]) | uint32(in[9])<<8 | uint32(in[10])<<16 | uint32(in[11])<<24 + j9 := uint32(in[12]) | uint32(in[13])<<8 | uint32(in[14])<<16 | uint32(in[15])<<24 + j10 := uint32(c[8]) | uint32(c[9])<<8 | uint32(c[10])<<16 | uint32(c[11])<<24 + j11 := uint32(k[16]) | uint32(k[17])<<8 | uint32(k[18])<<16 | uint32(k[19])<<24 + j12 := uint32(k[20]) | uint32(k[21])<<8 | uint32(k[22])<<16 | uint32(k[23])<<24 + j13 := uint32(k[24]) | uint32(k[25])<<8 | uint32(k[26])<<16 | uint32(k[27])<<24 + j14 := uint32(k[28]) | uint32(k[29])<<8 | uint32(k[30])<<16 | uint32(k[31])<<24 + j15 := uint32(c[12]) | uint32(c[13])<<8 | uint32(c[14])<<16 | uint32(c[15])<<24 + + x0, x1, x2, x3, x4, x5, x6, x7, x8 := j0, j1, j2, j3, j4, j5, j6, j7, j8 + x9, x10, x11, x12, x13, x14, x15 := j9, j10, j11, j12, j13, j14, j15 + + for i := 0; i < rounds; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + x0 += j0 + x1 += j1 + x2 += j2 + x3 += j3 + x4 += j4 + x5 += j5 + x6 += j6 + x7 += j7 + x8 += j8 + x9 += j9 + x10 += j10 + x11 += j11 + x12 += j12 + x13 += j13 + x14 += j14 + x15 += j15 + + out[0] = byte(x0) + out[1] = byte(x0 >> 8) + out[2] = byte(x0 >> 16) + out[3] = byte(x0 >> 24) + + out[4] = byte(x1) + out[5] = byte(x1 >> 8) + out[6] = byte(x1 >> 16) + out[7] = byte(x1 >> 24) + + out[8] = byte(x2) + out[9] = byte(x2 >> 8) + out[10] = byte(x2 >> 16) + out[11] = byte(x2 >> 24) + + out[12] = byte(x3) + out[13] = byte(x3 >> 8) + out[14] = byte(x3 >> 16) + out[15] = byte(x3 >> 24) + + out[16] = byte(x4) + out[17] = byte(x4 >> 8) + out[18] = byte(x4 >> 16) + out[19] = byte(x4 >> 24) + + out[20] = byte(x5) + out[21] = byte(x5 >> 8) + out[22] = byte(x5 >> 16) + out[23] = byte(x5 >> 24) + + out[24] = byte(x6) + out[25] = byte(x6 >> 8) + out[26] = byte(x6 >> 16) + out[27] = byte(x6 >> 24) + + out[28] = byte(x7) + out[29] = byte(x7 >> 8) + out[30] = byte(x7 >> 16) + out[31] = byte(x7 >> 24) + + out[32] = byte(x8) + out[33] = byte(x8 >> 8) + out[34] = byte(x8 >> 16) + out[35] = byte(x8 >> 24) + + out[36] = byte(x9) + out[37] = byte(x9 >> 8) + out[38] = byte(x9 >> 16) + out[39] = byte(x9 >> 24) + + out[40] = byte(x10) + out[41] = byte(x10 >> 8) + out[42] = byte(x10 >> 16) + out[43] = byte(x10 >> 24) + + out[44] = byte(x11) + out[45] = byte(x11 >> 8) + out[46] = byte(x11 >> 16) + out[47] = byte(x11 >> 24) + + out[48] = byte(x12) + out[49] = byte(x12 >> 8) + out[50] = byte(x12 >> 16) + out[51] = byte(x12 >> 24) + + out[52] = byte(x13) + out[53] = byte(x13 >> 8) + out[54] = byte(x13 >> 16) + out[55] = byte(x13 >> 24) + + out[56] = byte(x14) + out[57] = byte(x14 >> 8) + out[58] = byte(x14 >> 16) + out[59] = byte(x14 >> 24) + + out[60] = byte(x15) + out[61] = byte(x15 >> 8) + out[62] = byte(x15 >> 16) + out[63] = byte(x15 >> 24) +} + +// XORKeyStream crypts bytes from in to out using the given key and counters. +// In and out must overlap entirely or not at all. Counter +// contains the raw salsa20 counter bytes (both nonce and block counter). +func XORKeyStream(out, in []byte, counter *[16]byte, key *[32]byte) { + var block [64]byte + var counterCopy [16]byte + copy(counterCopy[:], counter[:]) + + for len(in) >= 64 { + core(&block, &counterCopy, key, &Sigma) + for i, x := range block { + out[i] = in[i] ^ x + } + u := uint32(1) + for i := 8; i < 16; i++ { + u += uint32(counterCopy[i]) + counterCopy[i] = byte(u) + u >>= 8 + } + in = in[64:] + out = out[64:] + } + + if len(in) > 0 { + core(&block, &counterCopy, key, &Sigma) + for i, v := range in { + out[i] = v ^ block[i] + } + } +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa_test.go b/vendor/golang.org/x/crypto/salsa20/salsa/salsa_test.go new file mode 100644 index 0000000..f67e94e --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa_test.go @@ -0,0 +1,54 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package salsa + +import "testing" + +func TestCore208(t *testing.T) { + in := [64]byte{ + 0x7e, 0x87, 0x9a, 0x21, 0x4f, 0x3e, 0xc9, 0x86, + 0x7c, 0xa9, 0x40, 0xe6, 0x41, 0x71, 0x8f, 0x26, + 0xba, 0xee, 0x55, 0x5b, 0x8c, 0x61, 0xc1, 0xb5, + 0x0d, 0xf8, 0x46, 0x11, 0x6d, 0xcd, 0x3b, 0x1d, + 0xee, 0x24, 0xf3, 0x19, 0xdf, 0x9b, 0x3d, 0x85, + 0x14, 0x12, 0x1e, 0x4b, 0x5a, 0xc5, 0xaa, 0x32, + 0x76, 0x02, 0x1d, 0x29, 0x09, 0xc7, 0x48, 0x29, + 0xed, 0xeb, 0xc6, 0x8d, 0xb8, 0xb8, 0xc2, 0x5e} + + out := [64]byte{ + 0xa4, 0x1f, 0x85, 0x9c, 0x66, 0x08, 0xcc, 0x99, + 0x3b, 0x81, 0xca, 0xcb, 0x02, 0x0c, 0xef, 0x05, + 0x04, 0x4b, 0x21, 0x81, 0xa2, 0xfd, 0x33, 0x7d, + 0xfd, 0x7b, 0x1c, 0x63, 0x96, 0x68, 0x2f, 0x29, + 0xb4, 0x39, 0x31, 0x68, 0xe3, 0xc9, 0xe6, 0xbc, + 0xfe, 0x6b, 0xc5, 0xb7, 0xa0, 0x6d, 0x96, 0xba, + 0xe4, 0x24, 0xcc, 0x10, 0x2c, 0x91, 0x74, 0x5c, + 0x24, 0xad, 0x67, 0x3d, 0xc7, 0x61, 0x8f, 0x81, + } + + Core208(&in, &in) + if in != out { + t.Errorf("expected %x, got %x", out, in) + } +} + +func TestOutOfBoundsWrite(t *testing.T) { + // encrypted "0123456789" + cipherText := []byte{170, 166, 196, 104, 175, 121, 68, 44, 174, 51} + var counter [16]byte + var key [32]byte + want := "abcdefghij" + plainText := []byte(want) + defer func() { + err := recover() + if err == nil { + t.Error("XORKeyStream expected to panic on len(dst) < len(src), but didn't") + } + if plainText[3] == '3' { + t.Errorf("XORKeyStream did out of bounds write, want %v, got %v", want, string(plainText)) + } + }() + XORKeyStream(plainText[:3], cipherText, &counter, &key) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa20.go new file mode 100644 index 0000000..0ee6248 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa20.go @@ -0,0 +1,54 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package salsa20 implements the Salsa20 stream cipher as specified in https://cr.yp.to/snuffle/spec.pdf. + +Salsa20 differs from many other stream ciphers in that it is message orientated +rather than byte orientated. Keystream blocks are not preserved between calls, +therefore each side must encrypt/decrypt data with the same segmentation. + +Another aspect of this difference is that part of the counter is exposed as +a nonce in each call. Encrypting two different messages with the same (key, +nonce) pair leads to trivial plaintext recovery. This is analogous to +encrypting two different messages with the same key with a traditional stream +cipher. + +This package also implements XSalsa20: a version of Salsa20 with a 24-byte +nonce as specified in https://cr.yp.to/snuffle/xsalsa-20081128.pdf. Simply +passing a 24-byte slice as the nonce triggers XSalsa20. +*/ +package salsa20 // import "golang.org/x/crypto/salsa20" + +// TODO(agl): implement XORKeyStream12 and XORKeyStream8 - the reduced round variants of Salsa20. + +import ( + "golang.org/x/crypto/salsa20/salsa" +) + +// XORKeyStream crypts bytes from in to out using the given key and nonce. +// In and out must overlap entirely or not at all. Nonce must +// be either 8 or 24 bytes long. +func XORKeyStream(out, in []byte, nonce []byte, key *[32]byte) { + if len(out) < len(in) { + in = in[:len(out)] + } + + var subNonce [16]byte + + if len(nonce) == 24 { + var subKey [32]byte + var hNonce [16]byte + copy(hNonce[:], nonce[:16]) + salsa.HSalsa20(&subKey, &hNonce, key, &salsa.Sigma) + copy(subNonce[:], nonce[16:]) + key = &subKey + } else if len(nonce) == 8 { + copy(subNonce[:], nonce[:]) + } else { + panic("salsa20: nonce must be 8 or 24 bytes") + } + + salsa.XORKeyStream(out, in, &subNonce, key) +} diff --git a/vendor/golang.org/x/crypto/salsa20/salsa20_test.go b/vendor/golang.org/x/crypto/salsa20/salsa20_test.go new file mode 100644 index 0000000..0ef3328 --- /dev/null +++ b/vendor/golang.org/x/crypto/salsa20/salsa20_test.go @@ -0,0 +1,139 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package salsa20 + +import ( + "bytes" + "encoding/hex" + "testing" +) + +func fromHex(s string) []byte { + ret, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return ret +} + +// testVectors was taken from set 6 of the ECRYPT test vectors: +// http://www.ecrypt.eu.org/stream/svn/viewcvs.cgi/ecrypt/trunk/submissions/salsa20/full/verified.test-vectors?logsort=rev&rev=210&view=markup +var testVectors = []struct { + key []byte + iv []byte + numBytes int + xor []byte +}{ + { + fromHex("0053A6F94C9FF24598EB3E91E4378ADD3083D6297CCF2275C81B6EC11467BA0D"), + fromHex("0D74DB42A91077DE"), + 131072, + fromHex("C349B6A51A3EC9B712EAED3F90D8BCEE69B7628645F251A996F55260C62EF31FD6C6B0AEA94E136C9D984AD2DF3578F78E457527B03A0450580DD874F63B1AB9"), + }, + { + fromHex("0558ABFE51A4F74A9DF04396E93C8FE23588DB2E81D4277ACD2073C6196CBF12"), + fromHex("167DE44BB21980E7"), + 131072, + fromHex("C3EAAF32836BACE32D04E1124231EF47E101367D6305413A0EEB07C60698A2876E4D031870A739D6FFDDD208597AFF0A47AC17EDB0167DD67EBA84F1883D4DFD"), + }, + { + fromHex("0A5DB00356A9FC4FA2F5489BEE4194E73A8DE03386D92C7FD22578CB1E71C417"), + fromHex("1F86ED54BB2289F0"), + 131072, + fromHex("3CD23C3DC90201ACC0CF49B440B6C417F0DC8D8410A716D5314C059E14B1A8D9A9FB8EA3D9C8DAE12B21402F674AA95C67B1FC514E994C9D3F3A6E41DFF5BBA6"), + }, + { + fromHex("0F62B5085BAE0154A7FA4DA0F34699EC3F92E5388BDE3184D72A7DD02376C91C"), + fromHex("288FF65DC42B92F9"), + 131072, + fromHex("E00EBCCD70D69152725F9987982178A2E2E139C7BCBE04CA8A0E99E318D9AB76F988C8549F75ADD790BA4F81C176DA653C1A043F11A958E169B6D2319F4EEC1A"), + }, +} + +func TestSalsa20(t *testing.T) { + var inBuf, outBuf []byte + var key [32]byte + + for i, test := range testVectors { + if test.numBytes%64 != 0 { + t.Errorf("#%d: numBytes is not a multiple of 64", i) + continue + } + + if test.numBytes > len(inBuf) { + inBuf = make([]byte, test.numBytes) + outBuf = make([]byte, test.numBytes) + } + in := inBuf[:test.numBytes] + out := outBuf[:test.numBytes] + copy(key[:], test.key) + XORKeyStream(out, in, test.iv, &key) + + var xor [64]byte + for len(out) > 0 { + for i := 0; i < 64; i++ { + xor[i] ^= out[i] + } + out = out[64:] + } + + if !bytes.Equal(xor[:], test.xor) { + t.Errorf("#%d: bad result", i) + } + } +} + +var xSalsa20TestData = []struct { + in, nonce, key, out []byte +}{ + { + []byte("Hello world!"), + []byte("24-byte nonce for xsalsa"), + []byte("this is 32-byte key for xsalsa20"), + []byte{0x00, 0x2d, 0x45, 0x13, 0x84, 0x3f, 0xc2, 0x40, 0xc4, 0x01, 0xe5, 0x41}, + }, + { + make([]byte, 64), + []byte("24-byte nonce for xsalsa"), + []byte("this is 32-byte key for xsalsa20"), + []byte{0x48, 0x48, 0x29, 0x7f, 0xeb, 0x1f, 0xb5, 0x2f, 0xb6, + 0x6d, 0x81, 0x60, 0x9b, 0xd5, 0x47, 0xfa, 0xbc, 0xbe, 0x70, + 0x26, 0xed, 0xc8, 0xb5, 0xe5, 0xe4, 0x49, 0xd0, 0x88, 0xbf, + 0xa6, 0x9c, 0x08, 0x8f, 0x5d, 0x8d, 0xa1, 0xd7, 0x91, 0x26, + 0x7c, 0x2c, 0x19, 0x5a, 0x7f, 0x8c, 0xae, 0x9c, 0x4b, 0x40, + 0x50, 0xd0, 0x8c, 0xe6, 0xd3, 0xa1, 0x51, 0xec, 0x26, 0x5f, + 0x3a, 0x58, 0xe4, 0x76, 0x48}, + }, +} + +func TestXSalsa20(t *testing.T) { + var key [32]byte + + for i, test := range xSalsa20TestData { + out := make([]byte, len(test.in)) + copy(key[:], test.key) + XORKeyStream(out, test.in, test.nonce, &key) + if !bytes.Equal(out, test.out) { + t.Errorf("%d: expected %x, got %x", i, test.out, out) + } + } +} + +var ( + keyArray [32]byte + key = &keyArray + nonce [8]byte + msg = make([]byte, 1<<10) +) + +func BenchmarkXOR1K(b *testing.B) { + b.StopTimer() + out := make([]byte, 1024) + b.StartTimer() + for i := 0; i < b.N; i++ { + XORKeyStream(out, msg[:1024], nonce[:], key) + } + b.SetBytes(1024) +} diff --git a/vendor/golang.org/x/crypto/scrypt/example_test.go b/vendor/golang.org/x/crypto/scrypt/example_test.go new file mode 100644 index 0000000..6736479 --- /dev/null +++ b/vendor/golang.org/x/crypto/scrypt/example_test.go @@ -0,0 +1,26 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package scrypt_test + +import ( + "encoding/base64" + "fmt" + "log" + + "golang.org/x/crypto/scrypt" +) + +func Example() { + // DO NOT use this salt value; generate your own random salt. 8 bytes is + // a good length. + salt := []byte{0xc8, 0x28, 0xf2, 0x58, 0xa7, 0x6a, 0xad, 0x7b} + + dk, err := scrypt.Key([]byte("some password"), salt, 1<<15, 8, 1, 32) + if err != nil { + log.Fatal(err) + } + fmt.Println(base64.StdEncoding.EncodeToString(dk)) + // Output: lGnMz8io0AUkfzn6Pls1qX20Vs7PGN6sbYQ2TQgY12M= +} diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt.go b/vendor/golang.org/x/crypto/scrypt/scrypt.go new file mode 100644 index 0000000..ff28aae --- /dev/null +++ b/vendor/golang.org/x/crypto/scrypt/scrypt.go @@ -0,0 +1,244 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package scrypt implements the scrypt key derivation function as defined in +// Colin Percival's paper "Stronger Key Derivation via Sequential Memory-Hard +// Functions" (https://www.tarsnap.com/scrypt/scrypt.pdf). +package scrypt // import "golang.org/x/crypto/scrypt" + +import ( + "crypto/sha256" + "errors" + + "golang.org/x/crypto/pbkdf2" +) + +const maxInt = int(^uint(0) >> 1) + +// blockCopy copies n numbers from src into dst. +func blockCopy(dst, src []uint32, n int) { + copy(dst, src[:n]) +} + +// blockXOR XORs numbers from dst with n numbers from src. +func blockXOR(dst, src []uint32, n int) { + for i, v := range src[:n] { + dst[i] ^= v + } +} + +// salsaXOR applies Salsa20/8 to the XOR of 16 numbers from tmp and in, +// and puts the result into both both tmp and out. +func salsaXOR(tmp *[16]uint32, in, out []uint32) { + w0 := tmp[0] ^ in[0] + w1 := tmp[1] ^ in[1] + w2 := tmp[2] ^ in[2] + w3 := tmp[3] ^ in[3] + w4 := tmp[4] ^ in[4] + w5 := tmp[5] ^ in[5] + w6 := tmp[6] ^ in[6] + w7 := tmp[7] ^ in[7] + w8 := tmp[8] ^ in[8] + w9 := tmp[9] ^ in[9] + w10 := tmp[10] ^ in[10] + w11 := tmp[11] ^ in[11] + w12 := tmp[12] ^ in[12] + w13 := tmp[13] ^ in[13] + w14 := tmp[14] ^ in[14] + w15 := tmp[15] ^ in[15] + + x0, x1, x2, x3, x4, x5, x6, x7, x8 := w0, w1, w2, w3, w4, w5, w6, w7, w8 + x9, x10, x11, x12, x13, x14, x15 := w9, w10, w11, w12, w13, w14, w15 + + for i := 0; i < 8; i += 2 { + u := x0 + x12 + x4 ^= u<<7 | u>>(32-7) + u = x4 + x0 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x4 + x12 ^= u<<13 | u>>(32-13) + u = x12 + x8 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x1 + x9 ^= u<<7 | u>>(32-7) + u = x9 + x5 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x9 + x1 ^= u<<13 | u>>(32-13) + u = x1 + x13 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x6 + x14 ^= u<<7 | u>>(32-7) + u = x14 + x10 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x14 + x6 ^= u<<13 | u>>(32-13) + u = x6 + x2 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x11 + x3 ^= u<<7 | u>>(32-7) + u = x3 + x15 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x3 + x11 ^= u<<13 | u>>(32-13) + u = x11 + x7 + x15 ^= u<<18 | u>>(32-18) + + u = x0 + x3 + x1 ^= u<<7 | u>>(32-7) + u = x1 + x0 + x2 ^= u<<9 | u>>(32-9) + u = x2 + x1 + x3 ^= u<<13 | u>>(32-13) + u = x3 + x2 + x0 ^= u<<18 | u>>(32-18) + + u = x5 + x4 + x6 ^= u<<7 | u>>(32-7) + u = x6 + x5 + x7 ^= u<<9 | u>>(32-9) + u = x7 + x6 + x4 ^= u<<13 | u>>(32-13) + u = x4 + x7 + x5 ^= u<<18 | u>>(32-18) + + u = x10 + x9 + x11 ^= u<<7 | u>>(32-7) + u = x11 + x10 + x8 ^= u<<9 | u>>(32-9) + u = x8 + x11 + x9 ^= u<<13 | u>>(32-13) + u = x9 + x8 + x10 ^= u<<18 | u>>(32-18) + + u = x15 + x14 + x12 ^= u<<7 | u>>(32-7) + u = x12 + x15 + x13 ^= u<<9 | u>>(32-9) + u = x13 + x12 + x14 ^= u<<13 | u>>(32-13) + u = x14 + x13 + x15 ^= u<<18 | u>>(32-18) + } + x0 += w0 + x1 += w1 + x2 += w2 + x3 += w3 + x4 += w4 + x5 += w5 + x6 += w6 + x7 += w7 + x8 += w8 + x9 += w9 + x10 += w10 + x11 += w11 + x12 += w12 + x13 += w13 + x14 += w14 + x15 += w15 + + out[0], tmp[0] = x0, x0 + out[1], tmp[1] = x1, x1 + out[2], tmp[2] = x2, x2 + out[3], tmp[3] = x3, x3 + out[4], tmp[4] = x4, x4 + out[5], tmp[5] = x5, x5 + out[6], tmp[6] = x6, x6 + out[7], tmp[7] = x7, x7 + out[8], tmp[8] = x8, x8 + out[9], tmp[9] = x9, x9 + out[10], tmp[10] = x10, x10 + out[11], tmp[11] = x11, x11 + out[12], tmp[12] = x12, x12 + out[13], tmp[13] = x13, x13 + out[14], tmp[14] = x14, x14 + out[15], tmp[15] = x15, x15 +} + +func blockMix(tmp *[16]uint32, in, out []uint32, r int) { + blockCopy(tmp[:], in[(2*r-1)*16:], 16) + for i := 0; i < 2*r; i += 2 { + salsaXOR(tmp, in[i*16:], out[i*8:]) + salsaXOR(tmp, in[i*16+16:], out[i*8+r*16:]) + } +} + +func integer(b []uint32, r int) uint64 { + j := (2*r - 1) * 16 + return uint64(b[j]) | uint64(b[j+1])<<32 +} + +func smix(b []byte, r, N int, v, xy []uint32) { + var tmp [16]uint32 + x := xy + y := xy[32*r:] + + j := 0 + for i := 0; i < 32*r; i++ { + x[i] = uint32(b[j]) | uint32(b[j+1])<<8 | uint32(b[j+2])<<16 | uint32(b[j+3])<<24 + j += 4 + } + for i := 0; i < N; i += 2 { + blockCopy(v[i*(32*r):], x, 32*r) + blockMix(&tmp, x, y, r) + + blockCopy(v[(i+1)*(32*r):], y, 32*r) + blockMix(&tmp, y, x, r) + } + for i := 0; i < N; i += 2 { + j := int(integer(x, r) & uint64(N-1)) + blockXOR(x, v[j*(32*r):], 32*r) + blockMix(&tmp, x, y, r) + + j = int(integer(y, r) & uint64(N-1)) + blockXOR(y, v[j*(32*r):], 32*r) + blockMix(&tmp, y, x, r) + } + j = 0 + for _, v := range x[:32*r] { + b[j+0] = byte(v >> 0) + b[j+1] = byte(v >> 8) + b[j+2] = byte(v >> 16) + b[j+3] = byte(v >> 24) + j += 4 + } +} + +// Key derives a key from the password, salt, and cost parameters, returning +// a byte slice of length keyLen that can be used as cryptographic key. +// +// N is a CPU/memory cost parameter, which must be a power of two greater than 1. +// r and p must satisfy r * p < 2³⁰. If the parameters do not satisfy the +// limits, the function returns a nil byte slice and an error. +// +// For example, you can get a derived key for e.g. AES-256 (which needs a +// 32-byte key) by doing: +// +// dk, err := scrypt.Key([]byte("some password"), salt, 16384, 8, 1, 32) +// +// The recommended parameters for interactive logins as of 2017 are N=32768, r=8 +// and p=1. The parameters N, r, and p should be increased as memory latency and +// CPU parallelism increases; consider setting N to the highest power of 2 you +// can derive within 100 milliseconds. Remember to get a good random salt. +func Key(password, salt []byte, N, r, p, keyLen int) ([]byte, error) { + if N <= 1 || N&(N-1) != 0 { + return nil, errors.New("scrypt: N must be > 1 and a power of 2") + } + if uint64(r)*uint64(p) >= 1<<30 || r > maxInt/128/p || r > maxInt/256 || N > maxInt/128/r { + return nil, errors.New("scrypt: parameters are too large") + } + + xy := make([]uint32, 64*r) + v := make([]uint32, 32*N*r) + b := pbkdf2.Key(password, salt, 1, p*128*r, sha256.New) + + for i := 0; i < p; i++ { + smix(b[i*128*r:], r, N, v, xy) + } + + return pbkdf2.Key(password, b, 1, keyLen, sha256.New), nil +} diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt_test.go b/vendor/golang.org/x/crypto/scrypt/scrypt_test.go new file mode 100644 index 0000000..766ed8d --- /dev/null +++ b/vendor/golang.org/x/crypto/scrypt/scrypt_test.go @@ -0,0 +1,162 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package scrypt + +import ( + "bytes" + "testing" +) + +type testVector struct { + password string + salt string + N, r, p int + output []byte +} + +var good = []testVector{ + { + "password", + "salt", + 2, 10, 10, + []byte{ + 0x48, 0x2c, 0x85, 0x8e, 0x22, 0x90, 0x55, 0xe6, 0x2f, + 0x41, 0xe0, 0xec, 0x81, 0x9a, 0x5e, 0xe1, 0x8b, 0xdb, + 0x87, 0x25, 0x1a, 0x53, 0x4f, 0x75, 0xac, 0xd9, 0x5a, + 0xc5, 0xe5, 0xa, 0xa1, 0x5f, + }, + }, + { + "password", + "salt", + 16, 100, 100, + []byte{ + 0x88, 0xbd, 0x5e, 0xdb, 0x52, 0xd1, 0xdd, 0x0, 0x18, + 0x87, 0x72, 0xad, 0x36, 0x17, 0x12, 0x90, 0x22, 0x4e, + 0x74, 0x82, 0x95, 0x25, 0xb1, 0x8d, 0x73, 0x23, 0xa5, + 0x7f, 0x91, 0x96, 0x3c, 0x37, + }, + }, + { + "this is a long \000 password", + "and this is a long \000 salt", + 16384, 8, 1, + []byte{ + 0xc3, 0xf1, 0x82, 0xee, 0x2d, 0xec, 0x84, 0x6e, 0x70, + 0xa6, 0x94, 0x2f, 0xb5, 0x29, 0x98, 0x5a, 0x3a, 0x09, + 0x76, 0x5e, 0xf0, 0x4c, 0x61, 0x29, 0x23, 0xb1, 0x7f, + 0x18, 0x55, 0x5a, 0x37, 0x07, 0x6d, 0xeb, 0x2b, 0x98, + 0x30, 0xd6, 0x9d, 0xe5, 0x49, 0x26, 0x51, 0xe4, 0x50, + 0x6a, 0xe5, 0x77, 0x6d, 0x96, 0xd4, 0x0f, 0x67, 0xaa, + 0xee, 0x37, 0xe1, 0x77, 0x7b, 0x8a, 0xd5, 0xc3, 0x11, + 0x14, 0x32, 0xbb, 0x3b, 0x6f, 0x7e, 0x12, 0x64, 0x40, + 0x18, 0x79, 0xe6, 0x41, 0xae, + }, + }, + { + "p", + "s", + 2, 1, 1, + []byte{ + 0x48, 0xb0, 0xd2, 0xa8, 0xa3, 0x27, 0x26, 0x11, 0x98, + 0x4c, 0x50, 0xeb, 0xd6, 0x30, 0xaf, 0x52, + }, + }, + + { + "", + "", + 16, 1, 1, + []byte{ + 0x77, 0xd6, 0x57, 0x62, 0x38, 0x65, 0x7b, 0x20, 0x3b, + 0x19, 0xca, 0x42, 0xc1, 0x8a, 0x04, 0x97, 0xf1, 0x6b, + 0x48, 0x44, 0xe3, 0x07, 0x4a, 0xe8, 0xdf, 0xdf, 0xfa, + 0x3f, 0xed, 0xe2, 0x14, 0x42, 0xfc, 0xd0, 0x06, 0x9d, + 0xed, 0x09, 0x48, 0xf8, 0x32, 0x6a, 0x75, 0x3a, 0x0f, + 0xc8, 0x1f, 0x17, 0xe8, 0xd3, 0xe0, 0xfb, 0x2e, 0x0d, + 0x36, 0x28, 0xcf, 0x35, 0xe2, 0x0c, 0x38, 0xd1, 0x89, + 0x06, + }, + }, + { + "password", + "NaCl", + 1024, 8, 16, + []byte{ + 0xfd, 0xba, 0xbe, 0x1c, 0x9d, 0x34, 0x72, 0x00, 0x78, + 0x56, 0xe7, 0x19, 0x0d, 0x01, 0xe9, 0xfe, 0x7c, 0x6a, + 0xd7, 0xcb, 0xc8, 0x23, 0x78, 0x30, 0xe7, 0x73, 0x76, + 0x63, 0x4b, 0x37, 0x31, 0x62, 0x2e, 0xaf, 0x30, 0xd9, + 0x2e, 0x22, 0xa3, 0x88, 0x6f, 0xf1, 0x09, 0x27, 0x9d, + 0x98, 0x30, 0xda, 0xc7, 0x27, 0xaf, 0xb9, 0x4a, 0x83, + 0xee, 0x6d, 0x83, 0x60, 0xcb, 0xdf, 0xa2, 0xcc, 0x06, + 0x40, + }, + }, + { + "pleaseletmein", "SodiumChloride", + 16384, 8, 1, + []byte{ + 0x70, 0x23, 0xbd, 0xcb, 0x3a, 0xfd, 0x73, 0x48, 0x46, + 0x1c, 0x06, 0xcd, 0x81, 0xfd, 0x38, 0xeb, 0xfd, 0xa8, + 0xfb, 0xba, 0x90, 0x4f, 0x8e, 0x3e, 0xa9, 0xb5, 0x43, + 0xf6, 0x54, 0x5d, 0xa1, 0xf2, 0xd5, 0x43, 0x29, 0x55, + 0x61, 0x3f, 0x0f, 0xcf, 0x62, 0xd4, 0x97, 0x05, 0x24, + 0x2a, 0x9a, 0xf9, 0xe6, 0x1e, 0x85, 0xdc, 0x0d, 0x65, + 0x1e, 0x40, 0xdf, 0xcf, 0x01, 0x7b, 0x45, 0x57, 0x58, + 0x87, + }, + }, + /* + // Disabled: needs 1 GiB RAM and takes too long for a simple test. + { + "pleaseletmein", "SodiumChloride", + 1048576, 8, 1, + []byte{ + 0x21, 0x01, 0xcb, 0x9b, 0x6a, 0x51, 0x1a, 0xae, 0xad, + 0xdb, 0xbe, 0x09, 0xcf, 0x70, 0xf8, 0x81, 0xec, 0x56, + 0x8d, 0x57, 0x4a, 0x2f, 0xfd, 0x4d, 0xab, 0xe5, 0xee, + 0x98, 0x20, 0xad, 0xaa, 0x47, 0x8e, 0x56, 0xfd, 0x8f, + 0x4b, 0xa5, 0xd0, 0x9f, 0xfa, 0x1c, 0x6d, 0x92, 0x7c, + 0x40, 0xf4, 0xc3, 0x37, 0x30, 0x40, 0x49, 0xe8, 0xa9, + 0x52, 0xfb, 0xcb, 0xf4, 0x5c, 0x6f, 0xa7, 0x7a, 0x41, + 0xa4, + }, + }, + */ +} + +var bad = []testVector{ + {"p", "s", 0, 1, 1, nil}, // N == 0 + {"p", "s", 1, 1, 1, nil}, // N == 1 + {"p", "s", 7, 8, 1, nil}, // N is not power of 2 + {"p", "s", 16, maxInt / 2, maxInt / 2, nil}, // p * r too large +} + +func TestKey(t *testing.T) { + for i, v := range good { + k, err := Key([]byte(v.password), []byte(v.salt), v.N, v.r, v.p, len(v.output)) + if err != nil { + t.Errorf("%d: got unexpected error: %s", i, err) + } + if !bytes.Equal(k, v.output) { + t.Errorf("%d: expected %x, got %x", i, v.output, k) + } + } + for i, v := range bad { + _, err := Key([]byte(v.password), []byte(v.salt), v.N, v.r, v.p, 32) + if err == nil { + t.Errorf("%d: expected error, got nil", i) + } + } +} + +var sink []byte + +func BenchmarkKey(b *testing.B) { + for i := 0; i < b.N; i++ { + sink, _ = Key([]byte("password"), []byte("salt"), 1<<15, 8, 1, 64) + } +} diff --git a/vendor/golang.org/x/crypto/sha3/doc.go b/vendor/golang.org/x/crypto/sha3/doc.go new file mode 100644 index 0000000..a0ee3ae --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/doc.go @@ -0,0 +1,66 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package sha3 implements the SHA-3 fixed-output-length hash functions and +// the SHAKE variable-output-length hash functions defined by FIPS-202. +// +// Both types of hash function use the "sponge" construction and the Keccak +// permutation. For a detailed specification see http://keccak.noekeon.org/ +// +// +// Guidance +// +// If you aren't sure what function you need, use SHAKE256 with at least 64 +// bytes of output. The SHAKE instances are faster than the SHA3 instances; +// the latter have to allocate memory to conform to the hash.Hash interface. +// +// If you need a secret-key MAC (message authentication code), prepend the +// secret key to the input, hash with SHAKE256 and read at least 32 bytes of +// output. +// +// +// Security strengths +// +// The SHA3-x (x equals 224, 256, 384, or 512) functions have a security +// strength against preimage attacks of x bits. Since they only produce "x" +// bits of output, their collision-resistance is only "x/2" bits. +// +// The SHAKE-256 and -128 functions have a generic security strength of 256 and +// 128 bits against all attacks, provided that at least 2x bits of their output +// is used. Requesting more than 64 or 32 bytes of output, respectively, does +// not increase the collision-resistance of the SHAKE functions. +// +// +// The sponge construction +// +// A sponge builds a pseudo-random function from a public pseudo-random +// permutation, by applying the permutation to a state of "rate + capacity" +// bytes, but hiding "capacity" of the bytes. +// +// A sponge starts out with a zero state. To hash an input using a sponge, up +// to "rate" bytes of the input are XORed into the sponge's state. The sponge +// is then "full" and the permutation is applied to "empty" it. This process is +// repeated until all the input has been "absorbed". The input is then padded. +// The digest is "squeezed" from the sponge in the same way, except that output +// output is copied out instead of input being XORed in. +// +// A sponge is parameterized by its generic security strength, which is equal +// to half its capacity; capacity + rate is equal to the permutation's width. +// Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means +// that the security strength of a sponge instance is equal to (1600 - bitrate) / 2. +// +// +// Recommendations +// +// The SHAKE functions are recommended for most new uses. They can produce +// output of arbitrary length. SHAKE256, with an output length of at least +// 64 bytes, provides 256-bit security against all attacks. The Keccak team +// recommends it for most applications upgrading from SHA2-512. (NIST chose a +// much stronger, but much slower, sponge instance for SHA3-512.) +// +// The SHA-3 functions are "drop-in" replacements for the SHA-2 functions. +// They produce output of the same length, with the same security strengths +// against all attacks. This means, in particular, that SHA3-256 only has +// 128-bit collision resistance, because its output length is 32 bytes. +package sha3 // import "golang.org/x/crypto/sha3" diff --git a/vendor/golang.org/x/crypto/sha3/hashes.go b/vendor/golang.org/x/crypto/sha3/hashes.go new file mode 100644 index 0000000..2b51cf4 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/hashes.go @@ -0,0 +1,65 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// This file provides functions for creating instances of the SHA-3 +// and SHAKE hash functions, as well as utility functions for hashing +// bytes. + +import ( + "hash" +) + +// New224 creates a new SHA3-224 hash. +// Its generic security strength is 224 bits against preimage attacks, +// and 112 bits against collision attacks. +func New224() hash.Hash { return &state{rate: 144, outputLen: 28, dsbyte: 0x06} } + +// New256 creates a new SHA3-256 hash. +// Its generic security strength is 256 bits against preimage attacks, +// and 128 bits against collision attacks. +func New256() hash.Hash { return &state{rate: 136, outputLen: 32, dsbyte: 0x06} } + +// New384 creates a new SHA3-384 hash. +// Its generic security strength is 384 bits against preimage attacks, +// and 192 bits against collision attacks. +func New384() hash.Hash { return &state{rate: 104, outputLen: 48, dsbyte: 0x06} } + +// New512 creates a new SHA3-512 hash. +// Its generic security strength is 512 bits against preimage attacks, +// and 256 bits against collision attacks. +func New512() hash.Hash { return &state{rate: 72, outputLen: 64, dsbyte: 0x06} } + +// Sum224 returns the SHA3-224 digest of the data. +func Sum224(data []byte) (digest [28]byte) { + h := New224() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum256 returns the SHA3-256 digest of the data. +func Sum256(data []byte) (digest [32]byte) { + h := New256() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum384 returns the SHA3-384 digest of the data. +func Sum384(data []byte) (digest [48]byte) { + h := New384() + h.Write(data) + h.Sum(digest[:0]) + return +} + +// Sum512 returns the SHA3-512 digest of the data. +func Sum512(data []byte) (digest [64]byte) { + h := New512() + h.Write(data) + h.Sum(digest[:0]) + return +} diff --git a/vendor/golang.org/x/crypto/sha3/keccakf.go b/vendor/golang.org/x/crypto/sha3/keccakf.go new file mode 100644 index 0000000..46d03ed --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf.go @@ -0,0 +1,412 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64 appengine gccgo + +package sha3 + +// rc stores the round constants for use in the ι step. +var rc = [24]uint64{ + 0x0000000000000001, + 0x0000000000008082, + 0x800000000000808A, + 0x8000000080008000, + 0x000000000000808B, + 0x0000000080000001, + 0x8000000080008081, + 0x8000000000008009, + 0x000000000000008A, + 0x0000000000000088, + 0x0000000080008009, + 0x000000008000000A, + 0x000000008000808B, + 0x800000000000008B, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x000000000000800A, + 0x800000008000000A, + 0x8000000080008081, + 0x8000000000008080, + 0x0000000080000001, + 0x8000000080008008, +} + +// keccakF1600 applies the Keccak permutation to a 1600b-wide +// state represented as a slice of 25 uint64s. +func keccakF1600(a *[25]uint64) { + // Implementation translated from Keccak-inplace.c + // in the keccak reference code. + var t, bc0, bc1, bc2, bc3, bc4, d0, d1, d2, d3, d4 uint64 + + for i := 0; i < 24; i += 4 { + // Combines the 5 steps in each round into 2 steps. + // Unrolls 4 rounds per loop and spreads some steps across rounds. + + // Round 1 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[6] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[12] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[18] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[24] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i] + a[6] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[16] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[22] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[3] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[10] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[1] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[7] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[19] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[20] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[11] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[23] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[4] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[5] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[2] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[8] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[14] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[15] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + // Round 2 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[16] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[7] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[23] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[14] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+1] + a[16] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[11] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[2] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[18] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[20] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[6] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[22] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[4] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[15] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[1] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[8] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[24] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[10] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[12] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[3] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[19] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[5] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + // Round 3 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[11] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[22] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[8] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[19] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+2] + a[11] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[1] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[12] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[23] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[15] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[16] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[2] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[24] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[5] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[6] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[3] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[14] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[20] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[7] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[18] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[4] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[10] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + // Round 4 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[1] ^ d1 + bc1 = t<<44 | t>>(64-44) + t = a[2] ^ d2 + bc2 = t<<43 | t>>(64-43) + t = a[3] ^ d3 + bc3 = t<<21 | t>>(64-21) + t = a[4] ^ d4 + bc4 = t<<14 | t>>(64-14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+3] + a[1] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc2 = t<<3 | t>>(64-3) + t = a[6] ^ d1 + bc3 = t<<45 | t>>(64-45) + t = a[7] ^ d2 + bc4 = t<<61 | t>>(64-61) + t = a[8] ^ d3 + bc0 = t<<28 | t>>(64-28) + t = a[9] ^ d4 + bc1 = t<<20 | t>>(64-20) + a[5] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc4 = t<<18 | t>>(64-18) + t = a[11] ^ d1 + bc0 = t<<1 | t>>(64-1) + t = a[12] ^ d2 + bc1 = t<<6 | t>>(64-6) + t = a[13] ^ d3 + bc2 = t<<25 | t>>(64-25) + t = a[14] ^ d4 + bc3 = t<<8 | t>>(64-8) + a[10] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc1 = t<<36 | t>>(64-36) + t = a[16] ^ d1 + bc2 = t<<10 | t>>(64-10) + t = a[17] ^ d2 + bc3 = t<<15 | t>>(64-15) + t = a[18] ^ d3 + bc4 = t<<56 | t>>(64-56) + t = a[19] ^ d4 + bc0 = t<<27 | t>>(64-27) + a[15] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc3 = t<<41 | t>>(64-41) + t = a[21] ^ d1 + bc4 = t<<2 | t>>(64-2) + t = a[22] ^ d2 + bc0 = t<<62 | t>>(64-62) + t = a[23] ^ d3 + bc1 = t<<55 | t>>(64-55) + t = a[24] ^ d4 + bc2 = t<<39 | t>>(64-39) + a[20] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + } +} diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go new file mode 100644 index 0000000..7886795 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.go @@ -0,0 +1,13 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!appengine,!gccgo + +package sha3 + +// This function is implemented in keccakf_amd64.s. + +//go:noescape + +func keccakF1600(a *[25]uint64) diff --git a/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s new file mode 100644 index 0000000..f88533a --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/keccakf_amd64.s @@ -0,0 +1,390 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,!appengine,!gccgo + +// This code was translated into a form compatible with 6a from the public +// domain sources at https://github.com/gvanas/KeccakCodePackage + +// Offsets in state +#define _ba (0*8) +#define _be (1*8) +#define _bi (2*8) +#define _bo (3*8) +#define _bu (4*8) +#define _ga (5*8) +#define _ge (6*8) +#define _gi (7*8) +#define _go (8*8) +#define _gu (9*8) +#define _ka (10*8) +#define _ke (11*8) +#define _ki (12*8) +#define _ko (13*8) +#define _ku (14*8) +#define _ma (15*8) +#define _me (16*8) +#define _mi (17*8) +#define _mo (18*8) +#define _mu (19*8) +#define _sa (20*8) +#define _se (21*8) +#define _si (22*8) +#define _so (23*8) +#define _su (24*8) + +// Temporary registers +#define rT1 AX + +// Round vars +#define rpState DI +#define rpStack SP + +#define rDa BX +#define rDe CX +#define rDi DX +#define rDo R8 +#define rDu R9 + +#define rBa R10 +#define rBe R11 +#define rBi R12 +#define rBo R13 +#define rBu R14 + +#define rCa SI +#define rCe BP +#define rCi rBi +#define rCo rBo +#define rCu R15 + +#define MOVQ_RBI_RCE MOVQ rBi, rCe +#define XORQ_RT1_RCA XORQ rT1, rCa +#define XORQ_RT1_RCE XORQ rT1, rCe +#define XORQ_RBA_RCU XORQ rBa, rCu +#define XORQ_RBE_RCU XORQ rBe, rCu +#define XORQ_RDU_RCU XORQ rDu, rCu +#define XORQ_RDA_RCA XORQ rDa, rCa +#define XORQ_RDE_RCE XORQ rDe, rCe + +#define mKeccakRound(iState, oState, rc, B_RBI_RCE, G_RT1_RCA, G_RT1_RCE, G_RBA_RCU, K_RT1_RCA, K_RT1_RCE, K_RBA_RCU, M_RT1_RCA, M_RT1_RCE, M_RBE_RCU, S_RDU_RCU, S_RDA_RCA, S_RDE_RCE) \ + /* Prepare round */ \ + MOVQ rCe, rDa; \ + ROLQ $1, rDa; \ + \ + MOVQ _bi(iState), rCi; \ + XORQ _gi(iState), rDi; \ + XORQ rCu, rDa; \ + XORQ _ki(iState), rCi; \ + XORQ _mi(iState), rDi; \ + XORQ rDi, rCi; \ + \ + MOVQ rCi, rDe; \ + ROLQ $1, rDe; \ + \ + MOVQ _bo(iState), rCo; \ + XORQ _go(iState), rDo; \ + XORQ rCa, rDe; \ + XORQ _ko(iState), rCo; \ + XORQ _mo(iState), rDo; \ + XORQ rDo, rCo; \ + \ + MOVQ rCo, rDi; \ + ROLQ $1, rDi; \ + \ + MOVQ rCu, rDo; \ + XORQ rCe, rDi; \ + ROLQ $1, rDo; \ + \ + MOVQ rCa, rDu; \ + XORQ rCi, rDo; \ + ROLQ $1, rDu; \ + \ + /* Result b */ \ + MOVQ _ba(iState), rBa; \ + MOVQ _ge(iState), rBe; \ + XORQ rCo, rDu; \ + MOVQ _ki(iState), rBi; \ + MOVQ _mo(iState), rBo; \ + MOVQ _su(iState), rBu; \ + XORQ rDe, rBe; \ + ROLQ $44, rBe; \ + XORQ rDi, rBi; \ + XORQ rDa, rBa; \ + ROLQ $43, rBi; \ + \ + MOVQ rBe, rCa; \ + MOVQ rc, rT1; \ + ORQ rBi, rCa; \ + XORQ rBa, rT1; \ + XORQ rT1, rCa; \ + MOVQ rCa, _ba(oState); \ + \ + XORQ rDu, rBu; \ + ROLQ $14, rBu; \ + MOVQ rBa, rCu; \ + ANDQ rBe, rCu; \ + XORQ rBu, rCu; \ + MOVQ rCu, _bu(oState); \ + \ + XORQ rDo, rBo; \ + ROLQ $21, rBo; \ + MOVQ rBo, rT1; \ + ANDQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _bi(oState); \ + \ + NOTQ rBi; \ + ORQ rBa, rBu; \ + ORQ rBo, rBi; \ + XORQ rBo, rBu; \ + XORQ rBe, rBi; \ + MOVQ rBu, _bo(oState); \ + MOVQ rBi, _be(oState); \ + B_RBI_RCE; \ + \ + /* Result g */ \ + MOVQ _gu(iState), rBe; \ + XORQ rDu, rBe; \ + MOVQ _ka(iState), rBi; \ + ROLQ $20, rBe; \ + XORQ rDa, rBi; \ + ROLQ $3, rBi; \ + MOVQ _bo(iState), rBa; \ + MOVQ rBe, rT1; \ + ORQ rBi, rT1; \ + XORQ rDo, rBa; \ + MOVQ _me(iState), rBo; \ + MOVQ _si(iState), rBu; \ + ROLQ $28, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ga(oState); \ + G_RT1_RCA; \ + \ + XORQ rDe, rBo; \ + ROLQ $45, rBo; \ + MOVQ rBi, rT1; \ + ANDQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _ge(oState); \ + G_RT1_RCE; \ + \ + XORQ rDi, rBu; \ + ROLQ $61, rBu; \ + MOVQ rBu, rT1; \ + ORQ rBa, rT1; \ + XORQ rBo, rT1; \ + MOVQ rT1, _go(oState); \ + \ + ANDQ rBe, rBa; \ + XORQ rBu, rBa; \ + MOVQ rBa, _gu(oState); \ + NOTQ rBu; \ + G_RBA_RCU; \ + \ + ORQ rBu, rBo; \ + XORQ rBi, rBo; \ + MOVQ rBo, _gi(oState); \ + \ + /* Result k */ \ + MOVQ _be(iState), rBa; \ + MOVQ _gi(iState), rBe; \ + MOVQ _ko(iState), rBi; \ + MOVQ _mu(iState), rBo; \ + MOVQ _sa(iState), rBu; \ + XORQ rDi, rBe; \ + ROLQ $6, rBe; \ + XORQ rDo, rBi; \ + ROLQ $25, rBi; \ + MOVQ rBe, rT1; \ + ORQ rBi, rT1; \ + XORQ rDe, rBa; \ + ROLQ $1, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ka(oState); \ + K_RT1_RCA; \ + \ + XORQ rDu, rBo; \ + ROLQ $8, rBo; \ + MOVQ rBi, rT1; \ + ANDQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _ke(oState); \ + K_RT1_RCE; \ + \ + XORQ rDa, rBu; \ + ROLQ $18, rBu; \ + NOTQ rBo; \ + MOVQ rBo, rT1; \ + ANDQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _ki(oState); \ + \ + MOVQ rBu, rT1; \ + ORQ rBa, rT1; \ + XORQ rBo, rT1; \ + MOVQ rT1, _ko(oState); \ + \ + ANDQ rBe, rBa; \ + XORQ rBu, rBa; \ + MOVQ rBa, _ku(oState); \ + K_RBA_RCU; \ + \ + /* Result m */ \ + MOVQ _ga(iState), rBe; \ + XORQ rDa, rBe; \ + MOVQ _ke(iState), rBi; \ + ROLQ $36, rBe; \ + XORQ rDe, rBi; \ + MOVQ _bu(iState), rBa; \ + ROLQ $10, rBi; \ + MOVQ rBe, rT1; \ + MOVQ _mi(iState), rBo; \ + ANDQ rBi, rT1; \ + XORQ rDu, rBa; \ + MOVQ _so(iState), rBu; \ + ROLQ $27, rBa; \ + XORQ rBa, rT1; \ + MOVQ rT1, _ma(oState); \ + M_RT1_RCA; \ + \ + XORQ rDi, rBo; \ + ROLQ $15, rBo; \ + MOVQ rBi, rT1; \ + ORQ rBo, rT1; \ + XORQ rBe, rT1; \ + MOVQ rT1, _me(oState); \ + M_RT1_RCE; \ + \ + XORQ rDo, rBu; \ + ROLQ $56, rBu; \ + NOTQ rBo; \ + MOVQ rBo, rT1; \ + ORQ rBu, rT1; \ + XORQ rBi, rT1; \ + MOVQ rT1, _mi(oState); \ + \ + ORQ rBa, rBe; \ + XORQ rBu, rBe; \ + MOVQ rBe, _mu(oState); \ + \ + ANDQ rBa, rBu; \ + XORQ rBo, rBu; \ + MOVQ rBu, _mo(oState); \ + M_RBE_RCU; \ + \ + /* Result s */ \ + MOVQ _bi(iState), rBa; \ + MOVQ _go(iState), rBe; \ + MOVQ _ku(iState), rBi; \ + XORQ rDi, rBa; \ + MOVQ _ma(iState), rBo; \ + ROLQ $62, rBa; \ + XORQ rDo, rBe; \ + MOVQ _se(iState), rBu; \ + ROLQ $55, rBe; \ + \ + XORQ rDu, rBi; \ + MOVQ rBa, rDu; \ + XORQ rDe, rBu; \ + ROLQ $2, rBu; \ + ANDQ rBe, rDu; \ + XORQ rBu, rDu; \ + MOVQ rDu, _su(oState); \ + \ + ROLQ $39, rBi; \ + S_RDU_RCU; \ + NOTQ rBe; \ + XORQ rDa, rBo; \ + MOVQ rBe, rDa; \ + ANDQ rBi, rDa; \ + XORQ rBa, rDa; \ + MOVQ rDa, _sa(oState); \ + S_RDA_RCA; \ + \ + ROLQ $41, rBo; \ + MOVQ rBi, rDe; \ + ORQ rBo, rDe; \ + XORQ rBe, rDe; \ + MOVQ rDe, _se(oState); \ + S_RDE_RCE; \ + \ + MOVQ rBo, rDi; \ + MOVQ rBu, rDo; \ + ANDQ rBu, rDi; \ + ORQ rBa, rDo; \ + XORQ rBi, rDi; \ + XORQ rBo, rDo; \ + MOVQ rDi, _si(oState); \ + MOVQ rDo, _so(oState) \ + +// func keccakF1600(state *[25]uint64) +TEXT ·keccakF1600(SB), 0, $200-8 + MOVQ state+0(FP), rpState + + // Convert the user state into an internal state + NOTQ _be(rpState) + NOTQ _bi(rpState) + NOTQ _go(rpState) + NOTQ _ki(rpState) + NOTQ _mi(rpState) + NOTQ _sa(rpState) + + // Execute the KeccakF permutation + MOVQ _ba(rpState), rCa + MOVQ _be(rpState), rCe + MOVQ _bu(rpState), rCu + + XORQ _ga(rpState), rCa + XORQ _ge(rpState), rCe + XORQ _gu(rpState), rCu + + XORQ _ka(rpState), rCa + XORQ _ke(rpState), rCe + XORQ _ku(rpState), rCu + + XORQ _ma(rpState), rCa + XORQ _me(rpState), rCe + XORQ _mu(rpState), rCu + + XORQ _sa(rpState), rCa + XORQ _se(rpState), rCe + MOVQ _si(rpState), rDi + MOVQ _so(rpState), rDo + XORQ _su(rpState), rCu + + mKeccakRound(rpState, rpStack, $0x0000000000000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000000008082, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x800000000000808a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000080008000, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000008a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x0000000000000088, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x0000000080008009, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x000000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000008000808b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x800000000000008b, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000000008089, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008003, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000000008002, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000000080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x000000000000800a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x800000008000000a, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x8000000080008081, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000000008080, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpState, rpStack, $0x0000000080000001, MOVQ_RBI_RCE, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBA_RCU, XORQ_RT1_RCA, XORQ_RT1_RCE, XORQ_RBE_RCU, XORQ_RDU_RCU, XORQ_RDA_RCA, XORQ_RDE_RCE) + mKeccakRound(rpStack, rpState, $0x8000000080008008, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP, NOP) + + // Revert the internal state to the user state + NOTQ _be(rpState) + NOTQ _bi(rpState) + NOTQ _go(rpState) + NOTQ _ki(rpState) + NOTQ _mi(rpState) + NOTQ _sa(rpState) + + RET diff --git a/vendor/golang.org/x/crypto/sha3/register.go b/vendor/golang.org/x/crypto/sha3/register.go new file mode 100644 index 0000000..3cf6a22 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/register.go @@ -0,0 +1,18 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.4 + +package sha3 + +import ( + "crypto" +) + +func init() { + crypto.RegisterHash(crypto.SHA3_224, New224) + crypto.RegisterHash(crypto.SHA3_256, New256) + crypto.RegisterHash(crypto.SHA3_384, New384) + crypto.RegisterHash(crypto.SHA3_512, New512) +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3.go b/vendor/golang.org/x/crypto/sha3/sha3.go new file mode 100644 index 0000000..b12a35c --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3.go @@ -0,0 +1,192 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// spongeDirection indicates the direction bytes are flowing through the sponge. +type spongeDirection int + +const ( + // spongeAbsorbing indicates that the sponge is absorbing input. + spongeAbsorbing spongeDirection = iota + // spongeSqueezing indicates that the sponge is being squeezed. + spongeSqueezing +) + +const ( + // maxRate is the maximum size of the internal buffer. SHAKE-256 + // currently needs the largest buffer. + maxRate = 168 +) + +type state struct { + // Generic sponge components. + a [25]uint64 // main state of the hash + buf []byte // points into storage + rate int // the number of bytes of state to use + + // dsbyte contains the "domain separation" bits and the first bit of + // the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the + // SHA-3 and SHAKE functions by appending bitstrings to the message. + // Using a little-endian bit-ordering convention, these are "01" for SHA-3 + // and "1111" for SHAKE, or 00000010b and 00001111b, respectively. Then the + // padding rule from section 5.1 is applied to pad the message to a multiple + // of the rate, which involves adding a "1" bit, zero or more "0" bits, and + // a final "1" bit. We merge the first "1" bit from the padding into dsbyte, + // giving 00000110b (0x06) and 00011111b (0x1f). + // [1] http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf + // "Draft FIPS 202: SHA-3 Standard: Permutation-Based Hash and + // Extendable-Output Functions (May 2014)" + dsbyte byte + storage [maxRate]byte + + // Specific to SHA-3 and SHAKE. + outputLen int // the default output size in bytes + state spongeDirection // whether the sponge is absorbing or squeezing +} + +// BlockSize returns the rate of sponge underlying this hash function. +func (d *state) BlockSize() int { return d.rate } + +// Size returns the output size of the hash function in bytes. +func (d *state) Size() int { return d.outputLen } + +// Reset clears the internal state by zeroing the sponge state and +// the byte buffer, and setting Sponge.state to absorbing. +func (d *state) Reset() { + // Zero the permutation's state. + for i := range d.a { + d.a[i] = 0 + } + d.state = spongeAbsorbing + d.buf = d.storage[:0] +} + +func (d *state) clone() *state { + ret := *d + if ret.state == spongeAbsorbing { + ret.buf = ret.storage[:len(ret.buf)] + } else { + ret.buf = ret.storage[d.rate-cap(d.buf) : d.rate] + } + + return &ret +} + +// permute applies the KeccakF-1600 permutation. It handles +// any input-output buffering. +func (d *state) permute() { + switch d.state { + case spongeAbsorbing: + // If we're absorbing, we need to xor the input into the state + // before applying the permutation. + xorIn(d, d.buf) + d.buf = d.storage[:0] + keccakF1600(&d.a) + case spongeSqueezing: + // If we're squeezing, we need to apply the permutatin before + // copying more output. + keccakF1600(&d.a) + d.buf = d.storage[:d.rate] + copyOut(d, d.buf) + } +} + +// pads appends the domain separation bits in dsbyte, applies +// the multi-bitrate 10..1 padding rule, and permutes the state. +func (d *state) padAndPermute(dsbyte byte) { + if d.buf == nil { + d.buf = d.storage[:0] + } + // Pad with this instance's domain-separator bits. We know that there's + // at least one byte of space in d.buf because, if it were full, + // permute would have been called to empty it. dsbyte also contains the + // first one bit for the padding. See the comment in the state struct. + d.buf = append(d.buf, dsbyte) + zerosStart := len(d.buf) + d.buf = d.storage[:d.rate] + for i := zerosStart; i < d.rate; i++ { + d.buf[i] = 0 + } + // This adds the final one bit for the padding. Because of the way that + // bits are numbered from the LSB upwards, the final bit is the MSB of + // the last byte. + d.buf[d.rate-1] ^= 0x80 + // Apply the permutation + d.permute() + d.state = spongeSqueezing + d.buf = d.storage[:d.rate] + copyOut(d, d.buf) +} + +// Write absorbs more data into the hash's state. It produces an error +// if more data is written to the ShakeHash after writing +func (d *state) Write(p []byte) (written int, err error) { + if d.state != spongeAbsorbing { + panic("sha3: write to sponge after read") + } + if d.buf == nil { + d.buf = d.storage[:0] + } + written = len(p) + + for len(p) > 0 { + if len(d.buf) == 0 && len(p) >= d.rate { + // The fast path; absorb a full "rate" bytes of input and apply the permutation. + xorIn(d, p[:d.rate]) + p = p[d.rate:] + keccakF1600(&d.a) + } else { + // The slow path; buffer the input until we can fill the sponge, and then xor it in. + todo := d.rate - len(d.buf) + if todo > len(p) { + todo = len(p) + } + d.buf = append(d.buf, p[:todo]...) + p = p[todo:] + + // If the sponge is full, apply the permutation. + if len(d.buf) == d.rate { + d.permute() + } + } + } + + return +} + +// Read squeezes an arbitrary number of bytes from the sponge. +func (d *state) Read(out []byte) (n int, err error) { + // If we're still absorbing, pad and apply the permutation. + if d.state == spongeAbsorbing { + d.padAndPermute(d.dsbyte) + } + + n = len(out) + + // Now, do the squeezing. + for len(out) > 0 { + n := copy(out, d.buf) + d.buf = d.buf[n:] + out = out[n:] + + // Apply the permutation if we've squeezed the sponge dry. + if len(d.buf) == 0 { + d.permute() + } + } + + return +} + +// Sum applies padding to the hash state and then squeezes out the desired +// number of output bytes. +func (d *state) Sum(in []byte) []byte { + // Make a copy of the original hash so that caller can keep writing + // and summing. + dup := d.clone() + hash := make([]byte, dup.outputLen) + dup.Read(hash) + return append(in, hash...) +} diff --git a/vendor/golang.org/x/crypto/sha3/sha3_test.go b/vendor/golang.org/x/crypto/sha3/sha3_test.go new file mode 100644 index 0000000..312e8f9 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/sha3_test.go @@ -0,0 +1,311 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// Tests include all the ShortMsgKATs provided by the Keccak team at +// https://github.com/gvanas/KeccakCodePackage +// +// They only include the zero-bit case of the bitwise testvectors +// published by NIST in the draft of FIPS-202. + +import ( + "bytes" + "compress/flate" + "encoding/hex" + "encoding/json" + "fmt" + "hash" + "os" + "strings" + "testing" +) + +const ( + testString = "brekeccakkeccak koax koax" + katFilename = "testdata/keccakKats.json.deflate" +) + +// Internal-use instances of SHAKE used to test against KATs. +func newHashShake128() hash.Hash { + return &state{rate: 168, dsbyte: 0x1f, outputLen: 512} +} +func newHashShake256() hash.Hash { + return &state{rate: 136, dsbyte: 0x1f, outputLen: 512} +} + +// testDigests contains functions returning hash.Hash instances +// with output-length equal to the KAT length for both SHA-3 and +// SHAKE instances. +var testDigests = map[string]func() hash.Hash{ + "SHA3-224": New224, + "SHA3-256": New256, + "SHA3-384": New384, + "SHA3-512": New512, + "SHAKE128": newHashShake128, + "SHAKE256": newHashShake256, +} + +// testShakes contains functions that return ShakeHash instances for +// testing the ShakeHash-specific interface. +var testShakes = map[string]func() ShakeHash{ + "SHAKE128": NewShake128, + "SHAKE256": NewShake256, +} + +// decodeHex converts a hex-encoded string into a raw byte string. +func decodeHex(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return b +} + +// structs used to marshal JSON test-cases. +type KeccakKats struct { + Kats map[string][]struct { + Digest string `json:"digest"` + Length int64 `json:"length"` + Message string `json:"message"` + } +} + +func testUnalignedAndGeneric(t *testing.T, testf func(impl string)) { + xorInOrig, copyOutOrig := xorIn, copyOut + xorIn, copyOut = xorInGeneric, copyOutGeneric + testf("generic") + if xorImplementationUnaligned != "generic" { + xorIn, copyOut = xorInUnaligned, copyOutUnaligned + testf("unaligned") + } + xorIn, copyOut = xorInOrig, copyOutOrig +} + +// TestKeccakKats tests the SHA-3 and Shake implementations against all the +// ShortMsgKATs from https://github.com/gvanas/KeccakCodePackage +// (The testvectors are stored in keccakKats.json.deflate due to their length.) +func TestKeccakKats(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + // Read the KATs. + deflated, err := os.Open(katFilename) + if err != nil { + t.Errorf("error opening %s: %s", katFilename, err) + } + file := flate.NewReader(deflated) + dec := json.NewDecoder(file) + var katSet KeccakKats + err = dec.Decode(&katSet) + if err != nil { + t.Errorf("error decoding KATs: %s", err) + } + + // Do the KATs. + for functionName, kats := range katSet.Kats { + d := testDigests[functionName]() + for _, kat := range kats { + d.Reset() + in, err := hex.DecodeString(kat.Message) + if err != nil { + t.Errorf("error decoding KAT: %s", err) + } + d.Write(in[:kat.Length/8]) + got := strings.ToUpper(hex.EncodeToString(d.Sum(nil))) + if got != kat.Digest { + t.Errorf("function=%s, implementation=%s, length=%d\nmessage:\n %s\ngot:\n %s\nwanted:\n %s", + functionName, impl, kat.Length, kat.Message, got, kat.Digest) + t.Logf("wanted %+v", kat) + t.FailNow() + } + continue + } + } + }) +} + +// TestUnalignedWrite tests that writing data in an arbitrary pattern with +// small input buffers. +func testUnalignedWrite(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + buf := sequentialBytes(0x10000) + for alg, df := range testDigests { + d := df() + d.Reset() + d.Write(buf) + want := d.Sum(nil) + d.Reset() + for i := 0; i < len(buf); { + // Cycle through offsets which make a 137 byte sequence. + // Because 137 is prime this sequence should exercise all corner cases. + offsets := [17]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1} + for _, j := range offsets { + if v := len(buf) - i; v < j { + j = v + } + d.Write(buf[i : i+j]) + i += j + } + } + got := d.Sum(nil) + if !bytes.Equal(got, want) { + t.Errorf("Unaligned writes, implementation=%s, alg=%s\ngot %q, want %q", impl, alg, got, want) + } + } + }) +} + +// TestAppend checks that appending works when reallocation is necessary. +func TestAppend(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + d := New224() + + for capacity := 2; capacity <= 66; capacity += 64 { + // The first time around the loop, Sum will have to reallocate. + // The second time, it will not. + buf := make([]byte, 2, capacity) + d.Reset() + d.Write([]byte{0xcc}) + buf = d.Sum(buf) + expected := "0000DF70ADC49B2E76EEE3A6931B93FA41841C3AF2CDF5B32A18B5478C39" + if got := strings.ToUpper(hex.EncodeToString(buf)); got != expected { + t.Errorf("got %s, want %s", got, expected) + } + } + }) +} + +// TestAppendNoRealloc tests that appending works when no reallocation is necessary. +func TestAppendNoRealloc(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + buf := make([]byte, 1, 200) + d := New224() + d.Write([]byte{0xcc}) + buf = d.Sum(buf) + expected := "00DF70ADC49B2E76EEE3A6931B93FA41841C3AF2CDF5B32A18B5478C39" + if got := strings.ToUpper(hex.EncodeToString(buf)); got != expected { + t.Errorf("%s: got %s, want %s", impl, got, expected) + } + }) +} + +// TestSqueezing checks that squeezing the full output a single time produces +// the same output as repeatedly squeezing the instance. +func TestSqueezing(t *testing.T) { + testUnalignedAndGeneric(t, func(impl string) { + for functionName, newShakeHash := range testShakes { + d0 := newShakeHash() + d0.Write([]byte(testString)) + ref := make([]byte, 32) + d0.Read(ref) + + d1 := newShakeHash() + d1.Write([]byte(testString)) + var multiple []byte + for _ = range ref { + one := make([]byte, 1) + d1.Read(one) + multiple = append(multiple, one...) + } + if !bytes.Equal(ref, multiple) { + t.Errorf("%s (%s): squeezing %d bytes one at a time failed", functionName, impl, len(ref)) + } + } + }) +} + +// sequentialBytes produces a buffer of size consecutive bytes 0x00, 0x01, ..., used for testing. +func sequentialBytes(size int) []byte { + result := make([]byte, size) + for i := range result { + result[i] = byte(i) + } + return result +} + +// BenchmarkPermutationFunction measures the speed of the permutation function +// with no input data. +func BenchmarkPermutationFunction(b *testing.B) { + b.SetBytes(int64(200)) + var lanes [25]uint64 + for i := 0; i < b.N; i++ { + keccakF1600(&lanes) + } +} + +// benchmarkHash tests the speed to hash num buffers of buflen each. +func benchmarkHash(b *testing.B, h hash.Hash, size, num int) { + b.StopTimer() + h.Reset() + data := sequentialBytes(size) + b.SetBytes(int64(size * num)) + b.StartTimer() + + var state []byte + for i := 0; i < b.N; i++ { + for j := 0; j < num; j++ { + h.Write(data) + } + state = h.Sum(state[:0]) + } + b.StopTimer() + h.Reset() +} + +// benchmarkShake is specialized to the Shake instances, which don't +// require a copy on reading output. +func benchmarkShake(b *testing.B, h ShakeHash, size, num int) { + b.StopTimer() + h.Reset() + data := sequentialBytes(size) + d := make([]byte, 32) + + b.SetBytes(int64(size * num)) + b.StartTimer() + + for i := 0; i < b.N; i++ { + h.Reset() + for j := 0; j < num; j++ { + h.Write(data) + } + h.Read(d) + } +} + +func BenchmarkSha3_512_MTU(b *testing.B) { benchmarkHash(b, New512(), 1350, 1) } +func BenchmarkSha3_384_MTU(b *testing.B) { benchmarkHash(b, New384(), 1350, 1) } +func BenchmarkSha3_256_MTU(b *testing.B) { benchmarkHash(b, New256(), 1350, 1) } +func BenchmarkSha3_224_MTU(b *testing.B) { benchmarkHash(b, New224(), 1350, 1) } + +func BenchmarkShake128_MTU(b *testing.B) { benchmarkShake(b, NewShake128(), 1350, 1) } +func BenchmarkShake256_MTU(b *testing.B) { benchmarkShake(b, NewShake256(), 1350, 1) } +func BenchmarkShake256_16x(b *testing.B) { benchmarkShake(b, NewShake256(), 16, 1024) } +func BenchmarkShake256_1MiB(b *testing.B) { benchmarkShake(b, NewShake256(), 1024, 1024) } + +func BenchmarkSha3_512_1MiB(b *testing.B) { benchmarkHash(b, New512(), 1024, 1024) } + +func Example_sum() { + buf := []byte("some data to hash") + // A hash needs to be 64 bytes long to have 256-bit collision resistance. + h := make([]byte, 64) + // Compute a 64-byte hash of buf and put it in h. + ShakeSum256(h, buf) + fmt.Printf("%x\n", h) + // Output: 0f65fe41fc353e52c55667bb9e2b27bfcc8476f2c413e9437d272ee3194a4e3146d05ec04a25d16b8f577c19b82d16b1424c3e022e783d2b4da98de3658d363d +} + +func Example_mac() { + k := []byte("this is a secret key; you should generate a strong random key that's at least 32 bytes long") + buf := []byte("and this is some data to authenticate") + // A MAC with 32 bytes of output has 256-bit security strength -- if you use at least a 32-byte-long key. + h := make([]byte, 32) + d := NewShake256() + // Write the key into the hash. + d.Write(k) + // Now write the data. + d.Write(buf) + // Read 32 bytes of output from the hash into h. + d.Read(h) + fmt.Printf("%x\n", h) + // Output: 78de2974bd2711d5549ffd32b753ef0f5fa80a0db2556db60f0987eb8a9218ff +} diff --git a/vendor/golang.org/x/crypto/sha3/shake.go b/vendor/golang.org/x/crypto/sha3/shake.go new file mode 100644 index 0000000..841f986 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/shake.go @@ -0,0 +1,60 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +// This file defines the ShakeHash interface, and provides +// functions for creating SHAKE instances, as well as utility +// functions for hashing bytes to arbitrary-length output. + +import ( + "io" +) + +// ShakeHash defines the interface to hash functions that +// support arbitrary-length output. +type ShakeHash interface { + // Write absorbs more data into the hash's state. It panics if input is + // written to it after output has been read from it. + io.Writer + + // Read reads more output from the hash; reading affects the hash's + // state. (ShakeHash.Read is thus very different from Hash.Sum) + // It never returns an error. + io.Reader + + // Clone returns a copy of the ShakeHash in its current state. + Clone() ShakeHash + + // Reset resets the ShakeHash to its initial state. + Reset() +} + +func (d *state) Clone() ShakeHash { + return d.clone() +} + +// NewShake128 creates a new SHAKE128 variable-output-length ShakeHash. +// Its generic security strength is 128 bits against all attacks if at +// least 32 bytes of its output are used. +func NewShake128() ShakeHash { return &state{rate: 168, dsbyte: 0x1f} } + +// NewShake256 creates a new SHAKE128 variable-output-length ShakeHash. +// Its generic security strength is 256 bits against all attacks if +// at least 64 bytes of its output are used. +func NewShake256() ShakeHash { return &state{rate: 136, dsbyte: 0x1f} } + +// ShakeSum128 writes an arbitrary-length digest of data into hash. +func ShakeSum128(hash, data []byte) { + h := NewShake128() + h.Write(data) + h.Read(hash) +} + +// ShakeSum256 writes an arbitrary-length digest of data into hash. +func ShakeSum256(hash, data []byte) { + h := NewShake256() + h.Write(data) + h.Read(hash) +} diff --git a/vendor/golang.org/x/crypto/sha3/testdata/keccakKats.json.deflate b/vendor/golang.org/x/crypto/sha3/testdata/keccakKats.json.deflate new file mode 100644 index 0000000000000000000000000000000000000000..62e85ae24236b46c09e5cfa84c71c69f5cc33cf6 GIT binary patch literal 521342 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%0DdSPIES;LF z+8sZyomb#0C9Jq)u2x6cYW7ssU38nCiMbmZ_ips1JnZMdYR~SLvm(8T;k1=BSX$vOLIgo);70zU8JaZ^INt17Kp7mAk3Mp38|4 zlY)0_G-;`+KZ;j){?M@%YRrVA#q_AQe1+?6OD)}Id(UI&L*Rnsn7Cr+lIIj!5BI@} zoTW42%A!`FYY_6#+3~cxJza=93P(Y|^LNA}xN>KX!b7&&vqyC=74{g^`q}TotG$N}&EXKHW1Rv^{Jlsu zt56{HGhB;zWMR4aI2crroB~wlS(V79g9@-v~{GPjJjDxE)Ogp{x1}R;h<=lpzzFoTXb=R3w0hyv<1T5)c;Y zmAb3Um4V`UH^6Dsx~^zG(|l$d!t4siT*9x|+f%ePNrW}i#9mWORz?|X2JbrMdrksu z4H&yQv6dDi@RUwDvIqCb=DcRJfI=k`8hX_p62G?~h=q|dgl{j5VAVYxx~8oXTL2yz zpqkcjW?87oxtwVki{D!vqt{9fROmqmO~r!Gktrwk9>tj9s@toD@Gfrw>}QYs>Fxxo zltvCiuB0+eIJ8wezf03nkSldJniYC2fxQq%7^Yclcgkn>O2)Q?pK3M0yZMpN(p<=U zHJClO?fgOn)RDl2-?9c7C*Dk<4kJkdZXlS8AV=;@*%DItjQ4}c!p0f_J(_0*Ohd$CK30Gfm zUUEx3^C`LAoL$|=Gyp8&W^v$Kk@T<47Db>9?eonjQtU6C~*VpDrSbO&5Mk=uYL8VMQ zU8kn@v2#Uq9VWk*l`V@W$Co6V@3#25Tp+9LR2bC|U5wKn^cHT)aK1gU$QDP99-!GP z550o*1`C_WN7|UFp<9@X0$a4bQ5;5ctxYa@K1l(-JMl^jP>{-D;nlS9Mhdy}%O0w@ z*?L0spc-r9;DWcLn0CaxbhW2k_VeGn#Lx1BTxEq-5_r@ zdjhH7yHvw<+q-4p(UImBx<74O?`X9$)k-*t%~Nt6&^w?6>sJW(#xR#O{4Sx%>SL7Xj zvPC;MTu+s8-puUKIH@;60FZMzvOWn7J|2ie)7=t*GNo9}c)C!%&9${dp5m$RY|4=3wM?v_2IO{)MOj3Y5XY3$RwObR3CXJ<;#9SsGr7N^e3 z#}D5#ah8e_;(E?>2{R}P^+{{!7p=gIun)m0*~GaR^g!^1r)I73@}xwSp37=+tS6ow zbpp&)3M)1BP~EJT@)hA2H26EjhhCy7H1Nu?vt_p_wjS01n3tlcxlX>(@qQ1&Tbiv( zEn9gC8CCLBidmS)L1$Ku-A10hwhIetir7%svK1#>YhPmVhf)z*qGl7MlPy;7h$h`$ zDgC8F5eJV=XvJj&e^6^7KY*lF4+qB7u$^PVYL6C}yFWP)P3X}Uo1YuPjo z)`7QAN>$@M&17qFiLE=Q_g=#@#+rh7@J#wKnH&{$Zu#pQ@=%#XI)zl$U7=@W_GW<< zU%r`LQeA?DY+x%0QdlUBBM1J5%9R`(0U*)1^{i)ysT#&-%i^^pRW0qwaXEC(U}Pqx59#etDQc z;LBrYGU?VQ{mvfsgF=xd5}~2mrclcRAoVwguBX-uM59?R60Sm*JgHF6cPF`YDOQ8=wbDyw9r(nQMKV{ zHxKrjn-!W4gz=D~h!)*hBVW_7 z#u1l1Ab`8vp>EmnxhfYhiz(@oe`W7(fkm=yIA^r;#c zVWxOxN+Oot`WLPU{DrHR<3{Do0_h=7NCQTg0ddFTo3fN1!i$Y-4je;8<*Mvy1BG!X zMHxoq=eY@@{TO;K%*_3C(FW0HMS#>rE*=@M(clew#o9VjxlJq4@p9 zE5pMwYfAU5$cOpFRH$SdonCA*-JaA7K+&-jNNgM@O(6;^)TnlFBPoDX!}E78di^ZR zn|)=Fmdr%lLl5I-1)ev&49RCockFYyJjz@F>@3rjh%Df|TJ}({ON{9rK9UC>OxF*` zj#W;ZM_p^f+-IL%iKTY6T6e!V2!EJeSU3&{B)s_W&JqM39z0xqCVjQT40SN7XF!-i zmO~shug#Yvbh>%@uEht=-ox6F>LZSJ2=Ygb)&|%rHHp*F0v>Fn1+0oESA1JyFfz~V z?R!Jh6Jm{qJNj@rThfoIo|B(>B|Opx5<27Mtdw*lD?mjuiN-b#7dm-&Pj$^LA45VO zzufW(8Br;$@v-wMzT`GNIcK8PCWiN--`x7};9HzBmT^L=zNJT*(t=UjeaiJ5ToA(K zE!_$rUu>?L;^-*ACP*LT>hJ?-Q-e!%j`v=by(oTZz2XtReE#@BYzT;p?f}7-6Nnhj zyRLf~^H7u1OZVjqYaoCy>kL^J&fF&{;@IxY9;%3R*MQ`wX(h851{mWHS~14J;g!)m z^fA8#wW-cgRu{YRPAR>s9$VNqK&69k6R4se>jD5YvHNxE`nvkfu6f`kQbC9-6k=Hm zOR&m7l%~~lpQzKFf{I|*^bU^cB7WHId-&X-3ME7fjX`D**h)vZ+jwAjr{A15JD(-5ugdRn;USaAYlvlt)e5Q5k#?hqH%k*ZBHHB>OUEH>G$CM35PW|hMdfvik2>n*CzHPIOntHj+)NEF4y<29@v@LrQBw-Ye-Wbn}!jPc$)>k zD;CjyN)uh_bqFuF0v=bUZ+cxt^ZBYV^}+}>$EI%>-+Q4*>kl^8GMWNZ{sQ)438rz` z3o7KLo8Tq(wJS3Qd3vSm-YMV%7@*qPbN(uiQ0aIEO=@h-AL(JrXwA!*C~@Ov;|5ox zoqq9Tm$*jxCFIN66(wzc8&TKxHufy_eiq1v*H* zS;K`xu80cSxxjmdYxQj1v8fR}7M#?3Sr&#Q^VInjOQyh4UDx?71zwS{lo@o5iFZM| zwqNoKk2mp3R1FZ*x9+iA3P>C%O&SfX^kcNDd97J@LA<5a#-}q-59-*R9nsdDAUiy0 z8-1>@L`{*D?4n6r9@C%-qYoi=+9fCEs36WOb$QW8Q*_!dxe-LnMbH+6JhiU?w1gdg zxP}!x*E2!(FgI>V&X*6y$CJ!bQ^F7iD&1gC=qMpjbEm)!LSGX|9Y<>t32p{0T@+_j z%!OC238hSv_==?0bKyD+w|5xe8&dLYmJJ?8?^E`wl!WJl*lxvFG1sx(iM8_r8;0FU z3W)I06zSy~v{49`kpV?~@-DRCHJA9qtEh%%#KC}g@k-bpmqelLk|u@_KW}#(#g@w) z#MoLF)64)q^sB{a;m8_;11hWypU1Bkz^O|CWJ)kK5wc_j(qotTo&aTGj8X&Zv+R-P zm^D91fl%XI-`oJzcsGs+3u6MOC`tqF3*|PG7kX_by#a7kiHxp8D+a7Iw9jNHz+Xz0zB@sfDM_B2GJMOYgXi z#bvStVh+onB8alEC{t14HtSn-V85ovX01h;@I->Q=RFI|(>(5KN<`JH^ilE_TLU{N zSU0fF3+!R8sX$qv&;<+_(RputW)VtC;hFjKu-7=juZecvll_y}Zo8pO9rh=DyHdN}vWp`eKrcjA!~jU$GEK#a924?*2XnDDE2r#RaCO1m$Jx3lDCVxVBQ zfSFfmLZC}i-Rsz(<;8MDjtYx@em!++%=~beIuAvFd_#K?LeE9lLB{w=7ETJ0fivPavHnFYq1pi1j9SwA>G5hQTez`<9Lll1@%gFptCKoUL5@H#5G|K48ua#5j z9N*iD<{EjUoz{;{fIV+B=Emu2Rut0VQ4G8+IUc1a zzAE!{a~Xo&VI5(BNGQ^SB|B=JL^|8RuldPCNHaz!A+gFDgLSU;1c>NVHQ~l5Z2A}u z`8hosYa;81Pu@H?U$sORb@f)2KHyl?%c4t7dZ-}JkoxU9xG4p}wIkQN_w>#?oVAM| z6S4RizwCbD7eu?srcSSWBeRlyP@+X@diCkh!$Uugjxw;|tHY`0GaR=HwCxzo5n)MY zLkV(!qwfOy@@$nI^oVrb<@xGu_=o1<9Sq;79i%zZk6=NT$=)F#sacQqy_=@a=BLGQVZ3%Rd9VP zZYZa@PHHuO!SneQh@@T;)gj|0%j%pfg~Y|NWnj%3N?xi!gxEU-rT5<54nH^O?aO3( zH$;f%^gL=D4i4TczC;RTW_Q*V$)!rx{2@WqL_Q{o^*zTv{hVXD>=LT6nKw8J#}sWI z78^m=TBlg+B_BiZ{Hm(9&ttolPeXkfl;;fQ{AsccwBdVCOMtwd#Dk&Ovb2koyvUJ0 zW;B+{?Wh9e-o2A#tdz!HaJj8;sI2I-I70D-w`Z$wDf;=Cqo(ul87`c#mt8+paLIk1 zpl}!Ev;Fh}b7HF@rL^DkuJTirn8%dFPrdIiWY>^k~30iWcy2CKEgZE}f($ z&8lR{_R+3w;Q?*JJob`jw0jE4lFsEkERC)qWN>{Ac5gdm0g~=E09QJ8-{dF&*~^2m zcej0c$k?y+-Micj(DwpuNx{W>uz3f=uZB(DIwcd5-_Kj+l4MBLMWt7c4qWpNO^GDD z?!|SAjkgahEp4+T@8L@-Eyx~Sb@NK8+#L(uSC7M=OOCC(m~MhEvTJy)v(y`7f6uV^ zT}C|_b4dX5O6P+18%HFHC({tFv7j<+6GCqDepKstb$Xo)Pv@(h!pt$)d?ne#-qJv~ z^Pt#38-b@$Vly-h*N>Ul1+dDTW|{y+Lx~zMd_CSd!5{}JUo@*UV@CL0iDF-m)!RpQ z=Ao!hF=!OUCmqtlP2Ow3rkUpuNR8Qt{2r9c#_I(+qUSl#m>>~S`Y@}buht+tMP(zg zXP9{2`ONK1!@PMYOCnd{Tc4yL@)gVN!vHOCZXRh~c#HS%#2@aS@!96~#3- zzwO5)hcw;YaG4=RtLNM6%_xe*9dmV;W=g!0oFVcKQB9n=UmmQZ_FnhfO@1)e_Mi`+ z+-W{uVOoJBxvr^u34-^c3&@Y4eDqw1uxxr3U~E~+TqyLpfM?Nam5;laP^Weni>#t3 zH{E5cuXs?+&Q;EJy90U#l|(q0_}eJ29Hj>u?6*So!us5YV3@(f!DOEr-$1a&;7wK0 z6EMLeT=rVyqXJ$_WGB}fk_?EDk_<7_QOgq5GJnCwI_dmK%U|EI(>cvWdDq;Vpa>c` z5Hgu(dGC6-mk=}9VRDS6w5!=XIshe?-eA8Z8BpuUI9o-`0VyBmV8~ITX153AWFF}+ z^5PBH6C>%`jcKNb>t?TXavq{N$OGgbggTtIt&fO=86NY$w;njym+Lb_ZUiJ5~f+xYBvqT!!XC z(NKn+*+b>UVtWa#hTGkn%F}B1QeG0SU|Dcpvpme@WAyMPfp$=$MS4YcNxo$VHe7tG zZ%kbEYQ`Rva0Z2G*a_nmQ-E_0ziEx`wb$BcB(K>q0Vv0I5pTgvgp;dSvXeK)%iGr( z%vBo@%Q*T?E_yyufypglG0=az>y6@8Aj?NSZ3swvqK%^19<*mG) z(gz}>IMz{AFKPm^`;icI)zl<4-?)oT^)A}OM@edd;gjbNz%oi&P!MxDOtmd2DTLs; zGxOHol9TAwd&8u_FS^oR23za`w7$Qn6*x8Tr7&pcO~k3mdlB*^HE1q`)E+~=U_~{B zN~g+kl?#G+G`%VVhftD-^~}$-YC(FueNk78V1?|FUfnZEIqr?ZL6%5HMBa5jelatk ztN;wO^vs`FSaGe|UTkAV~a(UR04A05A z(YPLmxeFA~vWz)G^KB9FzFBCGUX22s+l^kzTF)zjSPBfzE^Q&*Yz`R75cH9>#m2Ng zd)z@{F{pIpN?Qv?v^2f)=5C!+C|RPSaUj(!84C_GSh6H+Yh0M~rZ6w88}|X(Ho46y zZQ?p^U>`q{A)uKorG;39;LCbsJ$*}+dZy5HXJZkR?@CP??98U5ax_4+YF-K?B=MYb z+RN(K`x*})uC2D|!4-j>j!p@;50W3Xml`|)1sW?zA(Y2L-9fv2=yEIu46?#qA$_gQan^|2=hD^*=)?E$0G5$Z87Us6zh}XD1cr|``9XmZ;O>}n z(^XywXoy|K*`ja7O@ST=GDdaVsAW&Z%Q$nPm?(M7xv%-U@0vlMfU_-;*AjHRA~Jvpo2SVTWrU#ANclf~AqC_h!$nQeL{F1((C#?zu?K6CmAX$7~byu5} zut_o-7jk*;G@s-Q(M!b{V3v4F(cq-;oUM+^4lEf_rm@}f;LL?Z-xm5^`V#L#EJfJ! zyWzvN0F3M9WpOIdw~hCdnF?Ia>8>J%A&O6f(ziA;`$#+yrKdRaleG~M%`8pFXR@P-hEHHUIvbaFVBmYwXnejTw(_x6JYI-O2*n+3`C; zR<0QG-txkzdwlR3I|irC(r?+M9tR1oWmliP! ziqz!`Hhol#+r_(4EvwO0#=0a(;W{trwH=FGtsHt_8v@qN%e3b$?Oct)CT~Iw%kS;3 zdV^pJS@46@`a_2~`(wO50Q?`fdEm6CbYLhKx8uhkE*t-ahkl;2|MxzUWQ8;AyH z&*amQ#PX2LMBPqB;C51XdDLFFXaObDal9?JA(cDN7Khww4S^pXuB`7ONHx>WvoS7Q zk#MfVhPc(lOMH8;LN7OWG$}Cz5()pFZ!taOskm_(96ew+FMN+H6JpQ96BO(o@neKN z;6hI4fW~-d0Uk>iBjyFFbwy2<$BRKxQMN4-EMo~^LFXzE zxMu*prR0Lh0@03YbB#pxUeB8|#e0@d?4`*`qh``Gtw#n)Dnzb$gi+;Bqx(;SXLAIA5YECWm4G`pMR9KdeQUgJ3!Ci<2bGY@B(A_u48hK|q6)PoMfO z&#NWQ8SRxa*hfBh3l99mtzQtn8P!w|xXTgOi^A6jKFjQn$$Wt)=>lg#NNgdmnM*38 z?ohh*Z1;h(lL61dl|#kLS(Rr`yhvz3p!V1+l2|)UMyYp$fQ%}d3-sp2P5R{UV7~&) zZW#fih+&=?cszs-w0POEKxu6~1#rsOX2D7F3Tqme`U#_ME9ZMbHxiKlD_bn0G+6GmjM`3azckqKf@%IQhmG*nS_3s5)so=X-tOtFS;=^O>aKVEt9uUxn z<4`z9s}AndiohXJ2_ybSTsFi!3vwI!o;Eu_*%I1`EUxOcl&n>Y4$GyfeX`z-!&0C# z`T7`LRa&fTm#d2Hk~`1*cvnSlo1WeBZdG0q=;9vLz%J(+*1$&5318r3&f#s{7(9B8 zqfg7;o32-9dWF37@(xdZ=S}sQbW}v^k^Vj7UMo^O$@CX!QA4Wsgg7^=B`#HS_zVL< zoph8&bQcIPREAZ;&4L`<1}uVoxZd4rmq-;Mtphn&LdEo2YbSMr^%Dzz9{4LU%_Omx z-|xhFy}q*y+o}+grwd3H*zy*k008!0`5Xo~<=Z@IXec3e)Kaao0`JmNA+Uk5cIHQU z2q{8yOmbax87fA;M-|3b5}>kMg&>A8B#%>^pQzv%zYe^_kVhhCW_@}=^Bzl9-`Y`P}Ux60xYcL)(?y%}5c~E8kUJeU}gfG!Nf1^=wLx_d4jI z#HipXss$z{)okFVJbSvS#R*}xYjCg^{AP$1o%eDR&?{z_nlGo~t!2DrAbTb8T-j0+ zVIC$t;n@aHc=4=bCEM_Xrr-ol2UJm`;jQ~)(>+1juBAbU5kN_-Q-w`u;-{dH-T7#p zRgu4J?yhW{0et6nEhi3}&_$YKMY{Ewra)exOo2M6z_y|h)#^wZv>+o65sAxL~>lM}s z>L~3xRb~VQ!X9^{m%+Vr4JXsrk zuLJOTt~_|}(UiRg3wm5^EPg$EpY?Y?*#q)KLNy~*Es<+p7 zy1I(#M;32`RV5Q2i?Td&YMZj{K5L;GsUA#AAGmEu8I5VfEA#a`@U|Rdf`(3^c33i= zs8)LNaG%L7BR?$$rM)&nVHK07FR%iKUvJx96h;Lg`YQuh-K1tl1;TtU%E^YFl0Jtq z%Jh7rTEmMNMMJ`yOnO)h-J(1N3bKG=_5y4sl-bY_*0vr$Y3;TUtkoPQuw!5sjdx<( z#W-rl=?u#uoj5(Uc!+e0=ZjAciRB6cBxZ6MNWhiaqV`(&Q3;fnC-;H_=R-0LtGV|c z&g+~_9F{mySvbnZ_vkSyoFk&C&cpO*|(*m-`aQJm3N8sou^oK4THD z#S)i+*U}=B9sCsM$aT2pMO&A{vz=F@R$%>Dm6SOKx}{)-`iSssxgT>R*G7cP(8#LQ z9Rgv|MJ<^UF*32}3Pc5 ztjOf0f)?cIAh-pdJ|uLN(gEdOq-EBIGK_T5LS>ugN_>heAQSa6kkRDXLLtI{s|h@k zY)=g3@_brZft88KIK8ffYKgl%nShg8Z`)1sLZ6a)PlU{b!(1twHdNP)^8;4O6s@aG z4SX=ePZ^fpO!GvsMhaodd(#=~iDCGlUxvVY@ixTMtfww6-gRmalD`h!ecrYk)OKKw zxuMkR2?ofct@QG}=ZT3ys6mqaC?gElPM>N{8Q@;?Fas~p91C5fR^;}gXDYU6XOTED z#PS+rK`&bCojdM3fjD`3e(Ff-YnYq*Oik@%IOZO`XcaTTh*EFo=P@{(Oqz`_Ou%}h zxeGMBaO{<|*W2e0A6QU?I^ZgoqlFQ2(oRYdg^EDp+vjVO_w?c@tvniMAVVZzsmvIq zUp}eWEsxrW_udo15%MRuPbYBb2;`LX8eTVFJlExMl+*G;@{Gop$M9U`dET(23hcS- zyqU5BGa{j~w{gs4PShR2BDaX%ItcJ?iSGfIztuKn3?V!0ZCU9QI}1b+9u$-W(iM9X z!*z0J@{~<-kZa00p!dmJ+_^4zKGozH!#np#M*FeFQNIFOwQqL)i`{vv(iPN~7OHfb z$MHr(6Ri6lW#)A69q8IypE$jMAc$2pl+g`yb8n8l3UDhl*uIzPIy5|(pppxF?LmA` zWz@7@S1i?bpx=ZJ6u;T^XJj22uTHd+idG`0(nUjsH5~=it}V^sg;ER$`=Hob!8qw) zov$N3t1Nqj59ub8M+lAi!hK3_4p=w_ZaQDQ(HCtLd4{^tUX|>B!Fwn#?~KFy=^NlX zuPqGR7wkf1al-1jKJX5>9#+FM1gh)dwK0f%Zt2lBgT&W>K_#wdIc6gLG<{^QOJ`g} z4JjNz_nyU2R}E6PGzhvHTE1|R;KR7$Y^7Fvy{+?%5t$6OAFVe8Yd?6Lo88yX%UH(5 zEzp@Fq;?7-+03g)fHM^PW*>nYd5I0NW>rT_>!YL>nkn@-Z20hkuc!l35>Ifh?=mYD zp^dEVd_5^Kt9$gxu*PTS9zl{EWehH`xqFT7VzobZ<41Qn50l zY$xqgrB0jczI~2jhf+_~i3m@n^is$VsR;y`E;&s1V9%`sbu~%KF zYt3wr@)_Lh%j0Pl8laz4wQ%yn5odO(^D-vSgizzQopzh=3B;pk2RqoQy-JBhnAdIq z1O=UhG4NKhZ;vEsP6G8d!%%pY*d?FuCC?GOT?a2D4Fcs>h@;qq)=&_QMIa=~Hr|Mg zpnKMs5RegMvsn@T;4K@wEd_!pq>cioy*3|J!k04CKDAu)Ghu5 zSY9a6*cqS@JHJ&IS6 z&6T+}C#`D)xM*i+S)z;7Ic!?Xq2M_*0uN$s*oVev`BFUl^=;nnvNvSxwmXOK+iSrS zo(C{aJ~Q1F0|hz*gh|mST~Z{Vfl^zZh!I|1?z(VMmJS;>foTIs1{Z0D_7}awjL(OJ zF>ZRRjNd~ZQk$1W{-Wmr?G)%N>}^T;v%?tcuJyzt3L<`X&07*!MQ@iR51<;W-nAaT z5#o_@X3I;q2~}n|B^Z`|y;kgW-DB#@Pjh#rNjCbp-;E;&M=2IV3U|7ilT=cQtoBkKv}{z* zM(w()lV&}~@AnE2fsr1owo={)WVHg z)8<)t=_xQetXm*94OhUv$yd9)l9(zFAG%1wo1*J}aT-3zLw*ze6dj$^mWZ-C-M8S8 z9;?wbK9D>xS|}4Wme5pG2AqqOH_RjNQYg}zyw^t3u*2NJNJcQl6IAdiJf41IpodS{ zQ$34Sf5{jbxP&|A!THs%nd>FKA$!iAuS&$Lx+LNO7n& zsj)7Pt6Ommr-3S4^MQw3`w$dV#Li#3T_G5h`U{R&o~N)hPZf*>+6b~djZQx4CH|sU zn+p;QL+q^>v8&>S-_|}-F}z6ZbbRylxjf7zFLs5a*DqgsHZ}>s<5Y#EF3D26{(=@zcG%`i8Htw1K zi7&hzdl9SGOq{392W}|E5S7C8tgpJc$dV?^5fA(F{MHlKsEj%q`WNi+n3z|r?6#9H zo9#_Mk|j2~8{~U7$+`MGsgM`pEoH~j1*g|?6!{b*^U|KD+GC_5gJ zOd|YJFc7NimC!~(%8^v20pyzna~iHs`F*|Gdb!9;_&oYnXK8~&7?&H9!Q*q1p><(+HmbyWr0*gsdN(1XG%o3qLZw8 z>BeASho;|AhL>dTbbd#e2V2-yNKZ> ztfYe=cOXUa9(dZM#|uA!vZn)#`0n|>Er(Zmpa&d7V2h>uIxz4>rDpJ6m~x=tBP&vl zvs~&pH}j17HL^No7Zj4UYLoLl#*xbD z>*x51@1rk#1-V4y1xCg&% zu{!|KfFp`Lro4BhJ@V8j%dVtezUo@GTD*BlWZt=+a--PD@14yPP?H%#hi9yv(<#RI z-~b5#h+7{+7Iage@ew^%jeEQS5PP&0?DR&d9x~W*CF^10ZZj(5I**x=mBbord8%RU z#nS_+bpn&P{EJ^{a)eha)a2r^t>v5Yw%9Z>1N+L;PuwJx0BiZ+T}NVP`ifH`-nDkz za96&QeMcx9g4}h^2BJQfw7o=(j^!###ODXrnVjH()2Xn#W8F9OQpp~AP~zUB5foIZ zZg!Ul%Nh5R7(n8Zx5#RC-h6jqu@T{Ex|RhOI4dafVt@@ngrK_$SXQhs;y(T zbUVg#eH*uUWpv5)4#)R}*udQ6-#f+an%Q}jH*4caEb5zXBu&+r{CzivlutuL= zlW7+K0EF~0W97Rf_*-q?nbx#V5w2>Z**7?FJ% zq9S+e7DINYeS7f8O?lkTTu-Zwdl-tn1!|DVt5-5Zlg&1P%3#pmdv|Dhv<9VHRQ1a*wKo@SfwLlM(Xqh_NPvh=cNQtg!P4Gt(I(*OAPy20D%qvr?A5ig}nuF?9tx z35s%c%i$UmKA-$DeDUi~A|~F6D6SLM045tf*J`@sy&BFPg%KxQ=gc)82ScE6gp(!L z^Fvd?90(sE@QSc?2j0_b8_j=yev z6qFBTN<`iRX(gY5KxCD$zW|0ze2TiU3(fuHmMRDlz15JVoW)nsf*-CU%cN5z?TwWC z!vZyiVE-l5RmyubG~}wNusIj63y_7OoayB1Z8A)sHR>IO6pFd)qd4Nq^DUX58UffF1 zx;{g&?p~}nv|J6(GE2DL`P_ zlHxAgGhx}XXK@En${bJ6x5G>}4$%`sd~I3Xnn0L%IUhE7rDL2rnF{X?vEXSEF`Z*( zy^P$sG~{P1+2mf89RgBd`+%ya5aOm|sZ1U}%2ol&cX_cbTsMimFG3Ung$UvG2rT5!0L*Ri$d0HZ*n-ME9AKgWy5BR0J6em zm#V%-eDx0H*5@2lJL+Cobk&>c59F_$bHt-l#8jPD?wkke{hnU{ABhl^4&4RuTJ=Eq|*jcAqcm6i(r312y zzyo^-Au#Ybm0UYs;`Vw_tUi~PeO0>YX$@C8`X22gSi^4KVx^>1TB=*{gYKMot5`cF zGf?K5MxLdr2eu%lgB~4J7gq$+$&pR-LUh=k%hF#2FIi!~O0sG8BdAc2=DS-sMYs!y zVy7W|{kS*|t_wJW?4YoDs5MJFs#@2kH1up4FVRf~JXMx(fF;mixjIDFRzfoY+fN9| z*2UFrx^!We;b8Yjx0!&Eiys?>IWN|k3C$3!sp@ZS2=8dxC> zGl8$NCNtg|69sJCnLlGLI8n0R#R{C|hjY_oxzjzhz`Hp*t$VT20{HOuS*d~ToF@?0 zo2V{0rL6bx__afE+?$acw*KWVsaR4FZu^PX5Mt5QftF5hIpxEE8ptAV>%6{7=0^zB z`9O^T<-JiJ=IQm+M@_)p+3H2?2RA*!weL7Sjk4{`ozo?+Ji`F>Y*8L z?P#4d`W_^bfL9etF;2tLuA~P9N>0(h>5}gd*shn#Q$Q)xmkNm)+7T?d#fqx<61MV{ zTLWF;Bwl2q#vZ41PpGXU*7+MU@^Y_|K1#W51p<85s=mudxVbuH5(mOrC=wUMxJ#wd z_cQ~{2-2o|RpjzYRvvH8qhw>rV5`*TA|Qqtyk__$SoDkFPSbgbBq8Z&>ZE7@>g;MF zZ1dJnpotJJ@&dGBtyiF!70~t8fW<1o>)sK zjcve7fUNUWbL+Xh+KJhyy$#XG_RP&^8CQlc5);!#+SnB&efEmNTw`lz3`bE?Ch2kL zATDB76_OT#UP79M?b2vA_OgoaWw*WHS&U3e^6r{_)`tW*o94w$hh+1@vSg>gQ$WtB4N6hXbHQ=(#hK#N zh%wGV&j62P07^rugvr_z#6(0~nLXmCx<^!{@5oFq()=aq>wPHx23+A@1*R&&L&{Eg zn@#<^QmLck5(*TO&%5DzIv0nLAHAbdj`WRl@GGFH3(`rtdD_a`-M|5{^uUK2o?3#& zjPlal+>WJWFb1M zV4GJ^9QK5D-K8QL_HAO15uaC|=->bhX1?-?Vz*FUv-cjT%!NV2pd57%EyHJRcSlNt@t!i7P&B|G(sb!>&Cf){2L}06@ zw9C(T^pe#Wyc2lYTiz46LL{g47{+|ER}b5v(5sG@ym!US!Yhn4$$(hy$z{r$B$=*Q zW=Urn=Ql}s7$fMauSPT^qVbRmYf*H^T{QCn^~sp3FO@alEMVS zt6FbFz{VWW>@hlwspy!gSyC$k!?fj!ItF_*41(6LQY{?7N`j~_zvp1(FNDvuT&C5S z5J*OO<3Z@)7*bi~*%bg9>H*DrMX1o!?$i%q4_}IDVbeU=^E2P`p<@*QLx{|Ycg9_@ zHdcGqApz@ouSl&u8fA)})*@uUuAcF0tG{ZZz^PWN*z5h1`= zi?-N~{YbkP?@snn5r<3C5)u{|1yBuLYcB|!X4lb>VIX-H_LGaZ=R^T1DohE?MIlMr zF3XkY<-+W!2bIkxZy2Pb7btHR>LHbEdk#{9)x1Ho<7&&>(}kd+*EY;@UW8K;9jWUW zd67387+E5)n5qn+HWWHlrb;Cvn&p&2S*O1fYq{IR!3nL4EehoBv4=|O zrC2V6IDn8>p0~5U8Ortw95#H*k`4garEYa`ZFOm;F#y-B6{cRQG@Yziu2DfJSC%eq zGn~@Bx2|%)5`L<;$nfG8Ud!CGco>Y28ShOgj!~?L`VG z=9D7=zls{b+bCY)sNL8H96tpQWLUCyhS4hO*%2}$o=Gv;(nc?G>2&gCLAA#Nz%EM= zibf_}DI?6N3wSuF+}eskSI?U$+J)G-D`zx_yFD3Dm8Q_%*mYb3kavKHu>)Gola*S(H6!r@EmH7j#S2#=?O$DKSGLFw3ad!3YnLH3_vny&2sIyo)Yxd!wl_(iw z3r~cQi5hr&#yx1biZb(@g(Ff}>ojsmUt>8-ft1widh`T)0k;q;&M8( zA)MF(N=!gq(pxP`*gR?*Mlb6eR`~fv?ZBi@i`ly(Z0@6ni>R+2jGCr;CGc5m-AZPX zgQZY9FAkE6Y+X^!G56yfXQg;!xUWD4t#KHEM%v8e9t^&73TThHbJxN_QhzL{H!r)L zy~2Hmn-5s)MJLqJp(VI!$)-7>!fc%+8AQ$VYdEcYgG;Vu`8Xx==D18Ga*N)B2^Q08 zggO}{w%tN17C~(yw^4fz4x(`zXi@%>>;MexF?riV%?{(K3157+W_WGKJ6LAXuhoo` z@@YzE4VJ~GeuM)Np;%q?`&blgBILKI)Xf^NVIZSFh-%)@atb~GHY5(~cc zhuIyR#6qUg{s>;tIZIx+wPV!)Wd-rcih&xy-ubMJSr319*3O+@Hh?COlC z^oo=>2wre5dlmOfsS3TT_Jfso50)rIbF!LD<;1Q`aglAi&P7e$o6;3%PdpEP2pPO{ z4m#tVny|>&aA_TvtF5^zhu-nhg<^H3L|&c9k<`*UWVln!vqP5KuB|uBmalnPn^1_m zMS4c*gfJ^8z0#;WEJB;3itJ%{Sz*WiMKM^9FB}HykV+bR`es)<7O)HeUn1~j;yx3q z$is(E?G8Ha^i8p{L#Z``Y@=>b5Uql$0eVH&1YR!?`&WVwRV4TRmT#-QQS?jrgcs~?+Pbff*dO3XI2j%k(5AUapWDioJZyo&8y8FWNLAF zsER_46Y$4})vEdnzVYBRuL;reR z(ky(vV>inniL)bdE(+@N6eBl-%wv5Y)~Zc49RuCW_S?4ta+Uc)t4rrvTyZ&UPfTwa zQ1*;pHIKy8^Aut$Q?-1AiYzZ`c&=_N?o|h@b}u-uXKF`IqctrW@bc1@TTJn2TB;Iu z80`x8iqk!Y*QRyvRw3t*hj5giBkOjM+AAJ1bCSbKL21{=(oGIGstKU^+}OQ( zBPqfvja3TMM-uM5(T{)^JQH@`ozBkK6FGSM9=#g| z*Tn#SQ+T#x7kPOd>SYh#ts02h>wfs$;>iUyX&y2RWma32>4oWbQR?Xo4y?*dgqc} zRXpFI6x)#3<&cG9q-Oe@+IVV8E_YM(n_~Z>n3shrnUHL{Lv)YN@5zjM7m-}qE2*}{ zZAlNWN{WY~Z;dbSUa39gBgSox<1|p*R|AAE*GVhuIUFAHWtJE0&5Yb&700vZ@)G8>hAd9!T5N6|?&y9bQH>I*U>C}Q31(2$`RP}R+2wtYv~sx`;1EHO-W;mQc- z{?Z|(x*s*c0h?Dvh9#0-%Z0GuG8_dZD{?#-5N;RD9>D0nzc5Da%m8X&CLXy;=6X4k zk00soozmzN-nSNXyf9v&Zg@QdJjuHyPs}lX}M@G+H(Uo zd1*Tj&xvaNEid>{zI!u5!!_p+FgXDUC>!XUkATA1!$wGsUh?J*rl^!DBaWB(oUrFm z?LL2SnfcaphNfoOf}ZBk9Fj9Ck(+Jtu7@P#g+35k!^b0x_^2G4r%Tx6d;2DKe@zeS>!CJRGY-?Pl6G-*3Cubff2 zMXkt%_L7wH3gS3cpnQtVcL-%~@!9<@e%p3${ zT_O?8uKX7FTAA9~&iFCTa`=y_a3O1(uC z;vKpi*Rpr-*sG-isqZ1VHitiuGVAuU5x&PS;<9mgeCeWwb2d2_ zk$SfqmM<$JPz_I%0z-hq9XO2LTrIVkwG_bZvLoT>x_w^}Z`d+DmWo$$HctbcV%~Z8 zaMe>rESGC~HvG#(}OP}_7&2b@qt^w!!Twx8jsE{pEdK2oM*WS2g z=gCvzC!5<{Lib$Js9ERkS3|62&=Cyd^ydsC=c)5V&IO$12h$2p=tX>0Ntd`(wSrY(7xGP+it#=gGHvV^dRiZ0b)m^BMh1wnCK zEqJk}$E=SG-BatasEj>7%pje7wWxi%HF{@f?l+ay5Q-@N2={T564>@)BGK9#xlog& z>!M{hyaslYtEs5pHEz{St>KLFtJEr5>OR)N#<`f*1~Xer45!yPBB|`wt!aNCYf<$V1Jk&gp-b6%XYRz^h z;PTb&d#=#-gJepWk*0!dj>bcWJkm`9pIOk`sXiLYCE#4$bSccpp{69Gn94W0dRa;u zv zO;}{BXKI$g7r3?WkY6d+0sv4$J3Z zm9& z+=A1Kpo_F7F~UXgu-g~bG;2=YB)+HMPna_c+b$)q%Zlv!*(%T6I+^>sgy&Jd=Axz@ z^g{bBHZCeInW;SQTP|G!m3LyG2akhd6M%xWp{{hIAG%mo?Fn{5@MUURM{7Nv2|}kO z%w!9C9pIM$igvMquv>Rj`!uw)YS?3p1i={&OqRGEPhSd|QF+Nd3T-=skm4PCbTZw0 z`Y4|rFvc_AITf5EH$aT!!!77g%(bAgDZFj>N~Bt3AyD@0*XCmn_<@wkyuwUnr)raC|eaY@Pdr#{@K4p?-ihaYC>$vTNC0@FVEmzSo z@giO~_G1h}3$w6!(Jl1mQMhfvm^7>aozNcM)tg303{!1FG$aCqOrv?5w{~-plj^7U@c4#AFy8)vSScG|ADA+qhNQ zA5^RN({sC6F$beuwNz+&sabG93!fk(ea^=^(p1{DRxrAJBG_QFIyVaDE=aO5U5Td*&1n++ec8N zZjif!_G%iTfJq+~F7)lxqgjby+j_!4SDS@mpj55vvCx(4UagJ+C3uI&vP0t~u~!NW&oY)K{9YbLbdfJ_YQ5TuS%);B z_A+RAQIE<-UwcsM6qepf#*#i?f6U95&_^f)Pn+k6SE9jV-wp1k<_aMsOnhe%Uem;9;z*SFyfh%p)ssU!og)unvy+qKY zN|ShS4^F|NrT|5KS@}t));aX%y@PS{6on2A(nmn)n;`&Y_%u4i?b*0gzq;anER<~B zk(E3eVvrk2%+c88+{t!C%7#quAWK+KS-k1(!#OyIi+o$p3f6eChKsBQXG%Z?I_L&4 zCujKuvm^))>$_K=zHlDU?@e4(aX(CyU;zh1>u%^NLyRcvQ?R@_*-w%QzDVwKQ7Wt* z4-Xo(naq2$Tja#bq8mn!bgHMM?_H5cb^@;Yq>O}z?n_0LCthG!4|p`|4WI{etpLZ! z!cvuEWS?3pfFdGzteP4=8lxGP+L^ARQRdJo=ne{zEN-R8hr3C9G=l8!XbECjJnBL) zE?cm8Kye)qNmfD5Azqb6ST*V!5tPtd&a%E-zlsbv4F`7Ug(iv{R1=1%G504tc@LEs z`WEuyZT*EZ#i2+HX1|q_(R=DbtCyg;Mo{tM-Y)VT)f4WhU`##*fB0@tg^XR7r={W1 z0GU&mg>^|_Io!j5Z8*FHKerT$Euti1Tf+mn;=&z9vRcAed*xzukxTeQ$D3HLUJlQ` zm&Q+?&bZK#8A-@c=g7JQc_~KtgH7|%0U})+>gy+Yj9VoEgtClEfGIu^kj{=I#Fm); zF!aHc-q^_<_Yp^2@L>Zm=5?5IQ_WGqWoKBujPnz4R06XrLgC08fskxC8e;~P3aIE# zb5sVxS1$;PoLh5s!_A&*Hfu;>RNJiky;a0_s~ouI4~l!vc;2GH*bA5_V0b~Vy_5~N zWc0<70nh8FaJ1S$6L zBm-ONuu=p>1A8VTd2oBkX1A#{&tDVS(iHbdl*_WDW3ni%3F9<5^3e}UAn){qjYfX1 zsqBx{!>4AS(M~i(G9=~cLbfp0LRMut7tLtWO?GTnmABi8&xBN^O@%VNiW(y0r^YYL z1TiLUtGt@^Dk%lpgoXFH_A`!wr-7#ivIaSZ3L#w&9%Zlpy@wO^UUTvz zHGhMhxmbK)ps;sgzHF>@(6$eH6oH{ew#itF!u4(0A-t_gMQ*0Rbdb{Ic0#5HqMRUN z)rLR|HE)NWVUW-nKN;mAgk8$K7MI$9cgeUI>Md|1BTp?z=PW_?B~u^Rs_0$Nti6J# zeO?$I-q7_}#2Ol@X}p{_5FPVat=c4G@Gq9z-uPvf3>1$l)Cf2&bHC0GTSaBBg#<1{ zHR9FNQZaQ_RUO|Qqd}5cg0I=7^z+#J~y~B8kK>Ktp!h)vYZ6rfm zM0Ey|Qm`+Yf`H1^>GLawM6qJ&vp`IfH!uV;=WM7chDfzp%%=o+XOcM!l~*ai#?rU+ zmRDib_C-7;${l-&Gn%YY!}4ZcOQj9<+&i2X&otGV-ipXc_K{RCuE;$w5~|2-YRDJu zE^W(v1l;9>4f8CCW?vfKOALrYEJMd;s*N(wgn>k1=6eqSOoXei8^&+kM)~1YyteM= zrj{b}V4kpuLd|oS^5%w}j2Ch0=fcWNs*PnKUSzN)Wr2?~0oSGvS8qxua%F(J*L!{0 zflW3Pt(z$W8+;;9R}io~Tl{fOQLBdAF{LS|A=hrU`aBUkHnENkD@!lF8yt z)%hhvE7>GSE?->7>;^@H4nQz!Lr&v_TaS_?L3Sl~yPeS~f~)mQ%OKB}@GR7H{g%WK zEQ?MW9@G#!>>G4_qO^De7C;W~y`31Dk(B;q`RNzSFg_5ugK-G>LZesKwt~)I5=5?P z?ZY-igVw3bu-zlqog^rKPy8fe z2$-u5#NTE4*e`OokP?di=t0Y#uP~FEz~)gmFU7o?foE%v$MrSUgn1M<@qg&9w?XCR>^`4b&21kN0XH(w59D_Zc|w6^UodmD7k1IGSbav55lO-N|1tbAlZ0 zVdlskKTxLFhQk16FuPK&TbyozGwyf5vXRkmmh+W_zT7jz0uDqhD^`XjD6DkevAo?! zB8J)b*!CgbdyT_{M>whvRGKGeYS3I-CL2bCd#5m2^3jqb%Z4Av?2=2pH;dfw=^%u_ zc0UN!vRGGqcUxsZ*A0-^Oae2{C9C9FlJf?F4{GUwA1}f?YS~z6x9AcGk;f>wuOlDo zfKIQxvI8t8o@Y{`e5?LqaPR<Rfa|!nZn2UVD@5$T6## z$Eh%^D7B+Dh!%Q^_WDg9zJO=-aJM6!f#<*^teRBkwM}eAT4$YcTrn@h80)~sTuFP? z7RkOtMH+bXwxCgXmWvF$`8+*LY0>bES)|dwRQxuA(H!OL9d&+;zS{2 zUpI#Gv*+YC2_WQj@7n3&1Txj}=tOSOAv%^`zLZ$OruE=6^k;N&iK1L=S?~BA7+a$G zi;ef5MyZ*DyhT$!p_Y3X`(AsIsQDSaNBdrPhPC=(EQqf`KV*bCp0x!>jZp|KE8b)$ z!!32b-MID=#eTO-)9Y^_sF10)kFK z^B2th=xN!TEmNhscW*Mq51-W&uT%t4*fSO}myFt*f+q>88(_c}6g8n9y$8LoCMElr z9jdo{AO@izJjVrKq7)40`XzFnwwWM~YTIC=1P5)_jlj#(prxRE|K!2XAow*V{~5A12RIl zb&-l=5SO=Fz8G;}c(84bwLaGr8;{(N=oH`qu}Lqg;Jhw1OwcEl`6l*!p9bCUaR7&F^5^i@GE_JC)K ztBp?}v}zFH+9Q5XL0L~l-e4z4I~U#i2kb z*dfhR92D5VkWPWW1;m+^za&8F%Uk*rVD_vFcNlOiNN1vER;3RP_pp)I(G!Teo zS*!wMx_5-5_VV#YZUklBalW^AtJu_*Jp-lkOsvCg8c$5h&~YscsGah86wIum&#df* zC8nS}l>xrT`0DOqzl$THx=I4Yh}R}cnP!S;aw9nGwRs!7sM(LvqHonL@GeK+6L*&; zkA}gKj+kaDn_cmV9SP|Z6dxV|kuKtZUyw62AkjNmVr(4|%RTeikk)ffs{z`e*Oa|8 zwGUJ8(X;MMGaor?!_Lq(TErlDW^FFH8S^g(SsW@3s7$CyR$3)04Em>MbJ zn$7LT0BtN4je%p6Ux`_u#-6cJP1OYBbU9ty%WRhP4DL9pd2DuyH?J)8fD+3|ISIM- zHjT?bu!yvc2qL!4{Us}vztX%J1_)v=PkMF=aw`dbYvaZ82$^uJQmw`yp#Wy;f-AG^ zp2W!DZX(E$Phb7TbAVs#yWLpCVP31=>}pgbjSP)=gMg%RPExLoV6E6Uh+FykrXc)P zN99Y$nHm?gp?&xwEW4IH*>aD)UNxrZZqsFxLx)b}l!z7bd)(S0a?d#P;zAT0Wy{EX zsvXmO-!vn0xdmeMLr5Zjt|Z0-B0~k^BabkeE!LY(C;Opmf+3tPCE$U%%tw{c%HYIZ-g-M;x#?jD}+_2tt7X5CRU!@dlK%NnXqyO9?s>J zZ8sjchpC`Xi)xmyud_ll2xN^EuZ=tn@G$mSV9E0;%=JZnk}hZKXBCpkGGvlx1~+l% zqNl3bF5ybrCCtEA`J{y2iEM}A87#s=To$DJzUag?bSQQTmv!3gaqJpuSCjJ^Mh)z% zd_m;Hwy!)x}b5WvYU= zY4S94CCm{w>Nu@f-p)R}uwqR)*b_`JOsW^?bEt(vf|2{o^x|+Qi<|P9^`oE-W$-64 zPw_eP$kvMo0OW5Z=P_VD^g_BpHZE7Bqbh+bO|Mv>m%?K+OWyoO$6dI6Vh}~*Nn?Z~ zPF=fgEP&AlY`Lprw+V$IpI>=W$GD4H&Q%!i5=cg!m9zf^G&uAN+67J+-diBJ)Fz;( zYmF2D?saw>@%4 zu7d*!v;p#v!jJd?JEyA60un9^)C*FJoIv%u;)4N#wQbC80Ih-b6u~OngEGMZFgZnO zAT#OkcPxaod@p!S9VX6^g!y4z#hTF`bqXuM(BbhE(&!XNRpcDJO6@>eNUzHxXgHoX zsU{iVWF|!Ip`5)ShtCIt%98fRZ&lwF7qRPmAtIUBPbSgFJpwu2i^FU-5djA!>z8{b zlkunu^xeG4E?oeOwwV?sGgA_P_g0T>OX5L*T{j+I^QL$AX*b-j?AhhLfcSxh?veF>9u=z_l*kp#{OC-ewxg@mB(SuYYvRb>$8_yKD0F z9iua6)g>#SCS2VdjR#gZJ<)n7(`XY{N`kfz^<})w14*QBpiRGkE`*jadi$nxM#p5% zZ6Hw`)*il>Q8oZwA=?-y!UklIUabj=7vedTE;6;Ixjb~&31BPm6~Q%GCB?Ncm!~=g z#5L9veUE6O)<*0~6+z>O9owo*qQ|hfo_10-&FQ>+0^WU|43JybaQ;-B;J?wc@^Qb`(R1 zwH~wRg>w2A(JtrId6;i>%GX+ZI9kJ|A98M{#e=x*%qF~J)fch*L#2e-&p7-`vEa2kOz~*2q!rL01t=rNh{Y~bcG-_#4XFgD0zd4J#!2as^>;rCHWZV0ZZ{Emsc871>2Tt zMg|fldwE~^E5;5;OEpTas6HCZN2J<*__kT+cpRQ{BU*~0!wVlG^>%>h6W6RNW1&F2 zvDeX$IRH2jbBD1+EZ-Y*l4cT|Op^hfvu=ee zxTSQsVqq-rjFFgL7PIFW^TtmZ^Ss}UPNLE@>NQ|y3t4gki4+e#Y^W7D=7T9H!AO ze)(pGD6`sfiq)b0E*AfWyd|}g73a3h@})j9dfP{c72-2aX5}&Oj@Y1Q zS-@=8dOJ=+af*P!JbZOqfK7*T5kzIyjytE5_} zA~GJ2klipF@T>|y90z@KB+K`%JI_e4 z#w)fO@-=H46-YKuF|P}#JK`P)95B`5+O{)J``H$yO$;@{)>C*FLi@nTqfsBXO{}u_ z(=xe-n}KaeGFvS*?+nhmGu{Js&MHZJLJ#mw3)tedsE4zUhRfM=)g9#Dg&tvb_&lj5 zCeh{##D2rQ{LI4n;i<1}#wqw(P59WH2Z>{mi6Ur9n*^Npdx%=rq%oWi5Dp1*3kpG1 z^JcaNJumLWkQjGgEFY~oP`Al!jCN9p6jBt>MFTzV<>{ zW}y_W0UC{cz-9MHQ8Q-(CTK z4le=G1Nx}Zbr)qlHh^Io+ma-4?dOg3gs9 zvD&9;NW2INjRtr57t>hzR@AA45Sj$uQ|k-52CCHCOKpCAMl!LGk`{WwQKujs3^+

    ;TQ8)#7l>4Snz*J)FMZ0Q-2>;ACWq)?04 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 z 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

    nJLYnt<$PQi86UnxvK+ceSbB#mC5$ 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 literal 0 HcmV?d00001 diff --git a/vendor/golang.org/x/crypto/sha3/xor.go b/vendor/golang.org/x/crypto/sha3/xor.go new file mode 100644 index 0000000..46a0d63 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor.go @@ -0,0 +1,16 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !amd64,!386,!ppc64le appengine + +package sha3 + +var ( + xorIn = xorInGeneric + copyOut = copyOutGeneric + xorInUnaligned = xorInGeneric + copyOutUnaligned = copyOutGeneric +) + +const xorImplementationUnaligned = "generic" diff --git a/vendor/golang.org/x/crypto/sha3/xor_generic.go b/vendor/golang.org/x/crypto/sha3/xor_generic.go new file mode 100644 index 0000000..fd35f02 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor_generic.go @@ -0,0 +1,28 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package sha3 + +import "encoding/binary" + +// xorInGeneric xors the bytes in buf into the state; it +// makes no non-portable assumptions about memory layout +// or alignment. +func xorInGeneric(d *state, buf []byte) { + n := len(buf) / 8 + + for i := 0; i < n; i++ { + a := binary.LittleEndian.Uint64(buf) + d.a[i] ^= a + buf = buf[8:] + } +} + +// copyOutGeneric copies ulint64s to a byte buffer. +func copyOutGeneric(d *state, b []byte) { + for i := 0; len(b) >= 8; i++ { + binary.LittleEndian.PutUint64(b, d.a[i]) + b = b[8:] + } +} diff --git a/vendor/golang.org/x/crypto/sha3/xor_unaligned.go b/vendor/golang.org/x/crypto/sha3/xor_unaligned.go new file mode 100644 index 0000000..929a486 --- /dev/null +++ b/vendor/golang.org/x/crypto/sha3/xor_unaligned.go @@ -0,0 +1,58 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64 386 ppc64le +// +build !appengine + +package sha3 + +import "unsafe" + +func xorInUnaligned(d *state, buf []byte) { + bw := (*[maxRate / 8]uint64)(unsafe.Pointer(&buf[0])) + n := len(buf) + if n >= 72 { + d.a[0] ^= bw[0] + d.a[1] ^= bw[1] + d.a[2] ^= bw[2] + d.a[3] ^= bw[3] + d.a[4] ^= bw[4] + d.a[5] ^= bw[5] + d.a[6] ^= bw[6] + d.a[7] ^= bw[7] + d.a[8] ^= bw[8] + } + if n >= 104 { + d.a[9] ^= bw[9] + d.a[10] ^= bw[10] + d.a[11] ^= bw[11] + d.a[12] ^= bw[12] + } + if n >= 136 { + d.a[13] ^= bw[13] + d.a[14] ^= bw[14] + d.a[15] ^= bw[15] + d.a[16] ^= bw[16] + } + if n >= 144 { + d.a[17] ^= bw[17] + } + if n >= 168 { + d.a[18] ^= bw[18] + d.a[19] ^= bw[19] + d.a[20] ^= bw[20] + } +} + +func copyOutUnaligned(d *state, buf []byte) { + ab := (*[maxRate]uint8)(unsafe.Pointer(&d.a[0])) + copy(buf, ab[:]) +} + +var ( + xorIn = xorInUnaligned + copyOut = copyOutUnaligned +) + +const xorImplementationUnaligned = "unaligned" diff --git a/vendor/golang.org/x/crypto/ssh/agent/client.go b/vendor/golang.org/x/crypto/ssh/agent/client.go new file mode 100644 index 0000000..dce7682 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/client.go @@ -0,0 +1,683 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package agent implements the ssh-agent protocol, and provides both +// a client and a server. The client can talk to a standard ssh-agent +// that uses UNIX sockets, and one could implement an alternative +// ssh-agent process using the sample server. +// +// References: +// [PROTOCOL.agent]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.agent?rev=HEAD +package agent // import "golang.org/x/crypto/ssh/agent" + +import ( + "bytes" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rsa" + "encoding/base64" + "encoding/binary" + "errors" + "fmt" + "io" + "math/big" + "sync" + + "golang.org/x/crypto/ed25519" + "golang.org/x/crypto/ssh" +) + +// Agent represents the capabilities of an ssh-agent. +type Agent interface { + // List returns the identities known to the agent. + List() ([]*Key, error) + + // Sign has the agent sign the data using a protocol 2 key as defined + // in [PROTOCOL.agent] section 2.6.2. + Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) + + // Add adds a private key to the agent. + Add(key AddedKey) error + + // Remove removes all identities with the given public key. + Remove(key ssh.PublicKey) error + + // RemoveAll removes all identities. + RemoveAll() error + + // Lock locks the agent. Sign and Remove will fail, and List will empty an empty list. + Lock(passphrase []byte) error + + // Unlock undoes the effect of Lock + Unlock(passphrase []byte) error + + // Signers returns signers for all the known keys. + Signers() ([]ssh.Signer, error) +} + +// ConstraintExtension describes an optional constraint defined by users. +type ConstraintExtension struct { + // ExtensionName consist of a UTF-8 string suffixed by the + // implementation domain following the naming scheme defined + // in Section 4.2 of [RFC4251], e.g. "foo@example.com". + ExtensionName string + // ExtensionDetails contains the actual content of the extended + // constraint. + ExtensionDetails []byte +} + +// AddedKey describes an SSH key to be added to an Agent. +type AddedKey struct { + // PrivateKey must be a *rsa.PrivateKey, *dsa.PrivateKey or + // *ecdsa.PrivateKey, which will be inserted into the agent. + PrivateKey interface{} + // Certificate, if not nil, is communicated to the agent and will be + // stored with the key. + Certificate *ssh.Certificate + // Comment is an optional, free-form string. + Comment string + // LifetimeSecs, if not zero, is the number of seconds that the + // agent will store the key for. + LifetimeSecs uint32 + // ConfirmBeforeUse, if true, requests that the agent confirm with the + // user before each use of this key. + ConfirmBeforeUse bool + // ConstraintExtensions are the experimental or private-use constraints + // defined by users. + ConstraintExtensions []ConstraintExtension +} + +// See [PROTOCOL.agent], section 3. +const ( + agentRequestV1Identities = 1 + agentRemoveAllV1Identities = 9 + + // 3.2 Requests from client to agent for protocol 2 key operations + agentAddIdentity = 17 + agentRemoveIdentity = 18 + agentRemoveAllIdentities = 19 + agentAddIdConstrained = 25 + + // 3.3 Key-type independent requests from client to agent + agentAddSmartcardKey = 20 + agentRemoveSmartcardKey = 21 + agentLock = 22 + agentUnlock = 23 + agentAddSmartcardKeyConstrained = 26 + + // 3.7 Key constraint identifiers + agentConstrainLifetime = 1 + agentConstrainConfirm = 2 + agentConstrainExtension = 3 +) + +// maxAgentResponseBytes is the maximum agent reply size that is accepted. This +// is a sanity check, not a limit in the spec. +const maxAgentResponseBytes = 16 << 20 + +// Agent messages: +// These structures mirror the wire format of the corresponding ssh agent +// messages found in [PROTOCOL.agent]. + +// 3.4 Generic replies from agent to client +const agentFailure = 5 + +type failureAgentMsg struct{} + +const agentSuccess = 6 + +type successAgentMsg struct{} + +// See [PROTOCOL.agent], section 2.5.2. +const agentRequestIdentities = 11 + +type requestIdentitiesAgentMsg struct{} + +// See [PROTOCOL.agent], section 2.5.2. +const agentIdentitiesAnswer = 12 + +type identitiesAnswerAgentMsg struct { + NumKeys uint32 `sshtype:"12"` + Keys []byte `ssh:"rest"` +} + +// See [PROTOCOL.agent], section 2.6.2. +const agentSignRequest = 13 + +type signRequestAgentMsg struct { + KeyBlob []byte `sshtype:"13"` + Data []byte + Flags uint32 +} + +// See [PROTOCOL.agent], section 2.6.2. + +// 3.6 Replies from agent to client for protocol 2 key operations +const agentSignResponse = 14 + +type signResponseAgentMsg struct { + SigBlob []byte `sshtype:"14"` +} + +type publicKey struct { + Format string + Rest []byte `ssh:"rest"` +} + +// 3.7 Key constraint identifiers +type constrainLifetimeAgentMsg struct { + LifetimeSecs uint32 `sshtype:"1"` +} + +type constrainExtensionAgentMsg struct { + ExtensionName string `sshtype:"3"` + ExtensionDetails []byte + + // Rest is a field used for parsing, not part of message + Rest []byte `ssh:"rest"` +} + +// Key represents a protocol 2 public key as defined in +// [PROTOCOL.agent], section 2.5.2. +type Key struct { + Format string + Blob []byte + Comment string +} + +func clientErr(err error) error { + return fmt.Errorf("agent: client error: %v", err) +} + +// String returns the storage form of an agent key with the format, base64 +// encoded serialized key, and the comment if it is not empty. +func (k *Key) String() string { + s := string(k.Format) + " " + base64.StdEncoding.EncodeToString(k.Blob) + + if k.Comment != "" { + s += " " + k.Comment + } + + return s +} + +// Type returns the public key type. +func (k *Key) Type() string { + return k.Format +} + +// Marshal returns key blob to satisfy the ssh.PublicKey interface. +func (k *Key) Marshal() []byte { + return k.Blob +} + +// Verify satisfies the ssh.PublicKey interface. +func (k *Key) Verify(data []byte, sig *ssh.Signature) error { + pubKey, err := ssh.ParsePublicKey(k.Blob) + if err != nil { + return fmt.Errorf("agent: bad public key: %v", err) + } + return pubKey.Verify(data, sig) +} + +type wireKey struct { + Format string + Rest []byte `ssh:"rest"` +} + +func parseKey(in []byte) (out *Key, rest []byte, err error) { + var record struct { + Blob []byte + Comment string + Rest []byte `ssh:"rest"` + } + + if err := ssh.Unmarshal(in, &record); err != nil { + return nil, nil, err + } + + var wk wireKey + if err := ssh.Unmarshal(record.Blob, &wk); err != nil { + return nil, nil, err + } + + return &Key{ + Format: wk.Format, + Blob: record.Blob, + Comment: record.Comment, + }, record.Rest, nil +} + +// client is a client for an ssh-agent process. +type client struct { + // conn is typically a *net.UnixConn + conn io.ReadWriter + // mu is used to prevent concurrent access to the agent + mu sync.Mutex +} + +// NewClient returns an Agent that talks to an ssh-agent process over +// the given connection. +func NewClient(rw io.ReadWriter) Agent { + return &client{conn: rw} +} + +// call sends an RPC to the agent. On success, the reply is +// unmarshaled into reply and replyType is set to the first byte of +// the reply, which contains the type of the message. +func (c *client) call(req []byte) (reply interface{}, err error) { + c.mu.Lock() + defer c.mu.Unlock() + + msg := make([]byte, 4+len(req)) + binary.BigEndian.PutUint32(msg, uint32(len(req))) + copy(msg[4:], req) + if _, err = c.conn.Write(msg); err != nil { + return nil, clientErr(err) + } + + var respSizeBuf [4]byte + if _, err = io.ReadFull(c.conn, respSizeBuf[:]); err != nil { + return nil, clientErr(err) + } + respSize := binary.BigEndian.Uint32(respSizeBuf[:]) + if respSize > maxAgentResponseBytes { + return nil, clientErr(err) + } + + buf := make([]byte, respSize) + if _, err = io.ReadFull(c.conn, buf); err != nil { + return nil, clientErr(err) + } + reply, err = unmarshal(buf) + if err != nil { + return nil, clientErr(err) + } + return reply, err +} + +func (c *client) simpleCall(req []byte) error { + resp, err := c.call(req) + if err != nil { + return err + } + if _, ok := resp.(*successAgentMsg); ok { + return nil + } + return errors.New("agent: failure") +} + +func (c *client) RemoveAll() error { + return c.simpleCall([]byte{agentRemoveAllIdentities}) +} + +func (c *client) Remove(key ssh.PublicKey) error { + req := ssh.Marshal(&agentRemoveIdentityMsg{ + KeyBlob: key.Marshal(), + }) + return c.simpleCall(req) +} + +func (c *client) Lock(passphrase []byte) error { + req := ssh.Marshal(&agentLockMsg{ + Passphrase: passphrase, + }) + return c.simpleCall(req) +} + +func (c *client) Unlock(passphrase []byte) error { + req := ssh.Marshal(&agentUnlockMsg{ + Passphrase: passphrase, + }) + return c.simpleCall(req) +} + +// List returns the identities known to the agent. +func (c *client) List() ([]*Key, error) { + // see [PROTOCOL.agent] section 2.5.2. + req := []byte{agentRequestIdentities} + + msg, err := c.call(req) + if err != nil { + return nil, err + } + + switch msg := msg.(type) { + case *identitiesAnswerAgentMsg: + if msg.NumKeys > maxAgentResponseBytes/8 { + return nil, errors.New("agent: too many keys in agent reply") + } + keys := make([]*Key, msg.NumKeys) + data := msg.Keys + for i := uint32(0); i < msg.NumKeys; i++ { + var key *Key + var err error + if key, data, err = parseKey(data); err != nil { + return nil, err + } + keys[i] = key + } + return keys, nil + case *failureAgentMsg: + return nil, errors.New("agent: failed to list keys") + } + panic("unreachable") +} + +// Sign has the agent sign the data using a protocol 2 key as defined +// in [PROTOCOL.agent] section 2.6.2. +func (c *client) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) { + req := ssh.Marshal(signRequestAgentMsg{ + KeyBlob: key.Marshal(), + Data: data, + }) + + msg, err := c.call(req) + if err != nil { + return nil, err + } + + switch msg := msg.(type) { + case *signResponseAgentMsg: + var sig ssh.Signature + if err := ssh.Unmarshal(msg.SigBlob, &sig); err != nil { + return nil, err + } + + return &sig, nil + case *failureAgentMsg: + return nil, errors.New("agent: failed to sign challenge") + } + panic("unreachable") +} + +// unmarshal parses an agent message in packet, returning the parsed +// form and the message type of packet. +func unmarshal(packet []byte) (interface{}, error) { + if len(packet) < 1 { + return nil, errors.New("agent: empty packet") + } + var msg interface{} + switch packet[0] { + case agentFailure: + return new(failureAgentMsg), nil + case agentSuccess: + return new(successAgentMsg), nil + case agentIdentitiesAnswer: + msg = new(identitiesAnswerAgentMsg) + case agentSignResponse: + msg = new(signResponseAgentMsg) + case agentV1IdentitiesAnswer: + msg = new(agentV1IdentityMsg) + default: + return nil, fmt.Errorf("agent: unknown type tag %d", packet[0]) + } + if err := ssh.Unmarshal(packet, msg); err != nil { + return nil, err + } + return msg, nil +} + +type rsaKeyMsg struct { + Type string `sshtype:"17|25"` + N *big.Int + E *big.Int + D *big.Int + Iqmp *big.Int // IQMP = Inverse Q Mod P + P *big.Int + Q *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type dsaKeyMsg struct { + Type string `sshtype:"17|25"` + P *big.Int + Q *big.Int + G *big.Int + Y *big.Int + X *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type ecdsaKeyMsg struct { + Type string `sshtype:"17|25"` + Curve string + KeyBytes []byte + D *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type ed25519KeyMsg struct { + Type string `sshtype:"17|25"` + Pub []byte + Priv []byte + Comments string + Constraints []byte `ssh:"rest"` +} + +// Insert adds a private key to the agent. +func (c *client) insertKey(s interface{}, comment string, constraints []byte) error { + var req []byte + switch k := s.(type) { + case *rsa.PrivateKey: + if len(k.Primes) != 2 { + return fmt.Errorf("agent: unsupported RSA key with %d primes", len(k.Primes)) + } + k.Precompute() + req = ssh.Marshal(rsaKeyMsg{ + Type: ssh.KeyAlgoRSA, + N: k.N, + E: big.NewInt(int64(k.E)), + D: k.D, + Iqmp: k.Precomputed.Qinv, + P: k.Primes[0], + Q: k.Primes[1], + Comments: comment, + Constraints: constraints, + }) + case *dsa.PrivateKey: + req = ssh.Marshal(dsaKeyMsg{ + Type: ssh.KeyAlgoDSA, + P: k.P, + Q: k.Q, + G: k.G, + Y: k.Y, + X: k.X, + Comments: comment, + Constraints: constraints, + }) + case *ecdsa.PrivateKey: + nistID := fmt.Sprintf("nistp%d", k.Params().BitSize) + req = ssh.Marshal(ecdsaKeyMsg{ + Type: "ecdsa-sha2-" + nistID, + Curve: nistID, + KeyBytes: elliptic.Marshal(k.Curve, k.X, k.Y), + D: k.D, + Comments: comment, + Constraints: constraints, + }) + case *ed25519.PrivateKey: + req = ssh.Marshal(ed25519KeyMsg{ + Type: ssh.KeyAlgoED25519, + Pub: []byte(*k)[32:], + Priv: []byte(*k), + Comments: comment, + Constraints: constraints, + }) + default: + return fmt.Errorf("agent: unsupported key type %T", s) + } + + // if constraints are present then the message type needs to be changed. + if len(constraints) != 0 { + req[0] = agentAddIdConstrained + } + + resp, err := c.call(req) + if err != nil { + return err + } + if _, ok := resp.(*successAgentMsg); ok { + return nil + } + return errors.New("agent: failure") +} + +type rsaCertMsg struct { + Type string `sshtype:"17|25"` + CertBytes []byte + D *big.Int + Iqmp *big.Int // IQMP = Inverse Q Mod P + P *big.Int + Q *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type dsaCertMsg struct { + Type string `sshtype:"17|25"` + CertBytes []byte + X *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type ecdsaCertMsg struct { + Type string `sshtype:"17|25"` + CertBytes []byte + D *big.Int + Comments string + Constraints []byte `ssh:"rest"` +} + +type ed25519CertMsg struct { + Type string `sshtype:"17|25"` + CertBytes []byte + Pub []byte + Priv []byte + Comments string + Constraints []byte `ssh:"rest"` +} + +// Add adds a private key to the agent. If a certificate is given, +// that certificate is added instead as public key. +func (c *client) Add(key AddedKey) error { + var constraints []byte + + if secs := key.LifetimeSecs; secs != 0 { + constraints = append(constraints, ssh.Marshal(constrainLifetimeAgentMsg{secs})...) + } + + if key.ConfirmBeforeUse { + constraints = append(constraints, agentConstrainConfirm) + } + + if cert := key.Certificate; cert == nil { + return c.insertKey(key.PrivateKey, key.Comment, constraints) + } else { + return c.insertCert(key.PrivateKey, cert, key.Comment, constraints) + } +} + +func (c *client) insertCert(s interface{}, cert *ssh.Certificate, comment string, constraints []byte) error { + var req []byte + switch k := s.(type) { + case *rsa.PrivateKey: + if len(k.Primes) != 2 { + return fmt.Errorf("agent: unsupported RSA key with %d primes", len(k.Primes)) + } + k.Precompute() + req = ssh.Marshal(rsaCertMsg{ + Type: cert.Type(), + CertBytes: cert.Marshal(), + D: k.D, + Iqmp: k.Precomputed.Qinv, + P: k.Primes[0], + Q: k.Primes[1], + Comments: comment, + Constraints: constraints, + }) + case *dsa.PrivateKey: + req = ssh.Marshal(dsaCertMsg{ + Type: cert.Type(), + CertBytes: cert.Marshal(), + X: k.X, + Comments: comment, + Constraints: constraints, + }) + case *ecdsa.PrivateKey: + req = ssh.Marshal(ecdsaCertMsg{ + Type: cert.Type(), + CertBytes: cert.Marshal(), + D: k.D, + Comments: comment, + Constraints: constraints, + }) + case *ed25519.PrivateKey: + req = ssh.Marshal(ed25519CertMsg{ + Type: cert.Type(), + CertBytes: cert.Marshal(), + Pub: []byte(*k)[32:], + Priv: []byte(*k), + Comments: comment, + Constraints: constraints, + }) + default: + return fmt.Errorf("agent: unsupported key type %T", s) + } + + // if constraints are present then the message type needs to be changed. + if len(constraints) != 0 { + req[0] = agentAddIdConstrained + } + + signer, err := ssh.NewSignerFromKey(s) + if err != nil { + return err + } + if bytes.Compare(cert.Key.Marshal(), signer.PublicKey().Marshal()) != 0 { + return errors.New("agent: signer and cert have different public key") + } + + resp, err := c.call(req) + if err != nil { + return err + } + if _, ok := resp.(*successAgentMsg); ok { + return nil + } + return errors.New("agent: failure") +} + +// Signers provides a callback for client authentication. +func (c *client) Signers() ([]ssh.Signer, error) { + keys, err := c.List() + if err != nil { + return nil, err + } + + var result []ssh.Signer + for _, k := range keys { + result = append(result, &agentKeyringSigner{c, k}) + } + return result, nil +} + +type agentKeyringSigner struct { + agent *client + pub ssh.PublicKey +} + +func (s *agentKeyringSigner) PublicKey() ssh.PublicKey { + return s.pub +} + +func (s *agentKeyringSigner) Sign(rand io.Reader, data []byte) (*ssh.Signature, error) { + // The agent has its own entropy source, so the rand argument is ignored. + return s.agent.Sign(s.pub, data) +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/client_test.go b/vendor/golang.org/x/crypto/ssh/agent/client_test.go new file mode 100644 index 0000000..266fd6d --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/client_test.go @@ -0,0 +1,379 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "bytes" + "crypto/rand" + "errors" + "net" + "os" + "os/exec" + "path/filepath" + "strconv" + "testing" + "time" + + "golang.org/x/crypto/ssh" +) + +// startOpenSSHAgent executes ssh-agent, and returns an Agent interface to it. +func startOpenSSHAgent(t *testing.T) (client Agent, socket string, cleanup func()) { + if testing.Short() { + // ssh-agent is not always available, and the key + // types supported vary by platform. + t.Skip("skipping test due to -short") + } + + bin, err := exec.LookPath("ssh-agent") + if err != nil { + t.Skip("could not find ssh-agent") + } + + cmd := exec.Command(bin, "-s") + out, err := cmd.Output() + if err != nil { + t.Fatalf("cmd.Output: %v", err) + } + + /* Output looks like: + + SSH_AUTH_SOCK=/tmp/ssh-P65gpcqArqvH/agent.15541; export SSH_AUTH_SOCK; + SSH_AGENT_PID=15542; export SSH_AGENT_PID; + echo Agent pid 15542; + */ + fields := bytes.Split(out, []byte(";")) + line := bytes.SplitN(fields[0], []byte("="), 2) + line[0] = bytes.TrimLeft(line[0], "\n") + if string(line[0]) != "SSH_AUTH_SOCK" { + t.Fatalf("could not find key SSH_AUTH_SOCK in %q", fields[0]) + } + socket = string(line[1]) + + line = bytes.SplitN(fields[2], []byte("="), 2) + line[0] = bytes.TrimLeft(line[0], "\n") + if string(line[0]) != "SSH_AGENT_PID" { + t.Fatalf("could not find key SSH_AGENT_PID in %q", fields[2]) + } + pidStr := line[1] + pid, err := strconv.Atoi(string(pidStr)) + if err != nil { + t.Fatalf("Atoi(%q): %v", pidStr, err) + } + + conn, err := net.Dial("unix", string(socket)) + if err != nil { + t.Fatalf("net.Dial: %v", err) + } + + ac := NewClient(conn) + return ac, socket, func() { + proc, _ := os.FindProcess(pid) + if proc != nil { + proc.Kill() + } + conn.Close() + os.RemoveAll(filepath.Dir(socket)) + } +} + +// startKeyringAgent uses Keyring to simulate a ssh-agent Server and returns a client. +func startKeyringAgent(t *testing.T) (client Agent, cleanup func()) { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + go ServeAgent(NewKeyring(), c2) + + return NewClient(c1), func() { + c1.Close() + c2.Close() + } +} + +func testOpenSSHAgent(t *testing.T, key interface{}, cert *ssh.Certificate, lifetimeSecs uint32) { + agent, _, cleanup := startOpenSSHAgent(t) + defer cleanup() + + testAgentInterface(t, agent, key, cert, lifetimeSecs) +} + +func testKeyringAgent(t *testing.T, key interface{}, cert *ssh.Certificate, lifetimeSecs uint32) { + agent, cleanup := startKeyringAgent(t) + defer cleanup() + + testAgentInterface(t, agent, key, cert, lifetimeSecs) +} + +func testAgentInterface(t *testing.T, agent Agent, key interface{}, cert *ssh.Certificate, lifetimeSecs uint32) { + signer, err := ssh.NewSignerFromKey(key) + if err != nil { + t.Fatalf("NewSignerFromKey(%T): %v", key, err) + } + // The agent should start up empty. + if keys, err := agent.List(); err != nil { + t.Fatalf("RequestIdentities: %v", err) + } else if len(keys) > 0 { + t.Fatalf("got %d keys, want 0: %v", len(keys), keys) + } + + // Attempt to insert the key, with certificate if specified. + var pubKey ssh.PublicKey + if cert != nil { + err = agent.Add(AddedKey{ + PrivateKey: key, + Certificate: cert, + Comment: "comment", + LifetimeSecs: lifetimeSecs, + }) + pubKey = cert + } else { + err = agent.Add(AddedKey{PrivateKey: key, Comment: "comment", LifetimeSecs: lifetimeSecs}) + pubKey = signer.PublicKey() + } + if err != nil { + t.Fatalf("insert(%T): %v", key, err) + } + + // Did the key get inserted successfully? + if keys, err := agent.List(); err != nil { + t.Fatalf("List: %v", err) + } else if len(keys) != 1 { + t.Fatalf("got %v, want 1 key", keys) + } else if keys[0].Comment != "comment" { + t.Fatalf("key comment: got %v, want %v", keys[0].Comment, "comment") + } else if !bytes.Equal(keys[0].Blob, pubKey.Marshal()) { + t.Fatalf("key mismatch") + } + + // Can the agent make a valid signature? + data := []byte("hello") + sig, err := agent.Sign(pubKey, data) + if err != nil { + t.Fatalf("Sign(%s): %v", pubKey.Type(), err) + } + + if err := pubKey.Verify(data, sig); err != nil { + t.Fatalf("Verify(%s): %v", pubKey.Type(), err) + } + + // If the key has a lifetime, is it removed when it should be? + if lifetimeSecs > 0 { + time.Sleep(time.Second*time.Duration(lifetimeSecs) + 100*time.Millisecond) + keys, err := agent.List() + if err != nil { + t.Fatalf("List: %v", err) + } + if len(keys) > 0 { + t.Fatalf("key not expired") + } + } + +} + +func TestAgent(t *testing.T) { + for _, keyType := range []string{"rsa", "dsa", "ecdsa", "ed25519"} { + testOpenSSHAgent(t, testPrivateKeys[keyType], nil, 0) + testKeyringAgent(t, testPrivateKeys[keyType], nil, 0) + } +} + +func TestCert(t *testing.T) { + cert := &ssh.Certificate{ + Key: testPublicKeys["rsa"], + ValidBefore: ssh.CertTimeInfinity, + CertType: ssh.UserCert, + } + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + + testOpenSSHAgent(t, testPrivateKeys["rsa"], cert, 0) + testKeyringAgent(t, testPrivateKeys["rsa"], cert, 0) +} + +// netPipe is analogous to net.Pipe, but it uses a real net.Conn, and +// therefore is buffered (net.Pipe deadlocks if both sides start with +// a write.) +func netPipe() (net.Conn, net.Conn, error) { + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + listener, err = net.Listen("tcp", "[::1]:0") + if err != nil { + return nil, nil, err + } + } + defer listener.Close() + c1, err := net.Dial("tcp", listener.Addr().String()) + if err != nil { + return nil, nil, err + } + + c2, err := listener.Accept() + if err != nil { + c1.Close() + return nil, nil, err + } + + return c1, c2, nil +} + +func TestAuth(t *testing.T) { + agent, _, cleanup := startOpenSSHAgent(t) + defer cleanup() + + a, b, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + + defer a.Close() + defer b.Close() + + if err := agent.Add(AddedKey{PrivateKey: testPrivateKeys["rsa"], Comment: "comment"}); err != nil { + t.Errorf("Add: %v", err) + } + + serverConf := ssh.ServerConfig{} + serverConf.AddHostKey(testSigners["rsa"]) + serverConf.PublicKeyCallback = func(c ssh.ConnMetadata, key ssh.PublicKey) (*ssh.Permissions, error) { + if bytes.Equal(key.Marshal(), testPublicKeys["rsa"].Marshal()) { + return nil, nil + } + + return nil, errors.New("pubkey rejected") + } + + go func() { + conn, _, _, err := ssh.NewServerConn(a, &serverConf) + if err != nil { + t.Fatalf("Server: %v", err) + } + conn.Close() + }() + + conf := ssh.ClientConfig{ + HostKeyCallback: ssh.InsecureIgnoreHostKey(), + } + conf.Auth = append(conf.Auth, ssh.PublicKeysCallback(agent.Signers)) + conn, _, _, err := ssh.NewClientConn(b, "", &conf) + if err != nil { + t.Fatalf("NewClientConn: %v", err) + } + conn.Close() +} + +func TestLockOpenSSHAgent(t *testing.T) { + agent, _, cleanup := startOpenSSHAgent(t) + defer cleanup() + testLockAgent(agent, t) +} + +func TestLockKeyringAgent(t *testing.T) { + agent, cleanup := startKeyringAgent(t) + defer cleanup() + testLockAgent(agent, t) +} + +func testLockAgent(agent Agent, t *testing.T) { + if err := agent.Add(AddedKey{PrivateKey: testPrivateKeys["rsa"], Comment: "comment 1"}); err != nil { + t.Errorf("Add: %v", err) + } + if err := agent.Add(AddedKey{PrivateKey: testPrivateKeys["dsa"], Comment: "comment dsa"}); err != nil { + t.Errorf("Add: %v", err) + } + if keys, err := agent.List(); err != nil { + t.Errorf("List: %v", err) + } else if len(keys) != 2 { + t.Errorf("Want 2 keys, got %v", keys) + } + + passphrase := []byte("secret") + if err := agent.Lock(passphrase); err != nil { + t.Errorf("Lock: %v", err) + } + + if keys, err := agent.List(); err != nil { + t.Errorf("List: %v", err) + } else if len(keys) != 0 { + t.Errorf("Want 0 keys, got %v", keys) + } + + signer, _ := ssh.NewSignerFromKey(testPrivateKeys["rsa"]) + if _, err := agent.Sign(signer.PublicKey(), []byte("hello")); err == nil { + t.Fatalf("Sign did not fail") + } + + if err := agent.Remove(signer.PublicKey()); err == nil { + t.Fatalf("Remove did not fail") + } + + if err := agent.RemoveAll(); err == nil { + t.Fatalf("RemoveAll did not fail") + } + + if err := agent.Unlock(nil); err == nil { + t.Errorf("Unlock with wrong passphrase succeeded") + } + if err := agent.Unlock(passphrase); err != nil { + t.Errorf("Unlock: %v", err) + } + + if err := agent.Remove(signer.PublicKey()); err != nil { + t.Fatalf("Remove: %v", err) + } + + if keys, err := agent.List(); err != nil { + t.Errorf("List: %v", err) + } else if len(keys) != 1 { + t.Errorf("Want 1 keys, got %v", keys) + } +} + +func testOpenSSHAgentLifetime(t *testing.T) { + agent, _, cleanup := startOpenSSHAgent(t) + defer cleanup() + testAgentLifetime(t, agent) +} + +func testKeyringAgentLifetime(t *testing.T) { + agent, cleanup := startKeyringAgent(t) + defer cleanup() + testAgentLifetime(t, agent) +} + +func testAgentLifetime(t *testing.T, agent Agent) { + for _, keyType := range []string{"rsa", "dsa", "ecdsa"} { + // Add private keys to the agent. + err := agent.Add(AddedKey{ + PrivateKey: testPrivateKeys[keyType], + Comment: "comment", + LifetimeSecs: 1, + }) + if err != nil { + t.Fatalf("add: %v", err) + } + // Add certs to the agent. + cert := &ssh.Certificate{ + Key: testPublicKeys[keyType], + ValidBefore: ssh.CertTimeInfinity, + CertType: ssh.UserCert, + } + cert.SignCert(rand.Reader, testSigners[keyType]) + err = agent.Add(AddedKey{ + PrivateKey: testPrivateKeys[keyType], + Certificate: cert, + Comment: "comment", + LifetimeSecs: 1, + }) + if err != nil { + t.Fatalf("add: %v", err) + } + } + time.Sleep(1100 * time.Millisecond) + if keys, err := agent.List(); err != nil { + t.Errorf("List: %v", err) + } else if len(keys) != 0 { + t.Errorf("Want 0 keys, got %v", len(keys)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/example_test.go b/vendor/golang.org/x/crypto/ssh/agent/example_test.go new file mode 100644 index 0000000..8556225 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/example_test.go @@ -0,0 +1,41 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent_test + +import ( + "log" + "net" + "os" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/agent" +) + +func ExampleClientAgent() { + // ssh-agent has a UNIX socket under $SSH_AUTH_SOCK + socket := os.Getenv("SSH_AUTH_SOCK") + conn, err := net.Dial("unix", socket) + if err != nil { + log.Fatalf("net.Dial: %v", err) + } + agentClient := agent.NewClient(conn) + config := &ssh.ClientConfig{ + User: "username", + Auth: []ssh.AuthMethod{ + // Use a callback rather than PublicKeys + // so we only consult the agent once the remote server + // wants it. + ssh.PublicKeysCallback(agentClient.Signers), + }, + HostKeyCallback: ssh.InsecureIgnoreHostKey(), + } + + sshc, err := ssh.Dial("tcp", "localhost:22", config) + if err != nil { + log.Fatalf("Dial: %v", err) + } + // .. use sshc + sshc.Close() +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/forward.go b/vendor/golang.org/x/crypto/ssh/agent/forward.go new file mode 100644 index 0000000..fd24ba9 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/forward.go @@ -0,0 +1,103 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "errors" + "io" + "net" + "sync" + + "golang.org/x/crypto/ssh" +) + +// RequestAgentForwarding sets up agent forwarding for the session. +// ForwardToAgent or ForwardToRemote should be called to route +// the authentication requests. +func RequestAgentForwarding(session *ssh.Session) error { + ok, err := session.SendRequest("auth-agent-req@openssh.com", true, nil) + if err != nil { + return err + } + if !ok { + return errors.New("forwarding request denied") + } + return nil +} + +// ForwardToAgent routes authentication requests to the given keyring. +func ForwardToAgent(client *ssh.Client, keyring Agent) error { + channels := client.HandleChannelOpen(channelType) + if channels == nil { + return errors.New("agent: already have handler for " + channelType) + } + + go func() { + for ch := range channels { + channel, reqs, err := ch.Accept() + if err != nil { + continue + } + go ssh.DiscardRequests(reqs) + go func() { + ServeAgent(keyring, channel) + channel.Close() + }() + } + }() + return nil +} + +const channelType = "auth-agent@openssh.com" + +// ForwardToRemote routes authentication requests to the ssh-agent +// process serving on the given unix socket. +func ForwardToRemote(client *ssh.Client, addr string) error { + channels := client.HandleChannelOpen(channelType) + if channels == nil { + return errors.New("agent: already have handler for " + channelType) + } + conn, err := net.Dial("unix", addr) + if err != nil { + return err + } + conn.Close() + + go func() { + for ch := range channels { + channel, reqs, err := ch.Accept() + if err != nil { + continue + } + go ssh.DiscardRequests(reqs) + go forwardUnixSocket(channel, addr) + } + }() + return nil +} + +func forwardUnixSocket(channel ssh.Channel, addr string) { + conn, err := net.Dial("unix", addr) + if err != nil { + return + } + + var wg sync.WaitGroup + wg.Add(2) + go func() { + io.Copy(conn, channel) + conn.(*net.UnixConn).CloseWrite() + wg.Done() + }() + go func() { + io.Copy(channel, conn) + channel.CloseWrite() + wg.Done() + }() + + wg.Wait() + conn.Close() + channel.Close() +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/keyring.go b/vendor/golang.org/x/crypto/ssh/agent/keyring.go new file mode 100644 index 0000000..a6ba06a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/keyring.go @@ -0,0 +1,215 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "bytes" + "crypto/rand" + "crypto/subtle" + "errors" + "fmt" + "sync" + "time" + + "golang.org/x/crypto/ssh" +) + +type privKey struct { + signer ssh.Signer + comment string + expire *time.Time +} + +type keyring struct { + mu sync.Mutex + keys []privKey + + locked bool + passphrase []byte +} + +var errLocked = errors.New("agent: locked") + +// NewKeyring returns an Agent that holds keys in memory. It is safe +// for concurrent use by multiple goroutines. +func NewKeyring() Agent { + return &keyring{} +} + +// RemoveAll removes all identities. +func (r *keyring) RemoveAll() error { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return errLocked + } + + r.keys = nil + return nil +} + +// removeLocked does the actual key removal. The caller must already be holding the +// keyring mutex. +func (r *keyring) removeLocked(want []byte) error { + found := false + for i := 0; i < len(r.keys); { + if bytes.Equal(r.keys[i].signer.PublicKey().Marshal(), want) { + found = true + r.keys[i] = r.keys[len(r.keys)-1] + r.keys = r.keys[:len(r.keys)-1] + continue + } else { + i++ + } + } + + if !found { + return errors.New("agent: key not found") + } + return nil +} + +// Remove removes all identities with the given public key. +func (r *keyring) Remove(key ssh.PublicKey) error { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return errLocked + } + + return r.removeLocked(key.Marshal()) +} + +// Lock locks the agent. Sign and Remove will fail, and List will return an empty list. +func (r *keyring) Lock(passphrase []byte) error { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return errLocked + } + + r.locked = true + r.passphrase = passphrase + return nil +} + +// Unlock undoes the effect of Lock +func (r *keyring) Unlock(passphrase []byte) error { + r.mu.Lock() + defer r.mu.Unlock() + if !r.locked { + return errors.New("agent: not locked") + } + if len(passphrase) != len(r.passphrase) || 1 != subtle.ConstantTimeCompare(passphrase, r.passphrase) { + return fmt.Errorf("agent: incorrect passphrase") + } + + r.locked = false + r.passphrase = nil + return nil +} + +// expireKeysLocked removes expired keys from the keyring. If a key was added +// with a lifetimesecs contraint and seconds >= lifetimesecs seconds have +// ellapsed, it is removed. The caller *must* be holding the keyring mutex. +func (r *keyring) expireKeysLocked() { + for _, k := range r.keys { + if k.expire != nil && time.Now().After(*k.expire) { + r.removeLocked(k.signer.PublicKey().Marshal()) + } + } +} + +// List returns the identities known to the agent. +func (r *keyring) List() ([]*Key, error) { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + // section 2.7: locked agents return empty. + return nil, nil + } + + r.expireKeysLocked() + var ids []*Key + for _, k := range r.keys { + pub := k.signer.PublicKey() + ids = append(ids, &Key{ + Format: pub.Type(), + Blob: pub.Marshal(), + Comment: k.comment}) + } + return ids, nil +} + +// Insert adds a private key to the keyring. If a certificate +// is given, that certificate is added as public key. Note that +// any constraints given are ignored. +func (r *keyring) Add(key AddedKey) error { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return errLocked + } + signer, err := ssh.NewSignerFromKey(key.PrivateKey) + + if err != nil { + return err + } + + if cert := key.Certificate; cert != nil { + signer, err = ssh.NewCertSigner(cert, signer) + if err != nil { + return err + } + } + + p := privKey{ + signer: signer, + comment: key.Comment, + } + + if key.LifetimeSecs > 0 { + t := time.Now().Add(time.Duration(key.LifetimeSecs) * time.Second) + p.expire = &t + } + + r.keys = append(r.keys, p) + + return nil +} + +// Sign returns a signature for the data. +func (r *keyring) Sign(key ssh.PublicKey, data []byte) (*ssh.Signature, error) { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return nil, errLocked + } + + r.expireKeysLocked() + wanted := key.Marshal() + for _, k := range r.keys { + if bytes.Equal(k.signer.PublicKey().Marshal(), wanted) { + return k.signer.Sign(rand.Reader, data) + } + } + return nil, errors.New("not found") +} + +// Signers returns signers for all the known keys. +func (r *keyring) Signers() ([]ssh.Signer, error) { + r.mu.Lock() + defer r.mu.Unlock() + if r.locked { + return nil, errLocked + } + + r.expireKeysLocked() + s := make([]ssh.Signer, 0, len(r.keys)) + for _, k := range r.keys { + s = append(s, k.signer) + } + return s, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/keyring_test.go b/vendor/golang.org/x/crypto/ssh/agent/keyring_test.go new file mode 100644 index 0000000..e5d50e7 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/keyring_test.go @@ -0,0 +1,76 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import "testing" + +func addTestKey(t *testing.T, a Agent, keyName string) { + err := a.Add(AddedKey{ + PrivateKey: testPrivateKeys[keyName], + Comment: keyName, + }) + if err != nil { + t.Fatalf("failed to add key %q: %v", keyName, err) + } +} + +func removeTestKey(t *testing.T, a Agent, keyName string) { + err := a.Remove(testPublicKeys[keyName]) + if err != nil { + t.Fatalf("failed to remove key %q: %v", keyName, err) + } +} + +func validateListedKeys(t *testing.T, a Agent, expectedKeys []string) { + listedKeys, err := a.List() + if err != nil { + t.Fatalf("failed to list keys: %v", err) + return + } + actualKeys := make(map[string]bool) + for _, key := range listedKeys { + actualKeys[key.Comment] = true + } + + matchedKeys := make(map[string]bool) + for _, expectedKey := range expectedKeys { + if !actualKeys[expectedKey] { + t.Fatalf("expected key %q, but was not found", expectedKey) + } else { + matchedKeys[expectedKey] = true + } + } + + for actualKey := range actualKeys { + if !matchedKeys[actualKey] { + t.Fatalf("key %q was found, but was not expected", actualKey) + } + } +} + +func TestKeyringAddingAndRemoving(t *testing.T) { + keyNames := []string{"dsa", "ecdsa", "rsa", "user"} + + // add all test private keys + k := NewKeyring() + for _, keyName := range keyNames { + addTestKey(t, k, keyName) + } + validateListedKeys(t, k, keyNames) + + // remove a key in the middle + keyToRemove := keyNames[1] + keyNames = append(keyNames[:1], keyNames[2:]...) + + removeTestKey(t, k, keyToRemove) + validateListedKeys(t, k, keyNames) + + // remove all keys + err := k.RemoveAll() + if err != nil { + t.Fatalf("failed to remove all keys: %v", err) + } + validateListedKeys(t, k, []string{}) +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/server.go b/vendor/golang.org/x/crypto/ssh/agent/server.go new file mode 100644 index 0000000..321e48a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/server.go @@ -0,0 +1,523 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rsa" + "encoding/binary" + "errors" + "fmt" + "io" + "log" + "math/big" + + "golang.org/x/crypto/ed25519" + "golang.org/x/crypto/ssh" +) + +// Server wraps an Agent and uses it to implement the agent side of +// the SSH-agent, wire protocol. +type server struct { + agent Agent +} + +func (s *server) processRequestBytes(reqData []byte) []byte { + rep, err := s.processRequest(reqData) + if err != nil { + if err != errLocked { + // TODO(hanwen): provide better logging interface? + log.Printf("agent %d: %v", reqData[0], err) + } + return []byte{agentFailure} + } + + if err == nil && rep == nil { + return []byte{agentSuccess} + } + + return ssh.Marshal(rep) +} + +func marshalKey(k *Key) []byte { + var record struct { + Blob []byte + Comment string + } + record.Blob = k.Marshal() + record.Comment = k.Comment + + return ssh.Marshal(&record) +} + +// See [PROTOCOL.agent], section 2.5.1. +const agentV1IdentitiesAnswer = 2 + +type agentV1IdentityMsg struct { + Numkeys uint32 `sshtype:"2"` +} + +type agentRemoveIdentityMsg struct { + KeyBlob []byte `sshtype:"18"` +} + +type agentLockMsg struct { + Passphrase []byte `sshtype:"22"` +} + +type agentUnlockMsg struct { + Passphrase []byte `sshtype:"23"` +} + +func (s *server) processRequest(data []byte) (interface{}, error) { + switch data[0] { + case agentRequestV1Identities: + return &agentV1IdentityMsg{0}, nil + + case agentRemoveAllV1Identities: + return nil, nil + + case agentRemoveIdentity: + var req agentRemoveIdentityMsg + if err := ssh.Unmarshal(data, &req); err != nil { + return nil, err + } + + var wk wireKey + if err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil { + return nil, err + } + + return nil, s.agent.Remove(&Key{Format: wk.Format, Blob: req.KeyBlob}) + + case agentRemoveAllIdentities: + return nil, s.agent.RemoveAll() + + case agentLock: + var req agentLockMsg + if err := ssh.Unmarshal(data, &req); err != nil { + return nil, err + } + + return nil, s.agent.Lock(req.Passphrase) + + case agentUnlock: + var req agentUnlockMsg + if err := ssh.Unmarshal(data, &req); err != nil { + return nil, err + } + return nil, s.agent.Unlock(req.Passphrase) + + case agentSignRequest: + var req signRequestAgentMsg + if err := ssh.Unmarshal(data, &req); err != nil { + return nil, err + } + + var wk wireKey + if err := ssh.Unmarshal(req.KeyBlob, &wk); err != nil { + return nil, err + } + + k := &Key{ + Format: wk.Format, + Blob: req.KeyBlob, + } + + sig, err := s.agent.Sign(k, req.Data) // TODO(hanwen): flags. + if err != nil { + return nil, err + } + return &signResponseAgentMsg{SigBlob: ssh.Marshal(sig)}, nil + + case agentRequestIdentities: + keys, err := s.agent.List() + if err != nil { + return nil, err + } + + rep := identitiesAnswerAgentMsg{ + NumKeys: uint32(len(keys)), + } + for _, k := range keys { + rep.Keys = append(rep.Keys, marshalKey(k)...) + } + return rep, nil + + case agentAddIdConstrained, agentAddIdentity: + return nil, s.insertIdentity(data) + } + + return nil, fmt.Errorf("unknown opcode %d", data[0]) +} + +func parseConstraints(constraints []byte) (lifetimeSecs uint32, confirmBeforeUse bool, extensions []ConstraintExtension, err error) { + for len(constraints) != 0 { + switch constraints[0] { + case agentConstrainLifetime: + lifetimeSecs = binary.BigEndian.Uint32(constraints[1:5]) + constraints = constraints[5:] + case agentConstrainConfirm: + confirmBeforeUse = true + constraints = constraints[1:] + case agentConstrainExtension: + var msg constrainExtensionAgentMsg + if err = ssh.Unmarshal(constraints, &msg); err != nil { + return 0, false, nil, err + } + extensions = append(extensions, ConstraintExtension{ + ExtensionName: msg.ExtensionName, + ExtensionDetails: msg.ExtensionDetails, + }) + constraints = msg.Rest + default: + return 0, false, nil, fmt.Errorf("unknown constraint type: %d", constraints[0]) + } + } + return +} + +func setConstraints(key *AddedKey, constraintBytes []byte) error { + lifetimeSecs, confirmBeforeUse, constraintExtensions, err := parseConstraints(constraintBytes) + if err != nil { + return err + } + + key.LifetimeSecs = lifetimeSecs + key.ConfirmBeforeUse = confirmBeforeUse + key.ConstraintExtensions = constraintExtensions + return nil +} + +func parseRSAKey(req []byte) (*AddedKey, error) { + var k rsaKeyMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + if k.E.BitLen() > 30 { + return nil, errors.New("agent: RSA public exponent too large") + } + priv := &rsa.PrivateKey{ + PublicKey: rsa.PublicKey{ + E: int(k.E.Int64()), + N: k.N, + }, + D: k.D, + Primes: []*big.Int{k.P, k.Q}, + } + priv.Precompute() + + addedKey := &AddedKey{PrivateKey: priv, Comment: k.Comments} + if err := setConstraints(addedKey, k.Constraints); err != nil { + return nil, err + } + return addedKey, nil +} + +func parseEd25519Key(req []byte) (*AddedKey, error) { + var k ed25519KeyMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + priv := ed25519.PrivateKey(k.Priv) + + addedKey := &AddedKey{PrivateKey: &priv, Comment: k.Comments} + if err := setConstraints(addedKey, k.Constraints); err != nil { + return nil, err + } + return addedKey, nil +} + +func parseDSAKey(req []byte) (*AddedKey, error) { + var k dsaKeyMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + priv := &dsa.PrivateKey{ + PublicKey: dsa.PublicKey{ + Parameters: dsa.Parameters{ + P: k.P, + Q: k.Q, + G: k.G, + }, + Y: k.Y, + }, + X: k.X, + } + + addedKey := &AddedKey{PrivateKey: priv, Comment: k.Comments} + if err := setConstraints(addedKey, k.Constraints); err != nil { + return nil, err + } + return addedKey, nil +} + +func unmarshalECDSA(curveName string, keyBytes []byte, privScalar *big.Int) (priv *ecdsa.PrivateKey, err error) { + priv = &ecdsa.PrivateKey{ + D: privScalar, + } + + switch curveName { + case "nistp256": + priv.Curve = elliptic.P256() + case "nistp384": + priv.Curve = elliptic.P384() + case "nistp521": + priv.Curve = elliptic.P521() + default: + return nil, fmt.Errorf("agent: unknown curve %q", curveName) + } + + priv.X, priv.Y = elliptic.Unmarshal(priv.Curve, keyBytes) + if priv.X == nil || priv.Y == nil { + return nil, errors.New("agent: point not on curve") + } + + return priv, nil +} + +func parseEd25519Cert(req []byte) (*AddedKey, error) { + var k ed25519CertMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + pubKey, err := ssh.ParsePublicKey(k.CertBytes) + if err != nil { + return nil, err + } + priv := ed25519.PrivateKey(k.Priv) + cert, ok := pubKey.(*ssh.Certificate) + if !ok { + return nil, errors.New("agent: bad ED25519 certificate") + } + + addedKey := &AddedKey{PrivateKey: &priv, Certificate: cert, Comment: k.Comments} + if err := setConstraints(addedKey, k.Constraints); err != nil { + return nil, err + } + return addedKey, nil +} + +func parseECDSAKey(req []byte) (*AddedKey, error) { + var k ecdsaKeyMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + + priv, err := unmarshalECDSA(k.Curve, k.KeyBytes, k.D) + if err != nil { + return nil, err + } + + addedKey := &AddedKey{PrivateKey: priv, Comment: k.Comments} + if err := setConstraints(addedKey, k.Constraints); err != nil { + return nil, err + } + return addedKey, nil +} + +func parseRSACert(req []byte) (*AddedKey, error) { + var k rsaCertMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + + pubKey, err := ssh.ParsePublicKey(k.CertBytes) + if err != nil { + return nil, err + } + + cert, ok := pubKey.(*ssh.Certificate) + if !ok { + return nil, errors.New("agent: bad RSA certificate") + } + + // An RSA publickey as marshaled by rsaPublicKey.Marshal() in keys.go + var rsaPub struct { + Name string + E *big.Int + N *big.Int + } + if err := ssh.Unmarshal(cert.Key.Marshal(), &rsaPub); err != nil { + return nil, fmt.Errorf("agent: Unmarshal failed to parse public key: %v", err) + } + + if rsaPub.E.BitLen() > 30 { + return nil, errors.New("agent: RSA public exponent too large") + } + + priv := rsa.PrivateKey{ + PublicKey: rsa.PublicKey{ + E: int(rsaPub.E.Int64()), + N: rsaPub.N, + }, + D: k.D, + Primes: []*big.Int{k.Q, k.P}, + } + priv.Precompute() + + addedKey := &AddedKey{PrivateKey: &priv, Certificate: cert, Comment: k.Comments} + if err := setConstraints(addedKey, k.Constraints); err != nil { + return nil, err + } + return addedKey, nil +} + +func parseDSACert(req []byte) (*AddedKey, error) { + var k dsaCertMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + pubKey, err := ssh.ParsePublicKey(k.CertBytes) + if err != nil { + return nil, err + } + cert, ok := pubKey.(*ssh.Certificate) + if !ok { + return nil, errors.New("agent: bad DSA certificate") + } + + // A DSA publickey as marshaled by dsaPublicKey.Marshal() in keys.go + var w struct { + Name string + P, Q, G, Y *big.Int + } + if err := ssh.Unmarshal(cert.Key.Marshal(), &w); err != nil { + return nil, fmt.Errorf("agent: Unmarshal failed to parse public key: %v", err) + } + + priv := &dsa.PrivateKey{ + PublicKey: dsa.PublicKey{ + Parameters: dsa.Parameters{ + P: w.P, + Q: w.Q, + G: w.G, + }, + Y: w.Y, + }, + X: k.X, + } + + addedKey := &AddedKey{PrivateKey: priv, Certificate: cert, Comment: k.Comments} + if err := setConstraints(addedKey, k.Constraints); err != nil { + return nil, err + } + return addedKey, nil +} + +func parseECDSACert(req []byte) (*AddedKey, error) { + var k ecdsaCertMsg + if err := ssh.Unmarshal(req, &k); err != nil { + return nil, err + } + + pubKey, err := ssh.ParsePublicKey(k.CertBytes) + if err != nil { + return nil, err + } + cert, ok := pubKey.(*ssh.Certificate) + if !ok { + return nil, errors.New("agent: bad ECDSA certificate") + } + + // An ECDSA publickey as marshaled by ecdsaPublicKey.Marshal() in keys.go + var ecdsaPub struct { + Name string + ID string + Key []byte + } + if err := ssh.Unmarshal(cert.Key.Marshal(), &ecdsaPub); err != nil { + return nil, err + } + + priv, err := unmarshalECDSA(ecdsaPub.ID, ecdsaPub.Key, k.D) + if err != nil { + return nil, err + } + + addedKey := &AddedKey{PrivateKey: priv, Certificate: cert, Comment: k.Comments} + if err := setConstraints(addedKey, k.Constraints); err != nil { + return nil, err + } + return addedKey, nil +} + +func (s *server) insertIdentity(req []byte) error { + var record struct { + Type string `sshtype:"17|25"` + Rest []byte `ssh:"rest"` + } + + if err := ssh.Unmarshal(req, &record); err != nil { + return err + } + + var addedKey *AddedKey + var err error + + switch record.Type { + case ssh.KeyAlgoRSA: + addedKey, err = parseRSAKey(req) + case ssh.KeyAlgoDSA: + addedKey, err = parseDSAKey(req) + case ssh.KeyAlgoECDSA256, ssh.KeyAlgoECDSA384, ssh.KeyAlgoECDSA521: + addedKey, err = parseECDSAKey(req) + case ssh.KeyAlgoED25519: + addedKey, err = parseEd25519Key(req) + case ssh.CertAlgoRSAv01: + addedKey, err = parseRSACert(req) + case ssh.CertAlgoDSAv01: + addedKey, err = parseDSACert(req) + case ssh.CertAlgoECDSA256v01, ssh.CertAlgoECDSA384v01, ssh.CertAlgoECDSA521v01: + addedKey, err = parseECDSACert(req) + case ssh.CertAlgoED25519v01: + addedKey, err = parseEd25519Cert(req) + default: + return fmt.Errorf("agent: not implemented: %q", record.Type) + } + + if err != nil { + return err + } + return s.agent.Add(*addedKey) +} + +// ServeAgent serves the agent protocol on the given connection. It +// returns when an I/O error occurs. +func ServeAgent(agent Agent, c io.ReadWriter) error { + s := &server{agent} + + var length [4]byte + for { + if _, err := io.ReadFull(c, length[:]); err != nil { + return err + } + l := binary.BigEndian.Uint32(length[:]) + if l > maxAgentResponseBytes { + // We also cap requests. + return fmt.Errorf("agent: request too large: %d", l) + } + + req := make([]byte, l) + if _, err := io.ReadFull(c, req); err != nil { + return err + } + + repData := s.processRequestBytes(req) + if len(repData) > maxAgentResponseBytes { + return fmt.Errorf("agent: reply too large: %d bytes", len(repData)) + } + + binary.BigEndian.PutUint32(length[:], uint32(len(repData))) + if _, err := c.Write(length[:]); err != nil { + return err + } + if _, err := c.Write(repData); err != nil { + return err + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/server_test.go b/vendor/golang.org/x/crypto/ssh/agent/server_test.go new file mode 100644 index 0000000..038018e --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/server_test.go @@ -0,0 +1,259 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package agent + +import ( + "crypto" + "crypto/rand" + "fmt" + pseudorand "math/rand" + "reflect" + "strings" + "testing" + + "golang.org/x/crypto/ssh" +) + +func TestServer(t *testing.T) { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + client := NewClient(c1) + + go ServeAgent(NewKeyring(), c2) + + testAgentInterface(t, client, testPrivateKeys["rsa"], nil, 0) +} + +func TestLockServer(t *testing.T) { + testLockAgent(NewKeyring(), t) +} + +func TestSetupForwardAgent(t *testing.T) { + a, b, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + + defer a.Close() + defer b.Close() + + _, socket, cleanup := startOpenSSHAgent(t) + defer cleanup() + + serverConf := ssh.ServerConfig{ + NoClientAuth: true, + } + serverConf.AddHostKey(testSigners["rsa"]) + incoming := make(chan *ssh.ServerConn, 1) + go func() { + conn, _, _, err := ssh.NewServerConn(a, &serverConf) + if err != nil { + t.Fatalf("Server: %v", err) + } + incoming <- conn + }() + + conf := ssh.ClientConfig{ + HostKeyCallback: ssh.InsecureIgnoreHostKey(), + } + conn, chans, reqs, err := ssh.NewClientConn(b, "", &conf) + if err != nil { + t.Fatalf("NewClientConn: %v", err) + } + client := ssh.NewClient(conn, chans, reqs) + + if err := ForwardToRemote(client, socket); err != nil { + t.Fatalf("SetupForwardAgent: %v", err) + } + + server := <-incoming + ch, reqs, err := server.OpenChannel(channelType, nil) + if err != nil { + t.Fatalf("OpenChannel(%q): %v", channelType, err) + } + go ssh.DiscardRequests(reqs) + + agentClient := NewClient(ch) + testAgentInterface(t, agentClient, testPrivateKeys["rsa"], nil, 0) + conn.Close() +} + +func TestV1ProtocolMessages(t *testing.T) { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + c := NewClient(c1) + + go ServeAgent(NewKeyring(), c2) + + testV1ProtocolMessages(t, c.(*client)) +} + +func testV1ProtocolMessages(t *testing.T, c *client) { + reply, err := c.call([]byte{agentRequestV1Identities}) + if err != nil { + t.Fatalf("v1 request all failed: %v", err) + } + if msg, ok := reply.(*agentV1IdentityMsg); !ok || msg.Numkeys != 0 { + t.Fatalf("invalid request all response: %#v", reply) + } + + reply, err = c.call([]byte{agentRemoveAllV1Identities}) + if err != nil { + t.Fatalf("v1 remove all failed: %v", err) + } + if _, ok := reply.(*successAgentMsg); !ok { + t.Fatalf("invalid remove all response: %#v", reply) + } +} + +func verifyKey(sshAgent Agent) error { + keys, err := sshAgent.List() + if err != nil { + return fmt.Errorf("listing keys: %v", err) + } + + if len(keys) != 1 { + return fmt.Errorf("bad number of keys found. expected 1, got %d", len(keys)) + } + + buf := make([]byte, 128) + if _, err := rand.Read(buf); err != nil { + return fmt.Errorf("rand: %v", err) + } + + sig, err := sshAgent.Sign(keys[0], buf) + if err != nil { + return fmt.Errorf("sign: %v", err) + } + + if err := keys[0].Verify(buf, sig); err != nil { + return fmt.Errorf("verify: %v", err) + } + return nil +} + +func addKeyToAgent(key crypto.PrivateKey) error { + sshAgent := NewKeyring() + if err := sshAgent.Add(AddedKey{PrivateKey: key}); err != nil { + return fmt.Errorf("add: %v", err) + } + return verifyKey(sshAgent) +} + +func TestKeyTypes(t *testing.T) { + for k, v := range testPrivateKeys { + if err := addKeyToAgent(v); err != nil { + t.Errorf("error adding key type %s, %v", k, err) + } + if err := addCertToAgentSock(v, nil); err != nil { + t.Errorf("error adding key type %s, %v", k, err) + } + } +} + +func addCertToAgentSock(key crypto.PrivateKey, cert *ssh.Certificate) error { + a, b, err := netPipe() + if err != nil { + return err + } + agentServer := NewKeyring() + go ServeAgent(agentServer, a) + + agentClient := NewClient(b) + if err := agentClient.Add(AddedKey{PrivateKey: key, Certificate: cert}); err != nil { + return fmt.Errorf("add: %v", err) + } + return verifyKey(agentClient) +} + +func addCertToAgent(key crypto.PrivateKey, cert *ssh.Certificate) error { + sshAgent := NewKeyring() + if err := sshAgent.Add(AddedKey{PrivateKey: key, Certificate: cert}); err != nil { + return fmt.Errorf("add: %v", err) + } + return verifyKey(sshAgent) +} + +func TestCertTypes(t *testing.T) { + for keyType, key := range testPublicKeys { + cert := &ssh.Certificate{ + ValidPrincipals: []string{"gopher1"}, + ValidAfter: 0, + ValidBefore: ssh.CertTimeInfinity, + Key: key, + Serial: 1, + CertType: ssh.UserCert, + SignatureKey: testPublicKeys["rsa"], + Permissions: ssh.Permissions{ + CriticalOptions: map[string]string{}, + Extensions: map[string]string{}, + }, + } + if err := cert.SignCert(rand.Reader, testSigners["rsa"]); err != nil { + t.Fatalf("signcert: %v", err) + } + if err := addCertToAgent(testPrivateKeys[keyType], cert); err != nil { + t.Fatalf("%v", err) + } + if err := addCertToAgentSock(testPrivateKeys[keyType], cert); err != nil { + t.Fatalf("%v", err) + } + } +} + +func TestParseConstraints(t *testing.T) { + // Test LifetimeSecs + var msg = constrainLifetimeAgentMsg{pseudorand.Uint32()} + lifetimeSecs, _, _, err := parseConstraints(ssh.Marshal(msg)) + if err != nil { + t.Fatalf("parseConstraints: %v", err) + } + if lifetimeSecs != msg.LifetimeSecs { + t.Errorf("got lifetime %v, want %v", lifetimeSecs, msg.LifetimeSecs) + } + + // Test ConfirmBeforeUse + _, confirmBeforeUse, _, err := parseConstraints([]byte{agentConstrainConfirm}) + if err != nil { + t.Fatalf("%v", err) + } + if !confirmBeforeUse { + t.Error("got comfirmBeforeUse == false") + } + + // Test ConstraintExtensions + var data []byte + var expect []ConstraintExtension + for i := 0; i < 10; i++ { + var ext = ConstraintExtension{ + ExtensionName: fmt.Sprintf("name%d", i), + ExtensionDetails: []byte(fmt.Sprintf("details: %d", i)), + } + expect = append(expect, ext) + data = append(data, agentConstrainExtension) + data = append(data, ssh.Marshal(ext)...) + } + _, _, extensions, err := parseConstraints(data) + if err != nil { + t.Fatalf("%v", err) + } + if !reflect.DeepEqual(expect, extensions) { + t.Errorf("got extension %v, want %v", extensions, expect) + } + + // Test Unknown Constraint + _, _, _, err = parseConstraints([]byte{128}) + if err == nil || !strings.Contains(err.Error(), "unknown constraint") { + t.Errorf("unexpected error: %v", err) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/agent/testdata_test.go b/vendor/golang.org/x/crypto/ssh/agent/testdata_test.go new file mode 100644 index 0000000..cc42a87 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/agent/testdata_test.go @@ -0,0 +1,64 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// IMPLEMENTATION NOTE: To avoid a package loop, this file is in three places: +// ssh/, ssh/agent, and ssh/test/. It should be kept in sync across all three +// instances. + +package agent + +import ( + "crypto/rand" + "fmt" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/testdata" +) + +var ( + testPrivateKeys map[string]interface{} + testSigners map[string]ssh.Signer + testPublicKeys map[string]ssh.PublicKey +) + +func init() { + var err error + + n := len(testdata.PEMBytes) + testPrivateKeys = make(map[string]interface{}, n) + testSigners = make(map[string]ssh.Signer, n) + testPublicKeys = make(map[string]ssh.PublicKey, n) + for t, k := range testdata.PEMBytes { + testPrivateKeys[t], err = ssh.ParseRawPrivateKey(k) + if err != nil { + panic(fmt.Sprintf("Unable to parse test key %s: %v", t, err)) + } + testSigners[t], err = ssh.NewSignerFromKey(testPrivateKeys[t]) + if err != nil { + panic(fmt.Sprintf("Unable to create signer for test key %s: %v", t, err)) + } + testPublicKeys[t] = testSigners[t].PublicKey() + } + + // Create a cert and sign it for use in tests. + testCert := &ssh.Certificate{ + Nonce: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + ValidPrincipals: []string{"gopher1", "gopher2"}, // increases test coverage + ValidAfter: 0, // unix epoch + ValidBefore: ssh.CertTimeInfinity, // The end of currently representable time. + Reserved: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + Key: testPublicKeys["ecdsa"], + SignatureKey: testPublicKeys["rsa"], + Permissions: ssh.Permissions{ + CriticalOptions: map[string]string{}, + Extensions: map[string]string{}, + }, + } + testCert.SignCert(rand.Reader, testSigners["rsa"]) + testPrivateKeys["cert"] = testPrivateKeys["ecdsa"] + testSigners["cert"], err = ssh.NewCertSigner(testCert, testSigners["ecdsa"]) + if err != nil { + panic(fmt.Sprintf("Unable to create certificate signer: %v", err)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/benchmark_test.go b/vendor/golang.org/x/crypto/ssh/benchmark_test.go new file mode 100644 index 0000000..d9f7eb9 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/benchmark_test.go @@ -0,0 +1,122 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "errors" + "io" + "net" + "testing" +) + +type server struct { + *ServerConn + chans <-chan NewChannel +} + +func newServer(c net.Conn, conf *ServerConfig) (*server, error) { + sconn, chans, reqs, err := NewServerConn(c, conf) + if err != nil { + return nil, err + } + go DiscardRequests(reqs) + return &server{sconn, chans}, nil +} + +func (s *server) Accept() (NewChannel, error) { + n, ok := <-s.chans + if !ok { + return nil, io.EOF + } + return n, nil +} + +func sshPipe() (Conn, *server, error) { + c1, c2, err := netPipe() + if err != nil { + return nil, nil, err + } + + clientConf := ClientConfig{ + User: "user", + } + serverConf := ServerConfig{ + NoClientAuth: true, + } + serverConf.AddHostKey(testSigners["ecdsa"]) + done := make(chan *server, 1) + go func() { + server, err := newServer(c2, &serverConf) + if err != nil { + done <- nil + } + done <- server + }() + + client, _, reqs, err := NewClientConn(c1, "", &clientConf) + if err != nil { + return nil, nil, err + } + + server := <-done + if server == nil { + return nil, nil, errors.New("server handshake failed.") + } + go DiscardRequests(reqs) + + return client, server, nil +} + +func BenchmarkEndToEnd(b *testing.B) { + b.StopTimer() + + client, server, err := sshPipe() + if err != nil { + b.Fatalf("sshPipe: %v", err) + } + + defer client.Close() + defer server.Close() + + size := (1 << 20) + input := make([]byte, size) + output := make([]byte, size) + b.SetBytes(int64(size)) + done := make(chan int, 1) + + go func() { + newCh, err := server.Accept() + if err != nil { + b.Fatalf("Client: %v", err) + } + ch, incoming, err := newCh.Accept() + go DiscardRequests(incoming) + for i := 0; i < b.N; i++ { + if _, err := io.ReadFull(ch, output); err != nil { + b.Fatalf("ReadFull: %v", err) + } + } + ch.Close() + done <- 1 + }() + + ch, in, err := client.OpenChannel("speed", nil) + if err != nil { + b.Fatalf("OpenChannel: %v", err) + } + go DiscardRequests(in) + + b.ResetTimer() + b.StartTimer() + for i := 0; i < b.N; i++ { + if _, err := ch.Write(input); err != nil { + b.Fatalf("WriteFull: %v", err) + } + } + ch.Close() + b.StopTimer() + + <-done +} diff --git a/vendor/golang.org/x/crypto/ssh/buffer.go b/vendor/golang.org/x/crypto/ssh/buffer.go new file mode 100644 index 0000000..1ab07d0 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/buffer.go @@ -0,0 +1,97 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "io" + "sync" +) + +// buffer provides a linked list buffer for data exchange +// between producer and consumer. Theoretically the buffer is +// of unlimited capacity as it does no allocation of its own. +type buffer struct { + // protects concurrent access to head, tail and closed + *sync.Cond + + head *element // the buffer that will be read first + tail *element // the buffer that will be read last + + closed bool +} + +// An element represents a single link in a linked list. +type element struct { + buf []byte + next *element +} + +// newBuffer returns an empty buffer that is not closed. +func newBuffer() *buffer { + e := new(element) + b := &buffer{ + Cond: newCond(), + head: e, + tail: e, + } + return b +} + +// write makes buf available for Read to receive. +// buf must not be modified after the call to write. +func (b *buffer) write(buf []byte) { + b.Cond.L.Lock() + e := &element{buf: buf} + b.tail.next = e + b.tail = e + b.Cond.Signal() + b.Cond.L.Unlock() +} + +// eof closes the buffer. Reads from the buffer once all +// the data has been consumed will receive io.EOF. +func (b *buffer) eof() { + b.Cond.L.Lock() + b.closed = true + b.Cond.Signal() + b.Cond.L.Unlock() +} + +// Read reads data from the internal buffer in buf. Reads will block +// if no data is available, or until the buffer is closed. +func (b *buffer) Read(buf []byte) (n int, err error) { + b.Cond.L.Lock() + defer b.Cond.L.Unlock() + + for len(buf) > 0 { + // if there is data in b.head, copy it + if len(b.head.buf) > 0 { + r := copy(buf, b.head.buf) + buf, b.head.buf = buf[r:], b.head.buf[r:] + n += r + continue + } + // if there is a next buffer, make it the head + if len(b.head.buf) == 0 && b.head != b.tail { + b.head = b.head.next + continue + } + + // if at least one byte has been copied, return + if n > 0 { + break + } + + // if nothing was read, and there is nothing outstanding + // check to see if the buffer is closed. + if b.closed { + err = io.EOF + break + } + // out of buffers, wait for producer + b.Cond.Wait() + } + return +} diff --git a/vendor/golang.org/x/crypto/ssh/buffer_test.go b/vendor/golang.org/x/crypto/ssh/buffer_test.go new file mode 100644 index 0000000..d5781cb --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/buffer_test.go @@ -0,0 +1,87 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "io" + "testing" +) + +var alphabet = []byte("abcdefghijklmnopqrstuvwxyz") + +func TestBufferReadwrite(t *testing.T) { + b := newBuffer() + b.write(alphabet[:10]) + r, _ := b.Read(make([]byte, 10)) + if r != 10 { + t.Fatalf("Expected written == read == 10, written: 10, read %d", r) + } + + b = newBuffer() + b.write(alphabet[:5]) + r, _ = b.Read(make([]byte, 10)) + if r != 5 { + t.Fatalf("Expected written == read == 5, written: 5, read %d", r) + } + + b = newBuffer() + b.write(alphabet[:10]) + r, _ = b.Read(make([]byte, 5)) + if r != 5 { + t.Fatalf("Expected written == 10, read == 5, written: 10, read %d", r) + } + + b = newBuffer() + b.write(alphabet[:5]) + b.write(alphabet[5:15]) + r, _ = b.Read(make([]byte, 10)) + r2, _ := b.Read(make([]byte, 10)) + if r != 10 || r2 != 5 || 15 != r+r2 { + t.Fatal("Expected written == read == 15") + } +} + +func TestBufferClose(t *testing.T) { + b := newBuffer() + b.write(alphabet[:10]) + b.eof() + _, err := b.Read(make([]byte, 5)) + if err != nil { + t.Fatal("expected read of 5 to not return EOF") + } + b = newBuffer() + b.write(alphabet[:10]) + b.eof() + r, err := b.Read(make([]byte, 5)) + r2, err2 := b.Read(make([]byte, 10)) + if r != 5 || r2 != 5 || err != nil || err2 != nil { + t.Fatal("expected reads of 5 and 5") + } + + b = newBuffer() + b.write(alphabet[:10]) + b.eof() + r, err = b.Read(make([]byte, 5)) + r2, err2 = b.Read(make([]byte, 10)) + r3, err3 := b.Read(make([]byte, 10)) + if r != 5 || r2 != 5 || r3 != 0 || err != nil || err2 != nil || err3 != io.EOF { + t.Fatal("expected reads of 5 and 5 and 0, with EOF") + } + + b = newBuffer() + b.write(make([]byte, 5)) + b.write(make([]byte, 10)) + b.eof() + r, err = b.Read(make([]byte, 9)) + r2, err2 = b.Read(make([]byte, 3)) + r3, err3 = b.Read(make([]byte, 3)) + r4, err4 := b.Read(make([]byte, 10)) + if err != nil || err2 != nil || err3 != nil || err4 != io.EOF { + t.Fatalf("Expected EOF on forth read only, err=%v, err2=%v, err3=%v, err4=%v", err, err2, err3, err4) + } + if r != 9 || r2 != 3 || r3 != 3 || r4 != 0 { + t.Fatal("Expected written == read == 15", r, r2, r3, r4) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/certs.go b/vendor/golang.org/x/crypto/ssh/certs.go new file mode 100644 index 0000000..b1f0220 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/certs.go @@ -0,0 +1,519 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "errors" + "fmt" + "io" + "net" + "sort" + "time" +) + +// These constants from [PROTOCOL.certkeys] represent the algorithm names +// for certificate types supported by this package. +const ( + CertAlgoRSAv01 = "ssh-rsa-cert-v01@openssh.com" + CertAlgoDSAv01 = "ssh-dss-cert-v01@openssh.com" + CertAlgoECDSA256v01 = "ecdsa-sha2-nistp256-cert-v01@openssh.com" + CertAlgoECDSA384v01 = "ecdsa-sha2-nistp384-cert-v01@openssh.com" + CertAlgoECDSA521v01 = "ecdsa-sha2-nistp521-cert-v01@openssh.com" + CertAlgoED25519v01 = "ssh-ed25519-cert-v01@openssh.com" +) + +// Certificate types distinguish between host and user +// certificates. The values can be set in the CertType field of +// Certificate. +const ( + UserCert = 1 + HostCert = 2 +) + +// Signature represents a cryptographic signature. +type Signature struct { + Format string + Blob []byte +} + +// CertTimeInfinity can be used for OpenSSHCertV01.ValidBefore to indicate that +// a certificate does not expire. +const CertTimeInfinity = 1<<64 - 1 + +// An Certificate represents an OpenSSH certificate as defined in +// [PROTOCOL.certkeys]?rev=1.8. +type Certificate struct { + Nonce []byte + Key PublicKey + Serial uint64 + CertType uint32 + KeyId string + ValidPrincipals []string + ValidAfter uint64 + ValidBefore uint64 + Permissions + Reserved []byte + SignatureKey PublicKey + Signature *Signature +} + +// genericCertData holds the key-independent part of the certificate data. +// Overall, certificates contain an nonce, public key fields and +// key-independent fields. +type genericCertData struct { + Serial uint64 + CertType uint32 + KeyId string + ValidPrincipals []byte + ValidAfter uint64 + ValidBefore uint64 + CriticalOptions []byte + Extensions []byte + Reserved []byte + SignatureKey []byte + Signature []byte +} + +func marshalStringList(namelist []string) []byte { + var to []byte + for _, name := range namelist { + s := struct{ N string }{name} + to = append(to, Marshal(&s)...) + } + return to +} + +type optionsTuple struct { + Key string + Value []byte +} + +type optionsTupleValue struct { + Value string +} + +// serialize a map of critical options or extensions +// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation, +// we need two length prefixes for a non-empty string value +func marshalTuples(tups map[string]string) []byte { + keys := make([]string, 0, len(tups)) + for key := range tups { + keys = append(keys, key) + } + sort.Strings(keys) + + var ret []byte + for _, key := range keys { + s := optionsTuple{Key: key} + if value := tups[key]; len(value) > 0 { + s.Value = Marshal(&optionsTupleValue{value}) + } + ret = append(ret, Marshal(&s)...) + } + return ret +} + +// issue #10569 - per [PROTOCOL.certkeys] and SSH implementation, +// we need two length prefixes for a non-empty option value +func parseTuples(in []byte) (map[string]string, error) { + tups := map[string]string{} + var lastKey string + var haveLastKey bool + + for len(in) > 0 { + var key, val, extra []byte + var ok bool + + if key, in, ok = parseString(in); !ok { + return nil, errShortRead + } + keyStr := string(key) + // according to [PROTOCOL.certkeys], the names must be in + // lexical order. + if haveLastKey && keyStr <= lastKey { + return nil, fmt.Errorf("ssh: certificate options are not in lexical order") + } + lastKey, haveLastKey = keyStr, true + // the next field is a data field, which if non-empty has a string embedded + if val, in, ok = parseString(in); !ok { + return nil, errShortRead + } + if len(val) > 0 { + val, extra, ok = parseString(val) + if !ok { + return nil, errShortRead + } + if len(extra) > 0 { + return nil, fmt.Errorf("ssh: unexpected trailing data after certificate option value") + } + tups[keyStr] = string(val) + } else { + tups[keyStr] = "" + } + } + return tups, nil +} + +func parseCert(in []byte, privAlgo string) (*Certificate, error) { + nonce, rest, ok := parseString(in) + if !ok { + return nil, errShortRead + } + + key, rest, err := parsePubKey(rest, privAlgo) + if err != nil { + return nil, err + } + + var g genericCertData + if err := Unmarshal(rest, &g); err != nil { + return nil, err + } + + c := &Certificate{ + Nonce: nonce, + Key: key, + Serial: g.Serial, + CertType: g.CertType, + KeyId: g.KeyId, + ValidAfter: g.ValidAfter, + ValidBefore: g.ValidBefore, + } + + for principals := g.ValidPrincipals; len(principals) > 0; { + principal, rest, ok := parseString(principals) + if !ok { + return nil, errShortRead + } + c.ValidPrincipals = append(c.ValidPrincipals, string(principal)) + principals = rest + } + + c.CriticalOptions, err = parseTuples(g.CriticalOptions) + if err != nil { + return nil, err + } + c.Extensions, err = parseTuples(g.Extensions) + if err != nil { + return nil, err + } + c.Reserved = g.Reserved + k, err := ParsePublicKey(g.SignatureKey) + if err != nil { + return nil, err + } + + c.SignatureKey = k + c.Signature, rest, ok = parseSignatureBody(g.Signature) + if !ok || len(rest) > 0 { + return nil, errors.New("ssh: signature parse error") + } + + return c, nil +} + +type openSSHCertSigner struct { + pub *Certificate + signer Signer +} + +// NewCertSigner returns a Signer that signs with the given Certificate, whose +// private key is held by signer. It returns an error if the public key in cert +// doesn't match the key used by signer. +func NewCertSigner(cert *Certificate, signer Signer) (Signer, error) { + if bytes.Compare(cert.Key.Marshal(), signer.PublicKey().Marshal()) != 0 { + return nil, errors.New("ssh: signer and cert have different public key") + } + + return &openSSHCertSigner{cert, signer}, nil +} + +func (s *openSSHCertSigner) Sign(rand io.Reader, data []byte) (*Signature, error) { + return s.signer.Sign(rand, data) +} + +func (s *openSSHCertSigner) PublicKey() PublicKey { + return s.pub +} + +const sourceAddressCriticalOption = "source-address" + +// CertChecker does the work of verifying a certificate. Its methods +// can be plugged into ClientConfig.HostKeyCallback and +// ServerConfig.PublicKeyCallback. For the CertChecker to work, +// minimally, the IsAuthority callback should be set. +type CertChecker struct { + // SupportedCriticalOptions lists the CriticalOptions that the + // server application layer understands. These are only used + // for user certificates. + SupportedCriticalOptions []string + + // IsUserAuthority should return true if the key is recognized as an + // authority for the given user certificate. This allows for + // certificates to be signed by other certificates. This must be set + // if this CertChecker will be checking user certificates. + IsUserAuthority func(auth PublicKey) bool + + // IsHostAuthority should report whether the key is recognized as + // an authority for this host. This allows for certificates to be + // signed by other keys, and for those other keys to only be valid + // signers for particular hostnames. This must be set if this + // CertChecker will be checking host certificates. + IsHostAuthority func(auth PublicKey, address string) bool + + // Clock is used for verifying time stamps. If nil, time.Now + // is used. + Clock func() time.Time + + // UserKeyFallback is called when CertChecker.Authenticate encounters a + // public key that is not a certificate. It must implement validation + // of user keys or else, if nil, all such keys are rejected. + UserKeyFallback func(conn ConnMetadata, key PublicKey) (*Permissions, error) + + // HostKeyFallback is called when CertChecker.CheckHostKey encounters a + // public key that is not a certificate. It must implement host key + // validation or else, if nil, all such keys are rejected. + HostKeyFallback HostKeyCallback + + // IsRevoked is called for each certificate so that revocation checking + // can be implemented. It should return true if the given certificate + // is revoked and false otherwise. If nil, no certificates are + // considered to have been revoked. + IsRevoked func(cert *Certificate) bool +} + +// CheckHostKey checks a host key certificate. This method can be +// plugged into ClientConfig.HostKeyCallback. +func (c *CertChecker) CheckHostKey(addr string, remote net.Addr, key PublicKey) error { + cert, ok := key.(*Certificate) + if !ok { + if c.HostKeyFallback != nil { + return c.HostKeyFallback(addr, remote, key) + } + return errors.New("ssh: non-certificate host key") + } + if cert.CertType != HostCert { + return fmt.Errorf("ssh: certificate presented as a host key has type %d", cert.CertType) + } + if !c.IsHostAuthority(cert.SignatureKey, addr) { + return fmt.Errorf("ssh: no authorities for hostname: %v", addr) + } + + hostname, _, err := net.SplitHostPort(addr) + if err != nil { + return err + } + + // Pass hostname only as principal for host certificates (consistent with OpenSSH) + return c.CheckCert(hostname, cert) +} + +// Authenticate checks a user certificate. Authenticate can be used as +// a value for ServerConfig.PublicKeyCallback. +func (c *CertChecker) Authenticate(conn ConnMetadata, pubKey PublicKey) (*Permissions, error) { + cert, ok := pubKey.(*Certificate) + if !ok { + if c.UserKeyFallback != nil { + return c.UserKeyFallback(conn, pubKey) + } + return nil, errors.New("ssh: normal key pairs not accepted") + } + + if cert.CertType != UserCert { + return nil, fmt.Errorf("ssh: cert has type %d", cert.CertType) + } + if !c.IsUserAuthority(cert.SignatureKey) { + return nil, fmt.Errorf("ssh: certificate signed by unrecognized authority") + } + + if err := c.CheckCert(conn.User(), cert); err != nil { + return nil, err + } + + return &cert.Permissions, nil +} + +// CheckCert checks CriticalOptions, ValidPrincipals, revocation, timestamp and +// the signature of the certificate. +func (c *CertChecker) CheckCert(principal string, cert *Certificate) error { + if c.IsRevoked != nil && c.IsRevoked(cert) { + return fmt.Errorf("ssh: certicate serial %d revoked", cert.Serial) + } + + for opt, _ := range cert.CriticalOptions { + // sourceAddressCriticalOption will be enforced by + // serverAuthenticate + if opt == sourceAddressCriticalOption { + continue + } + + found := false + for _, supp := range c.SupportedCriticalOptions { + if supp == opt { + found = true + break + } + } + if !found { + return fmt.Errorf("ssh: unsupported critical option %q in certificate", opt) + } + } + + if len(cert.ValidPrincipals) > 0 { + // By default, certs are valid for all users/hosts. + found := false + for _, p := range cert.ValidPrincipals { + if p == principal { + found = true + break + } + } + if !found { + return fmt.Errorf("ssh: principal %q not in the set of valid principals for given certificate: %q", principal, cert.ValidPrincipals) + } + } + + clock := c.Clock + if clock == nil { + clock = time.Now + } + + unixNow := clock().Unix() + if after := int64(cert.ValidAfter); after < 0 || unixNow < int64(cert.ValidAfter) { + return fmt.Errorf("ssh: cert is not yet valid") + } + if before := int64(cert.ValidBefore); cert.ValidBefore != uint64(CertTimeInfinity) && (unixNow >= before || before < 0) { + return fmt.Errorf("ssh: cert has expired") + } + if err := cert.SignatureKey.Verify(cert.bytesForSigning(), cert.Signature); err != nil { + return fmt.Errorf("ssh: certificate signature does not verify") + } + + return nil +} + +// SignCert sets c.SignatureKey to the authority's public key and stores a +// Signature, by authority, in the certificate. +func (c *Certificate) SignCert(rand io.Reader, authority Signer) error { + c.Nonce = make([]byte, 32) + if _, err := io.ReadFull(rand, c.Nonce); err != nil { + return err + } + c.SignatureKey = authority.PublicKey() + + sig, err := authority.Sign(rand, c.bytesForSigning()) + if err != nil { + return err + } + c.Signature = sig + return nil +} + +var certAlgoNames = map[string]string{ + KeyAlgoRSA: CertAlgoRSAv01, + KeyAlgoDSA: CertAlgoDSAv01, + KeyAlgoECDSA256: CertAlgoECDSA256v01, + KeyAlgoECDSA384: CertAlgoECDSA384v01, + KeyAlgoECDSA521: CertAlgoECDSA521v01, + KeyAlgoED25519: CertAlgoED25519v01, +} + +// certToPrivAlgo returns the underlying algorithm for a certificate algorithm. +// Panics if a non-certificate algorithm is passed. +func certToPrivAlgo(algo string) string { + for privAlgo, pubAlgo := range certAlgoNames { + if pubAlgo == algo { + return privAlgo + } + } + panic("unknown cert algorithm") +} + +func (cert *Certificate) bytesForSigning() []byte { + c2 := *cert + c2.Signature = nil + out := c2.Marshal() + // Drop trailing signature length. + return out[:len(out)-4] +} + +// Marshal serializes c into OpenSSH's wire format. It is part of the +// PublicKey interface. +func (c *Certificate) Marshal() []byte { + generic := genericCertData{ + Serial: c.Serial, + CertType: c.CertType, + KeyId: c.KeyId, + ValidPrincipals: marshalStringList(c.ValidPrincipals), + ValidAfter: uint64(c.ValidAfter), + ValidBefore: uint64(c.ValidBefore), + CriticalOptions: marshalTuples(c.CriticalOptions), + Extensions: marshalTuples(c.Extensions), + Reserved: c.Reserved, + SignatureKey: c.SignatureKey.Marshal(), + } + if c.Signature != nil { + generic.Signature = Marshal(c.Signature) + } + genericBytes := Marshal(&generic) + keyBytes := c.Key.Marshal() + _, keyBytes, _ = parseString(keyBytes) + prefix := Marshal(&struct { + Name string + Nonce []byte + Key []byte `ssh:"rest"` + }{c.Type(), c.Nonce, keyBytes}) + + result := make([]byte, 0, len(prefix)+len(genericBytes)) + result = append(result, prefix...) + result = append(result, genericBytes...) + return result +} + +// Type returns the key name. It is part of the PublicKey interface. +func (c *Certificate) Type() string { + algo, ok := certAlgoNames[c.Key.Type()] + if !ok { + panic("unknown cert key type " + c.Key.Type()) + } + return algo +} + +// Verify verifies a signature against the certificate's public +// key. It is part of the PublicKey interface. +func (c *Certificate) Verify(data []byte, sig *Signature) error { + return c.Key.Verify(data, sig) +} + +func parseSignatureBody(in []byte) (out *Signature, rest []byte, ok bool) { + format, in, ok := parseString(in) + if !ok { + return + } + + out = &Signature{ + Format: string(format), + } + + if out.Blob, in, ok = parseString(in); !ok { + return + } + + return out, in, ok +} + +func parseSignature(in []byte) (out *Signature, rest []byte, ok bool) { + sigBytes, rest, ok := parseString(in) + if !ok { + return + } + + out, trailing, ok := parseSignatureBody(sigBytes) + if !ok || len(trailing) > 0 { + return nil, nil, false + } + return +} diff --git a/vendor/golang.org/x/crypto/ssh/certs_test.go b/vendor/golang.org/x/crypto/ssh/certs_test.go new file mode 100644 index 0000000..0200531 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/certs_test.go @@ -0,0 +1,222 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/rand" + "reflect" + "testing" + "time" +) + +// Cert generated by ssh-keygen 6.0p1 Debian-4. +// % ssh-keygen -s ca-key -I test user-key +const exampleSSHCert = `ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgb1srW/W3ZDjYAO45xLYAwzHBDLsJ4Ux6ICFIkTjb1LEAAAADAQABAAAAYQCkoR51poH0wE8w72cqSB8Sszx+vAhzcMdCO0wqHTj7UNENHWEXGrU0E0UQekD7U+yhkhtoyjbPOVIP7hNa6aRk/ezdh/iUnCIt4Jt1v3Z1h1P+hA4QuYFMHNB+rmjPwAcAAAAAAAAAAAAAAAEAAAAEdGVzdAAAAAAAAAAAAAAAAP//////////AAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAHcAAAAHc3NoLXJzYQAAAAMBAAEAAABhANFS2kaktpSGc+CcmEKPyw9mJC4nZKxHKTgLVZeaGbFZOvJTNzBspQHdy7Q1uKSfktxpgjZnksiu/tFF9ngyY2KFoc+U88ya95IZUycBGCUbBQ8+bhDtw/icdDGQD5WnUwAAAG8AAAAHc3NoLXJzYQAAAGC8Y9Z2LQKhIhxf52773XaWrXdxP0t3GBVo4A10vUWiYoAGepr6rQIoGGXFxT4B9Gp+nEBJjOwKDXPrAevow0T9ca8gZN+0ykbhSrXLE5Ao48rqr3zP4O1/9P7e6gp0gw8=` + +func TestParseCert(t *testing.T) { + authKeyBytes := []byte(exampleSSHCert) + + key, _, _, rest, err := ParseAuthorizedKey(authKeyBytes) + if err != nil { + t.Fatalf("ParseAuthorizedKey: %v", err) + } + if len(rest) > 0 { + t.Errorf("rest: got %q, want empty", rest) + } + + if _, ok := key.(*Certificate); !ok { + t.Fatalf("got %v (%T), want *Certificate", key, key) + } + + marshaled := MarshalAuthorizedKey(key) + // Before comparison, remove the trailing newline that + // MarshalAuthorizedKey adds. + marshaled = marshaled[:len(marshaled)-1] + if !bytes.Equal(authKeyBytes, marshaled) { + t.Errorf("marshaled certificate does not match original: got %q, want %q", marshaled, authKeyBytes) + } +} + +// Cert generated by ssh-keygen OpenSSH_6.8p1 OS X 10.10.3 +// % ssh-keygen -s ca -I testcert -O source-address=192.168.1.0/24 -O force-command=/bin/sleep user.pub +// user.pub key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDACh1rt2DXfV3hk6fszSQcQ/rueMId0kVD9U7nl8cfEnFxqOCrNT92g4laQIGl2mn8lsGZfTLg8ksHq3gkvgO3oo/0wHy4v32JeBOHTsN5AL4gfHNEhWeWb50ev47hnTsRIt9P4dxogeUo/hTu7j9+s9lLpEQXCvq6xocXQt0j8MV9qZBBXFLXVT3cWIkSqOdwt/5ZBg+1GSrc7WfCXVWgTk4a20uPMuJPxU4RQwZW6X3+O8Pqo8C3cW0OzZRFP6gUYUKUsTI5WntlS+LAxgw1mZNsozFGdbiOPRnEryE3SRldh9vjDR3tin1fGpA5P7+CEB/bqaXtG3V+F2OkqaMN +// Critical Options: +// force-command /bin/sleep +// source-address 192.168.1.0/24 +// Extensions: +// permit-X11-forwarding +// permit-agent-forwarding +// permit-port-forwarding +// permit-pty +// permit-user-rc +const exampleSSHCertWithOptions = `ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgDyysCJY0XrO1n03EeRRoITnTPdjENFmWDs9X58PP3VUAAAADAQABAAABAQDACh1rt2DXfV3hk6fszSQcQ/rueMId0kVD9U7nl8cfEnFxqOCrNT92g4laQIGl2mn8lsGZfTLg8ksHq3gkvgO3oo/0wHy4v32JeBOHTsN5AL4gfHNEhWeWb50ev47hnTsRIt9P4dxogeUo/hTu7j9+s9lLpEQXCvq6xocXQt0j8MV9qZBBXFLXVT3cWIkSqOdwt/5ZBg+1GSrc7WfCXVWgTk4a20uPMuJPxU4RQwZW6X3+O8Pqo8C3cW0OzZRFP6gUYUKUsTI5WntlS+LAxgw1mZNsozFGdbiOPRnEryE3SRldh9vjDR3tin1fGpA5P7+CEB/bqaXtG3V+F2OkqaMNAAAAAAAAAAAAAAABAAAACHRlc3RjZXJ0AAAAAAAAAAAAAAAA//////////8AAABLAAAADWZvcmNlLWNvbW1hbmQAAAAOAAAACi9iaW4vc2xlZXAAAAAOc291cmNlLWFkZHJlc3MAAAASAAAADjE5Mi4xNjguMS4wLzI0AAAAggAAABVwZXJtaXQtWDExLWZvcndhcmRpbmcAAAAAAAAAF3Blcm1pdC1hZ2VudC1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAABFwAAAAdzc2gtcnNhAAAAAwEAAQAAAQEAwU+c5ui5A8+J/CFpjW8wCa52bEODA808WWQDCSuTG/eMXNf59v9Y8Pk0F1E9dGCosSNyVcB/hacUrc6He+i97+HJCyKavBsE6GDxrjRyxYqAlfcOXi/IVmaUGiO8OQ39d4GHrjToInKvExSUeleQyH4Y4/e27T/pILAqPFL3fyrvMLT5qU9QyIt6zIpa7GBP5+urouNavMprV3zsfIqNBbWypinOQAw823a5wN+zwXnhZrgQiHZ/USG09Y6k98y1dTVz8YHlQVR4D3lpTAsKDKJ5hCH9WU4fdf+lU8OyNGaJ/vz0XNqxcToe1l4numLTnaoSuH89pHryjqurB7lJKwAAAQ8AAAAHc3NoLXJzYQAAAQCaHvUIoPL1zWUHIXLvu96/HU1s/i4CAW2IIEuGgxCUCiFj6vyTyYtgxQxcmbfZf6eaITlS6XJZa7Qq4iaFZh75C1DXTX8labXhRSD4E2t//AIP9MC1rtQC5xo6FmbQ+BoKcDskr+mNACcbRSxs3IL3bwCfWDnIw2WbVox9ZdcthJKk4UoCW4ix4QwdHw7zlddlz++fGEEVhmTbll1SUkycGApPFBsAYRTMupUJcYPIeReBI/m8XfkoMk99bV8ZJQTAd7OekHY2/48Ff53jLmyDjP7kNw1F8OaPtkFs6dGJXta4krmaekPy87j+35In5hFj7yoOqvSbmYUkeX70/GGQ` + +func TestParseCertWithOptions(t *testing.T) { + opts := map[string]string{ + "source-address": "192.168.1.0/24", + "force-command": "/bin/sleep", + } + exts := map[string]string{ + "permit-X11-forwarding": "", + "permit-agent-forwarding": "", + "permit-port-forwarding": "", + "permit-pty": "", + "permit-user-rc": "", + } + authKeyBytes := []byte(exampleSSHCertWithOptions) + + key, _, _, rest, err := ParseAuthorizedKey(authKeyBytes) + if err != nil { + t.Fatalf("ParseAuthorizedKey: %v", err) + } + if len(rest) > 0 { + t.Errorf("rest: got %q, want empty", rest) + } + cert, ok := key.(*Certificate) + if !ok { + t.Fatalf("got %v (%T), want *Certificate", key, key) + } + if !reflect.DeepEqual(cert.CriticalOptions, opts) { + t.Errorf("unexpected critical options - got %v, want %v", cert.CriticalOptions, opts) + } + if !reflect.DeepEqual(cert.Extensions, exts) { + t.Errorf("unexpected Extensions - got %v, want %v", cert.Extensions, exts) + } + marshaled := MarshalAuthorizedKey(key) + // Before comparison, remove the trailing newline that + // MarshalAuthorizedKey adds. + marshaled = marshaled[:len(marshaled)-1] + if !bytes.Equal(authKeyBytes, marshaled) { + t.Errorf("marshaled certificate does not match original: got %q, want %q", marshaled, authKeyBytes) + } +} + +func TestValidateCert(t *testing.T) { + key, _, _, _, err := ParseAuthorizedKey([]byte(exampleSSHCert)) + if err != nil { + t.Fatalf("ParseAuthorizedKey: %v", err) + } + validCert, ok := key.(*Certificate) + if !ok { + t.Fatalf("got %v (%T), want *Certificate", key, key) + } + checker := CertChecker{} + checker.IsUserAuthority = func(k PublicKey) bool { + return bytes.Equal(k.Marshal(), validCert.SignatureKey.Marshal()) + } + + if err := checker.CheckCert("user", validCert); err != nil { + t.Errorf("Unable to validate certificate: %v", err) + } + invalidCert := &Certificate{ + Key: testPublicKeys["rsa"], + SignatureKey: testPublicKeys["ecdsa"], + ValidBefore: CertTimeInfinity, + Signature: &Signature{}, + } + if err := checker.CheckCert("user", invalidCert); err == nil { + t.Error("Invalid cert signature passed validation") + } +} + +func TestValidateCertTime(t *testing.T) { + cert := Certificate{ + ValidPrincipals: []string{"user"}, + Key: testPublicKeys["rsa"], + ValidAfter: 50, + ValidBefore: 100, + } + + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + + for ts, ok := range map[int64]bool{ + 25: false, + 50: true, + 99: true, + 100: false, + 125: false, + } { + checker := CertChecker{ + Clock: func() time.Time { return time.Unix(ts, 0) }, + } + checker.IsUserAuthority = func(k PublicKey) bool { + return bytes.Equal(k.Marshal(), + testPublicKeys["ecdsa"].Marshal()) + } + + if v := checker.CheckCert("user", &cert); (v == nil) != ok { + t.Errorf("Authenticate(%d): %v", ts, v) + } + } +} + +// TODO(hanwen): tests for +// +// host keys: +// * fallbacks + +func TestHostKeyCert(t *testing.T) { + cert := &Certificate{ + ValidPrincipals: []string{"hostname", "hostname.domain", "otherhost"}, + Key: testPublicKeys["rsa"], + ValidBefore: CertTimeInfinity, + CertType: HostCert, + } + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + + checker := &CertChecker{ + IsHostAuthority: func(p PublicKey, addr string) bool { + return addr == "hostname:22" && bytes.Equal(testPublicKeys["ecdsa"].Marshal(), p.Marshal()) + }, + } + + certSigner, err := NewCertSigner(cert, testSigners["rsa"]) + if err != nil { + t.Errorf("NewCertSigner: %v", err) + } + + for _, test := range []struct { + addr string + succeed bool + }{ + {addr: "hostname:22", succeed: true}, + {addr: "otherhost:22", succeed: false}, // The certificate is valid for 'otherhost' as hostname, but we only recognize the authority of the signer for the address 'hostname:22' + {addr: "lasthost:22", succeed: false}, + } { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + errc := make(chan error) + + go func() { + conf := ServerConfig{ + NoClientAuth: true, + } + conf.AddHostKey(certSigner) + _, _, _, err := NewServerConn(c1, &conf) + errc <- err + }() + + config := &ClientConfig{ + User: "user", + HostKeyCallback: checker.CheckHostKey, + } + _, _, _, err = NewClientConn(c2, test.addr, config) + + if (err == nil) != test.succeed { + t.Fatalf("NewClientConn(%q): %v", test.addr, err) + } + + err = <-errc + if (err == nil) != test.succeed { + t.Fatalf("NewServerConn(%q): %v", test.addr, err) + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/channel.go b/vendor/golang.org/x/crypto/ssh/channel.go new file mode 100644 index 0000000..195530e --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/channel.go @@ -0,0 +1,633 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "encoding/binary" + "errors" + "fmt" + "io" + "log" + "sync" +) + +const ( + minPacketLength = 9 + // channelMaxPacket contains the maximum number of bytes that will be + // sent in a single packet. As per RFC 4253, section 6.1, 32k is also + // the minimum. + channelMaxPacket = 1 << 15 + // We follow OpenSSH here. + channelWindowSize = 64 * channelMaxPacket +) + +// NewChannel represents an incoming request to a channel. It must either be +// accepted for use by calling Accept, or rejected by calling Reject. +type NewChannel interface { + // Accept accepts the channel creation request. It returns the Channel + // and a Go channel containing SSH requests. The Go channel must be + // serviced otherwise the Channel will hang. + Accept() (Channel, <-chan *Request, error) + + // Reject rejects the channel creation request. After calling + // this, no other methods on the Channel may be called. + Reject(reason RejectionReason, message string) error + + // ChannelType returns the type of the channel, as supplied by the + // client. + ChannelType() string + + // ExtraData returns the arbitrary payload for this channel, as supplied + // by the client. This data is specific to the channel type. + ExtraData() []byte +} + +// A Channel is an ordered, reliable, flow-controlled, duplex stream +// that is multiplexed over an SSH connection. +type Channel interface { + // Read reads up to len(data) bytes from the channel. + Read(data []byte) (int, error) + + // Write writes len(data) bytes to the channel. + Write(data []byte) (int, error) + + // Close signals end of channel use. No data may be sent after this + // call. + Close() error + + // CloseWrite signals the end of sending in-band + // data. Requests may still be sent, and the other side may + // still send data + CloseWrite() error + + // SendRequest sends a channel request. If wantReply is true, + // it will wait for a reply and return the result as a + // boolean, otherwise the return value will be false. Channel + // requests are out-of-band messages so they may be sent even + // if the data stream is closed or blocked by flow control. + // If the channel is closed before a reply is returned, io.EOF + // is returned. + SendRequest(name string, wantReply bool, payload []byte) (bool, error) + + // Stderr returns an io.ReadWriter that writes to this channel + // with the extended data type set to stderr. Stderr may + // safely be read and written from a different goroutine than + // Read and Write respectively. + Stderr() io.ReadWriter +} + +// Request is a request sent outside of the normal stream of +// data. Requests can either be specific to an SSH channel, or they +// can be global. +type Request struct { + Type string + WantReply bool + Payload []byte + + ch *channel + mux *mux +} + +// Reply sends a response to a request. It must be called for all requests +// where WantReply is true and is a no-op otherwise. The payload argument is +// ignored for replies to channel-specific requests. +func (r *Request) Reply(ok bool, payload []byte) error { + if !r.WantReply { + return nil + } + + if r.ch == nil { + return r.mux.ackRequest(ok, payload) + } + + return r.ch.ackRequest(ok) +} + +// RejectionReason is an enumeration used when rejecting channel creation +// requests. See RFC 4254, section 5.1. +type RejectionReason uint32 + +const ( + Prohibited RejectionReason = iota + 1 + ConnectionFailed + UnknownChannelType + ResourceShortage +) + +// String converts the rejection reason to human readable form. +func (r RejectionReason) String() string { + switch r { + case Prohibited: + return "administratively prohibited" + case ConnectionFailed: + return "connect failed" + case UnknownChannelType: + return "unknown channel type" + case ResourceShortage: + return "resource shortage" + } + return fmt.Sprintf("unknown reason %d", int(r)) +} + +func min(a uint32, b int) uint32 { + if a < uint32(b) { + return a + } + return uint32(b) +} + +type channelDirection uint8 + +const ( + channelInbound channelDirection = iota + channelOutbound +) + +// channel is an implementation of the Channel interface that works +// with the mux class. +type channel struct { + // R/O after creation + chanType string + extraData []byte + localId, remoteId uint32 + + // maxIncomingPayload and maxRemotePayload are the maximum + // payload sizes of normal and extended data packets for + // receiving and sending, respectively. The wire packet will + // be 9 or 13 bytes larger (excluding encryption overhead). + maxIncomingPayload uint32 + maxRemotePayload uint32 + + mux *mux + + // decided is set to true if an accept or reject message has been sent + // (for outbound channels) or received (for inbound channels). + decided bool + + // direction contains either channelOutbound, for channels created + // locally, or channelInbound, for channels created by the peer. + direction channelDirection + + // Pending internal channel messages. + msg chan interface{} + + // Since requests have no ID, there can be only one request + // with WantReply=true outstanding. This lock is held by a + // goroutine that has such an outgoing request pending. + sentRequestMu sync.Mutex + + incomingRequests chan *Request + + sentEOF bool + + // thread-safe data + remoteWin window + pending *buffer + extPending *buffer + + // windowMu protects myWindow, the flow-control window. + windowMu sync.Mutex + myWindow uint32 + + // writeMu serializes calls to mux.conn.writePacket() and + // protects sentClose and packetPool. This mutex must be + // different from windowMu, as writePacket can block if there + // is a key exchange pending. + writeMu sync.Mutex + sentClose bool + + // packetPool has a buffer for each extended channel ID to + // save allocations during writes. + packetPool map[uint32][]byte +} + +// writePacket sends a packet. If the packet is a channel close, it updates +// sentClose. This method takes the lock c.writeMu. +func (c *channel) writePacket(packet []byte) error { + c.writeMu.Lock() + if c.sentClose { + c.writeMu.Unlock() + return io.EOF + } + c.sentClose = (packet[0] == msgChannelClose) + err := c.mux.conn.writePacket(packet) + c.writeMu.Unlock() + return err +} + +func (c *channel) sendMessage(msg interface{}) error { + if debugMux { + log.Printf("send(%d): %#v", c.mux.chanList.offset, msg) + } + + p := Marshal(msg) + binary.BigEndian.PutUint32(p[1:], c.remoteId) + return c.writePacket(p) +} + +// WriteExtended writes data to a specific extended stream. These streams are +// used, for example, for stderr. +func (c *channel) WriteExtended(data []byte, extendedCode uint32) (n int, err error) { + if c.sentEOF { + return 0, io.EOF + } + // 1 byte message type, 4 bytes remoteId, 4 bytes data length + opCode := byte(msgChannelData) + headerLength := uint32(9) + if extendedCode > 0 { + headerLength += 4 + opCode = msgChannelExtendedData + } + + c.writeMu.Lock() + packet := c.packetPool[extendedCode] + // We don't remove the buffer from packetPool, so + // WriteExtended calls from different goroutines will be + // flagged as errors by the race detector. + c.writeMu.Unlock() + + for len(data) > 0 { + space := min(c.maxRemotePayload, len(data)) + if space, err = c.remoteWin.reserve(space); err != nil { + return n, err + } + if want := headerLength + space; uint32(cap(packet)) < want { + packet = make([]byte, want) + } else { + packet = packet[:want] + } + + todo := data[:space] + + packet[0] = opCode + binary.BigEndian.PutUint32(packet[1:], c.remoteId) + if extendedCode > 0 { + binary.BigEndian.PutUint32(packet[5:], uint32(extendedCode)) + } + binary.BigEndian.PutUint32(packet[headerLength-4:], uint32(len(todo))) + copy(packet[headerLength:], todo) + if err = c.writePacket(packet); err != nil { + return n, err + } + + n += len(todo) + data = data[len(todo):] + } + + c.writeMu.Lock() + c.packetPool[extendedCode] = packet + c.writeMu.Unlock() + + return n, err +} + +func (c *channel) handleData(packet []byte) error { + headerLen := 9 + isExtendedData := packet[0] == msgChannelExtendedData + if isExtendedData { + headerLen = 13 + } + if len(packet) < headerLen { + // malformed data packet + return parseError(packet[0]) + } + + var extended uint32 + if isExtendedData { + extended = binary.BigEndian.Uint32(packet[5:]) + } + + length := binary.BigEndian.Uint32(packet[headerLen-4 : headerLen]) + if length == 0 { + return nil + } + if length > c.maxIncomingPayload { + // TODO(hanwen): should send Disconnect? + return errors.New("ssh: incoming packet exceeds maximum payload size") + } + + data := packet[headerLen:] + if length != uint32(len(data)) { + return errors.New("ssh: wrong packet length") + } + + c.windowMu.Lock() + if c.myWindow < length { + c.windowMu.Unlock() + // TODO(hanwen): should send Disconnect with reason? + return errors.New("ssh: remote side wrote too much") + } + c.myWindow -= length + c.windowMu.Unlock() + + if extended == 1 { + c.extPending.write(data) + } else if extended > 0 { + // discard other extended data. + } else { + c.pending.write(data) + } + return nil +} + +func (c *channel) adjustWindow(n uint32) error { + c.windowMu.Lock() + // Since myWindow is managed on our side, and can never exceed + // the initial window setting, we don't worry about overflow. + c.myWindow += uint32(n) + c.windowMu.Unlock() + return c.sendMessage(windowAdjustMsg{ + AdditionalBytes: uint32(n), + }) +} + +func (c *channel) ReadExtended(data []byte, extended uint32) (n int, err error) { + switch extended { + case 1: + n, err = c.extPending.Read(data) + case 0: + n, err = c.pending.Read(data) + default: + return 0, fmt.Errorf("ssh: extended code %d unimplemented", extended) + } + + if n > 0 { + err = c.adjustWindow(uint32(n)) + // sendWindowAdjust can return io.EOF if the remote + // peer has closed the connection, however we want to + // defer forwarding io.EOF to the caller of Read until + // the buffer has been drained. + if n > 0 && err == io.EOF { + err = nil + } + } + + return n, err +} + +func (c *channel) close() { + c.pending.eof() + c.extPending.eof() + close(c.msg) + close(c.incomingRequests) + c.writeMu.Lock() + // This is not necessary for a normal channel teardown, but if + // there was another error, it is. + c.sentClose = true + c.writeMu.Unlock() + // Unblock writers. + c.remoteWin.close() +} + +// responseMessageReceived is called when a success or failure message is +// received on a channel to check that such a message is reasonable for the +// given channel. +func (c *channel) responseMessageReceived() error { + if c.direction == channelInbound { + return errors.New("ssh: channel response message received on inbound channel") + } + if c.decided { + return errors.New("ssh: duplicate response received for channel") + } + c.decided = true + return nil +} + +func (c *channel) handlePacket(packet []byte) error { + switch packet[0] { + case msgChannelData, msgChannelExtendedData: + return c.handleData(packet) + case msgChannelClose: + c.sendMessage(channelCloseMsg{PeersId: c.remoteId}) + c.mux.chanList.remove(c.localId) + c.close() + return nil + case msgChannelEOF: + // RFC 4254 is mute on how EOF affects dataExt messages but + // it is logical to signal EOF at the same time. + c.extPending.eof() + c.pending.eof() + return nil + } + + decoded, err := decode(packet) + if err != nil { + return err + } + + switch msg := decoded.(type) { + case *channelOpenFailureMsg: + if err := c.responseMessageReceived(); err != nil { + return err + } + c.mux.chanList.remove(msg.PeersId) + c.msg <- msg + case *channelOpenConfirmMsg: + if err := c.responseMessageReceived(); err != nil { + return err + } + if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 { + return fmt.Errorf("ssh: invalid MaxPacketSize %d from peer", msg.MaxPacketSize) + } + c.remoteId = msg.MyId + c.maxRemotePayload = msg.MaxPacketSize + c.remoteWin.add(msg.MyWindow) + c.msg <- msg + case *windowAdjustMsg: + if !c.remoteWin.add(msg.AdditionalBytes) { + return fmt.Errorf("ssh: invalid window update for %d bytes", msg.AdditionalBytes) + } + case *channelRequestMsg: + req := Request{ + Type: msg.Request, + WantReply: msg.WantReply, + Payload: msg.RequestSpecificData, + ch: c, + } + + c.incomingRequests <- &req + default: + c.msg <- msg + } + return nil +} + +func (m *mux) newChannel(chanType string, direction channelDirection, extraData []byte) *channel { + ch := &channel{ + remoteWin: window{Cond: newCond()}, + myWindow: channelWindowSize, + pending: newBuffer(), + extPending: newBuffer(), + direction: direction, + incomingRequests: make(chan *Request, chanSize), + msg: make(chan interface{}, chanSize), + chanType: chanType, + extraData: extraData, + mux: m, + packetPool: make(map[uint32][]byte), + } + ch.localId = m.chanList.add(ch) + return ch +} + +var errUndecided = errors.New("ssh: must Accept or Reject channel") +var errDecidedAlready = errors.New("ssh: can call Accept or Reject only once") + +type extChannel struct { + code uint32 + ch *channel +} + +func (e *extChannel) Write(data []byte) (n int, err error) { + return e.ch.WriteExtended(data, e.code) +} + +func (e *extChannel) Read(data []byte) (n int, err error) { + return e.ch.ReadExtended(data, e.code) +} + +func (c *channel) Accept() (Channel, <-chan *Request, error) { + if c.decided { + return nil, nil, errDecidedAlready + } + c.maxIncomingPayload = channelMaxPacket + confirm := channelOpenConfirmMsg{ + PeersId: c.remoteId, + MyId: c.localId, + MyWindow: c.myWindow, + MaxPacketSize: c.maxIncomingPayload, + } + c.decided = true + if err := c.sendMessage(confirm); err != nil { + return nil, nil, err + } + + return c, c.incomingRequests, nil +} + +func (ch *channel) Reject(reason RejectionReason, message string) error { + if ch.decided { + return errDecidedAlready + } + reject := channelOpenFailureMsg{ + PeersId: ch.remoteId, + Reason: reason, + Message: message, + Language: "en", + } + ch.decided = true + return ch.sendMessage(reject) +} + +func (ch *channel) Read(data []byte) (int, error) { + if !ch.decided { + return 0, errUndecided + } + return ch.ReadExtended(data, 0) +} + +func (ch *channel) Write(data []byte) (int, error) { + if !ch.decided { + return 0, errUndecided + } + return ch.WriteExtended(data, 0) +} + +func (ch *channel) CloseWrite() error { + if !ch.decided { + return errUndecided + } + ch.sentEOF = true + return ch.sendMessage(channelEOFMsg{ + PeersId: ch.remoteId}) +} + +func (ch *channel) Close() error { + if !ch.decided { + return errUndecided + } + + return ch.sendMessage(channelCloseMsg{ + PeersId: ch.remoteId}) +} + +// Extended returns an io.ReadWriter that sends and receives data on the given, +// SSH extended stream. Such streams are used, for example, for stderr. +func (ch *channel) Extended(code uint32) io.ReadWriter { + if !ch.decided { + return nil + } + return &extChannel{code, ch} +} + +func (ch *channel) Stderr() io.ReadWriter { + return ch.Extended(1) +} + +func (ch *channel) SendRequest(name string, wantReply bool, payload []byte) (bool, error) { + if !ch.decided { + return false, errUndecided + } + + if wantReply { + ch.sentRequestMu.Lock() + defer ch.sentRequestMu.Unlock() + } + + msg := channelRequestMsg{ + PeersId: ch.remoteId, + Request: name, + WantReply: wantReply, + RequestSpecificData: payload, + } + + if err := ch.sendMessage(msg); err != nil { + return false, err + } + + if wantReply { + m, ok := (<-ch.msg) + if !ok { + return false, io.EOF + } + switch m.(type) { + case *channelRequestFailureMsg: + return false, nil + case *channelRequestSuccessMsg: + return true, nil + default: + return false, fmt.Errorf("ssh: unexpected response to channel request: %#v", m) + } + } + + return false, nil +} + +// ackRequest either sends an ack or nack to the channel request. +func (ch *channel) ackRequest(ok bool) error { + if !ch.decided { + return errUndecided + } + + var msg interface{} + if !ok { + msg = channelRequestFailureMsg{ + PeersId: ch.remoteId, + } + } else { + msg = channelRequestSuccessMsg{ + PeersId: ch.remoteId, + } + } + return ch.sendMessage(msg) +} + +func (ch *channel) ChannelType() string { + return ch.chanType +} + +func (ch *channel) ExtraData() []byte { + return ch.extraData +} diff --git a/vendor/golang.org/x/crypto/ssh/cipher.go b/vendor/golang.org/x/crypto/ssh/cipher.go new file mode 100644 index 0000000..22bb30c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/cipher.go @@ -0,0 +1,629 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/des" + "crypto/rc4" + "crypto/subtle" + "encoding/binary" + "errors" + "fmt" + "hash" + "io" + "io/ioutil" +) + +const ( + packetSizeMultiple = 16 // TODO(huin) this should be determined by the cipher. + + // RFC 4253 section 6.1 defines a minimum packet size of 32768 that implementations + // MUST be able to process (plus a few more kilobytes for padding and mac). The RFC + // indicates implementations SHOULD be able to handle larger packet sizes, but then + // waffles on about reasonable limits. + // + // OpenSSH caps their maxPacket at 256kB so we choose to do + // the same. maxPacket is also used to ensure that uint32 + // length fields do not overflow, so it should remain well + // below 4G. + maxPacket = 256 * 1024 +) + +// noneCipher implements cipher.Stream and provides no encryption. It is used +// by the transport before the first key-exchange. +type noneCipher struct{} + +func (c noneCipher) XORKeyStream(dst, src []byte) { + copy(dst, src) +} + +func newAESCTR(key, iv []byte) (cipher.Stream, error) { + c, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + return cipher.NewCTR(c, iv), nil +} + +func newRC4(key, iv []byte) (cipher.Stream, error) { + return rc4.NewCipher(key) +} + +type streamCipherMode struct { + keySize int + ivSize int + skip int + createFunc func(key, iv []byte) (cipher.Stream, error) +} + +func (c *streamCipherMode) createStream(key, iv []byte) (cipher.Stream, error) { + if len(key) < c.keySize { + panic("ssh: key length too small for cipher") + } + if len(iv) < c.ivSize { + panic("ssh: iv too small for cipher") + } + + stream, err := c.createFunc(key[:c.keySize], iv[:c.ivSize]) + if err != nil { + return nil, err + } + + var streamDump []byte + if c.skip > 0 { + streamDump = make([]byte, 512) + } + + for remainingToDump := c.skip; remainingToDump > 0; { + dumpThisTime := remainingToDump + if dumpThisTime > len(streamDump) { + dumpThisTime = len(streamDump) + } + stream.XORKeyStream(streamDump[:dumpThisTime], streamDump[:dumpThisTime]) + remainingToDump -= dumpThisTime + } + + return stream, nil +} + +// cipherModes documents properties of supported ciphers. Ciphers not included +// are not supported and will not be negotiated, even if explicitly requested in +// ClientConfig.Crypto.Ciphers. +var cipherModes = map[string]*streamCipherMode{ + // Ciphers from RFC4344, which introduced many CTR-based ciphers. Algorithms + // are defined in the order specified in the RFC. + "aes128-ctr": {16, aes.BlockSize, 0, newAESCTR}, + "aes192-ctr": {24, aes.BlockSize, 0, newAESCTR}, + "aes256-ctr": {32, aes.BlockSize, 0, newAESCTR}, + + // Ciphers from RFC4345, which introduces security-improved arcfour ciphers. + // They are defined in the order specified in the RFC. + "arcfour128": {16, 0, 1536, newRC4}, + "arcfour256": {32, 0, 1536, newRC4}, + + // Cipher defined in RFC 4253, which describes SSH Transport Layer Protocol. + // Note that this cipher is not safe, as stated in RFC 4253: "Arcfour (and + // RC4) has problems with weak keys, and should be used with caution." + // RFC4345 introduces improved versions of Arcfour. + "arcfour": {16, 0, 0, newRC4}, + + // AES-GCM is not a stream cipher, so it is constructed with a + // special case. If we add any more non-stream ciphers, we + // should invest a cleaner way to do this. + gcmCipherID: {16, 12, 0, nil}, + + // CBC mode is insecure and so is not included in the default config. + // (See http://www.isg.rhul.ac.uk/~kp/SandPfinal.pdf). If absolutely + // needed, it's possible to specify a custom Config to enable it. + // You should expect that an active attacker can recover plaintext if + // you do. + aes128cbcID: {16, aes.BlockSize, 0, nil}, + + // 3des-cbc is insecure and is disabled by default. + tripledescbcID: {24, des.BlockSize, 0, nil}, +} + +// prefixLen is the length of the packet prefix that contains the packet length +// and number of padding bytes. +const prefixLen = 5 + +// streamPacketCipher is a packetCipher using a stream cipher. +type streamPacketCipher struct { + mac hash.Hash + cipher cipher.Stream + etm bool + + // The following members are to avoid per-packet allocations. + prefix [prefixLen]byte + seqNumBytes [4]byte + padding [2 * packetSizeMultiple]byte + packetData []byte + macResult []byte +} + +// readPacket reads and decrypt a single packet from the reader argument. +func (s *streamPacketCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { + if _, err := io.ReadFull(r, s.prefix[:]); err != nil { + return nil, err + } + + var encryptedPaddingLength [1]byte + if s.mac != nil && s.etm { + copy(encryptedPaddingLength[:], s.prefix[4:5]) + s.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5]) + } else { + s.cipher.XORKeyStream(s.prefix[:], s.prefix[:]) + } + + length := binary.BigEndian.Uint32(s.prefix[0:4]) + paddingLength := uint32(s.prefix[4]) + + var macSize uint32 + if s.mac != nil { + s.mac.Reset() + binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum) + s.mac.Write(s.seqNumBytes[:]) + if s.etm { + s.mac.Write(s.prefix[:4]) + s.mac.Write(encryptedPaddingLength[:]) + } else { + s.mac.Write(s.prefix[:]) + } + macSize = uint32(s.mac.Size()) + } + + if length <= paddingLength+1 { + return nil, errors.New("ssh: invalid packet length, packet too small") + } + + if length > maxPacket { + return nil, errors.New("ssh: invalid packet length, packet too large") + } + + // the maxPacket check above ensures that length-1+macSize + // does not overflow. + if uint32(cap(s.packetData)) < length-1+macSize { + s.packetData = make([]byte, length-1+macSize) + } else { + s.packetData = s.packetData[:length-1+macSize] + } + + if _, err := io.ReadFull(r, s.packetData); err != nil { + return nil, err + } + mac := s.packetData[length-1:] + data := s.packetData[:length-1] + + if s.mac != nil && s.etm { + s.mac.Write(data) + } + + s.cipher.XORKeyStream(data, data) + + if s.mac != nil { + if !s.etm { + s.mac.Write(data) + } + s.macResult = s.mac.Sum(s.macResult[:0]) + if subtle.ConstantTimeCompare(s.macResult, mac) != 1 { + return nil, errors.New("ssh: MAC failure") + } + } + + return s.packetData[:length-paddingLength-1], nil +} + +// writePacket encrypts and sends a packet of data to the writer argument +func (s *streamPacketCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { + if len(packet) > maxPacket { + return errors.New("ssh: packet too large") + } + + aadlen := 0 + if s.mac != nil && s.etm { + // packet length is not encrypted for EtM modes + aadlen = 4 + } + + paddingLength := packetSizeMultiple - (prefixLen+len(packet)-aadlen)%packetSizeMultiple + if paddingLength < 4 { + paddingLength += packetSizeMultiple + } + + length := len(packet) + 1 + paddingLength + binary.BigEndian.PutUint32(s.prefix[:], uint32(length)) + s.prefix[4] = byte(paddingLength) + padding := s.padding[:paddingLength] + if _, err := io.ReadFull(rand, padding); err != nil { + return err + } + + if s.mac != nil { + s.mac.Reset() + binary.BigEndian.PutUint32(s.seqNumBytes[:], seqNum) + s.mac.Write(s.seqNumBytes[:]) + + if s.etm { + // For EtM algorithms, the packet length must stay unencrypted, + // but the following data (padding length) must be encrypted + s.cipher.XORKeyStream(s.prefix[4:5], s.prefix[4:5]) + } + + s.mac.Write(s.prefix[:]) + + if !s.etm { + // For non-EtM algorithms, the algorithm is applied on unencrypted data + s.mac.Write(packet) + s.mac.Write(padding) + } + } + + if !(s.mac != nil && s.etm) { + // For EtM algorithms, the padding length has already been encrypted + // and the packet length must remain unencrypted + s.cipher.XORKeyStream(s.prefix[:], s.prefix[:]) + } + + s.cipher.XORKeyStream(packet, packet) + s.cipher.XORKeyStream(padding, padding) + + if s.mac != nil && s.etm { + // For EtM algorithms, packet and padding must be encrypted + s.mac.Write(packet) + s.mac.Write(padding) + } + + if _, err := w.Write(s.prefix[:]); err != nil { + return err + } + if _, err := w.Write(packet); err != nil { + return err + } + if _, err := w.Write(padding); err != nil { + return err + } + + if s.mac != nil { + s.macResult = s.mac.Sum(s.macResult[:0]) + if _, err := w.Write(s.macResult); err != nil { + return err + } + } + + return nil +} + +type gcmCipher struct { + aead cipher.AEAD + prefix [4]byte + iv []byte + buf []byte +} + +func newGCMCipher(iv, key, macKey []byte) (packetCipher, error) { + c, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + + aead, err := cipher.NewGCM(c) + if err != nil { + return nil, err + } + + return &gcmCipher{ + aead: aead, + iv: iv, + }, nil +} + +const gcmTagSize = 16 + +func (c *gcmCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { + // Pad out to multiple of 16 bytes. This is different from the + // stream cipher because that encrypts the length too. + padding := byte(packetSizeMultiple - (1+len(packet))%packetSizeMultiple) + if padding < 4 { + padding += packetSizeMultiple + } + + length := uint32(len(packet) + int(padding) + 1) + binary.BigEndian.PutUint32(c.prefix[:], length) + if _, err := w.Write(c.prefix[:]); err != nil { + return err + } + + if cap(c.buf) < int(length) { + c.buf = make([]byte, length) + } else { + c.buf = c.buf[:length] + } + + c.buf[0] = padding + copy(c.buf[1:], packet) + if _, err := io.ReadFull(rand, c.buf[1+len(packet):]); err != nil { + return err + } + c.buf = c.aead.Seal(c.buf[:0], c.iv, c.buf, c.prefix[:]) + if _, err := w.Write(c.buf); err != nil { + return err + } + c.incIV() + + return nil +} + +func (c *gcmCipher) incIV() { + for i := 4 + 7; i >= 4; i-- { + c.iv[i]++ + if c.iv[i] != 0 { + break + } + } +} + +func (c *gcmCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { + if _, err := io.ReadFull(r, c.prefix[:]); err != nil { + return nil, err + } + length := binary.BigEndian.Uint32(c.prefix[:]) + if length > maxPacket { + return nil, errors.New("ssh: max packet length exceeded.") + } + + if cap(c.buf) < int(length+gcmTagSize) { + c.buf = make([]byte, length+gcmTagSize) + } else { + c.buf = c.buf[:length+gcmTagSize] + } + + if _, err := io.ReadFull(r, c.buf); err != nil { + return nil, err + } + + plain, err := c.aead.Open(c.buf[:0], c.iv, c.buf, c.prefix[:]) + if err != nil { + return nil, err + } + c.incIV() + + padding := plain[0] + if padding < 4 { + // padding is a byte, so it automatically satisfies + // the maximum size, which is 255. + return nil, fmt.Errorf("ssh: illegal padding %d", padding) + } + + if int(padding+1) >= len(plain) { + return nil, fmt.Errorf("ssh: padding %d too large", padding) + } + plain = plain[1 : length-uint32(padding)] + return plain, nil +} + +// cbcCipher implements aes128-cbc cipher defined in RFC 4253 section 6.1 +type cbcCipher struct { + mac hash.Hash + macSize uint32 + decrypter cipher.BlockMode + encrypter cipher.BlockMode + + // The following members are to avoid per-packet allocations. + seqNumBytes [4]byte + packetData []byte + macResult []byte + + // Amount of data we should still read to hide which + // verification error triggered. + oracleCamouflage uint32 +} + +func newCBCCipher(c cipher.Block, iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) { + cbc := &cbcCipher{ + mac: macModes[algs.MAC].new(macKey), + decrypter: cipher.NewCBCDecrypter(c, iv), + encrypter: cipher.NewCBCEncrypter(c, iv), + packetData: make([]byte, 1024), + } + if cbc.mac != nil { + cbc.macSize = uint32(cbc.mac.Size()) + } + + return cbc, nil +} + +func newAESCBCCipher(iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) { + c, err := aes.NewCipher(key) + if err != nil { + return nil, err + } + + cbc, err := newCBCCipher(c, iv, key, macKey, algs) + if err != nil { + return nil, err + } + + return cbc, nil +} + +func newTripleDESCBCCipher(iv, key, macKey []byte, algs directionAlgorithms) (packetCipher, error) { + c, err := des.NewTripleDESCipher(key) + if err != nil { + return nil, err + } + + cbc, err := newCBCCipher(c, iv, key, macKey, algs) + if err != nil { + return nil, err + } + + return cbc, nil +} + +func maxUInt32(a, b int) uint32 { + if a > b { + return uint32(a) + } + return uint32(b) +} + +const ( + cbcMinPacketSizeMultiple = 8 + cbcMinPacketSize = 16 + cbcMinPaddingSize = 4 +) + +// cbcError represents a verification error that may leak information. +type cbcError string + +func (e cbcError) Error() string { return string(e) } + +func (c *cbcCipher) readPacket(seqNum uint32, r io.Reader) ([]byte, error) { + p, err := c.readPacketLeaky(seqNum, r) + if err != nil { + if _, ok := err.(cbcError); ok { + // Verification error: read a fixed amount of + // data, to make distinguishing between + // failing MAC and failing length check more + // difficult. + io.CopyN(ioutil.Discard, r, int64(c.oracleCamouflage)) + } + } + return p, err +} + +func (c *cbcCipher) readPacketLeaky(seqNum uint32, r io.Reader) ([]byte, error) { + blockSize := c.decrypter.BlockSize() + + // Read the header, which will include some of the subsequent data in the + // case of block ciphers - this is copied back to the payload later. + // How many bytes of payload/padding will be read with this first read. + firstBlockLength := uint32((prefixLen + blockSize - 1) / blockSize * blockSize) + firstBlock := c.packetData[:firstBlockLength] + if _, err := io.ReadFull(r, firstBlock); err != nil { + return nil, err + } + + c.oracleCamouflage = maxPacket + 4 + c.macSize - firstBlockLength + + c.decrypter.CryptBlocks(firstBlock, firstBlock) + length := binary.BigEndian.Uint32(firstBlock[:4]) + if length > maxPacket { + return nil, cbcError("ssh: packet too large") + } + if length+4 < maxUInt32(cbcMinPacketSize, blockSize) { + // The minimum size of a packet is 16 (or the cipher block size, whichever + // is larger) bytes. + return nil, cbcError("ssh: packet too small") + } + // The length of the packet (including the length field but not the MAC) must + // be a multiple of the block size or 8, whichever is larger. + if (length+4)%maxUInt32(cbcMinPacketSizeMultiple, blockSize) != 0 { + return nil, cbcError("ssh: invalid packet length multiple") + } + + paddingLength := uint32(firstBlock[4]) + if paddingLength < cbcMinPaddingSize || length <= paddingLength+1 { + return nil, cbcError("ssh: invalid packet length") + } + + // Positions within the c.packetData buffer: + macStart := 4 + length + paddingStart := macStart - paddingLength + + // Entire packet size, starting before length, ending at end of mac. + entirePacketSize := macStart + c.macSize + + // Ensure c.packetData is large enough for the entire packet data. + if uint32(cap(c.packetData)) < entirePacketSize { + // Still need to upsize and copy, but this should be rare at runtime, only + // on upsizing the packetData buffer. + c.packetData = make([]byte, entirePacketSize) + copy(c.packetData, firstBlock) + } else { + c.packetData = c.packetData[:entirePacketSize] + } + + if n, err := io.ReadFull(r, c.packetData[firstBlockLength:]); err != nil { + return nil, err + } else { + c.oracleCamouflage -= uint32(n) + } + + remainingCrypted := c.packetData[firstBlockLength:macStart] + c.decrypter.CryptBlocks(remainingCrypted, remainingCrypted) + + mac := c.packetData[macStart:] + if c.mac != nil { + c.mac.Reset() + binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum) + c.mac.Write(c.seqNumBytes[:]) + c.mac.Write(c.packetData[:macStart]) + c.macResult = c.mac.Sum(c.macResult[:0]) + if subtle.ConstantTimeCompare(c.macResult, mac) != 1 { + return nil, cbcError("ssh: MAC failure") + } + } + + return c.packetData[prefixLen:paddingStart], nil +} + +func (c *cbcCipher) writePacket(seqNum uint32, w io.Writer, rand io.Reader, packet []byte) error { + effectiveBlockSize := maxUInt32(cbcMinPacketSizeMultiple, c.encrypter.BlockSize()) + + // Length of encrypted portion of the packet (header, payload, padding). + // Enforce minimum padding and packet size. + encLength := maxUInt32(prefixLen+len(packet)+cbcMinPaddingSize, cbcMinPaddingSize) + // Enforce block size. + encLength = (encLength + effectiveBlockSize - 1) / effectiveBlockSize * effectiveBlockSize + + length := encLength - 4 + paddingLength := int(length) - (1 + len(packet)) + + // Overall buffer contains: header, payload, padding, mac. + // Space for the MAC is reserved in the capacity but not the slice length. + bufferSize := encLength + c.macSize + if uint32(cap(c.packetData)) < bufferSize { + c.packetData = make([]byte, encLength, bufferSize) + } else { + c.packetData = c.packetData[:encLength] + } + + p := c.packetData + + // Packet header. + binary.BigEndian.PutUint32(p, length) + p = p[4:] + p[0] = byte(paddingLength) + + // Payload. + p = p[1:] + copy(p, packet) + + // Padding. + p = p[len(packet):] + if _, err := io.ReadFull(rand, p); err != nil { + return err + } + + if c.mac != nil { + c.mac.Reset() + binary.BigEndian.PutUint32(c.seqNumBytes[:], seqNum) + c.mac.Write(c.seqNumBytes[:]) + c.mac.Write(c.packetData) + // The MAC is now appended into the capacity reserved for it earlier. + c.packetData = c.mac.Sum(c.packetData) + } + + c.encrypter.CryptBlocks(c.packetData[:encLength], c.packetData[:encLength]) + + if _, err := w.Write(c.packetData); err != nil { + return err + } + + return nil +} diff --git a/vendor/golang.org/x/crypto/ssh/cipher_test.go b/vendor/golang.org/x/crypto/ssh/cipher_test.go new file mode 100644 index 0000000..5cfa17a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/cipher_test.go @@ -0,0 +1,129 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto" + "crypto/aes" + "crypto/rand" + "testing" +) + +func TestDefaultCiphersExist(t *testing.T) { + for _, cipherAlgo := range supportedCiphers { + if _, ok := cipherModes[cipherAlgo]; !ok { + t.Errorf("default cipher %q is unknown", cipherAlgo) + } + } +} + +func TestPacketCiphers(t *testing.T) { + // Still test aes128cbc cipher although it's commented out. + cipherModes[aes128cbcID] = &streamCipherMode{16, aes.BlockSize, 0, nil} + defer delete(cipherModes, aes128cbcID) + + for cipher := range cipherModes { + for mac := range macModes { + kr := &kexResult{Hash: crypto.SHA1} + algs := directionAlgorithms{ + Cipher: cipher, + MAC: mac, + Compression: "none", + } + client, err := newPacketCipher(clientKeys, algs, kr) + if err != nil { + t.Errorf("newPacketCipher(client, %q, %q): %v", cipher, mac, err) + continue + } + server, err := newPacketCipher(clientKeys, algs, kr) + if err != nil { + t.Errorf("newPacketCipher(client, %q, %q): %v", cipher, mac, err) + continue + } + + want := "bla bla" + input := []byte(want) + buf := &bytes.Buffer{} + if err := client.writePacket(0, buf, rand.Reader, input); err != nil { + t.Errorf("writePacket(%q, %q): %v", cipher, mac, err) + continue + } + + packet, err := server.readPacket(0, buf) + if err != nil { + t.Errorf("readPacket(%q, %q): %v", cipher, mac, err) + continue + } + + if string(packet) != want { + t.Errorf("roundtrip(%q, %q): got %q, want %q", cipher, mac, packet, want) + } + } + } +} + +func TestCBCOracleCounterMeasure(t *testing.T) { + cipherModes[aes128cbcID] = &streamCipherMode{16, aes.BlockSize, 0, nil} + defer delete(cipherModes, aes128cbcID) + + kr := &kexResult{Hash: crypto.SHA1} + algs := directionAlgorithms{ + Cipher: aes128cbcID, + MAC: "hmac-sha1", + Compression: "none", + } + client, err := newPacketCipher(clientKeys, algs, kr) + if err != nil { + t.Fatalf("newPacketCipher(client): %v", err) + } + + want := "bla bla" + input := []byte(want) + buf := &bytes.Buffer{} + if err := client.writePacket(0, buf, rand.Reader, input); err != nil { + t.Errorf("writePacket: %v", err) + } + + packetSize := buf.Len() + buf.Write(make([]byte, 2*maxPacket)) + + // We corrupt each byte, but this usually will only test the + // 'packet too large' or 'MAC failure' cases. + lastRead := -1 + for i := 0; i < packetSize; i++ { + server, err := newPacketCipher(clientKeys, algs, kr) + if err != nil { + t.Fatalf("newPacketCipher(client): %v", err) + } + + fresh := &bytes.Buffer{} + fresh.Write(buf.Bytes()) + fresh.Bytes()[i] ^= 0x01 + + before := fresh.Len() + _, err = server.readPacket(0, fresh) + if err == nil { + t.Errorf("corrupt byte %d: readPacket succeeded ", i) + continue + } + if _, ok := err.(cbcError); !ok { + t.Errorf("corrupt byte %d: got %v (%T), want cbcError", i, err, err) + continue + } + + after := fresh.Len() + bytesRead := before - after + if bytesRead < maxPacket { + t.Errorf("corrupt byte %d: read %d bytes, want more than %d", i, bytesRead, maxPacket) + continue + } + + if i > 0 && bytesRead != lastRead { + t.Errorf("corrupt byte %d: read %d bytes, want %d bytes read", i, bytesRead, lastRead) + } + lastRead = bytesRead + } +} diff --git a/vendor/golang.org/x/crypto/ssh/client.go b/vendor/golang.org/x/crypto/ssh/client.go new file mode 100644 index 0000000..a7e3263 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/client.go @@ -0,0 +1,257 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "errors" + "fmt" + "net" + "sync" + "time" +) + +// Client implements a traditional SSH client that supports shells, +// subprocesses, TCP port/streamlocal forwarding and tunneled dialing. +type Client struct { + Conn + + forwards forwardList // forwarded tcpip connections from the remote side + mu sync.Mutex + channelHandlers map[string]chan NewChannel +} + +// HandleChannelOpen returns a channel on which NewChannel requests +// for the given type are sent. If the type already is being handled, +// nil is returned. The channel is closed when the connection is closed. +func (c *Client) HandleChannelOpen(channelType string) <-chan NewChannel { + c.mu.Lock() + defer c.mu.Unlock() + if c.channelHandlers == nil { + // The SSH channel has been closed. + c := make(chan NewChannel) + close(c) + return c + } + + ch := c.channelHandlers[channelType] + if ch != nil { + return nil + } + + ch = make(chan NewChannel, chanSize) + c.channelHandlers[channelType] = ch + return ch +} + +// NewClient creates a Client on top of the given connection. +func NewClient(c Conn, chans <-chan NewChannel, reqs <-chan *Request) *Client { + conn := &Client{ + Conn: c, + channelHandlers: make(map[string]chan NewChannel, 1), + } + + go conn.handleGlobalRequests(reqs) + go conn.handleChannelOpens(chans) + go func() { + conn.Wait() + conn.forwards.closeAll() + }() + go conn.forwards.handleChannels(conn.HandleChannelOpen("forwarded-tcpip")) + go conn.forwards.handleChannels(conn.HandleChannelOpen("forwarded-streamlocal@openssh.com")) + return conn +} + +// NewClientConn establishes an authenticated SSH connection using c +// as the underlying transport. The Request and NewChannel channels +// must be serviced or the connection will hang. +func NewClientConn(c net.Conn, addr string, config *ClientConfig) (Conn, <-chan NewChannel, <-chan *Request, error) { + fullConf := *config + fullConf.SetDefaults() + if fullConf.HostKeyCallback == nil { + c.Close() + return nil, nil, nil, errors.New("ssh: must specify HostKeyCallback") + } + + conn := &connection{ + sshConn: sshConn{conn: c}, + } + + if err := conn.clientHandshake(addr, &fullConf); err != nil { + c.Close() + return nil, nil, nil, fmt.Errorf("ssh: handshake failed: %v", err) + } + conn.mux = newMux(conn.transport) + return conn, conn.mux.incomingChannels, conn.mux.incomingRequests, nil +} + +// clientHandshake performs the client side key exchange. See RFC 4253 Section +// 7. +func (c *connection) clientHandshake(dialAddress string, config *ClientConfig) error { + if config.ClientVersion != "" { + c.clientVersion = []byte(config.ClientVersion) + } else { + c.clientVersion = []byte(packageVersion) + } + var err error + c.serverVersion, err = exchangeVersions(c.sshConn.conn, c.clientVersion) + if err != nil { + return err + } + + c.transport = newClientTransport( + newTransport(c.sshConn.conn, config.Rand, true /* is client */), + c.clientVersion, c.serverVersion, config, dialAddress, c.sshConn.RemoteAddr()) + if err := c.transport.waitSession(); err != nil { + return err + } + + c.sessionID = c.transport.getSessionID() + return c.clientAuthenticate(config) +} + +// verifyHostKeySignature verifies the host key obtained in the key +// exchange. +func verifyHostKeySignature(hostKey PublicKey, result *kexResult) error { + sig, rest, ok := parseSignatureBody(result.Signature) + if len(rest) > 0 || !ok { + return errors.New("ssh: signature parse error") + } + + return hostKey.Verify(result.H, sig) +} + +// NewSession opens a new Session for this client. (A session is a remote +// execution of a program.) +func (c *Client) NewSession() (*Session, error) { + ch, in, err := c.OpenChannel("session", nil) + if err != nil { + return nil, err + } + return newSession(ch, in) +} + +func (c *Client) handleGlobalRequests(incoming <-chan *Request) { + for r := range incoming { + // This handles keepalive messages and matches + // the behaviour of OpenSSH. + r.Reply(false, nil) + } +} + +// handleChannelOpens channel open messages from the remote side. +func (c *Client) handleChannelOpens(in <-chan NewChannel) { + for ch := range in { + c.mu.Lock() + handler := c.channelHandlers[ch.ChannelType()] + c.mu.Unlock() + + if handler != nil { + handler <- ch + } else { + ch.Reject(UnknownChannelType, fmt.Sprintf("unknown channel type: %v", ch.ChannelType())) + } + } + + c.mu.Lock() + for _, ch := range c.channelHandlers { + close(ch) + } + c.channelHandlers = nil + c.mu.Unlock() +} + +// Dial starts a client connection to the given SSH server. It is a +// convenience function that connects to the given network address, +// initiates the SSH handshake, and then sets up a Client. For access +// to incoming channels and requests, use net.Dial with NewClientConn +// instead. +func Dial(network, addr string, config *ClientConfig) (*Client, error) { + conn, err := net.DialTimeout(network, addr, config.Timeout) + if err != nil { + return nil, err + } + c, chans, reqs, err := NewClientConn(conn, addr, config) + if err != nil { + return nil, err + } + return NewClient(c, chans, reqs), nil +} + +// HostKeyCallback is the function type used for verifying server +// keys. A HostKeyCallback must return nil if the host key is OK, or +// an error to reject it. It receives the hostname as passed to Dial +// or NewClientConn. The remote address is the RemoteAddr of the +// net.Conn underlying the the SSH connection. +type HostKeyCallback func(hostname string, remote net.Addr, key PublicKey) error + +// A ClientConfig structure is used to configure a Client. It must not be +// modified after having been passed to an SSH function. +type ClientConfig struct { + // Config contains configuration that is shared between clients and + // servers. + Config + + // User contains the username to authenticate as. + User string + + // Auth contains possible authentication methods to use with the + // server. Only the first instance of a particular RFC 4252 method will + // be used during authentication. + Auth []AuthMethod + + // HostKeyCallback is called during the cryptographic + // handshake to validate the server's host key. The client + // configuration must supply this callback for the connection + // to succeed. The functions InsecureIgnoreHostKey or + // FixedHostKey can be used for simplistic host key checks. + HostKeyCallback HostKeyCallback + + // ClientVersion contains the version identification string that will + // be used for the connection. If empty, a reasonable default is used. + ClientVersion string + + // HostKeyAlgorithms lists the key types that the client will + // accept from the server as host key, in order of + // preference. If empty, a reasonable default is used. Any + // string returned from PublicKey.Type method may be used, or + // any of the CertAlgoXxxx and KeyAlgoXxxx constants. + HostKeyAlgorithms []string + + // Timeout is the maximum amount of time for the TCP connection to establish. + // + // A Timeout of zero means no timeout. + Timeout time.Duration +} + +// InsecureIgnoreHostKey returns a function that can be used for +// ClientConfig.HostKeyCallback to accept any host key. It should +// not be used for production code. +func InsecureIgnoreHostKey() HostKeyCallback { + return func(hostname string, remote net.Addr, key PublicKey) error { + return nil + } +} + +type fixedHostKey struct { + key PublicKey +} + +func (f *fixedHostKey) check(hostname string, remote net.Addr, key PublicKey) error { + if f.key == nil { + return fmt.Errorf("ssh: required host key was nil") + } + if !bytes.Equal(key.Marshal(), f.key.Marshal()) { + return fmt.Errorf("ssh: host key mismatch") + } + return nil +} + +// FixedHostKey returns a function for use in +// ClientConfig.HostKeyCallback to accept only a specific host key. +func FixedHostKey(key PublicKey) HostKeyCallback { + hk := &fixedHostKey{key} + return hk.check +} diff --git a/vendor/golang.org/x/crypto/ssh/client_auth.go b/vendor/golang.org/x/crypto/ssh/client_auth.go new file mode 100644 index 0000000..3acd8d4 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/client_auth.go @@ -0,0 +1,486 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "errors" + "fmt" + "io" +) + +// clientAuthenticate authenticates with the remote server. See RFC 4252. +func (c *connection) clientAuthenticate(config *ClientConfig) error { + // initiate user auth session + if err := c.transport.writePacket(Marshal(&serviceRequestMsg{serviceUserAuth})); err != nil { + return err + } + packet, err := c.transport.readPacket() + if err != nil { + return err + } + var serviceAccept serviceAcceptMsg + if err := Unmarshal(packet, &serviceAccept); err != nil { + return err + } + + // during the authentication phase the client first attempts the "none" method + // then any untried methods suggested by the server. + tried := make(map[string]bool) + var lastMethods []string + + sessionID := c.transport.getSessionID() + for auth := AuthMethod(new(noneAuth)); auth != nil; { + ok, methods, err := auth.auth(sessionID, config.User, c.transport, config.Rand) + if err != nil { + return err + } + if ok { + // success + return nil + } + tried[auth.method()] = true + if methods == nil { + methods = lastMethods + } + lastMethods = methods + + auth = nil + + findNext: + for _, a := range config.Auth { + candidateMethod := a.method() + if tried[candidateMethod] { + continue + } + for _, meth := range methods { + if meth == candidateMethod { + auth = a + break findNext + } + } + } + } + return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", keys(tried)) +} + +func keys(m map[string]bool) []string { + s := make([]string, 0, len(m)) + + for key := range m { + s = append(s, key) + } + return s +} + +// An AuthMethod represents an instance of an RFC 4252 authentication method. +type AuthMethod interface { + // auth authenticates user over transport t. + // Returns true if authentication is successful. + // If authentication is not successful, a []string of alternative + // method names is returned. If the slice is nil, it will be ignored + // and the previous set of possible methods will be reused. + auth(session []byte, user string, p packetConn, rand io.Reader) (bool, []string, error) + + // method returns the RFC 4252 method name. + method() string +} + +// "none" authentication, RFC 4252 section 5.2. +type noneAuth int + +func (n *noneAuth) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) { + if err := c.writePacket(Marshal(&userAuthRequestMsg{ + User: user, + Service: serviceSSH, + Method: "none", + })); err != nil { + return false, nil, err + } + + return handleAuthResponse(c) +} + +func (n *noneAuth) method() string { + return "none" +} + +// passwordCallback is an AuthMethod that fetches the password through +// a function call, e.g. by prompting the user. +type passwordCallback func() (password string, err error) + +func (cb passwordCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) { + type passwordAuthMsg struct { + User string `sshtype:"50"` + Service string + Method string + Reply bool + Password string + } + + pw, err := cb() + // REVIEW NOTE: is there a need to support skipping a password attempt? + // The program may only find out that the user doesn't have a password + // when prompting. + if err != nil { + return false, nil, err + } + + if err := c.writePacket(Marshal(&passwordAuthMsg{ + User: user, + Service: serviceSSH, + Method: cb.method(), + Reply: false, + Password: pw, + })); err != nil { + return false, nil, err + } + + return handleAuthResponse(c) +} + +func (cb passwordCallback) method() string { + return "password" +} + +// Password returns an AuthMethod using the given password. +func Password(secret string) AuthMethod { + return passwordCallback(func() (string, error) { return secret, nil }) +} + +// PasswordCallback returns an AuthMethod that uses a callback for +// fetching a password. +func PasswordCallback(prompt func() (secret string, err error)) AuthMethod { + return passwordCallback(prompt) +} + +type publickeyAuthMsg struct { + User string `sshtype:"50"` + Service string + Method string + // HasSig indicates to the receiver packet that the auth request is signed and + // should be used for authentication of the request. + HasSig bool + Algoname string + PubKey []byte + // Sig is tagged with "rest" so Marshal will exclude it during + // validateKey + Sig []byte `ssh:"rest"` +} + +// publicKeyCallback is an AuthMethod that uses a set of key +// pairs for authentication. +type publicKeyCallback func() ([]Signer, error) + +func (cb publicKeyCallback) method() string { + return "publickey" +} + +func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) { + // Authentication is performed by sending an enquiry to test if a key is + // acceptable to the remote. If the key is acceptable, the client will + // attempt to authenticate with the valid key. If not the client will repeat + // the process with the remaining keys. + + signers, err := cb() + if err != nil { + return false, nil, err + } + var methods []string + for _, signer := range signers { + ok, err := validateKey(signer.PublicKey(), user, c) + if err != nil { + return false, nil, err + } + if !ok { + continue + } + + pub := signer.PublicKey() + pubKey := pub.Marshal() + sign, err := signer.Sign(rand, buildDataSignedForAuth(session, userAuthRequestMsg{ + User: user, + Service: serviceSSH, + Method: cb.method(), + }, []byte(pub.Type()), pubKey)) + if err != nil { + return false, nil, err + } + + // manually wrap the serialized signature in a string + s := Marshal(sign) + sig := make([]byte, stringLength(len(s))) + marshalString(sig, s) + msg := publickeyAuthMsg{ + User: user, + Service: serviceSSH, + Method: cb.method(), + HasSig: true, + Algoname: pub.Type(), + PubKey: pubKey, + Sig: sig, + } + p := Marshal(&msg) + if err := c.writePacket(p); err != nil { + return false, nil, err + } + var success bool + success, methods, err = handleAuthResponse(c) + if err != nil { + return false, nil, err + } + + // If authentication succeeds or the list of available methods does not + // contain the "publickey" method, do not attempt to authenticate with any + // other keys. According to RFC 4252 Section 7, the latter can occur when + // additional authentication methods are required. + if success || !containsMethod(methods, cb.method()) { + return success, methods, err + } + } + + return false, methods, nil +} + +func containsMethod(methods []string, method string) bool { + for _, m := range methods { + if m == method { + return true + } + } + + return false +} + +// validateKey validates the key provided is acceptable to the server. +func validateKey(key PublicKey, user string, c packetConn) (bool, error) { + pubKey := key.Marshal() + msg := publickeyAuthMsg{ + User: user, + Service: serviceSSH, + Method: "publickey", + HasSig: false, + Algoname: key.Type(), + PubKey: pubKey, + } + if err := c.writePacket(Marshal(&msg)); err != nil { + return false, err + } + + return confirmKeyAck(key, c) +} + +func confirmKeyAck(key PublicKey, c packetConn) (bool, error) { + pubKey := key.Marshal() + algoname := key.Type() + + for { + packet, err := c.readPacket() + if err != nil { + return false, err + } + switch packet[0] { + case msgUserAuthBanner: + // TODO(gpaul): add callback to present the banner to the user + case msgUserAuthPubKeyOk: + var msg userAuthPubKeyOkMsg + if err := Unmarshal(packet, &msg); err != nil { + return false, err + } + if msg.Algo != algoname || !bytes.Equal(msg.PubKey, pubKey) { + return false, nil + } + return true, nil + case msgUserAuthFailure: + return false, nil + default: + return false, unexpectedMessageError(msgUserAuthSuccess, packet[0]) + } + } +} + +// PublicKeys returns an AuthMethod that uses the given key +// pairs. +func PublicKeys(signers ...Signer) AuthMethod { + return publicKeyCallback(func() ([]Signer, error) { return signers, nil }) +} + +// PublicKeysCallback returns an AuthMethod that runs the given +// function to obtain a list of key pairs. +func PublicKeysCallback(getSigners func() (signers []Signer, err error)) AuthMethod { + return publicKeyCallback(getSigners) +} + +// handleAuthResponse returns whether the preceding authentication request succeeded +// along with a list of remaining authentication methods to try next and +// an error if an unexpected response was received. +func handleAuthResponse(c packetConn) (bool, []string, error) { + for { + packet, err := c.readPacket() + if err != nil { + return false, nil, err + } + + switch packet[0] { + case msgUserAuthBanner: + // TODO: add callback to present the banner to the user + case msgUserAuthFailure: + var msg userAuthFailureMsg + if err := Unmarshal(packet, &msg); err != nil { + return false, nil, err + } + return false, msg.Methods, nil + case msgUserAuthSuccess: + return true, nil, nil + default: + return false, nil, unexpectedMessageError(msgUserAuthSuccess, packet[0]) + } + } +} + +// KeyboardInteractiveChallenge should print questions, optionally +// disabling echoing (e.g. for passwords), and return all the answers. +// Challenge may be called multiple times in a single session. After +// successful authentication, the server may send a challenge with no +// questions, for which the user and instruction messages should be +// printed. RFC 4256 section 3.3 details how the UI should behave for +// both CLI and GUI environments. +type KeyboardInteractiveChallenge func(user, instruction string, questions []string, echos []bool) (answers []string, err error) + +// KeyboardInteractive returns an AuthMethod using a prompt/response +// sequence controlled by the server. +func KeyboardInteractive(challenge KeyboardInteractiveChallenge) AuthMethod { + return challenge +} + +func (cb KeyboardInteractiveChallenge) method() string { + return "keyboard-interactive" +} + +func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packetConn, rand io.Reader) (bool, []string, error) { + type initiateMsg struct { + User string `sshtype:"50"` + Service string + Method string + Language string + Submethods string + } + + if err := c.writePacket(Marshal(&initiateMsg{ + User: user, + Service: serviceSSH, + Method: "keyboard-interactive", + })); err != nil { + return false, nil, err + } + + for { + packet, err := c.readPacket() + if err != nil { + return false, nil, err + } + + // like handleAuthResponse, but with less options. + switch packet[0] { + case msgUserAuthBanner: + // TODO: Print banners during userauth. + continue + case msgUserAuthInfoRequest: + // OK + case msgUserAuthFailure: + var msg userAuthFailureMsg + if err := Unmarshal(packet, &msg); err != nil { + return false, nil, err + } + return false, msg.Methods, nil + case msgUserAuthSuccess: + return true, nil, nil + default: + return false, nil, unexpectedMessageError(msgUserAuthInfoRequest, packet[0]) + } + + var msg userAuthInfoRequestMsg + if err := Unmarshal(packet, &msg); err != nil { + return false, nil, err + } + + // Manually unpack the prompt/echo pairs. + rest := msg.Prompts + var prompts []string + var echos []bool + for i := 0; i < int(msg.NumPrompts); i++ { + prompt, r, ok := parseString(rest) + if !ok || len(r) == 0 { + return false, nil, errors.New("ssh: prompt format error") + } + prompts = append(prompts, string(prompt)) + echos = append(echos, r[0] != 0) + rest = r[1:] + } + + if len(rest) != 0 { + return false, nil, errors.New("ssh: extra data following keyboard-interactive pairs") + } + + answers, err := cb(msg.User, msg.Instruction, prompts, echos) + if err != nil { + return false, nil, err + } + + if len(answers) != len(prompts) { + return false, nil, errors.New("ssh: not enough answers from keyboard-interactive callback") + } + responseLength := 1 + 4 + for _, a := range answers { + responseLength += stringLength(len(a)) + } + serialized := make([]byte, responseLength) + p := serialized + p[0] = msgUserAuthInfoResponse + p = p[1:] + p = marshalUint32(p, uint32(len(answers))) + for _, a := range answers { + p = marshalString(p, []byte(a)) + } + + if err := c.writePacket(serialized); err != nil { + return false, nil, err + } + } +} + +type retryableAuthMethod struct { + authMethod AuthMethod + maxTries int +} + +func (r *retryableAuthMethod) auth(session []byte, user string, c packetConn, rand io.Reader) (ok bool, methods []string, err error) { + for i := 0; r.maxTries <= 0 || i < r.maxTries; i++ { + ok, methods, err = r.authMethod.auth(session, user, c, rand) + if ok || err != nil { // either success or error terminate + return ok, methods, err + } + } + return ok, methods, err +} + +func (r *retryableAuthMethod) method() string { + return r.authMethod.method() +} + +// RetryableAuthMethod is a decorator for other auth methods enabling them to +// be retried up to maxTries before considering that AuthMethod itself failed. +// If maxTries is <= 0, will retry indefinitely +// +// This is useful for interactive clients using challenge/response type +// authentication (e.g. Keyboard-Interactive, Password, etc) where the user +// could mistype their response resulting in the server issuing a +// SSH_MSG_USERAUTH_FAILURE (rfc4252 #8 [password] and rfc4256 #3.4 +// [keyboard-interactive]); Without this decorator, the non-retryable +// AuthMethod would be removed from future consideration, and never tried again +// (and so the user would never be able to retry their entry). +func RetryableAuthMethod(auth AuthMethod, maxTries int) AuthMethod { + return &retryableAuthMethod{authMethod: auth, maxTries: maxTries} +} diff --git a/vendor/golang.org/x/crypto/ssh/client_auth_test.go b/vendor/golang.org/x/crypto/ssh/client_auth_test.go new file mode 100644 index 0000000..145b57a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/client_auth_test.go @@ -0,0 +1,628 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/rand" + "errors" + "fmt" + "os" + "strings" + "testing" +) + +type keyboardInteractive map[string]string + +func (cr keyboardInteractive) Challenge(user string, instruction string, questions []string, echos []bool) ([]string, error) { + var answers []string + for _, q := range questions { + answers = append(answers, cr[q]) + } + return answers, nil +} + +// reused internally by tests +var clientPassword = "tiger" + +// tryAuth runs a handshake with a given config against an SSH server +// with config serverConfig +func tryAuth(t *testing.T, config *ClientConfig) error { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + certChecker := CertChecker{ + IsUserAuthority: func(k PublicKey) bool { + return bytes.Equal(k.Marshal(), testPublicKeys["ecdsa"].Marshal()) + }, + UserKeyFallback: func(conn ConnMetadata, key PublicKey) (*Permissions, error) { + if conn.User() == "testuser" && bytes.Equal(key.Marshal(), testPublicKeys["rsa"].Marshal()) { + return nil, nil + } + + return nil, fmt.Errorf("pubkey for %q not acceptable", conn.User()) + }, + IsRevoked: func(c *Certificate) bool { + return c.Serial == 666 + }, + } + + serverConfig := &ServerConfig{ + PasswordCallback: func(conn ConnMetadata, pass []byte) (*Permissions, error) { + if conn.User() == "testuser" && string(pass) == clientPassword { + return nil, nil + } + return nil, errors.New("password auth failed") + }, + PublicKeyCallback: certChecker.Authenticate, + KeyboardInteractiveCallback: func(conn ConnMetadata, challenge KeyboardInteractiveChallenge) (*Permissions, error) { + ans, err := challenge("user", + "instruction", + []string{"question1", "question2"}, + []bool{true, true}) + if err != nil { + return nil, err + } + ok := conn.User() == "testuser" && ans[0] == "answer1" && ans[1] == "answer2" + if ok { + challenge("user", "motd", nil, nil) + return nil, nil + } + return nil, errors.New("keyboard-interactive failed") + }, + } + serverConfig.AddHostKey(testSigners["rsa"]) + + go newServer(c1, serverConfig) + _, _, _, err = NewClientConn(c2, "", config) + return err +} + +func TestClientAuthPublicKey(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["rsa"]), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +func TestAuthMethodPassword(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + Password(clientPassword), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +func TestAuthMethodFallback(t *testing.T) { + var passwordCalled bool + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["rsa"]), + PasswordCallback( + func() (string, error) { + passwordCalled = true + return "WRONG", nil + }), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } + + if passwordCalled { + t.Errorf("password auth tried before public-key auth.") + } +} + +func TestAuthMethodWrongPassword(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + Password("wrong"), + PublicKeys(testSigners["rsa"]), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +func TestAuthMethodKeyboardInteractive(t *testing.T) { + answers := keyboardInteractive(map[string]string{ + "question1": "answer1", + "question2": "answer2", + }) + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + KeyboardInteractive(answers.Challenge), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +func TestAuthMethodWrongKeyboardInteractive(t *testing.T) { + answers := keyboardInteractive(map[string]string{ + "question1": "answer1", + "question2": "WRONG", + }) + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + KeyboardInteractive(answers.Challenge), + }, + } + + if err := tryAuth(t, config); err == nil { + t.Fatalf("wrong answers should not have authenticated with KeyboardInteractive") + } +} + +// the mock server will only authenticate ssh-rsa keys +func TestAuthMethodInvalidPublicKey(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["dsa"]), + }, + } + + if err := tryAuth(t, config); err == nil { + t.Fatalf("dsa private key should not have authenticated with rsa public key") + } +} + +// the client should authenticate with the second key +func TestAuthMethodRSAandDSA(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["dsa"], testSigners["rsa"]), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + if err := tryAuth(t, config); err != nil { + t.Fatalf("client could not authenticate with rsa key: %v", err) + } +} + +func TestClientHMAC(t *testing.T) { + for _, mac := range supportedMACs { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(testSigners["rsa"]), + }, + Config: Config{ + MACs: []string{mac}, + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + if err := tryAuth(t, config); err != nil { + t.Fatalf("client could not authenticate with mac algo %s: %v", mac, err) + } + } +} + +// issue 4285. +func TestClientUnsupportedCipher(t *testing.T) { + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(), + }, + Config: Config{ + Ciphers: []string{"aes128-cbc"}, // not currently supported + }, + } + if err := tryAuth(t, config); err == nil { + t.Errorf("expected no ciphers in common") + } +} + +func TestClientUnsupportedKex(t *testing.T) { + if os.Getenv("GO_BUILDER_NAME") != "" { + t.Skip("skipping known-flaky test on the Go build dashboard; see golang.org/issue/15198") + } + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(), + }, + Config: Config{ + KeyExchanges: []string{"diffie-hellman-group-exchange-sha256"}, // not currently supported + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + if err := tryAuth(t, config); err == nil || !strings.Contains(err.Error(), "common algorithm") { + t.Errorf("got %v, expected 'common algorithm'", err) + } +} + +func TestClientLoginCert(t *testing.T) { + cert := &Certificate{ + Key: testPublicKeys["rsa"], + ValidBefore: CertTimeInfinity, + CertType: UserCert, + } + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + certSigner, err := NewCertSigner(cert, testSigners["rsa"]) + if err != nil { + t.Fatalf("NewCertSigner: %v", err) + } + + clientConfig := &ClientConfig{ + User: "user", + HostKeyCallback: InsecureIgnoreHostKey(), + } + clientConfig.Auth = append(clientConfig.Auth, PublicKeys(certSigner)) + + // should succeed + if err := tryAuth(t, clientConfig); err != nil { + t.Errorf("cert login failed: %v", err) + } + + // corrupted signature + cert.Signature.Blob[0]++ + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with corrupted sig") + } + + // revoked + cert.Serial = 666 + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("revoked cert login succeeded") + } + cert.Serial = 1 + + // sign with wrong key + cert.SignCert(rand.Reader, testSigners["dsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with non-authoritative key") + } + + // host cert + cert.CertType = HostCert + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with wrong type") + } + cert.CertType = UserCert + + // principal specified + cert.ValidPrincipals = []string{"user"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err != nil { + t.Errorf("cert login failed: %v", err) + } + + // wrong principal specified + cert.ValidPrincipals = []string{"fred"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with wrong principal") + } + cert.ValidPrincipals = nil + + // added critical option + cert.CriticalOptions = map[string]string{"root-access": "yes"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login passed with unrecognized critical option") + } + + // allowed source address + cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42/24,::42/120"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err != nil { + t.Errorf("cert login with source-address failed: %v", err) + } + + // disallowed source address + cert.CriticalOptions = map[string]string{"source-address": "127.0.0.42,::42"} + cert.SignCert(rand.Reader, testSigners["ecdsa"]) + if err := tryAuth(t, clientConfig); err == nil { + t.Errorf("cert login with source-address succeeded") + } +} + +func testPermissionsPassing(withPermissions bool, t *testing.T) { + serverConfig := &ServerConfig{ + PublicKeyCallback: func(conn ConnMetadata, key PublicKey) (*Permissions, error) { + if conn.User() == "nopermissions" { + return nil, nil + } + return &Permissions{}, nil + }, + } + serverConfig.AddHostKey(testSigners["rsa"]) + + clientConfig := &ClientConfig{ + Auth: []AuthMethod{ + PublicKeys(testSigners["rsa"]), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + if withPermissions { + clientConfig.User = "permissions" + } else { + clientConfig.User = "nopermissions" + } + + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go NewClientConn(c2, "", clientConfig) + serverConn, err := newServer(c1, serverConfig) + if err != nil { + t.Fatal(err) + } + if p := serverConn.Permissions; (p != nil) != withPermissions { + t.Fatalf("withPermissions is %t, but Permissions object is %#v", withPermissions, p) + } +} + +func TestPermissionsPassing(t *testing.T) { + testPermissionsPassing(true, t) +} + +func TestNoPermissionsPassing(t *testing.T) { + testPermissionsPassing(false, t) +} + +func TestRetryableAuth(t *testing.T) { + n := 0 + passwords := []string{"WRONG1", "WRONG2"} + + config := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + RetryableAuthMethod(PasswordCallback(func() (string, error) { + p := passwords[n] + n++ + return p, nil + }), 2), + PublicKeys(testSigners["rsa"]), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } + if n != 2 { + t.Fatalf("Did not try all passwords") + } +} + +func ExampleRetryableAuthMethod(t *testing.T) { + user := "testuser" + NumberOfPrompts := 3 + + // Normally this would be a callback that prompts the user to answer the + // provided questions + Cb := func(user, instruction string, questions []string, echos []bool) (answers []string, err error) { + return []string{"answer1", "answer2"}, nil + } + + config := &ClientConfig{ + HostKeyCallback: InsecureIgnoreHostKey(), + User: user, + Auth: []AuthMethod{ + RetryableAuthMethod(KeyboardInteractiveChallenge(Cb), NumberOfPrompts), + }, + } + + if err := tryAuth(t, config); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } +} + +// Test if username is received on server side when NoClientAuth is used +func TestClientAuthNone(t *testing.T) { + user := "testuser" + serverConfig := &ServerConfig{ + NoClientAuth: true, + } + serverConfig.AddHostKey(testSigners["rsa"]) + + clientConfig := &ClientConfig{ + User: user, + HostKeyCallback: InsecureIgnoreHostKey(), + } + + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go NewClientConn(c2, "", clientConfig) + serverConn, err := newServer(c1, serverConfig) + if err != nil { + t.Fatalf("newServer: %v", err) + } + if serverConn.User() != user { + t.Fatalf("server: got %q, want %q", serverConn.User(), user) + } +} + +// Test if authentication attempts are limited on server when MaxAuthTries is set +func TestClientAuthMaxAuthTries(t *testing.T) { + user := "testuser" + + serverConfig := &ServerConfig{ + MaxAuthTries: 2, + PasswordCallback: func(conn ConnMetadata, pass []byte) (*Permissions, error) { + if conn.User() == "testuser" && string(pass) == "right" { + return nil, nil + } + return nil, errors.New("password auth failed") + }, + } + serverConfig.AddHostKey(testSigners["rsa"]) + + expectedErr := fmt.Errorf("ssh: handshake failed: %v", &disconnectMsg{ + Reason: 2, + Message: "too many authentication failures", + }) + + for tries := 2; tries < 4; tries++ { + n := tries + clientConfig := &ClientConfig{ + User: user, + Auth: []AuthMethod{ + RetryableAuthMethod(PasswordCallback(func() (string, error) { + n-- + if n == 0 { + return "right", nil + } + return "wrong", nil + }), tries), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go newServer(c1, serverConfig) + _, _, _, err = NewClientConn(c2, "", clientConfig) + if tries > 2 { + if err == nil { + t.Fatalf("client: got no error, want %s", expectedErr) + } else if err.Error() != expectedErr.Error() { + t.Fatalf("client: got %s, want %s", err, expectedErr) + } + } else { + if err != nil { + t.Fatalf("client: got %s, want no error", err) + } + } + } +} + +// Test if authentication attempts are correctly limited on server +// when more public keys are provided then MaxAuthTries +func TestClientAuthMaxAuthTriesPublicKey(t *testing.T) { + signers := []Signer{} + for i := 0; i < 6; i++ { + signers = append(signers, testSigners["dsa"]) + } + + validConfig := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(append([]Signer{testSigners["rsa"]}, signers...)...), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + if err := tryAuth(t, validConfig); err != nil { + t.Fatalf("unable to dial remote side: %s", err) + } + + expectedErr := fmt.Errorf("ssh: handshake failed: %v", &disconnectMsg{ + Reason: 2, + Message: "too many authentication failures", + }) + invalidConfig := &ClientConfig{ + User: "testuser", + Auth: []AuthMethod{ + PublicKeys(append(signers, testSigners["rsa"])...), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + if err := tryAuth(t, invalidConfig); err == nil { + t.Fatalf("client: got no error, want %s", expectedErr) + } else if err.Error() != expectedErr.Error() { + t.Fatalf("client: got %s, want %s", err, expectedErr) + } +} + +// Test whether authentication errors are being properly logged if all +// authentication methods have been exhausted +func TestClientAuthErrorList(t *testing.T) { + publicKeyErr := errors.New("This is an error from PublicKeyCallback") + + clientConfig := &ClientConfig{ + Auth: []AuthMethod{ + PublicKeys(testSigners["rsa"]), + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + serverConfig := &ServerConfig{ + PublicKeyCallback: func(_ ConnMetadata, _ PublicKey) (*Permissions, error) { + return nil, publicKeyErr + }, + } + serverConfig.AddHostKey(testSigners["rsa"]) + + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go NewClientConn(c2, "", clientConfig) + _, err = newServer(c1, serverConfig) + if err == nil { + t.Fatal("newServer: got nil, expected errors") + } + + authErrs, ok := err.(*ServerAuthError) + if !ok { + t.Fatalf("errors: got %T, want *ssh.ServerAuthError", err) + } + for i, e := range authErrs.Errors { + switch i { + case 0: + if e.Error() != "no auth passed yet" { + t.Fatalf("errors: got %v, want no auth passed yet", e.Error()) + } + case 1: + if e != publicKeyErr { + t.Fatalf("errors: got %v, want %v", e, publicKeyErr) + } + default: + t.Fatalf("errors: got %v, expected 2 errors", authErrs.Errors) + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/client_test.go b/vendor/golang.org/x/crypto/ssh/client_test.go new file mode 100644 index 0000000..ccf5607 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/client_test.go @@ -0,0 +1,81 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "net" + "strings" + "testing" +) + +func testClientVersion(t *testing.T, config *ClientConfig, expected string) { + clientConn, serverConn := net.Pipe() + defer clientConn.Close() + receivedVersion := make(chan string, 1) + config.HostKeyCallback = InsecureIgnoreHostKey() + go func() { + version, err := readVersion(serverConn) + if err != nil { + receivedVersion <- "" + } else { + receivedVersion <- string(version) + } + serverConn.Close() + }() + NewClientConn(clientConn, "", config) + actual := <-receivedVersion + if actual != expected { + t.Fatalf("got %s; want %s", actual, expected) + } +} + +func TestCustomClientVersion(t *testing.T) { + version := "Test-Client-Version-0.0" + testClientVersion(t, &ClientConfig{ClientVersion: version}, version) +} + +func TestDefaultClientVersion(t *testing.T) { + testClientVersion(t, &ClientConfig{}, packageVersion) +} + +func TestHostKeyCheck(t *testing.T) { + for _, tt := range []struct { + name string + wantError string + key PublicKey + }{ + {"no callback", "must specify HostKeyCallback", nil}, + {"correct key", "", testSigners["rsa"].PublicKey()}, + {"mismatch", "mismatch", testSigners["ecdsa"].PublicKey()}, + } { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + serverConf := &ServerConfig{ + NoClientAuth: true, + } + serverConf.AddHostKey(testSigners["rsa"]) + + go NewServerConn(c1, serverConf) + clientConf := ClientConfig{ + User: "user", + } + if tt.key != nil { + clientConf.HostKeyCallback = FixedHostKey(tt.key) + } + + _, _, _, err = NewClientConn(c2, "", &clientConf) + if err != nil { + if tt.wantError == "" || !strings.Contains(err.Error(), tt.wantError) { + t.Errorf("%s: got error %q, missing %q", tt.name, err.Error(), tt.wantError) + } + } else if tt.wantError != "" { + t.Errorf("%s: succeeded, but want error string %q", tt.name, tt.wantError) + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/common.go b/vendor/golang.org/x/crypto/ssh/common.go new file mode 100644 index 0000000..dc39e4d --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/common.go @@ -0,0 +1,373 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "crypto" + "crypto/rand" + "fmt" + "io" + "math" + "sync" + + _ "crypto/sha1" + _ "crypto/sha256" + _ "crypto/sha512" +) + +// These are string constants in the SSH protocol. +const ( + compressionNone = "none" + serviceUserAuth = "ssh-userauth" + serviceSSH = "ssh-connection" +) + +// supportedCiphers specifies the supported ciphers in preference order. +var supportedCiphers = []string{ + "aes128-ctr", "aes192-ctr", "aes256-ctr", + "aes128-gcm@openssh.com", + "arcfour256", "arcfour128", +} + +// supportedKexAlgos specifies the supported key-exchange algorithms in +// preference order. +var supportedKexAlgos = []string{ + kexAlgoCurve25519SHA256, + // P384 and P521 are not constant-time yet, but since we don't + // reuse ephemeral keys, using them for ECDH should be OK. + kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, + kexAlgoDH14SHA1, kexAlgoDH1SHA1, +} + +// supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods +// of authenticating servers) in preference order. +var supportedHostKeyAlgos = []string{ + CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, + CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01, + + KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, + KeyAlgoRSA, KeyAlgoDSA, + + KeyAlgoED25519, +} + +// supportedMACs specifies a default set of MAC algorithms in preference order. +// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed +// because they have reached the end of their useful life. +var supportedMACs = []string{ + "hmac-sha2-256-etm@openssh.com", "hmac-sha2-256", "hmac-sha1", "hmac-sha1-96", +} + +var supportedCompressions = []string{compressionNone} + +// hashFuncs keeps the mapping of supported algorithms to their respective +// hashes needed for signature verification. +var hashFuncs = map[string]crypto.Hash{ + KeyAlgoRSA: crypto.SHA1, + KeyAlgoDSA: crypto.SHA1, + KeyAlgoECDSA256: crypto.SHA256, + KeyAlgoECDSA384: crypto.SHA384, + KeyAlgoECDSA521: crypto.SHA512, + CertAlgoRSAv01: crypto.SHA1, + CertAlgoDSAv01: crypto.SHA1, + CertAlgoECDSA256v01: crypto.SHA256, + CertAlgoECDSA384v01: crypto.SHA384, + CertAlgoECDSA521v01: crypto.SHA512, +} + +// unexpectedMessageError results when the SSH message that we received didn't +// match what we wanted. +func unexpectedMessageError(expected, got uint8) error { + return fmt.Errorf("ssh: unexpected message type %d (expected %d)", got, expected) +} + +// parseError results from a malformed SSH message. +func parseError(tag uint8) error { + return fmt.Errorf("ssh: parse error in message type %d", tag) +} + +func findCommon(what string, client []string, server []string) (common string, err error) { + for _, c := range client { + for _, s := range server { + if c == s { + return c, nil + } + } + } + return "", fmt.Errorf("ssh: no common algorithm for %s; client offered: %v, server offered: %v", what, client, server) +} + +type directionAlgorithms struct { + Cipher string + MAC string + Compression string +} + +// rekeyBytes returns a rekeying intervals in bytes. +func (a *directionAlgorithms) rekeyBytes() int64 { + // According to RFC4344 block ciphers should rekey after + // 2^(BLOCKSIZE/4) blocks. For all AES flavors BLOCKSIZE is + // 128. + switch a.Cipher { + case "aes128-ctr", "aes192-ctr", "aes256-ctr", gcmCipherID, aes128cbcID: + return 16 * (1 << 32) + + } + + // For others, stick with RFC4253 recommendation to rekey after 1 Gb of data. + return 1 << 30 +} + +type algorithms struct { + kex string + hostKey string + w directionAlgorithms + r directionAlgorithms +} + +func findAgreedAlgorithms(clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) { + result := &algorithms{} + + result.kex, err = findCommon("key exchange", clientKexInit.KexAlgos, serverKexInit.KexAlgos) + if err != nil { + return + } + + result.hostKey, err = findCommon("host key", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos) + if err != nil { + return + } + + result.w.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer) + if err != nil { + return + } + + result.r.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient) + if err != nil { + return + } + + result.w.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer) + if err != nil { + return + } + + result.r.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient) + if err != nil { + return + } + + result.w.Compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer) + if err != nil { + return + } + + result.r.Compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient) + if err != nil { + return + } + + return result, nil +} + +// If rekeythreshold is too small, we can't make any progress sending +// stuff. +const minRekeyThreshold uint64 = 256 + +// Config contains configuration data common to both ServerConfig and +// ClientConfig. +type Config struct { + // Rand provides the source of entropy for cryptographic + // primitives. If Rand is nil, the cryptographic random reader + // in package crypto/rand will be used. + Rand io.Reader + + // The maximum number of bytes sent or received after which a + // new key is negotiated. It must be at least 256. If + // unspecified, a size suitable for the chosen cipher is used. + RekeyThreshold uint64 + + // The allowed key exchanges algorithms. If unspecified then a + // default set of algorithms is used. + KeyExchanges []string + + // The allowed cipher algorithms. If unspecified then a sensible + // default is used. + Ciphers []string + + // The allowed MAC algorithms. If unspecified then a sensible default + // is used. + MACs []string +} + +// SetDefaults sets sensible values for unset fields in config. This is +// exported for testing: Configs passed to SSH functions are copied and have +// default values set automatically. +func (c *Config) SetDefaults() { + if c.Rand == nil { + c.Rand = rand.Reader + } + if c.Ciphers == nil { + c.Ciphers = supportedCiphers + } + var ciphers []string + for _, c := range c.Ciphers { + if cipherModes[c] != nil { + // reject the cipher if we have no cipherModes definition + ciphers = append(ciphers, c) + } + } + c.Ciphers = ciphers + + if c.KeyExchanges == nil { + c.KeyExchanges = supportedKexAlgos + } + + if c.MACs == nil { + c.MACs = supportedMACs + } + + if c.RekeyThreshold == 0 { + // cipher specific default + } else if c.RekeyThreshold < minRekeyThreshold { + c.RekeyThreshold = minRekeyThreshold + } else if c.RekeyThreshold >= math.MaxInt64 { + // Avoid weirdness if somebody uses -1 as a threshold. + c.RekeyThreshold = math.MaxInt64 + } +} + +// buildDataSignedForAuth returns the data that is signed in order to prove +// possession of a private key. See RFC 4252, section 7. +func buildDataSignedForAuth(sessionId []byte, req userAuthRequestMsg, algo, pubKey []byte) []byte { + data := struct { + Session []byte + Type byte + User string + Service string + Method string + Sign bool + Algo []byte + PubKey []byte + }{ + sessionId, + msgUserAuthRequest, + req.User, + req.Service, + req.Method, + true, + algo, + pubKey, + } + return Marshal(data) +} + +func appendU16(buf []byte, n uint16) []byte { + return append(buf, byte(n>>8), byte(n)) +} + +func appendU32(buf []byte, n uint32) []byte { + return append(buf, byte(n>>24), byte(n>>16), byte(n>>8), byte(n)) +} + +func appendU64(buf []byte, n uint64) []byte { + return append(buf, + byte(n>>56), byte(n>>48), byte(n>>40), byte(n>>32), + byte(n>>24), byte(n>>16), byte(n>>8), byte(n)) +} + +func appendInt(buf []byte, n int) []byte { + return appendU32(buf, uint32(n)) +} + +func appendString(buf []byte, s string) []byte { + buf = appendU32(buf, uint32(len(s))) + buf = append(buf, s...) + return buf +} + +func appendBool(buf []byte, b bool) []byte { + if b { + return append(buf, 1) + } + return append(buf, 0) +} + +// newCond is a helper to hide the fact that there is no usable zero +// value for sync.Cond. +func newCond() *sync.Cond { return sync.NewCond(new(sync.Mutex)) } + +// window represents the buffer available to clients +// wishing to write to a channel. +type window struct { + *sync.Cond + win uint32 // RFC 4254 5.2 says the window size can grow to 2^32-1 + writeWaiters int + closed bool +} + +// add adds win to the amount of window available +// for consumers. +func (w *window) add(win uint32) bool { + // a zero sized window adjust is a noop. + if win == 0 { + return true + } + w.L.Lock() + if w.win+win < win { + w.L.Unlock() + return false + } + w.win += win + // It is unusual that multiple goroutines would be attempting to reserve + // window space, but not guaranteed. Use broadcast to notify all waiters + // that additional window is available. + w.Broadcast() + w.L.Unlock() + return true +} + +// close sets the window to closed, so all reservations fail +// immediately. +func (w *window) close() { + w.L.Lock() + w.closed = true + w.Broadcast() + w.L.Unlock() +} + +// reserve reserves win from the available window capacity. +// If no capacity remains, reserve will block. reserve may +// return less than requested. +func (w *window) reserve(win uint32) (uint32, error) { + var err error + w.L.Lock() + w.writeWaiters++ + w.Broadcast() + for w.win == 0 && !w.closed { + w.Wait() + } + w.writeWaiters-- + if w.win < win { + win = w.win + } + w.win -= win + if w.closed { + err = io.EOF + } + w.L.Unlock() + return win, err +} + +// waitWriterBlocked waits until some goroutine is blocked for further +// writes. It is used in tests only. +func (w *window) waitWriterBlocked() { + w.Cond.L.Lock() + for w.writeWaiters == 0 { + w.Cond.Wait() + } + w.Cond.L.Unlock() +} diff --git a/vendor/golang.org/x/crypto/ssh/connection.go b/vendor/golang.org/x/crypto/ssh/connection.go new file mode 100644 index 0000000..fd6b068 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/connection.go @@ -0,0 +1,143 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "fmt" + "net" +) + +// OpenChannelError is returned if the other side rejects an +// OpenChannel request. +type OpenChannelError struct { + Reason RejectionReason + Message string +} + +func (e *OpenChannelError) Error() string { + return fmt.Sprintf("ssh: rejected: %s (%s)", e.Reason, e.Message) +} + +// ConnMetadata holds metadata for the connection. +type ConnMetadata interface { + // User returns the user ID for this connection. + User() string + + // SessionID returns the session hash, also denoted by H. + SessionID() []byte + + // ClientVersion returns the client's version string as hashed + // into the session ID. + ClientVersion() []byte + + // ServerVersion returns the server's version string as hashed + // into the session ID. + ServerVersion() []byte + + // RemoteAddr returns the remote address for this connection. + RemoteAddr() net.Addr + + // LocalAddr returns the local address for this connection. + LocalAddr() net.Addr +} + +// Conn represents an SSH connection for both server and client roles. +// Conn is the basis for implementing an application layer, such +// as ClientConn, which implements the traditional shell access for +// clients. +type Conn interface { + ConnMetadata + + // SendRequest sends a global request, and returns the + // reply. If wantReply is true, it returns the response status + // and payload. See also RFC4254, section 4. + SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error) + + // OpenChannel tries to open an channel. If the request is + // rejected, it returns *OpenChannelError. On success it returns + // the SSH Channel and a Go channel for incoming, out-of-band + // requests. The Go channel must be serviced, or the + // connection will hang. + OpenChannel(name string, data []byte) (Channel, <-chan *Request, error) + + // Close closes the underlying network connection + Close() error + + // Wait blocks until the connection has shut down, and returns the + // error causing the shutdown. + Wait() error + + // TODO(hanwen): consider exposing: + // RequestKeyChange + // Disconnect +} + +// DiscardRequests consumes and rejects all requests from the +// passed-in channel. +func DiscardRequests(in <-chan *Request) { + for req := range in { + if req.WantReply { + req.Reply(false, nil) + } + } +} + +// A connection represents an incoming connection. +type connection struct { + transport *handshakeTransport + sshConn + + // The connection protocol. + *mux +} + +func (c *connection) Close() error { + return c.sshConn.conn.Close() +} + +// sshconn provides net.Conn metadata, but disallows direct reads and +// writes. +type sshConn struct { + conn net.Conn + + user string + sessionID []byte + clientVersion []byte + serverVersion []byte +} + +func dup(src []byte) []byte { + dst := make([]byte, len(src)) + copy(dst, src) + return dst +} + +func (c *sshConn) User() string { + return c.user +} + +func (c *sshConn) RemoteAddr() net.Addr { + return c.conn.RemoteAddr() +} + +func (c *sshConn) Close() error { + return c.conn.Close() +} + +func (c *sshConn) LocalAddr() net.Addr { + return c.conn.LocalAddr() +} + +func (c *sshConn) SessionID() []byte { + return dup(c.sessionID) +} + +func (c *sshConn) ClientVersion() []byte { + return dup(c.clientVersion) +} + +func (c *sshConn) ServerVersion() []byte { + return dup(c.serverVersion) +} diff --git a/vendor/golang.org/x/crypto/ssh/doc.go b/vendor/golang.org/x/crypto/ssh/doc.go new file mode 100644 index 0000000..67b7322 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/doc.go @@ -0,0 +1,21 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* +Package ssh implements an SSH client and server. + +SSH is a transport security protocol, an authentication protocol and a +family of application protocols. The most typical application level +protocol is a remote shell and this is specifically implemented. However, +the multiplexed nature of SSH is exposed to users that wish to support +others. + +References: + [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD + [SSH-PARAMETERS]: http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1 + +This package does not fall under the stability promise of the Go language itself, +so its API may be changed when pressing needs arise. +*/ +package ssh // import "golang.org/x/crypto/ssh" diff --git a/vendor/golang.org/x/crypto/ssh/example_test.go b/vendor/golang.org/x/crypto/ssh/example_test.go new file mode 100644 index 0000000..b910c7b --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/example_test.go @@ -0,0 +1,320 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh_test + +import ( + "bufio" + "bytes" + "fmt" + "io/ioutil" + "log" + "net" + "net/http" + "os" + "path/filepath" + "strings" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/terminal" +) + +func ExampleNewServerConn() { + // Public key authentication is done by comparing + // the public key of a received connection + // with the entries in the authorized_keys file. + authorizedKeysBytes, err := ioutil.ReadFile("authorized_keys") + if err != nil { + log.Fatalf("Failed to load authorized_keys, err: %v", err) + } + + authorizedKeysMap := map[string]bool{} + for len(authorizedKeysBytes) > 0 { + pubKey, _, _, rest, err := ssh.ParseAuthorizedKey(authorizedKeysBytes) + if err != nil { + log.Fatal(err) + } + + authorizedKeysMap[string(pubKey.Marshal())] = true + authorizedKeysBytes = rest + } + + // An SSH server is represented by a ServerConfig, which holds + // certificate details and handles authentication of ServerConns. + config := &ssh.ServerConfig{ + // Remove to disable password auth. + PasswordCallback: func(c ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) { + // Should use constant-time compare (or better, salt+hash) in + // a production setting. + if c.User() == "testuser" && string(pass) == "tiger" { + return nil, nil + } + return nil, fmt.Errorf("password rejected for %q", c.User()) + }, + + // Remove to disable public key auth. + PublicKeyCallback: func(c ssh.ConnMetadata, pubKey ssh.PublicKey) (*ssh.Permissions, error) { + if authorizedKeysMap[string(pubKey.Marshal())] { + return &ssh.Permissions{ + // Record the public key used for authentication. + Extensions: map[string]string{ + "pubkey-fp": ssh.FingerprintSHA256(pubKey), + }, + }, nil + } + return nil, fmt.Errorf("unknown public key for %q", c.User()) + }, + } + + privateBytes, err := ioutil.ReadFile("id_rsa") + if err != nil { + log.Fatal("Failed to load private key: ", err) + } + + private, err := ssh.ParsePrivateKey(privateBytes) + if err != nil { + log.Fatal("Failed to parse private key: ", err) + } + + config.AddHostKey(private) + + // Once a ServerConfig has been configured, connections can be + // accepted. + listener, err := net.Listen("tcp", "0.0.0.0:2022") + if err != nil { + log.Fatal("failed to listen for connection: ", err) + } + nConn, err := listener.Accept() + if err != nil { + log.Fatal("failed to accept incoming connection: ", err) + } + + // Before use, a handshake must be performed on the incoming + // net.Conn. + conn, chans, reqs, err := ssh.NewServerConn(nConn, config) + if err != nil { + log.Fatal("failed to handshake: ", err) + } + log.Printf("logged in with key %s", conn.Permissions.Extensions["pubkey-fp"]) + + // The incoming Request channel must be serviced. + go ssh.DiscardRequests(reqs) + + // Service the incoming Channel channel. + for newChannel := range chans { + // Channels have a type, depending on the application level + // protocol intended. In the case of a shell, the type is + // "session" and ServerShell may be used to present a simple + // terminal interface. + if newChannel.ChannelType() != "session" { + newChannel.Reject(ssh.UnknownChannelType, "unknown channel type") + continue + } + channel, requests, err := newChannel.Accept() + if err != nil { + log.Fatalf("Could not accept channel: %v", err) + } + + // Sessions have out-of-band requests such as "shell", + // "pty-req" and "env". Here we handle only the + // "shell" request. + go func(in <-chan *ssh.Request) { + for req := range in { + req.Reply(req.Type == "shell", nil) + } + }(requests) + + term := terminal.NewTerminal(channel, "> ") + + go func() { + defer channel.Close() + for { + line, err := term.ReadLine() + if err != nil { + break + } + fmt.Println(line) + } + }() + } +} + +func ExampleHostKeyCheck() { + // Every client must provide a host key check. Here is a + // simple-minded parse of OpenSSH's known_hosts file + host := "hostname" + file, err := os.Open(filepath.Join(os.Getenv("HOME"), ".ssh", "known_hosts")) + if err != nil { + log.Fatal(err) + } + defer file.Close() + + scanner := bufio.NewScanner(file) + var hostKey ssh.PublicKey + for scanner.Scan() { + fields := strings.Split(scanner.Text(), " ") + if len(fields) != 3 { + continue + } + if strings.Contains(fields[0], host) { + var err error + hostKey, _, _, _, err = ssh.ParseAuthorizedKey(scanner.Bytes()) + if err != nil { + log.Fatalf("error parsing %q: %v", fields[2], err) + } + break + } + } + + if hostKey == nil { + log.Fatalf("no hostkey for %s", host) + } + + config := ssh.ClientConfig{ + User: os.Getenv("USER"), + HostKeyCallback: ssh.FixedHostKey(hostKey), + } + + _, err = ssh.Dial("tcp", host+":22", &config) + log.Println(err) +} + +func ExampleDial() { + var hostKey ssh.PublicKey + // An SSH client is represented with a ClientConn. + // + // To authenticate with the remote server you must pass at least one + // implementation of AuthMethod via the Auth field in ClientConfig, + // and provide a HostKeyCallback. + config := &ssh.ClientConfig{ + User: "username", + Auth: []ssh.AuthMethod{ + ssh.Password("yourpassword"), + }, + HostKeyCallback: ssh.FixedHostKey(hostKey), + } + client, err := ssh.Dial("tcp", "yourserver.com:22", config) + if err != nil { + log.Fatal("Failed to dial: ", err) + } + + // Each ClientConn can support multiple interactive sessions, + // represented by a Session. + session, err := client.NewSession() + if err != nil { + log.Fatal("Failed to create session: ", err) + } + defer session.Close() + + // Once a Session is created, you can execute a single command on + // the remote side using the Run method. + var b bytes.Buffer + session.Stdout = &b + if err := session.Run("/usr/bin/whoami"); err != nil { + log.Fatal("Failed to run: " + err.Error()) + } + fmt.Println(b.String()) +} + +func ExamplePublicKeys() { + var hostKey ssh.PublicKey + // A public key may be used to authenticate against the remote + // server by using an unencrypted PEM-encoded private key file. + // + // If you have an encrypted private key, the crypto/x509 package + // can be used to decrypt it. + key, err := ioutil.ReadFile("/home/user/.ssh/id_rsa") + if err != nil { + log.Fatalf("unable to read private key: %v", err) + } + + // Create the Signer for this private key. + signer, err := ssh.ParsePrivateKey(key) + if err != nil { + log.Fatalf("unable to parse private key: %v", err) + } + + config := &ssh.ClientConfig{ + User: "user", + Auth: []ssh.AuthMethod{ + // Use the PublicKeys method for remote authentication. + ssh.PublicKeys(signer), + }, + HostKeyCallback: ssh.FixedHostKey(hostKey), + } + + // Connect to the remote server and perform the SSH handshake. + client, err := ssh.Dial("tcp", "host.com:22", config) + if err != nil { + log.Fatalf("unable to connect: %v", err) + } + defer client.Close() +} + +func ExampleClient_Listen() { + var hostKey ssh.PublicKey + config := &ssh.ClientConfig{ + User: "username", + Auth: []ssh.AuthMethod{ + ssh.Password("password"), + }, + HostKeyCallback: ssh.FixedHostKey(hostKey), + } + // Dial your ssh server. + conn, err := ssh.Dial("tcp", "localhost:22", config) + if err != nil { + log.Fatal("unable to connect: ", err) + } + defer conn.Close() + + // Request the remote side to open port 8080 on all interfaces. + l, err := conn.Listen("tcp", "0.0.0.0:8080") + if err != nil { + log.Fatal("unable to register tcp forward: ", err) + } + defer l.Close() + + // Serve HTTP with your SSH server acting as a reverse proxy. + http.Serve(l, http.HandlerFunc(func(resp http.ResponseWriter, req *http.Request) { + fmt.Fprintf(resp, "Hello world!\n") + })) +} + +func ExampleSession_RequestPty() { + var hostKey ssh.PublicKey + // Create client config + config := &ssh.ClientConfig{ + User: "username", + Auth: []ssh.AuthMethod{ + ssh.Password("password"), + }, + HostKeyCallback: ssh.FixedHostKey(hostKey), + } + // Connect to ssh server + conn, err := ssh.Dial("tcp", "localhost:22", config) + if err != nil { + log.Fatal("unable to connect: ", err) + } + defer conn.Close() + // Create a session + session, err := conn.NewSession() + if err != nil { + log.Fatal("unable to create session: ", err) + } + defer session.Close() + // Set up terminal modes + modes := ssh.TerminalModes{ + ssh.ECHO: 0, // disable echoing + ssh.TTY_OP_ISPEED: 14400, // input speed = 14.4kbaud + ssh.TTY_OP_OSPEED: 14400, // output speed = 14.4kbaud + } + // Request pseudo terminal + if err := session.RequestPty("xterm", 40, 80, modes); err != nil { + log.Fatal("request for pseudo terminal failed: ", err) + } + // Start remote shell + if err := session.Shell(); err != nil { + log.Fatal("failed to start shell: ", err) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go new file mode 100644 index 0000000..932ce83 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/handshake.go @@ -0,0 +1,640 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "crypto/rand" + "errors" + "fmt" + "io" + "log" + "net" + "sync" +) + +// debugHandshake, if set, prints messages sent and received. Key +// exchange messages are printed as if DH were used, so the debug +// messages are wrong when using ECDH. +const debugHandshake = false + +// chanSize sets the amount of buffering SSH connections. This is +// primarily for testing: setting chanSize=0 uncovers deadlocks more +// quickly. +const chanSize = 16 + +// keyingTransport is a packet based transport that supports key +// changes. It need not be thread-safe. It should pass through +// msgNewKeys in both directions. +type keyingTransport interface { + packetConn + + // prepareKeyChange sets up a key change. The key change for a + // direction will be effected if a msgNewKeys message is sent + // or received. + prepareKeyChange(*algorithms, *kexResult) error +} + +// handshakeTransport implements rekeying on top of a keyingTransport +// and offers a thread-safe writePacket() interface. +type handshakeTransport struct { + conn keyingTransport + config *Config + + serverVersion []byte + clientVersion []byte + + // hostKeys is non-empty if we are the server. In that case, + // it contains all host keys that can be used to sign the + // connection. + hostKeys []Signer + + // hostKeyAlgorithms is non-empty if we are the client. In that case, + // we accept these key types from the server as host key. + hostKeyAlgorithms []string + + // On read error, incoming is closed, and readError is set. + incoming chan []byte + readError error + + mu sync.Mutex + writeError error + sentInitPacket []byte + sentInitMsg *kexInitMsg + pendingPackets [][]byte // Used when a key exchange is in progress. + + // If the read loop wants to schedule a kex, it pings this + // channel, and the write loop will send out a kex + // message. + requestKex chan struct{} + + // If the other side requests or confirms a kex, its kexInit + // packet is sent here for the write loop to find it. + startKex chan *pendingKex + + // data for host key checking + hostKeyCallback HostKeyCallback + dialAddress string + remoteAddr net.Addr + + // Algorithms agreed in the last key exchange. + algorithms *algorithms + + readPacketsLeft uint32 + readBytesLeft int64 + + writePacketsLeft uint32 + writeBytesLeft int64 + + // The session ID or nil if first kex did not complete yet. + sessionID []byte +} + +type pendingKex struct { + otherInit []byte + done chan error +} + +func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, serverVersion []byte) *handshakeTransport { + t := &handshakeTransport{ + conn: conn, + serverVersion: serverVersion, + clientVersion: clientVersion, + incoming: make(chan []byte, chanSize), + requestKex: make(chan struct{}, 1), + startKex: make(chan *pendingKex, 1), + + config: config, + } + t.resetReadThresholds() + t.resetWriteThresholds() + + // We always start with a mandatory key exchange. + t.requestKex <- struct{}{} + return t +} + +func newClientTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ClientConfig, dialAddr string, addr net.Addr) *handshakeTransport { + t := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion) + t.dialAddress = dialAddr + t.remoteAddr = addr + t.hostKeyCallback = config.HostKeyCallback + if config.HostKeyAlgorithms != nil { + t.hostKeyAlgorithms = config.HostKeyAlgorithms + } else { + t.hostKeyAlgorithms = supportedHostKeyAlgos + } + go t.readLoop() + go t.kexLoop() + return t +} + +func newServerTransport(conn keyingTransport, clientVersion, serverVersion []byte, config *ServerConfig) *handshakeTransport { + t := newHandshakeTransport(conn, &config.Config, clientVersion, serverVersion) + t.hostKeys = config.hostKeys + go t.readLoop() + go t.kexLoop() + return t +} + +func (t *handshakeTransport) getSessionID() []byte { + return t.sessionID +} + +// waitSession waits for the session to be established. This should be +// the first thing to call after instantiating handshakeTransport. +func (t *handshakeTransport) waitSession() error { + p, err := t.readPacket() + if err != nil { + return err + } + if p[0] != msgNewKeys { + return fmt.Errorf("ssh: first packet should be msgNewKeys") + } + + return nil +} + +func (t *handshakeTransport) id() string { + if len(t.hostKeys) > 0 { + return "server" + } + return "client" +} + +func (t *handshakeTransport) printPacket(p []byte, write bool) { + action := "got" + if write { + action = "sent" + } + + if p[0] == msgChannelData || p[0] == msgChannelExtendedData { + log.Printf("%s %s data (packet %d bytes)", t.id(), action, len(p)) + } else { + msg, err := decode(p) + log.Printf("%s %s %T %v (%v)", t.id(), action, msg, msg, err) + } +} + +func (t *handshakeTransport) readPacket() ([]byte, error) { + p, ok := <-t.incoming + if !ok { + return nil, t.readError + } + return p, nil +} + +func (t *handshakeTransport) readLoop() { + first := true + for { + p, err := t.readOnePacket(first) + first = false + if err != nil { + t.readError = err + close(t.incoming) + break + } + if p[0] == msgIgnore || p[0] == msgDebug { + continue + } + t.incoming <- p + } + + // Stop writers too. + t.recordWriteError(t.readError) + + // Unblock the writer should it wait for this. + close(t.startKex) + + // Don't close t.requestKex; it's also written to from writePacket. +} + +func (t *handshakeTransport) pushPacket(p []byte) error { + if debugHandshake { + t.printPacket(p, true) + } + return t.conn.writePacket(p) +} + +func (t *handshakeTransport) getWriteError() error { + t.mu.Lock() + defer t.mu.Unlock() + return t.writeError +} + +func (t *handshakeTransport) recordWriteError(err error) { + t.mu.Lock() + defer t.mu.Unlock() + if t.writeError == nil && err != nil { + t.writeError = err + } +} + +func (t *handshakeTransport) requestKeyExchange() { + select { + case t.requestKex <- struct{}{}: + default: + // something already requested a kex, so do nothing. + } +} + +func (t *handshakeTransport) resetWriteThresholds() { + t.writePacketsLeft = packetRekeyThreshold + if t.config.RekeyThreshold > 0 { + t.writeBytesLeft = int64(t.config.RekeyThreshold) + } else if t.algorithms != nil { + t.writeBytesLeft = t.algorithms.w.rekeyBytes() + } else { + t.writeBytesLeft = 1 << 30 + } +} + +func (t *handshakeTransport) kexLoop() { + +write: + for t.getWriteError() == nil { + var request *pendingKex + var sent bool + + for request == nil || !sent { + var ok bool + select { + case request, ok = <-t.startKex: + if !ok { + break write + } + case <-t.requestKex: + break + } + + if !sent { + if err := t.sendKexInit(); err != nil { + t.recordWriteError(err) + break + } + sent = true + } + } + + if err := t.getWriteError(); err != nil { + if request != nil { + request.done <- err + } + break + } + + // We're not servicing t.requestKex, but that is OK: + // we never block on sending to t.requestKex. + + // We're not servicing t.startKex, but the remote end + // has just sent us a kexInitMsg, so it can't send + // another key change request, until we close the done + // channel on the pendingKex request. + + err := t.enterKeyExchange(request.otherInit) + + t.mu.Lock() + t.writeError = err + t.sentInitPacket = nil + t.sentInitMsg = nil + + t.resetWriteThresholds() + + // we have completed the key exchange. Since the + // reader is still blocked, it is safe to clear out + // the requestKex channel. This avoids the situation + // where: 1) we consumed our own request for the + // initial kex, and 2) the kex from the remote side + // caused another send on the requestKex channel, + clear: + for { + select { + case <-t.requestKex: + // + default: + break clear + } + } + + request.done <- t.writeError + + // kex finished. Push packets that we received while + // the kex was in progress. Don't look at t.startKex + // and don't increment writtenSinceKex: if we trigger + // another kex while we are still busy with the last + // one, things will become very confusing. + for _, p := range t.pendingPackets { + t.writeError = t.pushPacket(p) + if t.writeError != nil { + break + } + } + t.pendingPackets = t.pendingPackets[:0] + t.mu.Unlock() + } + + // drain startKex channel. We don't service t.requestKex + // because nobody does blocking sends there. + go func() { + for init := range t.startKex { + init.done <- t.writeError + } + }() + + // Unblock reader. + t.conn.Close() +} + +// The protocol uses uint32 for packet counters, so we can't let them +// reach 1<<32. We will actually read and write more packets than +// this, though: the other side may send more packets, and after we +// hit this limit on writing we will send a few more packets for the +// key exchange itself. +const packetRekeyThreshold = (1 << 31) + +func (t *handshakeTransport) resetReadThresholds() { + t.readPacketsLeft = packetRekeyThreshold + if t.config.RekeyThreshold > 0 { + t.readBytesLeft = int64(t.config.RekeyThreshold) + } else if t.algorithms != nil { + t.readBytesLeft = t.algorithms.r.rekeyBytes() + } else { + t.readBytesLeft = 1 << 30 + } +} + +func (t *handshakeTransport) readOnePacket(first bool) ([]byte, error) { + p, err := t.conn.readPacket() + if err != nil { + return nil, err + } + + if t.readPacketsLeft > 0 { + t.readPacketsLeft-- + } else { + t.requestKeyExchange() + } + + if t.readBytesLeft > 0 { + t.readBytesLeft -= int64(len(p)) + } else { + t.requestKeyExchange() + } + + if debugHandshake { + t.printPacket(p, false) + } + + if first && p[0] != msgKexInit { + return nil, fmt.Errorf("ssh: first packet should be msgKexInit") + } + + if p[0] != msgKexInit { + return p, nil + } + + firstKex := t.sessionID == nil + + kex := pendingKex{ + done: make(chan error, 1), + otherInit: p, + } + t.startKex <- &kex + err = <-kex.done + + if debugHandshake { + log.Printf("%s exited key exchange (first %v), err %v", t.id(), firstKex, err) + } + + if err != nil { + return nil, err + } + + t.resetReadThresholds() + + // By default, a key exchange is hidden from higher layers by + // translating it into msgIgnore. + successPacket := []byte{msgIgnore} + if firstKex { + // sendKexInit() for the first kex waits for + // msgNewKeys so the authentication process is + // guaranteed to happen over an encrypted transport. + successPacket = []byte{msgNewKeys} + } + + return successPacket, nil +} + +// sendKexInit sends a key change message. +func (t *handshakeTransport) sendKexInit() error { + t.mu.Lock() + defer t.mu.Unlock() + if t.sentInitMsg != nil { + // kexInits may be sent either in response to the other side, + // or because our side wants to initiate a key change, so we + // may have already sent a kexInit. In that case, don't send a + // second kexInit. + return nil + } + + msg := &kexInitMsg{ + KexAlgos: t.config.KeyExchanges, + CiphersClientServer: t.config.Ciphers, + CiphersServerClient: t.config.Ciphers, + MACsClientServer: t.config.MACs, + MACsServerClient: t.config.MACs, + CompressionClientServer: supportedCompressions, + CompressionServerClient: supportedCompressions, + } + io.ReadFull(rand.Reader, msg.Cookie[:]) + + if len(t.hostKeys) > 0 { + for _, k := range t.hostKeys { + msg.ServerHostKeyAlgos = append( + msg.ServerHostKeyAlgos, k.PublicKey().Type()) + } + } else { + msg.ServerHostKeyAlgos = t.hostKeyAlgorithms + } + packet := Marshal(msg) + + // writePacket destroys the contents, so save a copy. + packetCopy := make([]byte, len(packet)) + copy(packetCopy, packet) + + if err := t.pushPacket(packetCopy); err != nil { + return err + } + + t.sentInitMsg = msg + t.sentInitPacket = packet + + return nil +} + +func (t *handshakeTransport) writePacket(p []byte) error { + switch p[0] { + case msgKexInit: + return errors.New("ssh: only handshakeTransport can send kexInit") + case msgNewKeys: + return errors.New("ssh: only handshakeTransport can send newKeys") + } + + t.mu.Lock() + defer t.mu.Unlock() + if t.writeError != nil { + return t.writeError + } + + if t.sentInitMsg != nil { + // Copy the packet so the writer can reuse the buffer. + cp := make([]byte, len(p)) + copy(cp, p) + t.pendingPackets = append(t.pendingPackets, cp) + return nil + } + + if t.writeBytesLeft > 0 { + t.writeBytesLeft -= int64(len(p)) + } else { + t.requestKeyExchange() + } + + if t.writePacketsLeft > 0 { + t.writePacketsLeft-- + } else { + t.requestKeyExchange() + } + + if err := t.pushPacket(p); err != nil { + t.writeError = err + } + + return nil +} + +func (t *handshakeTransport) Close() error { + return t.conn.Close() +} + +func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { + if debugHandshake { + log.Printf("%s entered key exchange", t.id()) + } + + otherInit := &kexInitMsg{} + if err := Unmarshal(otherInitPacket, otherInit); err != nil { + return err + } + + magics := handshakeMagics{ + clientVersion: t.clientVersion, + serverVersion: t.serverVersion, + clientKexInit: otherInitPacket, + serverKexInit: t.sentInitPacket, + } + + clientInit := otherInit + serverInit := t.sentInitMsg + if len(t.hostKeys) == 0 { + clientInit, serverInit = serverInit, clientInit + + magics.clientKexInit = t.sentInitPacket + magics.serverKexInit = otherInitPacket + } + + var err error + t.algorithms, err = findAgreedAlgorithms(clientInit, serverInit) + if err != nil { + return err + } + + // We don't send FirstKexFollows, but we handle receiving it. + // + // RFC 4253 section 7 defines the kex and the agreement method for + // first_kex_packet_follows. It states that the guessed packet + // should be ignored if the "kex algorithm and/or the host + // key algorithm is guessed wrong (server and client have + // different preferred algorithm), or if any of the other + // algorithms cannot be agreed upon". The other algorithms have + // already been checked above so the kex algorithm and host key + // algorithm are checked here. + if otherInit.FirstKexFollows && (clientInit.KexAlgos[0] != serverInit.KexAlgos[0] || clientInit.ServerHostKeyAlgos[0] != serverInit.ServerHostKeyAlgos[0]) { + // other side sent a kex message for the wrong algorithm, + // which we have to ignore. + if _, err := t.conn.readPacket(); err != nil { + return err + } + } + + kex, ok := kexAlgoMap[t.algorithms.kex] + if !ok { + return fmt.Errorf("ssh: unexpected key exchange algorithm %v", t.algorithms.kex) + } + + var result *kexResult + if len(t.hostKeys) > 0 { + result, err = t.server(kex, t.algorithms, &magics) + } else { + result, err = t.client(kex, t.algorithms, &magics) + } + + if err != nil { + return err + } + + if t.sessionID == nil { + t.sessionID = result.H + } + result.SessionID = t.sessionID + + if err := t.conn.prepareKeyChange(t.algorithms, result); err != nil { + return err + } + if err = t.conn.writePacket([]byte{msgNewKeys}); err != nil { + return err + } + if packet, err := t.conn.readPacket(); err != nil { + return err + } else if packet[0] != msgNewKeys { + return unexpectedMessageError(msgNewKeys, packet[0]) + } + + return nil +} + +func (t *handshakeTransport) server(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) { + var hostKey Signer + for _, k := range t.hostKeys { + if algs.hostKey == k.PublicKey().Type() { + hostKey = k + } + } + + r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey) + return r, err +} + +func (t *handshakeTransport) client(kex kexAlgorithm, algs *algorithms, magics *handshakeMagics) (*kexResult, error) { + result, err := kex.Client(t.conn, t.config.Rand, magics) + if err != nil { + return nil, err + } + + hostKey, err := ParsePublicKey(result.HostKey) + if err != nil { + return nil, err + } + + if err := verifyHostKeySignature(hostKey, result); err != nil { + return nil, err + } + + err = t.hostKeyCallback(t.dialAddress, t.remoteAddr, hostKey) + if err != nil { + return nil, err + } + + return result, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/handshake_test.go b/vendor/golang.org/x/crypto/ssh/handshake_test.go new file mode 100644 index 0000000..91d4935 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/handshake_test.go @@ -0,0 +1,559 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/rand" + "errors" + "fmt" + "io" + "net" + "reflect" + "runtime" + "strings" + "sync" + "testing" +) + +type testChecker struct { + calls []string +} + +func (t *testChecker) Check(dialAddr string, addr net.Addr, key PublicKey) error { + if dialAddr == "bad" { + return fmt.Errorf("dialAddr is bad") + } + + if tcpAddr, ok := addr.(*net.TCPAddr); !ok || tcpAddr == nil { + return fmt.Errorf("testChecker: got %T want *net.TCPAddr", addr) + } + + t.calls = append(t.calls, fmt.Sprintf("%s %v %s %x", dialAddr, addr, key.Type(), key.Marshal())) + + return nil +} + +// netPipe is analogous to net.Pipe, but it uses a real net.Conn, and +// therefore is buffered (net.Pipe deadlocks if both sides start with +// a write.) +func netPipe() (net.Conn, net.Conn, error) { + listener, err := net.Listen("tcp", "127.0.0.1:0") + if err != nil { + listener, err = net.Listen("tcp", "[::1]:0") + if err != nil { + return nil, nil, err + } + } + defer listener.Close() + c1, err := net.Dial("tcp", listener.Addr().String()) + if err != nil { + return nil, nil, err + } + + c2, err := listener.Accept() + if err != nil { + c1.Close() + return nil, nil, err + } + + return c1, c2, nil +} + +// noiseTransport inserts ignore messages to check that the read loop +// and the key exchange filters out these messages. +type noiseTransport struct { + keyingTransport +} + +func (t *noiseTransport) writePacket(p []byte) error { + ignore := []byte{msgIgnore} + if err := t.keyingTransport.writePacket(ignore); err != nil { + return err + } + debug := []byte{msgDebug, 1, 2, 3} + if err := t.keyingTransport.writePacket(debug); err != nil { + return err + } + + return t.keyingTransport.writePacket(p) +} + +func addNoiseTransport(t keyingTransport) keyingTransport { + return &noiseTransport{t} +} + +// handshakePair creates two handshakeTransports connected with each +// other. If the noise argument is true, both transports will try to +// confuse the other side by sending ignore and debug messages. +func handshakePair(clientConf *ClientConfig, addr string, noise bool) (client *handshakeTransport, server *handshakeTransport, err error) { + a, b, err := netPipe() + if err != nil { + return nil, nil, err + } + + var trC, trS keyingTransport + + trC = newTransport(a, rand.Reader, true) + trS = newTransport(b, rand.Reader, false) + if noise { + trC = addNoiseTransport(trC) + trS = addNoiseTransport(trS) + } + clientConf.SetDefaults() + + v := []byte("version") + client = newClientTransport(trC, v, v, clientConf, addr, a.RemoteAddr()) + + serverConf := &ServerConfig{} + serverConf.AddHostKey(testSigners["ecdsa"]) + serverConf.AddHostKey(testSigners["rsa"]) + serverConf.SetDefaults() + server = newServerTransport(trS, v, v, serverConf) + + if err := server.waitSession(); err != nil { + return nil, nil, fmt.Errorf("server.waitSession: %v", err) + } + if err := client.waitSession(); err != nil { + return nil, nil, fmt.Errorf("client.waitSession: %v", err) + } + + return client, server, nil +} + +func TestHandshakeBasic(t *testing.T) { + if runtime.GOOS == "plan9" { + t.Skip("see golang.org/issue/7237") + } + + checker := &syncChecker{ + waitCall: make(chan int, 10), + called: make(chan int, 10), + } + + checker.waitCall <- 1 + trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "addr", false) + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + + defer trC.Close() + defer trS.Close() + + // Let first kex complete normally. + <-checker.called + + clientDone := make(chan int, 0) + gotHalf := make(chan int, 0) + const N = 20 + + go func() { + defer close(clientDone) + // Client writes a bunch of stuff, and does a key + // change in the middle. This should not confuse the + // handshake in progress. We do this twice, so we test + // that the packet buffer is reset correctly. + for i := 0; i < N; i++ { + p := []byte{msgRequestSuccess, byte(i)} + if err := trC.writePacket(p); err != nil { + t.Fatalf("sendPacket: %v", err) + } + if (i % 10) == 5 { + <-gotHalf + // halfway through, we request a key change. + trC.requestKeyExchange() + + // Wait until we can be sure the key + // change has really started before we + // write more. + <-checker.called + } + if (i % 10) == 7 { + // write some packets until the kex + // completes, to test buffering of + // packets. + checker.waitCall <- 1 + } + } + }() + + // Server checks that client messages come in cleanly + i := 0 + err = nil + for ; i < N; i++ { + var p []byte + p, err = trS.readPacket() + if err != nil { + break + } + if (i % 10) == 5 { + gotHalf <- 1 + } + + want := []byte{msgRequestSuccess, byte(i)} + if bytes.Compare(p, want) != 0 { + t.Errorf("message %d: got %v, want %v", i, p, want) + } + } + <-clientDone + if err != nil && err != io.EOF { + t.Fatalf("server error: %v", err) + } + if i != N { + t.Errorf("received %d messages, want 10.", i) + } + + close(checker.called) + if _, ok := <-checker.called; ok { + // If all went well, we registered exactly 2 key changes: one + // that establishes the session, and one that we requested + // additionally. + t.Fatalf("got another host key checks after 2 handshakes") + } +} + +func TestForceFirstKex(t *testing.T) { + // like handshakePair, but must access the keyingTransport. + checker := &testChecker{} + clientConf := &ClientConfig{HostKeyCallback: checker.Check} + a, b, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + + var trC, trS keyingTransport + + trC = newTransport(a, rand.Reader, true) + + // This is the disallowed packet: + trC.writePacket(Marshal(&serviceRequestMsg{serviceUserAuth})) + + // Rest of the setup. + trS = newTransport(b, rand.Reader, false) + clientConf.SetDefaults() + + v := []byte("version") + client := newClientTransport(trC, v, v, clientConf, "addr", a.RemoteAddr()) + + serverConf := &ServerConfig{} + serverConf.AddHostKey(testSigners["ecdsa"]) + serverConf.AddHostKey(testSigners["rsa"]) + serverConf.SetDefaults() + server := newServerTransport(trS, v, v, serverConf) + + defer client.Close() + defer server.Close() + + // We setup the initial key exchange, but the remote side + // tries to send serviceRequestMsg in cleartext, which is + // disallowed. + + if err := server.waitSession(); err == nil { + t.Errorf("server first kex init should reject unexpected packet") + } +} + +func TestHandshakeAutoRekeyWrite(t *testing.T) { + checker := &syncChecker{ + called: make(chan int, 10), + waitCall: nil, + } + clientConf := &ClientConfig{HostKeyCallback: checker.Check} + clientConf.RekeyThreshold = 500 + trC, trS, err := handshakePair(clientConf, "addr", false) + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + defer trC.Close() + defer trS.Close() + + input := make([]byte, 251) + input[0] = msgRequestSuccess + + done := make(chan int, 1) + const numPacket = 5 + go func() { + defer close(done) + j := 0 + for ; j < numPacket; j++ { + if p, err := trS.readPacket(); err != nil { + break + } else if !bytes.Equal(input, p) { + t.Errorf("got packet type %d, want %d", p[0], input[0]) + } + } + + if j != numPacket { + t.Errorf("got %d, want 5 messages", j) + } + }() + + <-checker.called + + for i := 0; i < numPacket; i++ { + p := make([]byte, len(input)) + copy(p, input) + if err := trC.writePacket(p); err != nil { + t.Errorf("writePacket: %v", err) + } + if i == 2 { + // Make sure the kex is in progress. + <-checker.called + } + + } + <-done +} + +type syncChecker struct { + waitCall chan int + called chan int +} + +func (c *syncChecker) Check(dialAddr string, addr net.Addr, key PublicKey) error { + c.called <- 1 + if c.waitCall != nil { + <-c.waitCall + } + return nil +} + +func TestHandshakeAutoRekeyRead(t *testing.T) { + sync := &syncChecker{ + called: make(chan int, 2), + waitCall: nil, + } + clientConf := &ClientConfig{ + HostKeyCallback: sync.Check, + } + clientConf.RekeyThreshold = 500 + + trC, trS, err := handshakePair(clientConf, "addr", false) + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + defer trC.Close() + defer trS.Close() + + packet := make([]byte, 501) + packet[0] = msgRequestSuccess + if err := trS.writePacket(packet); err != nil { + t.Fatalf("writePacket: %v", err) + } + + // While we read out the packet, a key change will be + // initiated. + done := make(chan int, 1) + go func() { + defer close(done) + if _, err := trC.readPacket(); err != nil { + t.Fatalf("readPacket(client): %v", err) + } + + }() + + <-done + <-sync.called +} + +// errorKeyingTransport generates errors after a given number of +// read/write operations. +type errorKeyingTransport struct { + packetConn + readLeft, writeLeft int +} + +func (n *errorKeyingTransport) prepareKeyChange(*algorithms, *kexResult) error { + return nil +} + +func (n *errorKeyingTransport) getSessionID() []byte { + return nil +} + +func (n *errorKeyingTransport) writePacket(packet []byte) error { + if n.writeLeft == 0 { + n.Close() + return errors.New("barf") + } + + n.writeLeft-- + return n.packetConn.writePacket(packet) +} + +func (n *errorKeyingTransport) readPacket() ([]byte, error) { + if n.readLeft == 0 { + n.Close() + return nil, errors.New("barf") + } + + n.readLeft-- + return n.packetConn.readPacket() +} + +func TestHandshakeErrorHandlingRead(t *testing.T) { + for i := 0; i < 20; i++ { + testHandshakeErrorHandlingN(t, i, -1, false) + } +} + +func TestHandshakeErrorHandlingWrite(t *testing.T) { + for i := 0; i < 20; i++ { + testHandshakeErrorHandlingN(t, -1, i, false) + } +} + +func TestHandshakeErrorHandlingReadCoupled(t *testing.T) { + for i := 0; i < 20; i++ { + testHandshakeErrorHandlingN(t, i, -1, true) + } +} + +func TestHandshakeErrorHandlingWriteCoupled(t *testing.T) { + for i := 0; i < 20; i++ { + testHandshakeErrorHandlingN(t, -1, i, true) + } +} + +// testHandshakeErrorHandlingN runs handshakes, injecting errors. If +// handshakeTransport deadlocks, the go runtime will detect it and +// panic. +func testHandshakeErrorHandlingN(t *testing.T, readLimit, writeLimit int, coupled bool) { + msg := Marshal(&serviceRequestMsg{strings.Repeat("x", int(minRekeyThreshold)/4)}) + + a, b := memPipe() + defer a.Close() + defer b.Close() + + key := testSigners["ecdsa"] + serverConf := Config{RekeyThreshold: minRekeyThreshold} + serverConf.SetDefaults() + serverConn := newHandshakeTransport(&errorKeyingTransport{a, readLimit, writeLimit}, &serverConf, []byte{'a'}, []byte{'b'}) + serverConn.hostKeys = []Signer{key} + go serverConn.readLoop() + go serverConn.kexLoop() + + clientConf := Config{RekeyThreshold: 10 * minRekeyThreshold} + clientConf.SetDefaults() + clientConn := newHandshakeTransport(&errorKeyingTransport{b, -1, -1}, &clientConf, []byte{'a'}, []byte{'b'}) + clientConn.hostKeyAlgorithms = []string{key.PublicKey().Type()} + clientConn.hostKeyCallback = InsecureIgnoreHostKey() + go clientConn.readLoop() + go clientConn.kexLoop() + + var wg sync.WaitGroup + + for _, hs := range []packetConn{serverConn, clientConn} { + if !coupled { + wg.Add(2) + go func(c packetConn) { + for i := 0; ; i++ { + str := fmt.Sprintf("%08x", i) + strings.Repeat("x", int(minRekeyThreshold)/4-8) + err := c.writePacket(Marshal(&serviceRequestMsg{str})) + if err != nil { + break + } + } + wg.Done() + c.Close() + }(hs) + go func(c packetConn) { + for { + _, err := c.readPacket() + if err != nil { + break + } + } + wg.Done() + }(hs) + } else { + wg.Add(1) + go func(c packetConn) { + for { + _, err := c.readPacket() + if err != nil { + break + } + if err := c.writePacket(msg); err != nil { + break + } + + } + wg.Done() + }(hs) + } + } + wg.Wait() +} + +func TestDisconnect(t *testing.T) { + if runtime.GOOS == "plan9" { + t.Skip("see golang.org/issue/7237") + } + checker := &testChecker{} + trC, trS, err := handshakePair(&ClientConfig{HostKeyCallback: checker.Check}, "addr", false) + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + + defer trC.Close() + defer trS.Close() + + trC.writePacket([]byte{msgRequestSuccess, 0, 0}) + errMsg := &disconnectMsg{ + Reason: 42, + Message: "such is life", + } + trC.writePacket(Marshal(errMsg)) + trC.writePacket([]byte{msgRequestSuccess, 0, 0}) + + packet, err := trS.readPacket() + if err != nil { + t.Fatalf("readPacket 1: %v", err) + } + if packet[0] != msgRequestSuccess { + t.Errorf("got packet %v, want packet type %d", packet, msgRequestSuccess) + } + + _, err = trS.readPacket() + if err == nil { + t.Errorf("readPacket 2 succeeded") + } else if !reflect.DeepEqual(err, errMsg) { + t.Errorf("got error %#v, want %#v", err, errMsg) + } + + _, err = trS.readPacket() + if err == nil { + t.Errorf("readPacket 3 succeeded") + } +} + +func TestHandshakeRekeyDefault(t *testing.T) { + clientConf := &ClientConfig{ + Config: Config{ + Ciphers: []string{"aes128-ctr"}, + }, + HostKeyCallback: InsecureIgnoreHostKey(), + } + trC, trS, err := handshakePair(clientConf, "addr", false) + if err != nil { + t.Fatalf("handshakePair: %v", err) + } + defer trC.Close() + defer trS.Close() + + trC.writePacket([]byte{msgRequestSuccess, 0, 0}) + trC.Close() + + rgb := (1024 + trC.readBytesLeft) >> 30 + wgb := (1024 + trC.writeBytesLeft) >> 30 + + if rgb != 64 { + t.Errorf("got rekey after %dG read, want 64G", rgb) + } + if wgb != 64 { + t.Errorf("got rekey after %dG write, want 64G", wgb) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/kex.go b/vendor/golang.org/x/crypto/ssh/kex.go new file mode 100644 index 0000000..f91c277 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/kex.go @@ -0,0 +1,540 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "crypto" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/subtle" + "errors" + "io" + "math/big" + + "golang.org/x/crypto/curve25519" +) + +const ( + kexAlgoDH1SHA1 = "diffie-hellman-group1-sha1" + kexAlgoDH14SHA1 = "diffie-hellman-group14-sha1" + kexAlgoECDH256 = "ecdh-sha2-nistp256" + kexAlgoECDH384 = "ecdh-sha2-nistp384" + kexAlgoECDH521 = "ecdh-sha2-nistp521" + kexAlgoCurve25519SHA256 = "curve25519-sha256@libssh.org" +) + +// kexResult captures the outcome of a key exchange. +type kexResult struct { + // Session hash. See also RFC 4253, section 8. + H []byte + + // Shared secret. See also RFC 4253, section 8. + K []byte + + // Host key as hashed into H. + HostKey []byte + + // Signature of H. + Signature []byte + + // A cryptographic hash function that matches the security + // level of the key exchange algorithm. It is used for + // calculating H, and for deriving keys from H and K. + Hash crypto.Hash + + // The session ID, which is the first H computed. This is used + // to derive key material inside the transport. + SessionID []byte +} + +// handshakeMagics contains data that is always included in the +// session hash. +type handshakeMagics struct { + clientVersion, serverVersion []byte + clientKexInit, serverKexInit []byte +} + +func (m *handshakeMagics) write(w io.Writer) { + writeString(w, m.clientVersion) + writeString(w, m.serverVersion) + writeString(w, m.clientKexInit) + writeString(w, m.serverKexInit) +} + +// kexAlgorithm abstracts different key exchange algorithms. +type kexAlgorithm interface { + // Server runs server-side key agreement, signing the result + // with a hostkey. + Server(p packetConn, rand io.Reader, magics *handshakeMagics, s Signer) (*kexResult, error) + + // Client runs the client-side key agreement. Caller is + // responsible for verifying the host key signature. + Client(p packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) +} + +// dhGroup is a multiplicative group suitable for implementing Diffie-Hellman key agreement. +type dhGroup struct { + g, p, pMinus1 *big.Int +} + +func (group *dhGroup) diffieHellman(theirPublic, myPrivate *big.Int) (*big.Int, error) { + if theirPublic.Cmp(bigOne) <= 0 || theirPublic.Cmp(group.pMinus1) >= 0 { + return nil, errors.New("ssh: DH parameter out of bounds") + } + return new(big.Int).Exp(theirPublic, myPrivate, group.p), nil +} + +func (group *dhGroup) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) { + hashFunc := crypto.SHA1 + + var x *big.Int + for { + var err error + if x, err = rand.Int(randSource, group.pMinus1); err != nil { + return nil, err + } + if x.Sign() > 0 { + break + } + } + + X := new(big.Int).Exp(group.g, x, group.p) + kexDHInit := kexDHInitMsg{ + X: X, + } + if err := c.writePacket(Marshal(&kexDHInit)); err != nil { + return nil, err + } + + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var kexDHReply kexDHReplyMsg + if err = Unmarshal(packet, &kexDHReply); err != nil { + return nil, err + } + + kInt, err := group.diffieHellman(kexDHReply.Y, x) + if err != nil { + return nil, err + } + + h := hashFunc.New() + magics.write(h) + writeString(h, kexDHReply.HostKey) + writeInt(h, X) + writeInt(h, kexDHReply.Y) + K := make([]byte, intLength(kInt)) + marshalInt(K, kInt) + h.Write(K) + + return &kexResult{ + H: h.Sum(nil), + K: K, + HostKey: kexDHReply.HostKey, + Signature: kexDHReply.Signature, + Hash: crypto.SHA1, + }, nil +} + +func (group *dhGroup) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { + hashFunc := crypto.SHA1 + packet, err := c.readPacket() + if err != nil { + return + } + var kexDHInit kexDHInitMsg + if err = Unmarshal(packet, &kexDHInit); err != nil { + return + } + + var y *big.Int + for { + if y, err = rand.Int(randSource, group.pMinus1); err != nil { + return + } + if y.Sign() > 0 { + break + } + } + + Y := new(big.Int).Exp(group.g, y, group.p) + kInt, err := group.diffieHellman(kexDHInit.X, y) + if err != nil { + return nil, err + } + + hostKeyBytes := priv.PublicKey().Marshal() + + h := hashFunc.New() + magics.write(h) + writeString(h, hostKeyBytes) + writeInt(h, kexDHInit.X) + writeInt(h, Y) + + K := make([]byte, intLength(kInt)) + marshalInt(K, kInt) + h.Write(K) + + H := h.Sum(nil) + + // H is already a hash, but the hostkey signing will apply its + // own key-specific hash algorithm. + sig, err := signAndMarshal(priv, randSource, H) + if err != nil { + return nil, err + } + + kexDHReply := kexDHReplyMsg{ + HostKey: hostKeyBytes, + Y: Y, + Signature: sig, + } + packet = Marshal(&kexDHReply) + + err = c.writePacket(packet) + return &kexResult{ + H: H, + K: K, + HostKey: hostKeyBytes, + Signature: sig, + Hash: crypto.SHA1, + }, nil +} + +// ecdh performs Elliptic Curve Diffie-Hellman key exchange as +// described in RFC 5656, section 4. +type ecdh struct { + curve elliptic.Curve +} + +func (kex *ecdh) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) { + ephKey, err := ecdsa.GenerateKey(kex.curve, rand) + if err != nil { + return nil, err + } + + kexInit := kexECDHInitMsg{ + ClientPubKey: elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y), + } + + serialized := Marshal(&kexInit) + if err := c.writePacket(serialized); err != nil { + return nil, err + } + + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var reply kexECDHReplyMsg + if err = Unmarshal(packet, &reply); err != nil { + return nil, err + } + + x, y, err := unmarshalECKey(kex.curve, reply.EphemeralPubKey) + if err != nil { + return nil, err + } + + // generate shared secret + secret, _ := kex.curve.ScalarMult(x, y, ephKey.D.Bytes()) + + h := ecHash(kex.curve).New() + magics.write(h) + writeString(h, reply.HostKey) + writeString(h, kexInit.ClientPubKey) + writeString(h, reply.EphemeralPubKey) + K := make([]byte, intLength(secret)) + marshalInt(K, secret) + h.Write(K) + + return &kexResult{ + H: h.Sum(nil), + K: K, + HostKey: reply.HostKey, + Signature: reply.Signature, + Hash: ecHash(kex.curve), + }, nil +} + +// unmarshalECKey parses and checks an EC key. +func unmarshalECKey(curve elliptic.Curve, pubkey []byte) (x, y *big.Int, err error) { + x, y = elliptic.Unmarshal(curve, pubkey) + if x == nil { + return nil, nil, errors.New("ssh: elliptic.Unmarshal failure") + } + if !validateECPublicKey(curve, x, y) { + return nil, nil, errors.New("ssh: public key not on curve") + } + return x, y, nil +} + +// validateECPublicKey checks that the point is a valid public key for +// the given curve. See [SEC1], 3.2.2 +func validateECPublicKey(curve elliptic.Curve, x, y *big.Int) bool { + if x.Sign() == 0 && y.Sign() == 0 { + return false + } + + if x.Cmp(curve.Params().P) >= 0 { + return false + } + + if y.Cmp(curve.Params().P) >= 0 { + return false + } + + if !curve.IsOnCurve(x, y) { + return false + } + + // We don't check if N * PubKey == 0, since + // + // - the NIST curves have cofactor = 1, so this is implicit. + // (We don't foresee an implementation that supports non NIST + // curves) + // + // - for ephemeral keys, we don't need to worry about small + // subgroup attacks. + return true +} + +func (kex *ecdh) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var kexECDHInit kexECDHInitMsg + if err = Unmarshal(packet, &kexECDHInit); err != nil { + return nil, err + } + + clientX, clientY, err := unmarshalECKey(kex.curve, kexECDHInit.ClientPubKey) + if err != nil { + return nil, err + } + + // We could cache this key across multiple users/multiple + // connection attempts, but the benefit is small. OpenSSH + // generates a new key for each incoming connection. + ephKey, err := ecdsa.GenerateKey(kex.curve, rand) + if err != nil { + return nil, err + } + + hostKeyBytes := priv.PublicKey().Marshal() + + serializedEphKey := elliptic.Marshal(kex.curve, ephKey.PublicKey.X, ephKey.PublicKey.Y) + + // generate shared secret + secret, _ := kex.curve.ScalarMult(clientX, clientY, ephKey.D.Bytes()) + + h := ecHash(kex.curve).New() + magics.write(h) + writeString(h, hostKeyBytes) + writeString(h, kexECDHInit.ClientPubKey) + writeString(h, serializedEphKey) + + K := make([]byte, intLength(secret)) + marshalInt(K, secret) + h.Write(K) + + H := h.Sum(nil) + + // H is already a hash, but the hostkey signing will apply its + // own key-specific hash algorithm. + sig, err := signAndMarshal(priv, rand, H) + if err != nil { + return nil, err + } + + reply := kexECDHReplyMsg{ + EphemeralPubKey: serializedEphKey, + HostKey: hostKeyBytes, + Signature: sig, + } + + serialized := Marshal(&reply) + if err := c.writePacket(serialized); err != nil { + return nil, err + } + + return &kexResult{ + H: H, + K: K, + HostKey: reply.HostKey, + Signature: sig, + Hash: ecHash(kex.curve), + }, nil +} + +var kexAlgoMap = map[string]kexAlgorithm{} + +func init() { + // This is the group called diffie-hellman-group1-sha1 in RFC + // 4253 and Oakley Group 2 in RFC 2409. + p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF", 16) + kexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{ + g: new(big.Int).SetInt64(2), + p: p, + pMinus1: new(big.Int).Sub(p, bigOne), + } + + // This is the group called diffie-hellman-group14-sha1 in RFC + // 4253 and Oakley Group 14 in RFC 3526. + p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16) + + kexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{ + g: new(big.Int).SetInt64(2), + p: p, + pMinus1: new(big.Int).Sub(p, bigOne), + } + + kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()} + kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()} + kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()} + kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{} +} + +// curve25519sha256 implements the curve25519-sha256@libssh.org key +// agreement protocol, as described in +// https://git.libssh.org/projects/libssh.git/tree/doc/curve25519-sha256@libssh.org.txt +type curve25519sha256 struct{} + +type curve25519KeyPair struct { + priv [32]byte + pub [32]byte +} + +func (kp *curve25519KeyPair) generate(rand io.Reader) error { + if _, err := io.ReadFull(rand, kp.priv[:]); err != nil { + return err + } + curve25519.ScalarBaseMult(&kp.pub, &kp.priv) + return nil +} + +// curve25519Zeros is just an array of 32 zero bytes so that we have something +// convenient to compare against in order to reject curve25519 points with the +// wrong order. +var curve25519Zeros [32]byte + +func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) { + var kp curve25519KeyPair + if err := kp.generate(rand); err != nil { + return nil, err + } + if err := c.writePacket(Marshal(&kexECDHInitMsg{kp.pub[:]})); err != nil { + return nil, err + } + + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var reply kexECDHReplyMsg + if err = Unmarshal(packet, &reply); err != nil { + return nil, err + } + if len(reply.EphemeralPubKey) != 32 { + return nil, errors.New("ssh: peer's curve25519 public value has wrong length") + } + + var servPub, secret [32]byte + copy(servPub[:], reply.EphemeralPubKey) + curve25519.ScalarMult(&secret, &kp.priv, &servPub) + if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 { + return nil, errors.New("ssh: peer's curve25519 public value has wrong order") + } + + h := crypto.SHA256.New() + magics.write(h) + writeString(h, reply.HostKey) + writeString(h, kp.pub[:]) + writeString(h, reply.EphemeralPubKey) + + kInt := new(big.Int).SetBytes(secret[:]) + K := make([]byte, intLength(kInt)) + marshalInt(K, kInt) + h.Write(K) + + return &kexResult{ + H: h.Sum(nil), + K: K, + HostKey: reply.HostKey, + Signature: reply.Signature, + Hash: crypto.SHA256, + }, nil +} + +func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv Signer) (result *kexResult, err error) { + packet, err := c.readPacket() + if err != nil { + return + } + var kexInit kexECDHInitMsg + if err = Unmarshal(packet, &kexInit); err != nil { + return + } + + if len(kexInit.ClientPubKey) != 32 { + return nil, errors.New("ssh: peer's curve25519 public value has wrong length") + } + + var kp curve25519KeyPair + if err := kp.generate(rand); err != nil { + return nil, err + } + + var clientPub, secret [32]byte + copy(clientPub[:], kexInit.ClientPubKey) + curve25519.ScalarMult(&secret, &kp.priv, &clientPub) + if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 { + return nil, errors.New("ssh: peer's curve25519 public value has wrong order") + } + + hostKeyBytes := priv.PublicKey().Marshal() + + h := crypto.SHA256.New() + magics.write(h) + writeString(h, hostKeyBytes) + writeString(h, kexInit.ClientPubKey) + writeString(h, kp.pub[:]) + + kInt := new(big.Int).SetBytes(secret[:]) + K := make([]byte, intLength(kInt)) + marshalInt(K, kInt) + h.Write(K) + + H := h.Sum(nil) + + sig, err := signAndMarshal(priv, rand, H) + if err != nil { + return nil, err + } + + reply := kexECDHReplyMsg{ + EphemeralPubKey: kp.pub[:], + HostKey: hostKeyBytes, + Signature: sig, + } + if err := c.writePacket(Marshal(&reply)); err != nil { + return nil, err + } + return &kexResult{ + H: H, + K: K, + HostKey: hostKeyBytes, + Signature: sig, + Hash: crypto.SHA256, + }, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/kex_test.go b/vendor/golang.org/x/crypto/ssh/kex_test.go new file mode 100644 index 0000000..12ca0ac --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/kex_test.go @@ -0,0 +1,50 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +// Key exchange tests. + +import ( + "crypto/rand" + "reflect" + "testing" +) + +func TestKexes(t *testing.T) { + type kexResultErr struct { + result *kexResult + err error + } + + for name, kex := range kexAlgoMap { + a, b := memPipe() + + s := make(chan kexResultErr, 1) + c := make(chan kexResultErr, 1) + var magics handshakeMagics + go func() { + r, e := kex.Client(a, rand.Reader, &magics) + a.Close() + c <- kexResultErr{r, e} + }() + go func() { + r, e := kex.Server(b, rand.Reader, &magics, testSigners["ecdsa"]) + b.Close() + s <- kexResultErr{r, e} + }() + + clientRes := <-c + serverRes := <-s + if clientRes.err != nil { + t.Errorf("client: %v", clientRes.err) + } + if serverRes.err != nil { + t.Errorf("server: %v", serverRes.err) + } + if !reflect.DeepEqual(clientRes.result, serverRes.result) { + t.Errorf("kex %q: mismatch %#v, %#v", name, clientRes.result, serverRes.result) + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/keys.go b/vendor/golang.org/x/crypto/ssh/keys.go new file mode 100644 index 0000000..b682c17 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/keys.go @@ -0,0 +1,1031 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/md5" + "crypto/rsa" + "crypto/sha256" + "crypto/x509" + "encoding/asn1" + "encoding/base64" + "encoding/hex" + "encoding/pem" + "errors" + "fmt" + "io" + "math/big" + "strings" + + "golang.org/x/crypto/ed25519" +) + +// These constants represent the algorithm names for key types supported by this +// package. +const ( + KeyAlgoRSA = "ssh-rsa" + KeyAlgoDSA = "ssh-dss" + KeyAlgoECDSA256 = "ecdsa-sha2-nistp256" + KeyAlgoECDSA384 = "ecdsa-sha2-nistp384" + KeyAlgoECDSA521 = "ecdsa-sha2-nistp521" + KeyAlgoED25519 = "ssh-ed25519" +) + +// parsePubKey parses a public key of the given algorithm. +// Use ParsePublicKey for keys with prepended algorithm. +func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err error) { + switch algo { + case KeyAlgoRSA: + return parseRSA(in) + case KeyAlgoDSA: + return parseDSA(in) + case KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521: + return parseECDSA(in) + case KeyAlgoED25519: + return parseED25519(in) + case CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01: + cert, err := parseCert(in, certToPrivAlgo(algo)) + if err != nil { + return nil, nil, err + } + return cert, nil, nil + } + return nil, nil, fmt.Errorf("ssh: unknown key algorithm: %v", algo) +} + +// parseAuthorizedKey parses a public key in OpenSSH authorized_keys format +// (see sshd(8) manual page) once the options and key type fields have been +// removed. +func parseAuthorizedKey(in []byte) (out PublicKey, comment string, err error) { + in = bytes.TrimSpace(in) + + i := bytes.IndexAny(in, " \t") + if i == -1 { + i = len(in) + } + base64Key := in[:i] + + key := make([]byte, base64.StdEncoding.DecodedLen(len(base64Key))) + n, err := base64.StdEncoding.Decode(key, base64Key) + if err != nil { + return nil, "", err + } + key = key[:n] + out, err = ParsePublicKey(key) + if err != nil { + return nil, "", err + } + comment = string(bytes.TrimSpace(in[i:])) + return out, comment, nil +} + +// ParseKnownHosts parses an entry in the format of the known_hosts file. +// +// The known_hosts format is documented in the sshd(8) manual page. This +// function will parse a single entry from in. On successful return, marker +// will contain the optional marker value (i.e. "cert-authority" or "revoked") +// or else be empty, hosts will contain the hosts that this entry matches, +// pubKey will contain the public key and comment will contain any trailing +// comment at the end of the line. See the sshd(8) manual page for the various +// forms that a host string can take. +// +// The unparsed remainder of the input will be returned in rest. This function +// can be called repeatedly to parse multiple entries. +// +// If no entries were found in the input then err will be io.EOF. Otherwise a +// non-nil err value indicates a parse error. +func ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey, comment string, rest []byte, err error) { + for len(in) > 0 { + end := bytes.IndexByte(in, '\n') + if end != -1 { + rest = in[end+1:] + in = in[:end] + } else { + rest = nil + } + + end = bytes.IndexByte(in, '\r') + if end != -1 { + in = in[:end] + } + + in = bytes.TrimSpace(in) + if len(in) == 0 || in[0] == '#' { + in = rest + continue + } + + i := bytes.IndexAny(in, " \t") + if i == -1 { + in = rest + continue + } + + // Strip out the beginning of the known_host key. + // This is either an optional marker or a (set of) hostname(s). + keyFields := bytes.Fields(in) + if len(keyFields) < 3 || len(keyFields) > 5 { + return "", nil, nil, "", nil, errors.New("ssh: invalid entry in known_hosts data") + } + + // keyFields[0] is either "@cert-authority", "@revoked" or a comma separated + // list of hosts + marker := "" + if keyFields[0][0] == '@' { + marker = string(keyFields[0][1:]) + keyFields = keyFields[1:] + } + + hosts := string(keyFields[0]) + // keyFields[1] contains the key type (e.g. “ssh-rsa”). + // However, that information is duplicated inside the + // base64-encoded key and so is ignored here. + + key := bytes.Join(keyFields[2:], []byte(" ")) + if pubKey, comment, err = parseAuthorizedKey(key); err != nil { + return "", nil, nil, "", nil, err + } + + return marker, strings.Split(hosts, ","), pubKey, comment, rest, nil + } + + return "", nil, nil, "", nil, io.EOF +} + +// ParseAuthorizedKeys parses a public key from an authorized_keys +// file used in OpenSSH according to the sshd(8) manual page. +func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []string, rest []byte, err error) { + for len(in) > 0 { + end := bytes.IndexByte(in, '\n') + if end != -1 { + rest = in[end+1:] + in = in[:end] + } else { + rest = nil + } + + end = bytes.IndexByte(in, '\r') + if end != -1 { + in = in[:end] + } + + in = bytes.TrimSpace(in) + if len(in) == 0 || in[0] == '#' { + in = rest + continue + } + + i := bytes.IndexAny(in, " \t") + if i == -1 { + in = rest + continue + } + + if out, comment, err = parseAuthorizedKey(in[i:]); err == nil { + return out, comment, options, rest, nil + } + + // No key type recognised. Maybe there's an options field at + // the beginning. + var b byte + inQuote := false + var candidateOptions []string + optionStart := 0 + for i, b = range in { + isEnd := !inQuote && (b == ' ' || b == '\t') + if (b == ',' && !inQuote) || isEnd { + if i-optionStart > 0 { + candidateOptions = append(candidateOptions, string(in[optionStart:i])) + } + optionStart = i + 1 + } + if isEnd { + break + } + if b == '"' && (i == 0 || (i > 0 && in[i-1] != '\\')) { + inQuote = !inQuote + } + } + for i < len(in) && (in[i] == ' ' || in[i] == '\t') { + i++ + } + if i == len(in) { + // Invalid line: unmatched quote + in = rest + continue + } + + in = in[i:] + i = bytes.IndexAny(in, " \t") + if i == -1 { + in = rest + continue + } + + if out, comment, err = parseAuthorizedKey(in[i:]); err == nil { + options = candidateOptions + return out, comment, options, rest, nil + } + + in = rest + continue + } + + return nil, "", nil, nil, errors.New("ssh: no key found") +} + +// ParsePublicKey parses an SSH public key formatted for use in +// the SSH wire protocol according to RFC 4253, section 6.6. +func ParsePublicKey(in []byte) (out PublicKey, err error) { + algo, in, ok := parseString(in) + if !ok { + return nil, errShortRead + } + var rest []byte + out, rest, err = parsePubKey(in, string(algo)) + if len(rest) > 0 { + return nil, errors.New("ssh: trailing junk in public key") + } + + return out, err +} + +// MarshalAuthorizedKey serializes key for inclusion in an OpenSSH +// authorized_keys file. The return value ends with newline. +func MarshalAuthorizedKey(key PublicKey) []byte { + b := &bytes.Buffer{} + b.WriteString(key.Type()) + b.WriteByte(' ') + e := base64.NewEncoder(base64.StdEncoding, b) + e.Write(key.Marshal()) + e.Close() + b.WriteByte('\n') + return b.Bytes() +} + +// PublicKey is an abstraction of different types of public keys. +type PublicKey interface { + // Type returns the key's type, e.g. "ssh-rsa". + Type() string + + // Marshal returns the serialized key data in SSH wire format, + // with the name prefix. + Marshal() []byte + + // Verify that sig is a signature on the given data using this + // key. This function will hash the data appropriately first. + Verify(data []byte, sig *Signature) error +} + +// CryptoPublicKey, if implemented by a PublicKey, +// returns the underlying crypto.PublicKey form of the key. +type CryptoPublicKey interface { + CryptoPublicKey() crypto.PublicKey +} + +// A Signer can create signatures that verify against a public key. +type Signer interface { + // PublicKey returns an associated PublicKey instance. + PublicKey() PublicKey + + // Sign returns raw signature for the given data. This method + // will apply the hash specified for the keytype to the data. + Sign(rand io.Reader, data []byte) (*Signature, error) +} + +type rsaPublicKey rsa.PublicKey + +func (r *rsaPublicKey) Type() string { + return "ssh-rsa" +} + +// parseRSA parses an RSA key according to RFC 4253, section 6.6. +func parseRSA(in []byte) (out PublicKey, rest []byte, err error) { + var w struct { + E *big.Int + N *big.Int + Rest []byte `ssh:"rest"` + } + if err := Unmarshal(in, &w); err != nil { + return nil, nil, err + } + + if w.E.BitLen() > 24 { + return nil, nil, errors.New("ssh: exponent too large") + } + e := w.E.Int64() + if e < 3 || e&1 == 0 { + return nil, nil, errors.New("ssh: incorrect exponent") + } + + var key rsa.PublicKey + key.E = int(e) + key.N = w.N + return (*rsaPublicKey)(&key), w.Rest, nil +} + +func (r *rsaPublicKey) Marshal() []byte { + e := new(big.Int).SetInt64(int64(r.E)) + // RSA publickey struct layout should match the struct used by + // parseRSACert in the x/crypto/ssh/agent package. + wirekey := struct { + Name string + E *big.Int + N *big.Int + }{ + KeyAlgoRSA, + e, + r.N, + } + return Marshal(&wirekey) +} + +func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error { + if sig.Format != r.Type() { + return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, r.Type()) + } + h := crypto.SHA1.New() + h.Write(data) + digest := h.Sum(nil) + return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), crypto.SHA1, digest, sig.Blob) +} + +func (r *rsaPublicKey) CryptoPublicKey() crypto.PublicKey { + return (*rsa.PublicKey)(r) +} + +type dsaPublicKey dsa.PublicKey + +func (r *dsaPublicKey) Type() string { + return "ssh-dss" +} + +func checkDSAParams(param *dsa.Parameters) error { + // SSH specifies FIPS 186-2, which only provided a single size + // (1024 bits) DSA key. FIPS 186-3 allows for larger key + // sizes, which would confuse SSH. + if l := param.P.BitLen(); l != 1024 { + return fmt.Errorf("ssh: unsupported DSA key size %d", l) + } + + return nil +} + +// parseDSA parses an DSA key according to RFC 4253, section 6.6. +func parseDSA(in []byte) (out PublicKey, rest []byte, err error) { + var w struct { + P, Q, G, Y *big.Int + Rest []byte `ssh:"rest"` + } + if err := Unmarshal(in, &w); err != nil { + return nil, nil, err + } + + param := dsa.Parameters{ + P: w.P, + Q: w.Q, + G: w.G, + } + if err := checkDSAParams(¶m); err != nil { + return nil, nil, err + } + + key := &dsaPublicKey{ + Parameters: param, + Y: w.Y, + } + return key, w.Rest, nil +} + +func (k *dsaPublicKey) Marshal() []byte { + // DSA publickey struct layout should match the struct used by + // parseDSACert in the x/crypto/ssh/agent package. + w := struct { + Name string + P, Q, G, Y *big.Int + }{ + k.Type(), + k.P, + k.Q, + k.G, + k.Y, + } + + return Marshal(&w) +} + +func (k *dsaPublicKey) Verify(data []byte, sig *Signature) error { + if sig.Format != k.Type() { + return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type()) + } + h := crypto.SHA1.New() + h.Write(data) + digest := h.Sum(nil) + + // Per RFC 4253, section 6.6, + // The value for 'dss_signature_blob' is encoded as a string containing + // r, followed by s (which are 160-bit integers, without lengths or + // padding, unsigned, and in network byte order). + // For DSS purposes, sig.Blob should be exactly 40 bytes in length. + if len(sig.Blob) != 40 { + return errors.New("ssh: DSA signature parse error") + } + r := new(big.Int).SetBytes(sig.Blob[:20]) + s := new(big.Int).SetBytes(sig.Blob[20:]) + if dsa.Verify((*dsa.PublicKey)(k), digest, r, s) { + return nil + } + return errors.New("ssh: signature did not verify") +} + +func (k *dsaPublicKey) CryptoPublicKey() crypto.PublicKey { + return (*dsa.PublicKey)(k) +} + +type dsaPrivateKey struct { + *dsa.PrivateKey +} + +func (k *dsaPrivateKey) PublicKey() PublicKey { + return (*dsaPublicKey)(&k.PrivateKey.PublicKey) +} + +func (k *dsaPrivateKey) Sign(rand io.Reader, data []byte) (*Signature, error) { + h := crypto.SHA1.New() + h.Write(data) + digest := h.Sum(nil) + r, s, err := dsa.Sign(rand, k.PrivateKey, digest) + if err != nil { + return nil, err + } + + sig := make([]byte, 40) + rb := r.Bytes() + sb := s.Bytes() + + copy(sig[20-len(rb):20], rb) + copy(sig[40-len(sb):], sb) + + return &Signature{ + Format: k.PublicKey().Type(), + Blob: sig, + }, nil +} + +type ecdsaPublicKey ecdsa.PublicKey + +func (key *ecdsaPublicKey) Type() string { + return "ecdsa-sha2-" + key.nistID() +} + +func (key *ecdsaPublicKey) nistID() string { + switch key.Params().BitSize { + case 256: + return "nistp256" + case 384: + return "nistp384" + case 521: + return "nistp521" + } + panic("ssh: unsupported ecdsa key size") +} + +type ed25519PublicKey ed25519.PublicKey + +func (key ed25519PublicKey) Type() string { + return KeyAlgoED25519 +} + +func parseED25519(in []byte) (out PublicKey, rest []byte, err error) { + var w struct { + KeyBytes []byte + Rest []byte `ssh:"rest"` + } + + if err := Unmarshal(in, &w); err != nil { + return nil, nil, err + } + + key := ed25519.PublicKey(w.KeyBytes) + + return (ed25519PublicKey)(key), w.Rest, nil +} + +func (key ed25519PublicKey) Marshal() []byte { + w := struct { + Name string + KeyBytes []byte + }{ + KeyAlgoED25519, + []byte(key), + } + return Marshal(&w) +} + +func (key ed25519PublicKey) Verify(b []byte, sig *Signature) error { + if sig.Format != key.Type() { + return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, key.Type()) + } + + edKey := (ed25519.PublicKey)(key) + if ok := ed25519.Verify(edKey, b, sig.Blob); !ok { + return errors.New("ssh: signature did not verify") + } + + return nil +} + +func (k ed25519PublicKey) CryptoPublicKey() crypto.PublicKey { + return ed25519.PublicKey(k) +} + +func supportedEllipticCurve(curve elliptic.Curve) bool { + return curve == elliptic.P256() || curve == elliptic.P384() || curve == elliptic.P521() +} + +// ecHash returns the hash to match the given elliptic curve, see RFC +// 5656, section 6.2.1 +func ecHash(curve elliptic.Curve) crypto.Hash { + bitSize := curve.Params().BitSize + switch { + case bitSize <= 256: + return crypto.SHA256 + case bitSize <= 384: + return crypto.SHA384 + } + return crypto.SHA512 +} + +// parseECDSA parses an ECDSA key according to RFC 5656, section 3.1. +func parseECDSA(in []byte) (out PublicKey, rest []byte, err error) { + var w struct { + Curve string + KeyBytes []byte + Rest []byte `ssh:"rest"` + } + + if err := Unmarshal(in, &w); err != nil { + return nil, nil, err + } + + key := new(ecdsa.PublicKey) + + switch w.Curve { + case "nistp256": + key.Curve = elliptic.P256() + case "nistp384": + key.Curve = elliptic.P384() + case "nistp521": + key.Curve = elliptic.P521() + default: + return nil, nil, errors.New("ssh: unsupported curve") + } + + key.X, key.Y = elliptic.Unmarshal(key.Curve, w.KeyBytes) + if key.X == nil || key.Y == nil { + return nil, nil, errors.New("ssh: invalid curve point") + } + return (*ecdsaPublicKey)(key), w.Rest, nil +} + +func (key *ecdsaPublicKey) Marshal() []byte { + // See RFC 5656, section 3.1. + keyBytes := elliptic.Marshal(key.Curve, key.X, key.Y) + // ECDSA publickey struct layout should match the struct used by + // parseECDSACert in the x/crypto/ssh/agent package. + w := struct { + Name string + ID string + Key []byte + }{ + key.Type(), + key.nistID(), + keyBytes, + } + + return Marshal(&w) +} + +func (key *ecdsaPublicKey) Verify(data []byte, sig *Signature) error { + if sig.Format != key.Type() { + return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, key.Type()) + } + + h := ecHash(key.Curve).New() + h.Write(data) + digest := h.Sum(nil) + + // Per RFC 5656, section 3.1.2, + // The ecdsa_signature_blob value has the following specific encoding: + // mpint r + // mpint s + var ecSig struct { + R *big.Int + S *big.Int + } + + if err := Unmarshal(sig.Blob, &ecSig); err != nil { + return err + } + + if ecdsa.Verify((*ecdsa.PublicKey)(key), digest, ecSig.R, ecSig.S) { + return nil + } + return errors.New("ssh: signature did not verify") +} + +func (k *ecdsaPublicKey) CryptoPublicKey() crypto.PublicKey { + return (*ecdsa.PublicKey)(k) +} + +// NewSignerFromKey takes an *rsa.PrivateKey, *dsa.PrivateKey, +// *ecdsa.PrivateKey or any other crypto.Signer and returns a +// corresponding Signer instance. ECDSA keys must use P-256, P-384 or +// P-521. DSA keys must use parameter size L1024N160. +func NewSignerFromKey(key interface{}) (Signer, error) { + switch key := key.(type) { + case crypto.Signer: + return NewSignerFromSigner(key) + case *dsa.PrivateKey: + return newDSAPrivateKey(key) + default: + return nil, fmt.Errorf("ssh: unsupported key type %T", key) + } +} + +func newDSAPrivateKey(key *dsa.PrivateKey) (Signer, error) { + if err := checkDSAParams(&key.PublicKey.Parameters); err != nil { + return nil, err + } + + return &dsaPrivateKey{key}, nil +} + +type wrappedSigner struct { + signer crypto.Signer + pubKey PublicKey +} + +// NewSignerFromSigner takes any crypto.Signer implementation and +// returns a corresponding Signer interface. This can be used, for +// example, with keys kept in hardware modules. +func NewSignerFromSigner(signer crypto.Signer) (Signer, error) { + pubKey, err := NewPublicKey(signer.Public()) + if err != nil { + return nil, err + } + + return &wrappedSigner{signer, pubKey}, nil +} + +func (s *wrappedSigner) PublicKey() PublicKey { + return s.pubKey +} + +func (s *wrappedSigner) Sign(rand io.Reader, data []byte) (*Signature, error) { + var hashFunc crypto.Hash + + switch key := s.pubKey.(type) { + case *rsaPublicKey, *dsaPublicKey: + hashFunc = crypto.SHA1 + case *ecdsaPublicKey: + hashFunc = ecHash(key.Curve) + case ed25519PublicKey: + default: + return nil, fmt.Errorf("ssh: unsupported key type %T", key) + } + + var digest []byte + if hashFunc != 0 { + h := hashFunc.New() + h.Write(data) + digest = h.Sum(nil) + } else { + digest = data + } + + signature, err := s.signer.Sign(rand, digest, hashFunc) + if err != nil { + return nil, err + } + + // crypto.Signer.Sign is expected to return an ASN.1-encoded signature + // for ECDSA and DSA, but that's not the encoding expected by SSH, so + // re-encode. + switch s.pubKey.(type) { + case *ecdsaPublicKey, *dsaPublicKey: + type asn1Signature struct { + R, S *big.Int + } + asn1Sig := new(asn1Signature) + _, err := asn1.Unmarshal(signature, asn1Sig) + if err != nil { + return nil, err + } + + switch s.pubKey.(type) { + case *ecdsaPublicKey: + signature = Marshal(asn1Sig) + + case *dsaPublicKey: + signature = make([]byte, 40) + r := asn1Sig.R.Bytes() + s := asn1Sig.S.Bytes() + copy(signature[20-len(r):20], r) + copy(signature[40-len(s):40], s) + } + } + + return &Signature{ + Format: s.pubKey.Type(), + Blob: signature, + }, nil +} + +// NewPublicKey takes an *rsa.PublicKey, *dsa.PublicKey, *ecdsa.PublicKey, +// or ed25519.PublicKey returns a corresponding PublicKey instance. +// ECDSA keys must use P-256, P-384 or P-521. +func NewPublicKey(key interface{}) (PublicKey, error) { + switch key := key.(type) { + case *rsa.PublicKey: + return (*rsaPublicKey)(key), nil + case *ecdsa.PublicKey: + if !supportedEllipticCurve(key.Curve) { + return nil, errors.New("ssh: only P-256, P-384 and P-521 EC keys are supported.") + } + return (*ecdsaPublicKey)(key), nil + case *dsa.PublicKey: + return (*dsaPublicKey)(key), nil + case ed25519.PublicKey: + return (ed25519PublicKey)(key), nil + default: + return nil, fmt.Errorf("ssh: unsupported key type %T", key) + } +} + +// ParsePrivateKey returns a Signer from a PEM encoded private key. It supports +// the same keys as ParseRawPrivateKey. +func ParsePrivateKey(pemBytes []byte) (Signer, error) { + key, err := ParseRawPrivateKey(pemBytes) + if err != nil { + return nil, err + } + + return NewSignerFromKey(key) +} + +// ParsePrivateKeyWithPassphrase returns a Signer from a PEM encoded private +// key and passphrase. It supports the same keys as +// ParseRawPrivateKeyWithPassphrase. +func ParsePrivateKeyWithPassphrase(pemBytes, passPhrase []byte) (Signer, error) { + key, err := ParseRawPrivateKeyWithPassphrase(pemBytes, passPhrase) + if err != nil { + return nil, err + } + + return NewSignerFromKey(key) +} + +// encryptedBlock tells whether a private key is +// encrypted by examining its Proc-Type header +// for a mention of ENCRYPTED +// according to RFC 1421 Section 4.6.1.1. +func encryptedBlock(block *pem.Block) bool { + return strings.Contains(block.Headers["Proc-Type"], "ENCRYPTED") +} + +// ParseRawPrivateKey returns a private key from a PEM encoded private key. It +// supports RSA (PKCS#1), DSA (OpenSSL), and ECDSA private keys. +func ParseRawPrivateKey(pemBytes []byte) (interface{}, error) { + block, _ := pem.Decode(pemBytes) + if block == nil { + return nil, errors.New("ssh: no key found") + } + + if encryptedBlock(block) { + return nil, errors.New("ssh: cannot decode encrypted private keys") + } + + switch block.Type { + case "RSA PRIVATE KEY": + return x509.ParsePKCS1PrivateKey(block.Bytes) + case "EC PRIVATE KEY": + return x509.ParseECPrivateKey(block.Bytes) + case "DSA PRIVATE KEY": + return ParseDSAPrivateKey(block.Bytes) + case "OPENSSH PRIVATE KEY": + return parseOpenSSHPrivateKey(block.Bytes) + default: + return nil, fmt.Errorf("ssh: unsupported key type %q", block.Type) + } +} + +// ParseRawPrivateKeyWithPassphrase returns a private key decrypted with +// passphrase from a PEM encoded private key. If wrong passphrase, return +// x509.IncorrectPasswordError. +func ParseRawPrivateKeyWithPassphrase(pemBytes, passPhrase []byte) (interface{}, error) { + block, _ := pem.Decode(pemBytes) + if block == nil { + return nil, errors.New("ssh: no key found") + } + buf := block.Bytes + + if encryptedBlock(block) { + if x509.IsEncryptedPEMBlock(block) { + var err error + buf, err = x509.DecryptPEMBlock(block, passPhrase) + if err != nil { + if err == x509.IncorrectPasswordError { + return nil, err + } + return nil, fmt.Errorf("ssh: cannot decode encrypted private keys: %v", err) + } + } + } + + switch block.Type { + case "RSA PRIVATE KEY": + return x509.ParsePKCS1PrivateKey(buf) + case "EC PRIVATE KEY": + return x509.ParseECPrivateKey(buf) + case "DSA PRIVATE KEY": + return ParseDSAPrivateKey(buf) + case "OPENSSH PRIVATE KEY": + return parseOpenSSHPrivateKey(buf) + default: + return nil, fmt.Errorf("ssh: unsupported key type %q", block.Type) + } +} + +// ParseDSAPrivateKey returns a DSA private key from its ASN.1 DER encoding, as +// specified by the OpenSSL DSA man page. +func ParseDSAPrivateKey(der []byte) (*dsa.PrivateKey, error) { + var k struct { + Version int + P *big.Int + Q *big.Int + G *big.Int + Pub *big.Int + Priv *big.Int + } + rest, err := asn1.Unmarshal(der, &k) + if err != nil { + return nil, errors.New("ssh: failed to parse DSA key: " + err.Error()) + } + if len(rest) > 0 { + return nil, errors.New("ssh: garbage after DSA key") + } + + return &dsa.PrivateKey{ + PublicKey: dsa.PublicKey{ + Parameters: dsa.Parameters{ + P: k.P, + Q: k.Q, + G: k.G, + }, + Y: k.Pub, + }, + X: k.Priv, + }, nil +} + +// Implemented based on the documentation at +// https://github.com/openssh/openssh-portable/blob/master/PROTOCOL.key +func parseOpenSSHPrivateKey(key []byte) (crypto.PrivateKey, error) { + magic := append([]byte("openssh-key-v1"), 0) + if !bytes.Equal(magic, key[0:len(magic)]) { + return nil, errors.New("ssh: invalid openssh private key format") + } + remaining := key[len(magic):] + + var w struct { + CipherName string + KdfName string + KdfOpts string + NumKeys uint32 + PubKey []byte + PrivKeyBlock []byte + } + + if err := Unmarshal(remaining, &w); err != nil { + return nil, err + } + + if w.KdfName != "none" || w.CipherName != "none" { + return nil, errors.New("ssh: cannot decode encrypted private keys") + } + + pk1 := struct { + Check1 uint32 + Check2 uint32 + Keytype string + Rest []byte `ssh:"rest"` + }{} + + if err := Unmarshal(w.PrivKeyBlock, &pk1); err != nil { + return nil, err + } + + if pk1.Check1 != pk1.Check2 { + return nil, errors.New("ssh: checkint mismatch") + } + + // we only handle ed25519 and rsa keys currently + switch pk1.Keytype { + case KeyAlgoRSA: + // https://github.com/openssh/openssh-portable/blob/master/sshkey.c#L2760-L2773 + key := struct { + N *big.Int + E *big.Int + D *big.Int + Iqmp *big.Int + P *big.Int + Q *big.Int + Comment string + Pad []byte `ssh:"rest"` + }{} + + if err := Unmarshal(pk1.Rest, &key); err != nil { + return nil, err + } + + for i, b := range key.Pad { + if int(b) != i+1 { + return nil, errors.New("ssh: padding not as expected") + } + } + + pk := &rsa.PrivateKey{ + PublicKey: rsa.PublicKey{ + N: key.N, + E: int(key.E.Int64()), + }, + D: key.D, + Primes: []*big.Int{key.P, key.Q}, + } + + if err := pk.Validate(); err != nil { + return nil, err + } + + pk.Precompute() + + return pk, nil + case KeyAlgoED25519: + key := struct { + Pub []byte + Priv []byte + Comment string + Pad []byte `ssh:"rest"` + }{} + + if err := Unmarshal(pk1.Rest, &key); err != nil { + return nil, err + } + + if len(key.Priv) != ed25519.PrivateKeySize { + return nil, errors.New("ssh: private key unexpected length") + } + + for i, b := range key.Pad { + if int(b) != i+1 { + return nil, errors.New("ssh: padding not as expected") + } + } + + pk := ed25519.PrivateKey(make([]byte, ed25519.PrivateKeySize)) + copy(pk, key.Priv) + return &pk, nil + default: + return nil, errors.New("ssh: unhandled key type") + } +} + +// FingerprintLegacyMD5 returns the user presentation of the key's +// fingerprint as described by RFC 4716 section 4. +func FingerprintLegacyMD5(pubKey PublicKey) string { + md5sum := md5.Sum(pubKey.Marshal()) + hexarray := make([]string, len(md5sum)) + for i, c := range md5sum { + hexarray[i] = hex.EncodeToString([]byte{c}) + } + return strings.Join(hexarray, ":") +} + +// FingerprintSHA256 returns the user presentation of the key's +// fingerprint as unpadded base64 encoded sha256 hash. +// This format was introduced from OpenSSH 6.8. +// https://www.openssh.com/txt/release-6.8 +// https://tools.ietf.org/html/rfc4648#section-3.2 (unpadded base64 encoding) +func FingerprintSHA256(pubKey PublicKey) string { + sha256sum := sha256.Sum256(pubKey.Marshal()) + hash := base64.RawStdEncoding.EncodeToString(sha256sum[:]) + return "SHA256:" + hash +} diff --git a/vendor/golang.org/x/crypto/ssh/keys_test.go b/vendor/golang.org/x/crypto/ssh/keys_test.go new file mode 100644 index 0000000..20ab954 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/keys_test.go @@ -0,0 +1,500 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/dsa" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "encoding/base64" + "fmt" + "reflect" + "strings" + "testing" + + "golang.org/x/crypto/ed25519" + "golang.org/x/crypto/ssh/testdata" +) + +func rawKey(pub PublicKey) interface{} { + switch k := pub.(type) { + case *rsaPublicKey: + return (*rsa.PublicKey)(k) + case *dsaPublicKey: + return (*dsa.PublicKey)(k) + case *ecdsaPublicKey: + return (*ecdsa.PublicKey)(k) + case ed25519PublicKey: + return (ed25519.PublicKey)(k) + case *Certificate: + return k + } + panic("unknown key type") +} + +func TestKeyMarshalParse(t *testing.T) { + for _, priv := range testSigners { + pub := priv.PublicKey() + roundtrip, err := ParsePublicKey(pub.Marshal()) + if err != nil { + t.Errorf("ParsePublicKey(%T): %v", pub, err) + } + + k1 := rawKey(pub) + k2 := rawKey(roundtrip) + + if !reflect.DeepEqual(k1, k2) { + t.Errorf("got %#v in roundtrip, want %#v", k2, k1) + } + } +} + +func TestUnsupportedCurves(t *testing.T) { + raw, err := ecdsa.GenerateKey(elliptic.P224(), rand.Reader) + if err != nil { + t.Fatalf("GenerateKey: %v", err) + } + + if _, err = NewSignerFromKey(raw); err == nil || !strings.Contains(err.Error(), "only P-256") { + t.Fatalf("NewPrivateKey should not succeed with P-224, got: %v", err) + } + + if _, err = NewPublicKey(&raw.PublicKey); err == nil || !strings.Contains(err.Error(), "only P-256") { + t.Fatalf("NewPublicKey should not succeed with P-224, got: %v", err) + } +} + +func TestNewPublicKey(t *testing.T) { + for _, k := range testSigners { + raw := rawKey(k.PublicKey()) + // Skip certificates, as NewPublicKey does not support them. + if _, ok := raw.(*Certificate); ok { + continue + } + pub, err := NewPublicKey(raw) + if err != nil { + t.Errorf("NewPublicKey(%#v): %v", raw, err) + } + if !reflect.DeepEqual(k.PublicKey(), pub) { + t.Errorf("NewPublicKey(%#v) = %#v, want %#v", raw, pub, k.PublicKey()) + } + } +} + +func TestKeySignVerify(t *testing.T) { + for _, priv := range testSigners { + pub := priv.PublicKey() + + data := []byte("sign me") + sig, err := priv.Sign(rand.Reader, data) + if err != nil { + t.Fatalf("Sign(%T): %v", priv, err) + } + + if err := pub.Verify(data, sig); err != nil { + t.Errorf("publicKey.Verify(%T): %v", priv, err) + } + sig.Blob[5]++ + if err := pub.Verify(data, sig); err == nil { + t.Errorf("publicKey.Verify on broken sig did not fail") + } + } +} + +func TestParseRSAPrivateKey(t *testing.T) { + key := testPrivateKeys["rsa"] + + rsa, ok := key.(*rsa.PrivateKey) + if !ok { + t.Fatalf("got %T, want *rsa.PrivateKey", rsa) + } + + if err := rsa.Validate(); err != nil { + t.Errorf("Validate: %v", err) + } +} + +func TestParseECPrivateKey(t *testing.T) { + key := testPrivateKeys["ecdsa"] + + ecKey, ok := key.(*ecdsa.PrivateKey) + if !ok { + t.Fatalf("got %T, want *ecdsa.PrivateKey", ecKey) + } + + if !validateECPublicKey(ecKey.Curve, ecKey.X, ecKey.Y) { + t.Fatalf("public key does not validate.") + } +} + +// See Issue https://github.com/golang/go/issues/6650. +func TestParseEncryptedPrivateKeysFails(t *testing.T) { + const wantSubstring = "encrypted" + for i, tt := range testdata.PEMEncryptedKeys { + _, err := ParsePrivateKey(tt.PEMBytes) + if err == nil { + t.Errorf("#%d key %s: ParsePrivateKey successfully parsed, expected an error", i, tt.Name) + continue + } + + if !strings.Contains(err.Error(), wantSubstring) { + t.Errorf("#%d key %s: got error %q, want substring %q", i, tt.Name, err, wantSubstring) + } + } +} + +// Parse encrypted private keys with passphrase +func TestParseEncryptedPrivateKeysWithPassphrase(t *testing.T) { + data := []byte("sign me") + for _, tt := range testdata.PEMEncryptedKeys { + s, err := ParsePrivateKeyWithPassphrase(tt.PEMBytes, []byte(tt.EncryptionKey)) + if err != nil { + t.Fatalf("ParsePrivateKeyWithPassphrase returned error: %s", err) + continue + } + sig, err := s.Sign(rand.Reader, data) + if err != nil { + t.Fatalf("dsa.Sign: %v", err) + } + if err := s.PublicKey().Verify(data, sig); err != nil { + t.Errorf("Verify failed: %v", err) + } + } + + tt := testdata.PEMEncryptedKeys[0] + _, err := ParsePrivateKeyWithPassphrase(tt.PEMBytes, []byte("incorrect")) + if err != x509.IncorrectPasswordError { + t.Fatalf("got %v want IncorrectPasswordError", err) + } +} + +func TestParseDSA(t *testing.T) { + // We actually exercise the ParsePrivateKey codepath here, as opposed to + // using the ParseRawPrivateKey+NewSignerFromKey path that testdata_test.go + // uses. + s, err := ParsePrivateKey(testdata.PEMBytes["dsa"]) + if err != nil { + t.Fatalf("ParsePrivateKey returned error: %s", err) + } + + data := []byte("sign me") + sig, err := s.Sign(rand.Reader, data) + if err != nil { + t.Fatalf("dsa.Sign: %v", err) + } + + if err := s.PublicKey().Verify(data, sig); err != nil { + t.Errorf("Verify failed: %v", err) + } +} + +// Tests for authorized_keys parsing. + +// getTestKey returns a public key, and its base64 encoding. +func getTestKey() (PublicKey, string) { + k := testPublicKeys["rsa"] + + b := &bytes.Buffer{} + e := base64.NewEncoder(base64.StdEncoding, b) + e.Write(k.Marshal()) + e.Close() + + return k, b.String() +} + +func TestMarshalParsePublicKey(t *testing.T) { + pub, pubSerialized := getTestKey() + line := fmt.Sprintf("%s %s user@host", pub.Type(), pubSerialized) + + authKeys := MarshalAuthorizedKey(pub) + actualFields := strings.Fields(string(authKeys)) + if len(actualFields) == 0 { + t.Fatalf("failed authKeys: %v", authKeys) + } + + // drop the comment + expectedFields := strings.Fields(line)[0:2] + + if !reflect.DeepEqual(actualFields, expectedFields) { + t.Errorf("got %v, expected %v", actualFields, expectedFields) + } + + actPub, _, _, _, err := ParseAuthorizedKey([]byte(line)) + if err != nil { + t.Fatalf("cannot parse %v: %v", line, err) + } + if !reflect.DeepEqual(actPub, pub) { + t.Errorf("got %v, expected %v", actPub, pub) + } +} + +type authResult struct { + pubKey PublicKey + options []string + comments string + rest string + ok bool +} + +func testAuthorizedKeys(t *testing.T, authKeys []byte, expected []authResult) { + rest := authKeys + var values []authResult + for len(rest) > 0 { + var r authResult + var err error + r.pubKey, r.comments, r.options, rest, err = ParseAuthorizedKey(rest) + r.ok = (err == nil) + t.Log(err) + r.rest = string(rest) + values = append(values, r) + } + + if !reflect.DeepEqual(values, expected) { + t.Errorf("got %#v, expected %#v", values, expected) + } +} + +func TestAuthorizedKeyBasic(t *testing.T) { + pub, pubSerialized := getTestKey() + line := "ssh-rsa " + pubSerialized + " user@host" + testAuthorizedKeys(t, []byte(line), + []authResult{ + {pub, nil, "user@host", "", true}, + }) +} + +func TestAuth(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithOptions := []string{ + `# comments to ignore before any keys...`, + ``, + `env="HOME=/home/root",no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host`, + `# comments to ignore, along with a blank line`, + ``, + `env="HOME=/home/root2" ssh-rsa ` + pubSerialized + ` user2@host2`, + ``, + `# more comments, plus a invalid entry`, + `ssh-rsa data-that-will-not-parse user@host3`, + } + for _, eol := range []string{"\n", "\r\n"} { + authOptions := strings.Join(authWithOptions, eol) + rest2 := strings.Join(authWithOptions[3:], eol) + rest3 := strings.Join(authWithOptions[6:], eol) + testAuthorizedKeys(t, []byte(authOptions), []authResult{ + {pub, []string{`env="HOME=/home/root"`, "no-port-forwarding"}, "user@host", rest2, true}, + {pub, []string{`env="HOME=/home/root2"`}, "user2@host2", rest3, true}, + {nil, nil, "", "", false}, + }) + } +} + +func TestAuthWithQuotedSpaceInEnv(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithQuotedSpaceInEnv := []byte(`env="HOME=/home/root dir",no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host`) + testAuthorizedKeys(t, []byte(authWithQuotedSpaceInEnv), []authResult{ + {pub, []string{`env="HOME=/home/root dir"`, "no-port-forwarding"}, "user@host", "", true}, + }) +} + +func TestAuthWithQuotedCommaInEnv(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithQuotedCommaInEnv := []byte(`env="HOME=/home/root,dir",no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host`) + testAuthorizedKeys(t, []byte(authWithQuotedCommaInEnv), []authResult{ + {pub, []string{`env="HOME=/home/root,dir"`, "no-port-forwarding"}, "user@host", "", true}, + }) +} + +func TestAuthWithQuotedQuoteInEnv(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithQuotedQuoteInEnv := []byte(`env="HOME=/home/\"root dir",no-port-forwarding` + "\t" + `ssh-rsa` + "\t" + pubSerialized + ` user@host`) + authWithDoubleQuotedQuote := []byte(`no-port-forwarding,env="HOME=/home/ \"root dir\"" ssh-rsa ` + pubSerialized + "\t" + `user@host`) + testAuthorizedKeys(t, []byte(authWithQuotedQuoteInEnv), []authResult{ + {pub, []string{`env="HOME=/home/\"root dir"`, "no-port-forwarding"}, "user@host", "", true}, + }) + + testAuthorizedKeys(t, []byte(authWithDoubleQuotedQuote), []authResult{ + {pub, []string{"no-port-forwarding", `env="HOME=/home/ \"root dir\""`}, "user@host", "", true}, + }) +} + +func TestAuthWithInvalidSpace(t *testing.T) { + _, pubSerialized := getTestKey() + authWithInvalidSpace := []byte(`env="HOME=/home/root dir", no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host +#more to follow but still no valid keys`) + testAuthorizedKeys(t, []byte(authWithInvalidSpace), []authResult{ + {nil, nil, "", "", false}, + }) +} + +func TestAuthWithMissingQuote(t *testing.T) { + pub, pubSerialized := getTestKey() + authWithMissingQuote := []byte(`env="HOME=/home/root,no-port-forwarding ssh-rsa ` + pubSerialized + ` user@host +env="HOME=/home/root",shared-control ssh-rsa ` + pubSerialized + ` user@host`) + + testAuthorizedKeys(t, []byte(authWithMissingQuote), []authResult{ + {pub, []string{`env="HOME=/home/root"`, `shared-control`}, "user@host", "", true}, + }) +} + +func TestInvalidEntry(t *testing.T) { + authInvalid := []byte(`ssh-rsa`) + _, _, _, _, err := ParseAuthorizedKey(authInvalid) + if err == nil { + t.Errorf("got valid entry for %q", authInvalid) + } +} + +var knownHostsParseTests = []struct { + input string + err string + + marker string + comment string + hosts []string + rest string +}{ + { + "", + "EOF", + + "", "", nil, "", + }, + { + "# Just a comment", + "EOF", + + "", "", nil, "", + }, + { + " \t ", + "EOF", + + "", "", nil, "", + }, + { + "localhost ssh-rsa {RSAPUB}", + "", + + "", "", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}", + "", + + "", "", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}\tcomment comment", + "", + + "", "comment comment", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}\tcomment comment\n", + "", + + "", "comment comment", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}\tcomment comment\r\n", + "", + + "", "comment comment", []string{"localhost"}, "", + }, + { + "localhost\tssh-rsa {RSAPUB}\tcomment comment\r\nnext line", + "", + + "", "comment comment", []string{"localhost"}, "next line", + }, + { + "localhost,[host2:123]\tssh-rsa {RSAPUB}\tcomment comment", + "", + + "", "comment comment", []string{"localhost", "[host2:123]"}, "", + }, + { + "@marker \tlocalhost,[host2:123]\tssh-rsa {RSAPUB}", + "", + + "marker", "", []string{"localhost", "[host2:123]"}, "", + }, + { + "@marker \tlocalhost,[host2:123]\tssh-rsa aabbccdd", + "short read", + + "", "", nil, "", + }, +} + +func TestKnownHostsParsing(t *testing.T) { + rsaPub, rsaPubSerialized := getTestKey() + + for i, test := range knownHostsParseTests { + var expectedKey PublicKey + const rsaKeyToken = "{RSAPUB}" + + input := test.input + if strings.Contains(input, rsaKeyToken) { + expectedKey = rsaPub + input = strings.Replace(test.input, rsaKeyToken, rsaPubSerialized, -1) + } + + marker, hosts, pubKey, comment, rest, err := ParseKnownHosts([]byte(input)) + if err != nil { + if len(test.err) == 0 { + t.Errorf("#%d: unexpectedly failed with %q", i, err) + } else if !strings.Contains(err.Error(), test.err) { + t.Errorf("#%d: expected error containing %q, but got %q", i, test.err, err) + } + continue + } else if len(test.err) != 0 { + t.Errorf("#%d: succeeded but expected error including %q", i, test.err) + continue + } + + if !reflect.DeepEqual(expectedKey, pubKey) { + t.Errorf("#%d: expected key %#v, but got %#v", i, expectedKey, pubKey) + } + + if marker != test.marker { + t.Errorf("#%d: expected marker %q, but got %q", i, test.marker, marker) + } + + if comment != test.comment { + t.Errorf("#%d: expected comment %q, but got %q", i, test.comment, comment) + } + + if !reflect.DeepEqual(test.hosts, hosts) { + t.Errorf("#%d: expected hosts %#v, but got %#v", i, test.hosts, hosts) + } + + if rest := string(rest); rest != test.rest { + t.Errorf("#%d: expected remaining input to be %q, but got %q", i, test.rest, rest) + } + } +} + +func TestFingerprintLegacyMD5(t *testing.T) { + pub, _ := getTestKey() + fingerprint := FingerprintLegacyMD5(pub) + want := "fb:61:6d:1a:e3:f0:95:45:3c:a0:79:be:4a:93:63:66" // ssh-keygen -lf -E md5 rsa + if fingerprint != want { + t.Errorf("got fingerprint %q want %q", fingerprint, want) + } +} + +func TestFingerprintSHA256(t *testing.T) { + pub, _ := getTestKey() + fingerprint := FingerprintSHA256(pub) + want := "SHA256:Anr3LjZK8YVpjrxu79myrW9Hrb/wpcMNpVvTq/RcBm8" // ssh-keygen -lf rsa + if fingerprint != want { + t.Errorf("got fingerprint %q want %q", fingerprint, want) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go b/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go new file mode 100644 index 0000000..ea92b29 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts.go @@ -0,0 +1,546 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package knownhosts implements a parser for the OpenSSH +// known_hosts host key database. +package knownhosts + +import ( + "bufio" + "bytes" + "crypto/hmac" + "crypto/rand" + "crypto/sha1" + "encoding/base64" + "errors" + "fmt" + "io" + "net" + "os" + "strings" + + "golang.org/x/crypto/ssh" +) + +// See the sshd manpage +// (http://man.openbsd.org/sshd#SSH_KNOWN_HOSTS_FILE_FORMAT) for +// background. + +type addr struct{ host, port string } + +func (a *addr) String() string { + h := a.host + if strings.Contains(h, ":") { + h = "[" + h + "]" + } + return h + ":" + a.port +} + +type matcher interface { + match([]addr) bool +} + +type hostPattern struct { + negate bool + addr addr +} + +func (p *hostPattern) String() string { + n := "" + if p.negate { + n = "!" + } + + return n + p.addr.String() +} + +type hostPatterns []hostPattern + +func (ps hostPatterns) match(addrs []addr) bool { + matched := false + for _, p := range ps { + for _, a := range addrs { + m := p.match(a) + if !m { + continue + } + if p.negate { + return false + } + matched = true + } + } + return matched +} + +// See +// https://android.googlesource.com/platform/external/openssh/+/ab28f5495c85297e7a597c1ba62e996416da7c7e/addrmatch.c +// The matching of * has no regard for separators, unlike filesystem globs +func wildcardMatch(pat []byte, str []byte) bool { + for { + if len(pat) == 0 { + return len(str) == 0 + } + if len(str) == 0 { + return false + } + + if pat[0] == '*' { + if len(pat) == 1 { + return true + } + + for j := range str { + if wildcardMatch(pat[1:], str[j:]) { + return true + } + } + return false + } + + if pat[0] == '?' || pat[0] == str[0] { + pat = pat[1:] + str = str[1:] + } else { + return false + } + } +} + +func (l *hostPattern) match(a addr) bool { + return wildcardMatch([]byte(l.addr.host), []byte(a.host)) && l.addr.port == a.port +} + +type keyDBLine struct { + cert bool + matcher matcher + knownKey KnownKey +} + +func serialize(k ssh.PublicKey) string { + return k.Type() + " " + base64.StdEncoding.EncodeToString(k.Marshal()) +} + +func (l *keyDBLine) match(addrs []addr) bool { + return l.matcher.match(addrs) +} + +type hostKeyDB struct { + // Serialized version of revoked keys + revoked map[string]*KnownKey + lines []keyDBLine +} + +func newHostKeyDB() *hostKeyDB { + db := &hostKeyDB{ + revoked: make(map[string]*KnownKey), + } + + return db +} + +func keyEq(a, b ssh.PublicKey) bool { + return bytes.Equal(a.Marshal(), b.Marshal()) +} + +// IsAuthorityForHost can be used as a callback in ssh.CertChecker +func (db *hostKeyDB) IsHostAuthority(remote ssh.PublicKey, address string) bool { + h, p, err := net.SplitHostPort(address) + if err != nil { + return false + } + a := addr{host: h, port: p} + + for _, l := range db.lines { + if l.cert && keyEq(l.knownKey.Key, remote) && l.match([]addr{a}) { + return true + } + } + return false +} + +// IsRevoked can be used as a callback in ssh.CertChecker +func (db *hostKeyDB) IsRevoked(key *ssh.Certificate) bool { + _, ok := db.revoked[string(key.Marshal())] + return ok +} + +const markerCert = "@cert-authority" +const markerRevoked = "@revoked" + +func nextWord(line []byte) (string, []byte) { + i := bytes.IndexAny(line, "\t ") + if i == -1 { + return string(line), nil + } + + return string(line[:i]), bytes.TrimSpace(line[i:]) +} + +func parseLine(line []byte) (marker, host string, key ssh.PublicKey, err error) { + if w, next := nextWord(line); w == markerCert || w == markerRevoked { + marker = w + line = next + } + + host, line = nextWord(line) + if len(line) == 0 { + return "", "", nil, errors.New("knownhosts: missing host pattern") + } + + // ignore the keytype as it's in the key blob anyway. + _, line = nextWord(line) + if len(line) == 0 { + return "", "", nil, errors.New("knownhosts: missing key type pattern") + } + + keyBlob, _ := nextWord(line) + + keyBytes, err := base64.StdEncoding.DecodeString(keyBlob) + if err != nil { + return "", "", nil, err + } + key, err = ssh.ParsePublicKey(keyBytes) + if err != nil { + return "", "", nil, err + } + + return marker, host, key, nil +} + +func (db *hostKeyDB) parseLine(line []byte, filename string, linenum int) error { + marker, pattern, key, err := parseLine(line) + if err != nil { + return err + } + + if marker == markerRevoked { + db.revoked[string(key.Marshal())] = &KnownKey{ + Key: key, + Filename: filename, + Line: linenum, + } + + return nil + } + + entry := keyDBLine{ + cert: marker == markerCert, + knownKey: KnownKey{ + Filename: filename, + Line: linenum, + Key: key, + }, + } + + if pattern[0] == '|' { + entry.matcher, err = newHashedHost(pattern) + } else { + entry.matcher, err = newHostnameMatcher(pattern) + } + + if err != nil { + return err + } + + db.lines = append(db.lines, entry) + return nil +} + +func newHostnameMatcher(pattern string) (matcher, error) { + var hps hostPatterns + for _, p := range strings.Split(pattern, ",") { + if len(p) == 0 { + continue + } + + var a addr + var negate bool + if p[0] == '!' { + negate = true + p = p[1:] + } + + if len(p) == 0 { + return nil, errors.New("knownhosts: negation without following hostname") + } + + var err error + if p[0] == '[' { + a.host, a.port, err = net.SplitHostPort(p) + if err != nil { + return nil, err + } + } else { + a.host, a.port, err = net.SplitHostPort(p) + if err != nil { + a.host = p + a.port = "22" + } + } + hps = append(hps, hostPattern{ + negate: negate, + addr: a, + }) + } + return hps, nil +} + +// KnownKey represents a key declared in a known_hosts file. +type KnownKey struct { + Key ssh.PublicKey + Filename string + Line int +} + +func (k *KnownKey) String() string { + return fmt.Sprintf("%s:%d: %s", k.Filename, k.Line, serialize(k.Key)) +} + +// KeyError is returned if we did not find the key in the host key +// database, or there was a mismatch. Typically, in batch +// applications, this should be interpreted as failure. Interactive +// applications can offer an interactive prompt to the user. +type KeyError struct { + // Want holds the accepted host keys. For each key algorithm, + // there can be one hostkey. If Want is empty, the host is + // unknown. If Want is non-empty, there was a mismatch, which + // can signify a MITM attack. + Want []KnownKey +} + +func (u *KeyError) Error() string { + if len(u.Want) == 0 { + return "knownhosts: key is unknown" + } + return "knownhosts: key mismatch" +} + +// RevokedError is returned if we found a key that was revoked. +type RevokedError struct { + Revoked KnownKey +} + +func (r *RevokedError) Error() string { + return "knownhosts: key is revoked" +} + +// check checks a key against the host database. This should not be +// used for verifying certificates. +func (db *hostKeyDB) check(address string, remote net.Addr, remoteKey ssh.PublicKey) error { + if revoked := db.revoked[string(remoteKey.Marshal())]; revoked != nil { + return &RevokedError{Revoked: *revoked} + } + + host, port, err := net.SplitHostPort(remote.String()) + if err != nil { + return fmt.Errorf("knownhosts: SplitHostPort(%s): %v", remote, err) + } + + addrs := []addr{ + {host, port}, + } + + if address != "" { + host, port, err := net.SplitHostPort(address) + if err != nil { + return fmt.Errorf("knownhosts: SplitHostPort(%s): %v", address, err) + } + + addrs = append(addrs, addr{host, port}) + } + + return db.checkAddrs(addrs, remoteKey) +} + +// checkAddrs checks if we can find the given public key for any of +// the given addresses. If we only find an entry for the IP address, +// or only the hostname, then this still succeeds. +func (db *hostKeyDB) checkAddrs(addrs []addr, remoteKey ssh.PublicKey) error { + // TODO(hanwen): are these the right semantics? What if there + // is just a key for the IP address, but not for the + // hostname? + + // Algorithm => key. + knownKeys := map[string]KnownKey{} + for _, l := range db.lines { + if l.match(addrs) { + typ := l.knownKey.Key.Type() + if _, ok := knownKeys[typ]; !ok { + knownKeys[typ] = l.knownKey + } + } + } + + keyErr := &KeyError{} + for _, v := range knownKeys { + keyErr.Want = append(keyErr.Want, v) + } + + // Unknown remote host. + if len(knownKeys) == 0 { + return keyErr + } + + // If the remote host starts using a different, unknown key type, we + // also interpret that as a mismatch. + if known, ok := knownKeys[remoteKey.Type()]; !ok || !keyEq(known.Key, remoteKey) { + return keyErr + } + + return nil +} + +// The Read function parses file contents. +func (db *hostKeyDB) Read(r io.Reader, filename string) error { + scanner := bufio.NewScanner(r) + + lineNum := 0 + for scanner.Scan() { + lineNum++ + line := scanner.Bytes() + line = bytes.TrimSpace(line) + if len(line) == 0 || line[0] == '#' { + continue + } + + if err := db.parseLine(line, filename, lineNum); err != nil { + return fmt.Errorf("knownhosts: %s:%d: %v", filename, lineNum, err) + } + } + return scanner.Err() +} + +// New creates a host key callback from the given OpenSSH host key +// files. The returned callback is for use in +// ssh.ClientConfig.HostKeyCallback. Hashed hostnames are not supported. +func New(files ...string) (ssh.HostKeyCallback, error) { + db := newHostKeyDB() + for _, fn := range files { + f, err := os.Open(fn) + if err != nil { + return nil, err + } + defer f.Close() + if err := db.Read(f, fn); err != nil { + return nil, err + } + } + + var certChecker ssh.CertChecker + certChecker.IsHostAuthority = db.IsHostAuthority + certChecker.IsRevoked = db.IsRevoked + certChecker.HostKeyFallback = db.check + + return certChecker.CheckHostKey, nil +} + +// Normalize normalizes an address into the form used in known_hosts +func Normalize(address string) string { + host, port, err := net.SplitHostPort(address) + if err != nil { + host = address + port = "22" + } + entry := host + if port != "22" { + entry = "[" + entry + "]:" + port + } else if strings.Contains(host, ":") && !strings.HasPrefix(host, "[") { + entry = "[" + entry + "]" + } + return entry +} + +// Line returns a line to add append to the known_hosts files. +func Line(addresses []string, key ssh.PublicKey) string { + var trimmed []string + for _, a := range addresses { + trimmed = append(trimmed, Normalize(a)) + } + + return strings.Join(trimmed, ",") + " " + serialize(key) +} + +// HashHostname hashes the given hostname. The hostname is not +// normalized before hashing. +func HashHostname(hostname string) string { + // TODO(hanwen): check if we can safely normalize this always. + salt := make([]byte, sha1.Size) + + _, err := rand.Read(salt) + if err != nil { + panic(fmt.Sprintf("crypto/rand failure %v", err)) + } + + hash := hashHost(hostname, salt) + return encodeHash(sha1HashType, salt, hash) +} + +func decodeHash(encoded string) (hashType string, salt, hash []byte, err error) { + if len(encoded) == 0 || encoded[0] != '|' { + err = errors.New("knownhosts: hashed host must start with '|'") + return + } + components := strings.Split(encoded, "|") + if len(components) != 4 { + err = fmt.Errorf("knownhosts: got %d components, want 3", len(components)) + return + } + + hashType = components[1] + if salt, err = base64.StdEncoding.DecodeString(components[2]); err != nil { + return + } + if hash, err = base64.StdEncoding.DecodeString(components[3]); err != nil { + return + } + return +} + +func encodeHash(typ string, salt []byte, hash []byte) string { + return strings.Join([]string{"", + typ, + base64.StdEncoding.EncodeToString(salt), + base64.StdEncoding.EncodeToString(hash), + }, "|") +} + +// See https://android.googlesource.com/platform/external/openssh/+/ab28f5495c85297e7a597c1ba62e996416da7c7e/hostfile.c#120 +func hashHost(hostname string, salt []byte) []byte { + mac := hmac.New(sha1.New, salt) + mac.Write([]byte(hostname)) + return mac.Sum(nil) +} + +type hashedHost struct { + salt []byte + hash []byte +} + +const sha1HashType = "1" + +func newHashedHost(encoded string) (*hashedHost, error) { + typ, salt, hash, err := decodeHash(encoded) + if err != nil { + return nil, err + } + + // The type field seems for future algorithm agility, but it's + // actually hardcoded in openssh currently, see + // https://android.googlesource.com/platform/external/openssh/+/ab28f5495c85297e7a597c1ba62e996416da7c7e/hostfile.c#120 + if typ != sha1HashType { + return nil, fmt.Errorf("knownhosts: got hash type %s, must be '1'", typ) + } + + return &hashedHost{salt: salt, hash: hash}, nil +} + +func (h *hashedHost) match(addrs []addr) bool { + for _, a := range addrs { + if bytes.Equal(hashHost(Normalize(a.String()), h.salt), h.hash) { + return true + } + } + return false +} diff --git a/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts_test.go b/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts_test.go new file mode 100644 index 0000000..be7cc0e --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/knownhosts/knownhosts_test.go @@ -0,0 +1,329 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package knownhosts + +import ( + "bytes" + "fmt" + "net" + "reflect" + "testing" + + "golang.org/x/crypto/ssh" +) + +const edKeyStr = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGBAarftlLeoyf+v+nVchEZII/vna2PCV8FaX4vsF5BX" +const alternateEdKeyStr = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIXffBYeYL+WVzVru8npl5JHt2cjlr4ornFTWzoij9sx" +const ecKeyStr = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNLCu01+wpXe3xB5olXCN4SqU2rQu0qjSRKJO4Bg+JRCPU+ENcgdA5srTU8xYDz/GEa4dzK5ldPw4J/gZgSXCMs=" + +var ecKey, alternateEdKey, edKey ssh.PublicKey +var testAddr = &net.TCPAddr{ + IP: net.IP{198, 41, 30, 196}, + Port: 22, +} + +var testAddr6 = &net.TCPAddr{ + IP: net.IP{198, 41, 30, 196, + 1, 2, 3, 4, + 1, 2, 3, 4, + 1, 2, 3, 4, + }, + Port: 22, +} + +func init() { + var err error + ecKey, _, _, _, err = ssh.ParseAuthorizedKey([]byte(ecKeyStr)) + if err != nil { + panic(err) + } + edKey, _, _, _, err = ssh.ParseAuthorizedKey([]byte(edKeyStr)) + if err != nil { + panic(err) + } + alternateEdKey, _, _, _, err = ssh.ParseAuthorizedKey([]byte(alternateEdKeyStr)) + if err != nil { + panic(err) + } +} + +func testDB(t *testing.T, s string) *hostKeyDB { + db := newHostKeyDB() + if err := db.Read(bytes.NewBufferString(s), "testdb"); err != nil { + t.Fatalf("Read: %v", err) + } + + return db +} + +func TestRevoked(t *testing.T) { + db := testDB(t, "\n\n@revoked * "+edKeyStr+"\n") + want := &RevokedError{ + Revoked: KnownKey{ + Key: edKey, + Filename: "testdb", + Line: 3, + }, + } + if err := db.check("", &net.TCPAddr{ + Port: 42, + }, edKey); err == nil { + t.Fatal("no error for revoked key") + } else if !reflect.DeepEqual(want, err) { + t.Fatalf("got %#v, want %#v", want, err) + } +} + +func TestHostAuthority(t *testing.T) { + for _, m := range []struct { + authorityFor string + address string + + good bool + }{ + {authorityFor: "localhost", address: "localhost:22", good: true}, + {authorityFor: "localhost", address: "localhost", good: false}, + {authorityFor: "localhost", address: "localhost:1234", good: false}, + {authorityFor: "[localhost]:1234", address: "localhost:1234", good: true}, + {authorityFor: "[localhost]:1234", address: "localhost:22", good: false}, + {authorityFor: "[localhost]:1234", address: "localhost", good: false}, + } { + db := testDB(t, `@cert-authority `+m.authorityFor+` `+edKeyStr) + if ok := db.IsHostAuthority(db.lines[0].knownKey.Key, m.address); ok != m.good { + t.Errorf("IsHostAuthority: authority %s, address %s, wanted good = %v, got good = %v", + m.authorityFor, m.address, m.good, ok) + } + } +} + +func TestBracket(t *testing.T) { + db := testDB(t, `[git.eclipse.org]:29418,[198.41.30.196]:29418 `+edKeyStr) + + if err := db.check("git.eclipse.org:29418", &net.TCPAddr{ + IP: net.IP{198, 41, 30, 196}, + Port: 29418, + }, edKey); err != nil { + t.Errorf("got error %v, want none", err) + } + + if err := db.check("git.eclipse.org:29419", &net.TCPAddr{ + Port: 42, + }, edKey); err == nil { + t.Fatalf("no error for unknown address") + } else if ke, ok := err.(*KeyError); !ok { + t.Fatalf("got type %T, want *KeyError", err) + } else if len(ke.Want) > 0 { + t.Fatalf("got Want %v, want []", ke.Want) + } +} + +func TestNewKeyType(t *testing.T) { + str := fmt.Sprintf("%s %s", testAddr, edKeyStr) + db := testDB(t, str) + if err := db.check("", testAddr, ecKey); err == nil { + t.Fatalf("no error for unknown address") + } else if ke, ok := err.(*KeyError); !ok { + t.Fatalf("got type %T, want *KeyError", err) + } else if len(ke.Want) == 0 { + t.Fatalf("got empty KeyError.Want") + } +} + +func TestSameKeyType(t *testing.T) { + str := fmt.Sprintf("%s %s", testAddr, edKeyStr) + db := testDB(t, str) + if err := db.check("", testAddr, alternateEdKey); err == nil { + t.Fatalf("no error for unknown address") + } else if ke, ok := err.(*KeyError); !ok { + t.Fatalf("got type %T, want *KeyError", err) + } else if len(ke.Want) == 0 { + t.Fatalf("got empty KeyError.Want") + } else if got, want := ke.Want[0].Key.Marshal(), edKey.Marshal(); !bytes.Equal(got, want) { + t.Fatalf("got key %q, want %q", got, want) + } +} + +func TestIPAddress(t *testing.T) { + str := fmt.Sprintf("%s %s", testAddr, edKeyStr) + db := testDB(t, str) + if err := db.check("", testAddr, edKey); err != nil { + t.Errorf("got error %q, want none", err) + } +} + +func TestIPv6Address(t *testing.T) { + str := fmt.Sprintf("%s %s", testAddr6, edKeyStr) + db := testDB(t, str) + + if err := db.check("", testAddr6, edKey); err != nil { + t.Errorf("got error %q, want none", err) + } +} + +func TestBasic(t *testing.T) { + str := fmt.Sprintf("#comment\n\nserver.org,%s %s\notherhost %s", testAddr, edKeyStr, ecKeyStr) + db := testDB(t, str) + if err := db.check("server.org:22", testAddr, edKey); err != nil { + t.Errorf("got error %q, want none", err) + } + + want := KnownKey{ + Key: edKey, + Filename: "testdb", + Line: 3, + } + if err := db.check("server.org:22", testAddr, ecKey); err == nil { + t.Errorf("succeeded, want KeyError") + } else if ke, ok := err.(*KeyError); !ok { + t.Errorf("got %T, want *KeyError", err) + } else if len(ke.Want) != 1 { + t.Errorf("got %v, want 1 entry", ke) + } else if !reflect.DeepEqual(ke.Want[0], want) { + t.Errorf("got %v, want %v", ke.Want[0], want) + } +} + +func TestNegate(t *testing.T) { + str := fmt.Sprintf("%s,!server.org %s", testAddr, edKeyStr) + db := testDB(t, str) + if err := db.check("server.org:22", testAddr, ecKey); err == nil { + t.Errorf("succeeded") + } else if ke, ok := err.(*KeyError); !ok { + t.Errorf("got error type %T, want *KeyError", err) + } else if len(ke.Want) != 0 { + t.Errorf("got expected keys %d (first of type %s), want []", len(ke.Want), ke.Want[0].Key.Type()) + } +} + +func TestWildcard(t *testing.T) { + str := fmt.Sprintf("server*.domain %s", edKeyStr) + db := testDB(t, str) + + want := &KeyError{ + Want: []KnownKey{{ + Filename: "testdb", + Line: 1, + Key: edKey, + }}, + } + + got := db.check("server.domain:22", &net.TCPAddr{}, ecKey) + if !reflect.DeepEqual(got, want) { + t.Errorf("got %s, want %s", got, want) + } +} + +func TestLine(t *testing.T) { + for in, want := range map[string]string{ + "server.org": "server.org " + edKeyStr, + "server.org:22": "server.org " + edKeyStr, + "server.org:23": "[server.org]:23 " + edKeyStr, + "[c629:1ec4:102:304:102:304:102:304]:22": "[c629:1ec4:102:304:102:304:102:304] " + edKeyStr, + "[c629:1ec4:102:304:102:304:102:304]:23": "[c629:1ec4:102:304:102:304:102:304]:23 " + edKeyStr, + } { + if got := Line([]string{in}, edKey); got != want { + t.Errorf("Line(%q) = %q, want %q", in, got, want) + } + } +} + +func TestWildcardMatch(t *testing.T) { + for _, c := range []struct { + pat, str string + want bool + }{ + {"a?b", "abb", true}, + {"ab", "abc", false}, + {"abc", "ab", false}, + {"a*b", "axxxb", true}, + {"a*b", "axbxb", true}, + {"a*b", "axbxbc", false}, + {"a*?", "axbxc", true}, + {"a*b*", "axxbxxxxxx", true}, + {"a*b*c", "axxbxxxxxxc", true}, + {"a*b*?", "axxbxxxxxxc", true}, + {"a*b*z", "axxbxxbxxxz", true}, + {"a*b*z", "axxbxxzxxxz", true}, + {"a*b*z", "axxbxxzxxx", false}, + } { + got := wildcardMatch([]byte(c.pat), []byte(c.str)) + if got != c.want { + t.Errorf("wildcardMatch(%q, %q) = %v, want %v", c.pat, c.str, got, c.want) + } + + } +} + +// TODO(hanwen): test coverage for certificates. + +const testHostname = "hostname" + +// generated with keygen -H -f +const encodedTestHostnameHash = "|1|IHXZvQMvTcZTUU29+2vXFgx8Frs=|UGccIWfRVDwilMBnA3WJoRAC75Y=" + +func TestHostHash(t *testing.T) { + testHostHash(t, testHostname, encodedTestHostnameHash) +} + +func TestHashList(t *testing.T) { + encoded := HashHostname(testHostname) + testHostHash(t, testHostname, encoded) +} + +func testHostHash(t *testing.T, hostname, encoded string) { + typ, salt, hash, err := decodeHash(encoded) + if err != nil { + t.Fatalf("decodeHash: %v", err) + } + + if got := encodeHash(typ, salt, hash); got != encoded { + t.Errorf("got encoding %s want %s", got, encoded) + } + + if typ != sha1HashType { + t.Fatalf("got hash type %q, want %q", typ, sha1HashType) + } + + got := hashHost(hostname, salt) + if !bytes.Equal(got, hash) { + t.Errorf("got hash %x want %x", got, hash) + } +} + +func TestNormalize(t *testing.T) { + for in, want := range map[string]string{ + "127.0.0.1:22": "127.0.0.1", + "[127.0.0.1]:22": "127.0.0.1", + "[127.0.0.1]:23": "[127.0.0.1]:23", + "127.0.0.1:23": "[127.0.0.1]:23", + "[a.b.c]:22": "a.b.c", + "[abcd:abcd:abcd:abcd]": "[abcd:abcd:abcd:abcd]", + "[abcd:abcd:abcd:abcd]:22": "[abcd:abcd:abcd:abcd]", + "[abcd:abcd:abcd:abcd]:23": "[abcd:abcd:abcd:abcd]:23", + } { + got := Normalize(in) + if got != want { + t.Errorf("Normalize(%q) = %q, want %q", in, got, want) + } + } +} + +func TestHashedHostkeyCheck(t *testing.T) { + str := fmt.Sprintf("%s %s", HashHostname(testHostname), edKeyStr) + db := testDB(t, str) + if err := db.check(testHostname+":22", testAddr, edKey); err != nil { + t.Errorf("check(%s): %v", testHostname, err) + } + want := &KeyError{ + Want: []KnownKey{{ + Filename: "testdb", + Line: 1, + Key: edKey, + }}, + } + if got := db.check(testHostname+":22", testAddr, alternateEdKey); !reflect.DeepEqual(got, want) { + t.Errorf("got error %v, want %v", got, want) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/mac.go b/vendor/golang.org/x/crypto/ssh/mac.go new file mode 100644 index 0000000..c07a062 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mac.go @@ -0,0 +1,61 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +// Message authentication support + +import ( + "crypto/hmac" + "crypto/sha1" + "crypto/sha256" + "hash" +) + +type macMode struct { + keySize int + etm bool + new func(key []byte) hash.Hash +} + +// truncatingMAC wraps around a hash.Hash and truncates the output digest to +// a given size. +type truncatingMAC struct { + length int + hmac hash.Hash +} + +func (t truncatingMAC) Write(data []byte) (int, error) { + return t.hmac.Write(data) +} + +func (t truncatingMAC) Sum(in []byte) []byte { + out := t.hmac.Sum(in) + return out[:len(in)+t.length] +} + +func (t truncatingMAC) Reset() { + t.hmac.Reset() +} + +func (t truncatingMAC) Size() int { + return t.length +} + +func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() } + +var macModes = map[string]*macMode{ + "hmac-sha2-256-etm@openssh.com": {32, true, func(key []byte) hash.Hash { + return hmac.New(sha256.New, key) + }}, + "hmac-sha2-256": {32, false, func(key []byte) hash.Hash { + return hmac.New(sha256.New, key) + }}, + "hmac-sha1": {20, false, func(key []byte) hash.Hash { + return hmac.New(sha1.New, key) + }}, + "hmac-sha1-96": {20, false, func(key []byte) hash.Hash { + return truncatingMAC{12, hmac.New(sha1.New, key)} + }}, +} diff --git a/vendor/golang.org/x/crypto/ssh/mempipe_test.go b/vendor/golang.org/x/crypto/ssh/mempipe_test.go new file mode 100644 index 0000000..8697cd6 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mempipe_test.go @@ -0,0 +1,110 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "io" + "sync" + "testing" +) + +// An in-memory packetConn. It is safe to call Close and writePacket +// from different goroutines. +type memTransport struct { + eof bool + pending [][]byte + write *memTransport + sync.Mutex + *sync.Cond +} + +func (t *memTransport) readPacket() ([]byte, error) { + t.Lock() + defer t.Unlock() + for { + if len(t.pending) > 0 { + r := t.pending[0] + t.pending = t.pending[1:] + return r, nil + } + if t.eof { + return nil, io.EOF + } + t.Cond.Wait() + } +} + +func (t *memTransport) closeSelf() error { + t.Lock() + defer t.Unlock() + if t.eof { + return io.EOF + } + t.eof = true + t.Cond.Broadcast() + return nil +} + +func (t *memTransport) Close() error { + err := t.write.closeSelf() + t.closeSelf() + return err +} + +func (t *memTransport) writePacket(p []byte) error { + t.write.Lock() + defer t.write.Unlock() + if t.write.eof { + return io.EOF + } + c := make([]byte, len(p)) + copy(c, p) + t.write.pending = append(t.write.pending, c) + t.write.Cond.Signal() + return nil +} + +func memPipe() (a, b packetConn) { + t1 := memTransport{} + t2 := memTransport{} + t1.write = &t2 + t2.write = &t1 + t1.Cond = sync.NewCond(&t1.Mutex) + t2.Cond = sync.NewCond(&t2.Mutex) + return &t1, &t2 +} + +func TestMemPipe(t *testing.T) { + a, b := memPipe() + if err := a.writePacket([]byte{42}); err != nil { + t.Fatalf("writePacket: %v", err) + } + if err := a.Close(); err != nil { + t.Fatal("Close: ", err) + } + p, err := b.readPacket() + if err != nil { + t.Fatal("readPacket: ", err) + } + if len(p) != 1 || p[0] != 42 { + t.Fatalf("got %v, want {42}", p) + } + p, err = b.readPacket() + if err != io.EOF { + t.Fatalf("got %v, %v, want EOF", p, err) + } +} + +func TestDoubleClose(t *testing.T) { + a, _ := memPipe() + err := a.Close() + if err != nil { + t.Errorf("Close: %v", err) + } + err = a.Close() + if err != io.EOF { + t.Errorf("expect EOF on double close.") + } +} diff --git a/vendor/golang.org/x/crypto/ssh/messages.go b/vendor/golang.org/x/crypto/ssh/messages.go new file mode 100644 index 0000000..e6ecd3a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/messages.go @@ -0,0 +1,758 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "io" + "math/big" + "reflect" + "strconv" + "strings" +) + +// These are SSH message type numbers. They are scattered around several +// documents but many were taken from [SSH-PARAMETERS]. +const ( + msgIgnore = 2 + msgUnimplemented = 3 + msgDebug = 4 + msgNewKeys = 21 + + // Standard authentication messages + msgUserAuthSuccess = 52 + msgUserAuthBanner = 53 +) + +// SSH messages: +// +// These structures mirror the wire format of the corresponding SSH messages. +// They are marshaled using reflection with the marshal and unmarshal functions +// in this file. The only wrinkle is that a final member of type []byte with a +// ssh tag of "rest" receives the remainder of a packet when unmarshaling. + +// See RFC 4253, section 11.1. +const msgDisconnect = 1 + +// disconnectMsg is the message that signals a disconnect. It is also +// the error type returned from mux.Wait() +type disconnectMsg struct { + Reason uint32 `sshtype:"1"` + Message string + Language string +} + +func (d *disconnectMsg) Error() string { + return fmt.Sprintf("ssh: disconnect, reason %d: %s", d.Reason, d.Message) +} + +// See RFC 4253, section 7.1. +const msgKexInit = 20 + +type kexInitMsg struct { + Cookie [16]byte `sshtype:"20"` + KexAlgos []string + ServerHostKeyAlgos []string + CiphersClientServer []string + CiphersServerClient []string + MACsClientServer []string + MACsServerClient []string + CompressionClientServer []string + CompressionServerClient []string + LanguagesClientServer []string + LanguagesServerClient []string + FirstKexFollows bool + Reserved uint32 +} + +// See RFC 4253, section 8. + +// Diffie-Helman +const msgKexDHInit = 30 + +type kexDHInitMsg struct { + X *big.Int `sshtype:"30"` +} + +const msgKexECDHInit = 30 + +type kexECDHInitMsg struct { + ClientPubKey []byte `sshtype:"30"` +} + +const msgKexECDHReply = 31 + +type kexECDHReplyMsg struct { + HostKey []byte `sshtype:"31"` + EphemeralPubKey []byte + Signature []byte +} + +const msgKexDHReply = 31 + +type kexDHReplyMsg struct { + HostKey []byte `sshtype:"31"` + Y *big.Int + Signature []byte +} + +// See RFC 4253, section 10. +const msgServiceRequest = 5 + +type serviceRequestMsg struct { + Service string `sshtype:"5"` +} + +// See RFC 4253, section 10. +const msgServiceAccept = 6 + +type serviceAcceptMsg struct { + Service string `sshtype:"6"` +} + +// See RFC 4252, section 5. +const msgUserAuthRequest = 50 + +type userAuthRequestMsg struct { + User string `sshtype:"50"` + Service string + Method string + Payload []byte `ssh:"rest"` +} + +// Used for debug printouts of packets. +type userAuthSuccessMsg struct { +} + +// See RFC 4252, section 5.1 +const msgUserAuthFailure = 51 + +type userAuthFailureMsg struct { + Methods []string `sshtype:"51"` + PartialSuccess bool +} + +// See RFC 4256, section 3.2 +const msgUserAuthInfoRequest = 60 +const msgUserAuthInfoResponse = 61 + +type userAuthInfoRequestMsg struct { + User string `sshtype:"60"` + Instruction string + DeprecatedLanguage string + NumPrompts uint32 + Prompts []byte `ssh:"rest"` +} + +// See RFC 4254, section 5.1. +const msgChannelOpen = 90 + +type channelOpenMsg struct { + ChanType string `sshtype:"90"` + PeersId uint32 + PeersWindow uint32 + MaxPacketSize uint32 + TypeSpecificData []byte `ssh:"rest"` +} + +const msgChannelExtendedData = 95 +const msgChannelData = 94 + +// Used for debug print outs of packets. +type channelDataMsg struct { + PeersId uint32 `sshtype:"94"` + Length uint32 + Rest []byte `ssh:"rest"` +} + +// See RFC 4254, section 5.1. +const msgChannelOpenConfirm = 91 + +type channelOpenConfirmMsg struct { + PeersId uint32 `sshtype:"91"` + MyId uint32 + MyWindow uint32 + MaxPacketSize uint32 + TypeSpecificData []byte `ssh:"rest"` +} + +// See RFC 4254, section 5.1. +const msgChannelOpenFailure = 92 + +type channelOpenFailureMsg struct { + PeersId uint32 `sshtype:"92"` + Reason RejectionReason + Message string + Language string +} + +const msgChannelRequest = 98 + +type channelRequestMsg struct { + PeersId uint32 `sshtype:"98"` + Request string + WantReply bool + RequestSpecificData []byte `ssh:"rest"` +} + +// See RFC 4254, section 5.4. +const msgChannelSuccess = 99 + +type channelRequestSuccessMsg struct { + PeersId uint32 `sshtype:"99"` +} + +// See RFC 4254, section 5.4. +const msgChannelFailure = 100 + +type channelRequestFailureMsg struct { + PeersId uint32 `sshtype:"100"` +} + +// See RFC 4254, section 5.3 +const msgChannelClose = 97 + +type channelCloseMsg struct { + PeersId uint32 `sshtype:"97"` +} + +// See RFC 4254, section 5.3 +const msgChannelEOF = 96 + +type channelEOFMsg struct { + PeersId uint32 `sshtype:"96"` +} + +// See RFC 4254, section 4 +const msgGlobalRequest = 80 + +type globalRequestMsg struct { + Type string `sshtype:"80"` + WantReply bool + Data []byte `ssh:"rest"` +} + +// See RFC 4254, section 4 +const msgRequestSuccess = 81 + +type globalRequestSuccessMsg struct { + Data []byte `ssh:"rest" sshtype:"81"` +} + +// See RFC 4254, section 4 +const msgRequestFailure = 82 + +type globalRequestFailureMsg struct { + Data []byte `ssh:"rest" sshtype:"82"` +} + +// See RFC 4254, section 5.2 +const msgChannelWindowAdjust = 93 + +type windowAdjustMsg struct { + PeersId uint32 `sshtype:"93"` + AdditionalBytes uint32 +} + +// See RFC 4252, section 7 +const msgUserAuthPubKeyOk = 60 + +type userAuthPubKeyOkMsg struct { + Algo string `sshtype:"60"` + PubKey []byte +} + +// typeTags returns the possible type bytes for the given reflect.Type, which +// should be a struct. The possible values are separated by a '|' character. +func typeTags(structType reflect.Type) (tags []byte) { + tagStr := structType.Field(0).Tag.Get("sshtype") + + for _, tag := range strings.Split(tagStr, "|") { + i, err := strconv.Atoi(tag) + if err == nil { + tags = append(tags, byte(i)) + } + } + + return tags +} + +func fieldError(t reflect.Type, field int, problem string) error { + if problem != "" { + problem = ": " + problem + } + return fmt.Errorf("ssh: unmarshal error for field %s of type %s%s", t.Field(field).Name, t.Name(), problem) +} + +var errShortRead = errors.New("ssh: short read") + +// Unmarshal parses data in SSH wire format into a structure. The out +// argument should be a pointer to struct. If the first member of the +// struct has the "sshtype" tag set to a '|'-separated set of numbers +// in decimal, the packet must start with one of those numbers. In +// case of error, Unmarshal returns a ParseError or +// UnexpectedMessageError. +func Unmarshal(data []byte, out interface{}) error { + v := reflect.ValueOf(out).Elem() + structType := v.Type() + expectedTypes := typeTags(structType) + + var expectedType byte + if len(expectedTypes) > 0 { + expectedType = expectedTypes[0] + } + + if len(data) == 0 { + return parseError(expectedType) + } + + if len(expectedTypes) > 0 { + goodType := false + for _, e := range expectedTypes { + if e > 0 && data[0] == e { + goodType = true + break + } + } + if !goodType { + return fmt.Errorf("ssh: unexpected message type %d (expected one of %v)", data[0], expectedTypes) + } + data = data[1:] + } + + var ok bool + for i := 0; i < v.NumField(); i++ { + field := v.Field(i) + t := field.Type() + switch t.Kind() { + case reflect.Bool: + if len(data) < 1 { + return errShortRead + } + field.SetBool(data[0] != 0) + data = data[1:] + case reflect.Array: + if t.Elem().Kind() != reflect.Uint8 { + return fieldError(structType, i, "array of unsupported type") + } + if len(data) < t.Len() { + return errShortRead + } + for j, n := 0, t.Len(); j < n; j++ { + field.Index(j).Set(reflect.ValueOf(data[j])) + } + data = data[t.Len():] + case reflect.Uint64: + var u64 uint64 + if u64, data, ok = parseUint64(data); !ok { + return errShortRead + } + field.SetUint(u64) + case reflect.Uint32: + var u32 uint32 + if u32, data, ok = parseUint32(data); !ok { + return errShortRead + } + field.SetUint(uint64(u32)) + case reflect.Uint8: + if len(data) < 1 { + return errShortRead + } + field.SetUint(uint64(data[0])) + data = data[1:] + case reflect.String: + var s []byte + if s, data, ok = parseString(data); !ok { + return fieldError(structType, i, "") + } + field.SetString(string(s)) + case reflect.Slice: + switch t.Elem().Kind() { + case reflect.Uint8: + if structType.Field(i).Tag.Get("ssh") == "rest" { + field.Set(reflect.ValueOf(data)) + data = nil + } else { + var s []byte + if s, data, ok = parseString(data); !ok { + return errShortRead + } + field.Set(reflect.ValueOf(s)) + } + case reflect.String: + var nl []string + if nl, data, ok = parseNameList(data); !ok { + return errShortRead + } + field.Set(reflect.ValueOf(nl)) + default: + return fieldError(structType, i, "slice of unsupported type") + } + case reflect.Ptr: + if t == bigIntType { + var n *big.Int + if n, data, ok = parseInt(data); !ok { + return errShortRead + } + field.Set(reflect.ValueOf(n)) + } else { + return fieldError(structType, i, "pointer to unsupported type") + } + default: + return fieldError(structType, i, fmt.Sprintf("unsupported type: %v", t)) + } + } + + if len(data) != 0 { + return parseError(expectedType) + } + + return nil +} + +// Marshal serializes the message in msg to SSH wire format. The msg +// argument should be a struct or pointer to struct. If the first +// member has the "sshtype" tag set to a number in decimal, that +// number is prepended to the result. If the last of member has the +// "ssh" tag set to "rest", its contents are appended to the output. +func Marshal(msg interface{}) []byte { + out := make([]byte, 0, 64) + return marshalStruct(out, msg) +} + +func marshalStruct(out []byte, msg interface{}) []byte { + v := reflect.Indirect(reflect.ValueOf(msg)) + msgTypes := typeTags(v.Type()) + if len(msgTypes) > 0 { + out = append(out, msgTypes[0]) + } + + for i, n := 0, v.NumField(); i < n; i++ { + field := v.Field(i) + switch t := field.Type(); t.Kind() { + case reflect.Bool: + var v uint8 + if field.Bool() { + v = 1 + } + out = append(out, v) + case reflect.Array: + if t.Elem().Kind() != reflect.Uint8 { + panic(fmt.Sprintf("array of non-uint8 in field %d: %T", i, field.Interface())) + } + for j, l := 0, t.Len(); j < l; j++ { + out = append(out, uint8(field.Index(j).Uint())) + } + case reflect.Uint32: + out = appendU32(out, uint32(field.Uint())) + case reflect.Uint64: + out = appendU64(out, uint64(field.Uint())) + case reflect.Uint8: + out = append(out, uint8(field.Uint())) + case reflect.String: + s := field.String() + out = appendInt(out, len(s)) + out = append(out, s...) + case reflect.Slice: + switch t.Elem().Kind() { + case reflect.Uint8: + if v.Type().Field(i).Tag.Get("ssh") != "rest" { + out = appendInt(out, field.Len()) + } + out = append(out, field.Bytes()...) + case reflect.String: + offset := len(out) + out = appendU32(out, 0) + if n := field.Len(); n > 0 { + for j := 0; j < n; j++ { + f := field.Index(j) + if j != 0 { + out = append(out, ',') + } + out = append(out, f.String()...) + } + // overwrite length value + binary.BigEndian.PutUint32(out[offset:], uint32(len(out)-offset-4)) + } + default: + panic(fmt.Sprintf("slice of unknown type in field %d: %T", i, field.Interface())) + } + case reflect.Ptr: + if t == bigIntType { + var n *big.Int + nValue := reflect.ValueOf(&n) + nValue.Elem().Set(field) + needed := intLength(n) + oldLength := len(out) + + if cap(out)-len(out) < needed { + newOut := make([]byte, len(out), 2*(len(out)+needed)) + copy(newOut, out) + out = newOut + } + out = out[:oldLength+needed] + marshalInt(out[oldLength:], n) + } else { + panic(fmt.Sprintf("pointer to unknown type in field %d: %T", i, field.Interface())) + } + } + } + + return out +} + +var bigOne = big.NewInt(1) + +func parseString(in []byte) (out, rest []byte, ok bool) { + if len(in) < 4 { + return + } + length := binary.BigEndian.Uint32(in) + in = in[4:] + if uint32(len(in)) < length { + return + } + out = in[:length] + rest = in[length:] + ok = true + return +} + +var ( + comma = []byte{','} + emptyNameList = []string{} +) + +func parseNameList(in []byte) (out []string, rest []byte, ok bool) { + contents, rest, ok := parseString(in) + if !ok { + return + } + if len(contents) == 0 { + out = emptyNameList + return + } + parts := bytes.Split(contents, comma) + out = make([]string, len(parts)) + for i, part := range parts { + out[i] = string(part) + } + return +} + +func parseInt(in []byte) (out *big.Int, rest []byte, ok bool) { + contents, rest, ok := parseString(in) + if !ok { + return + } + out = new(big.Int) + + if len(contents) > 0 && contents[0]&0x80 == 0x80 { + // This is a negative number + notBytes := make([]byte, len(contents)) + for i := range notBytes { + notBytes[i] = ^contents[i] + } + out.SetBytes(notBytes) + out.Add(out, bigOne) + out.Neg(out) + } else { + // Positive number + out.SetBytes(contents) + } + ok = true + return +} + +func parseUint32(in []byte) (uint32, []byte, bool) { + if len(in) < 4 { + return 0, nil, false + } + return binary.BigEndian.Uint32(in), in[4:], true +} + +func parseUint64(in []byte) (uint64, []byte, bool) { + if len(in) < 8 { + return 0, nil, false + } + return binary.BigEndian.Uint64(in), in[8:], true +} + +func intLength(n *big.Int) int { + length := 4 /* length bytes */ + if n.Sign() < 0 { + nMinus1 := new(big.Int).Neg(n) + nMinus1.Sub(nMinus1, bigOne) + bitLen := nMinus1.BitLen() + if bitLen%8 == 0 { + // The number will need 0xff padding + length++ + } + length += (bitLen + 7) / 8 + } else if n.Sign() == 0 { + // A zero is the zero length string + } else { + bitLen := n.BitLen() + if bitLen%8 == 0 { + // The number will need 0x00 padding + length++ + } + length += (bitLen + 7) / 8 + } + + return length +} + +func marshalUint32(to []byte, n uint32) []byte { + binary.BigEndian.PutUint32(to, n) + return to[4:] +} + +func marshalUint64(to []byte, n uint64) []byte { + binary.BigEndian.PutUint64(to, n) + return to[8:] +} + +func marshalInt(to []byte, n *big.Int) []byte { + lengthBytes := to + to = to[4:] + length := 0 + + if n.Sign() < 0 { + // A negative number has to be converted to two's-complement + // form. So we'll subtract 1 and invert. If the + // most-significant-bit isn't set then we'll need to pad the + // beginning with 0xff in order to keep the number negative. + nMinus1 := new(big.Int).Neg(n) + nMinus1.Sub(nMinus1, bigOne) + bytes := nMinus1.Bytes() + for i := range bytes { + bytes[i] ^= 0xff + } + if len(bytes) == 0 || bytes[0]&0x80 == 0 { + to[0] = 0xff + to = to[1:] + length++ + } + nBytes := copy(to, bytes) + to = to[nBytes:] + length += nBytes + } else if n.Sign() == 0 { + // A zero is the zero length string + } else { + bytes := n.Bytes() + if len(bytes) > 0 && bytes[0]&0x80 != 0 { + // We'll have to pad this with a 0x00 in order to + // stop it looking like a negative number. + to[0] = 0 + to = to[1:] + length++ + } + nBytes := copy(to, bytes) + to = to[nBytes:] + length += nBytes + } + + lengthBytes[0] = byte(length >> 24) + lengthBytes[1] = byte(length >> 16) + lengthBytes[2] = byte(length >> 8) + lengthBytes[3] = byte(length) + return to +} + +func writeInt(w io.Writer, n *big.Int) { + length := intLength(n) + buf := make([]byte, length) + marshalInt(buf, n) + w.Write(buf) +} + +func writeString(w io.Writer, s []byte) { + var lengthBytes [4]byte + lengthBytes[0] = byte(len(s) >> 24) + lengthBytes[1] = byte(len(s) >> 16) + lengthBytes[2] = byte(len(s) >> 8) + lengthBytes[3] = byte(len(s)) + w.Write(lengthBytes[:]) + w.Write(s) +} + +func stringLength(n int) int { + return 4 + n +} + +func marshalString(to []byte, s []byte) []byte { + to[0] = byte(len(s) >> 24) + to[1] = byte(len(s) >> 16) + to[2] = byte(len(s) >> 8) + to[3] = byte(len(s)) + to = to[4:] + copy(to, s) + return to[len(s):] +} + +var bigIntType = reflect.TypeOf((*big.Int)(nil)) + +// Decode a packet into its corresponding message. +func decode(packet []byte) (interface{}, error) { + var msg interface{} + switch packet[0] { + case msgDisconnect: + msg = new(disconnectMsg) + case msgServiceRequest: + msg = new(serviceRequestMsg) + case msgServiceAccept: + msg = new(serviceAcceptMsg) + case msgKexInit: + msg = new(kexInitMsg) + case msgKexDHInit: + msg = new(kexDHInitMsg) + case msgKexDHReply: + msg = new(kexDHReplyMsg) + case msgUserAuthRequest: + msg = new(userAuthRequestMsg) + case msgUserAuthSuccess: + return new(userAuthSuccessMsg), nil + case msgUserAuthFailure: + msg = new(userAuthFailureMsg) + case msgUserAuthPubKeyOk: + msg = new(userAuthPubKeyOkMsg) + case msgGlobalRequest: + msg = new(globalRequestMsg) + case msgRequestSuccess: + msg = new(globalRequestSuccessMsg) + case msgRequestFailure: + msg = new(globalRequestFailureMsg) + case msgChannelOpen: + msg = new(channelOpenMsg) + case msgChannelData: + msg = new(channelDataMsg) + case msgChannelOpenConfirm: + msg = new(channelOpenConfirmMsg) + case msgChannelOpenFailure: + msg = new(channelOpenFailureMsg) + case msgChannelWindowAdjust: + msg = new(windowAdjustMsg) + case msgChannelEOF: + msg = new(channelEOFMsg) + case msgChannelClose: + msg = new(channelCloseMsg) + case msgChannelRequest: + msg = new(channelRequestMsg) + case msgChannelSuccess: + msg = new(channelRequestSuccessMsg) + case msgChannelFailure: + msg = new(channelRequestFailureMsg) + default: + return nil, unexpectedMessageError(0, packet[0]) + } + if err := Unmarshal(packet, msg); err != nil { + return nil, err + } + return msg, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/messages_test.go b/vendor/golang.org/x/crypto/ssh/messages_test.go new file mode 100644 index 0000000..e790764 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/messages_test.go @@ -0,0 +1,288 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "math/big" + "math/rand" + "reflect" + "testing" + "testing/quick" +) + +var intLengthTests = []struct { + val, length int +}{ + {0, 4 + 0}, + {1, 4 + 1}, + {127, 4 + 1}, + {128, 4 + 2}, + {-1, 4 + 1}, +} + +func TestIntLength(t *testing.T) { + for _, test := range intLengthTests { + v := new(big.Int).SetInt64(int64(test.val)) + length := intLength(v) + if length != test.length { + t.Errorf("For %d, got length %d but expected %d", test.val, length, test.length) + } + } +} + +type msgAllTypes struct { + Bool bool `sshtype:"21"` + Array [16]byte + Uint64 uint64 + Uint32 uint32 + Uint8 uint8 + String string + Strings []string + Bytes []byte + Int *big.Int + Rest []byte `ssh:"rest"` +} + +func (t *msgAllTypes) Generate(rand *rand.Rand, size int) reflect.Value { + m := &msgAllTypes{} + m.Bool = rand.Intn(2) == 1 + randomBytes(m.Array[:], rand) + m.Uint64 = uint64(rand.Int63n(1<<63 - 1)) + m.Uint32 = uint32(rand.Intn((1 << 31) - 1)) + m.Uint8 = uint8(rand.Intn(1 << 8)) + m.String = string(m.Array[:]) + m.Strings = randomNameList(rand) + m.Bytes = m.Array[:] + m.Int = randomInt(rand) + m.Rest = m.Array[:] + return reflect.ValueOf(m) +} + +func TestMarshalUnmarshal(t *testing.T) { + rand := rand.New(rand.NewSource(0)) + iface := &msgAllTypes{} + ty := reflect.ValueOf(iface).Type() + + n := 100 + if testing.Short() { + n = 5 + } + for j := 0; j < n; j++ { + v, ok := quick.Value(ty, rand) + if !ok { + t.Errorf("failed to create value") + break + } + + m1 := v.Elem().Interface() + m2 := iface + + marshaled := Marshal(m1) + if err := Unmarshal(marshaled, m2); err != nil { + t.Errorf("Unmarshal %#v: %s", m1, err) + break + } + + if !reflect.DeepEqual(v.Interface(), m2) { + t.Errorf("got: %#v\nwant:%#v\n%x", m2, m1, marshaled) + break + } + } +} + +func TestUnmarshalEmptyPacket(t *testing.T) { + var b []byte + var m channelRequestSuccessMsg + if err := Unmarshal(b, &m); err == nil { + t.Fatalf("unmarshal of empty slice succeeded") + } +} + +func TestUnmarshalUnexpectedPacket(t *testing.T) { + type S struct { + I uint32 `sshtype:"43"` + S string + B bool + } + + s := S{11, "hello", true} + packet := Marshal(s) + packet[0] = 42 + roundtrip := S{} + err := Unmarshal(packet, &roundtrip) + if err == nil { + t.Fatal("expected error, not nil") + } +} + +func TestMarshalPtr(t *testing.T) { + s := struct { + S string + }{"hello"} + + m1 := Marshal(s) + m2 := Marshal(&s) + if !bytes.Equal(m1, m2) { + t.Errorf("got %q, want %q for marshaled pointer", m2, m1) + } +} + +func TestBareMarshalUnmarshal(t *testing.T) { + type S struct { + I uint32 + S string + B bool + } + + s := S{42, "hello", true} + packet := Marshal(s) + roundtrip := S{} + Unmarshal(packet, &roundtrip) + + if !reflect.DeepEqual(s, roundtrip) { + t.Errorf("got %#v, want %#v", roundtrip, s) + } +} + +func TestBareMarshal(t *testing.T) { + type S2 struct { + I uint32 + } + s := S2{42} + packet := Marshal(s) + i, rest, ok := parseUint32(packet) + if len(rest) > 0 || !ok { + t.Errorf("parseInt(%q): parse error", packet) + } + if i != s.I { + t.Errorf("got %d, want %d", i, s.I) + } +} + +func TestUnmarshalShortKexInitPacket(t *testing.T) { + // This used to panic. + // Issue 11348 + packet := []byte{0x14, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0xff, 0xff, 0xff, 0xff} + kim := &kexInitMsg{} + if err := Unmarshal(packet, kim); err == nil { + t.Error("truncated packet unmarshaled without error") + } +} + +func TestMarshalMultiTag(t *testing.T) { + var res struct { + A uint32 `sshtype:"1|2"` + } + + good1 := struct { + A uint32 `sshtype:"1"` + }{ + 1, + } + good2 := struct { + A uint32 `sshtype:"2"` + }{ + 1, + } + + if e := Unmarshal(Marshal(good1), &res); e != nil { + t.Errorf("error unmarshaling multipart tag: %v", e) + } + + if e := Unmarshal(Marshal(good2), &res); e != nil { + t.Errorf("error unmarshaling multipart tag: %v", e) + } + + bad1 := struct { + A uint32 `sshtype:"3"` + }{ + 1, + } + if e := Unmarshal(Marshal(bad1), &res); e == nil { + t.Errorf("bad struct unmarshaled without error") + } +} + +func randomBytes(out []byte, rand *rand.Rand) { + for i := 0; i < len(out); i++ { + out[i] = byte(rand.Int31()) + } +} + +func randomNameList(rand *rand.Rand) []string { + ret := make([]string, rand.Int31()&15) + for i := range ret { + s := make([]byte, 1+(rand.Int31()&15)) + for j := range s { + s[j] = 'a' + uint8(rand.Int31()&15) + } + ret[i] = string(s) + } + return ret +} + +func randomInt(rand *rand.Rand) *big.Int { + return new(big.Int).SetInt64(int64(int32(rand.Uint32()))) +} + +func (*kexInitMsg) Generate(rand *rand.Rand, size int) reflect.Value { + ki := &kexInitMsg{} + randomBytes(ki.Cookie[:], rand) + ki.KexAlgos = randomNameList(rand) + ki.ServerHostKeyAlgos = randomNameList(rand) + ki.CiphersClientServer = randomNameList(rand) + ki.CiphersServerClient = randomNameList(rand) + ki.MACsClientServer = randomNameList(rand) + ki.MACsServerClient = randomNameList(rand) + ki.CompressionClientServer = randomNameList(rand) + ki.CompressionServerClient = randomNameList(rand) + ki.LanguagesClientServer = randomNameList(rand) + ki.LanguagesServerClient = randomNameList(rand) + if rand.Int31()&1 == 1 { + ki.FirstKexFollows = true + } + return reflect.ValueOf(ki) +} + +func (*kexDHInitMsg) Generate(rand *rand.Rand, size int) reflect.Value { + dhi := &kexDHInitMsg{} + dhi.X = randomInt(rand) + return reflect.ValueOf(dhi) +} + +var ( + _kexInitMsg = new(kexInitMsg).Generate(rand.New(rand.NewSource(0)), 10).Elem().Interface() + _kexDHInitMsg = new(kexDHInitMsg).Generate(rand.New(rand.NewSource(0)), 10).Elem().Interface() + + _kexInit = Marshal(_kexInitMsg) + _kexDHInit = Marshal(_kexDHInitMsg) +) + +func BenchmarkMarshalKexInitMsg(b *testing.B) { + for i := 0; i < b.N; i++ { + Marshal(_kexInitMsg) + } +} + +func BenchmarkUnmarshalKexInitMsg(b *testing.B) { + m := new(kexInitMsg) + for i := 0; i < b.N; i++ { + Unmarshal(_kexInit, m) + } +} + +func BenchmarkMarshalKexDHInitMsg(b *testing.B) { + for i := 0; i < b.N; i++ { + Marshal(_kexDHInitMsg) + } +} + +func BenchmarkUnmarshalKexDHInitMsg(b *testing.B) { + m := new(kexDHInitMsg) + for i := 0; i < b.N; i++ { + Unmarshal(_kexDHInit, m) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/mux.go b/vendor/golang.org/x/crypto/ssh/mux.go new file mode 100644 index 0000000..27a527c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mux.go @@ -0,0 +1,330 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "encoding/binary" + "fmt" + "io" + "log" + "sync" + "sync/atomic" +) + +// debugMux, if set, causes messages in the connection protocol to be +// logged. +const debugMux = false + +// chanList is a thread safe channel list. +type chanList struct { + // protects concurrent access to chans + sync.Mutex + + // chans are indexed by the local id of the channel, which the + // other side should send in the PeersId field. + chans []*channel + + // This is a debugging aid: it offsets all IDs by this + // amount. This helps distinguish otherwise identical + // server/client muxes + offset uint32 +} + +// Assigns a channel ID to the given channel. +func (c *chanList) add(ch *channel) uint32 { + c.Lock() + defer c.Unlock() + for i := range c.chans { + if c.chans[i] == nil { + c.chans[i] = ch + return uint32(i) + c.offset + } + } + c.chans = append(c.chans, ch) + return uint32(len(c.chans)-1) + c.offset +} + +// getChan returns the channel for the given ID. +func (c *chanList) getChan(id uint32) *channel { + id -= c.offset + + c.Lock() + defer c.Unlock() + if id < uint32(len(c.chans)) { + return c.chans[id] + } + return nil +} + +func (c *chanList) remove(id uint32) { + id -= c.offset + c.Lock() + if id < uint32(len(c.chans)) { + c.chans[id] = nil + } + c.Unlock() +} + +// dropAll forgets all channels it knows, returning them in a slice. +func (c *chanList) dropAll() []*channel { + c.Lock() + defer c.Unlock() + var r []*channel + + for _, ch := range c.chans { + if ch == nil { + continue + } + r = append(r, ch) + } + c.chans = nil + return r +} + +// mux represents the state for the SSH connection protocol, which +// multiplexes many channels onto a single packet transport. +type mux struct { + conn packetConn + chanList chanList + + incomingChannels chan NewChannel + + globalSentMu sync.Mutex + globalResponses chan interface{} + incomingRequests chan *Request + + errCond *sync.Cond + err error +} + +// When debugging, each new chanList instantiation has a different +// offset. +var globalOff uint32 + +func (m *mux) Wait() error { + m.errCond.L.Lock() + defer m.errCond.L.Unlock() + for m.err == nil { + m.errCond.Wait() + } + return m.err +} + +// newMux returns a mux that runs over the given connection. +func newMux(p packetConn) *mux { + m := &mux{ + conn: p, + incomingChannels: make(chan NewChannel, chanSize), + globalResponses: make(chan interface{}, 1), + incomingRequests: make(chan *Request, chanSize), + errCond: newCond(), + } + if debugMux { + m.chanList.offset = atomic.AddUint32(&globalOff, 1) + } + + go m.loop() + return m +} + +func (m *mux) sendMessage(msg interface{}) error { + p := Marshal(msg) + if debugMux { + log.Printf("send global(%d): %#v", m.chanList.offset, msg) + } + return m.conn.writePacket(p) +} + +func (m *mux) SendRequest(name string, wantReply bool, payload []byte) (bool, []byte, error) { + if wantReply { + m.globalSentMu.Lock() + defer m.globalSentMu.Unlock() + } + + if err := m.sendMessage(globalRequestMsg{ + Type: name, + WantReply: wantReply, + Data: payload, + }); err != nil { + return false, nil, err + } + + if !wantReply { + return false, nil, nil + } + + msg, ok := <-m.globalResponses + if !ok { + return false, nil, io.EOF + } + switch msg := msg.(type) { + case *globalRequestFailureMsg: + return false, msg.Data, nil + case *globalRequestSuccessMsg: + return true, msg.Data, nil + default: + return false, nil, fmt.Errorf("ssh: unexpected response to request: %#v", msg) + } +} + +// ackRequest must be called after processing a global request that +// has WantReply set. +func (m *mux) ackRequest(ok bool, data []byte) error { + if ok { + return m.sendMessage(globalRequestSuccessMsg{Data: data}) + } + return m.sendMessage(globalRequestFailureMsg{Data: data}) +} + +func (m *mux) Close() error { + return m.conn.Close() +} + +// loop runs the connection machine. It will process packets until an +// error is encountered. To synchronize on loop exit, use mux.Wait. +func (m *mux) loop() { + var err error + for err == nil { + err = m.onePacket() + } + + for _, ch := range m.chanList.dropAll() { + ch.close() + } + + close(m.incomingChannels) + close(m.incomingRequests) + close(m.globalResponses) + + m.conn.Close() + + m.errCond.L.Lock() + m.err = err + m.errCond.Broadcast() + m.errCond.L.Unlock() + + if debugMux { + log.Println("loop exit", err) + } +} + +// onePacket reads and processes one packet. +func (m *mux) onePacket() error { + packet, err := m.conn.readPacket() + if err != nil { + return err + } + + if debugMux { + if packet[0] == msgChannelData || packet[0] == msgChannelExtendedData { + log.Printf("decoding(%d): data packet - %d bytes", m.chanList.offset, len(packet)) + } else { + p, _ := decode(packet) + log.Printf("decoding(%d): %d %#v - %d bytes", m.chanList.offset, packet[0], p, len(packet)) + } + } + + switch packet[0] { + case msgChannelOpen: + return m.handleChannelOpen(packet) + case msgGlobalRequest, msgRequestSuccess, msgRequestFailure: + return m.handleGlobalPacket(packet) + } + + // assume a channel packet. + if len(packet) < 5 { + return parseError(packet[0]) + } + id := binary.BigEndian.Uint32(packet[1:]) + ch := m.chanList.getChan(id) + if ch == nil { + return fmt.Errorf("ssh: invalid channel %d", id) + } + + return ch.handlePacket(packet) +} + +func (m *mux) handleGlobalPacket(packet []byte) error { + msg, err := decode(packet) + if err != nil { + return err + } + + switch msg := msg.(type) { + case *globalRequestMsg: + m.incomingRequests <- &Request{ + Type: msg.Type, + WantReply: msg.WantReply, + Payload: msg.Data, + mux: m, + } + case *globalRequestSuccessMsg, *globalRequestFailureMsg: + m.globalResponses <- msg + default: + panic(fmt.Sprintf("not a global message %#v", msg)) + } + + return nil +} + +// handleChannelOpen schedules a channel to be Accept()ed. +func (m *mux) handleChannelOpen(packet []byte) error { + var msg channelOpenMsg + if err := Unmarshal(packet, &msg); err != nil { + return err + } + + if msg.MaxPacketSize < minPacketLength || msg.MaxPacketSize > 1<<31 { + failMsg := channelOpenFailureMsg{ + PeersId: msg.PeersId, + Reason: ConnectionFailed, + Message: "invalid request", + Language: "en_US.UTF-8", + } + return m.sendMessage(failMsg) + } + + c := m.newChannel(msg.ChanType, channelInbound, msg.TypeSpecificData) + c.remoteId = msg.PeersId + c.maxRemotePayload = msg.MaxPacketSize + c.remoteWin.add(msg.PeersWindow) + m.incomingChannels <- c + return nil +} + +func (m *mux) OpenChannel(chanType string, extra []byte) (Channel, <-chan *Request, error) { + ch, err := m.openChannel(chanType, extra) + if err != nil { + return nil, nil, err + } + + return ch, ch.incomingRequests, nil +} + +func (m *mux) openChannel(chanType string, extra []byte) (*channel, error) { + ch := m.newChannel(chanType, channelOutbound, extra) + + ch.maxIncomingPayload = channelMaxPacket + + open := channelOpenMsg{ + ChanType: chanType, + PeersWindow: ch.myWindow, + MaxPacketSize: ch.maxIncomingPayload, + TypeSpecificData: extra, + PeersId: ch.localId, + } + if err := m.sendMessage(open); err != nil { + return nil, err + } + + switch msg := (<-ch.msg).(type) { + case *channelOpenConfirmMsg: + return ch, nil + case *channelOpenFailureMsg: + return nil, &OpenChannelError{msg.Reason, msg.Message} + default: + return nil, fmt.Errorf("ssh: unexpected packet in response to channel open: %T", msg) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/mux_test.go b/vendor/golang.org/x/crypto/ssh/mux_test.go new file mode 100644 index 0000000..25d2181 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mux_test.go @@ -0,0 +1,505 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "io" + "io/ioutil" + "sync" + "testing" +) + +func muxPair() (*mux, *mux) { + a, b := memPipe() + + s := newMux(a) + c := newMux(b) + + return s, c +} + +// Returns both ends of a channel, and the mux for the the 2nd +// channel. +func channelPair(t *testing.T) (*channel, *channel, *mux) { + c, s := muxPair() + + res := make(chan *channel, 1) + go func() { + newCh, ok := <-s.incomingChannels + if !ok { + t.Fatalf("No incoming channel") + } + if newCh.ChannelType() != "chan" { + t.Fatalf("got type %q want chan", newCh.ChannelType()) + } + ch, _, err := newCh.Accept() + if err != nil { + t.Fatalf("Accept %v", err) + } + res <- ch.(*channel) + }() + + ch, err := c.openChannel("chan", nil) + if err != nil { + t.Fatalf("OpenChannel: %v", err) + } + + return <-res, ch, c +} + +// Test that stderr and stdout can be addressed from different +// goroutines. This is intended for use with the race detector. +func TestMuxChannelExtendedThreadSafety(t *testing.T) { + writer, reader, mux := channelPair(t) + defer writer.Close() + defer reader.Close() + defer mux.Close() + + var wr, rd sync.WaitGroup + magic := "hello world" + + wr.Add(2) + go func() { + io.WriteString(writer, magic) + wr.Done() + }() + go func() { + io.WriteString(writer.Stderr(), magic) + wr.Done() + }() + + rd.Add(2) + go func() { + c, err := ioutil.ReadAll(reader) + if string(c) != magic { + t.Fatalf("stdout read got %q, want %q (error %s)", c, magic, err) + } + rd.Done() + }() + go func() { + c, err := ioutil.ReadAll(reader.Stderr()) + if string(c) != magic { + t.Fatalf("stderr read got %q, want %q (error %s)", c, magic, err) + } + rd.Done() + }() + + wr.Wait() + writer.CloseWrite() + rd.Wait() +} + +func TestMuxReadWrite(t *testing.T) { + s, c, mux := channelPair(t) + defer s.Close() + defer c.Close() + defer mux.Close() + + magic := "hello world" + magicExt := "hello stderr" + go func() { + _, err := s.Write([]byte(magic)) + if err != nil { + t.Fatalf("Write: %v", err) + } + _, err = s.Extended(1).Write([]byte(magicExt)) + if err != nil { + t.Fatalf("Write: %v", err) + } + err = s.Close() + if err != nil { + t.Fatalf("Close: %v", err) + } + }() + + var buf [1024]byte + n, err := c.Read(buf[:]) + if err != nil { + t.Fatalf("server Read: %v", err) + } + got := string(buf[:n]) + if got != magic { + t.Fatalf("server: got %q want %q", got, magic) + } + + n, err = c.Extended(1).Read(buf[:]) + if err != nil { + t.Fatalf("server Read: %v", err) + } + + got = string(buf[:n]) + if got != magicExt { + t.Fatalf("server: got %q want %q", got, magic) + } +} + +func TestMuxChannelOverflow(t *testing.T) { + reader, writer, mux := channelPair(t) + defer reader.Close() + defer writer.Close() + defer mux.Close() + + wDone := make(chan int, 1) + go func() { + if _, err := writer.Write(make([]byte, channelWindowSize)); err != nil { + t.Errorf("could not fill window: %v", err) + } + writer.Write(make([]byte, 1)) + wDone <- 1 + }() + writer.remoteWin.waitWriterBlocked() + + // Send 1 byte. + packet := make([]byte, 1+4+4+1) + packet[0] = msgChannelData + marshalUint32(packet[1:], writer.remoteId) + marshalUint32(packet[5:], uint32(1)) + packet[9] = 42 + + if err := writer.mux.conn.writePacket(packet); err != nil { + t.Errorf("could not send packet") + } + if _, err := reader.SendRequest("hello", true, nil); err == nil { + t.Errorf("SendRequest succeeded.") + } + <-wDone +} + +func TestMuxChannelCloseWriteUnblock(t *testing.T) { + reader, writer, mux := channelPair(t) + defer reader.Close() + defer writer.Close() + defer mux.Close() + + wDone := make(chan int, 1) + go func() { + if _, err := writer.Write(make([]byte, channelWindowSize)); err != nil { + t.Errorf("could not fill window: %v", err) + } + if _, err := writer.Write(make([]byte, 1)); err != io.EOF { + t.Errorf("got %v, want EOF for unblock write", err) + } + wDone <- 1 + }() + + writer.remoteWin.waitWriterBlocked() + reader.Close() + <-wDone +} + +func TestMuxConnectionCloseWriteUnblock(t *testing.T) { + reader, writer, mux := channelPair(t) + defer reader.Close() + defer writer.Close() + defer mux.Close() + + wDone := make(chan int, 1) + go func() { + if _, err := writer.Write(make([]byte, channelWindowSize)); err != nil { + t.Errorf("could not fill window: %v", err) + } + if _, err := writer.Write(make([]byte, 1)); err != io.EOF { + t.Errorf("got %v, want EOF for unblock write", err) + } + wDone <- 1 + }() + + writer.remoteWin.waitWriterBlocked() + mux.Close() + <-wDone +} + +func TestMuxReject(t *testing.T) { + client, server := muxPair() + defer server.Close() + defer client.Close() + + go func() { + ch, ok := <-server.incomingChannels + if !ok { + t.Fatalf("Accept") + } + if ch.ChannelType() != "ch" || string(ch.ExtraData()) != "extra" { + t.Fatalf("unexpected channel: %q, %q", ch.ChannelType(), ch.ExtraData()) + } + ch.Reject(RejectionReason(42), "message") + }() + + ch, err := client.openChannel("ch", []byte("extra")) + if ch != nil { + t.Fatal("openChannel not rejected") + } + + ocf, ok := err.(*OpenChannelError) + if !ok { + t.Errorf("got %#v want *OpenChannelError", err) + } else if ocf.Reason != 42 || ocf.Message != "message" { + t.Errorf("got %#v, want {Reason: 42, Message: %q}", ocf, "message") + } + + want := "ssh: rejected: unknown reason 42 (message)" + if err.Error() != want { + t.Errorf("got %q, want %q", err.Error(), want) + } +} + +func TestMuxChannelRequest(t *testing.T) { + client, server, mux := channelPair(t) + defer server.Close() + defer client.Close() + defer mux.Close() + + var received int + var wg sync.WaitGroup + wg.Add(1) + go func() { + for r := range server.incomingRequests { + received++ + r.Reply(r.Type == "yes", nil) + } + wg.Done() + }() + _, err := client.SendRequest("yes", false, nil) + if err != nil { + t.Fatalf("SendRequest: %v", err) + } + ok, err := client.SendRequest("yes", true, nil) + if err != nil { + t.Fatalf("SendRequest: %v", err) + } + + if !ok { + t.Errorf("SendRequest(yes): %v", ok) + + } + + ok, err = client.SendRequest("no", true, nil) + if err != nil { + t.Fatalf("SendRequest: %v", err) + } + if ok { + t.Errorf("SendRequest(no): %v", ok) + + } + + client.Close() + wg.Wait() + + if received != 3 { + t.Errorf("got %d requests, want %d", received, 3) + } +} + +func TestMuxGlobalRequest(t *testing.T) { + clientMux, serverMux := muxPair() + defer serverMux.Close() + defer clientMux.Close() + + var seen bool + go func() { + for r := range serverMux.incomingRequests { + seen = seen || r.Type == "peek" + if r.WantReply { + err := r.Reply(r.Type == "yes", + append([]byte(r.Type), r.Payload...)) + if err != nil { + t.Errorf("AckRequest: %v", err) + } + } + } + }() + + _, _, err := clientMux.SendRequest("peek", false, nil) + if err != nil { + t.Errorf("SendRequest: %v", err) + } + + ok, data, err := clientMux.SendRequest("yes", true, []byte("a")) + if !ok || string(data) != "yesa" || err != nil { + t.Errorf("SendRequest(\"yes\", true, \"a\"): %v %v %v", + ok, data, err) + } + if ok, data, err := clientMux.SendRequest("yes", true, []byte("a")); !ok || string(data) != "yesa" || err != nil { + t.Errorf("SendRequest(\"yes\", true, \"a\"): %v %v %v", + ok, data, err) + } + + if ok, data, err := clientMux.SendRequest("no", true, []byte("a")); ok || string(data) != "noa" || err != nil { + t.Errorf("SendRequest(\"no\", true, \"a\"): %v %v %v", + ok, data, err) + } + + if !seen { + t.Errorf("never saw 'peek' request") + } +} + +func TestMuxGlobalRequestUnblock(t *testing.T) { + clientMux, serverMux := muxPair() + defer serverMux.Close() + defer clientMux.Close() + + result := make(chan error, 1) + go func() { + _, _, err := clientMux.SendRequest("hello", true, nil) + result <- err + }() + + <-serverMux.incomingRequests + serverMux.conn.Close() + err := <-result + + if err != io.EOF { + t.Errorf("want EOF, got %v", io.EOF) + } +} + +func TestMuxChannelRequestUnblock(t *testing.T) { + a, b, connB := channelPair(t) + defer a.Close() + defer b.Close() + defer connB.Close() + + result := make(chan error, 1) + go func() { + _, err := a.SendRequest("hello", true, nil) + result <- err + }() + + <-b.incomingRequests + connB.conn.Close() + err := <-result + + if err != io.EOF { + t.Errorf("want EOF, got %v", err) + } +} + +func TestMuxCloseChannel(t *testing.T) { + r, w, mux := channelPair(t) + defer mux.Close() + defer r.Close() + defer w.Close() + + result := make(chan error, 1) + go func() { + var b [1024]byte + _, err := r.Read(b[:]) + result <- err + }() + if err := w.Close(); err != nil { + t.Errorf("w.Close: %v", err) + } + + if _, err := w.Write([]byte("hello")); err != io.EOF { + t.Errorf("got err %v, want io.EOF after Close", err) + } + + if err := <-result; err != io.EOF { + t.Errorf("got %v (%T), want io.EOF", err, err) + } +} + +func TestMuxCloseWriteChannel(t *testing.T) { + r, w, mux := channelPair(t) + defer mux.Close() + + result := make(chan error, 1) + go func() { + var b [1024]byte + _, err := r.Read(b[:]) + result <- err + }() + if err := w.CloseWrite(); err != nil { + t.Errorf("w.CloseWrite: %v", err) + } + + if _, err := w.Write([]byte("hello")); err != io.EOF { + t.Errorf("got err %v, want io.EOF after CloseWrite", err) + } + + if err := <-result; err != io.EOF { + t.Errorf("got %v (%T), want io.EOF", err, err) + } +} + +func TestMuxInvalidRecord(t *testing.T) { + a, b := muxPair() + defer a.Close() + defer b.Close() + + packet := make([]byte, 1+4+4+1) + packet[0] = msgChannelData + marshalUint32(packet[1:], 29348723 /* invalid channel id */) + marshalUint32(packet[5:], 1) + packet[9] = 42 + + a.conn.writePacket(packet) + go a.SendRequest("hello", false, nil) + // 'a' wrote an invalid packet, so 'b' has exited. + req, ok := <-b.incomingRequests + if ok { + t.Errorf("got request %#v after receiving invalid packet", req) + } +} + +func TestZeroWindowAdjust(t *testing.T) { + a, b, mux := channelPair(t) + defer a.Close() + defer b.Close() + defer mux.Close() + + go func() { + io.WriteString(a, "hello") + // bogus adjust. + a.sendMessage(windowAdjustMsg{}) + io.WriteString(a, "world") + a.Close() + }() + + want := "helloworld" + c, _ := ioutil.ReadAll(b) + if string(c) != want { + t.Errorf("got %q want %q", c, want) + } +} + +func TestMuxMaxPacketSize(t *testing.T) { + a, b, mux := channelPair(t) + defer a.Close() + defer b.Close() + defer mux.Close() + + large := make([]byte, a.maxRemotePayload+1) + packet := make([]byte, 1+4+4+1+len(large)) + packet[0] = msgChannelData + marshalUint32(packet[1:], a.remoteId) + marshalUint32(packet[5:], uint32(len(large))) + packet[9] = 42 + + if err := a.mux.conn.writePacket(packet); err != nil { + t.Errorf("could not send packet") + } + + go a.SendRequest("hello", false, nil) + + _, ok := <-b.incomingRequests + if ok { + t.Errorf("connection still alive after receiving large packet.") + } +} + +// Don't ship code with debug=true. +func TestDebug(t *testing.T) { + if debugMux { + t.Error("mux debug switched on") + } + if debugHandshake { + t.Error("handshake debug switched on") + } + if debugTransport { + t.Error("transport debug switched on") + } +} diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go new file mode 100644 index 0000000..8a78b7c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/server.go @@ -0,0 +1,563 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "errors" + "fmt" + "io" + "net" + "strings" +) + +// The Permissions type holds fine-grained permissions that are +// specific to a user or a specific authentication method for a user. +// The Permissions value for a successful authentication attempt is +// available in ServerConn, so it can be used to pass information from +// the user-authentication phase to the application layer. +type Permissions struct { + // CriticalOptions indicate restrictions to the default + // permissions, and are typically used in conjunction with + // user certificates. The standard for SSH certificates + // defines "force-command" (only allow the given command to + // execute) and "source-address" (only allow connections from + // the given address). The SSH package currently only enforces + // the "source-address" critical option. It is up to server + // implementations to enforce other critical options, such as + // "force-command", by checking them after the SSH handshake + // is successful. In general, SSH servers should reject + // connections that specify critical options that are unknown + // or not supported. + CriticalOptions map[string]string + + // Extensions are extra functionality that the server may + // offer on authenticated connections. Lack of support for an + // extension does not preclude authenticating a user. Common + // extensions are "permit-agent-forwarding", + // "permit-X11-forwarding". The Go SSH library currently does + // not act on any extension, and it is up to server + // implementations to honor them. Extensions can be used to + // pass data from the authentication callbacks to the server + // application layer. + Extensions map[string]string +} + +// ServerConfig holds server specific configuration data. +type ServerConfig struct { + // Config contains configuration shared between client and server. + Config + + hostKeys []Signer + + // NoClientAuth is true if clients are allowed to connect without + // authenticating. + NoClientAuth bool + + // MaxAuthTries specifies the maximum number of authentication attempts + // permitted per connection. If set to a negative number, the number of + // attempts are unlimited. If set to zero, the number of attempts are limited + // to 6. + MaxAuthTries int + + // PasswordCallback, if non-nil, is called when a user + // attempts to authenticate using a password. + PasswordCallback func(conn ConnMetadata, password []byte) (*Permissions, error) + + // PublicKeyCallback, if non-nil, is called when a client + // offers a public key for authentication. It must return a nil error + // if the given public key can be used to authenticate the + // given user. For example, see CertChecker.Authenticate. A + // call to this function does not guarantee that the key + // offered is in fact used to authenticate. To record any data + // depending on the public key, store it inside a + // Permissions.Extensions entry. + PublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error) + + // KeyboardInteractiveCallback, if non-nil, is called when + // keyboard-interactive authentication is selected (RFC + // 4256). The client object's Challenge function should be + // used to query the user. The callback may offer multiple + // Challenge rounds. To avoid information leaks, the client + // should be presented a challenge even if the user is + // unknown. + KeyboardInteractiveCallback func(conn ConnMetadata, client KeyboardInteractiveChallenge) (*Permissions, error) + + // AuthLogCallback, if non-nil, is called to log all authentication + // attempts. + AuthLogCallback func(conn ConnMetadata, method string, err error) + + // ServerVersion is the version identification string to announce in + // the public handshake. + // If empty, a reasonable default is used. + // Note that RFC 4253 section 4.2 requires that this string start with + // "SSH-2.0-". + ServerVersion string +} + +// AddHostKey adds a private key as a host key. If an existing host +// key exists with the same algorithm, it is overwritten. Each server +// config must have at least one host key. +func (s *ServerConfig) AddHostKey(key Signer) { + for i, k := range s.hostKeys { + if k.PublicKey().Type() == key.PublicKey().Type() { + s.hostKeys[i] = key + return + } + } + + s.hostKeys = append(s.hostKeys, key) +} + +// cachedPubKey contains the results of querying whether a public key is +// acceptable for a user. +type cachedPubKey struct { + user string + pubKeyData []byte + result error + perms *Permissions +} + +const maxCachedPubKeys = 16 + +// pubKeyCache caches tests for public keys. Since SSH clients +// will query whether a public key is acceptable before attempting to +// authenticate with it, we end up with duplicate queries for public +// key validity. The cache only applies to a single ServerConn. +type pubKeyCache struct { + keys []cachedPubKey +} + +// get returns the result for a given user/algo/key tuple. +func (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) { + for _, k := range c.keys { + if k.user == user && bytes.Equal(k.pubKeyData, pubKeyData) { + return k, true + } + } + return cachedPubKey{}, false +} + +// add adds the given tuple to the cache. +func (c *pubKeyCache) add(candidate cachedPubKey) { + if len(c.keys) < maxCachedPubKeys { + c.keys = append(c.keys, candidate) + } +} + +// ServerConn is an authenticated SSH connection, as seen from the +// server +type ServerConn struct { + Conn + + // If the succeeding authentication callback returned a + // non-nil Permissions pointer, it is stored here. + Permissions *Permissions +} + +// NewServerConn starts a new SSH server with c as the underlying +// transport. It starts with a handshake and, if the handshake is +// unsuccessful, it closes the connection and returns an error. The +// Request and NewChannel channels must be serviced, or the connection +// will hang. +func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewChannel, <-chan *Request, error) { + fullConf := *config + fullConf.SetDefaults() + if fullConf.MaxAuthTries == 0 { + fullConf.MaxAuthTries = 6 + } + + s := &connection{ + sshConn: sshConn{conn: c}, + } + perms, err := s.serverHandshake(&fullConf) + if err != nil { + c.Close() + return nil, nil, nil, err + } + return &ServerConn{s, perms}, s.mux.incomingChannels, s.mux.incomingRequests, nil +} + +// signAndMarshal signs the data with the appropriate algorithm, +// and serializes the result in SSH wire format. +func signAndMarshal(k Signer, rand io.Reader, data []byte) ([]byte, error) { + sig, err := k.Sign(rand, data) + if err != nil { + return nil, err + } + + return Marshal(sig), nil +} + +// handshake performs key exchange and user authentication. +func (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) { + if len(config.hostKeys) == 0 { + return nil, errors.New("ssh: server has no host keys") + } + + if !config.NoClientAuth && config.PasswordCallback == nil && config.PublicKeyCallback == nil && config.KeyboardInteractiveCallback == nil { + return nil, errors.New("ssh: no authentication methods configured but NoClientAuth is also false") + } + + if config.ServerVersion != "" { + s.serverVersion = []byte(config.ServerVersion) + } else { + s.serverVersion = []byte(packageVersion) + } + var err error + s.clientVersion, err = exchangeVersions(s.sshConn.conn, s.serverVersion) + if err != nil { + return nil, err + } + + tr := newTransport(s.sshConn.conn, config.Rand, false /* not client */) + s.transport = newServerTransport(tr, s.clientVersion, s.serverVersion, config) + + if err := s.transport.waitSession(); err != nil { + return nil, err + } + + // We just did the key change, so the session ID is established. + s.sessionID = s.transport.getSessionID() + + var packet []byte + if packet, err = s.transport.readPacket(); err != nil { + return nil, err + } + + var serviceRequest serviceRequestMsg + if err = Unmarshal(packet, &serviceRequest); err != nil { + return nil, err + } + if serviceRequest.Service != serviceUserAuth { + return nil, errors.New("ssh: requested service '" + serviceRequest.Service + "' before authenticating") + } + serviceAccept := serviceAcceptMsg{ + Service: serviceUserAuth, + } + if err := s.transport.writePacket(Marshal(&serviceAccept)); err != nil { + return nil, err + } + + perms, err := s.serverAuthenticate(config) + if err != nil { + return nil, err + } + s.mux = newMux(s.transport) + return perms, err +} + +func isAcceptableAlgo(algo string) bool { + switch algo { + case KeyAlgoRSA, KeyAlgoDSA, KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, KeyAlgoED25519, + CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01: + return true + } + return false +} + +func checkSourceAddress(addr net.Addr, sourceAddrs string) error { + if addr == nil { + return errors.New("ssh: no address known for client, but source-address match required") + } + + tcpAddr, ok := addr.(*net.TCPAddr) + if !ok { + return fmt.Errorf("ssh: remote address %v is not an TCP address when checking source-address match", addr) + } + + for _, sourceAddr := range strings.Split(sourceAddrs, ",") { + if allowedIP := net.ParseIP(sourceAddr); allowedIP != nil { + if allowedIP.Equal(tcpAddr.IP) { + return nil + } + } else { + _, ipNet, err := net.ParseCIDR(sourceAddr) + if err != nil { + return fmt.Errorf("ssh: error parsing source-address restriction %q: %v", sourceAddr, err) + } + + if ipNet.Contains(tcpAddr.IP) { + return nil + } + } + } + + return fmt.Errorf("ssh: remote address %v is not allowed because of source-address restriction", addr) +} + +// ServerAuthError implements the error interface. It appends any authentication +// errors that may occur, and is returned if all of the authentication methods +// provided by the user failed to authenticate. +type ServerAuthError struct { + // Errors contains authentication errors returned by the authentication + // callback methods. + Errors []error +} + +func (l ServerAuthError) Error() string { + var errs []string + for _, err := range l.Errors { + errs = append(errs, err.Error()) + } + return "[" + strings.Join(errs, ", ") + "]" +} + +func (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, error) { + sessionID := s.transport.getSessionID() + var cache pubKeyCache + var perms *Permissions + + authFailures := 0 + var authErrs []error + +userAuthLoop: + for { + if authFailures >= config.MaxAuthTries && config.MaxAuthTries > 0 { + discMsg := &disconnectMsg{ + Reason: 2, + Message: "too many authentication failures", + } + + if err := s.transport.writePacket(Marshal(discMsg)); err != nil { + return nil, err + } + + return nil, discMsg + } + + var userAuthReq userAuthRequestMsg + if packet, err := s.transport.readPacket(); err != nil { + if err == io.EOF { + return nil, &ServerAuthError{Errors: authErrs} + } + return nil, err + } else if err = Unmarshal(packet, &userAuthReq); err != nil { + return nil, err + } + + if userAuthReq.Service != serviceSSH { + return nil, errors.New("ssh: client attempted to negotiate for unknown service: " + userAuthReq.Service) + } + + s.user = userAuthReq.User + perms = nil + authErr := errors.New("no auth passed yet") + + switch userAuthReq.Method { + case "none": + if config.NoClientAuth { + authErr = nil + } + + // allow initial attempt of 'none' without penalty + if authFailures == 0 { + authFailures-- + } + case "password": + if config.PasswordCallback == nil { + authErr = errors.New("ssh: password auth not configured") + break + } + payload := userAuthReq.Payload + if len(payload) < 1 || payload[0] != 0 { + return nil, parseError(msgUserAuthRequest) + } + payload = payload[1:] + password, payload, ok := parseString(payload) + if !ok || len(payload) > 0 { + return nil, parseError(msgUserAuthRequest) + } + + perms, authErr = config.PasswordCallback(s, password) + case "keyboard-interactive": + if config.KeyboardInteractiveCallback == nil { + authErr = errors.New("ssh: keyboard-interactive auth not configubred") + break + } + + prompter := &sshClientKeyboardInteractive{s} + perms, authErr = config.KeyboardInteractiveCallback(s, prompter.Challenge) + case "publickey": + if config.PublicKeyCallback == nil { + authErr = errors.New("ssh: publickey auth not configured") + break + } + payload := userAuthReq.Payload + if len(payload) < 1 { + return nil, parseError(msgUserAuthRequest) + } + isQuery := payload[0] == 0 + payload = payload[1:] + algoBytes, payload, ok := parseString(payload) + if !ok { + return nil, parseError(msgUserAuthRequest) + } + algo := string(algoBytes) + if !isAcceptableAlgo(algo) { + authErr = fmt.Errorf("ssh: algorithm %q not accepted", algo) + break + } + + pubKeyData, payload, ok := parseString(payload) + if !ok { + return nil, parseError(msgUserAuthRequest) + } + + pubKey, err := ParsePublicKey(pubKeyData) + if err != nil { + return nil, err + } + + candidate, ok := cache.get(s.user, pubKeyData) + if !ok { + candidate.user = s.user + candidate.pubKeyData = pubKeyData + candidate.perms, candidate.result = config.PublicKeyCallback(s, pubKey) + if candidate.result == nil && candidate.perms != nil && candidate.perms.CriticalOptions != nil && candidate.perms.CriticalOptions[sourceAddressCriticalOption] != "" { + candidate.result = checkSourceAddress( + s.RemoteAddr(), + candidate.perms.CriticalOptions[sourceAddressCriticalOption]) + } + cache.add(candidate) + } + + if isQuery { + // The client can query if the given public key + // would be okay. + + if len(payload) > 0 { + return nil, parseError(msgUserAuthRequest) + } + + if candidate.result == nil { + okMsg := userAuthPubKeyOkMsg{ + Algo: algo, + PubKey: pubKeyData, + } + if err = s.transport.writePacket(Marshal(&okMsg)); err != nil { + return nil, err + } + continue userAuthLoop + } + authErr = candidate.result + } else { + sig, payload, ok := parseSignature(payload) + if !ok || len(payload) > 0 { + return nil, parseError(msgUserAuthRequest) + } + // Ensure the public key algo and signature algo + // are supported. Compare the private key + // algorithm name that corresponds to algo with + // sig.Format. This is usually the same, but + // for certs, the names differ. + if !isAcceptableAlgo(sig.Format) { + break + } + signedData := buildDataSignedForAuth(sessionID, userAuthReq, algoBytes, pubKeyData) + + if err := pubKey.Verify(signedData, sig); err != nil { + return nil, err + } + + authErr = candidate.result + perms = candidate.perms + } + default: + authErr = fmt.Errorf("ssh: unknown method %q", userAuthReq.Method) + } + + authErrs = append(authErrs, authErr) + + if config.AuthLogCallback != nil { + config.AuthLogCallback(s, userAuthReq.Method, authErr) + } + + if authErr == nil { + break userAuthLoop + } + + authFailures++ + + var failureMsg userAuthFailureMsg + if config.PasswordCallback != nil { + failureMsg.Methods = append(failureMsg.Methods, "password") + } + if config.PublicKeyCallback != nil { + failureMsg.Methods = append(failureMsg.Methods, "publickey") + } + if config.KeyboardInteractiveCallback != nil { + failureMsg.Methods = append(failureMsg.Methods, "keyboard-interactive") + } + + if len(failureMsg.Methods) == 0 { + return nil, errors.New("ssh: no authentication methods configured but NoClientAuth is also false") + } + + if err := s.transport.writePacket(Marshal(&failureMsg)); err != nil { + return nil, err + } + } + + if err := s.transport.writePacket([]byte{msgUserAuthSuccess}); err != nil { + return nil, err + } + return perms, nil +} + +// sshClientKeyboardInteractive implements a ClientKeyboardInteractive by +// asking the client on the other side of a ServerConn. +type sshClientKeyboardInteractive struct { + *connection +} + +func (c *sshClientKeyboardInteractive) Challenge(user, instruction string, questions []string, echos []bool) (answers []string, err error) { + if len(questions) != len(echos) { + return nil, errors.New("ssh: echos and questions must have equal length") + } + + var prompts []byte + for i := range questions { + prompts = appendString(prompts, questions[i]) + prompts = appendBool(prompts, echos[i]) + } + + if err := c.transport.writePacket(Marshal(&userAuthInfoRequestMsg{ + Instruction: instruction, + NumPrompts: uint32(len(questions)), + Prompts: prompts, + })); err != nil { + return nil, err + } + + packet, err := c.transport.readPacket() + if err != nil { + return nil, err + } + if packet[0] != msgUserAuthInfoResponse { + return nil, unexpectedMessageError(msgUserAuthInfoResponse, packet[0]) + } + packet = packet[1:] + + n, packet, ok := parseUint32(packet) + if !ok || int(n) != len(questions) { + return nil, parseError(msgUserAuthInfoResponse) + } + + for i := uint32(0); i < n; i++ { + ans, rest, ok := parseString(packet) + if !ok { + return nil, parseError(msgUserAuthInfoResponse) + } + + answers = append(answers, string(ans)) + packet = rest + } + if len(packet) != 0 { + return nil, errors.New("ssh: junk at end of message") + } + + return answers, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/session.go b/vendor/golang.org/x/crypto/ssh/session.go new file mode 100644 index 0000000..cc06e03 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/session.go @@ -0,0 +1,647 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +// Session implements an interactive session described in +// "RFC 4254, section 6". + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "io" + "io/ioutil" + "sync" +) + +type Signal string + +// POSIX signals as listed in RFC 4254 Section 6.10. +const ( + SIGABRT Signal = "ABRT" + SIGALRM Signal = "ALRM" + SIGFPE Signal = "FPE" + SIGHUP Signal = "HUP" + SIGILL Signal = "ILL" + SIGINT Signal = "INT" + SIGKILL Signal = "KILL" + SIGPIPE Signal = "PIPE" + SIGQUIT Signal = "QUIT" + SIGSEGV Signal = "SEGV" + SIGTERM Signal = "TERM" + SIGUSR1 Signal = "USR1" + SIGUSR2 Signal = "USR2" +) + +var signals = map[Signal]int{ + SIGABRT: 6, + SIGALRM: 14, + SIGFPE: 8, + SIGHUP: 1, + SIGILL: 4, + SIGINT: 2, + SIGKILL: 9, + SIGPIPE: 13, + SIGQUIT: 3, + SIGSEGV: 11, + SIGTERM: 15, +} + +type TerminalModes map[uint8]uint32 + +// POSIX terminal mode flags as listed in RFC 4254 Section 8. +const ( + tty_OP_END = 0 + VINTR = 1 + VQUIT = 2 + VERASE = 3 + VKILL = 4 + VEOF = 5 + VEOL = 6 + VEOL2 = 7 + VSTART = 8 + VSTOP = 9 + VSUSP = 10 + VDSUSP = 11 + VREPRINT = 12 + VWERASE = 13 + VLNEXT = 14 + VFLUSH = 15 + VSWTCH = 16 + VSTATUS = 17 + VDISCARD = 18 + IGNPAR = 30 + PARMRK = 31 + INPCK = 32 + ISTRIP = 33 + INLCR = 34 + IGNCR = 35 + ICRNL = 36 + IUCLC = 37 + IXON = 38 + IXANY = 39 + IXOFF = 40 + IMAXBEL = 41 + ISIG = 50 + ICANON = 51 + XCASE = 52 + ECHO = 53 + ECHOE = 54 + ECHOK = 55 + ECHONL = 56 + NOFLSH = 57 + TOSTOP = 58 + IEXTEN = 59 + ECHOCTL = 60 + ECHOKE = 61 + PENDIN = 62 + OPOST = 70 + OLCUC = 71 + ONLCR = 72 + OCRNL = 73 + ONOCR = 74 + ONLRET = 75 + CS7 = 90 + CS8 = 91 + PARENB = 92 + PARODD = 93 + TTY_OP_ISPEED = 128 + TTY_OP_OSPEED = 129 +) + +// A Session represents a connection to a remote command or shell. +type Session struct { + // Stdin specifies the remote process's standard input. + // If Stdin is nil, the remote process reads from an empty + // bytes.Buffer. + Stdin io.Reader + + // Stdout and Stderr specify the remote process's standard + // output and error. + // + // If either is nil, Run connects the corresponding file + // descriptor to an instance of ioutil.Discard. There is a + // fixed amount of buffering that is shared for the two streams. + // If either blocks it may eventually cause the remote + // command to block. + Stdout io.Writer + Stderr io.Writer + + ch Channel // the channel backing this session + started bool // true once Start, Run or Shell is invoked. + copyFuncs []func() error + errors chan error // one send per copyFunc + + // true if pipe method is active + stdinpipe, stdoutpipe, stderrpipe bool + + // stdinPipeWriter is non-nil if StdinPipe has not been called + // and Stdin was specified by the user; it is the write end of + // a pipe connecting Session.Stdin to the stdin channel. + stdinPipeWriter io.WriteCloser + + exitStatus chan error +} + +// SendRequest sends an out-of-band channel request on the SSH channel +// underlying the session. +func (s *Session) SendRequest(name string, wantReply bool, payload []byte) (bool, error) { + return s.ch.SendRequest(name, wantReply, payload) +} + +func (s *Session) Close() error { + return s.ch.Close() +} + +// RFC 4254 Section 6.4. +type setenvRequest struct { + Name string + Value string +} + +// Setenv sets an environment variable that will be applied to any +// command executed by Shell or Run. +func (s *Session) Setenv(name, value string) error { + msg := setenvRequest{ + Name: name, + Value: value, + } + ok, err := s.ch.SendRequest("env", true, Marshal(&msg)) + if err == nil && !ok { + err = errors.New("ssh: setenv failed") + } + return err +} + +// RFC 4254 Section 6.2. +type ptyRequestMsg struct { + Term string + Columns uint32 + Rows uint32 + Width uint32 + Height uint32 + Modelist string +} + +// RequestPty requests the association of a pty with the session on the remote host. +func (s *Session) RequestPty(term string, h, w int, termmodes TerminalModes) error { + var tm []byte + for k, v := range termmodes { + kv := struct { + Key byte + Val uint32 + }{k, v} + + tm = append(tm, Marshal(&kv)...) + } + tm = append(tm, tty_OP_END) + req := ptyRequestMsg{ + Term: term, + Columns: uint32(w), + Rows: uint32(h), + Width: uint32(w * 8), + Height: uint32(h * 8), + Modelist: string(tm), + } + ok, err := s.ch.SendRequest("pty-req", true, Marshal(&req)) + if err == nil && !ok { + err = errors.New("ssh: pty-req failed") + } + return err +} + +// RFC 4254 Section 6.5. +type subsystemRequestMsg struct { + Subsystem string +} + +// RequestSubsystem requests the association of a subsystem with the session on the remote host. +// A subsystem is a predefined command that runs in the background when the ssh session is initiated +func (s *Session) RequestSubsystem(subsystem string) error { + msg := subsystemRequestMsg{ + Subsystem: subsystem, + } + ok, err := s.ch.SendRequest("subsystem", true, Marshal(&msg)) + if err == nil && !ok { + err = errors.New("ssh: subsystem request failed") + } + return err +} + +// RFC 4254 Section 6.7. +type ptyWindowChangeMsg struct { + Columns uint32 + Rows uint32 + Width uint32 + Height uint32 +} + +// WindowChange informs the remote host about a terminal window dimension change to h rows and w columns. +func (s *Session) WindowChange(h, w int) error { + req := ptyWindowChangeMsg{ + Columns: uint32(w), + Rows: uint32(h), + Width: uint32(w * 8), + Height: uint32(h * 8), + } + _, err := s.ch.SendRequest("window-change", false, Marshal(&req)) + return err +} + +// RFC 4254 Section 6.9. +type signalMsg struct { + Signal string +} + +// Signal sends the given signal to the remote process. +// sig is one of the SIG* constants. +func (s *Session) Signal(sig Signal) error { + msg := signalMsg{ + Signal: string(sig), + } + + _, err := s.ch.SendRequest("signal", false, Marshal(&msg)) + return err +} + +// RFC 4254 Section 6.5. +type execMsg struct { + Command string +} + +// Start runs cmd on the remote host. Typically, the remote +// server passes cmd to the shell for interpretation. +// A Session only accepts one call to Run, Start or Shell. +func (s *Session) Start(cmd string) error { + if s.started { + return errors.New("ssh: session already started") + } + req := execMsg{ + Command: cmd, + } + + ok, err := s.ch.SendRequest("exec", true, Marshal(&req)) + if err == nil && !ok { + err = fmt.Errorf("ssh: command %v failed", cmd) + } + if err != nil { + return err + } + return s.start() +} + +// Run runs cmd on the remote host. Typically, the remote +// server passes cmd to the shell for interpretation. +// A Session only accepts one call to Run, Start, Shell, Output, +// or CombinedOutput. +// +// The returned error is nil if the command runs, has no problems +// copying stdin, stdout, and stderr, and exits with a zero exit +// status. +// +// If the remote server does not send an exit status, an error of type +// *ExitMissingError is returned. If the command completes +// unsuccessfully or is interrupted by a signal, the error is of type +// *ExitError. Other error types may be returned for I/O problems. +func (s *Session) Run(cmd string) error { + err := s.Start(cmd) + if err != nil { + return err + } + return s.Wait() +} + +// Output runs cmd on the remote host and returns its standard output. +func (s *Session) Output(cmd string) ([]byte, error) { + if s.Stdout != nil { + return nil, errors.New("ssh: Stdout already set") + } + var b bytes.Buffer + s.Stdout = &b + err := s.Run(cmd) + return b.Bytes(), err +} + +type singleWriter struct { + b bytes.Buffer + mu sync.Mutex +} + +func (w *singleWriter) Write(p []byte) (int, error) { + w.mu.Lock() + defer w.mu.Unlock() + return w.b.Write(p) +} + +// CombinedOutput runs cmd on the remote host and returns its combined +// standard output and standard error. +func (s *Session) CombinedOutput(cmd string) ([]byte, error) { + if s.Stdout != nil { + return nil, errors.New("ssh: Stdout already set") + } + if s.Stderr != nil { + return nil, errors.New("ssh: Stderr already set") + } + var b singleWriter + s.Stdout = &b + s.Stderr = &b + err := s.Run(cmd) + return b.b.Bytes(), err +} + +// Shell starts a login shell on the remote host. A Session only +// accepts one call to Run, Start, Shell, Output, or CombinedOutput. +func (s *Session) Shell() error { + if s.started { + return errors.New("ssh: session already started") + } + + ok, err := s.ch.SendRequest("shell", true, nil) + if err == nil && !ok { + return errors.New("ssh: could not start shell") + } + if err != nil { + return err + } + return s.start() +} + +func (s *Session) start() error { + s.started = true + + type F func(*Session) + for _, setupFd := range []F{(*Session).stdin, (*Session).stdout, (*Session).stderr} { + setupFd(s) + } + + s.errors = make(chan error, len(s.copyFuncs)) + for _, fn := range s.copyFuncs { + go func(fn func() error) { + s.errors <- fn() + }(fn) + } + return nil +} + +// Wait waits for the remote command to exit. +// +// The returned error is nil if the command runs, has no problems +// copying stdin, stdout, and stderr, and exits with a zero exit +// status. +// +// If the remote server does not send an exit status, an error of type +// *ExitMissingError is returned. If the command completes +// unsuccessfully or is interrupted by a signal, the error is of type +// *ExitError. Other error types may be returned for I/O problems. +func (s *Session) Wait() error { + if !s.started { + return errors.New("ssh: session not started") + } + waitErr := <-s.exitStatus + + if s.stdinPipeWriter != nil { + s.stdinPipeWriter.Close() + } + var copyError error + for _ = range s.copyFuncs { + if err := <-s.errors; err != nil && copyError == nil { + copyError = err + } + } + if waitErr != nil { + return waitErr + } + return copyError +} + +func (s *Session) wait(reqs <-chan *Request) error { + wm := Waitmsg{status: -1} + // Wait for msg channel to be closed before returning. + for msg := range reqs { + switch msg.Type { + case "exit-status": + wm.status = int(binary.BigEndian.Uint32(msg.Payload)) + case "exit-signal": + var sigval struct { + Signal string + CoreDumped bool + Error string + Lang string + } + if err := Unmarshal(msg.Payload, &sigval); err != nil { + return err + } + + // Must sanitize strings? + wm.signal = sigval.Signal + wm.msg = sigval.Error + wm.lang = sigval.Lang + default: + // This handles keepalives and matches + // OpenSSH's behaviour. + if msg.WantReply { + msg.Reply(false, nil) + } + } + } + if wm.status == 0 { + return nil + } + if wm.status == -1 { + // exit-status was never sent from server + if wm.signal == "" { + // signal was not sent either. RFC 4254 + // section 6.10 recommends against this + // behavior, but it is allowed, so we let + // clients handle it. + return &ExitMissingError{} + } + wm.status = 128 + if _, ok := signals[Signal(wm.signal)]; ok { + wm.status += signals[Signal(wm.signal)] + } + } + + return &ExitError{wm} +} + +// ExitMissingError is returned if a session is torn down cleanly, but +// the server sends no confirmation of the exit status. +type ExitMissingError struct{} + +func (e *ExitMissingError) Error() string { + return "wait: remote command exited without exit status or exit signal" +} + +func (s *Session) stdin() { + if s.stdinpipe { + return + } + var stdin io.Reader + if s.Stdin == nil { + stdin = new(bytes.Buffer) + } else { + r, w := io.Pipe() + go func() { + _, err := io.Copy(w, s.Stdin) + w.CloseWithError(err) + }() + stdin, s.stdinPipeWriter = r, w + } + s.copyFuncs = append(s.copyFuncs, func() error { + _, err := io.Copy(s.ch, stdin) + if err1 := s.ch.CloseWrite(); err == nil && err1 != io.EOF { + err = err1 + } + return err + }) +} + +func (s *Session) stdout() { + if s.stdoutpipe { + return + } + if s.Stdout == nil { + s.Stdout = ioutil.Discard + } + s.copyFuncs = append(s.copyFuncs, func() error { + _, err := io.Copy(s.Stdout, s.ch) + return err + }) +} + +func (s *Session) stderr() { + if s.stderrpipe { + return + } + if s.Stderr == nil { + s.Stderr = ioutil.Discard + } + s.copyFuncs = append(s.copyFuncs, func() error { + _, err := io.Copy(s.Stderr, s.ch.Stderr()) + return err + }) +} + +// sessionStdin reroutes Close to CloseWrite. +type sessionStdin struct { + io.Writer + ch Channel +} + +func (s *sessionStdin) Close() error { + return s.ch.CloseWrite() +} + +// StdinPipe returns a pipe that will be connected to the +// remote command's standard input when the command starts. +func (s *Session) StdinPipe() (io.WriteCloser, error) { + if s.Stdin != nil { + return nil, errors.New("ssh: Stdin already set") + } + if s.started { + return nil, errors.New("ssh: StdinPipe after process started") + } + s.stdinpipe = true + return &sessionStdin{s.ch, s.ch}, nil +} + +// StdoutPipe returns a pipe that will be connected to the +// remote command's standard output when the command starts. +// There is a fixed amount of buffering that is shared between +// stdout and stderr streams. If the StdoutPipe reader is +// not serviced fast enough it may eventually cause the +// remote command to block. +func (s *Session) StdoutPipe() (io.Reader, error) { + if s.Stdout != nil { + return nil, errors.New("ssh: Stdout already set") + } + if s.started { + return nil, errors.New("ssh: StdoutPipe after process started") + } + s.stdoutpipe = true + return s.ch, nil +} + +// StderrPipe returns a pipe that will be connected to the +// remote command's standard error when the command starts. +// There is a fixed amount of buffering that is shared between +// stdout and stderr streams. If the StderrPipe reader is +// not serviced fast enough it may eventually cause the +// remote command to block. +func (s *Session) StderrPipe() (io.Reader, error) { + if s.Stderr != nil { + return nil, errors.New("ssh: Stderr already set") + } + if s.started { + return nil, errors.New("ssh: StderrPipe after process started") + } + s.stderrpipe = true + return s.ch.Stderr(), nil +} + +// newSession returns a new interactive session on the remote host. +func newSession(ch Channel, reqs <-chan *Request) (*Session, error) { + s := &Session{ + ch: ch, + } + s.exitStatus = make(chan error, 1) + go func() { + s.exitStatus <- s.wait(reqs) + }() + + return s, nil +} + +// An ExitError reports unsuccessful completion of a remote command. +type ExitError struct { + Waitmsg +} + +func (e *ExitError) Error() string { + return e.Waitmsg.String() +} + +// Waitmsg stores the information about an exited remote command +// as reported by Wait. +type Waitmsg struct { + status int + signal string + msg string + lang string +} + +// ExitStatus returns the exit status of the remote command. +func (w Waitmsg) ExitStatus() int { + return w.status +} + +// Signal returns the exit signal of the remote command if +// it was terminated violently. +func (w Waitmsg) Signal() string { + return w.signal +} + +// Msg returns the exit message given by the remote command +func (w Waitmsg) Msg() string { + return w.msg +} + +// Lang returns the language tag. See RFC 3066 +func (w Waitmsg) Lang() string { + return w.lang +} + +func (w Waitmsg) String() string { + str := fmt.Sprintf("Process exited with status %v", w.status) + if w.signal != "" { + str += fmt.Sprintf(" from signal %v", w.signal) + } + if w.msg != "" { + str += fmt.Sprintf(". Reason was: %v", w.msg) + } + return str +} diff --git a/vendor/golang.org/x/crypto/ssh/session_test.go b/vendor/golang.org/x/crypto/ssh/session_test.go new file mode 100644 index 0000000..7dce6dd --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/session_test.go @@ -0,0 +1,774 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +// Session tests. + +import ( + "bytes" + crypto_rand "crypto/rand" + "errors" + "io" + "io/ioutil" + "math/rand" + "net" + "testing" + + "golang.org/x/crypto/ssh/terminal" +) + +type serverType func(Channel, <-chan *Request, *testing.T) + +// dial constructs a new test server and returns a *ClientConn. +func dial(handler serverType, t *testing.T) *Client { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + + go func() { + defer c1.Close() + conf := ServerConfig{ + NoClientAuth: true, + } + conf.AddHostKey(testSigners["rsa"]) + + _, chans, reqs, err := NewServerConn(c1, &conf) + if err != nil { + t.Fatalf("Unable to handshake: %v", err) + } + go DiscardRequests(reqs) + + for newCh := range chans { + if newCh.ChannelType() != "session" { + newCh.Reject(UnknownChannelType, "unknown channel type") + continue + } + + ch, inReqs, err := newCh.Accept() + if err != nil { + t.Errorf("Accept: %v", err) + continue + } + go func() { + handler(ch, inReqs, t) + }() + } + }() + + config := &ClientConfig{ + User: "testuser", + HostKeyCallback: InsecureIgnoreHostKey(), + } + + conn, chans, reqs, err := NewClientConn(c2, "", config) + if err != nil { + t.Fatalf("unable to dial remote side: %v", err) + } + + return NewClient(conn, chans, reqs) +} + +// Test a simple string is returned to session.Stdout. +func TestSessionShell(t *testing.T) { + conn := dial(shellHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + stdout := new(bytes.Buffer) + session.Stdout = stdout + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %s", err) + } + if err := session.Wait(); err != nil { + t.Fatalf("Remote command did not exit cleanly: %v", err) + } + actual := stdout.String() + if actual != "golang" { + t.Fatalf("Remote shell did not return expected string: expected=golang, actual=%s", actual) + } +} + +// TODO(dfc) add support for Std{in,err}Pipe when the Server supports it. + +// Test a simple string is returned via StdoutPipe. +func TestSessionStdoutPipe(t *testing.T) { + conn := dial(shellHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("Unable to request StdoutPipe(): %v", err) + } + var buf bytes.Buffer + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + done := make(chan bool, 1) + go func() { + if _, err := io.Copy(&buf, stdout); err != nil { + t.Errorf("Copy of stdout failed: %v", err) + } + done <- true + }() + if err := session.Wait(); err != nil { + t.Fatalf("Remote command did not exit cleanly: %v", err) + } + <-done + actual := buf.String() + if actual != "golang" { + t.Fatalf("Remote shell did not return expected string: expected=golang, actual=%s", actual) + } +} + +// Test that a simple string is returned via the Output helper, +// and that stderr is discarded. +func TestSessionOutput(t *testing.T) { + conn := dial(fixedOutputHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + + buf, err := session.Output("") // cmd is ignored by fixedOutputHandler + if err != nil { + t.Error("Remote command did not exit cleanly:", err) + } + w := "this-is-stdout." + g := string(buf) + if g != w { + t.Error("Remote command did not return expected string:") + t.Logf("want %q", w) + t.Logf("got %q", g) + } +} + +// Test that both stdout and stderr are returned +// via the CombinedOutput helper. +func TestSessionCombinedOutput(t *testing.T) { + conn := dial(fixedOutputHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + + buf, err := session.CombinedOutput("") // cmd is ignored by fixedOutputHandler + if err != nil { + t.Error("Remote command did not exit cleanly:", err) + } + const stdout = "this-is-stdout." + const stderr = "this-is-stderr." + g := string(buf) + if g != stdout+stderr && g != stderr+stdout { + t.Error("Remote command did not return expected string:") + t.Logf("want %q, or %q", stdout+stderr, stderr+stdout) + t.Logf("got %q", g) + } +} + +// Test non-0 exit status is returned correctly. +func TestExitStatusNonZero(t *testing.T) { + conn := dial(exitStatusNonZeroHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + e, ok := err.(*ExitError) + if !ok { + t.Fatalf("expected *ExitError but got %T", err) + } + if e.ExitStatus() != 15 { + t.Fatalf("expected command to exit with 15 but got %v", e.ExitStatus()) + } +} + +// Test 0 exit status is returned correctly. +func TestExitStatusZero(t *testing.T) { + conn := dial(exitStatusZeroHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err != nil { + t.Fatalf("expected nil but got %v", err) + } +} + +// Test exit signal and status are both returned correctly. +func TestExitSignalAndStatus(t *testing.T) { + conn := dial(exitSignalAndStatusHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + e, ok := err.(*ExitError) + if !ok { + t.Fatalf("expected *ExitError but got %T", err) + } + if e.Signal() != "TERM" || e.ExitStatus() != 15 { + t.Fatalf("expected command to exit with signal TERM and status 15 but got signal %s and status %v", e.Signal(), e.ExitStatus()) + } +} + +// Test exit signal and status are both returned correctly. +func TestKnownExitSignalOnly(t *testing.T) { + conn := dial(exitSignalHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + e, ok := err.(*ExitError) + if !ok { + t.Fatalf("expected *ExitError but got %T", err) + } + if e.Signal() != "TERM" || e.ExitStatus() != 143 { + t.Fatalf("expected command to exit with signal TERM and status 143 but got signal %s and status %v", e.Signal(), e.ExitStatus()) + } +} + +// Test exit signal and status are both returned correctly. +func TestUnknownExitSignal(t *testing.T) { + conn := dial(exitSignalUnknownHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + e, ok := err.(*ExitError) + if !ok { + t.Fatalf("expected *ExitError but got %T", err) + } + if e.Signal() != "SYS" || e.ExitStatus() != 128 { + t.Fatalf("expected command to exit with signal SYS and status 128 but got signal %s and status %v", e.Signal(), e.ExitStatus()) + } +} + +func TestExitWithoutStatusOrSignal(t *testing.T) { + conn := dial(exitWithoutSignalOrStatus, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatalf("Unable to request new session: %v", err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err == nil { + t.Fatalf("expected command to fail but it didn't") + } + if _, ok := err.(*ExitMissingError); !ok { + t.Fatalf("got %T want *ExitMissingError", err) + } +} + +// windowTestBytes is the number of bytes that we'll send to the SSH server. +const windowTestBytes = 16000 * 200 + +// TestServerWindow writes random data to the server. The server is expected to echo +// the same data back, which is compared against the original. +func TestServerWindow(t *testing.T) { + origBuf := bytes.NewBuffer(make([]byte, 0, windowTestBytes)) + io.CopyN(origBuf, crypto_rand.Reader, windowTestBytes) + origBytes := origBuf.Bytes() + + conn := dial(echoHandler, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatal(err) + } + defer session.Close() + result := make(chan []byte) + + go func() { + defer close(result) + echoedBuf := bytes.NewBuffer(make([]byte, 0, windowTestBytes)) + serverStdout, err := session.StdoutPipe() + if err != nil { + t.Errorf("StdoutPipe failed: %v", err) + return + } + n, err := copyNRandomly("stdout", echoedBuf, serverStdout, windowTestBytes) + if err != nil && err != io.EOF { + t.Errorf("Read only %d bytes from server, expected %d: %v", n, windowTestBytes, err) + } + result <- echoedBuf.Bytes() + }() + + serverStdin, err := session.StdinPipe() + if err != nil { + t.Fatalf("StdinPipe failed: %v", err) + } + written, err := copyNRandomly("stdin", serverStdin, origBuf, windowTestBytes) + if err != nil { + t.Fatalf("failed to copy origBuf to serverStdin: %v", err) + } + if written != windowTestBytes { + t.Fatalf("Wrote only %d of %d bytes to server", written, windowTestBytes) + } + + echoedBytes := <-result + + if !bytes.Equal(origBytes, echoedBytes) { + t.Fatalf("Echoed buffer differed from original, orig %d, echoed %d", len(origBytes), len(echoedBytes)) + } +} + +// Verify the client can handle a keepalive packet from the server. +func TestClientHandlesKeepalives(t *testing.T) { + conn := dial(channelKeepaliveSender, t) + defer conn.Close() + session, err := conn.NewSession() + if err != nil { + t.Fatal(err) + } + defer session.Close() + if err := session.Shell(); err != nil { + t.Fatalf("Unable to execute command: %v", err) + } + err = session.Wait() + if err != nil { + t.Fatalf("expected nil but got: %v", err) + } +} + +type exitStatusMsg struct { + Status uint32 +} + +type exitSignalMsg struct { + Signal string + CoreDumped bool + Errmsg string + Lang string +} + +func handleTerminalRequests(in <-chan *Request) { + for req := range in { + ok := false + switch req.Type { + case "shell": + ok = true + if len(req.Payload) > 0 { + // We don't accept any commands, only the default shell. + ok = false + } + case "env": + ok = true + } + req.Reply(ok, nil) + } +} + +func newServerShell(ch Channel, in <-chan *Request, prompt string) *terminal.Terminal { + term := terminal.NewTerminal(ch, prompt) + go handleTerminalRequests(in) + return term +} + +func exitStatusZeroHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + // this string is returned to stdout + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendStatus(0, ch, t) +} + +func exitStatusNonZeroHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendStatus(15, ch, t) +} + +func exitSignalAndStatusHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendStatus(15, ch, t) + sendSignal("TERM", ch, t) +} + +func exitSignalHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendSignal("TERM", ch, t) +} + +func exitSignalUnknownHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + sendSignal("SYS", ch, t) +} + +func exitWithoutSignalOrStatus(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) +} + +func shellHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + // this string is returned to stdout + shell := newServerShell(ch, in, "golang") + readLine(shell, t) + sendStatus(0, ch, t) +} + +// Ignores the command, writes fixed strings to stderr and stdout. +// Strings are "this-is-stdout." and "this-is-stderr.". +func fixedOutputHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + _, err := ch.Read(nil) + + req, ok := <-in + if !ok { + t.Fatalf("error: expected channel request, got: %#v", err) + return + } + + // ignore request, always send some text + req.Reply(true, nil) + + _, err = io.WriteString(ch, "this-is-stdout.") + if err != nil { + t.Fatalf("error writing on server: %v", err) + } + _, err = io.WriteString(ch.Stderr(), "this-is-stderr.") + if err != nil { + t.Fatalf("error writing on server: %v", err) + } + sendStatus(0, ch, t) +} + +func readLine(shell *terminal.Terminal, t *testing.T) { + if _, err := shell.ReadLine(); err != nil && err != io.EOF { + t.Errorf("unable to read line: %v", err) + } +} + +func sendStatus(status uint32, ch Channel, t *testing.T) { + msg := exitStatusMsg{ + Status: status, + } + if _, err := ch.SendRequest("exit-status", false, Marshal(&msg)); err != nil { + t.Errorf("unable to send status: %v", err) + } +} + +func sendSignal(signal string, ch Channel, t *testing.T) { + sig := exitSignalMsg{ + Signal: signal, + CoreDumped: false, + Errmsg: "Process terminated", + Lang: "en-GB-oed", + } + if _, err := ch.SendRequest("exit-signal", false, Marshal(&sig)); err != nil { + t.Errorf("unable to send signal: %v", err) + } +} + +func discardHandler(ch Channel, t *testing.T) { + defer ch.Close() + io.Copy(ioutil.Discard, ch) +} + +func echoHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + if n, err := copyNRandomly("echohandler", ch, ch, windowTestBytes); err != nil { + t.Errorf("short write, wrote %d, expected %d: %v ", n, windowTestBytes, err) + } +} + +// copyNRandomly copies n bytes from src to dst. It uses a variable, and random, +// buffer size to exercise more code paths. +func copyNRandomly(title string, dst io.Writer, src io.Reader, n int) (int, error) { + var ( + buf = make([]byte, 32*1024) + written int + remaining = n + ) + for remaining > 0 { + l := rand.Intn(1 << 15) + if remaining < l { + l = remaining + } + nr, er := src.Read(buf[:l]) + nw, ew := dst.Write(buf[:nr]) + remaining -= nw + written += nw + if ew != nil { + return written, ew + } + if nr != nw { + return written, io.ErrShortWrite + } + if er != nil && er != io.EOF { + return written, er + } + } + return written, nil +} + +func channelKeepaliveSender(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + shell := newServerShell(ch, in, "> ") + readLine(shell, t) + if _, err := ch.SendRequest("keepalive@openssh.com", true, nil); err != nil { + t.Errorf("unable to send channel keepalive request: %v", err) + } + sendStatus(0, ch, t) +} + +func TestClientWriteEOF(t *testing.T) { + conn := dial(simpleEchoHandler, t) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatal(err) + } + defer session.Close() + stdin, err := session.StdinPipe() + if err != nil { + t.Fatalf("StdinPipe failed: %v", err) + } + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("StdoutPipe failed: %v", err) + } + + data := []byte(`0000`) + _, err = stdin.Write(data) + if err != nil { + t.Fatalf("Write failed: %v", err) + } + stdin.Close() + + res, err := ioutil.ReadAll(stdout) + if err != nil { + t.Fatalf("Read failed: %v", err) + } + + if !bytes.Equal(data, res) { + t.Fatalf("Read differed from write, wrote: %v, read: %v", data, res) + } +} + +func simpleEchoHandler(ch Channel, in <-chan *Request, t *testing.T) { + defer ch.Close() + data, err := ioutil.ReadAll(ch) + if err != nil { + t.Errorf("handler read error: %v", err) + } + _, err = ch.Write(data) + if err != nil { + t.Errorf("handler write error: %v", err) + } +} + +func TestSessionID(t *testing.T) { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + serverID := make(chan []byte, 1) + clientID := make(chan []byte, 1) + + serverConf := &ServerConfig{ + NoClientAuth: true, + } + serverConf.AddHostKey(testSigners["ecdsa"]) + clientConf := &ClientConfig{ + HostKeyCallback: InsecureIgnoreHostKey(), + User: "user", + } + + go func() { + conn, chans, reqs, err := NewServerConn(c1, serverConf) + if err != nil { + t.Fatalf("server handshake: %v", err) + } + serverID <- conn.SessionID() + go DiscardRequests(reqs) + for ch := range chans { + ch.Reject(Prohibited, "") + } + }() + + go func() { + conn, chans, reqs, err := NewClientConn(c2, "", clientConf) + if err != nil { + t.Fatalf("client handshake: %v", err) + } + clientID <- conn.SessionID() + go DiscardRequests(reqs) + for ch := range chans { + ch.Reject(Prohibited, "") + } + }() + + s := <-serverID + c := <-clientID + if bytes.Compare(s, c) != 0 { + t.Errorf("server session ID (%x) != client session ID (%x)", s, c) + } else if len(s) == 0 { + t.Errorf("client and server SessionID were empty.") + } +} + +type noReadConn struct { + readSeen bool + net.Conn +} + +func (c *noReadConn) Close() error { + return nil +} + +func (c *noReadConn) Read(b []byte) (int, error) { + c.readSeen = true + return 0, errors.New("noReadConn error") +} + +func TestInvalidServerConfiguration(t *testing.T) { + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + serveConn := noReadConn{Conn: c1} + serverConf := &ServerConfig{} + + NewServerConn(&serveConn, serverConf) + if serveConn.readSeen { + t.Fatalf("NewServerConn attempted to Read() from Conn while configuration is missing host key") + } + + serverConf.AddHostKey(testSigners["ecdsa"]) + + NewServerConn(&serveConn, serverConf) + if serveConn.readSeen { + t.Fatalf("NewServerConn attempted to Read() from Conn while configuration is missing authentication method") + } +} + +func TestHostKeyAlgorithms(t *testing.T) { + serverConf := &ServerConfig{ + NoClientAuth: true, + } + serverConf.AddHostKey(testSigners["rsa"]) + serverConf.AddHostKey(testSigners["ecdsa"]) + + connect := func(clientConf *ClientConfig, want string) { + var alg string + clientConf.HostKeyCallback = func(h string, a net.Addr, key PublicKey) error { + alg = key.Type() + return nil + } + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go NewServerConn(c1, serverConf) + _, _, _, err = NewClientConn(c2, "", clientConf) + if err != nil { + t.Fatalf("NewClientConn: %v", err) + } + if alg != want { + t.Errorf("selected key algorithm %s, want %s", alg, want) + } + } + + // By default, we get the preferred algorithm, which is ECDSA 256. + + clientConf := &ClientConfig{ + HostKeyCallback: InsecureIgnoreHostKey(), + } + connect(clientConf, KeyAlgoECDSA256) + + // Client asks for RSA explicitly. + clientConf.HostKeyAlgorithms = []string{KeyAlgoRSA} + connect(clientConf, KeyAlgoRSA) + + c1, c2, err := netPipe() + if err != nil { + t.Fatalf("netPipe: %v", err) + } + defer c1.Close() + defer c2.Close() + + go NewServerConn(c1, serverConf) + clientConf.HostKeyAlgorithms = []string{"nonexistent-hostkey-algo"} + _, _, _, err = NewClientConn(c2, "", clientConf) + if err == nil { + t.Fatal("succeeded connecting with unknown hostkey algorithm") + } +} diff --git a/vendor/golang.org/x/crypto/ssh/streamlocal.go b/vendor/golang.org/x/crypto/ssh/streamlocal.go new file mode 100644 index 0000000..a2dccc6 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/streamlocal.go @@ -0,0 +1,115 @@ +package ssh + +import ( + "errors" + "io" + "net" +) + +// streamLocalChannelOpenDirectMsg is a struct used for SSH_MSG_CHANNEL_OPEN message +// with "direct-streamlocal@openssh.com" string. +// +// See openssh-portable/PROTOCOL, section 2.4. connection: Unix domain socket forwarding +// https://github.com/openssh/openssh-portable/blob/master/PROTOCOL#L235 +type streamLocalChannelOpenDirectMsg struct { + socketPath string + reserved0 string + reserved1 uint32 +} + +// forwardedStreamLocalPayload is a struct used for SSH_MSG_CHANNEL_OPEN message +// with "forwarded-streamlocal@openssh.com" string. +type forwardedStreamLocalPayload struct { + SocketPath string + Reserved0 string +} + +// streamLocalChannelForwardMsg is a struct used for SSH2_MSG_GLOBAL_REQUEST message +// with "streamlocal-forward@openssh.com"/"cancel-streamlocal-forward@openssh.com" string. +type streamLocalChannelForwardMsg struct { + socketPath string +} + +// ListenUnix is similar to ListenTCP but uses a Unix domain socket. +func (c *Client) ListenUnix(socketPath string) (net.Listener, error) { + m := streamLocalChannelForwardMsg{ + socketPath, + } + // send message + ok, _, err := c.SendRequest("streamlocal-forward@openssh.com", true, Marshal(&m)) + if err != nil { + return nil, err + } + if !ok { + return nil, errors.New("ssh: streamlocal-forward@openssh.com request denied by peer") + } + ch := c.forwards.add(&net.UnixAddr{Name: socketPath, Net: "unix"}) + + return &unixListener{socketPath, c, ch}, nil +} + +func (c *Client) dialStreamLocal(socketPath string) (Channel, error) { + msg := streamLocalChannelOpenDirectMsg{ + socketPath: socketPath, + } + ch, in, err := c.OpenChannel("direct-streamlocal@openssh.com", Marshal(&msg)) + if err != nil { + return nil, err + } + go DiscardRequests(in) + return ch, err +} + +type unixListener struct { + socketPath string + + conn *Client + in <-chan forward +} + +// Accept waits for and returns the next connection to the listener. +func (l *unixListener) Accept() (net.Conn, error) { + s, ok := <-l.in + if !ok { + return nil, io.EOF + } + ch, incoming, err := s.newCh.Accept() + if err != nil { + return nil, err + } + go DiscardRequests(incoming) + + return &chanConn{ + Channel: ch, + laddr: &net.UnixAddr{ + Name: l.socketPath, + Net: "unix", + }, + raddr: &net.UnixAddr{ + Name: "@", + Net: "unix", + }, + }, nil +} + +// Close closes the listener. +func (l *unixListener) Close() error { + // this also closes the listener. + l.conn.forwards.remove(&net.UnixAddr{Name: l.socketPath, Net: "unix"}) + m := streamLocalChannelForwardMsg{ + l.socketPath, + } + ok, _, err := l.conn.SendRequest("cancel-streamlocal-forward@openssh.com", true, Marshal(&m)) + if err == nil && !ok { + err = errors.New("ssh: cancel-streamlocal-forward@openssh.com failed") + } + return err +} + +// Addr returns the listener's network address. +func (l *unixListener) Addr() net.Addr { + return &net.UnixAddr{ + Name: l.socketPath, + Net: "unix", + } +} diff --git a/vendor/golang.org/x/crypto/ssh/tcpip.go b/vendor/golang.org/x/crypto/ssh/tcpip.go new file mode 100644 index 0000000..acf1717 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/tcpip.go @@ -0,0 +1,465 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "errors" + "fmt" + "io" + "math/rand" + "net" + "strconv" + "strings" + "sync" + "time" +) + +// Listen requests the remote peer open a listening socket on +// addr. Incoming connections will be available by calling Accept on +// the returned net.Listener. The listener must be serviced, or the +// SSH connection may hang. +// N must be "tcp", "tcp4", "tcp6", or "unix". +func (c *Client) Listen(n, addr string) (net.Listener, error) { + switch n { + case "tcp", "tcp4", "tcp6": + laddr, err := net.ResolveTCPAddr(n, addr) + if err != nil { + return nil, err + } + return c.ListenTCP(laddr) + case "unix": + return c.ListenUnix(addr) + default: + return nil, fmt.Errorf("ssh: unsupported protocol: %s", n) + } +} + +// Automatic port allocation is broken with OpenSSH before 6.0. See +// also https://bugzilla.mindrot.org/show_bug.cgi?id=2017. In +// particular, OpenSSH 5.9 sends a channelOpenMsg with port number 0, +// rather than the actual port number. This means you can never open +// two different listeners with auto allocated ports. We work around +// this by trying explicit ports until we succeed. + +const openSSHPrefix = "OpenSSH_" + +var portRandomizer = rand.New(rand.NewSource(time.Now().UnixNano())) + +// isBrokenOpenSSHVersion returns true if the given version string +// specifies a version of OpenSSH that is known to have a bug in port +// forwarding. +func isBrokenOpenSSHVersion(versionStr string) bool { + i := strings.Index(versionStr, openSSHPrefix) + if i < 0 { + return false + } + i += len(openSSHPrefix) + j := i + for ; j < len(versionStr); j++ { + if versionStr[j] < '0' || versionStr[j] > '9' { + break + } + } + version, _ := strconv.Atoi(versionStr[i:j]) + return version < 6 +} + +// autoPortListenWorkaround simulates automatic port allocation by +// trying random ports repeatedly. +func (c *Client) autoPortListenWorkaround(laddr *net.TCPAddr) (net.Listener, error) { + var sshListener net.Listener + var err error + const tries = 10 + for i := 0; i < tries; i++ { + addr := *laddr + addr.Port = 1024 + portRandomizer.Intn(60000) + sshListener, err = c.ListenTCP(&addr) + if err == nil { + laddr.Port = addr.Port + return sshListener, err + } + } + return nil, fmt.Errorf("ssh: listen on random port failed after %d tries: %v", tries, err) +} + +// RFC 4254 7.1 +type channelForwardMsg struct { + addr string + rport uint32 +} + +// ListenTCP requests the remote peer open a listening socket +// on laddr. Incoming connections will be available by calling +// Accept on the returned net.Listener. +func (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) { + if laddr.Port == 0 && isBrokenOpenSSHVersion(string(c.ServerVersion())) { + return c.autoPortListenWorkaround(laddr) + } + + m := channelForwardMsg{ + laddr.IP.String(), + uint32(laddr.Port), + } + // send message + ok, resp, err := c.SendRequest("tcpip-forward", true, Marshal(&m)) + if err != nil { + return nil, err + } + if !ok { + return nil, errors.New("ssh: tcpip-forward request denied by peer") + } + + // If the original port was 0, then the remote side will + // supply a real port number in the response. + if laddr.Port == 0 { + var p struct { + Port uint32 + } + if err := Unmarshal(resp, &p); err != nil { + return nil, err + } + laddr.Port = int(p.Port) + } + + // Register this forward, using the port number we obtained. + ch := c.forwards.add(laddr) + + return &tcpListener{laddr, c, ch}, nil +} + +// forwardList stores a mapping between remote +// forward requests and the tcpListeners. +type forwardList struct { + sync.Mutex + entries []forwardEntry +} + +// forwardEntry represents an established mapping of a laddr on a +// remote ssh server to a channel connected to a tcpListener. +type forwardEntry struct { + laddr net.Addr + c chan forward +} + +// forward represents an incoming forwarded tcpip connection. The +// arguments to add/remove/lookup should be address as specified in +// the original forward-request. +type forward struct { + newCh NewChannel // the ssh client channel underlying this forward + raddr net.Addr // the raddr of the incoming connection +} + +func (l *forwardList) add(addr net.Addr) chan forward { + l.Lock() + defer l.Unlock() + f := forwardEntry{ + laddr: addr, + c: make(chan forward, 1), + } + l.entries = append(l.entries, f) + return f.c +} + +// See RFC 4254, section 7.2 +type forwardedTCPPayload struct { + Addr string + Port uint32 + OriginAddr string + OriginPort uint32 +} + +// parseTCPAddr parses the originating address from the remote into a *net.TCPAddr. +func parseTCPAddr(addr string, port uint32) (*net.TCPAddr, error) { + if port == 0 || port > 65535 { + return nil, fmt.Errorf("ssh: port number out of range: %d", port) + } + ip := net.ParseIP(string(addr)) + if ip == nil { + return nil, fmt.Errorf("ssh: cannot parse IP address %q", addr) + } + return &net.TCPAddr{IP: ip, Port: int(port)}, nil +} + +func (l *forwardList) handleChannels(in <-chan NewChannel) { + for ch := range in { + var ( + laddr net.Addr + raddr net.Addr + err error + ) + switch channelType := ch.ChannelType(); channelType { + case "forwarded-tcpip": + var payload forwardedTCPPayload + if err = Unmarshal(ch.ExtraData(), &payload); err != nil { + ch.Reject(ConnectionFailed, "could not parse forwarded-tcpip payload: "+err.Error()) + continue + } + + // RFC 4254 section 7.2 specifies that incoming + // addresses should list the address, in string + // format. It is implied that this should be an IP + // address, as it would be impossible to connect to it + // otherwise. + laddr, err = parseTCPAddr(payload.Addr, payload.Port) + if err != nil { + ch.Reject(ConnectionFailed, err.Error()) + continue + } + raddr, err = parseTCPAddr(payload.OriginAddr, payload.OriginPort) + if err != nil { + ch.Reject(ConnectionFailed, err.Error()) + continue + } + + case "forwarded-streamlocal@openssh.com": + var payload forwardedStreamLocalPayload + if err = Unmarshal(ch.ExtraData(), &payload); err != nil { + ch.Reject(ConnectionFailed, "could not parse forwarded-streamlocal@openssh.com payload: "+err.Error()) + continue + } + laddr = &net.UnixAddr{ + Name: payload.SocketPath, + Net: "unix", + } + raddr = &net.UnixAddr{ + Name: "@", + Net: "unix", + } + default: + panic(fmt.Errorf("ssh: unknown channel type %s", channelType)) + } + if ok := l.forward(laddr, raddr, ch); !ok { + // Section 7.2, implementations MUST reject spurious incoming + // connections. + ch.Reject(Prohibited, "no forward for address") + continue + } + + } +} + +// remove removes the forward entry, and the channel feeding its +// listener. +func (l *forwardList) remove(addr net.Addr) { + l.Lock() + defer l.Unlock() + for i, f := range l.entries { + if addr.Network() == f.laddr.Network() && addr.String() == f.laddr.String() { + l.entries = append(l.entries[:i], l.entries[i+1:]...) + close(f.c) + return + } + } +} + +// closeAll closes and clears all forwards. +func (l *forwardList) closeAll() { + l.Lock() + defer l.Unlock() + for _, f := range l.entries { + close(f.c) + } + l.entries = nil +} + +func (l *forwardList) forward(laddr, raddr net.Addr, ch NewChannel) bool { + l.Lock() + defer l.Unlock() + for _, f := range l.entries { + if laddr.Network() == f.laddr.Network() && laddr.String() == f.laddr.String() { + f.c <- forward{newCh: ch, raddr: raddr} + return true + } + } + return false +} + +type tcpListener struct { + laddr *net.TCPAddr + + conn *Client + in <-chan forward +} + +// Accept waits for and returns the next connection to the listener. +func (l *tcpListener) Accept() (net.Conn, error) { + s, ok := <-l.in + if !ok { + return nil, io.EOF + } + ch, incoming, err := s.newCh.Accept() + if err != nil { + return nil, err + } + go DiscardRequests(incoming) + + return &chanConn{ + Channel: ch, + laddr: l.laddr, + raddr: s.raddr, + }, nil +} + +// Close closes the listener. +func (l *tcpListener) Close() error { + m := channelForwardMsg{ + l.laddr.IP.String(), + uint32(l.laddr.Port), + } + + // this also closes the listener. + l.conn.forwards.remove(l.laddr) + ok, _, err := l.conn.SendRequest("cancel-tcpip-forward", true, Marshal(&m)) + if err == nil && !ok { + err = errors.New("ssh: cancel-tcpip-forward failed") + } + return err +} + +// Addr returns the listener's network address. +func (l *tcpListener) Addr() net.Addr { + return l.laddr +} + +// Dial initiates a connection to the addr from the remote host. +// The resulting connection has a zero LocalAddr() and RemoteAddr(). +func (c *Client) Dial(n, addr string) (net.Conn, error) { + var ch Channel + switch n { + case "tcp", "tcp4", "tcp6": + // Parse the address into host and numeric port. + host, portString, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + port, err := strconv.ParseUint(portString, 10, 16) + if err != nil { + return nil, err + } + ch, err = c.dial(net.IPv4zero.String(), 0, host, int(port)) + if err != nil { + return nil, err + } + // Use a zero address for local and remote address. + zeroAddr := &net.TCPAddr{ + IP: net.IPv4zero, + Port: 0, + } + return &chanConn{ + Channel: ch, + laddr: zeroAddr, + raddr: zeroAddr, + }, nil + case "unix": + var err error + ch, err = c.dialStreamLocal(addr) + if err != nil { + return nil, err + } + return &chanConn{ + Channel: ch, + laddr: &net.UnixAddr{ + Name: "@", + Net: "unix", + }, + raddr: &net.UnixAddr{ + Name: addr, + Net: "unix", + }, + }, nil + default: + return nil, fmt.Errorf("ssh: unsupported protocol: %s", n) + } +} + +// DialTCP connects to the remote address raddr on the network net, +// which must be "tcp", "tcp4", or "tcp6". If laddr is not nil, it is used +// as the local address for the connection. +func (c *Client) DialTCP(n string, laddr, raddr *net.TCPAddr) (net.Conn, error) { + if laddr == nil { + laddr = &net.TCPAddr{ + IP: net.IPv4zero, + Port: 0, + } + } + ch, err := c.dial(laddr.IP.String(), laddr.Port, raddr.IP.String(), raddr.Port) + if err != nil { + return nil, err + } + return &chanConn{ + Channel: ch, + laddr: laddr, + raddr: raddr, + }, nil +} + +// RFC 4254 7.2 +type channelOpenDirectMsg struct { + raddr string + rport uint32 + laddr string + lport uint32 +} + +func (c *Client) dial(laddr string, lport int, raddr string, rport int) (Channel, error) { + msg := channelOpenDirectMsg{ + raddr: raddr, + rport: uint32(rport), + laddr: laddr, + lport: uint32(lport), + } + ch, in, err := c.OpenChannel("direct-tcpip", Marshal(&msg)) + if err != nil { + return nil, err + } + go DiscardRequests(in) + return ch, err +} + +type tcpChan struct { + Channel // the backing channel +} + +// chanConn fulfills the net.Conn interface without +// the tcpChan having to hold laddr or raddr directly. +type chanConn struct { + Channel + laddr, raddr net.Addr +} + +// LocalAddr returns the local network address. +func (t *chanConn) LocalAddr() net.Addr { + return t.laddr +} + +// RemoteAddr returns the remote network address. +func (t *chanConn) RemoteAddr() net.Addr { + return t.raddr +} + +// SetDeadline sets the read and write deadlines associated +// with the connection. +func (t *chanConn) SetDeadline(deadline time.Time) error { + if err := t.SetReadDeadline(deadline); err != nil { + return err + } + return t.SetWriteDeadline(deadline) +} + +// SetReadDeadline sets the read deadline. +// A zero value for t means Read will not time out. +// After the deadline, the error from Read will implement net.Error +// with Timeout() == true. +func (t *chanConn) SetReadDeadline(deadline time.Time) error { + // for compatibility with previous version, + // the error message contains "tcpChan" + return errors.New("ssh: tcpChan: deadline not supported") +} + +// SetWriteDeadline exists to satisfy the net.Conn interface +// but is not implemented by this type. It always returns an error. +func (t *chanConn) SetWriteDeadline(deadline time.Time) error { + return errors.New("ssh: tcpChan: deadline not supported") +} diff --git a/vendor/golang.org/x/crypto/ssh/tcpip_test.go b/vendor/golang.org/x/crypto/ssh/tcpip_test.go new file mode 100644 index 0000000..f1265cb --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/tcpip_test.go @@ -0,0 +1,20 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "testing" +) + +func TestAutoPortListenBroken(t *testing.T) { + broken := "SSH-2.0-OpenSSH_5.9hh11" + works := "SSH-2.0-OpenSSH_6.1" + if !isBrokenOpenSSHVersion(broken) { + t.Errorf("version %q not marked as broken", broken) + } + if isBrokenOpenSSHVersion(works) { + t.Errorf("version %q marked as broken", works) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go new file mode 100644 index 0000000..18379a9 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go @@ -0,0 +1,951 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package terminal + +import ( + "bytes" + "io" + "sync" + "unicode/utf8" +) + +// EscapeCodes contains escape sequences that can be written to the terminal in +// order to achieve different styles of text. +type EscapeCodes struct { + // Foreground colors + Black, Red, Green, Yellow, Blue, Magenta, Cyan, White []byte + + // Reset all attributes + Reset []byte +} + +var vt100EscapeCodes = EscapeCodes{ + Black: []byte{keyEscape, '[', '3', '0', 'm'}, + Red: []byte{keyEscape, '[', '3', '1', 'm'}, + Green: []byte{keyEscape, '[', '3', '2', 'm'}, + Yellow: []byte{keyEscape, '[', '3', '3', 'm'}, + Blue: []byte{keyEscape, '[', '3', '4', 'm'}, + Magenta: []byte{keyEscape, '[', '3', '5', 'm'}, + Cyan: []byte{keyEscape, '[', '3', '6', 'm'}, + White: []byte{keyEscape, '[', '3', '7', 'm'}, + + Reset: []byte{keyEscape, '[', '0', 'm'}, +} + +// Terminal contains the state for running a VT100 terminal that is capable of +// reading lines of input. +type Terminal struct { + // AutoCompleteCallback, if non-null, is called for each keypress with + // the full input line and the current position of the cursor (in + // bytes, as an index into |line|). If it returns ok=false, the key + // press is processed normally. Otherwise it returns a replacement line + // and the new cursor position. + AutoCompleteCallback func(line string, pos int, key rune) (newLine string, newPos int, ok bool) + + // Escape contains a pointer to the escape codes for this terminal. + // It's always a valid pointer, although the escape codes themselves + // may be empty if the terminal doesn't support them. + Escape *EscapeCodes + + // lock protects the terminal and the state in this object from + // concurrent processing of a key press and a Write() call. + lock sync.Mutex + + c io.ReadWriter + prompt []rune + + // line is the current line being entered. + line []rune + // pos is the logical position of the cursor in line + pos int + // echo is true if local echo is enabled + echo bool + // pasteActive is true iff there is a bracketed paste operation in + // progress. + pasteActive bool + + // cursorX contains the current X value of the cursor where the left + // edge is 0. cursorY contains the row number where the first row of + // the current line is 0. + cursorX, cursorY int + // maxLine is the greatest value of cursorY so far. + maxLine int + + termWidth, termHeight int + + // outBuf contains the terminal data to be sent. + outBuf []byte + // remainder contains the remainder of any partial key sequences after + // a read. It aliases into inBuf. + remainder []byte + inBuf [256]byte + + // history contains previously entered commands so that they can be + // accessed with the up and down keys. + history stRingBuffer + // historyIndex stores the currently accessed history entry, where zero + // means the immediately previous entry. + historyIndex int + // When navigating up and down the history it's possible to return to + // the incomplete, initial line. That value is stored in + // historyPending. + historyPending string +} + +// NewTerminal runs a VT100 terminal on the given ReadWriter. If the ReadWriter is +// a local terminal, that terminal must first have been put into raw mode. +// prompt is a string that is written at the start of each input line (i.e. +// "> "). +func NewTerminal(c io.ReadWriter, prompt string) *Terminal { + return &Terminal{ + Escape: &vt100EscapeCodes, + c: c, + prompt: []rune(prompt), + termWidth: 80, + termHeight: 24, + echo: true, + historyIndex: -1, + } +} + +const ( + keyCtrlD = 4 + keyCtrlU = 21 + keyEnter = '\r' + keyEscape = 27 + keyBackspace = 127 + keyUnknown = 0xd800 /* UTF-16 surrogate area */ + iota + keyUp + keyDown + keyLeft + keyRight + keyAltLeft + keyAltRight + keyHome + keyEnd + keyDeleteWord + keyDeleteLine + keyClearScreen + keyPasteStart + keyPasteEnd +) + +var ( + crlf = []byte{'\r', '\n'} + pasteStart = []byte{keyEscape, '[', '2', '0', '0', '~'} + pasteEnd = []byte{keyEscape, '[', '2', '0', '1', '~'} +) + +// bytesToKey tries to parse a key sequence from b. If successful, it returns +// the key and the remainder of the input. Otherwise it returns utf8.RuneError. +func bytesToKey(b []byte, pasteActive bool) (rune, []byte) { + if len(b) == 0 { + return utf8.RuneError, nil + } + + if !pasteActive { + switch b[0] { + case 1: // ^A + return keyHome, b[1:] + case 5: // ^E + return keyEnd, b[1:] + case 8: // ^H + return keyBackspace, b[1:] + case 11: // ^K + return keyDeleteLine, b[1:] + case 12: // ^L + return keyClearScreen, b[1:] + case 23: // ^W + return keyDeleteWord, b[1:] + } + } + + if b[0] != keyEscape { + if !utf8.FullRune(b) { + return utf8.RuneError, b + } + r, l := utf8.DecodeRune(b) + return r, b[l:] + } + + if !pasteActive && len(b) >= 3 && b[0] == keyEscape && b[1] == '[' { + switch b[2] { + case 'A': + return keyUp, b[3:] + case 'B': + return keyDown, b[3:] + case 'C': + return keyRight, b[3:] + case 'D': + return keyLeft, b[3:] + case 'H': + return keyHome, b[3:] + case 'F': + return keyEnd, b[3:] + } + } + + if !pasteActive && len(b) >= 6 && b[0] == keyEscape && b[1] == '[' && b[2] == '1' && b[3] == ';' && b[4] == '3' { + switch b[5] { + case 'C': + return keyAltRight, b[6:] + case 'D': + return keyAltLeft, b[6:] + } + } + + if !pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteStart) { + return keyPasteStart, b[6:] + } + + if pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteEnd) { + return keyPasteEnd, b[6:] + } + + // If we get here then we have a key that we don't recognise, or a + // partial sequence. It's not clear how one should find the end of a + // sequence without knowing them all, but it seems that [a-zA-Z~] only + // appears at the end of a sequence. + for i, c := range b[0:] { + if c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '~' { + return keyUnknown, b[i+1:] + } + } + + return utf8.RuneError, b +} + +// queue appends data to the end of t.outBuf +func (t *Terminal) queue(data []rune) { + t.outBuf = append(t.outBuf, []byte(string(data))...) +} + +var eraseUnderCursor = []rune{' ', keyEscape, '[', 'D'} +var space = []rune{' '} + +func isPrintable(key rune) bool { + isInSurrogateArea := key >= 0xd800 && key <= 0xdbff + return key >= 32 && !isInSurrogateArea +} + +// moveCursorToPos appends data to t.outBuf which will move the cursor to the +// given, logical position in the text. +func (t *Terminal) moveCursorToPos(pos int) { + if !t.echo { + return + } + + x := visualLength(t.prompt) + pos + y := x / t.termWidth + x = x % t.termWidth + + up := 0 + if y < t.cursorY { + up = t.cursorY - y + } + + down := 0 + if y > t.cursorY { + down = y - t.cursorY + } + + left := 0 + if x < t.cursorX { + left = t.cursorX - x + } + + right := 0 + if x > t.cursorX { + right = x - t.cursorX + } + + t.cursorX = x + t.cursorY = y + t.move(up, down, left, right) +} + +func (t *Terminal) move(up, down, left, right int) { + movement := make([]rune, 3*(up+down+left+right)) + m := movement + for i := 0; i < up; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'A' + m = m[3:] + } + for i := 0; i < down; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'B' + m = m[3:] + } + for i := 0; i < left; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'D' + m = m[3:] + } + for i := 0; i < right; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'C' + m = m[3:] + } + + t.queue(movement) +} + +func (t *Terminal) clearLineToRight() { + op := []rune{keyEscape, '[', 'K'} + t.queue(op) +} + +const maxLineLength = 4096 + +func (t *Terminal) setLine(newLine []rune, newPos int) { + if t.echo { + t.moveCursorToPos(0) + t.writeLine(newLine) + for i := len(newLine); i < len(t.line); i++ { + t.writeLine(space) + } + t.moveCursorToPos(newPos) + } + t.line = newLine + t.pos = newPos +} + +func (t *Terminal) advanceCursor(places int) { + t.cursorX += places + t.cursorY += t.cursorX / t.termWidth + if t.cursorY > t.maxLine { + t.maxLine = t.cursorY + } + t.cursorX = t.cursorX % t.termWidth + + if places > 0 && t.cursorX == 0 { + // Normally terminals will advance the current position + // when writing a character. But that doesn't happen + // for the last character in a line. However, when + // writing a character (except a new line) that causes + // a line wrap, the position will be advanced two + // places. + // + // So, if we are stopping at the end of a line, we + // need to write a newline so that our cursor can be + // advanced to the next line. + t.outBuf = append(t.outBuf, '\r', '\n') + } +} + +func (t *Terminal) eraseNPreviousChars(n int) { + if n == 0 { + return + } + + if t.pos < n { + n = t.pos + } + t.pos -= n + t.moveCursorToPos(t.pos) + + copy(t.line[t.pos:], t.line[n+t.pos:]) + t.line = t.line[:len(t.line)-n] + if t.echo { + t.writeLine(t.line[t.pos:]) + for i := 0; i < n; i++ { + t.queue(space) + } + t.advanceCursor(n) + t.moveCursorToPos(t.pos) + } +} + +// countToLeftWord returns then number of characters from the cursor to the +// start of the previous word. +func (t *Terminal) countToLeftWord() int { + if t.pos == 0 { + return 0 + } + + pos := t.pos - 1 + for pos > 0 { + if t.line[pos] != ' ' { + break + } + pos-- + } + for pos > 0 { + if t.line[pos] == ' ' { + pos++ + break + } + pos-- + } + + return t.pos - pos +} + +// countToRightWord returns then number of characters from the cursor to the +// start of the next word. +func (t *Terminal) countToRightWord() int { + pos := t.pos + for pos < len(t.line) { + if t.line[pos] == ' ' { + break + } + pos++ + } + for pos < len(t.line) { + if t.line[pos] != ' ' { + break + } + pos++ + } + return pos - t.pos +} + +// visualLength returns the number of visible glyphs in s. +func visualLength(runes []rune) int { + inEscapeSeq := false + length := 0 + + for _, r := range runes { + switch { + case inEscapeSeq: + if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') { + inEscapeSeq = false + } + case r == '\x1b': + inEscapeSeq = true + default: + length++ + } + } + + return length +} + +// handleKey processes the given key and, optionally, returns a line of text +// that the user has entered. +func (t *Terminal) handleKey(key rune) (line string, ok bool) { + if t.pasteActive && key != keyEnter { + t.addKeyToLine(key) + return + } + + switch key { + case keyBackspace: + if t.pos == 0 { + return + } + t.eraseNPreviousChars(1) + case keyAltLeft: + // move left by a word. + t.pos -= t.countToLeftWord() + t.moveCursorToPos(t.pos) + case keyAltRight: + // move right by a word. + t.pos += t.countToRightWord() + t.moveCursorToPos(t.pos) + case keyLeft: + if t.pos == 0 { + return + } + t.pos-- + t.moveCursorToPos(t.pos) + case keyRight: + if t.pos == len(t.line) { + return + } + t.pos++ + t.moveCursorToPos(t.pos) + case keyHome: + if t.pos == 0 { + return + } + t.pos = 0 + t.moveCursorToPos(t.pos) + case keyEnd: + if t.pos == len(t.line) { + return + } + t.pos = len(t.line) + t.moveCursorToPos(t.pos) + case keyUp: + entry, ok := t.history.NthPreviousEntry(t.historyIndex + 1) + if !ok { + return "", false + } + if t.historyIndex == -1 { + t.historyPending = string(t.line) + } + t.historyIndex++ + runes := []rune(entry) + t.setLine(runes, len(runes)) + case keyDown: + switch t.historyIndex { + case -1: + return + case 0: + runes := []rune(t.historyPending) + t.setLine(runes, len(runes)) + t.historyIndex-- + default: + entry, ok := t.history.NthPreviousEntry(t.historyIndex - 1) + if ok { + t.historyIndex-- + runes := []rune(entry) + t.setLine(runes, len(runes)) + } + } + case keyEnter: + t.moveCursorToPos(len(t.line)) + t.queue([]rune("\r\n")) + line = string(t.line) + ok = true + t.line = t.line[:0] + t.pos = 0 + t.cursorX = 0 + t.cursorY = 0 + t.maxLine = 0 + case keyDeleteWord: + // Delete zero or more spaces and then one or more characters. + t.eraseNPreviousChars(t.countToLeftWord()) + case keyDeleteLine: + // Delete everything from the current cursor position to the + // end of line. + for i := t.pos; i < len(t.line); i++ { + t.queue(space) + t.advanceCursor(1) + } + t.line = t.line[:t.pos] + t.moveCursorToPos(t.pos) + case keyCtrlD: + // Erase the character under the current position. + // The EOF case when the line is empty is handled in + // readLine(). + if t.pos < len(t.line) { + t.pos++ + t.eraseNPreviousChars(1) + } + case keyCtrlU: + t.eraseNPreviousChars(t.pos) + case keyClearScreen: + // Erases the screen and moves the cursor to the home position. + t.queue([]rune("\x1b[2J\x1b[H")) + t.queue(t.prompt) + t.cursorX, t.cursorY = 0, 0 + t.advanceCursor(visualLength(t.prompt)) + t.setLine(t.line, t.pos) + default: + if t.AutoCompleteCallback != nil { + prefix := string(t.line[:t.pos]) + suffix := string(t.line[t.pos:]) + + t.lock.Unlock() + newLine, newPos, completeOk := t.AutoCompleteCallback(prefix+suffix, len(prefix), key) + t.lock.Lock() + + if completeOk { + t.setLine([]rune(newLine), utf8.RuneCount([]byte(newLine)[:newPos])) + return + } + } + if !isPrintable(key) { + return + } + if len(t.line) == maxLineLength { + return + } + t.addKeyToLine(key) + } + return +} + +// addKeyToLine inserts the given key at the current position in the current +// line. +func (t *Terminal) addKeyToLine(key rune) { + if len(t.line) == cap(t.line) { + newLine := make([]rune, len(t.line), 2*(1+len(t.line))) + copy(newLine, t.line) + t.line = newLine + } + t.line = t.line[:len(t.line)+1] + copy(t.line[t.pos+1:], t.line[t.pos:]) + t.line[t.pos] = key + if t.echo { + t.writeLine(t.line[t.pos:]) + } + t.pos++ + t.moveCursorToPos(t.pos) +} + +func (t *Terminal) writeLine(line []rune) { + for len(line) != 0 { + remainingOnLine := t.termWidth - t.cursorX + todo := len(line) + if todo > remainingOnLine { + todo = remainingOnLine + } + t.queue(line[:todo]) + t.advanceCursor(visualLength(line[:todo])) + line = line[todo:] + } +} + +// writeWithCRLF writes buf to w but replaces all occurrences of \n with \r\n. +func writeWithCRLF(w io.Writer, buf []byte) (n int, err error) { + for len(buf) > 0 { + i := bytes.IndexByte(buf, '\n') + todo := len(buf) + if i >= 0 { + todo = i + } + + var nn int + nn, err = w.Write(buf[:todo]) + n += nn + if err != nil { + return n, err + } + buf = buf[todo:] + + if i >= 0 { + if _, err = w.Write(crlf); err != nil { + return n, err + } + n += 1 + buf = buf[1:] + } + } + + return n, nil +} + +func (t *Terminal) Write(buf []byte) (n int, err error) { + t.lock.Lock() + defer t.lock.Unlock() + + if t.cursorX == 0 && t.cursorY == 0 { + // This is the easy case: there's nothing on the screen that we + // have to move out of the way. + return writeWithCRLF(t.c, buf) + } + + // We have a prompt and possibly user input on the screen. We + // have to clear it first. + t.move(0 /* up */, 0 /* down */, t.cursorX /* left */, 0 /* right */) + t.cursorX = 0 + t.clearLineToRight() + + for t.cursorY > 0 { + t.move(1 /* up */, 0, 0, 0) + t.cursorY-- + t.clearLineToRight() + } + + if _, err = t.c.Write(t.outBuf); err != nil { + return + } + t.outBuf = t.outBuf[:0] + + if n, err = writeWithCRLF(t.c, buf); err != nil { + return + } + + t.writeLine(t.prompt) + if t.echo { + t.writeLine(t.line) + } + + t.moveCursorToPos(t.pos) + + if _, err = t.c.Write(t.outBuf); err != nil { + return + } + t.outBuf = t.outBuf[:0] + return +} + +// ReadPassword temporarily changes the prompt and reads a password, without +// echo, from the terminal. +func (t *Terminal) ReadPassword(prompt string) (line string, err error) { + t.lock.Lock() + defer t.lock.Unlock() + + oldPrompt := t.prompt + t.prompt = []rune(prompt) + t.echo = false + + line, err = t.readLine() + + t.prompt = oldPrompt + t.echo = true + + return +} + +// ReadLine returns a line of input from the terminal. +func (t *Terminal) ReadLine() (line string, err error) { + t.lock.Lock() + defer t.lock.Unlock() + + return t.readLine() +} + +func (t *Terminal) readLine() (line string, err error) { + // t.lock must be held at this point + + if t.cursorX == 0 && t.cursorY == 0 { + t.writeLine(t.prompt) + t.c.Write(t.outBuf) + t.outBuf = t.outBuf[:0] + } + + lineIsPasted := t.pasteActive + + for { + rest := t.remainder + lineOk := false + for !lineOk { + var key rune + key, rest = bytesToKey(rest, t.pasteActive) + if key == utf8.RuneError { + break + } + if !t.pasteActive { + if key == keyCtrlD { + if len(t.line) == 0 { + return "", io.EOF + } + } + if key == keyPasteStart { + t.pasteActive = true + if len(t.line) == 0 { + lineIsPasted = true + } + continue + } + } else if key == keyPasteEnd { + t.pasteActive = false + continue + } + if !t.pasteActive { + lineIsPasted = false + } + line, lineOk = t.handleKey(key) + } + if len(rest) > 0 { + n := copy(t.inBuf[:], rest) + t.remainder = t.inBuf[:n] + } else { + t.remainder = nil + } + t.c.Write(t.outBuf) + t.outBuf = t.outBuf[:0] + if lineOk { + if t.echo { + t.historyIndex = -1 + t.history.Add(line) + } + if lineIsPasted { + err = ErrPasteIndicator + } + return + } + + // t.remainder is a slice at the beginning of t.inBuf + // containing a partial key sequence + readBuf := t.inBuf[len(t.remainder):] + var n int + + t.lock.Unlock() + n, err = t.c.Read(readBuf) + t.lock.Lock() + + if err != nil { + return + } + + t.remainder = t.inBuf[:n+len(t.remainder)] + } +} + +// SetPrompt sets the prompt to be used when reading subsequent lines. +func (t *Terminal) SetPrompt(prompt string) { + t.lock.Lock() + defer t.lock.Unlock() + + t.prompt = []rune(prompt) +} + +func (t *Terminal) clearAndRepaintLinePlusNPrevious(numPrevLines int) { + // Move cursor to column zero at the start of the line. + t.move(t.cursorY, 0, t.cursorX, 0) + t.cursorX, t.cursorY = 0, 0 + t.clearLineToRight() + for t.cursorY < numPrevLines { + // Move down a line + t.move(0, 1, 0, 0) + t.cursorY++ + t.clearLineToRight() + } + // Move back to beginning. + t.move(t.cursorY, 0, 0, 0) + t.cursorX, t.cursorY = 0, 0 + + t.queue(t.prompt) + t.advanceCursor(visualLength(t.prompt)) + t.writeLine(t.line) + t.moveCursorToPos(t.pos) +} + +func (t *Terminal) SetSize(width, height int) error { + t.lock.Lock() + defer t.lock.Unlock() + + if width == 0 { + width = 1 + } + + oldWidth := t.termWidth + t.termWidth, t.termHeight = width, height + + switch { + case width == oldWidth: + // If the width didn't change then nothing else needs to be + // done. + return nil + case len(t.line) == 0 && t.cursorX == 0 && t.cursorY == 0: + // If there is nothing on current line and no prompt printed, + // just do nothing + return nil + case width < oldWidth: + // Some terminals (e.g. xterm) will truncate lines that were + // too long when shinking. Others, (e.g. gnome-terminal) will + // attempt to wrap them. For the former, repainting t.maxLine + // works great, but that behaviour goes badly wrong in the case + // of the latter because they have doubled every full line. + + // We assume that we are working on a terminal that wraps lines + // and adjust the cursor position based on every previous line + // wrapping and turning into two. This causes the prompt on + // xterms to move upwards, which isn't great, but it avoids a + // huge mess with gnome-terminal. + if t.cursorX >= t.termWidth { + t.cursorX = t.termWidth - 1 + } + t.cursorY *= 2 + t.clearAndRepaintLinePlusNPrevious(t.maxLine * 2) + case width > oldWidth: + // If the terminal expands then our position calculations will + // be wrong in the future because we think the cursor is + // |t.pos| chars into the string, but there will be a gap at + // the end of any wrapped line. + // + // But the position will actually be correct until we move, so + // we can move back to the beginning and repaint everything. + t.clearAndRepaintLinePlusNPrevious(t.maxLine) + } + + _, err := t.c.Write(t.outBuf) + t.outBuf = t.outBuf[:0] + return err +} + +type pasteIndicatorError struct{} + +func (pasteIndicatorError) Error() string { + return "terminal: ErrPasteIndicator not correctly handled" +} + +// ErrPasteIndicator may be returned from ReadLine as the error, in addition +// to valid line data. It indicates that bracketed paste mode is enabled and +// that the returned line consists only of pasted data. Programs may wish to +// interpret pasted data more literally than typed data. +var ErrPasteIndicator = pasteIndicatorError{} + +// SetBracketedPasteMode requests that the terminal bracket paste operations +// with markers. Not all terminals support this but, if it is supported, then +// enabling this mode will stop any autocomplete callback from running due to +// pastes. Additionally, any lines that are completely pasted will be returned +// from ReadLine with the error set to ErrPasteIndicator. +func (t *Terminal) SetBracketedPasteMode(on bool) { + if on { + io.WriteString(t.c, "\x1b[?2004h") + } else { + io.WriteString(t.c, "\x1b[?2004l") + } +} + +// stRingBuffer is a ring buffer of strings. +type stRingBuffer struct { + // entries contains max elements. + entries []string + max int + // head contains the index of the element most recently added to the ring. + head int + // size contains the number of elements in the ring. + size int +} + +func (s *stRingBuffer) Add(a string) { + if s.entries == nil { + const defaultNumEntries = 100 + s.entries = make([]string, defaultNumEntries) + s.max = defaultNumEntries + } + + s.head = (s.head + 1) % s.max + s.entries[s.head] = a + if s.size < s.max { + s.size++ + } +} + +// NthPreviousEntry returns the value passed to the nth previous call to Add. +// If n is zero then the immediately prior value is returned, if one, then the +// next most recent, and so on. If such an element doesn't exist then ok is +// false. +func (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) { + if n >= s.size { + return "", false + } + index := s.head - n + if index < 0 { + index += s.max + } + return s.entries[index], true +} + +// readPasswordLine reads from reader until it finds \n or io.EOF. +// The slice returned does not include the \n. +// readPasswordLine also ignores any \r it finds. +func readPasswordLine(reader io.Reader) ([]byte, error) { + var buf [1]byte + var ret []byte + + for { + n, err := reader.Read(buf[:]) + if n > 0 { + switch buf[0] { + case '\n': + return ret, nil + case '\r': + // remove \r from passwords on Windows + default: + ret = append(ret, buf[0]) + } + continue + } + if err != nil { + if err == io.EOF && len(ret) > 0 { + return ret, nil + } + return ret, err + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go new file mode 100644 index 0000000..901c72a --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/terminal_test.go @@ -0,0 +1,350 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package terminal + +import ( + "bytes" + "io" + "os" + "testing" +) + +type MockTerminal struct { + toSend []byte + bytesPerRead int + received []byte +} + +func (c *MockTerminal) Read(data []byte) (n int, err error) { + n = len(data) + if n == 0 { + return + } + if n > len(c.toSend) { + n = len(c.toSend) + } + if n == 0 { + return 0, io.EOF + } + if c.bytesPerRead > 0 && n > c.bytesPerRead { + n = c.bytesPerRead + } + copy(data, c.toSend[:n]) + c.toSend = c.toSend[n:] + return +} + +func (c *MockTerminal) Write(data []byte) (n int, err error) { + c.received = append(c.received, data...) + return len(data), nil +} + +func TestClose(t *testing.T) { + c := &MockTerminal{} + ss := NewTerminal(c, "> ") + line, err := ss.ReadLine() + if line != "" { + t.Errorf("Expected empty line but got: %s", line) + } + if err != io.EOF { + t.Errorf("Error should have been EOF but got: %s", err) + } +} + +var keyPressTests = []struct { + in string + line string + err error + throwAwayLines int +}{ + { + err: io.EOF, + }, + { + in: "\r", + line: "", + }, + { + in: "foo\r", + line: "foo", + }, + { + in: "a\x1b[Cb\r", // right + line: "ab", + }, + { + in: "a\x1b[Db\r", // left + line: "ba", + }, + { + in: "a\177b\r", // backspace + line: "b", + }, + { + in: "\x1b[A\r", // up + }, + { + in: "\x1b[B\r", // down + }, + { + in: "line\x1b[A\x1b[B\r", // up then down + line: "line", + }, + { + in: "line1\rline2\x1b[A\r", // recall previous line. + line: "line1", + throwAwayLines: 1, + }, + { + // recall two previous lines and append. + in: "line1\rline2\rline3\x1b[A\x1b[Axxx\r", + line: "line1xxx", + throwAwayLines: 2, + }, + { + // Ctrl-A to move to beginning of line followed by ^K to kill + // line. + in: "a b \001\013\r", + line: "", + }, + { + // Ctrl-A to move to beginning of line, Ctrl-E to move to end, + // finally ^K to kill nothing. + in: "a b \001\005\013\r", + line: "a b ", + }, + { + in: "\027\r", + line: "", + }, + { + in: "a\027\r", + line: "", + }, + { + in: "a \027\r", + line: "", + }, + { + in: "a b\027\r", + line: "a ", + }, + { + in: "a b \027\r", + line: "a ", + }, + { + in: "one two thr\x1b[D\027\r", + line: "one two r", + }, + { + in: "\013\r", + line: "", + }, + { + in: "a\013\r", + line: "a", + }, + { + in: "ab\x1b[D\013\r", + line: "a", + }, + { + in: "Ξεσκεπάζω\r", + line: "Ξεσκεπάζω", + }, + { + in: "£\r\x1b[A\177\r", // non-ASCII char, enter, up, backspace. + line: "", + throwAwayLines: 1, + }, + { + in: "£\r££\x1b[A\x1b[B\177\r", // non-ASCII char, enter, 2x non-ASCII, up, down, backspace, enter. + line: "£", + throwAwayLines: 1, + }, + { + // Ctrl-D at the end of the line should be ignored. + in: "a\004\r", + line: "a", + }, + { + // a, b, left, Ctrl-D should erase the b. + in: "ab\x1b[D\004\r", + line: "a", + }, + { + // a, b, c, d, left, left, ^U should erase to the beginning of + // the line. + in: "abcd\x1b[D\x1b[D\025\r", + line: "cd", + }, + { + // Bracketed paste mode: control sequences should be returned + // verbatim in paste mode. + in: "abc\x1b[200~de\177f\x1b[201~\177\r", + line: "abcde\177", + }, + { + // Enter in bracketed paste mode should still work. + in: "abc\x1b[200~d\refg\x1b[201~h\r", + line: "efgh", + throwAwayLines: 1, + }, + { + // Lines consisting entirely of pasted data should be indicated as such. + in: "\x1b[200~a\r", + line: "a", + err: ErrPasteIndicator, + }, +} + +func TestKeyPresses(t *testing.T) { + for i, test := range keyPressTests { + for j := 1; j < len(test.in); j++ { + c := &MockTerminal{ + toSend: []byte(test.in), + bytesPerRead: j, + } + ss := NewTerminal(c, "> ") + for k := 0; k < test.throwAwayLines; k++ { + _, err := ss.ReadLine() + if err != nil { + t.Errorf("Throwaway line %d from test %d resulted in error: %s", k, i, err) + } + } + line, err := ss.ReadLine() + if line != test.line { + t.Errorf("Line resulting from test %d (%d bytes per read) was '%s', expected '%s'", i, j, line, test.line) + break + } + if err != test.err { + t.Errorf("Error resulting from test %d (%d bytes per read) was '%v', expected '%v'", i, j, err, test.err) + break + } + } + } +} + +func TestPasswordNotSaved(t *testing.T) { + c := &MockTerminal{ + toSend: []byte("password\r\x1b[A\r"), + bytesPerRead: 1, + } + ss := NewTerminal(c, "> ") + pw, _ := ss.ReadPassword("> ") + if pw != "password" { + t.Fatalf("failed to read password, got %s", pw) + } + line, _ := ss.ReadLine() + if len(line) > 0 { + t.Fatalf("password was saved in history") + } +} + +var setSizeTests = []struct { + width, height int +}{ + {40, 13}, + {80, 24}, + {132, 43}, +} + +func TestTerminalSetSize(t *testing.T) { + for _, setSize := range setSizeTests { + c := &MockTerminal{ + toSend: []byte("password\r\x1b[A\r"), + bytesPerRead: 1, + } + ss := NewTerminal(c, "> ") + ss.SetSize(setSize.width, setSize.height) + pw, _ := ss.ReadPassword("Password: ") + if pw != "password" { + t.Fatalf("failed to read password, got %s", pw) + } + if string(c.received) != "Password: \r\n" { + t.Errorf("failed to set the temporary prompt expected %q, got %q", "Password: ", c.received) + } + } +} + +func TestReadPasswordLineEnd(t *testing.T) { + var tests = []struct { + input string + want string + }{ + {"\n", ""}, + {"\r\n", ""}, + {"test\r\n", "test"}, + {"testtesttesttes\n", "testtesttesttes"}, + {"testtesttesttes\r\n", "testtesttesttes"}, + {"testtesttesttesttest\n", "testtesttesttesttest"}, + {"testtesttesttesttest\r\n", "testtesttesttesttest"}, + } + for _, test := range tests { + buf := new(bytes.Buffer) + if _, err := buf.WriteString(test.input); err != nil { + t.Fatal(err) + } + + have, err := readPasswordLine(buf) + if err != nil { + t.Errorf("readPasswordLine(%q) failed: %v", test.input, err) + continue + } + if string(have) != test.want { + t.Errorf("readPasswordLine(%q) returns %q, but %q is expected", test.input, string(have), test.want) + continue + } + + if _, err = buf.WriteString(test.input); err != nil { + t.Fatal(err) + } + have, err = readPasswordLine(buf) + if err != nil { + t.Errorf("readPasswordLine(%q) failed: %v", test.input, err) + continue + } + if string(have) != test.want { + t.Errorf("readPasswordLine(%q) returns %q, but %q is expected", test.input, string(have), test.want) + continue + } + } +} + +func TestMakeRawState(t *testing.T) { + fd := int(os.Stdout.Fd()) + if !IsTerminal(fd) { + t.Skip("stdout is not a terminal; skipping test") + } + + st, err := GetState(fd) + if err != nil { + t.Fatalf("failed to get terminal state from GetState: %s", err) + } + defer Restore(fd, st) + raw, err := MakeRaw(fd) + if err != nil { + t.Fatalf("failed to get terminal state from MakeRaw: %s", err) + } + + if *st != *raw { + t.Errorf("states do not match; was %v, expected %v", raw, st) + } +} + +func TestOutputNewlines(t *testing.T) { + // \n should be changed to \r\n in terminal output. + buf := new(bytes.Buffer) + term := NewTerminal(buf, ">") + + term.Write([]byte("1\n2\n")) + output := string(buf.Bytes()) + const expected = "1\r\n2\r\n" + + if output != expected { + t.Errorf("incorrect output: was %q, expected %q", output, expected) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util.go b/vendor/golang.org/x/crypto/ssh/terminal/util.go new file mode 100644 index 0000000..e7404ff --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util.go @@ -0,0 +1,123 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd + +// Package terminal provides support functions for dealing with terminals, as +// commonly found on UNIX systems. +// +// Putting a terminal into raw mode is the most common requirement: +// +// oldState, err := terminal.MakeRaw(0) +// if err != nil { +// panic(err) +// } +// defer terminal.Restore(0, oldState) +package terminal // import "golang.org/x/crypto/ssh/terminal" + +import ( + "syscall" + "unsafe" + + "golang.org/x/sys/unix" +) + +// State contains the state of a terminal. +type State struct { + termios syscall.Termios +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + var termios syscall.Termios + _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) + return err == 0 +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd int) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { + return nil, err + } + + newState := oldState.termios + // This attempts to replicate the behaviour documented for cfmakeraw in + // the termios(3) manpage. + newState.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON + newState.Oflag &^= syscall.OPOST + newState.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN + newState.Cflag &^= syscall.CSIZE | syscall.PARENB + newState.Cflag |= syscall.CS8 + newState.Cc[unix.VMIN] = 1 + newState.Cc[unix.VTIME] = 0 + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { + return nil, err + } + + return &oldState, nil +} + +// GetState returns the current state of a terminal which may be useful to +// restore the terminal after a signal. +func GetState(fd int) (*State, error) { + var oldState State + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { + return nil, err + } + + return &oldState, nil +} + +// Restore restores the terminal connected to the given file descriptor to a +// previous state. +func Restore(fd int, state *State) error { + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&state.termios)), 0, 0, 0); err != 0 { + return err + } + return nil +} + +// GetSize returns the dimensions of the given terminal. +func GetSize(fd int) (width, height int, err error) { + var dimensions [4]uint16 + + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0); err != 0 { + return -1, -1, err + } + return int(dimensions[1]), int(dimensions[0]), nil +} + +// passwordReader is an io.Reader that reads from a specific file descriptor. +type passwordReader int + +func (r passwordReader) Read(buf []byte) (int, error) { + return syscall.Read(int(r), buf) +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + var oldState syscall.Termios + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); err != 0 { + return nil, err + } + + newState := oldState + newState.Lflag &^= syscall.ECHO + newState.Lflag |= syscall.ICANON | syscall.ISIG + newState.Iflag |= syscall.ICRNL + if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { + return nil, err + } + + defer func() { + syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0) + }() + + return readPasswordLine(passwordReader(fd)) +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go b/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go new file mode 100644 index 0000000..cb23a59 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go @@ -0,0 +1,12 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +package terminal + +import "golang.org/x/sys/unix" + +const ioctlReadTermios = unix.TIOCGETA +const ioctlWriteTermios = unix.TIOCSETA diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go b/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go new file mode 100644 index 0000000..5fadfe8 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go @@ -0,0 +1,10 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package terminal + +import "golang.org/x/sys/unix" + +const ioctlReadTermios = unix.TCGETS +const ioctlWriteTermios = unix.TCSETS diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go b/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go new file mode 100644 index 0000000..799f049 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go @@ -0,0 +1,58 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package terminal provides support functions for dealing with terminals, as +// commonly found on UNIX systems. +// +// Putting a terminal into raw mode is the most common requirement: +// +// oldState, err := terminal.MakeRaw(0) +// if err != nil { +// panic(err) +// } +// defer terminal.Restore(0, oldState) +package terminal + +import ( + "fmt" + "runtime" +) + +type State struct{} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + return false +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd int) (*State, error) { + return nil, fmt.Errorf("terminal: MakeRaw not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// GetState returns the current state of a terminal which may be useful to +// restore the terminal after a signal. +func GetState(fd int) (*State, error) { + return nil, fmt.Errorf("terminal: GetState not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// Restore restores the terminal connected to the given file descriptor to a +// previous state. +func Restore(fd int, state *State) error { + return fmt.Errorf("terminal: Restore not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// GetSize returns the dimensions of the given terminal. +func GetSize(fd int) (width, height int, err error) { + return 0, 0, fmt.Errorf("terminal: GetSize not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + return nil, fmt.Errorf("terminal: ReadPassword not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go b/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go new file mode 100644 index 0000000..a2e1b57 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_solaris.go @@ -0,0 +1,128 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package terminal // import "golang.org/x/crypto/ssh/terminal" + +import ( + "golang.org/x/sys/unix" + "io" + "syscall" +) + +// State contains the state of a terminal. +type State struct { + state *unix.Termios +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + _, err := unix.IoctlGetTermio(fd, unix.TCGETA) + return err == nil +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + // see also: http://src.illumos.org/source/xref/illumos-gate/usr/src/lib/libast/common/uwin/getpass.c + val, err := unix.IoctlGetTermios(fd, unix.TCGETS) + if err != nil { + return nil, err + } + oldState := *val + + newState := oldState + newState.Lflag &^= syscall.ECHO + newState.Lflag |= syscall.ICANON | syscall.ISIG + newState.Iflag |= syscall.ICRNL + err = unix.IoctlSetTermios(fd, unix.TCSETS, &newState) + if err != nil { + return nil, err + } + + defer unix.IoctlSetTermios(fd, unix.TCSETS, &oldState) + + var buf [16]byte + var ret []byte + for { + n, err := syscall.Read(fd, buf[:]) + if err != nil { + return nil, err + } + if n == 0 { + if len(ret) == 0 { + return nil, io.EOF + } + break + } + if buf[n-1] == '\n' { + n-- + } + ret = append(ret, buf[:n]...) + if n < len(buf) { + break + } + } + + return ret, nil +} + +// MakeRaw puts the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +// see http://cr.illumos.org/~webrev/andy_js/1060/ +func MakeRaw(fd int) (*State, error) { + oldTermiosPtr, err := unix.IoctlGetTermios(fd, unix.TCGETS) + if err != nil { + return nil, err + } + oldTermios := *oldTermiosPtr + + newTermios := oldTermios + newTermios.Iflag &^= syscall.IGNBRK | syscall.BRKINT | syscall.PARMRK | syscall.ISTRIP | syscall.INLCR | syscall.IGNCR | syscall.ICRNL | syscall.IXON + newTermios.Oflag &^= syscall.OPOST + newTermios.Lflag &^= syscall.ECHO | syscall.ECHONL | syscall.ICANON | syscall.ISIG | syscall.IEXTEN + newTermios.Cflag &^= syscall.CSIZE | syscall.PARENB + newTermios.Cflag |= syscall.CS8 + newTermios.Cc[unix.VMIN] = 1 + newTermios.Cc[unix.VTIME] = 0 + + if err := unix.IoctlSetTermios(fd, unix.TCSETS, &newTermios); err != nil { + return nil, err + } + + return &State{ + state: oldTermiosPtr, + }, nil +} + +// Restore restores the terminal connected to the given file descriptor to a +// previous state. +func Restore(fd int, oldState *State) error { + return unix.IoctlSetTermios(fd, unix.TCSETS, oldState.state) +} + +// GetState returns the current state of a terminal which may be useful to +// restore the terminal after a signal. +func GetState(fd int) (*State, error) { + oldTermiosPtr, err := unix.IoctlGetTermios(fd, unix.TCGETS) + if err != nil { + return nil, err + } + + return &State{ + state: oldTermiosPtr, + }, nil +} + +// GetSize returns the dimensions of the given terminal. +func GetSize(fd int) (width, height int, err error) { + ws, err := unix.IoctlGetWinsize(fd, unix.TIOCGWINSZ) + if err != nil { + return 0, 0, err + } + return int(ws.Col), int(ws.Row), nil +} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go b/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go new file mode 100644 index 0000000..60979cc --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go @@ -0,0 +1,102 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package terminal provides support functions for dealing with terminals, as +// commonly found on UNIX systems. +// +// Putting a terminal into raw mode is the most common requirement: +// +// oldState, err := terminal.MakeRaw(0) +// if err != nil { +// panic(err) +// } +// defer terminal.Restore(0, oldState) +package terminal + +import ( + "golang.org/x/sys/windows" +) + +type State struct { + mode uint32 +} + +// IsTerminal returns true if the given file descriptor is a terminal. +func IsTerminal(fd int) bool { + var st uint32 + err := windows.GetConsoleMode(windows.Handle(fd), &st) + return err == nil +} + +// MakeRaw put the terminal connected to the given file descriptor into raw +// mode and returns the previous state of the terminal so that it can be +// restored. +func MakeRaw(fd int) (*State, error) { + var st uint32 + if err := windows.GetConsoleMode(windows.Handle(fd), &st); err != nil { + return nil, err + } + raw := st &^ (windows.ENABLE_ECHO_INPUT | windows.ENABLE_PROCESSED_INPUT | windows.ENABLE_LINE_INPUT | windows.ENABLE_PROCESSED_OUTPUT) + if err := windows.SetConsoleMode(windows.Handle(fd), raw); err != nil { + return nil, err + } + return &State{st}, nil +} + +// GetState returns the current state of a terminal which may be useful to +// restore the terminal after a signal. +func GetState(fd int) (*State, error) { + var st uint32 + if err := windows.GetConsoleMode(windows.Handle(fd), &st); err != nil { + return nil, err + } + return &State{st}, nil +} + +// Restore restores the terminal connected to the given file descriptor to a +// previous state. +func Restore(fd int, state *State) error { + return windows.SetConsoleMode(windows.Handle(fd), state.mode) +} + +// GetSize returns the dimensions of the given terminal. +func GetSize(fd int) (width, height int, err error) { + var info windows.ConsoleScreenBufferInfo + if err := windows.GetConsoleScreenBufferInfo(windows.Handle(fd), &info); err != nil { + return 0, 0, err + } + return int(info.Size.X), int(info.Size.Y), nil +} + +// passwordReader is an io.Reader that reads from a specific Windows HANDLE. +type passwordReader int + +func (r passwordReader) Read(buf []byte) (int, error) { + return windows.Read(windows.Handle(r), buf) +} + +// ReadPassword reads a line of input from a terminal without local echo. This +// is commonly used for inputting passwords and other sensitive data. The slice +// returned does not include the \n. +func ReadPassword(fd int) ([]byte, error) { + var st uint32 + if err := windows.GetConsoleMode(windows.Handle(fd), &st); err != nil { + return nil, err + } + old := st + + st &^= (windows.ENABLE_ECHO_INPUT) + st |= (windows.ENABLE_PROCESSED_INPUT | windows.ENABLE_LINE_INPUT | windows.ENABLE_PROCESSED_OUTPUT) + if err := windows.SetConsoleMode(windows.Handle(fd), st); err != nil { + return nil, err + } + + defer func() { + windows.SetConsoleMode(windows.Handle(fd), old) + }() + + return readPasswordLine(passwordReader(fd)) +} diff --git a/vendor/golang.org/x/crypto/ssh/test/agent_unix_test.go b/vendor/golang.org/x/crypto/ssh/test/agent_unix_test.go new file mode 100644 index 0000000..f481253 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/agent_unix_test.go @@ -0,0 +1,59 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package test + +import ( + "bytes" + "testing" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/agent" +) + +func TestAgentForward(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + keyring := agent.NewKeyring() + if err := keyring.Add(agent.AddedKey{PrivateKey: testPrivateKeys["dsa"]}); err != nil { + t.Fatalf("Error adding key: %s", err) + } + if err := keyring.Add(agent.AddedKey{ + PrivateKey: testPrivateKeys["dsa"], + ConfirmBeforeUse: true, + LifetimeSecs: 3600, + }); err != nil { + t.Fatalf("Error adding key with constraints: %s", err) + } + pub := testPublicKeys["dsa"] + + sess, err := conn.NewSession() + if err != nil { + t.Fatalf("NewSession: %v", err) + } + if err := agent.RequestAgentForwarding(sess); err != nil { + t.Fatalf("RequestAgentForwarding: %v", err) + } + + if err := agent.ForwardToAgent(conn, keyring); err != nil { + t.Fatalf("SetupForwardKeyring: %v", err) + } + out, err := sess.CombinedOutput("ssh-add -L") + if err != nil { + t.Fatalf("running ssh-add: %v, out %s", err, out) + } + key, _, _, _, err := ssh.ParseAuthorizedKey(out) + if err != nil { + t.Fatalf("ParseAuthorizedKey(%q): %v", out, err) + } + + if !bytes.Equal(key.Marshal(), pub.Marshal()) { + t.Fatalf("got key %s, want %s", ssh.MarshalAuthorizedKey(key), ssh.MarshalAuthorizedKey(pub)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/test/cert_test.go b/vendor/golang.org/x/crypto/ssh/test/cert_test.go new file mode 100644 index 0000000..b231dd8 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/cert_test.go @@ -0,0 +1,77 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package test + +import ( + "bytes" + "crypto/rand" + "testing" + + "golang.org/x/crypto/ssh" +) + +// Test both logging in with a cert, and also that the certificate presented by an OpenSSH host can be validated correctly +func TestCertLogin(t *testing.T) { + s := newServer(t) + defer s.Shutdown() + + // Use a key different from the default. + clientKey := testSigners["dsa"] + caAuthKey := testSigners["ecdsa"] + cert := &ssh.Certificate{ + Key: clientKey.PublicKey(), + ValidPrincipals: []string{username()}, + CertType: ssh.UserCert, + ValidBefore: ssh.CertTimeInfinity, + } + if err := cert.SignCert(rand.Reader, caAuthKey); err != nil { + t.Fatalf("SetSignature: %v", err) + } + + certSigner, err := ssh.NewCertSigner(cert, clientKey) + if err != nil { + t.Fatalf("NewCertSigner: %v", err) + } + + conf := &ssh.ClientConfig{ + User: username(), + HostKeyCallback: (&ssh.CertChecker{ + IsHostAuthority: func(pk ssh.PublicKey, addr string) bool { + return bytes.Equal(pk.Marshal(), testPublicKeys["ca"].Marshal()) + }, + }).CheckHostKey, + } + conf.Auth = append(conf.Auth, ssh.PublicKeys(certSigner)) + + for _, test := range []struct { + addr string + succeed bool + }{ + {addr: "host.example.com:22", succeed: true}, + {addr: "host.example.com:10000", succeed: true}, // non-standard port must be OK + {addr: "host.example.com", succeed: false}, // port must be specified + {addr: "host.ex4mple.com:22", succeed: false}, // wrong host + } { + client, err := s.TryDialWithAddr(conf, test.addr) + + // Always close client if opened successfully + if err == nil { + client.Close() + } + + // Now evaluate whether the test failed or passed + if test.succeed { + if err != nil { + t.Fatalf("TryDialWithAddr: %v", err) + } + } else { + if err == nil { + t.Fatalf("TryDialWithAddr, unexpected success") + } + } + } +} diff --git a/vendor/golang.org/x/crypto/ssh/test/dial_unix_test.go b/vendor/golang.org/x/crypto/ssh/test/dial_unix_test.go new file mode 100644 index 0000000..091e48c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/dial_unix_test.go @@ -0,0 +1,128 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !windows + +package test + +// direct-tcpip and direct-streamlocal functional tests + +import ( + "fmt" + "io" + "io/ioutil" + "net" + "strings" + "testing" +) + +type dialTester interface { + TestServerConn(t *testing.T, c net.Conn) + TestClientConn(t *testing.T, c net.Conn) +} + +func testDial(t *testing.T, n, listenAddr string, x dialTester) { + server := newServer(t) + defer server.Shutdown() + sshConn := server.Dial(clientConfig()) + defer sshConn.Close() + + l, err := net.Listen(n, listenAddr) + if err != nil { + t.Fatalf("Listen: %v", err) + } + defer l.Close() + + testData := fmt.Sprintf("hello from %s, %s", n, listenAddr) + go func() { + for { + c, err := l.Accept() + if err != nil { + break + } + x.TestServerConn(t, c) + + io.WriteString(c, testData) + c.Close() + } + }() + + conn, err := sshConn.Dial(n, l.Addr().String()) + if err != nil { + t.Fatalf("Dial: %v", err) + } + x.TestClientConn(t, conn) + defer conn.Close() + b, err := ioutil.ReadAll(conn) + if err != nil { + t.Fatalf("ReadAll: %v", err) + } + t.Logf("got %q", string(b)) + if string(b) != testData { + t.Fatalf("expected %q, got %q", testData, string(b)) + } +} + +type tcpDialTester struct { + listenAddr string +} + +func (x *tcpDialTester) TestServerConn(t *testing.T, c net.Conn) { + host := strings.Split(x.listenAddr, ":")[0] + prefix := host + ":" + if !strings.HasPrefix(c.LocalAddr().String(), prefix) { + t.Fatalf("expected to start with %q, got %q", prefix, c.LocalAddr().String()) + } + if !strings.HasPrefix(c.RemoteAddr().String(), prefix) { + t.Fatalf("expected to start with %q, got %q", prefix, c.RemoteAddr().String()) + } +} + +func (x *tcpDialTester) TestClientConn(t *testing.T, c net.Conn) { + // we use zero addresses. see *Client.Dial. + if c.LocalAddr().String() != "0.0.0.0:0" { + t.Fatalf("expected \"0.0.0.0:0\", got %q", c.LocalAddr().String()) + } + if c.RemoteAddr().String() != "0.0.0.0:0" { + t.Fatalf("expected \"0.0.0.0:0\", got %q", c.RemoteAddr().String()) + } +} + +func TestDialTCP(t *testing.T) { + x := &tcpDialTester{ + listenAddr: "127.0.0.1:0", + } + testDial(t, "tcp", x.listenAddr, x) +} + +type unixDialTester struct { + listenAddr string +} + +func (x *unixDialTester) TestServerConn(t *testing.T, c net.Conn) { + if c.LocalAddr().String() != x.listenAddr { + t.Fatalf("expected %q, got %q", x.listenAddr, c.LocalAddr().String()) + } + if c.RemoteAddr().String() != "@" { + t.Fatalf("expected \"@\", got %q", c.RemoteAddr().String()) + } +} + +func (x *unixDialTester) TestClientConn(t *testing.T, c net.Conn) { + if c.RemoteAddr().String() != x.listenAddr { + t.Fatalf("expected %q, got %q", x.listenAddr, c.RemoteAddr().String()) + } + if c.LocalAddr().String() != "@" { + t.Fatalf("expected \"@\", got %q", c.LocalAddr().String()) + } +} + +func TestDialUnix(t *testing.T) { + addr, cleanup := newTempSocket(t) + defer cleanup() + x := &unixDialTester{ + listenAddr: addr, + } + testDial(t, "unix", x.listenAddr, x) +} diff --git a/vendor/golang.org/x/crypto/ssh/test/doc.go b/vendor/golang.org/x/crypto/ssh/test/doc.go new file mode 100644 index 0000000..3f9b334 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/doc.go @@ -0,0 +1,7 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This package contains integration tests for the +// golang.org/x/crypto/ssh package. +package test // import "golang.org/x/crypto/ssh/test" diff --git a/vendor/golang.org/x/crypto/ssh/test/forward_unix_test.go b/vendor/golang.org/x/crypto/ssh/test/forward_unix_test.go new file mode 100644 index 0000000..ea81937 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/forward_unix_test.go @@ -0,0 +1,194 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package test + +import ( + "bytes" + "io" + "io/ioutil" + "math/rand" + "net" + "testing" + "time" +) + +type closeWriter interface { + CloseWrite() error +} + +func testPortForward(t *testing.T, n, listenAddr string) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + sshListener, err := conn.Listen(n, listenAddr) + if err != nil { + t.Fatal(err) + } + + go func() { + sshConn, err := sshListener.Accept() + if err != nil { + t.Fatalf("listen.Accept failed: %v", err) + } + + _, err = io.Copy(sshConn, sshConn) + if err != nil && err != io.EOF { + t.Fatalf("ssh client copy: %v", err) + } + sshConn.Close() + }() + + forwardedAddr := sshListener.Addr().String() + netConn, err := net.Dial(n, forwardedAddr) + if err != nil { + t.Fatalf("net dial failed: %v", err) + } + + readChan := make(chan []byte) + go func() { + data, _ := ioutil.ReadAll(netConn) + readChan <- data + }() + + // Invent some data. + data := make([]byte, 100*1000) + for i := range data { + data[i] = byte(i % 255) + } + + var sent []byte + for len(sent) < 1000*1000 { + // Send random sized chunks + m := rand.Intn(len(data)) + n, err := netConn.Write(data[:m]) + if err != nil { + break + } + sent = append(sent, data[:n]...) + } + if err := netConn.(closeWriter).CloseWrite(); err != nil { + t.Errorf("netConn.CloseWrite: %v", err) + } + + read := <-readChan + + if len(sent) != len(read) { + t.Fatalf("got %d bytes, want %d", len(read), len(sent)) + } + if bytes.Compare(sent, read) != 0 { + t.Fatalf("read back data does not match") + } + + if err := sshListener.Close(); err != nil { + t.Fatalf("sshListener.Close: %v", err) + } + + // Check that the forward disappeared. + netConn, err = net.Dial(n, forwardedAddr) + if err == nil { + netConn.Close() + t.Errorf("still listening to %s after closing", forwardedAddr) + } +} + +func TestPortForwardTCP(t *testing.T) { + testPortForward(t, "tcp", "localhost:0") +} + +func TestPortForwardUnix(t *testing.T) { + addr, cleanup := newTempSocket(t) + defer cleanup() + testPortForward(t, "unix", addr) +} + +func testAcceptClose(t *testing.T, n, listenAddr string) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + + sshListener, err := conn.Listen(n, listenAddr) + if err != nil { + t.Fatal(err) + } + + quit := make(chan error, 1) + go func() { + for { + c, err := sshListener.Accept() + if err != nil { + quit <- err + break + } + c.Close() + } + }() + sshListener.Close() + + select { + case <-time.After(1 * time.Second): + t.Errorf("timeout: listener did not close.") + case err := <-quit: + t.Logf("quit as expected (error %v)", err) + } +} + +func TestAcceptCloseTCP(t *testing.T) { + testAcceptClose(t, "tcp", "localhost:0") +} + +func TestAcceptCloseUnix(t *testing.T) { + addr, cleanup := newTempSocket(t) + defer cleanup() + testAcceptClose(t, "unix", addr) +} + +// Check that listeners exit if the underlying client transport dies. +func testPortForwardConnectionClose(t *testing.T, n, listenAddr string) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + + sshListener, err := conn.Listen(n, listenAddr) + if err != nil { + t.Fatal(err) + } + + quit := make(chan error, 1) + go func() { + for { + c, err := sshListener.Accept() + if err != nil { + quit <- err + break + } + c.Close() + } + }() + + // It would be even nicer if we closed the server side, but it + // is more involved as the fd for that side is dup()ed. + server.clientConn.Close() + + select { + case <-time.After(1 * time.Second): + t.Errorf("timeout: listener did not close.") + case err := <-quit: + t.Logf("quit as expected (error %v)", err) + } +} + +func TestPortForwardConnectionCloseTCP(t *testing.T) { + testPortForwardConnectionClose(t, "tcp", "localhost:0") +} + +func TestPortForwardConnectionCloseUnix(t *testing.T) { + addr, cleanup := newTempSocket(t) + defer cleanup() + testPortForwardConnectionClose(t, "unix", addr) +} diff --git a/vendor/golang.org/x/crypto/ssh/test/session_test.go b/vendor/golang.org/x/crypto/ssh/test/session_test.go new file mode 100644 index 0000000..8238d9d --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/session_test.go @@ -0,0 +1,413 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !windows + +package test + +// Session functional tests. + +import ( + "bytes" + "errors" + "io" + "strings" + "testing" + + "golang.org/x/crypto/ssh" +) + +func TestRunCommandSuccess(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + err = session.Run("true") + if err != nil { + t.Fatalf("session failed: %v", err) + } +} + +func TestHostKeyCheck(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + + conf := clientConfig() + hostDB := hostKeyDB() + conf.HostKeyCallback = hostDB.Check + + // change the keys. + hostDB.keys[ssh.KeyAlgoRSA][25]++ + hostDB.keys[ssh.KeyAlgoDSA][25]++ + hostDB.keys[ssh.KeyAlgoECDSA256][25]++ + + conn, err := server.TryDial(conf) + if err == nil { + conn.Close() + t.Fatalf("dial should have failed.") + } else if !strings.Contains(err.Error(), "host key mismatch") { + t.Fatalf("'host key mismatch' not found in %v", err) + } +} + +func TestRunCommandStdin(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + + r, w := io.Pipe() + defer r.Close() + defer w.Close() + session.Stdin = r + + err = session.Run("true") + if err != nil { + t.Fatalf("session failed: %v", err) + } +} + +func TestRunCommandStdinError(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + + r, w := io.Pipe() + defer r.Close() + session.Stdin = r + pipeErr := errors.New("closing write end of pipe") + w.CloseWithError(pipeErr) + + err = session.Run("true") + if err != pipeErr { + t.Fatalf("expected %v, found %v", pipeErr, err) + } +} + +func TestRunCommandFailed(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + err = session.Run(`bash -c "kill -9 $$"`) + if err == nil { + t.Fatalf("session succeeded: %v", err) + } +} + +func TestRunCommandWeClosed(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + err = session.Shell() + if err != nil { + t.Fatalf("shell failed: %v", err) + } + err = session.Close() + if err != nil { + t.Fatalf("shell failed: %v", err) + } +} + +func TestFuncLargeRead(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("unable to create new session: %s", err) + } + + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("unable to acquire stdout pipe: %s", err) + } + + err = session.Start("dd if=/dev/urandom bs=2048 count=1024") + if err != nil { + t.Fatalf("unable to execute remote command: %s", err) + } + + buf := new(bytes.Buffer) + n, err := io.Copy(buf, stdout) + if err != nil { + t.Fatalf("error reading from remote stdout: %s", err) + } + + if n != 2048*1024 { + t.Fatalf("Expected %d bytes but read only %d from remote command", 2048, n) + } +} + +func TestKeyChange(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conf := clientConfig() + hostDB := hostKeyDB() + conf.HostKeyCallback = hostDB.Check + conf.RekeyThreshold = 1024 + conn := server.Dial(conf) + defer conn.Close() + + for i := 0; i < 4; i++ { + session, err := conn.NewSession() + if err != nil { + t.Fatalf("unable to create new session: %s", err) + } + + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("unable to acquire stdout pipe: %s", err) + } + + err = session.Start("dd if=/dev/urandom bs=1024 count=1") + if err != nil { + t.Fatalf("unable to execute remote command: %s", err) + } + buf := new(bytes.Buffer) + n, err := io.Copy(buf, stdout) + if err != nil { + t.Fatalf("error reading from remote stdout: %s", err) + } + + want := int64(1024) + if n != want { + t.Fatalf("Expected %d bytes but read only %d from remote command", want, n) + } + } + + if changes := hostDB.checkCount; changes < 4 { + t.Errorf("got %d key changes, want 4", changes) + } +} + +func TestInvalidTerminalMode(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + + if err = session.RequestPty("vt100", 80, 40, ssh.TerminalModes{255: 1984}); err == nil { + t.Fatalf("req-pty failed: successful request with invalid mode") + } +} + +func TestValidTerminalMode(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("unable to acquire stdout pipe: %s", err) + } + + stdin, err := session.StdinPipe() + if err != nil { + t.Fatalf("unable to acquire stdin pipe: %s", err) + } + + tm := ssh.TerminalModes{ssh.ECHO: 0} + if err = session.RequestPty("xterm", 80, 40, tm); err != nil { + t.Fatalf("req-pty failed: %s", err) + } + + err = session.Shell() + if err != nil { + t.Fatalf("session failed: %s", err) + } + + stdin.Write([]byte("stty -a && exit\n")) + + var buf bytes.Buffer + if _, err := io.Copy(&buf, stdout); err != nil { + t.Fatalf("reading failed: %s", err) + } + + if sttyOutput := buf.String(); !strings.Contains(sttyOutput, "-echo ") { + t.Fatalf("terminal mode failure: expected -echo in stty output, got %s", sttyOutput) + } +} + +func TestWindowChange(t *testing.T) { + server := newServer(t) + defer server.Shutdown() + conn := server.Dial(clientConfig()) + defer conn.Close() + + session, err := conn.NewSession() + if err != nil { + t.Fatalf("session failed: %v", err) + } + defer session.Close() + + stdout, err := session.StdoutPipe() + if err != nil { + t.Fatalf("unable to acquire stdout pipe: %s", err) + } + + stdin, err := session.StdinPipe() + if err != nil { + t.Fatalf("unable to acquire stdin pipe: %s", err) + } + + tm := ssh.TerminalModes{ssh.ECHO: 0} + if err = session.RequestPty("xterm", 80, 40, tm); err != nil { + t.Fatalf("req-pty failed: %s", err) + } + + if err := session.WindowChange(100, 100); err != nil { + t.Fatalf("window-change failed: %s", err) + } + + err = session.Shell() + if err != nil { + t.Fatalf("session failed: %s", err) + } + + stdin.Write([]byte("stty size && exit\n")) + + var buf bytes.Buffer + if _, err := io.Copy(&buf, stdout); err != nil { + t.Fatalf("reading failed: %s", err) + } + + if sttyOutput := buf.String(); !strings.Contains(sttyOutput, "100 100") { + t.Fatalf("terminal WindowChange failure: expected \"100 100\" stty output, got %s", sttyOutput) + } +} + +func TestCiphers(t *testing.T) { + var config ssh.Config + config.SetDefaults() + cipherOrder := config.Ciphers + // These ciphers will not be tested when commented out in cipher.go it will + // fallback to the next available as per line 292. + cipherOrder = append(cipherOrder, "aes128-cbc", "3des-cbc") + + for _, ciph := range cipherOrder { + server := newServer(t) + defer server.Shutdown() + conf := clientConfig() + conf.Ciphers = []string{ciph} + // Don't fail if sshd doesn't have the cipher. + conf.Ciphers = append(conf.Ciphers, cipherOrder...) + conn, err := server.TryDial(conf) + if err == nil { + conn.Close() + } else { + t.Fatalf("failed for cipher %q", ciph) + } + } +} + +func TestMACs(t *testing.T) { + var config ssh.Config + config.SetDefaults() + macOrder := config.MACs + + for _, mac := range macOrder { + server := newServer(t) + defer server.Shutdown() + conf := clientConfig() + conf.MACs = []string{mac} + // Don't fail if sshd doesn't have the MAC. + conf.MACs = append(conf.MACs, macOrder...) + if conn, err := server.TryDial(conf); err == nil { + conn.Close() + } else { + t.Fatalf("failed for MAC %q", mac) + } + } +} + +func TestKeyExchanges(t *testing.T) { + var config ssh.Config + config.SetDefaults() + kexOrder := config.KeyExchanges + for _, kex := range kexOrder { + server := newServer(t) + defer server.Shutdown() + conf := clientConfig() + // Don't fail if sshd doesn't have the kex. + conf.KeyExchanges = append([]string{kex}, kexOrder...) + conn, err := server.TryDial(conf) + if err == nil { + conn.Close() + } else { + t.Errorf("failed for kex %q", kex) + } + } +} + +func TestClientAuthAlgorithms(t *testing.T) { + for _, key := range []string{ + "rsa", + "dsa", + "ecdsa", + "ed25519", + } { + server := newServer(t) + conf := clientConfig() + conf.SetDefaults() + conf.Auth = []ssh.AuthMethod{ + ssh.PublicKeys(testSigners[key]), + } + + conn, err := server.TryDial(conf) + if err == nil { + conn.Close() + } else { + t.Errorf("failed for key %q", key) + } + + server.Shutdown() + } +} diff --git a/vendor/golang.org/x/crypto/ssh/test/test_unix_test.go b/vendor/golang.org/x/crypto/ssh/test/test_unix_test.go new file mode 100644 index 0000000..e673536 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/test_unix_test.go @@ -0,0 +1,295 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd plan9 + +package test + +// functional test harness for unix. + +import ( + "bytes" + "fmt" + "io/ioutil" + "log" + "net" + "os" + "os/exec" + "os/user" + "path/filepath" + "testing" + "text/template" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/testdata" +) + +const sshd_config = ` +Protocol 2 +HostKey {{.Dir}}/id_rsa +HostKey {{.Dir}}/id_dsa +HostKey {{.Dir}}/id_ecdsa +HostCertificate {{.Dir}}/id_rsa-cert.pub +Pidfile {{.Dir}}/sshd.pid +#UsePrivilegeSeparation no +KeyRegenerationInterval 3600 +ServerKeyBits 768 +SyslogFacility AUTH +LogLevel DEBUG2 +LoginGraceTime 120 +PermitRootLogin no +StrictModes no +RSAAuthentication yes +PubkeyAuthentication yes +AuthorizedKeysFile {{.Dir}}/authorized_keys +TrustedUserCAKeys {{.Dir}}/id_ecdsa.pub +IgnoreRhosts yes +RhostsRSAAuthentication no +HostbasedAuthentication no +PubkeyAcceptedKeyTypes=* +` + +var configTmpl = template.Must(template.New("").Parse(sshd_config)) + +type server struct { + t *testing.T + cleanup func() // executed during Shutdown + configfile string + cmd *exec.Cmd + output bytes.Buffer // holds stderr from sshd process + + // Client half of the network connection. + clientConn net.Conn +} + +func username() string { + var username string + if user, err := user.Current(); err == nil { + username = user.Username + } else { + // user.Current() currently requires cgo. If an error is + // returned attempt to get the username from the environment. + log.Printf("user.Current: %v; falling back on $USER", err) + username = os.Getenv("USER") + } + if username == "" { + panic("Unable to get username") + } + return username +} + +type storedHostKey struct { + // keys map from an algorithm string to binary key data. + keys map[string][]byte + + // checkCount counts the Check calls. Used for testing + // rekeying. + checkCount int +} + +func (k *storedHostKey) Add(key ssh.PublicKey) { + if k.keys == nil { + k.keys = map[string][]byte{} + } + k.keys[key.Type()] = key.Marshal() +} + +func (k *storedHostKey) Check(addr string, remote net.Addr, key ssh.PublicKey) error { + k.checkCount++ + algo := key.Type() + + if k.keys == nil || bytes.Compare(key.Marshal(), k.keys[algo]) != 0 { + return fmt.Errorf("host key mismatch. Got %q, want %q", key, k.keys[algo]) + } + return nil +} + +func hostKeyDB() *storedHostKey { + keyChecker := &storedHostKey{} + keyChecker.Add(testPublicKeys["ecdsa"]) + keyChecker.Add(testPublicKeys["rsa"]) + keyChecker.Add(testPublicKeys["dsa"]) + return keyChecker +} + +func clientConfig() *ssh.ClientConfig { + config := &ssh.ClientConfig{ + User: username(), + Auth: []ssh.AuthMethod{ + ssh.PublicKeys(testSigners["user"]), + }, + HostKeyCallback: hostKeyDB().Check, + HostKeyAlgorithms: []string{ // by default, don't allow certs as this affects the hostKeyDB checker + ssh.KeyAlgoECDSA256, ssh.KeyAlgoECDSA384, ssh.KeyAlgoECDSA521, + ssh.KeyAlgoRSA, ssh.KeyAlgoDSA, + ssh.KeyAlgoED25519, + }, + } + return config +} + +// unixConnection creates two halves of a connected net.UnixConn. It +// is used for connecting the Go SSH client with sshd without opening +// ports. +func unixConnection() (*net.UnixConn, *net.UnixConn, error) { + dir, err := ioutil.TempDir("", "unixConnection") + if err != nil { + return nil, nil, err + } + defer os.Remove(dir) + + addr := filepath.Join(dir, "ssh") + listener, err := net.Listen("unix", addr) + if err != nil { + return nil, nil, err + } + defer listener.Close() + c1, err := net.Dial("unix", addr) + if err != nil { + return nil, nil, err + } + + c2, err := listener.Accept() + if err != nil { + c1.Close() + return nil, nil, err + } + + return c1.(*net.UnixConn), c2.(*net.UnixConn), nil +} + +func (s *server) TryDial(config *ssh.ClientConfig) (*ssh.Client, error) { + return s.TryDialWithAddr(config, "") +} + +// addr is the user specified host:port. While we don't actually dial it, +// we need to know this for host key matching +func (s *server) TryDialWithAddr(config *ssh.ClientConfig, addr string) (*ssh.Client, error) { + sshd, err := exec.LookPath("sshd") + if err != nil { + s.t.Skipf("skipping test: %v", err) + } + + c1, c2, err := unixConnection() + if err != nil { + s.t.Fatalf("unixConnection: %v", err) + } + + s.cmd = exec.Command(sshd, "-f", s.configfile, "-i", "-e") + f, err := c2.File() + if err != nil { + s.t.Fatalf("UnixConn.File: %v", err) + } + defer f.Close() + s.cmd.Stdin = f + s.cmd.Stdout = f + s.cmd.Stderr = &s.output + if err := s.cmd.Start(); err != nil { + s.t.Fail() + s.Shutdown() + s.t.Fatalf("s.cmd.Start: %v", err) + } + s.clientConn = c1 + conn, chans, reqs, err := ssh.NewClientConn(c1, addr, config) + if err != nil { + return nil, err + } + return ssh.NewClient(conn, chans, reqs), nil +} + +func (s *server) Dial(config *ssh.ClientConfig) *ssh.Client { + conn, err := s.TryDial(config) + if err != nil { + s.t.Fail() + s.Shutdown() + s.t.Fatalf("ssh.Client: %v", err) + } + return conn +} + +func (s *server) Shutdown() { + if s.cmd != nil && s.cmd.Process != nil { + // Don't check for errors; if it fails it's most + // likely "os: process already finished", and we don't + // care about that. Use os.Interrupt, so child + // processes are killed too. + s.cmd.Process.Signal(os.Interrupt) + s.cmd.Wait() + } + if s.t.Failed() { + // log any output from sshd process + s.t.Logf("sshd: %s", s.output.String()) + } + s.cleanup() +} + +func writeFile(path string, contents []byte) { + f, err := os.OpenFile(path, os.O_WRONLY|os.O_TRUNC|os.O_CREATE, 0600) + if err != nil { + panic(err) + } + defer f.Close() + if _, err := f.Write(contents); err != nil { + panic(err) + } +} + +// newServer returns a new mock ssh server. +func newServer(t *testing.T) *server { + if testing.Short() { + t.Skip("skipping test due to -short") + } + dir, err := ioutil.TempDir("", "sshtest") + if err != nil { + t.Fatal(err) + } + f, err := os.Create(filepath.Join(dir, "sshd_config")) + if err != nil { + t.Fatal(err) + } + err = configTmpl.Execute(f, map[string]string{ + "Dir": dir, + }) + if err != nil { + t.Fatal(err) + } + f.Close() + + for k, v := range testdata.PEMBytes { + filename := "id_" + k + writeFile(filepath.Join(dir, filename), v) + writeFile(filepath.Join(dir, filename+".pub"), ssh.MarshalAuthorizedKey(testPublicKeys[k])) + } + + for k, v := range testdata.SSHCertificates { + filename := "id_" + k + "-cert.pub" + writeFile(filepath.Join(dir, filename), v) + } + + var authkeys bytes.Buffer + for k, _ := range testdata.PEMBytes { + authkeys.Write(ssh.MarshalAuthorizedKey(testPublicKeys[k])) + } + writeFile(filepath.Join(dir, "authorized_keys"), authkeys.Bytes()) + + return &server{ + t: t, + configfile: f.Name(), + cleanup: func() { + if err := os.RemoveAll(dir); err != nil { + t.Error(err) + } + }, + } +} + +func newTempSocket(t *testing.T) (string, func()) { + dir, err := ioutil.TempDir("", "socket") + if err != nil { + t.Fatal(err) + } + deferFunc := func() { os.RemoveAll(dir) } + addr := filepath.Join(dir, "sock") + return addr, deferFunc +} diff --git a/vendor/golang.org/x/crypto/ssh/test/testdata_test.go b/vendor/golang.org/x/crypto/ssh/test/testdata_test.go new file mode 100644 index 0000000..a053f67 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/test/testdata_test.go @@ -0,0 +1,64 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// IMPLEMENTATION NOTE: To avoid a package loop, this file is in three places: +// ssh/, ssh/agent, and ssh/test/. It should be kept in sync across all three +// instances. + +package test + +import ( + "crypto/rand" + "fmt" + + "golang.org/x/crypto/ssh" + "golang.org/x/crypto/ssh/testdata" +) + +var ( + testPrivateKeys map[string]interface{} + testSigners map[string]ssh.Signer + testPublicKeys map[string]ssh.PublicKey +) + +func init() { + var err error + + n := len(testdata.PEMBytes) + testPrivateKeys = make(map[string]interface{}, n) + testSigners = make(map[string]ssh.Signer, n) + testPublicKeys = make(map[string]ssh.PublicKey, n) + for t, k := range testdata.PEMBytes { + testPrivateKeys[t], err = ssh.ParseRawPrivateKey(k) + if err != nil { + panic(fmt.Sprintf("Unable to parse test key %s: %v", t, err)) + } + testSigners[t], err = ssh.NewSignerFromKey(testPrivateKeys[t]) + if err != nil { + panic(fmt.Sprintf("Unable to create signer for test key %s: %v", t, err)) + } + testPublicKeys[t] = testSigners[t].PublicKey() + } + + // Create a cert and sign it for use in tests. + testCert := &ssh.Certificate{ + Nonce: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + ValidPrincipals: []string{"gopher1", "gopher2"}, // increases test coverage + ValidAfter: 0, // unix epoch + ValidBefore: ssh.CertTimeInfinity, // The end of currently representable time. + Reserved: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + Key: testPublicKeys["ecdsa"], + SignatureKey: testPublicKeys["rsa"], + Permissions: ssh.Permissions{ + CriticalOptions: map[string]string{}, + Extensions: map[string]string{}, + }, + } + testCert.SignCert(rand.Reader, testSigners["rsa"]) + testPrivateKeys["cert"] = testPrivateKeys["ecdsa"] + testSigners["cert"], err = ssh.NewCertSigner(testCert, testSigners["ecdsa"]) + if err != nil { + panic(fmt.Sprintf("Unable to create certificate signer: %v", err)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/testdata/doc.go b/vendor/golang.org/x/crypto/ssh/testdata/doc.go new file mode 100644 index 0000000..fcae47c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/testdata/doc.go @@ -0,0 +1,8 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This package contains test data shared between the various subpackages of +// the golang.org/x/crypto/ssh package. Under no circumstance should +// this data be used for production code. +package testdata // import "golang.org/x/crypto/ssh/testdata" diff --git a/vendor/golang.org/x/crypto/ssh/testdata/keys.go b/vendor/golang.org/x/crypto/ssh/testdata/keys.go new file mode 100644 index 0000000..3b3d26c --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/testdata/keys.go @@ -0,0 +1,177 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package testdata + +var PEMBytes = map[string][]byte{ + "dsa": []byte(`-----BEGIN DSA PRIVATE KEY----- +MIIBuwIBAAKBgQD6PDSEyXiI9jfNs97WuM46MSDCYlOqWw80ajN16AohtBncs1YB +lHk//dQOvCYOsYaE+gNix2jtoRjwXhDsc25/IqQbU1ahb7mB8/rsaILRGIbA5WH3 +EgFtJmXFovDz3if6F6TzvhFpHgJRmLYVR8cqsezL3hEZOvvs2iH7MorkxwIVAJHD +nD82+lxh2fb4PMsIiaXudAsBAoGAQRf7Q/iaPRn43ZquUhd6WwvirqUj+tkIu6eV +2nZWYmXLlqFQKEy4Tejl7Wkyzr2OSYvbXLzo7TNxLKoWor6ips0phYPPMyXld14r +juhT24CrhOzuLMhDduMDi032wDIZG4Y+K7ElU8Oufn8Sj5Wge8r6ANmmVgmFfynr +FhdYCngCgYEA3ucGJ93/Mx4q4eKRDxcWD3QzWyqpbRVRRV1Vmih9Ha/qC994nJFz +DQIdjxDIT2Rk2AGzMqFEB68Zc3O+Wcsmz5eWWzEwFxaTwOGWTyDqsDRLm3fD+QYj +nOwuxb0Kce+gWI8voWcqC9cyRm09jGzu2Ab3Bhtpg8JJ8L7gS3MRZK4CFEx4UAfY +Fmsr0W6fHB9nhS4/UXM8 +-----END DSA PRIVATE KEY----- +`), + "ecdsa": []byte(`-----BEGIN EC PRIVATE KEY----- +MHcCAQEEINGWx0zo6fhJ/0EAfrPzVFyFC9s18lBt3cRoEDhS3ARooAoGCCqGSM49 +AwEHoUQDQgAEi9Hdw6KvZcWxfg2IDhA7UkpDtzzt6ZqJXSsFdLd+Kx4S3Sx4cVO+ +6/ZOXRnPmNAlLUqjShUsUBBngG0u2fqEqA== +-----END EC PRIVATE KEY----- +`), + "rsa": []byte(`-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQC8A6FGHDiWCSREAXCq6yBfNVr0xCVG2CzvktFNRpue+RXrGs/2 +a6ySEJQb3IYquw7HlJgu6fg3WIWhOmHCjfpG0PrL4CRwbqQ2LaPPXhJErWYejcD8 +Di00cF3677+G10KMZk9RXbmHtuBFZT98wxg8j+ZsBMqGM1+7yrWUvynswQIDAQAB +AoGAJMCk5vqfSRzyXOTXLGIYCuR4Kj6pdsbNSeuuRGfYBeR1F2c/XdFAg7D/8s5R +38p/Ih52/Ty5S8BfJtwtvgVY9ecf/JlU/rl/QzhG8/8KC0NG7KsyXklbQ7gJT8UT +Ojmw5QpMk+rKv17ipDVkQQmPaj+gJXYNAHqImke5mm/K/h0CQQDciPmviQ+DOhOq +2ZBqUfH8oXHgFmp7/6pXw80DpMIxgV3CwkxxIVx6a8lVH9bT/AFySJ6vXq4zTuV9 +6QmZcZzDAkEA2j/UXJPIs1fQ8z/6sONOkU/BjtoePFIWJlRxdN35cZjXnBraX5UR +fFHkePv4YwqmXNqrBOvSu+w2WdSDci+IKwJAcsPRc/jWmsrJW1q3Ha0hSf/WG/Bu +X7MPuXaKpP/DkzGoUmb8ks7yqj6XWnYkPNLjCc8izU5vRwIiyWBRf4mxMwJBAILa +NDvRS0rjwt6lJGv7zPZoqDc65VfrK2aNyHx2PgFyzwrEOtuF57bu7pnvEIxpLTeM +z26i6XVMeYXAWZMTloMCQBbpGgEERQpeUknLBqUHhg/wXF6+lFA+vEGnkY+Dwab2 +KCXFGd+SQ5GdUcEMe9isUH6DYj/6/yCDoFrXXmpQb+M= +-----END RSA PRIVATE KEY----- +`), + "ed25519": []byte(`-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACA+3f7hS7g5UWwXOGVTrMfhmxyrjqz7Sxxbx7I1j8DvvwAAAJhAFfkOQBX5 +DgAAAAtzc2gtZWQyNTUxOQAAACA+3f7hS7g5UWwXOGVTrMfhmxyrjqz7Sxxbx7I1j8Dvvw +AAAEAaYmXltfW6nhRo3iWGglRB48lYq0z0Q3I3KyrdutEr6j7d/uFLuDlRbBc4ZVOsx+Gb +HKuOrPtLHFvHsjWPwO+/AAAAE2dhcnRvbm1AZ2FydG9ubS14cHMBAg== +-----END OPENSSH PRIVATE KEY----- +`), + "rsa-openssh-format": []byte(`-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAlwAAAAdzc2gtcn +NhAAAAAwEAAQAAAIEAwa48yfWFi3uIdqzuf9X7C2Zxfea/Iaaw0zIwHudpF8U92WVIiC5l +oEuW1+OaVi3UWfIEjWMV1tHGysrHOwtwc34BPCJqJknUQO/KtDTBTJ4Pryhw1bWPC999Lz +a+yrCTdNQYBzoROXKExZgPFh9pTMi5wqpHDuOQ2qZFIEI3lT0AAAIQWL0H31i9B98AAAAH +c3NoLXJzYQAAAIEAwa48yfWFi3uIdqzuf9X7C2Zxfea/Iaaw0zIwHudpF8U92WVIiC5loE +uW1+OaVi3UWfIEjWMV1tHGysrHOwtwc34BPCJqJknUQO/KtDTBTJ4Pryhw1bWPC999Lza+ +yrCTdNQYBzoROXKExZgPFh9pTMi5wqpHDuOQ2qZFIEI3lT0AAAADAQABAAAAgCThyTGsT4 +IARDxVMhWl6eiB2ZrgFgWSeJm/NOqtppWgOebsIqPMMg4UVuVFsl422/lE3RkPhVkjGXgE +pWvZAdCnmLmApK8wK12vF334lZhZT7t3Z9EzJps88PWEHo7kguf285HcnUM7FlFeissJdk +kXly34y7/3X/a6Tclm+iABAAAAQE0xR/KxZ39slwfMv64Rz7WKk1PPskaryI29aHE3mKHk +pY2QA+P3QlrKxT/VWUMjHUbNNdYfJm48xu0SGNMRdKMAAABBAORh2NP/06JUV3J9W/2Hju +X1ViJuqqcQnJPVzpgSL826EC2xwOECTqoY8uvFpUdD7CtpksIxNVqRIhuNOlz0lqEAAABB +ANkaHTTaPojClO0dKJ/Zjs7pWOCGliebBYprQ/Y4r9QLBkC/XaWMS26gFIrjgC7D2Rv+rZ +wSD0v0RcmkITP1ZR0AAAAYcHF1ZXJuYUBMdWNreUh5ZHJvLmxvY2FsAQID +-----END OPENSSH PRIVATE KEY-----`), + "user": []byte(`-----BEGIN EC PRIVATE KEY----- +MHcCAQEEILYCAeq8f7V4vSSypRw7pxy8yz3V5W4qg8kSC3zJhqpQoAoGCCqGSM49 +AwEHoUQDQgAEYcO2xNKiRUYOLEHM7VYAp57HNyKbOdYtHD83Z4hzNPVC4tM5mdGD +PLL8IEwvYu2wq+lpXfGQnNMbzYf9gspG0w== +-----END EC PRIVATE KEY----- +`), + "ca": []byte(`-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAvg9dQ9IRG59lYJb+GESfKWTch4yBpr7Ydw1jkK6vvtrx9jLo +5hkA8X6+ElRPRqTAZSlN5cBm6YCAcQIOsmXDUn6Oj1lVPQAoOjTBTvsjM3NjGhvv +52kHTY0nsMsBeY9q5DTtlzmlYkVUq2a6Htgf2mNi01dIw5fJ7uTTo8EbNf7O0i3u +c9a8P19HaZl5NKiWN4EIZkfB2WdXYRJCVBsGgQj3dE/GrEmH9QINq1A+GkNvK96u +vZm8H1jjmuqzHplWa7lFeXcx8FTVTbVb/iJrZ2Lc/JvIPitKZWhqbR59yrGjpwEp +Id7bo4WhO5L3OB0fSIJYvfu+o4WYnt4f3UzecwIDAQABAoIBABRD9yHgKErVuC2Q +bA+SYZY8VvdtF/X7q4EmQFORDNRA7EPgMc03JU6awRGbQ8i4kHs46EFzPoXvWcKz +AXYsO6N0Myc900Tp22A5d9NAHATEbPC/wdje7hRq1KyZONMJY9BphFv3nZbY5apR +Dc90JBFZP5RhXjTc3n9GjvqLAKfFEKVmPRCvqxCOZunw6XR+SgIQLJo36nsIsbhW +QUXIVaCI6cXMN8bRPm8EITdBNZu06Fpu4ZHm6VaxlXN9smERCDkgBSNXNWHKxmmA +c3Glo2DByUr2/JFBOrLEe9fkYgr24KNCQkHVcSaFxEcZvTggr7StjKISVHlCNEaB +7Q+kPoECgYEA3zE9FmvFGoQCU4g4Nl3dpQHs6kaAW8vJlrmq3xsireIuaJoa2HMe +wYdIvgCnK9DIjyxd5OWnE4jXtAEYPsyGD32B5rSLQrRO96lgb3f4bESCLUb3Bsn/ +sdgeE3p1xZMA0B59htqCrvVgN9k8WxyevBxYl3/gSBm/p8OVH1RTW/ECgYEA2f9Z +95OLj0KQHQtxQXf+I3VjhCw3LkLW39QZOXVI0QrCJfqqP7uxsJXH9NYX0l0GFTcR +kRrlyoaSU1EGQosZh+n1MvplGBTkTSV47/bPsTzFpgK2NfEZuFm9RoWgltS+nYeH +Y2k4mnAN3PhReCMwuprmJz8GRLsO3Cs2s2YylKMCgYEA2UX+uO/q7jgqZ5UJW+ue +1H5+W0aMuFA3i7JtZEnvRaUVFqFGlwXin/WJ2+WY1++k/rPrJ+Rk9IBXtBUIvEGw +FC5TIfsKQsJyyWgqx/jbbtJ2g4s8+W/1qfTAuqeRNOg5d2DnRDs90wJuS4//0JaY +9HkHyVwkQyxFxhSA/AHEMJECgYA2MvyFR1O9bIk0D3I7GsA+xKLXa77Ua53MzIjw +9i4CezBGDQpjCiFli/fI8am+jY5DnAtsDknvjoG24UAzLy5L0mk6IXMdB6SzYYut +7ak5oahqW+Y9hxIj+XvLmtGQbphtxhJtLu35x75KoBpxSh6FZpmuTEccs31AVCYn +eFM/DQKBgQDOPUwbLKqVi6ddFGgrV9MrWw+SWsDa43bPuyvYppMM3oqesvyaX1Dt +qDvN7owaNxNM4OnfKcZr91z8YPVCFo4RbBif3DXRzjNNBlxEjHBtuMOikwvsmucN +vIrbeEpjTiUMTEAr6PoTiVHjsfS8WAM6MDlF5M+2PNswDsBpa2yLgA== +-----END RSA PRIVATE KEY----- +`), +} + +var SSHCertificates = map[string][]byte{ + // The following are corresponding certificates for the private keys above, signed by the CA key + // Generated by the following commands: + // + // 1. Assumes "rsa" key above in file named "rsa", write out the public key to "rsa.pub": + // ssh-keygen -y -f rsa > rsa.pu + // + // 2. Assumes "ca" key above in file named "ca", sign a cert for "rsa.pub": + // ssh-keygen -s ca -h -n host.example.com -V +500w -I host.example.com-key rsa.pub + "rsa": []byte(`ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgLjYqmmuTSEmjVhSfLQphBSTJMLwIZhRgmpn8FHKLiEIAAAADAQABAAAAgQC8A6FGHDiWCSREAXCq6yBfNVr0xCVG2CzvktFNRpue+RXrGs/2a6ySEJQb3IYquw7HlJgu6fg3WIWhOmHCjfpG0PrL4CRwbqQ2LaPPXhJErWYejcD8Di00cF3677+G10KMZk9RXbmHtuBFZT98wxg8j+ZsBMqGM1+7yrWUvynswQAAAAAAAAAAAAAAAgAAABRob3N0LmV4YW1wbGUuY29tLWtleQAAABQAAAAQaG9zdC5leGFtcGxlLmNvbQAAAABZHN8UAAAAAGsjIYUAAAAAAAAAAAAAAAAAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQC+D11D0hEbn2Vglv4YRJ8pZNyHjIGmvth3DWOQrq++2vH2MujmGQDxfr4SVE9GpMBlKU3lwGbpgIBxAg6yZcNSfo6PWVU9ACg6NMFO+yMzc2MaG+/naQdNjSewywF5j2rkNO2XOaViRVSrZroe2B/aY2LTV0jDl8nu5NOjwRs1/s7SLe5z1rw/X0dpmXk0qJY3gQhmR8HZZ1dhEkJUGwaBCPd0T8asSYf1Ag2rUD4aQ28r3q69mbwfWOOa6rMemVZruUV5dzHwVNVNtVv+ImtnYtz8m8g+K0plaGptHn3KsaOnASkh3tujhaE7kvc4HR9Igli9+76jhZie3h/dTN5zAAABDwAAAAdzc2gtcnNhAAABALeDea+60H6xJGhktAyosHaSY7AYzLocaqd8hJQjEIDifBwzoTlnBmcK9CxGhKuaoJFThdCLdaevCeOSuquh8HTkf+2ebZZc/G5T+2thPvPqmcuEcmMosWo+SIjYhbP3S6KD49aLC1X0kz8IBQeauFvURhkZ5ZjhA1L4aQYt9NjL73nqOl8PplRui+Ov5w8b4ldul4zOvYAFrzfcP6wnnXk3c1Zzwwf5wynD5jakO8GpYKBuhM7Z4crzkKSQjU3hla7xqgfomC5Gz4XbR2TNjcQiRrJQ0UlKtX3X3ObRCEhuvG0Kzjklhv+Ddw6txrhKjMjiSi/Yyius/AE8TmC1p4U= host.example.com +`), +} + +var PEMEncryptedKeys = []struct { + Name string + EncryptionKey string + PEMBytes []byte +}{ + 0: { + Name: "rsa-encrypted", + EncryptionKey: "r54-G0pher_t3st$", + PEMBytes: []byte(`-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,3E1714DE130BC5E81327F36564B05462 + +MqW88sud4fnWk/Jk3fkjh7ydu51ZkHLN5qlQgA4SkAXORPPMj2XvqZOv1v2LOgUV +dUevUn8PZK7a9zbZg4QShUSzwE5k6wdB7XKPyBgI39mJ79GBd2U4W3h6KT6jIdWA +goQpluxkrzr2/X602IaxLEre97FT9mpKC6zxKCLvyFWVIP9n3OSFS47cTTXyFr+l +7PdRhe60nn6jSBgUNk/Q1lAvEQ9fufdPwDYY93F1wyJ6lOr0F1+mzRrMbH67NyKs +rG8J1Fa7cIIre7ueKIAXTIne7OAWqpU9UDgQatDtZTbvA7ciqGsSFgiwwW13N+Rr +hN8MkODKs9cjtONxSKi05s206A3NDU6STtZ3KuPDjFE1gMJODotOuqSM+cxKfyFq +wxpk/CHYCDdMAVBSwxb/vraOHamylL4uCHpJdBHypzf2HABt+lS8Su23uAmL87DR +yvyCS/lmpuNTndef6qHPRkoW2EV3xqD3ovosGf7kgwGJUk2ZpCLVteqmYehKlZDK +r/Jy+J26ooI2jIg9bjvD1PZq+Mv+2dQ1RlDrPG3PB+rEixw6vBaL9x3jatCd4ej7 +XG7lb3qO9xFpLsx89tkEcvpGR+broSpUJ6Mu5LBCVmrvqHjvnDhrZVz1brMiQtU9 +iMZbgXqDLXHd6ERWygk7OTU03u+l1gs+KGMfmS0h0ZYw6KGVLgMnsoxqd6cFSKNB +8Ohk9ZTZGCiovlXBUepyu8wKat1k8YlHSfIHoRUJRhhcd7DrmojC+bcbMIZBU22T +Pl2ftVRGtcQY23lYd0NNKfebF7ncjuLWQGy+vZW+7cgfI6wPIbfYfP6g7QAutk6W +KQx0AoX5woZ6cNxtpIrymaVjSMRRBkKQrJKmRp3pC/lul5E5P2cueMs1fj4OHTbJ +lAUv88ywr+R+mRgYQlFW/XQ653f6DT4t6+njfO9oBcPrQDASZel3LjXLpjjYG/N5 ++BWnVexuJX9ika8HJiFl55oqaKb+WknfNhk5cPY+x7SDV9ywQeMiDZpr0ffeYAEP +LlwwiWRDYpO+uwXHSFF3+JjWwjhs8m8g99iFb7U93yKgBB12dCEPPa2ZeH9wUHMJ +sreYhNuq6f4iWWSXpzN45inQqtTi8jrJhuNLTT543ErW7DtntBO2rWMhff3aiXbn +Uy3qzZM1nPbuCGuBmP9L2dJ3Z5ifDWB4JmOyWY4swTZGt9AVmUxMIKdZpRONx8vz +I9u9nbVPGZBcou50Pa0qTLbkWsSL94MNXrARBxzhHC9Zs6XNEtwN7mOuii7uMkVc +adrxgknBH1J1N+NX/eTKzUwJuPvDtA+Z5ILWNN9wpZT/7ed8zEnKHPNUexyeT5g3 +uw9z9jH7ffGxFYlx87oiVPHGOrCXYZYW5uoZE31SCBkbtNuffNRJRKIFeipmpJ3P +7bpAG+kGHMelQH6b+5K1Qgsv4tpuSyKeTKpPFH9Av5nN4P1ZBm9N80tzbNWqjSJm +S7rYdHnuNEVnUGnRmEUMmVuYZnNBEVN/fP2m2SEwXcP3Uh7TiYlcWw10ygaGmOr7 +MvMLGkYgQ4Utwnd98mtqa0jr0hK2TcOSFir3AqVvXN3XJj4cVULkrXe4Im1laWgp +-----END RSA PRIVATE KEY----- +`), + }, + + 1: { + Name: "dsa-encrypted", + EncryptionKey: "qG0pher-dsa_t3st$", + PEMBytes: []byte(`-----BEGIN DSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,7CE7A6E4A647DC01AF860210B15ADE3E + +hvnBpI99Hceq/55pYRdOzBLntIEis02JFNXuLEydWL+RJBFDn7tA+vXec0ERJd6J +G8JXlSOAhmC2H4uK3q2xR8/Y3yL95n6OIcjvCBiLsV+o3jj1MYJmErxP6zRtq4w3 +JjIjGHWmaYFSxPKQ6e8fs74HEqaeMV9ONUoTtB+aISmgaBL15Fcoayg245dkBvVl +h5Kqspe7yvOBmzA3zjRuxmSCqKJmasXM7mqs3vIrMxZE3XPo1/fWKcPuExgpVQoT +HkJZEoIEIIPnPMwT2uYbFJSGgPJVMDT84xz7yvjCdhLmqrsXgs5Qw7Pw0i0c0BUJ +b7fDJ2UhdiwSckWGmIhTLlJZzr8K+JpjCDlP+REYBI5meB7kosBnlvCEHdw2EJkH +0QDc/2F4xlVrHOLbPRFyu1Oi2Gvbeoo9EsM/DThpd1hKAlb0sF5Y0y0d+owv0PnE +R/4X3HWfIdOHsDUvJ8xVWZ4BZk9Zk9qol045DcFCehpr/3hslCrKSZHakLt9GI58 +vVQJ4L0aYp5nloLfzhViZtKJXRLkySMKdzYkIlNmW1oVGl7tce5UCNI8Nok4j6yn +IiHM7GBn+0nJoKTXsOGMIBe3ulKlKVxLjEuk9yivh/8= +-----END DSA PRIVATE KEY----- +`), + }, +} diff --git a/vendor/golang.org/x/crypto/ssh/testdata_test.go b/vendor/golang.org/x/crypto/ssh/testdata_test.go new file mode 100644 index 0000000..2da8c79 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/testdata_test.go @@ -0,0 +1,63 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// IMPLEMENTATION NOTE: To avoid a package loop, this file is in three places: +// ssh/, ssh/agent, and ssh/test/. It should be kept in sync across all three +// instances. + +package ssh + +import ( + "crypto/rand" + "fmt" + + "golang.org/x/crypto/ssh/testdata" +) + +var ( + testPrivateKeys map[string]interface{} + testSigners map[string]Signer + testPublicKeys map[string]PublicKey +) + +func init() { + var err error + + n := len(testdata.PEMBytes) + testPrivateKeys = make(map[string]interface{}, n) + testSigners = make(map[string]Signer, n) + testPublicKeys = make(map[string]PublicKey, n) + for t, k := range testdata.PEMBytes { + testPrivateKeys[t], err = ParseRawPrivateKey(k) + if err != nil { + panic(fmt.Sprintf("Unable to parse test key %s: %v", t, err)) + } + testSigners[t], err = NewSignerFromKey(testPrivateKeys[t]) + if err != nil { + panic(fmt.Sprintf("Unable to create signer for test key %s: %v", t, err)) + } + testPublicKeys[t] = testSigners[t].PublicKey() + } + + // Create a cert and sign it for use in tests. + testCert := &Certificate{ + Nonce: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + ValidPrincipals: []string{"gopher1", "gopher2"}, // increases test coverage + ValidAfter: 0, // unix epoch + ValidBefore: CertTimeInfinity, // The end of currently representable time. + Reserved: []byte{}, // To pass reflect.DeepEqual after marshal & parse, this must be non-nil + Key: testPublicKeys["ecdsa"], + SignatureKey: testPublicKeys["rsa"], + Permissions: Permissions{ + CriticalOptions: map[string]string{}, + Extensions: map[string]string{}, + }, + } + testCert.SignCert(rand.Reader, testSigners["rsa"]) + testPrivateKeys["cert"] = testPrivateKeys["ecdsa"] + testSigners["cert"], err = NewCertSigner(testCert, testSigners["ecdsa"]) + if err != nil { + panic(fmt.Sprintf("Unable to create certificate signer: %v", err)) + } +} diff --git a/vendor/golang.org/x/crypto/ssh/transport.go b/vendor/golang.org/x/crypto/ssh/transport.go new file mode 100644 index 0000000..f9780e0 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/transport.go @@ -0,0 +1,375 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bufio" + "errors" + "io" + "log" +) + +// debugTransport if set, will print packet types as they go over the +// wire. No message decoding is done, to minimize the impact on timing. +const debugTransport = false + +const ( + gcmCipherID = "aes128-gcm@openssh.com" + aes128cbcID = "aes128-cbc" + tripledescbcID = "3des-cbc" +) + +// packetConn represents a transport that implements packet based +// operations. +type packetConn interface { + // Encrypt and send a packet of data to the remote peer. + writePacket(packet []byte) error + + // Read a packet from the connection. The read is blocking, + // i.e. if error is nil, then the returned byte slice is + // always non-empty. + readPacket() ([]byte, error) + + // Close closes the write-side of the connection. + Close() error +} + +// transport is the keyingTransport that implements the SSH packet +// protocol. +type transport struct { + reader connectionState + writer connectionState + + bufReader *bufio.Reader + bufWriter *bufio.Writer + rand io.Reader + isClient bool + io.Closer +} + +// packetCipher represents a combination of SSH encryption/MAC +// protocol. A single instance should be used for one direction only. +type packetCipher interface { + // writePacket encrypts the packet and writes it to w. The + // contents of the packet are generally scrambled. + writePacket(seqnum uint32, w io.Writer, rand io.Reader, packet []byte) error + + // readPacket reads and decrypts a packet of data. The + // returned packet may be overwritten by future calls of + // readPacket. + readPacket(seqnum uint32, r io.Reader) ([]byte, error) +} + +// connectionState represents one side (read or write) of the +// connection. This is necessary because each direction has its own +// keys, and can even have its own algorithms +type connectionState struct { + packetCipher + seqNum uint32 + dir direction + pendingKeyChange chan packetCipher +} + +// prepareKeyChange sets up key material for a keychange. The key changes in +// both directions are triggered by reading and writing a msgNewKey packet +// respectively. +func (t *transport) prepareKeyChange(algs *algorithms, kexResult *kexResult) error { + if ciph, err := newPacketCipher(t.reader.dir, algs.r, kexResult); err != nil { + return err + } else { + t.reader.pendingKeyChange <- ciph + } + + if ciph, err := newPacketCipher(t.writer.dir, algs.w, kexResult); err != nil { + return err + } else { + t.writer.pendingKeyChange <- ciph + } + + return nil +} + +func (t *transport) printPacket(p []byte, write bool) { + if len(p) == 0 { + return + } + who := "server" + if t.isClient { + who = "client" + } + what := "read" + if write { + what = "write" + } + + log.Println(what, who, p[0]) +} + +// Read and decrypt next packet. +func (t *transport) readPacket() (p []byte, err error) { + for { + p, err = t.reader.readPacket(t.bufReader) + if err != nil { + break + } + if len(p) == 0 || (p[0] != msgIgnore && p[0] != msgDebug) { + break + } + } + if debugTransport { + t.printPacket(p, false) + } + + return p, err +} + +func (s *connectionState) readPacket(r *bufio.Reader) ([]byte, error) { + packet, err := s.packetCipher.readPacket(s.seqNum, r) + s.seqNum++ + if err == nil && len(packet) == 0 { + err = errors.New("ssh: zero length packet") + } + + if len(packet) > 0 { + switch packet[0] { + case msgNewKeys: + select { + case cipher := <-s.pendingKeyChange: + s.packetCipher = cipher + default: + return nil, errors.New("ssh: got bogus newkeys message.") + } + + case msgDisconnect: + // Transform a disconnect message into an + // error. Since this is lowest level at which + // we interpret message types, doing it here + // ensures that we don't have to handle it + // elsewhere. + var msg disconnectMsg + if err := Unmarshal(packet, &msg); err != nil { + return nil, err + } + return nil, &msg + } + } + + // The packet may point to an internal buffer, so copy the + // packet out here. + fresh := make([]byte, len(packet)) + copy(fresh, packet) + + return fresh, err +} + +func (t *transport) writePacket(packet []byte) error { + if debugTransport { + t.printPacket(packet, true) + } + return t.writer.writePacket(t.bufWriter, t.rand, packet) +} + +func (s *connectionState) writePacket(w *bufio.Writer, rand io.Reader, packet []byte) error { + changeKeys := len(packet) > 0 && packet[0] == msgNewKeys + + err := s.packetCipher.writePacket(s.seqNum, w, rand, packet) + if err != nil { + return err + } + if err = w.Flush(); err != nil { + return err + } + s.seqNum++ + if changeKeys { + select { + case cipher := <-s.pendingKeyChange: + s.packetCipher = cipher + default: + panic("ssh: no key material for msgNewKeys") + } + } + return err +} + +func newTransport(rwc io.ReadWriteCloser, rand io.Reader, isClient bool) *transport { + t := &transport{ + bufReader: bufio.NewReader(rwc), + bufWriter: bufio.NewWriter(rwc), + rand: rand, + reader: connectionState{ + packetCipher: &streamPacketCipher{cipher: noneCipher{}}, + pendingKeyChange: make(chan packetCipher, 1), + }, + writer: connectionState{ + packetCipher: &streamPacketCipher{cipher: noneCipher{}}, + pendingKeyChange: make(chan packetCipher, 1), + }, + Closer: rwc, + } + t.isClient = isClient + + if isClient { + t.reader.dir = serverKeys + t.writer.dir = clientKeys + } else { + t.reader.dir = clientKeys + t.writer.dir = serverKeys + } + + return t +} + +type direction struct { + ivTag []byte + keyTag []byte + macKeyTag []byte +} + +var ( + serverKeys = direction{[]byte{'B'}, []byte{'D'}, []byte{'F'}} + clientKeys = direction{[]byte{'A'}, []byte{'C'}, []byte{'E'}} +) + +// generateKeys generates key material for IV, MAC and encryption. +func generateKeys(d direction, algs directionAlgorithms, kex *kexResult) (iv, key, macKey []byte) { + cipherMode := cipherModes[algs.Cipher] + macMode := macModes[algs.MAC] + + iv = make([]byte, cipherMode.ivSize) + key = make([]byte, cipherMode.keySize) + macKey = make([]byte, macMode.keySize) + + generateKeyMaterial(iv, d.ivTag, kex) + generateKeyMaterial(key, d.keyTag, kex) + generateKeyMaterial(macKey, d.macKeyTag, kex) + return +} + +// setupKeys sets the cipher and MAC keys from kex.K, kex.H and sessionId, as +// described in RFC 4253, section 6.4. direction should either be serverKeys +// (to setup server->client keys) or clientKeys (for client->server keys). +func newPacketCipher(d direction, algs directionAlgorithms, kex *kexResult) (packetCipher, error) { + iv, key, macKey := generateKeys(d, algs, kex) + + if algs.Cipher == gcmCipherID { + return newGCMCipher(iv, key, macKey) + } + + if algs.Cipher == aes128cbcID { + return newAESCBCCipher(iv, key, macKey, algs) + } + + if algs.Cipher == tripledescbcID { + return newTripleDESCBCCipher(iv, key, macKey, algs) + } + + c := &streamPacketCipher{ + mac: macModes[algs.MAC].new(macKey), + etm: macModes[algs.MAC].etm, + } + c.macResult = make([]byte, c.mac.Size()) + + var err error + c.cipher, err = cipherModes[algs.Cipher].createStream(key, iv) + if err != nil { + return nil, err + } + + return c, nil +} + +// generateKeyMaterial fills out with key material generated from tag, K, H +// and sessionId, as specified in RFC 4253, section 7.2. +func generateKeyMaterial(out, tag []byte, r *kexResult) { + var digestsSoFar []byte + + h := r.Hash.New() + for len(out) > 0 { + h.Reset() + h.Write(r.K) + h.Write(r.H) + + if len(digestsSoFar) == 0 { + h.Write(tag) + h.Write(r.SessionID) + } else { + h.Write(digestsSoFar) + } + + digest := h.Sum(nil) + n := copy(out, digest) + out = out[n:] + if len(out) > 0 { + digestsSoFar = append(digestsSoFar, digest...) + } + } +} + +const packageVersion = "SSH-2.0-Go" + +// Sends and receives a version line. The versionLine string should +// be US ASCII, start with "SSH-2.0-", and should not include a +// newline. exchangeVersions returns the other side's version line. +func exchangeVersions(rw io.ReadWriter, versionLine []byte) (them []byte, err error) { + // Contrary to the RFC, we do not ignore lines that don't + // start with "SSH-2.0-" to make the library usable with + // nonconforming servers. + for _, c := range versionLine { + // The spec disallows non US-ASCII chars, and + // specifically forbids null chars. + if c < 32 { + return nil, errors.New("ssh: junk character in version line") + } + } + if _, err = rw.Write(append(versionLine, '\r', '\n')); err != nil { + return + } + + them, err = readVersion(rw) + return them, err +} + +// maxVersionStringBytes is the maximum number of bytes that we'll +// accept as a version string. RFC 4253 section 4.2 limits this at 255 +// chars +const maxVersionStringBytes = 255 + +// Read version string as specified by RFC 4253, section 4.2. +func readVersion(r io.Reader) ([]byte, error) { + versionString := make([]byte, 0, 64) + var ok bool + var buf [1]byte + + for len(versionString) < maxVersionStringBytes { + _, err := io.ReadFull(r, buf[:]) + if err != nil { + return nil, err + } + // The RFC says that the version should be terminated with \r\n + // but several SSH servers actually only send a \n. + if buf[0] == '\n' { + ok = true + break + } + + // non ASCII chars are disallowed, but we are lenient, + // since Go doesn't use null-terminated strings. + + // The RFC allows a comment after a space, however, + // all of it (version and comments) goes into the + // session hash. + versionString = append(versionString, buf[0]) + } + + if !ok { + return nil, errors.New("ssh: overflow reading version string") + } + + // There might be a '\r' on the end which we should remove. + if len(versionString) > 0 && versionString[len(versionString)-1] == '\r' { + versionString = versionString[:len(versionString)-1] + } + return versionString, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/transport_test.go b/vendor/golang.org/x/crypto/ssh/transport_test.go new file mode 100644 index 0000000..92d83ab --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/transport_test.go @@ -0,0 +1,109 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "bytes" + "crypto/rand" + "encoding/binary" + "strings" + "testing" +) + +func TestReadVersion(t *testing.T) { + longversion := strings.Repeat("SSH-2.0-bla", 50)[:253] + cases := map[string]string{ + "SSH-2.0-bla\r\n": "SSH-2.0-bla", + "SSH-2.0-bla\n": "SSH-2.0-bla", + longversion + "\r\n": longversion, + } + + for in, want := range cases { + result, err := readVersion(bytes.NewBufferString(in)) + if err != nil { + t.Errorf("readVersion(%q): %s", in, err) + } + got := string(result) + if got != want { + t.Errorf("got %q, want %q", got, want) + } + } +} + +func TestReadVersionError(t *testing.T) { + longversion := strings.Repeat("SSH-2.0-bla", 50)[:253] + cases := []string{ + longversion + "too-long\r\n", + } + for _, in := range cases { + if _, err := readVersion(bytes.NewBufferString(in)); err == nil { + t.Errorf("readVersion(%q) should have failed", in) + } + } +} + +func TestExchangeVersionsBasic(t *testing.T) { + v := "SSH-2.0-bla" + buf := bytes.NewBufferString(v + "\r\n") + them, err := exchangeVersions(buf, []byte("xyz")) + if err != nil { + t.Errorf("exchangeVersions: %v", err) + } + + if want := "SSH-2.0-bla"; string(them) != want { + t.Errorf("got %q want %q for our version", them, want) + } +} + +func TestExchangeVersions(t *testing.T) { + cases := []string{ + "not\x000allowed", + "not allowed\n", + } + for _, c := range cases { + buf := bytes.NewBufferString("SSH-2.0-bla\r\n") + if _, err := exchangeVersions(buf, []byte(c)); err == nil { + t.Errorf("exchangeVersions(%q): should have failed", c) + } + } +} + +type closerBuffer struct { + bytes.Buffer +} + +func (b *closerBuffer) Close() error { + return nil +} + +func TestTransportMaxPacketWrite(t *testing.T) { + buf := &closerBuffer{} + tr := newTransport(buf, rand.Reader, true) + huge := make([]byte, maxPacket+1) + err := tr.writePacket(huge) + if err == nil { + t.Errorf("transport accepted write for a huge packet.") + } +} + +func TestTransportMaxPacketReader(t *testing.T) { + var header [5]byte + huge := make([]byte, maxPacket+128) + binary.BigEndian.PutUint32(header[0:], uint32(len(huge))) + // padding. + header[4] = 0 + + buf := &closerBuffer{} + buf.Write(header[:]) + buf.Write(huge) + + tr := newTransport(buf, rand.Reader, true) + _, err := tr.readPacket() + if err == nil { + t.Errorf("transport succeeded reading huge packet.") + } else if !strings.Contains(err.Error(), "large") { + t.Errorf("got %q, should mention %q", err.Error(), "large") + } +} diff --git a/vendor/golang.org/x/crypto/tea/cipher.go b/vendor/golang.org/x/crypto/tea/cipher.go new file mode 100644 index 0000000..9c13d12 --- /dev/null +++ b/vendor/golang.org/x/crypto/tea/cipher.go @@ -0,0 +1,109 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package tea implements the TEA algorithm, as defined in Needham and +// Wheeler's 1994 technical report, “TEA, a Tiny Encryption Algorithm”. See +// http://www.cix.co.uk/~klockstone/tea.pdf for details. + +package tea + +import ( + "crypto/cipher" + "encoding/binary" + "errors" +) + +const ( + // BlockSize is the size of a TEA block, in bytes. + BlockSize = 8 + + // KeySize is the size of a TEA key, in bytes. + KeySize = 16 + + // delta is the TEA key schedule constant. + delta = 0x9e3779b9 + + // numRounds is the standard number of rounds in TEA. + numRounds = 64 +) + +// tea is an instance of the TEA cipher with a particular key. +type tea struct { + key [16]byte + rounds int +} + +// NewCipher returns an instance of the TEA cipher with the standard number of +// rounds. The key argument must be 16 bytes long. +func NewCipher(key []byte) (cipher.Block, error) { + return NewCipherWithRounds(key, numRounds) +} + +// NewCipherWithRounds returns an instance of the TEA cipher with a given +// number of rounds, which must be even. The key argument must be 16 bytes +// long. +func NewCipherWithRounds(key []byte, rounds int) (cipher.Block, error) { + if len(key) != 16 { + return nil, errors.New("tea: incorrect key size") + } + + if rounds&1 != 0 { + return nil, errors.New("tea: odd number of rounds specified") + } + + c := &tea{ + rounds: rounds, + } + copy(c.key[:], key) + + return c, nil +} + +// BlockSize returns the TEA block size, which is eight bytes. It is necessary +// to satisfy the Block interface in the package "crypto/cipher". +func (*tea) BlockSize() int { + return BlockSize +} + +// Encrypt encrypts the 8 byte buffer src using the key in t and stores the +// result in dst. Note that for amounts of data larger than a block, it is not +// safe to just call Encrypt on successive blocks; instead, use an encryption +// mode like CBC (see crypto/cipher/cbc.go). +func (t *tea) Encrypt(dst, src []byte) { + e := binary.BigEndian + v0, v1 := e.Uint32(src), e.Uint32(src[4:]) + k0, k1, k2, k3 := e.Uint32(t.key[0:]), e.Uint32(t.key[4:]), e.Uint32(t.key[8:]), e.Uint32(t.key[12:]) + + sum := uint32(0) + delta := uint32(delta) + + for i := 0; i < t.rounds/2; i++ { + sum += delta + v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1) + v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3) + } + + e.PutUint32(dst, v0) + e.PutUint32(dst[4:], v1) +} + +// Decrypt decrypts the 8 byte buffer src using the key in t and stores the +// result in dst. +func (t *tea) Decrypt(dst, src []byte) { + e := binary.BigEndian + v0, v1 := e.Uint32(src), e.Uint32(src[4:]) + k0, k1, k2, k3 := e.Uint32(t.key[0:]), e.Uint32(t.key[4:]), e.Uint32(t.key[8:]), e.Uint32(t.key[12:]) + + delta := uint32(delta) + sum := delta * uint32(t.rounds/2) // in general, sum = delta * n + + for i := 0; i < t.rounds/2; i++ { + v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3) + v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1) + sum -= delta + } + + e.PutUint32(dst, v0) + e.PutUint32(dst[4:], v1) +} diff --git a/vendor/golang.org/x/crypto/tea/tea_test.go b/vendor/golang.org/x/crypto/tea/tea_test.go new file mode 100644 index 0000000..eb98d1e --- /dev/null +++ b/vendor/golang.org/x/crypto/tea/tea_test.go @@ -0,0 +1,93 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package tea + +import ( + "bytes" + "testing" +) + +// A sample test key for when we just want to initialize a cipher +var testKey = []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF} + +// Test that the block size for tea is correct +func TestBlocksize(t *testing.T) { + c, err := NewCipher(testKey) + if err != nil { + t.Fatalf("NewCipher returned error: %s", err) + } + + if result := c.BlockSize(); result != BlockSize { + t.Errorf("cipher.BlockSize returned %d, but expected %d", result, BlockSize) + } +} + +// Test that invalid key sizes return an error +func TestInvalidKeySize(t *testing.T) { + var key [KeySize + 1]byte + + if _, err := NewCipher(key[:]); err == nil { + t.Errorf("invalid key size %d didn't result in an error.", len(key)) + } + + if _, err := NewCipher(key[:KeySize-1]); err == nil { + t.Errorf("invalid key size %d didn't result in an error.", KeySize-1) + } +} + +// Test Vectors +type teaTest struct { + rounds int + key []byte + plaintext []byte + ciphertext []byte +} + +var teaTests = []teaTest{ + // These were sourced from https://github.com/froydnj/ironclad/blob/master/testing/test-vectors/tea.testvec + { + numRounds, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x41, 0xea, 0x3a, 0x0a, 0x94, 0xba, 0xa9, 0x40}, + }, + { + numRounds, + []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, + []byte{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}, + []byte{0x31, 0x9b, 0xbe, 0xfb, 0x01, 0x6a, 0xbd, 0xb2}, + }, + { + 16, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xed, 0x28, 0x5d, 0xa1, 0x45, 0x5b, 0x33, 0xc1}, + }, +} + +// Test encryption +func TestCipherEncrypt(t *testing.T) { + // Test encryption with standard 64 rounds + for i, test := range teaTests { + c, err := NewCipherWithRounds(test.key, test.rounds) + if err != nil { + t.Fatalf("#%d: NewCipher returned error: %s", i, err) + } + + var ciphertext [BlockSize]byte + c.Encrypt(ciphertext[:], test.plaintext) + + if !bytes.Equal(ciphertext[:], test.ciphertext) { + t.Errorf("#%d: incorrect ciphertext. Got %x, wanted %x", i, ciphertext, test.ciphertext) + } + + var plaintext2 [BlockSize]byte + c.Decrypt(plaintext2[:], ciphertext[:]) + + if !bytes.Equal(plaintext2[:], test.plaintext) { + t.Errorf("#%d: incorrect plaintext. Got %x, wanted %x", i, plaintext2, test.plaintext) + } + } +} diff --git a/vendor/golang.org/x/crypto/twofish/twofish.go b/vendor/golang.org/x/crypto/twofish/twofish.go new file mode 100644 index 0000000..6db01fc --- /dev/null +++ b/vendor/golang.org/x/crypto/twofish/twofish.go @@ -0,0 +1,342 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package twofish implements Bruce Schneier's Twofish encryption algorithm. +package twofish // import "golang.org/x/crypto/twofish" + +// Twofish is defined in https://www.schneier.com/paper-twofish-paper.pdf [TWOFISH] + +// This code is a port of the LibTom C implementation. +// See http://libtom.org/?page=features&newsitems=5&whatfile=crypt. +// LibTomCrypt is free for all purposes under the public domain. +// It was heavily inspired by the go blowfish package. + +import "strconv" + +// BlockSize is the constant block size of Twofish. +const BlockSize = 16 + +const mdsPolynomial = 0x169 // x^8 + x^6 + x^5 + x^3 + 1, see [TWOFISH] 4.2 +const rsPolynomial = 0x14d // x^8 + x^6 + x^3 + x^2 + 1, see [TWOFISH] 4.3 + +// A Cipher is an instance of Twofish encryption using a particular key. +type Cipher struct { + s [4][256]uint32 + k [40]uint32 +} + +type KeySizeError int + +func (k KeySizeError) Error() string { + return "crypto/twofish: invalid key size " + strconv.Itoa(int(k)) +} + +// NewCipher creates and returns a Cipher. +// The key argument should be the Twofish key, 16, 24 or 32 bytes. +func NewCipher(key []byte) (*Cipher, error) { + keylen := len(key) + + if keylen != 16 && keylen != 24 && keylen != 32 { + return nil, KeySizeError(keylen) + } + + // k is the number of 64 bit words in key + k := keylen / 8 + + // Create the S[..] words + var S [4 * 4]byte + for i := 0; i < k; i++ { + // Computes [y0 y1 y2 y3] = rs . [x0 x1 x2 x3 x4 x5 x6 x7] + for j, rsRow := range rs { + for k, rsVal := range rsRow { + S[4*i+j] ^= gfMult(key[8*i+k], rsVal, rsPolynomial) + } + } + } + + // Calculate subkeys + c := new(Cipher) + var tmp [4]byte + for i := byte(0); i < 20; i++ { + // A = h(p * 2x, Me) + for j := range tmp { + tmp[j] = 2 * i + } + A := h(tmp[:], key, 0) + + // B = rolc(h(p * (2x + 1), Mo), 8) + for j := range tmp { + tmp[j] = 2*i + 1 + } + B := h(tmp[:], key, 1) + B = rol(B, 8) + + c.k[2*i] = A + B + + // K[2i+1] = (A + 2B) <<< 9 + c.k[2*i+1] = rol(2*B+A, 9) + } + + // Calculate sboxes + switch k { + case 2: + for i := range c.s[0] { + c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][byte(i)]^S[0]]^S[4]], 0) + c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][byte(i)]^S[1]]^S[5]], 1) + c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][byte(i)]^S[2]]^S[6]], 2) + c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][byte(i)]^S[3]]^S[7]], 3) + } + case 3: + for i := range c.s[0] { + c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][sbox[1][byte(i)]^S[0]]^S[4]]^S[8]], 0) + c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][sbox[1][byte(i)]^S[1]]^S[5]]^S[9]], 1) + c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][sbox[0][byte(i)]^S[2]]^S[6]]^S[10]], 2) + c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][sbox[0][byte(i)]^S[3]]^S[7]]^S[11]], 3) + } + default: + for i := range c.s[0] { + c.s[0][i] = mdsColumnMult(sbox[1][sbox[0][sbox[0][sbox[1][sbox[1][byte(i)]^S[0]]^S[4]]^S[8]]^S[12]], 0) + c.s[1][i] = mdsColumnMult(sbox[0][sbox[0][sbox[1][sbox[1][sbox[0][byte(i)]^S[1]]^S[5]]^S[9]]^S[13]], 1) + c.s[2][i] = mdsColumnMult(sbox[1][sbox[1][sbox[0][sbox[0][sbox[0][byte(i)]^S[2]]^S[6]]^S[10]]^S[14]], 2) + c.s[3][i] = mdsColumnMult(sbox[0][sbox[1][sbox[1][sbox[0][sbox[1][byte(i)]^S[3]]^S[7]]^S[11]]^S[15]], 3) + } + } + + return c, nil +} + +// BlockSize returns the Twofish block size, 16 bytes. +func (c *Cipher) BlockSize() int { return BlockSize } + +// store32l stores src in dst in little-endian form. +func store32l(dst []byte, src uint32) { + dst[0] = byte(src) + dst[1] = byte(src >> 8) + dst[2] = byte(src >> 16) + dst[3] = byte(src >> 24) + return +} + +// load32l reads a little-endian uint32 from src. +func load32l(src []byte) uint32 { + return uint32(src[0]) | uint32(src[1])<<8 | uint32(src[2])<<16 | uint32(src[3])<<24 +} + +// rol returns x after a left circular rotation of y bits. +func rol(x, y uint32) uint32 { + return (x << (y & 31)) | (x >> (32 - (y & 31))) +} + +// ror returns x after a right circular rotation of y bits. +func ror(x, y uint32) uint32 { + return (x >> (y & 31)) | (x << (32 - (y & 31))) +} + +// The RS matrix. See [TWOFISH] 4.3 +var rs = [4][8]byte{ + {0x01, 0xA4, 0x55, 0x87, 0x5A, 0x58, 0xDB, 0x9E}, + {0xA4, 0x56, 0x82, 0xF3, 0x1E, 0xC6, 0x68, 0xE5}, + {0x02, 0xA1, 0xFC, 0xC1, 0x47, 0xAE, 0x3D, 0x19}, + {0xA4, 0x55, 0x87, 0x5A, 0x58, 0xDB, 0x9E, 0x03}, +} + +// sbox tables +var sbox = [2][256]byte{ + { + 0xa9, 0x67, 0xb3, 0xe8, 0x04, 0xfd, 0xa3, 0x76, 0x9a, 0x92, 0x80, 0x78, 0xe4, 0xdd, 0xd1, 0x38, + 0x0d, 0xc6, 0x35, 0x98, 0x18, 0xf7, 0xec, 0x6c, 0x43, 0x75, 0x37, 0x26, 0xfa, 0x13, 0x94, 0x48, + 0xf2, 0xd0, 0x8b, 0x30, 0x84, 0x54, 0xdf, 0x23, 0x19, 0x5b, 0x3d, 0x59, 0xf3, 0xae, 0xa2, 0x82, + 0x63, 0x01, 0x83, 0x2e, 0xd9, 0x51, 0x9b, 0x7c, 0xa6, 0xeb, 0xa5, 0xbe, 0x16, 0x0c, 0xe3, 0x61, + 0xc0, 0x8c, 0x3a, 0xf5, 0x73, 0x2c, 0x25, 0x0b, 0xbb, 0x4e, 0x89, 0x6b, 0x53, 0x6a, 0xb4, 0xf1, + 0xe1, 0xe6, 0xbd, 0x45, 0xe2, 0xf4, 0xb6, 0x66, 0xcc, 0x95, 0x03, 0x56, 0xd4, 0x1c, 0x1e, 0xd7, + 0xfb, 0xc3, 0x8e, 0xb5, 0xe9, 0xcf, 0xbf, 0xba, 0xea, 0x77, 0x39, 0xaf, 0x33, 0xc9, 0x62, 0x71, + 0x81, 0x79, 0x09, 0xad, 0x24, 0xcd, 0xf9, 0xd8, 0xe5, 0xc5, 0xb9, 0x4d, 0x44, 0x08, 0x86, 0xe7, + 0xa1, 0x1d, 0xaa, 0xed, 0x06, 0x70, 0xb2, 0xd2, 0x41, 0x7b, 0xa0, 0x11, 0x31, 0xc2, 0x27, 0x90, + 0x20, 0xf6, 0x60, 0xff, 0x96, 0x5c, 0xb1, 0xab, 0x9e, 0x9c, 0x52, 0x1b, 0x5f, 0x93, 0x0a, 0xef, + 0x91, 0x85, 0x49, 0xee, 0x2d, 0x4f, 0x8f, 0x3b, 0x47, 0x87, 0x6d, 0x46, 0xd6, 0x3e, 0x69, 0x64, + 0x2a, 0xce, 0xcb, 0x2f, 0xfc, 0x97, 0x05, 0x7a, 0xac, 0x7f, 0xd5, 0x1a, 0x4b, 0x0e, 0xa7, 0x5a, + 0x28, 0x14, 0x3f, 0x29, 0x88, 0x3c, 0x4c, 0x02, 0xb8, 0xda, 0xb0, 0x17, 0x55, 0x1f, 0x8a, 0x7d, + 0x57, 0xc7, 0x8d, 0x74, 0xb7, 0xc4, 0x9f, 0x72, 0x7e, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, + 0x6e, 0x50, 0xde, 0x68, 0x65, 0xbc, 0xdb, 0xf8, 0xc8, 0xa8, 0x2b, 0x40, 0xdc, 0xfe, 0x32, 0xa4, + 0xca, 0x10, 0x21, 0xf0, 0xd3, 0x5d, 0x0f, 0x00, 0x6f, 0x9d, 0x36, 0x42, 0x4a, 0x5e, 0xc1, 0xe0, + }, + { + 0x75, 0xf3, 0xc6, 0xf4, 0xdb, 0x7b, 0xfb, 0xc8, 0x4a, 0xd3, 0xe6, 0x6b, 0x45, 0x7d, 0xe8, 0x4b, + 0xd6, 0x32, 0xd8, 0xfd, 0x37, 0x71, 0xf1, 0xe1, 0x30, 0x0f, 0xf8, 0x1b, 0x87, 0xfa, 0x06, 0x3f, + 0x5e, 0xba, 0xae, 0x5b, 0x8a, 0x00, 0xbc, 0x9d, 0x6d, 0xc1, 0xb1, 0x0e, 0x80, 0x5d, 0xd2, 0xd5, + 0xa0, 0x84, 0x07, 0x14, 0xb5, 0x90, 0x2c, 0xa3, 0xb2, 0x73, 0x4c, 0x54, 0x92, 0x74, 0x36, 0x51, + 0x38, 0xb0, 0xbd, 0x5a, 0xfc, 0x60, 0x62, 0x96, 0x6c, 0x42, 0xf7, 0x10, 0x7c, 0x28, 0x27, 0x8c, + 0x13, 0x95, 0x9c, 0xc7, 0x24, 0x46, 0x3b, 0x70, 0xca, 0xe3, 0x85, 0xcb, 0x11, 0xd0, 0x93, 0xb8, + 0xa6, 0x83, 0x20, 0xff, 0x9f, 0x77, 0xc3, 0xcc, 0x03, 0x6f, 0x08, 0xbf, 0x40, 0xe7, 0x2b, 0xe2, + 0x79, 0x0c, 0xaa, 0x82, 0x41, 0x3a, 0xea, 0xb9, 0xe4, 0x9a, 0xa4, 0x97, 0x7e, 0xda, 0x7a, 0x17, + 0x66, 0x94, 0xa1, 0x1d, 0x3d, 0xf0, 0xde, 0xb3, 0x0b, 0x72, 0xa7, 0x1c, 0xef, 0xd1, 0x53, 0x3e, + 0x8f, 0x33, 0x26, 0x5f, 0xec, 0x76, 0x2a, 0x49, 0x81, 0x88, 0xee, 0x21, 0xc4, 0x1a, 0xeb, 0xd9, + 0xc5, 0x39, 0x99, 0xcd, 0xad, 0x31, 0x8b, 0x01, 0x18, 0x23, 0xdd, 0x1f, 0x4e, 0x2d, 0xf9, 0x48, + 0x4f, 0xf2, 0x65, 0x8e, 0x78, 0x5c, 0x58, 0x19, 0x8d, 0xe5, 0x98, 0x57, 0x67, 0x7f, 0x05, 0x64, + 0xaf, 0x63, 0xb6, 0xfe, 0xf5, 0xb7, 0x3c, 0xa5, 0xce, 0xe9, 0x68, 0x44, 0xe0, 0x4d, 0x43, 0x69, + 0x29, 0x2e, 0xac, 0x15, 0x59, 0xa8, 0x0a, 0x9e, 0x6e, 0x47, 0xdf, 0x34, 0x35, 0x6a, 0xcf, 0xdc, + 0x22, 0xc9, 0xc0, 0x9b, 0x89, 0xd4, 0xed, 0xab, 0x12, 0xa2, 0x0d, 0x52, 0xbb, 0x02, 0x2f, 0xa9, + 0xd7, 0x61, 0x1e, 0xb4, 0x50, 0x04, 0xf6, 0xc2, 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xbe, 0x91, + }, +} + +// gfMult returns a·b in GF(2^8)/p +func gfMult(a, b byte, p uint32) byte { + B := [2]uint32{0, uint32(b)} + P := [2]uint32{0, p} + var result uint32 + + // branchless GF multiplier + for i := 0; i < 7; i++ { + result ^= B[a&1] + a >>= 1 + B[1] = P[B[1]>>7] ^ (B[1] << 1) + } + result ^= B[a&1] + return byte(result) +} + +// mdsColumnMult calculates y{col} where [y0 y1 y2 y3] = MDS · [x0] +func mdsColumnMult(in byte, col int) uint32 { + mul01 := in + mul5B := gfMult(in, 0x5B, mdsPolynomial) + mulEF := gfMult(in, 0xEF, mdsPolynomial) + + switch col { + case 0: + return uint32(mul01) | uint32(mul5B)<<8 | uint32(mulEF)<<16 | uint32(mulEF)<<24 + case 1: + return uint32(mulEF) | uint32(mulEF)<<8 | uint32(mul5B)<<16 | uint32(mul01)<<24 + case 2: + return uint32(mul5B) | uint32(mulEF)<<8 | uint32(mul01)<<16 | uint32(mulEF)<<24 + case 3: + return uint32(mul5B) | uint32(mul01)<<8 | uint32(mulEF)<<16 | uint32(mul5B)<<24 + } + + panic("unreachable") +} + +// h implements the S-box generation function. See [TWOFISH] 4.3.5 +func h(in, key []byte, offset int) uint32 { + var y [4]byte + for x := range y { + y[x] = in[x] + } + switch len(key) / 8 { + case 4: + y[0] = sbox[1][y[0]] ^ key[4*(6+offset)+0] + y[1] = sbox[0][y[1]] ^ key[4*(6+offset)+1] + y[2] = sbox[0][y[2]] ^ key[4*(6+offset)+2] + y[3] = sbox[1][y[3]] ^ key[4*(6+offset)+3] + fallthrough + case 3: + y[0] = sbox[1][y[0]] ^ key[4*(4+offset)+0] + y[1] = sbox[1][y[1]] ^ key[4*(4+offset)+1] + y[2] = sbox[0][y[2]] ^ key[4*(4+offset)+2] + y[3] = sbox[0][y[3]] ^ key[4*(4+offset)+3] + fallthrough + case 2: + y[0] = sbox[1][sbox[0][sbox[0][y[0]]^key[4*(2+offset)+0]]^key[4*(0+offset)+0]] + y[1] = sbox[0][sbox[0][sbox[1][y[1]]^key[4*(2+offset)+1]]^key[4*(0+offset)+1]] + y[2] = sbox[1][sbox[1][sbox[0][y[2]]^key[4*(2+offset)+2]]^key[4*(0+offset)+2]] + y[3] = sbox[0][sbox[1][sbox[1][y[3]]^key[4*(2+offset)+3]]^key[4*(0+offset)+3]] + } + // [y0 y1 y2 y3] = MDS . [x0 x1 x2 x3] + var mdsMult uint32 + for i := range y { + mdsMult ^= mdsColumnMult(y[i], i) + } + return mdsMult +} + +// Encrypt encrypts a 16-byte block from src to dst, which may overlap. +// Note that for amounts of data larger than a block, +// it is not safe to just call Encrypt on successive blocks; +// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). +func (c *Cipher) Encrypt(dst, src []byte) { + S1 := c.s[0] + S2 := c.s[1] + S3 := c.s[2] + S4 := c.s[3] + + // Load input + ia := load32l(src[0:4]) + ib := load32l(src[4:8]) + ic := load32l(src[8:12]) + id := load32l(src[12:16]) + + // Pre-whitening + ia ^= c.k[0] + ib ^= c.k[1] + ic ^= c.k[2] + id ^= c.k[3] + + for i := 0; i < 8; i++ { + k := c.k[8+i*4 : 12+i*4] + t2 := S2[byte(ib)] ^ S3[byte(ib>>8)] ^ S4[byte(ib>>16)] ^ S1[byte(ib>>24)] + t1 := S1[byte(ia)] ^ S2[byte(ia>>8)] ^ S3[byte(ia>>16)] ^ S4[byte(ia>>24)] + t2 + ic = ror(ic^(t1+k[0]), 1) + id = rol(id, 1) ^ (t2 + t1 + k[1]) + + t2 = S2[byte(id)] ^ S3[byte(id>>8)] ^ S4[byte(id>>16)] ^ S1[byte(id>>24)] + t1 = S1[byte(ic)] ^ S2[byte(ic>>8)] ^ S3[byte(ic>>16)] ^ S4[byte(ic>>24)] + t2 + ia = ror(ia^(t1+k[2]), 1) + ib = rol(ib, 1) ^ (t2 + t1 + k[3]) + } + + // Output with "undo last swap" + ta := ic ^ c.k[4] + tb := id ^ c.k[5] + tc := ia ^ c.k[6] + td := ib ^ c.k[7] + + store32l(dst[0:4], ta) + store32l(dst[4:8], tb) + store32l(dst[8:12], tc) + store32l(dst[12:16], td) +} + +// Decrypt decrypts a 16-byte block from src to dst, which may overlap. +func (c *Cipher) Decrypt(dst, src []byte) { + S1 := c.s[0] + S2 := c.s[1] + S3 := c.s[2] + S4 := c.s[3] + + // Load input + ta := load32l(src[0:4]) + tb := load32l(src[4:8]) + tc := load32l(src[8:12]) + td := load32l(src[12:16]) + + // Undo undo final swap + ia := tc ^ c.k[6] + ib := td ^ c.k[7] + ic := ta ^ c.k[4] + id := tb ^ c.k[5] + + for i := 8; i > 0; i-- { + k := c.k[4+i*4 : 8+i*4] + t2 := S2[byte(id)] ^ S3[byte(id>>8)] ^ S4[byte(id>>16)] ^ S1[byte(id>>24)] + t1 := S1[byte(ic)] ^ S2[byte(ic>>8)] ^ S3[byte(ic>>16)] ^ S4[byte(ic>>24)] + t2 + ia = rol(ia, 1) ^ (t1 + k[2]) + ib = ror(ib^(t2+t1+k[3]), 1) + + t2 = S2[byte(ib)] ^ S3[byte(ib>>8)] ^ S4[byte(ib>>16)] ^ S1[byte(ib>>24)] + t1 = S1[byte(ia)] ^ S2[byte(ia>>8)] ^ S3[byte(ia>>16)] ^ S4[byte(ia>>24)] + t2 + ic = rol(ic, 1) ^ (t1 + k[0]) + id = ror(id^(t2+t1+k[1]), 1) + } + + // Undo pre-whitening + ia ^= c.k[0] + ib ^= c.k[1] + ic ^= c.k[2] + id ^= c.k[3] + + store32l(dst[0:4], ia) + store32l(dst[4:8], ib) + store32l(dst[8:12], ic) + store32l(dst[12:16], id) +} diff --git a/vendor/golang.org/x/crypto/twofish/twofish_test.go b/vendor/golang.org/x/crypto/twofish/twofish_test.go new file mode 100644 index 0000000..ed6a1a8 --- /dev/null +++ b/vendor/golang.org/x/crypto/twofish/twofish_test.go @@ -0,0 +1,129 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package twofish + +import ( + "bytes" + "testing" +) + +var qbox = [2][4][16]byte{ + { + {0x8, 0x1, 0x7, 0xD, 0x6, 0xF, 0x3, 0x2, 0x0, 0xB, 0x5, 0x9, 0xE, 0xC, 0xA, 0x4}, + {0xE, 0xC, 0xB, 0x8, 0x1, 0x2, 0x3, 0x5, 0xF, 0x4, 0xA, 0x6, 0x7, 0x0, 0x9, 0xD}, + {0xB, 0xA, 0x5, 0xE, 0x6, 0xD, 0x9, 0x0, 0xC, 0x8, 0xF, 0x3, 0x2, 0x4, 0x7, 0x1}, + {0xD, 0x7, 0xF, 0x4, 0x1, 0x2, 0x6, 0xE, 0x9, 0xB, 0x3, 0x0, 0x8, 0x5, 0xC, 0xA}, + }, + { + {0x2, 0x8, 0xB, 0xD, 0xF, 0x7, 0x6, 0xE, 0x3, 0x1, 0x9, 0x4, 0x0, 0xA, 0xC, 0x5}, + {0x1, 0xE, 0x2, 0xB, 0x4, 0xC, 0x3, 0x7, 0x6, 0xD, 0xA, 0x5, 0xF, 0x9, 0x0, 0x8}, + {0x4, 0xC, 0x7, 0x5, 0x1, 0x6, 0x9, 0xA, 0x0, 0xE, 0xD, 0x8, 0x2, 0xB, 0x3, 0xF}, + {0xB, 0x9, 0x5, 0x1, 0xC, 0x3, 0xD, 0xE, 0x6, 0x4, 0x7, 0xF, 0x2, 0x0, 0x8, 0xA}, + }, +} + +// genSbox generates the variable sbox +func genSbox(qi int, x byte) byte { + a0, b0 := x/16, x%16 + for i := 0; i < 2; i++ { + a1 := a0 ^ b0 + b1 := (a0 ^ ((b0 << 3) | (b0 >> 1)) ^ (a0 << 3)) & 15 + a0 = qbox[qi][2*i][a1] + b0 = qbox[qi][2*i+1][b1] + } + return (b0 << 4) + a0 +} + +func TestSbox(t *testing.T) { + for n := range sbox { + for m := range sbox[n] { + if genSbox(n, byte(m)) != sbox[n][m] { + t.Errorf("#%d|%d: sbox value = %d want %d", n, m, sbox[n][m], genSbox(n, byte(m))) + } + } + } +} + +var testVectors = []struct { + key []byte + dec []byte + enc []byte +}{ + // These tests are extracted from LibTom + { + []byte{0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A}, + []byte{0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E, 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19}, + []byte{0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85, 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3}, + }, + { + []byte{0x88, 0xB2, 0xB2, 0x70, 0x6B, 0x10, 0x5E, 0x36, 0xB4, 0x46, 0xBB, 0x6D, 0x73, 0x1A, 0x1E, 0x88, + 0xEF, 0xA7, 0x1F, 0x78, 0x89, 0x65, 0xBD, 0x44}, + []byte{0x39, 0xDA, 0x69, 0xD6, 0xBA, 0x49, 0x97, 0xD5, 0x85, 0xB6, 0xDC, 0x07, 0x3C, 0xA3, 0x41, 0xB2}, + []byte{0x18, 0x2B, 0x02, 0xD8, 0x14, 0x97, 0xEA, 0x45, 0xF9, 0xDA, 0xAC, 0xDC, 0x29, 0x19, 0x3A, 0x65}, + }, + { + []byte{0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D, + 0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F}, + []byte{0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6}, + []byte{0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA}, + }, + // These tests are derived from https://www.schneier.com/code/ecb_ival.txt + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A}, + }, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, + }, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xCF, 0xD1, 0xD2, 0xE5, 0xA9, 0xBE, 0x9C, 0xDF, 0x50, 0x1F, 0x13, 0xB8, 0x92, 0xBD, 0x22, 0x48}, + }, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, + }, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x37, 0x52, 0x7B, 0xE0, 0x05, 0x23, 0x34, 0xB8, 0x9F, 0x0C, 0xFC, 0xCA, 0xE8, 0x7C, 0xFA, 0x20}, + }, +} + +func TestCipher(t *testing.T) { + for n, tt := range testVectors { + // Test if the plaintext (dec) is encrypts to the given + // ciphertext (enc) using the given key. Test also if enc can + // be decrypted again into dec. + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("#%d: NewCipher: %v", n, err) + return + } + + buf := make([]byte, 16) + c.Encrypt(buf, tt.dec) + if !bytes.Equal(buf, tt.enc) { + t.Errorf("#%d: encrypt = %x want %x", n, buf, tt.enc) + } + c.Decrypt(buf, tt.enc) + if !bytes.Equal(buf, tt.dec) { + t.Errorf("#%d: decrypt = %x want %x", n, buf, tt.dec) + } + + // Test that 16 zero bytes, encrypted 1000 times then decrypted + // 1000 times results in zero bytes again. + zero := make([]byte, 16) + buf = make([]byte, 16) + for i := 0; i < 1000; i++ { + c.Encrypt(buf, buf) + } + for i := 0; i < 1000; i++ { + c.Decrypt(buf, buf) + } + if !bytes.Equal(buf, zero) { + t.Errorf("#%d: encrypt/decrypt 1000: have %x want %x", n, buf, zero) + } + } +} diff --git a/vendor/golang.org/x/crypto/xtea/block.go b/vendor/golang.org/x/crypto/xtea/block.go new file mode 100644 index 0000000..bf5d245 --- /dev/null +++ b/vendor/golang.org/x/crypto/xtea/block.go @@ -0,0 +1,66 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +/* + Implementation adapted from Needham and Wheeler's paper: + http://www.cix.co.uk/~klockstone/xtea.pdf + + A precalculated look up table is used during encryption/decryption for values that are based purely on the key. +*/ + +package xtea + +// XTEA is based on 64 rounds. +const numRounds = 64 + +// blockToUint32 reads an 8 byte slice into two uint32s. +// The block is treated as big endian. +func blockToUint32(src []byte) (uint32, uint32) { + r0 := uint32(src[0])<<24 | uint32(src[1])<<16 | uint32(src[2])<<8 | uint32(src[3]) + r1 := uint32(src[4])<<24 | uint32(src[5])<<16 | uint32(src[6])<<8 | uint32(src[7]) + return r0, r1 +} + +// uint32ToBlock writes two uint32s into an 8 byte data block. +// Values are written as big endian. +func uint32ToBlock(v0, v1 uint32, dst []byte) { + dst[0] = byte(v0 >> 24) + dst[1] = byte(v0 >> 16) + dst[2] = byte(v0 >> 8) + dst[3] = byte(v0) + dst[4] = byte(v1 >> 24) + dst[5] = byte(v1 >> 16) + dst[6] = byte(v1 >> 8) + dst[7] = byte(v1 >> 0) +} + +// encryptBlock encrypts a single 8 byte block using XTEA. +func encryptBlock(c *Cipher, dst, src []byte) { + v0, v1 := blockToUint32(src) + + // Two rounds of XTEA applied per loop + for i := 0; i < numRounds; { + v0 += ((v1<<4 ^ v1>>5) + v1) ^ c.table[i] + i++ + v1 += ((v0<<4 ^ v0>>5) + v0) ^ c.table[i] + i++ + } + + uint32ToBlock(v0, v1, dst) +} + +// decryptBlock decrypt a single 8 byte block using XTEA. +func decryptBlock(c *Cipher, dst, src []byte) { + v0, v1 := blockToUint32(src) + + // Two rounds of XTEA applied per loop + for i := numRounds; i > 0; { + i-- + v1 -= ((v0<<4 ^ v0>>5) + v0) ^ c.table[i] + i-- + v0 -= ((v1<<4 ^ v1>>5) + v1) ^ c.table[i] + } + + uint32ToBlock(v0, v1, dst) +} diff --git a/vendor/golang.org/x/crypto/xtea/cipher.go b/vendor/golang.org/x/crypto/xtea/cipher.go new file mode 100644 index 0000000..108b426 --- /dev/null +++ b/vendor/golang.org/x/crypto/xtea/cipher.go @@ -0,0 +1,82 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package xtea implements XTEA encryption, as defined in Needham and Wheeler's +// 1997 technical report, "Tea extensions." +package xtea // import "golang.org/x/crypto/xtea" + +// For details, see http://www.cix.co.uk/~klockstone/xtea.pdf + +import "strconv" + +// The XTEA block size in bytes. +const BlockSize = 8 + +// A Cipher is an instance of an XTEA cipher using a particular key. +// table contains a series of precalculated values that are used each round. +type Cipher struct { + table [64]uint32 +} + +type KeySizeError int + +func (k KeySizeError) Error() string { + return "crypto/xtea: invalid key size " + strconv.Itoa(int(k)) +} + +// NewCipher creates and returns a new Cipher. +// The key argument should be the XTEA key. +// XTEA only supports 128 bit (16 byte) keys. +func NewCipher(key []byte) (*Cipher, error) { + k := len(key) + switch k { + default: + return nil, KeySizeError(k) + case 16: + break + } + + c := new(Cipher) + initCipher(c, key) + + return c, nil +} + +// BlockSize returns the XTEA block size, 8 bytes. +// It is necessary to satisfy the Block interface in the +// package "crypto/cipher". +func (c *Cipher) BlockSize() int { return BlockSize } + +// Encrypt encrypts the 8 byte buffer src using the key and stores the result in dst. +// Note that for amounts of data larger than a block, +// it is not safe to just call Encrypt on successive blocks; +// instead, use an encryption mode like CBC (see crypto/cipher/cbc.go). +func (c *Cipher) Encrypt(dst, src []byte) { encryptBlock(c, dst, src) } + +// Decrypt decrypts the 8 byte buffer src using the key k and stores the result in dst. +func (c *Cipher) Decrypt(dst, src []byte) { decryptBlock(c, dst, src) } + +// initCipher initializes the cipher context by creating a look up table +// of precalculated values that are based on the key. +func initCipher(c *Cipher, key []byte) { + // Load the key into four uint32s + var k [4]uint32 + for i := 0; i < len(k); i++ { + j := i << 2 // Multiply by 4 + k[i] = uint32(key[j+0])<<24 | uint32(key[j+1])<<16 | uint32(key[j+2])<<8 | uint32(key[j+3]) + } + + // Precalculate the table + const delta = 0x9E3779B9 + var sum uint32 = 0 + + // Two rounds of XTEA applied per loop + for i := 0; i < numRounds; { + c.table[i] = sum + k[sum&3] + i++ + sum += delta + c.table[i] = sum + k[(sum>>11)&3] + i++ + } +} diff --git a/vendor/golang.org/x/crypto/xtea/xtea_test.go b/vendor/golang.org/x/crypto/xtea/xtea_test.go new file mode 100644 index 0000000..be711bf --- /dev/null +++ b/vendor/golang.org/x/crypto/xtea/xtea_test.go @@ -0,0 +1,229 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xtea + +import ( + "testing" +) + +// A sample test key for when we just want to initialize a cipher +var testKey = []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF} + +// Test that the block size for XTEA is correct +func TestBlocksize(t *testing.T) { + if BlockSize != 8 { + t.Errorf("BlockSize constant - expected 8, got %d", BlockSize) + return + } + + c, err := NewCipher(testKey) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(testKey), err) + return + } + + result := c.BlockSize() + if result != 8 { + t.Errorf("BlockSize function - expected 8, got %d", result) + return + } +} + +// A series of test values to confirm that the Cipher.table array was initialized correctly +var testTable = []uint32{ + 0x00112233, 0x6B1568B8, 0xE28CE030, 0xC5089E2D, 0xC5089E2D, 0x1EFBD3A2, 0xA7845C2A, 0x78EF0917, + 0x78EF0917, 0x172682D0, 0x5B6AC714, 0x822AC955, 0x3DE68511, 0xDC1DFECA, 0x2062430E, 0x3611343F, + 0xF1CCEFFB, 0x900469B4, 0xD448ADF8, 0x2E3BE36D, 0xB6C46BF5, 0x994029F2, 0x994029F2, 0xF3335F67, + 0x6AAAD6DF, 0x4D2694DC, 0x4D2694DC, 0xEB5E0E95, 0x2FA252D9, 0x4551440A, 0x121E10D6, 0xB0558A8F, + 0xE388BDC3, 0x0A48C004, 0xC6047BC0, 0x643BF579, 0xA88039BD, 0x02736F32, 0x8AFBF7BA, 0x5C66A4A7, + 0x5C66A4A7, 0xC76AEB2C, 0x3EE262A4, 0x215E20A1, 0x215E20A1, 0x7B515616, 0x03D9DE9E, 0x1988CFCF, + 0xD5448B8B, 0x737C0544, 0xB7C04988, 0xDE804BC9, 0x9A3C0785, 0x3873813E, 0x7CB7C582, 0xD6AAFAF7, + 0x4E22726F, 0x309E306C, 0x309E306C, 0x8A9165E1, 0x1319EE69, 0xF595AC66, 0xF595AC66, 0x4F88E1DB, +} + +// Test that the cipher context is initialized correctly +func TestCipherInit(t *testing.T) { + c, err := NewCipher(testKey) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(testKey), err) + return + } + + for i := 0; i < len(c.table); i++ { + if c.table[i] != testTable[i] { + t.Errorf("NewCipher() failed to initialize Cipher.table[%d] correctly. Expected %08X, got %08X", i, testTable[i], c.table[i]) + break + } + } +} + +// Test that invalid key sizes return an error +func TestInvalidKeySize(t *testing.T) { + // Test a long key + key := []byte{ + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, + 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, + } + + _, err := NewCipher(key) + if err == nil { + t.Errorf("Invalid key size %d didn't result in an error.", len(key)) + } + + // Test a short key + key = []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77} + + _, err = NewCipher(key) + if err == nil { + t.Errorf("Invalid key size %d didn't result in an error.", len(key)) + } +} + +// Test that we can correctly decode some bytes we have encoded +func TestEncodeDecode(t *testing.T) { + original := []byte{0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF} + input := original + output := make([]byte, BlockSize) + + c, err := NewCipher(testKey) + if err != nil { + t.Errorf("NewCipher(%d bytes) = %s", len(testKey), err) + return + } + + // Encrypt the input block + c.Encrypt(output, input) + + // Check that the output does not match the input + differs := false + for i := 0; i < len(input); i++ { + if output[i] != input[i] { + differs = true + break + } + } + if differs == false { + t.Error("Cipher.Encrypt: Failed to encrypt the input block.") + return + } + + // Decrypt the block we just encrypted + input = output + output = make([]byte, BlockSize) + c.Decrypt(output, input) + + // Check that the output from decrypt matches our initial input + for i := 0; i < len(input); i++ { + if output[i] != original[i] { + t.Errorf("Decrypted byte %d differed. Expected %02X, got %02X\n", i, original[i], output[i]) + return + } + } +} + +// Test Vectors +type CryptTest struct { + key []byte + plainText []byte + cipherText []byte +} + +var CryptTests = []CryptTest{ + // These were sourced from http://www.freemedialibrary.com/index.php/XTEA_test_vectors + { + []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, + []byte{0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}, + []byte{0x49, 0x7d, 0xf3, 0xd0, 0x72, 0x61, 0x2c, 0xb5}, + }, + { + []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, + []byte{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41}, + []byte{0xe7, 0x8f, 0x2d, 0x13, 0x74, 0x43, 0x41, 0xd8}, + }, + { + []byte{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}, + []byte{0x5a, 0x5b, 0x6e, 0x27, 0x89, 0x48, 0xd7, 0x7f}, + []byte{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41}, + }, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48}, + []byte{0xa0, 0x39, 0x05, 0x89, 0xf8, 0xb8, 0xef, 0xa5}, + }, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41}, + []byte{0xed, 0x23, 0x37, 0x5a, 0x82, 0x1a, 0x8c, 0x2d}, + }, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x70, 0xe1, 0x22, 0x5d, 0x6e, 0x4e, 0x76, 0x55}, + []byte{0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41}, + }, + + // These vectors are from http://wiki.secondlife.com/wiki/XTEA_Strong_Encryption_Implementation#Bouncy_Castle_C.23_API + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0xDE, 0xE9, 0xD4, 0xD8, 0xF7, 0x13, 0x1E, 0xD9}, + }, + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}, + []byte{0x06, 0x5C, 0x1B, 0x89, 0x75, 0xC6, 0xA8, 0x16}, + }, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78, 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A}, + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + []byte{0x1F, 0xF9, 0xA0, 0x26, 0x1A, 0xC6, 0x42, 0x64}, + }, + { + []byte{0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78, 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A}, + []byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}, + []byte{0x8C, 0x67, 0x15, 0x5B, 0x2E, 0xF9, 0x1E, 0xAD}, + }, +} + +// Test encryption +func TestCipherEncrypt(t *testing.T) { + for i, tt := range CryptTests { + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("NewCipher(%d bytes), vector %d = %s", len(tt.key), i, err) + continue + } + + out := make([]byte, len(tt.plainText)) + c.Encrypt(out, tt.plainText) + + for j := 0; j < len(out); j++ { + if out[j] != tt.cipherText[j] { + t.Errorf("Cipher.Encrypt %d: out[%d] = %02X, expected %02X", i, j, out[j], tt.cipherText[j]) + break + } + } + } +} + +// Test decryption +func TestCipherDecrypt(t *testing.T) { + for i, tt := range CryptTests { + c, err := NewCipher(tt.key) + if err != nil { + t.Errorf("NewCipher(%d bytes), vector %d = %s", len(tt.key), i, err) + continue + } + + out := make([]byte, len(tt.cipherText)) + c.Decrypt(out, tt.cipherText) + + for j := 0; j < len(out); j++ { + if out[j] != tt.plainText[j] { + t.Errorf("Cipher.Decrypt %d: out[%d] = %02X, expected %02X", i, j, out[j], tt.plainText[j]) + break + } + } + } +} diff --git a/vendor/golang.org/x/crypto/xts/xts.go b/vendor/golang.org/x/crypto/xts/xts.go new file mode 100644 index 0000000..92cbce9 --- /dev/null +++ b/vendor/golang.org/x/crypto/xts/xts.go @@ -0,0 +1,137 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package xts implements the XTS cipher mode as specified in IEEE P1619/D16. +// +// XTS mode is typically used for disk encryption, which presents a number of +// novel problems that make more common modes inapplicable. The disk is +// conceptually an array of sectors and we must be able to encrypt and decrypt +// a sector in isolation. However, an attacker must not be able to transpose +// two sectors of plaintext by transposing their ciphertext. +// +// XTS wraps a block cipher with Rogaway's XEX mode in order to build a +// tweakable block cipher. This allows each sector to have a unique tweak and +// effectively create a unique key for each sector. +// +// XTS does not provide any authentication. An attacker can manipulate the +// ciphertext and randomise a block (16 bytes) of the plaintext. +// +// (Note: this package does not implement ciphertext-stealing so sectors must +// be a multiple of 16 bytes.) +package xts // import "golang.org/x/crypto/xts" + +import ( + "crypto/cipher" + "encoding/binary" + "errors" +) + +// Cipher contains an expanded key structure. It doesn't contain mutable state +// and therefore can be used concurrently. +type Cipher struct { + k1, k2 cipher.Block +} + +// blockSize is the block size that the underlying cipher must have. XTS is +// only defined for 16-byte ciphers. +const blockSize = 16 + +// NewCipher creates a Cipher given a function for creating the underlying +// block cipher (which must have a block size of 16 bytes). The key must be +// twice the length of the underlying cipher's key. +func NewCipher(cipherFunc func([]byte) (cipher.Block, error), key []byte) (c *Cipher, err error) { + c = new(Cipher) + if c.k1, err = cipherFunc(key[:len(key)/2]); err != nil { + return + } + c.k2, err = cipherFunc(key[len(key)/2:]) + + if c.k1.BlockSize() != blockSize { + err = errors.New("xts: cipher does not have a block size of 16") + } + + return +} + +// Encrypt encrypts a sector of plaintext and puts the result into ciphertext. +// Plaintext and ciphertext must overlap entirely or not at all. +// Sectors must be a multiple of 16 bytes and less than 2²⁴ bytes. +func (c *Cipher) Encrypt(ciphertext, plaintext []byte, sectorNum uint64) { + if len(ciphertext) < len(plaintext) { + panic("xts: ciphertext is smaller than plaintext") + } + if len(plaintext)%blockSize != 0 { + panic("xts: plaintext is not a multiple of the block size") + } + + var tweak [blockSize]byte + binary.LittleEndian.PutUint64(tweak[:8], sectorNum) + + c.k2.Encrypt(tweak[:], tweak[:]) + + for len(plaintext) > 0 { + for j := range tweak { + ciphertext[j] = plaintext[j] ^ tweak[j] + } + c.k1.Encrypt(ciphertext, ciphertext) + for j := range tweak { + ciphertext[j] ^= tweak[j] + } + plaintext = plaintext[blockSize:] + ciphertext = ciphertext[blockSize:] + + mul2(&tweak) + } +} + +// Decrypt decrypts a sector of ciphertext and puts the result into plaintext. +// Plaintext and ciphertext must overlap entirely or not at all. +// Sectors must be a multiple of 16 bytes and less than 2²⁴ bytes. +func (c *Cipher) Decrypt(plaintext, ciphertext []byte, sectorNum uint64) { + if len(plaintext) < len(ciphertext) { + panic("xts: plaintext is smaller than ciphertext") + } + if len(ciphertext)%blockSize != 0 { + panic("xts: ciphertext is not a multiple of the block size") + } + + var tweak [blockSize]byte + binary.LittleEndian.PutUint64(tweak[:8], sectorNum) + + c.k2.Encrypt(tweak[:], tweak[:]) + + for len(ciphertext) > 0 { + for j := range tweak { + plaintext[j] = ciphertext[j] ^ tweak[j] + } + c.k1.Decrypt(plaintext, plaintext) + for j := range tweak { + plaintext[j] ^= tweak[j] + } + plaintext = plaintext[blockSize:] + ciphertext = ciphertext[blockSize:] + + mul2(&tweak) + } +} + +// mul2 multiplies tweak by 2 in GF(2¹²⁸) with an irreducible polynomial of +// x¹²⁸ + x⁷ + x² + x + 1. +func mul2(tweak *[blockSize]byte) { + var carryIn byte + for j := range tweak { + carryOut := tweak[j] >> 7 + tweak[j] = (tweak[j] << 1) + carryIn + carryIn = carryOut + } + if carryIn != 0 { + // If we have a carry bit then we need to subtract a multiple + // of the irreducible polynomial (x¹²⁸ + x⁷ + x² + x + 1). + // By dropping the carry bit, we're subtracting the x^128 term + // so all that remains is to subtract x⁷ + x² + x + 1. + // Subtraction (and addition) in this representation is just + // XOR. + tweak[0] ^= 1<<7 | 1<<2 | 1<<1 | 1 + } +} diff --git a/vendor/golang.org/x/crypto/xts/xts_test.go b/vendor/golang.org/x/crypto/xts/xts_test.go new file mode 100644 index 0000000..96d3b6c --- /dev/null +++ b/vendor/golang.org/x/crypto/xts/xts_test.go @@ -0,0 +1,105 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xts + +import ( + "bytes" + "crypto/aes" + "encoding/hex" + "testing" +) + +// These test vectors have been taken from IEEE P1619/D16, Annex B. +var xtsTestVectors = []struct { + key string + sector uint64 + plaintext string + ciphertext string +}{ + { + "0000000000000000000000000000000000000000000000000000000000000000", + 0, + "0000000000000000000000000000000000000000000000000000000000000000", + "917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e", + }, { + "1111111111111111111111111111111122222222222222222222222222222222", + 0x3333333333, + "4444444444444444444444444444444444444444444444444444444444444444", + "c454185e6a16936e39334038acef838bfb186fff7480adc4289382ecd6d394f0", + }, { + "fffefdfcfbfaf9f8f7f6f5f4f3f2f1f022222222222222222222222222222222", + 0x3333333333, + "4444444444444444444444444444444444444444444444444444444444444444", + "af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89", + }, { + "2718281828459045235360287471352631415926535897932384626433832795", + 0, + "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", + "27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568", + }, { + "2718281828459045235360287471352631415926535897932384626433832795", + 1, + "27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568", + "264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd", + }, { + "27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592", + 0xff, + "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", + "1c3b3a102f770386e4836c99e370cf9bea00803f5e482357a4ae12d414a3e63b5d31e276f8fe4a8d66b317f9ac683f44680a86ac35adfc3345befecb4bb188fd5776926c49a3095eb108fd1098baec70aaa66999a72a82f27d848b21d4a741b0c5cd4d5fff9dac89aeba122961d03a757123e9870f8acf1000020887891429ca2a3e7a7d7df7b10355165c8b9a6d0a7de8b062c4500dc4cd120c0f7418dae3d0b5781c34803fa75421c790dfe1de1834f280d7667b327f6c8cd7557e12ac3a0f93ec05c52e0493ef31a12d3d9260f79a289d6a379bc70c50841473d1a8cc81ec583e9645e07b8d9670655ba5bbcfecc6dc3966380ad8fecb17b6ba02469a020a84e18e8f84252070c13e9f1f289be54fbc481457778f616015e1327a02b140f1505eb309326d68378f8374595c849d84f4c333ec4423885143cb47bd71c5edae9be69a2ffeceb1bec9de244fbe15992b11b77c040f12bd8f6a975a44a0f90c29a9abc3d4d893927284c58754cce294529f8614dcd2aba991925fedc4ae74ffac6e333b93eb4aff0479da9a410e4450e0dd7ae4c6e2910900575da401fc07059f645e8b7e9bfdef33943054ff84011493c27b3429eaedb4ed5376441a77ed43851ad77f16f541dfd269d50d6a5f14fb0aab1cbb4c1550be97f7ab4066193c4caa773dad38014bd2092fa755c824bb5e54c4f36ffda9fcea70b9c6e693e148c151", + }, +} + +func fromHex(s string) []byte { + ret, err := hex.DecodeString(s) + if err != nil { + panic("xts: invalid hex in test") + } + return ret +} + +func TestXTS(t *testing.T) { + for i, test := range xtsTestVectors { + c, err := NewCipher(aes.NewCipher, fromHex(test.key)) + if err != nil { + t.Errorf("#%d: failed to create cipher: %s", i, err) + continue + } + plaintext := fromHex(test.plaintext) + ciphertext := make([]byte, len(plaintext)) + c.Encrypt(ciphertext, plaintext, test.sector) + + expectedCiphertext := fromHex(test.ciphertext) + if !bytes.Equal(ciphertext, expectedCiphertext) { + t.Errorf("#%d: encrypted failed, got: %x, want: %x", i, ciphertext, expectedCiphertext) + continue + } + + decrypted := make([]byte, len(ciphertext)) + c.Decrypt(decrypted, ciphertext, test.sector) + if !bytes.Equal(decrypted, plaintext) { + t.Errorf("#%d: decryption failed, got: %x, want: %x", i, decrypted, plaintext) + } + } +} + +func TestShorterCiphertext(t *testing.T) { + // Decrypt used to panic if the input was shorter than the output. See + // https://go-review.googlesource.com/c/39954/ + c, err := NewCipher(aes.NewCipher, make([]byte, 32)) + if err != nil { + t.Fatalf("NewCipher failed: %s", err) + } + + plaintext := make([]byte, 32) + encrypted := make([]byte, 48) + decrypted := make([]byte, 48) + + c.Encrypt(encrypted, plaintext, 0) + c.Decrypt(decrypted, encrypted[:len(plaintext)], 0) + + if !bytes.Equal(plaintext, decrypted[:len(plaintext)]) { + t.Errorf("En/Decryption is not inverse") + } +} diff --git a/vendor/golang.org/x/sys/.gitattributes b/vendor/golang.org/x/sys/.gitattributes new file mode 100644 index 0000000..d2f212e --- /dev/null +++ b/vendor/golang.org/x/sys/.gitattributes @@ -0,0 +1,10 @@ +# Treat all files in this repo as binary, with no git magic updating +# line endings. Windows users contributing to Go will need to use a +# modern version of git and editors capable of LF line endings. +# +# We'll prevent accidental CRLF line endings from entering the repo +# via the git-review gofmt checks. +# +# See golang.org/issue/9281 + +* -text diff --git a/vendor/golang.org/x/sys/.gitignore b/vendor/golang.org/x/sys/.gitignore new file mode 100644 index 0000000..8339fd6 --- /dev/null +++ b/vendor/golang.org/x/sys/.gitignore @@ -0,0 +1,2 @@ +# Add no patterns to .hgignore except for files generated by the build. +last-change diff --git a/vendor/golang.org/x/sys/AUTHORS b/vendor/golang.org/x/sys/AUTHORS new file mode 100644 index 0000000..15167cd --- /dev/null +++ b/vendor/golang.org/x/sys/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/sys/CONTRIBUTING.md b/vendor/golang.org/x/sys/CONTRIBUTING.md new file mode 100644 index 0000000..88dff59 --- /dev/null +++ b/vendor/golang.org/x/sys/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Go + +Go is an open source project. + +It is the work of hundreds of contributors. We appreciate your help! + + +## Filing issues + +When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. +The gophers there will answer or ask you to file an issue if you've tripped over a bug. + +## Contributing code + +Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) +before sending patches. + +**We do not accept GitHub pull requests** +(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). + +Unless otherwise noted, the Go source files are distributed under +the BSD-style license found in the LICENSE file. + diff --git a/vendor/golang.org/x/sys/CONTRIBUTORS b/vendor/golang.org/x/sys/CONTRIBUTORS new file mode 100644 index 0000000..1c4577e --- /dev/null +++ b/vendor/golang.org/x/sys/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/sys/LICENSE b/vendor/golang.org/x/sys/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/sys/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/sys/PATENTS b/vendor/golang.org/x/sys/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/sys/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google 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, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/sys/README.md b/vendor/golang.org/x/sys/README.md new file mode 100644 index 0000000..ef6c9e5 --- /dev/null +++ b/vendor/golang.org/x/sys/README.md @@ -0,0 +1,18 @@ +# sys + +This repository holds supplemental Go packages for low-level interactions with +the operating system. + +## Download/Install + +The easiest way to install is to run `go get -u golang.org/x/sys`. You can +also manually git clone the repository to `$GOPATH/src/golang.org/x/sys`. + +## Report Issues / Send Patches + +This repository uses Gerrit for code changes. To learn how to submit changes to +this repository, see https://golang.org/doc/contribute.html. + +The main issue tracker for the sys repository is located at +https://github.com/golang/go/issues. Prefix your issue with "x/sys:" in the +subject line, so it is easy to find. diff --git a/vendor/golang.org/x/sys/codereview.cfg b/vendor/golang.org/x/sys/codereview.cfg new file mode 100644 index 0000000..3f8b14b --- /dev/null +++ b/vendor/golang.org/x/sys/codereview.cfg @@ -0,0 +1 @@ +issuerepo: golang/go diff --git a/vendor/golang.org/x/sys/plan9/asm.s b/vendor/golang.org/x/sys/plan9/asm.s new file mode 100644 index 0000000..06449eb --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/asm.s @@ -0,0 +1,8 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +TEXT ·use(SB),NOSPLIT,$0 + RET diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_386.s b/vendor/golang.org/x/sys/plan9/asm_plan9_386.s new file mode 100644 index 0000000..bc5cab1 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/asm_plan9_386.s @@ -0,0 +1,30 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// +// System call support for 386, Plan 9 +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-32 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-44 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·seek(SB),NOSPLIT,$0-36 + JMP syscall·seek(SB) + +TEXT ·exit(SB),NOSPLIT,$4-4 + JMP syscall·exit(SB) diff --git a/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s b/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s new file mode 100644 index 0000000..d3448e6 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/asm_plan9_amd64.s @@ -0,0 +1,30 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// +// System call support for amd64, Plan 9 +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-64 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-88 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·seek(SB),NOSPLIT,$0-56 + JMP syscall·seek(SB) + +TEXT ·exit(SB),NOSPLIT,$8-8 + JMP syscall·exit(SB) diff --git a/vendor/golang.org/x/sys/plan9/const_plan9.go b/vendor/golang.org/x/sys/plan9/const_plan9.go new file mode 100644 index 0000000..b4e85a3 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/const_plan9.go @@ -0,0 +1,70 @@ +package plan9 + +// Plan 9 Constants + +// Open modes +const ( + O_RDONLY = 0 + O_WRONLY = 1 + O_RDWR = 2 + O_TRUNC = 16 + O_CLOEXEC = 32 + O_EXCL = 0x1000 +) + +// Rfork flags +const ( + RFNAMEG = 1 << 0 + RFENVG = 1 << 1 + RFFDG = 1 << 2 + RFNOTEG = 1 << 3 + RFPROC = 1 << 4 + RFMEM = 1 << 5 + RFNOWAIT = 1 << 6 + RFCNAMEG = 1 << 10 + RFCENVG = 1 << 11 + RFCFDG = 1 << 12 + RFREND = 1 << 13 + RFNOMNT = 1 << 14 +) + +// Qid.Type bits +const ( + QTDIR = 0x80 + QTAPPEND = 0x40 + QTEXCL = 0x20 + QTMOUNT = 0x10 + QTAUTH = 0x08 + QTTMP = 0x04 + QTFILE = 0x00 +) + +// Dir.Mode bits +const ( + DMDIR = 0x80000000 + DMAPPEND = 0x40000000 + DMEXCL = 0x20000000 + DMMOUNT = 0x10000000 + DMAUTH = 0x08000000 + DMTMP = 0x04000000 + DMREAD = 0x4 + DMWRITE = 0x2 + DMEXEC = 0x1 +) + +const ( + STATMAX = 65535 + ERRMAX = 128 + STATFIXLEN = 49 +) + +// Mount and bind flags +const ( + MREPL = 0x0000 + MBEFORE = 0x0001 + MAFTER = 0x0002 + MORDER = 0x0003 + MCREATE = 0x0004 + MCACHE = 0x0010 + MMASK = 0x0017 +) diff --git a/vendor/golang.org/x/sys/plan9/dir_plan9.go b/vendor/golang.org/x/sys/plan9/dir_plan9.go new file mode 100644 index 0000000..0955e0c --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/dir_plan9.go @@ -0,0 +1,212 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Plan 9 directory marshalling. See intro(5). + +package plan9 + +import "errors" + +var ( + ErrShortStat = errors.New("stat buffer too short") + ErrBadStat = errors.New("malformed stat buffer") + ErrBadName = errors.New("bad character in file name") +) + +// A Qid represents a 9P server's unique identification for a file. +type Qid struct { + Path uint64 // the file server's unique identification for the file + Vers uint32 // version number for given Path + Type uint8 // the type of the file (plan9.QTDIR for example) +} + +// A Dir contains the metadata for a file. +type Dir struct { + // system-modified data + Type uint16 // server type + Dev uint32 // server subtype + + // file data + Qid Qid // unique id from server + Mode uint32 // permissions + Atime uint32 // last read time + Mtime uint32 // last write time + Length int64 // file length + Name string // last element of path + Uid string // owner name + Gid string // group name + Muid string // last modifier name +} + +var nullDir = Dir{ + Type: ^uint16(0), + Dev: ^uint32(0), + Qid: Qid{ + Path: ^uint64(0), + Vers: ^uint32(0), + Type: ^uint8(0), + }, + Mode: ^uint32(0), + Atime: ^uint32(0), + Mtime: ^uint32(0), + Length: ^int64(0), +} + +// Null assigns special "don't touch" values to members of d to +// avoid modifying them during plan9.Wstat. +func (d *Dir) Null() { *d = nullDir } + +// Marshal encodes a 9P stat message corresponding to d into b +// +// If there isn't enough space in b for a stat message, ErrShortStat is returned. +func (d *Dir) Marshal(b []byte) (n int, err error) { + n = STATFIXLEN + len(d.Name) + len(d.Uid) + len(d.Gid) + len(d.Muid) + if n > len(b) { + return n, ErrShortStat + } + + for _, c := range d.Name { + if c == '/' { + return n, ErrBadName + } + } + + b = pbit16(b, uint16(n)-2) + b = pbit16(b, d.Type) + b = pbit32(b, d.Dev) + b = pbit8(b, d.Qid.Type) + b = pbit32(b, d.Qid.Vers) + b = pbit64(b, d.Qid.Path) + b = pbit32(b, d.Mode) + b = pbit32(b, d.Atime) + b = pbit32(b, d.Mtime) + b = pbit64(b, uint64(d.Length)) + b = pstring(b, d.Name) + b = pstring(b, d.Uid) + b = pstring(b, d.Gid) + b = pstring(b, d.Muid) + + return n, nil +} + +// UnmarshalDir decodes a single 9P stat message from b and returns the resulting Dir. +// +// If b is too small to hold a valid stat message, ErrShortStat is returned. +// +// If the stat message itself is invalid, ErrBadStat is returned. +func UnmarshalDir(b []byte) (*Dir, error) { + if len(b) < STATFIXLEN { + return nil, ErrShortStat + } + size, buf := gbit16(b) + if len(b) != int(size)+2 { + return nil, ErrBadStat + } + b = buf + + var d Dir + d.Type, b = gbit16(b) + d.Dev, b = gbit32(b) + d.Qid.Type, b = gbit8(b) + d.Qid.Vers, b = gbit32(b) + d.Qid.Path, b = gbit64(b) + d.Mode, b = gbit32(b) + d.Atime, b = gbit32(b) + d.Mtime, b = gbit32(b) + + n, b := gbit64(b) + d.Length = int64(n) + + var ok bool + if d.Name, b, ok = gstring(b); !ok { + return nil, ErrBadStat + } + if d.Uid, b, ok = gstring(b); !ok { + return nil, ErrBadStat + } + if d.Gid, b, ok = gstring(b); !ok { + return nil, ErrBadStat + } + if d.Muid, b, ok = gstring(b); !ok { + return nil, ErrBadStat + } + + return &d, nil +} + +// pbit8 copies the 8-bit number v to b and returns the remaining slice of b. +func pbit8(b []byte, v uint8) []byte { + b[0] = byte(v) + return b[1:] +} + +// pbit16 copies the 16-bit number v to b in little-endian order and returns the remaining slice of b. +func pbit16(b []byte, v uint16) []byte { + b[0] = byte(v) + b[1] = byte(v >> 8) + return b[2:] +} + +// pbit32 copies the 32-bit number v to b in little-endian order and returns the remaining slice of b. +func pbit32(b []byte, v uint32) []byte { + b[0] = byte(v) + b[1] = byte(v >> 8) + b[2] = byte(v >> 16) + b[3] = byte(v >> 24) + return b[4:] +} + +// pbit64 copies the 64-bit number v to b in little-endian order and returns the remaining slice of b. +func pbit64(b []byte, v uint64) []byte { + b[0] = byte(v) + b[1] = byte(v >> 8) + b[2] = byte(v >> 16) + b[3] = byte(v >> 24) + b[4] = byte(v >> 32) + b[5] = byte(v >> 40) + b[6] = byte(v >> 48) + b[7] = byte(v >> 56) + return b[8:] +} + +// pstring copies the string s to b, prepending it with a 16-bit length in little-endian order, and +// returning the remaining slice of b.. +func pstring(b []byte, s string) []byte { + b = pbit16(b, uint16(len(s))) + n := copy(b, s) + return b[n:] +} + +// gbit8 reads an 8-bit number from b and returns it with the remaining slice of b. +func gbit8(b []byte) (uint8, []byte) { + return uint8(b[0]), b[1:] +} + +// gbit16 reads a 16-bit number in little-endian order from b and returns it with the remaining slice of b. +func gbit16(b []byte) (uint16, []byte) { + return uint16(b[0]) | uint16(b[1])<<8, b[2:] +} + +// gbit32 reads a 32-bit number in little-endian order from b and returns it with the remaining slice of b. +func gbit32(b []byte) (uint32, []byte) { + return uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24, b[4:] +} + +// gbit64 reads a 64-bit number in little-endian order from b and returns it with the remaining slice of b. +func gbit64(b []byte) (uint64, []byte) { + lo := uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24 + hi := uint32(b[4]) | uint32(b[5])<<8 | uint32(b[6])<<16 | uint32(b[7])<<24 + return uint64(lo) | uint64(hi)<<32, b[8:] +} + +// gstring reads a string from b, prefixed with a 16-bit length in little-endian order. +// It returns the string with the remaining slice of b and a boolean. If the length is +// greater than the number of bytes in b, the boolean will be false. +func gstring(b []byte) (string, []byte, bool) { + n, b := gbit16(b) + if int(n) > len(b) { + return "", b, false + } + return string(b[:n]), b[n:], true +} diff --git a/vendor/golang.org/x/sys/plan9/env_plan9.go b/vendor/golang.org/x/sys/plan9/env_plan9.go new file mode 100644 index 0000000..7ef9b18 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/env_plan9.go @@ -0,0 +1,27 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Plan 9 environment variables. + +package plan9 + +import ( + "syscall" +) + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} diff --git a/vendor/golang.org/x/sys/plan9/env_unset.go b/vendor/golang.org/x/sys/plan9/env_unset.go new file mode 100644 index 0000000..ce4ab25 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/env_unset.go @@ -0,0 +1,14 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.4 + +package plan9 + +import "syscall" + +func Unsetenv(key string) error { + // This was added in Go 1.4. + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/plan9/errors_plan9.go b/vendor/golang.org/x/sys/plan9/errors_plan9.go new file mode 100644 index 0000000..65fe74d --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/errors_plan9.go @@ -0,0 +1,50 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package plan9 + +import "syscall" + +// Constants +const ( + // Invented values to support what package os expects. + O_CREAT = 0x02000 + O_APPEND = 0x00400 + O_NOCTTY = 0x00000 + O_NONBLOCK = 0x00000 + O_SYNC = 0x00000 + O_ASYNC = 0x00000 + + S_IFMT = 0x1f000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 +) + +// Errors +var ( + EINVAL = syscall.NewError("bad arg in system call") + ENOTDIR = syscall.NewError("not a directory") + EISDIR = syscall.NewError("file is a directory") + ENOENT = syscall.NewError("file does not exist") + EEXIST = syscall.NewError("file already exists") + EMFILE = syscall.NewError("no free file descriptors") + EIO = syscall.NewError("i/o error") + ENAMETOOLONG = syscall.NewError("file name too long") + EINTR = syscall.NewError("interrupted") + EPERM = syscall.NewError("permission denied") + EBUSY = syscall.NewError("no free devices") + ETIMEDOUT = syscall.NewError("connection timed out") + EPLAN9 = syscall.NewError("not supported by plan 9") + + // The following errors do not correspond to any + // Plan 9 system messages. Invented to support + // what package os and others expect. + EACCES = syscall.NewError("access permission denied") + EAFNOSUPPORT = syscall.NewError("address family not supported by protocol") +) diff --git a/vendor/golang.org/x/sys/plan9/mkall.sh b/vendor/golang.org/x/sys/plan9/mkall.sh new file mode 100755 index 0000000..9f73c60 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/mkall.sh @@ -0,0 +1,138 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# The plan9 package provides access to the raw system call +# interface of the underlying operating system. Porting Go to +# a new architecture/operating system combination requires +# some manual effort, though there are tools that automate +# much of the process. The auto-generated files have names +# beginning with z. +# +# This script runs or (given -n) prints suggested commands to generate z files +# for the current system. Running those commands is not automatic. +# This script is documentation more than anything else. +# +# * asm_${GOOS}_${GOARCH}.s +# +# This hand-written assembly file implements system call dispatch. +# There are three entry points: +# +# func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr); +# func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr); +# func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr); +# +# The first and second are the standard ones; they differ only in +# how many arguments can be passed to the kernel. +# The third is for low-level use by the ForkExec wrapper; +# unlike the first two, it does not call into the scheduler to +# let it know that a system call is running. +# +# * syscall_${GOOS}.go +# +# This hand-written Go file implements system calls that need +# special handling and lists "//sys" comments giving prototypes +# for ones that can be auto-generated. Mksyscall reads those +# comments to generate the stubs. +# +# * syscall_${GOOS}_${GOARCH}.go +# +# Same as syscall_${GOOS}.go except that it contains code specific +# to ${GOOS} on one particular architecture. +# +# * types_${GOOS}.c +# +# This hand-written C file includes standard C headers and then +# creates typedef or enum names beginning with a dollar sign +# (use of $ in variable names is a gcc extension). The hardest +# part about preparing this file is figuring out which headers to +# include and which symbols need to be #defined to get the +# actual data structures that pass through to the kernel system calls. +# Some C libraries present alternate versions for binary compatibility +# and translate them on the way in and out of system calls, but +# there is almost always a #define that can get the real ones. +# See types_darwin.c and types_linux.c for examples. +# +# * zerror_${GOOS}_${GOARCH}.go +# +# This machine-generated file defines the system's error numbers, +# error strings, and signal numbers. The generator is "mkerrors.sh". +# Usually no arguments are needed, but mkerrors.sh will pass its +# arguments on to godefs. +# +# * zsyscall_${GOOS}_${GOARCH}.go +# +# Generated by mksyscall.pl; see syscall_${GOOS}.go above. +# +# * zsysnum_${GOOS}_${GOARCH}.go +# +# Generated by mksysnum_${GOOS}. +# +# * ztypes_${GOOS}_${GOARCH}.go +# +# Generated by godefs; see types_${GOOS}.c above. + +GOOSARCH="${GOOS}_${GOARCH}" + +# defaults +mksyscall="./mksyscall.pl" +mkerrors="./mkerrors.sh" +zerrors="zerrors_$GOOSARCH.go" +mksysctl="" +zsysctl="zsysctl_$GOOSARCH.go" +mksysnum= +mktypes= +run="sh" + +case "$1" in +-syscalls) + for i in zsyscall*go + do + sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i + rm _$i + done + exit 0 + ;; +-n) + run="cat" + shift +esac + +case "$#" in +0) + ;; +*) + echo 'usage: mkall.sh [-n]' 1>&2 + exit 2 +esac + +case "$GOOSARCH" in +_* | *_ | _) + echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 + exit 1 + ;; +plan9_386) + mkerrors= + mksyscall="./mksyscall.pl -l32 -plan9" + mksysnum="./mksysnum_plan9.sh /n/sources/plan9/sys/src/libc/9syscall/sys.h" + mktypes="XXX" + ;; +*) + echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 + exit 1 + ;; +esac + +( + if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi + case "$GOOS" in + plan9) + syscall_goos="syscall_$GOOS.go" + if [ -n "$mksyscall" ]; then echo "$mksyscall $syscall_goos syscall_$GOOSARCH.go |gofmt >zsyscall_$GOOSARCH.go"; fi + ;; + esac + if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi + if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi + if [ -n "$mktypes" ]; then echo "$mktypes types_$GOOS.go |gofmt >ztypes_$GOOSARCH.go"; fi +) | $run diff --git a/vendor/golang.org/x/sys/plan9/mkerrors.sh b/vendor/golang.org/x/sys/plan9/mkerrors.sh new file mode 100755 index 0000000..052c86d --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/mkerrors.sh @@ -0,0 +1,246 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# Generate Go code listing errors and other #defined constant +# values (ENAMETOOLONG etc.), by asking the preprocessor +# about the definitions. + +unset LANG +export LC_ALL=C +export LC_CTYPE=C + +CC=${CC:-gcc} + +uname=$(uname) + +includes=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +ccflags="$@" + +# Write go tool cgo -godefs input. +( + echo package plan9 + echo + echo '/*' + indirect="includes_$(uname)" + echo "${!indirect} $includes" + echo '*/' + echo 'import "C"' + echo + echo 'const (' + + # The gcc command line prints all the #defines + # it encounters while processing the input + echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags | + awk ' + $1 != "#define" || $2 ~ /\(/ || $3 == "" {next} + + $2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers + $2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next} + $2 ~ /^(SCM_SRCRT)$/ {next} + $2 ~ /^(MAP_FAILED)$/ {next} + + $2 !~ /^ETH_/ && + $2 !~ /^EPROC_/ && + $2 !~ /^EQUIV_/ && + $2 !~ /^EXPR_/ && + $2 ~ /^E[A-Z0-9_]+$/ || + $2 ~ /^B[0-9_]+$/ || + $2 ~ /^V[A-Z0-9]+$/ || + $2 ~ /^CS[A-Z0-9]/ || + $2 ~ /^I(SIG|CANON|CRNL|EXTEN|MAXBEL|STRIP|UTF8)$/ || + $2 ~ /^IGN/ || + $2 ~ /^IX(ON|ANY|OFF)$/ || + $2 ~ /^IN(LCR|PCK)$/ || + $2 ~ /(^FLU?SH)|(FLU?SH$)/ || + $2 ~ /^C(LOCAL|READ)$/ || + $2 == "BRKINT" || + $2 == "HUPCL" || + $2 == "PENDIN" || + $2 == "TOSTOP" || + $2 ~ /^PAR/ || + $2 ~ /^SIG[^_]/ || + $2 ~ /^O[CNPFP][A-Z]+[^_][A-Z]+$/ || + $2 ~ /^IN_/ || + $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ || + $2 == "ICMPV6_FILTER" || + $2 == "SOMAXCONN" || + $2 == "NAME_MAX" || + $2 == "IFNAMSIZ" || + $2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ || + $2 ~ /^SYSCTL_VERS/ || + $2 ~ /^(MS|MNT)_/ || + $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || + $2 ~ /^(O|F|FD|NAME|S|PTRACE|PT)_/ || + $2 ~ /^LINUX_REBOOT_CMD_/ || + $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || + $2 !~ "NLA_TYPE_MASK" && + $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ || + $2 ~ /^SIOC/ || + $2 ~ /^TIOC/ || + $2 !~ "RTF_BITS" && + $2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || + $2 ~ /^BIOC/ || + $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || + $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|NOFILE|STACK)|RLIM_INFINITY/ || + $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || + $2 ~ /^CLONE_[A-Z_]+/ || + $2 !~ /^(BPF_TIMEVAL)$/ && + $2 ~ /^(BPF|DLT)_/ || + $2 !~ "WMESGLEN" && + $2 ~ /^W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^__WCOREFLAG$/ {next} + $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} + + {next} + ' | sort + + echo ')' +) >_const.go + +# Pull out the error names for later. +errors=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | + sort +) + +# Pull out the signal names for later. +signals=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort +) + +# Again, writing regexps to a file. +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' | + sort >_error.grep +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort >_signal.grep + +echo '// mkerrors.sh' "$@" +echo '// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT' +echo +go tool cgo -godefs -- "$@" _const.go >_error.out +cat _error.out | grep -vf _error.grep | grep -vf _signal.grep +echo +echo '// Errors' +echo 'const (' +cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= Errno(\1)/' +echo ')' + +echo +echo '// Signals' +echo 'const (' +cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= Signal(\1)/' +echo ')' + +# Run C program to print error and syscall strings. +( + echo -E " +#include +#include +#include +#include +#include +#include + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) + +enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below + +int errors[] = { +" + for i in $errors + do + echo -E ' '$i, + done + + echo -E " +}; + +int signals[] = { +" + for i in $signals + do + echo -E ' '$i, + done + + # Use -E because on some systems bash builtin interprets \n itself. + echo -E ' +}; + +static int +intcmp(const void *a, const void *b) +{ + return *(int*)a - *(int*)b; +} + +int +main(void) +{ + int i, j, e; + char buf[1024], *p; + + printf("\n\n// Error table\n"); + printf("var errors = [...]string {\n"); + qsort(errors, nelem(errors), sizeof errors[0], intcmp); + for(i=0; i 0 && errors[i-1] == e) + continue; + strcpy(buf, strerror(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + printf("\n\n// Signal table\n"); + printf("var signals = [...]string {\n"); + qsort(signals, nelem(signals), sizeof signals[0], intcmp); + for(i=0; i 0 && signals[i-1] == e) + continue; + strcpy(buf, strsignal(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + // cut trailing : number. + p = strrchr(buf, ":"[0]); + if(p) + *p = '\0'; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + return 0; +} + +' +) >_errors.c + +$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out diff --git a/vendor/golang.org/x/sys/plan9/mksyscall.pl b/vendor/golang.org/x/sys/plan9/mksyscall.pl new file mode 100755 index 0000000..ce8e1e4 --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/mksyscall.pl @@ -0,0 +1,319 @@ +#!/usr/bin/env perl +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This program reads a file containing function prototypes +# (like syscall_plan9.go) and generates system call bodies. +# The prototypes are marked by lines beginning with "//sys" +# and read like func declarations if //sys is replaced by func, but: +# * The parameter lists must give a name for each argument. +# This includes return parameters. +# * The parameter lists must give a type for each argument: +# the (x, y, z int) shorthand is not allowed. +# * If the return parameter is an error number, it must be named errno. + +# A line beginning with //sysnb is like //sys, except that the +# goroutine will not be suspended during the execution of the system +# call. This must only be used for system calls which can never +# block, as otherwise the system call could cause all goroutines to +# hang. + +use strict; + +my $cmdline = "mksyscall.pl " . join(' ', @ARGV); +my $errors = 0; +my $_32bit = ""; +my $plan9 = 0; +my $openbsd = 0; +my $netbsd = 0; +my $dragonfly = 0; +my $nacl = 0; +my $arm = 0; # 64-bit value should use (even, odd)-pair + +if($ARGV[0] eq "-b32") { + $_32bit = "big-endian"; + shift; +} elsif($ARGV[0] eq "-l32") { + $_32bit = "little-endian"; + shift; +} +if($ARGV[0] eq "-plan9") { + $plan9 = 1; + shift; +} +if($ARGV[0] eq "-openbsd") { + $openbsd = 1; + shift; +} +if($ARGV[0] eq "-netbsd") { + $netbsd = 1; + shift; +} +if($ARGV[0] eq "-dragonfly") { + $dragonfly = 1; + shift; +} +if($ARGV[0] eq "-nacl") { + $nacl = 1; + shift; +} +if($ARGV[0] eq "-arm") { + $arm = 1; + shift; +} + +if($ARGV[0] =~ /^-/) { + print STDERR "usage: mksyscall.pl [-b32 | -l32] [file ...]\n"; + exit 1; +} + +sub parseparamlist($) { + my ($list) = @_; + $list =~ s/^\s*//; + $list =~ s/\s*$//; + if($list eq "") { + return (); + } + return split(/\s*,\s*/, $list); +} + +sub parseparam($) { + my ($p) = @_; + if($p !~ /^(\S*) (\S*)$/) { + print STDERR "$ARGV:$.: malformed parameter: $p\n"; + $errors = 1; + return ("xx", "int"); + } + return ($1, $2); +} + +my $text = ""; +while(<>) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, errno error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($func, $in, $out, $sysname) = ($2, $3, $4, $5); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # Try in vain to keep people from editing this file. + # The theory is that they jump into the middle of the file + # without reading the header. + $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + + # Go function header. + my $out_decl = @out ? sprintf(" (%s)", join(', ', @out)) : ""; + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out_decl; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my @uses = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, $errvar = BytePtrFromString($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, _ = BytePtrFromString($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + push @uses, "use(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass dummy pointer in that case. + # Used to pass nil, but some OSes or simulators reject write(fd, nil, 0). + $text .= "\tvar _p$n unsafe.Pointer\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = unsafe.Pointer(\&${name}[0])\n\t}"; + $text .= " else {\n\t\t_p$n = unsafe.Pointer(&_zero)\n\t}"; + $text .= "\n"; + push @args, "uintptr(_p$n)", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && ($openbsd || $netbsd)) { + push @args, "0"; + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $dragonfly) { + if ($func !~ /^extp(read|write)/i) { + push @args, "0"; + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $_32bit ne "") { + if(@args % 2 && $arm) { + # arm abi specifies 64-bit argument uses + # (even, odd) pair + push @args, "0" + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } + } else { + push @args, "uintptr($name)"; + } + } + + # Determine which form to use; pad args with zeros. + my $asm = "Syscall"; + if ($nonblock) { + $asm = "RawSyscall"; + } + if(@args <= 3) { + while(@args < 3) { + push @args, "0"; + } + } elsif(@args <= 6) { + $asm .= "6"; + while(@args < 6) { + push @args, "0"; + } + } elsif(@args <= 9) { + $asm .= "9"; + while(@args < 9) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # System call number. + if($sysname eq "") { + $sysname = "SYS_$func"; + $sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar + $sysname =~ y/a-z/A-Z/; + if($nacl) { + $sysname =~ y/A-Z/a-z/; + } + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm($sysname, $args)"; + + # Assign return values. + my $body = ""; + my @ret = ("_", "_", "_"); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err" && !$plan9) { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } elsif($name eq "err" && $plan9) { + $ret[0] = "r0"; + $ret[2] = "e1"; + next; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1" || $plan9) { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + foreach my $use (@uses) { + $text .= "\t$use\n"; + } + $text .= $body; + + if ($plan9 && $ret[2] eq "e1") { + $text .= "\tif int32(r0) == -1 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } elsif ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n\n"; +} + +chomp $text; +chomp $text; + +if($errors) { + exit 1; +} + +print <= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/golang.org/x/sys/plan9/syscall.go b/vendor/golang.org/x/sys/plan9/syscall.go new file mode 100644 index 0000000..5046cfe --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/syscall.go @@ -0,0 +1,74 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build plan9 + +// Package plan9 contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display the OS-specific documentation for the current +// system. If you want godoc to display documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.ErrorString. +package plan9 // import "golang.org/x/sys/plan9" + +import "unsafe" + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, EINVAL + } + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mksyscall.pl. +var _zero uintptr + +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} + +// use is a no-op, but the compiler cannot see that it is. +// Calling use(p) ensures that p is kept live until that point. +//go:noescape +func use(p unsafe.Pointer) diff --git a/vendor/golang.org/x/sys/plan9/syscall_plan9.go b/vendor/golang.org/x/sys/plan9/syscall_plan9.go new file mode 100644 index 0000000..d39d07d --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/syscall_plan9.go @@ -0,0 +1,349 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Plan 9 system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and +// wrap it in our own nicer implementation. + +package plan9 + +import ( + "syscall" + "unsafe" +) + +// A Note is a string describing a process note. +// It implements the os.Signal interface. +type Note string + +func (n Note) Signal() {} + +func (n Note) String() string { + return string(n) +} + +var ( + Stdin = 0 + Stdout = 1 + Stderr = 2 +) + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.ErrorString) +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.ErrorString) +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) + +func atoi(b []byte) (n uint) { + n = 0 + for i := 0; i < len(b); i++ { + n = n*10 + uint(b[i]-'0') + } + return +} + +func cstring(s []byte) string { + for i := range s { + if s[i] == 0 { + return string(s[0:i]) + } + } + return string(s) +} + +func errstr() string { + var buf [ERRMAX]byte + + RawSyscall(SYS_ERRSTR, uintptr(unsafe.Pointer(&buf[0])), uintptr(len(buf)), 0) + + buf[len(buf)-1] = 0 + return cstring(buf[:]) +} + +// Implemented in assembly to import from runtime. +func exit(code int) + +func Exit(code int) { exit(code) } + +func readnum(path string) (uint, error) { + var b [12]byte + + fd, e := Open(path, O_RDONLY) + if e != nil { + return 0, e + } + defer Close(fd) + + n, e := Pread(fd, b[:], 0) + + if e != nil { + return 0, e + } + + m := 0 + for ; m < n && b[m] == ' '; m++ { + } + + return atoi(b[m : n-1]), nil +} + +func Getpid() (pid int) { + n, _ := readnum("#c/pid") + return int(n) +} + +func Getppid() (ppid int) { + n, _ := readnum("#c/ppid") + return int(n) +} + +func Read(fd int, p []byte) (n int, err error) { + return Pread(fd, p, -1) +} + +func Write(fd int, p []byte) (n int, err error) { + return Pwrite(fd, p, -1) +} + +var ioSync int64 + +//sys fd2path(fd int, buf []byte) (err error) +func Fd2path(fd int) (path string, err error) { + var buf [512]byte + + e := fd2path(fd, buf[:]) + if e != nil { + return "", e + } + return cstring(buf[:]), nil +} + +//sys pipe(p *[2]int32) (err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return syscall.ErrorString("bad arg in system call") + } + var pp [2]int32 + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(placeholder uintptr, fd int, offset int64, whence int) (newoffset int64, err string) + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, e := seek(0, fd, offset, whence) + + if newoffset == -1 { + err = syscall.ErrorString(e) + } + return +} + +func Mkdir(path string, mode uint32) (err error) { + fd, err := Create(path, O_RDONLY, DMDIR|mode) + + if fd != -1 { + Close(fd) + } + + return +} + +type Waitmsg struct { + Pid int + Time [3]uint32 + Msg string +} + +func (w Waitmsg) Exited() bool { return true } +func (w Waitmsg) Signaled() bool { return false } + +func (w Waitmsg) ExitStatus() int { + if len(w.Msg) == 0 { + // a normal exit returns no message + return 0 + } + return 1 +} + +//sys await(s []byte) (n int, err error) +func Await(w *Waitmsg) (err error) { + var buf [512]byte + var f [5][]byte + + n, err := await(buf[:]) + + if err != nil || w == nil { + return + } + + nf := 0 + p := 0 + for i := 0; i < n && nf < len(f)-1; i++ { + if buf[i] == ' ' { + f[nf] = buf[p:i] + p = i + 1 + nf++ + } + } + f[nf] = buf[p:] + nf++ + + if nf != len(f) { + return syscall.ErrorString("invalid wait message") + } + w.Pid = int(atoi(f[0])) + w.Time[0] = uint32(atoi(f[1])) + w.Time[1] = uint32(atoi(f[2])) + w.Time[2] = uint32(atoi(f[3])) + w.Msg = cstring(f[4]) + if w.Msg == "''" { + // await() returns '' for no error + w.Msg = "" + } + return +} + +func Unmount(name, old string) (err error) { + fixwd() + oldp, err := BytePtrFromString(old) + if err != nil { + return err + } + oldptr := uintptr(unsafe.Pointer(oldp)) + + var r0 uintptr + var e syscall.ErrorString + + // bind(2) man page: If name is zero, everything bound or mounted upon old is unbound or unmounted. + if name == "" { + r0, _, e = Syscall(SYS_UNMOUNT, _zero, oldptr, 0) + } else { + namep, err := BytePtrFromString(name) + if err != nil { + return err + } + r0, _, e = Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(namep)), oldptr, 0) + } + + if int32(r0) == -1 { + err = e + } + return +} + +func Fchdir(fd int) (err error) { + path, err := Fd2path(fd) + + if err != nil { + return + } + + return Chdir(path) +} + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + nsec += 999 // round up to microsecond + tv.Usec = int32(nsec % 1e9 / 1e3) + tv.Sec = int32(nsec / 1e9) + return +} + +func nsec() int64 { + var scratch int64 + + r0, _, _ := Syscall(SYS_NSEC, uintptr(unsafe.Pointer(&scratch)), 0, 0) + // TODO(aram): remove hack after I fix _nsec in the pc64 kernel. + if r0 == 0 { + return scratch + } + return int64(r0) +} + +func Gettimeofday(tv *Timeval) error { + nsec := nsec() + *tv = NsecToTimeval(nsec) + return nil +} + +func Getpagesize() int { return 0x1000 } + +func Getegid() (egid int) { return -1 } +func Geteuid() (euid int) { return -1 } +func Getgid() (gid int) { return -1 } +func Getuid() (uid int) { return -1 } + +func Getgroups() (gids []int, err error) { + return make([]int, 0), nil +} + +//sys open(path string, mode int) (fd int, err error) +func Open(path string, mode int) (fd int, err error) { + fixwd() + return open(path, mode) +} + +//sys create(path string, mode int, perm uint32) (fd int, err error) +func Create(path string, mode int, perm uint32) (fd int, err error) { + fixwd() + return create(path, mode, perm) +} + +//sys remove(path string) (err error) +func Remove(path string) error { + fixwd() + return remove(path) +} + +//sys stat(path string, edir []byte) (n int, err error) +func Stat(path string, edir []byte) (n int, err error) { + fixwd() + return stat(path, edir) +} + +//sys bind(name string, old string, flag int) (err error) +func Bind(name string, old string, flag int) (err error) { + fixwd() + return bind(name, old, flag) +} + +//sys mount(fd int, afd int, old string, flag int, aname string) (err error) +func Mount(fd int, afd int, old string, flag int, aname string) (err error) { + fixwd() + return mount(fd, afd, old, flag, aname) +} + +//sys wstat(path string, edir []byte) (err error) +func Wstat(path string, edir []byte) (err error) { + fixwd() + return wstat(path, edir) +} + +//sys chdir(path string) (err error) +//sys Dup(oldfd int, newfd int) (fd int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys Close(fd int) (err error) +//sys Fstat(fd int, edir []byte) (n int, err error) +//sys Fwstat(fd int, edir []byte) (err error) diff --git a/vendor/golang.org/x/sys/plan9/syscall_test.go b/vendor/golang.org/x/sys/plan9/syscall_test.go new file mode 100644 index 0000000..8f829ba --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/syscall_test.go @@ -0,0 +1,33 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build plan9 + +package plan9_test + +import ( + "testing" + + "golang.org/x/sys/plan9" +) + +func testSetGetenv(t *testing.T, key, value string) { + err := plan9.Setenv(key, value) + if err != nil { + t.Fatalf("Setenv failed to set %q: %v", value, err) + } + newvalue, found := plan9.Getenv(key) + if !found { + t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) + } + if newvalue != value { + t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) + } +} + +func TestEnv(t *testing.T) { + testSetGetenv(t, "TESTENV", "AVALUE") + // make sure TESTENV gets set to "", not deleted + testSetGetenv(t, "TESTENV", "") +} diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go new file mode 100644 index 0000000..b35598a --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_386.go @@ -0,0 +1,292 @@ +// mksyscall.pl -l32 -plan9 syscall_plan9.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +package plan9 + +import "unsafe" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fd2path(fd int, buf []byte) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]int32) (err error) { + r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func await(s []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(s) > 0 { + _p0 = unsafe.Pointer(&s[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func open(path string, mode int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func create(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func remove(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, edir []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(name string, old string, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(old) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(fd int, afd int, old string, flag int, aname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(old) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(aname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wstat(path string, edir []byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int, newfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, edir []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fwstat(fd int, edir []byte) (err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + if int32(r0) == -1 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go new file mode 100644 index 0000000..b35598a --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/zsyscall_plan9_amd64.go @@ -0,0 +1,292 @@ +// mksyscall.pl -l32 -plan9 syscall_plan9.go +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +package plan9 + +import "unsafe" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fd2path(fd int, buf []byte) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FD2PATH, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]int32) (err error) { + r0, _, e1 := Syscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func await(s []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(s) > 0 { + _p0 = unsafe.Pointer(&s[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_AWAIT, uintptr(_p0), uintptr(len(s)), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func open(path string, mode int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func create(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CREATE, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + use(unsafe.Pointer(_p0)) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func remove(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_REMOVE, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, edir []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(name string, old string, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(old) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_BIND, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(fd int, afd int, old string, flag int, aname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(old) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(aname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_MOUNT, uintptr(fd), uintptr(afd), uintptr(unsafe.Pointer(_p0)), uintptr(flag), uintptr(unsafe.Pointer(_p1)), 0) + use(unsafe.Pointer(_p0)) + use(unsafe.Pointer(_p1)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wstat(path string, edir []byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(edir) > 0 { + _p1 = unsafe.Pointer(&edir[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(edir))) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + use(unsafe.Pointer(_p0)) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int, newfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), uintptr(newfd), 0) + fd = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + r0, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, edir []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + n = int(r0) + if int32(r0) == -1 { + err = e1 + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fwstat(fd int, edir []byte) (err error) { + var _p0 unsafe.Pointer + if len(edir) > 0 { + _p0 = unsafe.Pointer(&edir[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_FWSTAT, uintptr(fd), uintptr(_p0), uintptr(len(edir))) + if int32(r0) == -1 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go b/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go new file mode 100644 index 0000000..22e8abd --- /dev/null +++ b/vendor/golang.org/x/sys/plan9/zsysnum_plan9.go @@ -0,0 +1,49 @@ +// mksysnum_plan9.sh /opt/plan9/sys/src/libc/9syscall/sys.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +package plan9 + +const ( + SYS_SYSR1 = 0 + SYS_BIND = 2 + SYS_CHDIR = 3 + SYS_CLOSE = 4 + SYS_DUP = 5 + SYS_ALARM = 6 + SYS_EXEC = 7 + SYS_EXITS = 8 + SYS_FAUTH = 10 + SYS_SEGBRK = 12 + SYS_OPEN = 14 + SYS_OSEEK = 16 + SYS_SLEEP = 17 + SYS_RFORK = 19 + SYS_PIPE = 21 + SYS_CREATE = 22 + SYS_FD2PATH = 23 + SYS_BRK_ = 24 + SYS_REMOVE = 25 + SYS_NOTIFY = 28 + SYS_NOTED = 29 + SYS_SEGATTACH = 30 + SYS_SEGDETACH = 31 + SYS_SEGFREE = 32 + SYS_SEGFLUSH = 33 + SYS_RENDEZVOUS = 34 + SYS_UNMOUNT = 35 + SYS_SEMACQUIRE = 37 + SYS_SEMRELEASE = 38 + SYS_SEEK = 39 + SYS_FVERSION = 40 + SYS_ERRSTR = 41 + SYS_STAT = 42 + SYS_FSTAT = 43 + SYS_WSTAT = 44 + SYS_FWSTAT = 45 + SYS_MOUNT = 46 + SYS_AWAIT = 47 + SYS_PREAD = 50 + SYS_PWRITE = 51 + SYS_TSEMACQUIRE = 52 + SYS_NSEC = 53 +) diff --git a/vendor/golang.org/x/sys/unix/.gitignore b/vendor/golang.org/x/sys/unix/.gitignore new file mode 100644 index 0000000..e482715 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/.gitignore @@ -0,0 +1 @@ +_obj/ diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md new file mode 100644 index 0000000..bc6f603 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/README.md @@ -0,0 +1,173 @@ +# Building `sys/unix` + +The sys/unix package provides access to the raw system call interface of the +underlying operating system. See: https://godoc.org/golang.org/x/sys/unix + +Porting Go to a new architecture/OS combination or adding syscalls, types, or +constants to an existing architecture/OS pair requires some manual effort; +however, there are tools that automate much of the process. + +## Build Systems + +There are currently two ways we generate the necessary files. We are currently +migrating the build system to use containers so the builds are reproducible. +This is being done on an OS-by-OS basis. Please update this documentation as +components of the build system change. + +### Old Build System (currently for `GOOS != "Linux" || GOARCH == "sparc64"`) + +The old build system generates the Go files based on the C header files +present on your system. This means that files +for a given GOOS/GOARCH pair must be generated on a system with that OS and +architecture. This also means that the generated code can differ from system +to system, based on differences in the header files. + +To avoid this, if you are using the old build system, only generate the Go +files on an installation with unmodified header files. It is also important to +keep track of which version of the OS the files were generated from (ex. +Darwin 14 vs Darwin 15). This makes it easier to track the progress of changes +and have each OS upgrade correspond to a single change. + +To build the files for your current OS and architecture, make sure GOOS and +GOARCH are set correctly and run `mkall.sh`. This will generate the files for +your specific system. Running `mkall.sh -n` shows the commands that will be run. + +Requirements: bash, perl, go + +### New Build System (currently for `GOOS == "Linux" && GOARCH != "sparc64"`) + +The new build system uses a Docker container to generate the go files directly +from source checkouts of the kernel and various system libraries. This means +that on any platform that supports Docker, all the files using the new build +system can be generated at once, and generated files will not change based on +what the person running the scripts has installed on their computer. + +The OS specific files for the new build system are located in the `${GOOS}` +directory, and the build is coordinated by the `${GOOS}/mkall.go` program. When +the kernel or system library updates, modify the Dockerfile at +`${GOOS}/Dockerfile` to checkout the new release of the source. + +To build all the files under the new build system, you must be on an amd64/Linux +system and have your GOOS and GOARCH set accordingly. Running `mkall.sh` will +then generate all of the files for all of the GOOS/GOARCH pairs in the new build +system. Running `mkall.sh -n` shows the commands that will be run. + +Requirements: bash, perl, go, docker + +## Component files + +This section describes the various files used in the code generation process. +It also contains instructions on how to modify these files to add a new +architecture/OS or to add additional syscalls, types, or constants. Note that +if you are using the new build system, the scripts cannot be called normally. +They must be called from within the docker container. + +### asm files + +The hand-written assembly file at `asm_${GOOS}_${GOARCH}.s` implements system +call dispatch. There are three entry points: +``` + func Syscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) + func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) + func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2, err uintptr) +``` +The first and second are the standard ones; they differ only in how many +arguments can be passed to the kernel. The third is for low-level use by the +ForkExec wrapper. Unlike the first two, it does not call into the scheduler to +let it know that a system call is running. + +When porting Go to an new architecture/OS, this file must be implemented for +each GOOS/GOARCH pair. + +### mksysnum + +Mksysnum is a script located at `${GOOS}/mksysnum.pl` (or `mksysnum_${GOOS}.pl` +for the old system). This script takes in a list of header files containing the +syscall number declarations and parses them to produce the corresponding list of +Go numeric constants. See `zsysnum_${GOOS}_${GOARCH}.go` for the generated +constants. + +Adding new syscall numbers is mostly done by running the build on a sufficiently +new installation of the target OS (or updating the source checkouts for the +new build system). However, depending on the OS, you make need to update the +parsing in mksysnum. + +### mksyscall.pl + +The `syscall.go`, `syscall_${GOOS}.go`, `syscall_${GOOS}_${GOARCH}.go` are +hand-written Go files which implement system calls (for unix, the specific OS, +or the specific OS/Architecture pair respectively) that need special handling +and list `//sys` comments giving prototypes for ones that can be generated. + +The mksyscall.pl script takes the `//sys` and `//sysnb` comments and converts +them into syscalls. This requires the name of the prototype in the comment to +match a syscall number in the `zsysnum_${GOOS}_${GOARCH}.go` file. The function +prototype can be exported (capitalized) or not. + +Adding a new syscall often just requires adding a new `//sys` function prototype +with the desired arguments and a capitalized name so it is exported. However, if +you want the interface to the syscall to be different, often one will make an +unexported `//sys` prototype, an then write a custom wrapper in +`syscall_${GOOS}.go`. + +### types files + +For each OS, there is a hand-written Go file at `${GOOS}/types.go` (or +`types_${GOOS}.go` on the old system). This file includes standard C headers and +creates Go type aliases to the corresponding C types. The file is then fed +through godef to get the Go compatible definitions. Finally, the generated code +is fed though mkpost.go to format the code correctly and remove any hidden or +private identifiers. This cleaned-up code is written to +`ztypes_${GOOS}_${GOARCH}.go`. + +The hardest part about preparing this file is figuring out which headers to +include and which symbols need to be `#define`d to get the actual data +structures that pass through to the kernel system calls. Some C libraries +preset alternate versions for binary compatibility and translate them on the +way in and out of system calls, but there is almost always a `#define` that can +get the real ones. +See `types_darwin.go` and `linux/types.go` for examples. + +To add a new type, add in the necessary include statement at the top of the +file (if it is not already there) and add in a type alias line. Note that if +your type is significantly different on different architectures, you may need +some `#if/#elif` macros in your include statements. + +### mkerrors.sh + +This script is used to generate the system's various constants. This doesn't +just include the error numbers and error strings, but also the signal numbers +an a wide variety of miscellaneous constants. The constants come from the list +of include files in the `includes_${uname}` variable. A regex then picks out +the desired `#define` statements, and generates the corresponding Go constants. +The error numbers and strings are generated from `#include `, and the +signal numbers and strings are generated from `#include `. All of +these constants are written to `zerrors_${GOOS}_${GOARCH}.go` via a C program, +`_errors.c`, which prints out all the constants. + +To add a constant, add the header that includes it to the appropriate variable. +Then, edit the regex (if necessary) to match the desired constant. Avoid making +the regex too broad to avoid matching unintended constants. + + +## Generated files + +### `zerror_${GOOS}_${GOARCH}.go` + +A file containing all of the system's generated error numbers, error strings, +signal numbers, and constants. Generated by `mkerrors.sh` (see above). + +### `zsyscall_${GOOS}_${GOARCH}.go` + +A file containing all the generated syscalls for a specific GOOS and GOARCH. +Generated by `mksyscall.pl` (see above). + +### `zsysnum_${GOOS}_${GOARCH}.go` + +A list of numeric constants for all the syscall number of the specific GOOS +and GOARCH. Generated by mksysnum (see above). + +### `ztypes_${GOOS}_${GOARCH}.go` + +A file containing Go types for passing into (or returning from) syscalls. +Generated by godefs and the types file (see above). diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_386.s b/vendor/golang.org/x/sys/unix/asm_darwin_386.s new file mode 100644 index 0000000..8a72783 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s b/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s new file mode 100644 index 0000000..6321421 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_arm.s b/vendor/golang.org/x/sys/unix/asm_darwin_arm.s new file mode 100644 index 0000000..333242d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_arm.s @@ -0,0 +1,30 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo +// +build arm,darwin + +#include "textflag.h" + +// +// System call support for ARM, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s b/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s new file mode 100644 index 0000000..97e0174 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_darwin_arm64.s @@ -0,0 +1,30 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo +// +build arm64,darwin + +#include "textflag.h" + +// +// System call support for AMD64, Darwin +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s b/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s new file mode 100644 index 0000000..d5ed672 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_dragonfly_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, DragonFly +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-64 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-88 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-112 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-64 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-88 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_386.s b/vendor/golang.org/x/sys/unix/asm_freebsd_386.s new file mode 100644 index 0000000..c9a0a26 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_freebsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s new file mode 100644 index 0000000..3517247 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_freebsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s b/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s new file mode 100644 index 0000000..9227c87 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_freebsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, FreeBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_386.s b/vendor/golang.org/x/sys/unix/asm_linux_386.s new file mode 100644 index 0000000..4db2909 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_386.s @@ -0,0 +1,35 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for 386, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) + +TEXT ·socketcall(SB),NOSPLIT,$0-36 + JMP syscall·socketcall(SB) + +TEXT ·rawsocketcall(SB),NOSPLIT,$0-36 + JMP syscall·rawsocketcall(SB) + +TEXT ·seek(SB),NOSPLIT,$0-28 + JMP syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_amd64.s b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s new file mode 100644 index 0000000..44e25c6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for AMD64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·gettimeofday(SB),NOSPLIT,$0-16 + JMP syscall·gettimeofday(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm.s b/vendor/golang.org/x/sys/unix/asm_linux_arm.s new file mode 100644 index 0000000..cf0b574 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for arm, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) + +TEXT ·seek(SB),NOSPLIT,$0-32 + B syscall·seek(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_arm64.s b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s new file mode 100644 index 0000000..4be9bfe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_arm64.s @@ -0,0 +1,24 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build arm64 +// +build !gccgo + +#include "textflag.h" + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + B syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s new file mode 100644 index 0000000..724e580 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_mips64x.s @@ -0,0 +1,28 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips64 mips64le +// +build !gccgo + +#include "textflag.h" + +// +// System calls for mips64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s new file mode 100644 index 0000000..2ea4257 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_mipsx.s @@ -0,0 +1,31 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips mipsle +// +build !gccgo + +#include "textflag.h" + +// +// System calls for mips, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s new file mode 100644 index 0000000..8d231fe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_ppc64x.s @@ -0,0 +1,28 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build ppc64 ppc64le +// +build !gccgo + +#include "textflag.h" + +// +// System calls for ppc64, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + BR syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + BR syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + BR syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + BR syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_linux_s390x.s b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s new file mode 100644 index 0000000..1188985 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_s390x.s @@ -0,0 +1,28 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build s390x +// +build linux +// +build !gccgo + +#include "textflag.h" + +// +// System calls for s390x, Linux +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + BR syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + BR syscall·Syscall6(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + BR syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + BR syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_netbsd_386.s b/vendor/golang.org/x/sys/unix/asm_netbsd_386.s new file mode 100644 index 0000000..48bdcd7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_netbsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s new file mode 100644 index 0000000..2ede05c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_netbsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s b/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s new file mode 100644 index 0000000..e892857 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_netbsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, NetBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_386.s b/vendor/golang.org/x/sys/unix/asm_openbsd_386.s new file mode 100644 index 0000000..00576f3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_openbsd_386.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for 386, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s new file mode 100644 index 0000000..790ef77 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_openbsd_amd64.s @@ -0,0 +1,29 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for AMD64, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-104 + JMP syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s b/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s new file mode 100644 index 0000000..469bfa1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_openbsd_arm.s @@ -0,0 +1,29 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System call support for ARM, OpenBSD +// + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-28 + B syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-40 + B syscall·Syscall6(SB) + +TEXT ·Syscall9(SB),NOSPLIT,$0-52 + B syscall·Syscall9(SB) + +TEXT ·RawSyscall(SB),NOSPLIT,$0-28 + B syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-40 + B syscall·RawSyscall6(SB) diff --git a/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s new file mode 100644 index 0000000..ded8260 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_solaris_amd64.s @@ -0,0 +1,17 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build !gccgo + +#include "textflag.h" + +// +// System calls for amd64, Solaris are implemented in runtime/syscall_solaris.go +// + +TEXT ·sysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·sysvicall6(SB) + +TEXT ·rawSysvicall6(SB),NOSPLIT,$0-88 + JMP syscall·rawSysvicall6(SB) diff --git a/vendor/golang.org/x/sys/unix/bluetooth_linux.go b/vendor/golang.org/x/sys/unix/bluetooth_linux.go new file mode 100644 index 0000000..6e32296 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/bluetooth_linux.go @@ -0,0 +1,35 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Bluetooth sockets and messages + +package unix + +// Bluetooth Protocols +const ( + BTPROTO_L2CAP = 0 + BTPROTO_HCI = 1 + BTPROTO_SCO = 2 + BTPROTO_RFCOMM = 3 + BTPROTO_BNEP = 4 + BTPROTO_CMTP = 5 + BTPROTO_HIDP = 6 + BTPROTO_AVDTP = 7 +) + +const ( + HCI_CHANNEL_RAW = 0 + HCI_CHANNEL_USER = 1 + HCI_CHANNEL_MONITOR = 2 + HCI_CHANNEL_CONTROL = 3 +) + +// Socketoption Level +const ( + SOL_BLUETOOTH = 0x112 + SOL_HCI = 0x0 + SOL_L2CAP = 0x6 + SOL_RFCOMM = 0x12 + SOL_SCO = 0x11 +) diff --git a/vendor/golang.org/x/sys/unix/cap_freebsd.go b/vendor/golang.org/x/sys/unix/cap_freebsd.go new file mode 100644 index 0000000..83b6bce --- /dev/null +++ b/vendor/golang.org/x/sys/unix/cap_freebsd.go @@ -0,0 +1,195 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd + +package unix + +import ( + errorspkg "errors" + "fmt" +) + +// Go implementation of C mostly found in /usr/src/sys/kern/subr_capability.c + +const ( + // This is the version of CapRights this package understands. See C implementation for parallels. + capRightsGoVersion = CAP_RIGHTS_VERSION_00 + capArSizeMin = CAP_RIGHTS_VERSION_00 + 2 + capArSizeMax = capRightsGoVersion + 2 +) + +var ( + bit2idx = []int{ + -1, 0, 1, -1, 2, -1, -1, -1, 3, -1, -1, -1, -1, -1, -1, -1, + 4, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + } +) + +func capidxbit(right uint64) int { + return int((right >> 57) & 0x1f) +} + +func rightToIndex(right uint64) (int, error) { + idx := capidxbit(right) + if idx < 0 || idx >= len(bit2idx) { + return -2, fmt.Errorf("index for right 0x%x out of range", right) + } + return bit2idx[idx], nil +} + +func caprver(right uint64) int { + return int(right >> 62) +} + +func capver(rights *CapRights) int { + return caprver(rights.Rights[0]) +} + +func caparsize(rights *CapRights) int { + return capver(rights) + 2 +} + +// CapRightsSet sets the permissions in setrights in rights. +func CapRightsSet(rights *CapRights, setrights []uint64) error { + // This is essentially a copy of cap_rights_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errorspkg.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errorspkg.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errorspkg.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch") + } + rights.Rights[i] |= right + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsClear clears the permissions in clearrights from rights. +func CapRightsClear(rights *CapRights, clearrights []uint64) error { + // This is essentially a copy of cap_rights_vclear() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return errorspkg.New("bad rights size") + } + + for _, right := range clearrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return errorspkg.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return err + } + if i >= n { + return errorspkg.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch") + } + rights.Rights[i] &= ^(right & 0x01FFFFFFFFFFFFFF) + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return errorspkg.New("index mismatch (after assign)") + } + } + + return nil +} + +// CapRightsIsSet checks whether all the permissions in setrights are present in rights. +func CapRightsIsSet(rights *CapRights, setrights []uint64) (bool, error) { + // This is essentially a copy of cap_rights_is_vset() + if capver(rights) != CAP_RIGHTS_VERSION_00 { + return false, fmt.Errorf("bad rights version %d", capver(rights)) + } + + n := caparsize(rights) + if n < capArSizeMin || n > capArSizeMax { + return false, errorspkg.New("bad rights size") + } + + for _, right := range setrights { + if caprver(right) != CAP_RIGHTS_VERSION_00 { + return false, errorspkg.New("bad right version") + } + i, err := rightToIndex(right) + if err != nil { + return false, err + } + if i >= n { + return false, errorspkg.New("index overflow") + } + if capidxbit(rights.Rights[i]) != capidxbit(right) { + return false, errorspkg.New("index mismatch") + } + if (rights.Rights[i] & right) != right { + return false, nil + } + } + + return true, nil +} + +func capright(idx uint64, bit uint64) uint64 { + return ((1 << (57 + idx)) | bit) +} + +// CapRightsInit returns a pointer to an initialised CapRights structure filled with rights. +// See man cap_rights_init(3) and rights(4). +func CapRightsInit(rights []uint64) (*CapRights, error) { + var r CapRights + r.Rights[0] = (capRightsGoVersion << 62) | capright(0, 0) + r.Rights[1] = capright(1, 0) + + err := CapRightsSet(&r, rights) + if err != nil { + return nil, err + } + return &r, nil +} + +// CapRightsLimit reduces the operations permitted on fd to at most those contained in rights. +// The capability rights on fd can never be increased by CapRightsLimit. +// See man cap_rights_limit(2) and rights(4). +func CapRightsLimit(fd uintptr, rights *CapRights) error { + return capRightsLimit(int(fd), rights) +} + +// CapRightsGet returns a CapRights structure containing the operations permitted on fd. +// See man cap_rights_get(3) and rights(4). +func CapRightsGet(fd uintptr) (*CapRights, error) { + r, err := CapRightsInit(nil) + if err != nil { + return nil, err + } + err = capRightsGet(capRightsGoVersion, int(fd), r) + if err != nil { + return nil, err + } + return r, nil +} diff --git a/vendor/golang.org/x/sys/unix/constants.go b/vendor/golang.org/x/sys/unix/constants.go new file mode 100644 index 0000000..a96f0eb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/constants.go @@ -0,0 +1,13 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +const ( + R_OK = 0x4 + W_OK = 0x2 + X_OK = 0x1 +) diff --git a/vendor/golang.org/x/sys/unix/creds_test.go b/vendor/golang.org/x/sys/unix/creds_test.go new file mode 100644 index 0000000..4557ea4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/creds_test.go @@ -0,0 +1,136 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package unix_test + +import ( + "bytes" + "net" + "os" + "syscall" + "testing" + + "golang.org/x/sys/unix" +) + +// TestSCMCredentials tests the sending and receiving of credentials +// (PID, UID, GID) in an ancillary message between two UNIX +// sockets. The SO_PASSCRED socket option is enabled on the sending +// socket for this to work. +func TestSCMCredentials(t *testing.T) { + socketTypeTests := []struct { + socketType int + dataLen int + }{ + { + unix.SOCK_STREAM, + 1, + }, { + unix.SOCK_DGRAM, + 0, + }, + } + + for _, tt := range socketTypeTests { + fds, err := unix.Socketpair(unix.AF_LOCAL, tt.socketType, 0) + if err != nil { + t.Fatalf("Socketpair: %v", err) + } + defer unix.Close(fds[0]) + defer unix.Close(fds[1]) + + err = unix.SetsockoptInt(fds[0], unix.SOL_SOCKET, unix.SO_PASSCRED, 1) + if err != nil { + t.Fatalf("SetsockoptInt: %v", err) + } + + srvFile := os.NewFile(uintptr(fds[0]), "server") + defer srvFile.Close() + srv, err := net.FileConn(srvFile) + if err != nil { + t.Errorf("FileConn: %v", err) + return + } + defer srv.Close() + + cliFile := os.NewFile(uintptr(fds[1]), "client") + defer cliFile.Close() + cli, err := net.FileConn(cliFile) + if err != nil { + t.Errorf("FileConn: %v", err) + return + } + defer cli.Close() + + var ucred unix.Ucred + if os.Getuid() != 0 { + ucred.Pid = int32(os.Getpid()) + ucred.Uid = 0 + ucred.Gid = 0 + oob := unix.UnixCredentials(&ucred) + _, _, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) + if op, ok := err.(*net.OpError); ok { + err = op.Err + } + if sys, ok := err.(*os.SyscallError); ok { + err = sys.Err + } + if err != syscall.EPERM { + t.Fatalf("WriteMsgUnix failed with %v, want EPERM", err) + } + } + + ucred.Pid = int32(os.Getpid()) + ucred.Uid = uint32(os.Getuid()) + ucred.Gid = uint32(os.Getgid()) + oob := unix.UnixCredentials(&ucred) + + // On SOCK_STREAM, this is internally going to send a dummy byte + n, oobn, err := cli.(*net.UnixConn).WriteMsgUnix(nil, oob, nil) + if err != nil { + t.Fatalf("WriteMsgUnix: %v", err) + } + if n != 0 { + t.Fatalf("WriteMsgUnix n = %d, want 0", n) + } + if oobn != len(oob) { + t.Fatalf("WriteMsgUnix oobn = %d, want %d", oobn, len(oob)) + } + + oob2 := make([]byte, 10*len(oob)) + n, oobn2, flags, _, err := srv.(*net.UnixConn).ReadMsgUnix(nil, oob2) + if err != nil { + t.Fatalf("ReadMsgUnix: %v", err) + } + if flags != 0 { + t.Fatalf("ReadMsgUnix flags = 0x%x, want 0", flags) + } + if n != tt.dataLen { + t.Fatalf("ReadMsgUnix n = %d, want %d", n, tt.dataLen) + } + if oobn2 != oobn { + // without SO_PASSCRED set on the socket, ReadMsgUnix will + // return zero oob bytes + t.Fatalf("ReadMsgUnix oobn = %d, want %d", oobn2, oobn) + } + oob2 = oob2[:oobn2] + if !bytes.Equal(oob, oob2) { + t.Fatal("ReadMsgUnix oob bytes don't match") + } + + scm, err := unix.ParseSocketControlMessage(oob2) + if err != nil { + t.Fatalf("ParseSocketControlMessage: %v", err) + } + newUcred, err := unix.ParseUnixCredentials(&scm[0]) + if err != nil { + t.Fatalf("ParseUnixCredentials: %v", err) + } + if *newUcred != ucred { + t.Fatalf("ParseUnixCredentials = %+v, want %+v", newUcred, ucred) + } + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_darwin.go b/vendor/golang.org/x/sys/unix/dev_darwin.go new file mode 100644 index 0000000..8d1dc0f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_darwin.go @@ -0,0 +1,24 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in Darwin's sys/types.h header. + +package unix + +// Major returns the major component of a Darwin device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 24) & 0xff) +} + +// Minor returns the minor component of a Darwin device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffffff) +} + +// Mkdev returns a Darwin device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 24) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dev_darwin_test.go b/vendor/golang.org/x/sys/unix/dev_darwin_test.go new file mode 100644 index 0000000..48d0448 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_darwin_test.go @@ -0,0 +1,49 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // Most of the device major/minor numbers on Darwin are + // dynamically generated by devfs. These are some well-known + // static numbers. + {"/dev/ttyp0", 4, 0}, + {"/dev/ttys0", 4, 48}, + {"/dev/ptyp0", 5, 0}, + {"/dev/ptyr0", 5, 32}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_dragonfly.go b/vendor/golang.org/x/sys/unix/dev_dragonfly.go new file mode 100644 index 0000000..8502f20 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_dragonfly.go @@ -0,0 +1,30 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in Dragonfly's sys/types.h header. +// +// The information below is extracted and adapted from sys/types.h: +// +// Minor gives a cookie instead of an index since in order to avoid changing the +// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for +// devices that don't use them. + +package unix + +// Major returns the major component of a DragonFlyBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 8) & 0xff) +} + +// Minor returns the minor component of a DragonFlyBSD device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff00ff) +} + +// Mkdev returns a DragonFlyBSD device number generated from the given major and +// minor components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 8) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go b/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go new file mode 100644 index 0000000..2caba08 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_dragonfly_test.go @@ -0,0 +1,48 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // Minor is a cookie instead of an index on DragonFlyBSD + {"/dev/null", 10, 0x00000002}, + {"/dev/random", 10, 0x00000003}, + {"/dev/urandom", 10, 0x00000004}, + {"/dev/zero", 10, 0x0000000c}, + {"/dev/bpf", 15, 0xffff00ff}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_freebsd.go b/vendor/golang.org/x/sys/unix/dev_freebsd.go new file mode 100644 index 0000000..eba3b4b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_freebsd.go @@ -0,0 +1,30 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in FreeBSD's sys/types.h header. +// +// The information below is extracted and adapted from sys/types.h: +// +// Minor gives a cookie instead of an index since in order to avoid changing the +// meanings of bits 0-15 or wasting time and space shifting bits 16-31 for +// devices that don't use them. + +package unix + +// Major returns the major component of a FreeBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev >> 8) & 0xff) +} + +// Minor returns the minor component of a FreeBSD device number. +func Minor(dev uint64) uint32 { + return uint32(dev & 0xffff00ff) +} + +// Mkdev returns a FreeBSD device number generated from the given major and +// minor components. +func Mkdev(major, minor uint32) uint64 { + return (uint64(major) << 8) | uint64(minor) +} diff --git a/vendor/golang.org/x/sys/unix/dev_linux.go b/vendor/golang.org/x/sys/unix/dev_linux.go new file mode 100644 index 0000000..d165d6f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_linux.go @@ -0,0 +1,42 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used by the Linux kernel and glibc. +// +// The information below is extracted and adapted from bits/sysmacros.h in the +// glibc sources: +// +// dev_t in glibc is 64-bit, with 32-bit major and minor numbers. glibc's +// default encoding is MMMM Mmmm mmmM MMmm, where M is a hex digit of the major +// number and m is a hex digit of the minor number. This is backward compatible +// with legacy systems where dev_t is 16 bits wide, encoded as MMmm. It is also +// backward compatible with the Linux kernel, which for some architectures uses +// 32-bit dev_t, encoded as mmmM MMmm. + +package unix + +// Major returns the major component of a Linux device number. +func Major(dev uint64) uint32 { + major := uint32((dev & 0x00000000000fff00) >> 8) + major |= uint32((dev & 0xfffff00000000000) >> 32) + return major +} + +// Minor returns the minor component of a Linux device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x00000000000000ff) >> 0) + minor |= uint32((dev & 0x00000ffffff00000) >> 12) + return minor +} + +// Mkdev returns a Linux device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) & 0x00000fff) << 8 + dev |= (uint64(major) & 0xfffff000) << 32 + dev |= (uint64(minor) & 0x000000ff) << 0 + dev |= (uint64(minor) & 0xffffff00) << 12 + return dev +} diff --git a/vendor/golang.org/x/sys/unix/dev_linux_test.go b/vendor/golang.org/x/sys/unix/dev_linux_test.go new file mode 100644 index 0000000..6e001f3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_linux_test.go @@ -0,0 +1,51 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // well known major/minor numbers according to + // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide/devices.txt + {"/dev/null", 1, 3}, + {"/dev/zero", 1, 5}, + {"/dev/random", 1, 8}, + {"/dev/full", 1, 7}, + {"/dev/urandom", 1, 9}, + {"/dev/tty", 5, 0}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_netbsd.go b/vendor/golang.org/x/sys/unix/dev_netbsd.go new file mode 100644 index 0000000..b4a203d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_netbsd.go @@ -0,0 +1,29 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in NetBSD's sys/types.h header. + +package unix + +// Major returns the major component of a NetBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x000fff00) >> 8) +} + +// Minor returns the minor component of a NetBSD device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xfff00000) >> 12) + return minor +} + +// Mkdev returns a NetBSD device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) << 8) & 0x000fff00 + dev |= (uint64(minor) << 12) & 0xfff00000 + dev |= (uint64(minor) << 0) & 0x000000ff + return dev +} diff --git a/vendor/golang.org/x/sys/unix/dev_netbsd_test.go b/vendor/golang.org/x/sys/unix/dev_netbsd_test.go new file mode 100644 index 0000000..c39a80a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_netbsd_test.go @@ -0,0 +1,50 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // well known major/minor numbers according to /dev/MAKEDEV on + // NetBSD 7.0 + {"/dev/null", 2, 2}, + {"/dev/zero", 2, 12}, + {"/dev/ttyp0", 5, 0}, + {"/dev/ttyp1", 5, 1}, + {"/dev/random", 46, 0}, + {"/dev/urandom", 46, 1}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_openbsd.go b/vendor/golang.org/x/sys/unix/dev_openbsd.go new file mode 100644 index 0000000..f3430c4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_openbsd.go @@ -0,0 +1,29 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Functions to access/create device major and minor numbers matching the +// encoding used in OpenBSD's sys/types.h header. + +package unix + +// Major returns the major component of an OpenBSD device number. +func Major(dev uint64) uint32 { + return uint32((dev & 0x0000ff00) >> 8) +} + +// Minor returns the minor component of an OpenBSD device number. +func Minor(dev uint64) uint32 { + minor := uint32((dev & 0x000000ff) >> 0) + minor |= uint32((dev & 0xffff0000) >> 8) + return minor +} + +// Mkdev returns an OpenBSD device number generated from the given major and minor +// components. +func Mkdev(major, minor uint32) uint64 { + dev := (uint64(major) << 8) & 0x0000ff00 + dev |= (uint64(minor) << 8) & 0xffff0000 + dev |= (uint64(minor) << 0) & 0x000000ff + return dev +} diff --git a/vendor/golang.org/x/sys/unix/dev_openbsd_test.go b/vendor/golang.org/x/sys/unix/dev_openbsd_test.go new file mode 100644 index 0000000..5635d27 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_openbsd_test.go @@ -0,0 +1,52 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // well known major/minor numbers according to /dev/MAKEDEV on + // OpenBSD 6.0 + {"/dev/null", 2, 2}, + {"/dev/zero", 2, 12}, + {"/dev/ttyp0", 5, 0}, + {"/dev/ttyp1", 5, 1}, + {"/dev/random", 45, 0}, + {"/dev/srandom", 45, 1}, + {"/dev/urandom", 45, 2}, + {"/dev/arandom", 45, 3}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dev_solaris_test.go b/vendor/golang.org/x/sys/unix/dev_solaris_test.go new file mode 100644 index 0000000..db58c0d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dev_solaris_test.go @@ -0,0 +1,49 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func TestDevices(t *testing.T) { + testCases := []struct { + path string + major uint32 + minor uint32 + }{ + // Well-known major/minor numbers on OpenSolaris according to + // /etc/name_to_major + {"/dev/zero", 134, 12}, + {"/dev/null", 134, 2}, + {"/dev/ptyp0", 172, 0}, + {"/dev/ttyp0", 175, 0}, + {"/dev/ttyp1", 175, 1}, + } + for _, tc := range testCases { + t.Run(fmt.Sprintf("%s %v:%v", tc.path, tc.major, tc.minor), func(t *testing.T) { + var stat unix.Stat_t + err := unix.Stat(tc.path, &stat) + if err != nil { + t.Errorf("failed to stat device: %v", err) + return + } + + dev := uint64(stat.Rdev) + if unix.Major(dev) != tc.major { + t.Errorf("for %s Major(%#x) == %d, want %d", tc.path, dev, unix.Major(dev), tc.major) + } + if unix.Minor(dev) != tc.minor { + t.Errorf("for %s Minor(%#x) == %d, want %d", tc.path, dev, unix.Minor(dev), tc.minor) + } + if unix.Mkdev(tc.major, tc.minor) != dev { + t.Errorf("for %s Mkdev(%d, %d) == %#x, want %#x", tc.path, tc.major, tc.minor, unix.Mkdev(tc.major, tc.minor), dev) + } + }) + } +} diff --git a/vendor/golang.org/x/sys/unix/dirent.go b/vendor/golang.org/x/sys/unix/dirent.go new file mode 100644 index 0000000..bd47581 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/dirent.go @@ -0,0 +1,102 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux nacl netbsd openbsd solaris + +package unix + +import "unsafe" + +// readInt returns the size-bytes unsigned integer in native byte order at offset off. +func readInt(b []byte, off, size uintptr) (u uint64, ok bool) { + if len(b) < int(off+size) { + return 0, false + } + if isBigEndian { + return readIntBE(b[off:], size), true + } + return readIntLE(b[off:], size), true +} + +func readIntBE(b []byte, size uintptr) uint64 { + switch size { + case 1: + return uint64(b[0]) + case 2: + _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[1]) | uint64(b[0])<<8 + case 4: + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[3]) | uint64(b[2])<<8 | uint64(b[1])<<16 | uint64(b[0])<<24 + case 8: + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 | + uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56 + default: + panic("syscall: readInt with unsupported size") + } +} + +func readIntLE(b []byte, size uintptr) uint64 { + switch size { + case 1: + return uint64(b[0]) + case 2: + _ = b[1] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 + case 4: + _ = b[3] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 + case 8: + _ = b[7] // bounds check hint to compiler; see golang.org/issue/14808 + return uint64(b[0]) | uint64(b[1])<<8 | uint64(b[2])<<16 | uint64(b[3])<<24 | + uint64(b[4])<<32 | uint64(b[5])<<40 | uint64(b[6])<<48 | uint64(b[7])<<56 + default: + panic("syscall: readInt with unsupported size") + } +} + +// ParseDirent parses up to max directory entries in buf, +// appending the names to names. It returns the number of +// bytes consumed from buf, the number of entries added +// to names, and the new names slice. +func ParseDirent(buf []byte, max int, names []string) (consumed int, count int, newnames []string) { + origlen := len(buf) + count = 0 + for max != 0 && len(buf) > 0 { + reclen, ok := direntReclen(buf) + if !ok || reclen > uint64(len(buf)) { + return origlen, count, names + } + rec := buf[:reclen] + buf = buf[reclen:] + ino, ok := direntIno(rec) + if !ok { + break + } + if ino == 0 { // File absent in directory. + continue + } + const namoff = uint64(unsafe.Offsetof(Dirent{}.Name)) + namlen, ok := direntNamlen(rec) + if !ok || namoff+namlen > uint64(len(rec)) { + break + } + name := rec[namoff : namoff+namlen] + for i, c := range name { + if c == 0 { + name = name[:i] + break + } + } + // Check for useless names before allocating a string. + if string(name) == "." || string(name) == ".." { + continue + } + max-- + count++ + names = append(names, string(name)) + } + return origlen - len(buf), count, names +} diff --git a/vendor/golang.org/x/sys/unix/endian_big.go b/vendor/golang.org/x/sys/unix/endian_big.go new file mode 100644 index 0000000..5e92690 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/endian_big.go @@ -0,0 +1,9 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// +build ppc64 s390x mips mips64 + +package unix + +const isBigEndian = true diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go new file mode 100644 index 0000000..085df2d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/endian_little.go @@ -0,0 +1,9 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// +// +build 386 amd64 amd64p32 arm arm64 ppc64le mipsle mips64le + +package unix + +const isBigEndian = false diff --git a/vendor/golang.org/x/sys/unix/env_unix.go b/vendor/golang.org/x/sys/unix/env_unix.go new file mode 100644 index 0000000..2e06b33 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/env_unix.go @@ -0,0 +1,27 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +// Unix environment variables. + +package unix + +import "syscall" + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} diff --git a/vendor/golang.org/x/sys/unix/env_unset.go b/vendor/golang.org/x/sys/unix/env_unset.go new file mode 100644 index 0000000..c44fdc4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/env_unset.go @@ -0,0 +1,14 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.4 + +package unix + +import "syscall" + +func Unsetenv(key string) error { + // This was added in Go 1.4. + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_386.go b/vendor/golang.org/x/sys/unix/errors_freebsd_386.go new file mode 100644 index 0000000..c56bc8b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_386.go @@ -0,0 +1,227 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep +// them here for backwards compatibility. + +package unix + +const ( + IFF_SMART = 0x20 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8030720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8030720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go new file mode 100644 index 0000000..3e97711 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_amd64.go @@ -0,0 +1,227 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Constants that were deprecated or moved to enums in the FreeBSD headers. Keep +// them here for backwards compatibility. + +package unix + +const ( + IFF_SMART = 0x20 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_IPXIP = 0xf9 + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8040720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8040720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go new file mode 100644 index 0000000..856dca3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/errors_freebsd_arm.go @@ -0,0 +1,226 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +const ( + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BSC = 0x53 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf6 + IFT_PFSYNC = 0xf7 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + + // missing constants on FreeBSD-11.1-RELEASE, copied from old values in ztypes_freebsd_arm.go + IFF_SMART = 0x20 + IFT_FAITH = 0xf2 + IFT_IPXIP = 0xf9 + IPPROTO_MAXID = 0x34 + IPV6_FAITH = 0x1d + IP_FAITH = 0x16 + MAP_NORESERVE = 0x40 + MAP_RENAME = 0x20 + NET_RT_MAXID = 0x6 + RTF_PRCLONING = 0x10000 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + SIOCADDRT = 0x8030720a + SIOCALIFADDR = 0x8118691b + SIOCDELRT = 0x8030720b + SIOCDLIFADDR = 0x8118691d + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCSLIFPHYADDR = 0x8118694a +) diff --git a/vendor/golang.org/x/sys/unix/export_test.go b/vendor/golang.org/x/sys/unix/export_test.go new file mode 100644 index 0000000..e802469 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/export_test.go @@ -0,0 +1,9 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +var Itoa = itoa diff --git a/vendor/golang.org/x/sys/unix/file_unix.go b/vendor/golang.org/x/sys/unix/file_unix.go new file mode 100644 index 0000000..47f6a83 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/file_unix.go @@ -0,0 +1,27 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +import ( + "os" + "syscall" +) + +// FIXME: unexported function from os +// syscallMode returns the syscall-specific mode bits from Go's portable mode bits. +func syscallMode(i os.FileMode) (o uint32) { + o |= uint32(i.Perm()) + if i&os.ModeSetuid != 0 { + o |= syscall.S_ISUID + } + if i&os.ModeSetgid != 0 { + o |= syscall.S_ISGID + } + if i&os.ModeSticky != 0 { + o |= syscall.S_ISVTX + } + // No mapping for Go's ModeTemporary (plan9 only). + return +} diff --git a/vendor/golang.org/x/sys/unix/flock.go b/vendor/golang.org/x/sys/unix/flock.go new file mode 100644 index 0000000..2994ce7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/flock.go @@ -0,0 +1,22 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd + +package unix + +import "unsafe" + +// fcntl64Syscall is usually SYS_FCNTL, but is overridden on 32-bit Linux +// systems by flock_linux_32bit.go to be SYS_FCNTL64. +var fcntl64Syscall uintptr = SYS_FCNTL + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, errno := Syscall(fcntl64Syscall, fd, uintptr(cmd), uintptr(unsafe.Pointer(lk))) + if errno == 0 { + return nil + } + return errno +} diff --git a/vendor/golang.org/x/sys/unix/flock_linux_32bit.go b/vendor/golang.org/x/sys/unix/flock_linux_32bit.go new file mode 100644 index 0000000..fc0e50e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/flock_linux_32bit.go @@ -0,0 +1,13 @@ +// +build linux,386 linux,arm linux,mips linux,mipsle + +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +func init() { + // On 32-bit Linux systems, the fcntl syscall that matches Go's + // Flock_t type is SYS_FCNTL64, not SYS_FCNTL. + fcntl64Syscall = SYS_FCNTL64 +} diff --git a/vendor/golang.org/x/sys/unix/gccgo.go b/vendor/golang.org/x/sys/unix/gccgo.go new file mode 100644 index 0000000..40bed3f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo.go @@ -0,0 +1,46 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo + +package unix + +import "syscall" + +// We can't use the gc-syntax .s files for gccgo. On the plus side +// much of the functionality can be written directly in Go. + +//extern gccgoRealSyscall +func realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r, errno uintptr) + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) { + syscall.Entersyscall() + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9) + syscall.Exitsyscall() + return r, 0, syscall.Errno(errno) +} + +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, 0, 0, 0, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} + +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) { + r, errno := realSyscall(trap, a1, a2, a3, a4, a5, a6, 0, 0, 0) + return r, 0, syscall.Errno(errno) +} diff --git a/vendor/golang.org/x/sys/unix/gccgo_c.c b/vendor/golang.org/x/sys/unix/gccgo_c.c new file mode 100644 index 0000000..99a774f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_c.c @@ -0,0 +1,41 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo + +#include +#include +#include + +#define _STRINGIFY2_(x) #x +#define _STRINGIFY_(x) _STRINGIFY2_(x) +#define GOSYM_PREFIX _STRINGIFY_(__USER_LABEL_PREFIX__) + +// Call syscall from C code because the gccgo support for calling from +// Go to C does not support varargs functions. + +struct ret { + uintptr_t r; + uintptr_t err; +}; + +struct ret +gccgoRealSyscall(uintptr_t trap, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7, uintptr_t a8, uintptr_t a9) +{ + struct ret r; + + errno = 0; + r.r = syscall(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9); + r.err = errno; + return r; +} + +// Define the use function in C so that it is not inlined. + +extern void use(void *) __asm__ (GOSYM_PREFIX GOPKGPATH ".use") __attribute__((noinline)); + +void +use(void *p __attribute__ ((unused))) +{ +} diff --git a/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go new file mode 100644 index 0000000..251a977 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/gccgo_linux_amd64.go @@ -0,0 +1,20 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build gccgo,linux,amd64 + +package unix + +import "syscall" + +//extern gettimeofday +func realGettimeofday(*Timeval, *byte) int32 + +func gettimeofday(tv *Timeval) (err syscall.Errno) { + r := realGettimeofday(tv, nil) + if r < 0 { + return syscall.GetErrno() + } + return 0 +} diff --git a/vendor/golang.org/x/sys/unix/linux/Dockerfile b/vendor/golang.org/x/sys/unix/linux/Dockerfile new file mode 100644 index 0000000..7fe5fc3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/linux/Dockerfile @@ -0,0 +1,51 @@ +FROM ubuntu:16.04 + +# Use the most recent ubuntu sources +RUN echo 'deb http://en.archive.ubuntu.com/ubuntu/ artful main universe' >> /etc/apt/sources.list + +# Dependencies to get the git sources and go binaries +RUN apt-get update && apt-get install -y \ + curl \ + git \ + && rm -rf /var/lib/apt/lists/* + +# Get the git sources. If not cached, this takes O(5 minutes). +WORKDIR /git +RUN git config --global advice.detachedHead false +# Linux Kernel: Released 03 Sep 2017 +RUN git clone --branch v4.13 --depth 1 https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux +# GNU C library: Released 02 Aug 2017 (we should try to get a secure way to clone this) +RUN git clone --branch glibc-2.26 --depth 1 git://sourceware.org/git/glibc.git + +# Get Go 1.9.2 +ENV GOLANG_VERSION 1.9.2 +ENV GOLANG_DOWNLOAD_URL https://golang.org/dl/go$GOLANG_VERSION.linux-amd64.tar.gz +ENV GOLANG_DOWNLOAD_SHA256 de874549d9a8d8d8062be05808509c09a88a248e77ec14eb77453530829ac02b + +RUN curl -fsSL "$GOLANG_DOWNLOAD_URL" -o golang.tar.gz \ + && echo "$GOLANG_DOWNLOAD_SHA256 golang.tar.gz" | sha256sum -c - \ + && tar -C /usr/local -xzf golang.tar.gz \ + && rm golang.tar.gz + +ENV PATH /usr/local/go/bin:$PATH + +# Linux and Glibc build dependencies +RUN apt-get update && apt-get install -y \ + gawk make python \ + gcc gcc-multilib \ + gettext texinfo \ + && rm -rf /var/lib/apt/lists/* +# Emulator and cross compilers +RUN apt-get update && apt-get install -y \ + qemu \ + gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi \ + gcc-mips-linux-gnu gcc-mips64-linux-gnuabi64 \ + gcc-mips64el-linux-gnuabi64 gcc-mipsel-linux-gnu \ + gcc-powerpc64-linux-gnu gcc-powerpc64le-linux-gnu \ + gcc-s390x-linux-gnu gcc-sparc64-linux-gnu \ + && rm -rf /var/lib/apt/lists/* + +# Let the scripts know they are in the docker environment +ENV GOLANG_SYS_BUILD docker +WORKDIR /build +ENTRYPOINT ["go", "run", "linux/mkall.go", "/git/linux", "/git/glibc"] diff --git a/vendor/golang.org/x/sys/unix/linux/mkall.go b/vendor/golang.org/x/sys/unix/linux/mkall.go new file mode 100644 index 0000000..89b2fe8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/linux/mkall.go @@ -0,0 +1,482 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// linux/mkall.go - Generates all Linux zsysnum, zsyscall, zerror, and ztype +// files for all 11 linux architectures supported by the go compiler. See +// README.md for more information about the build system. + +// To run it you must have a git checkout of the Linux kernel and glibc. Once +// the appropriate sources are ready, the program is run as: +// go run linux/mkall.go + +// +build ignore + +package main + +import ( + "bufio" + "bytes" + "fmt" + "io" + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" + "unicode" +) + +// These will be paths to the appropriate source directories. +var LinuxDir string +var GlibcDir string + +const TempDir = "/tmp" +const IncludeDir = TempDir + "/include" // To hold our C headers +const BuildDir = TempDir + "/build" // To hold intermediate build files + +const GOOS = "linux" // Only for Linux targets +const BuildArch = "amd64" // Must be built on this architecture +const MinKernel = "2.6.23" // https://golang.org/doc/install#requirements + +type target struct { + GoArch string // Architecture name according to Go + LinuxArch string // Architecture name according to the Linux Kernel + GNUArch string // Architecture name according to GNU tools (https://wiki.debian.org/Multiarch/Tuples) + BigEndian bool // Default Little Endian + SignedChar bool // Is -fsigned-char needed (default no) + Bits int +} + +// List of the 11 Linux targets supported by the go compiler. sparc64 is not +// currently supported, though a port is in progress. +var targets = []target{ + { + GoArch: "386", + LinuxArch: "x86", + GNUArch: "i686-linux-gnu", // Note "i686" not "i386" + Bits: 32, + }, + { + GoArch: "amd64", + LinuxArch: "x86", + GNUArch: "x86_64-linux-gnu", + Bits: 64, + }, + { + GoArch: "arm64", + LinuxArch: "arm64", + GNUArch: "aarch64-linux-gnu", + SignedChar: true, + Bits: 64, + }, + { + GoArch: "arm", + LinuxArch: "arm", + GNUArch: "arm-linux-gnueabi", + Bits: 32, + }, + { + GoArch: "mips", + LinuxArch: "mips", + GNUArch: "mips-linux-gnu", + BigEndian: true, + Bits: 32, + }, + { + GoArch: "mipsle", + LinuxArch: "mips", + GNUArch: "mipsel-linux-gnu", + Bits: 32, + }, + { + GoArch: "mips64", + LinuxArch: "mips", + GNUArch: "mips64-linux-gnuabi64", + BigEndian: true, + Bits: 64, + }, + { + GoArch: "mips64le", + LinuxArch: "mips", + GNUArch: "mips64el-linux-gnuabi64", + Bits: 64, + }, + { + GoArch: "ppc64", + LinuxArch: "powerpc", + GNUArch: "powerpc64-linux-gnu", + BigEndian: true, + Bits: 64, + }, + { + GoArch: "ppc64le", + LinuxArch: "powerpc", + GNUArch: "powerpc64le-linux-gnu", + Bits: 64, + }, + { + GoArch: "s390x", + LinuxArch: "s390", + GNUArch: "s390x-linux-gnu", + BigEndian: true, + SignedChar: true, + Bits: 64, + }, + // { + // GoArch: "sparc64", + // LinuxArch: "sparc", + // GNUArch: "sparc64-linux-gnu", + // BigEndian: true, + // Bits: 64, + // }, +} + +// ptracePairs is a list of pairs of targets that can, in some cases, +// run each other's binaries. +var ptracePairs = []struct{ a1, a2 string }{ + {"386", "amd64"}, + {"arm", "arm64"}, + {"mips", "mips64"}, + {"mipsle", "mips64le"}, +} + +func main() { + if runtime.GOOS != GOOS || runtime.GOARCH != BuildArch { + fmt.Printf("Build system has GOOS_GOARCH = %s_%s, need %s_%s\n", + runtime.GOOS, runtime.GOARCH, GOOS, BuildArch) + return + } + + // Check that we are using the new build system if we should + if os.Getenv("GOLANG_SYS_BUILD") != "docker" { + fmt.Println("In the new build system, mkall.go should not be called directly.") + fmt.Println("See README.md") + return + } + + // Parse the command line options + if len(os.Args) != 3 { + fmt.Println("USAGE: go run linux/mkall.go ") + return + } + LinuxDir = os.Args[1] + GlibcDir = os.Args[2] + + for _, t := range targets { + fmt.Printf("----- GENERATING: %s -----\n", t.GoArch) + if err := t.generateFiles(); err != nil { + fmt.Printf("%v\n***** FAILURE: %s *****\n\n", err, t.GoArch) + } else { + fmt.Printf("----- SUCCESS: %s -----\n\n", t.GoArch) + } + } + + fmt.Printf("----- GENERATING ptrace pairs -----\n") + ok := true + for _, p := range ptracePairs { + if err := generatePtracePair(p.a1, p.a2); err != nil { + fmt.Printf("%v\n***** FAILURE: %s/%s *****\n\n", err, p.a1, p.a2) + ok = false + } + } + if ok { + fmt.Printf("----- SUCCESS ptrace pairs -----\n\n") + } +} + +// Makes an exec.Cmd with Stderr attached to os.Stderr +func makeCommand(name string, args ...string) *exec.Cmd { + cmd := exec.Command(name, args...) + cmd.Stderr = os.Stderr + return cmd +} + +// Runs the command, pipes output to a formatter, pipes that to an output file. +func (t *target) commandFormatOutput(formatter string, outputFile string, + name string, args ...string) (err error) { + mainCmd := makeCommand(name, args...) + + fmtCmd := makeCommand(formatter) + if formatter == "mkpost" { + fmtCmd = makeCommand("go", "run", "mkpost.go") + // Set GOARCH_TARGET so mkpost knows what GOARCH is.. + fmtCmd.Env = append(os.Environ(), "GOARCH_TARGET="+t.GoArch) + // Set GOARCH to host arch for mkpost, so it can run natively. + for i, s := range fmtCmd.Env { + if strings.HasPrefix(s, "GOARCH=") { + fmtCmd.Env[i] = "GOARCH=" + BuildArch + } + } + } + + // mainCmd | fmtCmd > outputFile + if fmtCmd.Stdin, err = mainCmd.StdoutPipe(); err != nil { + return + } + if fmtCmd.Stdout, err = os.Create(outputFile); err != nil { + return + } + + // Make sure the formatter eventually closes + if err = fmtCmd.Start(); err != nil { + return + } + defer func() { + fmtErr := fmtCmd.Wait() + if err == nil { + err = fmtErr + } + }() + + return mainCmd.Run() +} + +// Generates all the files for a Linux target +func (t *target) generateFiles() error { + // Setup environment variables + os.Setenv("GOOS", GOOS) + os.Setenv("GOARCH", t.GoArch) + + // Get appropriate compiler and emulator (unless on x86) + if t.LinuxArch != "x86" { + // Check/Setup cross compiler + compiler := t.GNUArch + "-gcc" + if _, err := exec.LookPath(compiler); err != nil { + return err + } + os.Setenv("CC", compiler) + + // Check/Setup emulator (usually first component of GNUArch) + qemuArchName := t.GNUArch[:strings.Index(t.GNUArch, "-")] + if t.LinuxArch == "powerpc" { + qemuArchName = t.GoArch + } + os.Setenv("GORUN", "qemu-"+qemuArchName) + } else { + os.Setenv("CC", "gcc") + } + + // Make the include directory and fill it with headers + if err := os.MkdirAll(IncludeDir, os.ModePerm); err != nil { + return err + } + defer os.RemoveAll(IncludeDir) + if err := t.makeHeaders(); err != nil { + return fmt.Errorf("could not make header files: %v", err) + } + fmt.Println("header files generated") + + // Make each of the four files + if err := t.makeZSysnumFile(); err != nil { + return fmt.Errorf("could not make zsysnum file: %v", err) + } + fmt.Println("zsysnum file generated") + + if err := t.makeZSyscallFile(); err != nil { + return fmt.Errorf("could not make zsyscall file: %v", err) + } + fmt.Println("zsyscall file generated") + + if err := t.makeZTypesFile(); err != nil { + return fmt.Errorf("could not make ztypes file: %v", err) + } + fmt.Println("ztypes file generated") + + if err := t.makeZErrorsFile(); err != nil { + return fmt.Errorf("could not make zerrors file: %v", err) + } + fmt.Println("zerrors file generated") + + return nil +} + +// Create the Linux and glibc headers in the include directory. +func (t *target) makeHeaders() error { + // Make the Linux headers we need for this architecture + linuxMake := makeCommand("make", "headers_install", "ARCH="+t.LinuxArch, "INSTALL_HDR_PATH="+TempDir) + linuxMake.Dir = LinuxDir + if err := linuxMake.Run(); err != nil { + return err + } + + // A Temporary build directory for glibc + if err := os.MkdirAll(BuildDir, os.ModePerm); err != nil { + return err + } + defer os.RemoveAll(BuildDir) + + // Make the glibc headers we need for this architecture + confScript := filepath.Join(GlibcDir, "configure") + glibcConf := makeCommand(confScript, "--prefix="+TempDir, "--host="+t.GNUArch, "--enable-kernel="+MinKernel) + glibcConf.Dir = BuildDir + if err := glibcConf.Run(); err != nil { + return err + } + glibcMake := makeCommand("make", "install-headers") + glibcMake.Dir = BuildDir + if err := glibcMake.Run(); err != nil { + return err + } + // We only need an empty stubs file + stubsFile := filepath.Join(IncludeDir, "gnu/stubs.h") + if file, err := os.Create(stubsFile); err != nil { + return err + } else { + file.Close() + } + + return nil +} + +// makes the zsysnum_linux_$GOARCH.go file +func (t *target) makeZSysnumFile() error { + zsysnumFile := fmt.Sprintf("zsysnum_linux_%s.go", t.GoArch) + unistdFile := filepath.Join(IncludeDir, "asm/unistd.h") + + args := append(t.cFlags(), unistdFile) + return t.commandFormatOutput("gofmt", zsysnumFile, "linux/mksysnum.pl", args...) +} + +// makes the zsyscall_linux_$GOARCH.go file +func (t *target) makeZSyscallFile() error { + zsyscallFile := fmt.Sprintf("zsyscall_linux_%s.go", t.GoArch) + // Find the correct architecture syscall file (might end with x.go) + archSyscallFile := fmt.Sprintf("syscall_linux_%s.go", t.GoArch) + if _, err := os.Stat(archSyscallFile); os.IsNotExist(err) { + shortArch := strings.TrimSuffix(t.GoArch, "le") + archSyscallFile = fmt.Sprintf("syscall_linux_%sx.go", shortArch) + } + + args := append(t.mksyscallFlags(), "-tags", "linux,"+t.GoArch, + "syscall_linux.go", archSyscallFile) + return t.commandFormatOutput("gofmt", zsyscallFile, "./mksyscall.pl", args...) +} + +// makes the zerrors_linux_$GOARCH.go file +func (t *target) makeZErrorsFile() error { + zerrorsFile := fmt.Sprintf("zerrors_linux_%s.go", t.GoArch) + + return t.commandFormatOutput("gofmt", zerrorsFile, "./mkerrors.sh", t.cFlags()...) +} + +// makes the ztypes_linux_$GOARCH.go file +func (t *target) makeZTypesFile() error { + ztypesFile := fmt.Sprintf("ztypes_linux_%s.go", t.GoArch) + + args := []string{"tool", "cgo", "-godefs", "--"} + args = append(args, t.cFlags()...) + args = append(args, "linux/types.go") + return t.commandFormatOutput("mkpost", ztypesFile, "go", args...) +} + +// Flags that should be given to gcc and cgo for this target +func (t *target) cFlags() []string { + // Compile statically to avoid cross-architecture dynamic linking. + flags := []string{"-Wall", "-Werror", "-static", "-I" + IncludeDir} + + // Architecture-specific flags + if t.SignedChar { + flags = append(flags, "-fsigned-char") + } + if t.LinuxArch == "x86" { + flags = append(flags, fmt.Sprintf("-m%d", t.Bits)) + } + + return flags +} + +// Flags that should be given to mksyscall for this target +func (t *target) mksyscallFlags() (flags []string) { + if t.Bits == 32 { + if t.BigEndian { + flags = append(flags, "-b32") + } else { + flags = append(flags, "-l32") + } + } + + // This flag menas a 64-bit value should use (even, odd)-pair. + if t.GoArch == "arm" || (t.LinuxArch == "mips" && t.Bits == 32) { + flags = append(flags, "-arm") + } + return +} + +// generatePtracePair takes a pair of GOARCH values that can run each +// other's binaries, such as 386 and amd64. It extracts the PtraceRegs +// type for each one. It writes a new file defining the types +// PtraceRegsArch1 and PtraceRegsArch2 and the corresponding functions +// Ptrace{Get,Set}Regs{arch1,arch2}. This permits debugging the other +// binary on a native system. +func generatePtracePair(arch1, arch2 string) error { + def1, err := ptraceDef(arch1) + if err != nil { + return err + } + def2, err := ptraceDef(arch2) + if err != nil { + return err + } + f, err := os.Create(fmt.Sprintf("zptrace%s_linux.go", arch1)) + if err != nil { + return err + } + buf := bufio.NewWriter(f) + fmt.Fprintf(buf, "// Code generated by linux/mkall.go generatePtracePair(%s, %s). DO NOT EDIT.\n", arch1, arch2) + fmt.Fprintf(buf, "\n") + fmt.Fprintf(buf, "// +build linux\n") + fmt.Fprintf(buf, "// +build %s %s\n", arch1, arch2) + fmt.Fprintf(buf, "\n") + fmt.Fprintf(buf, "package unix\n") + fmt.Fprintf(buf, "\n") + fmt.Fprintf(buf, "%s\n", `import "unsafe"`) + fmt.Fprintf(buf, "\n") + writeOnePtrace(buf, arch1, def1) + fmt.Fprintf(buf, "\n") + writeOnePtrace(buf, arch2, def2) + if err := buf.Flush(); err != nil { + return err + } + if err := f.Close(); err != nil { + return err + } + return nil +} + +// ptraceDef returns the definition of PtraceRegs for arch. +func ptraceDef(arch string) (string, error) { + filename := fmt.Sprintf("ztypes_linux_%s.go", arch) + data, err := ioutil.ReadFile(filename) + if err != nil { + return "", fmt.Errorf("reading %s: %v", filename, err) + } + start := bytes.Index(data, []byte("type PtraceRegs struct")) + if start < 0 { + return "", fmt.Errorf("%s: no definition of PtraceRegs", filename) + } + data = data[start:] + end := bytes.Index(data, []byte("\n}\n")) + if end < 0 { + return "", fmt.Errorf("%s: can't find end of PtraceRegs definition", filename) + } + return string(data[:end+2]), nil +} + +// writeOnePtrace writes out the ptrace definitions for arch. +func writeOnePtrace(w io.Writer, arch, def string) { + uarch := string(unicode.ToUpper(rune(arch[0]))) + arch[1:] + fmt.Fprintf(w, "// PtraceRegs%s is the registers used by %s binaries.\n", uarch, arch) + fmt.Fprintf(w, "%s\n", strings.Replace(def, "PtraceRegs", "PtraceRegs"+uarch, 1)) + fmt.Fprintf(w, "\n") + fmt.Fprintf(w, "// PtraceGetRegs%s fetches the registers used by %s binaries.\n", uarch, arch) + fmt.Fprintf(w, "func PtraceGetRegs%s(pid int, regsout *PtraceRegs%s) error {\n", uarch, uarch) + fmt.Fprintf(w, "\treturn ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout)))\n") + fmt.Fprintf(w, "}\n") + fmt.Fprintf(w, "\n") + fmt.Fprintf(w, "// PtraceSetRegs%s sets the registers used by %s binaries.\n", uarch, arch) + fmt.Fprintf(w, "func PtraceSetRegs%s(pid int, regs *PtraceRegs%s) error {\n", uarch, uarch) + fmt.Fprintf(w, "\treturn ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs)))\n") + fmt.Fprintf(w, "}\n") +} diff --git a/vendor/golang.org/x/sys/unix/linux/mksysnum.pl b/vendor/golang.org/x/sys/unix/linux/mksysnum.pl new file mode 100755 index 0000000..63fd800 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/linux/mksysnum.pl @@ -0,0 +1,85 @@ +#!/usr/bin/env perl +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +use strict; + +if($ENV{'GOARCH'} eq "" || $ENV{'GOOS'} eq "") { + print STDERR "GOARCH or GOOS not defined in environment\n"; + exit 1; +} + +# Check that we are using the new build system if we should +if($ENV{'GOLANG_SYS_BUILD'} ne "docker") { + print STDERR "In the new build system, mksysnum should not be called directly.\n"; + print STDERR "See README.md\n"; + exit 1; +} + +my $command = "$0 ". join(' ', @ARGV); + +print < 999){ + # ignore deprecated syscalls that are no longer implemented + # https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/asm-generic/unistd.h?id=refs/heads/master#n716 + return; + } + $name =~ y/a-z/A-Z/; + $num = $num + $offset; + print " SYS_$name = $num;\n"; +} + +my $prev; +open(CC, "$ENV{'CC'} -E -dD @ARGV |") || die "can't run $ENV{'CC'}"; +while(){ + if(/^#define __NR_Linux\s+([0-9]+)/){ + # mips/mips64: extract offset + $offset = $1; + } + elsif(/^#define __NR(\w*)_SYSCALL_BASE\s+([0-9]+)/){ + # arm: extract offset + $offset = $1; + } + elsif(/^#define __NR_syscalls\s+/) { + # ignore redefinitions of __NR_syscalls + } + elsif(/^#define __NR_(\w*)Linux_syscalls\s+/) { + # mips/mips64: ignore definitions about the number of syscalls + } + elsif(/^#define __NR_(\w+)\s+([0-9]+)/){ + $prev = $2; + fmt($1, $2); + } + elsif(/^#define __NR3264_(\w+)\s+([0-9]+)/){ + $prev = $2; + fmt($1, $2); + } + elsif(/^#define __NR_(\w+)\s+\(\w+\+\s*([0-9]+)\)/){ + fmt($1, $prev+$2) + } + elsif(/^#define __NR_(\w+)\s+\(__NR_Linux \+ ([0-9]+)/){ + fmt($1, $2); + } + elsif(/^#define __NR_(\w+)\s+\(__NR_SYSCALL_BASE \+ ([0-9]+)/){ + fmt($1, $2); + } +} + +print < +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// On mips64, the glibc stat and kernel stat do not agree +#if (defined(__mips__) && _MIPS_SIM == _MIPS_SIM_ABI64) + +// Use the stat defined by the kernel with a few modifications. These are: +// * The time fields (like st_atime and st_atimensec) use the timespec +// struct (like st_atim) for consitancy with the glibc fields. +// * The padding fields get different names to not break compatibility. +// * st_blocks is signed, again for compatibility. +struct stat { + unsigned int st_dev; + unsigned int st_pad1[3]; // Reserved for st_dev expansion + + unsigned long st_ino; + + mode_t st_mode; + __u32 st_nlink; + + uid_t st_uid; + gid_t st_gid; + + unsigned int st_rdev; + unsigned int st_pad2[3]; // Reserved for st_rdev expansion + + off_t st_size; + + // These are declared as speperate fields in the kernel. Here we use + // the timespec struct for consistancy with the other stat structs. + struct timespec st_atim; + struct timespec st_mtim; + struct timespec st_ctim; + + unsigned int st_blksize; + unsigned int st_pad4; + + long st_blocks; +}; + +// These are needed because we do not include fcntl.h or sys/types.h +#include +#include + +#else + +// Use the stat defined by glibc +#include +#include + +#endif + +#ifdef TCSETS2 +// On systems that have "struct termios2" use this as type Termios. +typedef struct termios2 termios_t; +#else +typedef struct termios termios_t; +#endif + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_ll s5; + struct sockaddr_nl s6; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +// copied from /usr/include/bluetooth/hci.h +struct sockaddr_hci { + sa_family_t hci_family; + unsigned short hci_dev; + unsigned short hci_channel; +};; + +// copied from /usr/include/linux/un.h +struct my_sockaddr_un { + sa_family_t sun_family; +#if defined(__ARM_EABI__) || defined(__powerpc64__) + // on ARM char is by default unsigned + signed char sun_path[108]; +#else + char sun_path[108]; +#endif +}; + +#ifdef __ARM_EABI__ +typedef struct user_regs PtraceRegs; +#elif defined(__aarch64__) +typedef struct user_pt_regs PtraceRegs; +#elif defined(__mips__) || defined(__powerpc64__) +typedef struct pt_regs PtraceRegs; +#elif defined(__s390x__) +typedef struct _user_regs_struct PtraceRegs; +#elif defined(__sparc__) +#include +typedef struct pt_regs PtraceRegs; +#else +typedef struct user_regs_struct PtraceRegs; +#endif + +#if defined(__s390x__) +typedef struct _user_psw_struct ptracePsw; +typedef struct _user_fpregs_struct ptraceFpregs; +typedef struct _user_per_struct ptracePer; +#else +typedef struct {} ptracePsw; +typedef struct {} ptraceFpregs; +typedef struct {} ptracePer; +#endif + +// The real epoll_event is a union, and godefs doesn't handle it well. +struct my_epoll_event { + uint32_t events; +#if defined(__ARM_EABI__) || defined(__aarch64__) || (defined(__mips__) && _MIPS_SIM == _ABIO32) + // padding is not specified in linux/eventpoll.h but added to conform to the + // alignment requirements of EABI + int32_t padFd; +#elif defined(__powerpc64__) || defined(__s390x__) || defined(__sparc__) + int32_t _padFd; +#endif + int32_t fd; + int32_t pad; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong + PathMax = C.PATH_MAX +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +type Timex C.struct_timex + +type Time_t C.time_t + +type Tms C.struct_tms + +type Utimbuf C.struct_utimbuf + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Dirent C.struct_dirent + +type Fsid C.fsid_t + +type Flock_t C.struct_flock + +// Filesystem Encryption + +type FscryptPolicy C.struct_fscrypt_policy + +type FscryptKey C.struct_fscrypt_key + +// Structure for Keyctl + +type KeyctlDHParams C.struct_keyctl_dh_params + +// Advice to Fadvise + +const ( + FADV_NORMAL = C.POSIX_FADV_NORMAL + FADV_RANDOM = C.POSIX_FADV_RANDOM + FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL + FADV_WILLNEED = C.POSIX_FADV_WILLNEED + FADV_DONTNEED = C.POSIX_FADV_DONTNEED + FADV_NOREUSE = C.POSIX_FADV_NOREUSE +) + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_my_sockaddr_un + +type RawSockaddrLinklayer C.struct_sockaddr_ll + +type RawSockaddrNetlink C.struct_sockaddr_nl + +type RawSockaddrHCI C.struct_sockaddr_hci + +type RawSockaddrCAN C.struct_sockaddr_can + +type RawSockaddrALG C.struct_sockaddr_alg + +type RawSockaddrVM C.struct_sockaddr_vm + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPMreqn C.struct_ip_mreqn + +type IPv6Mreq C.struct_ipv6_mreq + +type PacketMreq C.struct_packet_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet4Pktinfo C.struct_in_pktinfo + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +type Ucred C.struct_ucred + +type TCPInfo C.struct_tcp_info + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrLinklayer = C.sizeof_struct_sockaddr_ll + SizeofSockaddrNetlink = C.sizeof_struct_sockaddr_nl + SizeofSockaddrHCI = C.sizeof_struct_sockaddr_hci + SizeofSockaddrCAN = C.sizeof_struct_sockaddr_can + SizeofSockaddrALG = C.sizeof_struct_sockaddr_alg + SizeofSockaddrVM = C.sizeof_struct_sockaddr_vm + SizeofLinger = C.sizeof_struct_linger + SizeofIovec = C.sizeof_struct_iovec + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPMreqn = C.sizeof_struct_ip_mreqn + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofPacketMreq = C.sizeof_struct_packet_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter + SizeofUcred = C.sizeof_struct_ucred + SizeofTCPInfo = C.sizeof_struct_tcp_info +) + +// Netlink routing and interface messages + +const ( + IFA_UNSPEC = C.IFA_UNSPEC + IFA_ADDRESS = C.IFA_ADDRESS + IFA_LOCAL = C.IFA_LOCAL + IFA_LABEL = C.IFA_LABEL + IFA_BROADCAST = C.IFA_BROADCAST + IFA_ANYCAST = C.IFA_ANYCAST + IFA_CACHEINFO = C.IFA_CACHEINFO + IFA_MULTICAST = C.IFA_MULTICAST + IFLA_UNSPEC = C.IFLA_UNSPEC + IFLA_ADDRESS = C.IFLA_ADDRESS + IFLA_BROADCAST = C.IFLA_BROADCAST + IFLA_IFNAME = C.IFLA_IFNAME + IFLA_MTU = C.IFLA_MTU + IFLA_LINK = C.IFLA_LINK + IFLA_QDISC = C.IFLA_QDISC + IFLA_STATS = C.IFLA_STATS + IFLA_COST = C.IFLA_COST + IFLA_PRIORITY = C.IFLA_PRIORITY + IFLA_MASTER = C.IFLA_MASTER + IFLA_WIRELESS = C.IFLA_WIRELESS + IFLA_PROTINFO = C.IFLA_PROTINFO + IFLA_TXQLEN = C.IFLA_TXQLEN + IFLA_MAP = C.IFLA_MAP + IFLA_WEIGHT = C.IFLA_WEIGHT + IFLA_OPERSTATE = C.IFLA_OPERSTATE + IFLA_LINKMODE = C.IFLA_LINKMODE + IFLA_LINKINFO = C.IFLA_LINKINFO + IFLA_NET_NS_PID = C.IFLA_NET_NS_PID + IFLA_IFALIAS = C.IFLA_IFALIAS + IFLA_MAX = C.IFLA_MAX + RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE + RT_SCOPE_SITE = C.RT_SCOPE_SITE + RT_SCOPE_LINK = C.RT_SCOPE_LINK + RT_SCOPE_HOST = C.RT_SCOPE_HOST + RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE + RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC + RT_TABLE_COMPAT = C.RT_TABLE_COMPAT + RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT + RT_TABLE_MAIN = C.RT_TABLE_MAIN + RT_TABLE_LOCAL = C.RT_TABLE_LOCAL + RT_TABLE_MAX = C.RT_TABLE_MAX + RTA_UNSPEC = C.RTA_UNSPEC + RTA_DST = C.RTA_DST + RTA_SRC = C.RTA_SRC + RTA_IIF = C.RTA_IIF + RTA_OIF = C.RTA_OIF + RTA_GATEWAY = C.RTA_GATEWAY + RTA_PRIORITY = C.RTA_PRIORITY + RTA_PREFSRC = C.RTA_PREFSRC + RTA_METRICS = C.RTA_METRICS + RTA_MULTIPATH = C.RTA_MULTIPATH + RTA_FLOW = C.RTA_FLOW + RTA_CACHEINFO = C.RTA_CACHEINFO + RTA_TABLE = C.RTA_TABLE + RTN_UNSPEC = C.RTN_UNSPEC + RTN_UNICAST = C.RTN_UNICAST + RTN_LOCAL = C.RTN_LOCAL + RTN_BROADCAST = C.RTN_BROADCAST + RTN_ANYCAST = C.RTN_ANYCAST + RTN_MULTICAST = C.RTN_MULTICAST + RTN_BLACKHOLE = C.RTN_BLACKHOLE + RTN_UNREACHABLE = C.RTN_UNREACHABLE + RTN_PROHIBIT = C.RTN_PROHIBIT + RTN_THROW = C.RTN_THROW + RTN_NAT = C.RTN_NAT + RTN_XRESOLVE = C.RTN_XRESOLVE + RTNLGRP_NONE = C.RTNLGRP_NONE + RTNLGRP_LINK = C.RTNLGRP_LINK + RTNLGRP_NOTIFY = C.RTNLGRP_NOTIFY + RTNLGRP_NEIGH = C.RTNLGRP_NEIGH + RTNLGRP_TC = C.RTNLGRP_TC + RTNLGRP_IPV4_IFADDR = C.RTNLGRP_IPV4_IFADDR + RTNLGRP_IPV4_MROUTE = C.RTNLGRP_IPV4_MROUTE + RTNLGRP_IPV4_ROUTE = C.RTNLGRP_IPV4_ROUTE + RTNLGRP_IPV4_RULE = C.RTNLGRP_IPV4_RULE + RTNLGRP_IPV6_IFADDR = C.RTNLGRP_IPV6_IFADDR + RTNLGRP_IPV6_MROUTE = C.RTNLGRP_IPV6_MROUTE + RTNLGRP_IPV6_ROUTE = C.RTNLGRP_IPV6_ROUTE + RTNLGRP_IPV6_IFINFO = C.RTNLGRP_IPV6_IFINFO + RTNLGRP_IPV6_PREFIX = C.RTNLGRP_IPV6_PREFIX + RTNLGRP_IPV6_RULE = C.RTNLGRP_IPV6_RULE + RTNLGRP_ND_USEROPT = C.RTNLGRP_ND_USEROPT + SizeofNlMsghdr = C.sizeof_struct_nlmsghdr + SizeofNlMsgerr = C.sizeof_struct_nlmsgerr + SizeofRtGenmsg = C.sizeof_struct_rtgenmsg + SizeofNlAttr = C.sizeof_struct_nlattr + SizeofRtAttr = C.sizeof_struct_rtattr + SizeofIfInfomsg = C.sizeof_struct_ifinfomsg + SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg + SizeofRtMsg = C.sizeof_struct_rtmsg + SizeofRtNexthop = C.sizeof_struct_rtnexthop +) + +type NlMsghdr C.struct_nlmsghdr + +type NlMsgerr C.struct_nlmsgerr + +type RtGenmsg C.struct_rtgenmsg + +type NlAttr C.struct_nlattr + +type RtAttr C.struct_rtattr + +type IfInfomsg C.struct_ifinfomsg + +type IfAddrmsg C.struct_ifaddrmsg + +type RtMsg C.struct_rtmsg + +type RtNexthop C.struct_rtnexthop + +// Linux socket filter + +const ( + SizeofSockFilter = C.sizeof_struct_sock_filter + SizeofSockFprog = C.sizeof_struct_sock_fprog +) + +type SockFilter C.struct_sock_filter + +type SockFprog C.struct_sock_fprog + +// Inotify + +type InotifyEvent C.struct_inotify_event + +const SizeofInotifyEvent = C.sizeof_struct_inotify_event + +// Ptrace + +// Register structures +type PtraceRegs C.PtraceRegs + +// Structures contained in PtraceRegs on s390x (exported by mkpost.go) +type PtracePsw C.ptracePsw + +type PtraceFpregs C.ptraceFpregs + +type PtracePer C.ptracePer + +// Misc + +type FdSet C.fd_set + +type Sysinfo_t C.struct_sysinfo + +type Utsname C.struct_utsname + +type Ustat_t C.struct_ustat + +type EpollEvent C.struct_my_epoll_event + +const ( + AT_FDCWD = C.AT_FDCWD + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +type PollFd C.struct_pollfd + +const ( + POLLIN = C.POLLIN + POLLPRI = C.POLLPRI + POLLOUT = C.POLLOUT + POLLRDHUP = C.POLLRDHUP + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLNVAL = C.POLLNVAL +) + +type Sigset_t C.sigset_t + +const RNDGETENTCNT = C.RNDGETENTCNT + +const PERF_IOC_FLAG_GROUP = C.PERF_IOC_FLAG_GROUP + +// Terminal handling + +type Termios C.termios_t + +type Winsize C.struct_winsize + +// Taskstats + +type Taskstats C.struct_taskstats + +const ( + TASKSTATS_CMD_UNSPEC = C.TASKSTATS_CMD_UNSPEC + TASKSTATS_CMD_GET = C.TASKSTATS_CMD_GET + TASKSTATS_CMD_NEW = C.TASKSTATS_CMD_NEW + TASKSTATS_TYPE_UNSPEC = C.TASKSTATS_TYPE_UNSPEC + TASKSTATS_TYPE_PID = C.TASKSTATS_TYPE_PID + TASKSTATS_TYPE_TGID = C.TASKSTATS_TYPE_TGID + TASKSTATS_TYPE_STATS = C.TASKSTATS_TYPE_STATS + TASKSTATS_TYPE_AGGR_PID = C.TASKSTATS_TYPE_AGGR_PID + TASKSTATS_TYPE_AGGR_TGID = C.TASKSTATS_TYPE_AGGR_TGID + TASKSTATS_TYPE_NULL = C.TASKSTATS_TYPE_NULL + TASKSTATS_CMD_ATTR_UNSPEC = C.TASKSTATS_CMD_ATTR_UNSPEC + TASKSTATS_CMD_ATTR_PID = C.TASKSTATS_CMD_ATTR_PID + TASKSTATS_CMD_ATTR_TGID = C.TASKSTATS_CMD_ATTR_TGID + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_REGISTER_CPUMASK + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = C.TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK +) + +// Generic netlink + +type Genlmsghdr C.struct_genlmsghdr + +const ( + CTRL_CMD_UNSPEC = C.CTRL_CMD_UNSPEC + CTRL_CMD_NEWFAMILY = C.CTRL_CMD_NEWFAMILY + CTRL_CMD_DELFAMILY = C.CTRL_CMD_DELFAMILY + CTRL_CMD_GETFAMILY = C.CTRL_CMD_GETFAMILY + CTRL_CMD_NEWOPS = C.CTRL_CMD_NEWOPS + CTRL_CMD_DELOPS = C.CTRL_CMD_DELOPS + CTRL_CMD_GETOPS = C.CTRL_CMD_GETOPS + CTRL_CMD_NEWMCAST_GRP = C.CTRL_CMD_NEWMCAST_GRP + CTRL_CMD_DELMCAST_GRP = C.CTRL_CMD_DELMCAST_GRP + CTRL_CMD_GETMCAST_GRP = C.CTRL_CMD_GETMCAST_GRP + CTRL_ATTR_UNSPEC = C.CTRL_ATTR_UNSPEC + CTRL_ATTR_FAMILY_ID = C.CTRL_ATTR_FAMILY_ID + CTRL_ATTR_FAMILY_NAME = C.CTRL_ATTR_FAMILY_NAME + CTRL_ATTR_VERSION = C.CTRL_ATTR_VERSION + CTRL_ATTR_HDRSIZE = C.CTRL_ATTR_HDRSIZE + CTRL_ATTR_MAXATTR = C.CTRL_ATTR_MAXATTR + CTRL_ATTR_OPS = C.CTRL_ATTR_OPS + CTRL_ATTR_MCAST_GROUPS = C.CTRL_ATTR_MCAST_GROUPS + CTRL_ATTR_OP_UNSPEC = C.CTRL_ATTR_OP_UNSPEC + CTRL_ATTR_OP_ID = C.CTRL_ATTR_OP_ID + CTRL_ATTR_OP_FLAGS = C.CTRL_ATTR_OP_FLAGS + CTRL_ATTR_MCAST_GRP_UNSPEC = C.CTRL_ATTR_MCAST_GRP_UNSPEC + CTRL_ATTR_MCAST_GRP_NAME = C.CTRL_ATTR_MCAST_GRP_NAME + CTRL_ATTR_MCAST_GRP_ID = C.CTRL_ATTR_MCAST_GRP_ID +) diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh new file mode 100755 index 0000000..00b7ce7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -0,0 +1,194 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This script runs or (given -n) prints suggested commands to generate files for +# the Architecture/OS specified by the GOARCH and GOOS environment variables. +# See README.md for more information about how the build system works. + +GOOSARCH="${GOOS}_${GOARCH}" + +# defaults +mksyscall="./mksyscall.pl" +mkerrors="./mkerrors.sh" +zerrors="zerrors_$GOOSARCH.go" +mksysctl="" +zsysctl="zsysctl_$GOOSARCH.go" +mksysnum= +mktypes= +run="sh" +cmd="" + +case "$1" in +-syscalls) + for i in zsyscall*go + do + # Run the command line that appears in the first line + # of the generated file to regenerate it. + sed 1q $i | sed 's;^// ;;' | sh > _$i && gofmt < _$i > $i + rm _$i + done + exit 0 + ;; +-n) + run="cat" + cmd="echo" + shift +esac + +case "$#" in +0) + ;; +*) + echo 'usage: mkall.sh [-n]' 1>&2 + exit 2 +esac + +if [[ "$GOOS" = "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then + # Use then new build system + # Files generated through docker (use $cmd so you can Ctl-C the build or run) + $cmd docker build --tag generate:$GOOS $GOOS + $cmd docker run --interactive --tty --volume $(dirname "$(readlink -f "$0")"):/build generate:$GOOS + exit +fi + +GOOSARCH_in=syscall_$GOOSARCH.go +case "$GOOSARCH" in +_* | *_ | _) + echo 'undefined $GOOS_$GOARCH:' "$GOOSARCH" 1>&2 + exit 1 + ;; +darwin_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_amd64) + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk macosx)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_arm) + mkerrors="$mkerrors" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +darwin_arm64) + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_darwin.pl $(xcrun --show-sdk-path --sdk iphoneos)/usr/include/sys/syscall.h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +dragonfly_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -dragonfly" + mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +dragonfly_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -dragonfly" + mksysnum="curl -s 'http://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/sys/kern/syscalls.master' | ./mksysnum_dragonfly.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_amd64) + mkerrors="$mkerrors -m64" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +freebsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -arm" + mksysnum="curl -s 'http://svn.freebsd.org/base/stable/10/sys/kern/syscalls.master' | ./mksysnum_freebsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +linux_sparc64) + GOOSARCH_in=syscall_linux_sparc64.go + unistd_h=/usr/include/sparc64-linux-gnu/asm/unistd.h + mkerrors="$mkerrors -m64" + mksysnum="./mksysnum_linux.pl $unistd_h" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -netbsd" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -netbsd" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +netbsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -netbsd -arm" + mksysnum="curl -s 'http://cvsweb.netbsd.org/bsdweb.cgi/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_netbsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +openbsd_386) + mkerrors="$mkerrors -m32" + mksyscall="./mksyscall.pl -l32 -openbsd" + mksysctl="./mksysctl_openbsd.pl" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_amd64) + mkerrors="$mkerrors -m64" + mksyscall="./mksyscall.pl -openbsd" + mksysctl="./mksysctl_openbsd.pl" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +openbsd_arm) + mkerrors="$mkerrors" + mksyscall="./mksyscall.pl -l32 -openbsd -arm" + mksysctl="./mksysctl_openbsd.pl" + mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl" + # Let the type of C char be signed for making the bare syscall + # API consistent across platforms. + mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char" + ;; +solaris_amd64) + mksyscall="./mksyscall_solaris.pl" + mkerrors="$mkerrors -m64" + mksysnum= + mktypes="GOARCH=$GOARCH go tool cgo -godefs" + ;; +*) + echo 'unrecognized $GOOS_$GOARCH: ' "$GOOSARCH" 1>&2 + exit 1 + ;; +esac + +( + if [ -n "$mkerrors" ]; then echo "$mkerrors |gofmt >$zerrors"; fi + case "$GOOS" in + *) + syscall_goos="syscall_$GOOS.go" + case "$GOOS" in + darwin | dragonfly | freebsd | netbsd | openbsd) + syscall_goos="syscall_bsd.go $syscall_goos" + ;; + esac + if [ -n "$mksyscall" ]; then echo "$mksyscall -tags $GOOS,$GOARCH $syscall_goos $GOOSARCH_in |gofmt >zsyscall_$GOOSARCH.go"; fi + ;; + esac + if [ -n "$mksysctl" ]; then echo "$mksysctl |gofmt >$zsysctl"; fi + if [ -n "$mksysnum" ]; then echo "$mksysnum |gofmt >zsysnum_$GOOSARCH.go"; fi + if [ -n "$mktypes" ]; then + echo "$mktypes types_$GOOS.go | go run mkpost.go > ztypes_$GOOSARCH.go"; + fi +) | $run diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh new file mode 100755 index 0000000..4ddd4ff --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -0,0 +1,573 @@ +#!/usr/bin/env bash +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# Generate Go code listing errors and other #defined constant +# values (ENAMETOOLONG etc.), by asking the preprocessor +# about the definitions. + +unset LANG +export LC_ALL=C +export LC_CTYPE=C + +if test -z "$GOARCH" -o -z "$GOOS"; then + echo 1>&2 "GOARCH or GOOS not defined in environment" + exit 1 +fi + +# Check that we are using the new build system if we should +if [[ "$GOOS" = "linux" ]] && [[ "$GOARCH" != "sparc64" ]]; then + if [[ "$GOLANG_SYS_BUILD" != "docker" ]]; then + echo 1>&2 "In the new build system, mkerrors should not be called directly." + echo 1>&2 "See README.md" + exit 1 + fi +fi + +CC=${CC:-cc} + +if [[ "$GOOS" = "solaris" ]]; then + # Assumes GNU versions of utilities in PATH. + export PATH=/usr/gnu/bin:$PATH +fi + +uname=$(uname) + +includes_Darwin=' +#define _DARWIN_C_SOURCE +#define KERNEL +#define _DARWIN_USE_64_BIT_INODE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +includes_DragonFly=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + +includes_FreeBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if __FreeBSD__ >= 10 +#define IFT_CARP 0xf8 // IFT_CARP is deprecated in FreeBSD 10 +#undef SIOCAIFADDR +#define SIOCAIFADDR _IOW(105, 26, struct oifaliasreq) // ifaliasreq contains if_data +#undef SIOCSIFPHYADDR +#define SIOCSIFPHYADDR _IOW(105, 70, struct oifaliasreq) // ifaliasreq contains if_data +#endif +' + +includes_Linux=' +#define _LARGEFILE_SOURCE +#define _LARGEFILE64_SOURCE +#ifndef __LP64__ +#define _FILE_OFFSET_BITS 64 +#endif +#define _GNU_SOURCE + +// is broken on powerpc64, as it fails to include definitions of +// these structures. We just include them copied from . +#if defined(__powerpc__) +struct sgttyb { + char sg_ispeed; + char sg_ospeed; + char sg_erase; + char sg_kill; + short sg_flags; +}; + +struct tchars { + char t_intrc; + char t_quitc; + char t_startc; + char t_stopc; + char t_eofc; + char t_brkc; +}; + +struct ltchars { + char t_suspc; + char t_dsuspc; + char t_rprntc; + char t_flushc; + char t_werasc; + char t_lnextc; +}; +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef MSG_FASTOPEN +#define MSG_FASTOPEN 0x20000000 +#endif + +#ifndef PTRACE_GETREGS +#define PTRACE_GETREGS 0xc +#endif + +#ifndef PTRACE_SETREGS +#define PTRACE_SETREGS 0xd +#endif + +#ifndef SOL_NETLINK +#define SOL_NETLINK 270 +#endif + +#ifdef SOL_BLUETOOTH +// SPARC includes this in /usr/include/sparc64-linux-gnu/bits/socket.h +// but it is already in bluetooth_linux.go +#undef SOL_BLUETOOTH +#endif + +// Certain constants are missing from the fs/crypto UAPI +#define FS_KEY_DESC_PREFIX "fscrypt:" +#define FS_KEY_DESC_PREFIX_SIZE 8 +#define FS_MAX_KEY_SIZE 64 +' + +includes_NetBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Needed since refers to it... +#define schedppq 1 +' + +includes_OpenBSD=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// We keep some constants not supported in OpenBSD 5.5 and beyond for +// the promise of compatibility. +#define EMUL_ENABLED 0x1 +#define EMUL_NATIVE 0x2 +#define IPV6_FAITH 0x1d +#define IPV6_OPTIONS 0x1 +#define IPV6_RTHDR_STRICT 0x1 +#define IPV6_SOCKOPT_RESERVED1 0x3 +#define SIOCGIFGENERIC 0xc020693a +#define SIOCSIFGENERIC 0x80206939 +#define WALTSIG 0x4 +' + +includes_SunOS=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' + + +includes=' +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +' +ccflags="$@" + +# Write go tool cgo -godefs input. +( + echo package unix + echo + echo '/*' + indirect="includes_$(uname)" + echo "${!indirect} $includes" + echo '*/' + echo 'import "C"' + echo 'import "syscall"' + echo + echo 'const (' + + # The gcc command line prints all the #defines + # it encounters while processing the input + echo "${!indirect} $includes" | $CC -x c - -E -dM $ccflags | + awk ' + $1 != "#define" || $2 ~ /\(/ || $3 == "" {next} + + $2 ~ /^E([ABCD]X|[BIS]P|[SD]I|S|FL)$/ {next} # 386 registers + $2 ~ /^(SIGEV_|SIGSTKSZ|SIGRT(MIN|MAX))/ {next} + $2 ~ /^(SCM_SRCRT)$/ {next} + $2 ~ /^(MAP_FAILED)$/ {next} + $2 ~ /^ELF_.*$/ {next}# contains ELF_ARCH, etc. + + $2 ~ /^EXTATTR_NAMESPACE_NAMES/ || + $2 ~ /^EXTATTR_NAMESPACE_[A-Z]+_STRING/ {next} + + $2 !~ /^ETH_/ && + $2 !~ /^EPROC_/ && + $2 !~ /^EQUIV_/ && + $2 !~ /^EXPR_/ && + $2 ~ /^E[A-Z0-9_]+$/ || + $2 ~ /^B[0-9_]+$/ || + $2 ~ /^(OLD|NEW)DEV$/ || + $2 == "BOTHER" || + $2 ~ /^CI?BAUD(EX)?$/ || + $2 == "IBSHIFT" || + $2 ~ /^V[A-Z0-9]+$/ || + $2 ~ /^CS[A-Z0-9]/ || + $2 ~ /^I(SIG|CANON|CRNL|UCLC|EXTEN|MAXBEL|STRIP|UTF8)$/ || + $2 ~ /^IGN/ || + $2 ~ /^IX(ON|ANY|OFF)$/ || + $2 ~ /^IN(LCR|PCK)$/ || + $2 ~ /(^FLU?SH)|(FLU?SH$)/ || + $2 ~ /^C(LOCAL|READ|MSPAR|RTSCTS)$/ || + $2 == "BRKINT" || + $2 == "HUPCL" || + $2 == "PENDIN" || + $2 == "TOSTOP" || + $2 == "XCASE" || + $2 == "ALTWERASE" || + $2 == "NOKERNINFO" || + $2 ~ /^PAR/ || + $2 ~ /^SIG[^_]/ || + $2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ || + $2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ || + $2 ~ /^O?XTABS$/ || + $2 ~ /^TC[IO](ON|OFF)$/ || + $2 ~ /^IN_/ || + $2 ~ /^LOCK_(SH|EX|NB|UN)$/ || + $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|ICMP6|TCP|EVFILT|NOTE|EV|SHUT|PROT|MAP|PACKET|MSG|SCM|MCL|DT|MADV|PR)_/ || + $2 ~ /^FALLOC_/ || + $2 == "ICMPV6_FILTER" || + $2 == "SOMAXCONN" || + $2 == "NAME_MAX" || + $2 == "IFNAMSIZ" || + $2 ~ /^CTL_(MAXNAME|NET|QUERY)$/ || + $2 ~ /^SYSCTL_VERS/ || + $2 ~ /^(MS|MNT|UMOUNT)_/ || + $2 ~ /^TUN(SET|GET|ATTACH|DETACH)/ || + $2 ~ /^(O|F|E?FD|NAME|S|PTRACE|PT)_/ || + $2 ~ /^LINUX_REBOOT_CMD_/ || + $2 ~ /^LINUX_REBOOT_MAGIC[12]$/ || + $2 !~ "NLA_TYPE_MASK" && + $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P)_/ || + $2 ~ /^SIOC/ || + $2 ~ /^TIOC/ || + $2 ~ /^TCGET/ || + $2 ~ /^TCSET/ || + $2 ~ /^TC(FLSH|SBRKP?|XONC)$/ || + $2 !~ "RTF_BITS" && + $2 ~ /^(IFF|IFT|NET_RT|RTM|RTF|RTV|RTA|RTAX)_/ || + $2 ~ /^BIOC/ || + $2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ || + $2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ || + $2 ~ /^PRIO_(PROCESS|PGRP|USER)/ || + $2 ~ /^CLONE_[A-Z_]+/ || + $2 !~ /^(BPF_TIMEVAL)$/ && + $2 ~ /^(BPF|DLT)_/ || + $2 ~ /^CLOCK_/ || + $2 ~ /^CAN_/ || + $2 ~ /^CAP_/ || + $2 ~ /^ALG_/ || + $2 ~ /^FS_(POLICY_FLAGS|KEY_DESC|ENCRYPTION_MODE|[A-Z0-9_]+_KEY_SIZE|IOC_(GET|SET)_ENCRYPTION)/ || + $2 ~ /^GRND_/ || + $2 ~ /^KEY_(SPEC|REQKEY_DEFL)_/ || + $2 ~ /^KEYCTL_/ || + $2 ~ /^PERF_EVENT_IOC_/ || + $2 ~ /^SECCOMP_MODE_/ || + $2 ~ /^SPLICE_/ || + $2 ~ /^(VM|VMADDR)_/ || + $2 ~ /^(TASKSTATS|TS)_/ || + $2 ~ /^GENL_/ || + $2 ~ /^UTIME_/ || + $2 ~ /^XATTR_(CREATE|REPLACE)/ || + $2 ~ /^ATTR_(BIT_MAP_COUNT|(CMN|VOL|FILE)_)/ || + $2 ~ /^FSOPT_/ || + $2 ~ /^WDIOC_/ || + $2 !~ "WMESGLEN" && + $2 ~ /^W[A-Z0-9]+$/ || + $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} + $2 ~ /^__WCOREFLAG$/ {next} + $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} + + {next} + ' | sort + + echo ')' +) >_const.go + +# Pull out the error names for later. +errors=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print $2 }' | + sort +) + +# Pull out the signal names for later. +signals=$( + echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort +) + +# Again, writing regexps to a file. +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^E[A-Z0-9_]+$/ { print "^\t" $2 "[ \t]*=" }' | + sort >_error.grep +echo '#include ' | $CC -x c - -E -dM $ccflags | + awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | + egrep -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT)' | + sort >_signal.grep + +echo '// mkerrors.sh' "$@" +echo '// Code generated by the command above; see README.md. DO NOT EDIT.' +echo +echo "// +build ${GOARCH},${GOOS}" +echo +go tool cgo -godefs -- "$@" _const.go >_error.out +cat _error.out | grep -vf _error.grep | grep -vf _signal.grep +echo +echo '// Errors' +echo 'const (' +cat _error.out | grep -f _error.grep | sed 's/=\(.*\)/= syscall.Errno(\1)/' +echo ')' + +echo +echo '// Signals' +echo 'const (' +cat _error.out | grep -f _signal.grep | sed 's/=\(.*\)/= syscall.Signal(\1)/' +echo ')' + +# Run C program to print error and syscall strings. +( + echo -E " +#include +#include +#include +#include +#include +#include + +#define nelem(x) (sizeof(x)/sizeof((x)[0])) + +enum { A = 'A', Z = 'Z', a = 'a', z = 'z' }; // avoid need for single quotes below + +int errors[] = { +" + for i in $errors + do + echo -E ' '$i, + done + + echo -E " +}; + +int signals[] = { +" + for i in $signals + do + echo -E ' '$i, + done + + # Use -E because on some systems bash builtin interprets \n itself. + echo -E ' +}; + +static int +intcmp(const void *a, const void *b) +{ + return *(int*)a - *(int*)b; +} + +int +main(void) +{ + int i, e; + char buf[1024], *p; + + printf("\n\n// Error table\n"); + printf("var errors = [...]string {\n"); + qsort(errors, nelem(errors), sizeof errors[0], intcmp); + for(i=0; i 0 && errors[i-1] == e) + continue; + strcpy(buf, strerror(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + printf("\n\n// Signal table\n"); + printf("var signals = [...]string {\n"); + qsort(signals, nelem(signals), sizeof signals[0], intcmp); + for(i=0; i 0 && signals[i-1] == e) + continue; + strcpy(buf, strsignal(e)); + // lowercase first letter: Bad -> bad, but STREAM -> STREAM. + if(A <= buf[0] && buf[0] <= Z && a <= buf[1] && buf[1] <= z) + buf[0] += a - A; + // cut trailing : number. + p = strrchr(buf, ":"[0]); + if(p) + *p = '\0'; + printf("\t%d: \"%s\",\n", e, buf); + } + printf("}\n\n"); + + return 0; +} + +' +) >_errors.c + +$CC $ccflags -o _errors _errors.c && $GORUN ./_errors && rm -f _errors.c _errors _const.go _error.grep _signal.grep _error.out diff --git a/vendor/golang.org/x/sys/unix/mkpost.go b/vendor/golang.org/x/sys/unix/mkpost.go new file mode 100644 index 0000000..dbdfd0a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mkpost.go @@ -0,0 +1,93 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// mkpost processes the output of cgo -godefs to +// modify the generated types. It is used to clean up +// the sys API in an architecture specific manner. +// +// mkpost is run after cgo -godefs; see README.md. +package main + +import ( + "bytes" + "fmt" + "go/format" + "io/ioutil" + "log" + "os" + "regexp" +) + +func main() { + // Get the OS and architecture (using GOARCH_TARGET if it exists) + goos := os.Getenv("GOOS") + goarch := os.Getenv("GOARCH_TARGET") + if goarch == "" { + goarch = os.Getenv("GOARCH") + } + // Check that we are using the new build system if we should be. + if goos == "linux" && goarch != "sparc64" { + if os.Getenv("GOLANG_SYS_BUILD") != "docker" { + os.Stderr.WriteString("In the new build system, mkpost should not be called directly.\n") + os.Stderr.WriteString("See README.md\n") + os.Exit(1) + } + } + + b, err := ioutil.ReadAll(os.Stdin) + if err != nil { + log.Fatal(err) + } + + // If we have empty Ptrace structs, we should delete them. Only s390x emits + // nonempty Ptrace structs. + ptraceRexexp := regexp.MustCompile(`type Ptrace((Psw|Fpregs|Per) struct {\s*})`) + b = ptraceRexexp.ReplaceAll(b, nil) + + // Replace the control_regs union with a blank identifier for now. + controlRegsRegex := regexp.MustCompile(`(Control_regs)\s+\[0\]uint64`) + b = controlRegsRegex.ReplaceAll(b, []byte("_ [0]uint64")) + + // Remove fields that are added by glibc + // Note that this is unstable as the identifers are private. + removeFieldsRegex := regexp.MustCompile(`X__glibc\S*`) + b = removeFieldsRegex.ReplaceAll(b, []byte("_")) + + // Convert [65]int8 to [65]byte in Utsname members to simplify + // conversion to string; see golang.org/issue/20753 + convertUtsnameRegex := regexp.MustCompile(`((Sys|Node|Domain)name|Release|Version|Machine)(\s+)\[(\d+)\]u?int8`) + b = convertUtsnameRegex.ReplaceAll(b, []byte("$1$3[$4]byte")) + + // We refuse to export private fields on s390x + if goarch == "s390x" && goos == "linux" { + // Remove cgo padding fields + removeFieldsRegex := regexp.MustCompile(`Pad_cgo_\d+`) + b = removeFieldsRegex.ReplaceAll(b, []byte("_")) + + // Remove padding, hidden, or unused fields + removeFieldsRegex = regexp.MustCompile(`X_\S+`) + b = removeFieldsRegex.ReplaceAll(b, []byte("_")) + } + + // Remove the first line of warning from cgo + b = b[bytes.IndexByte(b, '\n')+1:] + // Modify the command in the header to include: + // mkpost, our own warning, and a build tag. + replacement := fmt.Sprintf(`$1 | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build %s,%s`, goarch, goos) + cgoCommandRegex := regexp.MustCompile(`(cgo -godefs .*)`) + b = cgoCommandRegex.ReplaceAll(b, []byte(replacement)) + + // gofmt + b, err = format.Source(b) + if err != nil { + log.Fatal(err) + } + + os.Stdout.Write(b) +} diff --git a/vendor/golang.org/x/sys/unix/mksyscall.pl b/vendor/golang.org/x/sys/unix/mksyscall.pl new file mode 100755 index 0000000..fb929b4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/mksyscall.pl @@ -0,0 +1,328 @@ +#!/usr/bin/env perl +# Copyright 2009 The Go Authors. All rights reserved. +# Use of this source code is governed by a BSD-style +# license that can be found in the LICENSE file. + +# This program reads a file containing function prototypes +# (like syscall_darwin.go) and generates system call bodies. +# The prototypes are marked by lines beginning with "//sys" +# and read like func declarations if //sys is replaced by func, but: +# * The parameter lists must give a name for each argument. +# This includes return parameters. +# * The parameter lists must give a type for each argument: +# the (x, y, z int) shorthand is not allowed. +# * If the return parameter is an error number, it must be named errno. + +# A line beginning with //sysnb is like //sys, except that the +# goroutine will not be suspended during the execution of the system +# call. This must only be used for system calls which can never +# block, as otherwise the system call could cause all goroutines to +# hang. + +use strict; + +my $cmdline = "mksyscall.pl " . join(' ', @ARGV); +my $errors = 0; +my $_32bit = ""; +my $plan9 = 0; +my $openbsd = 0; +my $netbsd = 0; +my $dragonfly = 0; +my $arm = 0; # 64-bit value should use (even, odd)-pair +my $tags = ""; # build tags + +if($ARGV[0] eq "-b32") { + $_32bit = "big-endian"; + shift; +} elsif($ARGV[0] eq "-l32") { + $_32bit = "little-endian"; + shift; +} +if($ARGV[0] eq "-plan9") { + $plan9 = 1; + shift; +} +if($ARGV[0] eq "-openbsd") { + $openbsd = 1; + shift; +} +if($ARGV[0] eq "-netbsd") { + $netbsd = 1; + shift; +} +if($ARGV[0] eq "-dragonfly") { + $dragonfly = 1; + shift; +} +if($ARGV[0] eq "-arm") { + $arm = 1; + shift; +} +if($ARGV[0] eq "-tags") { + shift; + $tags = $ARGV[0]; + shift; +} + +if($ARGV[0] =~ /^-/) { + print STDERR "usage: mksyscall.pl [-b32 | -l32] [-tags x,y] [file ...]\n"; + exit 1; +} + +# Check that we are using the new build system if we should +if($ENV{'GOOS'} eq "linux" && $ENV{'GOARCH'} ne "sparc64") { + if($ENV{'GOLANG_SYS_BUILD'} ne "docker") { + print STDERR "In the new build system, mksyscall should not be called directly.\n"; + print STDERR "See README.md\n"; + exit 1; + } +} + + +sub parseparamlist($) { + my ($list) = @_; + $list =~ s/^\s*//; + $list =~ s/\s*$//; + if($list eq "") { + return (); + } + return split(/\s*,\s*/, $list); +} + +sub parseparam($) { + my ($p) = @_; + if($p !~ /^(\S*) (\S*)$/) { + print STDERR "$ARGV:$.: malformed parameter: $p\n"; + $errors = 1; + return ("xx", "int"); + } + return ($1, $2); +} + +my $text = ""; +while(<>) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, errno error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*((?i)SYS_[A-Z0-9_]+))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($func, $in, $out, $sysname) = ($2, $3, $4, $5); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # Try in vain to keep people from editing this file. + # The theory is that they jump into the middle of the file + # without reading the header. + $text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n"; + + # Go function header. + my $out_decl = @out ? sprintf(" (%s)", join(', ', @out)) : ""; + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out_decl; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, $errvar = BytePtrFromString($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n *byte\n"; + $text .= "\t_p$n, _ = BytePtrFromString($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass dummy pointer in that case. + # Used to pass nil, but some OSes or simulators reject write(fd, nil, 0). + $text .= "\tvar _p$n unsafe.Pointer\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = unsafe.Pointer(\&${name}[0])\n\t}"; + $text .= " else {\n\t\t_p$n = unsafe.Pointer(&_zero)\n\t}"; + $text .= "\n"; + push @args, "uintptr(_p$n)", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && ($openbsd || $netbsd)) { + push @args, "0"; + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $dragonfly) { + if ($func !~ /^extp(read|write)/i) { + push @args, "0"; + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } elsif($_32bit eq "little-endian") { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } else { + push @args, "uintptr($name)"; + } + } elsif($type eq "int64" && $_32bit ne "") { + if(@args % 2 && $arm) { + # arm abi specifies 64-bit argument uses + # (even, odd) pair + push @args, "0" + } + if($_32bit eq "big-endian") { + push @args, "uintptr($name>>32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name>>32)"; + } + } else { + push @args, "uintptr($name)"; + } + } + + # Determine which form to use; pad args with zeros. + my $asm = "Syscall"; + if ($nonblock) { + $asm = "RawSyscall"; + } + if(@args <= 3) { + while(@args < 3) { + push @args, "0"; + } + } elsif(@args <= 6) { + $asm .= "6"; + while(@args < 6) { + push @args, "0"; + } + } elsif(@args <= 9) { + $asm .= "9"; + while(@args < 9) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # System call number. + if($sysname eq "") { + $sysname = "SYS_$func"; + $sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar + $sysname =~ y/a-z/A-Z/; + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm($sysname, $args)"; + + # Assign return values. + my $body = ""; + my @ret = ("_", "_", "_"); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err" && !$plan9) { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } elsif($name eq "err" && $plan9) { + $ret[0] = "r0"; + $ret[2] = "e1"; + next; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1" || $plan9) { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + $text .= $body; + + if ($plan9 && $ret[2] eq "e1") { + $text .= "\tif int32(r0) == -1 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } elsif ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = errnoErr(e1)\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n\n"; +} + +chomp $text; +chomp $text; + +if($errors) { + exit 1; +} + +print <) { + chomp; + s/\s+/ /g; + s/^\s+//; + s/\s+$//; + $package = $1 if !$package && /^package (\S+)$/; + my $nonblock = /^\/\/sysnb /; + next if !/^\/\/sys / && !$nonblock; + + # Line must be of the form + # func Open(path string, mode int, perm int) (fd int, err error) + # Split into name, in params, out params. + if(!/^\/\/sys(nb)? (\w+)\(([^()]*)\)\s*(?:\(([^()]+)\))?\s*(?:=\s*(?:(\w*)\.)?(\w*))?$/) { + print STDERR "$ARGV:$.: malformed //sys declaration\n"; + $errors = 1; + next; + } + my ($nb, $func, $in, $out, $modname, $sysname) = ($1, $2, $3, $4, $5, $6); + + # Split argument lists on comma. + my @in = parseparamlist($in); + my @out = parseparamlist($out); + + # So file name. + if($modname eq "") { + $modname = "libc"; + } + + # System call name. + if($sysname eq "") { + $sysname = "$func"; + } + + # System call pointer variable name. + my $sysvarname = "proc$sysname"; + + my $strconvfunc = "BytePtrFromString"; + my $strconvtype = "*byte"; + + $sysname =~ y/A-Z/a-z/; # All libc functions are lowercase. + + # Runtime import of function to allow cross-platform builds. + $dynimports .= "//go:cgo_import_dynamic libc_${sysname} ${sysname} \"$modname.so\"\n"; + # Link symbol to proc address variable. + $linknames .= "//go:linkname ${sysvarname} libc_${sysname}\n"; + # Library proc address variable. + push @vars, $sysvarname; + + # Go function header. + $out = join(', ', @out); + if($out ne "") { + $out = " ($out)"; + } + if($text ne "") { + $text .= "\n" + } + $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out; + + # Check if err return available + my $errvar = ""; + foreach my $p (@out) { + my ($name, $type) = parseparam($p); + if($type eq "error") { + $errvar = $name; + last; + } + } + + # Prepare arguments to Syscall. + my @args = (); + my $n = 0; + foreach my $p (@in) { + my ($name, $type) = parseparam($p); + if($type =~ /^\*/) { + push @args, "uintptr(unsafe.Pointer($name))"; + } elsif($type eq "string" && $errvar ne "") { + $text .= "\tvar _p$n $strconvtype\n"; + $text .= "\t_p$n, $errvar = $strconvfunc($name)\n"; + $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type eq "string") { + print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n"; + $text .= "\tvar _p$n $strconvtype\n"; + $text .= "\t_p$n, _ = $strconvfunc($name)\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))"; + $n++; + } elsif($type =~ /^\[\](.*)/) { + # Convert slice into pointer, length. + # Have to be careful not to take address of &a[0] if len == 0: + # pass nil in that case. + $text .= "\tvar _p$n *$1\n"; + $text .= "\tif len($name) > 0 {\n\t\t_p$n = \&$name\[0]\n\t}\n"; + push @args, "uintptr(unsafe.Pointer(_p$n))", "uintptr(len($name))"; + $n++; + } elsif($type eq "int64" && $_32bit ne "") { + if($_32bit eq "big-endian") { + push @args, "uintptr($name >> 32)", "uintptr($name)"; + } else { + push @args, "uintptr($name)", "uintptr($name >> 32)"; + } + } elsif($type eq "bool") { + $text .= "\tvar _p$n uint32\n"; + $text .= "\tif $name {\n\t\t_p$n = 1\n\t} else {\n\t\t_p$n = 0\n\t}\n"; + push @args, "uintptr(_p$n)"; + $n++; + } else { + push @args, "uintptr($name)"; + } + } + my $nargs = @args; + + # Determine which form to use; pad args with zeros. + my $asm = "sysvicall6"; + if ($nonblock) { + $asm = "rawSysvicall6"; + } + if(@args <= 6) { + while(@args < 6) { + push @args, "0"; + } + } else { + print STDERR "$ARGV:$.: too many arguments to system call\n"; + } + + # Actual call. + my $args = join(', ', @args); + my $call = "$asm(uintptr(unsafe.Pointer(&$sysvarname)), $nargs, $args)"; + + # Assign return values. + my $body = ""; + my $failexpr = ""; + my @ret = ("_", "_", "_"); + my @pout= (); + my $do_errno = 0; + for(my $i=0; $i<@out; $i++) { + my $p = $out[$i]; + my ($name, $type) = parseparam($p); + my $reg = ""; + if($name eq "err") { + $reg = "e1"; + $ret[2] = $reg; + $do_errno = 1; + } else { + $reg = sprintf("r%d", $i); + $ret[$i] = $reg; + } + if($type eq "bool") { + $reg = "$reg != 0"; + } + if($type eq "int64" && $_32bit ne "") { + # 64-bit number in r1:r0 or r0:r1. + if($i+2 > @out) { + print STDERR "$ARGV:$.: not enough registers for int64 return\n"; + } + if($_32bit eq "big-endian") { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i, $i+1); + } else { + $reg = sprintf("int64(r%d)<<32 | int64(r%d)", $i+1, $i); + } + $ret[$i] = sprintf("r%d", $i); + $ret[$i+1] = sprintf("r%d", $i+1); + } + if($reg ne "e1") { + $body .= "\t$name = $type($reg)\n"; + } + } + if ($ret[0] eq "_" && $ret[1] eq "_" && $ret[2] eq "_") { + $text .= "\t$call\n"; + } else { + $text .= "\t$ret[0], $ret[1], $ret[2] := $call\n"; + } + $text .= $body; + + if ($do_errno) { + $text .= "\tif e1 != 0 {\n"; + $text .= "\t\terr = e1\n"; + $text .= "\t}\n"; + } + $text .= "\treturn\n"; + $text .= "}\n"; +} + +if($errors) { + exit 1; +} + +print < "net.inet", + "net.inet.ipproto" => "net.inet", + "net.inet6.ipv6proto" => "net.inet6", + "net.inet6.ipv6" => "net.inet6.ip6", + "net.inet.icmpv6" => "net.inet6.icmp6", + "net.inet6.divert6" => "net.inet6.divert", + "net.inet6.tcp6" => "net.inet.tcp", + "net.inet6.udp6" => "net.inet.udp", + "mpls" => "net.mpls", + "swpenc" => "vm.swapencrypt" +); + +# Node mappings +my %node_map = ( + "net.inet.ip.ifq" => "net.ifq", + "net.inet.pfsync" => "net.pfsync", + "net.mpls.ifq" => "net.ifq" +); + +my $ctlname; +my %mib = (); +my %sysctl = (); +my $node; + +sub debug() { + print STDERR "$_[0]\n" if $debug; +} + +# Walk the MIB and build a sysctl name to OID mapping. +sub build_sysctl() { + my ($node, $name, $oid) = @_; + my %node = %{$node}; + my @oid = @{$oid}; + + foreach my $key (sort keys %node) { + my @node = @{$node{$key}}; + my $nodename = $name.($name ne '' ? '.' : '').$key; + my @nodeoid = (@oid, $node[0]); + if ($node[1] eq 'CTLTYPE_NODE') { + if (exists $node_map{$nodename}) { + $node = \%mib; + $ctlname = $node_map{$nodename}; + foreach my $part (split /\./, $ctlname) { + $node = \%{@{$$node{$part}}[2]}; + } + } else { + $node = $node[2]; + } + &build_sysctl($node, $nodename, \@nodeoid); + } elsif ($node[1] ne '') { + $sysctl{$nodename} = \@nodeoid; + } + } +} + +foreach my $ctl (@ctls) { + $ctls{$ctl} = $ctl; +} + +# Build MIB +foreach my $header (@headers) { + &debug("Processing $header..."); + open HEADER, "/usr/include/$header" || + print STDERR "Failed to open $header\n"; + while (

    ) { + if ($_ =~ /^#define\s+(CTL_NAMES)\s+{/ || + $_ =~ /^#define\s+(CTL_(.*)_NAMES)\s+{/ || + $_ =~ /^#define\s+((.*)CTL_NAMES)\s+{/) { + if ($1 eq 'CTL_NAMES') { + # Top level. + $node = \%mib; + } else { + # Node. + my $nodename = lc($2); + if ($header =~ /^netinet\//) { + $ctlname = "net.inet.$nodename"; + } elsif ($header =~ /^netinet6\//) { + $ctlname = "net.inet6.$nodename"; + } elsif ($header =~ /^net\//) { + $ctlname = "net.$nodename"; + } else { + $ctlname = "$nodename"; + $ctlname =~ s/^(fs|net|kern)_/$1\./; + } + if (exists $ctl_map{$ctlname}) { + $ctlname = $ctl_map{$ctlname}; + } + if (not exists $ctls{$ctlname}) { + &debug("Ignoring $ctlname..."); + next; + } + + # Walk down from the top of the MIB. + $node = \%mib; + foreach my $part (split /\./, $ctlname) { + if (not exists $$node{$part}) { + &debug("Missing node $part"); + $$node{$part} = [ 0, '', {} ]; + } + $node = \%{@{$$node{$part}}[2]}; + } + } + + # Populate current node with entries. + my $i = -1; + while (defined($_) && $_ !~ /^}/) { + $_ =
    ; + $i++ if $_ =~ /{.*}/; + next if $_ !~ /{\s+"(\w+)",\s+(CTLTYPE_[A-Z]+)\s+}/; + $$node{$1} = [ $i, $2, {} ]; + } + } + } + close HEADER; +} + +&build_sysctl(\%mib, "", []); + +print <){ + if(/^#define\s+SYS_(\w+)\s+([0-9]+)/){ + my $name = $1; + my $num = $2; + $name =~ y/a-z/A-Z/; + print " SYS_$name = $num;" + } +} + +print <){ + if(/^([0-9]+)\s+STD\s+({ \S+\s+(\w+).*)$/){ + my $num = $1; + my $proto = $2; + my $name = "SYS_$3"; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print <){ + if(/^([0-9]+)\s+\S+\s+STD\s+({ \S+\s+(\w+).*)$/){ + my $num = $1; + my $proto = $2; + my $name = "SYS_$3"; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print <){ + if($line =~ /^(.*)\\$/) { + # Handle continuation + $line = $1; + $_ =~ s/^\s+//; + $line .= $_; + } else { + # New line + $line = $_; + } + next if $line =~ /\\$/; + if($line =~ /^([0-9]+)\s+((STD)|(NOERR))\s+(RUMP\s+)?({\s+\S+\s*\*?\s*\|(\S+)\|(\S*)\|(\w+).*\s+})(\s+(\S+))?$/) { + my $num = $1; + my $proto = $6; + my $compat = $8; + my $name = "$7_$9"; + + $name = "$7_$11" if $11 ne ''; + $name =~ y/a-z/A-Z/; + + if($compat eq '' || $compat eq '13' || $compat eq '30' || $compat eq '50') { + print " $name = $num; // $proto\n"; + } + } +} + +print <){ + if(/^([0-9]+)\s+STD\s+(NOLOCK\s+)?({ \S+\s+\*?(\w+).*)$/){ + my $num = $1; + my $proto = $3; + my $name = $4; + $name =~ y/a-z/A-Z/; + + # There are multiple entries for enosys and nosys, so comment them out. + if($name =~ /^SYS_E?NOSYS$/){ + $name = "// $name"; + } + if($name eq 'SYS_SYS_EXIT'){ + $name = 'SYS_EXIT'; + } + + print " $name = $num; // $proto\n"; + } +} + +print < uint64(len(b)) { + return nil, nil, EINVAL + } + return h, b[cmsgAlignOf(SizeofCmsghdr):h.Len], nil +} + +// UnixRights encodes a set of open file descriptors into a socket +// control message for sending to another process. +func UnixRights(fds ...int) []byte { + datalen := len(fds) * 4 + b := make([]byte, CmsgSpace(datalen)) + h := (*Cmsghdr)(unsafe.Pointer(&b[0])) + h.Level = SOL_SOCKET + h.Type = SCM_RIGHTS + h.SetLen(CmsgLen(datalen)) + data := cmsgData(h) + for _, fd := range fds { + *(*int32)(data) = int32(fd) + data = unsafe.Pointer(uintptr(data) + 4) + } + return b +} + +// ParseUnixRights decodes a socket control message that contains an +// integer array of open file descriptors from another process. +func ParseUnixRights(m *SocketControlMessage) ([]int, error) { + if m.Header.Level != SOL_SOCKET { + return nil, EINVAL + } + if m.Header.Type != SCM_RIGHTS { + return nil, EINVAL + } + fds := make([]int, len(m.Data)>>2) + for i, j := 0, 0; i < len(m.Data); i += 4 { + fds[j] = int(*(*int32)(unsafe.Pointer(&m.Data[i]))) + j++ + } + return fds, nil +} diff --git a/vendor/golang.org/x/sys/unix/str.go b/vendor/golang.org/x/sys/unix/str.go new file mode 100644 index 0000000..35ed664 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/str.go @@ -0,0 +1,26 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +func itoa(val int) string { // do it here rather than with fmt to avoid dependency + if val < 0 { + return "-" + uitoa(uint(-val)) + } + return uitoa(uint(val)) +} + +func uitoa(val uint) string { + var buf [32]byte // big enough for int64 + i := len(buf) - 1 + for val >= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/golang.org/x/sys/unix/syscall.go b/vendor/golang.org/x/sys/unix/syscall.go new file mode 100644 index 0000000..857d2a4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall.go @@ -0,0 +1,51 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +// Package unix contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display OS-specific documentation for the current +// system. If you want godoc to display OS documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.Errno. +package unix // import "golang.org/x/sys/unix" + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, EINVAL + } + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mkunix.pl. +var _zero uintptr diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd.go b/vendor/golang.org/x/sys/unix/syscall_bsd.go new file mode 100644 index 0000000..47b0598 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_bsd.go @@ -0,0 +1,653 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd netbsd openbsd + +// BSD system call wrappers shared by *BSD based systems +// including OS X (Darwin) and FreeBSD. Like the other +// syscall_*.go files it is compiled as Go code but also +// used as input to mksyscall which parses the //sys +// lines and generates system call stubs. + +package unix + +import ( + "runtime" + "syscall" + "unsafe" +) + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 16 on BSD. + if n < 0 || n > 1000 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // 64 bits should be enough. (32 bits isn't even on 386). Since the + // actual system call is getdirentries64, 64 is a good guess. + // TODO(rsc): Can we use a single global basep for all calls? + var base = (*uintptr)(unsafe.Pointer(new(uint64))) + return Getdirentries(fd, buf, base) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys Shutdown(s int, how int) (err error) + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet4 + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Len = SizeofSockaddrInet6 + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) || n == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = byte(3 + n) // 2 for Family, Len; 1 for NUL + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + return unsafe.Pointer(&sa.raw), _Socklen(sa.raw.Len), nil +} + +func (sa *SockaddrDatalink) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Index == 0 { + return nil, 0, EINVAL + } + sa.raw.Len = sa.Len + sa.raw.Family = AF_LINK + sa.raw.Index = sa.Index + sa.raw.Type = sa.Type + sa.raw.Nlen = sa.Nlen + sa.raw.Alen = sa.Alen + sa.raw.Slen = sa.Slen + for i := 0; i < len(sa.raw.Data); i++ { + sa.raw.Data[i] = sa.Data[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrDatalink, nil +} + +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_LINK: + pp := (*RawSockaddrDatalink)(unsafe.Pointer(rsa)) + sa := new(SockaddrDatalink) + sa.Len = pp.Len + sa.Family = pp.Family + sa.Index = pp.Index + sa.Type = pp.Type + sa.Nlen = pp.Nlen + sa.Alen = pp.Alen + sa.Slen = pp.Slen + for i := 0; i < len(sa.Data); i++ { + sa.Data[i] = pp.Data[i] + } + return sa, nil + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + if pp.Len < 2 || pp.Len > SizeofSockaddrUnix { + return nil, EINVAL + } + sa := new(SockaddrUnix) + + // Some BSDs include the trailing NUL in the length, whereas + // others do not. Work around this by subtracting the leading + // family and len. The path is then scanned to see if a NUL + // terminator still exists within the length. + n := int(pp.Len) - 2 // subtract leading Family, Len + for i := 0; i < n; i++ { + if pp.Path[i] == 0 { + // found early NUL; assume Len included the NUL + // or was overestimating. + n = i + break + } + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + if runtime.GOOS == "darwin" && len == 0 { + // Accepted socket has no address. + // This is likely due to a bug in xnu kernels, + // where instead of ECONNABORTED error socket + // is accepted, but has no address. + Close(nfd) + return 0, nil, ECONNABORTED + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + // TODO(jsing): DragonFly has a "bug" (see issue 3349), which should be + // reported upstream. + if runtime.GOOS == "dragonfly" && rsa.Addr.Family == AF_UNSPEC && rsa.Addr.Len == 0 { + rsa.Addr.Family = AF_UNIX + rsa.Addr.Len = SizeofSockaddrUnix + } + return anyToSockaddr(&rsa) +} + +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) + +func GetsockoptByte(fd, level, opt int) (value byte, err error) { + var n byte + vallen := _Socklen(1) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return n, err +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { + var value IPv6MTUInfo + vallen := _Socklen(SizeofIPv6MTUInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { + var value ICMPv6Filter + vallen := _Socklen(SizeofICMPv6Filter) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*byte)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = (*byte)(unsafe.Pointer(&oob[0])) + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) + +func Kevent(kq int, changes, events []Kevent_t, timeout *Timespec) (n int, err error) { + var change, event unsafe.Pointer + if len(changes) > 0 { + change = unsafe.Pointer(&changes[0]) + } + if len(events) > 0 { + event = unsafe.Pointer(&events[0]) + } + return kevent(kq, change, len(changes), event, len(events), timeout) +} + +//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL + +// sysctlmib translates name to mib number and appends any additional args. +func sysctlmib(name string, args ...int) ([]_C_int, error) { + // Translate name to mib number. + mib, err := nametomib(name) + if err != nil { + return nil, err + } + + for _, a := range args { + mib = append(mib, _C_int(a)) + } + + return mib, nil +} + +func Sysctl(name string) (string, error) { + return SysctlArgs(name) +} + +func SysctlArgs(name string, args ...int) (string, error) { + buf, err := SysctlRaw(name, args...) + if err != nil { + return "", err + } + n := len(buf) + + // Throw away terminating NUL. + if n > 0 && buf[n-1] == '\x00' { + n-- + } + return string(buf[0:n]), nil +} + +func SysctlUint32(name string) (uint32, error) { + return SysctlUint32Args(name) +} + +func SysctlUint32Args(name string, args ...int) (uint32, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(4) + buf := make([]byte, 4) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 4 { + return 0, EIO + } + return *(*uint32)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlUint64(name string, args ...int) (uint64, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return 0, err + } + + n := uintptr(8) + buf := make([]byte, 8) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return 0, err + } + if n != 8 { + return 0, EIO + } + return *(*uint64)(unsafe.Pointer(&buf[0])), nil +} + +func SysctlRaw(name string, args ...int) ([]byte, error) { + mib, err := sysctlmib(name, args...) + if err != nil { + return nil, err + } + + // Find size. + n := uintptr(0) + if err := sysctl(mib, nil, &n, nil, 0); err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Read into buffer of that size. + buf := make([]byte, n) + if err := sysctl(mib, &buf[0], &n, nil, 0); err != nil { + return nil, err + } + + // The actual call may return less than the original reported required + // size so ensure we deal with that. + return buf[:n], nil +} + +//sys utimes(path string, timeval *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(ts) != 2 { + return EINVAL + } + // Darwin setattrlist can set nanosecond timestamps + err := setattrlistTimes(path, ts, 0) + if err != ENOSYS { + return err + } + err = utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + // Not as efficient as it could be because Timespec and + // Timeval have different types in the different OSes + tv := [2]Timeval{ + NsecToTimeval(TimespecToNsec(ts[0])), + NsecToTimeval(TimespecToNsec(ts[1])), + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + err := setattrlistTimes(path, ts, flags) + if err != ENOSYS { + return err + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys futimes(fd int, timeval *[2]Timeval) (err error) + +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimes(fd, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimes(fd, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +// TODO: wrap +// Acct(name nil-string) (err error) +// Gethostuuid(uuid *byte, timeout *Timespec) (err error) +// Ptrace(req int, pid int, addr uintptr, data int) (ret uintptr, err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, behav int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_bsd_test.go b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go new file mode 100644 index 0000000..d8085a0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_bsd_test.go @@ -0,0 +1,62 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd openbsd + +package unix_test + +import ( + "os/exec" + "runtime" + "testing" + + "golang.org/x/sys/unix" +) + +const MNT_WAIT = 1 +const MNT_NOWAIT = 2 + +func TestGetfsstat(t *testing.T) { + const flags = MNT_NOWAIT // see golang.org/issue/16937 + n, err := unix.Getfsstat(nil, flags) + if err != nil { + t.Fatal(err) + } + + data := make([]unix.Statfs_t, n) + n2, err := unix.Getfsstat(data, flags) + if err != nil { + t.Fatal(err) + } + if n != n2 { + t.Errorf("Getfsstat(nil) = %d, but subsequent Getfsstat(slice) = %d", n, n2) + } + for i, stat := range data { + if stat == (unix.Statfs_t{}) { + t.Errorf("index %v is an empty Statfs_t struct", i) + } + } + if t.Failed() { + for i, stat := range data[:n2] { + t.Logf("data[%v] = %+v", i, stat) + } + mount, err := exec.Command("mount").CombinedOutput() + if err != nil { + t.Logf("mount: %v\n%s", err, mount) + } else { + t.Logf("mount: %s", mount) + } + } +} + +func TestSysctlRaw(t *testing.T) { + if runtime.GOOS == "openbsd" { + t.Skip("kern.proc.pid does not exist on OpenBSD") + } + + _, err := unix.SysctlRaw("kern.proc.pid", unix.Getpid()) + if err != nil { + t.Fatal(err) + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go new file mode 100644 index 0000000..9a6783e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -0,0 +1,566 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Darwin system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + errorspkg "errors" + "syscall" + "unsafe" +) + +const ImplementsGetwd = true + +func Getwd() (string, error) { + buf := make([]byte, 2048) + attrs, err := getAttrList(".", attrList{CommonAttr: attrCmnFullpath}, buf, 0) + if err == nil && len(attrs) == 1 && len(attrs[0]) >= 2 { + wd := string(attrs[0]) + // Sanity check that it's an absolute path and ends + // in a null byte, which we then strip. + if wd[0] == '/' && wd[len(wd)-1] == 0 { + return wd[:len(wd)-1], nil + } + } + // If pkg/os/getwd.go gets ENOTSUP, it will fall back to the + // slow algorithm. + return "", ENOTSUP +} + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) +func PtraceAttach(pid int) (err error) { return ptrace(PT_ATTACH, pid, 0, 0) } +func PtraceDetach(pid int) (err error) { return ptrace(PT_DETACH, pid, 0, 0) } + +const ( + attrBitMapCount = 5 + attrCmnFullpath = 0x08000000 +) + +type attrList struct { + bitmapCount uint16 + _ uint16 + CommonAttr uint32 + VolAttr uint32 + DirAttr uint32 + FileAttr uint32 + Forkattr uint32 +} + +func getAttrList(path string, attrList attrList, attrBuf []byte, options uint) (attrs [][]byte, err error) { + if len(attrBuf) < 4 { + return nil, errorspkg.New("attrBuf too small") + } + attrList.bitmapCount = attrBitMapCount + + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return nil, err + } + + _, _, e1 := Syscall6( + SYS_GETATTRLIST, + uintptr(unsafe.Pointer(_p0)), + uintptr(unsafe.Pointer(&attrList)), + uintptr(unsafe.Pointer(&attrBuf[0])), + uintptr(len(attrBuf)), + uintptr(options), + 0, + ) + if e1 != 0 { + return nil, e1 + } + size := *(*uint32)(unsafe.Pointer(&attrBuf[0])) + + // dat is the section of attrBuf that contains valid data, + // without the 4 byte length header. All attribute offsets + // are relative to dat. + dat := attrBuf + if int(size) < len(attrBuf) { + dat = dat[:size] + } + dat = dat[4:] // remove length prefix + + for i := uint32(0); int(i) < len(dat); { + header := dat[i:] + if len(header) < 8 { + return attrs, errorspkg.New("truncated attribute header") + } + datOff := *(*int32)(unsafe.Pointer(&header[0])) + attrLen := *(*uint32)(unsafe.Pointer(&header[4])) + if datOff < 0 || uint32(datOff)+attrLen > uint32(len(dat)) { + return attrs, errorspkg.New("truncated results; attrBuf too small") + } + end := uint32(datOff) + attrLen + attrs = append(attrs, dat[datOff:end]) + i = end + if r := i % 4; r != 0 { + i += (4 - r) + } + } + return +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT64, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + _p0, err := BytePtrFromString(path) + if err != nil { + return err + } + + var attrList attrList + attrList.bitmapCount = ATTR_BIT_MAP_COUNT + attrList.CommonAttr = ATTR_CMN_MODTIME | ATTR_CMN_ACCTIME + + // order is mtime, atime: the opposite of Chtimes + attributes := [2]Timespec{times[1], times[0]} + options := 0 + if flags&AT_SYMLINK_NOFOLLOW != 0 { + options |= FSOPT_NOFOLLOW + } + _, _, e1 := Syscall6( + SYS_SETATTRLIST, + uintptr(unsafe.Pointer(_p0)), + uintptr(unsafe.Pointer(&attrList)), + uintptr(unsafe.Pointer(&attributes)), + uintptr(unsafe.Sizeof(attributes)), + uintptr(options), + 0, + ) + if e1 != 0 { + return e1 + } + return nil +} + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) error { + // Darwin doesn't support SYS_UTIMENSAT + return ENOSYS +} + +/* + * Wrapped + */ + +//sys kill(pid int, signum int, posix int) (err error) + +func Kill(pid int, signum syscall.Signal) (err error) { return kill(pid, int(signum), 1) } + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exchangedata(path1 string, path2 string, options int) (err error) +//sys Exit(code int) +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) = SYS_GETDIRENTRIES64 +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Getuid() (uid int) +//sysnb Issetugid() (tainted bool) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sys Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setprivexec(flag int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 +//sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// sendfile +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go new file mode 100644 index 0000000..b3ac109 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_386.go @@ -0,0 +1,68 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = int32(sec) + tv.Usec = int32(usec) + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/386 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go new file mode 100644 index 0000000..7521944 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_amd64.go @@ -0,0 +1,68 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = sec + tv.Usec = usec + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/amd64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go new file mode 100644 index 0000000..47ab664 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go @@ -0,0 +1,62 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +//sysnb gettimeofday(tp *Timeval) (sec int32, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = int32(sec) + tv.Usec = int32(usec) + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(*offset>>32), uintptr(unsafe.Pointer(&length)), 0, 0, 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go new file mode 100644 index 0000000..d6d9628 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_darwin_arm64.go @@ -0,0 +1,68 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64,darwin + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +//sysnb gettimeofday(tp *Timeval) (sec int64, usec int32, err error) +func Gettimeofday(tv *Timeval) (err error) { + // The tv passed to gettimeofday must be non-nil + // but is otherwise unused. The answers come back + // in the two registers. + sec, usec, err := gettimeofday(tv) + tv.Sec = sec + tv.Usec = usec + return err +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var length = uint64(count) + + _, _, e1 := Syscall6(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(unsafe.Pointer(&length)), 0, 0) + + written = int(length) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic + +// SYS___SYSCTL is used by syscall_bsd.go for all BSDs, but in modern versions +// of darwin/arm64 the syscall is called sysctl instead of __sysctl. +const SYS___SYSCTL = SYS_SYSCTL diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go new file mode 100644 index 0000000..25eeada --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -0,0 +1,418 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// DragonFly BSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import "unsafe" + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + namlen, ok := direntNamlen(buf) + if !ok { + return 0, false + } + return (16 + namlen + 1 + 7) &^ 7, true +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +//sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) +func Pread(fd int, p []byte, offset int64) (n int, err error) { + return extpread(fd, p, 0, offset) +} + +//sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + return extpwrite(fd, p, 0, offset) +} + +func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + * TODO(jsing): Update this list for DragonFly. + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go new file mode 100644 index 0000000..9babb31 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly_amd64.go @@ -0,0 +1,52 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,dragonfly + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd.go b/vendor/golang.org/x/sys/unix/syscall_freebsd.go new file mode 100644 index 0000000..a82ce12 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd.go @@ -0,0 +1,712 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// FreeBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import "unsafe" + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 + raw RawSockaddrDatalink +} + +// Translate "kern.hostname" to []_C_int{0,1,2,3}. +func nametomib(name string) (mib []_C_int, err error) { + const siz = unsafe.Sizeof(mib[0]) + + // NOTE(rsc): It seems strange to set the buffer to have + // size CTL_MAXNAME+2 but use only CTL_MAXNAME + // as the size. I don't know why the +2 is here, but the + // kernel uses +2 for its own implementation of this function. + // I am scared that if we don't include the +2 here, the kernel + // will silently write 2 words farther than we specify + // and we'll get memory corruption. + var buf [CTL_MAXNAME + 2]_C_int + n := uintptr(CTL_MAXNAME) * siz + + p := (*byte)(unsafe.Pointer(&buf[0])) + bytes, err := ByteSliceFromString(name) + if err != nil { + return nil, err + } + + // Magic sysctl: "setting" 0.3 to a string name + // lets you read back the array of integers form. + if err = sysctl([]_C_int{0, 3}, p, &n, &bytes[0], uintptr(len(name))); err != nil { + return nil, err + } + return buf[0 : n/siz], nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sysnb pipe() (r int, w int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + errno := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, errno +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +func Accept4(fd, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +// Derive extattr namespace and attribute name + +func xattrnamespace(fullattr string) (ns int, attr string, err error) { + s := -1 + for idx, val := range fullattr { + if val == '.' { + s = idx + break + } + } + + if s == -1 { + return -1, "", ENOATTR + } + + namespace := fullattr[0:s] + attr = fullattr[s+1:] + + switch namespace { + case "user": + return EXTATTR_NAMESPACE_USER, attr, nil + case "system": + return EXTATTR_NAMESPACE_SYSTEM, attr, nil + default: + return -1, "", ENOATTR + } +} + +func initxattrdest(dest []byte, idx int) (d unsafe.Pointer) { + if len(dest) > idx { + return unsafe.Pointer(&dest[idx]) + } else { + return unsafe.Pointer(_zero) + } +} + +// FreeBSD implements its own syscalls to handle extended attributes + +func Getxattr(file string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFile(file, nsid, a, uintptr(d), destsize) +} + +func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize) +} + +func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsize := len(dest) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return -1, err + } + + return ExtattrGetLink(link, nsid, a, uintptr(d), destsize) +} + +// flags are unused on FreeBSD + +func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz) + return +} + +func Setxattr(file string, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz) + return +} + +func Lsetxattr(link string, attr string, data []byte, flags int) (err error) { + d := unsafe.Pointer(&data[0]) + datasiz := len(data) + + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + _, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz) + return +} + +func Removexattr(file string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFile(file, nsid, a) + return +} + +func Fremovexattr(fd int, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteFd(fd, nsid, a) + return +} + +func Lremovexattr(link string, attr string) (err error) { + nsid, a, err := xattrnamespace(attr) + if err != nil { + return + } + + err = ExtattrDeleteLink(link, nsid, a) + return +} + +func Listxattr(file string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + // FreeBSD won't allow you to list xattrs from multiple namespaces + s := 0 + var e error + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFile(file, nsid, uintptr(d), destsiz) + + /* Errors accessing system attrs are ignored so that + * we can implement the Linux-like behavior of omitting errors that + * we don't have read permissions on + * + * Linux will still error if we ask for user attributes on a file that + * we don't have read permissions on, so don't ignore those errors + */ + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + e = nil + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, e +} + +func Flistxattr(fd int, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + var e error + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + e = nil + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, e +} + +func Llistxattr(link string, dest []byte) (sz int, err error) { + d := initxattrdest(dest, 0) + destsiz := len(dest) + + s := 0 + var e error + for _, nsid := range [...]int{EXTATTR_NAMESPACE_USER, EXTATTR_NAMESPACE_SYSTEM} { + stmp, e := ExtattrListLink(link, nsid, uintptr(d), destsiz) + if e != nil && e == EPERM && nsid != EXTATTR_NAMESPACE_USER { + e = nil + continue + } else if e != nil { + return s, e + } + + s += stmp + destsiz -= s + if destsiz < 0 { + destsiz = 0 + } + d = initxattrdest(dest, s) + } + + return s, e +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys CapEnter() (err error) +//sys capRightsGet(version int, fd int, rightsp *CapRights) (err error) = SYS___CAP_RIGHTS_GET +//sys capRightsLimit(fd int, rightsp *CapRights) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) +//sys ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) +//sys ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) +//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) +//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) +//sys Getdtablesize() (size int) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(fromfd int, from string, tofd int, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Undelete(path string) (err error) +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + */ +// Profil +// Sigaction +// Sigprocmask +// Getlogin +// Sigpending +// Sigaltstack +// Ioctl +// Reboot +// Execve +// Vfork +// Sbrk +// Sstk +// Ovadvise +// Mincore +// Setitimer +// Swapon +// Select +// Sigsuspend +// Readv +// Writev +// Nfssvc +// Getfh +// Quotactl +// Mount +// Csops +// Waitid +// Add_profil +// Kdebug_trace +// Sigreturn +// Atsocket +// Kqueue_from_portset_np +// Kqueue_portset +// Getattrlist +// Setattrlist +// Getdirentriesattr +// Searchfs +// Delete +// Copyfile +// Watchevent +// Waitevent +// Modwatch +// Getxattr +// Fgetxattr +// Setxattr +// Fsetxattr +// Removexattr +// Fremovexattr +// Listxattr +// Flistxattr +// Fsctl +// Initgroups +// Posix_spawn +// Nfsclnt +// Fhopen +// Minherit +// Semsys +// Msgsys +// Shmsys +// Semctl +// Semget +// Semop +// Msgctl +// Msgget +// Msgsnd +// Msgrcv +// Shmat +// Shmctl +// Shmdt +// Shmget +// Shm_open +// Shm_unlink +// Sem_open +// Sem_close +// Sem_unlink +// Sem_wait +// Sem_trywait +// Sem_post +// Sem_getvalue +// Sem_init +// Sem_destroy +// Open_extended +// Umask_extended +// Stat_extended +// Lstat_extended +// Fstat_extended +// Chmod_extended +// Fchmod_extended +// Access_extended +// Settid +// Gettid +// Setsgroups +// Getsgroups +// Setwgroups +// Getwgroups +// Mkfifo_extended +// Mkdir_extended +// Identitysvc +// Shared_region_check_np +// Shared_region_map_np +// __pthread_mutex_destroy +// __pthread_mutex_init +// __pthread_mutex_lock +// __pthread_mutex_trylock +// __pthread_mutex_unlock +// __pthread_cond_init +// __pthread_cond_destroy +// __pthread_cond_broadcast +// __pthread_cond_signal +// Setsid_with_pid +// __pthread_cond_timedwait +// Aio_fsync +// Aio_return +// Aio_suspend +// Aio_cancel +// Aio_error +// Aio_read +// Aio_write +// Lio_listio +// __pthread_cond_wait +// Iopolicysys +// __pthread_kill +// __pthread_sigmask +// __sigwait +// __disable_threadsignal +// __pthread_markcancel +// __pthread_canceled +// __semwait_signal +// Proc_info +// Stat64_extended +// Lstat64_extended +// Fstat64_extended +// __pthread_chdir +// __pthread_fchdir +// Audit +// Auditon +// Getauid +// Setauid +// Getaudit +// Setaudit +// Getaudit_addr +// Setaudit_addr +// Auditctl +// Bsdthread_create +// Bsdthread_terminate +// Stack_snapshot +// Bsdthread_register +// Workq_open +// Workq_ops +// __mac_execve +// __mac_syscall +// __mac_get_file +// __mac_set_file +// __mac_get_link +// __mac_set_link +// __mac_get_proc +// __mac_set_proc +// __mac_get_fd +// __mac_set_fd +// __mac_get_pid +// __mac_get_lcid +// __mac_get_lctx +// __mac_set_lctx +// Setlcid +// Read_nocancel +// Write_nocancel +// Open_nocancel +// Close_nocancel +// Wait4_nocancel +// Recvmsg_nocancel +// Sendmsg_nocancel +// Recvfrom_nocancel +// Accept_nocancel +// Fcntl_nocancel +// Select_nocancel +// Fsync_nocancel +// Connect_nocancel +// Sigsuspend_nocancel +// Readv_nocancel +// Writev_nocancel +// Sendto_nocancel +// Pread_nocancel +// Pwrite_nocancel +// Waitid_nocancel +// Poll_nocancel +// Msgsnd_nocancel +// Msgrcv_nocancel +// Sem_wait_nocancel +// Aio_suspend_nocancel +// __sigwait_nocancel +// __semwait_signal_nocancel +// __mac_mount +// __mac_get_mount +// __mac_getfsstat diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go new file mode 100644 index 0000000..21e0395 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_386.go @@ -0,0 +1,52 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go new file mode 100644 index 0000000..9c945a6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_amd64.go @@ -0,0 +1,52 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go new file mode 100644 index 0000000..5cd6243 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_arm.go @@ -0,0 +1,52 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,freebsd + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + var writtenOut uint64 = 0 + _, _, e1 := Syscall9(SYS_SENDFILE, uintptr(infd), uintptr(outfd), uintptr(*offset), uintptr((*offset)>>32), uintptr(count), 0, uintptr(unsafe.Pointer(&writtenOut)), 0, 0) + + written = int(writtenOut) + + if e1 != 0 { + err = e1 + } + return +} + +func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go new file mode 100644 index 0000000..654439e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_freebsd_test.go @@ -0,0 +1,297 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build freebsd + +package unix_test + +import ( + "flag" + "fmt" + "io/ioutil" + "os" + "os/exec" + "path" + "path/filepath" + "runtime" + "testing" + + "golang.org/x/sys/unix" +) + +func TestSysctlUint64(t *testing.T) { + _, err := unix.SysctlUint64("vm.swap_total") + if err != nil { + t.Fatal(err) + } +} + +// FIXME: Infrastructure for launching tests in subprocesses stolen from openbsd_test.go - refactor? +// testCmd generates a proper command that, when executed, runs the test +// corresponding to the given key. + +type testProc struct { + fn func() // should always exit instead of returning + arg func(t *testing.T) string // generate argument for test + cleanup func(arg string) error // for instance, delete coredumps from testing pledge + success bool // whether zero-exit means success or failure +} + +var ( + testProcs = map[string]testProc{} + procName = "" + procArg = "" +) + +const ( + optName = "sys-unix-internal-procname" + optArg = "sys-unix-internal-arg" +) + +func init() { + flag.StringVar(&procName, optName, "", "internal use only") + flag.StringVar(&procArg, optArg, "", "internal use only") + +} + +func testCmd(procName string, procArg string) (*exec.Cmd, error) { + exe, err := filepath.Abs(os.Args[0]) + if err != nil { + return nil, err + } + cmd := exec.Command(exe, "-"+optName+"="+procName, "-"+optArg+"="+procArg) + cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr + return cmd, nil +} + +// ExitsCorrectly is a comprehensive, one-line-of-use wrapper for testing +// a testProc with a key. +func ExitsCorrectly(t *testing.T, procName string) { + s := testProcs[procName] + arg := "-" + if s.arg != nil { + arg = s.arg(t) + } + c, err := testCmd(procName, arg) + defer func(arg string) { + if err := s.cleanup(arg); err != nil { + t.Fatalf("Failed to run cleanup for %s %s %#v", procName, err, err) + } + }(arg) + if err != nil { + t.Fatalf("Failed to construct command for %s", procName) + } + if (c.Run() == nil) != s.success { + result := "succeed" + if !s.success { + result = "fail" + } + t.Fatalf("Process did not %s when it was supposed to", result) + } +} + +func TestMain(m *testing.M) { + flag.Parse() + if procName != "" { + t := testProcs[procName] + t.fn() + os.Stderr.WriteString("test function did not exit\n") + if t.success { + os.Exit(1) + } else { + os.Exit(0) + } + } + os.Exit(m.Run()) +} + +// end of infrastructure + +const testfile = "gocapmodetest" +const testfile2 = testfile + "2" + +func CapEnterTest() { + _, err := os.OpenFile(path.Join(procArg, testfile), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err != nil { + panic(fmt.Sprintf("OpenFile: %s", err)) + } + + err = unix.CapEnter() + if err != nil { + panic(fmt.Sprintf("CapEnter: %s", err)) + } + + _, err = os.OpenFile(path.Join(procArg, testfile2), os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + panic("OpenFile works!") + } + if err.(*os.PathError).Err != unix.ECAPMODE { + panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) + } + os.Exit(0) +} + +func makeTempDir(t *testing.T) string { + d, err := ioutil.TempDir("", "go_openat_test") + if err != nil { + t.Fatalf("TempDir failed: %s", err) + } + return d +} + +func removeTempDir(arg string) error { + err := os.RemoveAll(arg) + if err != nil && err.(*os.PathError).Err == unix.ENOENT { + return nil + } + return err +} + +func init() { + testProcs["cap_enter"] = testProc{ + CapEnterTest, + makeTempDir, + removeTempDir, + true, + } +} + +func TestCapEnter(t *testing.T) { + if runtime.GOARCH != "amd64" { + t.Skipf("skipping test on %s", runtime.GOARCH) + } + ExitsCorrectly(t, "cap_enter") +} + +func OpenatTest() { + f, err := os.Open(procArg) + if err != nil { + panic(err) + } + + err = unix.CapEnter() + if err != nil { + panic(fmt.Sprintf("CapEnter: %s", err)) + } + + fxx, err := unix.Openat(int(f.Fd()), "xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err != nil { + panic(err) + } + unix.Close(fxx) + + // The right to open BASE/xx is not ambient + _, err = os.OpenFile(procArg+"/xx", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + panic("OpenFile succeeded") + } + if err.(*os.PathError).Err != unix.ECAPMODE { + panic(fmt.Sprintf("OpenFile failed wrong: %s %#v", err, err)) + } + + // Can't make a new directory either + err = os.Mkdir(procArg+"2", 0777) + if err == nil { + panic("MKdir succeeded") + } + if err.(*os.PathError).Err != unix.ECAPMODE { + panic(fmt.Sprintf("Mkdir failed wrong: %s %#v", err, err)) + } + + // Remove all caps except read and lookup. + r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_LOOKUP}) + if err != nil { + panic(fmt.Sprintf("CapRightsInit failed: %s %#v", err, err)) + } + err = unix.CapRightsLimit(f.Fd(), r) + if err != nil { + panic(fmt.Sprintf("CapRightsLimit failed: %s %#v", err, err)) + } + + // Check we can get the rights back again + r, err = unix.CapRightsGet(f.Fd()) + if err != nil { + panic(fmt.Sprintf("CapRightsGet failed: %s %#v", err, err)) + } + b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP}) + if err != nil { + panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) + } + if !b { + panic(fmt.Sprintf("Unexpected rights")) + } + b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_LOOKUP, unix.CAP_WRITE}) + if err != nil { + panic(fmt.Sprintf("CapRightsIsSet failed: %s %#v", err, err)) + } + if b { + panic(fmt.Sprintf("Unexpected rights (2)")) + } + + // Can no longer create a file + _, err = unix.Openat(int(f.Fd()), "xx2", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) + if err == nil { + panic("Openat succeeded") + } + if err != unix.ENOTCAPABLE { + panic(fmt.Sprintf("OpenFileAt failed wrong: %s %#v", err, err)) + } + + // But can read an existing one + _, err = unix.Openat(int(f.Fd()), "xx", os.O_RDONLY, 0666) + if err != nil { + panic(fmt.Sprintf("Openat failed: %s %#v", err, err)) + } + + os.Exit(0) +} + +func init() { + testProcs["openat"] = testProc{ + OpenatTest, + makeTempDir, + removeTempDir, + true, + } +} + +func TestOpenat(t *testing.T) { + if runtime.GOARCH != "amd64" { + t.Skipf("skipping test on %s", runtime.GOARCH) + } + ExitsCorrectly(t, "openat") +} + +func TestCapRightsSetAndClear(t *testing.T) { + r, err := unix.CapRightsInit([]uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT}) + if err != nil { + t.Fatalf("CapRightsInit failed: %s", err) + } + + err = unix.CapRightsSet(r, []uint64{unix.CAP_EVENT, unix.CAP_LISTEN}) + if err != nil { + t.Fatalf("CapRightsSet failed: %s", err) + } + + b, err := unix.CapRightsIsSet(r, []uint64{unix.CAP_READ, unix.CAP_WRITE, unix.CAP_PDWAIT, unix.CAP_EVENT, unix.CAP_LISTEN}) + if err != nil { + t.Fatalf("CapRightsIsSet failed: %s", err) + } + if !b { + t.Fatalf("Wrong rights set") + } + + err = unix.CapRightsClear(r, []uint64{unix.CAP_READ, unix.CAP_PDWAIT}) + if err != nil { + t.Fatalf("CapRightsClear failed: %s", err) + } + + b, err = unix.CapRightsIsSet(r, []uint64{unix.CAP_WRITE, unix.CAP_EVENT, unix.CAP_LISTEN}) + if err != nil { + t.Fatalf("CapRightsIsSet failed: %s", err) + } + if !b { + t.Fatalf("Wrong rights set") + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go new file mode 100644 index 0000000..b98a7e1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -0,0 +1,1470 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Linux system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and +// wrap it in our own nicer implementation. + +package unix + +import ( + "syscall" + "unsafe" +) + +/* + * Wrapped + */ + +func Access(path string, mode uint32) (err error) { + return Faccessat(AT_FDCWD, path, mode, 0) +} + +func Chmod(path string, mode uint32) (err error) { + return Fchmodat(AT_FDCWD, path, mode, 0) +} + +func Chown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, 0) +} + +func Creat(path string, mode uint32) (fd int, err error) { + return Open(path, O_CREAT|O_WRONLY|O_TRUNC, mode) +} + +//sys fchmodat(dirfd int, path string, mode uint32) (err error) + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + // Linux fchmodat doesn't support the flags parameter. Mimick glibc's behavior + // and check the flags. Otherwise the mode would be applied to the symlink + // destination which is not what the user expects. + if flags&^AT_SYMLINK_NOFOLLOW != 0 { + return EINVAL + } else if flags&AT_SYMLINK_NOFOLLOW != 0 { + return EOPNOTSUPP + } + return fchmodat(dirfd, path, mode) +} + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +// ioctl itself should not be exposed directly, but additional get/set +// functions for specific types are permissible. + +// IoctlSetInt performs an ioctl operation which sets an integer value +// on fd, using the specified request number. +func IoctlSetInt(fd int, req uint, value int) error { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) error { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +// IoctlGetInt performs an ioctl operation which gets an integer value +// from fd, using the specified request number. +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +//sys Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) + +func Link(oldpath string, newpath string) (err error) { + return Linkat(AT_FDCWD, oldpath, AT_FDCWD, newpath, 0) +} + +func Mkdir(path string, mode uint32) (err error) { + return Mkdirat(AT_FDCWD, path, mode) +} + +func Mknod(path string, mode uint32, dev int) (err error) { + return Mknodat(AT_FDCWD, path, mode, dev) +} + +func Open(path string, mode int, perm uint32) (fd int, err error) { + return openat(AT_FDCWD, path, mode|O_LARGEFILE, perm) +} + +//sys openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + return openat(dirfd, path, flags|O_LARGEFILE, mode) +} + +//sys ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) + +func Ppoll(fds []PollFd, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + if len(fds) == 0 { + return ppoll(nil, 0, timeout, sigmask) + } + return ppoll(&fds[0], len(fds), timeout, sigmask) +} + +//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error) + +func Readlink(path string, buf []byte) (n int, err error) { + return Readlinkat(AT_FDCWD, path, buf) +} + +func Rename(oldpath string, newpath string) (err error) { + return Renameat(AT_FDCWD, oldpath, AT_FDCWD, newpath) +} + +func Rmdir(path string) error { + return Unlinkat(AT_FDCWD, path, AT_REMOVEDIR) +} + +//sys Symlinkat(oldpath string, newdirfd int, newpath string) (err error) + +func Symlink(oldpath string, newpath string) (err error) { + return Symlinkat(oldpath, AT_FDCWD, newpath) +} + +func Unlink(path string) error { + return Unlinkat(AT_FDCWD, path, 0) +} + +//sys Unlinkat(dirfd int, path string, flags int) (err error) + +//sys utimes(path string, times *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) error { + if tv == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + var ts [2]Timespec + ts[0] = NsecToTimespec(TimevalToNsec(tv[0])) + ts[1] = NsecToTimespec(TimevalToNsec(tv[1])) + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + err := utimensat(AT_FDCWD, path, nil, 0) + if err != ENOSYS { + return err + } + return utimes(path, nil) + } + if len(ts) != 2 { + return EINVAL + } + err := utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) + if err != ENOSYS { + return err + } + // If the utimensat syscall isn't available (utimensat was added to Linux + // in 2.6.22, Released, 8 July 2007) then fall back to utimes + var tv [2]Timeval + for i := 0; i < 2; i++ { + tv[i] = NsecToTimeval(TimespecToNsec(ts[i])) + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) + +func Futimesat(dirfd int, path string, tv []Timeval) error { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + if tv == nil { + return futimesat(dirfd, pathp, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func Futimes(fd int, tv []Timeval) (err error) { + // Believe it or not, this is the best we can do on Linux + // (and is what glibc does). + return Utimes("/proc/self/fd/"+itoa(fd), tv) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + n, err := Getcwd(buf[0:]) + if err != nil { + return "", err + } + // Getcwd returns the number of bytes written to buf, including the NUL. + if n < 1 || n > len(buf) || buf[n-1] != 0 { + return "", EINVAL + } + return string(buf[0 : n-1]), nil +} + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + if err != nil { + return nil, err + } + if n == 0 { + return nil, nil + } + + // Sanity check group count. Max is 1<<16 on Linux. + if n < 0 || n > 1<<20 { + return nil, EINVAL + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if err != nil { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +type WaitStatus uint32 + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. At least that's the idea. +// There are various irregularities. For example, the +// "continued" status is 0xFFFF, distinguishing itself +// from stopped via the core dump bit. + +const ( + mask = 0x7F + core = 0x80 + exited = 0x00 + stopped = 0x7F + shift = 8 +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != exited } + +func (w WaitStatus) Stopped() bool { return w&0xFF == stopped } + +func (w WaitStatus) Continued() bool { return w == 0xFFFF } + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) ExitStatus() int { + if !w.Exited() { + return -1 + } + return int(w>>shift) & 0xFF +} + +func (w WaitStatus) Signal() syscall.Signal { + if !w.Signaled() { + return -1 + } + return syscall.Signal(w & mask) +} + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { + if w.StopSignal() != SIGTRAP { + return -1 + } + return int(w>>shift) >> 8 +} + +//sys wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { + var status _C_int + wpid, err = wait4(pid, &status, options, rusage) + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return +} + +func Mkfifo(path string, mode uint32) error { + return Mknod(path, mode|S_IFIFO, 0) +} + +func Mkfifoat(dirfd int, path string, mode uint32) error { + return Mknodat(dirfd, path, mode|S_IFIFO, 0) +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +type SockaddrLinklayer struct { + Protocol uint16 + Ifindex int + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]byte + raw RawSockaddrLinklayer +} + +func (sa *SockaddrLinklayer) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_PACKET + sa.raw.Protocol = sa.Protocol + sa.raw.Ifindex = int32(sa.Ifindex) + sa.raw.Hatype = sa.Hatype + sa.raw.Pkttype = sa.Pkttype + sa.raw.Halen = sa.Halen + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrLinklayer, nil +} + +type SockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 + raw RawSockaddrNetlink +} + +func (sa *SockaddrNetlink) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_NETLINK + sa.raw.Pad = sa.Pad + sa.raw.Pid = sa.Pid + sa.raw.Groups = sa.Groups + return unsafe.Pointer(&sa.raw), SizeofSockaddrNetlink, nil +} + +type SockaddrHCI struct { + Dev uint16 + Channel uint16 + raw RawSockaddrHCI +} + +func (sa *SockaddrHCI) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_BLUETOOTH + sa.raw.Dev = sa.Dev + sa.raw.Channel = sa.Channel + return unsafe.Pointer(&sa.raw), SizeofSockaddrHCI, nil +} + +// SockaddrCAN implements the Sockaddr interface for AF_CAN type sockets. +// The RxID and TxID fields are used for transport protocol addressing in +// (CAN_TP16, CAN_TP20, CAN_MCNET, and CAN_ISOTP), they can be left with +// zero values for CAN_RAW and CAN_BCM sockets as they have no meaning. +// +// The SockaddrCAN struct must be bound to the socket file descriptor +// using Bind before the CAN socket can be used. +// +// // Read one raw CAN frame +// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) +// addr := &SockaddrCAN{Ifindex: index} +// Bind(fd, addr) +// frame := make([]byte, 16) +// Read(fd, frame) +// +// The full SocketCAN documentation can be found in the linux kernel +// archives at: https://www.kernel.org/doc/Documentation/networking/can.txt +type SockaddrCAN struct { + Ifindex int + RxID uint32 + TxID uint32 + raw RawSockaddrCAN +} + +func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Ifindex < 0 || sa.Ifindex > 0x7fffffff { + return nil, 0, EINVAL + } + sa.raw.Family = AF_CAN + sa.raw.Ifindex = int32(sa.Ifindex) + rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i] = rx[i] + } + tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) + for i := 0; i < 4; i++ { + sa.raw.Addr[i+4] = tx[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil +} + +// SockaddrALG implements the Sockaddr interface for AF_ALG type sockets. +// SockaddrALG enables userspace access to the Linux kernel's cryptography +// subsystem. The Type and Name fields specify which type of hash or cipher +// should be used with a given socket. +// +// To create a file descriptor that provides access to a hash or cipher, both +// Bind and Accept must be used. Once the setup process is complete, input +// data can be written to the socket, processed by the kernel, and then read +// back as hash output or ciphertext. +// +// Here is an example of using an AF_ALG socket with SHA1 hashing. +// The initial socket setup process is as follows: +// +// // Open a socket to perform SHA1 hashing. +// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) +// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} +// unix.Bind(fd, addr) +// // Note: unix.Accept does not work at this time; must invoke accept() +// // manually using unix.Syscall. +// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) +// +// Once a file descriptor has been returned from Accept, it may be used to +// perform SHA1 hashing. The descriptor is not safe for concurrent use, but +// may be re-used repeatedly with subsequent Write and Read operations. +// +// When hashing a small byte slice or string, a single Write and Read may +// be used: +// +// // Assume hashfd is already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash an input string and read the results. Each Write discards +// // previous hash state. Read always reads the current state. +// b := make([]byte, 20) +// for i := 0; i < 2; i++ { +// io.WriteString(hash, "Hello, world.") +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// } +// // Output: +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// +// For hashing larger byte slices, or byte streams such as those read from +// a file or socket, use Sendto with MSG_MORE to instruct the kernel to update +// the hash digest instead of creating a new one for a given chunk and finalizing it. +// +// // Assume hashfd and addr are already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash the contents of a file. +// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") +// b := make([]byte, 4096) +// for { +// n, err := f.Read(b) +// if err == io.EOF { +// break +// } +// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) +// } +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 +// +// For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html. +type SockaddrALG struct { + Type string + Name string + Feature uint32 + Mask uint32 + raw RawSockaddrALG +} + +func (sa *SockaddrALG) sockaddr() (unsafe.Pointer, _Socklen, error) { + // Leave room for NUL byte terminator. + if len(sa.Type) > 13 { + return nil, 0, EINVAL + } + if len(sa.Name) > 63 { + return nil, 0, EINVAL + } + + sa.raw.Family = AF_ALG + sa.raw.Feat = sa.Feature + sa.raw.Mask = sa.Mask + + typ, err := ByteSliceFromString(sa.Type) + if err != nil { + return nil, 0, err + } + name, err := ByteSliceFromString(sa.Name) + if err != nil { + return nil, 0, err + } + + copy(sa.raw.Type[:], typ) + copy(sa.raw.Name[:], name) + + return unsafe.Pointer(&sa.raw), SizeofSockaddrALG, nil +} + +// SockaddrVM implements the Sockaddr interface for AF_VSOCK type sockets. +// SockaddrVM provides access to Linux VM sockets: a mechanism that enables +// bidirectional communication between a hypervisor and its guest virtual +// machines. +type SockaddrVM struct { + // CID and Port specify a context ID and port address for a VM socket. + // Guests have a unique CID, and hosts may have a well-known CID of: + // - VMADDR_CID_HYPERVISOR: refers to the hypervisor process. + // - VMADDR_CID_HOST: refers to other processes on the host. + CID uint32 + Port uint32 + raw RawSockaddrVM +} + +func (sa *SockaddrVM) sockaddr() (unsafe.Pointer, _Socklen, error) { + sa.raw.Family = AF_VSOCK + sa.raw.Port = sa.Port + sa.raw.Cid = sa.CID + + return unsafe.Pointer(&sa.raw), SizeofSockaddrVM, nil +} + +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_NETLINK: + pp := (*RawSockaddrNetlink)(unsafe.Pointer(rsa)) + sa := new(SockaddrNetlink) + sa.Family = pp.Family + sa.Pad = pp.Pad + sa.Pid = pp.Pid + sa.Groups = pp.Groups + return sa, nil + + case AF_PACKET: + pp := (*RawSockaddrLinklayer)(unsafe.Pointer(rsa)) + sa := new(SockaddrLinklayer) + sa.Protocol = pp.Protocol + sa.Ifindex = int(pp.Ifindex) + sa.Hatype = pp.Hatype + sa.Pkttype = pp.Pkttype + sa.Halen = pp.Halen + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + if pp.Path[0] == 0 { + // "Abstract" Unix domain socket. + // Rewrite leading NUL as @ for textual display. + // (This is the standard convention.) + // Not friendly to overwrite in place, + // but the callers below don't care. + pp.Path[0] = '@' + } + + // Assume path ends at NUL. + // This is not technically the Linux semantics for + // abstract Unix domain sockets--they are supposed + // to be uninterpreted fixed-size binary blobs--but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_VSOCK: + pp := (*RawSockaddrVM)(unsafe.Pointer(rsa)) + sa := &SockaddrVM{ + CID: pp.Cid, + Port: pp.Port, + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if err != nil { + return + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Accept4(fd int, flags int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept4(fd, &rsa, &len, flags) + if err != nil { + return + } + if len > SizeofSockaddrAny { + panic("RawSockaddrAny too small") + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(&rsa) +} + +func GetsockoptInet4Addr(fd, level, opt int) (value [4]byte, err error) { + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + return value, err +} + +func GetsockoptIPMreq(fd, level, opt int) (*IPMreq, error) { + var value IPMreq + vallen := _Socklen(SizeofIPMreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPMreqn(fd, level, opt int) (*IPMreqn, error) { + var value IPMreqn + vallen := _Socklen(SizeofIPMreqn) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6Mreq(fd, level, opt int) (*IPv6Mreq, error) { + var value IPv6Mreq + vallen := _Socklen(SizeofIPv6Mreq) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptIPv6MTUInfo(fd, level, opt int) (*IPv6MTUInfo, error) { + var value IPv6MTUInfo + vallen := _Socklen(SizeofIPv6MTUInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptICMPv6Filter(fd, level, opt int) (*ICMPv6Filter, error) { + var value ICMPv6Filter + vallen := _Socklen(SizeofICMPv6Filter) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptUcred(fd, level, opt int) (*Ucred, error) { + var value Ucred + vallen := _Socklen(SizeofUcred) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { + var value TCPInfo + vallen := _Socklen(SizeofTCPInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value), &vallen) + return &value, err +} + +func SetsockoptIPMreqn(fd, level, opt int, mreq *IPMreqn) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), unsafe.Sizeof(*mreq)) +} + +// Keyctl Commands (http://man7.org/linux/man-pages/man2/keyctl.2.html) + +// KeyctlInt calls keyctl commands in which each argument is an int. +// These commands are KEYCTL_REVOKE, KEYCTL_CHOWN, KEYCTL_CLEAR, KEYCTL_LINK, +// KEYCTL_UNLINK, KEYCTL_NEGATE, KEYCTL_SET_REQKEY_KEYRING, KEYCTL_SET_TIMEOUT, +// KEYCTL_ASSUME_AUTHORITY, KEYCTL_SESSION_TO_PARENT, KEYCTL_REJECT, +// KEYCTL_INVALIDATE, and KEYCTL_GET_PERSISTENT. +//sys KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlBuffer calls keyctl commands in which the third and fourth +// arguments are a buffer and its length, respectively. +// These commands are KEYCTL_UPDATE, KEYCTL_READ, and KEYCTL_INSTANTIATE. +//sys KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlString calls keyctl commands which return a string. +// These commands are KEYCTL_DESCRIBE and KEYCTL_GET_SECURITY. +func KeyctlString(cmd int, id int) (string, error) { + // We must loop as the string data may change in between the syscalls. + // We could allocate a large buffer here to reduce the chance that the + // syscall needs to be called twice; however, this is unnecessary as + // the performance loss is negligible. + var buffer []byte + for { + // Try to fill the buffer with data + length, err := KeyctlBuffer(cmd, id, buffer, 0) + if err != nil { + return "", err + } + + // Check if the data was written + if length <= len(buffer) { + // Exclude the null terminator + return string(buffer[:length-1]), nil + } + + // Make a bigger buffer if needed + buffer = make([]byte, length) + } +} + +// Keyctl commands with special signatures. + +// KeyctlGetKeyringID implements the KEYCTL_GET_KEYRING_ID command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_get_keyring_ID.3.html +func KeyctlGetKeyringID(id int, create bool) (ringid int, err error) { + createInt := 0 + if create { + createInt = 1 + } + return KeyctlInt(KEYCTL_GET_KEYRING_ID, id, createInt, 0, 0) +} + +// KeyctlSetperm implements the KEYCTL_SETPERM command. The perm value is the +// key handle permission mask as described in the "keyctl setperm" section of +// http://man7.org/linux/man-pages/man1/keyctl.1.html. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_setperm.3.html +func KeyctlSetperm(id int, perm uint32) error { + _, err := KeyctlInt(KEYCTL_SETPERM, id, int(perm), 0, 0) + return err +} + +//sys keyctlJoin(cmd int, arg2 string) (ret int, err error) = SYS_KEYCTL + +// KeyctlJoinSessionKeyring implements the KEYCTL_JOIN_SESSION_KEYRING command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_join_session_keyring.3.html +func KeyctlJoinSessionKeyring(name string) (ringid int, err error) { + return keyctlJoin(KEYCTL_JOIN_SESSION_KEYRING, name) +} + +//sys keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) = SYS_KEYCTL + +// KeyctlSearch implements the KEYCTL_SEARCH command. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_search.3.html +func KeyctlSearch(ringid int, keyType, description string, destRingid int) (id int, err error) { + return keyctlSearch(KEYCTL_SEARCH, ringid, keyType, description, destRingid) +} + +//sys keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) = SYS_KEYCTL + +// KeyctlInstantiateIOV implements the KEYCTL_INSTANTIATE_IOV command. This +// command is similar to KEYCTL_INSTANTIATE, except that the payload is a slice +// of Iovec (each of which represents a buffer) instead of a single buffer. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_instantiate_iov.3.html +func KeyctlInstantiateIOV(id int, payload []Iovec, ringid int) error { + return keyctlIOV(KEYCTL_INSTANTIATE_IOV, id, payload, ringid) +} + +//sys keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) = SYS_KEYCTL + +// KeyctlDHCompute implements the KEYCTL_DH_COMPUTE command. This command +// computes a Diffie-Hellman shared secret based on the provide params. The +// secret is written to the provided buffer and the returned size is the number +// of bytes written (returning an error if there is insufficient space in the +// buffer). If a nil buffer is passed in, this function returns the minimum +// buffer length needed to store the appropriate data. Note that this differs +// from KEYCTL_READ's behavior which always returns the requested payload size. +// See the full documentation at: +// http://man7.org/linux/man-pages/man3/keyctl_dh_compute.3.html +func KeyctlDHCompute(params *KeyctlDHParams, buffer []byte) (size int, err error) { + return keyctlDH(KEYCTL_DH_COMPUTE, params, buffer) +} + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = &p[0] + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + var sockType int + sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) + if err != nil { + return + } + // receive at least one normal byte + if sockType != SOCK_DGRAM && len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = &oob[0] + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); err != nil { + return + } + oobn = int(msg.Controllen) + recvflags = int(msg.Flags) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + var err error + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(ptr) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = &p[0] + iov.SetLen(len(p)) + } + var dummy byte + if len(oob) > 0 { + var sockType int + sockType, err = GetsockoptInt(fd, SOL_SOCKET, SO_TYPE) + if err != nil { + return 0, err + } + // send at least one normal byte + if sockType != SOCK_DGRAM && len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Control = &oob[0] + msg.SetControllen(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +// BindToDevice binds the socket associated with fd to device. +func BindToDevice(fd int, device string) (err error) { + return SetsockoptString(fd, SOL_SOCKET, SO_BINDTODEVICE, device) +} + +//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error) + +func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) { + // The peek requests are machine-size oriented, so we wrap it + // to retrieve arbitrary-length data. + + // The ptrace syscall differs from glibc's ptrace. + // Peeks returns the word in *data, not as the return value. + + var buf [sizeofPtr]byte + + // Leading edge. PEEKTEXT/PEEKDATA don't require aligned + // access (PEEKUSER warns that it might), but if we don't + // align our reads, we might straddle an unmapped page + // boundary and not get the bytes leading up to the page + // boundary. + n := 0 + if addr%sizeofPtr != 0 { + err = ptrace(req, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(out, buf[addr%sizeofPtr:]) + out = out[n:] + } + + // Remainder. + for len(out) > 0 { + // We use an internal buffer to guarantee alignment. + // It's not documented if this is necessary, but we're paranoid. + err = ptrace(req, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copied := copy(out, buf[0:]) + n += copied + out = out[copied:] + } + + return n, nil +} + +func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKTEXT, pid, addr, out) +} + +func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKDATA, pid, addr, out) +} + +func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) { + return ptracePeek(PTRACE_PEEKUSR, pid, addr, out) +} + +func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) { + // As for ptracePeek, we need to align our accesses to deal + // with the possibility of straddling an invalid page. + + // Leading edge. + n := 0 + if addr%sizeofPtr != 0 { + var buf [sizeofPtr]byte + err = ptrace(peekReq, pid, addr-addr%sizeofPtr, uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return 0, err + } + n += copy(buf[addr%sizeofPtr:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr-addr%sizeofPtr, word) + if err != nil { + return 0, err + } + data = data[n:] + } + + // Interior. + for len(data) > sizeofPtr { + word := *((*uintptr)(unsafe.Pointer(&data[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += sizeofPtr + data = data[sizeofPtr:] + } + + // Trailing edge. + if len(data) > 0 { + var buf [sizeofPtr]byte + err = ptrace(peekReq, pid, addr+uintptr(n), uintptr(unsafe.Pointer(&buf[0]))) + if err != nil { + return n, err + } + copy(buf[0:], data) + word := *((*uintptr)(unsafe.Pointer(&buf[0]))) + err = ptrace(pokeReq, pid, addr+uintptr(n), word) + if err != nil { + return n, err + } + n += len(data) + } + + return n, nil +} + +func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKETEXT, PTRACE_PEEKTEXT, pid, addr, data) +} + +func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) { + return ptracePoke(PTRACE_POKEDATA, PTRACE_PEEKDATA, pid, addr, data) +} + +func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +func PtraceSetOptions(pid int, options int) (err error) { + return ptrace(PTRACE_SETOPTIONS, pid, 0, uintptr(options)) +} + +func PtraceGetEventMsg(pid int) (msg uint, err error) { + var data _C_long + err = ptrace(PTRACE_GETEVENTMSG, pid, 0, uintptr(unsafe.Pointer(&data))) + msg = uint(data) + return +} + +func PtraceCont(pid int, signal int) (err error) { + return ptrace(PTRACE_CONT, pid, 0, uintptr(signal)) +} + +func PtraceSyscall(pid int, signal int) (err error) { + return ptrace(PTRACE_SYSCALL, pid, 0, uintptr(signal)) +} + +func PtraceSingleStep(pid int) (err error) { return ptrace(PTRACE_SINGLESTEP, pid, 0, 0) } + +func PtraceAttach(pid int) (err error) { return ptrace(PTRACE_ATTACH, pid, 0, 0) } + +func PtraceDetach(pid int) (err error) { return ptrace(PTRACE_DETACH, pid, 0, 0) } + +//sys reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) + +func Reboot(cmd int) (err error) { + return reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, cmd, "") +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + return Getdents(fd, buf) +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + reclen, ok := direntReclen(buf) + if !ok { + return 0, false + } + return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true +} + +//sys mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) + +func Mount(source string, target string, fstype string, flags uintptr, data string) (err error) { + // Certain file systems get rather angry and EINVAL if you give + // them an empty string of data, rather than NULL. + if data == "" { + return mount(source, target, fstype, flags, nil) + } + datap, err := BytePtrFromString(data) + if err != nil { + return err + } + return mount(source, target, fstype, flags, datap) +} + +// Sendto +// Recvfrom +// Socketpair + +/* + * Direct access + */ +//sys Acct(path string) (err error) +//sys AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) +//sys Adjtimex(buf *Timex) (state int, err error) +//sys Chdir(path string) (err error) +//sys Chroot(path string) (err error) +//sys ClockGettime(clockid int32, time *Timespec) (err error) +//sys Close(fd int) (err error) +//sys CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Dup(oldfd int) (fd int, err error) +//sys Dup3(oldfd int, newfd int, flags int) (err error) +//sysnb EpollCreate(size int) (fd int, err error) +//sysnb EpollCreate1(flag int) (fd int, err error) +//sysnb EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) +//sys Eventfd(initval uint, flags int) (fd int, err error) = SYS_EVENTFD2 +//sys Exit(code int) = SYS_EXIT_GROUP +//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fallocate(fd int, mode uint32, off int64, len int64) (err error) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys fcntl(fd int, cmd int, arg int) (val int, err error) +//sys Fdatasync(fd int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fsync(fd int) (err error) +//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 +//sysnb Getpgid(pid int) (pgid int, err error) + +func Getpgrp() (pid int) { + pid, _ = Getpgid(0) + return +} + +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sys Getrandom(buf []byte, flags int) (n int, err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettid() (tid int) +//sys Getxattr(path string, attr string, dest []byte) (sz int, err error) +//sys InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) +//sysnb InotifyInit1(flags int) (fd int, err error) +//sysnb InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) +//sysnb Kill(pid int, sig syscall.Signal) (err error) +//sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG +//sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error) +//sys Listxattr(path string, dest []byte) (sz int, err error) +//sys Llistxattr(path string, dest []byte) (sz int, err error) +//sys Lremovexattr(path string, attr string) (err error) +//sys Lsetxattr(path string, attr string, data []byte, flags int) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT +//sysnb prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 +//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) +//sys Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) = SYS_PSELECT6 +//sys read(fd int, p []byte) (n int, err error) +//sys Removexattr(path string, attr string) (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) +//sys Setdomainname(p []byte) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tv *Timeval) (err error) +//sys Setns(fd int, nstype int) (err error) + +// issue 1435. +// On linux Setuid and Setgid only affects the current thread, not the process. +// This does not match what most callers expect so we must return an error +// here rather than letting the caller think that the call succeeded. + +func Setuid(uid int) (err error) { + return EOPNOTSUPP +} + +func Setgid(uid int) (err error) { + return EOPNOTSUPP +} + +//sys Setpriority(which int, who int, prio int) (err error) +//sys Setxattr(path string, attr string, data []byte, flags int) (err error) +//sys Sync() +//sys Syncfs(fd int) (err error) +//sysnb Sysinfo(info *Sysinfo_t) (err error) +//sys Tee(rfd int, wfd int, len int, flags int) (n int64, err error) +//sysnb Tgkill(tgid int, tid int, sig syscall.Signal) (err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sysnb Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = SYS_UMOUNT2 +//sys Unshare(flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys exitThread(code int) (err error) = SYS_EXIT +//sys readlen(fd int, p *byte, np int) (n int, err error) = SYS_READ +//sys writelen(fd int, p *byte, np int) (n int, err error) = SYS_WRITE + +// mmap varies by architecture; see syscall_linux_*.go. +//sys munmap(addr uintptr, length uintptr) (err error) + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} + +//sys Madvise(b []byte, advice int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) + +// Vmsplice splices user pages from a slice of Iovecs into a pipe specified by fd, +// using the specified flags. +func Vmsplice(fd int, iovs []Iovec, flags int) (int, error) { + n, _, errno := Syscall6( + SYS_VMSPLICE, + uintptr(fd), + uintptr(unsafe.Pointer(&iovs[0])), + uintptr(len(iovs)), + uintptr(flags), + 0, + 0, + ) + if errno != 0 { + return 0, syscall.Errno(errno) + } + + return int(n), nil +} + +/* + * Unimplemented + */ +// AfsSyscall +// Alarm +// ArchPrctl +// Brk +// Capget +// Capset +// ClockGetres +// ClockNanosleep +// ClockSettime +// Clone +// CreateModule +// DeleteModule +// EpollCtlOld +// EpollPwait +// EpollWaitOld +// Execve +// Fgetxattr +// Flistxattr +// Fork +// Fremovexattr +// Fsetxattr +// Futex +// GetKernelSyms +// GetMempolicy +// GetRobustList +// GetThreadArea +// Getitimer +// Getpmsg +// IoCancel +// IoDestroy +// IoGetevents +// IoSetup +// IoSubmit +// IoprioGet +// IoprioSet +// KexecLoad +// LookupDcookie +// Mbind +// MigratePages +// Mincore +// ModifyLdt +// Mount +// MovePages +// MqGetsetattr +// MqNotify +// MqOpen +// MqTimedreceive +// MqTimedsend +// MqUnlink +// Mremap +// Msgctl +// Msgget +// Msgrcv +// Msgsnd +// Newfstatat +// Nfsservctl +// Personality +// Pselect6 +// Ptrace +// Putpmsg +// QueryModule +// Quotactl +// Readahead +// Readv +// RemapFilePages +// RestartSyscall +// RtSigaction +// RtSigpending +// RtSigprocmask +// RtSigqueueinfo +// RtSigreturn +// RtSigsuspend +// RtSigtimedwait +// SchedGetPriorityMax +// SchedGetPriorityMin +// SchedGetaffinity +// SchedGetparam +// SchedGetscheduler +// SchedRrGetInterval +// SchedSetaffinity +// SchedSetparam +// SchedYield +// Security +// Semctl +// Semget +// Semop +// Semtimedop +// SetMempolicy +// SetRobustList +// SetThreadArea +// SetTidAddress +// Shmat +// Shmctl +// Shmdt +// Shmget +// Sigaltstack +// Signalfd +// Swapoff +// Swapon +// Sysfs +// TimerCreate +// TimerDelete +// TimerGetoverrun +// TimerGettime +// TimerSettime +// Timerfd +// Tkill (obsolete) +// Tuxcall +// Umount2 +// Uselib +// Utimensat +// Vfork +// Vhangup +// Vserver +// Waitid +// _Sysctl diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_386.go b/vendor/golang.org/x/sys/unix/syscall_linux_386.go new file mode 100644 index 0000000..4774fa3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_386.go @@ -0,0 +1,390 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// TODO(rsc): Rewrite all nn(SP) references into name+(nn-8)(FP) +// so that go vet can check that they are correct. + +// +build 386,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// 64-bit file system and 32-bit uid calls +// (386 default is 32-bit file system and 16-bit uid). +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64_64 +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32 +//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Pause() (err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +// Vsyscalls on amd64. +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) + +//sys Utime(path string, buf *Utimbuf) (err error) + +// On x86 Linux, all the socket calls go through an extra indirection, +// I think because the 5-register system call interface can't handle +// the 6-argument calls like sendto and recvfrom. Instead the +// arguments to the underlying system call are the number below +// and a pointer to an array of uintptr. We hide the pointer in the +// socketcall assembly to avoid allocation on every system call. + +const ( + // see linux/net.h + _SOCKET = 1 + _BIND = 2 + _CONNECT = 3 + _LISTEN = 4 + _ACCEPT = 5 + _GETSOCKNAME = 6 + _GETPEERNAME = 7 + _SOCKETPAIR = 8 + _SEND = 9 + _RECV = 10 + _SENDTO = 11 + _RECVFROM = 12 + _SHUTDOWN = 13 + _SETSOCKOPT = 14 + _GETSOCKOPT = 15 + _SENDMSG = 16 + _RECVMSG = 17 + _ACCEPT4 = 18 + _RECVMMSG = 19 + _SENDMMSG = 20 +) + +func socketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) +func rawsocketcall(call int, a0, a1, a2, a3, a4, a5 uintptr) (n int, err syscall.Errno) + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + fd, e := socketcall(_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + fd, e := socketcall(_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETSOCKNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, e := rawsocketcall(_GETPEERNAME, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, e := rawsocketcall(_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e != 0 { + err = e + } + return +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_BIND, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, e := socketcall(_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func socket(domain int, typ int, proto int) (fd int, err error) { + fd, e := rawsocketcall(_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, e := socketcall(_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e != 0 { + err = e + } + return +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, e := socketcall(_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), vallen, 0) + if e != 0 { + err = e + } + return +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + n, e := socketcall(_RECVFROM, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + if e != 0 { + err = e + } + return +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + _, e := socketcall(_SENDTO, uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e != 0 { + err = e + } + return +} + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + n, e := socketcall(_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Listen(s int, n int) (err error) { + _, e := socketcall(_LISTEN, uintptr(s), uintptr(n), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Shutdown(s, how int) (err error) { + _, e := socketcall(_SHUTDOWN, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e != 0 { + err = e + } + return +} + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func (r *PtraceRegs) PC() uint64 { return uint64(uint32(r.Eip)) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Eip = int32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go new file mode 100644 index 0000000..3707f6b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -0,0 +1,143 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,linux + +package unix + +//sys Dup2(oldfd int, newfd int) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Gettimeofday(tv *Timeval) (err error) { + errno := gettimeofday(tv) + if errno != 0 { + return errno + } + return nil +} + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + errno := gettimeofday(&tv) + if errno != 0 { + return 0, errno + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Rip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Rip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go new file mode 100644 index 0000000..21a4946 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64_gc.go @@ -0,0 +1,13 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,linux +// +build !gccgo + +package unix + +import "syscall" + +//go:noescape +func gettimeofday(tv *Timeval) (err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go new file mode 100644 index 0000000..226be10 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm.go @@ -0,0 +1,254 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,linux + +package unix + +import ( + "syscall" + "unsafe" +) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +// Underlying system call writes to newoffset via pointer. +// Implemented in assembly to avoid allocation. +func seek(fd int, offset int64, whence int) (newoffset int64, err syscall.Errno) + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + newoffset, errno := seek(fd, offset, whence) + if errno != 0 { + return 0, errno + } + return newoffset, nil +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) = SYS_GETGROUPS32 +//sysnb setgroups(n int, list *_Gid_t) (err error) = SYS_SETGROUPS32 +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +// 64-bit file system and 32-bit uid calls +// (16-bit uid calls are not always supported in newer kernels) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) = SYS_FCHOWN32 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sysnb Getegid() (egid int) = SYS_GETEGID32 +//sysnb Geteuid() (euid int) = SYS_GETEUID32 +//sysnb Getgid() (gid int) = SYS_GETGID32 +//sysnb Getuid() (uid int) = SYS_GETUID32 +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) = SYS_LCHOWN32 +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys Setfsgid(gid int) (err error) = SYS_SETFSGID32 +//sys Setfsuid(uid int) (err error) = SYS_SETFSUID32 +//sysnb Setregid(rgid int, egid int) (err error) = SYS_SETREGID32 +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) = SYS_SETRESGID32 +//sysnb Setresuid(ruid int, euid int, suid int) (err error) = SYS_SETRESUID32 +//sysnb Setreuid(ruid int, euid int) (err error) = SYS_SETREUID32 +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 + +// Vsyscalls on amd64. +//sysnb Gettimeofday(tv *Timeval) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Pause() (err error) + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_ARM_FADVISE64_64, uintptr(fd), uintptr(advice), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(pathp)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = e + } + return +} + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_UGETRLIMIT + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint64 { return uint64(r.Uregs[15]) } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Uregs[15] = uint32(pc) } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go new file mode 100644 index 0000000..9a8e6e4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -0,0 +1,186 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm64,linux + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Listen(s int, n int) (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + ts := Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + return Pselect(nfd, r, w, e, &ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, 0) +} + +func Lchown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) +} + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func (r *PtraceRegs) PC() uint64 { return r.Pc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Pc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func InotifyInit() (fd int, err error) { + return InotifyInit1(0) +} + +func Dup2(oldfd int, newfd int) (err error) { + return Dup3(oldfd, newfd, 0) +} + +func Pause() (err error) { + _, _, e1 := Syscall6(SYS_PPOLL, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// TODO(dfc): constants that should be in zsysnum_linux_arm64.go, remove +// these when the deprecated syscalls that the syscall package relies on +// are removed. +const ( + SYS_GETPGRP = 1060 + SYS_UTIMES = 1037 + SYS_FUTIMESAT = 1066 + SYS_PAUSE = 1061 + SYS_USTAT = 1070 + SYS_UTIME = 1063 + SYS_LCHOWN = 1032 + SYS_TIME = 1062 + SYS_EPOLL_CREATE = 1042 + SYS_EPOLL_WAIT = 1069 +) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + var ts *Timespec + if timeout >= 0 { + ts = new(Timespec) + *ts = NsecToTimespec(int64(timeout) * 1e6) + } + if len(fds) == 0 { + return ppoll(nil, 0, ts, nil) + } + return ppoll(&fds[0], len(fds), ts, nil) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go new file mode 100644 index 0000000..cdda11a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mips64x.go @@ -0,0 +1,205 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips64 mips64le + +package unix + +//sys Dup2(oldfd int, newfd int) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + ts := Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + return Pselect(nfd, r, w, e, &ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +type stat_t struct { + Dev uint32 + Pad0 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad1 [3]uint32 + Size int64 + Atime uint32 + Atime_nsec uint32 + Mtime uint32 + Mtime_nsec uint32 + Ctime uint32 + Ctime_nsec uint32 + Blksize uint32 + Pad2 uint32 + Blocks int64 +} + +//sys fstat(fd int, st *stat_t) (err error) +//sys lstat(path string, st *stat_t) (err error) +//sys stat(path string, st *stat_t) (err error) + +func Fstat(fd int, s *Stat_t) (err error) { + st := &stat_t{} + err = fstat(fd, st) + fillStat_t(s, st) + return +} + +func Lstat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = lstat(path, st) + fillStat_t(s, st) + return +} + +func Stat(path string, s *Stat_t) (err error) { + st := &stat_t{} + err = stat(path, st) + fillStat_t(s, st) + return +} + +func fillStat_t(s *Stat_t, st *stat_t) { + s.Dev = st.Dev + s.Ino = st.Ino + s.Mode = st.Mode + s.Nlink = st.Nlink + s.Uid = st.Uid + s.Gid = st.Gid + s.Rdev = st.Rdev + s.Size = st.Size + s.Atim = Timespec{int64(st.Atime), int64(st.Atime_nsec)} + s.Mtim = Timespec{int64(st.Mtime), int64(st.Mtime_nsec)} + s.Ctim = Timespec{int64(st.Ctime), int64(st.Ctime_nsec)} + s.Blksize = st.Blksize + s.Blocks = st.Blocks +} + +func (r *PtraceRegs) PC() uint64 { return r.Epc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go new file mode 100644 index 0000000..a114ba8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_mipsx.go @@ -0,0 +1,230 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build mips mipsle + +package unix + +import ( + "syscall" + "unsafe" +) + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Ftruncate(fd int, length int64) (err error) = SYS_FTRUNCATE64 +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getuid() (uid int) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) = SYS_SENDFILE64 +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) + +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) = SYS_TRUNCATE64 +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) + +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) + +//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 +//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 +//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 + +//sys Utime(path string, buf *Utimbuf) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Pause() (err error) + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e := Syscall(SYS_FSTATFS64, uintptr(fd), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = errnoErr(e) + } + return +} + +func Statfs(path string, buf *Statfs_t) (err error) { + p, err := BytePtrFromString(path) + if err != nil { + return err + } + _, _, e := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(p)), unsafe.Sizeof(*buf), uintptr(unsafe.Pointer(buf))) + if e != 0 { + err = errnoErr(e) + } + return +} + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + _, _, e := Syscall6(SYS__LLSEEK, uintptr(fd), uintptr(offset>>32), uintptr(offset), uintptr(unsafe.Pointer(&off)), uintptr(whence), 0) + if e != 0 { + err = errnoErr(e) + } + return +} + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: int32(sec), Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: int32(sec), Usec: int32(usec)} +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + page := uintptr(offset / 4096) + if offset != int64(page)*4096 { + return 0, EINVAL + } + return mmap2(addr, length, prot, flags, fd, page) +} + +const rlimInf32 = ^uint32(0) +const rlimInf64 = ^uint64(0) + +type rlimit32 struct { + Cur uint32 + Max uint32 +} + +//sysnb getrlimit(resource int, rlim *rlimit32) (err error) = SYS_GETRLIMIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, nil, rlim) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + err = getrlimit(resource, &rl) + if err != nil { + return + } + + if rl.Cur == rlimInf32 { + rlim.Cur = rlimInf64 + } else { + rlim.Cur = uint64(rl.Cur) + } + + if rl.Max == rlimInf32 { + rlim.Max = rlimInf64 + } else { + rlim.Max = uint64(rl.Max) + } + return +} + +//sysnb setrlimit(resource int, rlim *rlimit32) (err error) = SYS_SETRLIMIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = prlimit(0, resource, rlim, nil) + if err != ENOSYS { + return err + } + + rl := rlimit32{} + if rlim.Cur == rlimInf64 { + rl.Cur = rlimInf32 + } else if rlim.Cur < uint64(rlimInf32) { + rl.Cur = uint32(rlim.Cur) + } else { + return EINVAL + } + if rlim.Max == rlimInf64 { + rl.Max = rlimInf32 + } else if rlim.Max < uint64(rlimInf32) { + rl.Max = uint32(rlim.Max) + } else { + return EINVAL + } + + return setrlimit(resource, &rl) +} + +func (r *PtraceRegs) PC() uint64 { return r.Epc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Epc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go new file mode 100644 index 0000000..7cae936 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_ppc64x.go @@ -0,0 +1,126 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux +// +build ppc64 ppc64le + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) = SYS_UGETRLIMIT +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Ioperm(from int, num int, on int) (err error) +//sys Iopl(level int) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) = SYS__NEWSELECT +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) = SYS_SYNC_FILE_RANGE2 +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Time(t *Time_t) (tt Time_t, err error) + +//sys Utime(path string, buf *Utimbuf) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func (r *PtraceRegs) PC() uint64 { return r.Nip } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Nip = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go new file mode 100644 index 0000000..e96a40c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_s390x.go @@ -0,0 +1,319 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build s390x,linux + +package unix + +import ( + "unsafe" +) + +//sys Dup2(oldfd int, newfd int) (err error) +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, 0) // pipe2 is the same as pipe when flags are set to 0. + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +func (r *PtraceRegs) PC() uint64 { return r.Psw.Addr } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Psw.Addr = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +// Linux on s390x uses the old mmap interface, which requires arguments to be passed in a struct. +// mmap2 also requires arguments to be passed in a struct; it is currently not exposed in . +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + mmap_args := [6]uintptr{addr, length, uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)} + r0, _, e1 := Syscall(SYS_MMAP, uintptr(unsafe.Pointer(&mmap_args[0])), 0, 0) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// On s390x Linux, all the socket calls go through an extra indirection. +// The arguments to the underlying system call (SYS_SOCKETCALL) are the +// number below and a pointer to an array of uintptr. +const ( + // see linux/net.h + netSocket = 1 + netBind = 2 + netConnect = 3 + netListen = 4 + netAccept = 5 + netGetSockName = 6 + netGetPeerName = 7 + netSocketPair = 8 + netSend = 9 + netRecv = 10 + netSendTo = 11 + netRecvFrom = 12 + netShutdown = 13 + netSetSockOpt = 14 + netGetSockOpt = 15 + netSendMsg = 16 + netRecvMsg = 17 + netAccept4 = 18 + netRecvMMsg = 19 + netSendMMsg = 20 +) + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (int, error) { + args := [4]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags)} + fd, _, err := Syscall(SYS_SOCKETCALL, netAccept4, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockname(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetSockName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func getpeername(s int, rsa *RawSockaddrAny, addrlen *_Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netGetPeerName, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socketpair(domain int, typ int, flags int, fd *[2]int32) error { + args := [4]uintptr{uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd))} + _, _, err := RawSyscall(SYS_SOCKETCALL, netSocketPair, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netBind, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) error { + args := [3]uintptr{uintptr(s), uintptr(addr), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netConnect, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func socket(domain int, typ int, proto int) (int, error) { + args := [3]uintptr{uintptr(domain), uintptr(typ), uintptr(proto)} + fd, _, err := RawSyscall(SYS_SOCKETCALL, netSocket, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(fd), nil +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) error { + args := [5]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen))} + _, _, err := Syscall(SYS_SOCKETCALL, netGetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) error { + args := [4]uintptr{uintptr(s), uintptr(level), uintptr(name), uintptr(val)} + _, _, err := Syscall(SYS_SOCKETCALL, netSetSockOpt, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvfrom(s int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (int, error) { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvFrom, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendto(s int, p []byte, flags int, to unsafe.Pointer, addrlen _Socklen) error { + var base uintptr + if len(p) > 0 { + base = uintptr(unsafe.Pointer(&p[0])) + } + args := [6]uintptr{uintptr(s), base, uintptr(len(p)), uintptr(flags), uintptr(to), uintptr(addrlen)} + _, _, err := Syscall(SYS_SOCKETCALL, netSendTo, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func recvmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netRecvMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func sendmsg(s int, msg *Msghdr, flags int) (int, error) { + args := [3]uintptr{uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)} + n, _, err := Syscall(SYS_SOCKETCALL, netSendMsg, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return 0, err + } + return int(n), nil +} + +func Listen(s int, n int) error { + args := [2]uintptr{uintptr(s), uintptr(n)} + _, _, err := Syscall(SYS_SOCKETCALL, netListen, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +func Shutdown(s, how int) error { + args := [2]uintptr{uintptr(s), uintptr(how)} + _, _, err := Syscall(SYS_SOCKETCALL, netShutdown, uintptr(unsafe.Pointer(&args)), 0) + if err != 0 { + return err + } + return nil +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go new file mode 100644 index 0000000..012a328 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_sparc64.go @@ -0,0 +1,142 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build sparc64,linux + +package unix + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Getuid() (uid int) +//sysnb InotifyInit() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Listen(s int, n int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK +//sys Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys Setfsgid(gid int) (err error) +//sys Setfsuid(uid int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(resource int, rlim *Rlimit) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +func Ioperm(from int, num int, on int) (err error) { + return ENOSYS +} + +func Iopl(level int) (err error) { + return ENOSYS +} + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func Time(t *Time_t) (tt Time_t, err error) { + var tv Timeval + err = Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +//sys Utime(path string, buf *Utimbuf) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func (r *PtraceRegs) PC() uint64 { return r.Tpc } + +func (r *PtraceRegs) SetPC(pc uint64) { r.Tpc = pc } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +//sysnb pipe(p *[2]_C_int) (err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sysnb pipe2(p *[2]_C_int, flags int) (err error) + +func Pipe2(p []int, flags int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe2(&pp, flags) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_test.go b/vendor/golang.org/x/sys/unix/syscall_linux_test.go new file mode 100644 index 0000000..84c69d2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_test.go @@ -0,0 +1,230 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build linux + +package unix_test + +import ( + "io/ioutil" + "os" + "testing" + "time" + + "golang.org/x/sys/unix" +) + +func TestFchmodat(t *testing.T) { + defer chtmpdir(t)() + + touch(t, "file1") + os.Symlink("file1", "symlink1") + + err := unix.Fchmodat(unix.AT_FDCWD, "symlink1", 0444, 0) + if err != nil { + t.Fatalf("Fchmodat: unexpected error: %v", err) + } + + fi, err := os.Stat("file1") + if err != nil { + t.Fatal(err) + } + + if fi.Mode() != 0444 { + t.Errorf("Fchmodat: failed to change mode: expected %v, got %v", 0444, fi.Mode()) + } + + err = unix.Fchmodat(unix.AT_FDCWD, "symlink1", 0444, unix.AT_SYMLINK_NOFOLLOW) + if err != unix.EOPNOTSUPP { + t.Fatalf("Fchmodat: unexpected error: %v, expected EOPNOTSUPP", err) + } +} + +func TestIoctlGetInt(t *testing.T) { + f, err := os.Open("/dev/random") + if err != nil { + t.Fatalf("failed to open device: %v", err) + } + defer f.Close() + + v, err := unix.IoctlGetInt(int(f.Fd()), unix.RNDGETENTCNT) + if err != nil { + t.Fatalf("failed to perform ioctl: %v", err) + } + + t.Logf("%d bits of entropy available", v) +} + +func TestPpoll(t *testing.T) { + f, cleanup := mktmpfifo(t) + defer cleanup() + + const timeout = 100 * time.Millisecond + + ok := make(chan bool, 1) + go func() { + select { + case <-time.After(10 * timeout): + t.Errorf("Ppoll: failed to timeout after %d", 10*timeout) + case <-ok: + } + }() + + fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} + timeoutTs := unix.NsecToTimespec(int64(timeout)) + n, err := unix.Ppoll(fds, &timeoutTs, nil) + ok <- true + if err != nil { + t.Errorf("Ppoll: unexpected error: %v", err) + return + } + if n != 0 { + t.Errorf("Ppoll: wrong number of events: got %v, expected %v", n, 0) + return + } +} + +func TestTime(t *testing.T) { + var ut unix.Time_t + ut2, err := unix.Time(&ut) + if err != nil { + t.Fatalf("Time: %v", err) + } + if ut != ut2 { + t.Errorf("Time: return value %v should be equal to argument %v", ut2, ut) + } + + var now time.Time + + for i := 0; i < 10; i++ { + ut, err = unix.Time(nil) + if err != nil { + t.Fatalf("Time: %v", err) + } + + now = time.Now() + + if int64(ut) == now.Unix() { + return + } + } + + t.Errorf("Time: return value %v should be nearly equal to time.Now().Unix() %v", ut, now.Unix()) +} + +func TestUtime(t *testing.T) { + defer chtmpdir(t)() + + touch(t, "file1") + + buf := &unix.Utimbuf{ + Modtime: 12345, + } + + err := unix.Utime("file1", buf) + if err != nil { + t.Fatalf("Utime: %v", err) + } + + fi, err := os.Stat("file1") + if err != nil { + t.Fatal(err) + } + + if fi.ModTime().Unix() != 12345 { + t.Errorf("Utime: failed to change modtime: expected %v, got %v", 12345, fi.ModTime().Unix()) + } +} + +func TestUtimesNanoAt(t *testing.T) { + defer chtmpdir(t)() + + symlink := "symlink1" + os.Remove(symlink) + err := os.Symlink("nonexisting", symlink) + if err != nil { + t.Fatal(err) + } + + ts := []unix.Timespec{ + {Sec: 1111, Nsec: 2222}, + {Sec: 3333, Nsec: 4444}, + } + err = unix.UtimesNanoAt(unix.AT_FDCWD, symlink, ts, unix.AT_SYMLINK_NOFOLLOW) + if err != nil { + t.Fatalf("UtimesNanoAt: %v", err) + } + + var st unix.Stat_t + err = unix.Lstat(symlink, &st) + if err != nil { + t.Fatalf("Lstat: %v", err) + } + if st.Atim != ts[0] { + t.Errorf("UtimesNanoAt: wrong atime: %v", st.Atim) + } + if st.Mtim != ts[1] { + t.Errorf("UtimesNanoAt: wrong mtime: %v", st.Mtim) + } +} + +func TestGetrlimit(t *testing.T) { + var rlim unix.Rlimit + err := unix.Getrlimit(unix.RLIMIT_AS, &rlim) + if err != nil { + t.Fatalf("Getrlimit: %v", err) + } +} + +func TestSelect(t *testing.T) { + _, err := unix.Select(0, nil, nil, nil, &unix.Timeval{Sec: 0, Usec: 0}) + if err != nil { + t.Fatalf("Select: %v", err) + } +} + +func TestUname(t *testing.T) { + var utsname unix.Utsname + err := unix.Uname(&utsname) + if err != nil { + t.Fatalf("Uname: %v", err) + } + + // conversion from []byte to string, golang.org/issue/20753 + t.Logf("OS: %s/%s %s", string(utsname.Sysname[:]), string(utsname.Machine[:]), string(utsname.Release[:])) +} + +// utilities taken from os/os_test.go + +func touch(t *testing.T, name string) { + f, err := os.Create(name) + if err != nil { + t.Fatal(err) + } + if err := f.Close(); err != nil { + t.Fatal(err) + } +} + +// chtmpdir changes the working directory to a new temporary directory and +// provides a cleanup function. Used when PWD is read-only. +func chtmpdir(t *testing.T) func() { + oldwd, err := os.Getwd() + if err != nil { + t.Fatalf("chtmpdir: %v", err) + } + d, err := ioutil.TempDir("", "test") + if err != nil { + t.Fatalf("chtmpdir: %v", err) + } + if err := os.Chdir(d); err != nil { + t.Fatalf("chtmpdir: %v", err) + } + return func() { + if err := os.Chdir(oldwd); err != nil { + t.Fatalf("chtmpdir: %v", err) + } + os.RemoveAll(d) + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go new file mode 100644 index 0000000..4455eff --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -0,0 +1,476 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// NetBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "syscall" + "unsafe" +) + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + raw RawSockaddrDatalink +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func sysctlNodes(mib []_C_int) (nodes []Sysctlnode, err error) { + var olen uintptr + + // Get a list of all sysctl nodes below the given MIB by performing + // a sysctl for the given MIB with CTL_QUERY appended. + mib = append(mib, CTL_QUERY) + qnode := Sysctlnode{Flags: SYSCTL_VERS_1} + qp := (*byte)(unsafe.Pointer(&qnode)) + sz := unsafe.Sizeof(qnode) + if err = sysctl(mib, nil, &olen, qp, sz); err != nil { + return nil, err + } + + // Now that we know the size, get the actual nodes. + nodes = make([]Sysctlnode, olen/sz) + np := (*byte)(unsafe.Pointer(&nodes[0])) + if err = sysctl(mib, np, &olen, qp, sz); err != nil { + return nil, err + } + + return nodes, nil +} + +func nametomib(name string) (mib []_C_int, err error) { + + // Split name into components. + var parts []string + last := 0 + for i := 0; i < len(name); i++ { + if name[i] == '.' { + parts = append(parts, name[last:i]) + last = i + 1 + } + } + parts = append(parts, name[last:]) + + // Discover the nodes and construct the MIB OID. + for partno, part := range parts { + nodes, err := sysctlNodes(mib) + if err != nil { + return nil, err + } + for _, node := range nodes { + n := make([]byte, 0) + for i := range node.Name { + if node.Name[i] != 0 { + n = append(n, byte(node.Name[i])) + } + } + if string(n) == part { + mib = append(mib, _C_int(node.Num)) + break + } + } + if len(mib) != partno+1 { + return nil, EINVAL + } + } + + return mib, nil +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sysnb pipe() (fd1 int, fd2 int, err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + p[0], p[1], err = pipe() + return +} + +//sys getdents(fd int, buf []byte) (n int, err error) +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + return getdents(fd, buf) +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + */ +// ____semctl13 +// __clone +// __fhopen40 +// __fhstat40 +// __fhstatvfs140 +// __fstat30 +// __getcwd +// __getfh30 +// __getlogin +// __lstat30 +// __mount50 +// __msgctl13 +// __msync13 +// __ntp_gettime30 +// __posix_chown +// __posix_fadvise50 +// __posix_fchown +// __posix_lchown +// __posix_rename +// __setlogin +// __shmctl13 +// __sigaction_sigtramp +// __sigaltstack14 +// __sigpending14 +// __sigprocmask14 +// __sigsuspend14 +// __sigtimedwait +// __stat30 +// __syscall +// __vfork14 +// _ksem_close +// _ksem_destroy +// _ksem_getvalue +// _ksem_init +// _ksem_open +// _ksem_post +// _ksem_trywait +// _ksem_unlink +// _ksem_wait +// _lwp_continue +// _lwp_create +// _lwp_ctl +// _lwp_detach +// _lwp_exit +// _lwp_getname +// _lwp_getprivate +// _lwp_kill +// _lwp_park +// _lwp_self +// _lwp_setname +// _lwp_setprivate +// _lwp_suspend +// _lwp_unpark +// _lwp_unpark_all +// _lwp_wait +// _lwp_wakeup +// _pset_bind +// _sched_getaffinity +// _sched_getparam +// _sched_setaffinity +// _sched_setparam +// acct +// aio_cancel +// aio_error +// aio_fsync +// aio_read +// aio_return +// aio_suspend +// aio_write +// break +// clock_getres +// clock_gettime +// clock_settime +// compat_09_ogetdomainname +// compat_09_osetdomainname +// compat_09_ouname +// compat_10_omsgsys +// compat_10_osemsys +// compat_10_oshmsys +// compat_12_fstat12 +// compat_12_getdirentries +// compat_12_lstat12 +// compat_12_msync +// compat_12_oreboot +// compat_12_oswapon +// compat_12_stat12 +// compat_13_sigaction13 +// compat_13_sigaltstack13 +// compat_13_sigpending13 +// compat_13_sigprocmask13 +// compat_13_sigreturn13 +// compat_13_sigsuspend13 +// compat_14___semctl +// compat_14_msgctl +// compat_14_shmctl +// compat_16___sigaction14 +// compat_16___sigreturn14 +// compat_20_fhstatfs +// compat_20_fstatfs +// compat_20_getfsstat +// compat_20_statfs +// compat_30___fhstat30 +// compat_30___fstat13 +// compat_30___lstat13 +// compat_30___stat13 +// compat_30_fhopen +// compat_30_fhstat +// compat_30_fhstatvfs1 +// compat_30_getdents +// compat_30_getfh +// compat_30_ntp_gettime +// compat_30_socket +// compat_40_mount +// compat_43_fstat43 +// compat_43_lstat43 +// compat_43_oaccept +// compat_43_ocreat +// compat_43_oftruncate +// compat_43_ogetdirentries +// compat_43_ogetdtablesize +// compat_43_ogethostid +// compat_43_ogethostname +// compat_43_ogetkerninfo +// compat_43_ogetpagesize +// compat_43_ogetpeername +// compat_43_ogetrlimit +// compat_43_ogetsockname +// compat_43_okillpg +// compat_43_olseek +// compat_43_ommap +// compat_43_oquota +// compat_43_orecv +// compat_43_orecvfrom +// compat_43_orecvmsg +// compat_43_osend +// compat_43_osendmsg +// compat_43_osethostid +// compat_43_osethostname +// compat_43_osetrlimit +// compat_43_osigblock +// compat_43_osigsetmask +// compat_43_osigstack +// compat_43_osigvec +// compat_43_otruncate +// compat_43_owait +// compat_43_stat43 +// execve +// extattr_delete_fd +// extattr_delete_file +// extattr_delete_link +// extattr_get_fd +// extattr_get_file +// extattr_get_link +// extattr_list_fd +// extattr_list_file +// extattr_list_link +// extattr_set_fd +// extattr_set_file +// extattr_set_link +// extattrctl +// fchroot +// fdatasync +// fgetxattr +// fktrace +// flistxattr +// fork +// fremovexattr +// fsetxattr +// fstatvfs1 +// fsync_range +// getcontext +// getitimer +// getvfsstat +// getxattr +// ioctl +// ktrace +// lchflags +// lchmod +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// lgetxattr +// lio_listio +// listxattr +// llistxattr +// lremovexattr +// lseek +// lsetxattr +// lutimes +// madvise +// mincore +// minherit +// modctl +// mq_close +// mq_getattr +// mq_notify +// mq_open +// mq_receive +// mq_send +// mq_setattr +// mq_timedreceive +// mq_timedsend +// mq_unlink +// mremap +// msgget +// msgrcv +// msgsnd +// nfssvc +// ntp_adjtime +// pmc_control +// pmc_get_info +// pollts +// preadv +// profil +// pselect +// pset_assign +// pset_create +// pset_destroy +// ptrace +// pwritev +// quotactl +// rasctl +// readv +// reboot +// removexattr +// sa_enable +// sa_preempt +// sa_register +// sa_setconcurrency +// sa_stacks +// sa_yield +// sbrk +// sched_yield +// semconfig +// semget +// semop +// setcontext +// setitimer +// setxattr +// shmat +// shmdt +// shmget +// sstk +// statvfs1 +// swapctl +// sysarch +// syscall +// timer_create +// timer_delete +// timer_getoverrun +// timer_gettime +// timer_settime +// undelete +// utrace +// uuidgen +// vadvise +// vfork +// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go new file mode 100644 index 0000000..24f74e5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_386.go @@ -0,0 +1,33 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go new file mode 100644 index 0000000..6878bf7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_amd64.go @@ -0,0 +1,33 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go new file mode 100644 index 0000000..dbbfcf7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd_arm.go @@ -0,0 +1,33 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,netbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = uint32(mode) + k.Flags = uint32(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_no_getwd.go b/vendor/golang.org/x/sys/unix/syscall_no_getwd.go new file mode 100644 index 0000000..530792e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_no_getwd.go @@ -0,0 +1,11 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build dragonfly freebsd netbsd openbsd + +package unix + +const ImplementsGetwd = false + +func Getwd() (string, error) { return "", ENOTSUP } diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go new file mode 100644 index 0000000..2158196 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -0,0 +1,286 @@ +// Copyright 2009,2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// OpenBSD system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_bsd.go or syscall_unix.go. + +package unix + +import ( + "syscall" + "unsafe" +) + +type SockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 + raw RawSockaddrDatalink +} + +func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) + +func nametomib(name string) (mib []_C_int, err error) { + + // Perform lookup via a binary search + left := 0 + right := len(sysctlMib) - 1 + for { + idx := left + (right-left)/2 + switch { + case name == sysctlMib[idx].ctlname: + return sysctlMib[idx].ctloid, nil + case name > sysctlMib[idx].ctlname: + left = idx + 1 + default: + right = idx - 1 + } + if left > right { + break + } + } + return nil, EINVAL +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Fileno), unsafe.Sizeof(Dirent{}.Fileno)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Namlen), unsafe.Sizeof(Dirent{}.Namlen)) +} + +//sysnb pipe(p *[2]_C_int) (err error) +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + err = pipe(&pp) + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return +} + +//sys getdents(fd int, buf []byte) (n int, err error) +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + return getdents(fd, buf) +} + +// TODO +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + return -1, ENOSYS +} + +func Getfsstat(buf []Statfs_t, flags int) (n int, err error) { + var _p0 unsafe.Pointer + var bufsize uintptr + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func setattrlistTimes(path string, times []Timespec, flags int) error { + // used on Darwin for UtimesNano + return ENOSYS +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chflags(path string, flags int) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(from int, to int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchflags(fd int, flags int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatfs(fd int, stat *Statfs_t) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (uid int) +//sysnb Getgid() (gid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgrp int) +//sysnb Getpid() (pid int) +//sysnb Getppid() (ppid int) +//sys Getpriority(which int, who int) (prio int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Getsid(pid int) (sid int, err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Issetugid() (tainted bool) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Kqueue() (fd int, err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Revoke(path string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK +//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Setlogin(name string) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Settimeofday(tp *Timeval) (err error) +//sysnb Setuid(uid int) (err error) +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statfs(path string, stat *Statfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sys Truncate(path string, length int64) (err error) +//sys Umask(newmask int) (oldmask int) +//sys Unlink(path string) (err error) +//sys Unmount(path string, flags int) (err error) +//sys write(fd int, p []byte) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ +//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE +//sys utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) + +/* + * Unimplemented + */ +// __getcwd +// __semctl +// __syscall +// __sysctl +// adjfreq +// break +// clock_getres +// clock_gettime +// clock_settime +// closefrom +// execve +// faccessat +// fchmodat +// fchownat +// fcntl +// fhopen +// fhstat +// fhstatfs +// fork +// fstatat +// futimens +// getfh +// getgid +// getitimer +// getlogin +// getresgid +// getresuid +// getrtable +// getthrid +// ioctl +// ktrace +// lfs_bmapv +// lfs_markv +// lfs_segclean +// lfs_segwait +// linkat +// mincore +// minherit +// mkdirat +// mkfifoat +// mknodat +// mount +// mquery +// msgctl +// msgget +// msgrcv +// msgsnd +// nfssvc +// nnpfspioctl +// openat +// preadv +// profil +// pwritev +// quotactl +// readlinkat +// readv +// reboot +// renameat +// rfork +// sched_yield +// semget +// semop +// setgroups +// setitimer +// setrtable +// setsockopt +// shmat +// shmctl +// shmdt +// shmget +// sigaction +// sigaltstack +// sigpending +// sigprocmask +// sigreturn +// sigsuspend +// symlinkat +// sysarch +// syscall +// threxit +// thrsigdivert +// thrsleep +// thrwakeup +// unlinkat +// vfork +// writev diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go new file mode 100644 index 0000000..994964a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_386.go @@ -0,0 +1,33 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build 386,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go new file mode 100644 index 0000000..649e67f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_amd64.go @@ -0,0 +1,33 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint64(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go new file mode 100644 index 0000000..59844f5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd_arm.go @@ -0,0 +1,33 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build arm,openbsd + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: int32(nsec)} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: int32(usec)} +} + +func SetKevent(k *Kevent_t, fd, mode, flags int) { + k.Ident = uint32(fd) + k.Filter = int16(mode) + k.Flags = uint16(flags) +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint32(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint32(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go new file mode 100644 index 0000000..3ab9e07 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -0,0 +1,728 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Solaris system calls. +// This file is compiled as ordinary Go code, +// but it is also input to mksyscall, +// which parses the //sys lines and generates system call stubs. +// Note that sometimes we use a lowercase //sys name and wrap +// it in our own nicer implementation, either here or in +// syscall_solaris.go or syscall_unix.go. + +package unix + +import ( + "syscall" + "unsafe" +) + +// Implemented in runtime/syscall_solaris.go. +type syscallFunc uintptr + +func rawSysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func sysvicall6(trap, nargs, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) + +type SockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 + raw RawSockaddrDatalink +} + +func clen(n []byte) int { + for i := 0; i < len(n); i++ { + if n[i] == 0 { + return i + } + } + return len(n) +} + +func direntIno(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Ino), unsafe.Sizeof(Dirent{}.Ino)) +} + +func direntReclen(buf []byte) (uint64, bool) { + return readInt(buf, unsafe.Offsetof(Dirent{}.Reclen), unsafe.Sizeof(Dirent{}.Reclen)) +} + +func direntNamlen(buf []byte) (uint64, bool) { + reclen, ok := direntReclen(buf) + if !ok { + return 0, false + } + return reclen - uint64(unsafe.Offsetof(Dirent{}.Name)), true +} + +//sysnb pipe(p *[2]_C_int) (n int, err error) + +func Pipe(p []int) (err error) { + if len(p) != 2 { + return EINVAL + } + var pp [2]_C_int + n, err := pipe(&pp) + if n != 0 { + return err + } + p[0] = int(pp[0]) + p[1] = int(pp[1]) + return nil +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet4, nil +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, _Socklen, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), SizeofSockaddrInet6, nil +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { + name := sa.Name + n := len(name) + if n >= len(sa.raw.Path) { + return nil, 0, EINVAL + } + sa.raw.Family = AF_UNIX + for i := 0; i < n; i++ { + sa.raw.Path[i] = int8(name[i]) + } + // length is family (uint16), name, NUL. + sl := _Socklen(2) + if n > 0 { + sl += _Socklen(n) + 1 + } + if sa.raw.Path[0] == '@' { + sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- + } + + return unsafe.Pointer(&sa.raw), sl, nil +} + +//sys getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getsockname + +func Getsockname(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getsockname(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(&rsa) +} + +const ImplementsGetwd = true + +//sys Getcwd(buf []byte) (n int, err error) + +func Getwd() (wd string, err error) { + var buf [PathMax]byte + // Getcwd will return an error if it failed for any reason. + _, err = Getcwd(buf[0:]) + if err != nil { + return "", err + } + n := clen(buf[:]) + if n < 1 { + return "", EINVAL + } + return string(buf[:n]), nil +} + +/* + * Wrapped + */ + +//sysnb getgroups(ngid int, gid *_Gid_t) (n int, err error) +//sysnb setgroups(ngid int, gid *_Gid_t) (err error) + +func Getgroups() (gids []int, err error) { + n, err := getgroups(0, nil) + // Check for error and sanity check group count. Newer versions of + // Solaris allow up to 1024 (NGROUPS_MAX). + if n < 0 || n > 1024 { + if err != nil { + return nil, err + } + return nil, EINVAL + } else if n == 0 { + return nil, nil + } + + a := make([]_Gid_t, n) + n, err = getgroups(n, &a[0]) + if n == -1 { + return nil, err + } + gids = make([]int, n) + for i, v := range a[0:n] { + gids[i] = int(v) + } + return +} + +func Setgroups(gids []int) (err error) { + if len(gids) == 0 { + return setgroups(0, nil) + } + + a := make([]_Gid_t, len(gids)) + for i, v := range gids { + a[i] = _Gid_t(v) + } + return setgroups(len(a), &a[0]) +} + +func ReadDirent(fd int, buf []byte) (n int, err error) { + // Final argument is (basep *uintptr) and the syscall doesn't take nil. + // TODO(rsc): Can we use a single global basep for all calls? + return Getdents(fd, buf, new(uintptr)) +} + +// Wait status is 7 bits at bottom, either 0 (exited), +// 0x7F (stopped), or a signal number that caused an exit. +// The 0x80 bit is whether there was a core dump. +// An extra number (exit code, signal causing a stop) +// is in the high bits. + +type WaitStatus uint32 + +const ( + mask = 0x7F + core = 0x80 + shift = 8 + + exited = 0 + stopped = 0x7F +) + +func (w WaitStatus) Exited() bool { return w&mask == exited } + +func (w WaitStatus) ExitStatus() int { + if w&mask != exited { + return -1 + } + return int(w >> shift) +} + +func (w WaitStatus) Signaled() bool { return w&mask != stopped && w&mask != 0 } + +func (w WaitStatus) Signal() syscall.Signal { + sig := syscall.Signal(w & mask) + if sig == stopped || sig == 0 { + return -1 + } + return sig +} + +func (w WaitStatus) CoreDump() bool { return w.Signaled() && w&core != 0 } + +func (w WaitStatus) Stopped() bool { return w&mask == stopped && syscall.Signal(w>>shift) != SIGSTOP } + +func (w WaitStatus) Continued() bool { return w&mask == stopped && syscall.Signal(w>>shift) == SIGSTOP } + +func (w WaitStatus) StopSignal() syscall.Signal { + if !w.Stopped() { + return -1 + } + return syscall.Signal(w>>shift) & 0xFF +} + +func (w WaitStatus) TrapCause() int { return -1 } + +//sys wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) + +func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (int, error) { + var status _C_int + rpid, err := wait4(int32(pid), &status, options, rusage) + wpid := int(rpid) + if wpid == -1 { + return wpid, err + } + if wstatus != nil { + *wstatus = WaitStatus(status) + } + return wpid, nil +} + +//sys gethostname(buf []byte) (n int, err error) + +func Gethostname() (name string, err error) { + var buf [MaxHostNameLen]byte + n, err := gethostname(buf[:]) + if n != 0 { + return "", err + } + n = clen(buf[:]) + if n < 1 { + return "", EFAULT + } + return string(buf[:n]), nil +} + +//sys utimes(path string, times *[2]Timeval) (err error) + +func Utimes(path string, tv []Timeval) (err error) { + if tv == nil { + return utimes(path, nil) + } + if len(tv) != 2 { + return EINVAL + } + return utimes(path, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +//sys utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) + +func UtimesNano(path string, ts []Timespec) error { + if ts == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func UtimesNanoAt(dirfd int, path string, ts []Timespec, flags int) error { + if ts == nil { + return utimensat(dirfd, path, nil, flags) + } + if len(ts) != 2 { + return EINVAL + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), flags) +} + +//sys fcntl(fd int, cmd int, arg int) (val int, err error) + +// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command. +func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(unsafe.Pointer(lk)), 0, 0, 0) + if e1 != 0 { + return e1 + } + return nil +} + +//sys futimesat(fildes int, path *byte, times *[2]Timeval) (err error) + +func Futimesat(dirfd int, path string, tv []Timeval) error { + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + if tv == nil { + return futimesat(dirfd, pathp, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(dirfd, pathp, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +// Solaris doesn't have an futimes function because it allows NULL to be +// specified as the path for futimesat. However, Go doesn't like +// NULL-style string interfaces, so this simple wrapper is provided. +func Futimes(fd int, tv []Timeval) error { + if tv == nil { + return futimesat(fd, nil, nil) + } + if len(tv) != 2 { + return EINVAL + } + return futimesat(fd, nil, (*[2]Timeval)(unsafe.Pointer(&tv[0]))) +} + +func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_UNIX: + pp := (*RawSockaddrUnix)(unsafe.Pointer(rsa)) + sa := new(SockaddrUnix) + // Assume path ends at NUL. + // This is not technically the Solaris semantics for + // abstract Unix domain sockets -- they are supposed + // to be uninterpreted fixed-size binary blobs -- but + // everyone uses this convention. + n := 0 + for n < len(pp.Path) && pp.Path[n] != 0 { + n++ + } + bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n] + sa.Name = string(bytes) + return sa, nil + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, EAFNOSUPPORT +} + +//sys accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) = libsocket.accept + +func Accept(fd int) (nfd int, sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + nfd, err = accept(fd, &rsa, &len) + if nfd == -1 { + return + } + sa, err = anyToSockaddr(&rsa) + if err != nil { + Close(nfd) + nfd = 0 + } + return +} + +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_recvmsg + +func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from Sockaddr, err error) { + var msg Msghdr + var rsa RawSockaddrAny + msg.Name = (*byte)(unsafe.Pointer(&rsa)) + msg.Namelen = uint32(SizeofSockaddrAny) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // receive at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrightslen = int32(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = recvmsg(fd, &msg, flags); n == -1 { + return + } + oobn = int(msg.Accrightslen) + // source address is only specified if the socket is unconnected + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +func Sendmsg(fd int, p, oob []byte, to Sockaddr, flags int) (err error) { + _, err = SendmsgN(fd, p, oob, to, flags) + return +} + +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) = libsocket.__xnet_sendmsg + +func SendmsgN(fd int, p, oob []byte, to Sockaddr, flags int) (n int, err error) { + var ptr unsafe.Pointer + var salen _Socklen + if to != nil { + ptr, salen, err = to.sockaddr() + if err != nil { + return 0, err + } + } + var msg Msghdr + msg.Name = (*byte)(unsafe.Pointer(ptr)) + msg.Namelen = uint32(salen) + var iov Iovec + if len(p) > 0 { + iov.Base = (*int8)(unsafe.Pointer(&p[0])) + iov.SetLen(len(p)) + } + var dummy int8 + if len(oob) > 0 { + // send at least one normal byte + if len(p) == 0 { + iov.Base = &dummy + iov.SetLen(1) + } + msg.Accrightslen = int32(len(oob)) + } + msg.Iov = &iov + msg.Iovlen = 1 + if n, err = sendmsg(fd, &msg, flags); err != nil { + return 0, err + } + if len(oob) > 0 && len(p) == 0 { + n = 0 + } + return n, nil +} + +//sys acct(path *byte) (err error) + +func Acct(path string) (err error) { + if len(path) == 0 { + // Assume caller wants to disable accounting. + return acct(nil) + } + + pathp, err := BytePtrFromString(path) + if err != nil { + return err + } + return acct(pathp) +} + +//sys __makedev(version int, major uint, minor uint) (val uint64) + +func Mkdev(major, minor uint32) uint64 { + return __makedev(NEWDEV, uint(major), uint(minor)) +} + +//sys __major(version int, dev uint64) (val uint) + +func Major(dev uint64) uint32 { + return uint32(__major(NEWDEV, dev)) +} + +//sys __minor(version int, dev uint64) (val uint) + +func Minor(dev uint64) uint32 { + return uint32(__minor(NEWDEV, dev)) +} + +/* + * Expose the ioctl function + */ + +//sys ioctl(fd int, req uint, arg uintptr) (err error) + +func IoctlSetInt(fd int, req uint, value int) (err error) { + return ioctl(fd, req, uintptr(value)) +} + +func IoctlSetWinsize(fd int, req uint, value *Winsize) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermios(fd int, req uint, value *Termios) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlSetTermio(fd int, req uint, value *Termio) (err error) { + return ioctl(fd, req, uintptr(unsafe.Pointer(value))) +} + +func IoctlGetInt(fd int, req uint) (int, error) { + var value int + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return value, err +} + +func IoctlGetWinsize(fd int, req uint) (*Winsize, error) { + var value Winsize + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermios(fd int, req uint) (*Termios, error) { + var value Termios + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +func IoctlGetTermio(fd int, req uint) (*Termio, error) { + var value Termio + err := ioctl(fd, req, uintptr(unsafe.Pointer(&value))) + return &value, err +} + +//sys poll(fds *PollFd, nfds int, timeout int) (n int, err error) + +func Poll(fds []PollFd, timeout int) (n int, err error) { + if len(fds) == 0 { + return poll(nil, 0, timeout) + } + return poll(&fds[0], len(fds), timeout) +} + +/* + * Exposed directly + */ +//sys Access(path string, mode uint32) (err error) +//sys Adjtime(delta *Timeval, olddelta *Timeval) (err error) +//sys Chdir(path string) (err error) +//sys Chmod(path string, mode uint32) (err error) +//sys Chown(path string, uid int, gid int) (err error) +//sys Chroot(path string) (err error) +//sys Close(fd int) (err error) +//sys Creat(path string, mode uint32) (fd int, err error) +//sys Dup(fd int) (nfd int, err error) +//sys Dup2(oldfd int, newfd int) (err error) +//sys Exit(code int) +//sys Fchdir(fd int) (err error) +//sys Fchmod(fd int, mode uint32) (err error) +//sys Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) +//sys Fdatasync(fd int) (err error) +//sys Flock(fd int, how int) (err error) +//sys Fpathconf(fd int, name int) (val int, err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) +//sys Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) +//sysnb Getgid() (gid int) +//sysnb Getpid() (pid int) +//sysnb Getpgid(pid int) (pgid int, err error) +//sysnb Getpgrp() (pgid int, err error) +//sys Geteuid() (euid int) +//sys Getegid() (egid int) +//sys Getppid() (ppid int) +//sys Getpriority(which int, who int) (n int, err error) +//sysnb Getrlimit(which int, lim *Rlimit) (err error) +//sysnb Getrusage(who int, rusage *Rusage) (err error) +//sysnb Gettimeofday(tv *Timeval) (err error) +//sysnb Getuid() (uid int) +//sys Kill(pid int, signum syscall.Signal) (err error) +//sys Lchown(path string, uid int, gid int) (err error) +//sys Link(path string, link string) (err error) +//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten +//sys Lstat(path string, stat *Stat_t) (err error) +//sys Madvise(b []byte, advice int) (err error) +//sys Mkdir(path string, mode uint32) (err error) +//sys Mkdirat(dirfd int, path string, mode uint32) (err error) +//sys Mkfifo(path string, mode uint32) (err error) +//sys Mkfifoat(dirfd int, path string, mode uint32) (err error) +//sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Mlock(b []byte) (err error) +//sys Mlockall(flags int) (err error) +//sys Mprotect(b []byte, prot int) (err error) +//sys Msync(b []byte, flags int) (err error) +//sys Munlock(b []byte) (err error) +//sys Munlockall() (err error) +//sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys Open(path string, mode int, perm uint32) (fd int, err error) +//sys Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) +//sys Pathconf(path string, name int) (val int, err error) +//sys Pause() (err error) +//sys Pread(fd int, p []byte, offset int64) (n int, err error) +//sys Pwrite(fd int, p []byte, offset int64) (n int, err error) +//sys read(fd int, p []byte) (n int, err error) +//sys Readlink(path string, buf []byte) (n int, err error) +//sys Rename(from string, to string) (err error) +//sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) +//sys Rmdir(path string) (err error) +//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = lseek +//sysnb Setegid(egid int) (err error) +//sysnb Seteuid(euid int) (err error) +//sysnb Setgid(gid int) (err error) +//sys Sethostname(p []byte) (err error) +//sysnb Setpgid(pid int, pgid int) (err error) +//sys Setpriority(which int, who int, prio int) (err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sysnb Setrlimit(which int, lim *Rlimit) (err error) +//sysnb Setsid() (pid int, err error) +//sysnb Setuid(uid int) (err error) +//sys Shutdown(s int, how int) (err error) = libsocket.shutdown +//sys Stat(path string, stat *Stat_t) (err error) +//sys Statvfs(path string, vfsstat *Statvfs_t) (err error) +//sys Symlink(path string, link string) (err error) +//sys Sync() (err error) +//sysnb Times(tms *Tms) (ticks uintptr, err error) +//sys Truncate(path string, length int64) (err error) +//sys Fsync(fd int) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sys Umask(mask int) (oldmask int) +//sysnb Uname(buf *Utsname) (err error) +//sys Unmount(target string, flags int) (err error) = libc.umount +//sys Unlink(path string) (err error) +//sys Unlinkat(dirfd int, path string, flags int) (err error) +//sys Ustat(dev int, ubuf *Ustat_t) (err error) +//sys Utime(path string, buf *Utimbuf) (err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_bind +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_connect +//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) +//sys munmap(addr uintptr, length uintptr) (err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) = libsocket.__xnet_sendto +//sys socket(domain int, typ int, proto int) (fd int, err error) = libsocket.__xnet_socket +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) = libsocket.__xnet_socketpair +//sys write(fd int, p []byte) (n int, err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) = libsocket.__xnet_getsockopt +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) = libsocket.getpeername +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) = libsocket.setsockopt +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) = libsocket.recvfrom + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +var mapper = &mmapper{ + active: make(map[*byte][]byte), + mmap: mmap, + munmap: munmap, +} + +func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + return mapper.Mmap(fd, offset, length, prot, flags) +} + +func Munmap(b []byte) (err error) { + return mapper.Munmap(b) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go new file mode 100644 index 0000000..9d4e7a6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris_amd64.go @@ -0,0 +1,28 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,solaris + +package unix + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint32(length) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + // TODO(aram): implement this, see issue 5847. + panic("unimplemented") +} diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris_test.go b/vendor/golang.org/x/sys/unix/syscall_solaris_test.go new file mode 100644 index 0000000..d3e7d2b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_solaris_test.go @@ -0,0 +1,34 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build solaris + +package unix_test + +import ( + "os/exec" + "testing" + + "golang.org/x/sys/unix" +) + +func TestStatvfs(t *testing.T) { + if err := unix.Statvfs("", nil); err == nil { + t.Fatal(`Statvfs("") expected failure`) + } + + statvfs := unix.Statvfs_t{} + if err := unix.Statvfs("/", &statvfs); err != nil { + t.Errorf(`Statvfs("/") failed: %v`, err) + } + + if t.Failed() { + mount, err := exec.Command("mount").CombinedOutput() + if err != nil { + t.Logf("mount: %v\n%s", err, mount) + } else { + t.Logf("mount: %s", mount) + } + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_test.go b/vendor/golang.org/x/sys/unix/syscall_test.go new file mode 100644 index 0000000..95eac92 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_test.go @@ -0,0 +1,50 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix_test + +import ( + "fmt" + "testing" + + "golang.org/x/sys/unix" +) + +func testSetGetenv(t *testing.T, key, value string) { + err := unix.Setenv(key, value) + if err != nil { + t.Fatalf("Setenv failed to set %q: %v", value, err) + } + newvalue, found := unix.Getenv(key) + if !found { + t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) + } + if newvalue != value { + t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) + } +} + +func TestEnv(t *testing.T) { + testSetGetenv(t, "TESTENV", "AVALUE") + // make sure TESTENV gets set to "", not deleted + testSetGetenv(t, "TESTENV", "") +} + +func TestItoa(t *testing.T) { + // Make most negative integer: 0x8000... + i := 1 + for i<<1 != 0 { + i <<= 1 + } + if i >= 0 { + t.Fatal("bad math") + } + s := unix.Itoa(i) + f := fmt.Sprint(i) + if s != f { + t.Fatalf("itoa(%d) = %s, want %s", i, s, f) + } +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go new file mode 100644 index 0000000..3ed8a91 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -0,0 +1,293 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +import ( + "runtime" + "sync" + "syscall" + "unsafe" +) + +var ( + Stdin = 0 + Stdout = 1 + Stderr = 2 +) + +const ( + darwin64Bit = runtime.GOOS == "darwin" && sizeofPtr == 8 + dragonfly64Bit = runtime.GOOS == "dragonfly" && sizeofPtr == 8 + netbsd32Bit = runtime.GOOS == "netbsd" && sizeofPtr == 4 + solaris64Bit = runtime.GOOS == "solaris" && sizeofPtr == 8 +) + +// Do the interface allocations only once for common +// Errno values. +var ( + errEAGAIN error = syscall.EAGAIN + errEINVAL error = syscall.EINVAL + errENOENT error = syscall.ENOENT +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return nil + case EAGAIN: + return errEAGAIN + case EINVAL: + return errEINVAL + case ENOENT: + return errENOENT + } + return e +} + +// Mmap manager, for use by operating system-specific implementations. + +type mmapper struct { + sync.Mutex + active map[*byte][]byte // active mappings; key is last byte in mapping + mmap func(addr, length uintptr, prot, flags, fd int, offset int64) (uintptr, error) + munmap func(addr uintptr, length uintptr) error +} + +func (m *mmapper) Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) { + if length <= 0 { + return nil, EINVAL + } + + // Map the requested memory. + addr, errno := m.mmap(0, uintptr(length), prot, flags, fd, offset) + if errno != nil { + return nil, errno + } + + // Slice memory layout + var sl = struct { + addr uintptr + len int + cap int + }{addr, length, length} + + // Use unsafe to turn sl into a []byte. + b := *(*[]byte)(unsafe.Pointer(&sl)) + + // Register mapping in m and return it. + p := &b[cap(b)-1] + m.Lock() + defer m.Unlock() + m.active[p] = b + return b, nil +} + +func (m *mmapper) Munmap(data []byte) (err error) { + if len(data) == 0 || len(data) != cap(data) { + return EINVAL + } + + // Find the base of the mapping. + p := &data[cap(data)-1] + m.Lock() + defer m.Unlock() + b := m.active[p] + if b == nil || &b[0] != &data[0] { + return EINVAL + } + + // Unmap the memory and update m. + if errno := m.munmap(uintptr(unsafe.Pointer(&b[0])), uintptr(len(b))); errno != nil { + return errno + } + delete(m.active, p) + return nil +} + +func Read(fd int, p []byte) (n int, err error) { + n, err = read(fd, p) + if raceenabled { + if n > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), n) + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } + } + return +} + +func Write(fd int, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = write(fd, p) + if raceenabled && n > 0 { + raceReadRange(unsafe.Pointer(&p[0]), n) + } + return +} + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len _Socklen, err error) // lowercase; only we can define Sockaddrs +} + +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +type SockaddrUnix struct { + Name string + raw RawSockaddrUnix +} + +func Bind(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd int, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func Getpeername(fd int) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if err = getpeername(fd, &rsa, &len); err != nil { + return + } + return anyToSockaddr(&rsa) +} + +func GetsockoptInt(fd, level, opt int) (value int, err error) { + var n int32 + vallen := _Socklen(4) + err = getsockopt(fd, level, opt, unsafe.Pointer(&n), &vallen) + return int(n), err +} + +func Recvfrom(fd int, p []byte, flags int) (n int, from Sockaddr, err error) { + var rsa RawSockaddrAny + var len _Socklen = SizeofSockaddrAny + if n, err = recvfrom(fd, p, flags, &rsa, &len); err != nil { + return + } + if rsa.Addr.Family != AF_UNSPEC { + from, err = anyToSockaddr(&rsa) + } + return +} + +func Sendto(fd int, p []byte, flags int, to Sockaddr) (err error) { + ptr, n, err := to.sockaddr() + if err != nil { + return err + } + return sendto(fd, p, flags, ptr, n) +} + +func SetsockoptByte(fd, level, opt int, value byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value), 1) +} + +func SetsockoptInt(fd, level, opt int, value int) (err error) { + var n = int32(value) + return setsockopt(fd, level, opt, unsafe.Pointer(&n), 4) +} + +func SetsockoptInet4Addr(fd, level, opt int, value [4]byte) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&value[0]), 4) +} + +func SetsockoptIPMreq(fd, level, opt int, mreq *IPMreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPMreq) +} + +func SetsockoptIPv6Mreq(fd, level, opt int, mreq *IPv6Mreq) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(mreq), SizeofIPv6Mreq) +} + +func SetsockoptICMPv6Filter(fd, level, opt int, filter *ICMPv6Filter) error { + return setsockopt(fd, level, opt, unsafe.Pointer(filter), SizeofICMPv6Filter) +} + +func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(l), SizeofLinger) +} + +func SetsockoptString(fd, level, opt int, s string) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(&[]byte(s)[0]), uintptr(len(s))) +} + +func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) { + return setsockopt(fd, level, opt, unsafe.Pointer(tv), unsafe.Sizeof(*tv)) +} + +func Socket(domain, typ, proto int) (fd int, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return -1, EAFNOSUPPORT + } + fd, err = socket(domain, typ, proto) + return +} + +func Socketpair(domain, typ, proto int) (fd [2]int, err error) { + var fdx [2]int32 + err = socketpair(domain, typ, proto, &fdx) + if err == nil { + fd[0] = int(fdx[0]) + fd[1] = int(fdx[1]) + } + return +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +var ioSync int64 + +func CloseOnExec(fd int) { fcntl(fd, F_SETFD, FD_CLOEXEC) } + +func SetNonblock(fd int, nonblocking bool) (err error) { + flag, err := fcntl(fd, F_GETFL, 0) + if err != nil { + return err + } + if nonblocking { + flag |= O_NONBLOCK + } else { + flag &= ^O_NONBLOCK + } + _, err = fcntl(fd, F_SETFL, flag) + return err +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_gc.go b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go new file mode 100644 index 0000000..4cb8e8e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix_gc.go @@ -0,0 +1,15 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris +// +build !gccgo + +package unix + +import "syscall" + +func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) +func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) diff --git a/vendor/golang.org/x/sys/unix/syscall_unix_test.go b/vendor/golang.org/x/sys/unix/syscall_unix_test.go new file mode 100644 index 0000000..d0a09ce --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_unix_test.go @@ -0,0 +1,398 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix_test + +import ( + "flag" + "fmt" + "io/ioutil" + "net" + "os" + "os/exec" + "path/filepath" + "runtime" + "testing" + "time" + + "golang.org/x/sys/unix" +) + +// Tests that below functions, structures and constants are consistent +// on all Unix-like systems. +func _() { + // program scheduling priority functions and constants + var ( + _ func(int, int, int) error = unix.Setpriority + _ func(int, int) (int, error) = unix.Getpriority + ) + const ( + _ int = unix.PRIO_USER + _ int = unix.PRIO_PROCESS + _ int = unix.PRIO_PGRP + ) + + // termios constants + const ( + _ int = unix.TCIFLUSH + _ int = unix.TCIOFLUSH + _ int = unix.TCOFLUSH + ) + + // fcntl file locking structure and constants + var ( + _ = unix.Flock_t{ + Type: int16(0), + Whence: int16(0), + Start: int64(0), + Len: int64(0), + Pid: int32(0), + } + ) + const ( + _ = unix.F_GETLK + _ = unix.F_SETLK + _ = unix.F_SETLKW + ) +} + +// TestFcntlFlock tests whether the file locking structure matches +// the calling convention of each kernel. +func TestFcntlFlock(t *testing.T) { + name := filepath.Join(os.TempDir(), "TestFcntlFlock") + fd, err := unix.Open(name, unix.O_CREAT|unix.O_RDWR|unix.O_CLOEXEC, 0) + if err != nil { + t.Fatalf("Open failed: %v", err) + } + defer unix.Unlink(name) + defer unix.Close(fd) + flock := unix.Flock_t{ + Type: unix.F_RDLCK, + Start: 0, Len: 0, Whence: 1, + } + if err := unix.FcntlFlock(uintptr(fd), unix.F_GETLK, &flock); err != nil { + t.Fatalf("FcntlFlock failed: %v", err) + } +} + +// TestPassFD tests passing a file descriptor over a Unix socket. +// +// This test involved both a parent and child process. The parent +// process is invoked as a normal test, with "go test", which then +// runs the child process by running the current test binary with args +// "-test.run=^TestPassFD$" and an environment variable used to signal +// that the test should become the child process instead. +func TestPassFD(t *testing.T) { + if os.Getenv("GO_WANT_HELPER_PROCESS") == "1" { + passFDChild() + return + } + + tempDir, err := ioutil.TempDir("", "TestPassFD") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tempDir) + + fds, err := unix.Socketpair(unix.AF_LOCAL, unix.SOCK_STREAM, 0) + if err != nil { + t.Fatalf("Socketpair: %v", err) + } + defer unix.Close(fds[0]) + defer unix.Close(fds[1]) + writeFile := os.NewFile(uintptr(fds[0]), "child-writes") + readFile := os.NewFile(uintptr(fds[1]), "parent-reads") + defer writeFile.Close() + defer readFile.Close() + + cmd := exec.Command(os.Args[0], "-test.run=^TestPassFD$", "--", tempDir) + cmd.Env = []string{"GO_WANT_HELPER_PROCESS=1"} + if lp := os.Getenv("LD_LIBRARY_PATH"); lp != "" { + cmd.Env = append(cmd.Env, "LD_LIBRARY_PATH="+lp) + } + cmd.ExtraFiles = []*os.File{writeFile} + + out, err := cmd.CombinedOutput() + if len(out) > 0 || err != nil { + t.Fatalf("child process: %q, %v", out, err) + } + + c, err := net.FileConn(readFile) + if err != nil { + t.Fatalf("FileConn: %v", err) + } + defer c.Close() + + uc, ok := c.(*net.UnixConn) + if !ok { + t.Fatalf("unexpected FileConn type; expected UnixConn, got %T", c) + } + + buf := make([]byte, 32) // expect 1 byte + oob := make([]byte, 32) // expect 24 bytes + closeUnix := time.AfterFunc(5*time.Second, func() { + t.Logf("timeout reading from unix socket") + uc.Close() + }) + _, oobn, _, _, err := uc.ReadMsgUnix(buf, oob) + if err != nil { + t.Fatalf("ReadMsgUnix: %v", err) + } + closeUnix.Stop() + + scms, err := unix.ParseSocketControlMessage(oob[:oobn]) + if err != nil { + t.Fatalf("ParseSocketControlMessage: %v", err) + } + if len(scms) != 1 { + t.Fatalf("expected 1 SocketControlMessage; got scms = %#v", scms) + } + scm := scms[0] + gotFds, err := unix.ParseUnixRights(&scm) + if err != nil { + t.Fatalf("unix.ParseUnixRights: %v", err) + } + if len(gotFds) != 1 { + t.Fatalf("wanted 1 fd; got %#v", gotFds) + } + + f := os.NewFile(uintptr(gotFds[0]), "fd-from-child") + defer f.Close() + + got, err := ioutil.ReadAll(f) + want := "Hello from child process!\n" + if string(got) != want { + t.Errorf("child process ReadAll: %q, %v; want %q", got, err, want) + } +} + +// passFDChild is the child process used by TestPassFD. +func passFDChild() { + defer os.Exit(0) + + // Look for our fd. It should be fd 3, but we work around an fd leak + // bug here (http://golang.org/issue/2603) to let it be elsewhere. + var uc *net.UnixConn + for fd := uintptr(3); fd <= 10; fd++ { + f := os.NewFile(fd, "unix-conn") + var ok bool + netc, _ := net.FileConn(f) + uc, ok = netc.(*net.UnixConn) + if ok { + break + } + } + if uc == nil { + fmt.Println("failed to find unix fd") + return + } + + // Make a file f to send to our parent process on uc. + // We make it in tempDir, which our parent will clean up. + flag.Parse() + tempDir := flag.Arg(0) + f, err := ioutil.TempFile(tempDir, "") + if err != nil { + fmt.Printf("TempFile: %v", err) + return + } + + f.Write([]byte("Hello from child process!\n")) + f.Seek(0, 0) + + rights := unix.UnixRights(int(f.Fd())) + dummyByte := []byte("x") + n, oobn, err := uc.WriteMsgUnix(dummyByte, rights, nil) + if err != nil { + fmt.Printf("WriteMsgUnix: %v", err) + return + } + if n != 1 || oobn != len(rights) { + fmt.Printf("WriteMsgUnix = %d, %d; want 1, %d", n, oobn, len(rights)) + return + } +} + +// TestUnixRightsRoundtrip tests that UnixRights, ParseSocketControlMessage, +// and ParseUnixRights are able to successfully round-trip lists of file descriptors. +func TestUnixRightsRoundtrip(t *testing.T) { + testCases := [...][][]int{ + {{42}}, + {{1, 2}}, + {{3, 4, 5}}, + {{}}, + {{1, 2}, {3, 4, 5}, {}, {7}}, + } + for _, testCase := range testCases { + b := []byte{} + var n int + for _, fds := range testCase { + // Last assignment to n wins + n = len(b) + unix.CmsgLen(4*len(fds)) + b = append(b, unix.UnixRights(fds...)...) + } + // Truncate b + b = b[:n] + + scms, err := unix.ParseSocketControlMessage(b) + if err != nil { + t.Fatalf("ParseSocketControlMessage: %v", err) + } + if len(scms) != len(testCase) { + t.Fatalf("expected %v SocketControlMessage; got scms = %#v", len(testCase), scms) + } + for i, scm := range scms { + gotFds, err := unix.ParseUnixRights(&scm) + if err != nil { + t.Fatalf("ParseUnixRights: %v", err) + } + wantFds := testCase[i] + if len(gotFds) != len(wantFds) { + t.Fatalf("expected %v fds, got %#v", len(wantFds), gotFds) + } + for j, fd := range gotFds { + if fd != wantFds[j] { + t.Fatalf("expected fd %v, got %v", wantFds[j], fd) + } + } + } + } +} + +func TestRlimit(t *testing.T) { + var rlimit, zero unix.Rlimit + err := unix.Getrlimit(unix.RLIMIT_NOFILE, &rlimit) + if err != nil { + t.Fatalf("Getrlimit: save failed: %v", err) + } + if zero == rlimit { + t.Fatalf("Getrlimit: save failed: got zero value %#v", rlimit) + } + set := rlimit + set.Cur = set.Max - 1 + err = unix.Setrlimit(unix.RLIMIT_NOFILE, &set) + if err != nil { + t.Fatalf("Setrlimit: set failed: %#v %v", set, err) + } + var get unix.Rlimit + err = unix.Getrlimit(unix.RLIMIT_NOFILE, &get) + if err != nil { + t.Fatalf("Getrlimit: get failed: %v", err) + } + set = rlimit + set.Cur = set.Max - 1 + if set != get { + // Seems like Darwin requires some privilege to + // increase the soft limit of rlimit sandbox, though + // Setrlimit never reports an error. + switch runtime.GOOS { + case "darwin": + default: + t.Fatalf("Rlimit: change failed: wanted %#v got %#v", set, get) + } + } + err = unix.Setrlimit(unix.RLIMIT_NOFILE, &rlimit) + if err != nil { + t.Fatalf("Setrlimit: restore failed: %#v %v", rlimit, err) + } +} + +func TestSeekFailure(t *testing.T) { + _, err := unix.Seek(-1, 0, 0) + if err == nil { + t.Fatalf("Seek(-1, 0, 0) did not fail") + } + str := err.Error() // used to crash on Linux + t.Logf("Seek: %v", str) + if str == "" { + t.Fatalf("Seek(-1, 0, 0) return error with empty message") + } +} + +func TestDup(t *testing.T) { + file, err := ioutil.TempFile("", "TestDup") + if err != nil { + t.Fatalf("Tempfile failed: %v", err) + } + defer os.Remove(file.Name()) + defer file.Close() + f := int(file.Fd()) + + newFd, err := unix.Dup(f) + if err != nil { + t.Fatalf("Dup: %v", err) + } + + err = unix.Dup2(newFd, newFd+1) + if err != nil { + t.Fatalf("Dup2: %v", err) + } + + b1 := []byte("Test123") + b2 := make([]byte, 7) + _, err = unix.Write(newFd+1, b1) + if err != nil { + t.Fatalf("Write to dup2 fd failed: %v", err) + } + _, err = unix.Seek(f, 0, 0) + if err != nil { + t.Fatalf("Seek failed: %v", err) + } + _, err = unix.Read(f, b2) + if err != nil { + t.Fatalf("Read back failed: %v", err) + } + if string(b1) != string(b2) { + t.Errorf("Dup: stdout write not in file, expected %v, got %v", string(b1), string(b2)) + } +} + +func TestPoll(t *testing.T) { + f, cleanup := mktmpfifo(t) + defer cleanup() + + const timeout = 100 + + ok := make(chan bool, 1) + go func() { + select { + case <-time.After(10 * timeout * time.Millisecond): + t.Errorf("Poll: failed to timeout after %d milliseconds", 10*timeout) + case <-ok: + } + }() + + fds := []unix.PollFd{{Fd: int32(f.Fd()), Events: unix.POLLIN}} + n, err := unix.Poll(fds, timeout) + ok <- true + if err != nil { + t.Errorf("Poll: unexpected error: %v", err) + return + } + if n != 0 { + t.Errorf("Poll: wrong number of events: got %v, expected %v", n, 0) + return + } +} + +// mktmpfifo creates a temporary FIFO and provides a cleanup function. +func mktmpfifo(t *testing.T) (*os.File, func()) { + err := unix.Mkfifo("fifo", 0666) + if err != nil { + t.Fatalf("mktmpfifo: failed to create FIFO: %v", err) + } + + f, err := os.OpenFile("fifo", os.O_RDWR, 0666) + if err != nil { + os.Remove("fifo") + t.Fatalf("mktmpfifo: failed to open FIFO: %v", err) + } + + return f, func() { + f.Close() + os.Remove("fifo") + } +} diff --git a/vendor/golang.org/x/sys/unix/timestruct.go b/vendor/golang.org/x/sys/unix/timestruct.go new file mode 100644 index 0000000..139fbbe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/timestruct.go @@ -0,0 +1,62 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build darwin dragonfly freebsd linux netbsd openbsd solaris + +package unix + +// TimespecToNsec converts a Timespec value into a number of +// nanoseconds since the Unix epoch. +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +// NsecToTimespec takes a number of nanoseconds since the Unix epoch +// and returns the corresponding Timespec value. +func NsecToTimespec(nsec int64) Timespec { + sec := nsec / 1e9 + nsec = nsec % 1e9 + if nsec < 0 { + nsec += 1e9 + sec-- + } + return setTimespec(sec, nsec) +} + +// TimevalToNsec converts a Timeval value into a number of nanoseconds +// since the Unix epoch. +func TimevalToNsec(tv Timeval) int64 { return int64(tv.Sec)*1e9 + int64(tv.Usec)*1e3 } + +// NsecToTimeval takes a number of nanoseconds since the Unix epoch +// and returns the corresponding Timeval value. +func NsecToTimeval(nsec int64) Timeval { + nsec += 999 // round up to microsecond + usec := nsec % 1e9 / 1e3 + sec := nsec / 1e9 + if usec < 0 { + usec += 1e6 + sec-- + } + return setTimeval(sec, usec) +} + +// Unix returns ts as the number of seconds and nanoseconds elapsed since the +// Unix epoch. +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +// Unix returns tv as the number of seconds and nanoseconds elapsed since the +// Unix epoch. +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +// Nano returns ts as the number of nanoseconds elapsed since the Unix epoch. +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +// Nano returns tv as the number of nanoseconds elapsed since the Unix epoch. +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} diff --git a/vendor/golang.org/x/sys/unix/types_darwin.go b/vendor/golang.org/x/sys/unix/types_darwin.go new file mode 100644 index 0000000..3a938ac --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_darwin.go @@ -0,0 +1,272 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define __DARWIN_UNIX03 0 +#define KERNEL +#define _DARWIN_USE_64_BIT_INODE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +type Timeval32 C.struct_timeval32 + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +type Stat_t C.struct_stat64 + +type Statfs_t C.struct_statfs64 + +type Flock_t C.struct_flock + +type Fstore_t C.struct_fstore + +type Radvisory_t C.struct_radvisory + +type Fbootstraptransfer_t C.struct_fbootstraptransfer + +type Log2phys_t C.struct_log2phys + +type Fsid C.struct_fsid + +type Dirent C.struct_dirent + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet4Pktinfo C.struct_in_pktinfo + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet4Pktinfo = C.sizeof_struct_in_pktinfo + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr + SizeofIfmaMsghdr2 = C.sizeof_struct_ifma_msghdr2 + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfmaMsghdr C.struct_ifma_msghdr + +type IfmaMsghdr2 C.struct_ifma_msghdr2 + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +// Terminal handling + +type Termios C.struct_termios + +type Winsize C.struct_winsize + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) diff --git a/vendor/golang.org/x/sys/unix/types_dragonfly.go b/vendor/golang.org/x/sys/unix/types_dragonfly.go new file mode 100644 index 0000000..78ce32a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_dragonfly.go @@ -0,0 +1,267 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.struct_fsid + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfmaMsghdr C.struct_ifma_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +// Terminal handling + +type Termios C.struct_termios + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) diff --git a/vendor/golang.org/x/sys/unix/types_freebsd.go b/vendor/golang.org/x/sys/unix/types_freebsd.go new file mode 100644 index 0000000..7340004 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_freebsd.go @@ -0,0 +1,391 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +// This structure is a duplicate of stat on FreeBSD 8-STABLE. +// See /usr/include/sys/stat.h. +struct stat8 { +#undef st_atimespec st_atim +#undef st_mtimespec st_mtim +#undef st_ctimespec st_ctim +#undef st_birthtimespec st_birthtim + __dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + nlink_t st_nlink; + uid_t st_uid; + gid_t st_gid; + __dev_t st_rdev; +#if __BSD_VISIBLE + struct timespec st_atimespec; + struct timespec st_mtimespec; + struct timespec st_ctimespec; +#else + time_t st_atime; + long __st_atimensec; + time_t st_mtime; + long __st_mtimensec; + time_t st_ctime; + long __st_ctimensec; +#endif + off_t st_size; + blkcnt_t st_blocks; + blksize_t st_blksize; + fflags_t st_flags; + __uint32_t st_gen; + __int32_t st_lspare; +#if __BSD_VISIBLE + struct timespec st_birthtimespec; + unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec)); + unsigned int :(8 / 2) * (16 - (int)sizeof(struct timespec)); +#else + time_t st_birthtime; + long st_birthtimensec; + unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec)); + unsigned int :(8 / 2) * (16 - (int)sizeof(struct __timespec)); +#endif +}; + +// This structure is a duplicate of if_data on FreeBSD 8-STABLE. +// See /usr/include/net/if.h. +struct if_data8 { + u_char ifi_type; + u_char ifi_physical; + u_char ifi_addrlen; + u_char ifi_hdrlen; + u_char ifi_link_state; + u_char ifi_spare_char1; + u_char ifi_spare_char2; + u_char ifi_datalen; + u_long ifi_mtu; + u_long ifi_metric; + u_long ifi_baudrate; + u_long ifi_ipackets; + u_long ifi_ierrors; + u_long ifi_opackets; + u_long ifi_oerrors; + u_long ifi_collisions; + u_long ifi_ibytes; + u_long ifi_obytes; + u_long ifi_imcasts; + u_long ifi_omcasts; + u_long ifi_iqdrops; + u_long ifi_noproto; + u_long ifi_hwassist; +// FIXME: these are now unions, so maybe need to change definitions? +#undef ifi_epoch + time_t ifi_epoch; +#undef ifi_lastchange + struct timeval ifi_lastchange; +}; + +// This structure is a duplicate of if_msghdr on FreeBSD 8-STABLE. +// See /usr/include/net/if.h. +struct if_msghdr8 { + u_short ifm_msglen; + u_char ifm_version; + u_char ifm_type; + int ifm_addrs; + int ifm_flags; + u_short ifm_index; + struct if_data8 ifm_data; +}; +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat8 + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.struct_fsid + +// Advice to Fadvise + +const ( + FADV_NORMAL = C.POSIX_FADV_NORMAL + FADV_RANDOM = C.POSIX_FADV_RANDOM + FADV_SEQUENTIAL = C.POSIX_FADV_SEQUENTIAL + FADV_WILLNEED = C.POSIX_FADV_WILLNEED + FADV_DONTNEED = C.POSIX_FADV_DONTNEED + FADV_NOREUSE = C.POSIX_FADV_NOREUSE +) + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPMreqn C.struct_ip_mreqn + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPMreqn = C.sizeof_struct_ip_mreqn + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + sizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfMsghdr = C.sizeof_struct_if_msghdr8 + sizeofIfData = C.sizeof_struct_if_data + SizeofIfData = C.sizeof_struct_if_data8 + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfmaMsghdr = C.sizeof_struct_ifma_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type ifMsghdr C.struct_if_msghdr + +type IfMsghdr C.struct_if_msghdr8 + +type ifData C.struct_if_data + +type IfData C.struct_if_data8 + +type IfaMsghdr C.struct_ifa_msghdr + +type IfmaMsghdr C.struct_ifma_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfZbuf = C.sizeof_struct_bpf_zbuf + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr + SizeofBpfZbufHeader = C.sizeof_struct_bpf_zbuf_header +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfZbuf C.struct_bpf_zbuf + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +type BpfZbufHeader C.struct_bpf_zbuf_header + +// Terminal handling + +type Termios C.struct_termios + +type Winsize C.struct_winsize + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLINIGNEOF = C.POLLINIGNEOF + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) + +// Capabilities + +type CapRights C.struct_cap_rights diff --git a/vendor/golang.org/x/sys/unix/types_netbsd.go b/vendor/golang.org/x/sys/unix/types_netbsd.go new file mode 100644 index 0000000..9097245 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_netbsd.go @@ -0,0 +1,257 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.fsid_t + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +type Mclpool C.struct_mclpool + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +type BpfTimeval C.struct_bpf_timeval + +// Terminal handling + +type Termios C.struct_termios + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) + +// Sysctl + +type Sysctlnode C.struct_sysctlnode diff --git a/vendor/golang.org/x/sys/unix/types_openbsd.go b/vendor/golang.org/x/sys/unix/types_openbsd.go new file mode 100644 index 0000000..44ea7c0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_openbsd.go @@ -0,0 +1,269 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat + +type Statfs_t C.struct_statfs + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +type Fsid C.fsid_t + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Ptrace requests + +const ( + PTRACE_TRACEME = C.PT_TRACE_ME + PTRACE_CONT = C.PT_CONTINUE + PTRACE_KILL = C.PT_KILL +) + +// Events (kqueue, kevent) + +type Kevent_t C.struct_kevent + +// Select + +type FdSet C.fd_set + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofIfAnnounceMsghdr = C.sizeof_struct_if_announcemsghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type IfAnnounceMsghdr C.struct_if_announcemsghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +type Mclpool C.struct_mclpool + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfHdr C.struct_bpf_hdr + +type BpfTimeval C.struct_bpf_timeval + +// Terminal handling + +type Termios C.struct_termios + +// fchmodat-like syscalls. + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW +) + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) diff --git a/vendor/golang.org/x/sys/unix/types_solaris.go b/vendor/golang.org/x/sys/unix/types_solaris.go new file mode 100644 index 0000000..f777155 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/types_solaris.go @@ -0,0 +1,283 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +/* +Input to cgo -godefs. See README.md +*/ + +// +godefs map struct_in_addr [4]byte /* in_addr */ +// +godefs map struct_in6_addr [16]byte /* in6_addr */ + +package unix + +/* +#define KERNEL +// These defines ensure that builds done on newer versions of Solaris are +// backwards-compatible with older versions of Solaris and +// OpenSolaris-based derivatives. +#define __USE_SUNOS_SOCKETS__ // msghdr +#define __USE_LEGACY_PROTOTYPES__ // iovec +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +enum { + sizeofPtr = sizeof(void*), +}; + +union sockaddr_all { + struct sockaddr s1; // this one gets used for fields + struct sockaddr_in s2; // these pad it out + struct sockaddr_in6 s3; + struct sockaddr_un s4; + struct sockaddr_dl s5; +}; + +struct sockaddr_any { + struct sockaddr addr; + char pad[sizeof(union sockaddr_all) - sizeof(struct sockaddr)]; +}; + +*/ +import "C" + +// Machine characteristics; for internal use. + +const ( + sizeofPtr = C.sizeofPtr + sizeofShort = C.sizeof_short + sizeofInt = C.sizeof_int + sizeofLong = C.sizeof_long + sizeofLongLong = C.sizeof_longlong + PathMax = C.PATH_MAX + MaxHostNameLen = C.MAXHOSTNAMELEN +) + +// Basic types + +type ( + _C_short C.short + _C_int C.int + _C_long C.long + _C_long_long C.longlong +) + +// Time + +type Timespec C.struct_timespec + +type Timeval C.struct_timeval + +type Timeval32 C.struct_timeval32 + +type Tms C.struct_tms + +type Utimbuf C.struct_utimbuf + +// Processes + +type Rusage C.struct_rusage + +type Rlimit C.struct_rlimit + +type _Gid_t C.gid_t + +// Files + +const ( // Directory mode bits + S_IFMT = C.S_IFMT + S_IFIFO = C.S_IFIFO + S_IFCHR = C.S_IFCHR + S_IFDIR = C.S_IFDIR + S_IFBLK = C.S_IFBLK + S_IFREG = C.S_IFREG + S_IFLNK = C.S_IFLNK + S_IFSOCK = C.S_IFSOCK + S_ISUID = C.S_ISUID + S_ISGID = C.S_ISGID + S_ISVTX = C.S_ISVTX + S_IRUSR = C.S_IRUSR + S_IWUSR = C.S_IWUSR + S_IXUSR = C.S_IXUSR +) + +type Stat_t C.struct_stat + +type Flock_t C.struct_flock + +type Dirent C.struct_dirent + +// Filesystems + +type _Fsblkcnt_t C.fsblkcnt_t + +type Statvfs_t C.struct_statvfs + +// Sockets + +type RawSockaddrInet4 C.struct_sockaddr_in + +type RawSockaddrInet6 C.struct_sockaddr_in6 + +type RawSockaddrUnix C.struct_sockaddr_un + +type RawSockaddrDatalink C.struct_sockaddr_dl + +type RawSockaddr C.struct_sockaddr + +type RawSockaddrAny C.struct_sockaddr_any + +type _Socklen C.socklen_t + +type Linger C.struct_linger + +type Iovec C.struct_iovec + +type IPMreq C.struct_ip_mreq + +type IPv6Mreq C.struct_ipv6_mreq + +type Msghdr C.struct_msghdr + +type Cmsghdr C.struct_cmsghdr + +type Inet6Pktinfo C.struct_in6_pktinfo + +type IPv6MTUInfo C.struct_ip6_mtuinfo + +type ICMPv6Filter C.struct_icmp6_filter + +const ( + SizeofSockaddrInet4 = C.sizeof_struct_sockaddr_in + SizeofSockaddrInet6 = C.sizeof_struct_sockaddr_in6 + SizeofSockaddrAny = C.sizeof_struct_sockaddr_any + SizeofSockaddrUnix = C.sizeof_struct_sockaddr_un + SizeofSockaddrDatalink = C.sizeof_struct_sockaddr_dl + SizeofLinger = C.sizeof_struct_linger + SizeofIPMreq = C.sizeof_struct_ip_mreq + SizeofIPv6Mreq = C.sizeof_struct_ipv6_mreq + SizeofMsghdr = C.sizeof_struct_msghdr + SizeofCmsghdr = C.sizeof_struct_cmsghdr + SizeofInet6Pktinfo = C.sizeof_struct_in6_pktinfo + SizeofIPv6MTUInfo = C.sizeof_struct_ip6_mtuinfo + SizeofICMPv6Filter = C.sizeof_struct_icmp6_filter +) + +// Select + +type FdSet C.fd_set + +// Misc + +type Utsname C.struct_utsname + +type Ustat_t C.struct_ustat + +const ( + AT_FDCWD = C.AT_FDCWD + AT_SYMLINK_NOFOLLOW = C.AT_SYMLINK_NOFOLLOW + AT_SYMLINK_FOLLOW = C.AT_SYMLINK_FOLLOW + AT_REMOVEDIR = C.AT_REMOVEDIR + AT_EACCESS = C.AT_EACCESS +) + +// Routing and interface messages + +const ( + SizeofIfMsghdr = C.sizeof_struct_if_msghdr + SizeofIfData = C.sizeof_struct_if_data + SizeofIfaMsghdr = C.sizeof_struct_ifa_msghdr + SizeofRtMsghdr = C.sizeof_struct_rt_msghdr + SizeofRtMetrics = C.sizeof_struct_rt_metrics +) + +type IfMsghdr C.struct_if_msghdr + +type IfData C.struct_if_data + +type IfaMsghdr C.struct_ifa_msghdr + +type RtMsghdr C.struct_rt_msghdr + +type RtMetrics C.struct_rt_metrics + +// Berkeley packet filter + +const ( + SizeofBpfVersion = C.sizeof_struct_bpf_version + SizeofBpfStat = C.sizeof_struct_bpf_stat + SizeofBpfProgram = C.sizeof_struct_bpf_program + SizeofBpfInsn = C.sizeof_struct_bpf_insn + SizeofBpfHdr = C.sizeof_struct_bpf_hdr +) + +type BpfVersion C.struct_bpf_version + +type BpfStat C.struct_bpf_stat + +type BpfProgram C.struct_bpf_program + +type BpfInsn C.struct_bpf_insn + +type BpfTimeval C.struct_bpf_timeval + +type BpfHdr C.struct_bpf_hdr + +// Terminal handling + +type Termios C.struct_termios + +type Termio C.struct_termio + +type Winsize C.struct_winsize + +// poll + +type PollFd C.struct_pollfd + +const ( + POLLERR = C.POLLERR + POLLHUP = C.POLLHUP + POLLIN = C.POLLIN + POLLNVAL = C.POLLNVAL + POLLOUT = C.POLLOUT + POLLPRI = C.POLLPRI + POLLRDBAND = C.POLLRDBAND + POLLRDNORM = C.POLLRDNORM + POLLWRBAND = C.POLLWRBAND + POLLWRNORM = C.POLLWRNORM +) diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go new file mode 100644 index 0000000..ac581f3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go @@ -0,0 +1,1758 @@ +// mkerrors.sh -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x8008427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc0086924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6981 + SIOCRSLVMULTI = 0xc008693b + SIOCSDRVSPEC = 0x801c697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40087458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x20 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go new file mode 100644 index 0000000..2ba407a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -0,0 +1,1758 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go new file mode 100644 index 0000000..f4a2fde --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go @@ -0,0 +1,1758 @@ +// mkerrors.sh +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go new file mode 100644 index 0000000..4c2e696 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -0,0 +1,1758 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,darwin + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1c + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1e + AF_IPX = 0x17 + AF_ISDN = 0x1c + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x28 + AF_NATM = 0x1f + AF_NDRV = 0x1b + AF_NETBIOS = 0x21 + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PPP = 0x22 + AF_PUP = 0x4 + AF_RESERVED_36 = 0x24 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_SYSTEM = 0x20 + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_UTUN = 0x26 + ALTWERASE = 0x200 + ATTR_BIT_MAP_COUNT = 0x5 + ATTR_CMN_ACCESSMASK = 0x20000 + ATTR_CMN_ACCTIME = 0x1000 + ATTR_CMN_ADDEDTIME = 0x10000000 + ATTR_CMN_BKUPTIME = 0x2000 + ATTR_CMN_CHGTIME = 0x800 + ATTR_CMN_CRTIME = 0x200 + ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 + ATTR_CMN_DEVID = 0x2 + ATTR_CMN_DOCUMENT_ID = 0x100000 + ATTR_CMN_ERROR = 0x20000000 + ATTR_CMN_EXTENDED_SECURITY = 0x400000 + ATTR_CMN_FILEID = 0x2000000 + ATTR_CMN_FLAGS = 0x40000 + ATTR_CMN_FNDRINFO = 0x4000 + ATTR_CMN_FSID = 0x4 + ATTR_CMN_FULLPATH = 0x8000000 + ATTR_CMN_GEN_COUNT = 0x80000 + ATTR_CMN_GRPID = 0x10000 + ATTR_CMN_GRPUUID = 0x1000000 + ATTR_CMN_MODTIME = 0x400 + ATTR_CMN_NAME = 0x1 + ATTR_CMN_NAMEDATTRCOUNT = 0x80000 + ATTR_CMN_NAMEDATTRLIST = 0x100000 + ATTR_CMN_OBJID = 0x20 + ATTR_CMN_OBJPERMANENTID = 0x40 + ATTR_CMN_OBJTAG = 0x10 + ATTR_CMN_OBJTYPE = 0x8 + ATTR_CMN_OWNERID = 0x8000 + ATTR_CMN_PARENTID = 0x4000000 + ATTR_CMN_PAROBJID = 0x80 + ATTR_CMN_RETURNED_ATTRS = 0x80000000 + ATTR_CMN_SCRIPT = 0x100 + ATTR_CMN_SETMASK = 0x41c7ff00 + ATTR_CMN_USERACCESS = 0x200000 + ATTR_CMN_UUID = 0x800000 + ATTR_CMN_VALIDMASK = 0xffffffff + ATTR_CMN_VOLSETMASK = 0x6700 + ATTR_FILE_ALLOCSIZE = 0x4 + ATTR_FILE_CLUMPSIZE = 0x10 + ATTR_FILE_DATAALLOCSIZE = 0x400 + ATTR_FILE_DATAEXTENTS = 0x800 + ATTR_FILE_DATALENGTH = 0x200 + ATTR_FILE_DEVTYPE = 0x20 + ATTR_FILE_FILETYPE = 0x40 + ATTR_FILE_FORKCOUNT = 0x80 + ATTR_FILE_FORKLIST = 0x100 + ATTR_FILE_IOBLOCKSIZE = 0x8 + ATTR_FILE_LINKCOUNT = 0x1 + ATTR_FILE_RSRCALLOCSIZE = 0x2000 + ATTR_FILE_RSRCEXTENTS = 0x4000 + ATTR_FILE_RSRCLENGTH = 0x1000 + ATTR_FILE_SETMASK = 0x20 + ATTR_FILE_TOTALSIZE = 0x2 + ATTR_FILE_VALIDMASK = 0x37ff + ATTR_VOL_ALLOCATIONCLUMP = 0x40 + ATTR_VOL_ATTRIBUTES = 0x40000000 + ATTR_VOL_CAPABILITIES = 0x20000 + ATTR_VOL_DIRCOUNT = 0x400 + ATTR_VOL_ENCODINGSUSED = 0x10000 + ATTR_VOL_FILECOUNT = 0x200 + ATTR_VOL_FSTYPE = 0x1 + ATTR_VOL_INFO = 0x80000000 + ATTR_VOL_IOBLOCKSIZE = 0x80 + ATTR_VOL_MAXOBJCOUNT = 0x800 + ATTR_VOL_MINALLOCATION = 0x20 + ATTR_VOL_MOUNTEDDEVICE = 0x8000 + ATTR_VOL_MOUNTFLAGS = 0x4000 + ATTR_VOL_MOUNTPOINT = 0x1000 + ATTR_VOL_NAME = 0x2000 + ATTR_VOL_OBJCOUNT = 0x100 + ATTR_VOL_QUOTA_SIZE = 0x10000000 + ATTR_VOL_RESERVED_SIZE = 0x20000000 + ATTR_VOL_SETMASK = 0x80002000 + ATTR_VOL_SIGNATURE = 0x2 + ATTR_VOL_SIZE = 0x4 + ATTR_VOL_SPACEAVAIL = 0x10 + ATTR_VOL_SPACEFREE = 0x8 + ATTR_VOL_UUID = 0x40000 + ATTR_VOL_VALIDMASK = 0xf007ffff + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc00c4279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x8010427e + BIOCSETIF = 0x8020426c + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_MONOTONIC_RAW_APPROX = 0x5 + CLOCK_PROCESS_CPUTIME_ID = 0xc + CLOCK_REALTIME = 0x0 + CLOCK_THREAD_CPUTIME_ID = 0x10 + CLOCK_UPTIME_RAW = 0x8 + CLOCK_UPTIME_RAW_APPROX = 0x9 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0xf5 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0xf + EVFILT_FS = -0x9 + EVFILT_MACHPORT = -0x8 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xf + EVFILT_THREADMARKER = 0xf + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xa + EVFILT_VM = -0xc + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DISPATCH2 = 0x180 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG0 = 0x1000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_OOBAND = 0x2000 + EV_POLL = 0x1000 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EV_UDATA_SPECIFIC = 0x100 + EV_VANISHED = 0x200 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FSOPT_ATTR_CMN_EXTENDED = 0x20 + FSOPT_NOFOLLOW = 0x1 + FSOPT_NOINMEMUPDATE = 0x2 + FSOPT_PACK_INVAL_ATTRS = 0x8 + FSOPT_REPORT_FULLSIZE = 0x4 + F_ADDFILESIGS = 0x3d + F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 + F_ADDFILESIGS_RETURN = 0x61 + F_ADDSIGS = 0x3b + F_ALLOCATEALL = 0x4 + F_ALLOCATECONTIG = 0x2 + F_BARRIERFSYNC = 0x55 + F_CHECK_LV = 0x62 + F_CHKCLEAN = 0x29 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x43 + F_FINDSIGS = 0x4e + F_FLUSH_DATA = 0x28 + F_FREEZE_FS = 0x35 + F_FULLFSYNC = 0x33 + F_GETCODEDIR = 0x48 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETLKPID = 0x42 + F_GETNOSIGPIPE = 0x4a + F_GETOWN = 0x5 + F_GETPATH = 0x32 + F_GETPATH_MTMINFO = 0x47 + F_GETPROTECTIONCLASS = 0x3f + F_GETPROTECTIONLEVEL = 0x4d + F_GLOBAL_NOCACHE = 0x37 + F_LOG2PHYS = 0x31 + F_LOG2PHYS_EXT = 0x41 + F_NOCACHE = 0x30 + F_NODIRECT = 0x3e + F_OK = 0x0 + F_PATHPKG_CHECK = 0x34 + F_PEOFPOSMODE = 0x3 + F_PREALLOCATE = 0x2a + F_RDADVISE = 0x2c + F_RDAHEAD = 0x2d + F_RDLCK = 0x1 + F_SETBACKINGSTORE = 0x46 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETLKWTIMEOUT = 0xa + F_SETNOSIGPIPE = 0x49 + F_SETOWN = 0x6 + F_SETPROTECTIONCLASS = 0x40 + F_SETSIZE = 0x2b + F_SINGLE_WRITER = 0x4c + F_THAW_FS = 0x36 + F_TRANSCODEKEY = 0x4b + F_UNLCK = 0x2 + F_VOLPOSMODE = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_CELLULAR = 0xff + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FAITH = 0x38 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_GIF = 0x37 + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IEEE1394 = 0x90 + IFT_IEEE8023ADLAG = 0x88 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_L2VLAN = 0x87 + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PDP = 0xff + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PKTAP = 0xfe + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_STF = 0x39 + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LINKLOCALNETNUM = 0xa9fe0000 + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_2292DSTOPTS = 0x17 + IPV6_2292HOPLIMIT = 0x14 + IPV6_2292HOPOPTS = 0x16 + IPV6_2292NEXTHOP = 0x15 + IPV6_2292PKTINFO = 0x13 + IPV6_2292PKTOPTIONS = 0x19 + IPV6_2292RTHDR = 0x18 + IPV6_BINDV6ONLY = 0x1b + IPV6_BOUND_IF = 0x7d + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x3c + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVTCLASS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x24 + IPV6_UNICAST_HOPS = 0x4 + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BLOCK_SOURCE = 0x48 + IP_BOUND_IF = 0x19 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x28 + IP_FW_DEL = 0x29 + IP_FW_FLUSH = 0x2a + IP_FW_GET = 0x2c + IP_FW_RESETLOG = 0x2d + IP_FW_ZERO = 0x2b + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MF = 0x2000 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_IFINDEX = 0x42 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_NAT__XXX = 0x37 + IP_OFFMASK = 0x1fff + IP_OLD_FW_ADD = 0x32 + IP_OLD_FW_DEL = 0x33 + IP_OLD_FW_FLUSH = 0x34 + IP_OLD_FW_GET = 0x36 + IP_OLD_FW_RESETLOG = 0x38 + IP_OLD_FW_ZERO = 0x35 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x18 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_STRIPHDR = 0x17 + IP_TOS = 0x3 + IP_TRAFFIC_MGT_BACKGROUND = 0x41 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_CAN_REUSE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_FREE_REUSABLE = 0x7 + MADV_FREE_REUSE = 0x8 + MADV_NORMAL = 0x0 + MADV_PAGEOUT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MADV_ZERO_WIRED_PAGES = 0x6 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_JIT = 0x800 + MAP_NOCACHE = 0x400 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_RESERVED0080 = 0x80 + MAP_RESILIENT_CODESIGN = 0x2000 + MAP_RESILIENT_MEDIA = 0x4000 + MAP_SHARED = 0x1 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x400000 + MNT_CMDFLAGS = 0xf0000 + MNT_CPROTECT = 0x80 + MNT_DEFWRITE = 0x2000000 + MNT_DONTBROWSE = 0x100000 + MNT_DOVOLFS = 0x8000 + MNT_DWAIT = 0x4 + MNT_EXPORTED = 0x100 + MNT_FORCE = 0x80000 + MNT_IGNORE_OWNERSHIP = 0x200000 + MNT_JOURNALED = 0x800000 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NOATIME = 0x10000000 + MNT_NOBLOCK = 0x20000 + MNT_NODEV = 0x10 + MNT_NOEXEC = 0x4 + MNT_NOSUID = 0x8 + MNT_NOUSERXATTR = 0x1000000 + MNT_NOWAIT = 0x2 + MNT_QUARANTINE = 0x400 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UNKNOWNPERMISSIONS = 0x200000 + MNT_UPDATE = 0x10000 + MNT_VISFLAGMASK = 0x17f0f5ff + MNT_WAIT = 0x1 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FLUSH = 0x400 + MSG_HAVEMORE = 0x2000 + MSG_HOLD = 0x800 + MSG_NEEDSA = 0x10000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_RCVMORE = 0x4000 + MSG_SEND = 0x1000 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITSTREAM = 0x200 + MS_ASYNC = 0x1 + MS_DEACTIVATE = 0x8 + MS_INVALIDATE = 0x2 + MS_KILLPAGES = 0x4 + MS_SYNC = 0x10 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_DUMP2 = 0x7 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLIST2 = 0x6 + NET_RT_MAXID = 0xa + NET_RT_STAT = 0x4 + NET_RT_TRASH = 0x5 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLDLY = 0x300 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ABSOLUTE = 0x8 + NOTE_ATTRIB = 0x8 + NOTE_BACKGROUND = 0x40 + NOTE_CHILD = 0x4 + NOTE_CRITICAL = 0x20 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXITSTATUS = 0x4000000 + NOTE_EXIT_CSERROR = 0x40000 + NOTE_EXIT_DECRYPTFAIL = 0x10000 + NOTE_EXIT_DETAIL = 0x2000000 + NOTE_EXIT_DETAIL_MASK = 0x70000 + NOTE_EXIT_MEMORY = 0x20000 + NOTE_EXIT_REPARENTED = 0x80000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_FUNLOCK = 0x100 + NOTE_LEEWAY = 0x10 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MACH_CONTINUOUS_TIME = 0x80 + NOTE_NONE = 0x80 + NOTE_NSECONDS = 0x4 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = -0x100000 + NOTE_PDATAMASK = 0xfffff + NOTE_REAP = 0x10000000 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_SIGNAL = 0x8000000 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x2 + NOTE_VM_ERROR = 0x10000000 + NOTE_VM_PRESSURE = 0x80000000 + NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 + NOTE_VM_PRESSURE_TERMINATE = 0x40000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFDEL = 0x20000 + OFILL = 0x80 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_ALERT = 0x20000000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x1000000 + O_CREAT = 0x200 + O_DIRECTORY = 0x100000 + O_DP_GETRAWENCRYPTED = 0x1 + O_DP_GETRAWUNENCRYPTED = 0x2 + O_DSYNC = 0x400000 + O_EVTONLY = 0x8000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x20000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_POPUP = 0x80000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYMLINK = 0x200000 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_ATTACH = 0xa + PT_ATTACHEXC = 0xe + PT_CONTINUE = 0x7 + PT_DENY_ATTACH = 0x1f + PT_DETACH = 0xb + PT_FIRSTMACH = 0x20 + PT_FORCEQUOTA = 0x1e + PT_KILL = 0x8 + PT_READ_D = 0x2 + PT_READ_I = 0x1 + PT_READ_U = 0x3 + PT_SIGEXC = 0xc + PT_STEP = 0x9 + PT_THUPDATE = 0xd + PT_TRACE_ME = 0x0 + PT_WRITE_D = 0x5 + PT_WRITE_I = 0x4 + PT_WRITE_U = 0x6 + RLIMIT_AS = 0x5 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_CPU_USAGE_MONITOR = 0x2 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_CONDEMNED = 0x2000000 + RTF_DELCLONE = 0x80 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_IFREF = 0x4000000 + RTF_IFSCOPE = 0x1000000 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_NOIFREF = 0x2000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_PROXY = 0x8000000 + RTF_REJECT = 0x8 + RTF_ROUTER = 0x10000000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_GET2 = 0x14 + RTM_IFINFO = 0xe + RTM_IFINFO2 = 0x12 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_NEWMADDR2 = 0x13 + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SCM_TIMESTAMP_MONOTONIC = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCARPIPLL = 0xc0206928 + SIOCATMARK = 0x40047307 + SIOCAUTOADDR = 0xc0206926 + SIOCAUTONETMASK = 0x80206927 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206941 + SIOCGDRVSPEC = 0xc028697b + SIOCGETVLAN = 0xc020697f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFALTMTU = 0xc0206948 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBOND = 0xc0206947 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020695b + SIOCGIFCONF = 0xc00c6924 + SIOCGIFDEVMTU = 0xc0206944 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFKPI = 0xc0206987 + SIOCGIFMAC = 0xc0206982 + SIOCGIFMEDIA = 0xc02c6938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206940 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc020693f + SIOCGIFSTATUS = 0xc331693d + SIOCGIFVLAN = 0xc020697f + SIOCGIFWAKEFLAGS = 0xc0206988 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCIFCREATE = 0xc0206978 + SIOCIFCREATE2 = 0xc020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106981 + SIOCRSLVMULTI = 0xc010693b + SIOCSDRVSPEC = 0x8028697b + SIOCSETVLAN = 0x8020697e + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFALTMTU = 0x80206945 + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBOND = 0x80206946 + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020695a + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFKPI = 0x80206986 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206983 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x8040693e + SIOCSIFPHYS = 0x80206936 + SIOCSIFVLAN = 0x8020697e + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_DONTTRUNC = 0x2000 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1010 + SO_LINGER = 0x80 + SO_LINGER_SEC = 0x1080 + SO_NETSVC_MARKING_LEVEL = 0x1119 + SO_NET_SERVICE_TYPE = 0x1116 + SO_NKE = 0x1021 + SO_NOADDRERR = 0x1023 + SO_NOSIGPIPE = 0x1022 + SO_NOTIFYCONFLICT = 0x1026 + SO_NP_EXTENSIONS = 0x1083 + SO_NREAD = 0x1020 + SO_NUMRCVPKT = 0x1112 + SO_NWRITE = 0x1024 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1011 + SO_RANDOMPORT = 0x1082 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_REUSESHAREUID = 0x1025 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TIMESTAMP_MONOTONIC = 0x800 + SO_TYPE = 0x1008 + SO_UPCALLCLOSEWAIT = 0x1027 + SO_USELOOPBACK = 0x40 + SO_WANTMORE = 0x4000 + SO_WANTOOBFLAG = 0x8000 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0x4 + TABDLY = 0xc04 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CONNECTIONTIMEOUT = 0x20 + TCP_CONNECTION_INFO = 0x106 + TCP_ENABLE_ECN = 0x104 + TCP_FASTOPEN = 0x105 + TCP_KEEPALIVE = 0x10 + TCP_KEEPCNT = 0x102 + TCP_KEEPINTVL = 0x101 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0xd8 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_NOTSENT_LOWAT = 0x201 + TCP_RXT_CONNDROPTIME = 0x80 + TCP_RXT_FINDROP = 0x100 + TCP_SENDMOREACKS = 0x103 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCDSIMICROCODE = 0x20007455 + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x40487413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGWINSZ = 0x40087468 + TIOCIXOFF = 0x20007480 + TIOCIXON = 0x20007481 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTYGNAME = 0x40807453 + TIOCPTYGRANT = 0x20007454 + TIOCPTYUNLK = 0x20007452 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCONS = 0x20007463 + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x80487414 + TIOCSETAF = 0x80487416 + TIOCSETAW = 0x80487415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_LOADAVG = 0x2 + VM_MACHFACTOR = 0x4 + VM_MAXID = 0x6 + VM_METER = 0x1 + VM_SWAPUSAGE = 0x5 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x10 + WCOREFLAG = 0x80 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOWAIT = 0x20 + WORDSIZE = 0x40 + WSTOPPED = 0x8 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADARCH = syscall.Errno(0x56) + EBADEXEC = syscall.Errno(0x55) + EBADF = syscall.Errno(0x9) + EBADMACHO = syscall.Errno(0x58) + EBADMSG = syscall.Errno(0x5e) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x59) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDEVERR = syscall.Errno(0x53) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x5a) + EILSEQ = syscall.Errno(0x5c) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x6a) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5f) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x60) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x61) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5b) + ENOPOLICY = syscall.Errno(0x67) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x62) + ENOSTR = syscall.Errno(0x63) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x68) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x66) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x69) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x64) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + EPWROFF = syscall.Errno(0x52) + EQFULL = syscall.Errno(0x6a) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHLIBVERS = syscall.Errno(0x57) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x65) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "resource busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "device power is off", + 83: "device error", + 84: "value too large to be stored in data type", + 85: "bad executable (or shared library)", + 86: "bad CPU type in executable", + 87: "shared library version mismatch", + 88: "malformed Mach-o file", + 89: "operation canceled", + 90: "identifier removed", + 91: "no message of desired type", + 92: "illegal byte sequence", + 93: "attribute not found", + 94: "bad message", + 95: "EMULTIHOP (Reserved)", + 96: "no message available on STREAM", + 97: "ENOLINK (Reserved)", + 98: "no STREAM resources", + 99: "not a STREAM", + 100: "protocol error", + 101: "STREAM ioctl timeout", + 102: "operation not supported on socket", + 103: "policy not found", + 104: "state not recoverable", + 105: "previous owner died", + 106: "interface output queue is full", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go new file mode 100644 index 0000000..8f40598 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_dragonfly_amd64.go @@ -0,0 +1,1568 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,dragonfly + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x21 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x23 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x22 + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x18 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETIF = 0x4020426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044278 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DEFAULTBUFSIZE = 0x1000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MAX_CLONES = 0x80 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DBF = 0xf + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_EXCEPT = -0x8 + EVFILT_FS = -0xa + EVFILT_MARKER = 0xf + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xa + EVFILT_TIMER = -0x7 + EVFILT_USER = -0x9 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_NODATA = 0x1000 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTEXIT_LWP = 0x10000 + EXTEXIT_PROC = 0x0 + EXTEXIT_SETINT = 0x1 + EXTEXIT_SIMPLE = 0x0 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x118e72 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NPOLLING = 0x100000 + IFF_OACTIVE = 0x400 + IFF_OACTIVE_COMPAT = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_POLLING = 0x10000 + IFF_POLLING_COMPAT = 0x10000 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_SMART = 0x20 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xf3 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VOICEEM = 0x64 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0xfe + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MEAS = 0x13 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SDRP = 0x2a + IPPROTO_SEP = 0x21 + IPPROTO_SKIP = 0x39 + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UNKNOWN = 0x102 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MINHLIM = 0x28 + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PKTOPTIONS = 0x34 + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FAITH = 0x16 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_RESETLOG = 0x37 + IP_FW_X = 0x31 + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CONTROL_END = 0xb + MADV_CONTROL_START = 0xa + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_INVAL = 0xa + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SETMAP = 0xb + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_NOCORE = 0x20000 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_NOSYNC = 0x800 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_SIZEALIGN = 0x40000 + MAP_STACK = 0x400 + MAP_TRYFIXED = 0x10000 + MAP_VPAGETABLE = 0x2000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CMSG_CLOEXEC = 0x1000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_FBLOCKING = 0x10000 + MSG_FMASK = 0xffff0000 + MSG_FNONBLOCKING = 0x20000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_SYNC = 0x800 + MSG_TRUNC = 0x10 + MSG_UNUSED09 = 0x200 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_OOB = 0x2 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x20000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x8000000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FAPPEND = 0x100000 + O_FASYNCWRITE = 0x800000 + O_FBLOCKING = 0x40000 + O_FMASK = 0xfc0000 + O_FNONBLOCKING = 0x80000 + O_FOFFSET = 0x200000 + O_FSYNC = 0x80 + O_FSYNCWRITE = 0x400000 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0xb + RTAX_MPLS1 = 0x8 + RTAX_MPLS2 = 0x9 + RTAX_MPLS3 = 0xa + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_MPLS1 = 0x100 + RTA_MPLS2 = 0x200 + RTA_MPLS3 = 0x400 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MPLSOPS = 0x1000000 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PRCLONING = 0x10000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_WASCLONED = 0x20000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x6 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_IWCAPSEGS = 0x400 + RTV_IWMAXSEGS = 0x200 + RTV_MSL = 0x100 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCADDRT = 0x8040720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691b + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDELRT = 0x8040720b + SIOCDIFADDR = 0x80206919 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8118691d + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc0206926 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPOLLCPU = 0xc020697e + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFTSOLEN = 0xc0206980 + SIOCGLIFADDR = 0xc118691c + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFPOLLCPU = 0x8020697d + SIOCSIFTSOLEN = 0x8020697f + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_CPUHINT = 0x1030 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDSPACE = 0x100a + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_FASTKEEP = 0x80 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x20 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MINMSS = 0x100 + TCP_MIN_WINSHIFT = 0x5 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_SIGNATURE_ENABLE = 0x10 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCISPTMASTER = 0x20007455 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMODG = 0x40047403 + TIOCMODS = 0x80047404 + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2000745f + TIOCSPGRP = 0x80047476 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VCHECKPT = 0x13 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VM_BCACHE_SIZE_MAX = 0x0 + VM_SWZONE_SIZE_MAX = 0x4000000000 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EASYNC = syscall.Errno(0x63) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x63) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEDIUM = syscall.Errno(0x5d) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUNUSED94 = syscall.Errno(0x5e) + EUNUSED95 = syscall.Errno(0x5f) + EUNUSED96 = syscall.Errno(0x60) + EUNUSED97 = syscall.Errno(0x61) + EUNUSED98 = syscall.Errno(0x62) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCKPT = syscall.Signal(0x21) + SIGCKPTEXIT = syscall.Signal(0x22) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "no medium found", + 94: "unknown error: 94", + 95: "unknown error: 95", + 96: "unknown error: 96", + 97: "unknown error: 97", + 98: "unknown error: 98", + 99: "unknown error: 99", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread Scheduler", + 33: "checkPoint", + 34: "checkPointExit", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go new file mode 100644 index 0000000..adf5eef --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_386.go @@ -0,0 +1,1749 @@ +// mkerrors.sh -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4008426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8008426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x104 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc028698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40087459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "capabilities insufficient", + 94: "not permitted in capability mode", + 95: "state not recoverable", + 96: "previous owner died", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "unknown signal", + 33: "unknown signal", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go new file mode 100644 index 0000000..360caff --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_amd64.go @@ -0,0 +1,1750 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4008427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x40184280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80104267 + BIOCSETFNR = 0x80104282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8010427b + BIOCSETZBUF = 0x80184281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffffffffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HHDLC = 0x79 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x104 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80000 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc028697b + SIOCGETSGCNT = 0xc0207210 + SIOCGETVIFCNT = 0xc028720f + SIOCGHIWAT = 0x40047301 + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0106924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0306938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc030698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSDRVSPEC = 0x8028697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "capabilities insufficient", + 94: "not permitted in capability mode", + 95: "state not recoverable", + 96: "previous owner died", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "unknown signal", + 33: "unknown signal", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go new file mode 100644 index 0000000..87deda9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_freebsd_arm.go @@ -0,0 +1,1758 @@ +// mkerrors.sh +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,freebsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x23 + AF_ATM = 0x1e + AF_BLUETOOTH = 0x24 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x25 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1c + AF_INET6_SDP = 0x2a + AF_INET_SDP = 0x28 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_NATM = 0x1d + AF_NETBIOS = 0x6 + AF_NETGRAPH = 0x20 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SCLUSTER = 0x22 + AF_SIP = 0x18 + AF_SLOW = 0x21 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VENDOR00 = 0x27 + AF_VENDOR01 = 0x29 + AF_VENDOR02 = 0x2b + AF_VENDOR03 = 0x2d + AF_VENDOR04 = 0x2f + AF_VENDOR05 = 0x31 + AF_VENDOR06 = 0x33 + AF_VENDOR07 = 0x35 + AF_VENDOR08 = 0x37 + AF_VENDOR09 = 0x39 + AF_VENDOR10 = 0x3b + AF_VENDOR11 = 0x3d + AF_VENDOR12 = 0x3f + AF_VENDOR13 = 0x41 + AF_VENDOR14 = 0x43 + AF_VENDOR15 = 0x45 + AF_VENDOR16 = 0x47 + AF_VENDOR17 = 0x49 + AF_VENDOR18 = 0x4b + AF_VENDOR19 = 0x4d + AF_VENDOR20 = 0x4f + AF_VENDOR21 = 0x51 + AF_VENDOR22 = 0x53 + AF_VENDOR23 = 0x55 + AF_VENDOR24 = 0x57 + AF_VENDOR25 = 0x59 + AF_VENDOR26 = 0x5b + AF_VENDOR27 = 0x5d + AF_VENDOR28 = 0x5f + AF_VENDOR29 = 0x61 + AF_VENDOR30 = 0x63 + AF_VENDOR31 = 0x65 + AF_VENDOR32 = 0x67 + AF_VENDOR33 = 0x69 + AF_VENDOR34 = 0x6b + AF_VENDOR35 = 0x6d + AF_VENDOR36 = 0x6f + AF_VENDOR37 = 0x71 + AF_VENDOR38 = 0x73 + AF_VENDOR39 = 0x75 + AF_VENDOR40 = 0x77 + AF_VENDOR41 = 0x79 + AF_VENDOR42 = 0x7b + AF_VENDOR43 = 0x7d + AF_VENDOR44 = 0x7f + AF_VENDOR45 = 0x81 + AF_VENDOR46 = 0x83 + AF_VENDOR47 = 0x85 + ALTWERASE = 0x200 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427c + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRECTION = 0x40044276 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084279 + BIOCGETBUFMODE = 0x4004427d + BIOCGETIF = 0x4020426b + BIOCGETZMAX = 0x4004427f + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044272 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSEESENT = 0x40044276 + BIOCGSTATS = 0x4008426f + BIOCGTSTAMP = 0x40044283 + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x2000427a + BIOCPROMISC = 0x20004269 + BIOCROTZBUF = 0x400c4280 + BIOCSBLEN = 0xc0044266 + BIOCSDIRECTION = 0x80044277 + BIOCSDLT = 0x80044278 + BIOCSETBUFMODE = 0x8004427e + BIOCSETF = 0x80084267 + BIOCSETFNR = 0x80084282 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x8008427b + BIOCSETZBUF = 0x800c4281 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044273 + BIOCSRTIMEOUT = 0x8010426d + BIOCSSEESENT = 0x80044277 + BIOCSTSTAMP = 0x80044284 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_BUFMODE_BUFFER = 0x1 + BPF_BUFMODE_ZBUF = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x80000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_T_BINTIME = 0x2 + BPF_T_BINTIME_FAST = 0x102 + BPF_T_BINTIME_MONOTONIC = 0x202 + BPF_T_BINTIME_MONOTONIC_FAST = 0x302 + BPF_T_FAST = 0x100 + BPF_T_FLAG_MASK = 0x300 + BPF_T_FORMAT_MASK = 0x3 + BPF_T_MICROTIME = 0x0 + BPF_T_MICROTIME_FAST = 0x100 + BPF_T_MICROTIME_MONOTONIC = 0x200 + BPF_T_MICROTIME_MONOTONIC_FAST = 0x300 + BPF_T_MONOTONIC = 0x200 + BPF_T_MONOTONIC_FAST = 0x300 + BPF_T_NANOTIME = 0x1 + BPF_T_NANOTIME_FAST = 0x101 + BPF_T_NANOTIME_MONOTONIC = 0x201 + BPF_T_NANOTIME_MONOTONIC_FAST = 0x301 + BPF_T_NONE = 0x3 + BPF_T_NORMAL = 0x0 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + CAP_ACCEPT = 0x200000020000000 + CAP_ACL_CHECK = 0x400000000010000 + CAP_ACL_DELETE = 0x400000000020000 + CAP_ACL_GET = 0x400000000040000 + CAP_ACL_SET = 0x400000000080000 + CAP_ALL0 = 0x20007ffffffffff + CAP_ALL1 = 0x4000000001fffff + CAP_BIND = 0x200000040000000 + CAP_BINDAT = 0x200008000000400 + CAP_CHFLAGSAT = 0x200000000001400 + CAP_CONNECT = 0x200000080000000 + CAP_CONNECTAT = 0x200010000000400 + CAP_CREATE = 0x200000000000040 + CAP_EVENT = 0x400000000000020 + CAP_EXTATTR_DELETE = 0x400000000001000 + CAP_EXTATTR_GET = 0x400000000002000 + CAP_EXTATTR_LIST = 0x400000000004000 + CAP_EXTATTR_SET = 0x400000000008000 + CAP_FCHDIR = 0x200000000000800 + CAP_FCHFLAGS = 0x200000000001000 + CAP_FCHMOD = 0x200000000002000 + CAP_FCHMODAT = 0x200000000002400 + CAP_FCHOWN = 0x200000000004000 + CAP_FCHOWNAT = 0x200000000004400 + CAP_FCNTL = 0x200000000008000 + CAP_FCNTL_ALL = 0x78 + CAP_FCNTL_GETFL = 0x8 + CAP_FCNTL_GETOWN = 0x20 + CAP_FCNTL_SETFL = 0x10 + CAP_FCNTL_SETOWN = 0x40 + CAP_FEXECVE = 0x200000000000080 + CAP_FLOCK = 0x200000000010000 + CAP_FPATHCONF = 0x200000000020000 + CAP_FSCK = 0x200000000040000 + CAP_FSTAT = 0x200000000080000 + CAP_FSTATAT = 0x200000000080400 + CAP_FSTATFS = 0x200000000100000 + CAP_FSYNC = 0x200000000000100 + CAP_FTRUNCATE = 0x200000000000200 + CAP_FUTIMES = 0x200000000200000 + CAP_FUTIMESAT = 0x200000000200400 + CAP_GETPEERNAME = 0x200000100000000 + CAP_GETSOCKNAME = 0x200000200000000 + CAP_GETSOCKOPT = 0x200000400000000 + CAP_IOCTL = 0x400000000000080 + CAP_IOCTLS_ALL = 0x7fffffff + CAP_KQUEUE = 0x400000000100040 + CAP_KQUEUE_CHANGE = 0x400000000100000 + CAP_KQUEUE_EVENT = 0x400000000000040 + CAP_LINKAT_SOURCE = 0x200020000000400 + CAP_LINKAT_TARGET = 0x200000000400400 + CAP_LISTEN = 0x200000800000000 + CAP_LOOKUP = 0x200000000000400 + CAP_MAC_GET = 0x400000000000001 + CAP_MAC_SET = 0x400000000000002 + CAP_MKDIRAT = 0x200000000800400 + CAP_MKFIFOAT = 0x200000001000400 + CAP_MKNODAT = 0x200000002000400 + CAP_MMAP = 0x200000000000010 + CAP_MMAP_R = 0x20000000000001d + CAP_MMAP_RW = 0x20000000000001f + CAP_MMAP_RWX = 0x20000000000003f + CAP_MMAP_RX = 0x20000000000003d + CAP_MMAP_W = 0x20000000000001e + CAP_MMAP_WX = 0x20000000000003e + CAP_MMAP_X = 0x20000000000003c + CAP_PDGETPID = 0x400000000000200 + CAP_PDKILL = 0x400000000000800 + CAP_PDWAIT = 0x400000000000400 + CAP_PEELOFF = 0x200001000000000 + CAP_POLL_EVENT = 0x400000000000020 + CAP_PREAD = 0x20000000000000d + CAP_PWRITE = 0x20000000000000e + CAP_READ = 0x200000000000001 + CAP_RECV = 0x200000000000001 + CAP_RENAMEAT_SOURCE = 0x200000004000400 + CAP_RENAMEAT_TARGET = 0x200040000000400 + CAP_RIGHTS_VERSION = 0x0 + CAP_RIGHTS_VERSION_00 = 0x0 + CAP_SEEK = 0x20000000000000c + CAP_SEEK_TELL = 0x200000000000004 + CAP_SEM_GETVALUE = 0x400000000000004 + CAP_SEM_POST = 0x400000000000008 + CAP_SEM_WAIT = 0x400000000000010 + CAP_SEND = 0x200000000000002 + CAP_SETSOCKOPT = 0x200002000000000 + CAP_SHUTDOWN = 0x200004000000000 + CAP_SOCK_CLIENT = 0x200007780000003 + CAP_SOCK_SERVER = 0x200007f60000003 + CAP_SYMLINKAT = 0x200000008000400 + CAP_TTYHOOK = 0x400000000000100 + CAP_UNLINKAT = 0x200000010000400 + CAP_UNUSED0_44 = 0x200080000000000 + CAP_UNUSED0_57 = 0x300000000000000 + CAP_UNUSED1_22 = 0x400000000200000 + CAP_UNUSED1_57 = 0x500000000000000 + CAP_WRITE = 0x200000000000002 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLOCK_MONOTONIC = 0x4 + CLOCK_MONOTONIC_FAST = 0xc + CLOCK_MONOTONIC_PRECISE = 0xb + CLOCK_PROCESS_CPUTIME_ID = 0xf + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_FAST = 0xa + CLOCK_REALTIME_PRECISE = 0x9 + CLOCK_SECOND = 0xd + CLOCK_THREAD_CPUTIME_ID = 0xe + CLOCK_UPTIME = 0x5 + CLOCK_UPTIME_FAST = 0x8 + CLOCK_UPTIME_PRECISE = 0x7 + CLOCK_VIRTUAL = 0x1 + CREAD = 0x800 + CRTSCTS = 0x30000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0x18 + CTL_NET = 0x4 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_BREDR_BB = 0xff + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_BLUETOOTH_LE_LL = 0xfb + DLT_BLUETOOTH_LE_LL_WITH_PHDR = 0x100 + DLT_BLUETOOTH_LINUX_MONITOR = 0xfe + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CHDLC = 0x68 + DLT_CISCO_IOS = 0x76 + DLT_CLASS_NETBSD_RAWAF = 0x2240000 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DBUS = 0xe7 + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_DVB_CI = 0xeb + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_EPON = 0x103 + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NOFCS = 0xe6 + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_INFINIBAND = 0xf7 + DLT_IPFILTER = 0x74 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPMI_HPM_2 = 0x104 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xf2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_ISO_14443 = 0x108 + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_ATM_CEMIC = 0xee + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FIBRECHANNEL = 0xea + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_SRX_E2E = 0xe9 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_JUNIPER_VS = 0xe8 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_PPP_WITHDIRECTION = 0xa6 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MATCHING_MAX = 0x109 + DLT_MATCHING_MIN = 0x68 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPEG_2_TS = 0xf3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_MUX27010 = 0xec + DLT_NETANALYZER = 0xf0 + DLT_NETANALYZER_TRANSPARENT = 0xf1 + DLT_NETLINK = 0xfd + DLT_NFC_LLCP = 0xf5 + DLT_NFLOG = 0xef + DLT_NG40 = 0xf4 + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x79 + DLT_PKTAP = 0x102 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PPP_WITH_DIRECTION = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PROFIBUS_DL = 0x101 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RDS = 0x109 + DLT_REDBACK_SMARTEDGE = 0x20 + DLT_RIO = 0x7c + DLT_RTAC_SERIAL = 0xfa + DLT_SCCP = 0x8e + DLT_SCTP = 0xf8 + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_STANAG_5066_D_PDU = 0xed + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USBPCAP = 0xf9 + DLT_USB_FREEBSD = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_USER0 = 0x93 + DLT_USER1 = 0x94 + DLT_USER10 = 0x9d + DLT_USER11 = 0x9e + DLT_USER12 = 0x9f + DLT_USER13 = 0xa0 + DLT_USER14 = 0xa1 + DLT_USER15 = 0xa2 + DLT_USER2 = 0x95 + DLT_USER3 = 0x96 + DLT_USER4 = 0x97 + DLT_USER5 = 0x98 + DLT_USER6 = 0x99 + DLT_USER7 = 0x9a + DLT_USER8 = 0x9b + DLT_USER9 = 0x9c + DLT_WATTSTOPPER_DLM = 0x107 + DLT_WIHART = 0xdf + DLT_WIRESHARK_UPPER_PDU = 0xfc + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DLT_ZWAVE_R1_R2 = 0x105 + DLT_ZWAVE_R3 = 0x106 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EVFILT_AIO = -0x3 + EVFILT_FS = -0x9 + EVFILT_LIO = -0xa + EVFILT_PROC = -0x5 + EVFILT_PROCDESC = -0x8 + EVFILT_READ = -0x1 + EVFILT_SENDFILE = -0xc + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0xc + EVFILT_TIMER = -0x7 + EVFILT_USER = -0xb + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_DISPATCH = 0x80 + EV_DROP = 0x1000 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_FLAG2 = 0x4000 + EV_FORCEONESHOT = 0x100 + EV_ONESHOT = 0x10 + EV_RECEIPT = 0x40 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTATTR_NAMESPACE_EMPTY = 0x0 + EXTATTR_NAMESPACE_SYSTEM = 0x2 + EXTATTR_NAMESPACE_USER = 0x1 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_CANCEL = 0x5 + F_DUP2FD = 0xa + F_DUP2FD_CLOEXEC = 0x12 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x11 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xb + F_GETOWN = 0x5 + F_OGETLK = 0x7 + F_OK = 0x0 + F_OSETLK = 0x8 + F_OSETLKW = 0x9 + F_RDAHEAD = 0x10 + F_RDLCK = 0x1 + F_READAHEAD = 0xf + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0xc + F_SETLKW = 0xd + F_SETLK_REMOTE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_UNLCKSYS = 0x4 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_ALTPHYS = 0x4000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x218f52 + IFF_CANTCONFIG = 0x10000 + IFF_DEBUG = 0x4 + IFF_DRV_OACTIVE = 0x400 + IFF_DRV_RUNNING = 0x40 + IFF_DYING = 0x200000 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MONITOR = 0x40000 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PPROMISC = 0x20000 + IFF_PROMISC = 0x100 + IFF_RENAMING = 0x400000 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_STATICARP = 0x80000 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_BRIDGE = 0xd1 + IFT_CARP = 0xf8 + IFT_IEEE1394 = 0x90 + IFT_INFINIBAND = 0xc7 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_PPP = 0x17 + IFT_PROPVIRTUAL = 0x35 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_MASK = 0xfffffffe + IPPROTO_3PC = 0x22 + IPPROTO_ADFS = 0x44 + IPPROTO_AH = 0x33 + IPPROTO_AHIP = 0x3d + IPPROTO_APES = 0x63 + IPPROTO_ARGUS = 0xd + IPPROTO_AX25 = 0x5d + IPPROTO_BHA = 0x31 + IPPROTO_BLT = 0x1e + IPPROTO_BRSATMON = 0x4c + IPPROTO_CARP = 0x70 + IPPROTO_CFTP = 0x3e + IPPROTO_CHAOS = 0x10 + IPPROTO_CMTP = 0x26 + IPPROTO_CPHB = 0x49 + IPPROTO_CPNX = 0x48 + IPPROTO_DDP = 0x25 + IPPROTO_DGP = 0x56 + IPPROTO_DIVERT = 0x102 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_EMCON = 0xe + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GMTP = 0x64 + IPPROTO_GRE = 0x2f + IPPROTO_HELLO = 0x3f + IPPROTO_HIP = 0x8b + IPPROTO_HMP = 0x14 + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IDPR = 0x23 + IPPROTO_IDRP = 0x2d + IPPROTO_IGMP = 0x2 + IPPROTO_IGP = 0x55 + IPPROTO_IGRP = 0x58 + IPPROTO_IL = 0x28 + IPPROTO_INLSP = 0x34 + IPPROTO_INP = 0x20 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPCV = 0x47 + IPPROTO_IPEIP = 0x5e + IPPROTO_IPIP = 0x4 + IPPROTO_IPPC = 0x43 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IRTP = 0x1c + IPPROTO_KRYPTOLAN = 0x41 + IPPROTO_LARP = 0x5b + IPPROTO_LEAF1 = 0x19 + IPPROTO_LEAF2 = 0x1a + IPPROTO_MAX = 0x100 + IPPROTO_MEAS = 0x13 + IPPROTO_MH = 0x87 + IPPROTO_MHRP = 0x30 + IPPROTO_MICP = 0x5f + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_MUX = 0x12 + IPPROTO_ND = 0x4d + IPPROTO_NHRP = 0x36 + IPPROTO_NONE = 0x3b + IPPROTO_NSP = 0x1f + IPPROTO_NVPII = 0xb + IPPROTO_OLD_DIVERT = 0xfe + IPPROTO_OSPFIGP = 0x59 + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PGM = 0x71 + IPPROTO_PIGP = 0x9 + IPPROTO_PIM = 0x67 + IPPROTO_PRM = 0x15 + IPPROTO_PUP = 0xc + IPPROTO_PVP = 0x4b + IPPROTO_RAW = 0xff + IPPROTO_RCCMON = 0xa + IPPROTO_RDP = 0x1b + IPPROTO_RESERVED_253 = 0xfd + IPPROTO_RESERVED_254 = 0xfe + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_RVD = 0x42 + IPPROTO_SATEXPAK = 0x40 + IPPROTO_SATMON = 0x45 + IPPROTO_SCCSP = 0x60 + IPPROTO_SCTP = 0x84 + IPPROTO_SDRP = 0x2a + IPPROTO_SEND = 0x103 + IPPROTO_SEP = 0x21 + IPPROTO_SHIM6 = 0x8c + IPPROTO_SKIP = 0x39 + IPPROTO_SPACER = 0x7fff + IPPROTO_SRPC = 0x5a + IPPROTO_ST = 0x7 + IPPROTO_SVMTP = 0x52 + IPPROTO_SWIPE = 0x35 + IPPROTO_TCF = 0x57 + IPPROTO_TCP = 0x6 + IPPROTO_TLSP = 0x38 + IPPROTO_TP = 0x1d + IPPROTO_TPXX = 0x27 + IPPROTO_TRUNK1 = 0x17 + IPPROTO_TRUNK2 = 0x18 + IPPROTO_TTP = 0x54 + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPPROTO_VINES = 0x53 + IPPROTO_VISA = 0x46 + IPPROTO_VMTP = 0x51 + IPPROTO_WBEXPAK = 0x4f + IPPROTO_WBMON = 0x4e + IPPROTO_WSN = 0x4a + IPPROTO_XNET = 0xf + IPPROTO_XTP = 0x24 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_BINDANY = 0x40 + IPV6_BINDMULTI = 0x41 + IPV6_BINDV6ONLY = 0x1b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FLOWID = 0x43 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FLOWTYPE = 0x44 + IPV6_FRAGTTL = 0x78 + IPV6_FW_ADD = 0x1e + IPV6_FW_DEL = 0x1f + IPV6_FW_FLUSH = 0x20 + IPV6_FW_GET = 0x22 + IPV6_FW_ZERO = 0x21 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXOPTHDR = 0x800 + IPV6_MAXPACKET = 0xffff + IPV6_MAX_GROUP_SRC_FILTER = 0x200 + IPV6_MAX_MEMBERSHIPS = 0xfff + IPV6_MAX_SOCK_SRC_FILTER = 0x80 + IPV6_MIN_MEMBERSHIPS = 0x1f + IPV6_MMTU = 0x500 + IPV6_MSFILTER = 0x4a + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_PREFER_TEMPADDR = 0x3f + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVFLOWID = 0x46 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRSSBUCKETID = 0x47 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RSSBUCKETID = 0x45 + IPV6_RSS_LISTEN_BUCKET = 0x42 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_ADD_SOURCE_MEMBERSHIP = 0x46 + IP_BINDANY = 0x18 + IP_BINDMULTI = 0x19 + IP_BLOCK_SOURCE = 0x48 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DONTFRAG = 0x43 + IP_DROP_MEMBERSHIP = 0xd + IP_DROP_SOURCE_MEMBERSHIP = 0x47 + IP_DUMMYNET3 = 0x31 + IP_DUMMYNET_CONFIGURE = 0x3c + IP_DUMMYNET_DEL = 0x3d + IP_DUMMYNET_FLUSH = 0x3e + IP_DUMMYNET_GET = 0x40 + IP_FLOWID = 0x5a + IP_FLOWTYPE = 0x5b + IP_FW3 = 0x30 + IP_FW_ADD = 0x32 + IP_FW_DEL = 0x33 + IP_FW_FLUSH = 0x34 + IP_FW_GET = 0x36 + IP_FW_NAT_CFG = 0x38 + IP_FW_NAT_DEL = 0x39 + IP_FW_NAT_GET_CONFIG = 0x3a + IP_FW_NAT_GET_LOG = 0x3b + IP_FW_RESETLOG = 0x37 + IP_FW_TABLE_ADD = 0x28 + IP_FW_TABLE_DEL = 0x29 + IP_FW_TABLE_FLUSH = 0x2a + IP_FW_TABLE_GETSIZE = 0x2b + IP_FW_TABLE_LIST = 0x2c + IP_FW_ZERO = 0x35 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x15 + IP_MAXPACKET = 0xffff + IP_MAX_GROUP_SRC_FILTER = 0x200 + IP_MAX_MEMBERSHIPS = 0xfff + IP_MAX_SOCK_MUTE_FILTER = 0x80 + IP_MAX_SOCK_SRC_FILTER = 0x80 + IP_MAX_SOURCE_FILTER = 0x400 + IP_MF = 0x2000 + IP_MINTTL = 0x42 + IP_MIN_MEMBERSHIPS = 0x1f + IP_MSFILTER = 0x4a + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_VIF = 0xe + IP_OFFMASK = 0x1fff + IP_ONESBCAST = 0x17 + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVFLOWID = 0x5d + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRSSBUCKETID = 0x5e + IP_RECVTOS = 0x44 + IP_RECVTTL = 0x41 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RSSBUCKETID = 0x5c + IP_RSS_LISTEN_BUCKET = 0x1a + IP_RSVP_OFF = 0x10 + IP_RSVP_ON = 0xf + IP_RSVP_VIF_OFF = 0x12 + IP_RSVP_VIF_ON = 0x11 + IP_SENDSRCADDR = 0x7 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x49 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_AUTOSYNC = 0x7 + MADV_CORE = 0x9 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NOCORE = 0x8 + MADV_NORMAL = 0x0 + MADV_NOSYNC = 0x6 + MADV_PROTECT = 0xa + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_ALIGNED_SUPER = 0x1000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_EXCL = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GUARD = 0x2000 + MAP_HASSEMAPHORE = 0x200 + MAP_NOCORE = 0x20000 + MAP_NOSYNC = 0x800 + MAP_PREFAULT_READ = 0x40000 + MAP_PRIVATE = 0x2 + MAP_RESERVED0020 = 0x20 + MAP_RESERVED0040 = 0x40 + MAP_RESERVED0080 = 0x80 + MAP_RESERVED0100 = 0x100 + MAP_SHARED = 0x1 + MAP_STACK = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MNT_ACLS = 0x8000000 + MNT_ASYNC = 0x40 + MNT_AUTOMOUNTED = 0x200000000 + MNT_BYFSID = 0x8000000 + MNT_CMDFLAGS = 0xd0f0000 + MNT_DEFEXPORTED = 0x200 + MNT_DELEXPORT = 0x20000 + MNT_EXKERB = 0x800 + MNT_EXPORTANON = 0x400 + MNT_EXPORTED = 0x100 + MNT_EXPUBLIC = 0x20000000 + MNT_EXRDONLY = 0x80 + MNT_FORCE = 0x80000 + MNT_GJOURNAL = 0x2000000 + MNT_IGNORE = 0x800000 + MNT_LAZY = 0x3 + MNT_LOCAL = 0x1000 + MNT_MULTILABEL = 0x4000000 + MNT_NFS4ACLS = 0x10 + MNT_NOATIME = 0x10000000 + MNT_NOCLUSTERR = 0x40000000 + MNT_NOCLUSTERW = 0x80000000 + MNT_NOEXEC = 0x4 + MNT_NONBUSY = 0x4000000 + MNT_NOSUID = 0x8 + MNT_NOSYMFOLLOW = 0x400000 + MNT_NOWAIT = 0x2 + MNT_QUOTA = 0x2000 + MNT_RDONLY = 0x1 + MNT_RELOAD = 0x40000 + MNT_ROOTFS = 0x4000 + MNT_SNAPSHOT = 0x1000000 + MNT_SOFTDEP = 0x200000 + MNT_SUIDDIR = 0x100000 + MNT_SUJ = 0x100000000 + MNT_SUSPEND = 0x4 + MNT_SYNCHRONOUS = 0x2 + MNT_UNION = 0x20 + MNT_UPDATE = 0x10000 + MNT_UPDATEMASK = 0x2d8d0807e + MNT_USER = 0x8000 + MNT_VISFLAGMASK = 0x3fef0ffff + MNT_WAIT = 0x1 + MSG_CMSG_CLOEXEC = 0x40000 + MSG_COMPAT = 0x8000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOF = 0x100 + MSG_EOR = 0x8 + MSG_NBIO = 0x4000 + MSG_NOSIGNAL = 0x20000 + MSG_NOTIFICATION = 0x2000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MSG_WAITFORONE = 0x80000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x0 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_IFLISTL = 0x5 + NET_RT_IFMALIST = 0x4 + NOFLSH = 0x80000000 + NOKERNINFO = 0x2000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_CLOSE = 0x100 + NOTE_CLOSE_WRITE = 0x200 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FFAND = 0x40000000 + NOTE_FFCOPY = 0xc0000000 + NOTE_FFCTRLMASK = 0xc0000000 + NOTE_FFLAGSMASK = 0xffffff + NOTE_FFNOP = 0x0 + NOTE_FFOR = 0x80000000 + NOTE_FILE_POLL = 0x2 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_MSECONDS = 0x2 + NOTE_NSECONDS = 0x8 + NOTE_OPEN = 0x80 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_READ = 0x400 + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_SECONDS = 0x1 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRIGGER = 0x1000000 + NOTE_USECONDS = 0x4 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + OXTABS = 0x4 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x100000 + O_CREAT = 0x200 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x20000 + O_EXCL = 0x800 + O_EXEC = 0x40000 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_TTY_INIT = 0x80000 + O_VERIFY = 0x200000 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_MEMLOCK = 0x6 + RLIMIT_NOFILE = 0x8 + RLIMIT_NPROC = 0x7 + RLIMIT_RSS = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x8 + RTAX_NETMASK = 0x2 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FIXEDMTU = 0x80000 + RTF_FMASK = 0x1004d808 + RTF_GATEWAY = 0x2 + RTF_GWFLAG_COMPAT = 0x80000000 + RTF_HOST = 0x4 + RTF_LLDATA = 0x400 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MODIFIED = 0x20 + RTF_MULTICAST = 0x800000 + RTF_PINNED = 0x100000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x40000 + RTF_REJECT = 0x8 + RTF_RNH_LOCKED = 0x40000000 + RTF_STATIC = 0x800 + RTF_STICKY = 0x10000000 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DELMADDR = 0x10 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x12 + RTM_IFANNOUNCE = 0x11 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_NEWMADDR = 0xf + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RTV_WEIGHT = 0x100 + RT_ALL_FIBS = -0x1 + RT_BLACKHOLE = 0x40 + RT_CACHING_CONTEXT = 0x1 + RT_DEFAULT_FIB = 0x0 + RT_HAS_GW = 0x80 + RT_HAS_HEADER = 0x10 + RT_HAS_HEADER_BIT = 0x4 + RT_L2_ME = 0x4 + RT_L2_ME_BIT = 0x2 + RT_LLE_CACHE = 0x100 + RT_MAY_LOOP = 0x8 + RT_MAY_LOOP_BIT = 0x3 + RT_NORTREF = 0x2 + RT_REJECT = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_BINTIME = 0x4 + SCM_CREDS = 0x3 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x2 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCGDRVSPEC = 0xc01c697b + SIOCGETSGCNT = 0xc0147210 + SIOCGETVIFCNT = 0xc014720f + SIOCGHIWAT = 0x40047301 + SIOCGHWADDR = 0xc020693e + SIOCGI2C = 0xc020693d + SIOCGIFADDR = 0xc0206921 + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCAP = 0xc020691f + SIOCGIFCONF = 0xc0086924 + SIOCGIFDESCR = 0xc020692a + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFIB = 0xc020695c + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFINDEX = 0xc0206920 + SIOCGIFMAC = 0xc0206926 + SIOCGIFMEDIA = 0xc0286938 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc0206933 + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPHYS = 0xc0206935 + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFSTATUS = 0xc331693b + SIOCGIFXMEDIA = 0xc028698b + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGPRIVATE_0 = 0xc0206950 + SIOCGPRIVATE_1 = 0xc0206951 + SIOCGTUNFIB = 0xc020695e + SIOCIFCREATE = 0xc020697a + SIOCIFCREATE2 = 0xc020697c + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSDRVSPEC = 0x801c697b + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFCAP = 0x8020691e + SIOCSIFDESCR = 0x80206929 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFIB = 0x8020695d + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020693c + SIOCSIFMAC = 0x80206927 + SIOCSIFMEDIA = 0xc0206937 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x80206934 + SIOCSIFNAME = 0x80206928 + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPHYS = 0x80206936 + SIOCSIFRVNET = 0xc020695b + SIOCSIFVNET = 0xc020695a + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSTUNFIB = 0x8020695f + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_MAXADDRLEN = 0xff + SOCK_NONBLOCK = 0x20000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BINTIME = 0x2000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LABEL = 0x1009 + SO_LINGER = 0x80 + SO_LISTENINCQLEN = 0x1013 + SO_LISTENQLEN = 0x1012 + SO_LISTENQLIMIT = 0x1011 + SO_NOSIGPIPE = 0x800 + SO_NO_DDP = 0x8000 + SO_NO_OFFLOAD = 0x4000 + SO_OOBINLINE = 0x100 + SO_PEERLABEL = 0x1010 + SO_PROTOCOL = 0x1016 + SO_PROTOTYPE = 0x1016 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SETFIB = 0x1014 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_TIMESTAMP = 0x400 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_USER_COOKIE = 0x1015 + SO_VENDOR = 0x80000000 + TAB0 = 0x0 + TAB3 = 0x4 + TABDLY = 0x4 + TCIFLUSH = 0x1 + TCIOFF = 0x3 + TCIOFLUSH = 0x3 + TCION = 0x4 + TCOFLUSH = 0x2 + TCOOFF = 0x1 + TCOON = 0x2 + TCP_CA_NAME_MAX = 0x10 + TCP_CCALGOOPT = 0x41 + TCP_CONGESTION = 0x40 + TCP_FASTOPEN = 0x401 + TCP_FUNCTION_BLK = 0x2000 + TCP_FUNCTION_NAME_LEN_MAX = 0x20 + TCP_INFO = 0x20 + TCP_KEEPCNT = 0x400 + TCP_KEEPIDLE = 0x100 + TCP_KEEPINIT = 0x80 + TCP_KEEPINTVL = 0x200 + TCP_MAXBURST = 0x4 + TCP_MAXHLEN = 0x3c + TCP_MAXOLEN = 0x28 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x4 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOOPT = 0x8 + TCP_NOPUSH = 0x4 + TCP_PCAP_IN = 0x1000 + TCP_PCAP_OUT = 0x800 + TCP_VENDOR = 0x80000000 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLUSH = 0x80047410 + TIOCGDRAINWAIT = 0x40047456 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGPGRP = 0x40047477 + TIOCGPTN = 0x4004740f + TIOCGSID = 0x40047463 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGDTRWAIT = 0x4004745a + TIOCMGET = 0x4004746a + TIOCMSDTRWAIT = 0x8004745b + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DCD = 0x40 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMASTER = 0x2000741c + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDRAINWAIT = 0x80047457 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSIG = 0x2004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x20007465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCTIMESTAMP = 0x40107459 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VERASE2 = 0x7 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WCONTINUED = 0x4 + WCOREFLAG = 0x80 + WEXITED = 0x10 + WLINUXCLONE = 0x80000000 + WNOHANG = 0x1 + WNOWAIT = 0x8 + WSTOPPED = 0x2 + WTRAPPED = 0x20 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x59) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x55) + ECAPMODE = syscall.Errno(0x5e) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOOFUS = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x56) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5a) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x57) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCAPABLE = syscall.Errno(0x5d) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTRECOVERABLE = syscall.Errno(0x5f) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EOWNERDEAD = syscall.Errno(0x60) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x5c) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLIBRT = syscall.Signal(0x21) + SIGLWP = syscall.Signal(0x20) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "operation timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "operation canceled", + 86: "illegal byte sequence", + 87: "attribute not found", + 88: "programming error", + 89: "bad message", + 90: "multihop attempted", + 91: "link has been severed", + 92: "protocol error", + 93: "capabilities insufficient", + 94: "not permitted in capability mode", + 95: "state not recoverable", + 96: "previous owner died", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "suspended (signal)", + 18: "suspended", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "unknown signal", + 33: "unknown signal", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go new file mode 100644 index 0000000..bb8a772 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -0,0 +1,2244 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -m32 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80041270 + BLKBSZSET = 0x40041271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80041272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x8000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x800854db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go new file mode 100644 index 0000000..cf0b224 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -0,0 +1,2245 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x40 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ARCH_PRCTL = 0x1e + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPXREGS = 0x12 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPXREGS = 0x13 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SINGLEBLOCK = 0x21 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go new file mode 100644 index 0000000..57cfcf3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -0,0 +1,2249 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80041270 + BLKBSZSET = 0x40041271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80041272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xc + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0xd + F_SETLK64 = 0xd + F_SETLKW = 0xe + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x20000 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETCRUNCHREGS = 0x19 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETHBPREGS = 0x1d + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVFPREGS = 0x1b + PTRACE_GETWMMXREGS = 0x12 + PTRACE_GET_THREAD_AREA = 0x16 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETCRUNCHREGS = 0x1a + PTRACE_SETFPREGS = 0xf + PTRACE_SETHBPREGS = 0x1e + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVFPREGS = 0x1c + PTRACE_SETWMMXREGS = 0x13 + PTRACE_SET_SYSCALL = 0x17 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_DATA_ADDR = 0x10004 + PT_TEXT_ADDR = 0x10000 + PT_TEXT_END_ADDR = 0x10008 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x400854d5 + TUNDETACHFILTER = 0x400854d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x800854db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go new file mode 100644 index 0000000..b6e5b09 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -0,0 +1,2235 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ESR_MAGIC = 0x45535201 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + EXTRA_MAGIC = 0x45585401 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x10000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go new file mode 100644 index 0000000..0113e1f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -0,0 +1,2254 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x40041270 + BLKBSZSET = 0x80041271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40041272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x21 + F_GETLK64 = 0x21 + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x22 + F_SETLK64 = 0x22 + F_SETLKW = 0x23 + F_SETLKW64 = 0x23 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x800854d5 + TUNDETACHFILTER = 0x800854d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x400854db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go new file mode 100644 index 0000000..6857657 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -0,0 +1,2254 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go new file mode 100644 index 0000000..14f7e0e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -0,0 +1,2254 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64le,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x0 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go new file mode 100644 index 0000000..f795862 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -0,0 +1,2254 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mipsle,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x40041270 + BLKBSZSET = 0x80041271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40041272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x80 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x21 + F_GETLK64 = 0x21 + F_GETOWN = 0x17 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x22 + F_SETLK64 = 0x22 + F_SETLKW = 0x23 + F_SETLKW64 = 0x23 + F_SETOWN = 0x18 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x100 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x80 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x800 + MAP_ANONYMOUS = 0x800 + MAP_DENYWRITE = 0x2000 + MAP_EXECUTABLE = 0x4000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x1000 + MAP_HUGETLB = 0x80000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x8000 + MAP_NONBLOCK = 0x20000 + MAP_NORESERVE = 0x400 + MAP_POPULATE = 0x10000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x800 + MAP_SHARED = 0x1 + MAP_STACK = 0x40000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x1000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x100 + O_DIRECT = 0x8000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x10 + O_EXCL = 0x400 + O_FSYNC = 0x4010 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x80 + O_NOATIME = 0x40000 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x80 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x4010 + O_SYNC = 0x4010 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40042407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80042406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_THREAD_AREA = 0x19 + PTRACE_GET_THREAD_AREA_3264 = 0xc4 + PTRACE_GET_WATCH_REGS = 0xd0 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_3264 = 0xc1 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_3264 = 0xc0 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_3264 = 0xc3 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_3264 = 0xc2 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_THREAD_AREA = 0x1a + PTRACE_SET_WATCH_REGS = 0xd1 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x9 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x5 + RLIMIT_NPROC = 0x8 + RLIMIT_RSS = 0x7 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x40047307 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x40047309 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x467f + SIOCOUTQ = 0x7472 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x80047308 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x1 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x80 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x2 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1009 + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x11 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x12 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x1f + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STYLE = 0x1008 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCGETS2 = 0x4030542a + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSBRKP = 0x5486 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETS2 = 0x8030542b + TCSETSF = 0x5410 + TCSETSF2 = 0x8030542d + TCSETSW = 0x540f + TCSETSW2 = 0x8030542c + TCXONC = 0x5406 + TIOCCBRK = 0x5428 + TIOCCONS = 0x80047478 + TIOCEXCL = 0x740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x5492 + TIOCGLCKTRMIOS = 0x548b + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x4020542e + TIOCGSERIAL = 0x5484 + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5481 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x467f + TIOCLINUX = 0x5483 + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMIWAIT = 0x5491 + TIOCMSET = 0x741a + TIOCM_CAR = 0x100 + TIOCM_CD = 0x100 + TIOCM_CTS = 0x40 + TIOCM_DSR = 0x400 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x200 + TIOCM_RNG = 0x200 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x20 + TIOCM_ST = 0x10 + TIOCNOTTY = 0x5471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7472 + TIOCPKT = 0x5470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x5480 + TIOCSERCONFIG = 0x5488 + TIOCSERGETLSR = 0x548e + TIOCSERGETMULTI = 0x548f + TIOCSERGSTRUCT = 0x548d + TIOCSERGWILD = 0x5489 + TIOCSERSETMULTI = 0x5490 + TIOCSERSWILD = 0x548a + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x548c + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0xc020542f + TIOCSSERIAL = 0x5485 + TIOCSSOFTCAR = 0x5482 + TIOCSTI = 0x5472 + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x8000 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x800854d5 + TUNDETACHFILTER = 0x800854d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x400854db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0xd + VEOF = 0x10 + VEOL = 0x11 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x20 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x9e) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x46d) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EHWPOISON = syscall.Errno(0xa8) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINIT = syscall.Errno(0x8d) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x8b) + EKEYEXPIRED = syscall.Errno(0xa2) + EKEYREJECTED = syscall.Errno(0xa4) + EKEYREVOKED = syscall.Errno(0xa3) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOOP = syscall.Errno(0x5a) + EMEDIUMTYPE = syscall.Errno(0xa0) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENAVAIL = syscall.Errno(0x8a) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0xa1) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x9f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTNAM = syscall.Errno(0x89) + ENOTRECOVERABLE = syscall.Errno(0xa6) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x7a) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0xa5) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMDEV = syscall.Errno(0x8e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x8c) + ERESTART = syscall.Errno(0x5b) + ERFKILL = syscall.Errno(0xa7) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x87) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "resource deadlock avoided", + 46: "no locks available", + 50: "invalid exchange", + 51: "invalid request descriptor", + 52: "exchange full", + 53: "no anode", + 54: "invalid request code", + 55: "invalid slot", + 56: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 73: "RFS specific error", + 74: "multihop attempted", + 77: "bad message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in too many shared libraries", + 87: "cannot exec a shared library directly", + 88: "invalid or incomplete multibyte or wide character", + 89: "function not implemented", + 90: "too many levels of symbolic links", + 91: "interrupted system call should be restarted", + 92: "streams pipe error", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "protocol not available", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported", + 123: "protocol family not supported", + 124: "address family not supported by protocol", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection on reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 135: "structure needs cleaning", + 137: "not a XENIX named type file", + 138: "no XENIX semaphores available", + 139: "is a named type file", + 140: "remote I/O error", + 141: "unknown error 141", + 142: "unknown error 142", + 143: "cannot send after transport endpoint shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale file handle", + 158: "operation canceled", + 159: "no medium found", + 160: "wrong medium type", + 161: "required key not available", + 162: "key has expired", + 163: "key has been revoked", + 164: "key was rejected by service", + 165: "owner died", + 166: "state not recoverable", + 167: "operation not possible due to RF-kill", + 168: "memory page has hardware error", + 1133: "disk quota exceeded", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "user defined signal 1", + 17: "user defined signal 2", + 18: "child exited", + 19: "power failure", + 20: "window changed", + 21: "urgent I/O condition", + 22: "I/O possible", + 23: "stopped (signal)", + 24: "stopped", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual timer expired", + 29: "profiling timer expired", + 30: "CPU time limit exceeded", + 31: "file size limit exceeded", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go new file mode 100644 index 0000000..2544c4b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -0,0 +1,2307 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x17 + B110 = 0x3 + B115200 = 0x11 + B1152000 = 0x18 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x19 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x1a + B230400 = 0x12 + B2400 = 0xb + B2500000 = 0x1b + B300 = 0x7 + B3000000 = 0x1c + B3500000 = 0x1d + B38400 = 0xf + B4000000 = 0x1e + B460800 = 0x13 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x16 + B9600 = 0xd + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1f + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0xff + CBAUDEX = 0x0 + CFLUSH = 0xf + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIGNAL = 0xff + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x4000 + IBSHIFT = 0x10 + ICANON = 0x100 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x400 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x300 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x4 + ONLCR = 0x2 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x1000 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_SAO = 0x10 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x400000 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x5 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4000 + XTABS = 0xc00 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 58: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go new file mode 100644 index 0000000..133bdf5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -0,0 +1,2307 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64le,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x17 + B110 = 0x3 + B115200 = 0x11 + B1152000 = 0x18 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x19 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x1a + B230400 = 0x12 + B2400 = 0xb + B2500000 = 0x1b + B300 = 0x7 + B3000000 = 0x1c + B3500000 = 0x1d + B38400 = 0xf + B4000000 = 0x1e + B460800 = 0x13 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x14 + B57600 = 0x10 + B576000 = 0x15 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x16 + B9600 = 0xd + BLKBSZGET = 0x40081270 + BLKBSZSET = 0x80081271 + BLKFLSBUF = 0x20001261 + BLKFRAGET = 0x20001265 + BLKFRASET = 0x20001264 + BLKGETSIZE = 0x20001260 + BLKGETSIZE64 = 0x40081272 + BLKPBSZGET = 0x2000127b + BLKRAGET = 0x20001263 + BLKRASET = 0x20001262 + BLKROGET = 0x2000125e + BLKROSET = 0x2000125d + BLKRRPART = 0x2000125f + BLKSECTGET = 0x20001267 + BLKSECTSET = 0x20001266 + BLKSSZGET = 0x20001268 + BOTHER = 0x1f + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x8000 + BSDLY = 0x8000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0xff + CBAUDEX = 0x0 + CFLUSH = 0xf + CIBAUD = 0xff0000 + CLOCAL = 0x8000 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x1000 + CR2 = 0x2000 + CR3 = 0x3000 + CRDLY = 0x3000 + CREAD = 0x800 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIGNAL = 0xff + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x4000 + FFDLY = 0x4000 + FLUSHO = 0x800000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x800c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x80106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x400c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0xc + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0xd + F_SETLKW = 0x7 + F_SETLKW64 = 0xe + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x4000 + IBSHIFT = 0x10 + ICANON = 0x100 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x400 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x80 + ISTRIP = 0x20 + IUCLC = 0x1000 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x80 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NL2 = 0x200 + NL3 = 0x300 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x300 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80000000 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x4 + ONLCR = 0x2 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x20000 + O_DIRECTORY = 0x4000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x8000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x404000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x1000 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PERF_EVENT_IOC_DISABLE = 0x20002401 + PERF_EVENT_IOC_ENABLE = 0x20002400 + PERF_EVENT_IOC_ID = 0x40082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x80042409 + PERF_EVENT_IOC_PERIOD = 0x80082404 + PERF_EVENT_IOC_REFRESH = 0x20002402 + PERF_EVENT_IOC_RESET = 0x20002403 + PERF_EVENT_IOC_SET_BPF = 0x80042408 + PERF_EVENT_IOC_SET_FILTER = 0x80082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x20002405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_SAO = 0x10 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETEVRREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GETVRREGS = 0x12 + PTRACE_GETVSRREGS = 0x1b + PTRACE_GET_DEBUGREG = 0x19 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETEVRREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SETVRREGS = 0x13 + PTRACE_SETVSRREGS = 0x1c + PTRACE_SET_DEBUGREG = 0x1a + PTRACE_SINGLEBLOCK = 0x100 + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PT_CCR = 0x26 + PT_CTR = 0x23 + PT_DAR = 0x29 + PT_DSCR = 0x2c + PT_DSISR = 0x2a + PT_FPR0 = 0x30 + PT_FPSCR = 0x50 + PT_LNK = 0x24 + PT_MSR = 0x21 + PT_NIP = 0x20 + PT_ORIG_R3 = 0x22 + PT_R0 = 0x0 + PT_R1 = 0x1 + PT_R10 = 0xa + PT_R11 = 0xb + PT_R12 = 0xc + PT_R13 = 0xd + PT_R14 = 0xe + PT_R15 = 0xf + PT_R16 = 0x10 + PT_R17 = 0x11 + PT_R18 = 0x12 + PT_R19 = 0x13 + PT_R2 = 0x2 + PT_R20 = 0x14 + PT_R21 = 0x15 + PT_R22 = 0x16 + PT_R23 = 0x17 + PT_R24 = 0x18 + PT_R25 = 0x19 + PT_R26 = 0x1a + PT_R27 = 0x1b + PT_R28 = 0x1c + PT_R29 = 0x1d + PT_R3 = 0x3 + PT_R30 = 0x1e + PT_R31 = 0x1f + PT_R4 = 0x4 + PT_R5 = 0x5 + PT_R6 = 0x6 + PT_R7 = 0x7 + PT_R8 = 0x8 + PT_R9 = 0x9 + PT_REGS_COUNT = 0x2c + PT_RESULT = 0x2b + PT_SOFTE = 0x27 + PT_TRAP = 0x28 + PT_VR0 = 0x52 + PT_VRSAVE = 0x94 + PT_VSCR = 0x93 + PT_VSR0 = 0x96 + PT_VSR31 = 0xd4 + PT_XER = 0x25 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x14 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x15 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x10 + SO_RCVTIMEO = 0x12 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x11 + SO_SNDTIMEO = 0x13 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x400 + TAB2 = 0x800 + TAB3 = 0xc00 + TABDLY = 0xc00 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x2000741f + TCGETA = 0x40147417 + TCGETS = 0x402c7413 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x2000741d + TCSBRKP = 0x5425 + TCSETA = 0x80147418 + TCSETAF = 0x8014741c + TCSETAW = 0x80147419 + TCSETS = 0x802c7414 + TCSETSF = 0x802c7416 + TCSETSW = 0x802c7415 + TCXONC = 0x2000741e + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x40045432 + TIOCGETC = 0x40067412 + TIOCGETD = 0x5424 + TIOCGETP = 0x40067408 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGLTC = 0x40067474 + TIOCGPGRP = 0x40047477 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40045430 + TIOCGPTPEER = 0x20005441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETC = 0x80067411 + TIOCSETD = 0x5423 + TIOCSETN = 0x8006740a + TIOCSETP = 0x80067409 + TIOCSIG = 0x80045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSLTC = 0x80067475 + TIOCSPGRP = 0x80047476 + TIOCSPTLCK = 0x80045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTART = 0x2000746e + TIOCSTI = 0x5412 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x400000 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0x10 + VEOF = 0x4 + VEOL = 0x6 + VEOL2 = 0x8 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x5 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xb + VSTART = 0xd + VSTOP = 0xe + VSUSP = 0xc + VSWTC = 0x9 + VT0 = 0x0 + VT1 = 0x10000 + VTDLY = 0x10000 + VTIME = 0x7 + VWERASE = 0xa + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x40045702 + WDIOC_GETPRETIMEOUT = 0x40045709 + WDIOC_GETSTATUS = 0x40045701 + WDIOC_GETSUPPORT = 0x40285700 + WDIOC_GETTEMP = 0x40045703 + WDIOC_GETTIMELEFT = 0x4004570a + WDIOC_GETTIMEOUT = 0x40045707 + WDIOC_KEEPALIVE = 0x40045705 + WDIOC_SETOPTIONS = 0x40045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4000 + XTABS = 0xc00 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x3a) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 58: "file locking deadlock error", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go new file mode 100644 index 0000000..b921fb1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -0,0 +1,2306 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include -fsigned-char +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build s390x,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2c + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_QIPCRTR = 0x2a + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SMC = 0x2b + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_VSOCKMON = 0x33a + ARPHRD_X25 = 0x10f + B0 = 0x0 + B1000000 = 0x1008 + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x1009 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100a + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100b + B230400 = 0x1003 + B2400 = 0xb + B2500000 = 0x100c + B300 = 0x7 + B3000000 = 0x100d + B3500000 = 0x100e + B38400 = 0xf + B4000000 = 0x100f + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B600 = 0x8 + B75 = 0x2 + B921600 = 0x1007 + B9600 = 0xd + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RAW_FILTER_MAX = 0x200 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EFD_SEMAPHORE = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x80000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IBOE = 0x8915 + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_NCSI = 0x88f8 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_UNSHARE_RANGE = 0x40 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x1000 + FS_ENCRYPTION_MODE_AES_128_CBC = 0x5 + FS_ENCRYPTION_MODE_AES_128_CTS = 0x6 + FS_ENCRYPTION_MODE_AES_256_CBC = 0x3 + FS_ENCRYPTION_MODE_AES_256_CTS = 0x4 + FS_ENCRYPTION_MODE_AES_256_GCM = 0x2 + FS_ENCRYPTION_MODE_AES_256_XTS = 0x1 + FS_ENCRYPTION_MODE_INVALID = 0x0 + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + FS_KEY_DESCRIPTOR_SIZE = 0x8 + FS_KEY_DESC_PREFIX = "fscrypt:" + FS_KEY_DESC_PREFIX_SIZE = 0x8 + FS_MAX_KEY_SIZE = 0x40 + FS_POLICY_FLAGS_PAD_16 = 0x2 + FS_POLICY_FLAGS_PAD_32 = 0x3 + FS_POLICY_FLAGS_PAD_4 = 0x0 + FS_POLICY_FLAGS_PAD_8 = 0x1 + FS_POLICY_FLAGS_PAD_MASK = 0x3 + FS_POLICY_FLAGS_VALID = 0x3 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x0 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + GENL_ADMIN_PERM = 0x1 + GENL_CMD_CAP_DO = 0x2 + GENL_CMD_CAP_DUMP = 0x4 + GENL_CMD_CAP_HASPOL = 0x8 + GENL_HDRLEN = 0x4 + GENL_ID_CTRL = 0x10 + GENL_ID_PMCRAID = 0x12 + GENL_ID_VFS_DQUOT = 0x11 + GENL_MAX_ID = 0x3ff + GENL_MIN_ID = 0x10 + GENL_NAMSIZ = 0x10 + GENL_START_ALLOC = 0x13 + GENL_UNS_ADMIN_PERM = 0x10 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x80000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x800 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADDR_PREFERENCES = 0x48 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_AUTOFLOWLABEL = 0x46 + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MINHOPCOUNT = 0x49 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_ORIGDSTADDR = 0x4a + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVFRAGSIZE = 0x4d + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVORIGDSTADDR = 0x4a + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_TRANSPARENT = 0x4b + IPV6_UNICAST_HOPS = 0x10 + IPV6_UNICAST_IF = 0x4c + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVFRAGSIZE = 0x19 + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + KEYCTL_ASSUME_AUTHORITY = 0x10 + KEYCTL_CHOWN = 0x4 + KEYCTL_CLEAR = 0x7 + KEYCTL_DESCRIBE = 0x6 + KEYCTL_DH_COMPUTE = 0x17 + KEYCTL_GET_KEYRING_ID = 0x0 + KEYCTL_GET_PERSISTENT = 0x16 + KEYCTL_GET_SECURITY = 0x11 + KEYCTL_INSTANTIATE = 0xc + KEYCTL_INSTANTIATE_IOV = 0x14 + KEYCTL_INVALIDATE = 0x15 + KEYCTL_JOIN_SESSION_KEYRING = 0x1 + KEYCTL_LINK = 0x8 + KEYCTL_NEGATE = 0xd + KEYCTL_READ = 0xb + KEYCTL_REJECT = 0x13 + KEYCTL_RESTRICT_KEYRING = 0x1d + KEYCTL_REVOKE = 0x3 + KEYCTL_SEARCH = 0xa + KEYCTL_SESSION_TO_PARENT = 0x12 + KEYCTL_SETPERM = 0x5 + KEYCTL_SET_REQKEY_KEYRING = 0xe + KEYCTL_SET_TIMEOUT = 0xf + KEYCTL_UNLINK = 0x9 + KEYCTL_UPDATE = 0x2 + KEY_REQKEY_DEFL_DEFAULT = 0x0 + KEY_REQKEY_DEFL_GROUP_KEYRING = 0x6 + KEY_REQKEY_DEFL_NO_CHANGE = -0x1 + KEY_REQKEY_DEFL_PROCESS_KEYRING = 0x2 + KEY_REQKEY_DEFL_REQUESTOR_KEYRING = 0x7 + KEY_REQKEY_DEFL_SESSION_KEYRING = 0x3 + KEY_REQKEY_DEFL_THREAD_KEYRING = 0x1 + KEY_REQKEY_DEFL_USER_KEYRING = 0x4 + KEY_REQKEY_DEFL_USER_SESSION_KEYRING = 0x5 + KEY_SPEC_GROUP_KEYRING = -0x6 + KEY_SPEC_PROCESS_KEYRING = -0x2 + KEY_SPEC_REQKEY_AUTH_KEY = -0x7 + KEY_SPEC_REQUESTOR_KEYRING = -0x8 + KEY_SPEC_SESSION_KEYRING = -0x3 + KEY_SPEC_THREAD_KEYRING = -0x1 + KEY_SPEC_USER_KEYRING = -0x4 + KEY_SPEC_USER_SESSION_KEYRING = -0x5 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_BORN = 0x20000000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOREMOTELOCK = 0x8000000 + MS_NOSEC = 0x10000000 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SUBMOUNT = 0x4000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + MS_VERBOSE = 0x8000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_EXT_ACK = 0xb + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SMC = 0x16 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_ACK_TLVS = 0x200 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CAPPED = 0x100 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_FLAG_UNIQUEID = 0x2000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_DISABLE_TE = 0x5010 + PTRACE_ENABLE_TE = 0x5009 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETREGS = 0xc + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_GET_LAST_BREAK = 0x5006 + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_OLDSETOPTIONS = 0x15 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKDATA_AREA = 0x5003 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKTEXT_AREA = 0x5002 + PTRACE_PEEKUSR = 0x3 + PTRACE_PEEKUSR_AREA = 0x5000 + PTRACE_PEEK_SYSTEM_CALL = 0x5007 + PTRACE_POKEDATA = 0x5 + PTRACE_POKEDATA_AREA = 0x5005 + PTRACE_POKETEXT = 0x4 + PTRACE_POKETEXT_AREA = 0x5004 + PTRACE_POKEUSR = 0x6 + PTRACE_POKEUSR_AREA = 0x5001 + PTRACE_POKE_SYSTEM_CALL = 0x5008 + PTRACE_PROT = 0x15 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLEBLOCK = 0xc + PTRACE_SINGLESTEP = 0x9 + PTRACE_SYSCALL = 0x18 + PTRACE_TE_ABORT_RAND = 0x5011 + PTRACE_TRACEME = 0x0 + PT_ACR0 = 0x90 + PT_ACR1 = 0x94 + PT_ACR10 = 0xb8 + PT_ACR11 = 0xbc + PT_ACR12 = 0xc0 + PT_ACR13 = 0xc4 + PT_ACR14 = 0xc8 + PT_ACR15 = 0xcc + PT_ACR2 = 0x98 + PT_ACR3 = 0x9c + PT_ACR4 = 0xa0 + PT_ACR5 = 0xa4 + PT_ACR6 = 0xa8 + PT_ACR7 = 0xac + PT_ACR8 = 0xb0 + PT_ACR9 = 0xb4 + PT_CR_10 = 0x168 + PT_CR_11 = 0x170 + PT_CR_9 = 0x160 + PT_ENDREGS = 0x1af + PT_FPC = 0xd8 + PT_FPR0 = 0xe0 + PT_FPR1 = 0xe8 + PT_FPR10 = 0x130 + PT_FPR11 = 0x138 + PT_FPR12 = 0x140 + PT_FPR13 = 0x148 + PT_FPR14 = 0x150 + PT_FPR15 = 0x158 + PT_FPR2 = 0xf0 + PT_FPR3 = 0xf8 + PT_FPR4 = 0x100 + PT_FPR5 = 0x108 + PT_FPR6 = 0x110 + PT_FPR7 = 0x118 + PT_FPR8 = 0x120 + PT_FPR9 = 0x128 + PT_GPR0 = 0x10 + PT_GPR1 = 0x18 + PT_GPR10 = 0x60 + PT_GPR11 = 0x68 + PT_GPR12 = 0x70 + PT_GPR13 = 0x78 + PT_GPR14 = 0x80 + PT_GPR15 = 0x88 + PT_GPR2 = 0x20 + PT_GPR3 = 0x28 + PT_GPR4 = 0x30 + PT_GPR5 = 0x38 + PT_GPR6 = 0x40 + PT_GPR7 = 0x48 + PT_GPR8 = 0x50 + PT_GPR9 = 0x58 + PT_IEEE_IP = 0x1a8 + PT_LASTOFF = 0x1a8 + PT_ORIGGPR2 = 0xd0 + PT_PSWADDR = 0x8 + PT_PSWMASK = 0x0 + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_LOCKS = 0xa + RLIMIT_MEMLOCK = 0x8 + RLIMIT_MSGQUEUE = 0xc + RLIMIT_NICE = 0xd + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RLIMIT_RTPRIO = 0xe + RLIMIT_RTTIME = 0xf + RLIMIT_SIGPENDING = 0xb + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0xffffffffffffffff + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x1a + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNETCONF = 0x51 + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_FIB_MATCH = 0x2000 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x63 + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWCACHEREPORT = 0x60 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x15 + RTM_NR_MSGTYPES = 0x54 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x19 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTNH_F_UNRESOLVED = 0x20 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_WIFI_STATUS = 0x29 + SECCOMP_MODE_DISABLED = 0x0 + SECCOMP_MODE_FILTER = 0x2 + SECCOMP_MODE_STRICT = 0x1 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSKNS = 0x894c + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x80000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_IOC_TYPE = 0x89 + SOCK_NONBLOCK = 0x800 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_CAN_BASE = 0x64 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0x1 + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUSY_POLL = 0x2e + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NOFCS = 0x2b + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1f + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TYPE = 0x3 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x29 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TASKSTATS_CMD_ATTR_MAX = 0x4 + TASKSTATS_CMD_MAX = 0x2 + TASKSTATS_GENL_NAME = "TASKSTATS" + TASKSTATS_GENL_VERSION = 0x1 + TASKSTATS_TYPE_MAX = 0x6 + TASKSTATS_VERSION = 0x8 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_FASTOPEN_CONNECT = 0x1e + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_REPAIR_WINDOW = 0x1d + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TS_COMM_LEN = 0x20 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETDEBUG = 0x400454c9 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UMOUNT_NOFOLLOW = 0x8 + UTIME_NOW = 0x3fffffff + UTIME_OMIT = 0x3ffffffe + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x6 + VM_SOCKETS_INVALID_VERSION = 0xffffffff + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WDIOC_SETPRETIMEOUT = 0xc0045708 + WDIOC_SETTIMEOUT = 0xc0045706 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XATTR_CREATE = 0x1 + XATTR_REPLACE = 0x2 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7d) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x6a) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x6b) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x4c) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x60) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x1d) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 35: "resource deadlock avoided", + 36: "file name too long", + 37: "no locks available", + 38: "function not implemented", + 39: "directory not empty", + 40: "too many levels of symbolic links", + 42: "no message of desired type", + 43: "identifier removed", + 44: "channel number out of range", + 45: "level 2 not synchronized", + 46: "level 3 halted", + 47: "level 3 reset", + 48: "link number out of range", + 49: "protocol driver not attached", + 50: "no CSI structure available", + 51: "level 2 halted", + 52: "invalid exchange", + 53: "invalid request descriptor", + 54: "exchange full", + 55: "no anode", + 56: "invalid request code", + 57: "invalid slot", + 59: "bad font file format", + 60: "device not a stream", + 61: "no data available", + 62: "timer expired", + 63: "out of streams resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "multihop attempted", + 73: "RFS specific error", + 74: "bad message", + 75: "value too large for defined data type", + 76: "name not unique on network", + 77: "file descriptor in bad state", + 78: "remote address changed", + 79: "can not access a needed shared library", + 80: "accessing a corrupted shared library", + 81: ".lib section in a.out corrupted", + 82: "attempting to link in too many shared libraries", + 83: "cannot exec a shared library directly", + 84: "invalid or incomplete multibyte or wide character", + 85: "interrupted system call should be restarted", + 86: "streams pipe error", + 87: "too many users", + 88: "socket operation on non-socket", + 89: "destination address required", + 90: "message too long", + 91: "protocol wrong type for socket", + 92: "protocol not available", + 93: "protocol not supported", + 94: "socket type not supported", + 95: "operation not supported", + 96: "protocol family not supported", + 97: "address family not supported by protocol", + 98: "address already in use", + 99: "cannot assign requested address", + 100: "network is down", + 101: "network is unreachable", + 102: "network dropped connection on reset", + 103: "software caused connection abort", + 104: "connection reset by peer", + 105: "no buffer space available", + 106: "transport endpoint is already connected", + 107: "transport endpoint is not connected", + 108: "cannot send after transport endpoint shutdown", + 109: "too many references: cannot splice", + 110: "connection timed out", + 111: "connection refused", + 112: "host is down", + 113: "no route to host", + 114: "operation already in progress", + 115: "operation now in progress", + 116: "stale file handle", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "disk quota exceeded", + 123: "no medium found", + 124: "wrong medium type", + 125: "operation canceled", + 126: "required key not available", + 127: "key has expired", + 128: "key has been revoked", + 129: "key was rejected by service", + 130: "owner died", + 131: "state not recoverable", + 132: "operation not possible due to RF-kill", + 133: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "stack fault", + 17: "child exited", + 18: "continued", + 19: "stopped (signal)", + 20: "stopped", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "urgent I/O condition", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "I/O possible", + 30: "power failure", + 31: "bad system call", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go new file mode 100644 index 0000000..95de199 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -0,0 +1,2142 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build sparc64,linux + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_ALG = 0x26 + AF_APPLETALK = 0x5 + AF_ASH = 0x12 + AF_ATMPVC = 0x8 + AF_ATMSVC = 0x14 + AF_AX25 = 0x3 + AF_BLUETOOTH = 0x1f + AF_BRIDGE = 0x7 + AF_CAIF = 0x25 + AF_CAN = 0x1d + AF_DECnet = 0xc + AF_ECONET = 0x13 + AF_FILE = 0x1 + AF_IB = 0x1b + AF_IEEE802154 = 0x24 + AF_INET = 0x2 + AF_INET6 = 0xa + AF_IPX = 0x4 + AF_IRDA = 0x17 + AF_ISDN = 0x22 + AF_IUCV = 0x20 + AF_KCM = 0x29 + AF_KEY = 0xf + AF_LLC = 0x1a + AF_LOCAL = 0x1 + AF_MAX = 0x2a + AF_MPLS = 0x1c + AF_NETBEUI = 0xd + AF_NETLINK = 0x10 + AF_NETROM = 0x6 + AF_NFC = 0x27 + AF_PACKET = 0x11 + AF_PHONET = 0x23 + AF_PPPOX = 0x18 + AF_RDS = 0x15 + AF_ROSE = 0xb + AF_ROUTE = 0x10 + AF_RXRPC = 0x21 + AF_SECURITY = 0xe + AF_SNA = 0x16 + AF_TIPC = 0x1e + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_VSOCK = 0x28 + AF_WANPIPE = 0x19 + AF_X25 = 0x9 + ALG_OP_DECRYPT = 0x0 + ALG_OP_ENCRYPT = 0x1 + ALG_SET_AEAD_ASSOCLEN = 0x4 + ALG_SET_AEAD_AUTHSIZE = 0x5 + ALG_SET_IV = 0x2 + ALG_SET_KEY = 0x1 + ALG_SET_OP = 0x3 + ARPHRD_6LOWPAN = 0x339 + ARPHRD_ADAPT = 0x108 + ARPHRD_APPLETLK = 0x8 + ARPHRD_ARCNET = 0x7 + ARPHRD_ASH = 0x30d + ARPHRD_ATM = 0x13 + ARPHRD_AX25 = 0x3 + ARPHRD_BIF = 0x307 + ARPHRD_CAIF = 0x336 + ARPHRD_CAN = 0x118 + ARPHRD_CHAOS = 0x5 + ARPHRD_CISCO = 0x201 + ARPHRD_CSLIP = 0x101 + ARPHRD_CSLIP6 = 0x103 + ARPHRD_DDCMP = 0x205 + ARPHRD_DLCI = 0xf + ARPHRD_ECONET = 0x30e + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_EUI64 = 0x1b + ARPHRD_FCAL = 0x311 + ARPHRD_FCFABRIC = 0x313 + ARPHRD_FCPL = 0x312 + ARPHRD_FCPP = 0x310 + ARPHRD_FDDI = 0x306 + ARPHRD_FRAD = 0x302 + ARPHRD_HDLC = 0x201 + ARPHRD_HIPPI = 0x30c + ARPHRD_HWX25 = 0x110 + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IEEE80211 = 0x321 + ARPHRD_IEEE80211_PRISM = 0x322 + ARPHRD_IEEE80211_RADIOTAP = 0x323 + ARPHRD_IEEE802154 = 0x324 + ARPHRD_IEEE802154_MONITOR = 0x325 + ARPHRD_IEEE802_TR = 0x320 + ARPHRD_INFINIBAND = 0x20 + ARPHRD_IP6GRE = 0x337 + ARPHRD_IPDDP = 0x309 + ARPHRD_IPGRE = 0x30a + ARPHRD_IRDA = 0x30f + ARPHRD_LAPB = 0x204 + ARPHRD_LOCALTLK = 0x305 + ARPHRD_LOOPBACK = 0x304 + ARPHRD_METRICOM = 0x17 + ARPHRD_NETLINK = 0x338 + ARPHRD_NETROM = 0x0 + ARPHRD_NONE = 0xfffe + ARPHRD_PHONET = 0x334 + ARPHRD_PHONET_PIPE = 0x335 + ARPHRD_PIMREG = 0x30b + ARPHRD_PPP = 0x200 + ARPHRD_PRONET = 0x4 + ARPHRD_RAWHDLC = 0x206 + ARPHRD_ROSE = 0x10e + ARPHRD_RSRVD = 0x104 + ARPHRD_SIT = 0x308 + ARPHRD_SKIP = 0x303 + ARPHRD_SLIP = 0x100 + ARPHRD_SLIP6 = 0x102 + ARPHRD_TUNNEL = 0x300 + ARPHRD_TUNNEL6 = 0x301 + ARPHRD_VOID = 0xffff + ARPHRD_X25 = 0x10f + ASI_LEON_DFLUSH = 0x11 + ASI_LEON_IFLUSH = 0x10 + ASI_LEON_MMUFLUSH = 0x18 + B0 = 0x0 + B1000000 = 0x100c + B110 = 0x3 + B115200 = 0x1002 + B1152000 = 0x100d + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B1500000 = 0x100e + B153600 = 0x1006 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B2000000 = 0x100f + B230400 = 0x1003 + B2400 = 0xb + B300 = 0x7 + B307200 = 0x1007 + B38400 = 0xf + B460800 = 0x1004 + B4800 = 0xc + B50 = 0x1 + B500000 = 0x100a + B57600 = 0x1001 + B576000 = 0x100b + B600 = 0x8 + B614400 = 0x1008 + B75 = 0x2 + B76800 = 0x1005 + B921600 = 0x1009 + B9600 = 0xd + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LL_OFF = -0x200000 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXINSNS = 0x1000 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MOD = 0x90 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_NET_OFF = -0x100000 + BPF_OR = 0x40 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BPF_XOR = 0xa0 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CAN_BCM = 0x2 + CAN_EFF_FLAG = 0x80000000 + CAN_EFF_ID_BITS = 0x1d + CAN_EFF_MASK = 0x1fffffff + CAN_ERR_FLAG = 0x20000000 + CAN_ERR_MASK = 0x1fffffff + CAN_INV_FILTER = 0x20000000 + CAN_ISOTP = 0x6 + CAN_MAX_DLC = 0x8 + CAN_MAX_DLEN = 0x8 + CAN_MCNET = 0x5 + CAN_MTU = 0x10 + CAN_NPROTO = 0x7 + CAN_RAW = 0x1 + CAN_RTR_FLAG = 0x40000000 + CAN_SFF_ID_BITS = 0xb + CAN_SFF_MASK = 0x7ff + CAN_TP16 = 0x3 + CAN_TP20 = 0x4 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CFLUSH = 0xf + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CLOCK_BOOTTIME = 0x7 + CLOCK_BOOTTIME_ALARM = 0x9 + CLOCK_DEFAULT = 0x0 + CLOCK_EXT = 0x1 + CLOCK_INT = 0x2 + CLOCK_MONOTONIC = 0x1 + CLOCK_MONOTONIC_COARSE = 0x6 + CLOCK_MONOTONIC_RAW = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x2 + CLOCK_REALTIME = 0x0 + CLOCK_REALTIME_ALARM = 0x8 + CLOCK_REALTIME_COARSE = 0x5 + CLOCK_TAI = 0xb + CLOCK_THREAD_CPUTIME_ID = 0x3 + CLOCK_TXFROMRX = 0x4 + CLOCK_TXINT = 0x3 + CLONE_CHILD_CLEARTID = 0x200000 + CLONE_CHILD_SETTID = 0x1000000 + CLONE_DETACHED = 0x400000 + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_IO = 0x80000000 + CLONE_NEWCGROUP = 0x2000000 + CLONE_NEWIPC = 0x8000000 + CLONE_NEWNET = 0x40000000 + CLONE_NEWNS = 0x20000 + CLONE_NEWPID = 0x20000000 + CLONE_NEWUSER = 0x10000000 + CLONE_NEWUTS = 0x4000000 + CLONE_PARENT = 0x8000 + CLONE_PARENT_SETTID = 0x100000 + CLONE_PTRACE = 0x2000 + CLONE_SETTLS = 0x80000 + CLONE_SIGHAND = 0x800 + CLONE_SYSVSEM = 0x40000 + CLONE_THREAD = 0x10000 + CLONE_UNTRACED = 0x800000 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CMSPAR = 0x40000000 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIGNAL = 0xff + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x0 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EMT_TAGOVF = 0x1 + ENCODING_DEFAULT = 0x0 + ENCODING_FM_MARK = 0x3 + ENCODING_FM_SPACE = 0x4 + ENCODING_MANCHESTER = 0x5 + ENCODING_NRZ = 0x1 + ENCODING_NRZI = 0x2 + EPOLLERR = 0x8 + EPOLLET = 0x80000000 + EPOLLEXCLUSIVE = 0x10000000 + EPOLLHUP = 0x10 + EPOLLIN = 0x1 + EPOLLMSG = 0x400 + EPOLLONESHOT = 0x40000000 + EPOLLOUT = 0x4 + EPOLLPRI = 0x2 + EPOLLRDBAND = 0x80 + EPOLLRDHUP = 0x2000 + EPOLLRDNORM = 0x40 + EPOLLWAKEUP = 0x20000000 + EPOLLWRBAND = 0x200 + EPOLLWRNORM = 0x100 + EPOLL_CLOEXEC = 0x400000 + EPOLL_CTL_ADD = 0x1 + EPOLL_CTL_DEL = 0x2 + EPOLL_CTL_MOD = 0x3 + ETH_P_1588 = 0x88f7 + ETH_P_8021AD = 0x88a8 + ETH_P_8021AH = 0x88e7 + ETH_P_8021Q = 0x8100 + ETH_P_80221 = 0x8917 + ETH_P_802_2 = 0x4 + ETH_P_802_3 = 0x1 + ETH_P_802_3_MIN = 0x600 + ETH_P_802_EX1 = 0x88b5 + ETH_P_AARP = 0x80f3 + ETH_P_AF_IUCV = 0xfbfb + ETH_P_ALL = 0x3 + ETH_P_AOE = 0x88a2 + ETH_P_ARCNET = 0x1a + ETH_P_ARP = 0x806 + ETH_P_ATALK = 0x809b + ETH_P_ATMFATE = 0x8884 + ETH_P_ATMMPOA = 0x884c + ETH_P_AX25 = 0x2 + ETH_P_BATMAN = 0x4305 + ETH_P_BPQ = 0x8ff + ETH_P_CAIF = 0xf7 + ETH_P_CAN = 0xc + ETH_P_CANFD = 0xd + ETH_P_CONTROL = 0x16 + ETH_P_CUST = 0x6006 + ETH_P_DDCMP = 0x6 + ETH_P_DEC = 0x6000 + ETH_P_DIAG = 0x6005 + ETH_P_DNA_DL = 0x6001 + ETH_P_DNA_RC = 0x6002 + ETH_P_DNA_RT = 0x6003 + ETH_P_DSA = 0x1b + ETH_P_ECONET = 0x18 + ETH_P_EDSA = 0xdada + ETH_P_FCOE = 0x8906 + ETH_P_FIP = 0x8914 + ETH_P_HDLC = 0x19 + ETH_P_HSR = 0x892f + ETH_P_IEEE802154 = 0xf6 + ETH_P_IEEEPUP = 0xa00 + ETH_P_IEEEPUPAT = 0xa01 + ETH_P_IP = 0x800 + ETH_P_IPV6 = 0x86dd + ETH_P_IPX = 0x8137 + ETH_P_IRDA = 0x17 + ETH_P_LAT = 0x6004 + ETH_P_LINK_CTL = 0x886c + ETH_P_LOCALTALK = 0x9 + ETH_P_LOOP = 0x60 + ETH_P_LOOPBACK = 0x9000 + ETH_P_MACSEC = 0x88e5 + ETH_P_MOBITEX = 0x15 + ETH_P_MPLS_MC = 0x8848 + ETH_P_MPLS_UC = 0x8847 + ETH_P_MVRP = 0x88f5 + ETH_P_PAE = 0x888e + ETH_P_PAUSE = 0x8808 + ETH_P_PHONET = 0xf5 + ETH_P_PPPTALK = 0x10 + ETH_P_PPP_DISC = 0x8863 + ETH_P_PPP_MP = 0x8 + ETH_P_PPP_SES = 0x8864 + ETH_P_PRP = 0x88fb + ETH_P_PUP = 0x200 + ETH_P_PUPAT = 0x201 + ETH_P_QINQ1 = 0x9100 + ETH_P_QINQ2 = 0x9200 + ETH_P_QINQ3 = 0x9300 + ETH_P_RARP = 0x8035 + ETH_P_SCA = 0x6007 + ETH_P_SLOW = 0x8809 + ETH_P_SNAP = 0x5 + ETH_P_TDLS = 0x890d + ETH_P_TEB = 0x6558 + ETH_P_TIPC = 0x88ca + ETH_P_TRAILER = 0x1c + ETH_P_TR_802_2 = 0x11 + ETH_P_TSN = 0x22f0 + ETH_P_WAN_PPP = 0x7 + ETH_P_WCCP = 0x883e + ETH_P_X25 = 0x805 + ETH_P_XDSA = 0xf8 + EXTA = 0xe + EXTB = 0xf + EXTPROC = 0x10000 + FALLOC_FL_COLLAPSE_RANGE = 0x8 + FALLOC_FL_INSERT_RANGE = 0x20 + FALLOC_FL_KEEP_SIZE = 0x1 + FALLOC_FL_NO_HIDE_STALE = 0x4 + FALLOC_FL_PUNCH_HOLE = 0x2 + FALLOC_FL_ZERO_RANGE = 0x10 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHO = 0x2000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x406 + F_EXLCK = 0x4 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLEASE = 0x401 + F_GETLK = 0x7 + F_GETLK64 = 0x7 + F_GETOWN = 0x5 + F_GETOWN_EX = 0x10 + F_GETPIPE_SZ = 0x408 + F_GETSIG = 0xb + F_LOCK = 0x1 + F_NOTIFY = 0x402 + F_OFD_GETLK = 0x24 + F_OFD_SETLK = 0x25 + F_OFD_SETLKW = 0x26 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLEASE = 0x400 + F_SETLK = 0x8 + F_SETLK64 = 0x8 + F_SETLKW = 0x9 + F_SETLKW64 = 0x9 + F_SETOWN = 0x6 + F_SETOWN_EX = 0xf + F_SETPIPE_SZ = 0x407 + F_SETSIG = 0xa + F_SHLCK = 0x8 + F_TEST = 0x3 + F_TLOCK = 0x2 + F_ULOCK = 0x0 + F_UNLCK = 0x3 + F_WRLCK = 0x2 + GRND_NONBLOCK = 0x1 + GRND_RANDOM = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICMPV6_FILTER = 0x1 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFA_F_DADFAILED = 0x8 + IFA_F_DEPRECATED = 0x20 + IFA_F_HOMEADDRESS = 0x10 + IFA_F_MANAGETEMPADDR = 0x100 + IFA_F_MCAUTOJOIN = 0x400 + IFA_F_NODAD = 0x2 + IFA_F_NOPREFIXROUTE = 0x200 + IFA_F_OPTIMISTIC = 0x4 + IFA_F_PERMANENT = 0x80 + IFA_F_SECONDARY = 0x1 + IFA_F_STABLE_PRIVACY = 0x800 + IFA_F_TEMPORARY = 0x1 + IFA_F_TENTATIVE = 0x40 + IFA_MAX = 0x8 + IFF_ALLMULTI = 0x200 + IFF_ATTACH_QUEUE = 0x200 + IFF_AUTOMEDIA = 0x4000 + IFF_BROADCAST = 0x2 + IFF_DEBUG = 0x4 + IFF_DETACH_QUEUE = 0x400 + IFF_DORMANT = 0x20000 + IFF_DYNAMIC = 0x8000 + IFF_ECHO = 0x40000 + IFF_LOOPBACK = 0x8 + IFF_LOWER_UP = 0x10000 + IFF_MASTER = 0x400 + IFF_MULTICAST = 0x1000 + IFF_MULTI_QUEUE = 0x100 + IFF_NOARP = 0x80 + IFF_NOFILTER = 0x1000 + IFF_NOTRAILERS = 0x20 + IFF_NO_PI = 0x1000 + IFF_ONE_QUEUE = 0x2000 + IFF_PERSIST = 0x800 + IFF_POINTOPOINT = 0x10 + IFF_PORTSEL = 0x2000 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SLAVE = 0x800 + IFF_TAP = 0x2 + IFF_TUN = 0x1 + IFF_TUN_EXCL = 0x8000 + IFF_UP = 0x1 + IFF_VNET_HDR = 0x4000 + IFF_VOLATILE = 0x70c5a + IFNAMSIZ = 0x10 + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_ACCESS = 0x1 + IN_ALL_EVENTS = 0xfff + IN_ATTRIB = 0x4 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLOEXEC = 0x400000 + IN_CLOSE = 0x18 + IN_CLOSE_NOWRITE = 0x10 + IN_CLOSE_WRITE = 0x8 + IN_CREATE = 0x100 + IN_DELETE = 0x200 + IN_DELETE_SELF = 0x400 + IN_DONT_FOLLOW = 0x2000000 + IN_EXCL_UNLINK = 0x4000000 + IN_IGNORED = 0x8000 + IN_ISDIR = 0x40000000 + IN_LOOPBACKNET = 0x7f + IN_MASK_ADD = 0x20000000 + IN_MODIFY = 0x2 + IN_MOVE = 0xc0 + IN_MOVED_FROM = 0x40 + IN_MOVED_TO = 0x80 + IN_MOVE_SELF = 0x800 + IN_NONBLOCK = 0x4000 + IN_ONESHOT = 0x80000000 + IN_ONLYDIR = 0x1000000 + IN_OPEN = 0x20 + IN_Q_OVERFLOW = 0x4000 + IN_UNMOUNT = 0x2000 + IPPROTO_AH = 0x33 + IPPROTO_BEETPH = 0x5e + IPPROTO_COMP = 0x6c + IPPROTO_DCCP = 0x21 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPIP = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MH = 0x87 + IPPROTO_MPLS = 0x89 + IPPROTO_MTP = 0x5c + IPPROTO_NONE = 0x3b + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_UDPLITE = 0x88 + IPV6_2292DSTOPTS = 0x4 + IPV6_2292HOPLIMIT = 0x8 + IPV6_2292HOPOPTS = 0x3 + IPV6_2292PKTINFO = 0x2 + IPV6_2292PKTOPTIONS = 0x6 + IPV6_2292RTHDR = 0x5 + IPV6_ADDRFORM = 0x1 + IPV6_ADD_MEMBERSHIP = 0x14 + IPV6_AUTHHDR = 0xa + IPV6_CHECKSUM = 0x7 + IPV6_DONTFRAG = 0x3e + IPV6_DROP_MEMBERSHIP = 0x15 + IPV6_DSTOPTS = 0x3b + IPV6_HDRINCL = 0x24 + IPV6_HOPLIMIT = 0x34 + IPV6_HOPOPTS = 0x36 + IPV6_IPSEC_POLICY = 0x22 + IPV6_JOIN_ANYCAST = 0x1b + IPV6_JOIN_GROUP = 0x14 + IPV6_LEAVE_ANYCAST = 0x1c + IPV6_LEAVE_GROUP = 0x15 + IPV6_MTU = 0x18 + IPV6_MTU_DISCOVER = 0x17 + IPV6_MULTICAST_HOPS = 0x12 + IPV6_MULTICAST_IF = 0x11 + IPV6_MULTICAST_LOOP = 0x13 + IPV6_NEXTHOP = 0x9 + IPV6_PATHMTU = 0x3d + IPV6_PKTINFO = 0x32 + IPV6_PMTUDISC_DO = 0x2 + IPV6_PMTUDISC_DONT = 0x0 + IPV6_PMTUDISC_INTERFACE = 0x4 + IPV6_PMTUDISC_OMIT = 0x5 + IPV6_PMTUDISC_PROBE = 0x3 + IPV6_PMTUDISC_WANT = 0x1 + IPV6_RECVDSTOPTS = 0x3a + IPV6_RECVERR = 0x19 + IPV6_RECVHOPLIMIT = 0x33 + IPV6_RECVHOPOPTS = 0x35 + IPV6_RECVPATHMTU = 0x3c + IPV6_RECVPKTINFO = 0x31 + IPV6_RECVRTHDR = 0x38 + IPV6_RECVTCLASS = 0x42 + IPV6_ROUTER_ALERT = 0x16 + IPV6_RTHDR = 0x39 + IPV6_RTHDRDSTOPTS = 0x37 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_RXDSTOPTS = 0x3b + IPV6_RXHOPOPTS = 0x36 + IPV6_TCLASS = 0x43 + IPV6_UNICAST_HOPS = 0x10 + IPV6_V6ONLY = 0x1a + IPV6_XFRM_POLICY = 0x23 + IP_ADD_MEMBERSHIP = 0x23 + IP_ADD_SOURCE_MEMBERSHIP = 0x27 + IP_BIND_ADDRESS_NO_PORT = 0x18 + IP_BLOCK_SOURCE = 0x26 + IP_CHECKSUM = 0x17 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0x24 + IP_DROP_SOURCE_MEMBERSHIP = 0x28 + IP_FREEBIND = 0xf + IP_HDRINCL = 0x3 + IP_IPSEC_POLICY = 0x10 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINTTL = 0x15 + IP_MSFILTER = 0x29 + IP_MSS = 0x240 + IP_MTU = 0xe + IP_MTU_DISCOVER = 0xa + IP_MULTICAST_ALL = 0x31 + IP_MULTICAST_IF = 0x20 + IP_MULTICAST_LOOP = 0x22 + IP_MULTICAST_TTL = 0x21 + IP_NODEFRAG = 0x16 + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x4 + IP_ORIGDSTADDR = 0x14 + IP_PASSSEC = 0x12 + IP_PKTINFO = 0x8 + IP_PKTOPTIONS = 0x9 + IP_PMTUDISC = 0xa + IP_PMTUDISC_DO = 0x2 + IP_PMTUDISC_DONT = 0x0 + IP_PMTUDISC_INTERFACE = 0x4 + IP_PMTUDISC_OMIT = 0x5 + IP_PMTUDISC_PROBE = 0x3 + IP_PMTUDISC_WANT = 0x1 + IP_RECVERR = 0xb + IP_RECVOPTS = 0x6 + IP_RECVORIGDSTADDR = 0x14 + IP_RECVRETOPTS = 0x7 + IP_RECVTOS = 0xd + IP_RECVTTL = 0xc + IP_RETOPTS = 0x7 + IP_RF = 0x8000 + IP_ROUTER_ALERT = 0x5 + IP_TOS = 0x1 + IP_TRANSPARENT = 0x13 + IP_TTL = 0x2 + IP_UNBLOCK_SOURCE = 0x25 + IP_UNICAST_IF = 0x32 + IP_XFRM_POLICY = 0x11 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IUTF8 = 0x4000 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LINUX_REBOOT_CMD_CAD_OFF = 0x0 + LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef + LINUX_REBOOT_CMD_HALT = 0xcdef0123 + LINUX_REBOOT_CMD_KEXEC = 0x45584543 + LINUX_REBOOT_CMD_POWER_OFF = 0x4321fedc + LINUX_REBOOT_CMD_RESTART = 0x1234567 + LINUX_REBOOT_CMD_RESTART2 = 0xa1b2c3d4 + LINUX_REBOOT_CMD_SW_SUSPEND = 0xd000fce2 + LINUX_REBOOT_MAGIC1 = 0xfee1dead + LINUX_REBOOT_MAGIC2 = 0x28121969 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DODUMP = 0x11 + MADV_DOFORK = 0xb + MADV_DONTDUMP = 0x10 + MADV_DONTFORK = 0xa + MADV_DONTNEED = 0x4 + MADV_FREE = 0x8 + MADV_HUGEPAGE = 0xe + MADV_HWPOISON = 0x64 + MADV_MERGEABLE = 0xc + MADV_NOHUGEPAGE = 0xf + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_REMOVE = 0x9 + MADV_SEQUENTIAL = 0x2 + MADV_UNMERGEABLE = 0xd + MADV_WILLNEED = 0x3 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_GROWSDOWN = 0x200 + MAP_HUGETLB = 0x40000 + MAP_HUGE_MASK = 0x3f + MAP_HUGE_SHIFT = 0x1a + MAP_LOCKED = 0x100 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x40 + MAP_POPULATE = 0x8000 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x20000 + MAP_TYPE = 0xf + MCL_CURRENT = 0x2000 + MCL_FUTURE = 0x4000 + MCL_ONFAULT = 0x8000 + MNT_DETACH = 0x2 + MNT_EXPIRE = 0x4 + MNT_FORCE = 0x1 + MSG_BATCH = 0x40000 + MSG_CMSG_CLOEXEC = 0x40000000 + MSG_CONFIRM = 0x800 + MSG_CTRUNC = 0x8 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x40 + MSG_EOR = 0x80 + MSG_ERRQUEUE = 0x2000 + MSG_FASTOPEN = 0x20000000 + MSG_FIN = 0x200 + MSG_MORE = 0x8000 + MSG_NOSIGNAL = 0x4000 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_PROXY = 0x10 + MSG_RST = 0x1000 + MSG_SYN = 0x400 + MSG_TRUNC = 0x20 + MSG_TRYHARD = 0x4 + MSG_WAITALL = 0x100 + MSG_WAITFORONE = 0x10000 + MS_ACTIVE = 0x40000000 + MS_ASYNC = 0x1 + MS_BIND = 0x1000 + MS_DIRSYNC = 0x80 + MS_INVALIDATE = 0x2 + MS_I_VERSION = 0x800000 + MS_KERNMOUNT = 0x400000 + MS_LAZYTIME = 0x2000000 + MS_MANDLOCK = 0x40 + MS_MGC_MSK = 0xffff0000 + MS_MGC_VAL = 0xc0ed0000 + MS_MOVE = 0x2000 + MS_NOATIME = 0x400 + MS_NODEV = 0x4 + MS_NODIRATIME = 0x800 + MS_NOEXEC = 0x8 + MS_NOSUID = 0x2 + MS_NOUSER = -0x80000000 + MS_POSIXACL = 0x10000 + MS_PRIVATE = 0x40000 + MS_RDONLY = 0x1 + MS_REC = 0x4000 + MS_RELATIME = 0x200000 + MS_REMOUNT = 0x20 + MS_RMT_MASK = 0x2800051 + MS_SHARED = 0x100000 + MS_SILENT = 0x8000 + MS_SLAVE = 0x80000 + MS_STRICTATIME = 0x1000000 + MS_SYNC = 0x4 + MS_SYNCHRONOUS = 0x10 + MS_UNBINDABLE = 0x20000 + NAME_MAX = 0xff + NETLINK_ADD_MEMBERSHIP = 0x1 + NETLINK_AUDIT = 0x9 + NETLINK_BROADCAST_ERROR = 0x4 + NETLINK_CAP_ACK = 0xa + NETLINK_CONNECTOR = 0xb + NETLINK_CRYPTO = 0x15 + NETLINK_DNRTMSG = 0xe + NETLINK_DROP_MEMBERSHIP = 0x2 + NETLINK_ECRYPTFS = 0x13 + NETLINK_FIB_LOOKUP = 0xa + NETLINK_FIREWALL = 0x3 + NETLINK_GENERIC = 0x10 + NETLINK_INET_DIAG = 0x4 + NETLINK_IP6_FW = 0xd + NETLINK_ISCSI = 0x8 + NETLINK_KOBJECT_UEVENT = 0xf + NETLINK_LISTEN_ALL_NSID = 0x8 + NETLINK_LIST_MEMBERSHIPS = 0x9 + NETLINK_NETFILTER = 0xc + NETLINK_NFLOG = 0x5 + NETLINK_NO_ENOBUFS = 0x5 + NETLINK_PKTINFO = 0x3 + NETLINK_RDMA = 0x14 + NETLINK_ROUTE = 0x0 + NETLINK_RX_RING = 0x6 + NETLINK_SCSITRANSPORT = 0x12 + NETLINK_SELINUX = 0x7 + NETLINK_SOCK_DIAG = 0x4 + NETLINK_TX_RING = 0x7 + NETLINK_UNUSED = 0x1 + NETLINK_USERSOCK = 0x2 + NETLINK_XFRM = 0x6 + NL0 = 0x0 + NL1 = 0x100 + NLA_ALIGNTO = 0x4 + NLA_F_NESTED = 0x8000 + NLA_F_NET_BYTEORDER = 0x4000 + NLA_HDRLEN = 0x4 + NLDLY = 0x100 + NLMSG_ALIGNTO = 0x4 + NLMSG_DONE = 0x3 + NLMSG_ERROR = 0x2 + NLMSG_HDRLEN = 0x10 + NLMSG_MIN_TYPE = 0x10 + NLMSG_NOOP = 0x1 + NLMSG_OVERRUN = 0x4 + NLM_F_ACK = 0x4 + NLM_F_APPEND = 0x800 + NLM_F_ATOMIC = 0x400 + NLM_F_CREATE = 0x400 + NLM_F_DUMP = 0x300 + NLM_F_DUMP_FILTERED = 0x20 + NLM_F_DUMP_INTR = 0x10 + NLM_F_ECHO = 0x8 + NLM_F_EXCL = 0x200 + NLM_F_MATCH = 0x200 + NLM_F_MULTI = 0x2 + NLM_F_REPLACE = 0x100 + NLM_F_REQUEST = 0x1 + NLM_F_ROOT = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x100000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x2000 + O_EXCL = 0x800 + O_FSYNC = 0x802000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x4004 + O_NOATIME = 0x200000 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x4000 + O_PATH = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x802000 + O_SYNC = 0x802000 + O_TMPFILE = 0x2010000 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PACKET_ADD_MEMBERSHIP = 0x1 + PACKET_AUXDATA = 0x8 + PACKET_BROADCAST = 0x1 + PACKET_COPY_THRESH = 0x7 + PACKET_DROP_MEMBERSHIP = 0x2 + PACKET_FANOUT = 0x12 + PACKET_FANOUT_CBPF = 0x6 + PACKET_FANOUT_CPU = 0x2 + PACKET_FANOUT_DATA = 0x16 + PACKET_FANOUT_EBPF = 0x7 + PACKET_FANOUT_FLAG_DEFRAG = 0x8000 + PACKET_FANOUT_FLAG_ROLLOVER = 0x1000 + PACKET_FANOUT_HASH = 0x0 + PACKET_FANOUT_LB = 0x1 + PACKET_FANOUT_QM = 0x5 + PACKET_FANOUT_RND = 0x4 + PACKET_FANOUT_ROLLOVER = 0x3 + PACKET_FASTROUTE = 0x6 + PACKET_HDRLEN = 0xb + PACKET_HOST = 0x0 + PACKET_KERNEL = 0x7 + PACKET_LOOPBACK = 0x5 + PACKET_LOSS = 0xe + PACKET_MR_ALLMULTI = 0x2 + PACKET_MR_MULTICAST = 0x0 + PACKET_MR_PROMISC = 0x1 + PACKET_MR_UNICAST = 0x3 + PACKET_MULTICAST = 0x2 + PACKET_ORIGDEV = 0x9 + PACKET_OTHERHOST = 0x3 + PACKET_OUTGOING = 0x4 + PACKET_QDISC_BYPASS = 0x14 + PACKET_RECV_OUTPUT = 0x3 + PACKET_RESERVE = 0xc + PACKET_ROLLOVER_STATS = 0x15 + PACKET_RX_RING = 0x5 + PACKET_STATISTICS = 0x6 + PACKET_TIMESTAMP = 0x11 + PACKET_TX_HAS_OFF = 0x13 + PACKET_TX_RING = 0xd + PACKET_TX_TIMESTAMP = 0x10 + PACKET_USER = 0x6 + PACKET_VERSION = 0xa + PACKET_VNET_HDR = 0xf + PARENB = 0x100 + PARITY_CRC16_PR0 = 0x2 + PARITY_CRC16_PR0_CCITT = 0x4 + PARITY_CRC16_PR1 = 0x3 + PARITY_CRC16_PR1_CCITT = 0x5 + PARITY_CRC32_PR0_CCITT = 0x6 + PARITY_CRC32_PR1_CCITT = 0x7 + PARITY_DEFAULT = 0x0 + PARITY_NONE = 0x1 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_GROWSDOWN = 0x1000000 + PROT_GROWSUP = 0x2000000 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PR_CAPBSET_DROP = 0x18 + PR_CAPBSET_READ = 0x17 + PR_CAP_AMBIENT = 0x2f + PR_CAP_AMBIENT_CLEAR_ALL = 0x4 + PR_CAP_AMBIENT_IS_SET = 0x1 + PR_CAP_AMBIENT_LOWER = 0x3 + PR_CAP_AMBIENT_RAISE = 0x2 + PR_ENDIAN_BIG = 0x0 + PR_ENDIAN_LITTLE = 0x1 + PR_ENDIAN_PPC_LITTLE = 0x2 + PR_FPEMU_NOPRINT = 0x1 + PR_FPEMU_SIGFPE = 0x2 + PR_FP_EXC_ASYNC = 0x2 + PR_FP_EXC_DISABLED = 0x0 + PR_FP_EXC_DIV = 0x10000 + PR_FP_EXC_INV = 0x100000 + PR_FP_EXC_NONRECOV = 0x1 + PR_FP_EXC_OVF = 0x20000 + PR_FP_EXC_PRECISE = 0x3 + PR_FP_EXC_RES = 0x80000 + PR_FP_EXC_SW_ENABLE = 0x80 + PR_FP_EXC_UND = 0x40000 + PR_FP_MODE_FR = 0x1 + PR_FP_MODE_FRE = 0x2 + PR_GET_CHILD_SUBREAPER = 0x25 + PR_GET_DUMPABLE = 0x3 + PR_GET_ENDIAN = 0x13 + PR_GET_FPEMU = 0x9 + PR_GET_FPEXC = 0xb + PR_GET_FP_MODE = 0x2e + PR_GET_KEEPCAPS = 0x7 + PR_GET_NAME = 0x10 + PR_GET_NO_NEW_PRIVS = 0x27 + PR_GET_PDEATHSIG = 0x2 + PR_GET_SECCOMP = 0x15 + PR_GET_SECUREBITS = 0x1b + PR_GET_THP_DISABLE = 0x2a + PR_GET_TID_ADDRESS = 0x28 + PR_GET_TIMERSLACK = 0x1e + PR_GET_TIMING = 0xd + PR_GET_TSC = 0x19 + PR_GET_UNALIGN = 0x5 + PR_MCE_KILL = 0x21 + PR_MCE_KILL_CLEAR = 0x0 + PR_MCE_KILL_DEFAULT = 0x2 + PR_MCE_KILL_EARLY = 0x1 + PR_MCE_KILL_GET = 0x22 + PR_MCE_KILL_LATE = 0x0 + PR_MCE_KILL_SET = 0x1 + PR_MPX_DISABLE_MANAGEMENT = 0x2c + PR_MPX_ENABLE_MANAGEMENT = 0x2b + PR_SET_CHILD_SUBREAPER = 0x24 + PR_SET_DUMPABLE = 0x4 + PR_SET_ENDIAN = 0x14 + PR_SET_FPEMU = 0xa + PR_SET_FPEXC = 0xc + PR_SET_FP_MODE = 0x2d + PR_SET_KEEPCAPS = 0x8 + PR_SET_MM = 0x23 + PR_SET_MM_ARG_END = 0x9 + PR_SET_MM_ARG_START = 0x8 + PR_SET_MM_AUXV = 0xc + PR_SET_MM_BRK = 0x7 + PR_SET_MM_END_CODE = 0x2 + PR_SET_MM_END_DATA = 0x4 + PR_SET_MM_ENV_END = 0xb + PR_SET_MM_ENV_START = 0xa + PR_SET_MM_EXE_FILE = 0xd + PR_SET_MM_MAP = 0xe + PR_SET_MM_MAP_SIZE = 0xf + PR_SET_MM_START_BRK = 0x6 + PR_SET_MM_START_CODE = 0x1 + PR_SET_MM_START_DATA = 0x3 + PR_SET_MM_START_STACK = 0x5 + PR_SET_NAME = 0xf + PR_SET_NO_NEW_PRIVS = 0x26 + PR_SET_PDEATHSIG = 0x1 + PR_SET_PTRACER = 0x59616d61 + PR_SET_PTRACER_ANY = -0x1 + PR_SET_SECCOMP = 0x16 + PR_SET_SECUREBITS = 0x1c + PR_SET_THP_DISABLE = 0x29 + PR_SET_TIMERSLACK = 0x1d + PR_SET_TIMING = 0xe + PR_SET_TSC = 0x1a + PR_SET_UNALIGN = 0x6 + PR_TASK_PERF_EVENTS_DISABLE = 0x1f + PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMING_STATISTICAL = 0x0 + PR_TIMING_TIMESTAMP = 0x1 + PR_TSC_ENABLE = 0x1 + PR_TSC_SIGSEGV = 0x2 + PR_UNALIGN_NOPRINT = 0x1 + PR_UNALIGN_SIGBUS = 0x2 + PTRACE_ATTACH = 0x10 + PTRACE_CONT = 0x7 + PTRACE_DETACH = 0x11 + PTRACE_EVENT_CLONE = 0x3 + PTRACE_EVENT_EXEC = 0x4 + PTRACE_EVENT_EXIT = 0x6 + PTRACE_EVENT_FORK = 0x1 + PTRACE_EVENT_SECCOMP = 0x7 + PTRACE_EVENT_STOP = 0x80 + PTRACE_EVENT_VFORK = 0x2 + PTRACE_EVENT_VFORK_DONE = 0x5 + PTRACE_GETEVENTMSG = 0x4201 + PTRACE_GETFPAREGS = 0x14 + PTRACE_GETFPREGS = 0xe + PTRACE_GETFPREGS64 = 0x19 + PTRACE_GETREGS = 0xc + PTRACE_GETREGS64 = 0x16 + PTRACE_GETREGSET = 0x4204 + PTRACE_GETSIGINFO = 0x4202 + PTRACE_GETSIGMASK = 0x420a + PTRACE_INTERRUPT = 0x4207 + PTRACE_KILL = 0x8 + PTRACE_LISTEN = 0x4208 + PTRACE_O_EXITKILL = 0x100000 + PTRACE_O_MASK = 0x3000ff + PTRACE_O_SUSPEND_SECCOMP = 0x200000 + PTRACE_O_TRACECLONE = 0x8 + PTRACE_O_TRACEEXEC = 0x10 + PTRACE_O_TRACEEXIT = 0x40 + PTRACE_O_TRACEFORK = 0x2 + PTRACE_O_TRACESECCOMP = 0x80 + PTRACE_O_TRACESYSGOOD = 0x1 + PTRACE_O_TRACEVFORK = 0x4 + PTRACE_O_TRACEVFORKDONE = 0x20 + PTRACE_PEEKDATA = 0x2 + PTRACE_PEEKSIGINFO = 0x4209 + PTRACE_PEEKSIGINFO_SHARED = 0x1 + PTRACE_PEEKTEXT = 0x1 + PTRACE_PEEKUSR = 0x3 + PTRACE_POKEDATA = 0x5 + PTRACE_POKETEXT = 0x4 + PTRACE_POKEUSR = 0x6 + PTRACE_READDATA = 0x10 + PTRACE_READTEXT = 0x12 + PTRACE_SECCOMP_GET_FILTER = 0x420c + PTRACE_SEIZE = 0x4206 + PTRACE_SETFPAREGS = 0x15 + PTRACE_SETFPREGS = 0xf + PTRACE_SETFPREGS64 = 0x1a + PTRACE_SETOPTIONS = 0x4200 + PTRACE_SETREGS = 0xd + PTRACE_SETREGS64 = 0x17 + PTRACE_SETREGSET = 0x4205 + PTRACE_SETSIGINFO = 0x4203 + PTRACE_SETSIGMASK = 0x420b + PTRACE_SINGLESTEP = 0x9 + PTRACE_SPARC_DETACH = 0xb + PTRACE_SYSCALL = 0x18 + PTRACE_TRACEME = 0x0 + PTRACE_WRITEDATA = 0x11 + PTRACE_WRITETEXT = 0x13 + PT_FP = 0x48 + PT_G0 = 0x10 + PT_G1 = 0x14 + PT_G2 = 0x18 + PT_G3 = 0x1c + PT_G4 = 0x20 + PT_G5 = 0x24 + PT_G6 = 0x28 + PT_G7 = 0x2c + PT_I0 = 0x30 + PT_I1 = 0x34 + PT_I2 = 0x38 + PT_I3 = 0x3c + PT_I4 = 0x40 + PT_I5 = 0x44 + PT_I6 = 0x48 + PT_I7 = 0x4c + PT_NPC = 0x8 + PT_PC = 0x4 + PT_PSR = 0x0 + PT_REGS_MAGIC = 0x57ac6c00 + PT_TNPC = 0x90 + PT_TPC = 0x88 + PT_TSTATE = 0x80 + PT_V9_FP = 0x70 + PT_V9_G0 = 0x0 + PT_V9_G1 = 0x8 + PT_V9_G2 = 0x10 + PT_V9_G3 = 0x18 + PT_V9_G4 = 0x20 + PT_V9_G5 = 0x28 + PT_V9_G6 = 0x30 + PT_V9_G7 = 0x38 + PT_V9_I0 = 0x40 + PT_V9_I1 = 0x48 + PT_V9_I2 = 0x50 + PT_V9_I3 = 0x58 + PT_V9_I4 = 0x60 + PT_V9_I5 = 0x68 + PT_V9_I6 = 0x70 + PT_V9_I7 = 0x78 + PT_V9_MAGIC = 0x9c + PT_V9_TNPC = 0x90 + PT_V9_TPC = 0x88 + PT_V9_TSTATE = 0x80 + PT_V9_Y = 0x98 + PT_WIM = 0x10 + PT_Y = 0xc + RLIMIT_AS = 0x9 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x6 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x1 + RTAX_ADVMSS = 0x8 + RTAX_CC_ALGO = 0x10 + RTAX_CWND = 0x7 + RTAX_FEATURES = 0xc + RTAX_FEATURE_ALLFRAG = 0x8 + RTAX_FEATURE_ECN = 0x1 + RTAX_FEATURE_MASK = 0xf + RTAX_FEATURE_SACK = 0x2 + RTAX_FEATURE_TIMESTAMP = 0x4 + RTAX_HOPLIMIT = 0xa + RTAX_INITCWND = 0xb + RTAX_INITRWND = 0xe + RTAX_LOCK = 0x1 + RTAX_MAX = 0x10 + RTAX_MTU = 0x2 + RTAX_QUICKACK = 0xf + RTAX_REORDERING = 0x9 + RTAX_RTO_MIN = 0xd + RTAX_RTT = 0x4 + RTAX_RTTVAR = 0x5 + RTAX_SSTHRESH = 0x6 + RTAX_UNSPEC = 0x0 + RTAX_WINDOW = 0x3 + RTA_ALIGNTO = 0x4 + RTA_MAX = 0x18 + RTCF_DIRECTSRC = 0x4000000 + RTCF_DOREDIRECT = 0x1000000 + RTCF_LOG = 0x2000000 + RTCF_MASQ = 0x400000 + RTCF_NAT = 0x800000 + RTCF_VALVE = 0x200000 + RTF_ADDRCLASSMASK = 0xf8000000 + RTF_ADDRCONF = 0x40000 + RTF_ALLONLINK = 0x20000 + RTF_BROADCAST = 0x10000000 + RTF_CACHE = 0x1000000 + RTF_DEFAULT = 0x10000 + RTF_DYNAMIC = 0x10 + RTF_FLOW = 0x2000000 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INTERFACE = 0x40000000 + RTF_IRTT = 0x100 + RTF_LINKRT = 0x100000 + RTF_LOCAL = 0x80000000 + RTF_MODIFIED = 0x20 + RTF_MSS = 0x40 + RTF_MTU = 0x40 + RTF_MULTICAST = 0x20000000 + RTF_NAT = 0x8000000 + RTF_NOFORWARD = 0x1000 + RTF_NONEXTHOP = 0x200000 + RTF_NOPMTUDISC = 0x4000 + RTF_POLICY = 0x4000000 + RTF_REINSTATE = 0x8 + RTF_REJECT = 0x200 + RTF_STATIC = 0x400 + RTF_THROW = 0x2000 + RTF_UP = 0x1 + RTF_WINDOW = 0x80 + RTF_XRESOLVE = 0x800 + RTM_BASE = 0x10 + RTM_DELACTION = 0x31 + RTM_DELADDR = 0x15 + RTM_DELADDRLABEL = 0x49 + RTM_DELLINK = 0x11 + RTM_DELMDB = 0x55 + RTM_DELNEIGH = 0x1d + RTM_DELNSID = 0x59 + RTM_DELQDISC = 0x25 + RTM_DELROUTE = 0x19 + RTM_DELRULE = 0x21 + RTM_DELTCLASS = 0x29 + RTM_DELTFILTER = 0x2d + RTM_F_CLONED = 0x200 + RTM_F_EQUALIZE = 0x400 + RTM_F_LOOKUP_TABLE = 0x1000 + RTM_F_NOTIFY = 0x100 + RTM_F_PREFIX = 0x800 + RTM_GETACTION = 0x32 + RTM_GETADDR = 0x16 + RTM_GETADDRLABEL = 0x4a + RTM_GETANYCAST = 0x3e + RTM_GETDCB = 0x4e + RTM_GETLINK = 0x12 + RTM_GETMDB = 0x56 + RTM_GETMULTICAST = 0x3a + RTM_GETNEIGH = 0x1e + RTM_GETNEIGHTBL = 0x42 + RTM_GETNETCONF = 0x52 + RTM_GETNSID = 0x5a + RTM_GETQDISC = 0x26 + RTM_GETROUTE = 0x1a + RTM_GETRULE = 0x22 + RTM_GETSTATS = 0x5e + RTM_GETTCLASS = 0x2a + RTM_GETTFILTER = 0x2e + RTM_MAX = 0x5f + RTM_NEWACTION = 0x30 + RTM_NEWADDR = 0x14 + RTM_NEWADDRLABEL = 0x48 + RTM_NEWLINK = 0x10 + RTM_NEWMDB = 0x54 + RTM_NEWNDUSEROPT = 0x44 + RTM_NEWNEIGH = 0x1c + RTM_NEWNEIGHTBL = 0x40 + RTM_NEWNETCONF = 0x50 + RTM_NEWNSID = 0x58 + RTM_NEWPREFIX = 0x34 + RTM_NEWQDISC = 0x24 + RTM_NEWROUTE = 0x18 + RTM_NEWRULE = 0x20 + RTM_NEWSTATS = 0x5c + RTM_NEWTCLASS = 0x28 + RTM_NEWTFILTER = 0x2c + RTM_NR_FAMILIES = 0x14 + RTM_NR_MSGTYPES = 0x50 + RTM_SETDCB = 0x4f + RTM_SETLINK = 0x13 + RTM_SETNEIGHTBL = 0x43 + RTNH_ALIGNTO = 0x4 + RTNH_COMPARE_MASK = 0x11 + RTNH_F_DEAD = 0x1 + RTNH_F_LINKDOWN = 0x10 + RTNH_F_OFFLOAD = 0x8 + RTNH_F_ONLINK = 0x4 + RTNH_F_PERVASIVE = 0x2 + RTN_MAX = 0xb + RTPROT_BABEL = 0x2a + RTPROT_BIRD = 0xc + RTPROT_BOOT = 0x3 + RTPROT_DHCP = 0x10 + RTPROT_DNROUTED = 0xd + RTPROT_GATED = 0x8 + RTPROT_KERNEL = 0x2 + RTPROT_MROUTED = 0x11 + RTPROT_MRT = 0xa + RTPROT_NTK = 0xf + RTPROT_RA = 0x9 + RTPROT_REDIRECT = 0x1 + RTPROT_STATIC = 0x4 + RTPROT_UNSPEC = 0x0 + RTPROT_XORP = 0xe + RTPROT_ZEBRA = 0xb + RT_CLASS_DEFAULT = 0xfd + RT_CLASS_LOCAL = 0xff + RT_CLASS_MAIN = 0xfe + RT_CLASS_MAX = 0xff + RT_CLASS_UNSPEC = 0x0 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_CREDENTIALS = 0x2 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x1d + SCM_TIMESTAMPING = 0x23 + SCM_TIMESTAMPNS = 0x21 + SCM_WIFI_STATUS = 0x25 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDDLCI = 0x8980 + SIOCADDMULTI = 0x8931 + SIOCADDRT = 0x890b + SIOCATMARK = 0x8905 + SIOCBONDCHANGEACTIVE = 0x8995 + SIOCBONDENSLAVE = 0x8990 + SIOCBONDINFOQUERY = 0x8994 + SIOCBONDRELEASE = 0x8991 + SIOCBONDSETHWADDR = 0x8992 + SIOCBONDSLAVEINFOQUERY = 0x8993 + SIOCBRADDBR = 0x89a0 + SIOCBRADDIF = 0x89a2 + SIOCBRDELBR = 0x89a1 + SIOCBRDELIF = 0x89a3 + SIOCDARP = 0x8953 + SIOCDELDLCI = 0x8981 + SIOCDELMULTI = 0x8932 + SIOCDELRT = 0x890c + SIOCDEVPRIVATE = 0x89f0 + SIOCDIFADDR = 0x8936 + SIOCDRARP = 0x8960 + SIOCETHTOOL = 0x8946 + SIOCGARP = 0x8954 + SIOCGHWTSTAMP = 0x89b1 + SIOCGIFADDR = 0x8915 + SIOCGIFBR = 0x8940 + SIOCGIFBRDADDR = 0x8919 + SIOCGIFCONF = 0x8912 + SIOCGIFCOUNT = 0x8938 + SIOCGIFDSTADDR = 0x8917 + SIOCGIFENCAP = 0x8925 + SIOCGIFFLAGS = 0x8913 + SIOCGIFHWADDR = 0x8927 + SIOCGIFINDEX = 0x8933 + SIOCGIFMAP = 0x8970 + SIOCGIFMEM = 0x891f + SIOCGIFMETRIC = 0x891d + SIOCGIFMTU = 0x8921 + SIOCGIFNAME = 0x8910 + SIOCGIFNETMASK = 0x891b + SIOCGIFPFLAGS = 0x8935 + SIOCGIFSLAVE = 0x8929 + SIOCGIFTXQLEN = 0x8942 + SIOCGIFVLAN = 0x8982 + SIOCGMIIPHY = 0x8947 + SIOCGMIIREG = 0x8948 + SIOCGPGRP = 0x8904 + SIOCGRARP = 0x8961 + SIOCGSTAMP = 0x8906 + SIOCGSTAMPNS = 0x8907 + SIOCINQ = 0x4004667f + SIOCOUTQ = 0x40047473 + SIOCOUTQNSD = 0x894b + SIOCPROTOPRIVATE = 0x89e0 + SIOCRTMSG = 0x890d + SIOCSARP = 0x8955 + SIOCSHWTSTAMP = 0x89b0 + SIOCSIFADDR = 0x8916 + SIOCSIFBR = 0x8941 + SIOCSIFBRDADDR = 0x891a + SIOCSIFDSTADDR = 0x8918 + SIOCSIFENCAP = 0x8926 + SIOCSIFFLAGS = 0x8914 + SIOCSIFHWADDR = 0x8924 + SIOCSIFHWBROADCAST = 0x8937 + SIOCSIFLINK = 0x8911 + SIOCSIFMAP = 0x8971 + SIOCSIFMEM = 0x8920 + SIOCSIFMETRIC = 0x891e + SIOCSIFMTU = 0x8922 + SIOCSIFNAME = 0x8923 + SIOCSIFNETMASK = 0x891c + SIOCSIFPFLAGS = 0x8934 + SIOCSIFSLAVE = 0x8930 + SIOCSIFTXQLEN = 0x8943 + SIOCSIFVLAN = 0x8983 + SIOCSMIIREG = 0x8949 + SIOCSPGRP = 0x8902 + SIOCSRARP = 0x8962 + SIOCWANDEV = 0x894a + SOCK_CLOEXEC = 0x400000 + SOCK_DCCP = 0x6 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x4000 + SOCK_PACKET = 0xa + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_AAL = 0x109 + SOL_ALG = 0x117 + SOL_ATM = 0x108 + SOL_CAIF = 0x116 + SOL_DCCP = 0x10d + SOL_DECNET = 0x105 + SOL_ICMPV6 = 0x3a + SOL_IP = 0x0 + SOL_IPV6 = 0x29 + SOL_IRDA = 0x10a + SOL_IUCV = 0x115 + SOL_KCM = 0x119 + SOL_LLC = 0x10c + SOL_NETBEUI = 0x10b + SOL_NETLINK = 0x10e + SOL_NFC = 0x118 + SOL_PACKET = 0x107 + SOL_PNPIPE = 0x113 + SOL_PPPOL2TP = 0x111 + SOL_RAW = 0xff + SOL_RDS = 0x114 + SOL_RXRPC = 0x110 + SOL_SOCKET = 0xffff + SOL_TCP = 0x6 + SOL_TIPC = 0x10f + SOL_X25 = 0x106 + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x8000 + SO_ATTACH_BPF = 0x34 + SO_ATTACH_FILTER = 0x1a + SO_ATTACH_REUSEPORT_CBPF = 0x35 + SO_ATTACH_REUSEPORT_EBPF = 0x36 + SO_BINDTODEVICE = 0xd + SO_BPF_EXTENSIONS = 0x32 + SO_BROADCAST = 0x20 + SO_BSDCOMPAT = 0x400 + SO_BUSY_POLL = 0x30 + SO_CNX_ADVICE = 0x37 + SO_DEBUG = 0x1 + SO_DETACH_BPF = 0x1b + SO_DETACH_FILTER = 0x1b + SO_DOMAIN = 0x1029 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_GET_FILTER = 0x1a + SO_INCOMING_CPU = 0x33 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOCK_FILTER = 0x28 + SO_MARK = 0x22 + SO_MAX_PACING_RATE = 0x31 + SO_NOFCS = 0x27 + SO_NO_CHECK = 0xb + SO_OOBINLINE = 0x100 + SO_PASSCRED = 0x2 + SO_PASSSEC = 0x1f + SO_PEEK_OFF = 0x26 + SO_PEERCRED = 0x40 + SO_PEERNAME = 0x1c + SO_PEERSEC = 0x1e + SO_PRIORITY = 0xc + SO_PROTOCOL = 0x1028 + SO_RCVBUF = 0x1002 + SO_RCVBUFFORCE = 0x100b + SO_RCVLOWAT = 0x800 + SO_RCVTIMEO = 0x2000 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RXQ_OVFL = 0x24 + SO_SECURITY_AUTHENTICATION = 0x5001 + SO_SECURITY_ENCRYPTION_NETWORK = 0x5004 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x5002 + SO_SELECT_ERR_QUEUE = 0x29 + SO_SNDBUF = 0x1001 + SO_SNDBUFFORCE = 0x100a + SO_SNDLOWAT = 0x1000 + SO_SNDTIMEO = 0x4000 + SO_TIMESTAMP = 0x1d + SO_TIMESTAMPING = 0x23 + SO_TIMESTAMPNS = 0x21 + SO_TYPE = 0x1008 + SO_VM_SOCKETS_BUFFER_MAX_SIZE = 0x2 + SO_VM_SOCKETS_BUFFER_MIN_SIZE = 0x1 + SO_VM_SOCKETS_BUFFER_SIZE = 0x0 + SO_VM_SOCKETS_CONNECT_TIMEOUT = 0x6 + SO_VM_SOCKETS_NONBLOCK_TXRX = 0x7 + SO_VM_SOCKETS_PEER_HOST_VM_ID = 0x3 + SO_VM_SOCKETS_TRUSTED = 0x5 + SO_WIFI_STATUS = 0x25 + SPLICE_F_GIFT = 0x8 + SPLICE_F_MORE = 0x4 + SPLICE_F_MOVE = 0x1 + SPLICE_F_NONBLOCK = 0x2 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x20005407 + TCGETA = 0x40125401 + TCGETS = 0x40245408 + TCGETS2 = 0x402c540c + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_CC_INFO = 0x1a + TCP_CONGESTION = 0xd + TCP_COOKIE_IN_ALWAYS = 0x1 + TCP_COOKIE_MAX = 0x10 + TCP_COOKIE_MIN = 0x8 + TCP_COOKIE_OUT_NEVER = 0x2 + TCP_COOKIE_PAIR_SIZE = 0x20 + TCP_COOKIE_TRANSACTIONS = 0xf + TCP_CORK = 0x3 + TCP_DEFER_ACCEPT = 0x9 + TCP_FASTOPEN = 0x17 + TCP_INFO = 0xb + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x4 + TCP_KEEPINTVL = 0x5 + TCP_LINGER2 = 0x8 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0xe + TCP_MD5SIG_MAXKEYLEN = 0x50 + TCP_MSS = 0x200 + TCP_MSS_DEFAULT = 0x218 + TCP_MSS_DESIRED = 0x4c4 + TCP_NODELAY = 0x1 + TCP_NOTSENT_LOWAT = 0x19 + TCP_QUEUE_SEQ = 0x15 + TCP_QUICKACK = 0xc + TCP_REPAIR = 0x13 + TCP_REPAIR_OPTIONS = 0x16 + TCP_REPAIR_QUEUE = 0x14 + TCP_SAVED_SYN = 0x1c + TCP_SAVE_SYN = 0x1b + TCP_SYNCNT = 0x7 + TCP_S_DATA_IN = 0x4 + TCP_S_DATA_OUT = 0x8 + TCP_THIN_DUPACK = 0x11 + TCP_THIN_LINEAR_TIMEOUTS = 0x10 + TCP_TIMESTAMP = 0x18 + TCP_USER_TIMEOUT = 0x12 + TCP_WINDOW_CLAMP = 0xa + TCSAFLUSH = 0x2 + TCSBRK = 0x20005405 + TCSBRKP = 0x5425 + TCSETA = 0x80125402 + TCSETAF = 0x80125404 + TCSETAW = 0x80125403 + TCSETS = 0x80245409 + TCSETS2 = 0x802c540d + TCSETSF = 0x8024540b + TCSETSF2 = 0x802c540f + TCSETSW = 0x8024540a + TCSETSW2 = 0x802c540e + TCXONC = 0x20005406 + TIOCCBRK = 0x2000747a + TIOCCONS = 0x20007424 + TIOCEXCL = 0x2000740d + TIOCGDEV = 0x40045432 + TIOCGETD = 0x40047400 + TIOCGEXCL = 0x40045440 + TIOCGICOUNT = 0x545d + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x40047483 + TIOCGPKT = 0x40045438 + TIOCGPTLCK = 0x40045439 + TIOCGPTN = 0x40047486 + TIOCGRS485 = 0x40205441 + TIOCGSERIAL = 0x541e + TIOCGSID = 0x40047485 + TIOCGSOFTCAR = 0x40047464 + TIOCGWINSZ = 0x40087468 + TIOCINQ = 0x4004667f + TIOCLINUX = 0x541c + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMIWAIT = 0x545c + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_LOOP = 0x8000 + TIOCM_OUT1 = 0x2000 + TIOCM_OUT2 = 0x4000 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007484 + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x80047401 + TIOCSIG = 0x80047488 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x80047482 + TIOCSPTLCK = 0x80047487 + TIOCSRS485 = 0xc0205442 + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x80047465 + TIOCSTART = 0x2000746e + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCVHANGUP = 0x20005437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x801054d5 + TUNDETACHFILTER = 0x801054d6 + TUNGETFEATURES = 0x400454cf + TUNGETFILTER = 0x401054db + TUNGETIFF = 0x400454d2 + TUNGETSNDBUF = 0x400454d3 + TUNGETVNETBE = 0x400454df + TUNGETVNETHDRSZ = 0x400454d7 + TUNGETVNETLE = 0x400454dd + TUNSETDEBUG = 0x800454c9 + TUNSETGROUP = 0x800454ce + TUNSETIFF = 0x800454ca + TUNSETIFINDEX = 0x800454da + TUNSETLINK = 0x800454cd + TUNSETNOCSUM = 0x800454c8 + TUNSETOFFLOAD = 0x800454d0 + TUNSETOWNER = 0x800454cc + TUNSETPERSIST = 0x800454cb + TUNSETQUEUE = 0x800454d9 + TUNSETSNDBUF = 0x800454d4 + TUNSETTXFILTER = 0x800454d1 + TUNSETVNETBE = 0x800454de + TUNSETVNETHDRSZ = 0x800454d8 + TUNSETVNETLE = 0x800454dc + VDISCARD = 0xd + VDSUSP = 0xb + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMADDR_CID_ANY = 0xffffffff + VMADDR_CID_HOST = 0x2 + VMADDR_CID_HYPERVISOR = 0x0 + VMADDR_CID_RESERVED = 0x1 + VMADDR_PORT_ANY = 0xffffffff + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WALL = 0x40000000 + WCLONE = 0x80000000 + WCONTINUED = 0x8 + WEXITED = 0x4 + WNOHANG = 0x1 + WNOTHREAD = 0x20000000 + WNOWAIT = 0x1000000 + WORDSIZE = 0x40 + WRAP = 0x20000 + WSTOPPED = 0x2 + WUNTRACED = 0x2 + XCASE = 0x4 + XTABS = 0x1800 + __TIOCFLUSH = 0x80047410 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EADV = syscall.Errno(0x53) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x25) + EBADE = syscall.Errno(0x66) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x5d) + EBADMSG = syscall.Errno(0x4c) + EBADR = syscall.Errno(0x67) + EBADRQC = syscall.Errno(0x6a) + EBADSLT = syscall.Errno(0x6b) + EBFONT = syscall.Errno(0x6d) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x7f) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x5e) + ECOMM = syscall.Errno(0x55) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0x4e) + EDEADLOCK = syscall.Errno(0x6c) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDOTDOT = syscall.Errno(0x58) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EHWPOISON = syscall.Errno(0x87) + EIDRM = syscall.Errno(0x4d) + EILSEQ = syscall.Errno(0x7a) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x81) + EKEYREJECTED = syscall.Errno(0x83) + EKEYREVOKED = syscall.Errno(0x82) + EL2HLT = syscall.Errno(0x65) + EL2NSYNC = syscall.Errno(0x5f) + EL3HLT = syscall.Errno(0x60) + EL3RST = syscall.Errno(0x61) + ELIBACC = syscall.Errno(0x72) + ELIBBAD = syscall.Errno(0x70) + ELIBEXEC = syscall.Errno(0x6e) + ELIBMAX = syscall.Errno(0x7b) + ELIBSCN = syscall.Errno(0x7c) + ELNRNG = syscall.Errno(0x62) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x7e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x57) + ENAMETOOLONG = syscall.Errno(0x3f) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x69) + ENOBUFS = syscall.Errno(0x37) + ENOCSI = syscall.Errno(0x64) + ENODATA = syscall.Errno(0x6f) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOKEY = syscall.Errno(0x80) + ENOLCK = syscall.Errno(0x4f) + ENOLINK = syscall.Errno(0x52) + ENOMEDIUM = syscall.Errno(0x7d) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x4b) + ENONET = syscall.Errno(0x50) + ENOPKG = syscall.Errno(0x71) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x4a) + ENOSTR = syscall.Errno(0x48) + ENOSYS = syscall.Errno(0x5a) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x85) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x2d) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x73) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x5c) + EOWNERDEAD = syscall.Errno(0x84) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROTO = syscall.Errno(0x56) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x59) + EREMOTE = syscall.Errno(0x47) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x74) + ERFKILL = syscall.Errno(0x86) + EROFS = syscall.Errno(0x1e) + ERREMOTE = syscall.Errno(0x51) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x54) + ESTALE = syscall.Errno(0x46) + ESTRPIPE = syscall.Errno(0x5b) + ETIME = syscall.Errno(0x49) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x63) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x68) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x1d) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x17) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1d) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "no such device or address", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device or resource busy", + 17: "file exists", + 18: "invalid cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "numerical result out of range", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol", + 48: "address already in use", + 49: "cannot assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "transport endpoint is already connected", + 57: "transport endpoint is not connected", + 58: "cannot send after transport endpoint shutdown", + 59: "too many references: cannot splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disk quota exceeded", + 70: "stale file handle", + 71: "object is remote", + 72: "device not a stream", + 73: "timer expired", + 74: "out of streams resources", + 75: "no message of desired type", + 76: "bad message", + 77: "identifier removed", + 78: "resource deadlock avoided", + 79: "no locks available", + 80: "machine is not on the network", + 81: "unknown error 81", + 82: "link has been severed", + 83: "advertise error", + 84: "srmount error", + 85: "communication error on send", + 86: "protocol error", + 87: "multihop attempted", + 88: "RFS specific error", + 89: "remote address changed", + 90: "function not implemented", + 91: "streams pipe error", + 92: "value too large for defined data type", + 93: "file descriptor in bad state", + 94: "channel number out of range", + 95: "level 2 not synchronized", + 96: "level 3 halted", + 97: "level 3 reset", + 98: "link number out of range", + 99: "protocol driver not attached", + 100: "no CSI structure available", + 101: "level 2 halted", + 102: "invalid exchange", + 103: "invalid request descriptor", + 104: "exchange full", + 105: "no anode", + 106: "invalid request code", + 107: "invalid slot", + 108: "file locking deadlock error", + 109: "bad font file format", + 110: "cannot exec a shared library directly", + 111: "no data available", + 112: "accessing a corrupted shared library", + 113: "package not installed", + 114: "can not access a needed shared library", + 115: "name not unique on network", + 116: "interrupted system call should be restarted", + 117: "structure needs cleaning", + 118: "not a XENIX named type file", + 119: "no XENIX semaphores available", + 120: "is a named type file", + 121: "remote I/O error", + 122: "invalid or incomplete multibyte or wide character", + 123: "attempting to link in too many shared libraries", + 124: ".lib section in a.out corrupted", + 125: "no medium found", + 126: "wrong medium type", + 127: "operation canceled", + 128: "required key not available", + 129: "key has expired", + 130: "key has been revoked", + 131: "key was rejected by service", + 132: "owner died", + 133: "state not recoverable", + 134: "operation not possible due to RF-kill", + 135: "memory page has hardware error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "CPU time limit exceeded", + 25: "file size limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window changed", + 29: "resource lost", + 30: "user defined signal 1", + 31: "user defined signal 2", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go new file mode 100644 index 0000000..b4338d5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_386.go @@ -0,0 +1,1712 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + EN_SW_CTL_INF = 0x1000 + EN_SW_CTL_PREC = 0x300 + EN_SW_CTL_ROUND = 0xc00 + EN_SW_DATACHAIN = 0x80 + EN_SW_DENORM = 0x2 + EN_SW_INVOP = 0x1 + EN_SW_OVERFLOW = 0x8 + EN_SW_PRECLOSS = 0x20 + EN_SW_UNDERFLOW = 0x10 + EN_SW_ZERODIV = 0x4 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large or too small", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol option not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "illegal byte sequence", + 86: "not supported", + 87: "operation Canceled", + 88: "bad or Corrupt message", + 89: "no message available", + 90: "no STREAM resources", + 91: "not a STREAM", + 92: "STREAM ioctl timeout", + 93: "attribute not found", + 94: "multihop attempted", + 95: "link has been severed", + 96: "protocol error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "power fail/restart", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go new file mode 100644 index 0000000..4994437 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_amd64.go @@ -0,0 +1,1702 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0104277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x8010427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80104272 + BIOCSUDPF = 0x80104273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x8 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CLONE_CSIGNAL = 0xff + CLONE_FILES = 0x400 + CLONE_FS = 0x200 + CLONE_PID = 0x1000 + CLONE_PTRACE = 0x2000 + CLONE_SIGHAND = 0x800 + CLONE_VFORK = 0x4000 + CLONE_VM = 0x100 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PRI_IOFLUSH = 0x7c + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8038720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8038720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc028697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0986920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0106926 + SIOCGIFDATA = 0xc0986985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0306936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc0286987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc0106978 + SIOCINITIFADDR = 0xc0706984 + SIOCSDRVSPEC = 0x8028697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8098691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x80286988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0986986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + S_LOGIN_SET = 0x1 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x40107458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x40287446 + TIOCPTSNAME = 0x40287448 + TIOCRCVFRAME = 0x80087445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80087444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large or too small", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol option not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "illegal byte sequence", + 86: "not supported", + 87: "operation Canceled", + 88: "bad or Corrupt message", + 89: "no message available", + 90: "no STREAM resources", + 91: "not a STREAM", + 92: "STREAM ioctl timeout", + 93: "attribute not found", + 94: "multihop attempted", + 95: "link has been severed", + 96: "protocol error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "power fail/restart", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go new file mode 100644 index 0000000..206c75f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_netbsd_arm.go @@ -0,0 +1,1691 @@ +// mkerrors.sh -marm +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build arm,netbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -marm _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_ARP = 0x1c + AF_BLUETOOTH = 0x1f + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_HYLINK = 0xf + AF_IEEE80211 = 0x20 + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x23 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OROUTE = 0x11 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x22 + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ARCNET = 0x7 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + ARPHRD_STRIP = 0x17 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B460800 = 0x70800 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B921600 = 0xe1000 + B9600 = 0x2580 + BIOCFEEDBACK = 0x8004427d + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc0084277 + BIOCGETIF = 0x4090426b + BIOCGFEEDBACK = 0x4004427c + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x400c427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDLT = 0x80044276 + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8090426c + BIOCSFEEDBACK = 0x8004427d + BIOCSHDRCMPLT = 0x80044275 + BIOCSRTIMEOUT = 0x800c427a + BIOCSSEESENT = 0x80044279 + BIOCSTCPF = 0x80084272 + BIOCSUDPF = 0x80084273 + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALIGNMENT32 = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + CTL_QUERY = -0x2 + DIOCBSFLUSH = 0x20006478 + DLT_A429 = 0xb8 + DLT_A653_ICM = 0xb9 + DLT_AIRONET_HEADER = 0x78 + DLT_AOS = 0xde + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_AX25_KISS = 0xca + DLT_BACNET_MS_TP = 0xa5 + DLT_BLUETOOTH_HCI_H4 = 0xbb + DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 + DLT_CAN20B = 0xbe + DLT_CAN_SOCKETCAN = 0xe3 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_C_HDLC_WITH_DIR = 0xcd + DLT_DECT = 0xdd + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF = 0xc5 + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FC_2 = 0xe0 + DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 + DLT_FDDI = 0xa + DLT_FLEXRAY = 0xd2 + DLT_FRELAY = 0x6b + DLT_FRELAY_WITH_DIR = 0xce + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_GSMTAP_ABIS = 0xda + DLT_GSMTAP_UM = 0xd9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IEEE802_15_4 = 0xc3 + DLT_IEEE802_15_4_LINUX = 0xbf + DLT_IEEE802_15_4_NONASK_PHY = 0xd7 + DLT_IEEE802_16_MAC_CPS = 0xbc + DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 + DLT_IPMB = 0xc7 + DLT_IPMB_LINUX = 0xd1 + DLT_IPNET = 0xe2 + DLT_IPV4 = 0xe4 + DLT_IPV6 = 0xe5 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_ISM = 0xc2 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_JUNIPER_ST = 0xc8 + DLT_JUNIPER_VP = 0xb7 + DLT_LAPB_WITH_DIR = 0xcf + DLT_LAPD = 0xcb + DLT_LIN = 0xd4 + DLT_LINUX_EVDEV = 0xd8 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MFR = 0xb6 + DLT_MOST = 0xd3 + DLT_MPLS = 0xdb + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPI = 0xc0 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_ETHER = 0x33 + DLT_PPP_PPPD = 0xa6 + DLT_PPP_SERIAL = 0x32 + DLT_PPP_WITH_DIR = 0xcc + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAIF1 = 0xc6 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SITA = 0xc4 + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + DLT_USB = 0xba + DLT_USB_LINUX = 0xbd + DLT_USB_LINUX_MMAPPED = 0xdc + DLT_WIHART = 0xdf + DLT_X2E_SERIAL = 0xd5 + DLT_X2E_XORAYA = 0xd6 + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + DT_WHT = 0xe + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMUL_LINUX = 0x1 + EMUL_LINUX32 = 0x5 + EMUL_MAXID = 0x6 + ETHERCAP_JUMBO_MTU = 0x4 + ETHERCAP_VLAN_HWTAGGING = 0x2 + ETHERCAP_VLAN_MTU = 0x1 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERMTU_JUMBO = 0x2328 + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOWPROTOCOLS = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_LEN = 0x5ee + ETHER_MAX_LEN_JUMBO = 0x233a + ETHER_MIN_LEN = 0x40 + ETHER_PPPOE_ENCAP_LEN = 0x8 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = 0x2 + EVFILT_PROC = 0x4 + EVFILT_READ = 0x0 + EVFILT_SIGNAL = 0x5 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = 0x6 + EVFILT_VNODE = 0x3 + EVFILT_WRITE = 0x1 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x100 + FLUSHO = 0x800000 + F_CLOSEM = 0xa + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xc + F_FSCTL = -0x80000000 + F_FSDIRMASK = 0x70000000 + F_FSIN = 0x10000000 + F_FSINOUT = 0x30000000 + F_FSOUT = 0x20000000 + F_FSPRIV = 0x8000 + F_FSVOID = 0x40000000 + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETNOSIGPIPE = 0xd + F_GETOWN = 0x5 + F_MAXFD = 0xb + F_OK = 0x0 + F_PARAM_MASK = 0xfff + F_PARAM_MAX = 0xfff + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETNOSIGPIPE = 0xe + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8f52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf8 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf2 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf1 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_STF = 0xd7 + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_IPV6_ICMP = 0x3a + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x34 + IPPROTO_MOBILE = 0x37 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPPROTO_VRRP = 0x70 + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPSEC_POLICY = 0x1c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_PATHMTU = 0x2c + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DROP_MEMBERSHIP = 0xd + IP_EF = 0x8000 + IP_ERRORMTU = 0x15 + IP_HDRINCL = 0x2 + IP_IPSEC_POLICY = 0x16 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0x14 + IP_MF = 0x2000 + IP_MINFRAGSIZE = 0x45 + IP_MINTTL = 0x18 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x14 + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVTTL = 0x17 + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ALIGNMENT_16MB = 0x18000000 + MAP_ALIGNMENT_1TB = 0x28000000 + MAP_ALIGNMENT_256TB = 0x30000000 + MAP_ALIGNMENT_4GB = 0x20000000 + MAP_ALIGNMENT_64KB = 0x10000000 + MAP_ALIGNMENT_64PB = 0x38000000 + MAP_ALIGNMENT_MASK = -0x1000000 + MAP_ALIGNMENT_SHIFT = 0x18 + MAP_ANON = 0x1000 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DEFAULT = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_STACK = 0x2000 + MAP_TRYFIXED = 0x400 + MAP_WIRED = 0x800 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CONTROLMBUF = 0x2000000 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_IOVUSRSPACE = 0x4000000 + MSG_LENUSRSPACE = 0x8000000 + MSG_MCAST = 0x200 + MSG_NAMEMBUF = 0x1000000 + MSG_NBIO = 0x1000 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_USERFLAGS = 0xffffff + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_SYNC = 0x4 + NAME_MAX = 0x1ff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x5 + NET_RT_MAXID = 0x6 + NET_RT_OIFLIST = 0x4 + NET_RT_OOIFLIST = 0x3 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + OFIOGETBMAP = 0xc004667a + ONLCR = 0x2 + ONLRET = 0x40 + ONOCR = 0x20 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_ALT_IO = 0x40000 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x400000 + O_CREAT = 0x200 + O_DIRECT = 0x80000 + O_DIRECTORY = 0x200000 + O_DSYNC = 0x10000 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_NOSIGPIPE = 0x1000000 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x20000 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PRI_IOFLUSH = 0x7c + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + RLIMIT_AS = 0xa + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_TAG = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_TAG = 0x100 + RTF_ANNOUNCE = 0x20000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x2000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SRC = 0x10000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0x15 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_GET = 0x4 + RTM_IEEE80211 = 0x11 + RTM_IFANNOUNCE = 0x10 + RTM_IFINFO = 0x14 + RTM_LLINFO_UPD = 0x13 + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OIFINFO = 0xf + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_OOIFINFO = 0xe + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_SETGATE = 0x12 + RTM_VERSION = 0x4 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_CREDS = 0x4 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x8 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80906931 + SIOCADDRT = 0x8030720a + SIOCAIFADDR = 0x8040691a + SIOCALIFADDR = 0x8118691c + SIOCATMARK = 0x40047307 + SIOCDELMULTI = 0x80906932 + SIOCDELRT = 0x8030720b + SIOCDIFADDR = 0x80906919 + SIOCDIFPHYADDR = 0x80906949 + SIOCDLIFADDR = 0x8118691e + SIOCGDRVSPEC = 0xc01c697b + SIOCGETPFSYNC = 0xc09069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0906921 + SIOCGIFADDRPREF = 0xc0946920 + SIOCGIFALIAS = 0xc040691b + SIOCGIFBRDADDR = 0xc0906923 + SIOCGIFCAP = 0xc0206976 + SIOCGIFCONF = 0xc0086926 + SIOCGIFDATA = 0xc0946985 + SIOCGIFDLT = 0xc0906977 + SIOCGIFDSTADDR = 0xc0906922 + SIOCGIFFLAGS = 0xc0906911 + SIOCGIFGENERIC = 0xc090693a + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0906917 + SIOCGIFMTU = 0xc090697e + SIOCGIFNETMASK = 0xc0906925 + SIOCGIFPDSTADDR = 0xc0906948 + SIOCGIFPSRCADDR = 0xc0906947 + SIOCGLIFADDR = 0xc118691d + SIOCGLIFPHYADDR = 0xc118694b + SIOCGLINKSTR = 0xc01c6987 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGVH = 0xc0906983 + SIOCIFCREATE = 0x8090697a + SIOCIFDESTROY = 0x80906979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCINITIFADDR = 0xc0446984 + SIOCSDRVSPEC = 0x801c697b + SIOCSETPFSYNC = 0x809069f7 + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8090690c + SIOCSIFADDRPREF = 0x8094691f + SIOCSIFBRDADDR = 0x80906913 + SIOCSIFCAP = 0x80206975 + SIOCSIFDSTADDR = 0x8090690e + SIOCSIFFLAGS = 0x80906910 + SIOCSIFGENERIC = 0x80906939 + SIOCSIFMEDIA = 0xc0906935 + SIOCSIFMETRIC = 0x80906918 + SIOCSIFMTU = 0x8090697f + SIOCSIFNETMASK = 0x80906916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSLIFPHYADDR = 0x8118694a + SIOCSLINKSTR = 0x801c6988 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSVH = 0xc0906982 + SIOCZIFDATA = 0xc0946986 + SOCK_CLOEXEC = 0x10000000 + SOCK_DGRAM = 0x2 + SOCK_FLAGS_MASK = 0xf0000000 + SOCK_NONBLOCK = 0x20000000 + SOCK_NOSIGPIPE = 0x40000000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ACCEPTFILTER = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NOHEADER = 0x100a + SO_NOSIGPIPE = 0x800 + SO_OOBINLINE = 0x100 + SO_OVERFLOWED = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x100c + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x100b + SO_TIMESTAMP = 0x2000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SYSCTL_VERSION = 0x1000000 + SYSCTL_VERS_0 = 0x0 + SYSCTL_VERS_1 = 0x1000000 + SYSCTL_VERS_MASK = 0xff000000 + S_ARCH1 = 0x10000 + S_ARCH2 = 0x20000 + S_BLKSIZE = 0x200 + S_IEXEC = 0x40 + S_IFBLK = 0x6000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFIFO = 0x1000 + S_IFLNK = 0xa000 + S_IFMT = 0xf000 + S_IFREG = 0x8000 + S_IFSOCK = 0xc000 + S_IFWHT = 0xe000 + S_IREAD = 0x100 + S_IRGRP = 0x20 + S_IROTH = 0x4 + S_IRUSR = 0x100 + S_IRWXG = 0x38 + S_IRWXO = 0x7 + S_IRWXU = 0x1c0 + S_ISGID = 0x400 + S_ISTXT = 0x200 + S_ISUID = 0x800 + S_ISVTX = 0x200 + S_IWGRP = 0x10 + S_IWOTH = 0x2 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXGRP = 0x8 + S_IXOTH = 0x1 + S_IXUSR = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_CONGCTL = 0x20 + TCP_KEEPCNT = 0x6 + TCP_KEEPIDLE = 0x3 + TCP_KEEPINIT = 0x7 + TCP_KEEPINTVL = 0x5 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x10 + TCP_MINMSS = 0xd8 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDCDTIMESTAMP = 0x400c7458 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CDTRCTS = 0x10 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGLINED = 0x40207442 + TIOCGPGRP = 0x40047477 + TIOCGQSIZE = 0x40047481 + TIOCGRANTPT = 0x20007447 + TIOCGSID = 0x40047463 + TIOCGSIZE = 0x40087468 + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCPTMGET = 0x48087446 + TIOCPTSNAME = 0x48087448 + TIOCRCVFRAME = 0x80047445 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x2000745f + TIOCSLINED = 0x80207443 + TIOCSPGRP = 0x80047476 + TIOCSQSIZE = 0x80047480 + TIOCSSIZE = 0x80087467 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TIOCXMTFRAME = 0x80047444 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALL = 0x8 + WALLSIG = 0x8 + WALTSIG = 0x4 + WCLONE = 0x4 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WNOWAIT = 0x10000 + WNOZOMBIE = 0x20000 + WOPTSCHECKED = 0x40000 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADMSG = syscall.Errno(0x58) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x57) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x52) + EILSEQ = syscall.Errno(0x55) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x60) + ELOOP = syscall.Errno(0x3e) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + EMULTIHOP = syscall.Errno(0x5e) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x5d) + ENOBUFS = syscall.Errno(0x37) + ENODATA = syscall.Errno(0x59) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOLINK = syscall.Errno(0x5f) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x53) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x5a) + ENOSTR = syscall.Errno(0x5b) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x56) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x54) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTO = syscall.Errno(0x60) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIME = syscall.Errno(0x5c) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x20) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large or too small", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol option not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "identifier removed", + 83: "no message of desired type", + 84: "value too large to be stored in data type", + 85: "illegal byte sequence", + 86: "not supported", + 87: "operation Canceled", + 88: "bad or Corrupt message", + 89: "no message available", + 90: "no STREAM resources", + 91: "not a STREAM", + 92: "STREAM ioctl timeout", + 93: "attribute not found", + 94: "multihop attempted", + 95: "link has been severed", + 96: "protocol error", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "power fail/restart", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go new file mode 100644 index 0000000..3322e99 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_386.go @@ -0,0 +1,1584 @@ +// mkerrors.sh -m32 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build 386,openbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m32 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc008427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x400c426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80084277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x800c426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_COPY = 0x4 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x1ff7 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + PT_MASK = 0x3ff000 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x10f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_SOURCE = 0x20000 + RTF_STATIC = 0x800 + RTF_TUNNEL = 0x100000 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8054693c + SIOCBRDGADDS = 0x80546941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8054693d + SIOCBRDGDELS = 0x80546942 + SIOCBRDGFLUSH = 0x80546948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc054693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc03c6958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc028694f + SIOCBRDGGSIFS = 0xc054693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0546942 + SIOCBRDGRTS = 0xc0186943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80546955 + SIOCBRDGSIFFLGS = 0x8054693f + SIOCBRDGSIFPRIO = 0x80546954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0086924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc024698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8024698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x400c745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "IPsec processing failure", + 83: "attribute not found", + 84: "illegal byte sequence", + 85: "no medium found", + 86: "wrong medium type", + 87: "value too large to be stored in data type", + 88: "operation canceled", + 89: "identifier removed", + 90: "no message of desired type", + 91: "not supported", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread AST", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go new file mode 100644 index 0000000..1758ecc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_amd64.go @@ -0,0 +1,1583 @@ +// mkerrors.sh -m64 +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// +build amd64,openbsd + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc010427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x4010426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80104267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80104277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x8010426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_OK = 0x0 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_COPY = 0x4 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x1ff7 + MAP_HASSEMAPHORE = 0x200 + MAP_INHERIT = 0x80 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_DONATE_COPY = 0x3 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_NOEXTEND = 0x100 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x400 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x10f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_SOURCE = 0x20000 + RTF_STATIC = 0x800 + RTF_TUNNEL = 0x100000 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80286987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8058693c + SIOCBRDGADDS = 0x80586941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8058693d + SIOCBRDGDELS = 0x80586942 + SIOCBRDGFLUSH = 0x80586948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc058693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc0406958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc030694f + SIOCBRDGGSIFS = 0xc058693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0586942 + SIOCBRDGRTS = 0xc0206943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80586955 + SIOCBRDGSIFFLGS = 0x8058693f + SIOCBRDGSIFPRIO = 0x80586954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80286989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0207534 + SIOCGETVIFCNT = 0xc0287533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0106924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc028698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc028698a + SIOCGIFGROUP = 0xc0286988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0306936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc0106978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8028698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_DGRAM = 0x2 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x4010745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WSTOPPED = 0x7f + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "IPsec processing failure", + 83: "attribute not found", + 84: "illegal byte sequence", + 85: "no medium found", + 86: "wrong medium type", + 87: "value too large to be stored in data type", + 88: "operation canceled", + 89: "identifier removed", + 90: "no message of desired type", + 91: "not supported", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread AST", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go new file mode 100644 index 0000000..3ed0b26 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_openbsd_arm.go @@ -0,0 +1,1586 @@ +// mkerrors.sh +// MACHINE GENERATED BY THE COMMAND ABOVE; DO NOT EDIT + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- _const.go + +// +build arm,openbsd + +package unix + +import "syscall" + +const ( + AF_APPLETALK = 0x10 + AF_BLUETOOTH = 0x20 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_CNT = 0x15 + AF_COIP = 0x14 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_E164 = 0x1a + AF_ECMA = 0x8 + AF_ENCAP = 0x1c + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x18 + AF_IPX = 0x17 + AF_ISDN = 0x1a + AF_ISO = 0x7 + AF_KEY = 0x1e + AF_LAT = 0xe + AF_LINK = 0x12 + AF_LOCAL = 0x1 + AF_MAX = 0x24 + AF_MPLS = 0x21 + AF_NATM = 0x1b + AF_NS = 0x6 + AF_OSI = 0x7 + AF_PUP = 0x4 + AF_ROUTE = 0x11 + AF_SIP = 0x1d + AF_SNA = 0xb + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + ARPHRD_ETHER = 0x1 + ARPHRD_FRELAY = 0xf + ARPHRD_IEEE1394 = 0x18 + ARPHRD_IEEE802 = 0x6 + B0 = 0x0 + B110 = 0x6e + B115200 = 0x1c200 + B1200 = 0x4b0 + B134 = 0x86 + B14400 = 0x3840 + B150 = 0x96 + B1800 = 0x708 + B19200 = 0x4b00 + B200 = 0xc8 + B230400 = 0x38400 + B2400 = 0x960 + B28800 = 0x7080 + B300 = 0x12c + B38400 = 0x9600 + B4800 = 0x12c0 + B50 = 0x32 + B57600 = 0xe100 + B600 = 0x258 + B7200 = 0x1c20 + B75 = 0x4b + B76800 = 0x12c00 + B9600 = 0x2580 + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDIRFILT = 0x4004427c + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = 0xc008427b + BIOCGETIF = 0x4020426b + BIOCGFILDROP = 0x40044278 + BIOCGHDRCMPLT = 0x40044274 + BIOCGRSIG = 0x40044273 + BIOCGRTIMEOUT = 0x400c426e + BIOCGSTATS = 0x4008426f + BIOCIMMEDIATE = 0x80044270 + BIOCLOCK = 0x20004276 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = 0xc0044266 + BIOCSDIRFILT = 0x8004427d + BIOCSDLT = 0x8004427a + BIOCSETF = 0x80084267 + BIOCSETIF = 0x8020426c + BIOCSETWF = 0x80084277 + BIOCSFILDROP = 0x80044279 + BIOCSHDRCMPLT = 0x80044275 + BIOCSRSIG = 0x80044272 + BIOCSRTIMEOUT = 0x800c426d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DIRECTION_IN = 0x1 + BPF_DIRECTION_OUT = 0x2 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x200000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + CFLUSH = 0xf + CLOCAL = 0x8000 + CREAD = 0x800 + CS5 = 0x0 + CS6 = 0x100 + CS7 = 0x200 + CS8 = 0x300 + CSIZE = 0x300 + CSTART = 0x11 + CSTATUS = 0xff + CSTOP = 0x13 + CSTOPB = 0x400 + CSUSP = 0x1a + CTL_MAXNAME = 0xc + CTL_NET = 0x4 + DIOCOSFPFLUSH = 0x2000444e + DLT_ARCNET = 0x7 + DLT_ATM_RFC1483 = 0xb + DLT_AX25 = 0x3 + DLT_CHAOS = 0x5 + DLT_C_HDLC = 0x68 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0xd + DLT_FDDI = 0xa + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_LOOP = 0xc + DLT_MPLS = 0xdb + DLT_NULL = 0x0 + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0x10 + DLT_PPP_ETHER = 0x33 + DLT_PPP_SERIAL = 0x32 + DLT_PRONET = 0x4 + DLT_RAW = 0xe + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xf + DT_BLK = 0x6 + DT_CHR = 0x2 + DT_DIR = 0x4 + DT_FIFO = 0x1 + DT_LNK = 0xa + DT_REG = 0x8 + DT_SOCK = 0xc + DT_UNKNOWN = 0x0 + ECHO = 0x8 + ECHOCTL = 0x40 + ECHOE = 0x2 + ECHOK = 0x4 + ECHOKE = 0x1 + ECHONL = 0x10 + ECHOPRT = 0x20 + EMT_TAGOVF = 0x1 + EMUL_ENABLED = 0x1 + EMUL_NATIVE = 0x2 + ENDRUNDISC = 0x9 + ETHERMIN = 0x2e + ETHERMTU = 0x5dc + ETHERTYPE_8023 = 0x4 + ETHERTYPE_AARP = 0x80f3 + ETHERTYPE_ACCTON = 0x8390 + ETHERTYPE_AEONIC = 0x8036 + ETHERTYPE_ALPHA = 0x814a + ETHERTYPE_AMBER = 0x6008 + ETHERTYPE_AMOEBA = 0x8145 + ETHERTYPE_AOE = 0x88a2 + ETHERTYPE_APOLLO = 0x80f7 + ETHERTYPE_APOLLODOMAIN = 0x8019 + ETHERTYPE_APPLETALK = 0x809b + ETHERTYPE_APPLITEK = 0x80c7 + ETHERTYPE_ARGONAUT = 0x803a + ETHERTYPE_ARP = 0x806 + ETHERTYPE_AT = 0x809b + ETHERTYPE_ATALK = 0x809b + ETHERTYPE_ATOMIC = 0x86df + ETHERTYPE_ATT = 0x8069 + ETHERTYPE_ATTSTANFORD = 0x8008 + ETHERTYPE_AUTOPHON = 0x806a + ETHERTYPE_AXIS = 0x8856 + ETHERTYPE_BCLOOP = 0x9003 + ETHERTYPE_BOFL = 0x8102 + ETHERTYPE_CABLETRON = 0x7034 + ETHERTYPE_CHAOS = 0x804 + ETHERTYPE_COMDESIGN = 0x806c + ETHERTYPE_COMPUGRAPHIC = 0x806d + ETHERTYPE_COUNTERPOINT = 0x8062 + ETHERTYPE_CRONUS = 0x8004 + ETHERTYPE_CRONUSVLN = 0x8003 + ETHERTYPE_DCA = 0x1234 + ETHERTYPE_DDE = 0x807b + ETHERTYPE_DEBNI = 0xaaaa + ETHERTYPE_DECAM = 0x8048 + ETHERTYPE_DECCUST = 0x6006 + ETHERTYPE_DECDIAG = 0x6005 + ETHERTYPE_DECDNS = 0x803c + ETHERTYPE_DECDTS = 0x803e + ETHERTYPE_DECEXPER = 0x6000 + ETHERTYPE_DECLAST = 0x8041 + ETHERTYPE_DECLTM = 0x803f + ETHERTYPE_DECMUMPS = 0x6009 + ETHERTYPE_DECNETBIOS = 0x8040 + ETHERTYPE_DELTACON = 0x86de + ETHERTYPE_DIDDLE = 0x4321 + ETHERTYPE_DLOG1 = 0x660 + ETHERTYPE_DLOG2 = 0x661 + ETHERTYPE_DN = 0x6003 + ETHERTYPE_DOGFIGHT = 0x1989 + ETHERTYPE_DSMD = 0x8039 + ETHERTYPE_ECMA = 0x803 + ETHERTYPE_ENCRYPT = 0x803d + ETHERTYPE_ES = 0x805d + ETHERTYPE_EXCELAN = 0x8010 + ETHERTYPE_EXPERDATA = 0x8049 + ETHERTYPE_FLIP = 0x8146 + ETHERTYPE_FLOWCONTROL = 0x8808 + ETHERTYPE_FRARP = 0x808 + ETHERTYPE_GENDYN = 0x8068 + ETHERTYPE_HAYES = 0x8130 + ETHERTYPE_HIPPI_FP = 0x8180 + ETHERTYPE_HITACHI = 0x8820 + ETHERTYPE_HP = 0x8005 + ETHERTYPE_IEEEPUP = 0xa00 + ETHERTYPE_IEEEPUPAT = 0xa01 + ETHERTYPE_IMLBL = 0x4c42 + ETHERTYPE_IMLBLDIAG = 0x424c + ETHERTYPE_IP = 0x800 + ETHERTYPE_IPAS = 0x876c + ETHERTYPE_IPV6 = 0x86dd + ETHERTYPE_IPX = 0x8137 + ETHERTYPE_IPXNEW = 0x8037 + ETHERTYPE_KALPANA = 0x8582 + ETHERTYPE_LANBRIDGE = 0x8038 + ETHERTYPE_LANPROBE = 0x8888 + ETHERTYPE_LAT = 0x6004 + ETHERTYPE_LBACK = 0x9000 + ETHERTYPE_LITTLE = 0x8060 + ETHERTYPE_LLDP = 0x88cc + ETHERTYPE_LOGICRAFT = 0x8148 + ETHERTYPE_LOOPBACK = 0x9000 + ETHERTYPE_MATRA = 0x807a + ETHERTYPE_MAX = 0xffff + ETHERTYPE_MERIT = 0x807c + ETHERTYPE_MICP = 0x873a + ETHERTYPE_MOPDL = 0x6001 + ETHERTYPE_MOPRC = 0x6002 + ETHERTYPE_MOTOROLA = 0x818d + ETHERTYPE_MPLS = 0x8847 + ETHERTYPE_MPLS_MCAST = 0x8848 + ETHERTYPE_MUMPS = 0x813f + ETHERTYPE_NBPCC = 0x3c04 + ETHERTYPE_NBPCLAIM = 0x3c09 + ETHERTYPE_NBPCLREQ = 0x3c05 + ETHERTYPE_NBPCLRSP = 0x3c06 + ETHERTYPE_NBPCREQ = 0x3c02 + ETHERTYPE_NBPCRSP = 0x3c03 + ETHERTYPE_NBPDG = 0x3c07 + ETHERTYPE_NBPDGB = 0x3c08 + ETHERTYPE_NBPDLTE = 0x3c0a + ETHERTYPE_NBPRAR = 0x3c0c + ETHERTYPE_NBPRAS = 0x3c0b + ETHERTYPE_NBPRST = 0x3c0d + ETHERTYPE_NBPSCD = 0x3c01 + ETHERTYPE_NBPVCD = 0x3c00 + ETHERTYPE_NBS = 0x802 + ETHERTYPE_NCD = 0x8149 + ETHERTYPE_NESTAR = 0x8006 + ETHERTYPE_NETBEUI = 0x8191 + ETHERTYPE_NOVELL = 0x8138 + ETHERTYPE_NS = 0x600 + ETHERTYPE_NSAT = 0x601 + ETHERTYPE_NSCOMPAT = 0x807 + ETHERTYPE_NTRAILER = 0x10 + ETHERTYPE_OS9 = 0x7007 + ETHERTYPE_OS9NET = 0x7009 + ETHERTYPE_PACER = 0x80c6 + ETHERTYPE_PAE = 0x888e + ETHERTYPE_PCS = 0x4242 + ETHERTYPE_PLANNING = 0x8044 + ETHERTYPE_PPP = 0x880b + ETHERTYPE_PPPOE = 0x8864 + ETHERTYPE_PPPOEDISC = 0x8863 + ETHERTYPE_PRIMENTS = 0x7031 + ETHERTYPE_PUP = 0x200 + ETHERTYPE_PUPAT = 0x200 + ETHERTYPE_QINQ = 0x88a8 + ETHERTYPE_RACAL = 0x7030 + ETHERTYPE_RATIONAL = 0x8150 + ETHERTYPE_RAWFR = 0x6559 + ETHERTYPE_RCL = 0x1995 + ETHERTYPE_RDP = 0x8739 + ETHERTYPE_RETIX = 0x80f2 + ETHERTYPE_REVARP = 0x8035 + ETHERTYPE_SCA = 0x6007 + ETHERTYPE_SECTRA = 0x86db + ETHERTYPE_SECUREDATA = 0x876d + ETHERTYPE_SGITW = 0x817e + ETHERTYPE_SG_BOUNCE = 0x8016 + ETHERTYPE_SG_DIAG = 0x8013 + ETHERTYPE_SG_NETGAMES = 0x8014 + ETHERTYPE_SG_RESV = 0x8015 + ETHERTYPE_SIMNET = 0x5208 + ETHERTYPE_SLOW = 0x8809 + ETHERTYPE_SNA = 0x80d5 + ETHERTYPE_SNMP = 0x814c + ETHERTYPE_SONIX = 0xfaf5 + ETHERTYPE_SPIDER = 0x809f + ETHERTYPE_SPRITE = 0x500 + ETHERTYPE_STP = 0x8181 + ETHERTYPE_TALARIS = 0x812b + ETHERTYPE_TALARISMC = 0x852b + ETHERTYPE_TCPCOMP = 0x876b + ETHERTYPE_TCPSM = 0x9002 + ETHERTYPE_TEC = 0x814f + ETHERTYPE_TIGAN = 0x802f + ETHERTYPE_TRAIL = 0x1000 + ETHERTYPE_TRANSETHER = 0x6558 + ETHERTYPE_TYMSHARE = 0x802e + ETHERTYPE_UBBST = 0x7005 + ETHERTYPE_UBDEBUG = 0x900 + ETHERTYPE_UBDIAGLOOP = 0x7002 + ETHERTYPE_UBDL = 0x7000 + ETHERTYPE_UBNIU = 0x7001 + ETHERTYPE_UBNMC = 0x7003 + ETHERTYPE_VALID = 0x1600 + ETHERTYPE_VARIAN = 0x80dd + ETHERTYPE_VAXELN = 0x803b + ETHERTYPE_VEECO = 0x8067 + ETHERTYPE_VEXP = 0x805b + ETHERTYPE_VGLAB = 0x8131 + ETHERTYPE_VINES = 0xbad + ETHERTYPE_VINESECHO = 0xbaf + ETHERTYPE_VINESLOOP = 0xbae + ETHERTYPE_VITAL = 0xff00 + ETHERTYPE_VLAN = 0x8100 + ETHERTYPE_VLTLMAN = 0x8080 + ETHERTYPE_VPROD = 0x805c + ETHERTYPE_VURESERVED = 0x8147 + ETHERTYPE_WATERLOO = 0x8130 + ETHERTYPE_WELLFLEET = 0x8103 + ETHERTYPE_X25 = 0x805 + ETHERTYPE_X75 = 0x801 + ETHERTYPE_XNSSM = 0x9001 + ETHERTYPE_XTP = 0x817d + ETHER_ADDR_LEN = 0x6 + ETHER_ALIGN = 0x2 + ETHER_CRC_LEN = 0x4 + ETHER_CRC_POLY_BE = 0x4c11db6 + ETHER_CRC_POLY_LE = 0xedb88320 + ETHER_HDR_LEN = 0xe + ETHER_MAX_DIX_LEN = 0x600 + ETHER_MAX_LEN = 0x5ee + ETHER_MIN_LEN = 0x40 + ETHER_TYPE_LEN = 0x2 + ETHER_VLAN_ENCAP_LEN = 0x4 + EVFILT_AIO = -0x3 + EVFILT_PROC = -0x5 + EVFILT_READ = -0x1 + EVFILT_SIGNAL = -0x6 + EVFILT_SYSCOUNT = 0x7 + EVFILT_TIMER = -0x7 + EVFILT_VNODE = -0x4 + EVFILT_WRITE = -0x2 + EV_ADD = 0x1 + EV_CLEAR = 0x20 + EV_DELETE = 0x2 + EV_DISABLE = 0x8 + EV_ENABLE = 0x4 + EV_EOF = 0x8000 + EV_ERROR = 0x4000 + EV_FLAG1 = 0x2000 + EV_ONESHOT = 0x10 + EV_SYSFLAGS = 0xf000 + EXTA = 0x4b00 + EXTB = 0x9600 + EXTPROC = 0x800 + FD_CLOEXEC = 0x1 + FD_SETSIZE = 0x400 + FLUSHO = 0x800000 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0xa + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0x7 + F_GETOWN = 0x5 + F_RDLCK = 0x1 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x8 + F_SETLKW = 0x9 + F_SETOWN = 0x6 + F_UNLCK = 0x2 + F_WRLCK = 0x3 + HUPCL = 0x4000 + ICANON = 0x100 + ICMP6_FILTER = 0x12 + ICRNL = 0x100 + IEXTEN = 0x400 + IFAN_ARRIVAL = 0x0 + IFAN_DEPARTURE = 0x1 + IFA_ROUTE = 0x1 + IFF_ALLMULTI = 0x200 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x8e52 + IFF_DEBUG = 0x4 + IFF_LINK0 = 0x1000 + IFF_LINK1 = 0x2000 + IFF_LINK2 = 0x4000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x8000 + IFF_NOARP = 0x80 + IFF_NOTRAILERS = 0x20 + IFF_OACTIVE = 0x400 + IFF_POINTOPOINT = 0x10 + IFF_PROMISC = 0x100 + IFF_RUNNING = 0x40 + IFF_SIMPLEX = 0x800 + IFF_UP = 0x1 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_A12MPPSWITCH = 0x82 + IFT_AAL2 = 0xbb + IFT_AAL5 = 0x31 + IFT_ADSL = 0x5e + IFT_AFLANE8023 = 0x3b + IFT_AFLANE8025 = 0x3c + IFT_ARAP = 0x58 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ASYNC = 0x54 + IFT_ATM = 0x25 + IFT_ATMDXI = 0x69 + IFT_ATMFUNI = 0x6a + IFT_ATMIMA = 0x6b + IFT_ATMLOGICAL = 0x50 + IFT_ATMRADIO = 0xbd + IFT_ATMSUBINTERFACE = 0x86 + IFT_ATMVCIENDPT = 0xc2 + IFT_ATMVIRTUAL = 0x95 + IFT_BGPPOLICYACCOUNTING = 0xa2 + IFT_BLUETOOTH = 0xf8 + IFT_BRIDGE = 0xd1 + IFT_BSC = 0x53 + IFT_CARP = 0xf7 + IFT_CCTEMUL = 0x3d + IFT_CEPT = 0x13 + IFT_CES = 0x85 + IFT_CHANNEL = 0x46 + IFT_CNR = 0x55 + IFT_COFFEE = 0x84 + IFT_COMPOSITELINK = 0x9b + IFT_DCN = 0x8d + IFT_DIGITALPOWERLINE = 0x8a + IFT_DIGITALWRAPPEROVERHEADCHANNEL = 0xba + IFT_DLSW = 0x4a + IFT_DOCSCABLEDOWNSTREAM = 0x80 + IFT_DOCSCABLEMACLAYER = 0x7f + IFT_DOCSCABLEUPSTREAM = 0x81 + IFT_DOCSCABLEUPSTREAMCHANNEL = 0xcd + IFT_DS0 = 0x51 + IFT_DS0BUNDLE = 0x52 + IFT_DS1FDL = 0xaa + IFT_DS3 = 0x1e + IFT_DTM = 0x8c + IFT_DUMMY = 0xf1 + IFT_DVBASILN = 0xac + IFT_DVBASIOUT = 0xad + IFT_DVBRCCDOWNSTREAM = 0x93 + IFT_DVBRCCMACLAYER = 0x92 + IFT_DVBRCCUPSTREAM = 0x94 + IFT_ECONET = 0xce + IFT_ENC = 0xf4 + IFT_EON = 0x19 + IFT_EPLRS = 0x57 + IFT_ESCON = 0x49 + IFT_ETHER = 0x6 + IFT_FAITH = 0xf3 + IFT_FAST = 0x7d + IFT_FASTETHER = 0x3e + IFT_FASTETHERFX = 0x45 + IFT_FDDI = 0xf + IFT_FIBRECHANNEL = 0x38 + IFT_FRAMERELAYINTERCONNECT = 0x3a + IFT_FRAMERELAYMPI = 0x5c + IFT_FRDLCIENDPT = 0xc1 + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_FRF16MFRBUNDLE = 0xa3 + IFT_FRFORWARD = 0x9e + IFT_G703AT2MB = 0x43 + IFT_G703AT64K = 0x42 + IFT_GIF = 0xf0 + IFT_GIGABITETHERNET = 0x75 + IFT_GR303IDT = 0xb2 + IFT_GR303RDT = 0xb1 + IFT_H323GATEKEEPER = 0xa4 + IFT_H323PROXY = 0xa5 + IFT_HDH1822 = 0x3 + IFT_HDLC = 0x76 + IFT_HDSL2 = 0xa8 + IFT_HIPERLAN2 = 0xb7 + IFT_HIPPI = 0x2f + IFT_HIPPIINTERFACE = 0x39 + IFT_HOSTPAD = 0x5a + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IBM370PARCHAN = 0x48 + IFT_IDSL = 0x9a + IFT_IEEE1394 = 0x90 + IFT_IEEE80211 = 0x47 + IFT_IEEE80212 = 0x37 + IFT_IEEE8023ADLAG = 0xa1 + IFT_IFGSN = 0x91 + IFT_IMT = 0xbe + IFT_INFINIBAND = 0xc7 + IFT_INTERLEAVE = 0x7c + IFT_IP = 0x7e + IFT_IPFORWARD = 0x8e + IFT_IPOVERATM = 0x72 + IFT_IPOVERCDLC = 0x6d + IFT_IPOVERCLAW = 0x6e + IFT_IPSWITCH = 0x4e + IFT_ISDN = 0x3f + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISDNS = 0x4b + IFT_ISDNU = 0x4c + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88025CRFPINT = 0x62 + IFT_ISO88025DTR = 0x56 + IFT_ISO88025FIBER = 0x73 + IFT_ISO88026 = 0xa + IFT_ISUP = 0xb3 + IFT_L2VLAN = 0x87 + IFT_L3IPVLAN = 0x88 + IFT_L3IPXVLAN = 0x89 + IFT_LAPB = 0x10 + IFT_LAPD = 0x4d + IFT_LAPF = 0x77 + IFT_LINEGROUP = 0xd2 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MEDIAMAILOVERIP = 0x8b + IFT_MFSIGLINK = 0xa7 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_MPC = 0x71 + IFT_MPLS = 0xa6 + IFT_MPLSTUNNEL = 0x96 + IFT_MSDSL = 0x8f + IFT_MVL = 0xbf + IFT_MYRINET = 0x63 + IFT_NFAS = 0xaf + IFT_NSIP = 0x1b + IFT_OPTICALCHANNEL = 0xc3 + IFT_OPTICALTRANSPORT = 0xc4 + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PFLOG = 0xf5 + IFT_PFLOW = 0xf9 + IFT_PFSYNC = 0xf6 + IFT_PLC = 0xae + IFT_PON155 = 0xcf + IFT_PON622 = 0xd0 + IFT_POS = 0xab + IFT_PPP = 0x17 + IFT_PPPMULTILINKBUNDLE = 0x6c + IFT_PROPATM = 0xc5 + IFT_PROPBWAP2MP = 0xb8 + IFT_PROPCNLS = 0x59 + IFT_PROPDOCSWIRELESSDOWNSTREAM = 0xb5 + IFT_PROPDOCSWIRELESSMACLAYER = 0xb4 + IFT_PROPDOCSWIRELESSUPSTREAM = 0xb6 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PROPWIRELESSP2P = 0x9d + IFT_PTPSERIAL = 0x16 + IFT_PVC = 0xf2 + IFT_Q2931 = 0xc9 + IFT_QLLC = 0x44 + IFT_RADIOMAC = 0xbc + IFT_RADSL = 0x5f + IFT_REACHDSL = 0xc0 + IFT_RFC1483 = 0x9f + IFT_RS232 = 0x21 + IFT_RSRB = 0x4f + IFT_SDLC = 0x11 + IFT_SDSL = 0x60 + IFT_SHDSL = 0xa9 + IFT_SIP = 0x1f + IFT_SIPSIG = 0xcc + IFT_SIPTG = 0xcb + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETOVERHEADCHANNEL = 0xb9 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_SRP = 0x97 + IFT_SS7SIGLINK = 0x9c + IFT_STACKTOSTACK = 0x6f + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_TDLC = 0x74 + IFT_TELINK = 0xc8 + IFT_TERMPAD = 0x5b + IFT_TR008 = 0xb0 + IFT_TRANSPHDLC = 0x7b + IFT_TUNNEL = 0x83 + IFT_ULTRA = 0x1d + IFT_USB = 0xa0 + IFT_V11 = 0x40 + IFT_V35 = 0x2d + IFT_V36 = 0x41 + IFT_V37 = 0x78 + IFT_VDSL = 0x61 + IFT_VIRTUALIPADDRESS = 0x70 + IFT_VIRTUALTG = 0xca + IFT_VOICEDID = 0xd5 + IFT_VOICEEM = 0x64 + IFT_VOICEEMFGD = 0xd3 + IFT_VOICEENCAP = 0x67 + IFT_VOICEFGDEANA = 0xd4 + IFT_VOICEFXO = 0x65 + IFT_VOICEFXS = 0x66 + IFT_VOICEOVERATM = 0x98 + IFT_VOICEOVERCABLE = 0xc6 + IFT_VOICEOVERFRAMERELAY = 0x99 + IFT_VOICEOVERIP = 0x68 + IFT_X213 = 0x5d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25HUNTGROUP = 0x7a + IFT_X25MLP = 0x79 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_LOOPBACKNET = 0x7f + IN_RFC3021_HOST = 0x1 + IN_RFC3021_NET = 0xfffffffe + IN_RFC3021_NSHIFT = 0x1f + IPPROTO_AH = 0x33 + IPPROTO_CARP = 0x70 + IPPROTO_DIVERT = 0x102 + IPPROTO_DIVERT_INIT = 0x2 + IPPROTO_DIVERT_RESP = 0x1 + IPPROTO_DONE = 0x101 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x62 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_ETHERIP = 0x61 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_GRE = 0x2f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPCOMP = 0x6c + IPPROTO_IPIP = 0x4 + IPPROTO_IPV4 = 0x4 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_MAXID = 0x103 + IPPROTO_MOBILE = 0x37 + IPPROTO_MPLS = 0x89 + IPPROTO_NONE = 0x3b + IPPROTO_PFSYNC = 0xf0 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_TCP = 0x6 + IPPROTO_TP = 0x1d + IPPROTO_UDP = 0x11 + IPV6_AUTH_LEVEL = 0x35 + IPV6_AUTOFLOWLABEL = 0x3b + IPV6_CHECKSUM = 0x1a + IPV6_DEFAULT_MULTICAST_HOPS = 0x1 + IPV6_DEFAULT_MULTICAST_LOOP = 0x1 + IPV6_DEFHLIM = 0x40 + IPV6_DONTFRAG = 0x3e + IPV6_DSTOPTS = 0x32 + IPV6_ESP_NETWORK_LEVEL = 0x37 + IPV6_ESP_TRANS_LEVEL = 0x36 + IPV6_FAITH = 0x1d + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 + IPV6_FRAGTTL = 0x78 + IPV6_HLIMDEC = 0x1 + IPV6_HOPLIMIT = 0x2f + IPV6_HOPOPTS = 0x31 + IPV6_IPCOMP_LEVEL = 0x3c + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + IPV6_MAXHLIM = 0xff + IPV6_MAXPACKET = 0xffff + IPV6_MMTU = 0x500 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_LOOP = 0xb + IPV6_NEXTHOP = 0x30 + IPV6_OPTIONS = 0x1 + IPV6_PATHMTU = 0x2c + IPV6_PIPEX = 0x3f + IPV6_PKTINFO = 0x2e + IPV6_PORTRANGE = 0xe + IPV6_PORTRANGE_DEFAULT = 0x0 + IPV6_PORTRANGE_HIGH = 0x1 + IPV6_PORTRANGE_LOW = 0x2 + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVDSTPORT = 0x40 + IPV6_RECVHOPLIMIT = 0x25 + IPV6_RECVHOPOPTS = 0x27 + IPV6_RECVPATHMTU = 0x2b + IPV6_RECVPKTINFO = 0x24 + IPV6_RECVRTHDR = 0x26 + IPV6_RECVTCLASS = 0x39 + IPV6_RTABLE = 0x1021 + IPV6_RTHDR = 0x33 + IPV6_RTHDRDSTOPTS = 0x23 + IPV6_RTHDR_LOOSE = 0x0 + IPV6_RTHDR_STRICT = 0x1 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SOCKOPT_RESERVED1 = 0x3 + IPV6_TCLASS = 0x3d + IPV6_UNICAST_HOPS = 0x4 + IPV6_USE_MIN_MTU = 0x2a + IPV6_V6ONLY = 0x1b + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 + IP_ADD_MEMBERSHIP = 0xc + IP_AUTH_LEVEL = 0x14 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DIVERTFL = 0x1022 + IP_DROP_MEMBERSHIP = 0xd + IP_ESP_NETWORK_LEVEL = 0x16 + IP_ESP_TRANS_LEVEL = 0x15 + IP_HDRINCL = 0x2 + IP_IPCOMP_LEVEL = 0x1d + IP_IPSECFLOWINFO = 0x24 + IP_IPSEC_LOCAL_AUTH = 0x1b + IP_IPSEC_LOCAL_CRED = 0x19 + IP_IPSEC_LOCAL_ID = 0x17 + IP_IPSEC_REMOTE_AUTH = 0x1c + IP_IPSEC_REMOTE_CRED = 0x1a + IP_IPSEC_REMOTE_ID = 0x18 + IP_MAXPACKET = 0xffff + IP_MAX_MEMBERSHIPS = 0xfff + IP_MF = 0x2000 + IP_MINTTL = 0x20 + IP_MIN_MEMBERSHIPS = 0xf + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_LOOP = 0xb + IP_MULTICAST_TTL = 0xa + IP_OFFMASK = 0x1fff + IP_OPTIONS = 0x1 + IP_PIPEX = 0x22 + IP_PORTRANGE = 0x13 + IP_PORTRANGE_DEFAULT = 0x0 + IP_PORTRANGE_HIGH = 0x1 + IP_PORTRANGE_LOW = 0x2 + IP_RECVDSTADDR = 0x7 + IP_RECVDSTPORT = 0x21 + IP_RECVIF = 0x1e + IP_RECVOPTS = 0x5 + IP_RECVRETOPTS = 0x6 + IP_RECVRTABLE = 0x23 + IP_RECVTTL = 0x1f + IP_RETOPTS = 0x8 + IP_RF = 0x8000 + IP_RTABLE = 0x1021 + IP_TOS = 0x3 + IP_TTL = 0x4 + ISIG = 0x80 + ISTRIP = 0x20 + IXANY = 0x800 + IXOFF = 0x400 + IXON = 0x200 + LCNT_OVERLOAD_FLUSH = 0x6 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x6 + MADV_NORMAL = 0x0 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_SPACEAVAIL = 0x5 + MADV_WILLNEED = 0x3 + MAP_ANON = 0x1000 + MAP_ANONYMOUS = 0x1000 + MAP_COPY = 0x2 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_FLAGMASK = 0x3ff7 + MAP_HASSEMAPHORE = 0x0 + MAP_INHERIT = 0x0 + MAP_INHERIT_COPY = 0x1 + MAP_INHERIT_NONE = 0x2 + MAP_INHERIT_SHARE = 0x0 + MAP_INHERIT_ZERO = 0x3 + MAP_NOEXTEND = 0x0 + MAP_NORESERVE = 0x0 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x0 + MAP_SHARED = 0x1 + MAP_TRYFIXED = 0x0 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_BCAST = 0x100 + MSG_CMSG_CLOEXEC = 0x800 + MSG_CTRUNC = 0x20 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_EOR = 0x8 + MSG_MCAST = 0x200 + MSG_NOSIGNAL = 0x400 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x10 + MSG_WAITALL = 0x40 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x4 + MS_SYNC = 0x2 + NAME_MAX = 0xff + NET_RT_DUMP = 0x1 + NET_RT_FLAGS = 0x2 + NET_RT_IFLIST = 0x3 + NET_RT_MAXID = 0x6 + NET_RT_STATS = 0x4 + NET_RT_TABLE = 0x5 + NOFLSH = 0x80000000 + NOTE_ATTRIB = 0x8 + NOTE_CHILD = 0x4 + NOTE_DELETE = 0x1 + NOTE_EOF = 0x2 + NOTE_EXEC = 0x20000000 + NOTE_EXIT = 0x80000000 + NOTE_EXTEND = 0x4 + NOTE_FORK = 0x40000000 + NOTE_LINK = 0x10 + NOTE_LOWAT = 0x1 + NOTE_PCTRLMASK = 0xf0000000 + NOTE_PDATAMASK = 0xfffff + NOTE_RENAME = 0x20 + NOTE_REVOKE = 0x40 + NOTE_TRACK = 0x1 + NOTE_TRACKERR = 0x2 + NOTE_TRUNCATE = 0x80 + NOTE_WRITE = 0x2 + OCRNL = 0x10 + ONLCR = 0x2 + ONLRET = 0x80 + ONOCR = 0x40 + ONOEOT = 0x8 + OPOST = 0x1 + O_ACCMODE = 0x3 + O_APPEND = 0x8 + O_ASYNC = 0x40 + O_CLOEXEC = 0x10000 + O_CREAT = 0x200 + O_DIRECTORY = 0x20000 + O_DSYNC = 0x80 + O_EXCL = 0x800 + O_EXLOCK = 0x20 + O_FSYNC = 0x80 + O_NDELAY = 0x4 + O_NOCTTY = 0x8000 + O_NOFOLLOW = 0x100 + O_NONBLOCK = 0x4 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x80 + O_SHLOCK = 0x10 + O_SYNC = 0x80 + O_TRUNC = 0x400 + O_WRONLY = 0x1 + PARENB = 0x1000 + PARMRK = 0x8 + PARODD = 0x2000 + PENDIN = 0x20000000 + PF_FLUSH = 0x1 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x8 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = 0x7fffffffffffffff + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_LABEL = 0xa + RTAX_MAX = 0xb + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTAX_SRCMASK = 0x9 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_LABEL = 0x400 + RTA_NETMASK = 0x4 + RTA_SRC = 0x100 + RTA_SRCMASK = 0x200 + RTF_ANNOUNCE = 0x4000 + RTF_BLACKHOLE = 0x1000 + RTF_BROADCAST = 0x400000 + RTF_CLONED = 0x10000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_FMASK = 0x70f808 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_LLINFO = 0x400 + RTF_LOCAL = 0x200000 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MPATH = 0x40000 + RTF_MPLS = 0x100000 + RTF_PERMANENT_ARP = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_PROTO3 = 0x2000 + RTF_REJECT = 0x8 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_USETRAILERS = 0x8000 + RTF_XRESOLVE = 0x200 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_DESYNC = 0x10 + RTM_GET = 0x4 + RTM_IFANNOUNCE = 0xf + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MAXSIZE = 0x800 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_RTTUNIT = 0xf4240 + RTM_VERSION = 0x5 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_TABLEID_MAX = 0xff + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + RUSAGE_THREAD = 0x1 + SCM_RIGHTS = 0x1 + SCM_TIMESTAMP = 0x4 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIOCADDMULTI = 0x80206931 + SIOCAIFADDR = 0x8040691a + SIOCAIFGROUP = 0x80246987 + SIOCALIFADDR = 0x8218691c + SIOCATMARK = 0x40047307 + SIOCBRDGADD = 0x8054693c + SIOCBRDGADDS = 0x80546941 + SIOCBRDGARL = 0x806e694d + SIOCBRDGDADDR = 0x81286947 + SIOCBRDGDEL = 0x8054693d + SIOCBRDGDELS = 0x80546942 + SIOCBRDGFLUSH = 0x80546948 + SIOCBRDGFRL = 0x806e694e + SIOCBRDGGCACHE = 0xc0146941 + SIOCBRDGGFD = 0xc0146952 + SIOCBRDGGHT = 0xc0146951 + SIOCBRDGGIFFLGS = 0xc054693e + SIOCBRDGGMA = 0xc0146953 + SIOCBRDGGPARAM = 0xc03c6958 + SIOCBRDGGPRI = 0xc0146950 + SIOCBRDGGRL = 0xc028694f + SIOCBRDGGSIFS = 0xc054693c + SIOCBRDGGTO = 0xc0146946 + SIOCBRDGIFS = 0xc0546942 + SIOCBRDGRTS = 0xc0186943 + SIOCBRDGSADDR = 0xc1286944 + SIOCBRDGSCACHE = 0x80146940 + SIOCBRDGSFD = 0x80146952 + SIOCBRDGSHT = 0x80146951 + SIOCBRDGSIFCOST = 0x80546955 + SIOCBRDGSIFFLGS = 0x8054693f + SIOCBRDGSIFPRIO = 0x80546954 + SIOCBRDGSMA = 0x80146953 + SIOCBRDGSPRI = 0x80146950 + SIOCBRDGSPROTO = 0x8014695a + SIOCBRDGSTO = 0x80146945 + SIOCBRDGSTXHC = 0x80146959 + SIOCDELMULTI = 0x80206932 + SIOCDIFADDR = 0x80206919 + SIOCDIFGROUP = 0x80246989 + SIOCDIFPHYADDR = 0x80206949 + SIOCDLIFADDR = 0x8218691e + SIOCGETKALIVE = 0xc01869a4 + SIOCGETLABEL = 0x8020699a + SIOCGETPFLOW = 0xc02069fe + SIOCGETPFSYNC = 0xc02069f8 + SIOCGETSGCNT = 0xc0147534 + SIOCGETVIFCNT = 0xc0147533 + SIOCGETVLAN = 0xc0206990 + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = 0xc0206921 + SIOCGIFASYNCMAP = 0xc020697c + SIOCGIFBRDADDR = 0xc0206923 + SIOCGIFCONF = 0xc0086924 + SIOCGIFDATA = 0xc020691b + SIOCGIFDESCR = 0xc0206981 + SIOCGIFDSTADDR = 0xc0206922 + SIOCGIFFLAGS = 0xc0206911 + SIOCGIFGATTR = 0xc024698b + SIOCGIFGENERIC = 0xc020693a + SIOCGIFGMEMB = 0xc024698a + SIOCGIFGROUP = 0xc0246988 + SIOCGIFHARDMTU = 0xc02069a5 + SIOCGIFMEDIA = 0xc0286936 + SIOCGIFMETRIC = 0xc0206917 + SIOCGIFMTU = 0xc020697e + SIOCGIFNETMASK = 0xc0206925 + SIOCGIFPDSTADDR = 0xc0206948 + SIOCGIFPRIORITY = 0xc020699c + SIOCGIFPSRCADDR = 0xc0206947 + SIOCGIFRDOMAIN = 0xc02069a0 + SIOCGIFRTLABEL = 0xc0206983 + SIOCGIFRXR = 0x802069aa + SIOCGIFTIMESLOT = 0xc0206986 + SIOCGIFXFLAGS = 0xc020699e + SIOCGLIFADDR = 0xc218691d + SIOCGLIFPHYADDR = 0xc218694b + SIOCGLIFPHYRTABLE = 0xc02069a2 + SIOCGLIFPHYTTL = 0xc02069a9 + SIOCGLOWAT = 0x40047303 + SIOCGPGRP = 0x40047309 + SIOCGSPPPPARAMS = 0xc0206994 + SIOCGVH = 0xc02069f6 + SIOCGVNETID = 0xc02069a7 + SIOCIFCREATE = 0x8020697a + SIOCIFDESTROY = 0x80206979 + SIOCIFGCLONERS = 0xc00c6978 + SIOCSETKALIVE = 0x801869a3 + SIOCSETLABEL = 0x80206999 + SIOCSETPFLOW = 0x802069fd + SIOCSETPFSYNC = 0x802069f7 + SIOCSETVLAN = 0x8020698f + SIOCSHIWAT = 0x80047300 + SIOCSIFADDR = 0x8020690c + SIOCSIFASYNCMAP = 0x8020697d + SIOCSIFBRDADDR = 0x80206913 + SIOCSIFDESCR = 0x80206980 + SIOCSIFDSTADDR = 0x8020690e + SIOCSIFFLAGS = 0x80206910 + SIOCSIFGATTR = 0x8024698c + SIOCSIFGENERIC = 0x80206939 + SIOCSIFLLADDR = 0x8020691f + SIOCSIFMEDIA = 0xc0206935 + SIOCSIFMETRIC = 0x80206918 + SIOCSIFMTU = 0x8020697f + SIOCSIFNETMASK = 0x80206916 + SIOCSIFPHYADDR = 0x80406946 + SIOCSIFPRIORITY = 0x8020699b + SIOCSIFRDOMAIN = 0x8020699f + SIOCSIFRTLABEL = 0x80206982 + SIOCSIFTIMESLOT = 0x80206985 + SIOCSIFXFLAGS = 0x8020699d + SIOCSLIFPHYADDR = 0x8218694a + SIOCSLIFPHYRTABLE = 0x802069a1 + SIOCSLIFPHYTTL = 0x802069a8 + SIOCSLOWAT = 0x80047302 + SIOCSPGRP = 0x80047308 + SIOCSSPPPPARAMS = 0x80206993 + SIOCSVH = 0xc02069f5 + SIOCSVNETID = 0x802069a6 + SOCK_CLOEXEC = 0x8000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x4000 + SOCK_RAW = 0x3 + SOCK_RDM = 0x4 + SOCK_SEQPACKET = 0x5 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_BINDANY = 0x1000 + SO_BROADCAST = 0x20 + SO_DEBUG = 0x1 + SO_DONTROUTE = 0x10 + SO_ERROR = 0x1007 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_NETPROC = 0x1020 + SO_OOBINLINE = 0x100 + SO_PEERCRED = 0x1022 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVTIMEO = 0x1006 + SO_REUSEADDR = 0x4 + SO_REUSEPORT = 0x200 + SO_RTABLE = 0x1021 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_SPLICE = 0x1023 + SO_TIMESTAMP = 0x800 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + TCIFLUSH = 0x1 + TCIOFLUSH = 0x3 + TCOFLUSH = 0x2 + TCP_MAXBURST = 0x4 + TCP_MAXSEG = 0x2 + TCP_MAXWIN = 0xffff + TCP_MAX_SACK = 0x3 + TCP_MAX_WINSHIFT = 0xe + TCP_MD5SIG = 0x4 + TCP_MSS = 0x200 + TCP_NODELAY = 0x1 + TCP_NOPUSH = 0x10 + TCP_NSTATES = 0xb + TCP_SACK_ENABLE = 0x8 + TCSAFLUSH = 0x2 + TIOCCBRK = 0x2000747a + TIOCCDTR = 0x20007478 + TIOCCONS = 0x80047462 + TIOCDRAIN = 0x2000745e + TIOCEXCL = 0x2000740d + TIOCEXT = 0x80047460 + TIOCFLAG_CLOCAL = 0x2 + TIOCFLAG_CRTSCTS = 0x4 + TIOCFLAG_MDMBUF = 0x8 + TIOCFLAG_PPS = 0x10 + TIOCFLAG_SOFTCAR = 0x1 + TIOCFLUSH = 0x80047410 + TIOCGETA = 0x402c7413 + TIOCGETD = 0x4004741a + TIOCGFLAGS = 0x4004745d + TIOCGPGRP = 0x40047477 + TIOCGSID = 0x40047463 + TIOCGTSTAMP = 0x400c745b + TIOCGWINSZ = 0x40087468 + TIOCMBIC = 0x8004746b + TIOCMBIS = 0x8004746c + TIOCMGET = 0x4004746a + TIOCMODG = 0x4004746a + TIOCMODS = 0x8004746d + TIOCMSET = 0x8004746d + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x20007471 + TIOCNXCL = 0x2000740e + TIOCOUTQ = 0x40047473 + TIOCPKT = 0x80047470 + TIOCPKT_DATA = 0x0 + TIOCPKT_DOSTOP = 0x20 + TIOCPKT_FLUSHREAD = 0x1 + TIOCPKT_FLUSHWRITE = 0x2 + TIOCPKT_IOCTL = 0x40 + TIOCPKT_NOSTOP = 0x10 + TIOCPKT_START = 0x8 + TIOCPKT_STOP = 0x4 + TIOCREMOTE = 0x80047469 + TIOCSBRK = 0x2000747b + TIOCSCTTY = 0x20007461 + TIOCSDTR = 0x20007479 + TIOCSETA = 0x802c7414 + TIOCSETAF = 0x802c7416 + TIOCSETAW = 0x802c7415 + TIOCSETD = 0x8004741b + TIOCSFLAGS = 0x8004745c + TIOCSIG = 0x8004745f + TIOCSPGRP = 0x80047476 + TIOCSTART = 0x2000746e + TIOCSTAT = 0x80047465 + TIOCSTI = 0x80017472 + TIOCSTOP = 0x2000746f + TIOCSTSTAMP = 0x8008745a + TIOCSWINSZ = 0x80087467 + TIOCUCNTL = 0x80047466 + TOSTOP = 0x400000 + VDISCARD = 0xf + VDSUSP = 0xb + VEOF = 0x0 + VEOL = 0x1 + VEOL2 = 0x2 + VERASE = 0x3 + VINTR = 0x8 + VKILL = 0x5 + VLNEXT = 0xe + VMIN = 0x10 + VQUIT = 0x9 + VREPRINT = 0x6 + VSTART = 0xc + VSTATUS = 0x12 + VSTOP = 0xd + VSUSP = 0xa + VTIME = 0x11 + VWERASE = 0x4 + WALTSIG = 0x4 + WCONTINUED = 0x8 + WCOREFLAG = 0x80 + WNOHANG = 0x1 + WUNTRACED = 0x2 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x30) + EADDRNOTAVAIL = syscall.Errno(0x31) + EAFNOSUPPORT = syscall.Errno(0x2f) + EAGAIN = syscall.Errno(0x23) + EALREADY = syscall.Errno(0x25) + EAUTH = syscall.Errno(0x50) + EBADF = syscall.Errno(0x9) + EBADRPC = syscall.Errno(0x48) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x58) + ECHILD = syscall.Errno(0xa) + ECONNABORTED = syscall.Errno(0x35) + ECONNREFUSED = syscall.Errno(0x3d) + ECONNRESET = syscall.Errno(0x36) + EDEADLK = syscall.Errno(0xb) + EDESTADDRREQ = syscall.Errno(0x27) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x45) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EFTYPE = syscall.Errno(0x4f) + EHOSTDOWN = syscall.Errno(0x40) + EHOSTUNREACH = syscall.Errno(0x41) + EIDRM = syscall.Errno(0x59) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x24) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EIPSEC = syscall.Errno(0x52) + EISCONN = syscall.Errno(0x38) + EISDIR = syscall.Errno(0x15) + ELAST = syscall.Errno(0x5b) + ELOOP = syscall.Errno(0x3e) + EMEDIUMTYPE = syscall.Errno(0x56) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x28) + ENAMETOOLONG = syscall.Errno(0x3f) + ENEEDAUTH = syscall.Errno(0x51) + ENETDOWN = syscall.Errno(0x32) + ENETRESET = syscall.Errno(0x34) + ENETUNREACH = syscall.Errno(0x33) + ENFILE = syscall.Errno(0x17) + ENOATTR = syscall.Errno(0x53) + ENOBUFS = syscall.Errno(0x37) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x4d) + ENOMEDIUM = syscall.Errno(0x55) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x5a) + ENOPROTOOPT = syscall.Errno(0x2a) + ENOSPC = syscall.Errno(0x1c) + ENOSYS = syscall.Errno(0x4e) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x39) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x42) + ENOTSOCK = syscall.Errno(0x26) + ENOTSUP = syscall.Errno(0x5b) + ENOTTY = syscall.Errno(0x19) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x2d) + EOVERFLOW = syscall.Errno(0x57) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x2e) + EPIPE = syscall.Errno(0x20) + EPROCLIM = syscall.Errno(0x43) + EPROCUNAVAIL = syscall.Errno(0x4c) + EPROGMISMATCH = syscall.Errno(0x4b) + EPROGUNAVAIL = syscall.Errno(0x4a) + EPROTONOSUPPORT = syscall.Errno(0x2b) + EPROTOTYPE = syscall.Errno(0x29) + ERANGE = syscall.Errno(0x22) + EREMOTE = syscall.Errno(0x47) + EROFS = syscall.Errno(0x1e) + ERPCMISMATCH = syscall.Errno(0x49) + ESHUTDOWN = syscall.Errno(0x3a) + ESOCKTNOSUPPORT = syscall.Errno(0x2c) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESTALE = syscall.Errno(0x46) + ETIMEDOUT = syscall.Errno(0x3c) + ETOOMANYREFS = syscall.Errno(0x3b) + ETXTBSY = syscall.Errno(0x1a) + EUSERS = syscall.Errno(0x44) + EWOULDBLOCK = syscall.Errno(0x23) + EXDEV = syscall.Errno(0x12) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCHLD = syscall.Signal(0x14) + SIGCONT = syscall.Signal(0x13) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x1d) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x17) + SIGIOT = syscall.Signal(0x6) + SIGKILL = syscall.Signal(0x9) + SIGPIPE = syscall.Signal(0xd) + SIGPROF = syscall.Signal(0x1b) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x11) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHR = syscall.Signal(0x20) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x12) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x10) + SIGUSR1 = syscall.Signal(0x1e) + SIGUSR2 = syscall.Signal(0x1f) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errors = [...]string{ + 1: "operation not permitted", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "input/output error", + 6: "device not configured", + 7: "argument list too long", + 8: "exec format error", + 9: "bad file descriptor", + 10: "no child processes", + 11: "resource deadlock avoided", + 12: "cannot allocate memory", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "operation not supported by device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "too many open files in system", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "numerical argument out of domain", + 34: "result too large", + 35: "resource temporarily unavailable", + 36: "operation now in progress", + 37: "operation already in progress", + 38: "socket operation on non-socket", + 39: "destination address required", + 40: "message too long", + 41: "protocol wrong type for socket", + 42: "protocol not available", + 43: "protocol not supported", + 44: "socket type not supported", + 45: "operation not supported", + 46: "protocol family not supported", + 47: "address family not supported by protocol family", + 48: "address already in use", + 49: "can't assign requested address", + 50: "network is down", + 51: "network is unreachable", + 52: "network dropped connection on reset", + 53: "software caused connection abort", + 54: "connection reset by peer", + 55: "no buffer space available", + 56: "socket is already connected", + 57: "socket is not connected", + 58: "can't send after socket shutdown", + 59: "too many references: can't splice", + 60: "connection timed out", + 61: "connection refused", + 62: "too many levels of symbolic links", + 63: "file name too long", + 64: "host is down", + 65: "no route to host", + 66: "directory not empty", + 67: "too many processes", + 68: "too many users", + 69: "disc quota exceeded", + 70: "stale NFS file handle", + 71: "too many levels of remote in path", + 72: "RPC struct is bad", + 73: "RPC version wrong", + 74: "RPC prog. not avail", + 75: "program version wrong", + 76: "bad procedure for program", + 77: "no locks available", + 78: "function not implemented", + 79: "inappropriate file type or format", + 80: "authentication error", + 81: "need authenticator", + 82: "IPsec processing failure", + 83: "attribute not found", + 84: "illegal byte sequence", + 85: "no medium found", + 86: "wrong medium type", + 87: "value too large to be stored in data type", + 88: "operation canceled", + 89: "identifier removed", + 90: "no message of desired type", + 91: "not supported", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/BPT trap", + 6: "abort trap", + 7: "EMT trap", + 8: "floating point exception", + 9: "killed", + 10: "bus error", + 11: "segmentation fault", + 12: "bad system call", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", + 16: "urgent I/O condition", + 17: "stopped (signal)", + 18: "stopped", + 19: "continued", + 20: "child exited", + 21: "stopped (tty input)", + 22: "stopped (tty output)", + 23: "I/O possible", + 24: "cputime limit exceeded", + 25: "filesize limit exceeded", + 26: "virtual timer expired", + 27: "profiling timer expired", + 28: "window size changes", + 29: "information request", + 30: "user defined signal 1", + 31: "user defined signal 2", + 32: "thread AST", +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go new file mode 100644 index 0000000..09eedb0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_solaris_amd64.go @@ -0,0 +1,1489 @@ +// mkerrors.sh -m64 +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,solaris + +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs -- -m64 _const.go + +package unix + +import "syscall" + +const ( + AF_802 = 0x12 + AF_APPLETALK = 0x10 + AF_CCITT = 0xa + AF_CHAOS = 0x5 + AF_DATAKIT = 0x9 + AF_DECnet = 0xc + AF_DLI = 0xd + AF_ECMA = 0x8 + AF_FILE = 0x1 + AF_GOSIP = 0x16 + AF_HYLINK = 0xf + AF_IMPLINK = 0x3 + AF_INET = 0x2 + AF_INET6 = 0x1a + AF_INET_OFFLOAD = 0x1e + AF_IPX = 0x17 + AF_KEY = 0x1b + AF_LAT = 0xe + AF_LINK = 0x19 + AF_LOCAL = 0x1 + AF_MAX = 0x20 + AF_NBS = 0x7 + AF_NCA = 0x1c + AF_NIT = 0x11 + AF_NS = 0x6 + AF_OSI = 0x13 + AF_OSINET = 0x15 + AF_PACKET = 0x20 + AF_POLICY = 0x1d + AF_PUP = 0x4 + AF_ROUTE = 0x18 + AF_SNA = 0xb + AF_TRILL = 0x1f + AF_UNIX = 0x1 + AF_UNSPEC = 0x0 + AF_X25 = 0x14 + ARPHRD_ARCNET = 0x7 + ARPHRD_ATM = 0x10 + ARPHRD_AX25 = 0x3 + ARPHRD_CHAOS = 0x5 + ARPHRD_EETHER = 0x2 + ARPHRD_ETHER = 0x1 + ARPHRD_FC = 0x12 + ARPHRD_FRAME = 0xf + ARPHRD_HDLC = 0x11 + ARPHRD_IB = 0x20 + ARPHRD_IEEE802 = 0x6 + ARPHRD_IPATM = 0x13 + ARPHRD_METRICOM = 0x17 + ARPHRD_TUNNEL = 0x1f + B0 = 0x0 + B110 = 0x3 + B115200 = 0x12 + B1200 = 0x9 + B134 = 0x4 + B150 = 0x5 + B153600 = 0x13 + B1800 = 0xa + B19200 = 0xe + B200 = 0x6 + B230400 = 0x14 + B2400 = 0xb + B300 = 0x7 + B307200 = 0x15 + B38400 = 0xf + B460800 = 0x16 + B4800 = 0xc + B50 = 0x1 + B57600 = 0x10 + B600 = 0x8 + B75 = 0x2 + B76800 = 0x11 + B921600 = 0x17 + B9600 = 0xd + BIOCFLUSH = 0x20004268 + BIOCGBLEN = 0x40044266 + BIOCGDLT = 0x4004426a + BIOCGDLTLIST = -0x3fefbd89 + BIOCGDLTLIST32 = -0x3ff7bd89 + BIOCGETIF = 0x4020426b + BIOCGETLIF = 0x4078426b + BIOCGHDRCMPLT = 0x40044274 + BIOCGRTIMEOUT = 0x4010427b + BIOCGRTIMEOUT32 = 0x4008427b + BIOCGSEESENT = 0x40044278 + BIOCGSTATS = 0x4080426f + BIOCGSTATSOLD = 0x4008426f + BIOCIMMEDIATE = -0x7ffbbd90 + BIOCPROMISC = 0x20004269 + BIOCSBLEN = -0x3ffbbd9a + BIOCSDLT = -0x7ffbbd8a + BIOCSETF = -0x7fefbd99 + BIOCSETF32 = -0x7ff7bd99 + BIOCSETIF = -0x7fdfbd94 + BIOCSETLIF = -0x7f87bd94 + BIOCSHDRCMPLT = -0x7ffbbd8b + BIOCSRTIMEOUT = -0x7fefbd86 + BIOCSRTIMEOUT32 = -0x7ff7bd86 + BIOCSSEESENT = -0x7ffbbd87 + BIOCSTCPF = -0x7fefbd8e + BIOCSUDPF = -0x7fefbd8d + BIOCVERSION = 0x40044271 + BPF_A = 0x10 + BPF_ABS = 0x20 + BPF_ADD = 0x0 + BPF_ALIGNMENT = 0x4 + BPF_ALU = 0x4 + BPF_AND = 0x50 + BPF_B = 0x10 + BPF_DFLTBUFSIZE = 0x100000 + BPF_DIV = 0x30 + BPF_H = 0x8 + BPF_IMM = 0x0 + BPF_IND = 0x40 + BPF_JA = 0x0 + BPF_JEQ = 0x10 + BPF_JGE = 0x30 + BPF_JGT = 0x20 + BPF_JMP = 0x5 + BPF_JSET = 0x40 + BPF_K = 0x0 + BPF_LD = 0x0 + BPF_LDX = 0x1 + BPF_LEN = 0x80 + BPF_LSH = 0x60 + BPF_MAJOR_VERSION = 0x1 + BPF_MAXBUFSIZE = 0x1000000 + BPF_MAXINSNS = 0x200 + BPF_MEM = 0x60 + BPF_MEMWORDS = 0x10 + BPF_MINBUFSIZE = 0x20 + BPF_MINOR_VERSION = 0x1 + BPF_MISC = 0x7 + BPF_MSH = 0xa0 + BPF_MUL = 0x20 + BPF_NEG = 0x80 + BPF_OR = 0x40 + BPF_RELEASE = 0x30bb6 + BPF_RET = 0x6 + BPF_RSH = 0x70 + BPF_ST = 0x2 + BPF_STX = 0x3 + BPF_SUB = 0x10 + BPF_TAX = 0x0 + BPF_TXA = 0x80 + BPF_W = 0x0 + BPF_X = 0x8 + BRKINT = 0x2 + BS0 = 0x0 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0xf + CFLUSH = 0xf + CIBAUD = 0xf0000 + CLOCAL = 0x800 + CLOCK_HIGHRES = 0x4 + CLOCK_LEVEL = 0xa + CLOCK_MONOTONIC = 0x4 + CLOCK_PROCESS_CPUTIME_ID = 0x5 + CLOCK_PROF = 0x2 + CLOCK_REALTIME = 0x3 + CLOCK_THREAD_CPUTIME_ID = 0x2 + CLOCK_VIRTUAL = 0x1 + CR0 = 0x0 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CRTSCTS = 0x80000000 + CS5 = 0x0 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTART = 0x11 + CSTATUS = 0x14 + CSTOP = 0x13 + CSTOPB = 0x40 + CSUSP = 0x1a + CSWTCH = 0x1a + DLT_AIRONET_HEADER = 0x78 + DLT_APPLE_IP_OVER_IEEE1394 = 0x8a + DLT_ARCNET = 0x7 + DLT_ARCNET_LINUX = 0x81 + DLT_ATM_CLIP = 0x13 + DLT_ATM_RFC1483 = 0xb + DLT_AURORA = 0x7e + DLT_AX25 = 0x3 + DLT_BACNET_MS_TP = 0xa5 + DLT_CHAOS = 0x5 + DLT_CISCO_IOS = 0x76 + DLT_C_HDLC = 0x68 + DLT_DOCSIS = 0x8f + DLT_ECONET = 0x73 + DLT_EN10MB = 0x1 + DLT_EN3MB = 0x2 + DLT_ENC = 0x6d + DLT_ERF_ETH = 0xaf + DLT_ERF_POS = 0xb0 + DLT_FDDI = 0xa + DLT_FRELAY = 0x6b + DLT_GCOM_SERIAL = 0xad + DLT_GCOM_T1E1 = 0xac + DLT_GPF_F = 0xab + DLT_GPF_T = 0xaa + DLT_GPRS_LLC = 0xa9 + DLT_HDLC = 0x10 + DLT_HHDLC = 0x79 + DLT_HIPPI = 0xf + DLT_IBM_SN = 0x92 + DLT_IBM_SP = 0x91 + DLT_IEEE802 = 0x6 + DLT_IEEE802_11 = 0x69 + DLT_IEEE802_11_RADIO = 0x7f + DLT_IEEE802_11_RADIO_AVS = 0xa3 + DLT_IPNET = 0xe2 + DLT_IPOIB = 0xa2 + DLT_IP_OVER_FC = 0x7a + DLT_JUNIPER_ATM1 = 0x89 + DLT_JUNIPER_ATM2 = 0x87 + DLT_JUNIPER_CHDLC = 0xb5 + DLT_JUNIPER_ES = 0x84 + DLT_JUNIPER_ETHER = 0xb2 + DLT_JUNIPER_FRELAY = 0xb4 + DLT_JUNIPER_GGSN = 0x85 + DLT_JUNIPER_MFR = 0x86 + DLT_JUNIPER_MLFR = 0x83 + DLT_JUNIPER_MLPPP = 0x82 + DLT_JUNIPER_MONITOR = 0xa4 + DLT_JUNIPER_PIC_PEER = 0xae + DLT_JUNIPER_PPP = 0xb3 + DLT_JUNIPER_PPPOE = 0xa7 + DLT_JUNIPER_PPPOE_ATM = 0xa8 + DLT_JUNIPER_SERVICES = 0x88 + DLT_LINUX_IRDA = 0x90 + DLT_LINUX_LAPD = 0xb1 + DLT_LINUX_SLL = 0x71 + DLT_LOOP = 0x6c + DLT_LTALK = 0x72 + DLT_MTP2 = 0x8c + DLT_MTP2_WITH_PHDR = 0x8b + DLT_MTP3 = 0x8d + DLT_NULL = 0x0 + DLT_PCI_EXP = 0x7d + DLT_PFLOG = 0x75 + DLT_PFSYNC = 0x12 + DLT_PPP = 0x9 + DLT_PPP_BSDOS = 0xe + DLT_PPP_PPPD = 0xa6 + DLT_PRISM_HEADER = 0x77 + DLT_PRONET = 0x4 + DLT_RAW = 0xc + DLT_RAWAF_MASK = 0x2240000 + DLT_RIO = 0x7c + DLT_SCCP = 0x8e + DLT_SLIP = 0x8 + DLT_SLIP_BSDOS = 0xd + DLT_SUNATM = 0x7b + DLT_SYMANTEC_FIREWALL = 0x63 + DLT_TZSP = 0x80 + ECHO = 0x8 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EMPTY_SET = 0x0 + EMT_CPCOVF = 0x1 + EQUALITY_CHECK = 0x0 + EXTA = 0xe + EXTB = 0xf + FD_CLOEXEC = 0x1 + FD_NFDBITS = 0x40 + FD_SETSIZE = 0x10000 + FF0 = 0x0 + FF1 = 0x8000 + FFDLY = 0x8000 + FLUSHALL = 0x1 + FLUSHDATA = 0x0 + FLUSHO = 0x2000 + F_ALLOCSP = 0xa + F_ALLOCSP64 = 0xa + F_BADFD = 0x2e + F_BLKSIZE = 0x13 + F_BLOCKS = 0x12 + F_CHKFL = 0x8 + F_COMPAT = 0x8 + F_DUP2FD = 0x9 + F_DUP2FD_CLOEXEC = 0x24 + F_DUPFD = 0x0 + F_DUPFD_CLOEXEC = 0x25 + F_FLOCK = 0x35 + F_FLOCK64 = 0x35 + F_FLOCKW = 0x36 + F_FLOCKW64 = 0x36 + F_FREESP = 0xb + F_FREESP64 = 0xb + F_GETFD = 0x1 + F_GETFL = 0x3 + F_GETLK = 0xe + F_GETLK64 = 0xe + F_GETOWN = 0x17 + F_GETXFL = 0x2d + F_HASREMOTELOCKS = 0x1a + F_ISSTREAM = 0xd + F_MANDDNY = 0x10 + F_MDACC = 0x20 + F_NODNY = 0x0 + F_NPRIV = 0x10 + F_OFD_GETLK = 0x2f + F_OFD_GETLK64 = 0x2f + F_OFD_SETLK = 0x30 + F_OFD_SETLK64 = 0x30 + F_OFD_SETLKW = 0x31 + F_OFD_SETLKW64 = 0x31 + F_PRIV = 0xf + F_QUOTACTL = 0x11 + F_RDACC = 0x1 + F_RDDNY = 0x1 + F_RDLCK = 0x1 + F_REVOKE = 0x19 + F_RMACC = 0x4 + F_RMDNY = 0x4 + F_RWACC = 0x3 + F_RWDNY = 0x3 + F_SETFD = 0x2 + F_SETFL = 0x4 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLK64_NBMAND = 0x2a + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETLK_NBMAND = 0x2a + F_SETOWN = 0x18 + F_SHARE = 0x28 + F_SHARE_NBMAND = 0x2b + F_UNLCK = 0x3 + F_UNLKSYS = 0x4 + F_UNSHARE = 0x29 + F_WRACC = 0x2 + F_WRDNY = 0x2 + F_WRLCK = 0x2 + HUPCL = 0x400 + IBSHIFT = 0x10 + ICANON = 0x2 + ICRNL = 0x100 + IEXTEN = 0x8000 + IFF_ADDRCONF = 0x80000 + IFF_ALLMULTI = 0x200 + IFF_ANYCAST = 0x400000 + IFF_BROADCAST = 0x2 + IFF_CANTCHANGE = 0x7f203003b5a + IFF_COS_ENABLED = 0x200000000 + IFF_DEBUG = 0x4 + IFF_DEPRECATED = 0x40000 + IFF_DHCPRUNNING = 0x4000 + IFF_DUPLICATE = 0x4000000000 + IFF_FAILED = 0x10000000 + IFF_FIXEDMTU = 0x1000000000 + IFF_INACTIVE = 0x40000000 + IFF_INTELLIGENT = 0x400 + IFF_IPMP = 0x8000000000 + IFF_IPMP_CANTCHANGE = 0x10000000 + IFF_IPMP_INVALID = 0x1ec200080 + IFF_IPV4 = 0x1000000 + IFF_IPV6 = 0x2000000 + IFF_L3PROTECT = 0x40000000000 + IFF_LOOPBACK = 0x8 + IFF_MULTICAST = 0x800 + IFF_MULTI_BCAST = 0x1000 + IFF_NOACCEPT = 0x4000000 + IFF_NOARP = 0x80 + IFF_NOFAILOVER = 0x8000000 + IFF_NOLINKLOCAL = 0x20000000000 + IFF_NOLOCAL = 0x20000 + IFF_NONUD = 0x200000 + IFF_NORTEXCH = 0x800000 + IFF_NOTRAILERS = 0x20 + IFF_NOXMIT = 0x10000 + IFF_OFFLINE = 0x80000000 + IFF_POINTOPOINT = 0x10 + IFF_PREFERRED = 0x400000000 + IFF_PRIVATE = 0x8000 + IFF_PROMISC = 0x100 + IFF_ROUTER = 0x100000 + IFF_RUNNING = 0x40 + IFF_STANDBY = 0x20000000 + IFF_TEMPORARY = 0x800000000 + IFF_UNNUMBERED = 0x2000 + IFF_UP = 0x1 + IFF_VIRTUAL = 0x2000000000 + IFF_VRRP = 0x10000000000 + IFF_XRESOLV = 0x100000000 + IFNAMSIZ = 0x10 + IFT_1822 = 0x2 + IFT_6TO4 = 0xca + IFT_AAL5 = 0x31 + IFT_ARCNET = 0x23 + IFT_ARCNETPLUS = 0x24 + IFT_ATM = 0x25 + IFT_CEPT = 0x13 + IFT_DS3 = 0x1e + IFT_EON = 0x19 + IFT_ETHER = 0x6 + IFT_FDDI = 0xf + IFT_FRELAY = 0x20 + IFT_FRELAYDCE = 0x2c + IFT_HDH1822 = 0x3 + IFT_HIPPI = 0x2f + IFT_HSSI = 0x2e + IFT_HY = 0xe + IFT_IB = 0xc7 + IFT_IPV4 = 0xc8 + IFT_IPV6 = 0xc9 + IFT_ISDNBASIC = 0x14 + IFT_ISDNPRIMARY = 0x15 + IFT_ISO88022LLC = 0x29 + IFT_ISO88023 = 0x7 + IFT_ISO88024 = 0x8 + IFT_ISO88025 = 0x9 + IFT_ISO88026 = 0xa + IFT_LAPB = 0x10 + IFT_LOCALTALK = 0x2a + IFT_LOOP = 0x18 + IFT_MIOX25 = 0x26 + IFT_MODEM = 0x30 + IFT_NSIP = 0x1b + IFT_OTHER = 0x1 + IFT_P10 = 0xc + IFT_P80 = 0xd + IFT_PARA = 0x22 + IFT_PPP = 0x17 + IFT_PROPMUX = 0x36 + IFT_PROPVIRTUAL = 0x35 + IFT_PTPSERIAL = 0x16 + IFT_RS232 = 0x21 + IFT_SDLC = 0x11 + IFT_SIP = 0x1f + IFT_SLIP = 0x1c + IFT_SMDSDXI = 0x2b + IFT_SMDSICIP = 0x34 + IFT_SONET = 0x27 + IFT_SONETPATH = 0x32 + IFT_SONETVT = 0x33 + IFT_STARLAN = 0xb + IFT_T1 = 0x12 + IFT_ULTRA = 0x1d + IFT_V35 = 0x2d + IFT_X25 = 0x5 + IFT_X25DDN = 0x4 + IFT_X25PLE = 0x28 + IFT_XETHER = 0x1a + IGNBRK = 0x1 + IGNCR = 0x80 + IGNPAR = 0x4 + IMAXBEL = 0x2000 + INLCR = 0x40 + INPCK = 0x10 + IN_AUTOCONF_MASK = 0xffff0000 + IN_AUTOCONF_NET = 0xa9fe0000 + IN_CLASSA_HOST = 0xffffff + IN_CLASSA_MAX = 0x80 + IN_CLASSA_NET = 0xff000000 + IN_CLASSA_NSHIFT = 0x18 + IN_CLASSB_HOST = 0xffff + IN_CLASSB_MAX = 0x10000 + IN_CLASSB_NET = 0xffff0000 + IN_CLASSB_NSHIFT = 0x10 + IN_CLASSC_HOST = 0xff + IN_CLASSC_NET = 0xffffff00 + IN_CLASSC_NSHIFT = 0x8 + IN_CLASSD_HOST = 0xfffffff + IN_CLASSD_NET = 0xf0000000 + IN_CLASSD_NSHIFT = 0x1c + IN_CLASSE_NET = 0xffffffff + IN_LOOPBACKNET = 0x7f + IN_PRIVATE12_MASK = 0xfff00000 + IN_PRIVATE12_NET = 0xac100000 + IN_PRIVATE16_MASK = 0xffff0000 + IN_PRIVATE16_NET = 0xc0a80000 + IN_PRIVATE8_MASK = 0xff000000 + IN_PRIVATE8_NET = 0xa000000 + IPPROTO_AH = 0x33 + IPPROTO_DSTOPTS = 0x3c + IPPROTO_EGP = 0x8 + IPPROTO_ENCAP = 0x4 + IPPROTO_EON = 0x50 + IPPROTO_ESP = 0x32 + IPPROTO_FRAGMENT = 0x2c + IPPROTO_GGP = 0x3 + IPPROTO_HELLO = 0x3f + IPPROTO_HOPOPTS = 0x0 + IPPROTO_ICMP = 0x1 + IPPROTO_ICMPV6 = 0x3a + IPPROTO_IDP = 0x16 + IPPROTO_IGMP = 0x2 + IPPROTO_IP = 0x0 + IPPROTO_IPV6 = 0x29 + IPPROTO_MAX = 0x100 + IPPROTO_ND = 0x4d + IPPROTO_NONE = 0x3b + IPPROTO_OSPF = 0x59 + IPPROTO_PIM = 0x67 + IPPROTO_PUP = 0xc + IPPROTO_RAW = 0xff + IPPROTO_ROUTING = 0x2b + IPPROTO_RSVP = 0x2e + IPPROTO_SCTP = 0x84 + IPPROTO_TCP = 0x6 + IPPROTO_UDP = 0x11 + IPV6_ADD_MEMBERSHIP = 0x9 + IPV6_BOUND_IF = 0x41 + IPV6_CHECKSUM = 0x18 + IPV6_DONTFRAG = 0x21 + IPV6_DROP_MEMBERSHIP = 0xa + IPV6_DSTOPTS = 0xf + IPV6_FLOWINFO_FLOWLABEL = 0xffff0f00 + IPV6_FLOWINFO_TCLASS = 0xf00f + IPV6_HOPLIMIT = 0xc + IPV6_HOPOPTS = 0xe + IPV6_JOIN_GROUP = 0x9 + IPV6_LEAVE_GROUP = 0xa + IPV6_MULTICAST_HOPS = 0x7 + IPV6_MULTICAST_IF = 0x6 + IPV6_MULTICAST_LOOP = 0x8 + IPV6_NEXTHOP = 0xd + IPV6_PAD1_OPT = 0x0 + IPV6_PATHMTU = 0x25 + IPV6_PKTINFO = 0xb + IPV6_PREFER_SRC_CGA = 0x20 + IPV6_PREFER_SRC_CGADEFAULT = 0x10 + IPV6_PREFER_SRC_CGAMASK = 0x30 + IPV6_PREFER_SRC_COA = 0x2 + IPV6_PREFER_SRC_DEFAULT = 0x15 + IPV6_PREFER_SRC_HOME = 0x1 + IPV6_PREFER_SRC_MASK = 0x3f + IPV6_PREFER_SRC_MIPDEFAULT = 0x1 + IPV6_PREFER_SRC_MIPMASK = 0x3 + IPV6_PREFER_SRC_NONCGA = 0x10 + IPV6_PREFER_SRC_PUBLIC = 0x4 + IPV6_PREFER_SRC_TMP = 0x8 + IPV6_PREFER_SRC_TMPDEFAULT = 0x4 + IPV6_PREFER_SRC_TMPMASK = 0xc + IPV6_RECVDSTOPTS = 0x28 + IPV6_RECVHOPLIMIT = 0x13 + IPV6_RECVHOPOPTS = 0x14 + IPV6_RECVPATHMTU = 0x24 + IPV6_RECVPKTINFO = 0x12 + IPV6_RECVRTHDR = 0x16 + IPV6_RECVRTHDRDSTOPTS = 0x17 + IPV6_RECVTCLASS = 0x19 + IPV6_RTHDR = 0x10 + IPV6_RTHDRDSTOPTS = 0x11 + IPV6_RTHDR_TYPE_0 = 0x0 + IPV6_SEC_OPT = 0x22 + IPV6_SRC_PREFERENCES = 0x23 + IPV6_TCLASS = 0x26 + IPV6_UNICAST_HOPS = 0x5 + IPV6_UNSPEC_SRC = 0x42 + IPV6_USE_MIN_MTU = 0x20 + IPV6_V6ONLY = 0x27 + IP_ADD_MEMBERSHIP = 0x13 + IP_ADD_SOURCE_MEMBERSHIP = 0x17 + IP_BLOCK_SOURCE = 0x15 + IP_BOUND_IF = 0x41 + IP_BROADCAST = 0x106 + IP_BROADCAST_TTL = 0x43 + IP_DEFAULT_MULTICAST_LOOP = 0x1 + IP_DEFAULT_MULTICAST_TTL = 0x1 + IP_DF = 0x4000 + IP_DHCPINIT_IF = 0x45 + IP_DONTFRAG = 0x1b + IP_DONTROUTE = 0x105 + IP_DROP_MEMBERSHIP = 0x14 + IP_DROP_SOURCE_MEMBERSHIP = 0x18 + IP_HDRINCL = 0x2 + IP_MAXPACKET = 0xffff + IP_MF = 0x2000 + IP_MSS = 0x240 + IP_MULTICAST_IF = 0x10 + IP_MULTICAST_LOOP = 0x12 + IP_MULTICAST_TTL = 0x11 + IP_NEXTHOP = 0x19 + IP_OPTIONS = 0x1 + IP_PKTINFO = 0x1a + IP_RECVDSTADDR = 0x7 + IP_RECVIF = 0x9 + IP_RECVOPTS = 0x5 + IP_RECVPKTINFO = 0x1a + IP_RECVRETOPTS = 0x6 + IP_RECVSLLA = 0xa + IP_RECVTTL = 0xb + IP_RETOPTS = 0x8 + IP_REUSEADDR = 0x104 + IP_SEC_OPT = 0x22 + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_UNBLOCK_SOURCE = 0x16 + IP_UNSPEC_SRC = 0x42 + ISIG = 0x1 + ISTRIP = 0x20 + IUCLC = 0x200 + IXANY = 0x800 + IXOFF = 0x1000 + IXON = 0x400 + LOCK_EX = 0x2 + LOCK_NB = 0x4 + LOCK_SH = 0x1 + LOCK_UN = 0x8 + MADV_ACCESS_DEFAULT = 0x6 + MADV_ACCESS_LWP = 0x7 + MADV_ACCESS_MANY = 0x8 + MADV_DONTNEED = 0x4 + MADV_FREE = 0x5 + MADV_NORMAL = 0x0 + MADV_PURGE = 0x9 + MADV_RANDOM = 0x1 + MADV_SEQUENTIAL = 0x2 + MADV_WILLNEED = 0x3 + MAP_32BIT = 0x80 + MAP_ALIGN = 0x200 + MAP_ANON = 0x100 + MAP_ANONYMOUS = 0x100 + MAP_FILE = 0x0 + MAP_FIXED = 0x10 + MAP_INITDATA = 0x800 + MAP_NORESERVE = 0x40 + MAP_PRIVATE = 0x2 + MAP_RENAME = 0x20 + MAP_SHARED = 0x1 + MAP_TEXT = 0x400 + MAP_TYPE = 0xf + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MSG_CTRUNC = 0x10 + MSG_DONTROUTE = 0x4 + MSG_DONTWAIT = 0x80 + MSG_DUPCTRL = 0x800 + MSG_EOR = 0x8 + MSG_MAXIOVLEN = 0x10 + MSG_NOTIFICATION = 0x100 + MSG_OOB = 0x1 + MSG_PEEK = 0x2 + MSG_TRUNC = 0x20 + MSG_WAITALL = 0x40 + MSG_XPG4_2 = 0x8000 + MS_ASYNC = 0x1 + MS_INVALIDATE = 0x2 + MS_OLDSYNC = 0x0 + MS_SYNC = 0x4 + M_FLUSH = 0x86 + NAME_MAX = 0xff + NEWDEV = 0x1 + NL0 = 0x0 + NL1 = 0x100 + NLDLY = 0x100 + NOFLSH = 0x80 + OCRNL = 0x8 + OFDEL = 0x80 + OFILL = 0x40 + OLCUC = 0x2 + OLDDEV = 0x0 + ONBITSMAJOR = 0x7 + ONBITSMINOR = 0x8 + ONLCR = 0x4 + ONLRET = 0x20 + ONOCR = 0x10 + OPENFAIL = -0x1 + OPOST = 0x1 + O_ACCMODE = 0x600003 + O_APPEND = 0x8 + O_CLOEXEC = 0x800000 + O_CREAT = 0x100 + O_DSYNC = 0x40 + O_EXCL = 0x400 + O_EXEC = 0x400000 + O_LARGEFILE = 0x2000 + O_NDELAY = 0x4 + O_NOCTTY = 0x800 + O_NOFOLLOW = 0x20000 + O_NOLINKS = 0x40000 + O_NONBLOCK = 0x80 + O_RDONLY = 0x0 + O_RDWR = 0x2 + O_RSYNC = 0x8000 + O_SEARCH = 0x200000 + O_SIOCGIFCONF = -0x3ff796ec + O_SIOCGLIFCONF = -0x3fef9688 + O_SYNC = 0x10 + O_TRUNC = 0x200 + O_WRONLY = 0x1 + O_XATTR = 0x4000 + PARENB = 0x100 + PAREXT = 0x100000 + PARMRK = 0x8 + PARODD = 0x200 + PENDIN = 0x4000 + PRIO_PGRP = 0x1 + PRIO_PROCESS = 0x0 + PRIO_USER = 0x2 + PROT_EXEC = 0x4 + PROT_NONE = 0x0 + PROT_READ = 0x1 + PROT_WRITE = 0x2 + RLIMIT_AS = 0x6 + RLIMIT_CORE = 0x4 + RLIMIT_CPU = 0x0 + RLIMIT_DATA = 0x2 + RLIMIT_FSIZE = 0x1 + RLIMIT_NOFILE = 0x5 + RLIMIT_STACK = 0x3 + RLIM_INFINITY = -0x3 + RTAX_AUTHOR = 0x6 + RTAX_BRD = 0x7 + RTAX_DST = 0x0 + RTAX_GATEWAY = 0x1 + RTAX_GENMASK = 0x3 + RTAX_IFA = 0x5 + RTAX_IFP = 0x4 + RTAX_MAX = 0x9 + RTAX_NETMASK = 0x2 + RTAX_SRC = 0x8 + RTA_AUTHOR = 0x40 + RTA_BRD = 0x80 + RTA_DST = 0x1 + RTA_GATEWAY = 0x2 + RTA_GENMASK = 0x8 + RTA_IFA = 0x20 + RTA_IFP = 0x10 + RTA_NETMASK = 0x4 + RTA_NUMBITS = 0x9 + RTA_SRC = 0x100 + RTF_BLACKHOLE = 0x1000 + RTF_CLONING = 0x100 + RTF_DONE = 0x40 + RTF_DYNAMIC = 0x10 + RTF_GATEWAY = 0x2 + RTF_HOST = 0x4 + RTF_INDIRECT = 0x40000 + RTF_KERNEL = 0x80000 + RTF_LLINFO = 0x400 + RTF_MASK = 0x80 + RTF_MODIFIED = 0x20 + RTF_MULTIRT = 0x10000 + RTF_PRIVATE = 0x2000 + RTF_PROTO1 = 0x8000 + RTF_PROTO2 = 0x4000 + RTF_REJECT = 0x8 + RTF_SETSRC = 0x20000 + RTF_STATIC = 0x800 + RTF_UP = 0x1 + RTF_XRESOLVE = 0x200 + RTF_ZONE = 0x100000 + RTM_ADD = 0x1 + RTM_CHANGE = 0x3 + RTM_CHGADDR = 0xf + RTM_DELADDR = 0xd + RTM_DELETE = 0x2 + RTM_FREEADDR = 0x10 + RTM_GET = 0x4 + RTM_IFINFO = 0xe + RTM_LOCK = 0x8 + RTM_LOSING = 0x5 + RTM_MISS = 0x7 + RTM_NEWADDR = 0xc + RTM_OLDADD = 0x9 + RTM_OLDDEL = 0xa + RTM_REDIRECT = 0x6 + RTM_RESOLVE = 0xb + RTM_VERSION = 0x3 + RTV_EXPIRE = 0x4 + RTV_HOPCOUNT = 0x2 + RTV_MTU = 0x1 + RTV_RPIPE = 0x8 + RTV_RTT = 0x40 + RTV_RTTVAR = 0x80 + RTV_SPIPE = 0x10 + RTV_SSTHRESH = 0x20 + RT_AWARE = 0x1 + RUSAGE_CHILDREN = -0x1 + RUSAGE_SELF = 0x0 + SCM_RIGHTS = 0x1010 + SCM_TIMESTAMP = 0x1013 + SCM_UCRED = 0x1012 + SHUT_RD = 0x0 + SHUT_RDWR = 0x2 + SHUT_WR = 0x1 + SIG2STR_MAX = 0x20 + SIOCADDMULTI = -0x7fdf96cf + SIOCADDRT = -0x7fcf8df6 + SIOCATMARK = 0x40047307 + SIOCDARP = -0x7fdb96e0 + SIOCDELMULTI = -0x7fdf96ce + SIOCDELRT = -0x7fcf8df5 + SIOCDXARP = -0x7fff9658 + SIOCGARP = -0x3fdb96e1 + SIOCGDSTINFO = -0x3fff965c + SIOCGENADDR = -0x3fdf96ab + SIOCGENPSTATS = -0x3fdf96c7 + SIOCGETLSGCNT = -0x3fef8deb + SIOCGETNAME = 0x40107334 + SIOCGETPEER = 0x40107335 + SIOCGETPROP = -0x3fff8f44 + SIOCGETSGCNT = -0x3feb8deb + SIOCGETSYNC = -0x3fdf96d3 + SIOCGETVIFCNT = -0x3feb8dec + SIOCGHIWAT = 0x40047301 + SIOCGIFADDR = -0x3fdf96f3 + SIOCGIFBRDADDR = -0x3fdf96e9 + SIOCGIFCONF = -0x3ff796a4 + SIOCGIFDSTADDR = -0x3fdf96f1 + SIOCGIFFLAGS = -0x3fdf96ef + SIOCGIFHWADDR = -0x3fdf9647 + SIOCGIFINDEX = -0x3fdf96a6 + SIOCGIFMEM = -0x3fdf96ed + SIOCGIFMETRIC = -0x3fdf96e5 + SIOCGIFMTU = -0x3fdf96ea + SIOCGIFMUXID = -0x3fdf96a8 + SIOCGIFNETMASK = -0x3fdf96e7 + SIOCGIFNUM = 0x40046957 + SIOCGIP6ADDRPOLICY = -0x3fff965e + SIOCGIPMSFILTER = -0x3ffb964c + SIOCGLIFADDR = -0x3f87968f + SIOCGLIFBINDING = -0x3f879666 + SIOCGLIFBRDADDR = -0x3f879685 + SIOCGLIFCONF = -0x3fef965b + SIOCGLIFDADSTATE = -0x3f879642 + SIOCGLIFDSTADDR = -0x3f87968d + SIOCGLIFFLAGS = -0x3f87968b + SIOCGLIFGROUPINFO = -0x3f4b9663 + SIOCGLIFGROUPNAME = -0x3f879664 + SIOCGLIFHWADDR = -0x3f879640 + SIOCGLIFINDEX = -0x3f87967b + SIOCGLIFLNKINFO = -0x3f879674 + SIOCGLIFMETRIC = -0x3f879681 + SIOCGLIFMTU = -0x3f879686 + SIOCGLIFMUXID = -0x3f87967d + SIOCGLIFNETMASK = -0x3f879683 + SIOCGLIFNUM = -0x3ff3967e + SIOCGLIFSRCOF = -0x3fef964f + SIOCGLIFSUBNET = -0x3f879676 + SIOCGLIFTOKEN = -0x3f879678 + SIOCGLIFUSESRC = -0x3f879651 + SIOCGLIFZONE = -0x3f879656 + SIOCGLOWAT = 0x40047303 + SIOCGMSFILTER = -0x3ffb964e + SIOCGPGRP = 0x40047309 + SIOCGSTAMP = -0x3fef9646 + SIOCGXARP = -0x3fff9659 + SIOCIFDETACH = -0x7fdf96c8 + SIOCILB = -0x3ffb9645 + SIOCLIFADDIF = -0x3f879691 + SIOCLIFDELND = -0x7f879673 + SIOCLIFGETND = -0x3f879672 + SIOCLIFREMOVEIF = -0x7f879692 + SIOCLIFSETND = -0x7f879671 + SIOCLOWER = -0x7fdf96d7 + SIOCSARP = -0x7fdb96e2 + SIOCSCTPGOPT = -0x3fef9653 + SIOCSCTPPEELOFF = -0x3ffb9652 + SIOCSCTPSOPT = -0x7fef9654 + SIOCSENABLESDP = -0x3ffb9649 + SIOCSETPROP = -0x7ffb8f43 + SIOCSETSYNC = -0x7fdf96d4 + SIOCSHIWAT = -0x7ffb8d00 + SIOCSIFADDR = -0x7fdf96f4 + SIOCSIFBRDADDR = -0x7fdf96e8 + SIOCSIFDSTADDR = -0x7fdf96f2 + SIOCSIFFLAGS = -0x7fdf96f0 + SIOCSIFINDEX = -0x7fdf96a5 + SIOCSIFMEM = -0x7fdf96ee + SIOCSIFMETRIC = -0x7fdf96e4 + SIOCSIFMTU = -0x7fdf96eb + SIOCSIFMUXID = -0x7fdf96a7 + SIOCSIFNAME = -0x7fdf96b7 + SIOCSIFNETMASK = -0x7fdf96e6 + SIOCSIP6ADDRPOLICY = -0x7fff965d + SIOCSIPMSFILTER = -0x7ffb964b + SIOCSLGETREQ = -0x3fdf96b9 + SIOCSLIFADDR = -0x7f879690 + SIOCSLIFBRDADDR = -0x7f879684 + SIOCSLIFDSTADDR = -0x7f87968e + SIOCSLIFFLAGS = -0x7f87968c + SIOCSLIFGROUPNAME = -0x7f879665 + SIOCSLIFINDEX = -0x7f87967a + SIOCSLIFLNKINFO = -0x7f879675 + SIOCSLIFMETRIC = -0x7f879680 + SIOCSLIFMTU = -0x7f879687 + SIOCSLIFMUXID = -0x7f87967c + SIOCSLIFNAME = -0x3f87967f + SIOCSLIFNETMASK = -0x7f879682 + SIOCSLIFPREFIX = -0x3f879641 + SIOCSLIFSUBNET = -0x7f879677 + SIOCSLIFTOKEN = -0x7f879679 + SIOCSLIFUSESRC = -0x7f879650 + SIOCSLIFZONE = -0x7f879655 + SIOCSLOWAT = -0x7ffb8cfe + SIOCSLSTAT = -0x7fdf96b8 + SIOCSMSFILTER = -0x7ffb964d + SIOCSPGRP = -0x7ffb8cf8 + SIOCSPROMISC = -0x7ffb96d0 + SIOCSQPTR = -0x3ffb9648 + SIOCSSDSTATS = -0x3fdf96d2 + SIOCSSESTATS = -0x3fdf96d1 + SIOCSXARP = -0x7fff965a + SIOCTMYADDR = -0x3ff79670 + SIOCTMYSITE = -0x3ff7966e + SIOCTONLINK = -0x3ff7966f + SIOCUPPER = -0x7fdf96d8 + SIOCX25RCV = -0x3fdf96c4 + SIOCX25TBL = -0x3fdf96c3 + SIOCX25XMT = -0x3fdf96c5 + SIOCXPROTO = 0x20007337 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x1 + SOCK_NDELAY = 0x200000 + SOCK_NONBLOCK = 0x100000 + SOCK_RAW = 0x4 + SOCK_RDM = 0x5 + SOCK_SEQPACKET = 0x6 + SOCK_STREAM = 0x2 + SOCK_TYPE_MASK = 0xffff + SOL_FILTER = 0xfffc + SOL_PACKET = 0xfffd + SOL_ROUTE = 0xfffe + SOL_SOCKET = 0xffff + SOMAXCONN = 0x80 + SO_ACCEPTCONN = 0x2 + SO_ALL = 0x3f + SO_ALLZONES = 0x1014 + SO_ANON_MLP = 0x100a + SO_ATTACH_FILTER = 0x40000001 + SO_BAND = 0x4000 + SO_BROADCAST = 0x20 + SO_COPYOPT = 0x80000 + SO_DEBUG = 0x1 + SO_DELIM = 0x8000 + SO_DETACH_FILTER = 0x40000002 + SO_DGRAM_ERRIND = 0x200 + SO_DOMAIN = 0x100c + SO_DONTLINGER = -0x81 + SO_DONTROUTE = 0x10 + SO_ERROPT = 0x40000 + SO_ERROR = 0x1007 + SO_EXCLBIND = 0x1015 + SO_HIWAT = 0x10 + SO_ISNTTY = 0x800 + SO_ISTTY = 0x400 + SO_KEEPALIVE = 0x8 + SO_LINGER = 0x80 + SO_LOWAT = 0x20 + SO_MAC_EXEMPT = 0x100b + SO_MAC_IMPLICIT = 0x1016 + SO_MAXBLK = 0x100000 + SO_MAXPSZ = 0x8 + SO_MINPSZ = 0x4 + SO_MREADOFF = 0x80 + SO_MREADON = 0x40 + SO_NDELOFF = 0x200 + SO_NDELON = 0x100 + SO_NODELIM = 0x10000 + SO_OOBINLINE = 0x100 + SO_PROTOTYPE = 0x1009 + SO_RCVBUF = 0x1002 + SO_RCVLOWAT = 0x1004 + SO_RCVPSH = 0x100d + SO_RCVTIMEO = 0x1006 + SO_READOPT = 0x1 + SO_RECVUCRED = 0x400 + SO_REUSEADDR = 0x4 + SO_SECATTR = 0x1011 + SO_SNDBUF = 0x1001 + SO_SNDLOWAT = 0x1003 + SO_SNDTIMEO = 0x1005 + SO_STRHOLD = 0x20000 + SO_TAIL = 0x200000 + SO_TIMESTAMP = 0x1013 + SO_TONSTOP = 0x2000 + SO_TOSTOP = 0x1000 + SO_TYPE = 0x1008 + SO_USELOOPBACK = 0x40 + SO_VRRP = 0x1017 + SO_WROFF = 0x2 + TAB0 = 0x0 + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x5407 + TCGETA = 0x5401 + TCGETS = 0x540d + TCIFLUSH = 0x0 + TCIOFF = 0x2 + TCIOFLUSH = 0x2 + TCION = 0x3 + TCOFLUSH = 0x1 + TCOOFF = 0x0 + TCOON = 0x1 + TCP_ABORT_THRESHOLD = 0x11 + TCP_ANONPRIVBIND = 0x20 + TCP_CONN_ABORT_THRESHOLD = 0x13 + TCP_CONN_NOTIFY_THRESHOLD = 0x12 + TCP_CORK = 0x18 + TCP_EXCLBIND = 0x21 + TCP_INIT_CWND = 0x15 + TCP_KEEPALIVE = 0x8 + TCP_KEEPALIVE_ABORT_THRESHOLD = 0x17 + TCP_KEEPALIVE_THRESHOLD = 0x16 + TCP_KEEPCNT = 0x23 + TCP_KEEPIDLE = 0x22 + TCP_KEEPINTVL = 0x24 + TCP_LINGER2 = 0x1c + TCP_MAXSEG = 0x2 + TCP_MSS = 0x218 + TCP_NODELAY = 0x1 + TCP_NOTIFY_THRESHOLD = 0x10 + TCP_RECVDSTADDR = 0x14 + TCP_RTO_INITIAL = 0x19 + TCP_RTO_MAX = 0x1b + TCP_RTO_MIN = 0x1a + TCSAFLUSH = 0x5410 + TCSBRK = 0x5405 + TCSETA = 0x5402 + TCSETAF = 0x5404 + TCSETAW = 0x5403 + TCSETS = 0x540e + TCSETSF = 0x5410 + TCSETSW = 0x540f + TCXONC = 0x5406 + TIOC = 0x5400 + TIOCCBRK = 0x747a + TIOCCDTR = 0x7478 + TIOCCILOOP = 0x746c + TIOCEXCL = 0x740d + TIOCFLUSH = 0x7410 + TIOCGETC = 0x7412 + TIOCGETD = 0x7400 + TIOCGETP = 0x7408 + TIOCGLTC = 0x7474 + TIOCGPGRP = 0x7414 + TIOCGPPS = 0x547d + TIOCGPPSEV = 0x547f + TIOCGSID = 0x7416 + TIOCGSOFTCAR = 0x5469 + TIOCGWINSZ = 0x5468 + TIOCHPCL = 0x7402 + TIOCKBOF = 0x5409 + TIOCKBON = 0x5408 + TIOCLBIC = 0x747e + TIOCLBIS = 0x747f + TIOCLGET = 0x747c + TIOCLSET = 0x747d + TIOCMBIC = 0x741c + TIOCMBIS = 0x741b + TIOCMGET = 0x741d + TIOCMSET = 0x741a + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_DTR = 0x2 + TIOCM_LE = 0x1 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_RTS = 0x4 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x7471 + TIOCNXCL = 0x740e + TIOCOUTQ = 0x7473 + TIOCREMOTE = 0x741e + TIOCSBRK = 0x747b + TIOCSCTTY = 0x7484 + TIOCSDTR = 0x7479 + TIOCSETC = 0x7411 + TIOCSETD = 0x7401 + TIOCSETN = 0x740a + TIOCSETP = 0x7409 + TIOCSIGNAL = 0x741f + TIOCSILOOP = 0x746d + TIOCSLTC = 0x7475 + TIOCSPGRP = 0x7415 + TIOCSPPS = 0x547e + TIOCSSOFTCAR = 0x546a + TIOCSTART = 0x746e + TIOCSTI = 0x7417 + TIOCSTOP = 0x746f + TIOCSWINSZ = 0x5467 + TOSTOP = 0x100 + VCEOF = 0x8 + VCEOL = 0x9 + VDISCARD = 0xd + VDSUSP = 0xb + VEOF = 0x4 + VEOL = 0x5 + VEOL2 = 0x6 + VERASE = 0x2 + VERASE2 = 0x11 + VINTR = 0x0 + VKILL = 0x3 + VLNEXT = 0xf + VMIN = 0x4 + VQUIT = 0x1 + VREPRINT = 0xc + VSTART = 0x8 + VSTATUS = 0x10 + VSTOP = 0x9 + VSUSP = 0xa + VSWTCH = 0x7 + VT0 = 0x0 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WCONTFLG = 0xffff + WCONTINUED = 0x8 + WCOREFLG = 0x80 + WEXITED = 0x1 + WNOHANG = 0x40 + WNOWAIT = 0x80 + WOPTMASK = 0xcf + WRAP = 0x20000 + WSIGMASK = 0x7f + WSTOPFLG = 0x7f + WSTOPPED = 0x4 + WTRAPPED = 0x2 + WUNTRACED = 0x4 + XCASE = 0x4 + XTABS = 0x1800 +) + +// Errors +const ( + E2BIG = syscall.Errno(0x7) + EACCES = syscall.Errno(0xd) + EADDRINUSE = syscall.Errno(0x7d) + EADDRNOTAVAIL = syscall.Errno(0x7e) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x7c) + EAGAIN = syscall.Errno(0xb) + EALREADY = syscall.Errno(0x95) + EBADE = syscall.Errno(0x32) + EBADF = syscall.Errno(0x9) + EBADFD = syscall.Errno(0x51) + EBADMSG = syscall.Errno(0x4d) + EBADR = syscall.Errno(0x33) + EBADRQC = syscall.Errno(0x36) + EBADSLT = syscall.Errno(0x37) + EBFONT = syscall.Errno(0x39) + EBUSY = syscall.Errno(0x10) + ECANCELED = syscall.Errno(0x2f) + ECHILD = syscall.Errno(0xa) + ECHRNG = syscall.Errno(0x25) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x82) + ECONNREFUSED = syscall.Errno(0x92) + ECONNRESET = syscall.Errno(0x83) + EDEADLK = syscall.Errno(0x2d) + EDEADLOCK = syscall.Errno(0x38) + EDESTADDRREQ = syscall.Errno(0x60) + EDOM = syscall.Errno(0x21) + EDQUOT = syscall.Errno(0x31) + EEXIST = syscall.Errno(0x11) + EFAULT = syscall.Errno(0xe) + EFBIG = syscall.Errno(0x1b) + EHOSTDOWN = syscall.Errno(0x93) + EHOSTUNREACH = syscall.Errno(0x94) + EIDRM = syscall.Errno(0x24) + EILSEQ = syscall.Errno(0x58) + EINPROGRESS = syscall.Errno(0x96) + EINTR = syscall.Errno(0x4) + EINVAL = syscall.Errno(0x16) + EIO = syscall.Errno(0x5) + EISCONN = syscall.Errno(0x85) + EISDIR = syscall.Errno(0x15) + EL2HLT = syscall.Errno(0x2c) + EL2NSYNC = syscall.Errno(0x26) + EL3HLT = syscall.Errno(0x27) + EL3RST = syscall.Errno(0x28) + ELIBACC = syscall.Errno(0x53) + ELIBBAD = syscall.Errno(0x54) + ELIBEXEC = syscall.Errno(0x57) + ELIBMAX = syscall.Errno(0x56) + ELIBSCN = syscall.Errno(0x55) + ELNRNG = syscall.Errno(0x29) + ELOCKUNMAPPED = syscall.Errno(0x48) + ELOOP = syscall.Errno(0x5a) + EMFILE = syscall.Errno(0x18) + EMLINK = syscall.Errno(0x1f) + EMSGSIZE = syscall.Errno(0x61) + EMULTIHOP = syscall.Errno(0x4a) + ENAMETOOLONG = syscall.Errno(0x4e) + ENETDOWN = syscall.Errno(0x7f) + ENETRESET = syscall.Errno(0x81) + ENETUNREACH = syscall.Errno(0x80) + ENFILE = syscall.Errno(0x17) + ENOANO = syscall.Errno(0x35) + ENOBUFS = syscall.Errno(0x84) + ENOCSI = syscall.Errno(0x2b) + ENODATA = syscall.Errno(0x3d) + ENODEV = syscall.Errno(0x13) + ENOENT = syscall.Errno(0x2) + ENOEXEC = syscall.Errno(0x8) + ENOLCK = syscall.Errno(0x2e) + ENOLINK = syscall.Errno(0x43) + ENOMEM = syscall.Errno(0xc) + ENOMSG = syscall.Errno(0x23) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x63) + ENOSPC = syscall.Errno(0x1c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x59) + ENOTACTIVE = syscall.Errno(0x49) + ENOTBLK = syscall.Errno(0xf) + ENOTCONN = syscall.Errno(0x86) + ENOTDIR = syscall.Errno(0x14) + ENOTEMPTY = syscall.Errno(0x5d) + ENOTRECOVERABLE = syscall.Errno(0x3b) + ENOTSOCK = syscall.Errno(0x5f) + ENOTSUP = syscall.Errno(0x30) + ENOTTY = syscall.Errno(0x19) + ENOTUNIQ = syscall.Errno(0x50) + ENXIO = syscall.Errno(0x6) + EOPNOTSUPP = syscall.Errno(0x7a) + EOVERFLOW = syscall.Errno(0x4f) + EOWNERDEAD = syscall.Errno(0x3a) + EPERM = syscall.Errno(0x1) + EPFNOSUPPORT = syscall.Errno(0x7b) + EPIPE = syscall.Errno(0x20) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x78) + EPROTOTYPE = syscall.Errno(0x62) + ERANGE = syscall.Errno(0x22) + EREMCHG = syscall.Errno(0x52) + EREMOTE = syscall.Errno(0x42) + ERESTART = syscall.Errno(0x5b) + EROFS = syscall.Errno(0x1e) + ESHUTDOWN = syscall.Errno(0x8f) + ESOCKTNOSUPPORT = syscall.Errno(0x79) + ESPIPE = syscall.Errno(0x1d) + ESRCH = syscall.Errno(0x3) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x97) + ESTRPIPE = syscall.Errno(0x5c) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x91) + ETOOMANYREFS = syscall.Errno(0x90) + ETXTBSY = syscall.Errno(0x1a) + EUNATCH = syscall.Errno(0x2a) + EUSERS = syscall.Errno(0x5e) + EWOULDBLOCK = syscall.Errno(0xb) + EXDEV = syscall.Errno(0x12) + EXFULL = syscall.Errno(0x34) +) + +// Signals +const ( + SIGABRT = syscall.Signal(0x6) + SIGALRM = syscall.Signal(0xe) + SIGBUS = syscall.Signal(0xa) + SIGCANCEL = syscall.Signal(0x24) + SIGCHLD = syscall.Signal(0x12) + SIGCLD = syscall.Signal(0x12) + SIGCONT = syscall.Signal(0x19) + SIGEMT = syscall.Signal(0x7) + SIGFPE = syscall.Signal(0x8) + SIGFREEZE = syscall.Signal(0x22) + SIGHUP = syscall.Signal(0x1) + SIGILL = syscall.Signal(0x4) + SIGINFO = syscall.Signal(0x29) + SIGINT = syscall.Signal(0x2) + SIGIO = syscall.Signal(0x16) + SIGIOT = syscall.Signal(0x6) + SIGJVM1 = syscall.Signal(0x27) + SIGJVM2 = syscall.Signal(0x28) + SIGKILL = syscall.Signal(0x9) + SIGLOST = syscall.Signal(0x25) + SIGLWP = syscall.Signal(0x21) + SIGPIPE = syscall.Signal(0xd) + SIGPOLL = syscall.Signal(0x16) + SIGPROF = syscall.Signal(0x1d) + SIGPWR = syscall.Signal(0x13) + SIGQUIT = syscall.Signal(0x3) + SIGSEGV = syscall.Signal(0xb) + SIGSTOP = syscall.Signal(0x17) + SIGSYS = syscall.Signal(0xc) + SIGTERM = syscall.Signal(0xf) + SIGTHAW = syscall.Signal(0x23) + SIGTRAP = syscall.Signal(0x5) + SIGTSTP = syscall.Signal(0x18) + SIGTTIN = syscall.Signal(0x1a) + SIGTTOU = syscall.Signal(0x1b) + SIGURG = syscall.Signal(0x15) + SIGUSR1 = syscall.Signal(0x10) + SIGUSR2 = syscall.Signal(0x11) + SIGVTALRM = syscall.Signal(0x1c) + SIGWAITING = syscall.Signal(0x20) + SIGWINCH = syscall.Signal(0x14) + SIGXCPU = syscall.Signal(0x1e) + SIGXFSZ = syscall.Signal(0x1f) + SIGXRES = syscall.Signal(0x26) +) + +// Error table +var errors = [...]string{ + 1: "not owner", + 2: "no such file or directory", + 3: "no such process", + 4: "interrupted system call", + 5: "I/O error", + 6: "no such device or address", + 7: "arg list too long", + 8: "exec format error", + 9: "bad file number", + 10: "no child processes", + 11: "resource temporarily unavailable", + 12: "not enough space", + 13: "permission denied", + 14: "bad address", + 15: "block device required", + 16: "device busy", + 17: "file exists", + 18: "cross-device link", + 19: "no such device", + 20: "not a directory", + 21: "is a directory", + 22: "invalid argument", + 23: "file table overflow", + 24: "too many open files", + 25: "inappropriate ioctl for device", + 26: "text file busy", + 27: "file too large", + 28: "no space left on device", + 29: "illegal seek", + 30: "read-only file system", + 31: "too many links", + 32: "broken pipe", + 33: "argument out of domain", + 34: "result too large", + 35: "no message of desired type", + 36: "identifier removed", + 37: "channel number out of range", + 38: "level 2 not synchronized", + 39: "level 3 halted", + 40: "level 3 reset", + 41: "link number out of range", + 42: "protocol driver not attached", + 43: "no CSI structure available", + 44: "level 2 halted", + 45: "deadlock situation detected/avoided", + 46: "no record locks available", + 47: "operation canceled", + 48: "operation not supported", + 49: "disc quota exceeded", + 50: "bad exchange descriptor", + 51: "bad request descriptor", + 52: "message tables full", + 53: "anode table overflow", + 54: "bad request code", + 55: "invalid slot", + 56: "file locking deadlock", + 57: "bad font file format", + 58: "owner of the lock died", + 59: "lock is not recoverable", + 60: "not a stream device", + 61: "no data available", + 62: "timer expired", + 63: "out of stream resources", + 64: "machine is not on the network", + 65: "package not installed", + 66: "object is remote", + 67: "link has been severed", + 68: "advertise error", + 69: "srmount error", + 70: "communication error on send", + 71: "protocol error", + 72: "locked lock was unmapped ", + 73: "facility is not active", + 74: "multihop attempted", + 77: "not a data message", + 78: "file name too long", + 79: "value too large for defined data type", + 80: "name not unique on network", + 81: "file descriptor in bad state", + 82: "remote address changed", + 83: "can not access a needed shared library", + 84: "accessing a corrupted shared library", + 85: ".lib section in a.out corrupted", + 86: "attempting to link in more shared libraries than system limit", + 87: "can not exec a shared library directly", + 88: "illegal byte sequence", + 89: "operation not applicable", + 90: "number of symbolic links encountered during path name traversal exceeds MAXSYMLINKS", + 91: "error 91", + 92: "error 92", + 93: "directory not empty", + 94: "too many users", + 95: "socket operation on non-socket", + 96: "destination address required", + 97: "message too long", + 98: "protocol wrong type for socket", + 99: "option not supported by protocol", + 120: "protocol not supported", + 121: "socket type not supported", + 122: "operation not supported on transport endpoint", + 123: "protocol family not supported", + 124: "address family not supported by protocol family", + 125: "address already in use", + 126: "cannot assign requested address", + 127: "network is down", + 128: "network is unreachable", + 129: "network dropped connection because of reset", + 130: "software caused connection abort", + 131: "connection reset by peer", + 132: "no buffer space available", + 133: "transport endpoint is already connected", + 134: "transport endpoint is not connected", + 143: "cannot send after socket shutdown", + 144: "too many references: cannot splice", + 145: "connection timed out", + 146: "connection refused", + 147: "host is down", + 148: "no route to host", + 149: "operation already in progress", + 150: "operation now in progress", + 151: "stale NFS file handle", +} + +// Signal table +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal Instruction", + 5: "trace/Breakpoint Trap", + 6: "abort", + 7: "emulation Trap", + 8: "arithmetic Exception", + 9: "killed", + 10: "bus Error", + 11: "segmentation Fault", + 12: "bad System Call", + 13: "broken Pipe", + 14: "alarm Clock", + 15: "terminated", + 16: "user Signal 1", + 17: "user Signal 2", + 18: "child Status Changed", + 19: "power-Fail/Restart", + 20: "window Size Change", + 21: "urgent Socket Condition", + 22: "pollable Event", + 23: "stopped (signal)", + 24: "stopped (user)", + 25: "continued", + 26: "stopped (tty input)", + 27: "stopped (tty output)", + 28: "virtual Timer Expired", + 29: "profiling Timer Expired", + 30: "cpu Limit Exceeded", + 31: "file Size Limit Exceeded", + 32: "no runnable lwp", + 33: "inter-lwp signal", + 34: "checkpoint Freeze", + 35: "checkpoint Thaw", + 36: "thread Cancellation", + 37: "resource Lost", + 38: "resource Control Exceeded", + 39: "reserved for JVM 1", + 40: "reserved for JVM 2", + 41: "information Request", +} diff --git a/vendor/golang.org/x/sys/unix/zptrace386_linux.go b/vendor/golang.org/x/sys/unix/zptrace386_linux.go new file mode 100644 index 0000000..2d21c49 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptrace386_linux.go @@ -0,0 +1,80 @@ +// Code generated by linux/mkall.go generatePtracePair(386, amd64). DO NOT EDIT. + +// +build linux +// +build 386 amd64 + +package unix + +import "unsafe" + +// PtraceRegs386 is the registers used by 386 binaries. +type PtraceRegs386 struct { + Ebx int32 + Ecx int32 + Edx int32 + Esi int32 + Edi int32 + Ebp int32 + Eax int32 + Xds int32 + Xes int32 + Xfs int32 + Xgs int32 + Orig_eax int32 + Eip int32 + Xcs int32 + Eflags int32 + Esp int32 + Xss int32 +} + +// PtraceGetRegs386 fetches the registers used by 386 binaries. +func PtraceGetRegs386(pid int, regsout *PtraceRegs386) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegs386 sets the registers used by 386 binaries. +func PtraceSetRegs386(pid int, regs *PtraceRegs386) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsAmd64 is the registers used by amd64 binaries. +type PtraceRegsAmd64 struct { + R15 uint64 + R14 uint64 + R13 uint64 + R12 uint64 + Rbp uint64 + Rbx uint64 + R11 uint64 + R10 uint64 + R9 uint64 + R8 uint64 + Rax uint64 + Rcx uint64 + Rdx uint64 + Rsi uint64 + Rdi uint64 + Orig_rax uint64 + Rip uint64 + Cs uint64 + Eflags uint64 + Rsp uint64 + Ss uint64 + Fs_base uint64 + Gs_base uint64 + Ds uint64 + Es uint64 + Fs uint64 + Gs uint64 +} + +// PtraceGetRegsAmd64 fetches the registers used by amd64 binaries. +func PtraceGetRegsAmd64(pid int, regsout *PtraceRegsAmd64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsAmd64 sets the registers used by amd64 binaries. +func PtraceSetRegsAmd64(pid int, regs *PtraceRegsAmd64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zptracearm_linux.go b/vendor/golang.org/x/sys/unix/zptracearm_linux.go new file mode 100644 index 0000000..faf23bb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptracearm_linux.go @@ -0,0 +1,41 @@ +// Code generated by linux/mkall.go generatePtracePair(arm, arm64). DO NOT EDIT. + +// +build linux +// +build arm arm64 + +package unix + +import "unsafe" + +// PtraceRegsArm is the registers used by arm binaries. +type PtraceRegsArm struct { + Uregs [18]uint32 +} + +// PtraceGetRegsArm fetches the registers used by arm binaries. +func PtraceGetRegsArm(pid int, regsout *PtraceRegsArm) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsArm sets the registers used by arm binaries. +func PtraceSetRegsArm(pid int, regs *PtraceRegsArm) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsArm64 is the registers used by arm64 binaries. +type PtraceRegsArm64 struct { + Regs [31]uint64 + Sp uint64 + Pc uint64 + Pstate uint64 +} + +// PtraceGetRegsArm64 fetches the registers used by arm64 binaries. +func PtraceGetRegsArm64(pid int, regsout *PtraceRegsArm64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsArm64 sets the registers used by arm64 binaries. +func PtraceSetRegsArm64(pid int, regs *PtraceRegsArm64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zptracemips_linux.go b/vendor/golang.org/x/sys/unix/zptracemips_linux.go new file mode 100644 index 0000000..c431131 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptracemips_linux.go @@ -0,0 +1,50 @@ +// Code generated by linux/mkall.go generatePtracePair(mips, mips64). DO NOT EDIT. + +// +build linux +// +build mips mips64 + +package unix + +import "unsafe" + +// PtraceRegsMips is the registers used by mips binaries. +type PtraceRegsMips struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips fetches the registers used by mips binaries. +func PtraceGetRegsMips(pid int, regsout *PtraceRegsMips) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips sets the registers used by mips binaries. +func PtraceSetRegsMips(pid int, regs *PtraceRegsMips) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsMips64 is the registers used by mips64 binaries. +type PtraceRegsMips64 struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips64 fetches the registers used by mips64 binaries. +func PtraceGetRegsMips64(pid int, regsout *PtraceRegsMips64) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips64 sets the registers used by mips64 binaries. +func PtraceSetRegsMips64(pid int, regs *PtraceRegsMips64) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zptracemipsle_linux.go b/vendor/golang.org/x/sys/unix/zptracemipsle_linux.go new file mode 100644 index 0000000..dc3d6d3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zptracemipsle_linux.go @@ -0,0 +1,50 @@ +// Code generated by linux/mkall.go generatePtracePair(mipsle, mips64le). DO NOT EDIT. + +// +build linux +// +build mipsle mips64le + +package unix + +import "unsafe" + +// PtraceRegsMipsle is the registers used by mipsle binaries. +type PtraceRegsMipsle struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMipsle fetches the registers used by mipsle binaries. +func PtraceGetRegsMipsle(pid int, regsout *PtraceRegsMipsle) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMipsle sets the registers used by mipsle binaries. +func PtraceSetRegsMipsle(pid int, regs *PtraceRegsMipsle) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} + +// PtraceRegsMips64le is the registers used by mips64le binaries. +type PtraceRegsMips64le struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +// PtraceGetRegsMips64le fetches the registers used by mips64le binaries. +func PtraceGetRegsMips64le(pid int, regsout *PtraceRegsMips64le) error { + return ptrace(PTRACE_GETREGS, pid, 0, uintptr(unsafe.Pointer(regsout))) +} + +// PtraceSetRegsMips64le sets the registers used by mips64le binaries. +func PtraceSetRegsMips64le(pid int, regs *PtraceRegsMips64le) error { + return ptrace(PTRACE_SETREGS, pid, 0, uintptr(unsafe.Pointer(regs))) +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go new file mode 100644 index 0000000..9fb1b31 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go @@ -0,0 +1,1620 @@ +// mksyscall.pl -l32 -tags darwin,386 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build darwin,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int32(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go new file mode 100644 index 0000000..1e0fb46 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -0,0 +1,1620 @@ +// mksyscall.pl -tags darwin,amd64 syscall_bsd.go syscall_darwin.go syscall_darwin_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build darwin,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int64(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go new file mode 100644 index 0000000..e1026a8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go @@ -0,0 +1,1620 @@ +// mksyscall.pl -tags darwin,arm syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build darwin,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int32, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int32(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go new file mode 100644 index 0000000..37fb210 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -0,0 +1,1620 @@ +// mksyscall.pl -tags darwin,arm64 syscall_bsd.go syscall_darwin.go syscall_darwin_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build darwin,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kill(pid int, signum int, posix int) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), uintptr(posix)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exchangedata(path1 string, path2 string, options int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path1) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(path2) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXCHANGEDATA, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES64, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := RawSyscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := Syscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setprivexec(flag int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIVEXEC, uintptr(flag), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func gettimeofday(tp *Timeval) (sec int64, usec int32, err error) { + r0, r1, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + sec = int64(r0) + usec = int32(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go new file mode 100644 index 0000000..7576147 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_dragonfly_amd64.go @@ -0,0 +1,1451 @@ +// mksyscall.pl -dragonfly -tags dragonfly,amd64 syscall_bsd.go syscall_dragonfly.go syscall_dragonfly_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build dragonfly,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpread(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EXTPWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go new file mode 100644 index 0000000..8bcecfb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_386.go @@ -0,0 +1,1888 @@ +// mksyscall.pl -l32 -tags freebsd,386 syscall_bsd.go syscall_freebsd.go syscall_freebsd_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build freebsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go new file mode 100644 index 0000000..61c0cf9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_amd64.go @@ -0,0 +1,1888 @@ +// mksyscall.pl -tags freebsd,amd64 syscall_bsd.go syscall_freebsd.go syscall_freebsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build freebsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go new file mode 100644 index 0000000..ffd0107 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_freebsd_arm.go @@ -0,0 +1,1888 @@ +// mksyscall.pl -l32 -arm -tags freebsd,arm syscall_bsd.go syscall_freebsd.go syscall_freebsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build freebsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (r int, w int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + r = int(r0) + w = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CapEnter() (err error) { + _, _, e1 := Syscall(SYS_CAP_ENTER, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsGet(version int, fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS___CAP_RIGHTS_GET, uintptr(version), uintptr(fd), uintptr(unsafe.Pointer(rightsp))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func capRightsLimit(fd int, rightsp *CapRights) (err error) { + _, _, e1 := Syscall(SYS_CAP_RIGHTS_LIMIT, uintptr(fd), uintptr(unsafe.Pointer(rightsp)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFd(fd int, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFd(fd int, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFd(fd int, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetFile(file string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteFile(file string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListFile(file string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(file) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrGetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attrname) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_EXTATTR_DELETE_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(link) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETDIRENTRIES, uintptr(fd), uintptr(_p0), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdtablesize() (size int) { + r0, _, _ := Syscall(SYS_GETDTABLESIZE, 0, 0, 0) + size = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Openat(fdat int, path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(fdat), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(fromfd int, from string, tofd int, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Undelete(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNDELETE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(fd int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (nfd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go new file mode 100644 index 0000000..85a2907 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_386.go @@ -0,0 +1,1964 @@ +// mksyscall.pl -l32 -tags linux,386 syscall_linux.go syscall_linux_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64_64, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE64, uintptr(fd), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go new file mode 100644 index 0000000..8e2be97 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -0,0 +1,2157 @@ +// mksyscall.pl -tags linux,amd64 syscall_linux.go syscall_linux_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go new file mode 100644 index 0000000..5ff0637 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm.go @@ -0,0 +1,2066 @@ +// mksyscall.pl -l32 -arm -tags linux,arm syscall_linux.go syscall_linux_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS32, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, flags int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(flags), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN32, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID32, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID32, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID32, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID32, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN32, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID32, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID32, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID32, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID32, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID32, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID32, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go new file mode 100644 index 0000000..4076011 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -0,0 +1,2029 @@ +// mksyscall.pl -tags linux,arm64 syscall_linux.go syscall_linux_arm64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,arm64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go new file mode 100644 index 0000000..984e561 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips.go @@ -0,0 +1,2122 @@ +// mksyscall.pl -b32 -arm -tags linux,mips syscall_linux.go syscall_linux_mipsx.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mips + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off>>32), uintptr(off), uintptr(len>>32), uintptr(len)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r0)<<32 | int64(r1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length>>32), uintptr(length), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset>>32), uintptr(offset)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(int64(r0)<<32 | int64(r1)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off>>32), uintptr(off), uintptr(n>>32), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length>>32), uintptr(length), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go new file mode 100644 index 0000000..f98194e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64.go @@ -0,0 +1,2105 @@ +// mksyscall.pl -tags linux,mips64 syscall_linux.go syscall_linux_mips64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mips64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go new file mode 100644 index 0000000..f302670 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mips64le.go @@ -0,0 +1,2105 @@ +// mksyscall.pl -tags linux,mips64le syscall_linux.go syscall_linux_mips64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mips64le + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fstat(fd int, st *stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func lstat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func stat(path string, st *stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(st)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go new file mode 100644 index 0000000..f18c5e4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_mipsle.go @@ -0,0 +1,2122 @@ +// mksyscall.pl -l32 -arm -tags linux,mipsle syscall_linux.go syscall_linux_mipsx.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,mipsle + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(off>>32), uintptr(len), uintptr(len>>32)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE64, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE64, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, r1, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall9(SYS_SYNC_FILE_RANGE, uintptr(fd), 0, uintptr(off), uintptr(off>>32), uintptr(n), uintptr(n>>32), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE64, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap2(addr uintptr, length uintptr, prot int, flags int, fd int, pageOffset uintptr) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP2, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(pageOffset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setrlimit(resource int, rlim *rlimit32) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go new file mode 100644 index 0000000..bc26824 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64.go @@ -0,0 +1,2168 @@ +// mksyscall.pl -tags linux,ppc64 syscall_linux.go syscall_linux_ppc64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,ppc64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go new file mode 100644 index 0000000..8d874cb --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_ppc64le.go @@ -0,0 +1,2168 @@ +// mksyscall.pl -tags linux,ppc64le syscall_linux.go syscall_linux_ppc64x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,ppc64le + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_UGETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ioperm(from int, num int, on int) (err error) { + _, _, e1 := Syscall(SYS_IOPERM, uintptr(from), uintptr(num), uintptr(on)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Iopl(level int) (err error) { + _, _, e1 := Syscall(SYS_IOPL, uintptr(level), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS__NEWSELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE2, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Time(t *Time_t) (tt Time_t, err error) { + r0, _, e1 := RawSyscall(SYS_TIME, uintptr(unsafe.Pointer(t)), 0, 0) + tt = Time_t(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go new file mode 100644 index 0000000..1693212 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_s390x.go @@ -0,0 +1,1948 @@ +// mksyscall.pl -tags linux,s390x syscall_linux.go syscall_linux_s390x.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,s390x + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fchmodat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := Syscall(SYS_IOCTL, uintptr(fd), uintptr(req), uintptr(arg)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlInt(cmd int, arg2 int, arg3 int, arg4 int, arg5 int) (ret int, err error) { + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func KeyctlBuffer(cmd int, arg2 int, buf []byte, arg5 int) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(buf)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlJoin(cmd int, arg2 string) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg2) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlSearch(cmd int, arg2 int, arg3 string, arg4 string, arg5 int) (ret int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg3) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(arg4) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(arg5), 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlIOV(cmd int, arg2 int, payload []Iovec, arg5 int) (err error) { + var _p0 unsafe.Pointer + if len(payload) > 0 { + _p0 = unsafe.Pointer(&payload[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(arg2), uintptr(_p0), uintptr(len(payload)), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func keyctlDH(cmd int, arg2 *KeyctlDHParams, buf []byte) (ret int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_KEYCTL, uintptr(cmd), uintptr(unsafe.Pointer(arg2)), uintptr(_p0), uintptr(len(buf)), 0, 0) + ret = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func AddKey(keyType string, description string, payload []byte, ringid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(payload) > 0 { + _p2 = unsafe.Pointer(&payload[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_ADD_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(payload)), uintptr(ringid), 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Eventfd(initval uint, flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_EVENTFD2, uintptr(initval), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_LGETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Llistxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LLISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lremovexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LREMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lsetxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_LSETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pselect(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func RequestKey(keyType string, description string, callback string, destRingid int) (id int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(keyType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(description) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(callback) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_REQUEST_KEY, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(destRingid), 0, 0) + id = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Syncfs(fd int) (err error) { + _, _, e1 := Syscall(SYS_SYNCFS, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go new file mode 100644 index 0000000..2dd9843 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_sparc64.go @@ -0,0 +1,1833 @@ +// mksyscall.pl -tags linux,sparc64 syscall_linux.go syscall_linux_sparc64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build linux,sparc64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Linkat(olddirfd int, oldpath string, newdirfd int, newpath string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_LINKAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall6(SYS_OPENAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ppoll(fds *PollFd, nfds int, timeout *Timespec, sigmask *Sigset_t) (n int, err error) { + r0, _, e1 := Syscall6(SYS_PPOLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_READLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINKAT, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINKAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimesat(dirfd int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMESAT, uintptr(dirfd), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getcwd(buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETCWD, uintptr(_p0), uintptr(len(buf)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PTRACE, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func reboot(magic1 uint, magic2 uint, cmd int, arg string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(arg) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_REBOOT, uintptr(magic1), uintptr(magic2), uintptr(cmd), uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mount(source string, target string, fstype string, flags uintptr, data *byte) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(source) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(target) + if err != nil { + return + } + var _p2 *byte + _p2, err = BytePtrFromString(fstype) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(_p2)), uintptr(flags), uintptr(unsafe.Pointer(data)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Acct(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtimex(buf *Timex) (state int, err error) { + r0, _, e1 := Syscall(SYS_ADJTIMEX, uintptr(unsafe.Pointer(buf)), 0, 0) + state = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ClockGettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_GETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func CopyFileRange(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int, err error) { + r0, _, e1 := Syscall6(SYS_COPY_FILE_RANGE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(oldfd int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(oldfd), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup3(oldfd int, newfd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_DUP3, uintptr(oldfd), uintptr(newfd), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate(size int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE, uintptr(size), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCreate1(flag int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_EPOLL_CREATE1, uintptr(flag), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollCtl(epfd int, op int, fd int, event *EpollEvent) (err error) { + _, _, e1 := RawSyscall6(SYS_EPOLL_CTL, uintptr(epfd), uintptr(op), uintptr(fd), uintptr(unsafe.Pointer(event)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT_GROUP, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FACCESSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHMODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FCHOWNAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fdatasync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FDATASYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS64, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrandom(buf []byte, flags int) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettid() (tid int) { + r0, _, _ := RawSyscall(SYS_GETTID, 0, 0, 0) + tid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getxattr(path string, attr string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(dest) > 0 { + _p2 = unsafe.Pointer(&dest[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_GETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(dest)), 0, 0) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyAddWatch(fd int, pathname string, mask uint32) (watchdesc int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathname) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_INOTIFY_ADD_WATCH, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(mask)) + watchdesc = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit1(flags int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT1, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyRmWatch(fd int, watchdesc uint32) (success int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_RM_WATCH, uintptr(fd), uintptr(watchdesc), 0) + success = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_KILL, uintptr(pid), uintptr(sig), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Klogctl(typ int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_SYSLOG, uintptr(typ), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listxattr(path string, dest []byte) (sz int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(dest) > 0 { + _p1 = unsafe.Pointer(&dest[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_LISTXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(dest))) + sz = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIRAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MKNODAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func PivotRoot(newroot string, putold string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(newroot) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(putold) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_PIVOT_ROOT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) { + _, _, e1 := RawSyscall6(SYS_PRLIMIT64, uintptr(pid), uintptr(resource), uintptr(unsafe.Pointer(newlimit)), uintptr(unsafe.Pointer(old)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error) { + _, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Removexattr(path string, attr string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REMOVEXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_RENAMEAT, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setdomainname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETDOMAINNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sethostname(p []byte) (err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_SETHOSTNAME, uintptr(_p0), uintptr(len(p)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setns(fd int, nstype int) (err error) { + _, _, e1 := Syscall(SYS_SETNS, uintptr(fd), uintptr(nstype), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setxattr(path string, attr string, data []byte, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(attr) + if err != nil { + return + } + var _p2 unsafe.Pointer + if len(data) > 0 { + _p2 = unsafe.Pointer(&data[0]) + } else { + _p2 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SETXATTR, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(_p2), uintptr(len(data)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() { + Syscall(SYS_SYNC, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sysinfo(info *Sysinfo_t) (err error) { + _, _, e1 := RawSyscall(SYS_SYSINFO, uintptr(unsafe.Pointer(info)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tgkill(tgid int, tid int, sig syscall.Signal) (err error) { + _, _, e1 := RawSyscall(SYS_TGKILL, uintptr(tgid), uintptr(tid), uintptr(sig)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := RawSyscall(SYS_TIMES, uintptr(unsafe.Pointer(tms)), 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(mask int) (oldmask int) { + r0, _, _ := RawSyscall(SYS_UMASK, uintptr(mask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Uname(buf *Utsname) (err error) { + _, _, e1 := RawSyscall(SYS_UNAME, uintptr(unsafe.Pointer(buf)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UMOUNT2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unshare(flags int) (err error) { + _, _, e1 := Syscall(SYS_UNSHARE, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := Syscall(SYS_USTAT, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func exitThread(code int) (err error) { + _, _, e1 := Syscall(SYS_EXIT, uintptr(code), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, p *byte, np int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(np)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, advice int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(advice)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_WAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(oldfd), uintptr(newfd), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func InotifyInit() (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_INOTIFY_INIT, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pause() (err error) { + _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + r0, _, e1 := Syscall6(SYS_SELECT, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsgid(gid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setfsuid(uid int) (err error) { + _, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(resource), uintptr(unsafe.Pointer(rlim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe2(p *[2]_C_int, flags int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE2, uintptr(unsafe.Pointer(p)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go new file mode 100644 index 0000000..cfdea85 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_386.go @@ -0,0 +1,1357 @@ +// mksyscall.pl -l32 -netbsd -tags netbsd,386 syscall_bsd.go syscall_netbsd.go syscall_netbsd_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build netbsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go new file mode 100644 index 0000000..244a3c7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_amd64.go @@ -0,0 +1,1357 @@ +// mksyscall.pl -netbsd -tags netbsd,amd64 syscall_bsd.go syscall_netbsd.go syscall_netbsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build netbsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go new file mode 100644 index 0000000..e891adc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_netbsd_arm.go @@ -0,0 +1,1357 @@ +// mksyscall.pl -l32 -netbsd -arm -tags netbsd,arm syscall_bsd.go syscall_netbsd.go syscall_netbsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build netbsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe() (fd1 int, fd2 int, err error) { + r0, r1, e1 := RawSyscall(SYS_PIPE, 0, 0, 0) + fd1 = int(r0) + fd2 = int(r1) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go new file mode 100644 index 0000000..f48beb0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -0,0 +1,1415 @@ +// mksyscall.pl -l32 -openbsd -tags openbsd,386 syscall_bsd.go syscall_openbsd.go syscall_openbsd_386.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build openbsd,386 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go new file mode 100644 index 0000000..44a3faf --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -0,0 +1,1415 @@ +// mksyscall.pl -openbsd -tags openbsd,amd64 syscall_bsd.go syscall_openbsd.go syscall_openbsd_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build openbsd,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(whence), 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go new file mode 100644 index 0000000..1563752 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -0,0 +1,1415 @@ +// mksyscall.pl -l32 -openbsd -arm -tags openbsd,arm syscall_bsd.go syscall_openbsd.go syscall_openbsd_arm.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build openbsd,arm + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { + r0, _, e1 := Syscall6(SYS_WAIT4, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := Syscall(SYS_ACCEPT, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(s int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(s), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { + r0, _, e1 := Syscall6(SYS_KEVENT, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { + var _p0 unsafe.Pointer + if len(mib) > 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS___SYSCTL, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimes(path string, timeval *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UTIMES, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func futimes(fd int, timeval *[2]Timeval) (err error) { + _, _, e1 := Syscall(SYS_FUTIMES, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FCNTL, uintptr(fd), uintptr(cmd), uintptr(arg)) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := Syscall(SYS_POLL, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Madvise(b []byte, behav int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MADVISE, uintptr(_p0), uintptr(len(b)), uintptr(behav)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mlockall(flags int) (err error) { + _, _, e1 := Syscall(SYS_MLOCKALL, uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mprotect(b []byte, prot int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MPROTECT, uintptr(_p0), uintptr(len(b)), uintptr(prot)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Msync(b []byte, flags int) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSYNC, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlock(b []byte) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MUNLOCK, uintptr(_p0), uintptr(len(b)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Munlockall() (err error) { + _, _, e1 := Syscall(SYS_MUNLOCKALL, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pipe(p *[2]_C_int) (err error) { + _, _, e1 := RawSyscall(SYS_PIPE, uintptr(unsafe.Pointer(p)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getdents(fd int, buf []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_GETDENTS, uintptr(fd), uintptr(_p0), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_ACCESS, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := Syscall(SYS_ADJTIME, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chflags(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHFLAGS, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHMOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_CHROOT, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Close(fd int) (err error) { + _, _, e1 := Syscall(SYS_CLOSE, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := Syscall(SYS_DUP, uintptr(fd), 0, 0) + nfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Dup2(from int, to int) (err error) { + _, _, e1 := Syscall(SYS_DUP2, uintptr(from), uintptr(to), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Exit(code int) { + Syscall(SYS_EXIT, uintptr(code), 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchdir(fd int) (err error) { + _, _, e1 := Syscall(SYS_FCHDIR, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchflags(fd int, flags int) (err error) { + _, _, e1 := Syscall(SYS_FCHFLAGS, uintptr(fd), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := Syscall(SYS_FCHMOD, uintptr(fd), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Flock(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_FLOCK, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := Syscall(SYS_FPATHCONF, uintptr(fd), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, stat *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsync(fd int) (err error) { + _, _, e1 := Syscall(SYS_FSYNC, uintptr(fd), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall6(SYS_FTRUNCATE, uintptr(fd), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _, _ := RawSyscall(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETEUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _, _ := RawSyscall(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETPGID, uintptr(pid), 0, 0) + pgid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpgrp() (pgrp int) { + r0, _, _ := RawSyscall(SYS_GETPGRP, 0, 0, 0) + pgrp = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpid() (pid int) { + r0, _, _ := RawSyscall(SYS_GETPID, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getppid() (ppid int) { + r0, _, _ := RawSyscall(SYS_GETPPID, 0, 0, 0) + ppid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getpriority(which int, who int) (prio int, err error) { + r0, _, e1 := Syscall(SYS_GETPRIORITY, uintptr(which), uintptr(who), 0) + prio = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_GETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getsid(pid int) (sid int, err error) { + r0, _, e1 := RawSyscall(SYS_GETSID, uintptr(pid), 0, 0) + sid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _, _ := RawSyscall(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Issetugid() (tainted bool) { + r0, _, _ := Syscall(SYS_ISSETUGID, 0, 0, 0) + tainted = bool(r0 != 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := Syscall(SYS_KILL, uintptr(pid), uintptr(signum), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Kqueue() (fd int, err error) { + r0, _, e1 := Syscall(SYS_KQUEUE, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LCHOWN, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, backlog int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(backlog), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKDIR, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKFIFO, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_MKNOD, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_PATHCONF, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + val = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE, uintptr(fd), uintptr(_p0), uintptr(len(p)), 0, uintptr(offset), uintptr(offset>>32)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func read(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 unsafe.Pointer + if len(buf) > 0 { + _p1 = unsafe.Pointer(&buf[0]) + } else { + _p1 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_READLINK, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RENAME, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Revoke(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_REVOKE, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_RMDIR, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, r1, e1 := Syscall6(SYS_LSEEK, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(whence), 0) + newoffset = int64(int64(r1)<<32 | int64(r0)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error) { + _, _, e1 := Syscall6(SYS_SELECT, uintptr(n), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setegid(egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEGID, uintptr(egid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seteuid(euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETEUID, uintptr(euid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setgid(gid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETGID, uintptr(gid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setlogin(name string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(name) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SETLOGIN, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETPGID, uintptr(pid), uintptr(pgid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := Syscall(SYS_SETPRIORITY, uintptr(which), uintptr(who), uintptr(prio)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := RawSyscall(SYS_SETRLIMIT, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setsid() (pid int, err error) { + r0, _, e1 := RawSyscall(SYS_SETSID, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Settimeofday(tp *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_SETTIMEOFDAY, uintptr(unsafe.Pointer(tp)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setuid(uid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETUID, uintptr(uid), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, stat *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_SYMLINK, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Sync() (err error) { + _, _, e1 := Syscall(SYS_SYNC, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), 0, uintptr(length), uintptr(length>>32), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Umask(newmask int) (oldmask int) { + r0, _, _ := Syscall(SYS_UMASK, uintptr(newmask), 0, 0) + oldmask = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNLINK, uintptr(unsafe.Pointer(_p0)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Unmount(path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_UNMOUNT, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func write(fd int, p []byte) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(_p0), uintptr(len(p))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), uintptr(pos>>32), 0) + ret = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func readlen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writelen(fd int, buf *byte, nbuf int) (n int, err error) { + r0, _, e1 := Syscall(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func utimensat(dirfd int, path string, times *[2]Timespec, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go new file mode 100644 index 0000000..1d45276 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -0,0 +1,1642 @@ +// mksyscall_solaris.pl -tags solaris,amd64 syscall_solaris.go syscall_solaris_amd64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build solaris,amd64 + +package unix + +import ( + "syscall" + "unsafe" +) + +//go:cgo_import_dynamic libc_pipe pipe "libc.so" +//go:cgo_import_dynamic libc_getsockname getsockname "libsocket.so" +//go:cgo_import_dynamic libc_getcwd getcwd "libc.so" +//go:cgo_import_dynamic libc_getgroups getgroups "libc.so" +//go:cgo_import_dynamic libc_setgroups setgroups "libc.so" +//go:cgo_import_dynamic libc_wait4 wait4 "libc.so" +//go:cgo_import_dynamic libc_gethostname gethostname "libc.so" +//go:cgo_import_dynamic libc_utimes utimes "libc.so" +//go:cgo_import_dynamic libc_utimensat utimensat "libc.so" +//go:cgo_import_dynamic libc_fcntl fcntl "libc.so" +//go:cgo_import_dynamic libc_futimesat futimesat "libc.so" +//go:cgo_import_dynamic libc_accept accept "libsocket.so" +//go:cgo_import_dynamic libc___xnet_recvmsg __xnet_recvmsg "libsocket.so" +//go:cgo_import_dynamic libc___xnet_sendmsg __xnet_sendmsg "libsocket.so" +//go:cgo_import_dynamic libc_acct acct "libc.so" +//go:cgo_import_dynamic libc___makedev __makedev "libc.so" +//go:cgo_import_dynamic libc___major __major "libc.so" +//go:cgo_import_dynamic libc___minor __minor "libc.so" +//go:cgo_import_dynamic libc_ioctl ioctl "libc.so" +//go:cgo_import_dynamic libc_poll poll "libc.so" +//go:cgo_import_dynamic libc_access access "libc.so" +//go:cgo_import_dynamic libc_adjtime adjtime "libc.so" +//go:cgo_import_dynamic libc_chdir chdir "libc.so" +//go:cgo_import_dynamic libc_chmod chmod "libc.so" +//go:cgo_import_dynamic libc_chown chown "libc.so" +//go:cgo_import_dynamic libc_chroot chroot "libc.so" +//go:cgo_import_dynamic libc_close close "libc.so" +//go:cgo_import_dynamic libc_creat creat "libc.so" +//go:cgo_import_dynamic libc_dup dup "libc.so" +//go:cgo_import_dynamic libc_dup2 dup2 "libc.so" +//go:cgo_import_dynamic libc_exit exit "libc.so" +//go:cgo_import_dynamic libc_fchdir fchdir "libc.so" +//go:cgo_import_dynamic libc_fchmod fchmod "libc.so" +//go:cgo_import_dynamic libc_fchmodat fchmodat "libc.so" +//go:cgo_import_dynamic libc_fchown fchown "libc.so" +//go:cgo_import_dynamic libc_fchownat fchownat "libc.so" +//go:cgo_import_dynamic libc_fdatasync fdatasync "libc.so" +//go:cgo_import_dynamic libc_flock flock "libc.so" +//go:cgo_import_dynamic libc_fpathconf fpathconf "libc.so" +//go:cgo_import_dynamic libc_fstat fstat "libc.so" +//go:cgo_import_dynamic libc_fstatvfs fstatvfs "libc.so" +//go:cgo_import_dynamic libc_getdents getdents "libc.so" +//go:cgo_import_dynamic libc_getgid getgid "libc.so" +//go:cgo_import_dynamic libc_getpid getpid "libc.so" +//go:cgo_import_dynamic libc_getpgid getpgid "libc.so" +//go:cgo_import_dynamic libc_getpgrp getpgrp "libc.so" +//go:cgo_import_dynamic libc_geteuid geteuid "libc.so" +//go:cgo_import_dynamic libc_getegid getegid "libc.so" +//go:cgo_import_dynamic libc_getppid getppid "libc.so" +//go:cgo_import_dynamic libc_getpriority getpriority "libc.so" +//go:cgo_import_dynamic libc_getrlimit getrlimit "libc.so" +//go:cgo_import_dynamic libc_getrusage getrusage "libc.so" +//go:cgo_import_dynamic libc_gettimeofday gettimeofday "libc.so" +//go:cgo_import_dynamic libc_getuid getuid "libc.so" +//go:cgo_import_dynamic libc_kill kill "libc.so" +//go:cgo_import_dynamic libc_lchown lchown "libc.so" +//go:cgo_import_dynamic libc_link link "libc.so" +//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so" +//go:cgo_import_dynamic libc_lstat lstat "libc.so" +//go:cgo_import_dynamic libc_madvise madvise "libc.so" +//go:cgo_import_dynamic libc_mkdir mkdir "libc.so" +//go:cgo_import_dynamic libc_mkdirat mkdirat "libc.so" +//go:cgo_import_dynamic libc_mkfifo mkfifo "libc.so" +//go:cgo_import_dynamic libc_mkfifoat mkfifoat "libc.so" +//go:cgo_import_dynamic libc_mknod mknod "libc.so" +//go:cgo_import_dynamic libc_mknodat mknodat "libc.so" +//go:cgo_import_dynamic libc_mlock mlock "libc.so" +//go:cgo_import_dynamic libc_mlockall mlockall "libc.so" +//go:cgo_import_dynamic libc_mprotect mprotect "libc.so" +//go:cgo_import_dynamic libc_msync msync "libc.so" +//go:cgo_import_dynamic libc_munlock munlock "libc.so" +//go:cgo_import_dynamic libc_munlockall munlockall "libc.so" +//go:cgo_import_dynamic libc_nanosleep nanosleep "libc.so" +//go:cgo_import_dynamic libc_open open "libc.so" +//go:cgo_import_dynamic libc_openat openat "libc.so" +//go:cgo_import_dynamic libc_pathconf pathconf "libc.so" +//go:cgo_import_dynamic libc_pause pause "libc.so" +//go:cgo_import_dynamic libc_pread pread "libc.so" +//go:cgo_import_dynamic libc_pwrite pwrite "libc.so" +//go:cgo_import_dynamic libc_read read "libc.so" +//go:cgo_import_dynamic libc_readlink readlink "libc.so" +//go:cgo_import_dynamic libc_rename rename "libc.so" +//go:cgo_import_dynamic libc_renameat renameat "libc.so" +//go:cgo_import_dynamic libc_rmdir rmdir "libc.so" +//go:cgo_import_dynamic libc_lseek lseek "libc.so" +//go:cgo_import_dynamic libc_setegid setegid "libc.so" +//go:cgo_import_dynamic libc_seteuid seteuid "libc.so" +//go:cgo_import_dynamic libc_setgid setgid "libc.so" +//go:cgo_import_dynamic libc_sethostname sethostname "libc.so" +//go:cgo_import_dynamic libc_setpgid setpgid "libc.so" +//go:cgo_import_dynamic libc_setpriority setpriority "libc.so" +//go:cgo_import_dynamic libc_setregid setregid "libc.so" +//go:cgo_import_dynamic libc_setreuid setreuid "libc.so" +//go:cgo_import_dynamic libc_setrlimit setrlimit "libc.so" +//go:cgo_import_dynamic libc_setsid setsid "libc.so" +//go:cgo_import_dynamic libc_setuid setuid "libc.so" +//go:cgo_import_dynamic libc_shutdown shutdown "libsocket.so" +//go:cgo_import_dynamic libc_stat stat "libc.so" +//go:cgo_import_dynamic libc_statvfs statvfs "libc.so" +//go:cgo_import_dynamic libc_symlink symlink "libc.so" +//go:cgo_import_dynamic libc_sync sync "libc.so" +//go:cgo_import_dynamic libc_times times "libc.so" +//go:cgo_import_dynamic libc_truncate truncate "libc.so" +//go:cgo_import_dynamic libc_fsync fsync "libc.so" +//go:cgo_import_dynamic libc_ftruncate ftruncate "libc.so" +//go:cgo_import_dynamic libc_umask umask "libc.so" +//go:cgo_import_dynamic libc_uname uname "libc.so" +//go:cgo_import_dynamic libc_umount umount "libc.so" +//go:cgo_import_dynamic libc_unlink unlink "libc.so" +//go:cgo_import_dynamic libc_unlinkat unlinkat "libc.so" +//go:cgo_import_dynamic libc_ustat ustat "libc.so" +//go:cgo_import_dynamic libc_utime utime "libc.so" +//go:cgo_import_dynamic libc___xnet_bind __xnet_bind "libsocket.so" +//go:cgo_import_dynamic libc___xnet_connect __xnet_connect "libsocket.so" +//go:cgo_import_dynamic libc_mmap mmap "libc.so" +//go:cgo_import_dynamic libc_munmap munmap "libc.so" +//go:cgo_import_dynamic libc___xnet_sendto __xnet_sendto "libsocket.so" +//go:cgo_import_dynamic libc___xnet_socket __xnet_socket "libsocket.so" +//go:cgo_import_dynamic libc___xnet_socketpair __xnet_socketpair "libsocket.so" +//go:cgo_import_dynamic libc_write write "libc.so" +//go:cgo_import_dynamic libc___xnet_getsockopt __xnet_getsockopt "libsocket.so" +//go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" +//go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" +//go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" + +//go:linkname procpipe libc_pipe +//go:linkname procgetsockname libc_getsockname +//go:linkname procGetcwd libc_getcwd +//go:linkname procgetgroups libc_getgroups +//go:linkname procsetgroups libc_setgroups +//go:linkname procwait4 libc_wait4 +//go:linkname procgethostname libc_gethostname +//go:linkname procutimes libc_utimes +//go:linkname procutimensat libc_utimensat +//go:linkname procfcntl libc_fcntl +//go:linkname procfutimesat libc_futimesat +//go:linkname procaccept libc_accept +//go:linkname proc__xnet_recvmsg libc___xnet_recvmsg +//go:linkname proc__xnet_sendmsg libc___xnet_sendmsg +//go:linkname procacct libc_acct +//go:linkname proc__makedev libc___makedev +//go:linkname proc__major libc___major +//go:linkname proc__minor libc___minor +//go:linkname procioctl libc_ioctl +//go:linkname procpoll libc_poll +//go:linkname procAccess libc_access +//go:linkname procAdjtime libc_adjtime +//go:linkname procChdir libc_chdir +//go:linkname procChmod libc_chmod +//go:linkname procChown libc_chown +//go:linkname procChroot libc_chroot +//go:linkname procClose libc_close +//go:linkname procCreat libc_creat +//go:linkname procDup libc_dup +//go:linkname procDup2 libc_dup2 +//go:linkname procExit libc_exit +//go:linkname procFchdir libc_fchdir +//go:linkname procFchmod libc_fchmod +//go:linkname procFchmodat libc_fchmodat +//go:linkname procFchown libc_fchown +//go:linkname procFchownat libc_fchownat +//go:linkname procFdatasync libc_fdatasync +//go:linkname procFlock libc_flock +//go:linkname procFpathconf libc_fpathconf +//go:linkname procFstat libc_fstat +//go:linkname procFstatvfs libc_fstatvfs +//go:linkname procGetdents libc_getdents +//go:linkname procGetgid libc_getgid +//go:linkname procGetpid libc_getpid +//go:linkname procGetpgid libc_getpgid +//go:linkname procGetpgrp libc_getpgrp +//go:linkname procGeteuid libc_geteuid +//go:linkname procGetegid libc_getegid +//go:linkname procGetppid libc_getppid +//go:linkname procGetpriority libc_getpriority +//go:linkname procGetrlimit libc_getrlimit +//go:linkname procGetrusage libc_getrusage +//go:linkname procGettimeofday libc_gettimeofday +//go:linkname procGetuid libc_getuid +//go:linkname procKill libc_kill +//go:linkname procLchown libc_lchown +//go:linkname procLink libc_link +//go:linkname proc__xnet_llisten libc___xnet_llisten +//go:linkname procLstat libc_lstat +//go:linkname procMadvise libc_madvise +//go:linkname procMkdir libc_mkdir +//go:linkname procMkdirat libc_mkdirat +//go:linkname procMkfifo libc_mkfifo +//go:linkname procMkfifoat libc_mkfifoat +//go:linkname procMknod libc_mknod +//go:linkname procMknodat libc_mknodat +//go:linkname procMlock libc_mlock +//go:linkname procMlockall libc_mlockall +//go:linkname procMprotect libc_mprotect +//go:linkname procMsync libc_msync +//go:linkname procMunlock libc_munlock +//go:linkname procMunlockall libc_munlockall +//go:linkname procNanosleep libc_nanosleep +//go:linkname procOpen libc_open +//go:linkname procOpenat libc_openat +//go:linkname procPathconf libc_pathconf +//go:linkname procPause libc_pause +//go:linkname procPread libc_pread +//go:linkname procPwrite libc_pwrite +//go:linkname procread libc_read +//go:linkname procReadlink libc_readlink +//go:linkname procRename libc_rename +//go:linkname procRenameat libc_renameat +//go:linkname procRmdir libc_rmdir +//go:linkname proclseek libc_lseek +//go:linkname procSetegid libc_setegid +//go:linkname procSeteuid libc_seteuid +//go:linkname procSetgid libc_setgid +//go:linkname procSethostname libc_sethostname +//go:linkname procSetpgid libc_setpgid +//go:linkname procSetpriority libc_setpriority +//go:linkname procSetregid libc_setregid +//go:linkname procSetreuid libc_setreuid +//go:linkname procSetrlimit libc_setrlimit +//go:linkname procSetsid libc_setsid +//go:linkname procSetuid libc_setuid +//go:linkname procshutdown libc_shutdown +//go:linkname procStat libc_stat +//go:linkname procStatvfs libc_statvfs +//go:linkname procSymlink libc_symlink +//go:linkname procSync libc_sync +//go:linkname procTimes libc_times +//go:linkname procTruncate libc_truncate +//go:linkname procFsync libc_fsync +//go:linkname procFtruncate libc_ftruncate +//go:linkname procUmask libc_umask +//go:linkname procUname libc_uname +//go:linkname procumount libc_umount +//go:linkname procUnlink libc_unlink +//go:linkname procUnlinkat libc_unlinkat +//go:linkname procUstat libc_ustat +//go:linkname procUtime libc_utime +//go:linkname proc__xnet_bind libc___xnet_bind +//go:linkname proc__xnet_connect libc___xnet_connect +//go:linkname procmmap libc_mmap +//go:linkname procmunmap libc_munmap +//go:linkname proc__xnet_sendto libc___xnet_sendto +//go:linkname proc__xnet_socket libc___xnet_socket +//go:linkname proc__xnet_socketpair libc___xnet_socketpair +//go:linkname procwrite libc_write +//go:linkname proc__xnet_getsockopt libc___xnet_getsockopt +//go:linkname procgetpeername libc_getpeername +//go:linkname procsetsockopt libc_setsockopt +//go:linkname procrecvfrom libc_recvfrom + +var ( + procpipe, + procgetsockname, + procGetcwd, + procgetgroups, + procsetgroups, + procwait4, + procgethostname, + procutimes, + procutimensat, + procfcntl, + procfutimesat, + procaccept, + proc__xnet_recvmsg, + proc__xnet_sendmsg, + procacct, + proc__makedev, + proc__major, + proc__minor, + procioctl, + procpoll, + procAccess, + procAdjtime, + procChdir, + procChmod, + procChown, + procChroot, + procClose, + procCreat, + procDup, + procDup2, + procExit, + procFchdir, + procFchmod, + procFchmodat, + procFchown, + procFchownat, + procFdatasync, + procFlock, + procFpathconf, + procFstat, + procFstatvfs, + procGetdents, + procGetgid, + procGetpid, + procGetpgid, + procGetpgrp, + procGeteuid, + procGetegid, + procGetppid, + procGetpriority, + procGetrlimit, + procGetrusage, + procGettimeofday, + procGetuid, + procKill, + procLchown, + procLink, + proc__xnet_llisten, + procLstat, + procMadvise, + procMkdir, + procMkdirat, + procMkfifo, + procMkfifoat, + procMknod, + procMknodat, + procMlock, + procMlockall, + procMprotect, + procMsync, + procMunlock, + procMunlockall, + procNanosleep, + procOpen, + procOpenat, + procPathconf, + procPause, + procPread, + procPwrite, + procread, + procReadlink, + procRename, + procRenameat, + procRmdir, + proclseek, + procSetegid, + procSeteuid, + procSetgid, + procSethostname, + procSetpgid, + procSetpriority, + procSetregid, + procSetreuid, + procSetrlimit, + procSetsid, + procSetuid, + procshutdown, + procStat, + procStatvfs, + procSymlink, + procSync, + procTimes, + procTruncate, + procFsync, + procFtruncate, + procUmask, + procUname, + procumount, + procUnlink, + procUnlinkat, + procUstat, + procUtime, + proc__xnet_bind, + proc__xnet_connect, + procmmap, + procmunmap, + proc__xnet_sendto, + proc__xnet_socket, + proc__xnet_socketpair, + procwrite, + proc__xnet_getsockopt, + procgetpeername, + procsetsockopt, + procrecvfrom syscallFunc +) + +func pipe(p *[2]_C_int) (n int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procpipe)), 1, uintptr(unsafe.Pointer(p)), 0, 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetsockname)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getcwd(buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetcwd)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func getgroups(ngid int, gid *_Gid_t) (n int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func setgroups(ngid int, gid *_Gid_t) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procsetgroups)), 2, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func wait4(pid int32, statusp *_C_int, options int, rusage *Rusage) (wpid int32, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwait4)), 4, uintptr(pid), uintptr(unsafe.Pointer(statusp)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + wpid = int32(r0) + if e1 != 0 { + err = e1 + } + return +} + +func gethostname(buf []byte) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func utimes(path string, times *[2]Timeval) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimes)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func utimensat(fd int, path string, times *[2]Timespec, flag int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procutimensat)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func fcntl(fd int, cmd int, arg int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfcntl)), 3, uintptr(fd), uintptr(cmd), uintptr(arg), 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func futimesat(fildes int, path *byte, times *[2]Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procfutimesat)), 3, uintptr(fildes), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(times)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procaccept)), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_recvmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendmsg)), 3, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func acct(path *byte) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procacct)), 1, uintptr(unsafe.Pointer(path)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func __makedev(version int, major uint, minor uint) (val uint64) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__makedev)), 3, uintptr(version), uintptr(major), uintptr(minor), 0, 0, 0) + val = uint64(r0) + return +} + +func __major(version int, dev uint64) (val uint) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__major)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) + val = uint(r0) + return +} + +func __minor(version int, dev uint64) (val uint) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&proc__minor)), 2, uintptr(version), uintptr(dev), 0, 0, 0, 0) + val = uint(r0) + return +} + +func ioctl(fd int, req uint, arg uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procioctl)), 3, uintptr(fd), uintptr(req), uintptr(arg), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procpoll)), 3, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Access(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAccess)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procAdjtime)), 2, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Chdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Chmod(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChmod)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Chown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Chroot(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procChroot)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Close(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procClose)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Creat(path string, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procCreat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Dup(fd int) (nfd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup)), 1, uintptr(fd), 0, 0, 0, 0, 0) + nfd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Dup2(oldfd int, newfd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procDup2)), 2, uintptr(oldfd), uintptr(newfd), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Exit(code int) { + sysvicall6(uintptr(unsafe.Pointer(&procExit)), 1, uintptr(code), 0, 0, 0, 0, 0) + return +} + +func Fchdir(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchdir)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchmod(fd int, mode uint32) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmod)), 2, uintptr(fd), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchmodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchown)), 3, uintptr(fd), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFchownat)), 5, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fdatasync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFdatasync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Flock(fd int, how int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFlock)), 2, uintptr(fd), uintptr(how), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fpathconf(fd int, name int) (val int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFpathconf)), 2, uintptr(fd), uintptr(name), 0, 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstat)), 2, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fstatvfs(fd int, vfsstat *Statvfs_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFstatvfs)), 2, uintptr(fd), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getdents(fd int, buf []byte, basep *uintptr) (n int, err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetdents)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(basep)), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Getgid() (gid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetgid)), 0, 0, 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +func Getpid() (pid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + return +} + +func Getpgid(pid int) (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgid)), 1, uintptr(pid), 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Getpgrp() (pgid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetpgrp)), 0, 0, 0, 0, 0, 0, 0) + pgid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Geteuid() (euid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGeteuid)), 0, 0, 0, 0, 0, 0, 0) + euid = int(r0) + return +} + +func Getegid() (egid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetegid)), 0, 0, 0, 0, 0, 0, 0) + egid = int(r0) + return +} + +func Getppid() (ppid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procGetppid)), 0, 0, 0, 0, 0, 0, 0) + ppid = int(r0) + return +} + +func Getpriority(which int, who int) (n int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procGetpriority)), 2, uintptr(which), uintptr(who), 0, 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Getrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getrusage(who int, rusage *Rusage) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGetrusage)), 2, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procGettimeofday)), 1, uintptr(unsafe.Pointer(tv)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Getuid() (uid int) { + r0, _, _ := rawSysvicall6(uintptr(unsafe.Pointer(&procGetuid)), 0, 0, 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +func Kill(pid int, signum syscall.Signal) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procKill)), 2, uintptr(pid), uintptr(signum), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Lchown(path string, uid int, gid int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLchown)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Link(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Listen(s int, backlog int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Lstat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procLstat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Madvise(b []byte, advice int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMadvise)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(advice), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mkdir(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdir)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mkdirat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkdirat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mkfifo(path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifo)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mkfifoat(dirfd int, path string, mode uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMkfifoat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mknod(path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknod)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMknodat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mlockall(flags int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMlockall)), 1, uintptr(flags), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Mprotect(b []byte, prot int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMprotect)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(prot), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Msync(b []byte, flags int) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMsync)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), uintptr(flags), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Munlock(b []byte) (err error) { + var _p0 *byte + if len(b) > 0 { + _p0 = &b[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlock)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(b)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Munlockall() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procMunlockall)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Nanosleep(time *Timespec, leftover *Timespec) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procNanosleep)), 2, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Open(path string, mode int, perm uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpen)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Openat(dirfd int, path string, flags int, mode uint32) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procOpenat)), 4, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), uintptr(mode), 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Pathconf(path string, name int) (val int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPathconf)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0, 0, 0, 0) + val = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Pause() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPause)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPread)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procPwrite)), 4, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func read(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procread)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Readlink(path string, buf []byte) (n int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + if len(buf) > 0 { + _p1 = &buf[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procReadlink)), 3, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(len(buf)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Rename(from string, to string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRename)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(oldpath) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(newpath) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRenameat)), 4, uintptr(olddirfd), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Rmdir(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procRmdir)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proclseek)), 3, uintptr(fd), uintptr(offset), uintptr(whence), 0, 0, 0) + newoffset = int64(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Setegid(egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetegid)), 1, uintptr(egid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Seteuid(euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSeteuid)), 1, uintptr(euid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setgid(gid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetgid)), 1, uintptr(gid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Sethostname(p []byte) (err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSethostname)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setpgid(pid int, pgid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetpgid)), 2, uintptr(pid), uintptr(pgid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setpriority(which int, who int, prio int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSetpriority)), 3, uintptr(which), uintptr(who), uintptr(prio), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetregid)), 2, uintptr(rgid), uintptr(egid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetreuid)), 2, uintptr(ruid), uintptr(euid), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setrlimit(which int, lim *Rlimit) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetrlimit)), 2, uintptr(which), uintptr(unsafe.Pointer(lim)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Setsid() (pid int, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetsid)), 0, 0, 0, 0, 0, 0, 0) + pid = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Setuid(uid int) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procSetuid)), 1, uintptr(uid), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Shutdown(s int, how int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procshutdown)), 2, uintptr(s), uintptr(how), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Stat(path string, stat *Stat_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStat)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Statvfs(path string, vfsstat *Statvfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procStatvfs)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(vfsstat)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Symlink(path string, link string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(link) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSymlink)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Sync() (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procSync)), 0, 0, 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Times(tms *Tms) (ticks uintptr, err error) { + r0, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procTimes)), 1, uintptr(unsafe.Pointer(tms)), 0, 0, 0, 0, 0) + ticks = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procTruncate)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Fsync(fd int) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFsync)), 1, uintptr(fd), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procFtruncate)), 2, uintptr(fd), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Umask(mask int) (oldmask int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procUmask)), 1, uintptr(mask), 0, 0, 0, 0, 0) + oldmask = int(r0) + return +} + +func Uname(buf *Utsname) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procUname)), 1, uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Unmount(target string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(target) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procumount)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Unlink(path string) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlink)), 1, uintptr(unsafe.Pointer(_p0)), 0, 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Unlinkat(dirfd int, path string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUnlinkat)), 3, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUstat)), 2, uintptr(dev), uintptr(unsafe.Pointer(ubuf)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func Utime(path string, buf *Utimbuf) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procUtime)), 2, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_bind)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_connect)), 3, uintptr(s), uintptr(addr), uintptr(addrlen), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmmap)), 6, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + ret = uintptr(r0) + if e1 != 0 { + err = e1 + } + return +} + +func munmap(addr uintptr, length uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procmunmap)), 2, uintptr(addr), uintptr(length), 0, 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_sendto)), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = e1 + } + return +} + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socket)), 3, uintptr(domain), uintptr(typ), uintptr(proto), 0, 0, 0) + fd = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&proc__xnet_socketpair)), 4, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func write(fd int, p []byte) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procwrite)), 3, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), 0, 0, 0) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_getsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = e1 + } + return +} + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := rawSysvicall6(uintptr(unsafe.Pointer(&procgetpeername)), 3, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), 0, 0, 0) + if e1 != 0 { + err = e1 + } + return +} + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procsetsockopt)), 5, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = e1 + } + return +} + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 *byte + if len(p) > 0 { + _p0 = &p[0] + } + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procrecvfrom)), 6, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go new file mode 100644 index 0000000..83bb935 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_386.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go new file mode 100644 index 0000000..83bb935 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_amd64.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go new file mode 100644 index 0000000..83bb935 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysctl_openbsd_arm.go @@ -0,0 +1,270 @@ +// mksysctl_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +package unix + +type mibentry struct { + ctlname string + ctloid []_C_int +} + +var sysctlMib = []mibentry{ + {"ddb.console", []_C_int{9, 6}}, + {"ddb.log", []_C_int{9, 7}}, + {"ddb.max_line", []_C_int{9, 3}}, + {"ddb.max_width", []_C_int{9, 2}}, + {"ddb.panic", []_C_int{9, 5}}, + {"ddb.radix", []_C_int{9, 1}}, + {"ddb.tab_stop_width", []_C_int{9, 4}}, + {"ddb.trigger", []_C_int{9, 8}}, + {"fs.posix.setuid", []_C_int{3, 1, 1}}, + {"hw.allowpowerdown", []_C_int{6, 22}}, + {"hw.byteorder", []_C_int{6, 4}}, + {"hw.cpuspeed", []_C_int{6, 12}}, + {"hw.diskcount", []_C_int{6, 10}}, + {"hw.disknames", []_C_int{6, 8}}, + {"hw.diskstats", []_C_int{6, 9}}, + {"hw.machine", []_C_int{6, 1}}, + {"hw.model", []_C_int{6, 2}}, + {"hw.ncpu", []_C_int{6, 3}}, + {"hw.ncpufound", []_C_int{6, 21}}, + {"hw.pagesize", []_C_int{6, 7}}, + {"hw.physmem", []_C_int{6, 19}}, + {"hw.product", []_C_int{6, 15}}, + {"hw.serialno", []_C_int{6, 17}}, + {"hw.setperf", []_C_int{6, 13}}, + {"hw.usermem", []_C_int{6, 20}}, + {"hw.uuid", []_C_int{6, 18}}, + {"hw.vendor", []_C_int{6, 14}}, + {"hw.version", []_C_int{6, 16}}, + {"kern.arandom", []_C_int{1, 37}}, + {"kern.argmax", []_C_int{1, 8}}, + {"kern.boottime", []_C_int{1, 21}}, + {"kern.bufcachepercent", []_C_int{1, 72}}, + {"kern.ccpu", []_C_int{1, 45}}, + {"kern.clockrate", []_C_int{1, 12}}, + {"kern.consdev", []_C_int{1, 75}}, + {"kern.cp_time", []_C_int{1, 40}}, + {"kern.cp_time2", []_C_int{1, 71}}, + {"kern.cryptodevallowsoft", []_C_int{1, 53}}, + {"kern.domainname", []_C_int{1, 22}}, + {"kern.file", []_C_int{1, 73}}, + {"kern.forkstat", []_C_int{1, 42}}, + {"kern.fscale", []_C_int{1, 46}}, + {"kern.fsync", []_C_int{1, 33}}, + {"kern.hostid", []_C_int{1, 11}}, + {"kern.hostname", []_C_int{1, 10}}, + {"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}}, + {"kern.job_control", []_C_int{1, 19}}, + {"kern.malloc.buckets", []_C_int{1, 39, 1}}, + {"kern.malloc.kmemnames", []_C_int{1, 39, 3}}, + {"kern.maxclusters", []_C_int{1, 67}}, + {"kern.maxfiles", []_C_int{1, 7}}, + {"kern.maxlocksperuid", []_C_int{1, 70}}, + {"kern.maxpartitions", []_C_int{1, 23}}, + {"kern.maxproc", []_C_int{1, 6}}, + {"kern.maxthread", []_C_int{1, 25}}, + {"kern.maxvnodes", []_C_int{1, 5}}, + {"kern.mbstat", []_C_int{1, 59}}, + {"kern.msgbuf", []_C_int{1, 48}}, + {"kern.msgbufsize", []_C_int{1, 38}}, + {"kern.nchstats", []_C_int{1, 41}}, + {"kern.netlivelocks", []_C_int{1, 76}}, + {"kern.nfiles", []_C_int{1, 56}}, + {"kern.ngroups", []_C_int{1, 18}}, + {"kern.nosuidcoredump", []_C_int{1, 32}}, + {"kern.nprocs", []_C_int{1, 47}}, + {"kern.nselcoll", []_C_int{1, 43}}, + {"kern.nthreads", []_C_int{1, 26}}, + {"kern.numvnodes", []_C_int{1, 58}}, + {"kern.osrelease", []_C_int{1, 2}}, + {"kern.osrevision", []_C_int{1, 3}}, + {"kern.ostype", []_C_int{1, 1}}, + {"kern.osversion", []_C_int{1, 27}}, + {"kern.pool_debug", []_C_int{1, 77}}, + {"kern.posix1version", []_C_int{1, 17}}, + {"kern.proc", []_C_int{1, 66}}, + {"kern.random", []_C_int{1, 31}}, + {"kern.rawpartition", []_C_int{1, 24}}, + {"kern.saved_ids", []_C_int{1, 20}}, + {"kern.securelevel", []_C_int{1, 9}}, + {"kern.seminfo", []_C_int{1, 61}}, + {"kern.shminfo", []_C_int{1, 62}}, + {"kern.somaxconn", []_C_int{1, 28}}, + {"kern.sominconn", []_C_int{1, 29}}, + {"kern.splassert", []_C_int{1, 54}}, + {"kern.stackgap_random", []_C_int{1, 50}}, + {"kern.sysvipc_info", []_C_int{1, 51}}, + {"kern.sysvmsg", []_C_int{1, 34}}, + {"kern.sysvsem", []_C_int{1, 35}}, + {"kern.sysvshm", []_C_int{1, 36}}, + {"kern.timecounter.choice", []_C_int{1, 69, 4}}, + {"kern.timecounter.hardware", []_C_int{1, 69, 3}}, + {"kern.timecounter.tick", []_C_int{1, 69, 1}}, + {"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}}, + {"kern.tty.maxptys", []_C_int{1, 44, 6}}, + {"kern.tty.nptys", []_C_int{1, 44, 7}}, + {"kern.tty.tk_cancc", []_C_int{1, 44, 4}}, + {"kern.tty.tk_nin", []_C_int{1, 44, 1}}, + {"kern.tty.tk_nout", []_C_int{1, 44, 2}}, + {"kern.tty.tk_rawcc", []_C_int{1, 44, 3}}, + {"kern.tty.ttyinfo", []_C_int{1, 44, 5}}, + {"kern.ttycount", []_C_int{1, 57}}, + {"kern.userasymcrypto", []_C_int{1, 60}}, + {"kern.usercrypto", []_C_int{1, 52}}, + {"kern.usermount", []_C_int{1, 30}}, + {"kern.version", []_C_int{1, 4}}, + {"kern.vnode", []_C_int{1, 13}}, + {"kern.watchdog.auto", []_C_int{1, 64, 2}}, + {"kern.watchdog.period", []_C_int{1, 64, 1}}, + {"net.bpf.bufsize", []_C_int{4, 31, 1}}, + {"net.bpf.maxbufsize", []_C_int{4, 31, 2}}, + {"net.inet.ah.enable", []_C_int{4, 2, 51, 1}}, + {"net.inet.ah.stats", []_C_int{4, 2, 51, 2}}, + {"net.inet.carp.allow", []_C_int{4, 2, 112, 1}}, + {"net.inet.carp.log", []_C_int{4, 2, 112, 3}}, + {"net.inet.carp.preempt", []_C_int{4, 2, 112, 2}}, + {"net.inet.carp.stats", []_C_int{4, 2, 112, 4}}, + {"net.inet.divert.recvspace", []_C_int{4, 2, 258, 1}}, + {"net.inet.divert.sendspace", []_C_int{4, 2, 258, 2}}, + {"net.inet.divert.stats", []_C_int{4, 2, 258, 3}}, + {"net.inet.esp.enable", []_C_int{4, 2, 50, 1}}, + {"net.inet.esp.stats", []_C_int{4, 2, 50, 4}}, + {"net.inet.esp.udpencap", []_C_int{4, 2, 50, 2}}, + {"net.inet.esp.udpencap_port", []_C_int{4, 2, 50, 3}}, + {"net.inet.etherip.allow", []_C_int{4, 2, 97, 1}}, + {"net.inet.etherip.stats", []_C_int{4, 2, 97, 2}}, + {"net.inet.gre.allow", []_C_int{4, 2, 47, 1}}, + {"net.inet.gre.wccp", []_C_int{4, 2, 47, 2}}, + {"net.inet.icmp.bmcastecho", []_C_int{4, 2, 1, 2}}, + {"net.inet.icmp.errppslimit", []_C_int{4, 2, 1, 3}}, + {"net.inet.icmp.maskrepl", []_C_int{4, 2, 1, 1}}, + {"net.inet.icmp.rediraccept", []_C_int{4, 2, 1, 4}}, + {"net.inet.icmp.redirtimeout", []_C_int{4, 2, 1, 5}}, + {"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}}, + {"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}}, + {"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}}, + {"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}}, + {"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}}, + {"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}}, + {"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}}, + {"net.inet.ip.ifq.drops", []_C_int{4, 2, 0, 30, 3}}, + {"net.inet.ip.ifq.len", []_C_int{4, 2, 0, 30, 1}}, + {"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}}, + {"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}}, + {"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}}, + {"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}}, + {"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}}, + {"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}}, + {"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}}, + {"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}}, + {"net.inet.ip.multipath", []_C_int{4, 2, 0, 32}}, + {"net.inet.ip.portfirst", []_C_int{4, 2, 0, 7}}, + {"net.inet.ip.porthifirst", []_C_int{4, 2, 0, 9}}, + {"net.inet.ip.porthilast", []_C_int{4, 2, 0, 10}}, + {"net.inet.ip.portlast", []_C_int{4, 2, 0, 8}}, + {"net.inet.ip.redirect", []_C_int{4, 2, 0, 2}}, + {"net.inet.ip.sourceroute", []_C_int{4, 2, 0, 5}}, + {"net.inet.ip.stats", []_C_int{4, 2, 0, 33}}, + {"net.inet.ip.ttl", []_C_int{4, 2, 0, 3}}, + {"net.inet.ipcomp.enable", []_C_int{4, 2, 108, 1}}, + {"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}}, + {"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}}, + {"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}}, + {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}}, + {"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}}, + {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}}, + {"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}}, + {"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}}, + {"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}}, + {"net.inet.tcp.drop", []_C_int{4, 2, 6, 19}}, + {"net.inet.tcp.ecn", []_C_int{4, 2, 6, 14}}, + {"net.inet.tcp.ident", []_C_int{4, 2, 6, 9}}, + {"net.inet.tcp.keepidle", []_C_int{4, 2, 6, 3}}, + {"net.inet.tcp.keepinittime", []_C_int{4, 2, 6, 2}}, + {"net.inet.tcp.keepintvl", []_C_int{4, 2, 6, 4}}, + {"net.inet.tcp.mssdflt", []_C_int{4, 2, 6, 11}}, + {"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}}, + {"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}}, + {"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}}, + {"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}}, + {"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}}, + {"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}}, + {"net.inet.tcp.slowhz", []_C_int{4, 2, 6, 5}}, + {"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}}, + {"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}}, + {"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}}, + {"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}}, + {"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}}, + {"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}}, + {"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}}, + {"net.inet.udp.stats", []_C_int{4, 2, 17, 5}}, + {"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}}, + {"net.inet6.divert.sendspace", []_C_int{4, 24, 86, 2}}, + {"net.inet6.divert.stats", []_C_int{4, 24, 86, 3}}, + {"net.inet6.icmp6.errppslimit", []_C_int{4, 24, 30, 14}}, + {"net.inet6.icmp6.mtudisc_hiwat", []_C_int{4, 24, 30, 16}}, + {"net.inet6.icmp6.mtudisc_lowat", []_C_int{4, 24, 30, 17}}, + {"net.inet6.icmp6.nd6_debug", []_C_int{4, 24, 30, 18}}, + {"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}}, + {"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}}, + {"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}}, + {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}}, + {"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}}, + {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}}, + {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}}, + {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}}, + {"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}}, + {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}}, + {"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}}, + {"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}}, + {"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}}, + {"net.inet6.ip6.defmcasthlim", []_C_int{4, 24, 17, 18}}, + {"net.inet6.ip6.forwarding", []_C_int{4, 24, 17, 1}}, + {"net.inet6.ip6.forwsrcrt", []_C_int{4, 24, 17, 5}}, + {"net.inet6.ip6.hdrnestlimit", []_C_int{4, 24, 17, 15}}, + {"net.inet6.ip6.hlim", []_C_int{4, 24, 17, 3}}, + {"net.inet6.ip6.log_interval", []_C_int{4, 24, 17, 14}}, + {"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}}, + {"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}}, + {"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}}, + {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}}, + {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}}, + {"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}}, + {"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}}, + {"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}}, + {"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}}, + {"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}}, + {"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}}, + {"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}}, + {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}}, + {"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}}, + {"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}}, + {"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}}, + {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}}, + {"net.key.sadb_dump", []_C_int{4, 30, 1}}, + {"net.key.spd_dump", []_C_int{4, 30, 2}}, + {"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}}, + {"net.mpls.ifq.drops", []_C_int{4, 33, 3, 3}}, + {"net.mpls.ifq.len", []_C_int{4, 33, 3, 1}}, + {"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}}, + {"net.mpls.mapttl_ip", []_C_int{4, 33, 5}}, + {"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}}, + {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}}, + {"net.mpls.ttl", []_C_int{4, 33, 2}}, + {"net.pflow.stats", []_C_int{4, 34, 1}}, + {"net.pipex.enable", []_C_int{4, 35, 1}}, + {"vm.anonmin", []_C_int{2, 7}}, + {"vm.loadavg", []_C_int{2, 2}}, + {"vm.maxslp", []_C_int{2, 10}}, + {"vm.nkmempages", []_C_int{2, 6}}, + {"vm.psstrings", []_C_int{2, 3}}, + {"vm.swapencrypt.enable", []_C_int{2, 5, 0}}, + {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}}, + {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}}, + {"vm.uspace", []_C_int{2, 11}}, + {"vm.uvmexp", []_C_int{2, 4}}, + {"vm.vmmeter", []_C_int{2, 1}}, + {"vm.vnodemin", []_C_int{2, 9}}, + {"vm.vtextmin", []_C_int{2, 8}}, +} diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go new file mode 100644 index 0000000..2786773 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go @@ -0,0 +1,398 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAME_EXT = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_MAXSYSCALL = 490 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go new file mode 100644 index 0000000..09de240 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_amd64.go @@ -0,0 +1,398 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include/sys/syscall.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_CHUD = 185 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_STACK_SNAPSHOT = 365 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS___MAC_GET_LCID = 391 + SYS___MAC_GET_LCTX = 392 + SYS___MAC_SET_LCTX = 393 + SYS_SETLCID = 394 + SYS_GETLCID = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAME_EXT = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_MAXSYSCALL = 490 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go new file mode 100644 index 0000000..41cb6ed --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go @@ -0,0 +1,426 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAMEATX_NP = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_MAXSYSCALL = 522 + SYS_INVALID = 63 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go new file mode 100644 index 0000000..075816c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm64.go @@ -0,0 +1,426 @@ +// mksysnum_darwin.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.2.sdk/usr/include/sys/syscall.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,darwin + +package unix + +const ( + SYS_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_CHDIR = 12 + SYS_FCHDIR = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_CHOWN = 16 + SYS_GETFSSTAT = 18 + SYS_GETPID = 20 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_GETEUID = 25 + SYS_PTRACE = 26 + SYS_RECVMSG = 27 + SYS_SENDMSG = 28 + SYS_RECVFROM = 29 + SYS_ACCEPT = 30 + SYS_GETPEERNAME = 31 + SYS_GETSOCKNAME = 32 + SYS_ACCESS = 33 + SYS_CHFLAGS = 34 + SYS_FCHFLAGS = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_GETPPID = 39 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_GETEGID = 43 + SYS_SIGACTION = 46 + SYS_GETGID = 47 + SYS_SIGPROCMASK = 48 + SYS_GETLOGIN = 49 + SYS_SETLOGIN = 50 + SYS_ACCT = 51 + SYS_SIGPENDING = 52 + SYS_SIGALTSTACK = 53 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_REVOKE = 56 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETPGID = 82 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_GETDTABLESIZE = 89 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_GETPRIORITY = 100 + SYS_BIND = 104 + SYS_SETSOCKOPT = 105 + SYS_LISTEN = 106 + SYS_SIGSUSPEND = 111 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_FLOCK = 131 + SYS_MKFIFO = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_FUTIMES = 139 + SYS_ADJTIME = 140 + SYS_GETHOSTUUID = 142 + SYS_SETSID = 147 + SYS_GETPGID = 151 + SYS_SETPRIVEXEC = 152 + SYS_PREAD = 153 + SYS_PWRITE = 154 + SYS_NFSSVC = 155 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UNMOUNT = 159 + SYS_GETFH = 161 + SYS_QUOTACTL = 165 + SYS_MOUNT = 167 + SYS_CSOPS = 169 + SYS_CSOPS_AUDITTOKEN = 170 + SYS_WAITID = 173 + SYS_KDEBUG_TYPEFILTER = 177 + SYS_KDEBUG_TRACE_STRING = 178 + SYS_KDEBUG_TRACE64 = 179 + SYS_KDEBUG_TRACE = 180 + SYS_SETGID = 181 + SYS_SETEGID = 182 + SYS_SETEUID = 183 + SYS_SIGRETURN = 184 + SYS_FDATASYNC = 187 + SYS_STAT = 188 + SYS_FSTAT = 189 + SYS_LSTAT = 190 + SYS_PATHCONF = 191 + SYS_FPATHCONF = 192 + SYS_GETRLIMIT = 194 + SYS_SETRLIMIT = 195 + SYS_GETDIRENTRIES = 196 + SYS_MMAP = 197 + SYS_LSEEK = 199 + SYS_TRUNCATE = 200 + SYS_FTRUNCATE = 201 + SYS_SYSCTL = 202 + SYS_MLOCK = 203 + SYS_MUNLOCK = 204 + SYS_UNDELETE = 205 + SYS_OPEN_DPROTECTED_NP = 216 + SYS_GETATTRLIST = 220 + SYS_SETATTRLIST = 221 + SYS_GETDIRENTRIESATTR = 222 + SYS_EXCHANGEDATA = 223 + SYS_SEARCHFS = 225 + SYS_DELETE = 226 + SYS_COPYFILE = 227 + SYS_FGETATTRLIST = 228 + SYS_FSETATTRLIST = 229 + SYS_POLL = 230 + SYS_WATCHEVENT = 231 + SYS_WAITEVENT = 232 + SYS_MODWATCH = 233 + SYS_GETXATTR = 234 + SYS_FGETXATTR = 235 + SYS_SETXATTR = 236 + SYS_FSETXATTR = 237 + SYS_REMOVEXATTR = 238 + SYS_FREMOVEXATTR = 239 + SYS_LISTXATTR = 240 + SYS_FLISTXATTR = 241 + SYS_FSCTL = 242 + SYS_INITGROUPS = 243 + SYS_POSIX_SPAWN = 244 + SYS_FFSCTL = 245 + SYS_NFSCLNT = 247 + SYS_FHOPEN = 248 + SYS_MINHERIT = 250 + SYS_SEMSYS = 251 + SYS_MSGSYS = 252 + SYS_SHMSYS = 253 + SYS_SEMCTL = 254 + SYS_SEMGET = 255 + SYS_SEMOP = 256 + SYS_MSGCTL = 258 + SYS_MSGGET = 259 + SYS_MSGSND = 260 + SYS_MSGRCV = 261 + SYS_SHMAT = 262 + SYS_SHMCTL = 263 + SYS_SHMDT = 264 + SYS_SHMGET = 265 + SYS_SHM_OPEN = 266 + SYS_SHM_UNLINK = 267 + SYS_SEM_OPEN = 268 + SYS_SEM_CLOSE = 269 + SYS_SEM_UNLINK = 270 + SYS_SEM_WAIT = 271 + SYS_SEM_TRYWAIT = 272 + SYS_SEM_POST = 273 + SYS_SYSCTLBYNAME = 274 + SYS_OPEN_EXTENDED = 277 + SYS_UMASK_EXTENDED = 278 + SYS_STAT_EXTENDED = 279 + SYS_LSTAT_EXTENDED = 280 + SYS_FSTAT_EXTENDED = 281 + SYS_CHMOD_EXTENDED = 282 + SYS_FCHMOD_EXTENDED = 283 + SYS_ACCESS_EXTENDED = 284 + SYS_SETTID = 285 + SYS_GETTID = 286 + SYS_SETSGROUPS = 287 + SYS_GETSGROUPS = 288 + SYS_SETWGROUPS = 289 + SYS_GETWGROUPS = 290 + SYS_MKFIFO_EXTENDED = 291 + SYS_MKDIR_EXTENDED = 292 + SYS_IDENTITYSVC = 293 + SYS_SHARED_REGION_CHECK_NP = 294 + SYS_VM_PRESSURE_MONITOR = 296 + SYS_PSYNCH_RW_LONGRDLOCK = 297 + SYS_PSYNCH_RW_YIELDWRLOCK = 298 + SYS_PSYNCH_RW_DOWNGRADE = 299 + SYS_PSYNCH_RW_UPGRADE = 300 + SYS_PSYNCH_MUTEXWAIT = 301 + SYS_PSYNCH_MUTEXDROP = 302 + SYS_PSYNCH_CVBROAD = 303 + SYS_PSYNCH_CVSIGNAL = 304 + SYS_PSYNCH_CVWAIT = 305 + SYS_PSYNCH_RW_RDLOCK = 306 + SYS_PSYNCH_RW_WRLOCK = 307 + SYS_PSYNCH_RW_UNLOCK = 308 + SYS_PSYNCH_RW_UNLOCK2 = 309 + SYS_GETSID = 310 + SYS_SETTID_WITH_PID = 311 + SYS_PSYNCH_CVCLRPREPOST = 312 + SYS_AIO_FSYNC = 313 + SYS_AIO_RETURN = 314 + SYS_AIO_SUSPEND = 315 + SYS_AIO_CANCEL = 316 + SYS_AIO_ERROR = 317 + SYS_AIO_READ = 318 + SYS_AIO_WRITE = 319 + SYS_LIO_LISTIO = 320 + SYS_IOPOLICYSYS = 322 + SYS_PROCESS_POLICY = 323 + SYS_MLOCKALL = 324 + SYS_MUNLOCKALL = 325 + SYS_ISSETUGID = 327 + SYS___PTHREAD_KILL = 328 + SYS___PTHREAD_SIGMASK = 329 + SYS___SIGWAIT = 330 + SYS___DISABLE_THREADSIGNAL = 331 + SYS___PTHREAD_MARKCANCEL = 332 + SYS___PTHREAD_CANCELED = 333 + SYS___SEMWAIT_SIGNAL = 334 + SYS_PROC_INFO = 336 + SYS_SENDFILE = 337 + SYS_STAT64 = 338 + SYS_FSTAT64 = 339 + SYS_LSTAT64 = 340 + SYS_STAT64_EXTENDED = 341 + SYS_LSTAT64_EXTENDED = 342 + SYS_FSTAT64_EXTENDED = 343 + SYS_GETDIRENTRIES64 = 344 + SYS_STATFS64 = 345 + SYS_FSTATFS64 = 346 + SYS_GETFSSTAT64 = 347 + SYS___PTHREAD_CHDIR = 348 + SYS___PTHREAD_FCHDIR = 349 + SYS_AUDIT = 350 + SYS_AUDITON = 351 + SYS_GETAUID = 353 + SYS_SETAUID = 354 + SYS_GETAUDIT_ADDR = 357 + SYS_SETAUDIT_ADDR = 358 + SYS_AUDITCTL = 359 + SYS_BSDTHREAD_CREATE = 360 + SYS_BSDTHREAD_TERMINATE = 361 + SYS_KQUEUE = 362 + SYS_KEVENT = 363 + SYS_LCHOWN = 364 + SYS_BSDTHREAD_REGISTER = 366 + SYS_WORKQ_OPEN = 367 + SYS_WORKQ_KERNRETURN = 368 + SYS_KEVENT64 = 369 + SYS___OLD_SEMWAIT_SIGNAL = 370 + SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 + SYS_THREAD_SELFID = 372 + SYS_LEDGER = 373 + SYS_KEVENT_QOS = 374 + SYS___MAC_EXECVE = 380 + SYS___MAC_SYSCALL = 381 + SYS___MAC_GET_FILE = 382 + SYS___MAC_SET_FILE = 383 + SYS___MAC_GET_LINK = 384 + SYS___MAC_SET_LINK = 385 + SYS___MAC_GET_PROC = 386 + SYS___MAC_SET_PROC = 387 + SYS___MAC_GET_FD = 388 + SYS___MAC_SET_FD = 389 + SYS___MAC_GET_PID = 390 + SYS_PSELECT = 394 + SYS_PSELECT_NOCANCEL = 395 + SYS_READ_NOCANCEL = 396 + SYS_WRITE_NOCANCEL = 397 + SYS_OPEN_NOCANCEL = 398 + SYS_CLOSE_NOCANCEL = 399 + SYS_WAIT4_NOCANCEL = 400 + SYS_RECVMSG_NOCANCEL = 401 + SYS_SENDMSG_NOCANCEL = 402 + SYS_RECVFROM_NOCANCEL = 403 + SYS_ACCEPT_NOCANCEL = 404 + SYS_MSYNC_NOCANCEL = 405 + SYS_FCNTL_NOCANCEL = 406 + SYS_SELECT_NOCANCEL = 407 + SYS_FSYNC_NOCANCEL = 408 + SYS_CONNECT_NOCANCEL = 409 + SYS_SIGSUSPEND_NOCANCEL = 410 + SYS_READV_NOCANCEL = 411 + SYS_WRITEV_NOCANCEL = 412 + SYS_SENDTO_NOCANCEL = 413 + SYS_PREAD_NOCANCEL = 414 + SYS_PWRITE_NOCANCEL = 415 + SYS_WAITID_NOCANCEL = 416 + SYS_POLL_NOCANCEL = 417 + SYS_MSGSND_NOCANCEL = 418 + SYS_MSGRCV_NOCANCEL = 419 + SYS_SEM_WAIT_NOCANCEL = 420 + SYS_AIO_SUSPEND_NOCANCEL = 421 + SYS___SIGWAIT_NOCANCEL = 422 + SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 + SYS___MAC_MOUNT = 424 + SYS___MAC_GET_MOUNT = 425 + SYS___MAC_GETFSSTAT = 426 + SYS_FSGETPATH = 427 + SYS_AUDIT_SESSION_SELF = 428 + SYS_AUDIT_SESSION_JOIN = 429 + SYS_FILEPORT_MAKEPORT = 430 + SYS_FILEPORT_MAKEFD = 431 + SYS_AUDIT_SESSION_PORT = 432 + SYS_PID_SUSPEND = 433 + SYS_PID_RESUME = 434 + SYS_PID_HIBERNATE = 435 + SYS_PID_SHUTDOWN_SOCKETS = 436 + SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 + SYS_KAS_INFO = 439 + SYS_MEMORYSTATUS_CONTROL = 440 + SYS_GUARDED_OPEN_NP = 441 + SYS_GUARDED_CLOSE_NP = 442 + SYS_GUARDED_KQUEUE_NP = 443 + SYS_CHANGE_FDGUARD_NP = 444 + SYS_USRCTL = 445 + SYS_PROC_RLIMIT_CONTROL = 446 + SYS_CONNECTX = 447 + SYS_DISCONNECTX = 448 + SYS_PEELOFF = 449 + SYS_SOCKET_DELEGATE = 450 + SYS_TELEMETRY = 451 + SYS_PROC_UUID_POLICY = 452 + SYS_MEMORYSTATUS_GET_LEVEL = 453 + SYS_SYSTEM_OVERRIDE = 454 + SYS_VFS_PURGE = 455 + SYS_SFI_CTL = 456 + SYS_SFI_PIDCTL = 457 + SYS_COALITION = 458 + SYS_COALITION_INFO = 459 + SYS_NECP_MATCH_POLICY = 460 + SYS_GETATTRLISTBULK = 461 + SYS_CLONEFILEAT = 462 + SYS_OPENAT = 463 + SYS_OPENAT_NOCANCEL = 464 + SYS_RENAMEAT = 465 + SYS_FACCESSAT = 466 + SYS_FCHMODAT = 467 + SYS_FCHOWNAT = 468 + SYS_FSTATAT = 469 + SYS_FSTATAT64 = 470 + SYS_LINKAT = 471 + SYS_UNLINKAT = 472 + SYS_READLINKAT = 473 + SYS_SYMLINKAT = 474 + SYS_MKDIRAT = 475 + SYS_GETATTRLISTAT = 476 + SYS_PROC_TRACE_LOG = 477 + SYS_BSDTHREAD_CTL = 478 + SYS_OPENBYID_NP = 479 + SYS_RECVMSG_X = 480 + SYS_SENDMSG_X = 481 + SYS_THREAD_SELFUSAGE = 482 + SYS_CSRCTL = 483 + SYS_GUARDED_OPEN_DPROTECTED_NP = 484 + SYS_GUARDED_WRITE_NP = 485 + SYS_GUARDED_PWRITE_NP = 486 + SYS_GUARDED_WRITEV_NP = 487 + SYS_RENAMEATX_NP = 488 + SYS_MREMAP_ENCRYPTED = 489 + SYS_NETAGENT_TRIGGER = 490 + SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 + SYS_MICROSTACKSHOT = 492 + SYS_GRAB_PGO_DATA = 493 + SYS_PERSONA = 494 + SYS_WORK_INTERVAL_CTL = 499 + SYS_GETENTROPY = 500 + SYS_NECP_OPEN = 501 + SYS_NECP_CLIENT_ACTION = 502 + SYS___NEXUS_OPEN = 503 + SYS___NEXUS_REGISTER = 504 + SYS___NEXUS_DEREGISTER = 505 + SYS___NEXUS_CREATE = 506 + SYS___NEXUS_DESTROY = 507 + SYS___NEXUS_GET_OPT = 508 + SYS___NEXUS_SET_OPT = 509 + SYS___CHANNEL_OPEN = 510 + SYS___CHANNEL_GET_INFO = 511 + SYS___CHANNEL_SYNC = 512 + SYS___CHANNEL_GET_OPT = 513 + SYS___CHANNEL_SET_OPT = 514 + SYS_ULOCK_WAIT = 515 + SYS_ULOCK_WAKE = 516 + SYS_FCLONEFILEAT = 517 + SYS_FS_SNAPSHOT = 518 + SYS_TERMINATE_WITH_PAYLOAD = 520 + SYS_ABORT_WITH_PAYLOAD = 521 + SYS_MAXSYSCALL = 522 + SYS_INVALID = 63 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go new file mode 100644 index 0000000..b2c9ef8 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_dragonfly_amd64.go @@ -0,0 +1,315 @@ +// mksysnum_dragonfly.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,dragonfly + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void exit(int rval); } + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, int options, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break obreak_args int + SYS_GETFSSTAT = 18 // { int getfsstat(struct statfs *buf, long bufsize, \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, int flags, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { int sendmsg(int s, caddr_t msg, int flags); } + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, size_t len, \ + SYS_ACCEPT = 30 // { int accept(int s, caddr_t name, int *anamelen); } + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, caddr_t asa, int *alen); } + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, caddr_t asa, int *alen); } + SYS_ACCESS = 33 // { int access(char *path, int flags); } + SYS_CHFLAGS = 34 // { int chflags(char *path, int flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, int flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, int facs, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, stack_t *oss); } + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, caddr_t data); } + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { int readlink(char *path, char *buf, int count); } + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, char **envv); } + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args int + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, int flags); } + SYS_VFORK = 66 // { pid_t vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, gid_t *gidset); } + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct itimerval *itv, \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, struct itimerval *itv); } + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(int from, int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, int prio); } + SYS_SOCKET = 97 // { int socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, int namelen); } + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, int namelen); } + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, struct rusage *rusage); } + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, u_int iovcnt); } + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, int protocol, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, struct timeval *tptr); } + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_STATFS = 157 // { int statfs(char *path, struct statfs *buf); } + SYS_FSTATFS = 158 // { int fstatfs(int fd, struct statfs *buf); } + SYS_GETFH = 161 // { int getfh(char *fname, struct fhandle *fhp); } + SYS_GETDOMAINNAME = 162 // { int getdomainname(char *domainname, int len); } + SYS_SETDOMAINNAME = 163 // { int setdomainname(char *domainname, int len); } + SYS_UNAME = 164 // { int uname(struct utsname *name); } + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_EXTPREAD = 173 // { ssize_t extpread(int fd, void *buf, \ + SYS_EXTPWRITE = 174 // { ssize_t extpwrite(int fd, const void *buf, \ + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_MMAP = 197 // { caddr_t mmap(caddr_t addr, size_t len, int prot, \ + // SYS_NOSYS = 198; // { int nosys(void); } __syscall __syscall_args int + SYS_LSEEK = 199 // { off_t lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int truncate(char *path, int pad, off_t length); } + SYS_FTRUNCATE = 201 // { int ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, void *old, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS___SEMCTL = 220 // { int __semctl(int semid, int semnum, int cmd, \ + SYS_SEMGET = 221 // { int semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int semop(int semid, struct sembuf *sops, \ + SYS_MSGCTL = 224 // { int msgctl(int msqid, int cmd, \ + SYS_MSGGET = 225 // { int msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { caddr_t shmat(int shmid, const void *shmaddr, \ + SYS_SHMCTL = 229 // { int shmctl(int shmid, int cmd, \ + SYS_SHMDT = 230 // { int shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int shmget(key_t key, size_t size, int shmflg); } + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, int inherit); } + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, u_int nfds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, struct timeval *tptr); } + SYS_EXTPREADV = 289 // { ssize_t extpreadv(int fd, struct iovec *iovp, \ + SYS_EXTPWRITEV = 290 // { ssize_t extpwritev(int fd, struct iovec *iovp,\ + SYS_FHSTATFS = 297 // { int fhstatfs(const struct fhandle *u_fhp, struct statfs *buf); } + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, int flags); } + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, struct module_stat* stat); } + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct kld_file_stat* stat); } + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, uid_t suid); } + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, gid_t sgid); } + SYS_AIO_RETURN = 314 // { int aio_return(struct aiocb *aiocbp); } + SYS_AIO_SUSPEND = 315 // { int aio_suspend(struct aiocb * const * aiocbp, int nent, const struct timespec *timeout); } + SYS_AIO_CANCEL = 316 // { int aio_cancel(int fd, struct aiocb *aiocbp); } + SYS_AIO_ERROR = 317 // { int aio_error(struct aiocb *aiocbp); } + SYS_AIO_READ = 318 // { int aio_read(struct aiocb *aiocbp); } + SYS_AIO_WRITE = 319 // { int aio_write(struct aiocb *aiocbp); } + SYS_LIO_LISTIO = 320 // { int lio_listio(int mode, struct aiocb * const *acb_list, int nent, struct sigevent *sig); } + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(u_char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, const struct sched_param *param); } + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct sched_param *param); } + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int policy, const struct sched_param *param); } + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, struct timespec *interval); } + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, void *data); } + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, const sigset_t *set, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGACTION = 342 // { int sigaction(int sig, const struct sigaction *act, \ + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGRETURN = 344 // { int sigreturn(ucontext_t *sigcntxp); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set,\ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set,\ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, acl_type_t type, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, acl_type_t type, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, acl_type_t type); } + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, acl_type_t type, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { int extattr_set_file(const char *path, \ + SYS_EXTATTR_GET_FILE = 357 // { int extattr_get_file(const char *path, \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_AIO_WAITCOMPLETE = 359 // { int aio_waitcomplete(struct aiocb **aiocbp, struct timespec *timeout); } + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, uid_t *suid); } + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, gid_t *sgid); } + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, char *value, int len); } + SYS_LCHFLAGS = 391 // { int lchflags(char *path, int flags); } + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, int count); } + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, size_t nbytes, \ + SYS_VARSYM_SET = 450 // { int varsym_set(int level, const char *name, const char *data); } + SYS_VARSYM_GET = 451 // { int varsym_get(int mask, const char *wild, char *buf, int bufsize); } + SYS_VARSYM_LIST = 452 // { int varsym_list(int level, char *buf, int maxsize, int *marker); } + SYS_EXEC_SYS_REGISTER = 465 // { int exec_sys_register(void *entry); } + SYS_EXEC_SYS_UNREGISTER = 466 // { int exec_sys_unregister(int id); } + SYS_SYS_CHECKPOINT = 467 // { int sys_checkpoint(int type, int fd, pid_t pid, int retval); } + SYS_MOUNTCTL = 468 // { int mountctl(const char *path, int op, int fd, const void *ctl, int ctllen, void *buf, int buflen); } + SYS_UMTX_SLEEP = 469 // { int umtx_sleep(volatile const int *ptr, int value, int timeout); } + SYS_UMTX_WAKEUP = 470 // { int umtx_wakeup(volatile const int *ptr, int count); } + SYS_JAIL_ATTACH = 471 // { int jail_attach(int jid); } + SYS_SET_TLS_AREA = 472 // { int set_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_GET_TLS_AREA = 473 // { int get_tls_area(int which, struct tls_info *info, size_t infosize); } + SYS_CLOSEFROM = 474 // { int closefrom(int fd); } + SYS_STAT = 475 // { int stat(const char *path, struct stat *ub); } + SYS_FSTAT = 476 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 477 // { int lstat(const char *path, struct stat *ub); } + SYS_FHSTAT = 478 // { int fhstat(const struct fhandle *u_fhp, struct stat *sb); } + SYS_GETDIRENTRIES = 479 // { int getdirentries(int fd, char *buf, u_int count, \ + SYS_GETDENTS = 480 // { int getdents(int fd, char *buf, size_t count); } + SYS_USCHED_SET = 481 // { int usched_set(pid_t pid, int cmd, void *data, \ + SYS_EXTACCEPT = 482 // { int extaccept(int s, int flags, caddr_t name, int *anamelen); } + SYS_EXTCONNECT = 483 // { int extconnect(int s, int flags, caddr_t name, int namelen); } + SYS_MCONTROL = 485 // { int mcontrol(void *addr, size_t len, int behav, off_t value); } + SYS_VMSPACE_CREATE = 486 // { int vmspace_create(void *id, int type, void *data); } + SYS_VMSPACE_DESTROY = 487 // { int vmspace_destroy(void *id); } + SYS_VMSPACE_CTL = 488 // { int vmspace_ctl(void *id, int cmd, \ + SYS_VMSPACE_MMAP = 489 // { int vmspace_mmap(void *id, void *addr, size_t len, \ + SYS_VMSPACE_MUNMAP = 490 // { int vmspace_munmap(void *id, void *addr, \ + SYS_VMSPACE_MCONTROL = 491 // { int vmspace_mcontrol(void *id, void *addr, \ + SYS_VMSPACE_PREAD = 492 // { ssize_t vmspace_pread(void *id, void *buf, \ + SYS_VMSPACE_PWRITE = 493 // { ssize_t vmspace_pwrite(void *id, const void *buf, \ + SYS_EXTEXIT = 494 // { void extexit(int how, int status, void *addr); } + SYS_LWP_CREATE = 495 // { int lwp_create(struct lwp_params *params); } + SYS_LWP_GETTID = 496 // { lwpid_t lwp_gettid(void); } + SYS_LWP_KILL = 497 // { int lwp_kill(pid_t pid, lwpid_t tid, int signum); } + SYS_LWP_RTPRIO = 498 // { int lwp_rtprio(int function, pid_t pid, lwpid_t tid, struct rtprio *rtp); } + SYS_PSELECT = 499 // { int pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_STATVFS = 500 // { int statvfs(const char *path, struct statvfs *buf); } + SYS_FSTATVFS = 501 // { int fstatvfs(int fd, struct statvfs *buf); } + SYS_FHSTATVFS = 502 // { int fhstatvfs(const struct fhandle *u_fhp, struct statvfs *buf); } + SYS_GETVFSSTAT = 503 // { int getvfsstat(struct statfs *buf, \ + SYS_OPENAT = 504 // { int openat(int fd, char *path, int flags, int mode); } + SYS_FSTATAT = 505 // { int fstatat(int fd, char *path, \ + SYS_FCHMODAT = 506 // { int fchmodat(int fd, char *path, int mode, \ + SYS_FCHOWNAT = 507 // { int fchownat(int fd, char *path, int uid, int gid, \ + SYS_UNLINKAT = 508 // { int unlinkat(int fd, char *path, int flags); } + SYS_FACCESSAT = 509 // { int faccessat(int fd, char *path, int amode, \ + SYS_MQ_OPEN = 510 // { mqd_t mq_open(const char * name, int oflag, \ + SYS_MQ_CLOSE = 511 // { int mq_close(mqd_t mqdes); } + SYS_MQ_UNLINK = 512 // { int mq_unlink(const char *name); } + SYS_MQ_GETATTR = 513 // { int mq_getattr(mqd_t mqdes, \ + SYS_MQ_SETATTR = 514 // { int mq_setattr(mqd_t mqdes, \ + SYS_MQ_NOTIFY = 515 // { int mq_notify(mqd_t mqdes, \ + SYS_MQ_SEND = 516 // { int mq_send(mqd_t mqdes, const char *msg_ptr, \ + SYS_MQ_RECEIVE = 517 // { ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, \ + SYS_MQ_TIMEDSEND = 518 // { int mq_timedsend(mqd_t mqdes, \ + SYS_MQ_TIMEDRECEIVE = 519 // { ssize_t mq_timedreceive(mqd_t mqdes, \ + SYS_IOPRIO_SET = 520 // { int ioprio_set(int which, int who, int prio); } + SYS_IOPRIO_GET = 521 // { int ioprio_get(int which, int who); } + SYS_CHROOT_KERNEL = 522 // { int chroot_kernel(char *path); } + SYS_RENAMEAT = 523 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_MKDIRAT = 524 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 525 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 526 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_READLINKAT = 527 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_SYMLINKAT = 528 // { int symlinkat(char *path1, int fd, char *path2); } + SYS_SWAPOFF = 529 // { int swapoff(char *name); } + SYS_VQUOTACTL = 530 // { int vquotactl(const char *path, \ + SYS_LINKAT = 531 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_EACCESS = 532 // { int eaccess(char *path, int flags); } + SYS_LPATHCONF = 533 // { int lpathconf(char *path, int name); } + SYS_VMM_GUEST_CTL = 534 // { int vmm_guest_ctl(int op, struct vmm_guest_options *options); } + SYS_VMM_GUEST_SYNC_ADDR = 535 // { int vmm_guest_sync_addr(long *dstaddr, long *srcaddr); } + SYS_PROCCTL = 536 // { int procctl(idtype_t idtype, id_t id, int cmd, void *data); } + SYS_CHFLAGSAT = 537 // { int chflagsat(int fd, const char *path, int flags, int atflags);} + SYS_PIPE2 = 538 // { int pipe2(int *fildes, int flags); } + SYS_UTIMENSAT = 539 // { int utimensat(int fd, const char *path, const struct timespec *ts, int flags); } + SYS_FUTIMENS = 540 // { int futimens(int fd, const struct timespec *ts); } + SYS_ACCEPT4 = 541 // { int accept4(int s, caddr_t name, int *anamelen, int flags); } + SYS_LWP_SETNAME = 542 // { int lwp_setname(lwpid_t tid, const char *name); } + SYS_PPOLL = 543 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_LWP_SETAFFINITY = 544 // { int lwp_setaffinity(pid_t pid, lwpid_t tid, const cpumask_t *mask); } + SYS_LWP_GETAFFINITY = 545 // { int lwp_getaffinity(pid_t pid, lwpid_t tid, cpumask_t *mask); } + SYS_LWP_CREATE2 = 546 // { int lwp_create2(struct lwp_params *params, const cpumask_t *mask); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go new file mode 100644 index 0000000..b64a812 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_386.go @@ -0,0 +1,353 @@ +// mksysnum_freebsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go new file mode 100644 index 0000000..81722ac --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_amd64.go @@ -0,0 +1,353 @@ +// mksysnum_freebsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go new file mode 100644 index 0000000..4488314 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_freebsd_arm.go @@ -0,0 +1,353 @@ +// mksysnum_freebsd.pl +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,freebsd + +package unix + +const ( + // SYS_NOSYS = 0; // { int nosys(void); } syscall nosys_args int + SYS_EXIT = 1 // { void sys_exit(int rval); } exit \ + SYS_FORK = 2 // { int fork(void); } + SYS_READ = 3 // { ssize_t read(int fd, void *buf, \ + SYS_WRITE = 4 // { ssize_t write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int open(char *path, int flags, int mode); } + SYS_CLOSE = 6 // { int close(int fd); } + SYS_WAIT4 = 7 // { int wait4(int pid, int *status, \ + SYS_LINK = 9 // { int link(char *path, char *link); } + SYS_UNLINK = 10 // { int unlink(char *path); } + SYS_CHDIR = 12 // { int chdir(char *path); } + SYS_FCHDIR = 13 // { int fchdir(int fd); } + SYS_MKNOD = 14 // { int mknod(char *path, int mode, int dev); } + SYS_CHMOD = 15 // { int chmod(char *path, int mode); } + SYS_CHOWN = 16 // { int chown(char *path, int uid, int gid); } + SYS_OBREAK = 17 // { int obreak(char *nsize); } break \ + SYS_GETPID = 20 // { pid_t getpid(void); } + SYS_MOUNT = 21 // { int mount(char *type, char *path, \ + SYS_UNMOUNT = 22 // { int unmount(char *path, int flags); } + SYS_SETUID = 23 // { int setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t getuid(void); } + SYS_GETEUID = 25 // { uid_t geteuid(void); } + SYS_PTRACE = 26 // { int ptrace(int req, pid_t pid, \ + SYS_RECVMSG = 27 // { int recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { int sendmsg(int s, struct msghdr *msg, \ + SYS_RECVFROM = 29 // { int recvfrom(int s, caddr_t buf, \ + SYS_ACCEPT = 30 // { int accept(int s, \ + SYS_GETPEERNAME = 31 // { int getpeername(int fdes, \ + SYS_GETSOCKNAME = 32 // { int getsockname(int fdes, \ + SYS_ACCESS = 33 // { int access(char *path, int amode); } + SYS_CHFLAGS = 34 // { int chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { int sync(void); } + SYS_KILL = 37 // { int kill(int pid, int signum); } + SYS_GETPPID = 39 // { pid_t getppid(void); } + SYS_DUP = 41 // { int dup(u_int fd); } + SYS_PIPE = 42 // { int pipe(void); } + SYS_GETEGID = 43 // { gid_t getegid(void); } + SYS_PROFIL = 44 // { int profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int ktrace(const char *fname, int ops, \ + SYS_GETGID = 47 // { gid_t getgid(void); } + SYS_GETLOGIN = 49 // { int getlogin(char *namebuf, u_int \ + SYS_SETLOGIN = 50 // { int setlogin(char *namebuf); } + SYS_ACCT = 51 // { int acct(char *path); } + SYS_SIGALTSTACK = 53 // { int sigaltstack(stack_t *ss, \ + SYS_IOCTL = 54 // { int ioctl(int fd, u_long com, \ + SYS_REBOOT = 55 // { int reboot(int opt); } + SYS_REVOKE = 56 // { int revoke(char *path); } + SYS_SYMLINK = 57 // { int symlink(char *path, char *link); } + SYS_READLINK = 58 // { ssize_t readlink(char *path, char *buf, \ + SYS_EXECVE = 59 // { int execve(char *fname, char **argv, \ + SYS_UMASK = 60 // { int umask(int newmask); } umask umask_args \ + SYS_CHROOT = 61 // { int chroot(char *path); } + SYS_MSYNC = 65 // { int msync(void *addr, size_t len, \ + SYS_VFORK = 66 // { int vfork(void); } + SYS_SBRK = 69 // { int sbrk(int incr); } + SYS_SSTK = 70 // { int sstk(int incr); } + SYS_OVADVISE = 72 // { int ovadvise(int anom); } vadvise \ + SYS_MUNMAP = 73 // { int munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int mprotect(const void *addr, size_t len, \ + SYS_MADVISE = 75 // { int madvise(void *addr, size_t len, \ + SYS_MINCORE = 78 // { int mincore(const void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int getgroups(u_int gidsetsize, \ + SYS_SETGROUPS = 80 // { int setgroups(u_int gidsetsize, \ + SYS_GETPGRP = 81 // { int getpgrp(void); } + SYS_SETPGID = 82 // { int setpgid(int pid, int pgid); } + SYS_SETITIMER = 83 // { int setitimer(u_int which, struct \ + SYS_SWAPON = 85 // { int swapon(char *name); } + SYS_GETITIMER = 86 // { int getitimer(u_int which, \ + SYS_GETDTABLESIZE = 89 // { int getdtablesize(void); } + SYS_DUP2 = 90 // { int dup2(u_int from, u_int to); } + SYS_FCNTL = 92 // { int fcntl(int fd, int cmd, long arg); } + SYS_SELECT = 93 // { int select(int nd, fd_set *in, fd_set *ou, \ + SYS_FSYNC = 95 // { int fsync(int fd); } + SYS_SETPRIORITY = 96 // { int setpriority(int which, int who, \ + SYS_SOCKET = 97 // { int socket(int domain, int type, \ + SYS_CONNECT = 98 // { int connect(int s, caddr_t name, \ + SYS_GETPRIORITY = 100 // { int getpriority(int which, int who); } + SYS_BIND = 104 // { int bind(int s, caddr_t name, \ + SYS_SETSOCKOPT = 105 // { int setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int listen(int s, int backlog); } + SYS_GETTIMEOFDAY = 116 // { int gettimeofday(struct timeval *tp, \ + SYS_GETRUSAGE = 117 // { int getrusage(int who, \ + SYS_GETSOCKOPT = 118 // { int getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { int readv(int fd, struct iovec *iovp, \ + SYS_WRITEV = 121 // { int writev(int fd, struct iovec *iovp, \ + SYS_SETTIMEOFDAY = 122 // { int settimeofday(struct timeval *tv, \ + SYS_FCHOWN = 123 // { int fchown(int fd, int uid, int gid); } + SYS_FCHMOD = 124 // { int fchmod(int fd, int mode); } + SYS_SETREUID = 126 // { int setreuid(int ruid, int euid); } + SYS_SETREGID = 127 // { int setregid(int rgid, int egid); } + SYS_RENAME = 128 // { int rename(char *from, char *to); } + SYS_FLOCK = 131 // { int flock(int fd, int how); } + SYS_MKFIFO = 132 // { int mkfifo(char *path, int mode); } + SYS_SENDTO = 133 // { int sendto(int s, caddr_t buf, size_t len, \ + SYS_SHUTDOWN = 134 // { int shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int mkdir(char *path, int mode); } + SYS_RMDIR = 137 // { int rmdir(char *path); } + SYS_UTIMES = 138 // { int utimes(char *path, \ + SYS_ADJTIME = 140 // { int adjtime(struct timeval *delta, \ + SYS_SETSID = 147 // { int setsid(void); } + SYS_QUOTACTL = 148 // { int quotactl(char *path, int cmd, int uid, \ + SYS_LGETFH = 160 // { int lgetfh(char *fname, \ + SYS_GETFH = 161 // { int getfh(char *fname, \ + SYS_SYSARCH = 165 // { int sysarch(int op, char *parms); } + SYS_RTPRIO = 166 // { int rtprio(int function, pid_t pid, \ + SYS_FREEBSD6_PREAD = 173 // { ssize_t freebsd6_pread(int fd, void *buf, \ + SYS_FREEBSD6_PWRITE = 174 // { ssize_t freebsd6_pwrite(int fd, \ + SYS_SETFIB = 175 // { int setfib(int fibnum); } + SYS_NTP_ADJTIME = 176 // { int ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int setgid(gid_t gid); } + SYS_SETEGID = 182 // { int setegid(gid_t egid); } + SYS_SETEUID = 183 // { int seteuid(uid_t euid); } + SYS_STAT = 188 // { int stat(char *path, struct stat *ub); } + SYS_FSTAT = 189 // { int fstat(int fd, struct stat *sb); } + SYS_LSTAT = 190 // { int lstat(char *path, struct stat *ub); } + SYS_PATHCONF = 191 // { int pathconf(char *path, int name); } + SYS_FPATHCONF = 192 // { int fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int getrlimit(u_int which, \ + SYS_SETRLIMIT = 195 // { int setrlimit(u_int which, \ + SYS_GETDIRENTRIES = 196 // { int getdirentries(int fd, char *buf, \ + SYS_FREEBSD6_MMAP = 197 // { caddr_t freebsd6_mmap(caddr_t addr, \ + SYS_FREEBSD6_LSEEK = 199 // { off_t freebsd6_lseek(int fd, int pad, \ + SYS_FREEBSD6_TRUNCATE = 200 // { int freebsd6_truncate(char *path, int pad, \ + SYS_FREEBSD6_FTRUNCATE = 201 // { int freebsd6_ftruncate(int fd, int pad, \ + SYS___SYSCTL = 202 // { int __sysctl(int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int undelete(char *path); } + SYS_FUTIMES = 206 // { int futimes(int fd, struct timeval *tptr); } + SYS_GETPGID = 207 // { int getpgid(pid_t pid); } + SYS_POLL = 209 // { int poll(struct pollfd *fds, u_int nfds, \ + SYS_CLOCK_GETTIME = 232 // { int clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 233 // { int clock_settime( \ + SYS_CLOCK_GETRES = 234 // { int clock_getres(clockid_t clock_id, \ + SYS_KTIMER_CREATE = 235 // { int ktimer_create(clockid_t clock_id, \ + SYS_KTIMER_DELETE = 236 // { int ktimer_delete(int timerid); } + SYS_KTIMER_SETTIME = 237 // { int ktimer_settime(int timerid, int flags, \ + SYS_KTIMER_GETTIME = 238 // { int ktimer_gettime(int timerid, struct \ + SYS_KTIMER_GETOVERRUN = 239 // { int ktimer_getoverrun(int timerid); } + SYS_NANOSLEEP = 240 // { int nanosleep(const struct timespec *rqtp, \ + SYS_FFCLOCK_GETCOUNTER = 241 // { int ffclock_getcounter(ffcounter *ffcount); } + SYS_FFCLOCK_SETESTIMATE = 242 // { int ffclock_setestimate( \ + SYS_FFCLOCK_GETESTIMATE = 243 // { int ffclock_getestimate( \ + SYS_CLOCK_GETCPUCLOCKID2 = 247 // { int clock_getcpuclockid2(id_t id,\ + SYS_NTP_GETTIME = 248 // { int ntp_gettime(struct ntptimeval *ntvp); } + SYS_MINHERIT = 250 // { int minherit(void *addr, size_t len, \ + SYS_RFORK = 251 // { int rfork(int flags); } + SYS_OPENBSD_POLL = 252 // { int openbsd_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int issetugid(void); } + SYS_LCHOWN = 254 // { int lchown(char *path, int uid, int gid); } + SYS_GETDENTS = 272 // { int getdents(int fd, char *buf, \ + SYS_LCHMOD = 274 // { int lchmod(char *path, mode_t mode); } + SYS_LUTIMES = 276 // { int lutimes(char *path, \ + SYS_NSTAT = 278 // { int nstat(char *path, struct nstat *ub); } + SYS_NFSTAT = 279 // { int nfstat(int fd, struct nstat *sb); } + SYS_NLSTAT = 280 // { int nlstat(char *path, struct nstat *ub); } + SYS_PREADV = 289 // { ssize_t preadv(int fd, struct iovec *iovp, \ + SYS_PWRITEV = 290 // { ssize_t pwritev(int fd, struct iovec *iovp, \ + SYS_FHOPEN = 298 // { int fhopen(const struct fhandle *u_fhp, \ + SYS_FHSTAT = 299 // { int fhstat(const struct fhandle *u_fhp, \ + SYS_MODNEXT = 300 // { int modnext(int modid); } + SYS_MODSTAT = 301 // { int modstat(int modid, \ + SYS_MODFNEXT = 302 // { int modfnext(int modid); } + SYS_MODFIND = 303 // { int modfind(const char *name); } + SYS_KLDLOAD = 304 // { int kldload(const char *file); } + SYS_KLDUNLOAD = 305 // { int kldunload(int fileid); } + SYS_KLDFIND = 306 // { int kldfind(const char *file); } + SYS_KLDNEXT = 307 // { int kldnext(int fileid); } + SYS_KLDSTAT = 308 // { int kldstat(int fileid, struct \ + SYS_KLDFIRSTMOD = 309 // { int kldfirstmod(int fileid); } + SYS_GETSID = 310 // { int getsid(pid_t pid); } + SYS_SETRESUID = 311 // { int setresuid(uid_t ruid, uid_t euid, \ + SYS_SETRESGID = 312 // { int setresgid(gid_t rgid, gid_t egid, \ + SYS_YIELD = 321 // { int yield(void); } + SYS_MLOCKALL = 324 // { int mlockall(int how); } + SYS_MUNLOCKALL = 325 // { int munlockall(void); } + SYS___GETCWD = 326 // { int __getcwd(char *buf, u_int buflen); } + SYS_SCHED_SETPARAM = 327 // { int sched_setparam (pid_t pid, \ + SYS_SCHED_GETPARAM = 328 // { int sched_getparam (pid_t pid, struct \ + SYS_SCHED_SETSCHEDULER = 329 // { int sched_setscheduler (pid_t pid, int \ + SYS_SCHED_GETSCHEDULER = 330 // { int sched_getscheduler (pid_t pid); } + SYS_SCHED_YIELD = 331 // { int sched_yield (void); } + SYS_SCHED_GET_PRIORITY_MAX = 332 // { int sched_get_priority_max (int policy); } + SYS_SCHED_GET_PRIORITY_MIN = 333 // { int sched_get_priority_min (int policy); } + SYS_SCHED_RR_GET_INTERVAL = 334 // { int sched_rr_get_interval (pid_t pid, \ + SYS_UTRACE = 335 // { int utrace(const void *addr, size_t len); } + SYS_KLDSYM = 337 // { int kldsym(int fileid, int cmd, \ + SYS_JAIL = 338 // { int jail(struct jail *jail); } + SYS_SIGPROCMASK = 340 // { int sigprocmask(int how, \ + SYS_SIGSUSPEND = 341 // { int sigsuspend(const sigset_t *sigmask); } + SYS_SIGPENDING = 343 // { int sigpending(sigset_t *set); } + SYS_SIGTIMEDWAIT = 345 // { int sigtimedwait(const sigset_t *set, \ + SYS_SIGWAITINFO = 346 // { int sigwaitinfo(const sigset_t *set, \ + SYS___ACL_GET_FILE = 347 // { int __acl_get_file(const char *path, \ + SYS___ACL_SET_FILE = 348 // { int __acl_set_file(const char *path, \ + SYS___ACL_GET_FD = 349 // { int __acl_get_fd(int filedes, \ + SYS___ACL_SET_FD = 350 // { int __acl_set_fd(int filedes, \ + SYS___ACL_DELETE_FILE = 351 // { int __acl_delete_file(const char *path, \ + SYS___ACL_DELETE_FD = 352 // { int __acl_delete_fd(int filedes, \ + SYS___ACL_ACLCHECK_FILE = 353 // { int __acl_aclcheck_file(const char *path, \ + SYS___ACL_ACLCHECK_FD = 354 // { int __acl_aclcheck_fd(int filedes, \ + SYS_EXTATTRCTL = 355 // { int extattrctl(const char *path, int cmd, \ + SYS_EXTATTR_SET_FILE = 356 // { ssize_t extattr_set_file( \ + SYS_EXTATTR_GET_FILE = 357 // { ssize_t extattr_get_file( \ + SYS_EXTATTR_DELETE_FILE = 358 // { int extattr_delete_file(const char *path, \ + SYS_GETRESUID = 360 // { int getresuid(uid_t *ruid, uid_t *euid, \ + SYS_GETRESGID = 361 // { int getresgid(gid_t *rgid, gid_t *egid, \ + SYS_KQUEUE = 362 // { int kqueue(void); } + SYS_KEVENT = 363 // { int kevent(int fd, \ + SYS_EXTATTR_SET_FD = 371 // { ssize_t extattr_set_fd(int fd, \ + SYS_EXTATTR_GET_FD = 372 // { ssize_t extattr_get_fd(int fd, \ + SYS_EXTATTR_DELETE_FD = 373 // { int extattr_delete_fd(int fd, \ + SYS___SETUGID = 374 // { int __setugid(int flag); } + SYS_EACCESS = 376 // { int eaccess(char *path, int amode); } + SYS_NMOUNT = 378 // { int nmount(struct iovec *iovp, \ + SYS___MAC_GET_PROC = 384 // { int __mac_get_proc(struct mac *mac_p); } + SYS___MAC_SET_PROC = 385 // { int __mac_set_proc(struct mac *mac_p); } + SYS___MAC_GET_FD = 386 // { int __mac_get_fd(int fd, \ + SYS___MAC_GET_FILE = 387 // { int __mac_get_file(const char *path_p, \ + SYS___MAC_SET_FD = 388 // { int __mac_set_fd(int fd, \ + SYS___MAC_SET_FILE = 389 // { int __mac_set_file(const char *path_p, \ + SYS_KENV = 390 // { int kenv(int what, const char *name, \ + SYS_LCHFLAGS = 391 // { int lchflags(const char *path, \ + SYS_UUIDGEN = 392 // { int uuidgen(struct uuid *store, \ + SYS_SENDFILE = 393 // { int sendfile(int fd, int s, off_t offset, \ + SYS_MAC_SYSCALL = 394 // { int mac_syscall(const char *policy, \ + SYS_GETFSSTAT = 395 // { int getfsstat(struct statfs *buf, \ + SYS_STATFS = 396 // { int statfs(char *path, \ + SYS_FSTATFS = 397 // { int fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 398 // { int fhstatfs(const struct fhandle *u_fhp, \ + SYS___MAC_GET_PID = 409 // { int __mac_get_pid(pid_t pid, \ + SYS___MAC_GET_LINK = 410 // { int __mac_get_link(const char *path_p, \ + SYS___MAC_SET_LINK = 411 // { int __mac_set_link(const char *path_p, \ + SYS_EXTATTR_SET_LINK = 412 // { ssize_t extattr_set_link( \ + SYS_EXTATTR_GET_LINK = 413 // { ssize_t extattr_get_link( \ + SYS_EXTATTR_DELETE_LINK = 414 // { int extattr_delete_link( \ + SYS___MAC_EXECVE = 415 // { int __mac_execve(char *fname, char **argv, \ + SYS_SIGACTION = 416 // { int sigaction(int sig, \ + SYS_SIGRETURN = 417 // { int sigreturn( \ + SYS_GETCONTEXT = 421 // { int getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 422 // { int setcontext( \ + SYS_SWAPCONTEXT = 423 // { int swapcontext(struct __ucontext *oucp, \ + SYS_SWAPOFF = 424 // { int swapoff(const char *name); } + SYS___ACL_GET_LINK = 425 // { int __acl_get_link(const char *path, \ + SYS___ACL_SET_LINK = 426 // { int __acl_set_link(const char *path, \ + SYS___ACL_DELETE_LINK = 427 // { int __acl_delete_link(const char *path, \ + SYS___ACL_ACLCHECK_LINK = 428 // { int __acl_aclcheck_link(const char *path, \ + SYS_SIGWAIT = 429 // { int sigwait(const sigset_t *set, \ + SYS_THR_CREATE = 430 // { int thr_create(ucontext_t *ctx, long *id, \ + SYS_THR_EXIT = 431 // { void thr_exit(long *state); } + SYS_THR_SELF = 432 // { int thr_self(long *id); } + SYS_THR_KILL = 433 // { int thr_kill(long id, int sig); } + SYS__UMTX_LOCK = 434 // { int _umtx_lock(struct umtx *umtx); } + SYS__UMTX_UNLOCK = 435 // { int _umtx_unlock(struct umtx *umtx); } + SYS_JAIL_ATTACH = 436 // { int jail_attach(int jid); } + SYS_EXTATTR_LIST_FD = 437 // { ssize_t extattr_list_fd(int fd, \ + SYS_EXTATTR_LIST_FILE = 438 // { ssize_t extattr_list_file( \ + SYS_EXTATTR_LIST_LINK = 439 // { ssize_t extattr_list_link( \ + SYS_THR_SUSPEND = 442 // { int thr_suspend( \ + SYS_THR_WAKE = 443 // { int thr_wake(long id); } + SYS_KLDUNLOADF = 444 // { int kldunloadf(int fileid, int flags); } + SYS_AUDIT = 445 // { int audit(const void *record, \ + SYS_AUDITON = 446 // { int auditon(int cmd, void *data, \ + SYS_GETAUID = 447 // { int getauid(uid_t *auid); } + SYS_SETAUID = 448 // { int setauid(uid_t *auid); } + SYS_GETAUDIT = 449 // { int getaudit(struct auditinfo *auditinfo); } + SYS_SETAUDIT = 450 // { int setaudit(struct auditinfo *auditinfo); } + SYS_GETAUDIT_ADDR = 451 // { int getaudit_addr( \ + SYS_SETAUDIT_ADDR = 452 // { int setaudit_addr( \ + SYS_AUDITCTL = 453 // { int auditctl(char *path); } + SYS__UMTX_OP = 454 // { int _umtx_op(void *obj, int op, \ + SYS_THR_NEW = 455 // { int thr_new(struct thr_param *param, \ + SYS_SIGQUEUE = 456 // { int sigqueue(pid_t pid, int signum, void *value); } + SYS_ABORT2 = 463 // { int abort2(const char *why, int nargs, void **args); } + SYS_THR_SET_NAME = 464 // { int thr_set_name(long id, const char *name); } + SYS_RTPRIO_THREAD = 466 // { int rtprio_thread(int function, \ + SYS_PREAD = 475 // { ssize_t pread(int fd, void *buf, \ + SYS_PWRITE = 476 // { ssize_t pwrite(int fd, const void *buf, \ + SYS_MMAP = 477 // { caddr_t mmap(caddr_t addr, size_t len, \ + SYS_LSEEK = 478 // { off_t lseek(int fd, off_t offset, \ + SYS_TRUNCATE = 479 // { int truncate(char *path, off_t length); } + SYS_FTRUNCATE = 480 // { int ftruncate(int fd, off_t length); } + SYS_THR_KILL2 = 481 // { int thr_kill2(pid_t pid, long id, int sig); } + SYS_SHM_OPEN = 482 // { int shm_open(const char *path, int flags, \ + SYS_SHM_UNLINK = 483 // { int shm_unlink(const char *path); } + SYS_CPUSET = 484 // { int cpuset(cpusetid_t *setid); } + SYS_CPUSET_SETID = 485 // { int cpuset_setid(cpuwhich_t which, id_t id, \ + SYS_CPUSET_GETID = 486 // { int cpuset_getid(cpulevel_t level, \ + SYS_CPUSET_GETAFFINITY = 487 // { int cpuset_getaffinity(cpulevel_t level, \ + SYS_CPUSET_SETAFFINITY = 488 // { int cpuset_setaffinity(cpulevel_t level, \ + SYS_FACCESSAT = 489 // { int faccessat(int fd, char *path, int amode, \ + SYS_FCHMODAT = 490 // { int fchmodat(int fd, char *path, mode_t mode, \ + SYS_FCHOWNAT = 491 // { int fchownat(int fd, char *path, uid_t uid, \ + SYS_FEXECVE = 492 // { int fexecve(int fd, char **argv, \ + SYS_FSTATAT = 493 // { int fstatat(int fd, char *path, \ + SYS_FUTIMESAT = 494 // { int futimesat(int fd, char *path, \ + SYS_LINKAT = 495 // { int linkat(int fd1, char *path1, int fd2, \ + SYS_MKDIRAT = 496 // { int mkdirat(int fd, char *path, mode_t mode); } + SYS_MKFIFOAT = 497 // { int mkfifoat(int fd, char *path, mode_t mode); } + SYS_MKNODAT = 498 // { int mknodat(int fd, char *path, mode_t mode, \ + SYS_OPENAT = 499 // { int openat(int fd, char *path, int flag, \ + SYS_READLINKAT = 500 // { int readlinkat(int fd, char *path, char *buf, \ + SYS_RENAMEAT = 501 // { int renameat(int oldfd, char *old, int newfd, \ + SYS_SYMLINKAT = 502 // { int symlinkat(char *path1, int fd, \ + SYS_UNLINKAT = 503 // { int unlinkat(int fd, char *path, int flag); } + SYS_POSIX_OPENPT = 504 // { int posix_openpt(int flags); } + SYS_JAIL_GET = 506 // { int jail_get(struct iovec *iovp, \ + SYS_JAIL_SET = 507 // { int jail_set(struct iovec *iovp, \ + SYS_JAIL_REMOVE = 508 // { int jail_remove(int jid); } + SYS_CLOSEFROM = 509 // { int closefrom(int lowfd); } + SYS_LPATHCONF = 513 // { int lpathconf(char *path, int name); } + SYS___CAP_RIGHTS_GET = 515 // { int __cap_rights_get(int version, \ + SYS_CAP_ENTER = 516 // { int cap_enter(void); } + SYS_CAP_GETMODE = 517 // { int cap_getmode(u_int *modep); } + SYS_PDFORK = 518 // { int pdfork(int *fdp, int flags); } + SYS_PDKILL = 519 // { int pdkill(int fd, int signum); } + SYS_PDGETPID = 520 // { int pdgetpid(int fd, pid_t *pidp); } + SYS_PSELECT = 522 // { int pselect(int nd, fd_set *in, \ + SYS_GETLOGINCLASS = 523 // { int getloginclass(char *namebuf, \ + SYS_SETLOGINCLASS = 524 // { int setloginclass(const char *namebuf); } + SYS_RCTL_GET_RACCT = 525 // { int rctl_get_racct(const void *inbufp, \ + SYS_RCTL_GET_RULES = 526 // { int rctl_get_rules(const void *inbufp, \ + SYS_RCTL_GET_LIMITS = 527 // { int rctl_get_limits(const void *inbufp, \ + SYS_RCTL_ADD_RULE = 528 // { int rctl_add_rule(const void *inbufp, \ + SYS_RCTL_REMOVE_RULE = 529 // { int rctl_remove_rule(const void *inbufp, \ + SYS_POSIX_FALLOCATE = 530 // { int posix_fallocate(int fd, \ + SYS_POSIX_FADVISE = 531 // { int posix_fadvise(int fd, off_t offset, \ + SYS_WAIT6 = 532 // { int wait6(idtype_t idtype, id_t id, \ + SYS_CAP_RIGHTS_LIMIT = 533 // { int cap_rights_limit(int fd, \ + SYS_CAP_IOCTLS_LIMIT = 534 // { int cap_ioctls_limit(int fd, \ + SYS_CAP_IOCTLS_GET = 535 // { ssize_t cap_ioctls_get(int fd, \ + SYS_CAP_FCNTLS_LIMIT = 536 // { int cap_fcntls_limit(int fd, \ + SYS_CAP_FCNTLS_GET = 537 // { int cap_fcntls_get(int fd, \ + SYS_BINDAT = 538 // { int bindat(int fd, int s, caddr_t name, \ + SYS_CONNECTAT = 539 // { int connectat(int fd, int s, caddr_t name, \ + SYS_CHFLAGSAT = 540 // { int chflagsat(int fd, const char *path, \ + SYS_ACCEPT4 = 541 // { int accept4(int s, \ + SYS_PIPE2 = 542 // { int pipe2(int *fildes, int flags); } + SYS_PROCCTL = 544 // { int procctl(idtype_t idtype, id_t id, \ + SYS_PPOLL = 545 // { int ppoll(struct pollfd *fds, u_int nfds, \ + SYS_FUTIMENS = 546 // { int futimens(int fd, \ + SYS_UTIMENSAT = 547 // { int utimensat(int fd, \ +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go new file mode 100644 index 0000000..95ab129 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -0,0 +1,390 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m32 /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86OLD = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_VM86 = 166 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_SET_THREAD_AREA = 243 + SYS_GET_THREAD_AREA = 244 + SYS_IO_SETUP = 245 + SYS_IO_DESTROY = 246 + SYS_IO_GETEVENTS = 247 + SYS_IO_SUBMIT = 248 + SYS_IO_CANCEL = 249 + SYS_FADVISE64 = 250 + SYS_EXIT_GROUP = 252 + SYS_LOOKUP_DCOOKIE = 253 + SYS_EPOLL_CREATE = 254 + SYS_EPOLL_CTL = 255 + SYS_EPOLL_WAIT = 256 + SYS_REMAP_FILE_PAGES = 257 + SYS_SET_TID_ADDRESS = 258 + SYS_TIMER_CREATE = 259 + SYS_TIMER_SETTIME = 260 + SYS_TIMER_GETTIME = 261 + SYS_TIMER_GETOVERRUN = 262 + SYS_TIMER_DELETE = 263 + SYS_CLOCK_SETTIME = 264 + SYS_CLOCK_GETTIME = 265 + SYS_CLOCK_GETRES = 266 + SYS_CLOCK_NANOSLEEP = 267 + SYS_STATFS64 = 268 + SYS_FSTATFS64 = 269 + SYS_TGKILL = 270 + SYS_UTIMES = 271 + SYS_FADVISE64_64 = 272 + SYS_VSERVER = 273 + SYS_MBIND = 274 + SYS_GET_MEMPOLICY = 275 + SYS_SET_MEMPOLICY = 276 + SYS_MQ_OPEN = 277 + SYS_MQ_UNLINK = 278 + SYS_MQ_TIMEDSEND = 279 + SYS_MQ_TIMEDRECEIVE = 280 + SYS_MQ_NOTIFY = 281 + SYS_MQ_GETSETATTR = 282 + SYS_KEXEC_LOAD = 283 + SYS_WAITID = 284 + SYS_ADD_KEY = 286 + SYS_REQUEST_KEY = 287 + SYS_KEYCTL = 288 + SYS_IOPRIO_SET = 289 + SYS_IOPRIO_GET = 290 + SYS_INOTIFY_INIT = 291 + SYS_INOTIFY_ADD_WATCH = 292 + SYS_INOTIFY_RM_WATCH = 293 + SYS_MIGRATE_PAGES = 294 + SYS_OPENAT = 295 + SYS_MKDIRAT = 296 + SYS_MKNODAT = 297 + SYS_FCHOWNAT = 298 + SYS_FUTIMESAT = 299 + SYS_FSTATAT64 = 300 + SYS_UNLINKAT = 301 + SYS_RENAMEAT = 302 + SYS_LINKAT = 303 + SYS_SYMLINKAT = 304 + SYS_READLINKAT = 305 + SYS_FCHMODAT = 306 + SYS_FACCESSAT = 307 + SYS_PSELECT6 = 308 + SYS_PPOLL = 309 + SYS_UNSHARE = 310 + SYS_SET_ROBUST_LIST = 311 + SYS_GET_ROBUST_LIST = 312 + SYS_SPLICE = 313 + SYS_SYNC_FILE_RANGE = 314 + SYS_TEE = 315 + SYS_VMSPLICE = 316 + SYS_MOVE_PAGES = 317 + SYS_GETCPU = 318 + SYS_EPOLL_PWAIT = 319 + SYS_UTIMENSAT = 320 + SYS_SIGNALFD = 321 + SYS_TIMERFD_CREATE = 322 + SYS_EVENTFD = 323 + SYS_FALLOCATE = 324 + SYS_TIMERFD_SETTIME = 325 + SYS_TIMERFD_GETTIME = 326 + SYS_SIGNALFD4 = 327 + SYS_EVENTFD2 = 328 + SYS_EPOLL_CREATE1 = 329 + SYS_DUP3 = 330 + SYS_PIPE2 = 331 + SYS_INOTIFY_INIT1 = 332 + SYS_PREADV = 333 + SYS_PWRITEV = 334 + SYS_RT_TGSIGQUEUEINFO = 335 + SYS_PERF_EVENT_OPEN = 336 + SYS_RECVMMSG = 337 + SYS_FANOTIFY_INIT = 338 + SYS_FANOTIFY_MARK = 339 + SYS_PRLIMIT64 = 340 + SYS_NAME_TO_HANDLE_AT = 341 + SYS_OPEN_BY_HANDLE_AT = 342 + SYS_CLOCK_ADJTIME = 343 + SYS_SYNCFS = 344 + SYS_SENDMMSG = 345 + SYS_SETNS = 346 + SYS_PROCESS_VM_READV = 347 + SYS_PROCESS_VM_WRITEV = 348 + SYS_KCMP = 349 + SYS_FINIT_MODULE = 350 + SYS_SCHED_SETATTR = 351 + SYS_SCHED_GETATTR = 352 + SYS_RENAMEAT2 = 353 + SYS_SECCOMP = 354 + SYS_GETRANDOM = 355 + SYS_MEMFD_CREATE = 356 + SYS_BPF = 357 + SYS_EXECVEAT = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_USERFAULTFD = 374 + SYS_MEMBARRIER = 375 + SYS_MLOCK2 = 376 + SYS_COPY_FILE_RANGE = 377 + SYS_PREADV2 = 378 + SYS_PWRITEV2 = 379 + SYS_PKEY_MPROTECT = 380 + SYS_PKEY_ALLOC = 381 + SYS_PKEY_FREE = 382 + SYS_STATX = 383 + SYS_ARCH_PRCTL = 384 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go new file mode 100644 index 0000000..c5dabf2 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -0,0 +1,342 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -m64 /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,linux + +package unix + +const ( + SYS_READ = 0 + SYS_WRITE = 1 + SYS_OPEN = 2 + SYS_CLOSE = 3 + SYS_STAT = 4 + SYS_FSTAT = 5 + SYS_LSTAT = 6 + SYS_POLL = 7 + SYS_LSEEK = 8 + SYS_MMAP = 9 + SYS_MPROTECT = 10 + SYS_MUNMAP = 11 + SYS_BRK = 12 + SYS_RT_SIGACTION = 13 + SYS_RT_SIGPROCMASK = 14 + SYS_RT_SIGRETURN = 15 + SYS_IOCTL = 16 + SYS_PREAD64 = 17 + SYS_PWRITE64 = 18 + SYS_READV = 19 + SYS_WRITEV = 20 + SYS_ACCESS = 21 + SYS_PIPE = 22 + SYS_SELECT = 23 + SYS_SCHED_YIELD = 24 + SYS_MREMAP = 25 + SYS_MSYNC = 26 + SYS_MINCORE = 27 + SYS_MADVISE = 28 + SYS_SHMGET = 29 + SYS_SHMAT = 30 + SYS_SHMCTL = 31 + SYS_DUP = 32 + SYS_DUP2 = 33 + SYS_PAUSE = 34 + SYS_NANOSLEEP = 35 + SYS_GETITIMER = 36 + SYS_ALARM = 37 + SYS_SETITIMER = 38 + SYS_GETPID = 39 + SYS_SENDFILE = 40 + SYS_SOCKET = 41 + SYS_CONNECT = 42 + SYS_ACCEPT = 43 + SYS_SENDTO = 44 + SYS_RECVFROM = 45 + SYS_SENDMSG = 46 + SYS_RECVMSG = 47 + SYS_SHUTDOWN = 48 + SYS_BIND = 49 + SYS_LISTEN = 50 + SYS_GETSOCKNAME = 51 + SYS_GETPEERNAME = 52 + SYS_SOCKETPAIR = 53 + SYS_SETSOCKOPT = 54 + SYS_GETSOCKOPT = 55 + SYS_CLONE = 56 + SYS_FORK = 57 + SYS_VFORK = 58 + SYS_EXECVE = 59 + SYS_EXIT = 60 + SYS_WAIT4 = 61 + SYS_KILL = 62 + SYS_UNAME = 63 + SYS_SEMGET = 64 + SYS_SEMOP = 65 + SYS_SEMCTL = 66 + SYS_SHMDT = 67 + SYS_MSGGET = 68 + SYS_MSGSND = 69 + SYS_MSGRCV = 70 + SYS_MSGCTL = 71 + SYS_FCNTL = 72 + SYS_FLOCK = 73 + SYS_FSYNC = 74 + SYS_FDATASYNC = 75 + SYS_TRUNCATE = 76 + SYS_FTRUNCATE = 77 + SYS_GETDENTS = 78 + SYS_GETCWD = 79 + SYS_CHDIR = 80 + SYS_FCHDIR = 81 + SYS_RENAME = 82 + SYS_MKDIR = 83 + SYS_RMDIR = 84 + SYS_CREAT = 85 + SYS_LINK = 86 + SYS_UNLINK = 87 + SYS_SYMLINK = 88 + SYS_READLINK = 89 + SYS_CHMOD = 90 + SYS_FCHMOD = 91 + SYS_CHOWN = 92 + SYS_FCHOWN = 93 + SYS_LCHOWN = 94 + SYS_UMASK = 95 + SYS_GETTIMEOFDAY = 96 + SYS_GETRLIMIT = 97 + SYS_GETRUSAGE = 98 + SYS_SYSINFO = 99 + SYS_TIMES = 100 + SYS_PTRACE = 101 + SYS_GETUID = 102 + SYS_SYSLOG = 103 + SYS_GETGID = 104 + SYS_SETUID = 105 + SYS_SETGID = 106 + SYS_GETEUID = 107 + SYS_GETEGID = 108 + SYS_SETPGID = 109 + SYS_GETPPID = 110 + SYS_GETPGRP = 111 + SYS_SETSID = 112 + SYS_SETREUID = 113 + SYS_SETREGID = 114 + SYS_GETGROUPS = 115 + SYS_SETGROUPS = 116 + SYS_SETRESUID = 117 + SYS_GETRESUID = 118 + SYS_SETRESGID = 119 + SYS_GETRESGID = 120 + SYS_GETPGID = 121 + SYS_SETFSUID = 122 + SYS_SETFSGID = 123 + SYS_GETSID = 124 + SYS_CAPGET = 125 + SYS_CAPSET = 126 + SYS_RT_SIGPENDING = 127 + SYS_RT_SIGTIMEDWAIT = 128 + SYS_RT_SIGQUEUEINFO = 129 + SYS_RT_SIGSUSPEND = 130 + SYS_SIGALTSTACK = 131 + SYS_UTIME = 132 + SYS_MKNOD = 133 + SYS_USELIB = 134 + SYS_PERSONALITY = 135 + SYS_USTAT = 136 + SYS_STATFS = 137 + SYS_FSTATFS = 138 + SYS_SYSFS = 139 + SYS_GETPRIORITY = 140 + SYS_SETPRIORITY = 141 + SYS_SCHED_SETPARAM = 142 + SYS_SCHED_GETPARAM = 143 + SYS_SCHED_SETSCHEDULER = 144 + SYS_SCHED_GETSCHEDULER = 145 + SYS_SCHED_GET_PRIORITY_MAX = 146 + SYS_SCHED_GET_PRIORITY_MIN = 147 + SYS_SCHED_RR_GET_INTERVAL = 148 + SYS_MLOCK = 149 + SYS_MUNLOCK = 150 + SYS_MLOCKALL = 151 + SYS_MUNLOCKALL = 152 + SYS_VHANGUP = 153 + SYS_MODIFY_LDT = 154 + SYS_PIVOT_ROOT = 155 + SYS__SYSCTL = 156 + SYS_PRCTL = 157 + SYS_ARCH_PRCTL = 158 + SYS_ADJTIMEX = 159 + SYS_SETRLIMIT = 160 + SYS_CHROOT = 161 + SYS_SYNC = 162 + SYS_ACCT = 163 + SYS_SETTIMEOFDAY = 164 + SYS_MOUNT = 165 + SYS_UMOUNT2 = 166 + SYS_SWAPON = 167 + SYS_SWAPOFF = 168 + SYS_REBOOT = 169 + SYS_SETHOSTNAME = 170 + SYS_SETDOMAINNAME = 171 + SYS_IOPL = 172 + SYS_IOPERM = 173 + SYS_CREATE_MODULE = 174 + SYS_INIT_MODULE = 175 + SYS_DELETE_MODULE = 176 + SYS_GET_KERNEL_SYMS = 177 + SYS_QUERY_MODULE = 178 + SYS_QUOTACTL = 179 + SYS_NFSSERVCTL = 180 + SYS_GETPMSG = 181 + SYS_PUTPMSG = 182 + SYS_AFS_SYSCALL = 183 + SYS_TUXCALL = 184 + SYS_SECURITY = 185 + SYS_GETTID = 186 + SYS_READAHEAD = 187 + SYS_SETXATTR = 188 + SYS_LSETXATTR = 189 + SYS_FSETXATTR = 190 + SYS_GETXATTR = 191 + SYS_LGETXATTR = 192 + SYS_FGETXATTR = 193 + SYS_LISTXATTR = 194 + SYS_LLISTXATTR = 195 + SYS_FLISTXATTR = 196 + SYS_REMOVEXATTR = 197 + SYS_LREMOVEXATTR = 198 + SYS_FREMOVEXATTR = 199 + SYS_TKILL = 200 + SYS_TIME = 201 + SYS_FUTEX = 202 + SYS_SCHED_SETAFFINITY = 203 + SYS_SCHED_GETAFFINITY = 204 + SYS_SET_THREAD_AREA = 205 + SYS_IO_SETUP = 206 + SYS_IO_DESTROY = 207 + SYS_IO_GETEVENTS = 208 + SYS_IO_SUBMIT = 209 + SYS_IO_CANCEL = 210 + SYS_GET_THREAD_AREA = 211 + SYS_LOOKUP_DCOOKIE = 212 + SYS_EPOLL_CREATE = 213 + SYS_EPOLL_CTL_OLD = 214 + SYS_EPOLL_WAIT_OLD = 215 + SYS_REMAP_FILE_PAGES = 216 + SYS_GETDENTS64 = 217 + SYS_SET_TID_ADDRESS = 218 + SYS_RESTART_SYSCALL = 219 + SYS_SEMTIMEDOP = 220 + SYS_FADVISE64 = 221 + SYS_TIMER_CREATE = 222 + SYS_TIMER_SETTIME = 223 + SYS_TIMER_GETTIME = 224 + SYS_TIMER_GETOVERRUN = 225 + SYS_TIMER_DELETE = 226 + SYS_CLOCK_SETTIME = 227 + SYS_CLOCK_GETTIME = 228 + SYS_CLOCK_GETRES = 229 + SYS_CLOCK_NANOSLEEP = 230 + SYS_EXIT_GROUP = 231 + SYS_EPOLL_WAIT = 232 + SYS_EPOLL_CTL = 233 + SYS_TGKILL = 234 + SYS_UTIMES = 235 + SYS_VSERVER = 236 + SYS_MBIND = 237 + SYS_SET_MEMPOLICY = 238 + SYS_GET_MEMPOLICY = 239 + SYS_MQ_OPEN = 240 + SYS_MQ_UNLINK = 241 + SYS_MQ_TIMEDSEND = 242 + SYS_MQ_TIMEDRECEIVE = 243 + SYS_MQ_NOTIFY = 244 + SYS_MQ_GETSETATTR = 245 + SYS_KEXEC_LOAD = 246 + SYS_WAITID = 247 + SYS_ADD_KEY = 248 + SYS_REQUEST_KEY = 249 + SYS_KEYCTL = 250 + SYS_IOPRIO_SET = 251 + SYS_IOPRIO_GET = 252 + SYS_INOTIFY_INIT = 253 + SYS_INOTIFY_ADD_WATCH = 254 + SYS_INOTIFY_RM_WATCH = 255 + SYS_MIGRATE_PAGES = 256 + SYS_OPENAT = 257 + SYS_MKDIRAT = 258 + SYS_MKNODAT = 259 + SYS_FCHOWNAT = 260 + SYS_FUTIMESAT = 261 + SYS_NEWFSTATAT = 262 + SYS_UNLINKAT = 263 + SYS_RENAMEAT = 264 + SYS_LINKAT = 265 + SYS_SYMLINKAT = 266 + SYS_READLINKAT = 267 + SYS_FCHMODAT = 268 + SYS_FACCESSAT = 269 + SYS_PSELECT6 = 270 + SYS_PPOLL = 271 + SYS_UNSHARE = 272 + SYS_SET_ROBUST_LIST = 273 + SYS_GET_ROBUST_LIST = 274 + SYS_SPLICE = 275 + SYS_TEE = 276 + SYS_SYNC_FILE_RANGE = 277 + SYS_VMSPLICE = 278 + SYS_MOVE_PAGES = 279 + SYS_UTIMENSAT = 280 + SYS_EPOLL_PWAIT = 281 + SYS_SIGNALFD = 282 + SYS_TIMERFD_CREATE = 283 + SYS_EVENTFD = 284 + SYS_FALLOCATE = 285 + SYS_TIMERFD_SETTIME = 286 + SYS_TIMERFD_GETTIME = 287 + SYS_ACCEPT4 = 288 + SYS_SIGNALFD4 = 289 + SYS_EVENTFD2 = 290 + SYS_EPOLL_CREATE1 = 291 + SYS_DUP3 = 292 + SYS_PIPE2 = 293 + SYS_INOTIFY_INIT1 = 294 + SYS_PREADV = 295 + SYS_PWRITEV = 296 + SYS_RT_TGSIGQUEUEINFO = 297 + SYS_PERF_EVENT_OPEN = 298 + SYS_RECVMMSG = 299 + SYS_FANOTIFY_INIT = 300 + SYS_FANOTIFY_MARK = 301 + SYS_PRLIMIT64 = 302 + SYS_NAME_TO_HANDLE_AT = 303 + SYS_OPEN_BY_HANDLE_AT = 304 + SYS_CLOCK_ADJTIME = 305 + SYS_SYNCFS = 306 + SYS_SENDMMSG = 307 + SYS_SETNS = 308 + SYS_GETCPU = 309 + SYS_PROCESS_VM_READV = 310 + SYS_PROCESS_VM_WRITEV = 311 + SYS_KCMP = 312 + SYS_FINIT_MODULE = 313 + SYS_SCHED_SETATTR = 314 + SYS_SCHED_GETATTR = 315 + SYS_RENAMEAT2 = 316 + SYS_SECCOMP = 317 + SYS_GETRANDOM = 318 + SYS_MEMFD_CREATE = 319 + SYS_KEXEC_FILE_LOAD = 320 + SYS_BPF = 321 + SYS_EXECVEAT = 322 + SYS_USERFAULTFD = 323 + SYS_MEMBARRIER = 324 + SYS_MLOCK2 = 325 + SYS_COPY_FILE_RANGE = 326 + SYS_PREADV2 = 327 + SYS_PWRITEV2 = 328 + SYS_PKEY_MPROTECT = 329 + SYS_PKEY_ALLOC = 330 + SYS_PKEY_FREE = 331 + SYS_STATX = 332 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go new file mode 100644 index 0000000..ab7fa5f --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -0,0 +1,362 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_PTRACE = 26 + SYS_PAUSE = 29 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_VHANGUP = 111 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_SETRESGID = 170 + SYS_GETRESGID = 171 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_CHOWN = 182 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_VFORK = 190 + SYS_UGETRLIMIT = 191 + SYS_MMAP2 = 192 + SYS_TRUNCATE64 = 193 + SYS_FTRUNCATE64 = 194 + SYS_STAT64 = 195 + SYS_LSTAT64 = 196 + SYS_FSTAT64 = 197 + SYS_LCHOWN32 = 198 + SYS_GETUID32 = 199 + SYS_GETGID32 = 200 + SYS_GETEUID32 = 201 + SYS_GETEGID32 = 202 + SYS_SETREUID32 = 203 + SYS_SETREGID32 = 204 + SYS_GETGROUPS32 = 205 + SYS_SETGROUPS32 = 206 + SYS_FCHOWN32 = 207 + SYS_SETRESUID32 = 208 + SYS_GETRESUID32 = 209 + SYS_SETRESGID32 = 210 + SYS_GETRESGID32 = 211 + SYS_CHOWN32 = 212 + SYS_SETUID32 = 213 + SYS_SETGID32 = 214 + SYS_SETFSUID32 = 215 + SYS_SETFSGID32 = 216 + SYS_GETDENTS64 = 217 + SYS_PIVOT_ROOT = 218 + SYS_MINCORE = 219 + SYS_MADVISE = 220 + SYS_FCNTL64 = 221 + SYS_GETTID = 224 + SYS_READAHEAD = 225 + SYS_SETXATTR = 226 + SYS_LSETXATTR = 227 + SYS_FSETXATTR = 228 + SYS_GETXATTR = 229 + SYS_LGETXATTR = 230 + SYS_FGETXATTR = 231 + SYS_LISTXATTR = 232 + SYS_LLISTXATTR = 233 + SYS_FLISTXATTR = 234 + SYS_REMOVEXATTR = 235 + SYS_LREMOVEXATTR = 236 + SYS_FREMOVEXATTR = 237 + SYS_TKILL = 238 + SYS_SENDFILE64 = 239 + SYS_FUTEX = 240 + SYS_SCHED_SETAFFINITY = 241 + SYS_SCHED_GETAFFINITY = 242 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_LOOKUP_DCOOKIE = 249 + SYS_EPOLL_CREATE = 250 + SYS_EPOLL_CTL = 251 + SYS_EPOLL_WAIT = 252 + SYS_REMAP_FILE_PAGES = 253 + SYS_SET_TID_ADDRESS = 256 + SYS_TIMER_CREATE = 257 + SYS_TIMER_SETTIME = 258 + SYS_TIMER_GETTIME = 259 + SYS_TIMER_GETOVERRUN = 260 + SYS_TIMER_DELETE = 261 + SYS_CLOCK_SETTIME = 262 + SYS_CLOCK_GETTIME = 263 + SYS_CLOCK_GETRES = 264 + SYS_CLOCK_NANOSLEEP = 265 + SYS_STATFS64 = 266 + SYS_FSTATFS64 = 267 + SYS_TGKILL = 268 + SYS_UTIMES = 269 + SYS_ARM_FADVISE64_64 = 270 + SYS_PCICONFIG_IOBASE = 271 + SYS_PCICONFIG_READ = 272 + SYS_PCICONFIG_WRITE = 273 + SYS_MQ_OPEN = 274 + SYS_MQ_UNLINK = 275 + SYS_MQ_TIMEDSEND = 276 + SYS_MQ_TIMEDRECEIVE = 277 + SYS_MQ_NOTIFY = 278 + SYS_MQ_GETSETATTR = 279 + SYS_WAITID = 280 + SYS_SOCKET = 281 + SYS_BIND = 282 + SYS_CONNECT = 283 + SYS_LISTEN = 284 + SYS_ACCEPT = 285 + SYS_GETSOCKNAME = 286 + SYS_GETPEERNAME = 287 + SYS_SOCKETPAIR = 288 + SYS_SEND = 289 + SYS_SENDTO = 290 + SYS_RECV = 291 + SYS_RECVFROM = 292 + SYS_SHUTDOWN = 293 + SYS_SETSOCKOPT = 294 + SYS_GETSOCKOPT = 295 + SYS_SENDMSG = 296 + SYS_RECVMSG = 297 + SYS_SEMOP = 298 + SYS_SEMGET = 299 + SYS_SEMCTL = 300 + SYS_MSGSND = 301 + SYS_MSGRCV = 302 + SYS_MSGGET = 303 + SYS_MSGCTL = 304 + SYS_SHMAT = 305 + SYS_SHMDT = 306 + SYS_SHMGET = 307 + SYS_SHMCTL = 308 + SYS_ADD_KEY = 309 + SYS_REQUEST_KEY = 310 + SYS_KEYCTL = 311 + SYS_SEMTIMEDOP = 312 + SYS_VSERVER = 313 + SYS_IOPRIO_SET = 314 + SYS_IOPRIO_GET = 315 + SYS_INOTIFY_INIT = 316 + SYS_INOTIFY_ADD_WATCH = 317 + SYS_INOTIFY_RM_WATCH = 318 + SYS_MBIND = 319 + SYS_GET_MEMPOLICY = 320 + SYS_SET_MEMPOLICY = 321 + SYS_OPENAT = 322 + SYS_MKDIRAT = 323 + SYS_MKNODAT = 324 + SYS_FCHOWNAT = 325 + SYS_FUTIMESAT = 326 + SYS_FSTATAT64 = 327 + SYS_UNLINKAT = 328 + SYS_RENAMEAT = 329 + SYS_LINKAT = 330 + SYS_SYMLINKAT = 331 + SYS_READLINKAT = 332 + SYS_FCHMODAT = 333 + SYS_FACCESSAT = 334 + SYS_PSELECT6 = 335 + SYS_PPOLL = 336 + SYS_UNSHARE = 337 + SYS_SET_ROBUST_LIST = 338 + SYS_GET_ROBUST_LIST = 339 + SYS_SPLICE = 340 + SYS_ARM_SYNC_FILE_RANGE = 341 + SYS_TEE = 342 + SYS_VMSPLICE = 343 + SYS_MOVE_PAGES = 344 + SYS_GETCPU = 345 + SYS_EPOLL_PWAIT = 346 + SYS_KEXEC_LOAD = 347 + SYS_UTIMENSAT = 348 + SYS_SIGNALFD = 349 + SYS_TIMERFD_CREATE = 350 + SYS_EVENTFD = 351 + SYS_FALLOCATE = 352 + SYS_TIMERFD_SETTIME = 353 + SYS_TIMERFD_GETTIME = 354 + SYS_SIGNALFD4 = 355 + SYS_EVENTFD2 = 356 + SYS_EPOLL_CREATE1 = 357 + SYS_DUP3 = 358 + SYS_PIPE2 = 359 + SYS_INOTIFY_INIT1 = 360 + SYS_PREADV = 361 + SYS_PWRITEV = 362 + SYS_RT_TGSIGQUEUEINFO = 363 + SYS_PERF_EVENT_OPEN = 364 + SYS_RECVMMSG = 365 + SYS_ACCEPT4 = 366 + SYS_FANOTIFY_INIT = 367 + SYS_FANOTIFY_MARK = 368 + SYS_PRLIMIT64 = 369 + SYS_NAME_TO_HANDLE_AT = 370 + SYS_OPEN_BY_HANDLE_AT = 371 + SYS_CLOCK_ADJTIME = 372 + SYS_SYNCFS = 373 + SYS_SENDMMSG = 374 + SYS_SETNS = 375 + SYS_PROCESS_VM_READV = 376 + SYS_PROCESS_VM_WRITEV = 377 + SYS_KCMP = 378 + SYS_FINIT_MODULE = 379 + SYS_SCHED_SETATTR = 380 + SYS_SCHED_GETATTR = 381 + SYS_RENAMEAT2 = 382 + SYS_SECCOMP = 383 + SYS_GETRANDOM = 384 + SYS_MEMFD_CREATE = 385 + SYS_BPF = 386 + SYS_EXECVEAT = 387 + SYS_USERFAULTFD = 388 + SYS_MEMBARRIER = 389 + SYS_MLOCK2 = 390 + SYS_COPY_FILE_RANGE = 391 + SYS_PREADV2 = 392 + SYS_PWRITEV2 = 393 + SYS_PKEY_MPROTECT = 394 + SYS_PKEY_ALLOC = 395 + SYS_PKEY_FREE = 396 + SYS_STATX = 397 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go new file mode 100644 index 0000000..b1c6b4b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -0,0 +1,286 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,linux + +package unix + +const ( + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_RENAMEAT = 38 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRLIMIT = 163 + SYS_SETRLIMIT = 164 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 + SYS_STATX = 291 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go new file mode 100644 index 0000000..2e9aa7a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -0,0 +1,375 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips,linux + +package unix + +const ( + SYS_SYSCALL = 4000 + SYS_EXIT = 4001 + SYS_FORK = 4002 + SYS_READ = 4003 + SYS_WRITE = 4004 + SYS_OPEN = 4005 + SYS_CLOSE = 4006 + SYS_WAITPID = 4007 + SYS_CREAT = 4008 + SYS_LINK = 4009 + SYS_UNLINK = 4010 + SYS_EXECVE = 4011 + SYS_CHDIR = 4012 + SYS_TIME = 4013 + SYS_MKNOD = 4014 + SYS_CHMOD = 4015 + SYS_LCHOWN = 4016 + SYS_BREAK = 4017 + SYS_UNUSED18 = 4018 + SYS_LSEEK = 4019 + SYS_GETPID = 4020 + SYS_MOUNT = 4021 + SYS_UMOUNT = 4022 + SYS_SETUID = 4023 + SYS_GETUID = 4024 + SYS_STIME = 4025 + SYS_PTRACE = 4026 + SYS_ALARM = 4027 + SYS_UNUSED28 = 4028 + SYS_PAUSE = 4029 + SYS_UTIME = 4030 + SYS_STTY = 4031 + SYS_GTTY = 4032 + SYS_ACCESS = 4033 + SYS_NICE = 4034 + SYS_FTIME = 4035 + SYS_SYNC = 4036 + SYS_KILL = 4037 + SYS_RENAME = 4038 + SYS_MKDIR = 4039 + SYS_RMDIR = 4040 + SYS_DUP = 4041 + SYS_PIPE = 4042 + SYS_TIMES = 4043 + SYS_PROF = 4044 + SYS_BRK = 4045 + SYS_SETGID = 4046 + SYS_GETGID = 4047 + SYS_SIGNAL = 4048 + SYS_GETEUID = 4049 + SYS_GETEGID = 4050 + SYS_ACCT = 4051 + SYS_UMOUNT2 = 4052 + SYS_LOCK = 4053 + SYS_IOCTL = 4054 + SYS_FCNTL = 4055 + SYS_MPX = 4056 + SYS_SETPGID = 4057 + SYS_ULIMIT = 4058 + SYS_UNUSED59 = 4059 + SYS_UMASK = 4060 + SYS_CHROOT = 4061 + SYS_USTAT = 4062 + SYS_DUP2 = 4063 + SYS_GETPPID = 4064 + SYS_GETPGRP = 4065 + SYS_SETSID = 4066 + SYS_SIGACTION = 4067 + SYS_SGETMASK = 4068 + SYS_SSETMASK = 4069 + SYS_SETREUID = 4070 + SYS_SETREGID = 4071 + SYS_SIGSUSPEND = 4072 + SYS_SIGPENDING = 4073 + SYS_SETHOSTNAME = 4074 + SYS_SETRLIMIT = 4075 + SYS_GETRLIMIT = 4076 + SYS_GETRUSAGE = 4077 + SYS_GETTIMEOFDAY = 4078 + SYS_SETTIMEOFDAY = 4079 + SYS_GETGROUPS = 4080 + SYS_SETGROUPS = 4081 + SYS_RESERVED82 = 4082 + SYS_SYMLINK = 4083 + SYS_UNUSED84 = 4084 + SYS_READLINK = 4085 + SYS_USELIB = 4086 + SYS_SWAPON = 4087 + SYS_REBOOT = 4088 + SYS_READDIR = 4089 + SYS_MMAP = 4090 + SYS_MUNMAP = 4091 + SYS_TRUNCATE = 4092 + SYS_FTRUNCATE = 4093 + SYS_FCHMOD = 4094 + SYS_FCHOWN = 4095 + SYS_GETPRIORITY = 4096 + SYS_SETPRIORITY = 4097 + SYS_PROFIL = 4098 + SYS_STATFS = 4099 + SYS_FSTATFS = 4100 + SYS_IOPERM = 4101 + SYS_SOCKETCALL = 4102 + SYS_SYSLOG = 4103 + SYS_SETITIMER = 4104 + SYS_GETITIMER = 4105 + SYS_STAT = 4106 + SYS_LSTAT = 4107 + SYS_FSTAT = 4108 + SYS_UNUSED109 = 4109 + SYS_IOPL = 4110 + SYS_VHANGUP = 4111 + SYS_IDLE = 4112 + SYS_VM86 = 4113 + SYS_WAIT4 = 4114 + SYS_SWAPOFF = 4115 + SYS_SYSINFO = 4116 + SYS_IPC = 4117 + SYS_FSYNC = 4118 + SYS_SIGRETURN = 4119 + SYS_CLONE = 4120 + SYS_SETDOMAINNAME = 4121 + SYS_UNAME = 4122 + SYS_MODIFY_LDT = 4123 + SYS_ADJTIMEX = 4124 + SYS_MPROTECT = 4125 + SYS_SIGPROCMASK = 4126 + SYS_CREATE_MODULE = 4127 + SYS_INIT_MODULE = 4128 + SYS_DELETE_MODULE = 4129 + SYS_GET_KERNEL_SYMS = 4130 + SYS_QUOTACTL = 4131 + SYS_GETPGID = 4132 + SYS_FCHDIR = 4133 + SYS_BDFLUSH = 4134 + SYS_SYSFS = 4135 + SYS_PERSONALITY = 4136 + SYS_AFS_SYSCALL = 4137 + SYS_SETFSUID = 4138 + SYS_SETFSGID = 4139 + SYS__LLSEEK = 4140 + SYS_GETDENTS = 4141 + SYS__NEWSELECT = 4142 + SYS_FLOCK = 4143 + SYS_MSYNC = 4144 + SYS_READV = 4145 + SYS_WRITEV = 4146 + SYS_CACHEFLUSH = 4147 + SYS_CACHECTL = 4148 + SYS_SYSMIPS = 4149 + SYS_UNUSED150 = 4150 + SYS_GETSID = 4151 + SYS_FDATASYNC = 4152 + SYS__SYSCTL = 4153 + SYS_MLOCK = 4154 + SYS_MUNLOCK = 4155 + SYS_MLOCKALL = 4156 + SYS_MUNLOCKALL = 4157 + SYS_SCHED_SETPARAM = 4158 + SYS_SCHED_GETPARAM = 4159 + SYS_SCHED_SETSCHEDULER = 4160 + SYS_SCHED_GETSCHEDULER = 4161 + SYS_SCHED_YIELD = 4162 + SYS_SCHED_GET_PRIORITY_MAX = 4163 + SYS_SCHED_GET_PRIORITY_MIN = 4164 + SYS_SCHED_RR_GET_INTERVAL = 4165 + SYS_NANOSLEEP = 4166 + SYS_MREMAP = 4167 + SYS_ACCEPT = 4168 + SYS_BIND = 4169 + SYS_CONNECT = 4170 + SYS_GETPEERNAME = 4171 + SYS_GETSOCKNAME = 4172 + SYS_GETSOCKOPT = 4173 + SYS_LISTEN = 4174 + SYS_RECV = 4175 + SYS_RECVFROM = 4176 + SYS_RECVMSG = 4177 + SYS_SEND = 4178 + SYS_SENDMSG = 4179 + SYS_SENDTO = 4180 + SYS_SETSOCKOPT = 4181 + SYS_SHUTDOWN = 4182 + SYS_SOCKET = 4183 + SYS_SOCKETPAIR = 4184 + SYS_SETRESUID = 4185 + SYS_GETRESUID = 4186 + SYS_QUERY_MODULE = 4187 + SYS_POLL = 4188 + SYS_NFSSERVCTL = 4189 + SYS_SETRESGID = 4190 + SYS_GETRESGID = 4191 + SYS_PRCTL = 4192 + SYS_RT_SIGRETURN = 4193 + SYS_RT_SIGACTION = 4194 + SYS_RT_SIGPROCMASK = 4195 + SYS_RT_SIGPENDING = 4196 + SYS_RT_SIGTIMEDWAIT = 4197 + SYS_RT_SIGQUEUEINFO = 4198 + SYS_RT_SIGSUSPEND = 4199 + SYS_PREAD64 = 4200 + SYS_PWRITE64 = 4201 + SYS_CHOWN = 4202 + SYS_GETCWD = 4203 + SYS_CAPGET = 4204 + SYS_CAPSET = 4205 + SYS_SIGALTSTACK = 4206 + SYS_SENDFILE = 4207 + SYS_GETPMSG = 4208 + SYS_PUTPMSG = 4209 + SYS_MMAP2 = 4210 + SYS_TRUNCATE64 = 4211 + SYS_FTRUNCATE64 = 4212 + SYS_STAT64 = 4213 + SYS_LSTAT64 = 4214 + SYS_FSTAT64 = 4215 + SYS_PIVOT_ROOT = 4216 + SYS_MINCORE = 4217 + SYS_MADVISE = 4218 + SYS_GETDENTS64 = 4219 + SYS_FCNTL64 = 4220 + SYS_RESERVED221 = 4221 + SYS_GETTID = 4222 + SYS_READAHEAD = 4223 + SYS_SETXATTR = 4224 + SYS_LSETXATTR = 4225 + SYS_FSETXATTR = 4226 + SYS_GETXATTR = 4227 + SYS_LGETXATTR = 4228 + SYS_FGETXATTR = 4229 + SYS_LISTXATTR = 4230 + SYS_LLISTXATTR = 4231 + SYS_FLISTXATTR = 4232 + SYS_REMOVEXATTR = 4233 + SYS_LREMOVEXATTR = 4234 + SYS_FREMOVEXATTR = 4235 + SYS_TKILL = 4236 + SYS_SENDFILE64 = 4237 + SYS_FUTEX = 4238 + SYS_SCHED_SETAFFINITY = 4239 + SYS_SCHED_GETAFFINITY = 4240 + SYS_IO_SETUP = 4241 + SYS_IO_DESTROY = 4242 + SYS_IO_GETEVENTS = 4243 + SYS_IO_SUBMIT = 4244 + SYS_IO_CANCEL = 4245 + SYS_EXIT_GROUP = 4246 + SYS_LOOKUP_DCOOKIE = 4247 + SYS_EPOLL_CREATE = 4248 + SYS_EPOLL_CTL = 4249 + SYS_EPOLL_WAIT = 4250 + SYS_REMAP_FILE_PAGES = 4251 + SYS_SET_TID_ADDRESS = 4252 + SYS_RESTART_SYSCALL = 4253 + SYS_FADVISE64 = 4254 + SYS_STATFS64 = 4255 + SYS_FSTATFS64 = 4256 + SYS_TIMER_CREATE = 4257 + SYS_TIMER_SETTIME = 4258 + SYS_TIMER_GETTIME = 4259 + SYS_TIMER_GETOVERRUN = 4260 + SYS_TIMER_DELETE = 4261 + SYS_CLOCK_SETTIME = 4262 + SYS_CLOCK_GETTIME = 4263 + SYS_CLOCK_GETRES = 4264 + SYS_CLOCK_NANOSLEEP = 4265 + SYS_TGKILL = 4266 + SYS_UTIMES = 4267 + SYS_MBIND = 4268 + SYS_GET_MEMPOLICY = 4269 + SYS_SET_MEMPOLICY = 4270 + SYS_MQ_OPEN = 4271 + SYS_MQ_UNLINK = 4272 + SYS_MQ_TIMEDSEND = 4273 + SYS_MQ_TIMEDRECEIVE = 4274 + SYS_MQ_NOTIFY = 4275 + SYS_MQ_GETSETATTR = 4276 + SYS_VSERVER = 4277 + SYS_WAITID = 4278 + SYS_ADD_KEY = 4280 + SYS_REQUEST_KEY = 4281 + SYS_KEYCTL = 4282 + SYS_SET_THREAD_AREA = 4283 + SYS_INOTIFY_INIT = 4284 + SYS_INOTIFY_ADD_WATCH = 4285 + SYS_INOTIFY_RM_WATCH = 4286 + SYS_MIGRATE_PAGES = 4287 + SYS_OPENAT = 4288 + SYS_MKDIRAT = 4289 + SYS_MKNODAT = 4290 + SYS_FCHOWNAT = 4291 + SYS_FUTIMESAT = 4292 + SYS_FSTATAT64 = 4293 + SYS_UNLINKAT = 4294 + SYS_RENAMEAT = 4295 + SYS_LINKAT = 4296 + SYS_SYMLINKAT = 4297 + SYS_READLINKAT = 4298 + SYS_FCHMODAT = 4299 + SYS_FACCESSAT = 4300 + SYS_PSELECT6 = 4301 + SYS_PPOLL = 4302 + SYS_UNSHARE = 4303 + SYS_SPLICE = 4304 + SYS_SYNC_FILE_RANGE = 4305 + SYS_TEE = 4306 + SYS_VMSPLICE = 4307 + SYS_MOVE_PAGES = 4308 + SYS_SET_ROBUST_LIST = 4309 + SYS_GET_ROBUST_LIST = 4310 + SYS_KEXEC_LOAD = 4311 + SYS_GETCPU = 4312 + SYS_EPOLL_PWAIT = 4313 + SYS_IOPRIO_SET = 4314 + SYS_IOPRIO_GET = 4315 + SYS_UTIMENSAT = 4316 + SYS_SIGNALFD = 4317 + SYS_TIMERFD = 4318 + SYS_EVENTFD = 4319 + SYS_FALLOCATE = 4320 + SYS_TIMERFD_CREATE = 4321 + SYS_TIMERFD_GETTIME = 4322 + SYS_TIMERFD_SETTIME = 4323 + SYS_SIGNALFD4 = 4324 + SYS_EVENTFD2 = 4325 + SYS_EPOLL_CREATE1 = 4326 + SYS_DUP3 = 4327 + SYS_PIPE2 = 4328 + SYS_INOTIFY_INIT1 = 4329 + SYS_PREADV = 4330 + SYS_PWRITEV = 4331 + SYS_RT_TGSIGQUEUEINFO = 4332 + SYS_PERF_EVENT_OPEN = 4333 + SYS_ACCEPT4 = 4334 + SYS_RECVMMSG = 4335 + SYS_FANOTIFY_INIT = 4336 + SYS_FANOTIFY_MARK = 4337 + SYS_PRLIMIT64 = 4338 + SYS_NAME_TO_HANDLE_AT = 4339 + SYS_OPEN_BY_HANDLE_AT = 4340 + SYS_CLOCK_ADJTIME = 4341 + SYS_SYNCFS = 4342 + SYS_SENDMMSG = 4343 + SYS_SETNS = 4344 + SYS_PROCESS_VM_READV = 4345 + SYS_PROCESS_VM_WRITEV = 4346 + SYS_KCMP = 4347 + SYS_FINIT_MODULE = 4348 + SYS_SCHED_SETATTR = 4349 + SYS_SCHED_GETATTR = 4350 + SYS_RENAMEAT2 = 4351 + SYS_SECCOMP = 4352 + SYS_GETRANDOM = 4353 + SYS_MEMFD_CREATE = 4354 + SYS_BPF = 4355 + SYS_EXECVEAT = 4356 + SYS_USERFAULTFD = 4357 + SYS_MEMBARRIER = 4358 + SYS_MLOCK2 = 4359 + SYS_COPY_FILE_RANGE = 4360 + SYS_PREADV2 = 4361 + SYS_PWRITEV2 = 4362 + SYS_PKEY_MPROTECT = 4363 + SYS_PKEY_ALLOC = 4364 + SYS_PKEY_FREE = 4365 + SYS_STATX = 4366 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go new file mode 100644 index 0000000..9282763 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -0,0 +1,335 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go new file mode 100644 index 0000000..45bd3fd --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -0,0 +1,335 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64le,linux + +package unix + +const ( + SYS_READ = 5000 + SYS_WRITE = 5001 + SYS_OPEN = 5002 + SYS_CLOSE = 5003 + SYS_STAT = 5004 + SYS_FSTAT = 5005 + SYS_LSTAT = 5006 + SYS_POLL = 5007 + SYS_LSEEK = 5008 + SYS_MMAP = 5009 + SYS_MPROTECT = 5010 + SYS_MUNMAP = 5011 + SYS_BRK = 5012 + SYS_RT_SIGACTION = 5013 + SYS_RT_SIGPROCMASK = 5014 + SYS_IOCTL = 5015 + SYS_PREAD64 = 5016 + SYS_PWRITE64 = 5017 + SYS_READV = 5018 + SYS_WRITEV = 5019 + SYS_ACCESS = 5020 + SYS_PIPE = 5021 + SYS__NEWSELECT = 5022 + SYS_SCHED_YIELD = 5023 + SYS_MREMAP = 5024 + SYS_MSYNC = 5025 + SYS_MINCORE = 5026 + SYS_MADVISE = 5027 + SYS_SHMGET = 5028 + SYS_SHMAT = 5029 + SYS_SHMCTL = 5030 + SYS_DUP = 5031 + SYS_DUP2 = 5032 + SYS_PAUSE = 5033 + SYS_NANOSLEEP = 5034 + SYS_GETITIMER = 5035 + SYS_SETITIMER = 5036 + SYS_ALARM = 5037 + SYS_GETPID = 5038 + SYS_SENDFILE = 5039 + SYS_SOCKET = 5040 + SYS_CONNECT = 5041 + SYS_ACCEPT = 5042 + SYS_SENDTO = 5043 + SYS_RECVFROM = 5044 + SYS_SENDMSG = 5045 + SYS_RECVMSG = 5046 + SYS_SHUTDOWN = 5047 + SYS_BIND = 5048 + SYS_LISTEN = 5049 + SYS_GETSOCKNAME = 5050 + SYS_GETPEERNAME = 5051 + SYS_SOCKETPAIR = 5052 + SYS_SETSOCKOPT = 5053 + SYS_GETSOCKOPT = 5054 + SYS_CLONE = 5055 + SYS_FORK = 5056 + SYS_EXECVE = 5057 + SYS_EXIT = 5058 + SYS_WAIT4 = 5059 + SYS_KILL = 5060 + SYS_UNAME = 5061 + SYS_SEMGET = 5062 + SYS_SEMOP = 5063 + SYS_SEMCTL = 5064 + SYS_SHMDT = 5065 + SYS_MSGGET = 5066 + SYS_MSGSND = 5067 + SYS_MSGRCV = 5068 + SYS_MSGCTL = 5069 + SYS_FCNTL = 5070 + SYS_FLOCK = 5071 + SYS_FSYNC = 5072 + SYS_FDATASYNC = 5073 + SYS_TRUNCATE = 5074 + SYS_FTRUNCATE = 5075 + SYS_GETDENTS = 5076 + SYS_GETCWD = 5077 + SYS_CHDIR = 5078 + SYS_FCHDIR = 5079 + SYS_RENAME = 5080 + SYS_MKDIR = 5081 + SYS_RMDIR = 5082 + SYS_CREAT = 5083 + SYS_LINK = 5084 + SYS_UNLINK = 5085 + SYS_SYMLINK = 5086 + SYS_READLINK = 5087 + SYS_CHMOD = 5088 + SYS_FCHMOD = 5089 + SYS_CHOWN = 5090 + SYS_FCHOWN = 5091 + SYS_LCHOWN = 5092 + SYS_UMASK = 5093 + SYS_GETTIMEOFDAY = 5094 + SYS_GETRLIMIT = 5095 + SYS_GETRUSAGE = 5096 + SYS_SYSINFO = 5097 + SYS_TIMES = 5098 + SYS_PTRACE = 5099 + SYS_GETUID = 5100 + SYS_SYSLOG = 5101 + SYS_GETGID = 5102 + SYS_SETUID = 5103 + SYS_SETGID = 5104 + SYS_GETEUID = 5105 + SYS_GETEGID = 5106 + SYS_SETPGID = 5107 + SYS_GETPPID = 5108 + SYS_GETPGRP = 5109 + SYS_SETSID = 5110 + SYS_SETREUID = 5111 + SYS_SETREGID = 5112 + SYS_GETGROUPS = 5113 + SYS_SETGROUPS = 5114 + SYS_SETRESUID = 5115 + SYS_GETRESUID = 5116 + SYS_SETRESGID = 5117 + SYS_GETRESGID = 5118 + SYS_GETPGID = 5119 + SYS_SETFSUID = 5120 + SYS_SETFSGID = 5121 + SYS_GETSID = 5122 + SYS_CAPGET = 5123 + SYS_CAPSET = 5124 + SYS_RT_SIGPENDING = 5125 + SYS_RT_SIGTIMEDWAIT = 5126 + SYS_RT_SIGQUEUEINFO = 5127 + SYS_RT_SIGSUSPEND = 5128 + SYS_SIGALTSTACK = 5129 + SYS_UTIME = 5130 + SYS_MKNOD = 5131 + SYS_PERSONALITY = 5132 + SYS_USTAT = 5133 + SYS_STATFS = 5134 + SYS_FSTATFS = 5135 + SYS_SYSFS = 5136 + SYS_GETPRIORITY = 5137 + SYS_SETPRIORITY = 5138 + SYS_SCHED_SETPARAM = 5139 + SYS_SCHED_GETPARAM = 5140 + SYS_SCHED_SETSCHEDULER = 5141 + SYS_SCHED_GETSCHEDULER = 5142 + SYS_SCHED_GET_PRIORITY_MAX = 5143 + SYS_SCHED_GET_PRIORITY_MIN = 5144 + SYS_SCHED_RR_GET_INTERVAL = 5145 + SYS_MLOCK = 5146 + SYS_MUNLOCK = 5147 + SYS_MLOCKALL = 5148 + SYS_MUNLOCKALL = 5149 + SYS_VHANGUP = 5150 + SYS_PIVOT_ROOT = 5151 + SYS__SYSCTL = 5152 + SYS_PRCTL = 5153 + SYS_ADJTIMEX = 5154 + SYS_SETRLIMIT = 5155 + SYS_CHROOT = 5156 + SYS_SYNC = 5157 + SYS_ACCT = 5158 + SYS_SETTIMEOFDAY = 5159 + SYS_MOUNT = 5160 + SYS_UMOUNT2 = 5161 + SYS_SWAPON = 5162 + SYS_SWAPOFF = 5163 + SYS_REBOOT = 5164 + SYS_SETHOSTNAME = 5165 + SYS_SETDOMAINNAME = 5166 + SYS_CREATE_MODULE = 5167 + SYS_INIT_MODULE = 5168 + SYS_DELETE_MODULE = 5169 + SYS_GET_KERNEL_SYMS = 5170 + SYS_QUERY_MODULE = 5171 + SYS_QUOTACTL = 5172 + SYS_NFSSERVCTL = 5173 + SYS_GETPMSG = 5174 + SYS_PUTPMSG = 5175 + SYS_AFS_SYSCALL = 5176 + SYS_RESERVED177 = 5177 + SYS_GETTID = 5178 + SYS_READAHEAD = 5179 + SYS_SETXATTR = 5180 + SYS_LSETXATTR = 5181 + SYS_FSETXATTR = 5182 + SYS_GETXATTR = 5183 + SYS_LGETXATTR = 5184 + SYS_FGETXATTR = 5185 + SYS_LISTXATTR = 5186 + SYS_LLISTXATTR = 5187 + SYS_FLISTXATTR = 5188 + SYS_REMOVEXATTR = 5189 + SYS_LREMOVEXATTR = 5190 + SYS_FREMOVEXATTR = 5191 + SYS_TKILL = 5192 + SYS_RESERVED193 = 5193 + SYS_FUTEX = 5194 + SYS_SCHED_SETAFFINITY = 5195 + SYS_SCHED_GETAFFINITY = 5196 + SYS_CACHEFLUSH = 5197 + SYS_CACHECTL = 5198 + SYS_SYSMIPS = 5199 + SYS_IO_SETUP = 5200 + SYS_IO_DESTROY = 5201 + SYS_IO_GETEVENTS = 5202 + SYS_IO_SUBMIT = 5203 + SYS_IO_CANCEL = 5204 + SYS_EXIT_GROUP = 5205 + SYS_LOOKUP_DCOOKIE = 5206 + SYS_EPOLL_CREATE = 5207 + SYS_EPOLL_CTL = 5208 + SYS_EPOLL_WAIT = 5209 + SYS_REMAP_FILE_PAGES = 5210 + SYS_RT_SIGRETURN = 5211 + SYS_SET_TID_ADDRESS = 5212 + SYS_RESTART_SYSCALL = 5213 + SYS_SEMTIMEDOP = 5214 + SYS_FADVISE64 = 5215 + SYS_TIMER_CREATE = 5216 + SYS_TIMER_SETTIME = 5217 + SYS_TIMER_GETTIME = 5218 + SYS_TIMER_GETOVERRUN = 5219 + SYS_TIMER_DELETE = 5220 + SYS_CLOCK_SETTIME = 5221 + SYS_CLOCK_GETTIME = 5222 + SYS_CLOCK_GETRES = 5223 + SYS_CLOCK_NANOSLEEP = 5224 + SYS_TGKILL = 5225 + SYS_UTIMES = 5226 + SYS_MBIND = 5227 + SYS_GET_MEMPOLICY = 5228 + SYS_SET_MEMPOLICY = 5229 + SYS_MQ_OPEN = 5230 + SYS_MQ_UNLINK = 5231 + SYS_MQ_TIMEDSEND = 5232 + SYS_MQ_TIMEDRECEIVE = 5233 + SYS_MQ_NOTIFY = 5234 + SYS_MQ_GETSETATTR = 5235 + SYS_VSERVER = 5236 + SYS_WAITID = 5237 + SYS_ADD_KEY = 5239 + SYS_REQUEST_KEY = 5240 + SYS_KEYCTL = 5241 + SYS_SET_THREAD_AREA = 5242 + SYS_INOTIFY_INIT = 5243 + SYS_INOTIFY_ADD_WATCH = 5244 + SYS_INOTIFY_RM_WATCH = 5245 + SYS_MIGRATE_PAGES = 5246 + SYS_OPENAT = 5247 + SYS_MKDIRAT = 5248 + SYS_MKNODAT = 5249 + SYS_FCHOWNAT = 5250 + SYS_FUTIMESAT = 5251 + SYS_NEWFSTATAT = 5252 + SYS_UNLINKAT = 5253 + SYS_RENAMEAT = 5254 + SYS_LINKAT = 5255 + SYS_SYMLINKAT = 5256 + SYS_READLINKAT = 5257 + SYS_FCHMODAT = 5258 + SYS_FACCESSAT = 5259 + SYS_PSELECT6 = 5260 + SYS_PPOLL = 5261 + SYS_UNSHARE = 5262 + SYS_SPLICE = 5263 + SYS_SYNC_FILE_RANGE = 5264 + SYS_TEE = 5265 + SYS_VMSPLICE = 5266 + SYS_MOVE_PAGES = 5267 + SYS_SET_ROBUST_LIST = 5268 + SYS_GET_ROBUST_LIST = 5269 + SYS_KEXEC_LOAD = 5270 + SYS_GETCPU = 5271 + SYS_EPOLL_PWAIT = 5272 + SYS_IOPRIO_SET = 5273 + SYS_IOPRIO_GET = 5274 + SYS_UTIMENSAT = 5275 + SYS_SIGNALFD = 5276 + SYS_TIMERFD = 5277 + SYS_EVENTFD = 5278 + SYS_FALLOCATE = 5279 + SYS_TIMERFD_CREATE = 5280 + SYS_TIMERFD_GETTIME = 5281 + SYS_TIMERFD_SETTIME = 5282 + SYS_SIGNALFD4 = 5283 + SYS_EVENTFD2 = 5284 + SYS_EPOLL_CREATE1 = 5285 + SYS_DUP3 = 5286 + SYS_PIPE2 = 5287 + SYS_INOTIFY_INIT1 = 5288 + SYS_PREADV = 5289 + SYS_PWRITEV = 5290 + SYS_RT_TGSIGQUEUEINFO = 5291 + SYS_PERF_EVENT_OPEN = 5292 + SYS_ACCEPT4 = 5293 + SYS_RECVMMSG = 5294 + SYS_FANOTIFY_INIT = 5295 + SYS_FANOTIFY_MARK = 5296 + SYS_PRLIMIT64 = 5297 + SYS_NAME_TO_HANDLE_AT = 5298 + SYS_OPEN_BY_HANDLE_AT = 5299 + SYS_CLOCK_ADJTIME = 5300 + SYS_SYNCFS = 5301 + SYS_SENDMMSG = 5302 + SYS_SETNS = 5303 + SYS_PROCESS_VM_READV = 5304 + SYS_PROCESS_VM_WRITEV = 5305 + SYS_KCMP = 5306 + SYS_FINIT_MODULE = 5307 + SYS_GETDENTS64 = 5308 + SYS_SCHED_SETATTR = 5309 + SYS_SCHED_GETATTR = 5310 + SYS_RENAMEAT2 = 5311 + SYS_SECCOMP = 5312 + SYS_GETRANDOM = 5313 + SYS_MEMFD_CREATE = 5314 + SYS_BPF = 5315 + SYS_EXECVEAT = 5316 + SYS_USERFAULTFD = 5317 + SYS_MEMBARRIER = 5318 + SYS_MLOCK2 = 5319 + SYS_COPY_FILE_RANGE = 5320 + SYS_PREADV2 = 5321 + SYS_PWRITEV2 = 5322 + SYS_PKEY_MPROTECT = 5323 + SYS_PKEY_ALLOC = 5324 + SYS_PKEY_FREE = 5325 + SYS_STATX = 5326 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go new file mode 100644 index 0000000..62ccac4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -0,0 +1,375 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mipsle,linux + +package unix + +const ( + SYS_SYSCALL = 4000 + SYS_EXIT = 4001 + SYS_FORK = 4002 + SYS_READ = 4003 + SYS_WRITE = 4004 + SYS_OPEN = 4005 + SYS_CLOSE = 4006 + SYS_WAITPID = 4007 + SYS_CREAT = 4008 + SYS_LINK = 4009 + SYS_UNLINK = 4010 + SYS_EXECVE = 4011 + SYS_CHDIR = 4012 + SYS_TIME = 4013 + SYS_MKNOD = 4014 + SYS_CHMOD = 4015 + SYS_LCHOWN = 4016 + SYS_BREAK = 4017 + SYS_UNUSED18 = 4018 + SYS_LSEEK = 4019 + SYS_GETPID = 4020 + SYS_MOUNT = 4021 + SYS_UMOUNT = 4022 + SYS_SETUID = 4023 + SYS_GETUID = 4024 + SYS_STIME = 4025 + SYS_PTRACE = 4026 + SYS_ALARM = 4027 + SYS_UNUSED28 = 4028 + SYS_PAUSE = 4029 + SYS_UTIME = 4030 + SYS_STTY = 4031 + SYS_GTTY = 4032 + SYS_ACCESS = 4033 + SYS_NICE = 4034 + SYS_FTIME = 4035 + SYS_SYNC = 4036 + SYS_KILL = 4037 + SYS_RENAME = 4038 + SYS_MKDIR = 4039 + SYS_RMDIR = 4040 + SYS_DUP = 4041 + SYS_PIPE = 4042 + SYS_TIMES = 4043 + SYS_PROF = 4044 + SYS_BRK = 4045 + SYS_SETGID = 4046 + SYS_GETGID = 4047 + SYS_SIGNAL = 4048 + SYS_GETEUID = 4049 + SYS_GETEGID = 4050 + SYS_ACCT = 4051 + SYS_UMOUNT2 = 4052 + SYS_LOCK = 4053 + SYS_IOCTL = 4054 + SYS_FCNTL = 4055 + SYS_MPX = 4056 + SYS_SETPGID = 4057 + SYS_ULIMIT = 4058 + SYS_UNUSED59 = 4059 + SYS_UMASK = 4060 + SYS_CHROOT = 4061 + SYS_USTAT = 4062 + SYS_DUP2 = 4063 + SYS_GETPPID = 4064 + SYS_GETPGRP = 4065 + SYS_SETSID = 4066 + SYS_SIGACTION = 4067 + SYS_SGETMASK = 4068 + SYS_SSETMASK = 4069 + SYS_SETREUID = 4070 + SYS_SETREGID = 4071 + SYS_SIGSUSPEND = 4072 + SYS_SIGPENDING = 4073 + SYS_SETHOSTNAME = 4074 + SYS_SETRLIMIT = 4075 + SYS_GETRLIMIT = 4076 + SYS_GETRUSAGE = 4077 + SYS_GETTIMEOFDAY = 4078 + SYS_SETTIMEOFDAY = 4079 + SYS_GETGROUPS = 4080 + SYS_SETGROUPS = 4081 + SYS_RESERVED82 = 4082 + SYS_SYMLINK = 4083 + SYS_UNUSED84 = 4084 + SYS_READLINK = 4085 + SYS_USELIB = 4086 + SYS_SWAPON = 4087 + SYS_REBOOT = 4088 + SYS_READDIR = 4089 + SYS_MMAP = 4090 + SYS_MUNMAP = 4091 + SYS_TRUNCATE = 4092 + SYS_FTRUNCATE = 4093 + SYS_FCHMOD = 4094 + SYS_FCHOWN = 4095 + SYS_GETPRIORITY = 4096 + SYS_SETPRIORITY = 4097 + SYS_PROFIL = 4098 + SYS_STATFS = 4099 + SYS_FSTATFS = 4100 + SYS_IOPERM = 4101 + SYS_SOCKETCALL = 4102 + SYS_SYSLOG = 4103 + SYS_SETITIMER = 4104 + SYS_GETITIMER = 4105 + SYS_STAT = 4106 + SYS_LSTAT = 4107 + SYS_FSTAT = 4108 + SYS_UNUSED109 = 4109 + SYS_IOPL = 4110 + SYS_VHANGUP = 4111 + SYS_IDLE = 4112 + SYS_VM86 = 4113 + SYS_WAIT4 = 4114 + SYS_SWAPOFF = 4115 + SYS_SYSINFO = 4116 + SYS_IPC = 4117 + SYS_FSYNC = 4118 + SYS_SIGRETURN = 4119 + SYS_CLONE = 4120 + SYS_SETDOMAINNAME = 4121 + SYS_UNAME = 4122 + SYS_MODIFY_LDT = 4123 + SYS_ADJTIMEX = 4124 + SYS_MPROTECT = 4125 + SYS_SIGPROCMASK = 4126 + SYS_CREATE_MODULE = 4127 + SYS_INIT_MODULE = 4128 + SYS_DELETE_MODULE = 4129 + SYS_GET_KERNEL_SYMS = 4130 + SYS_QUOTACTL = 4131 + SYS_GETPGID = 4132 + SYS_FCHDIR = 4133 + SYS_BDFLUSH = 4134 + SYS_SYSFS = 4135 + SYS_PERSONALITY = 4136 + SYS_AFS_SYSCALL = 4137 + SYS_SETFSUID = 4138 + SYS_SETFSGID = 4139 + SYS__LLSEEK = 4140 + SYS_GETDENTS = 4141 + SYS__NEWSELECT = 4142 + SYS_FLOCK = 4143 + SYS_MSYNC = 4144 + SYS_READV = 4145 + SYS_WRITEV = 4146 + SYS_CACHEFLUSH = 4147 + SYS_CACHECTL = 4148 + SYS_SYSMIPS = 4149 + SYS_UNUSED150 = 4150 + SYS_GETSID = 4151 + SYS_FDATASYNC = 4152 + SYS__SYSCTL = 4153 + SYS_MLOCK = 4154 + SYS_MUNLOCK = 4155 + SYS_MLOCKALL = 4156 + SYS_MUNLOCKALL = 4157 + SYS_SCHED_SETPARAM = 4158 + SYS_SCHED_GETPARAM = 4159 + SYS_SCHED_SETSCHEDULER = 4160 + SYS_SCHED_GETSCHEDULER = 4161 + SYS_SCHED_YIELD = 4162 + SYS_SCHED_GET_PRIORITY_MAX = 4163 + SYS_SCHED_GET_PRIORITY_MIN = 4164 + SYS_SCHED_RR_GET_INTERVAL = 4165 + SYS_NANOSLEEP = 4166 + SYS_MREMAP = 4167 + SYS_ACCEPT = 4168 + SYS_BIND = 4169 + SYS_CONNECT = 4170 + SYS_GETPEERNAME = 4171 + SYS_GETSOCKNAME = 4172 + SYS_GETSOCKOPT = 4173 + SYS_LISTEN = 4174 + SYS_RECV = 4175 + SYS_RECVFROM = 4176 + SYS_RECVMSG = 4177 + SYS_SEND = 4178 + SYS_SENDMSG = 4179 + SYS_SENDTO = 4180 + SYS_SETSOCKOPT = 4181 + SYS_SHUTDOWN = 4182 + SYS_SOCKET = 4183 + SYS_SOCKETPAIR = 4184 + SYS_SETRESUID = 4185 + SYS_GETRESUID = 4186 + SYS_QUERY_MODULE = 4187 + SYS_POLL = 4188 + SYS_NFSSERVCTL = 4189 + SYS_SETRESGID = 4190 + SYS_GETRESGID = 4191 + SYS_PRCTL = 4192 + SYS_RT_SIGRETURN = 4193 + SYS_RT_SIGACTION = 4194 + SYS_RT_SIGPROCMASK = 4195 + SYS_RT_SIGPENDING = 4196 + SYS_RT_SIGTIMEDWAIT = 4197 + SYS_RT_SIGQUEUEINFO = 4198 + SYS_RT_SIGSUSPEND = 4199 + SYS_PREAD64 = 4200 + SYS_PWRITE64 = 4201 + SYS_CHOWN = 4202 + SYS_GETCWD = 4203 + SYS_CAPGET = 4204 + SYS_CAPSET = 4205 + SYS_SIGALTSTACK = 4206 + SYS_SENDFILE = 4207 + SYS_GETPMSG = 4208 + SYS_PUTPMSG = 4209 + SYS_MMAP2 = 4210 + SYS_TRUNCATE64 = 4211 + SYS_FTRUNCATE64 = 4212 + SYS_STAT64 = 4213 + SYS_LSTAT64 = 4214 + SYS_FSTAT64 = 4215 + SYS_PIVOT_ROOT = 4216 + SYS_MINCORE = 4217 + SYS_MADVISE = 4218 + SYS_GETDENTS64 = 4219 + SYS_FCNTL64 = 4220 + SYS_RESERVED221 = 4221 + SYS_GETTID = 4222 + SYS_READAHEAD = 4223 + SYS_SETXATTR = 4224 + SYS_LSETXATTR = 4225 + SYS_FSETXATTR = 4226 + SYS_GETXATTR = 4227 + SYS_LGETXATTR = 4228 + SYS_FGETXATTR = 4229 + SYS_LISTXATTR = 4230 + SYS_LLISTXATTR = 4231 + SYS_FLISTXATTR = 4232 + SYS_REMOVEXATTR = 4233 + SYS_LREMOVEXATTR = 4234 + SYS_FREMOVEXATTR = 4235 + SYS_TKILL = 4236 + SYS_SENDFILE64 = 4237 + SYS_FUTEX = 4238 + SYS_SCHED_SETAFFINITY = 4239 + SYS_SCHED_GETAFFINITY = 4240 + SYS_IO_SETUP = 4241 + SYS_IO_DESTROY = 4242 + SYS_IO_GETEVENTS = 4243 + SYS_IO_SUBMIT = 4244 + SYS_IO_CANCEL = 4245 + SYS_EXIT_GROUP = 4246 + SYS_LOOKUP_DCOOKIE = 4247 + SYS_EPOLL_CREATE = 4248 + SYS_EPOLL_CTL = 4249 + SYS_EPOLL_WAIT = 4250 + SYS_REMAP_FILE_PAGES = 4251 + SYS_SET_TID_ADDRESS = 4252 + SYS_RESTART_SYSCALL = 4253 + SYS_FADVISE64 = 4254 + SYS_STATFS64 = 4255 + SYS_FSTATFS64 = 4256 + SYS_TIMER_CREATE = 4257 + SYS_TIMER_SETTIME = 4258 + SYS_TIMER_GETTIME = 4259 + SYS_TIMER_GETOVERRUN = 4260 + SYS_TIMER_DELETE = 4261 + SYS_CLOCK_SETTIME = 4262 + SYS_CLOCK_GETTIME = 4263 + SYS_CLOCK_GETRES = 4264 + SYS_CLOCK_NANOSLEEP = 4265 + SYS_TGKILL = 4266 + SYS_UTIMES = 4267 + SYS_MBIND = 4268 + SYS_GET_MEMPOLICY = 4269 + SYS_SET_MEMPOLICY = 4270 + SYS_MQ_OPEN = 4271 + SYS_MQ_UNLINK = 4272 + SYS_MQ_TIMEDSEND = 4273 + SYS_MQ_TIMEDRECEIVE = 4274 + SYS_MQ_NOTIFY = 4275 + SYS_MQ_GETSETATTR = 4276 + SYS_VSERVER = 4277 + SYS_WAITID = 4278 + SYS_ADD_KEY = 4280 + SYS_REQUEST_KEY = 4281 + SYS_KEYCTL = 4282 + SYS_SET_THREAD_AREA = 4283 + SYS_INOTIFY_INIT = 4284 + SYS_INOTIFY_ADD_WATCH = 4285 + SYS_INOTIFY_RM_WATCH = 4286 + SYS_MIGRATE_PAGES = 4287 + SYS_OPENAT = 4288 + SYS_MKDIRAT = 4289 + SYS_MKNODAT = 4290 + SYS_FCHOWNAT = 4291 + SYS_FUTIMESAT = 4292 + SYS_FSTATAT64 = 4293 + SYS_UNLINKAT = 4294 + SYS_RENAMEAT = 4295 + SYS_LINKAT = 4296 + SYS_SYMLINKAT = 4297 + SYS_READLINKAT = 4298 + SYS_FCHMODAT = 4299 + SYS_FACCESSAT = 4300 + SYS_PSELECT6 = 4301 + SYS_PPOLL = 4302 + SYS_UNSHARE = 4303 + SYS_SPLICE = 4304 + SYS_SYNC_FILE_RANGE = 4305 + SYS_TEE = 4306 + SYS_VMSPLICE = 4307 + SYS_MOVE_PAGES = 4308 + SYS_SET_ROBUST_LIST = 4309 + SYS_GET_ROBUST_LIST = 4310 + SYS_KEXEC_LOAD = 4311 + SYS_GETCPU = 4312 + SYS_EPOLL_PWAIT = 4313 + SYS_IOPRIO_SET = 4314 + SYS_IOPRIO_GET = 4315 + SYS_UTIMENSAT = 4316 + SYS_SIGNALFD = 4317 + SYS_TIMERFD = 4318 + SYS_EVENTFD = 4319 + SYS_FALLOCATE = 4320 + SYS_TIMERFD_CREATE = 4321 + SYS_TIMERFD_GETTIME = 4322 + SYS_TIMERFD_SETTIME = 4323 + SYS_SIGNALFD4 = 4324 + SYS_EVENTFD2 = 4325 + SYS_EPOLL_CREATE1 = 4326 + SYS_DUP3 = 4327 + SYS_PIPE2 = 4328 + SYS_INOTIFY_INIT1 = 4329 + SYS_PREADV = 4330 + SYS_PWRITEV = 4331 + SYS_RT_TGSIGQUEUEINFO = 4332 + SYS_PERF_EVENT_OPEN = 4333 + SYS_ACCEPT4 = 4334 + SYS_RECVMMSG = 4335 + SYS_FANOTIFY_INIT = 4336 + SYS_FANOTIFY_MARK = 4337 + SYS_PRLIMIT64 = 4338 + SYS_NAME_TO_HANDLE_AT = 4339 + SYS_OPEN_BY_HANDLE_AT = 4340 + SYS_CLOCK_ADJTIME = 4341 + SYS_SYNCFS = 4342 + SYS_SENDMMSG = 4343 + SYS_SETNS = 4344 + SYS_PROCESS_VM_READV = 4345 + SYS_PROCESS_VM_WRITEV = 4346 + SYS_KCMP = 4347 + SYS_FINIT_MODULE = 4348 + SYS_SCHED_SETATTR = 4349 + SYS_SCHED_GETATTR = 4350 + SYS_RENAMEAT2 = 4351 + SYS_SECCOMP = 4352 + SYS_GETRANDOM = 4353 + SYS_MEMFD_CREATE = 4354 + SYS_BPF = 4355 + SYS_EXECVEAT = 4356 + SYS_USERFAULTFD = 4357 + SYS_MEMBARRIER = 4358 + SYS_MLOCK2 = 4359 + SYS_COPY_FILE_RANGE = 4360 + SYS_PREADV2 = 4361 + SYS_PWRITEV2 = 4362 + SYS_PKEY_MPROTECT = 4363 + SYS_PKEY_ALLOC = 4364 + SYS_PKEY_FREE = 4365 + SYS_STATX = 4366 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go new file mode 100644 index 0000000..dfe5dab --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -0,0 +1,370 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go new file mode 100644 index 0000000..eca97f7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -0,0 +1,370 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64le,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAITPID = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_TIME = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BREAK = 17 + SYS_OLDSTAT = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_STIME = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_OLDFSTAT = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_STTY = 31 + SYS_GTTY = 32 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_FTIME = 35 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_PROF = 44 + SYS_BRK = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_LOCK = 53 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_MPX = 56 + SYS_SETPGID = 57 + SYS_ULIMIT = 58 + SYS_OLDOLDUNAME = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SGETMASK = 68 + SYS_SSETMASK = 69 + SYS_SETREUID = 70 + SYS_SETREGID = 71 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRLIMIT = 76 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_GETGROUPS = 80 + SYS_SETGROUPS = 81 + SYS_SELECT = 82 + SYS_SYMLINK = 83 + SYS_OLDLSTAT = 84 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_FCHOWN = 95 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_PROFIL = 98 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_IOPERM = 101 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_OLDUNAME = 109 + SYS_IOPL = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_VM86 = 113 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_MODIFY_LDT = 123 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_SETFSUID = 138 + SYS_SETFSGID = 139 + SYS__LLSEEK = 140 + SYS_GETDENTS = 141 + SYS__NEWSELECT = 142 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_SETRESUID = 164 + SYS_GETRESUID = 165 + SYS_QUERY_MODULE = 166 + SYS_POLL = 167 + SYS_NFSSERVCTL = 168 + SYS_SETRESGID = 169 + SYS_GETRESGID = 170 + SYS_PRCTL = 171 + SYS_RT_SIGRETURN = 172 + SYS_RT_SIGACTION = 173 + SYS_RT_SIGPROCMASK = 174 + SYS_RT_SIGPENDING = 175 + SYS_RT_SIGTIMEDWAIT = 176 + SYS_RT_SIGQUEUEINFO = 177 + SYS_RT_SIGSUSPEND = 178 + SYS_PREAD64 = 179 + SYS_PWRITE64 = 180 + SYS_CHOWN = 181 + SYS_GETCWD = 182 + SYS_CAPGET = 183 + SYS_CAPSET = 184 + SYS_SIGALTSTACK = 185 + SYS_SENDFILE = 186 + SYS_GETPMSG = 187 + SYS_PUTPMSG = 188 + SYS_VFORK = 189 + SYS_UGETRLIMIT = 190 + SYS_READAHEAD = 191 + SYS_PCICONFIG_READ = 198 + SYS_PCICONFIG_WRITE = 199 + SYS_PCICONFIG_IOBASE = 200 + SYS_MULTIPLEXER = 201 + SYS_GETDENTS64 = 202 + SYS_PIVOT_ROOT = 203 + SYS_MADVISE = 205 + SYS_MINCORE = 206 + SYS_GETTID = 207 + SYS_TKILL = 208 + SYS_SETXATTR = 209 + SYS_LSETXATTR = 210 + SYS_FSETXATTR = 211 + SYS_GETXATTR = 212 + SYS_LGETXATTR = 213 + SYS_FGETXATTR = 214 + SYS_LISTXATTR = 215 + SYS_LLISTXATTR = 216 + SYS_FLISTXATTR = 217 + SYS_REMOVEXATTR = 218 + SYS_LREMOVEXATTR = 219 + SYS_FREMOVEXATTR = 220 + SYS_FUTEX = 221 + SYS_SCHED_SETAFFINITY = 222 + SYS_SCHED_GETAFFINITY = 223 + SYS_TUXCALL = 225 + SYS_IO_SETUP = 227 + SYS_IO_DESTROY = 228 + SYS_IO_GETEVENTS = 229 + SYS_IO_SUBMIT = 230 + SYS_IO_CANCEL = 231 + SYS_SET_TID_ADDRESS = 232 + SYS_FADVISE64 = 233 + SYS_EXIT_GROUP = 234 + SYS_LOOKUP_DCOOKIE = 235 + SYS_EPOLL_CREATE = 236 + SYS_EPOLL_CTL = 237 + SYS_EPOLL_WAIT = 238 + SYS_REMAP_FILE_PAGES = 239 + SYS_TIMER_CREATE = 240 + SYS_TIMER_SETTIME = 241 + SYS_TIMER_GETTIME = 242 + SYS_TIMER_GETOVERRUN = 243 + SYS_TIMER_DELETE = 244 + SYS_CLOCK_SETTIME = 245 + SYS_CLOCK_GETTIME = 246 + SYS_CLOCK_GETRES = 247 + SYS_CLOCK_NANOSLEEP = 248 + SYS_SWAPCONTEXT = 249 + SYS_TGKILL = 250 + SYS_UTIMES = 251 + SYS_STATFS64 = 252 + SYS_FSTATFS64 = 253 + SYS_RTAS = 255 + SYS_SYS_DEBUG_SETCONTEXT = 256 + SYS_MIGRATE_PAGES = 258 + SYS_MBIND = 259 + SYS_GET_MEMPOLICY = 260 + SYS_SET_MEMPOLICY = 261 + SYS_MQ_OPEN = 262 + SYS_MQ_UNLINK = 263 + SYS_MQ_TIMEDSEND = 264 + SYS_MQ_TIMEDRECEIVE = 265 + SYS_MQ_NOTIFY = 266 + SYS_MQ_GETSETATTR = 267 + SYS_KEXEC_LOAD = 268 + SYS_ADD_KEY = 269 + SYS_REQUEST_KEY = 270 + SYS_KEYCTL = 271 + SYS_WAITID = 272 + SYS_IOPRIO_SET = 273 + SYS_IOPRIO_GET = 274 + SYS_INOTIFY_INIT = 275 + SYS_INOTIFY_ADD_WATCH = 276 + SYS_INOTIFY_RM_WATCH = 277 + SYS_SPU_RUN = 278 + SYS_SPU_CREATE = 279 + SYS_PSELECT6 = 280 + SYS_PPOLL = 281 + SYS_UNSHARE = 282 + SYS_SPLICE = 283 + SYS_TEE = 284 + SYS_VMSPLICE = 285 + SYS_OPENAT = 286 + SYS_MKDIRAT = 287 + SYS_MKNODAT = 288 + SYS_FCHOWNAT = 289 + SYS_FUTIMESAT = 290 + SYS_NEWFSTATAT = 291 + SYS_UNLINKAT = 292 + SYS_RENAMEAT = 293 + SYS_LINKAT = 294 + SYS_SYMLINKAT = 295 + SYS_READLINKAT = 296 + SYS_FCHMODAT = 297 + SYS_FACCESSAT = 298 + SYS_GET_ROBUST_LIST = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_MOVE_PAGES = 301 + SYS_GETCPU = 302 + SYS_EPOLL_PWAIT = 303 + SYS_UTIMENSAT = 304 + SYS_SIGNALFD = 305 + SYS_TIMERFD_CREATE = 306 + SYS_EVENTFD = 307 + SYS_SYNC_FILE_RANGE2 = 308 + SYS_FALLOCATE = 309 + SYS_SUBPAGE_PROT = 310 + SYS_TIMERFD_SETTIME = 311 + SYS_TIMERFD_GETTIME = 312 + SYS_SIGNALFD4 = 313 + SYS_EVENTFD2 = 314 + SYS_EPOLL_CREATE1 = 315 + SYS_DUP3 = 316 + SYS_PIPE2 = 317 + SYS_INOTIFY_INIT1 = 318 + SYS_PERF_EVENT_OPEN = 319 + SYS_PREADV = 320 + SYS_PWRITEV = 321 + SYS_RT_TGSIGQUEUEINFO = 322 + SYS_FANOTIFY_INIT = 323 + SYS_FANOTIFY_MARK = 324 + SYS_PRLIMIT64 = 325 + SYS_SOCKET = 326 + SYS_BIND = 327 + SYS_CONNECT = 328 + SYS_LISTEN = 329 + SYS_ACCEPT = 330 + SYS_GETSOCKNAME = 331 + SYS_GETPEERNAME = 332 + SYS_SOCKETPAIR = 333 + SYS_SEND = 334 + SYS_SENDTO = 335 + SYS_RECV = 336 + SYS_RECVFROM = 337 + SYS_SHUTDOWN = 338 + SYS_SETSOCKOPT = 339 + SYS_GETSOCKOPT = 340 + SYS_SENDMSG = 341 + SYS_RECVMSG = 342 + SYS_RECVMMSG = 343 + SYS_ACCEPT4 = 344 + SYS_NAME_TO_HANDLE_AT = 345 + SYS_OPEN_BY_HANDLE_AT = 346 + SYS_CLOCK_ADJTIME = 347 + SYS_SYNCFS = 348 + SYS_SENDMMSG = 349 + SYS_SETNS = 350 + SYS_PROCESS_VM_READV = 351 + SYS_PROCESS_VM_WRITEV = 352 + SYS_FINIT_MODULE = 353 + SYS_KCMP = 354 + SYS_SCHED_SETATTR = 355 + SYS_SCHED_GETATTR = 356 + SYS_RENAMEAT2 = 357 + SYS_SECCOMP = 358 + SYS_GETRANDOM = 359 + SYS_MEMFD_CREATE = 360 + SYS_BPF = 361 + SYS_EXECVEAT = 362 + SYS_SWITCH_ENDIAN = 363 + SYS_USERFAULTFD = 364 + SYS_MEMBARRIER = 365 + SYS_MLOCK2 = 378 + SYS_COPY_FILE_RANGE = 379 + SYS_PREADV2 = 380 + SYS_PWRITEV2 = 381 + SYS_KEXEC_FILE_LOAD = 382 + SYS_STATX = 383 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go new file mode 100644 index 0000000..8ea18e6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -0,0 +1,333 @@ +// linux/mksysnum.pl -Wall -Werror -static -I/tmp/include -fsigned-char /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build s390x,linux + +package unix + +const ( + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_RESTART_SYSCALL = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECVE = 11 + SYS_CHDIR = 12 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_MOUNT = 21 + SYS_UMOUNT = 22 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_RENAME = 38 + SYS_MKDIR = 39 + SYS_RMDIR = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_BRK = 45 + SYS_SIGNAL = 48 + SYS_ACCT = 51 + SYS_UMOUNT2 = 52 + SYS_IOCTL = 54 + SYS_FCNTL = 55 + SYS_SETPGID = 57 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_USTAT = 62 + SYS_DUP2 = 63 + SYS_GETPPID = 64 + SYS_GETPGRP = 65 + SYS_SETSID = 66 + SYS_SIGACTION = 67 + SYS_SIGSUSPEND = 72 + SYS_SIGPENDING = 73 + SYS_SETHOSTNAME = 74 + SYS_SETRLIMIT = 75 + SYS_GETRUSAGE = 77 + SYS_GETTIMEOFDAY = 78 + SYS_SETTIMEOFDAY = 79 + SYS_SYMLINK = 83 + SYS_READLINK = 85 + SYS_USELIB = 86 + SYS_SWAPON = 87 + SYS_REBOOT = 88 + SYS_READDIR = 89 + SYS_MMAP = 90 + SYS_MUNMAP = 91 + SYS_TRUNCATE = 92 + SYS_FTRUNCATE = 93 + SYS_FCHMOD = 94 + SYS_GETPRIORITY = 96 + SYS_SETPRIORITY = 97 + SYS_STATFS = 99 + SYS_FSTATFS = 100 + SYS_SOCKETCALL = 102 + SYS_SYSLOG = 103 + SYS_SETITIMER = 104 + SYS_GETITIMER = 105 + SYS_STAT = 106 + SYS_LSTAT = 107 + SYS_FSTAT = 108 + SYS_LOOKUP_DCOOKIE = 110 + SYS_VHANGUP = 111 + SYS_IDLE = 112 + SYS_WAIT4 = 114 + SYS_SWAPOFF = 115 + SYS_SYSINFO = 116 + SYS_IPC = 117 + SYS_FSYNC = 118 + SYS_SIGRETURN = 119 + SYS_CLONE = 120 + SYS_SETDOMAINNAME = 121 + SYS_UNAME = 122 + SYS_ADJTIMEX = 124 + SYS_MPROTECT = 125 + SYS_SIGPROCMASK = 126 + SYS_CREATE_MODULE = 127 + SYS_INIT_MODULE = 128 + SYS_DELETE_MODULE = 129 + SYS_GET_KERNEL_SYMS = 130 + SYS_QUOTACTL = 131 + SYS_GETPGID = 132 + SYS_FCHDIR = 133 + SYS_BDFLUSH = 134 + SYS_SYSFS = 135 + SYS_PERSONALITY = 136 + SYS_AFS_SYSCALL = 137 + SYS_GETDENTS = 141 + SYS_FLOCK = 143 + SYS_MSYNC = 144 + SYS_READV = 145 + SYS_WRITEV = 146 + SYS_GETSID = 147 + SYS_FDATASYNC = 148 + SYS__SYSCTL = 149 + SYS_MLOCK = 150 + SYS_MUNLOCK = 151 + SYS_MLOCKALL = 152 + SYS_MUNLOCKALL = 153 + SYS_SCHED_SETPARAM = 154 + SYS_SCHED_GETPARAM = 155 + SYS_SCHED_SETSCHEDULER = 156 + SYS_SCHED_GETSCHEDULER = 157 + SYS_SCHED_YIELD = 158 + SYS_SCHED_GET_PRIORITY_MAX = 159 + SYS_SCHED_GET_PRIORITY_MIN = 160 + SYS_SCHED_RR_GET_INTERVAL = 161 + SYS_NANOSLEEP = 162 + SYS_MREMAP = 163 + SYS_QUERY_MODULE = 167 + SYS_POLL = 168 + SYS_NFSSERVCTL = 169 + SYS_PRCTL = 172 + SYS_RT_SIGRETURN = 173 + SYS_RT_SIGACTION = 174 + SYS_RT_SIGPROCMASK = 175 + SYS_RT_SIGPENDING = 176 + SYS_RT_SIGTIMEDWAIT = 177 + SYS_RT_SIGQUEUEINFO = 178 + SYS_RT_SIGSUSPEND = 179 + SYS_PREAD64 = 180 + SYS_PWRITE64 = 181 + SYS_GETCWD = 183 + SYS_CAPGET = 184 + SYS_CAPSET = 185 + SYS_SIGALTSTACK = 186 + SYS_SENDFILE = 187 + SYS_GETPMSG = 188 + SYS_PUTPMSG = 189 + SYS_VFORK = 190 + SYS_PIVOT_ROOT = 217 + SYS_MINCORE = 218 + SYS_MADVISE = 219 + SYS_GETDENTS64 = 220 + SYS_READAHEAD = 222 + SYS_SETXATTR = 224 + SYS_LSETXATTR = 225 + SYS_FSETXATTR = 226 + SYS_GETXATTR = 227 + SYS_LGETXATTR = 228 + SYS_FGETXATTR = 229 + SYS_LISTXATTR = 230 + SYS_LLISTXATTR = 231 + SYS_FLISTXATTR = 232 + SYS_REMOVEXATTR = 233 + SYS_LREMOVEXATTR = 234 + SYS_FREMOVEXATTR = 235 + SYS_GETTID = 236 + SYS_TKILL = 237 + SYS_FUTEX = 238 + SYS_SCHED_SETAFFINITY = 239 + SYS_SCHED_GETAFFINITY = 240 + SYS_TGKILL = 241 + SYS_IO_SETUP = 243 + SYS_IO_DESTROY = 244 + SYS_IO_GETEVENTS = 245 + SYS_IO_SUBMIT = 246 + SYS_IO_CANCEL = 247 + SYS_EXIT_GROUP = 248 + SYS_EPOLL_CREATE = 249 + SYS_EPOLL_CTL = 250 + SYS_EPOLL_WAIT = 251 + SYS_SET_TID_ADDRESS = 252 + SYS_FADVISE64 = 253 + SYS_TIMER_CREATE = 254 + SYS_TIMER_SETTIME = 255 + SYS_TIMER_GETTIME = 256 + SYS_TIMER_GETOVERRUN = 257 + SYS_TIMER_DELETE = 258 + SYS_CLOCK_SETTIME = 259 + SYS_CLOCK_GETTIME = 260 + SYS_CLOCK_GETRES = 261 + SYS_CLOCK_NANOSLEEP = 262 + SYS_STATFS64 = 265 + SYS_FSTATFS64 = 266 + SYS_REMAP_FILE_PAGES = 267 + SYS_MBIND = 268 + SYS_GET_MEMPOLICY = 269 + SYS_SET_MEMPOLICY = 270 + SYS_MQ_OPEN = 271 + SYS_MQ_UNLINK = 272 + SYS_MQ_TIMEDSEND = 273 + SYS_MQ_TIMEDRECEIVE = 274 + SYS_MQ_NOTIFY = 275 + SYS_MQ_GETSETATTR = 276 + SYS_KEXEC_LOAD = 277 + SYS_ADD_KEY = 278 + SYS_REQUEST_KEY = 279 + SYS_KEYCTL = 280 + SYS_WAITID = 281 + SYS_IOPRIO_SET = 282 + SYS_IOPRIO_GET = 283 + SYS_INOTIFY_INIT = 284 + SYS_INOTIFY_ADD_WATCH = 285 + SYS_INOTIFY_RM_WATCH = 286 + SYS_MIGRATE_PAGES = 287 + SYS_OPENAT = 288 + SYS_MKDIRAT = 289 + SYS_MKNODAT = 290 + SYS_FCHOWNAT = 291 + SYS_FUTIMESAT = 292 + SYS_UNLINKAT = 294 + SYS_RENAMEAT = 295 + SYS_LINKAT = 296 + SYS_SYMLINKAT = 297 + SYS_READLINKAT = 298 + SYS_FCHMODAT = 299 + SYS_FACCESSAT = 300 + SYS_PSELECT6 = 301 + SYS_PPOLL = 302 + SYS_UNSHARE = 303 + SYS_SET_ROBUST_LIST = 304 + SYS_GET_ROBUST_LIST = 305 + SYS_SPLICE = 306 + SYS_SYNC_FILE_RANGE = 307 + SYS_TEE = 308 + SYS_VMSPLICE = 309 + SYS_MOVE_PAGES = 310 + SYS_GETCPU = 311 + SYS_EPOLL_PWAIT = 312 + SYS_UTIMES = 313 + SYS_FALLOCATE = 314 + SYS_UTIMENSAT = 315 + SYS_SIGNALFD = 316 + SYS_TIMERFD = 317 + SYS_EVENTFD = 318 + SYS_TIMERFD_CREATE = 319 + SYS_TIMERFD_SETTIME = 320 + SYS_TIMERFD_GETTIME = 321 + SYS_SIGNALFD4 = 322 + SYS_EVENTFD2 = 323 + SYS_INOTIFY_INIT1 = 324 + SYS_PIPE2 = 325 + SYS_DUP3 = 326 + SYS_EPOLL_CREATE1 = 327 + SYS_PREADV = 328 + SYS_PWRITEV = 329 + SYS_RT_TGSIGQUEUEINFO = 330 + SYS_PERF_EVENT_OPEN = 331 + SYS_FANOTIFY_INIT = 332 + SYS_FANOTIFY_MARK = 333 + SYS_PRLIMIT64 = 334 + SYS_NAME_TO_HANDLE_AT = 335 + SYS_OPEN_BY_HANDLE_AT = 336 + SYS_CLOCK_ADJTIME = 337 + SYS_SYNCFS = 338 + SYS_SETNS = 339 + SYS_PROCESS_VM_READV = 340 + SYS_PROCESS_VM_WRITEV = 341 + SYS_S390_RUNTIME_INSTR = 342 + SYS_KCMP = 343 + SYS_FINIT_MODULE = 344 + SYS_SCHED_SETATTR = 345 + SYS_SCHED_GETATTR = 346 + SYS_RENAMEAT2 = 347 + SYS_SECCOMP = 348 + SYS_GETRANDOM = 349 + SYS_MEMFD_CREATE = 350 + SYS_BPF = 351 + SYS_S390_PCI_MMIO_WRITE = 352 + SYS_S390_PCI_MMIO_READ = 353 + SYS_EXECVEAT = 354 + SYS_USERFAULTFD = 355 + SYS_MEMBARRIER = 356 + SYS_RECVMMSG = 357 + SYS_SENDMMSG = 358 + SYS_SOCKET = 359 + SYS_SOCKETPAIR = 360 + SYS_BIND = 361 + SYS_CONNECT = 362 + SYS_LISTEN = 363 + SYS_ACCEPT4 = 364 + SYS_GETSOCKOPT = 365 + SYS_SETSOCKOPT = 366 + SYS_GETSOCKNAME = 367 + SYS_GETPEERNAME = 368 + SYS_SENDTO = 369 + SYS_SENDMSG = 370 + SYS_RECVFROM = 371 + SYS_RECVMSG = 372 + SYS_SHUTDOWN = 373 + SYS_MLOCK2 = 374 + SYS_COPY_FILE_RANGE = 375 + SYS_PREADV2 = 376 + SYS_PWRITEV2 = 377 + SYS_S390_GUARDED_STORAGE = 378 + SYS_STATX = 379 + SYS_SELECT = 142 + SYS_GETRLIMIT = 191 + SYS_LCHOWN = 198 + SYS_GETUID = 199 + SYS_GETGID = 200 + SYS_GETEUID = 201 + SYS_GETEGID = 202 + SYS_SETREUID = 203 + SYS_SETREGID = 204 + SYS_GETGROUPS = 205 + SYS_SETGROUPS = 206 + SYS_FCHOWN = 207 + SYS_SETRESUID = 208 + SYS_GETRESUID = 209 + SYS_SETRESGID = 210 + SYS_GETRESGID = 211 + SYS_CHOWN = 212 + SYS_SETUID = 213 + SYS_SETGID = 214 + SYS_SETFSUID = 215 + SYS_SETFSGID = 216 + SYS_NEWFSTATAT = 293 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go new file mode 100644 index 0000000..c9c129d --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -0,0 +1,348 @@ +// mksysnum_linux.pl -Ilinux/usr/include -m64 -D__arch64__ linux/usr/include/asm/unistd.h +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build sparc64,linux + +package unix + +const ( + SYS_RESTART_SYSCALL = 0 + SYS_EXIT = 1 + SYS_FORK = 2 + SYS_READ = 3 + SYS_WRITE = 4 + SYS_OPEN = 5 + SYS_CLOSE = 6 + SYS_WAIT4 = 7 + SYS_CREAT = 8 + SYS_LINK = 9 + SYS_UNLINK = 10 + SYS_EXECV = 11 + SYS_CHDIR = 12 + SYS_CHOWN = 13 + SYS_MKNOD = 14 + SYS_CHMOD = 15 + SYS_LCHOWN = 16 + SYS_BRK = 17 + SYS_PERFCTR = 18 + SYS_LSEEK = 19 + SYS_GETPID = 20 + SYS_CAPGET = 21 + SYS_CAPSET = 22 + SYS_SETUID = 23 + SYS_GETUID = 24 + SYS_VMSPLICE = 25 + SYS_PTRACE = 26 + SYS_ALARM = 27 + SYS_SIGALTSTACK = 28 + SYS_PAUSE = 29 + SYS_UTIME = 30 + SYS_ACCESS = 33 + SYS_NICE = 34 + SYS_SYNC = 36 + SYS_KILL = 37 + SYS_STAT = 38 + SYS_SENDFILE = 39 + SYS_LSTAT = 40 + SYS_DUP = 41 + SYS_PIPE = 42 + SYS_TIMES = 43 + SYS_UMOUNT2 = 45 + SYS_SETGID = 46 + SYS_GETGID = 47 + SYS_SIGNAL = 48 + SYS_GETEUID = 49 + SYS_GETEGID = 50 + SYS_ACCT = 51 + SYS_MEMORY_ORDERING = 52 + SYS_IOCTL = 54 + SYS_REBOOT = 55 + SYS_SYMLINK = 57 + SYS_READLINK = 58 + SYS_EXECVE = 59 + SYS_UMASK = 60 + SYS_CHROOT = 61 + SYS_FSTAT = 62 + SYS_FSTAT64 = 63 + SYS_GETPAGESIZE = 64 + SYS_MSYNC = 65 + SYS_VFORK = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_MMAP = 71 + SYS_MUNMAP = 73 + SYS_MPROTECT = 74 + SYS_MADVISE = 75 + SYS_VHANGUP = 76 + SYS_MINCORE = 78 + SYS_GETGROUPS = 79 + SYS_SETGROUPS = 80 + SYS_GETPGRP = 81 + SYS_SETITIMER = 83 + SYS_SWAPON = 85 + SYS_GETITIMER = 86 + SYS_SETHOSTNAME = 88 + SYS_DUP2 = 90 + SYS_FCNTL = 92 + SYS_SELECT = 93 + SYS_FSYNC = 95 + SYS_SETPRIORITY = 96 + SYS_SOCKET = 97 + SYS_CONNECT = 98 + SYS_ACCEPT = 99 + SYS_GETPRIORITY = 100 + SYS_RT_SIGRETURN = 101 + SYS_RT_SIGACTION = 102 + SYS_RT_SIGPROCMASK = 103 + SYS_RT_SIGPENDING = 104 + SYS_RT_SIGTIMEDWAIT = 105 + SYS_RT_SIGQUEUEINFO = 106 + SYS_RT_SIGSUSPEND = 107 + SYS_SETRESUID = 108 + SYS_GETRESUID = 109 + SYS_SETRESGID = 110 + SYS_GETRESGID = 111 + SYS_RECVMSG = 113 + SYS_SENDMSG = 114 + SYS_GETTIMEOFDAY = 116 + SYS_GETRUSAGE = 117 + SYS_GETSOCKOPT = 118 + SYS_GETCWD = 119 + SYS_READV = 120 + SYS_WRITEV = 121 + SYS_SETTIMEOFDAY = 122 + SYS_FCHOWN = 123 + SYS_FCHMOD = 124 + SYS_RECVFROM = 125 + SYS_SETREUID = 126 + SYS_SETREGID = 127 + SYS_RENAME = 128 + SYS_TRUNCATE = 129 + SYS_FTRUNCATE = 130 + SYS_FLOCK = 131 + SYS_LSTAT64 = 132 + SYS_SENDTO = 133 + SYS_SHUTDOWN = 134 + SYS_SOCKETPAIR = 135 + SYS_MKDIR = 136 + SYS_RMDIR = 137 + SYS_UTIMES = 138 + SYS_STAT64 = 139 + SYS_SENDFILE64 = 140 + SYS_GETPEERNAME = 141 + SYS_FUTEX = 142 + SYS_GETTID = 143 + SYS_GETRLIMIT = 144 + SYS_SETRLIMIT = 145 + SYS_PIVOT_ROOT = 146 + SYS_PRCTL = 147 + SYS_PCICONFIG_READ = 148 + SYS_PCICONFIG_WRITE = 149 + SYS_GETSOCKNAME = 150 + SYS_INOTIFY_INIT = 151 + SYS_INOTIFY_ADD_WATCH = 152 + SYS_POLL = 153 + SYS_GETDENTS64 = 154 + SYS_INOTIFY_RM_WATCH = 156 + SYS_STATFS = 157 + SYS_FSTATFS = 158 + SYS_UMOUNT = 159 + SYS_SCHED_SET_AFFINITY = 160 + SYS_SCHED_GET_AFFINITY = 161 + SYS_GETDOMAINNAME = 162 + SYS_SETDOMAINNAME = 163 + SYS_UTRAP_INSTALL = 164 + SYS_QUOTACTL = 165 + SYS_SET_TID_ADDRESS = 166 + SYS_MOUNT = 167 + SYS_USTAT = 168 + SYS_SETXATTR = 169 + SYS_LSETXATTR = 170 + SYS_FSETXATTR = 171 + SYS_GETXATTR = 172 + SYS_LGETXATTR = 173 + SYS_GETDENTS = 174 + SYS_SETSID = 175 + SYS_FCHDIR = 176 + SYS_FGETXATTR = 177 + SYS_LISTXATTR = 178 + SYS_LLISTXATTR = 179 + SYS_FLISTXATTR = 180 + SYS_REMOVEXATTR = 181 + SYS_LREMOVEXATTR = 182 + SYS_SIGPENDING = 183 + SYS_QUERY_MODULE = 184 + SYS_SETPGID = 185 + SYS_FREMOVEXATTR = 186 + SYS_TKILL = 187 + SYS_EXIT_GROUP = 188 + SYS_UNAME = 189 + SYS_INIT_MODULE = 190 + SYS_PERSONALITY = 191 + SYS_REMAP_FILE_PAGES = 192 + SYS_EPOLL_CREATE = 193 + SYS_EPOLL_CTL = 194 + SYS_EPOLL_WAIT = 195 + SYS_IOPRIO_SET = 196 + SYS_GETPPID = 197 + SYS_SIGACTION = 198 + SYS_SGETMASK = 199 + SYS_SSETMASK = 200 + SYS_SIGSUSPEND = 201 + SYS_OLDLSTAT = 202 + SYS_USELIB = 203 + SYS_READDIR = 204 + SYS_READAHEAD = 205 + SYS_SOCKETCALL = 206 + SYS_SYSLOG = 207 + SYS_LOOKUP_DCOOKIE = 208 + SYS_FADVISE64 = 209 + SYS_FADVISE64_64 = 210 + SYS_TGKILL = 211 + SYS_WAITPID = 212 + SYS_SWAPOFF = 213 + SYS_SYSINFO = 214 + SYS_IPC = 215 + SYS_SIGRETURN = 216 + SYS_CLONE = 217 + SYS_IOPRIO_GET = 218 + SYS_ADJTIMEX = 219 + SYS_SIGPROCMASK = 220 + SYS_CREATE_MODULE = 221 + SYS_DELETE_MODULE = 222 + SYS_GET_KERNEL_SYMS = 223 + SYS_GETPGID = 224 + SYS_BDFLUSH = 225 + SYS_SYSFS = 226 + SYS_AFS_SYSCALL = 227 + SYS_SETFSUID = 228 + SYS_SETFSGID = 229 + SYS__NEWSELECT = 230 + SYS_SPLICE = 232 + SYS_STIME = 233 + SYS_STATFS64 = 234 + SYS_FSTATFS64 = 235 + SYS__LLSEEK = 236 + SYS_MLOCK = 237 + SYS_MUNLOCK = 238 + SYS_MLOCKALL = 239 + SYS_MUNLOCKALL = 240 + SYS_SCHED_SETPARAM = 241 + SYS_SCHED_GETPARAM = 242 + SYS_SCHED_SETSCHEDULER = 243 + SYS_SCHED_GETSCHEDULER = 244 + SYS_SCHED_YIELD = 245 + SYS_SCHED_GET_PRIORITY_MAX = 246 + SYS_SCHED_GET_PRIORITY_MIN = 247 + SYS_SCHED_RR_GET_INTERVAL = 248 + SYS_NANOSLEEP = 249 + SYS_MREMAP = 250 + SYS__SYSCTL = 251 + SYS_GETSID = 252 + SYS_FDATASYNC = 253 + SYS_NFSSERVCTL = 254 + SYS_SYNC_FILE_RANGE = 255 + SYS_CLOCK_SETTIME = 256 + SYS_CLOCK_GETTIME = 257 + SYS_CLOCK_GETRES = 258 + SYS_CLOCK_NANOSLEEP = 259 + SYS_SCHED_GETAFFINITY = 260 + SYS_SCHED_SETAFFINITY = 261 + SYS_TIMER_SETTIME = 262 + SYS_TIMER_GETTIME = 263 + SYS_TIMER_GETOVERRUN = 264 + SYS_TIMER_DELETE = 265 + SYS_TIMER_CREATE = 266 + SYS_IO_SETUP = 268 + SYS_IO_DESTROY = 269 + SYS_IO_SUBMIT = 270 + SYS_IO_CANCEL = 271 + SYS_IO_GETEVENTS = 272 + SYS_MQ_OPEN = 273 + SYS_MQ_UNLINK = 274 + SYS_MQ_TIMEDSEND = 275 + SYS_MQ_TIMEDRECEIVE = 276 + SYS_MQ_NOTIFY = 277 + SYS_MQ_GETSETATTR = 278 + SYS_WAITID = 279 + SYS_TEE = 280 + SYS_ADD_KEY = 281 + SYS_REQUEST_KEY = 282 + SYS_KEYCTL = 283 + SYS_OPENAT = 284 + SYS_MKDIRAT = 285 + SYS_MKNODAT = 286 + SYS_FCHOWNAT = 287 + SYS_FUTIMESAT = 288 + SYS_FSTATAT64 = 289 + SYS_UNLINKAT = 290 + SYS_RENAMEAT = 291 + SYS_LINKAT = 292 + SYS_SYMLINKAT = 293 + SYS_READLINKAT = 294 + SYS_FCHMODAT = 295 + SYS_FACCESSAT = 296 + SYS_PSELECT6 = 297 + SYS_PPOLL = 298 + SYS_UNSHARE = 299 + SYS_SET_ROBUST_LIST = 300 + SYS_GET_ROBUST_LIST = 301 + SYS_MIGRATE_PAGES = 302 + SYS_MBIND = 303 + SYS_GET_MEMPOLICY = 304 + SYS_SET_MEMPOLICY = 305 + SYS_KEXEC_LOAD = 306 + SYS_MOVE_PAGES = 307 + SYS_GETCPU = 308 + SYS_EPOLL_PWAIT = 309 + SYS_UTIMENSAT = 310 + SYS_SIGNALFD = 311 + SYS_TIMERFD_CREATE = 312 + SYS_EVENTFD = 313 + SYS_FALLOCATE = 314 + SYS_TIMERFD_SETTIME = 315 + SYS_TIMERFD_GETTIME = 316 + SYS_SIGNALFD4 = 317 + SYS_EVENTFD2 = 318 + SYS_EPOLL_CREATE1 = 319 + SYS_DUP3 = 320 + SYS_PIPE2 = 321 + SYS_INOTIFY_INIT1 = 322 + SYS_ACCEPT4 = 323 + SYS_PREADV = 324 + SYS_PWRITEV = 325 + SYS_RT_TGSIGQUEUEINFO = 326 + SYS_PERF_EVENT_OPEN = 327 + SYS_RECVMMSG = 328 + SYS_FANOTIFY_INIT = 329 + SYS_FANOTIFY_MARK = 330 + SYS_PRLIMIT64 = 331 + SYS_NAME_TO_HANDLE_AT = 332 + SYS_OPEN_BY_HANDLE_AT = 333 + SYS_CLOCK_ADJTIME = 334 + SYS_SYNCFS = 335 + SYS_SENDMMSG = 336 + SYS_SETNS = 337 + SYS_PROCESS_VM_READV = 338 + SYS_PROCESS_VM_WRITEV = 339 + SYS_KERN_FEATURES = 340 + SYS_KCMP = 341 + SYS_FINIT_MODULE = 342 + SYS_SCHED_SETATTR = 343 + SYS_SCHED_GETATTR = 344 + SYS_RENAMEAT2 = 345 + SYS_SECCOMP = 346 + SYS_GETRANDOM = 347 + SYS_MEMFD_CREATE = 348 + SYS_BPF = 349 + SYS_EXECVEAT = 350 + SYS_MEMBARRIER = 351 + SYS_USERFAULTFD = 352 + SYS_BIND = 353 + SYS_LISTEN = 354 + SYS_SETSOCKOPT = 355 + SYS_MLOCK2 = 356 + SYS_COPY_FILE_RANGE = 357 + SYS_PREADV2 = 358 + SYS_PWRITEV2 = 359 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go new file mode 100644 index 0000000..8afda9c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_386.go @@ -0,0 +1,274 @@ +// mksysnum_netbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go new file mode 100644 index 0000000..aea8dbe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_amd64.go @@ -0,0 +1,274 @@ +// mksysnum_netbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go new file mode 100644 index 0000000..c6158a7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_netbsd_arm.go @@ -0,0 +1,274 @@ +// mksysnum_netbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,netbsd + +package unix + +const ( + SYS_EXIT = 1 // { void|sys||exit(int rval); } + SYS_FORK = 2 // { int|sys||fork(void); } + SYS_READ = 3 // { ssize_t|sys||read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t|sys||write(int fd, const void *buf, size_t nbyte); } + SYS_OPEN = 5 // { int|sys||open(const char *path, int flags, ... mode_t mode); } + SYS_CLOSE = 6 // { int|sys||close(int fd); } + SYS_LINK = 9 // { int|sys||link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int|sys||unlink(const char *path); } + SYS_CHDIR = 12 // { int|sys||chdir(const char *path); } + SYS_FCHDIR = 13 // { int|sys||fchdir(int fd); } + SYS_CHMOD = 15 // { int|sys||chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int|sys||chown(const char *path, uid_t uid, gid_t gid); } + SYS_BREAK = 17 // { int|sys||obreak(char *nsize); } + SYS_GETPID = 20 // { pid_t|sys||getpid_with_ppid(void); } + SYS_UNMOUNT = 22 // { int|sys||unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int|sys||setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t|sys||getuid_with_euid(void); } + SYS_GETEUID = 25 // { uid_t|sys||geteuid(void); } + SYS_PTRACE = 26 // { int|sys||ptrace(int req, pid_t pid, void *addr, int data); } + SYS_RECVMSG = 27 // { ssize_t|sys||recvmsg(int s, struct msghdr *msg, int flags); } + SYS_SENDMSG = 28 // { ssize_t|sys||sendmsg(int s, const struct msghdr *msg, int flags); } + SYS_RECVFROM = 29 // { ssize_t|sys||recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlenaddr); } + SYS_ACCEPT = 30 // { int|sys||accept(int s, struct sockaddr *name, socklen_t *anamelen); } + SYS_GETPEERNAME = 31 // { int|sys||getpeername(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_GETSOCKNAME = 32 // { int|sys||getsockname(int fdes, struct sockaddr *asa, socklen_t *alen); } + SYS_ACCESS = 33 // { int|sys||access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int|sys||chflags(const char *path, u_long flags); } + SYS_FCHFLAGS = 35 // { int|sys||fchflags(int fd, u_long flags); } + SYS_SYNC = 36 // { void|sys||sync(void); } + SYS_KILL = 37 // { int|sys||kill(pid_t pid, int signum); } + SYS_GETPPID = 39 // { pid_t|sys||getppid(void); } + SYS_DUP = 41 // { int|sys||dup(int fd); } + SYS_PIPE = 42 // { int|sys||pipe(void); } + SYS_GETEGID = 43 // { gid_t|sys||getegid(void); } + SYS_PROFIL = 44 // { int|sys||profil(char *samples, size_t size, u_long offset, u_int scale); } + SYS_KTRACE = 45 // { int|sys||ktrace(const char *fname, int ops, int facs, pid_t pid); } + SYS_GETGID = 47 // { gid_t|sys||getgid_with_egid(void); } + SYS___GETLOGIN = 49 // { int|sys||__getlogin(char *namebuf, size_t namelen); } + SYS___SETLOGIN = 50 // { int|sys||__setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int|sys||acct(const char *path); } + SYS_IOCTL = 54 // { int|sys||ioctl(int fd, u_long com, ... void *data); } + SYS_REVOKE = 56 // { int|sys||revoke(const char *path); } + SYS_SYMLINK = 57 // { int|sys||symlink(const char *path, const char *link); } + SYS_READLINK = 58 // { ssize_t|sys||readlink(const char *path, char *buf, size_t count); } + SYS_EXECVE = 59 // { int|sys||execve(const char *path, char * const *argp, char * const *envp); } + SYS_UMASK = 60 // { mode_t|sys||umask(mode_t newmask); } + SYS_CHROOT = 61 // { int|sys||chroot(const char *path); } + SYS_VFORK = 66 // { int|sys||vfork(void); } + SYS_SBRK = 69 // { int|sys||sbrk(intptr_t incr); } + SYS_SSTK = 70 // { int|sys||sstk(int incr); } + SYS_VADVISE = 72 // { int|sys||ovadvise(int anom); } + SYS_MUNMAP = 73 // { int|sys||munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int|sys||mprotect(void *addr, size_t len, int prot); } + SYS_MADVISE = 75 // { int|sys||madvise(void *addr, size_t len, int behav); } + SYS_MINCORE = 78 // { int|sys||mincore(void *addr, size_t len, char *vec); } + SYS_GETGROUPS = 79 // { int|sys||getgroups(int gidsetsize, gid_t *gidset); } + SYS_SETGROUPS = 80 // { int|sys||setgroups(int gidsetsize, const gid_t *gidset); } + SYS_GETPGRP = 81 // { int|sys||getpgrp(void); } + SYS_SETPGID = 82 // { int|sys||setpgid(pid_t pid, pid_t pgid); } + SYS_DUP2 = 90 // { int|sys||dup2(int from, int to); } + SYS_FCNTL = 92 // { int|sys||fcntl(int fd, int cmd, ... void *arg); } + SYS_FSYNC = 95 // { int|sys||fsync(int fd); } + SYS_SETPRIORITY = 96 // { int|sys||setpriority(int which, id_t who, int prio); } + SYS_CONNECT = 98 // { int|sys||connect(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_GETPRIORITY = 100 // { int|sys||getpriority(int which, id_t who); } + SYS_BIND = 104 // { int|sys||bind(int s, const struct sockaddr *name, socklen_t namelen); } + SYS_SETSOCKOPT = 105 // { int|sys||setsockopt(int s, int level, int name, const void *val, socklen_t valsize); } + SYS_LISTEN = 106 // { int|sys||listen(int s, int backlog); } + SYS_GETSOCKOPT = 118 // { int|sys||getsockopt(int s, int level, int name, void *val, socklen_t *avalsize); } + SYS_READV = 120 // { ssize_t|sys||readv(int fd, const struct iovec *iovp, int iovcnt); } + SYS_WRITEV = 121 // { ssize_t|sys||writev(int fd, const struct iovec *iovp, int iovcnt); } + SYS_FCHOWN = 123 // { int|sys||fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int|sys||fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int|sys||setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int|sys||setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int|sys||rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int|sys||flock(int fd, int how); } + SYS_MKFIFO = 132 // { int|sys||mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t|sys||sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen); } + SYS_SHUTDOWN = 134 // { int|sys||shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int|sys||socketpair(int domain, int type, int protocol, int *rsv); } + SYS_MKDIR = 136 // { int|sys||mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int|sys||rmdir(const char *path); } + SYS_SETSID = 147 // { int|sys||setsid(void); } + SYS_SYSARCH = 165 // { int|sys||sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t|sys||pread(int fd, void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_PWRITE = 174 // { ssize_t|sys||pwrite(int fd, const void *buf, size_t nbyte, int PAD, off_t offset); } + SYS_NTP_ADJTIME = 176 // { int|sys||ntp_adjtime(struct timex *tp); } + SYS_SETGID = 181 // { int|sys||setgid(gid_t gid); } + SYS_SETEGID = 182 // { int|sys||setegid(gid_t egid); } + SYS_SETEUID = 183 // { int|sys||seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long|sys||pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long|sys||fpathconf(int fd, int name); } + SYS_GETRLIMIT = 194 // { int|sys||getrlimit(int which, struct rlimit *rlp); } + SYS_SETRLIMIT = 195 // { int|sys||setrlimit(int which, const struct rlimit *rlp); } + SYS_MMAP = 197 // { void *|sys||mmap(void *addr, size_t len, int prot, int flags, int fd, long PAD, off_t pos); } + SYS_LSEEK = 199 // { off_t|sys||lseek(int fd, int PAD, off_t offset, int whence); } + SYS_TRUNCATE = 200 // { int|sys||truncate(const char *path, int PAD, off_t length); } + SYS_FTRUNCATE = 201 // { int|sys||ftruncate(int fd, int PAD, off_t length); } + SYS___SYSCTL = 202 // { int|sys||__sysctl(const int *name, u_int namelen, void *old, size_t *oldlenp, const void *new, size_t newlen); } + SYS_MLOCK = 203 // { int|sys||mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int|sys||munlock(const void *addr, size_t len); } + SYS_UNDELETE = 205 // { int|sys||undelete(const char *path); } + SYS_GETPGID = 207 // { pid_t|sys||getpgid(pid_t pid); } + SYS_REBOOT = 208 // { int|sys||reboot(int opt, char *bootstr); } + SYS_POLL = 209 // { int|sys||poll(struct pollfd *fds, u_int nfds, int timeout); } + SYS_SEMGET = 221 // { int|sys||semget(key_t key, int nsems, int semflg); } + SYS_SEMOP = 222 // { int|sys||semop(int semid, struct sembuf *sops, size_t nsops); } + SYS_SEMCONFIG = 223 // { int|sys||semconfig(int flag); } + SYS_MSGGET = 225 // { int|sys||msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int|sys||msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); } + SYS_MSGRCV = 227 // { ssize_t|sys||msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg); } + SYS_SHMAT = 228 // { void *|sys||shmat(int shmid, const void *shmaddr, int shmflg); } + SYS_SHMDT = 230 // { int|sys||shmdt(const void *shmaddr); } + SYS_SHMGET = 231 // { int|sys||shmget(key_t key, size_t size, int shmflg); } + SYS_TIMER_CREATE = 235 // { int|sys||timer_create(clockid_t clock_id, struct sigevent *evp, timer_t *timerid); } + SYS_TIMER_DELETE = 236 // { int|sys||timer_delete(timer_t timerid); } + SYS_TIMER_GETOVERRUN = 239 // { int|sys||timer_getoverrun(timer_t timerid); } + SYS_FDATASYNC = 241 // { int|sys||fdatasync(int fd); } + SYS_MLOCKALL = 242 // { int|sys||mlockall(int flags); } + SYS_MUNLOCKALL = 243 // { int|sys||munlockall(void); } + SYS_SIGQUEUEINFO = 245 // { int|sys||sigqueueinfo(pid_t pid, const siginfo_t *info); } + SYS_MODCTL = 246 // { int|sys||modctl(int cmd, void *arg); } + SYS___POSIX_RENAME = 270 // { int|sys||__posix_rename(const char *from, const char *to); } + SYS_SWAPCTL = 271 // { int|sys||swapctl(int cmd, void *arg, int misc); } + SYS_MINHERIT = 273 // { int|sys||minherit(void *addr, size_t len, int inherit); } + SYS_LCHMOD = 274 // { int|sys||lchmod(const char *path, mode_t mode); } + SYS_LCHOWN = 275 // { int|sys||lchown(const char *path, uid_t uid, gid_t gid); } + SYS_MSYNC = 277 // { int|sys|13|msync(void *addr, size_t len, int flags); } + SYS___POSIX_CHOWN = 283 // { int|sys||__posix_chown(const char *path, uid_t uid, gid_t gid); } + SYS___POSIX_FCHOWN = 284 // { int|sys||__posix_fchown(int fd, uid_t uid, gid_t gid); } + SYS___POSIX_LCHOWN = 285 // { int|sys||__posix_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 286 // { pid_t|sys||getsid(pid_t pid); } + SYS___CLONE = 287 // { pid_t|sys||__clone(int flags, void *stack); } + SYS_FKTRACE = 288 // { int|sys||fktrace(int fd, int ops, int facs, pid_t pid); } + SYS_PREADV = 289 // { ssize_t|sys||preadv(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS_PWRITEV = 290 // { ssize_t|sys||pwritev(int fd, const struct iovec *iovp, int iovcnt, int PAD, off_t offset); } + SYS___GETCWD = 296 // { int|sys||__getcwd(char *bufp, size_t length); } + SYS_FCHROOT = 297 // { int|sys||fchroot(int fd); } + SYS_LCHFLAGS = 304 // { int|sys||lchflags(const char *path, u_long flags); } + SYS_ISSETUGID = 305 // { int|sys||issetugid(void); } + SYS_UTRACE = 306 // { int|sys||utrace(const char *label, void *addr, size_t len); } + SYS_GETCONTEXT = 307 // { int|sys||getcontext(struct __ucontext *ucp); } + SYS_SETCONTEXT = 308 // { int|sys||setcontext(const struct __ucontext *ucp); } + SYS__LWP_CREATE = 309 // { int|sys||_lwp_create(const struct __ucontext *ucp, u_long flags, lwpid_t *new_lwp); } + SYS__LWP_EXIT = 310 // { int|sys||_lwp_exit(void); } + SYS__LWP_SELF = 311 // { lwpid_t|sys||_lwp_self(void); } + SYS__LWP_WAIT = 312 // { int|sys||_lwp_wait(lwpid_t wait_for, lwpid_t *departed); } + SYS__LWP_SUSPEND = 313 // { int|sys||_lwp_suspend(lwpid_t target); } + SYS__LWP_CONTINUE = 314 // { int|sys||_lwp_continue(lwpid_t target); } + SYS__LWP_WAKEUP = 315 // { int|sys||_lwp_wakeup(lwpid_t target); } + SYS__LWP_GETPRIVATE = 316 // { void *|sys||_lwp_getprivate(void); } + SYS__LWP_SETPRIVATE = 317 // { void|sys||_lwp_setprivate(void *ptr); } + SYS__LWP_KILL = 318 // { int|sys||_lwp_kill(lwpid_t target, int signo); } + SYS__LWP_DETACH = 319 // { int|sys||_lwp_detach(lwpid_t target); } + SYS__LWP_UNPARK = 321 // { int|sys||_lwp_unpark(lwpid_t target, const void *hint); } + SYS__LWP_UNPARK_ALL = 322 // { ssize_t|sys||_lwp_unpark_all(const lwpid_t *targets, size_t ntargets, const void *hint); } + SYS__LWP_SETNAME = 323 // { int|sys||_lwp_setname(lwpid_t target, const char *name); } + SYS__LWP_GETNAME = 324 // { int|sys||_lwp_getname(lwpid_t target, char *name, size_t len); } + SYS__LWP_CTL = 325 // { int|sys||_lwp_ctl(int features, struct lwpctl **address); } + SYS___SIGACTION_SIGTRAMP = 340 // { int|sys||__sigaction_sigtramp(int signum, const struct sigaction *nsa, struct sigaction *osa, const void *tramp, int vers); } + SYS_PMC_GET_INFO = 341 // { int|sys||pmc_get_info(int ctr, int op, void *args); } + SYS_PMC_CONTROL = 342 // { int|sys||pmc_control(int ctr, int op, void *args); } + SYS_RASCTL = 343 // { int|sys||rasctl(void *addr, size_t len, int op); } + SYS_KQUEUE = 344 // { int|sys||kqueue(void); } + SYS__SCHED_SETPARAM = 346 // { int|sys||_sched_setparam(pid_t pid, lwpid_t lid, int policy, const struct sched_param *params); } + SYS__SCHED_GETPARAM = 347 // { int|sys||_sched_getparam(pid_t pid, lwpid_t lid, int *policy, struct sched_param *params); } + SYS__SCHED_SETAFFINITY = 348 // { int|sys||_sched_setaffinity(pid_t pid, lwpid_t lid, size_t size, const cpuset_t *cpuset); } + SYS__SCHED_GETAFFINITY = 349 // { int|sys||_sched_getaffinity(pid_t pid, lwpid_t lid, size_t size, cpuset_t *cpuset); } + SYS_SCHED_YIELD = 350 // { int|sys||sched_yield(void); } + SYS_FSYNC_RANGE = 354 // { int|sys||fsync_range(int fd, int flags, off_t start, off_t length); } + SYS_UUIDGEN = 355 // { int|sys||uuidgen(struct uuid *store, int count); } + SYS_GETVFSSTAT = 356 // { int|sys||getvfsstat(struct statvfs *buf, size_t bufsize, int flags); } + SYS_STATVFS1 = 357 // { int|sys||statvfs1(const char *path, struct statvfs *buf, int flags); } + SYS_FSTATVFS1 = 358 // { int|sys||fstatvfs1(int fd, struct statvfs *buf, int flags); } + SYS_EXTATTRCTL = 360 // { int|sys||extattrctl(const char *path, int cmd, const char *filename, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FILE = 361 // { int|sys||extattr_set_file(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FILE = 362 // { ssize_t|sys||extattr_get_file(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FILE = 363 // { int|sys||extattr_delete_file(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_FD = 364 // { int|sys||extattr_set_fd(int fd, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_FD = 365 // { ssize_t|sys||extattr_get_fd(int fd, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_FD = 366 // { int|sys||extattr_delete_fd(int fd, int attrnamespace, const char *attrname); } + SYS_EXTATTR_SET_LINK = 367 // { int|sys||extattr_set_link(const char *path, int attrnamespace, const char *attrname, const void *data, size_t nbytes); } + SYS_EXTATTR_GET_LINK = 368 // { ssize_t|sys||extattr_get_link(const char *path, int attrnamespace, const char *attrname, void *data, size_t nbytes); } + SYS_EXTATTR_DELETE_LINK = 369 // { int|sys||extattr_delete_link(const char *path, int attrnamespace, const char *attrname); } + SYS_EXTATTR_LIST_FD = 370 // { ssize_t|sys||extattr_list_fd(int fd, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_FILE = 371 // { ssize_t|sys||extattr_list_file(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_EXTATTR_LIST_LINK = 372 // { ssize_t|sys||extattr_list_link(const char *path, int attrnamespace, void *data, size_t nbytes); } + SYS_SETXATTR = 375 // { int|sys||setxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_LSETXATTR = 376 // { int|sys||lsetxattr(const char *path, const char *name, const void *value, size_t size, int flags); } + SYS_FSETXATTR = 377 // { int|sys||fsetxattr(int fd, const char *name, const void *value, size_t size, int flags); } + SYS_GETXATTR = 378 // { int|sys||getxattr(const char *path, const char *name, void *value, size_t size); } + SYS_LGETXATTR = 379 // { int|sys||lgetxattr(const char *path, const char *name, void *value, size_t size); } + SYS_FGETXATTR = 380 // { int|sys||fgetxattr(int fd, const char *name, void *value, size_t size); } + SYS_LISTXATTR = 381 // { int|sys||listxattr(const char *path, char *list, size_t size); } + SYS_LLISTXATTR = 382 // { int|sys||llistxattr(const char *path, char *list, size_t size); } + SYS_FLISTXATTR = 383 // { int|sys||flistxattr(int fd, char *list, size_t size); } + SYS_REMOVEXATTR = 384 // { int|sys||removexattr(const char *path, const char *name); } + SYS_LREMOVEXATTR = 385 // { int|sys||lremovexattr(const char *path, const char *name); } + SYS_FREMOVEXATTR = 386 // { int|sys||fremovexattr(int fd, const char *name); } + SYS_GETDENTS = 390 // { int|sys|30|getdents(int fd, char *buf, size_t count); } + SYS_SOCKET = 394 // { int|sys|30|socket(int domain, int type, int protocol); } + SYS_GETFH = 395 // { int|sys|30|getfh(const char *fname, void *fhp, size_t *fh_size); } + SYS_MOUNT = 410 // { int|sys|50|mount(const char *type, const char *path, int flags, void *data, size_t data_len); } + SYS_MREMAP = 411 // { void *|sys||mremap(void *old_address, size_t old_size, void *new_address, size_t new_size, int flags); } + SYS_PSET_CREATE = 412 // { int|sys||pset_create(psetid_t *psid); } + SYS_PSET_DESTROY = 413 // { int|sys||pset_destroy(psetid_t psid); } + SYS_PSET_ASSIGN = 414 // { int|sys||pset_assign(psetid_t psid, cpuid_t cpuid, psetid_t *opsid); } + SYS__PSET_BIND = 415 // { int|sys||_pset_bind(idtype_t idtype, id_t first_id, id_t second_id, psetid_t psid, psetid_t *opsid); } + SYS_POSIX_FADVISE = 416 // { int|sys|50|posix_fadvise(int fd, int PAD, off_t offset, off_t len, int advice); } + SYS_SELECT = 417 // { int|sys|50|select(int nd, fd_set *in, fd_set *ou, fd_set *ex, struct timeval *tv); } + SYS_GETTIMEOFDAY = 418 // { int|sys|50|gettimeofday(struct timeval *tp, void *tzp); } + SYS_SETTIMEOFDAY = 419 // { int|sys|50|settimeofday(const struct timeval *tv, const void *tzp); } + SYS_UTIMES = 420 // { int|sys|50|utimes(const char *path, const struct timeval *tptr); } + SYS_ADJTIME = 421 // { int|sys|50|adjtime(const struct timeval *delta, struct timeval *olddelta); } + SYS_FUTIMES = 423 // { int|sys|50|futimes(int fd, const struct timeval *tptr); } + SYS_LUTIMES = 424 // { int|sys|50|lutimes(const char *path, const struct timeval *tptr); } + SYS_SETITIMER = 425 // { int|sys|50|setitimer(int which, const struct itimerval *itv, struct itimerval *oitv); } + SYS_GETITIMER = 426 // { int|sys|50|getitimer(int which, struct itimerval *itv); } + SYS_CLOCK_GETTIME = 427 // { int|sys|50|clock_gettime(clockid_t clock_id, struct timespec *tp); } + SYS_CLOCK_SETTIME = 428 // { int|sys|50|clock_settime(clockid_t clock_id, const struct timespec *tp); } + SYS_CLOCK_GETRES = 429 // { int|sys|50|clock_getres(clockid_t clock_id, struct timespec *tp); } + SYS_NANOSLEEP = 430 // { int|sys|50|nanosleep(const struct timespec *rqtp, struct timespec *rmtp); } + SYS___SIGTIMEDWAIT = 431 // { int|sys|50|__sigtimedwait(const sigset_t *set, siginfo_t *info, struct timespec *timeout); } + SYS__LWP_PARK = 434 // { int|sys|50|_lwp_park(const struct timespec *ts, lwpid_t unpark, const void *hint, const void *unparkhint); } + SYS_KEVENT = 435 // { int|sys|50|kevent(int fd, const struct kevent *changelist, size_t nchanges, struct kevent *eventlist, size_t nevents, const struct timespec *timeout); } + SYS_PSELECT = 436 // { int|sys|50|pselect(int nd, fd_set *in, fd_set *ou, fd_set *ex, const struct timespec *ts, const sigset_t *mask); } + SYS_POLLTS = 437 // { int|sys|50|pollts(struct pollfd *fds, u_int nfds, const struct timespec *ts, const sigset_t *mask); } + SYS_STAT = 439 // { int|sys|50|stat(const char *path, struct stat *ub); } + SYS_FSTAT = 440 // { int|sys|50|fstat(int fd, struct stat *sb); } + SYS_LSTAT = 441 // { int|sys|50|lstat(const char *path, struct stat *ub); } + SYS___SEMCTL = 442 // { int|sys|50|__semctl(int semid, int semnum, int cmd, ... union __semun *arg); } + SYS_SHMCTL = 443 // { int|sys|50|shmctl(int shmid, int cmd, struct shmid_ds *buf); } + SYS_MSGCTL = 444 // { int|sys|50|msgctl(int msqid, int cmd, struct msqid_ds *buf); } + SYS_GETRUSAGE = 445 // { int|sys|50|getrusage(int who, struct rusage *rusage); } + SYS_TIMER_SETTIME = 446 // { int|sys|50|timer_settime(timer_t timerid, int flags, const struct itimerspec *value, struct itimerspec *ovalue); } + SYS_TIMER_GETTIME = 447 // { int|sys|50|timer_gettime(timer_t timerid, struct itimerspec *value); } + SYS_NTP_GETTIME = 448 // { int|sys|50|ntp_gettime(struct ntptimeval *ntvp); } + SYS_WAIT4 = 449 // { int|sys|50|wait4(pid_t pid, int *status, int options, struct rusage *rusage); } + SYS_MKNOD = 450 // { int|sys|50|mknod(const char *path, mode_t mode, dev_t dev); } + SYS_FHSTAT = 451 // { int|sys|50|fhstat(const void *fhp, size_t fh_size, struct stat *sb); } + SYS_PIPE2 = 453 // { int|sys||pipe2(int *fildes, int flags); } + SYS_DUP3 = 454 // { int|sys||dup3(int from, int to, int flags); } + SYS_KQUEUE1 = 455 // { int|sys||kqueue1(int flags); } + SYS_PACCEPT = 456 // { int|sys||paccept(int s, struct sockaddr *name, socklen_t *anamelen, const sigset_t *mask, int flags); } + SYS_LINKAT = 457 // { int|sys||linkat(int fd1, const char *name1, int fd2, const char *name2, int flags); } + SYS_RENAMEAT = 458 // { int|sys||renameat(int fromfd, const char *from, int tofd, const char *to); } + SYS_MKFIFOAT = 459 // { int|sys||mkfifoat(int fd, const char *path, mode_t mode); } + SYS_MKNODAT = 460 // { int|sys||mknodat(int fd, const char *path, mode_t mode, uint32_t dev); } + SYS_MKDIRAT = 461 // { int|sys||mkdirat(int fd, const char *path, mode_t mode); } + SYS_FACCESSAT = 462 // { int|sys||faccessat(int fd, const char *path, int amode, int flag); } + SYS_FCHMODAT = 463 // { int|sys||fchmodat(int fd, const char *path, mode_t mode, int flag); } + SYS_FCHOWNAT = 464 // { int|sys||fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag); } + SYS_FEXECVE = 465 // { int|sys||fexecve(int fd, char * const *argp, char * const *envp); } + SYS_FSTATAT = 466 // { int|sys||fstatat(int fd, const char *path, struct stat *buf, int flag); } + SYS_UTIMENSAT = 467 // { int|sys||utimensat(int fd, const char *path, const struct timespec *tptr, int flag); } + SYS_OPENAT = 468 // { int|sys||openat(int fd, const char *path, int oflags, ... mode_t mode); } + SYS_READLINKAT = 469 // { int|sys||readlinkat(int fd, const char *path, char *buf, size_t bufsize); } + SYS_SYMLINKAT = 470 // { int|sys||symlinkat(const char *path1, int fd, const char *path2); } + SYS_UNLINKAT = 471 // { int|sys||unlinkat(int fd, const char *path, int flag); } + SYS_FUTIMENS = 472 // { int|sys||futimens(int fd, const struct timespec *tptr); } + SYS___QUOTACTL = 473 // { int|sys||__quotactl(const char *path, struct quotactl_args *args); } + SYS_POSIX_SPAWN = 474 // { int|sys||posix_spawn(pid_t *pid, const char *path, const struct posix_spawn_file_actions *file_actions, const struct posix_spawnattr *attrp, char *const *argv, char *const *envp); } + SYS_RECVMMSG = 475 // { int|sys||recvmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags, struct timespec *timeout); } + SYS_SENDMMSG = 476 // { int|sys||sendmmsg(int s, struct mmsghdr *mmsg, unsigned int vlen, unsigned int flags); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go new file mode 100644 index 0000000..3e8ce2a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_386.go @@ -0,0 +1,207 @@ +// mksysnum_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build 386,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_KILL = 37 // { int sys_kill(int pid, int signum); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { int sys_readlink(const char *path, char *buf, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, int pgid); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go new file mode 100644 index 0000000..bd28146 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_amd64.go @@ -0,0 +1,207 @@ +// mksysnum_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build amd64,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int flags); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_KILL = 37 // { int sys_kill(int pid, int signum); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { int sys_readlink(const char *path, char *buf, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, int pgid); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go new file mode 100644 index 0000000..32653e5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_openbsd_arm.go @@ -0,0 +1,213 @@ +// mksysnum_openbsd.pl +// MACHINE GENERATED BY THE ABOVE COMMAND; DO NOT EDIT + +// +build arm,openbsd + +package unix + +const ( + SYS_EXIT = 1 // { void sys_exit(int rval); } + SYS_FORK = 2 // { int sys_fork(void); } + SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); } + SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \ + SYS_OPEN = 5 // { int sys_open(const char *path, \ + SYS_CLOSE = 6 // { int sys_close(int fd); } + SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); } + SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \ + SYS_LINK = 9 // { int sys_link(const char *path, const char *link); } + SYS_UNLINK = 10 // { int sys_unlink(const char *path); } + SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \ + SYS_CHDIR = 12 // { int sys_chdir(const char *path); } + SYS_FCHDIR = 13 // { int sys_fchdir(int fd); } + SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \ + SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); } + SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \ + SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break + SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); } + SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \ + SYS_GETPID = 20 // { pid_t sys_getpid(void); } + SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \ + SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); } + SYS_SETUID = 23 // { int sys_setuid(uid_t uid); } + SYS_GETUID = 24 // { uid_t sys_getuid(void); } + SYS_GETEUID = 25 // { uid_t sys_geteuid(void); } + SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \ + SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \ + SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \ + SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \ + SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \ + SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \ + SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \ + SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); } + SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); } + SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); } + SYS_SYNC = 36 // { void sys_sync(void); } + SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); } + SYS_GETPPID = 39 // { pid_t sys_getppid(void); } + SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); } + SYS_DUP = 41 // { int sys_dup(int fd); } + SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \ + SYS_GETEGID = 43 // { gid_t sys_getegid(void); } + SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \ + SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \ + SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \ + SYS_GETGID = 47 // { gid_t sys_getgid(void); } + SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); } + SYS_GETLOGIN = 49 // { int sys_getlogin(char *namebuf, u_int namelen); } + SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); } + SYS_ACCT = 51 // { int sys_acct(const char *path); } + SYS_SIGPENDING = 52 // { int sys_sigpending(void); } + SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); } + SYS_IOCTL = 54 // { int sys_ioctl(int fd, \ + SYS_REBOOT = 55 // { int sys_reboot(int opt); } + SYS_REVOKE = 56 // { int sys_revoke(const char *path); } + SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \ + SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \ + SYS_EXECVE = 59 // { int sys_execve(const char *path, \ + SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); } + SYS_CHROOT = 61 // { int sys_chroot(const char *path); } + SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \ + SYS_STATFS = 63 // { int sys_statfs(const char *path, \ + SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); } + SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \ + SYS_VFORK = 66 // { int sys_vfork(void); } + SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \ + SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \ + SYS_SETITIMER = 69 // { int sys_setitimer(int which, \ + SYS_GETITIMER = 70 // { int sys_getitimer(int which, \ + SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \ + SYS_KEVENT = 72 // { int sys_kevent(int fd, \ + SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); } + SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \ + SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \ + SYS_UTIMES = 76 // { int sys_utimes(const char *path, \ + SYS_FUTIMES = 77 // { int sys_futimes(int fd, \ + SYS_MINCORE = 78 // { int sys_mincore(void *addr, size_t len, \ + SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \ + SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \ + SYS_GETPGRP = 81 // { int sys_getpgrp(void); } + SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); } + SYS_SENDSYSLOG = 83 // { int sys_sendsyslog(const void *buf, size_t nbyte); } + SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \ + SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \ + SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \ + SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \ + SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \ + SYS_DUP2 = 90 // { int sys_dup2(int from, int to); } + SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \ + SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); } + SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \ + SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \ + SYS_FSYNC = 95 // { int sys_fsync(int fd); } + SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); } + SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); } + SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \ + SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); } + SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); } + SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); } + SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); } + SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); } + SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \ + SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \ + SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); } + SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \ + SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \ + SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \ + SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); } + SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \ + SYS_READV = 120 // { ssize_t sys_readv(int fd, \ + SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \ + SYS_KILL = 122 // { int sys_kill(int pid, int signum); } + SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); } + SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); } + SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); } + SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); } + SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); } + SYS_FLOCK = 131 // { int sys_flock(int fd, int how); } + SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); } + SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \ + SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); } + SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \ + SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); } + SYS_RMDIR = 137 // { int sys_rmdir(const char *path); } + SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \ + SYS_SETSID = 147 // { int sys_setsid(void); } + SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \ + SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); } + SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); } + SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); } + SYS_PREAD = 173 // { ssize_t sys_pread(int fd, void *buf, \ + SYS_PWRITE = 174 // { ssize_t sys_pwrite(int fd, const void *buf, \ + SYS_SETGID = 181 // { int sys_setgid(gid_t gid); } + SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); } + SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); } + SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); } + SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); } + SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); } + SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \ + SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \ + SYS_MMAP = 197 // { void *sys_mmap(void *addr, size_t len, int prot, \ + SYS_LSEEK = 199 // { off_t sys_lseek(int fd, int pad, off_t offset, \ + SYS_TRUNCATE = 200 // { int sys_truncate(const char *path, int pad, \ + SYS_FTRUNCATE = 201 // { int sys_ftruncate(int fd, int pad, off_t length); } + SYS___SYSCTL = 202 // { int sys___sysctl(const int *name, u_int namelen, \ + SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); } + SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); } + SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); } + SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \ + SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); } + SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); } + SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \ + SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \ + SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \ + SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); } + SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \ + SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \ + SYS_ISSETUGID = 253 // { int sys_issetugid(void); } + SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); } + SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); } + SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); } + SYS_PIPE = 263 // { int sys_pipe(int *fdp); } + SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); } + SYS_PREADV = 267 // { ssize_t sys_preadv(int fd, \ + SYS_PWRITEV = 268 // { ssize_t sys_pwritev(int fd, \ + SYS_KQUEUE = 269 // { int sys_kqueue(void); } + SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); } + SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); } + SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \ + SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \ + SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \ + SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \ + SYS_MQUERY = 286 // { void *sys_mquery(void *addr, size_t len, int prot, \ + SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); } + SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \ + SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); } + SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \ + SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \ + SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \ + SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \ + SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \ + SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); } + SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); } + SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \ + SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); } + SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \ + SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); } + SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \ + SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); } + SYS_GETRTABLE = 311 // { int sys_getrtable(void); } + SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \ + SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \ + SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \ + SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \ + SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \ + SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \ + SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \ + SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \ + SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \ + SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \ + SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \ + SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \ + SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); } + SYS___GET_TCB = 330 // { void *sys___get_tcb(void); } +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go new file mode 100644 index 0000000..c708659 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_solaris_amd64.go @@ -0,0 +1,13 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build amd64,solaris + +package unix + +// TODO(aram): remove these before Go 1.3. +const ( + SYS_EXECVE = 59 + SYS_FCNTL = 62 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go new file mode 100644 index 0000000..4667c7b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go @@ -0,0 +1,481 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,darwin + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 struct{} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint32 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Contigbytes int64 + Devoffset int64 +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go new file mode 100644 index 0000000..3f33b18 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -0,0 +1,491 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,darwin + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Pad_cgo_0 [4]byte + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + Pad_cgo_0 [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Pad_cgo_0 [8]byte + Pad_cgo_1 [8]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + Pad_cgo_0 [4]byte + Ispeed uint64 + Ospeed uint64 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go new file mode 100644 index 0000000..463a28b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go @@ -0,0 +1,482 @@ +// NOTE: cgo can't generate struct Stat_t and struct Statfs_t yet +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_darwin.go + +// +build arm,darwin + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timeval32 [0]byte + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint32 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Contigbytes int64 + Devoffset int64 +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go new file mode 100644 index 0000000..1ec20a0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -0,0 +1,491 @@ +// cgo -godefs types_darwin.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,darwin + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev int32 + Mode uint16 + Nlink uint16 + Ino uint64 + Uid uint32 + Gid uint32 + Rdev int32 + Pad_cgo_0 [4]byte + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare [2]int64 +} + +type Statfs_t struct { + Bsize uint32 + Iosize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Owner uint32 + Type uint32 + Flags uint32 + Fssubtype uint32 + Fstypename [16]int8 + Mntonname [1024]int8 + Mntfromname [1024]int8 + Reserved [8]uint32 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Fstore_t struct { + Flags uint32 + Posmode int32 + Offset int64 + Length int64 + Bytesalloc int64 +} + +type Radvisory_t struct { + Offset int64 + Count int32 + Pad_cgo_0 [4]byte +} + +type Fbootstraptransfer_t struct { + Offset int64 + Length uint64 + Buffer *byte +} + +type Log2phys_t struct { + Flags uint32 + Pad_cgo_0 [8]byte + Pad_cgo_1 [8]byte +} + +type Fsid struct { + Val [2]int32 +} + +type Dirent struct { + Ino uint64 + Seekoff uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [1024]int8 + Pad_cgo_0 [3]byte +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex uint32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]int32 +} + +const ( + SizeofIfMsghdr = 0x70 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfmaMsghdr2 = 0x14 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 + Unused2 uint32 + Hwassist uint32 + Reserved1 uint32 + Reserved2 uint32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfmaMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Refcount int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire int32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Filler [4]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval32 + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint64 + Oflag uint64 + Cflag uint64 + Lflag uint64 + Cc [20]uint8 + Pad_cgo_0 [4]byte + Ispeed uint64 + Ospeed uint64 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x2 + AT_REMOVEDIR = 0x80 + AT_SYMLINK_FOLLOW = 0x40 + AT_SYMLINK_NOFOLLOW = 0x20 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go new file mode 100644 index 0000000..ab515c3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_dragonfly_amd64.go @@ -0,0 +1,467 @@ +// cgo -godefs types_dragonfly.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,dragonfly + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Ino uint64 + Nlink uint32 + Dev uint32 + Mode uint16 + Padding1 uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Lspare int32 + Qspare1 int64 + Qspare2 int64 +} + +type Statfs_t struct { + Spare2 int64 + Bsize int64 + Iosize int64 + Blocks int64 + Bfree int64 + Bavail int64 + Files int64 + Ffree int64 + Fsid Fsid + Owner uint32 + Type int32 + Flags int32 + Pad_cgo_0 [4]byte + Syncwrites int64 + Asyncwrites int64 + Fstypename [16]int8 + Mntonname [80]int8 + Syncreads int64 + Asyncreads int64 + Spares1 int16 + Mntfromname [80]int8 + Spares2 int16 + Pad_cgo_1 [4]byte + Spare [2]int64 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Namlen uint16 + Type uint8 + Unused1 uint8 + Unused2 uint32 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 + Rcf uint16 + Route [16]uint16 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [16]uint64 +} + +const ( + SizeofIfMsghdr = 0xb0 + SizeofIfData = 0xa0 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Pad_cgo_0 [2]byte + Mtu uint64 + Metric uint64 + Link_state uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Oqdrops uint64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Pksent uint64 + Expire uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Recvpipe uint64 + Hopcount uint64 + Mssopt uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Msl uint64 + Iwmaxsegs uint64 + Iwcapsegs uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +const ( + AT_FDCWD = 0xfffafdcd + AT_SYMLINK_NOFOLLOW = 0x1 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go new file mode 100644 index 0000000..18f7816 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -0,0 +1,541 @@ +// cgo -godefs types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,freebsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtimespec Timespec + Pad_cgo_0 [8]byte +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 +} + +type Dirent struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + X__fds_bits [32]uint32 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0x60 + sizeofIfData = 0x98 + SizeofIfData = 0x50 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + X__ifi_epoch [8]byte + X__ifi_lastchange [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + Epoch int32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + X_bzh_pad [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x800 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go new file mode 100644 index 0000000..dd0db2a --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -0,0 +1,544 @@ +// cgo -godefs types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,freebsd + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtimespec Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + Pad_cgo_0 [4]byte +} + +type Dirent struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + X__fds_bits [16]uint64 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0xa8 + sizeofIfData = 0x98 + SizeofIfData = 0x98 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x98 + SizeofRtMetrics = 0x70 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + X__ifi_epoch [8]byte + X__ifi_lastchange [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Hwassist uint64 + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint64 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Expire uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Pksent uint64 + Weight uint64 + Filler [3]uint64 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0x18 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + X_bzh_pad [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x800 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go new file mode 100644 index 0000000..473d3dc --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -0,0 +1,544 @@ +// cgo -godefs -- -fsigned-char types_freebsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,freebsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + Pad_cgo_0 [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur int64 + Max int64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint32 + Ino uint32 + Mode uint16 + Nlink uint16 + Uid uint32 + Gid uint32 + Rdev uint32 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + Lspare int32 + Birthtimespec Timespec +} + +type Statfs_t struct { + Version uint32 + Type uint32 + Flags uint64 + Bsize uint64 + Iosize uint64 + Blocks uint64 + Bfree uint64 + Bavail int64 + Files uint64 + Ffree int64 + Syncwrites uint64 + Asyncwrites uint64 + Syncreads uint64 + Asyncreads uint64 + Spare [10]uint64 + Namemax uint32 + Owner uint32 + Fsid Fsid + Charspare [80]int8 + Fstypename [16]int8 + Mntfromname [88]int8 + Mntonname [88]int8 +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 + Sysid int32 + Pad_cgo_0 [4]byte +} + +type Dirent struct { + Fileno uint32 + Reclen uint16 + Type uint8 + Namlen uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [46]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x36 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int32 + Udata *byte +} + +type FdSet struct { + X__fds_bits [32]uint32 +} + +const ( + sizeofIfMsghdr = 0xa8 + SizeofIfMsghdr = 0x70 + sizeofIfData = 0x98 + SizeofIfData = 0x60 + SizeofIfaMsghdr = 0x14 + SizeofIfmaMsghdr = 0x10 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x5c + SizeofRtMetrics = 0x38 +) + +type ifMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data ifData +} + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type ifData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Vhid uint8 + Datalen uint16 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Oqdrops uint64 + Noproto uint64 + Hwassist uint64 + X__ifi_epoch [8]byte + X__ifi_lastchange [16]byte +} + +type IfData struct { + Type uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Spare_char1 uint8 + Spare_char2 uint8 + Datalen uint8 + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Hwassist uint32 + Pad_cgo_0 [4]byte + Epoch int64 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type IfmaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Fmask int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 + Weight uint32 + Filler [3]uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfZbuf = 0xc + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 + SizeofBpfZbufHeader = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfZbuf struct { + Bufa *byte + Bufb *byte + Buflen uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp Timeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfZbufHeader struct { + Kernel_gen uint32 + Kernel_len uint32 + User_gen uint32 + X_bzh_pad [5]uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x800 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLINIGNEOF = 0x2000 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type CapRights struct { + Rights [2]uint64 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go new file mode 100644 index 0000000..c6de942 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -0,0 +1,793 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,linux + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + X__pad1 uint16 + Pad_cgo_0 [2]byte + X__st_ino uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad2 uint16 + Pad_cgo_1 [2]byte + Size int64 + Blksize int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [1]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Ebx int32 + Ecx int32 + Edx int32 + Esi int32 + Edi int32 + Ebp int32 + Eax int32 + Xds int32 + Xes int32 + Xfs int32 + Xgs int32 + Orig_eax int32 + Eip int32 + Xcs int32 + Eflags int32 + Esp int32 + Xss int32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]int8 +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [32]uint32 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go new file mode 100644 index 0000000..4ea42df --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -0,0 +1,811 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + X__pad0 int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [3]int64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + R15 uint64 + R14 uint64 + R13 uint64 + R12 uint64 + Rbp uint64 + Rbx uint64 + R11 uint64 + R10 uint64 + R9 uint64 + R8 uint64 + Rax uint64 + Rcx uint64 + Rdx uint64 + Rsi uint64 + Rdi uint64 + Orig_rax uint64 + Rip uint64 + Cs uint64 + Eflags uint64 + Rsp uint64 + Ss uint64 + Fs_base uint64 + Gs_base uint64 + Ds uint64 + Es uint64 + Fs uint64 + Gs uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go new file mode 100644 index 0000000..f86d683 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -0,0 +1,782 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,linux + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + X__pad1 uint16 + Pad_cgo_0 [2]byte + X__st_ino uint32 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad2 uint16 + Pad_cgo_1 [6]byte + Size int64 + Blksize int32 + Pad_cgo_2 [4]byte + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Ino uint64 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int32 + Frsize int32 + Flags int32 + Spare [4]int32 + Pad_cgo_0 [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Uregs [18]uint32 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]uint8 +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]uint8 + Fpack [6]uint8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [32]uint32 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go new file mode 100644 index 0000000..45c10b7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -0,0 +1,790 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm64,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad1 uint64 + Size int64 + Blksize int32 + X__pad2 int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [2]int32 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [31]uint64 + Sp uint64 + Pc uint64 + Pstate uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go new file mode 100644 index 0000000..4cc0a1c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -0,0 +1,787 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips,linux + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]int32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad4 int32 + Blocks int64 + Pad5 [14]int32 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Frsize int32 + Pad_cgo_0 [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + Pad_cgo_1 [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]int8 +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [32]uint32 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go new file mode 100644 index 0000000..d9df087 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -0,0 +1,792 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]uint32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go new file mode 100644 index 0000000..15e6b4b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -0,0 +1,792 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mips64le,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]uint32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]uint32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize uint32 + Pad4 uint32 + Blocks int64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Frsize int64 + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int64 + Flags int64 + Spare [5]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go new file mode 100644 index 0000000..b6c2d32 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -0,0 +1,787 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build mipsle,linux + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int32 + Nsec int32 +} + +type Timeval struct { + Sec int32 + Usec int32 +} + +type Timex struct { + Modes uint32 + Offset int32 + Freq int32 + Maxerror int32 + Esterror int32 + Status int32 + Constant int32 + Precision int32 + Tolerance int32 + Time Timeval + Tick int32 + Ppsfreq int32 + Jitter int32 + Shift int32 + Stabil int32 + Jitcnt int32 + Calcnt int32 + Errcnt int32 + Stbcnt int32 + Tai int32 + Pad_cgo_0 [44]byte +} + +type Time_t int32 + +type Tms struct { + Utime int32 + Stime int32 + Cutime int32 + Cstime int32 +} + +type Utimbuf struct { + Actime int32 + Modtime int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint32 + Pad1 [3]int32 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint32 + Pad2 [3]int32 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad4 int32 + Blocks int64 + Pad5 [14]int32 +} + +type Statfs_t struct { + Type int32 + Bsize int32 + Frsize int32 + Pad_cgo_0 [4]byte + Blocks uint64 + Bfree uint64 + Files uint64 + Ffree uint64 + Bavail uint64 + Fsid Fsid + Namelen int32 + Flags int32 + Spare [5]int32 + Pad_cgo_1 [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x8 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [2]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [32]uint64 + Lo uint64 + Hi uint64 + Epc uint64 + Badvaddr uint64 + Status uint64 + Cause uint64 +} + +type FdSet struct { + Bits [32]int32 +} + +type Sysinfo_t struct { + Uptime int32 + Loads [3]uint32 + Totalram uint32 + Freeram uint32 + Sharedram uint32 + Bufferram uint32 + Totalswap uint32 + Freeswap uint32 + Procs uint16 + Pad uint16 + Totalhigh uint32 + Freehigh uint32 + Unit uint32 + X_f [8]int8 +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint32 + Fname [6]int8 + Fpack [6]int8 +} + +type EpollEvent struct { + Events uint32 + PadFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [32]uint32 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [23]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go new file mode 100644 index 0000000..3803e10 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -0,0 +1,800 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + X__pad2 int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint64 + _ uint64 + _ uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]uint8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + X_padFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go new file mode 100644 index 0000000..7ef31fe --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -0,0 +1,800 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build ppc64le,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + X__pad2 int32 + Rdev uint64 + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ uint64 + _ uint64 + _ uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]uint8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + Pad_cgo_1 [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]uint8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]uint8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Gpr [32]uint64 + Nip uint64 + Msr uint64 + Orig_gpr3 uint64 + Ctr uint64 + Link uint64 + Xer uint64 + Ccr uint64 + Softe uint64 + Trap uint64 + Dar uint64 + Dsisr uint64 + Result uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]uint8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]uint8 + Fpack [6]uint8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + X_padFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +const RNDGETENTCNT = 0x40045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Line uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + Pad_cgo_0 [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Pad_cgo_1 [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]uint8 + Ac_sched uint8 + Ac_pad [3]uint8 + Pad_cgo_2 [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Pad_cgo_3 [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go new file mode 100644 index 0000000..cb194f4 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -0,0 +1,817 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build s390x,linux + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + _ [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + _ [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + _ [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Ino uint64 + Nlink uint64 + Mode uint32 + Uid uint32 + Gid uint32 + _ int32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int64 + Blocks int64 + _ [3]int64 +} + +type Statfs_t struct { + Type uint32 + Bsize uint32 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen uint32 + Frsize uint32 + Flags uint32 + Spare [4]uint32 + _ [4]byte +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Fsid struct { + _ [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + _ [4]byte + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type FscryptPolicy struct { + Version uint8 + Contents_encryption_mode uint8 + Filenames_encryption_mode uint8 + Flags uint8 + Master_key_descriptor [8]uint8 +} + +type FscryptKey struct { + Mode uint32 + Raw [64]uint8 + Size uint32 +} + +type KeyctlDHParams struct { + Private int32 + Prime int32 + Base int32 +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x6 + FADV_NOREUSE = 0x7 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + _ [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type PacketMreq struct { + Ifindex int32 + Type uint16 + Alen uint16 + Address [8]uint8 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + _ [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + _ [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIovec = 0x10 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofPacketMreq = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2c + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + _ uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + _ [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Psw PtracePsw + Gprs [16]uint64 + Acrs [16]uint32 + Orig_gpr2 uint64 + Fp_regs PtraceFpregs + Per_info PtracePer + Ieee_instruction_pointer uint64 +} + +type PtracePsw struct { + Mask uint64 + Addr uint64 +} + +type PtraceFpregs struct { + Fpc uint32 + _ [4]byte + Fprs [16]float64 +} + +type PtracePer struct { + _ [0]uint64 + _ [24]byte + _ [8]byte + Starting_addr uint64 + Ending_addr uint64 + Perc_atmid uint16 + _ [6]byte + Address uint64 + Access_id uint8 + _ [7]byte +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + _ [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + _ [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x2000 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + _ [16]uint64 +} + +const RNDGETENTCNT = 0x80045200 + +const PERF_IOC_FLAG_GROUP = 0x1 + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type Taskstats struct { + Version uint16 + _ [2]byte + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + _ [6]byte + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + _ [4]byte + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 +} + +const ( + TASKSTATS_CMD_UNSPEC = 0x0 + TASKSTATS_CMD_GET = 0x1 + TASKSTATS_CMD_NEW = 0x2 + TASKSTATS_TYPE_UNSPEC = 0x0 + TASKSTATS_TYPE_PID = 0x1 + TASKSTATS_TYPE_TGID = 0x2 + TASKSTATS_TYPE_STATS = 0x3 + TASKSTATS_TYPE_AGGR_PID = 0x4 + TASKSTATS_TYPE_AGGR_TGID = 0x5 + TASKSTATS_TYPE_NULL = 0x6 + TASKSTATS_CMD_ATTR_UNSPEC = 0x0 + TASKSTATS_CMD_ATTR_PID = 0x1 + TASKSTATS_CMD_ATTR_TGID = 0x2 + TASKSTATS_CMD_ATTR_REGISTER_CPUMASK = 0x3 + TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK = 0x4 +) + +type Genlmsghdr struct { + Cmd uint8 + Version uint8 + Reserved uint16 +} + +const ( + CTRL_CMD_UNSPEC = 0x0 + CTRL_CMD_NEWFAMILY = 0x1 + CTRL_CMD_DELFAMILY = 0x2 + CTRL_CMD_GETFAMILY = 0x3 + CTRL_CMD_NEWOPS = 0x4 + CTRL_CMD_DELOPS = 0x5 + CTRL_CMD_GETOPS = 0x6 + CTRL_CMD_NEWMCAST_GRP = 0x7 + CTRL_CMD_DELMCAST_GRP = 0x8 + CTRL_CMD_GETMCAST_GRP = 0x9 + CTRL_ATTR_UNSPEC = 0x0 + CTRL_ATTR_FAMILY_ID = 0x1 + CTRL_ATTR_FAMILY_NAME = 0x2 + CTRL_ATTR_VERSION = 0x3 + CTRL_ATTR_HDRSIZE = 0x4 + CTRL_ATTR_MAXATTR = 0x5 + CTRL_ATTR_OPS = 0x6 + CTRL_ATTR_MCAST_GROUPS = 0x7 + CTRL_ATTR_OP_UNSPEC = 0x0 + CTRL_ATTR_OP_ID = 0x1 + CTRL_ATTR_OP_FLAGS = 0x2 + CTRL_ATTR_MCAST_GRP_UNSPEC = 0x0 + CTRL_ATTR_MCAST_GRP_NAME = 0x1 + CTRL_ATTR_MCAST_GRP_ID = 0x2 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go new file mode 100644 index 0000000..9dbbb1c --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -0,0 +1,664 @@ +// +build sparc64,linux +// Created by cgo -godefs - DO NOT EDIT +// cgo -godefs types_linux.go | go run mkpost.go + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x1000 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Timex struct { + Modes uint32 + Pad_cgo_0 [4]byte + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Pad_cgo_1 [4]byte + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Pad_cgo_2 [4]byte + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + Pad_cgo_3 [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + X__pad1 uint16 + Pad_cgo_0 [6]byte + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + X__pad2 uint16 + Pad_cgo_1 [6]byte + Size int64 + Blksize int64 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + X__glibc_reserved4 uint64 + X__glibc_reserved5 uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + Pad_cgo_0 [5]byte +} + +type Fsid struct { + X__val [2]int32 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Pid int32 + X__glibc_reserved int16 + Pad_cgo_1 [2]byte +} + +const ( + FADV_NORMAL = 0x0 + FADV_RANDOM = 0x1 + FADV_SEQUENTIAL = 0x2 + FADV_WILLNEED = 0x3 + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrLinklayer struct { + Family uint16 + Protocol uint16 + Ifindex int32 + Hatype uint16 + Pkttype uint8 + Halen uint8 + Addr [8]uint8 +} + +type RawSockaddrNetlink struct { + Family uint16 + Pad uint16 + Pid uint32 + Groups uint32 +} + +type RawSockaddrHCI struct { + Family uint16 + Dev uint16 + Channel uint16 +} + +type RawSockaddrCAN struct { + Family uint16 + Pad_cgo_0 [2]byte + Ifindex int32 + Addr [8]byte +} + +type RawSockaddrALG struct { + Family uint16 + Type [14]uint8 + Feat uint32 + Mask uint32 + Name [64]uint8 +} + +type RawSockaddrVM struct { + Family uint16 + Reserved1 uint16 + Port uint32 + Cid uint32 + Zero [4]uint8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPMreqn struct { + Multiaddr [4]byte /* in_addr */ + Address [4]byte /* in_addr */ + Ifindex int32 +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + Pad_cgo_1 [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type Inet4Pktinfo struct { + Ifindex int32 + Spec_dst [4]byte /* in_addr */ + Addr [4]byte /* in_addr */ +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Data [8]uint32 +} + +type Ucred struct { + Pid int32 + Uid uint32 + Gid uint32 +} + +type TCPInfo struct { + State uint8 + Ca_state uint8 + Retransmits uint8 + Probes uint8 + Backoff uint8 + Options uint8 + Pad_cgo_0 [2]byte + Rto uint32 + Ato uint32 + Snd_mss uint32 + Rcv_mss uint32 + Unacked uint32 + Sacked uint32 + Lost uint32 + Retrans uint32 + Fackets uint32 + Last_data_sent uint32 + Last_ack_sent uint32 + Last_data_recv uint32 + Last_ack_recv uint32 + Pmtu uint32 + Rcv_ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Snd_ssthresh uint32 + Snd_cwnd uint32 + Advmss uint32 + Reordering uint32 + Rcv_rtt uint32 + Rcv_space uint32 + Total_retrans uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x70 + SizeofSockaddrUnix = 0x6e + SizeofSockaddrLinklayer = 0x14 + SizeofSockaddrNetlink = 0xc + SizeofSockaddrHCI = 0x6 + SizeofSockaddrCAN = 0x10 + SizeofSockaddrALG = 0x58 + SizeofSockaddrVM = 0x10 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPMreqn = 0xc + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 + SizeofInet4Pktinfo = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 + SizeofUcred = 0xc + SizeofTCPInfo = 0x68 +) + +const ( + IFA_UNSPEC = 0x0 + IFA_ADDRESS = 0x1 + IFA_LOCAL = 0x2 + IFA_LABEL = 0x3 + IFA_BROADCAST = 0x4 + IFA_ANYCAST = 0x5 + IFA_CACHEINFO = 0x6 + IFA_MULTICAST = 0x7 + IFLA_UNSPEC = 0x0 + IFLA_ADDRESS = 0x1 + IFLA_BROADCAST = 0x2 + IFLA_IFNAME = 0x3 + IFLA_MTU = 0x4 + IFLA_LINK = 0x5 + IFLA_QDISC = 0x6 + IFLA_STATS = 0x7 + IFLA_COST = 0x8 + IFLA_PRIORITY = 0x9 + IFLA_MASTER = 0xa + IFLA_WIRELESS = 0xb + IFLA_PROTINFO = 0xc + IFLA_TXQLEN = 0xd + IFLA_MAP = 0xe + IFLA_WEIGHT = 0xf + IFLA_OPERSTATE = 0x10 + IFLA_LINKMODE = 0x11 + IFLA_LINKINFO = 0x12 + IFLA_NET_NS_PID = 0x13 + IFLA_IFALIAS = 0x14 + IFLA_MAX = 0x2a + RT_SCOPE_UNIVERSE = 0x0 + RT_SCOPE_SITE = 0xc8 + RT_SCOPE_LINK = 0xfd + RT_SCOPE_HOST = 0xfe + RT_SCOPE_NOWHERE = 0xff + RT_TABLE_UNSPEC = 0x0 + RT_TABLE_COMPAT = 0xfc + RT_TABLE_DEFAULT = 0xfd + RT_TABLE_MAIN = 0xfe + RT_TABLE_LOCAL = 0xff + RT_TABLE_MAX = 0xffffffff + RTA_UNSPEC = 0x0 + RTA_DST = 0x1 + RTA_SRC = 0x2 + RTA_IIF = 0x3 + RTA_OIF = 0x4 + RTA_GATEWAY = 0x5 + RTA_PRIORITY = 0x6 + RTA_PREFSRC = 0x7 + RTA_METRICS = 0x8 + RTA_MULTIPATH = 0x9 + RTA_FLOW = 0xb + RTA_CACHEINFO = 0xc + RTA_TABLE = 0xf + RTN_UNSPEC = 0x0 + RTN_UNICAST = 0x1 + RTN_LOCAL = 0x2 + RTN_BROADCAST = 0x3 + RTN_ANYCAST = 0x4 + RTN_MULTICAST = 0x5 + RTN_BLACKHOLE = 0x6 + RTN_UNREACHABLE = 0x7 + RTN_PROHIBIT = 0x8 + RTN_THROW = 0x9 + RTN_NAT = 0xa + RTN_XRESOLVE = 0xb + RTNLGRP_NONE = 0x0 + RTNLGRP_LINK = 0x1 + RTNLGRP_NOTIFY = 0x2 + RTNLGRP_NEIGH = 0x3 + RTNLGRP_TC = 0x4 + RTNLGRP_IPV4_IFADDR = 0x5 + RTNLGRP_IPV4_MROUTE = 0x6 + RTNLGRP_IPV4_ROUTE = 0x7 + RTNLGRP_IPV4_RULE = 0x8 + RTNLGRP_IPV6_IFADDR = 0x9 + RTNLGRP_IPV6_MROUTE = 0xa + RTNLGRP_IPV6_ROUTE = 0xb + RTNLGRP_IPV6_IFINFO = 0xc + RTNLGRP_IPV6_PREFIX = 0x12 + RTNLGRP_IPV6_RULE = 0x13 + RTNLGRP_ND_USEROPT = 0x14 + SizeofNlMsghdr = 0x10 + SizeofNlMsgerr = 0x14 + SizeofRtGenmsg = 0x1 + SizeofNlAttr = 0x4 + SizeofRtAttr = 0x4 + SizeofIfInfomsg = 0x10 + SizeofIfAddrmsg = 0x8 + SizeofRtMsg = 0xc + SizeofRtNexthop = 0x8 +) + +type NlMsghdr struct { + Len uint32 + Type uint16 + Flags uint16 + Seq uint32 + Pid uint32 +} + +type NlMsgerr struct { + Error int32 + Msg NlMsghdr +} + +type RtGenmsg struct { + Family uint8 +} + +type NlAttr struct { + Len uint16 + Type uint16 +} + +type RtAttr struct { + Len uint16 + Type uint16 +} + +type IfInfomsg struct { + Family uint8 + X__ifi_pad uint8 + Type uint16 + Index int32 + Flags uint32 + Change uint32 +} + +type IfAddrmsg struct { + Family uint8 + Prefixlen uint8 + Flags uint8 + Scope uint8 + Index uint32 +} + +type RtMsg struct { + Family uint8 + Dst_len uint8 + Src_len uint8 + Tos uint8 + Table uint8 + Protocol uint8 + Scope uint8 + Type uint8 + Flags uint32 +} + +type RtNexthop struct { + Len uint16 + Flags uint8 + Hops uint8 + Ifindex int32 +} + +const ( + SizeofSockFilter = 0x8 + SizeofSockFprog = 0x10 +) + +type SockFilter struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type SockFprog struct { + Len uint16 + Pad_cgo_0 [6]byte + Filter *SockFilter +} + +type InotifyEvent struct { + Wd int32 + Mask uint32 + Cookie uint32 + Len uint32 +} + +const SizeofInotifyEvent = 0x10 + +type PtraceRegs struct { + Regs [16]uint64 + Tstate uint64 + Tpc uint64 + Tnpc uint64 + Y uint32 + Magic uint32 +} + +type ptracePsw struct { +} + +type ptraceFpregs struct { +} + +type ptracePer struct { +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Pad_cgo_0 [4]byte + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + X_f [0]int8 + Pad_cgo_1 [4]byte +} + +type Utsname struct { + Sysname [65]byte + Nodename [65]byte + Release [65]byte + Version [65]byte + Machine [65]byte + Domainname [65]byte +} + +type Ustat_t struct { + Tfree int32 + Pad_cgo_0 [4]byte + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_1 [4]byte +} + +type EpollEvent struct { + Events uint32 + X_padFd int32 + Fd int32 + Pad int32 +} + +const ( + AT_FDCWD = -0x64 + AT_REMOVEDIR = 0x200 + AT_SYMLINK_FOLLOW = 0x400 + AT_SYMLINK_NOFOLLOW = 0x100 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLIN = 0x1 + POLLPRI = 0x2 + POLLOUT = 0x4 + POLLRDHUP = 0x800 + POLLERR = 0x8 + POLLHUP = 0x10 + POLLNVAL = 0x20 +) + +type Sigset_t struct { + X__val [16]uint64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go new file mode 100644 index 0000000..dfe446b --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_386.go @@ -0,0 +1,420 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,netbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x84 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData + Pad_cgo_1 [4]byte +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go new file mode 100644 index 0000000..1498c23 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_amd64.go @@ -0,0 +1,427 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,netbsd + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Pad_cgo_0 [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Pad_cgo_1 [4]byte + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + Pad_cgo_2 [4]byte +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter uint32 + Flags uint32 + Fflags uint32 + Pad_cgo_0 [4]byte + Data int64 + Udata int64 +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x20 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [6]byte +} + +type BpfTimeval struct { + Sec int64 + Usec int64 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go new file mode 100644 index 0000000..d6711ce --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -0,0 +1,425 @@ +// cgo -godefs types_netbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,netbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 + Pad_cgo_0 [4]byte +} + +type Timeval struct { + Sec int64 + Usec int32 + Pad_cgo_0 [4]byte +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +type Stat_t struct { + Dev uint64 + Mode uint32 + Pad_cgo_0 [4]byte + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Pad_cgo_1 [4]byte + Rdev uint64 + Atimespec Timespec + Mtimespec Timespec + Ctimespec Timespec + Birthtimespec Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Spare [2]uint32 + Pad_cgo_2 [4]byte +} + +type Statfs_t [0]byte + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Reclen uint16 + Namlen uint16 + Type uint8 + Name [512]int8 + Pad_cgo_0 [3]byte +} + +type Fsid struct { + X__fsid_val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [12]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen int32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x14 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter uint32 + Flags uint32 + Fflags uint32 + Data int64 + Udata int32 + Pad_cgo_0 [4]byte +} + +type FdSet struct { + Bits [8]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x88 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x18 + SizeofRtMsghdr = 0x78 + SizeofRtMetrics = 0x50 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Link_state int32 + Mtu uint64 + Metric uint64 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Lastchange Timespec +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Metric int32 + Index uint16 + Pad_cgo_0 [6]byte +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Name [16]int8 + What uint16 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits int32 + Pad_cgo_1 [4]byte + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint64 + Mtu uint64 + Hopcount uint64 + Recvpipe uint64 + Sendpipe uint64 + Ssthresh uint64 + Rtt uint64 + Rttvar uint64 + Expire int64 + Pksent int64 +} + +type Mclpool [0]byte + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x200 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) + +type Sysctlnode struct { + Flags uint32 + Num int32 + Name [32]int8 + Ver uint32 + X__rsvd uint32 + Un [16]byte + X_sysctl_size [8]byte + X_sysctl_func [8]byte + X_sysctl_parent [8]byte + X_sysctl_desc [8]byte +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go new file mode 100644 index 0000000..af295c3 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -0,0 +1,465 @@ +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build 386,openbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + Pad_cgo_0 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xec + SizeofIfData = 0xd4 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval + Mclpool [7]Mclpool +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct { + Grown int32 + Alive uint16 + Hwm uint16 + Cwm uint16 + Lwm uint16 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go new file mode 100644 index 0000000..ae153e7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -0,0 +1,472 @@ +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,openbsd + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize uint32 + Flags uint32 + Gen uint32 + Pad_cgo_0 [4]byte + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + Pad_cgo_0 [4]byte + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]int8 + F_mntonname [90]int8 + F_mntfromname [90]int8 + F_mntfromspec [90]int8 + Pad_cgo_1 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]int8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen uint32 + Pad_cgo_1 [4]byte + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint64 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0xf8 + SizeofIfData = 0xe0 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Pad_cgo_0 [4]byte + Lastchange Timeval + Mclpool [7]Mclpool + Pad_cgo_1 [4]byte +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]int8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct { + Grown int32 + Alive uint16 + Hwm uint16 + Cwm uint16 + Lwm uint16 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go new file mode 100644 index 0000000..35bb619 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go @@ -0,0 +1,458 @@ +// cgo -godefs types_openbsd.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build arm,openbsd + +package unix + +const ( + sizeofPtr = 0x4 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x4 + sizeofLongLong = 0x8 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int32 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int32 +} + +type Timeval struct { + Sec int64 + Usec int32 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int32 + Ixrss int32 + Idrss int32 + Isrss int32 + Minflt int32 + Majflt int32 + Nswap int32 + Inblock int32 + Oublock int32 + Msgsnd int32 + Msgrcv int32 + Nsignals int32 + Nvcsw int32 + Nivcsw int32 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Mode uint32 + Dev int32 + Ino uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev int32 + Atim Timespec + Mtim Timespec + Ctim Timespec + Size int64 + Blocks int64 + Blksize int32 + Flags uint32 + Gen uint32 + X__st_birthtim Timespec +} + +type Statfs_t struct { + F_flags uint32 + F_bsize uint32 + F_iosize uint32 + F_blocks uint64 + F_bfree uint64 + F_bavail int64 + F_files uint64 + F_ffree uint64 + F_favail int64 + F_syncwrites uint64 + F_syncreads uint64 + F_asyncwrites uint64 + F_asyncreads uint64 + F_fsid Fsid + F_namemax uint32 + F_owner uint32 + F_ctime uint64 + F_fstypename [16]uint8 + F_mntonname [90]uint8 + F_mntfromname [90]uint8 + F_mntfromspec [90]uint8 + Pad_cgo_0 [2]byte + Mount_info [160]byte +} + +type Flock_t struct { + Start int64 + Len int64 + Pid int32 + Type int16 + Whence int16 +} + +type Dirent struct { + Fileno uint64 + Off int64 + Reclen uint16 + Type uint8 + Namlen uint8 + X__d_padding [4]uint8 + Name [256]uint8 +} + +type Fsid struct { + Val [2]int32 +} + +type RawSockaddrInet4 struct { + Len uint8 + Family uint8 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Len uint8 + Family uint8 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddrUnix struct { + Len uint8 + Family uint8 + Path [104]int8 +} + +type RawSockaddrDatalink struct { + Len uint8 + Family uint8 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [24]int8 +} + +type RawSockaddr struct { + Len uint8 + Family uint8 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [92]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *byte + Len uint32 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + Filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x1c + SizeofSockaddrAny = 0x6c + SizeofSockaddrUnix = 0x6a + SizeofSockaddrDatalink = 0x20 + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x1c + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x20 + SizeofICMPv6Filter = 0x20 +) + +const ( + PTRACE_TRACEME = 0x0 + PTRACE_CONT = 0x7 + PTRACE_KILL = 0x8 +) + +type Kevent_t struct { + Ident uint32 + Filter int16 + Flags uint16 + Fflags uint32 + Data int64 + Udata *byte +} + +type FdSet struct { + Bits [32]uint32 +} + +const ( + SizeofIfMsghdr = 0x98 + SizeofIfData = 0x80 + SizeofIfaMsghdr = 0x18 + SizeofIfAnnounceMsghdr = 0x1a + SizeofRtMsghdr = 0x60 + SizeofRtMetrics = 0x38 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Xflags int32 + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Link_state uint8 + Mtu uint32 + Metric uint32 + Pad uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Capabilities uint32 + Lastchange Timeval +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Pad1 uint8 + Pad2 uint8 + Addrs int32 + Flags int32 + Metric int32 +} + +type IfAnnounceMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + What uint16 + Name [16]uint8 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Hdrlen uint16 + Index uint16 + Tableid uint16 + Priority uint8 + Mpls uint8 + Addrs int32 + Flags int32 + Fmask int32 + Pid int32 + Seq int32 + Errno int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Pksent uint64 + Expire int64 + Locks uint32 + Mtu uint32 + Refcnt uint32 + Hopcount uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pad uint32 +} + +type Mclpool struct{} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x8 + SizeofBpfProgram = 0x8 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint32 + Drop uint32 +} + +type BpfProgram struct { + Len uint32 + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type BpfTimeval struct { + Sec uint32 + Usec uint32 +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [20]uint8 + Ispeed int32 + Ospeed int32 +} + +const ( + AT_FDCWD = -0x64 + AT_SYMLINK_NOFOLLOW = 0x2 +) + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go new file mode 100644 index 0000000..d445452 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_solaris_amd64.go @@ -0,0 +1,459 @@ +// cgo -godefs types_solaris.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +// +build amd64,solaris + +package unix + +const ( + sizeofPtr = 0x8 + sizeofShort = 0x2 + sizeofInt = 0x4 + sizeofLong = 0x8 + sizeofLongLong = 0x8 + PathMax = 0x400 + MaxHostNameLen = 0x100 +) + +type ( + _C_short int16 + _C_int int32 + _C_long int64 + _C_long_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timeval32 struct { + Sec int32 + Usec int32 +} + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Rlimit struct { + Cur uint64 + Max uint64 +} + +type _Gid_t uint32 + +const ( + S_IFMT = 0xf000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + Size int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + Blksize int32 + Pad_cgo_0 [4]byte + Blocks int64 + Fstype [16]int8 +} + +type Flock_t struct { + Type int16 + Whence int16 + Pad_cgo_0 [4]byte + Start int64 + Len int64 + Sysid int32 + Pid int32 + Pad [4]int64 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Name [1]int8 + Pad_cgo_0 [5]byte +} + +type _Fsblkcnt_t uint64 + +type Statvfs_t struct { + Bsize uint64 + Frsize uint64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Favail uint64 + Fsid uint64 + Basetype [16]int8 + Flag uint64 + Namemax uint64 + Fstr [32]int8 +} + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]int8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 + X__sin6_src_id uint32 +} + +type RawSockaddrUnix struct { + Family uint16 + Path [108]int8 +} + +type RawSockaddrDatalink struct { + Family uint16 + Index uint16 + Type uint8 + Nlen uint8 + Alen uint8 + Slen uint8 + Data [244]int8 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [236]int8 +} + +type _Socklen uint32 + +type Linger struct { + Onoff int32 + Linger int32 +} + +type Iovec struct { + Base *int8 + Len uint64 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Pad_cgo_0 [4]byte + Iov *Iovec + Iovlen int32 + Pad_cgo_1 [4]byte + Accrights *int8 + Accrightslen int32 + Pad_cgo_2 [4]byte +} + +type Cmsghdr struct { + Len uint32 + Level int32 + Type int32 +} + +type Inet6Pktinfo struct { + Addr [16]byte /* in6_addr */ + Ifindex uint32 +} + +type IPv6MTUInfo struct { + Addr RawSockaddrInet6 + Mtu uint32 +} + +type ICMPv6Filter struct { + X__icmp6_filt [8]uint32 +} + +const ( + SizeofSockaddrInet4 = 0x10 + SizeofSockaddrInet6 = 0x20 + SizeofSockaddrAny = 0xfc + SizeofSockaddrUnix = 0x6e + SizeofSockaddrDatalink = 0xfc + SizeofLinger = 0x8 + SizeofIPMreq = 0x8 + SizeofIPv6Mreq = 0x14 + SizeofMsghdr = 0x30 + SizeofCmsghdr = 0xc + SizeofInet6Pktinfo = 0x14 + SizeofIPv6MTUInfo = 0x24 + SizeofICMPv6Filter = 0x20 +) + +type FdSet struct { + Bits [1024]int64 +} + +type Utsname struct { + Sysname [257]byte + Nodename [257]byte + Release [257]byte + Version [257]byte + Machine [257]byte +} + +type Ustat_t struct { + Tfree int64 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + Pad_cgo_0 [4]byte +} + +const ( + AT_FDCWD = 0xffd19553 + AT_SYMLINK_NOFOLLOW = 0x1000 + AT_SYMLINK_FOLLOW = 0x2000 + AT_REMOVEDIR = 0x1 + AT_EACCESS = 0x4 +) + +const ( + SizeofIfMsghdr = 0x54 + SizeofIfData = 0x44 + SizeofIfaMsghdr = 0x14 + SizeofRtMsghdr = 0x4c + SizeofRtMetrics = 0x28 +) + +type IfMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Data IfData +} + +type IfData struct { + Type uint8 + Addrlen uint8 + Hdrlen uint8 + Pad_cgo_0 [1]byte + Mtu uint32 + Metric uint32 + Baudrate uint32 + Ipackets uint32 + Ierrors uint32 + Opackets uint32 + Oerrors uint32 + Collisions uint32 + Ibytes uint32 + Obytes uint32 + Imcasts uint32 + Omcasts uint32 + Iqdrops uint32 + Noproto uint32 + Lastchange Timeval32 +} + +type IfaMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Pad_cgo_0 [2]byte + Metric int32 +} + +type RtMsghdr struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Pad_cgo_0 [2]byte + Flags int32 + Addrs int32 + Pid int32 + Seq int32 + Errno int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + +type RtMetrics struct { + Locks uint32 + Mtu uint32 + Hopcount uint32 + Expire uint32 + Recvpipe uint32 + Sendpipe uint32 + Ssthresh uint32 + Rtt uint32 + Rttvar uint32 + Pksent uint32 +} + +const ( + SizeofBpfVersion = 0x4 + SizeofBpfStat = 0x80 + SizeofBpfProgram = 0x10 + SizeofBpfInsn = 0x8 + SizeofBpfHdr = 0x14 +) + +type BpfVersion struct { + Major uint16 + Minor uint16 +} + +type BpfStat struct { + Recv uint64 + Drop uint64 + Capt uint64 + Padding [13]uint64 +} + +type BpfProgram struct { + Len uint32 + Pad_cgo_0 [4]byte + Insns *BpfInsn +} + +type BpfInsn struct { + Code uint16 + Jt uint8 + Jf uint8 + K uint32 +} + +type BpfTimeval struct { + Sec int32 + Usec int32 +} + +type BpfHdr struct { + Tstamp BpfTimeval + Caplen uint32 + Datalen uint32 + Hdrlen uint16 + Pad_cgo_0 [2]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Cc [19]uint8 + Pad_cgo_0 [1]byte +} + +type Termio struct { + Iflag uint16 + Oflag uint16 + Cflag uint16 + Lflag uint16 + Line int8 + Cc [8]uint8 + Pad_cgo_0 [1]byte +} + +type Winsize struct { + Row uint16 + Col uint16 + Xpixel uint16 + Ypixel uint16 +} + +type PollFd struct { + Fd int32 + Events int16 + Revents int16 +} + +const ( + POLLERR = 0x8 + POLLHUP = 0x10 + POLLIN = 0x1 + POLLNVAL = 0x20 + POLLOUT = 0x4 + POLLPRI = 0x2 + POLLRDBAND = 0x80 + POLLRDNORM = 0x40 + POLLWRBAND = 0x100 + POLLWRNORM = 0x4 +) diff --git a/vendor/golang.org/x/sys/windows/asm_windows_386.s b/vendor/golang.org/x/sys/windows/asm_windows_386.s new file mode 100644 index 0000000..1c20dd2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/asm_windows_386.s @@ -0,0 +1,13 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +// System calls for 386, Windows are implemented in runtime/syscall_windows.goc +// + +TEXT ·getprocaddress(SB), 7, $0-8 + JMP syscall·getprocaddress(SB) + +TEXT ·loadlibrary(SB), 7, $0-4 + JMP syscall·loadlibrary(SB) diff --git a/vendor/golang.org/x/sys/windows/asm_windows_amd64.s b/vendor/golang.org/x/sys/windows/asm_windows_amd64.s new file mode 100644 index 0000000..4d025ab --- /dev/null +++ b/vendor/golang.org/x/sys/windows/asm_windows_amd64.s @@ -0,0 +1,13 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +// System calls for amd64, Windows are implemented in runtime/syscall_windows.goc +// + +TEXT ·getprocaddress(SB), 7, $0-32 + JMP syscall·getprocaddress(SB) + +TEXT ·loadlibrary(SB), 7, $0-8 + JMP syscall·loadlibrary(SB) diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go new file mode 100644 index 0000000..e92c05b --- /dev/null +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -0,0 +1,378 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "sync" + "sync/atomic" + "syscall" + "unsafe" +) + +// DLLError describes reasons for DLL load failures. +type DLLError struct { + Err error + ObjName string + Msg string +} + +func (e *DLLError) Error() string { return e.Msg } + +// Implemented in runtime/syscall_windows.goc; we provide jumps to them in our assembly file. +func loadlibrary(filename *uint16) (handle uintptr, err syscall.Errno) +func getprocaddress(handle uintptr, procname *uint8) (proc uintptr, err syscall.Errno) + +// A DLL implements access to a single DLL. +type DLL struct { + Name string + Handle Handle +} + +// LoadDLL loads DLL file into memory. +// +// Warning: using LoadDLL without an absolute path name is subject to +// DLL preloading attacks. To safely load a system DLL, use LazyDLL +// with System set to true, or use LoadLibraryEx directly. +func LoadDLL(name string) (dll *DLL, err error) { + namep, err := UTF16PtrFromString(name) + if err != nil { + return nil, err + } + h, e := loadlibrary(namep) + if e != 0 { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to load " + name + ": " + e.Error(), + } + } + d := &DLL{ + Name: name, + Handle: Handle(h), + } + return d, nil +} + +// MustLoadDLL is like LoadDLL but panics if load operation failes. +func MustLoadDLL(name string) *DLL { + d, e := LoadDLL(name) + if e != nil { + panic(e) + } + return d +} + +// FindProc searches DLL d for procedure named name and returns *Proc +// if found. It returns an error if search fails. +func (d *DLL) FindProc(name string) (proc *Proc, err error) { + namep, err := BytePtrFromString(name) + if err != nil { + return nil, err + } + a, e := getprocaddress(uintptr(d.Handle), namep) + if e != 0 { + return nil, &DLLError{ + Err: e, + ObjName: name, + Msg: "Failed to find " + name + " procedure in " + d.Name + ": " + e.Error(), + } + } + p := &Proc{ + Dll: d, + Name: name, + addr: a, + } + return p, nil +} + +// MustFindProc is like FindProc but panics if search fails. +func (d *DLL) MustFindProc(name string) *Proc { + p, e := d.FindProc(name) + if e != nil { + panic(e) + } + return p +} + +// Release unloads DLL d from memory. +func (d *DLL) Release() (err error) { + return FreeLibrary(d.Handle) +} + +// A Proc implements access to a procedure inside a DLL. +type Proc struct { + Dll *DLL + Name string + addr uintptr +} + +// Addr returns the address of the procedure represented by p. +// The return value can be passed to Syscall to run the procedure. +func (p *Proc) Addr() uintptr { + return p.addr +} + +//go:uintptrescapes + +// Call executes procedure p with arguments a. It will panic, if more than 15 arguments +// are supplied. +// +// The returned error is always non-nil, constructed from the result of GetLastError. +// Callers must inspect the primary return value to decide whether an error occurred +// (according to the semantics of the specific function being called) before consulting +// the error. The error will be guaranteed to contain windows.Errno. +func (p *Proc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { + switch len(a) { + case 0: + return syscall.Syscall(p.Addr(), uintptr(len(a)), 0, 0, 0) + case 1: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], 0, 0) + case 2: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], 0) + case 3: + return syscall.Syscall(p.Addr(), uintptr(len(a)), a[0], a[1], a[2]) + case 4: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], 0, 0) + case 5: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], 0) + case 6: + return syscall.Syscall6(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5]) + case 7: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0) + case 8: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0) + case 9: + return syscall.Syscall9(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]) + case 10: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0) + case 11: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0) + case 12: + return syscall.Syscall12(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11]) + case 13: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0) + case 14: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0) + case 15: + return syscall.Syscall15(p.Addr(), uintptr(len(a)), a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14]) + default: + panic("Call " + p.Name + " with too many arguments " + itoa(len(a)) + ".") + } +} + +// A LazyDLL implements access to a single DLL. +// It will delay the load of the DLL until the first +// call to its Handle method or to one of its +// LazyProc's Addr method. +type LazyDLL struct { + Name string + + // System determines whether the DLL must be loaded from the + // Windows System directory, bypassing the normal DLL search + // path. + System bool + + mu sync.Mutex + dll *DLL // non nil once DLL is loaded +} + +// Load loads DLL file d.Name into memory. It returns an error if fails. +// Load will not try to load DLL, if it is already loaded into memory. +func (d *LazyDLL) Load() error { + // Non-racy version of: + // if d.dll != nil { + if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll))) != nil { + return nil + } + d.mu.Lock() + defer d.mu.Unlock() + if d.dll != nil { + return nil + } + + // kernel32.dll is special, since it's where LoadLibraryEx comes from. + // The kernel already special-cases its name, so it's always + // loaded from system32. + var dll *DLL + var err error + if d.Name == "kernel32.dll" { + dll, err = LoadDLL(d.Name) + } else { + dll, err = loadLibraryEx(d.Name, d.System) + } + if err != nil { + return err + } + + // Non-racy version of: + // d.dll = dll + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&d.dll)), unsafe.Pointer(dll)) + return nil +} + +// mustLoad is like Load but panics if search fails. +func (d *LazyDLL) mustLoad() { + e := d.Load() + if e != nil { + panic(e) + } +} + +// Handle returns d's module handle. +func (d *LazyDLL) Handle() uintptr { + d.mustLoad() + return uintptr(d.dll.Handle) +} + +// NewProc returns a LazyProc for accessing the named procedure in the DLL d. +func (d *LazyDLL) NewProc(name string) *LazyProc { + return &LazyProc{l: d, Name: name} +} + +// NewLazyDLL creates new LazyDLL associated with DLL file. +func NewLazyDLL(name string) *LazyDLL { + return &LazyDLL{Name: name} +} + +// NewLazySystemDLL is like NewLazyDLL, but will only +// search Windows System directory for the DLL if name is +// a base name (like "advapi32.dll"). +func NewLazySystemDLL(name string) *LazyDLL { + return &LazyDLL{Name: name, System: true} +} + +// A LazyProc implements access to a procedure inside a LazyDLL. +// It delays the lookup until the Addr method is called. +type LazyProc struct { + Name string + + mu sync.Mutex + l *LazyDLL + proc *Proc +} + +// Find searches DLL for procedure named p.Name. It returns +// an error if search fails. Find will not search procedure, +// if it is already found and loaded into memory. +func (p *LazyProc) Find() error { + // Non-racy version of: + // if p.proc == nil { + if atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc))) == nil { + p.mu.Lock() + defer p.mu.Unlock() + if p.proc == nil { + e := p.l.Load() + if e != nil { + return e + } + proc, e := p.l.dll.FindProc(p.Name) + if e != nil { + return e + } + // Non-racy version of: + // p.proc = proc + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(&p.proc)), unsafe.Pointer(proc)) + } + } + return nil +} + +// mustFind is like Find but panics if search fails. +func (p *LazyProc) mustFind() { + e := p.Find() + if e != nil { + panic(e) + } +} + +// Addr returns the address of the procedure represented by p. +// The return value can be passed to Syscall to run the procedure. +// It will panic if the procedure cannot be found. +func (p *LazyProc) Addr() uintptr { + p.mustFind() + return p.proc.Addr() +} + +//go:uintptrescapes + +// Call executes procedure p with arguments a. It will panic, if more than 15 arguments +// are supplied. It will also panic if the procedure cannot be found. +// +// The returned error is always non-nil, constructed from the result of GetLastError. +// Callers must inspect the primary return value to decide whether an error occurred +// (according to the semantics of the specific function being called) before consulting +// the error. The error will be guaranteed to contain windows.Errno. +func (p *LazyProc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) { + p.mustFind() + return p.proc.Call(a...) +} + +var canDoSearchSystem32Once struct { + sync.Once + v bool +} + +func initCanDoSearchSystem32() { + // https://msdn.microsoft.com/en-us/library/ms684179(v=vs.85).aspx says: + // "Windows 7, Windows Server 2008 R2, Windows Vista, and Windows + // Server 2008: The LOAD_LIBRARY_SEARCH_* flags are available on + // systems that have KB2533623 installed. To determine whether the + // flags are available, use GetProcAddress to get the address of the + // AddDllDirectory, RemoveDllDirectory, or SetDefaultDllDirectories + // function. If GetProcAddress succeeds, the LOAD_LIBRARY_SEARCH_* + // flags can be used with LoadLibraryEx." + canDoSearchSystem32Once.v = (modkernel32.NewProc("AddDllDirectory").Find() == nil) +} + +func canDoSearchSystem32() bool { + canDoSearchSystem32Once.Do(initCanDoSearchSystem32) + return canDoSearchSystem32Once.v +} + +func isBaseName(name string) bool { + for _, c := range name { + if c == ':' || c == '/' || c == '\\' { + return false + } + } + return true +} + +// loadLibraryEx wraps the Windows LoadLibraryEx function. +// +// See https://msdn.microsoft.com/en-us/library/windows/desktop/ms684179(v=vs.85).aspx +// +// If name is not an absolute path, LoadLibraryEx searches for the DLL +// in a variety of automatic locations unless constrained by flags. +// See: https://msdn.microsoft.com/en-us/library/ff919712%28VS.85%29.aspx +func loadLibraryEx(name string, system bool) (*DLL, error) { + loadDLL := name + var flags uintptr + if system { + if canDoSearchSystem32() { + const LOAD_LIBRARY_SEARCH_SYSTEM32 = 0x00000800 + flags = LOAD_LIBRARY_SEARCH_SYSTEM32 + } else if isBaseName(name) { + // WindowsXP or unpatched Windows machine + // trying to load "foo.dll" out of the system + // folder, but LoadLibraryEx doesn't support + // that yet on their system, so emulate it. + windir, _ := Getenv("WINDIR") // old var; apparently works on XP + if windir == "" { + return nil, errString("%WINDIR% not defined") + } + loadDLL = windir + "\\System32\\" + name + } + } + h, err := LoadLibraryEx(loadDLL, 0, flags) + if err != nil { + return nil, err + } + return &DLL{Name: name, Handle: h}, nil +} + +type errString string + +func (s errString) Error() string { return string(s) } diff --git a/vendor/golang.org/x/sys/windows/env_unset.go b/vendor/golang.org/x/sys/windows/env_unset.go new file mode 100644 index 0000000..b712c66 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/env_unset.go @@ -0,0 +1,15 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows +// +build go1.4 + +package windows + +import "syscall" + +func Unsetenv(key string) error { + // This was added in Go 1.4. + return syscall.Unsetenv(key) +} diff --git a/vendor/golang.org/x/sys/windows/env_windows.go b/vendor/golang.org/x/sys/windows/env_windows.go new file mode 100644 index 0000000..e829238 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/env_windows.go @@ -0,0 +1,25 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Windows environment variables. + +package windows + +import "syscall" + +func Getenv(key string) (value string, found bool) { + return syscall.Getenv(key) +} + +func Setenv(key, value string) error { + return syscall.Setenv(key, value) +} + +func Clearenv() { + syscall.Clearenv() +} + +func Environ() []string { + return syscall.Environ() +} diff --git a/vendor/golang.org/x/sys/windows/eventlog.go b/vendor/golang.org/x/sys/windows/eventlog.go new file mode 100644 index 0000000..40af946 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/eventlog.go @@ -0,0 +1,20 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package windows + +const ( + EVENTLOG_SUCCESS = 0 + EVENTLOG_ERROR_TYPE = 1 + EVENTLOG_WARNING_TYPE = 2 + EVENTLOG_INFORMATION_TYPE = 4 + EVENTLOG_AUDIT_SUCCESS = 8 + EVENTLOG_AUDIT_FAILURE = 16 +) + +//sys RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) [failretval==0] = advapi32.RegisterEventSourceW +//sys DeregisterEventSource(handle Handle) (err error) = advapi32.DeregisterEventSource +//sys ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) = advapi32.ReportEventW diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go new file mode 100644 index 0000000..3606c3a --- /dev/null +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -0,0 +1,97 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Fork, exec, wait, etc. + +package windows + +// EscapeArg rewrites command line argument s as prescribed +// in http://msdn.microsoft.com/en-us/library/ms880421. +// This function returns "" (2 double quotes) if s is empty. +// Alternatively, these transformations are done: +// - every back slash (\) is doubled, but only if immediately +// followed by double quote ("); +// - every double quote (") is escaped by back slash (\); +// - finally, s is wrapped with double quotes (arg -> "arg"), +// but only if there is space or tab inside s. +func EscapeArg(s string) string { + if len(s) == 0 { + return "\"\"" + } + n := len(s) + hasSpace := false + for i := 0; i < len(s); i++ { + switch s[i] { + case '"', '\\': + n++ + case ' ', '\t': + hasSpace = true + } + } + if hasSpace { + n += 2 + } + if n == len(s) { + return s + } + + qs := make([]byte, n) + j := 0 + if hasSpace { + qs[j] = '"' + j++ + } + slashes := 0 + for i := 0; i < len(s); i++ { + switch s[i] { + default: + slashes = 0 + qs[j] = s[i] + case '\\': + slashes++ + qs[j] = s[i] + case '"': + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '\\' + j++ + qs[j] = s[i] + } + j++ + } + if hasSpace { + for ; slashes > 0; slashes-- { + qs[j] = '\\' + j++ + } + qs[j] = '"' + j++ + } + return string(qs[:j]) +} + +func CloseOnExec(fd Handle) { + SetHandleInformation(Handle(fd), HANDLE_FLAG_INHERIT, 0) +} + +// FullPath retrieves the full path of the specified file. +func FullPath(name string) (path string, err error) { + p, err := UTF16PtrFromString(name) + if err != nil { + return "", err + } + n := uint32(100) + for { + buf := make([]uint16, n) + n, err = GetFullPathName(p, uint32(len(buf)), &buf[0], nil) + if err != nil { + return "", err + } + if n <= uint32(len(buf)) { + return UTF16ToString(buf[:n]), nil + } + } +} diff --git a/vendor/golang.org/x/sys/windows/memory_windows.go b/vendor/golang.org/x/sys/windows/memory_windows.go new file mode 100644 index 0000000..f80a420 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/memory_windows.go @@ -0,0 +1,26 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +const ( + MEM_COMMIT = 0x00001000 + MEM_RESERVE = 0x00002000 + MEM_DECOMMIT = 0x00004000 + MEM_RELEASE = 0x00008000 + MEM_RESET = 0x00080000 + MEM_TOP_DOWN = 0x00100000 + MEM_WRITE_WATCH = 0x00200000 + MEM_PHYSICAL = 0x00400000 + MEM_RESET_UNDO = 0x01000000 + MEM_LARGE_PAGES = 0x20000000 + + PAGE_NOACCESS = 0x01 + PAGE_READONLY = 0x02 + PAGE_READWRITE = 0x04 + PAGE_WRITECOPY = 0x08 + PAGE_EXECUTE_READ = 0x20 + PAGE_EXECUTE_READWRITE = 0x40 + PAGE_EXECUTE_WRITECOPY = 0x80 +) diff --git a/vendor/golang.org/x/sys/windows/mksyscall.go b/vendor/golang.org/x/sys/windows/mksyscall.go new file mode 100644 index 0000000..fb7db0e --- /dev/null +++ b/vendor/golang.org/x/sys/windows/mksyscall.go @@ -0,0 +1,7 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go eventlog.go service.go syscall_windows.go security_windows.go diff --git a/vendor/golang.org/x/sys/windows/race.go b/vendor/golang.org/x/sys/windows/race.go new file mode 100644 index 0000000..a74e3e2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race.go @@ -0,0 +1,30 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows,race + +package windows + +import ( + "runtime" + "unsafe" +) + +const raceenabled = true + +func raceAcquire(addr unsafe.Pointer) { + runtime.RaceAcquire(addr) +} + +func raceReleaseMerge(addr unsafe.Pointer) { + runtime.RaceReleaseMerge(addr) +} + +func raceReadRange(addr unsafe.Pointer, len int) { + runtime.RaceReadRange(addr, len) +} + +func raceWriteRange(addr unsafe.Pointer, len int) { + runtime.RaceWriteRange(addr, len) +} diff --git a/vendor/golang.org/x/sys/windows/race0.go b/vendor/golang.org/x/sys/windows/race0.go new file mode 100644 index 0000000..e44a3cb --- /dev/null +++ b/vendor/golang.org/x/sys/windows/race0.go @@ -0,0 +1,25 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows,!race + +package windows + +import ( + "unsafe" +) + +const raceenabled = false + +func raceAcquire(addr unsafe.Pointer) { +} + +func raceReleaseMerge(addr unsafe.Pointer) { +} + +func raceReadRange(addr unsafe.Pointer, len int) { +} + +func raceWriteRange(addr unsafe.Pointer, len int) { +} diff --git a/vendor/golang.org/x/sys/windows/registry/export_test.go b/vendor/golang.org/x/sys/windows/registry/export_test.go new file mode 100644 index 0000000..8badf6f --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/export_test.go @@ -0,0 +1,11 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package registry + +func (k Key) SetValue(name string, valtype uint32, data []byte) error { + return k.setValue(name, valtype, data) +} diff --git a/vendor/golang.org/x/sys/windows/registry/key.go b/vendor/golang.org/x/sys/windows/registry/key.go new file mode 100644 index 0000000..d0beb19 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/key.go @@ -0,0 +1,200 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package registry provides access to the Windows registry. +// +// Here is a simple example, opening a registry key and reading a string value from it. +// +// k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE) +// if err != nil { +// log.Fatal(err) +// } +// defer k.Close() +// +// s, _, err := k.GetStringValue("SystemRoot") +// if err != nil { +// log.Fatal(err) +// } +// fmt.Printf("Windows system root is %q\n", s) +// +package registry + +import ( + "io" + "syscall" + "time" +) + +const ( + // Registry key security and access rights. + // See https://msdn.microsoft.com/en-us/library/windows/desktop/ms724878.aspx + // for details. + ALL_ACCESS = 0xf003f + CREATE_LINK = 0x00020 + CREATE_SUB_KEY = 0x00004 + ENUMERATE_SUB_KEYS = 0x00008 + EXECUTE = 0x20019 + NOTIFY = 0x00010 + QUERY_VALUE = 0x00001 + READ = 0x20019 + SET_VALUE = 0x00002 + WOW64_32KEY = 0x00200 + WOW64_64KEY = 0x00100 + WRITE = 0x20006 +) + +// Key is a handle to an open Windows registry key. +// Keys can be obtained by calling OpenKey; there are +// also some predefined root keys such as CURRENT_USER. +// Keys can be used directly in the Windows API. +type Key syscall.Handle + +const ( + // Windows defines some predefined root keys that are always open. + // An application can use these keys as entry points to the registry. + // Normally these keys are used in OpenKey to open new keys, + // but they can also be used anywhere a Key is required. + CLASSES_ROOT = Key(syscall.HKEY_CLASSES_ROOT) + CURRENT_USER = Key(syscall.HKEY_CURRENT_USER) + LOCAL_MACHINE = Key(syscall.HKEY_LOCAL_MACHINE) + USERS = Key(syscall.HKEY_USERS) + CURRENT_CONFIG = Key(syscall.HKEY_CURRENT_CONFIG) + PERFORMANCE_DATA = Key(syscall.HKEY_PERFORMANCE_DATA) +) + +// Close closes open key k. +func (k Key) Close() error { + return syscall.RegCloseKey(syscall.Handle(k)) +} + +// OpenKey opens a new key with path name relative to key k. +// It accepts any open key, including CURRENT_USER and others, +// and returns the new key and an error. +// The access parameter specifies desired access rights to the +// key to be opened. +func OpenKey(k Key, path string, access uint32) (Key, error) { + p, err := syscall.UTF16PtrFromString(path) + if err != nil { + return 0, err + } + var subkey syscall.Handle + err = syscall.RegOpenKeyEx(syscall.Handle(k), p, 0, access, &subkey) + if err != nil { + return 0, err + } + return Key(subkey), nil +} + +// OpenRemoteKey opens a predefined registry key on another +// computer pcname. The key to be opened is specified by k, but +// can only be one of LOCAL_MACHINE, PERFORMANCE_DATA or USERS. +// If pcname is "", OpenRemoteKey returns local computer key. +func OpenRemoteKey(pcname string, k Key) (Key, error) { + var err error + var p *uint16 + if pcname != "" { + p, err = syscall.UTF16PtrFromString(`\\` + pcname) + if err != nil { + return 0, err + } + } + var remoteKey syscall.Handle + err = regConnectRegistry(p, syscall.Handle(k), &remoteKey) + if err != nil { + return 0, err + } + return Key(remoteKey), nil +} + +// ReadSubKeyNames returns the names of subkeys of key k. +// The parameter n controls the number of returned names, +// analogous to the way os.File.Readdirnames works. +func (k Key) ReadSubKeyNames(n int) ([]string, error) { + ki, err := k.Stat() + if err != nil { + return nil, err + } + names := make([]string, 0, ki.SubKeyCount) + buf := make([]uint16, ki.MaxSubKeyLen+1) // extra room for terminating zero byte +loopItems: + for i := uint32(0); ; i++ { + if n > 0 { + if len(names) == n { + return names, nil + } + } + l := uint32(len(buf)) + for { + err := syscall.RegEnumKeyEx(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil) + if err == nil { + break + } + if err == syscall.ERROR_MORE_DATA { + // Double buffer size and try again. + l = uint32(2 * len(buf)) + buf = make([]uint16, l) + continue + } + if err == _ERROR_NO_MORE_ITEMS { + break loopItems + } + return names, err + } + names = append(names, syscall.UTF16ToString(buf[:l])) + } + if n > len(names) { + return names, io.EOF + } + return names, nil +} + +// CreateKey creates a key named path under open key k. +// CreateKey returns the new key and a boolean flag that reports +// whether the key already existed. +// The access parameter specifies the access rights for the key +// to be created. +func CreateKey(k Key, path string, access uint32) (newk Key, openedExisting bool, err error) { + var h syscall.Handle + var d uint32 + err = regCreateKeyEx(syscall.Handle(k), syscall.StringToUTF16Ptr(path), + 0, nil, _REG_OPTION_NON_VOLATILE, access, nil, &h, &d) + if err != nil { + return 0, false, err + } + return Key(h), d == _REG_OPENED_EXISTING_KEY, nil +} + +// DeleteKey deletes the subkey path of key k and its values. +func DeleteKey(k Key, path string) error { + return regDeleteKey(syscall.Handle(k), syscall.StringToUTF16Ptr(path)) +} + +// A KeyInfo describes the statistics of a key. It is returned by Stat. +type KeyInfo struct { + SubKeyCount uint32 + MaxSubKeyLen uint32 // size of the key's subkey with the longest name, in Unicode characters, not including the terminating zero byte + ValueCount uint32 + MaxValueNameLen uint32 // size of the key's longest value name, in Unicode characters, not including the terminating zero byte + MaxValueLen uint32 // longest data component among the key's values, in bytes + lastWriteTime syscall.Filetime +} + +// ModTime returns the key's last write time. +func (ki *KeyInfo) ModTime() time.Time { + return time.Unix(0, ki.lastWriteTime.Nanoseconds()) +} + +// Stat retrieves information about the open key k. +func (k Key) Stat() (*KeyInfo, error) { + var ki KeyInfo + err := syscall.RegQueryInfoKey(syscall.Handle(k), nil, nil, nil, + &ki.SubKeyCount, &ki.MaxSubKeyLen, nil, &ki.ValueCount, + &ki.MaxValueNameLen, &ki.MaxValueLen, nil, &ki.lastWriteTime) + if err != nil { + return nil, err + } + return &ki, nil +} diff --git a/vendor/golang.org/x/sys/windows/registry/mksyscall.go b/vendor/golang.org/x/sys/windows/registry/mksyscall.go new file mode 100644 index 0000000..0ac95ff --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/mksyscall.go @@ -0,0 +1,7 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package registry + +//go:generate go run $GOROOT/src/syscall/mksyscall_windows.go -output zsyscall_windows.go syscall.go diff --git a/vendor/golang.org/x/sys/windows/registry/registry_test.go b/vendor/golang.org/x/sys/windows/registry/registry_test.go new file mode 100644 index 0000000..3cb9771 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/registry_test.go @@ -0,0 +1,756 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package registry_test + +import ( + "bytes" + "crypto/rand" + "os" + "syscall" + "testing" + "time" + "unsafe" + + "golang.org/x/sys/windows/registry" +) + +func randKeyName(prefix string) string { + const numbers = "0123456789" + buf := make([]byte, 10) + rand.Read(buf) + for i, b := range buf { + buf[i] = numbers[b%byte(len(numbers))] + } + return prefix + string(buf) +} + +func TestReadSubKeyNames(t *testing.T) { + k, err := registry.OpenKey(registry.CLASSES_ROOT, "TypeLib", registry.ENUMERATE_SUB_KEYS|registry.QUERY_VALUE) + if err != nil { + t.Fatal(err) + } + defer k.Close() + + names, err := k.ReadSubKeyNames(-1) + if err != nil { + t.Fatal(err) + } + var foundStdOle bool + for _, name := range names { + // Every PC has "stdole 2.0 OLE Automation" library installed. + if name == "{00020430-0000-0000-C000-000000000046}" { + foundStdOle = true + } + } + if !foundStdOle { + t.Fatal("could not find stdole 2.0 OLE Automation") + } +} + +func TestCreateOpenDeleteKey(t *testing.T) { + k, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) + if err != nil { + t.Fatal(err) + } + defer k.Close() + + testKName := randKeyName("TestCreateOpenDeleteKey_") + + testK, exist, err := registry.CreateKey(k, testKName, registry.CREATE_SUB_KEY) + if err != nil { + t.Fatal(err) + } + defer testK.Close() + + if exist { + t.Fatalf("key %q already exists", testKName) + } + + testKAgain, exist, err := registry.CreateKey(k, testKName, registry.CREATE_SUB_KEY) + if err != nil { + t.Fatal(err) + } + defer testKAgain.Close() + + if !exist { + t.Fatalf("key %q should already exist", testKName) + } + + testKOpened, err := registry.OpenKey(k, testKName, registry.ENUMERATE_SUB_KEYS) + if err != nil { + t.Fatal(err) + } + defer testKOpened.Close() + + err = registry.DeleteKey(k, testKName) + if err != nil { + t.Fatal(err) + } + + testKOpenedAgain, err := registry.OpenKey(k, testKName, registry.ENUMERATE_SUB_KEYS) + if err == nil { + defer testKOpenedAgain.Close() + t.Fatalf("key %q should already been deleted", testKName) + } + if err != registry.ErrNotExist { + t.Fatalf(`unexpected error ("not exist" expected): %v`, err) + } +} + +func equalStringSlice(a, b []string) bool { + if len(a) != len(b) { + return false + } + if a == nil { + return true + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} + +type ValueTest struct { + Type uint32 + Name string + Value interface{} + WillFail bool +} + +var ValueTests = []ValueTest{ + {Type: registry.SZ, Name: "String1", Value: ""}, + {Type: registry.SZ, Name: "String2", Value: "\000", WillFail: true}, + {Type: registry.SZ, Name: "String3", Value: "Hello World"}, + {Type: registry.SZ, Name: "String4", Value: "Hello World\000", WillFail: true}, + {Type: registry.EXPAND_SZ, Name: "ExpString1", Value: ""}, + {Type: registry.EXPAND_SZ, Name: "ExpString2", Value: "\000", WillFail: true}, + {Type: registry.EXPAND_SZ, Name: "ExpString3", Value: "Hello World"}, + {Type: registry.EXPAND_SZ, Name: "ExpString4", Value: "Hello\000World", WillFail: true}, + {Type: registry.EXPAND_SZ, Name: "ExpString5", Value: "%PATH%"}, + {Type: registry.EXPAND_SZ, Name: "ExpString6", Value: "%NO_SUCH_VARIABLE%"}, + {Type: registry.EXPAND_SZ, Name: "ExpString7", Value: "%PATH%;."}, + {Type: registry.BINARY, Name: "Binary1", Value: []byte{}}, + {Type: registry.BINARY, Name: "Binary2", Value: []byte{1, 2, 3}}, + {Type: registry.BINARY, Name: "Binary3", Value: []byte{3, 2, 1, 0, 1, 2, 3}}, + {Type: registry.DWORD, Name: "Dword1", Value: uint64(0)}, + {Type: registry.DWORD, Name: "Dword2", Value: uint64(1)}, + {Type: registry.DWORD, Name: "Dword3", Value: uint64(0xff)}, + {Type: registry.DWORD, Name: "Dword4", Value: uint64(0xffff)}, + {Type: registry.QWORD, Name: "Qword1", Value: uint64(0)}, + {Type: registry.QWORD, Name: "Qword2", Value: uint64(1)}, + {Type: registry.QWORD, Name: "Qword3", Value: uint64(0xff)}, + {Type: registry.QWORD, Name: "Qword4", Value: uint64(0xffff)}, + {Type: registry.QWORD, Name: "Qword5", Value: uint64(0xffffff)}, + {Type: registry.QWORD, Name: "Qword6", Value: uint64(0xffffffff)}, + {Type: registry.MULTI_SZ, Name: "MultiString1", Value: []string{"a", "b", "c"}}, + {Type: registry.MULTI_SZ, Name: "MultiString2", Value: []string{"abc", "", "cba"}}, + {Type: registry.MULTI_SZ, Name: "MultiString3", Value: []string{""}}, + {Type: registry.MULTI_SZ, Name: "MultiString4", Value: []string{"abcdef"}}, + {Type: registry.MULTI_SZ, Name: "MultiString5", Value: []string{"\000"}, WillFail: true}, + {Type: registry.MULTI_SZ, Name: "MultiString6", Value: []string{"a\000b"}, WillFail: true}, + {Type: registry.MULTI_SZ, Name: "MultiString7", Value: []string{"ab", "\000", "cd"}, WillFail: true}, + {Type: registry.MULTI_SZ, Name: "MultiString8", Value: []string{"\000", "cd"}, WillFail: true}, + {Type: registry.MULTI_SZ, Name: "MultiString9", Value: []string{"ab", "\000"}, WillFail: true}, +} + +func setValues(t *testing.T, k registry.Key) { + for _, test := range ValueTests { + var err error + switch test.Type { + case registry.SZ: + err = k.SetStringValue(test.Name, test.Value.(string)) + case registry.EXPAND_SZ: + err = k.SetExpandStringValue(test.Name, test.Value.(string)) + case registry.MULTI_SZ: + err = k.SetStringsValue(test.Name, test.Value.([]string)) + case registry.BINARY: + err = k.SetBinaryValue(test.Name, test.Value.([]byte)) + case registry.DWORD: + err = k.SetDWordValue(test.Name, uint32(test.Value.(uint64))) + case registry.QWORD: + err = k.SetQWordValue(test.Name, test.Value.(uint64)) + default: + t.Fatalf("unsupported type %d for %s value", test.Type, test.Name) + } + if test.WillFail { + if err == nil { + t.Fatalf("setting %s value %q should fail, but succeeded", test.Name, test.Value) + } + } else { + if err != nil { + t.Fatal(err) + } + } + } +} + +func enumerateValues(t *testing.T, k registry.Key) { + names, err := k.ReadValueNames(-1) + if err != nil { + t.Error(err) + return + } + haveNames := make(map[string]bool) + for _, n := range names { + haveNames[n] = false + } + for _, test := range ValueTests { + wantFound := !test.WillFail + _, haveFound := haveNames[test.Name] + if wantFound && !haveFound { + t.Errorf("value %s is not found while enumerating", test.Name) + } + if haveFound && !wantFound { + t.Errorf("value %s is found while enumerating, but expected to fail", test.Name) + } + if haveFound { + delete(haveNames, test.Name) + } + } + for n, v := range haveNames { + t.Errorf("value %s (%v) is found while enumerating, but has not been cretaed", n, v) + } +} + +func testErrNotExist(t *testing.T, name string, err error) { + if err == nil { + t.Errorf("%s value should not exist", name) + return + } + if err != registry.ErrNotExist { + t.Errorf("reading %s value should return 'not exist' error, but got: %s", name, err) + return + } +} + +func testErrUnexpectedType(t *testing.T, test ValueTest, gottype uint32, err error) { + if err == nil { + t.Errorf("GetXValue(%q) should not succeed", test.Name) + return + } + if err != registry.ErrUnexpectedType { + t.Errorf("reading %s value should return 'unexpected key value type' error, but got: %s", test.Name, err) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } +} + +func testGetStringValue(t *testing.T, k registry.Key, test ValueTest) { + got, gottype, err := k.GetStringValue(test.Name) + if err != nil { + t.Errorf("GetStringValue(%s) failed: %v", test.Name, err) + return + } + if got != test.Value { + t.Errorf("want %s value %q, got %q", test.Name, test.Value, got) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } + if gottype == registry.EXPAND_SZ { + _, err = registry.ExpandString(got) + if err != nil { + t.Errorf("ExpandString(%s) failed: %v", got, err) + return + } + } +} + +func testGetIntegerValue(t *testing.T, k registry.Key, test ValueTest) { + got, gottype, err := k.GetIntegerValue(test.Name) + if err != nil { + t.Errorf("GetIntegerValue(%s) failed: %v", test.Name, err) + return + } + if got != test.Value.(uint64) { + t.Errorf("want %s value %v, got %v", test.Name, test.Value, got) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } +} + +func testGetBinaryValue(t *testing.T, k registry.Key, test ValueTest) { + got, gottype, err := k.GetBinaryValue(test.Name) + if err != nil { + t.Errorf("GetBinaryValue(%s) failed: %v", test.Name, err) + return + } + if !bytes.Equal(got, test.Value.([]byte)) { + t.Errorf("want %s value %v, got %v", test.Name, test.Value, got) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } +} + +func testGetStringsValue(t *testing.T, k registry.Key, test ValueTest) { + got, gottype, err := k.GetStringsValue(test.Name) + if err != nil { + t.Errorf("GetStringsValue(%s) failed: %v", test.Name, err) + return + } + if !equalStringSlice(got, test.Value.([]string)) { + t.Errorf("want %s value %#v, got %#v", test.Name, test.Value, got) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } +} + +func testGetValue(t *testing.T, k registry.Key, test ValueTest, size int) { + if size <= 0 { + return + } + // read data with no buffer + gotsize, gottype, err := k.GetValue(test.Name, nil) + if err != nil { + t.Errorf("GetValue(%s, [%d]byte) failed: %v", test.Name, size, err) + return + } + if gotsize != size { + t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } + // read data with short buffer + gotsize, gottype, err = k.GetValue(test.Name, make([]byte, size-1)) + if err == nil { + t.Errorf("GetValue(%s, [%d]byte) should fail, but succeeded", test.Name, size-1) + return + } + if err != registry.ErrShortBuffer { + t.Errorf("reading %s value should return 'short buffer' error, but got: %s", test.Name, err) + return + } + if gotsize != size { + t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } + // read full data + gotsize, gottype, err = k.GetValue(test.Name, make([]byte, size)) + if err != nil { + t.Errorf("GetValue(%s, [%d]byte) failed: %v", test.Name, size, err) + return + } + if gotsize != size { + t.Errorf("want %s value size of %d, got %v", test.Name, size, gotsize) + return + } + if gottype != test.Type { + t.Errorf("want %s value type %v, got %v", test.Name, test.Type, gottype) + return + } + // check GetValue returns ErrNotExist as required + _, _, err = k.GetValue(test.Name+"_not_there", make([]byte, size)) + if err == nil { + t.Errorf("GetValue(%q) should not succeed", test.Name) + return + } + if err != registry.ErrNotExist { + t.Errorf("GetValue(%q) should return 'not exist' error, but got: %s", test.Name, err) + return + } +} + +func testValues(t *testing.T, k registry.Key) { + for _, test := range ValueTests { + switch test.Type { + case registry.SZ, registry.EXPAND_SZ: + if test.WillFail { + _, _, err := k.GetStringValue(test.Name) + testErrNotExist(t, test.Name, err) + } else { + testGetStringValue(t, k, test) + _, gottype, err := k.GetIntegerValue(test.Name) + testErrUnexpectedType(t, test, gottype, err) + // Size of utf16 string in bytes is not perfect, + // but correct for current test values. + // Size also includes terminating 0. + testGetValue(t, k, test, (len(test.Value.(string))+1)*2) + } + _, _, err := k.GetStringValue(test.Name + "_string_not_created") + testErrNotExist(t, test.Name+"_string_not_created", err) + case registry.DWORD, registry.QWORD: + testGetIntegerValue(t, k, test) + _, gottype, err := k.GetBinaryValue(test.Name) + testErrUnexpectedType(t, test, gottype, err) + _, _, err = k.GetIntegerValue(test.Name + "_int_not_created") + testErrNotExist(t, test.Name+"_int_not_created", err) + size := 8 + if test.Type == registry.DWORD { + size = 4 + } + testGetValue(t, k, test, size) + case registry.BINARY: + testGetBinaryValue(t, k, test) + _, gottype, err := k.GetStringsValue(test.Name) + testErrUnexpectedType(t, test, gottype, err) + _, _, err = k.GetBinaryValue(test.Name + "_byte_not_created") + testErrNotExist(t, test.Name+"_byte_not_created", err) + testGetValue(t, k, test, len(test.Value.([]byte))) + case registry.MULTI_SZ: + if test.WillFail { + _, _, err := k.GetStringsValue(test.Name) + testErrNotExist(t, test.Name, err) + } else { + testGetStringsValue(t, k, test) + _, gottype, err := k.GetStringValue(test.Name) + testErrUnexpectedType(t, test, gottype, err) + size := 0 + for _, s := range test.Value.([]string) { + size += len(s) + 1 // nil terminated + } + size += 1 // extra nil at the end + size *= 2 // count bytes, not uint16 + testGetValue(t, k, test, size) + } + _, _, err := k.GetStringsValue(test.Name + "_strings_not_created") + testErrNotExist(t, test.Name+"_strings_not_created", err) + default: + t.Errorf("unsupported type %d for %s value", test.Type, test.Name) + continue + } + } +} + +func testStat(t *testing.T, k registry.Key) { + subk, _, err := registry.CreateKey(k, "subkey", registry.CREATE_SUB_KEY) + if err != nil { + t.Error(err) + return + } + defer subk.Close() + + defer registry.DeleteKey(k, "subkey") + + ki, err := k.Stat() + if err != nil { + t.Error(err) + return + } + if ki.SubKeyCount != 1 { + t.Error("key must have 1 subkey") + } + if ki.MaxSubKeyLen != 6 { + t.Error("key max subkey name length must be 6") + } + if ki.ValueCount != 24 { + t.Errorf("key must have 24 values, but is %d", ki.ValueCount) + } + if ki.MaxValueNameLen != 12 { + t.Errorf("key max value name length must be 10, but is %d", ki.MaxValueNameLen) + } + if ki.MaxValueLen != 38 { + t.Errorf("key max value length must be 38, but is %d", ki.MaxValueLen) + } + if mt, ct := ki.ModTime(), time.Now(); ct.Sub(mt) > 100*time.Millisecond { + t.Errorf("key mod time is not close to current time: mtime=%v current=%v delta=%v", mt, ct, ct.Sub(mt)) + } +} + +func deleteValues(t *testing.T, k registry.Key) { + for _, test := range ValueTests { + if test.WillFail { + continue + } + err := k.DeleteValue(test.Name) + if err != nil { + t.Error(err) + continue + } + } + names, err := k.ReadValueNames(-1) + if err != nil { + t.Error(err) + return + } + if len(names) != 0 { + t.Errorf("some values remain after deletion: %v", names) + } +} + +func TestValues(t *testing.T) { + softwareK, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) + if err != nil { + t.Fatal(err) + } + defer softwareK.Close() + + testKName := randKeyName("TestValues_") + + k, exist, err := registry.CreateKey(softwareK, testKName, registry.CREATE_SUB_KEY|registry.QUERY_VALUE|registry.SET_VALUE) + if err != nil { + t.Fatal(err) + } + defer k.Close() + + if exist { + t.Fatalf("key %q already exists", testKName) + } + + defer registry.DeleteKey(softwareK, testKName) + + setValues(t, k) + + enumerateValues(t, k) + + testValues(t, k) + + testStat(t, k) + + deleteValues(t, k) +} + +func walkKey(t *testing.T, k registry.Key, kname string) { + names, err := k.ReadValueNames(-1) + if err != nil { + t.Fatalf("reading value names of %s failed: %v", kname, err) + } + for _, name := range names { + _, valtype, err := k.GetValue(name, nil) + if err != nil { + t.Fatalf("reading value type of %s of %s failed: %v", name, kname, err) + } + switch valtype { + case registry.NONE: + case registry.SZ: + _, _, err := k.GetStringValue(name) + if err != nil { + t.Error(err) + } + case registry.EXPAND_SZ: + s, _, err := k.GetStringValue(name) + if err != nil { + t.Error(err) + } + _, err = registry.ExpandString(s) + if err != nil { + t.Error(err) + } + case registry.DWORD, registry.QWORD: + _, _, err := k.GetIntegerValue(name) + if err != nil { + t.Error(err) + } + case registry.BINARY: + _, _, err := k.GetBinaryValue(name) + if err != nil { + t.Error(err) + } + case registry.MULTI_SZ: + _, _, err := k.GetStringsValue(name) + if err != nil { + t.Error(err) + } + case registry.FULL_RESOURCE_DESCRIPTOR, registry.RESOURCE_LIST, registry.RESOURCE_REQUIREMENTS_LIST: + // TODO: not implemented + default: + t.Fatalf("value type %d of %s of %s failed: %v", valtype, name, kname, err) + } + } + + names, err = k.ReadSubKeyNames(-1) + if err != nil { + t.Fatalf("reading sub-keys of %s failed: %v", kname, err) + } + for _, name := range names { + func() { + subk, err := registry.OpenKey(k, name, registry.ENUMERATE_SUB_KEYS|registry.QUERY_VALUE) + if err != nil { + if err == syscall.ERROR_ACCESS_DENIED { + // ignore error, if we are not allowed to access this key + return + } + t.Fatalf("opening sub-keys %s of %s failed: %v", name, kname, err) + } + defer subk.Close() + + walkKey(t, subk, kname+`\`+name) + }() + } +} + +func TestWalkFullRegistry(t *testing.T) { + if testing.Short() { + t.Skip("skipping long running test in short mode") + } + walkKey(t, registry.CLASSES_ROOT, "CLASSES_ROOT") + walkKey(t, registry.CURRENT_USER, "CURRENT_USER") + walkKey(t, registry.LOCAL_MACHINE, "LOCAL_MACHINE") + walkKey(t, registry.USERS, "USERS") + walkKey(t, registry.CURRENT_CONFIG, "CURRENT_CONFIG") +} + +func TestExpandString(t *testing.T) { + got, err := registry.ExpandString("%PATH%") + if err != nil { + t.Fatal(err) + } + want := os.Getenv("PATH") + if got != want { + t.Errorf("want %q string expanded, got %q", want, got) + } +} + +func TestInvalidValues(t *testing.T) { + softwareK, err := registry.OpenKey(registry.CURRENT_USER, "Software", registry.QUERY_VALUE) + if err != nil { + t.Fatal(err) + } + defer softwareK.Close() + + testKName := randKeyName("TestInvalidValues_") + + k, exist, err := registry.CreateKey(softwareK, testKName, registry.CREATE_SUB_KEY|registry.QUERY_VALUE|registry.SET_VALUE) + if err != nil { + t.Fatal(err) + } + defer k.Close() + + if exist { + t.Fatalf("key %q already exists", testKName) + } + + defer registry.DeleteKey(softwareK, testKName) + + var tests = []struct { + Type uint32 + Name string + Data []byte + }{ + {registry.DWORD, "Dword1", nil}, + {registry.DWORD, "Dword2", []byte{1, 2, 3}}, + {registry.QWORD, "Qword1", nil}, + {registry.QWORD, "Qword2", []byte{1, 2, 3}}, + {registry.QWORD, "Qword3", []byte{1, 2, 3, 4, 5, 6, 7}}, + {registry.MULTI_SZ, "MultiString1", nil}, + {registry.MULTI_SZ, "MultiString2", []byte{0}}, + {registry.MULTI_SZ, "MultiString3", []byte{'a', 'b', 0}}, + {registry.MULTI_SZ, "MultiString4", []byte{'a', 0, 0, 'b', 0}}, + {registry.MULTI_SZ, "MultiString5", []byte{'a', 0, 0}}, + } + + for _, test := range tests { + err := k.SetValue(test.Name, test.Type, test.Data) + if err != nil { + t.Fatalf("SetValue for %q failed: %v", test.Name, err) + } + } + + for _, test := range tests { + switch test.Type { + case registry.DWORD, registry.QWORD: + value, valType, err := k.GetIntegerValue(test.Name) + if err == nil { + t.Errorf("GetIntegerValue(%q) succeeded. Returns type=%d value=%v", test.Name, valType, value) + } + case registry.MULTI_SZ: + value, valType, err := k.GetStringsValue(test.Name) + if err == nil { + if len(value) != 0 { + t.Errorf("GetStringsValue(%q) succeeded. Returns type=%d value=%v", test.Name, valType, value) + } + } + default: + t.Errorf("unsupported type %d for %s value", test.Type, test.Name) + } + } +} + +func TestGetMUIStringValue(t *testing.T) { + if err := registry.LoadRegLoadMUIString(); err != nil { + t.Skip("regLoadMUIString not supported; skipping") + } + if err := procGetDynamicTimeZoneInformation.Find(); err != nil { + t.Skipf("%s not supported; skipping", procGetDynamicTimeZoneInformation.Name) + } + var dtzi DynamicTimezoneinformation + if _, err := GetDynamicTimeZoneInformation(&dtzi); err != nil { + t.Fatal(err) + } + tzKeyName := syscall.UTF16ToString(dtzi.TimeZoneKeyName[:]) + timezoneK, err := registry.OpenKey(registry.LOCAL_MACHINE, + `SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\`+tzKeyName, registry.READ) + if err != nil { + t.Fatal(err) + } + defer timezoneK.Close() + + type testType struct { + name string + want string + } + var tests = []testType{ + {"MUI_Std", syscall.UTF16ToString(dtzi.StandardName[:])}, + } + if dtzi.DynamicDaylightTimeDisabled == 0 { + tests = append(tests, testType{"MUI_Dlt", syscall.UTF16ToString(dtzi.DaylightName[:])}) + } + + for _, test := range tests { + got, err := timezoneK.GetMUIStringValue(test.name) + if err != nil { + t.Error("GetMUIStringValue:", err) + } + + if got != test.want { + t.Errorf("GetMUIStringValue: %s: Got %q, want %q", test.name, got, test.want) + } + } +} + +type DynamicTimezoneinformation struct { + Bias int32 + StandardName [32]uint16 + StandardDate syscall.Systemtime + StandardBias int32 + DaylightName [32]uint16 + DaylightDate syscall.Systemtime + DaylightBias int32 + TimeZoneKeyName [128]uint16 + DynamicDaylightTimeDisabled uint8 +} + +var ( + kernel32DLL = syscall.NewLazyDLL("kernel32") + + procGetDynamicTimeZoneInformation = kernel32DLL.NewProc("GetDynamicTimeZoneInformation") +) + +func GetDynamicTimeZoneInformation(dtzi *DynamicTimezoneinformation) (rc uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetDynamicTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(dtzi)), 0, 0) + rc = uint32(r0) + if rc == 0xffffffff { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} diff --git a/vendor/golang.org/x/sys/windows/registry/syscall.go b/vendor/golang.org/x/sys/windows/registry/syscall.go new file mode 100644 index 0000000..e66643c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/syscall.go @@ -0,0 +1,32 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package registry + +import "syscall" + +const ( + _REG_OPTION_NON_VOLATILE = 0 + + _REG_CREATED_NEW_KEY = 1 + _REG_OPENED_EXISTING_KEY = 2 + + _ERROR_NO_MORE_ITEMS syscall.Errno = 259 +) + +func LoadRegLoadMUIString() error { + return procRegLoadMUIStringW.Find() +} + +//sys regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) = advapi32.RegCreateKeyExW +//sys regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) = advapi32.RegDeleteKeyW +//sys regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) = advapi32.RegSetValueExW +//sys regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegEnumValueW +//sys regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) = advapi32.RegDeleteValueW +//sys regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) = advapi32.RegLoadMUIStringW +//sys regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) = advapi32.RegConnectRegistryW + +//sys expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) = kernel32.ExpandEnvironmentStringsW diff --git a/vendor/golang.org/x/sys/windows/registry/value.go b/vendor/golang.org/x/sys/windows/registry/value.go new file mode 100644 index 0000000..71d4e15 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/value.go @@ -0,0 +1,384 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package registry + +import ( + "errors" + "io" + "syscall" + "unicode/utf16" + "unsafe" +) + +const ( + // Registry value types. + NONE = 0 + SZ = 1 + EXPAND_SZ = 2 + BINARY = 3 + DWORD = 4 + DWORD_BIG_ENDIAN = 5 + LINK = 6 + MULTI_SZ = 7 + RESOURCE_LIST = 8 + FULL_RESOURCE_DESCRIPTOR = 9 + RESOURCE_REQUIREMENTS_LIST = 10 + QWORD = 11 +) + +var ( + // ErrShortBuffer is returned when the buffer was too short for the operation. + ErrShortBuffer = syscall.ERROR_MORE_DATA + + // ErrNotExist is returned when a registry key or value does not exist. + ErrNotExist = syscall.ERROR_FILE_NOT_FOUND + + // ErrUnexpectedType is returned by Get*Value when the value's type was unexpected. + ErrUnexpectedType = errors.New("unexpected key value type") +) + +// GetValue retrieves the type and data for the specified value associated +// with an open key k. It fills up buffer buf and returns the retrieved +// byte count n. If buf is too small to fit the stored value it returns +// ErrShortBuffer error along with the required buffer size n. +// If no buffer is provided, it returns true and actual buffer size n. +// If no buffer is provided, GetValue returns the value's type only. +// If the value does not exist, the error returned is ErrNotExist. +// +// GetValue is a low level function. If value's type is known, use the appropriate +// Get*Value function instead. +func (k Key) GetValue(name string, buf []byte) (n int, valtype uint32, err error) { + pname, err := syscall.UTF16PtrFromString(name) + if err != nil { + return 0, 0, err + } + var pbuf *byte + if len(buf) > 0 { + pbuf = (*byte)(unsafe.Pointer(&buf[0])) + } + l := uint32(len(buf)) + err = syscall.RegQueryValueEx(syscall.Handle(k), pname, nil, &valtype, pbuf, &l) + if err != nil { + return int(l), valtype, err + } + return int(l), valtype, nil +} + +func (k Key) getValue(name string, buf []byte) (date []byte, valtype uint32, err error) { + p, err := syscall.UTF16PtrFromString(name) + if err != nil { + return nil, 0, err + } + var t uint32 + n := uint32(len(buf)) + for { + err = syscall.RegQueryValueEx(syscall.Handle(k), p, nil, &t, (*byte)(unsafe.Pointer(&buf[0])), &n) + if err == nil { + return buf[:n], t, nil + } + if err != syscall.ERROR_MORE_DATA { + return nil, 0, err + } + if n <= uint32(len(buf)) { + return nil, 0, err + } + buf = make([]byte, n) + } +} + +// GetStringValue retrieves the string value for the specified +// value name associated with an open key k. It also returns the value's type. +// If value does not exist, GetStringValue returns ErrNotExist. +// If value is not SZ or EXPAND_SZ, it will return the correct value +// type and ErrUnexpectedType. +func (k Key) GetStringValue(name string) (val string, valtype uint32, err error) { + data, typ, err2 := k.getValue(name, make([]byte, 64)) + if err2 != nil { + return "", typ, err2 + } + switch typ { + case SZ, EXPAND_SZ: + default: + return "", typ, ErrUnexpectedType + } + if len(data) == 0 { + return "", typ, nil + } + u := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:] + return syscall.UTF16ToString(u), typ, nil +} + +// GetMUIStringValue retrieves the localized string value for +// the specified value name associated with an open key k. +// If the value name doesn't exist or the localized string value +// can't be resolved, GetMUIStringValue returns ErrNotExist. +// GetMUIStringValue panics if the system doesn't support +// regLoadMUIString; use LoadRegLoadMUIString to check if +// regLoadMUIString is supported before calling this function. +func (k Key) GetMUIStringValue(name string) (string, error) { + pname, err := syscall.UTF16PtrFromString(name) + if err != nil { + return "", err + } + + buf := make([]uint16, 1024) + var buflen uint32 + var pdir *uint16 + + err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) + if err == syscall.ERROR_FILE_NOT_FOUND { // Try fallback path + + // Try to resolve the string value using the system directory as + // a DLL search path; this assumes the string value is of the form + // @[path]\dllname,-strID but with no path given, e.g. @tzres.dll,-320. + + // This approach works with tzres.dll but may have to be revised + // in the future to allow callers to provide custom search paths. + + var s string + s, err = ExpandString("%SystemRoot%\\system32\\") + if err != nil { + return "", err + } + pdir, err = syscall.UTF16PtrFromString(s) + if err != nil { + return "", err + } + + err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) + } + + for err == syscall.ERROR_MORE_DATA { // Grow buffer if needed + if buflen <= uint32(len(buf)) { + break // Buffer not growing, assume race; break + } + buf = make([]uint16, buflen) + err = regLoadMUIString(syscall.Handle(k), pname, &buf[0], uint32(len(buf)), &buflen, 0, pdir) + } + + if err != nil { + return "", err + } + + return syscall.UTF16ToString(buf), nil +} + +// ExpandString expands environment-variable strings and replaces +// them with the values defined for the current user. +// Use ExpandString to expand EXPAND_SZ strings. +func ExpandString(value string) (string, error) { + if value == "" { + return "", nil + } + p, err := syscall.UTF16PtrFromString(value) + if err != nil { + return "", err + } + r := make([]uint16, 100) + for { + n, err := expandEnvironmentStrings(p, &r[0], uint32(len(r))) + if err != nil { + return "", err + } + if n <= uint32(len(r)) { + u := (*[1 << 29]uint16)(unsafe.Pointer(&r[0]))[:] + return syscall.UTF16ToString(u), nil + } + r = make([]uint16, n) + } +} + +// GetStringsValue retrieves the []string value for the specified +// value name associated with an open key k. It also returns the value's type. +// If value does not exist, GetStringsValue returns ErrNotExist. +// If value is not MULTI_SZ, it will return the correct value +// type and ErrUnexpectedType. +func (k Key) GetStringsValue(name string) (val []string, valtype uint32, err error) { + data, typ, err2 := k.getValue(name, make([]byte, 64)) + if err2 != nil { + return nil, typ, err2 + } + if typ != MULTI_SZ { + return nil, typ, ErrUnexpectedType + } + if len(data) == 0 { + return nil, typ, nil + } + p := (*[1 << 29]uint16)(unsafe.Pointer(&data[0]))[:len(data)/2] + if len(p) == 0 { + return nil, typ, nil + } + if p[len(p)-1] == 0 { + p = p[:len(p)-1] // remove terminating null + } + val = make([]string, 0, 5) + from := 0 + for i, c := range p { + if c == 0 { + val = append(val, string(utf16.Decode(p[from:i]))) + from = i + 1 + } + } + return val, typ, nil +} + +// GetIntegerValue retrieves the integer value for the specified +// value name associated with an open key k. It also returns the value's type. +// If value does not exist, GetIntegerValue returns ErrNotExist. +// If value is not DWORD or QWORD, it will return the correct value +// type and ErrUnexpectedType. +func (k Key) GetIntegerValue(name string) (val uint64, valtype uint32, err error) { + data, typ, err2 := k.getValue(name, make([]byte, 8)) + if err2 != nil { + return 0, typ, err2 + } + switch typ { + case DWORD: + if len(data) != 4 { + return 0, typ, errors.New("DWORD value is not 4 bytes long") + } + return uint64(*(*uint32)(unsafe.Pointer(&data[0]))), DWORD, nil + case QWORD: + if len(data) != 8 { + return 0, typ, errors.New("QWORD value is not 8 bytes long") + } + return uint64(*(*uint64)(unsafe.Pointer(&data[0]))), QWORD, nil + default: + return 0, typ, ErrUnexpectedType + } +} + +// GetBinaryValue retrieves the binary value for the specified +// value name associated with an open key k. It also returns the value's type. +// If value does not exist, GetBinaryValue returns ErrNotExist. +// If value is not BINARY, it will return the correct value +// type and ErrUnexpectedType. +func (k Key) GetBinaryValue(name string) (val []byte, valtype uint32, err error) { + data, typ, err2 := k.getValue(name, make([]byte, 64)) + if err2 != nil { + return nil, typ, err2 + } + if typ != BINARY { + return nil, typ, ErrUnexpectedType + } + return data, typ, nil +} + +func (k Key) setValue(name string, valtype uint32, data []byte) error { + p, err := syscall.UTF16PtrFromString(name) + if err != nil { + return err + } + if len(data) == 0 { + return regSetValueEx(syscall.Handle(k), p, 0, valtype, nil, 0) + } + return regSetValueEx(syscall.Handle(k), p, 0, valtype, &data[0], uint32(len(data))) +} + +// SetDWordValue sets the data and type of a name value +// under key k to value and DWORD. +func (k Key) SetDWordValue(name string, value uint32) error { + return k.setValue(name, DWORD, (*[4]byte)(unsafe.Pointer(&value))[:]) +} + +// SetQWordValue sets the data and type of a name value +// under key k to value and QWORD. +func (k Key) SetQWordValue(name string, value uint64) error { + return k.setValue(name, QWORD, (*[8]byte)(unsafe.Pointer(&value))[:]) +} + +func (k Key) setStringValue(name string, valtype uint32, value string) error { + v, err := syscall.UTF16FromString(value) + if err != nil { + return err + } + buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] + return k.setValue(name, valtype, buf) +} + +// SetStringValue sets the data and type of a name value +// under key k to value and SZ. The value must not contain a zero byte. +func (k Key) SetStringValue(name, value string) error { + return k.setStringValue(name, SZ, value) +} + +// SetExpandStringValue sets the data and type of a name value +// under key k to value and EXPAND_SZ. The value must not contain a zero byte. +func (k Key) SetExpandStringValue(name, value string) error { + return k.setStringValue(name, EXPAND_SZ, value) +} + +// SetStringsValue sets the data and type of a name value +// under key k to value and MULTI_SZ. The value strings +// must not contain a zero byte. +func (k Key) SetStringsValue(name string, value []string) error { + ss := "" + for _, s := range value { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return errors.New("string cannot have 0 inside") + } + } + ss += s + "\x00" + } + v := utf16.Encode([]rune(ss + "\x00")) + buf := (*[1 << 29]byte)(unsafe.Pointer(&v[0]))[:len(v)*2] + return k.setValue(name, MULTI_SZ, buf) +} + +// SetBinaryValue sets the data and type of a name value +// under key k to value and BINARY. +func (k Key) SetBinaryValue(name string, value []byte) error { + return k.setValue(name, BINARY, value) +} + +// DeleteValue removes a named value from the key k. +func (k Key) DeleteValue(name string) error { + return regDeleteValue(syscall.Handle(k), syscall.StringToUTF16Ptr(name)) +} + +// ReadValueNames returns the value names of key k. +// The parameter n controls the number of returned names, +// analogous to the way os.File.Readdirnames works. +func (k Key) ReadValueNames(n int) ([]string, error) { + ki, err := k.Stat() + if err != nil { + return nil, err + } + names := make([]string, 0, ki.ValueCount) + buf := make([]uint16, ki.MaxValueNameLen+1) // extra room for terminating null character +loopItems: + for i := uint32(0); ; i++ { + if n > 0 { + if len(names) == n { + return names, nil + } + } + l := uint32(len(buf)) + for { + err := regEnumValue(syscall.Handle(k), i, &buf[0], &l, nil, nil, nil, nil) + if err == nil { + break + } + if err == syscall.ERROR_MORE_DATA { + // Double buffer size and try again. + l = uint32(2 * len(buf)) + buf = make([]uint16, l) + continue + } + if err == _ERROR_NO_MORE_ITEMS { + break loopItems + } + return names, err + } + names = append(names, syscall.UTF16ToString(buf[:l])) + } + if n > len(names) { + return names, io.EOF + } + return names, nil +} diff --git a/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go new file mode 100644 index 0000000..ceebdd7 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/registry/zsyscall_windows.go @@ -0,0 +1,120 @@ +// MACHINE GENERATED BY 'go generate' COMMAND; DO NOT EDIT + +package registry + +import ( + "syscall" + "unsafe" + + "golang.org/x/sys/windows" +) + +var _ unsafe.Pointer + +// Do the interface allocations only once for common +// Errno values. +const ( + errnoERROR_IO_PENDING = 997 +) + +var ( + errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return nil + case errnoERROR_IO_PENDING: + return errERROR_IO_PENDING + } + // TODO: add more here, after collecting data on the common + // error values see on Windows. (perhaps when running + // all.bat?) + return e +} + +var ( + modadvapi32 = windows.NewLazySystemDLL("advapi32.dll") + modkernel32 = windows.NewLazySystemDLL("kernel32.dll") + + procRegCreateKeyExW = modadvapi32.NewProc("RegCreateKeyExW") + procRegDeleteKeyW = modadvapi32.NewProc("RegDeleteKeyW") + procRegSetValueExW = modadvapi32.NewProc("RegSetValueExW") + procRegEnumValueW = modadvapi32.NewProc("RegEnumValueW") + procRegDeleteValueW = modadvapi32.NewProc("RegDeleteValueW") + procRegLoadMUIStringW = modadvapi32.NewProc("RegLoadMUIStringW") + procRegConnectRegistryW = modadvapi32.NewProc("RegConnectRegistryW") + procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW") +) + +func regCreateKeyEx(key syscall.Handle, subkey *uint16, reserved uint32, class *uint16, options uint32, desired uint32, sa *syscall.SecurityAttributes, result *syscall.Handle, disposition *uint32) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegCreateKeyExW.Addr(), 9, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(reserved), uintptr(unsafe.Pointer(class)), uintptr(options), uintptr(desired), uintptr(unsafe.Pointer(sa)), uintptr(unsafe.Pointer(result)), uintptr(unsafe.Pointer(disposition))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regDeleteKey(key syscall.Handle, subkey *uint16) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegDeleteKeyW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(subkey)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regSetValueEx(key syscall.Handle, valueName *uint16, reserved uint32, vtype uint32, buf *byte, bufsize uint32) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegSetValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(valueName)), uintptr(reserved), uintptr(vtype), uintptr(unsafe.Pointer(buf)), uintptr(bufsize)) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regEnumValue(key syscall.Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegEnumValueW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regDeleteValue(key syscall.Handle, name *uint16) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegDeleteValueW.Addr(), 2, uintptr(key), uintptr(unsafe.Pointer(name)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regLoadMUIString(key syscall.Handle, name *uint16, buf *uint16, buflen uint32, buflenCopied *uint32, flags uint32, dir *uint16) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegLoadMUIStringW.Addr(), 7, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(unsafe.Pointer(buflenCopied)), uintptr(flags), uintptr(unsafe.Pointer(dir)), 0, 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func regConnectRegistry(machinename *uint16, key syscall.Handle, result *syscall.Handle) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegConnectRegistryW.Addr(), 3, uintptr(unsafe.Pointer(machinename)), uintptr(key), uintptr(unsafe.Pointer(result))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func expandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go new file mode 100644 index 0000000..d8e7ff2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -0,0 +1,435 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import ( + "syscall" + "unsafe" +) + +const ( + STANDARD_RIGHTS_REQUIRED = 0xf0000 + STANDARD_RIGHTS_READ = 0x20000 + STANDARD_RIGHTS_WRITE = 0x20000 + STANDARD_RIGHTS_EXECUTE = 0x20000 + STANDARD_RIGHTS_ALL = 0x1F0000 +) + +const ( + NameUnknown = 0 + NameFullyQualifiedDN = 1 + NameSamCompatible = 2 + NameDisplay = 3 + NameUniqueId = 6 + NameCanonical = 7 + NameUserPrincipal = 8 + NameCanonicalEx = 9 + NameServicePrincipal = 10 + NameDnsDomain = 12 +) + +// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. +// http://blogs.msdn.com/b/drnick/archive/2007/12/19/windows-and-upn-format-credentials.aspx +//sys TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.TranslateNameW +//sys GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) [failretval&0xff==0] = secur32.GetUserNameExW + +// TranslateAccountName converts a directory service +// object name from one format to another. +func TranslateAccountName(username string, from, to uint32, initSize int) (string, error) { + u, e := UTF16PtrFromString(username) + if e != nil { + return "", e + } + n := uint32(50) + for { + b := make([]uint16, n) + e = TranslateName(u, from, to, &b[0], &n) + if e == nil { + return UTF16ToString(b[:n]), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", e + } + if n <= uint32(len(b)) { + return "", e + } + } +} + +const ( + // do not reorder + NetSetupUnknownStatus = iota + NetSetupUnjoined + NetSetupWorkgroupName + NetSetupDomainName +) + +type UserInfo10 struct { + Name *uint16 + Comment *uint16 + UsrComment *uint16 + FullName *uint16 +} + +//sys NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) = netapi32.NetUserGetInfo +//sys NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) = netapi32.NetGetJoinInformation +//sys NetApiBufferFree(buf *byte) (neterr error) = netapi32.NetApiBufferFree + +const ( + // do not reorder + SidTypeUser = 1 + iota + SidTypeGroup + SidTypeDomain + SidTypeAlias + SidTypeWellKnownGroup + SidTypeDeletedAccount + SidTypeInvalid + SidTypeUnknown + SidTypeComputer + SidTypeLabel +) + +type SidIdentifierAuthority struct { + Value [6]byte +} + +var ( + SECURITY_NULL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 0}} + SECURITY_WORLD_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 1}} + SECURITY_LOCAL_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 2}} + SECURITY_CREATOR_SID_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 3}} + SECURITY_NON_UNIQUE_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 4}} + SECURITY_NT_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 5}} + SECURITY_MANDATORY_LABEL_AUTHORITY = SidIdentifierAuthority{[6]byte{0, 0, 0, 0, 0, 16}} +) + +const ( + SECURITY_NULL_RID = 0 + SECURITY_WORLD_RID = 0 + SECURITY_LOCAL_RID = 0 + SECURITY_CREATOR_OWNER_RID = 0 + SECURITY_CREATOR_GROUP_RID = 1 + SECURITY_DIALUP_RID = 1 + SECURITY_NETWORK_RID = 2 + SECURITY_BATCH_RID = 3 + SECURITY_INTERACTIVE_RID = 4 + SECURITY_LOGON_IDS_RID = 5 + SECURITY_SERVICE_RID = 6 + SECURITY_LOCAL_SYSTEM_RID = 18 + SECURITY_BUILTIN_DOMAIN_RID = 32 + SECURITY_PRINCIPAL_SELF_RID = 10 + SECURITY_CREATOR_OWNER_SERVER_RID = 0x2 + SECURITY_CREATOR_GROUP_SERVER_RID = 0x3 + SECURITY_LOGON_IDS_RID_COUNT = 0x3 + SECURITY_ANONYMOUS_LOGON_RID = 0x7 + SECURITY_PROXY_RID = 0x8 + SECURITY_ENTERPRISE_CONTROLLERS_RID = 0x9 + SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID + SECURITY_AUTHENTICATED_USER_RID = 0xb + SECURITY_RESTRICTED_CODE_RID = 0xc + SECURITY_NT_NON_UNIQUE_RID = 0x15 +) + +//sys LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountSidW +//sys LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) = advapi32.LookupAccountNameW +//sys ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) = advapi32.ConvertSidToStringSidW +//sys ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) = advapi32.ConvertStringSidToSidW +//sys GetLengthSid(sid *SID) (len uint32) = advapi32.GetLengthSid +//sys CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) = advapi32.CopySid +//sys AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) = advapi32.AllocateAndInitializeSid +//sys FreeSid(sid *SID) (err error) [failretval!=0] = advapi32.FreeSid +//sys EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) = advapi32.EqualSid + +// The security identifier (SID) structure is a variable-length +// structure used to uniquely identify users or groups. +type SID struct{} + +// StringToSid converts a string-format security identifier +// sid into a valid, functional sid. +func StringToSid(s string) (*SID, error) { + var sid *SID + p, e := UTF16PtrFromString(s) + if e != nil { + return nil, e + } + e = ConvertStringSidToSid(p, &sid) + if e != nil { + return nil, e + } + defer LocalFree((Handle)(unsafe.Pointer(sid))) + return sid.Copy() +} + +// LookupSID retrieves a security identifier sid for the account +// and the name of the domain on which the account was found. +// System specify target computer to search. +func LookupSID(system, account string) (sid *SID, domain string, accType uint32, err error) { + if len(account) == 0 { + return nil, "", 0, syscall.EINVAL + } + acc, e := UTF16PtrFromString(account) + if e != nil { + return nil, "", 0, e + } + var sys *uint16 + if len(system) > 0 { + sys, e = UTF16PtrFromString(system) + if e != nil { + return nil, "", 0, e + } + } + n := uint32(50) + dn := uint32(50) + for { + b := make([]byte, n) + db := make([]uint16, dn) + sid = (*SID)(unsafe.Pointer(&b[0])) + e = LookupAccountName(sys, acc, sid, &n, &db[0], &dn, &accType) + if e == nil { + return sid, UTF16ToString(db), accType, nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return nil, "", 0, e + } + if n <= uint32(len(b)) { + return nil, "", 0, e + } + } +} + +// String converts sid to a string format +// suitable for display, storage, or transmission. +func (sid *SID) String() (string, error) { + var s *uint16 + e := ConvertSidToStringSid(sid, &s) + if e != nil { + return "", e + } + defer LocalFree((Handle)(unsafe.Pointer(s))) + return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:]), nil +} + +// Len returns the length, in bytes, of a valid security identifier sid. +func (sid *SID) Len() int { + return int(GetLengthSid(sid)) +} + +// Copy creates a duplicate of security identifier sid. +func (sid *SID) Copy() (*SID, error) { + b := make([]byte, sid.Len()) + sid2 := (*SID)(unsafe.Pointer(&b[0])) + e := CopySid(uint32(len(b)), sid2, sid) + if e != nil { + return nil, e + } + return sid2, nil +} + +// LookupAccount retrieves the name of the account for this sid +// and the name of the first domain on which this sid is found. +// System specify target computer to search for. +func (sid *SID) LookupAccount(system string) (account, domain string, accType uint32, err error) { + var sys *uint16 + if len(system) > 0 { + sys, err = UTF16PtrFromString(system) + if err != nil { + return "", "", 0, err + } + } + n := uint32(50) + dn := uint32(50) + for { + b := make([]uint16, n) + db := make([]uint16, dn) + e := LookupAccountSid(sys, sid, &b[0], &n, &db[0], &dn, &accType) + if e == nil { + return UTF16ToString(b), UTF16ToString(db), accType, nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", "", 0, e + } + if n <= uint32(len(b)) { + return "", "", 0, e + } + } +} + +const ( + // do not reorder + TOKEN_ASSIGN_PRIMARY = 1 << iota + TOKEN_DUPLICATE + TOKEN_IMPERSONATE + TOKEN_QUERY + TOKEN_QUERY_SOURCE + TOKEN_ADJUST_PRIVILEGES + TOKEN_ADJUST_GROUPS + TOKEN_ADJUST_DEFAULT + + TOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | + TOKEN_ASSIGN_PRIMARY | + TOKEN_DUPLICATE | + TOKEN_IMPERSONATE | + TOKEN_QUERY | + TOKEN_QUERY_SOURCE | + TOKEN_ADJUST_PRIVILEGES | + TOKEN_ADJUST_GROUPS | + TOKEN_ADJUST_DEFAULT + TOKEN_READ = STANDARD_RIGHTS_READ | TOKEN_QUERY + TOKEN_WRITE = STANDARD_RIGHTS_WRITE | + TOKEN_ADJUST_PRIVILEGES | + TOKEN_ADJUST_GROUPS | + TOKEN_ADJUST_DEFAULT + TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE +) + +const ( + // do not reorder + TokenUser = 1 + iota + TokenGroups + TokenPrivileges + TokenOwner + TokenPrimaryGroup + TokenDefaultDacl + TokenSource + TokenType + TokenImpersonationLevel + TokenStatistics + TokenRestrictedSids + TokenSessionId + TokenGroupsAndPrivileges + TokenSessionReference + TokenSandBoxInert + TokenAuditPolicy + TokenOrigin + TokenElevationType + TokenLinkedToken + TokenElevation + TokenHasRestrictions + TokenAccessInformation + TokenVirtualizationAllowed + TokenVirtualizationEnabled + TokenIntegrityLevel + TokenUIAccess + TokenMandatoryPolicy + TokenLogonSid + MaxTokenInfoClass +) + +type SIDAndAttributes struct { + Sid *SID + Attributes uint32 +} + +type Tokenuser struct { + User SIDAndAttributes +} + +type Tokenprimarygroup struct { + PrimaryGroup *SID +} + +type Tokengroups struct { + GroupCount uint32 + Groups [1]SIDAndAttributes +} + +//sys OpenProcessToken(h Handle, access uint32, token *Token) (err error) = advapi32.OpenProcessToken +//sys GetTokenInformation(t Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) = advapi32.GetTokenInformation +//sys GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) = userenv.GetUserProfileDirectoryW + +// An access token contains the security information for a logon session. +// The system creates an access token when a user logs on, and every +// process executed on behalf of the user has a copy of the token. +// The token identifies the user, the user's groups, and the user's +// privileges. The system uses the token to control access to securable +// objects and to control the ability of the user to perform various +// system-related operations on the local computer. +type Token Handle + +// OpenCurrentProcessToken opens the access token +// associated with current process. +func OpenCurrentProcessToken() (Token, error) { + p, e := GetCurrentProcess() + if e != nil { + return 0, e + } + var t Token + e = OpenProcessToken(p, TOKEN_QUERY, &t) + if e != nil { + return 0, e + } + return t, nil +} + +// Close releases access to access token. +func (t Token) Close() error { + return CloseHandle(Handle(t)) +} + +// getInfo retrieves a specified type of information about an access token. +func (t Token) getInfo(class uint32, initSize int) (unsafe.Pointer, error) { + n := uint32(initSize) + for { + b := make([]byte, n) + e := GetTokenInformation(t, class, &b[0], uint32(len(b)), &n) + if e == nil { + return unsafe.Pointer(&b[0]), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return nil, e + } + if n <= uint32(len(b)) { + return nil, e + } + } +} + +// GetTokenUser retrieves access token t user account information. +func (t Token) GetTokenUser() (*Tokenuser, error) { + i, e := t.getInfo(TokenUser, 50) + if e != nil { + return nil, e + } + return (*Tokenuser)(i), nil +} + +// GetTokenGroups retrieves group accounts associated with access token t. +func (t Token) GetTokenGroups() (*Tokengroups, error) { + i, e := t.getInfo(TokenGroups, 50) + if e != nil { + return nil, e + } + return (*Tokengroups)(i), nil +} + +// GetTokenPrimaryGroup retrieves access token t primary group information. +// A pointer to a SID structure representing a group that will become +// the primary group of any objects created by a process using this access token. +func (t Token) GetTokenPrimaryGroup() (*Tokenprimarygroup, error) { + i, e := t.getInfo(TokenPrimaryGroup, 50) + if e != nil { + return nil, e + } + return (*Tokenprimarygroup)(i), nil +} + +// GetUserProfileDirectory retrieves path to the +// root directory of the access token t user's profile. +func (t Token) GetUserProfileDirectory() (string, error) { + n := uint32(100) + for { + b := make([]uint16, n) + e := GetUserProfileDirectory(t, &b[0], &n) + if e == nil { + return UTF16ToString(b), nil + } + if e != ERROR_INSUFFICIENT_BUFFER { + return "", e + } + if n <= uint32(len(b)) { + return "", e + } + } +} diff --git a/vendor/golang.org/x/sys/windows/service.go b/vendor/golang.org/x/sys/windows/service.go new file mode 100644 index 0000000..a500dd7 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/service.go @@ -0,0 +1,164 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package windows + +const ( + SC_MANAGER_CONNECT = 1 + SC_MANAGER_CREATE_SERVICE = 2 + SC_MANAGER_ENUMERATE_SERVICE = 4 + SC_MANAGER_LOCK = 8 + SC_MANAGER_QUERY_LOCK_STATUS = 16 + SC_MANAGER_MODIFY_BOOT_CONFIG = 32 + SC_MANAGER_ALL_ACCESS = 0xf003f +) + +//sys OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenSCManagerW + +const ( + SERVICE_KERNEL_DRIVER = 1 + SERVICE_FILE_SYSTEM_DRIVER = 2 + SERVICE_ADAPTER = 4 + SERVICE_RECOGNIZER_DRIVER = 8 + SERVICE_WIN32_OWN_PROCESS = 16 + SERVICE_WIN32_SHARE_PROCESS = 32 + SERVICE_WIN32 = SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS + SERVICE_INTERACTIVE_PROCESS = 256 + SERVICE_DRIVER = SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER + SERVICE_TYPE_ALL = SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS + + SERVICE_BOOT_START = 0 + SERVICE_SYSTEM_START = 1 + SERVICE_AUTO_START = 2 + SERVICE_DEMAND_START = 3 + SERVICE_DISABLED = 4 + + SERVICE_ERROR_IGNORE = 0 + SERVICE_ERROR_NORMAL = 1 + SERVICE_ERROR_SEVERE = 2 + SERVICE_ERROR_CRITICAL = 3 + + SC_STATUS_PROCESS_INFO = 0 + + SERVICE_STOPPED = 1 + SERVICE_START_PENDING = 2 + SERVICE_STOP_PENDING = 3 + SERVICE_RUNNING = 4 + SERVICE_CONTINUE_PENDING = 5 + SERVICE_PAUSE_PENDING = 6 + SERVICE_PAUSED = 7 + SERVICE_NO_CHANGE = 0xffffffff + + SERVICE_ACCEPT_STOP = 1 + SERVICE_ACCEPT_PAUSE_CONTINUE = 2 + SERVICE_ACCEPT_SHUTDOWN = 4 + SERVICE_ACCEPT_PARAMCHANGE = 8 + SERVICE_ACCEPT_NETBINDCHANGE = 16 + SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32 + SERVICE_ACCEPT_POWEREVENT = 64 + SERVICE_ACCEPT_SESSIONCHANGE = 128 + + SERVICE_CONTROL_STOP = 1 + SERVICE_CONTROL_PAUSE = 2 + SERVICE_CONTROL_CONTINUE = 3 + SERVICE_CONTROL_INTERROGATE = 4 + SERVICE_CONTROL_SHUTDOWN = 5 + SERVICE_CONTROL_PARAMCHANGE = 6 + SERVICE_CONTROL_NETBINDADD = 7 + SERVICE_CONTROL_NETBINDREMOVE = 8 + SERVICE_CONTROL_NETBINDENABLE = 9 + SERVICE_CONTROL_NETBINDDISABLE = 10 + SERVICE_CONTROL_DEVICEEVENT = 11 + SERVICE_CONTROL_HARDWAREPROFILECHANGE = 12 + SERVICE_CONTROL_POWEREVENT = 13 + SERVICE_CONTROL_SESSIONCHANGE = 14 + + SERVICE_ACTIVE = 1 + SERVICE_INACTIVE = 2 + SERVICE_STATE_ALL = 3 + + SERVICE_QUERY_CONFIG = 1 + SERVICE_CHANGE_CONFIG = 2 + SERVICE_QUERY_STATUS = 4 + SERVICE_ENUMERATE_DEPENDENTS = 8 + SERVICE_START = 16 + SERVICE_STOP = 32 + SERVICE_PAUSE_CONTINUE = 64 + SERVICE_INTERROGATE = 128 + SERVICE_USER_DEFINED_CONTROL = 256 + SERVICE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG | SERVICE_QUERY_STATUS | SERVICE_ENUMERATE_DEPENDENTS | SERVICE_START | SERVICE_STOP | SERVICE_PAUSE_CONTINUE | SERVICE_INTERROGATE | SERVICE_USER_DEFINED_CONTROL + SERVICE_RUNS_IN_SYSTEM_PROCESS = 1 + SERVICE_CONFIG_DESCRIPTION = 1 + SERVICE_CONFIG_FAILURE_ACTIONS = 2 + + NO_ERROR = 0 + + SC_ENUM_PROCESS_INFO = 0 +) + +type SERVICE_STATUS struct { + ServiceType uint32 + CurrentState uint32 + ControlsAccepted uint32 + Win32ExitCode uint32 + ServiceSpecificExitCode uint32 + CheckPoint uint32 + WaitHint uint32 +} + +type SERVICE_TABLE_ENTRY struct { + ServiceName *uint16 + ServiceProc uintptr +} + +type QUERY_SERVICE_CONFIG struct { + ServiceType uint32 + StartType uint32 + ErrorControl uint32 + BinaryPathName *uint16 + LoadOrderGroup *uint16 + TagId uint32 + Dependencies *uint16 + ServiceStartName *uint16 + DisplayName *uint16 +} + +type SERVICE_DESCRIPTION struct { + Description *uint16 +} + +type SERVICE_STATUS_PROCESS struct { + ServiceType uint32 + CurrentState uint32 + ControlsAccepted uint32 + Win32ExitCode uint32 + ServiceSpecificExitCode uint32 + CheckPoint uint32 + WaitHint uint32 + ProcessId uint32 + ServiceFlags uint32 +} + +type ENUM_SERVICE_STATUS_PROCESS struct { + ServiceName *uint16 + DisplayName *uint16 + ServiceStatusProcess SERVICE_STATUS_PROCESS +} + +//sys CloseServiceHandle(handle Handle) (err error) = advapi32.CloseServiceHandle +//sys CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) [failretval==0] = advapi32.CreateServiceW +//sys OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) [failretval==0] = advapi32.OpenServiceW +//sys DeleteService(service Handle) (err error) = advapi32.DeleteService +//sys StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) = advapi32.StartServiceW +//sys QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) = advapi32.QueryServiceStatus +//sys ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) = advapi32.ControlService +//sys StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) = advapi32.StartServiceCtrlDispatcherW +//sys SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) = advapi32.SetServiceStatus +//sys ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) = advapi32.ChangeServiceConfigW +//sys QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfigW +//sys ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) = advapi32.ChangeServiceConfig2W +//sys QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) = advapi32.QueryServiceConfig2W +//sys EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) = advapi32.EnumServicesStatusExW diff --git a/vendor/golang.org/x/sys/windows/str.go b/vendor/golang.org/x/sys/windows/str.go new file mode 100644 index 0000000..917cc2a --- /dev/null +++ b/vendor/golang.org/x/sys/windows/str.go @@ -0,0 +1,22 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package windows + +func itoa(val int) string { // do it here rather than with fmt to avoid dependency + if val < 0 { + return "-" + itoa(-val) + } + var buf [32]byte // big enough for int64 + i := len(buf) - 1 + for val >= 10 { + buf[i] = byte(val%10 + '0') + i-- + val /= 10 + } + buf[i] = byte(val + '0') + return string(buf[i:]) +} diff --git a/vendor/golang.org/x/sys/windows/svc/debug/log.go b/vendor/golang.org/x/sys/windows/svc/debug/log.go new file mode 100644 index 0000000..e51ab42 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/debug/log.go @@ -0,0 +1,56 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package debug + +import ( + "os" + "strconv" +) + +// Log interface allows different log implementations to be used. +type Log interface { + Close() error + Info(eid uint32, msg string) error + Warning(eid uint32, msg string) error + Error(eid uint32, msg string) error +} + +// ConsoleLog provides access to the console. +type ConsoleLog struct { + Name string +} + +// New creates new ConsoleLog. +func New(source string) *ConsoleLog { + return &ConsoleLog{Name: source} +} + +// Close closes console log l. +func (l *ConsoleLog) Close() error { + return nil +} + +func (l *ConsoleLog) report(kind string, eid uint32, msg string) error { + s := l.Name + "." + kind + "(" + strconv.Itoa(int(eid)) + "): " + msg + "\n" + _, err := os.Stdout.Write([]byte(s)) + return err +} + +// Info writes an information event msg with event id eid to the console l. +func (l *ConsoleLog) Info(eid uint32, msg string) error { + return l.report("info", eid, msg) +} + +// Warning writes an warning event msg with event id eid to the console l. +func (l *ConsoleLog) Warning(eid uint32, msg string) error { + return l.report("warn", eid, msg) +} + +// Error writes an error event msg with event id eid to the console l. +func (l *ConsoleLog) Error(eid uint32, msg string) error { + return l.report("error", eid, msg) +} diff --git a/vendor/golang.org/x/sys/windows/svc/debug/service.go b/vendor/golang.org/x/sys/windows/svc/debug/service.go new file mode 100644 index 0000000..123df98 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/debug/service.go @@ -0,0 +1,45 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package debug provides facilities to execute svc.Handler on console. +// +package debug + +import ( + "os" + "os/signal" + "syscall" + + "golang.org/x/sys/windows/svc" +) + +// Run executes service name by calling appropriate handler function. +// The process is running on console, unlike real service. Use Ctrl+C to +// send "Stop" command to your service. +func Run(name string, handler svc.Handler) error { + cmds := make(chan svc.ChangeRequest) + changes := make(chan svc.Status) + + sig := make(chan os.Signal) + signal.Notify(sig) + + go func() { + status := svc.Status{State: svc.Stopped} + for { + select { + case <-sig: + cmds <- svc.ChangeRequest{svc.Stop, 0, 0, status} + case status = <-changes: + } + } + }() + + _, errno := handler.Execute([]string{name}, cmds, changes) + if errno != 0 { + return syscall.Errno(errno) + } + return nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/event.go b/vendor/golang.org/x/sys/windows/svc/event.go new file mode 100644 index 0000000..0508e22 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/event.go @@ -0,0 +1,48 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package svc + +import ( + "errors" + + "golang.org/x/sys/windows" +) + +// event represents auto-reset, initially non-signaled Windows event. +// It is used to communicate between go and asm parts of this package. +type event struct { + h windows.Handle +} + +func newEvent() (*event, error) { + h, err := windows.CreateEvent(nil, 0, 0, nil) + if err != nil { + return nil, err + } + return &event{h: h}, nil +} + +func (e *event) Close() error { + return windows.CloseHandle(e.h) +} + +func (e *event) Set() error { + return windows.SetEvent(e.h) +} + +func (e *event) Wait() error { + s, err := windows.WaitForSingleObject(e.h, windows.INFINITE) + switch s { + case windows.WAIT_OBJECT_0: + break + case windows.WAIT_FAILED: + return err + default: + return errors.New("unexpected result from WaitForSingleObject") + } + return nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/install.go b/vendor/golang.org/x/sys/windows/svc/eventlog/install.go new file mode 100644 index 0000000..c76a376 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/eventlog/install.go @@ -0,0 +1,80 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package eventlog + +import ( + "errors" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/registry" +) + +const ( + // Log levels. + Info = windows.EVENTLOG_INFORMATION_TYPE + Warning = windows.EVENTLOG_WARNING_TYPE + Error = windows.EVENTLOG_ERROR_TYPE +) + +const addKeyName = `SYSTEM\CurrentControlSet\Services\EventLog\Application` + +// Install modifies PC registry to allow logging with an event source src. +// It adds all required keys and values to the event log registry key. +// Install uses msgFile as the event message file. If useExpandKey is true, +// the event message file is installed as REG_EXPAND_SZ value, +// otherwise as REG_SZ. Use bitwise of log.Error, log.Warning and +// log.Info to specify events supported by the new event source. +func Install(src, msgFile string, useExpandKey bool, eventsSupported uint32) error { + appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.CREATE_SUB_KEY) + if err != nil { + return err + } + defer appkey.Close() + + sk, alreadyExist, err := registry.CreateKey(appkey, src, registry.SET_VALUE) + if err != nil { + return err + } + defer sk.Close() + if alreadyExist { + return errors.New(addKeyName + `\` + src + " registry key already exists") + } + + err = sk.SetDWordValue("CustomSource", 1) + if err != nil { + return err + } + if useExpandKey { + err = sk.SetExpandStringValue("EventMessageFile", msgFile) + } else { + err = sk.SetStringValue("EventMessageFile", msgFile) + } + if err != nil { + return err + } + err = sk.SetDWordValue("TypesSupported", eventsSupported) + if err != nil { + return err + } + return nil +} + +// InstallAsEventCreate is the same as Install, but uses +// %SystemRoot%\System32\EventCreate.exe as the event message file. +func InstallAsEventCreate(src string, eventsSupported uint32) error { + return Install(src, "%SystemRoot%\\System32\\EventCreate.exe", true, eventsSupported) +} + +// Remove deletes all registry elements installed by the correspondent Install. +func Remove(src string) error { + appkey, err := registry.OpenKey(registry.LOCAL_MACHINE, addKeyName, registry.SET_VALUE) + if err != nil { + return err + } + defer appkey.Close() + return registry.DeleteKey(appkey, src) +} diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/log.go b/vendor/golang.org/x/sys/windows/svc/eventlog/log.go new file mode 100644 index 0000000..46e5153 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/eventlog/log.go @@ -0,0 +1,70 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package eventlog implements access to Windows event log. +// +package eventlog + +import ( + "errors" + "syscall" + + "golang.org/x/sys/windows" +) + +// Log provides access to the system log. +type Log struct { + Handle windows.Handle +} + +// Open retrieves a handle to the specified event log. +func Open(source string) (*Log, error) { + return OpenRemote("", source) +} + +// OpenRemote does the same as Open, but on different computer host. +func OpenRemote(host, source string) (*Log, error) { + if source == "" { + return nil, errors.New("Specify event log source") + } + var s *uint16 + if host != "" { + s = syscall.StringToUTF16Ptr(host) + } + h, err := windows.RegisterEventSource(s, syscall.StringToUTF16Ptr(source)) + if err != nil { + return nil, err + } + return &Log{Handle: h}, nil +} + +// Close closes event log l. +func (l *Log) Close() error { + return windows.DeregisterEventSource(l.Handle) +} + +func (l *Log) report(etype uint16, eid uint32, msg string) error { + ss := []*uint16{syscall.StringToUTF16Ptr(msg)} + return windows.ReportEvent(l.Handle, etype, 0, eid, 0, 1, 0, &ss[0], nil) +} + +// Info writes an information event msg with event id eid to the end of event log l. +// When EventCreate.exe is used, eid must be between 1 and 1000. +func (l *Log) Info(eid uint32, msg string) error { + return l.report(windows.EVENTLOG_INFORMATION_TYPE, eid, msg) +} + +// Warning writes an warning event msg with event id eid to the end of event log l. +// When EventCreate.exe is used, eid must be between 1 and 1000. +func (l *Log) Warning(eid uint32, msg string) error { + return l.report(windows.EVENTLOG_WARNING_TYPE, eid, msg) +} + +// Error writes an error event msg with event id eid to the end of event log l. +// When EventCreate.exe is used, eid must be between 1 and 1000. +func (l *Log) Error(eid uint32, msg string) error { + return l.report(windows.EVENTLOG_ERROR_TYPE, eid, msg) +} diff --git a/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go b/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go new file mode 100644 index 0000000..6fbbd4a --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/eventlog/log_test.go @@ -0,0 +1,51 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package eventlog_test + +import ( + "testing" + + "golang.org/x/sys/windows/svc/eventlog" +) + +func TestLog(t *testing.T) { + if testing.Short() { + t.Skip("skipping test in short mode - it modifies system logs") + } + + const name = "mylog" + const supports = eventlog.Error | eventlog.Warning | eventlog.Info + err := eventlog.InstallAsEventCreate(name, supports) + if err != nil { + t.Fatalf("Install failed: %s", err) + } + defer func() { + err = eventlog.Remove(name) + if err != nil { + t.Fatalf("Remove failed: %s", err) + } + }() + + l, err := eventlog.Open(name) + if err != nil { + t.Fatalf("Open failed: %s", err) + } + defer l.Close() + + err = l.Info(1, "info") + if err != nil { + t.Fatalf("Info failed: %s", err) + } + err = l.Warning(2, "warning") + if err != nil { + t.Fatalf("Warning failed: %s", err) + } + err = l.Error(3, "error") + if err != nil { + t.Fatalf("Error failed: %s", err) + } +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/beep.go b/vendor/golang.org/x/sys/windows/svc/example/beep.go new file mode 100644 index 0000000..dcf2340 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/beep.go @@ -0,0 +1,22 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package main + +import ( + "syscall" +) + +// BUG(brainman): MessageBeep Windows api is broken on Windows 7, +// so this example does not beep when runs as service on Windows 7. + +var ( + beepFunc = syscall.MustLoadDLL("user32.dll").MustFindProc("MessageBeep") +) + +func beep() { + beepFunc.Call(0xffffffff) +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/install.go b/vendor/golang.org/x/sys/windows/svc/example/install.go new file mode 100644 index 0000000..39cb00d --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/install.go @@ -0,0 +1,92 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package main + +import ( + "fmt" + "os" + "path/filepath" + + "golang.org/x/sys/windows/svc/eventlog" + "golang.org/x/sys/windows/svc/mgr" +) + +func exePath() (string, error) { + prog := os.Args[0] + p, err := filepath.Abs(prog) + if err != nil { + return "", err + } + fi, err := os.Stat(p) + if err == nil { + if !fi.Mode().IsDir() { + return p, nil + } + err = fmt.Errorf("%s is directory", p) + } + if filepath.Ext(p) == "" { + p += ".exe" + fi, err := os.Stat(p) + if err == nil { + if !fi.Mode().IsDir() { + return p, nil + } + err = fmt.Errorf("%s is directory", p) + } + } + return "", err +} + +func installService(name, desc string) error { + exepath, err := exePath() + if err != nil { + return err + } + m, err := mgr.Connect() + if err != nil { + return err + } + defer m.Disconnect() + s, err := m.OpenService(name) + if err == nil { + s.Close() + return fmt.Errorf("service %s already exists", name) + } + s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: desc}, "is", "auto-started") + if err != nil { + return err + } + defer s.Close() + err = eventlog.InstallAsEventCreate(name, eventlog.Error|eventlog.Warning|eventlog.Info) + if err != nil { + s.Delete() + return fmt.Errorf("SetupEventLogSource() failed: %s", err) + } + return nil +} + +func removeService(name string) error { + m, err := mgr.Connect() + if err != nil { + return err + } + defer m.Disconnect() + s, err := m.OpenService(name) + if err != nil { + return fmt.Errorf("service %s is not installed", name) + } + defer s.Close() + err = s.Delete() + if err != nil { + return err + } + err = eventlog.Remove(name) + if err != nil { + return fmt.Errorf("RemoveEventLogSource() failed: %s", err) + } + return nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/main.go b/vendor/golang.org/x/sys/windows/svc/example/main.go new file mode 100644 index 0000000..dc96c08 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/main.go @@ -0,0 +1,76 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Example service program that beeps. +// +// The program demonstrates how to create Windows service and +// install / remove it on a computer. It also shows how to +// stop / start / pause / continue any service, and how to +// write to event log. It also shows how to use debug +// facilities available in debug package. +// +package main + +import ( + "fmt" + "log" + "os" + "strings" + + "golang.org/x/sys/windows/svc" +) + +func usage(errmsg string) { + fmt.Fprintf(os.Stderr, + "%s\n\n"+ + "usage: %s \n"+ + " where is one of\n"+ + " install, remove, debug, start, stop, pause or continue.\n", + errmsg, os.Args[0]) + os.Exit(2) +} + +func main() { + const svcName = "myservice" + + isIntSess, err := svc.IsAnInteractiveSession() + if err != nil { + log.Fatalf("failed to determine if we are running in an interactive session: %v", err) + } + if !isIntSess { + runService(svcName, false) + return + } + + if len(os.Args) < 2 { + usage("no command specified") + } + + cmd := strings.ToLower(os.Args[1]) + switch cmd { + case "debug": + runService(svcName, true) + return + case "install": + err = installService(svcName, "my service") + case "remove": + err = removeService(svcName) + case "start": + err = startService(svcName) + case "stop": + err = controlService(svcName, svc.Stop, svc.Stopped) + case "pause": + err = controlService(svcName, svc.Pause, svc.Paused) + case "continue": + err = controlService(svcName, svc.Continue, svc.Running) + default: + usage(fmt.Sprintf("invalid command %s", cmd)) + } + if err != nil { + log.Fatalf("failed to %s %s: %v", cmd, svcName, err) + } + return +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/manage.go b/vendor/golang.org/x/sys/windows/svc/example/manage.go new file mode 100644 index 0000000..782dbd9 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/manage.go @@ -0,0 +1,62 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package main + +import ( + "fmt" + "time" + + "golang.org/x/sys/windows/svc" + "golang.org/x/sys/windows/svc/mgr" +) + +func startService(name string) error { + m, err := mgr.Connect() + if err != nil { + return err + } + defer m.Disconnect() + s, err := m.OpenService(name) + if err != nil { + return fmt.Errorf("could not access service: %v", err) + } + defer s.Close() + err = s.Start("is", "manual-started") + if err != nil { + return fmt.Errorf("could not start service: %v", err) + } + return nil +} + +func controlService(name string, c svc.Cmd, to svc.State) error { + m, err := mgr.Connect() + if err != nil { + return err + } + defer m.Disconnect() + s, err := m.OpenService(name) + if err != nil { + return fmt.Errorf("could not access service: %v", err) + } + defer s.Close() + status, err := s.Control(c) + if err != nil { + return fmt.Errorf("could not send control=%d: %v", c, err) + } + timeout := time.Now().Add(10 * time.Second) + for status.State != to { + if timeout.Before(time.Now()) { + return fmt.Errorf("timeout waiting for service to go to state=%d", to) + } + time.Sleep(300 * time.Millisecond) + status, err = s.Query() + if err != nil { + return fmt.Errorf("could not retrieve service status: %v", err) + } + } + return nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/example/service.go b/vendor/golang.org/x/sys/windows/svc/example/service.go new file mode 100644 index 0000000..237e809 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/example/service.go @@ -0,0 +1,82 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package main + +import ( + "fmt" + "time" + + "golang.org/x/sys/windows/svc" + "golang.org/x/sys/windows/svc/debug" + "golang.org/x/sys/windows/svc/eventlog" +) + +var elog debug.Log + +type myservice struct{} + +func (m *myservice) Execute(args []string, r <-chan svc.ChangeRequest, changes chan<- svc.Status) (ssec bool, errno uint32) { + const cmdsAccepted = svc.AcceptStop | svc.AcceptShutdown | svc.AcceptPauseAndContinue + changes <- svc.Status{State: svc.StartPending} + fasttick := time.Tick(500 * time.Millisecond) + slowtick := time.Tick(2 * time.Second) + tick := fasttick + changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} +loop: + for { + select { + case <-tick: + beep() + elog.Info(1, "beep") + case c := <-r: + switch c.Cmd { + case svc.Interrogate: + changes <- c.CurrentStatus + // Testing deadlock from https://code.google.com/p/winsvc/issues/detail?id=4 + time.Sleep(100 * time.Millisecond) + changes <- c.CurrentStatus + case svc.Stop, svc.Shutdown: + break loop + case svc.Pause: + changes <- svc.Status{State: svc.Paused, Accepts: cmdsAccepted} + tick = slowtick + case svc.Continue: + changes <- svc.Status{State: svc.Running, Accepts: cmdsAccepted} + tick = fasttick + default: + elog.Error(1, fmt.Sprintf("unexpected control request #%d", c)) + } + } + } + changes <- svc.Status{State: svc.StopPending} + return +} + +func runService(name string, isDebug bool) { + var err error + if isDebug { + elog = debug.New(name) + } else { + elog, err = eventlog.Open(name) + if err != nil { + return + } + } + defer elog.Close() + + elog.Info(1, fmt.Sprintf("starting %s service", name)) + run := svc.Run + if isDebug { + run = debug.Run + } + err = run(name, &myservice{}) + if err != nil { + elog.Error(1, fmt.Sprintf("%s service failed: %v", name, err)) + return + } + elog.Info(1, fmt.Sprintf("%s service stopped", name)) +} diff --git a/vendor/golang.org/x/sys/windows/svc/go12.c b/vendor/golang.org/x/sys/windows/svc/go12.c new file mode 100644 index 0000000..6f1be1f --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/go12.c @@ -0,0 +1,24 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows +// +build !go1.3 + +// copied from pkg/runtime +typedef unsigned int uint32; +typedef unsigned long long int uint64; +#ifdef _64BIT +typedef uint64 uintptr; +#else +typedef uint32 uintptr; +#endif + +// from sys_386.s or sys_amd64.s +void ·servicemain(void); + +void +·getServiceMain(uintptr *r) +{ + *r = (uintptr)·servicemain; +} diff --git a/vendor/golang.org/x/sys/windows/svc/go12.go b/vendor/golang.org/x/sys/windows/svc/go12.go new file mode 100644 index 0000000..cd8b913 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/go12.go @@ -0,0 +1,11 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows +// +build !go1.3 + +package svc + +// from go12.c +func getServiceMain(r *uintptr) diff --git a/vendor/golang.org/x/sys/windows/svc/go13.go b/vendor/golang.org/x/sys/windows/svc/go13.go new file mode 100644 index 0000000..9d7f3ce --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/go13.go @@ -0,0 +1,31 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows +// +build go1.3 + +package svc + +import "unsafe" + +const ptrSize = 4 << (^uintptr(0) >> 63) // unsafe.Sizeof(uintptr(0)) but an ideal const + +// Should be a built-in for unsafe.Pointer? +func add(p unsafe.Pointer, x uintptr) unsafe.Pointer { + return unsafe.Pointer(uintptr(p) + x) +} + +// funcPC returns the entry PC of the function f. +// It assumes that f is a func value. Otherwise the behavior is undefined. +func funcPC(f interface{}) uintptr { + return **(**uintptr)(add(unsafe.Pointer(&f), ptrSize)) +} + +// from sys_386.s and sys_amd64.s +func servicectlhandler(ctl uint32) uintptr +func servicemain(argc uint32, argv **uint16) + +func getServiceMain(r *uintptr) { + *r = funcPC(servicemain) +} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/config.go b/vendor/golang.org/x/sys/windows/svc/mgr/config.go new file mode 100644 index 0000000..0a6edba --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/mgr/config.go @@ -0,0 +1,139 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package mgr + +import ( + "syscall" + "unicode/utf16" + "unsafe" + + "golang.org/x/sys/windows" +) + +const ( + // Service start types. + StartManual = windows.SERVICE_DEMAND_START // the service must be started manually + StartAutomatic = windows.SERVICE_AUTO_START // the service will start by itself whenever the computer reboots + StartDisabled = windows.SERVICE_DISABLED // the service cannot be started + + // The severity of the error, and action taken, + // if this service fails to start. + ErrorCritical = windows.SERVICE_ERROR_CRITICAL + ErrorIgnore = windows.SERVICE_ERROR_IGNORE + ErrorNormal = windows.SERVICE_ERROR_NORMAL + ErrorSevere = windows.SERVICE_ERROR_SEVERE +) + +// TODO(brainman): Password is not returned by windows.QueryServiceConfig, not sure how to get it. + +type Config struct { + ServiceType uint32 + StartType uint32 + ErrorControl uint32 + BinaryPathName string // fully qualified path to the service binary file, can also include arguments for an auto-start service + LoadOrderGroup string + TagId uint32 + Dependencies []string + ServiceStartName string // name of the account under which the service should run + DisplayName string + Password string + Description string +} + +func toString(p *uint16) string { + if p == nil { + return "" + } + return syscall.UTF16ToString((*[4096]uint16)(unsafe.Pointer(p))[:]) +} + +func toStringSlice(ps *uint16) []string { + if ps == nil { + return nil + } + r := make([]string, 0) + for from, i, p := 0, 0, (*[1 << 24]uint16)(unsafe.Pointer(ps)); true; i++ { + if p[i] == 0 { + // empty string marks the end + if i <= from { + break + } + r = append(r, string(utf16.Decode(p[from:i]))) + from = i + 1 + } + } + return r +} + +// Config retrieves service s configuration paramteres. +func (s *Service) Config() (Config, error) { + var p *windows.QUERY_SERVICE_CONFIG + n := uint32(1024) + for { + b := make([]byte, n) + p = (*windows.QUERY_SERVICE_CONFIG)(unsafe.Pointer(&b[0])) + err := windows.QueryServiceConfig(s.Handle, p, n, &n) + if err == nil { + break + } + if err.(syscall.Errno) != syscall.ERROR_INSUFFICIENT_BUFFER { + return Config{}, err + } + if n <= uint32(len(b)) { + return Config{}, err + } + } + + var p2 *windows.SERVICE_DESCRIPTION + n = uint32(1024) + for { + b := make([]byte, n) + p2 = (*windows.SERVICE_DESCRIPTION)(unsafe.Pointer(&b[0])) + err := windows.QueryServiceConfig2(s.Handle, + windows.SERVICE_CONFIG_DESCRIPTION, &b[0], n, &n) + if err == nil { + break + } + if err.(syscall.Errno) != syscall.ERROR_INSUFFICIENT_BUFFER { + return Config{}, err + } + if n <= uint32(len(b)) { + return Config{}, err + } + } + + return Config{ + ServiceType: p.ServiceType, + StartType: p.StartType, + ErrorControl: p.ErrorControl, + BinaryPathName: toString(p.BinaryPathName), + LoadOrderGroup: toString(p.LoadOrderGroup), + TagId: p.TagId, + Dependencies: toStringSlice(p.Dependencies), + ServiceStartName: toString(p.ServiceStartName), + DisplayName: toString(p.DisplayName), + Description: toString(p2.Description), + }, nil +} + +func updateDescription(handle windows.Handle, desc string) error { + d := windows.SERVICE_DESCRIPTION{toPtr(desc)} + return windows.ChangeServiceConfig2(handle, + windows.SERVICE_CONFIG_DESCRIPTION, (*byte)(unsafe.Pointer(&d))) +} + +// UpdateConfig updates service s configuration parameters. +func (s *Service) UpdateConfig(c Config) error { + err := windows.ChangeServiceConfig(s.Handle, c.ServiceType, c.StartType, + c.ErrorControl, toPtr(c.BinaryPathName), toPtr(c.LoadOrderGroup), + nil, toStringBlock(c.Dependencies), toPtr(c.ServiceStartName), + toPtr(c.Password), toPtr(c.DisplayName)) + if err != nil { + return err + } + return updateDescription(s.Handle, c.Description) +} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go b/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go new file mode 100644 index 0000000..76965b5 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/mgr/mgr.go @@ -0,0 +1,162 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package mgr can be used to manage Windows service programs. +// It can be used to install and remove them. It can also start, +// stop and pause them. The package can query / change current +// service state and config parameters. +// +package mgr + +import ( + "syscall" + "unicode/utf16" + "unsafe" + + "golang.org/x/sys/windows" +) + +// Mgr is used to manage Windows service. +type Mgr struct { + Handle windows.Handle +} + +// Connect establishes a connection to the service control manager. +func Connect() (*Mgr, error) { + return ConnectRemote("") +} + +// ConnectRemote establishes a connection to the +// service control manager on computer named host. +func ConnectRemote(host string) (*Mgr, error) { + var s *uint16 + if host != "" { + s = syscall.StringToUTF16Ptr(host) + } + h, err := windows.OpenSCManager(s, nil, windows.SC_MANAGER_ALL_ACCESS) + if err != nil { + return nil, err + } + return &Mgr{Handle: h}, nil +} + +// Disconnect closes connection to the service control manager m. +func (m *Mgr) Disconnect() error { + return windows.CloseServiceHandle(m.Handle) +} + +func toPtr(s string) *uint16 { + if len(s) == 0 { + return nil + } + return syscall.StringToUTF16Ptr(s) +} + +// toStringBlock terminates strings in ss with 0, and then +// concatenates them together. It also adds extra 0 at the end. +func toStringBlock(ss []string) *uint16 { + if len(ss) == 0 { + return nil + } + t := "" + for _, s := range ss { + if s != "" { + t += s + "\x00" + } + } + if t == "" { + return nil + } + t += "\x00" + return &utf16.Encode([]rune(t))[0] +} + +// CreateService installs new service name on the system. +// The service will be executed by running exepath binary. +// Use config c to specify service parameters. +// Any args will be passed as command-line arguments when +// the service is started; these arguments are distinct from +// the arguments passed to Service.Start or via the "Start +// parameters" field in the service's Properties dialog box. +func (m *Mgr) CreateService(name, exepath string, c Config, args ...string) (*Service, error) { + if c.StartType == 0 { + c.StartType = StartManual + } + if c.ErrorControl == 0 { + c.ErrorControl = ErrorNormal + } + if c.ServiceType == 0 { + c.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS + } + s := syscall.EscapeArg(exepath) + for _, v := range args { + s += " " + syscall.EscapeArg(v) + } + h, err := windows.CreateService(m.Handle, toPtr(name), toPtr(c.DisplayName), + windows.SERVICE_ALL_ACCESS, c.ServiceType, + c.StartType, c.ErrorControl, toPtr(s), toPtr(c.LoadOrderGroup), + nil, toStringBlock(c.Dependencies), toPtr(c.ServiceStartName), toPtr(c.Password)) + if err != nil { + return nil, err + } + if c.Description != "" { + err = updateDescription(h, c.Description) + if err != nil { + return nil, err + } + } + return &Service{Name: name, Handle: h}, nil +} + +// OpenService retrieves access to service name, so it can +// be interrogated and controlled. +func (m *Mgr) OpenService(name string) (*Service, error) { + h, err := windows.OpenService(m.Handle, syscall.StringToUTF16Ptr(name), windows.SERVICE_ALL_ACCESS) + if err != nil { + return nil, err + } + return &Service{Name: name, Handle: h}, nil +} + +// ListServices enumerates services in the specified +// service control manager database m. +// If the caller does not have the SERVICE_QUERY_STATUS +// access right to a service, the service is silently +// omitted from the list of services returned. +func (m *Mgr) ListServices() ([]string, error) { + var err error + var bytesNeeded, servicesReturned uint32 + var buf []byte + for { + var p *byte + if len(buf) > 0 { + p = &buf[0] + } + err = windows.EnumServicesStatusEx(m.Handle, windows.SC_ENUM_PROCESS_INFO, + windows.SERVICE_WIN32, windows.SERVICE_STATE_ALL, + p, uint32(len(buf)), &bytesNeeded, &servicesReturned, nil, nil) + if err == nil { + break + } + if err != syscall.ERROR_MORE_DATA { + return nil, err + } + if bytesNeeded <= uint32(len(buf)) { + return nil, err + } + buf = make([]byte, bytesNeeded) + } + if servicesReturned == 0 { + return nil, nil + } + services := (*[1 << 20]windows.ENUM_SERVICE_STATUS_PROCESS)(unsafe.Pointer(&buf[0]))[:servicesReturned] + var names []string + for _, s := range services { + name := syscall.UTF16ToString((*[1 << 20]uint16)(unsafe.Pointer(s.ServiceName))[:]) + names = append(names, name) + } + return names, nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go b/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go new file mode 100644 index 0000000..1569a22 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/mgr/mgr_test.go @@ -0,0 +1,169 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package mgr_test + +import ( + "os" + "path/filepath" + "sort" + "strings" + "syscall" + "testing" + "time" + + "golang.org/x/sys/windows/svc/mgr" +) + +func TestOpenLanManServer(t *testing.T) { + m, err := mgr.Connect() + if err != nil { + if errno, ok := err.(syscall.Errno); ok && errno == syscall.ERROR_ACCESS_DENIED { + t.Skip("Skipping test: we don't have rights to manage services.") + } + t.Fatalf("SCM connection failed: %s", err) + } + defer m.Disconnect() + + s, err := m.OpenService("LanmanServer") + if err != nil { + t.Fatalf("OpenService(lanmanserver) failed: %s", err) + } + defer s.Close() + + _, err = s.Config() + if err != nil { + t.Fatalf("Config failed: %s", err) + } +} + +func install(t *testing.T, m *mgr.Mgr, name, exepath string, c mgr.Config) { + // Sometimes it takes a while for the service to get + // removed after previous test run. + for i := 0; ; i++ { + s, err := m.OpenService(name) + if err != nil { + break + } + s.Close() + + if i > 10 { + t.Fatalf("service %s already exists", name) + } + time.Sleep(300 * time.Millisecond) + } + + s, err := m.CreateService(name, exepath, c) + if err != nil { + t.Fatalf("CreateService(%s) failed: %v", name, err) + } + defer s.Close() +} + +func depString(d []string) string { + if len(d) == 0 { + return "" + } + for i := range d { + d[i] = strings.ToLower(d[i]) + } + ss := sort.StringSlice(d) + ss.Sort() + return strings.Join([]string(ss), " ") +} + +func testConfig(t *testing.T, s *mgr.Service, should mgr.Config) mgr.Config { + is, err := s.Config() + if err != nil { + t.Fatalf("Config failed: %s", err) + } + if should.DisplayName != is.DisplayName { + t.Fatalf("config mismatch: DisplayName is %q, but should have %q", is.DisplayName, should.DisplayName) + } + if should.StartType != is.StartType { + t.Fatalf("config mismatch: StartType is %v, but should have %v", is.StartType, should.StartType) + } + if should.Description != is.Description { + t.Fatalf("config mismatch: Description is %q, but should have %q", is.Description, should.Description) + } + if depString(should.Dependencies) != depString(is.Dependencies) { + t.Fatalf("config mismatch: Dependencies is %v, but should have %v", is.Dependencies, should.Dependencies) + } + return is +} + +func remove(t *testing.T, s *mgr.Service) { + err := s.Delete() + if err != nil { + t.Fatalf("Delete failed: %s", err) + } +} + +func TestMyService(t *testing.T) { + if testing.Short() { + t.Skip("skipping test in short mode - it modifies system services") + } + + const name = "myservice" + + m, err := mgr.Connect() + if err != nil { + if errno, ok := err.(syscall.Errno); ok && errno == syscall.ERROR_ACCESS_DENIED { + t.Skip("Skipping test: we don't have rights to manage services.") + } + t.Fatalf("SCM connection failed: %s", err) + } + defer m.Disconnect() + + c := mgr.Config{ + StartType: mgr.StartDisabled, + DisplayName: "my service", + Description: "my service is just a test", + Dependencies: []string{"LanmanServer", "W32Time"}, + } + + exename := os.Args[0] + exepath, err := filepath.Abs(exename) + if err != nil { + t.Fatalf("filepath.Abs(%s) failed: %s", exename, err) + } + + install(t, m, name, exepath, c) + + s, err := m.OpenService(name) + if err != nil { + t.Fatalf("service %s is not installed", name) + } + defer s.Close() + + c.BinaryPathName = exepath + c = testConfig(t, s, c) + + c.StartType = mgr.StartManual + err = s.UpdateConfig(c) + if err != nil { + t.Fatalf("UpdateConfig failed: %v", err) + } + + testConfig(t, s, c) + + svcnames, err := m.ListServices() + if err != nil { + t.Fatalf("ListServices failed: %v", err) + } + var myserviceIsInstalled bool + for _, sn := range svcnames { + if sn == name { + myserviceIsInstalled = true + break + } + } + if !myserviceIsInstalled { + t.Errorf("ListServices failed to find %q service", name) + } + + remove(t, s) +} diff --git a/vendor/golang.org/x/sys/windows/svc/mgr/service.go b/vendor/golang.org/x/sys/windows/svc/mgr/service.go new file mode 100644 index 0000000..fdc46af --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/mgr/service.go @@ -0,0 +1,72 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package mgr + +import ( + "syscall" + + "golang.org/x/sys/windows" + "golang.org/x/sys/windows/svc" +) + +// TODO(brainman): Use EnumDependentServices to enumerate dependent services. + +// Service is used to access Windows service. +type Service struct { + Name string + Handle windows.Handle +} + +// Delete marks service s for deletion from the service control manager database. +func (s *Service) Delete() error { + return windows.DeleteService(s.Handle) +} + +// Close relinquish access to the service s. +func (s *Service) Close() error { + return windows.CloseServiceHandle(s.Handle) +} + +// Start starts service s. +// args will be passed to svc.Handler.Execute. +func (s *Service) Start(args ...string) error { + var p **uint16 + if len(args) > 0 { + vs := make([]*uint16, len(args)) + for i := range vs { + vs[i] = syscall.StringToUTF16Ptr(args[i]) + } + p = &vs[0] + } + return windows.StartService(s.Handle, uint32(len(args)), p) +} + +// Control sends state change request c to the servce s. +func (s *Service) Control(c svc.Cmd) (svc.Status, error) { + var t windows.SERVICE_STATUS + err := windows.ControlService(s.Handle, uint32(c), &t) + if err != nil { + return svc.Status{}, err + } + return svc.Status{ + State: svc.State(t.CurrentState), + Accepts: svc.Accepted(t.ControlsAccepted), + }, nil +} + +// Query returns current status of service s. +func (s *Service) Query() (svc.Status, error) { + var t windows.SERVICE_STATUS + err := windows.QueryServiceStatus(s.Handle, &t) + if err != nil { + return svc.Status{}, err + } + return svc.Status{ + State: svc.State(t.CurrentState), + Accepts: svc.Accepted(t.ControlsAccepted), + }, nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/security.go b/vendor/golang.org/x/sys/windows/svc/security.go new file mode 100644 index 0000000..6fbc923 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/security.go @@ -0,0 +1,62 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package svc + +import ( + "unsafe" + + "golang.org/x/sys/windows" +) + +func allocSid(subAuth0 uint32) (*windows.SID, error) { + var sid *windows.SID + err := windows.AllocateAndInitializeSid(&windows.SECURITY_NT_AUTHORITY, + 1, subAuth0, 0, 0, 0, 0, 0, 0, 0, &sid) + if err != nil { + return nil, err + } + return sid, nil +} + +// IsAnInteractiveSession determines if calling process is running interactively. +// It queries the process token for membership in the Interactive group. +// http://stackoverflow.com/questions/2668851/how-do-i-detect-that-my-application-is-running-as-service-or-in-an-interactive-s +func IsAnInteractiveSession() (bool, error) { + interSid, err := allocSid(windows.SECURITY_INTERACTIVE_RID) + if err != nil { + return false, err + } + defer windows.FreeSid(interSid) + + serviceSid, err := allocSid(windows.SECURITY_SERVICE_RID) + if err != nil { + return false, err + } + defer windows.FreeSid(serviceSid) + + t, err := windows.OpenCurrentProcessToken() + if err != nil { + return false, err + } + defer t.Close() + + gs, err := t.GetTokenGroups() + if err != nil { + return false, err + } + p := unsafe.Pointer(&gs.Groups[0]) + groups := (*[2 << 20]windows.SIDAndAttributes)(p)[:gs.GroupCount] + for _, g := range groups { + if windows.EqualSid(g.Sid, interSid) { + return true, nil + } + if windows.EqualSid(g.Sid, serviceSid) { + return false, nil + } + } + return false, nil +} diff --git a/vendor/golang.org/x/sys/windows/svc/service.go b/vendor/golang.org/x/sys/windows/svc/service.go new file mode 100644 index 0000000..903cba3 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/service.go @@ -0,0 +1,363 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package svc provides everything required to build Windows service. +// +package svc + +import ( + "errors" + "runtime" + "syscall" + "unsafe" + + "golang.org/x/sys/windows" +) + +// State describes service execution state (Stopped, Running and so on). +type State uint32 + +const ( + Stopped = State(windows.SERVICE_STOPPED) + StartPending = State(windows.SERVICE_START_PENDING) + StopPending = State(windows.SERVICE_STOP_PENDING) + Running = State(windows.SERVICE_RUNNING) + ContinuePending = State(windows.SERVICE_CONTINUE_PENDING) + PausePending = State(windows.SERVICE_PAUSE_PENDING) + Paused = State(windows.SERVICE_PAUSED) +) + +// Cmd represents service state change request. It is sent to a service +// by the service manager, and should be actioned upon by the service. +type Cmd uint32 + +const ( + Stop = Cmd(windows.SERVICE_CONTROL_STOP) + Pause = Cmd(windows.SERVICE_CONTROL_PAUSE) + Continue = Cmd(windows.SERVICE_CONTROL_CONTINUE) + Interrogate = Cmd(windows.SERVICE_CONTROL_INTERROGATE) + Shutdown = Cmd(windows.SERVICE_CONTROL_SHUTDOWN) + ParamChange = Cmd(windows.SERVICE_CONTROL_PARAMCHANGE) + NetBindAdd = Cmd(windows.SERVICE_CONTROL_NETBINDADD) + NetBindRemove = Cmd(windows.SERVICE_CONTROL_NETBINDREMOVE) + NetBindEnable = Cmd(windows.SERVICE_CONTROL_NETBINDENABLE) + NetBindDisable = Cmd(windows.SERVICE_CONTROL_NETBINDDISABLE) + DeviceEvent = Cmd(windows.SERVICE_CONTROL_DEVICEEVENT) + HardwareProfileChange = Cmd(windows.SERVICE_CONTROL_HARDWAREPROFILECHANGE) + PowerEvent = Cmd(windows.SERVICE_CONTROL_POWEREVENT) + SessionChange = Cmd(windows.SERVICE_CONTROL_SESSIONCHANGE) +) + +// Accepted is used to describe commands accepted by the service. +// Note that Interrogate is always accepted. +type Accepted uint32 + +const ( + AcceptStop = Accepted(windows.SERVICE_ACCEPT_STOP) + AcceptShutdown = Accepted(windows.SERVICE_ACCEPT_SHUTDOWN) + AcceptPauseAndContinue = Accepted(windows.SERVICE_ACCEPT_PAUSE_CONTINUE) + AcceptParamChange = Accepted(windows.SERVICE_ACCEPT_PARAMCHANGE) + AcceptNetBindChange = Accepted(windows.SERVICE_ACCEPT_NETBINDCHANGE) + AcceptHardwareProfileChange = Accepted(windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE) + AcceptPowerEvent = Accepted(windows.SERVICE_ACCEPT_POWEREVENT) + AcceptSessionChange = Accepted(windows.SERVICE_ACCEPT_SESSIONCHANGE) +) + +// Status combines State and Accepted commands to fully describe running service. +type Status struct { + State State + Accepts Accepted + CheckPoint uint32 // used to report progress during a lengthy operation + WaitHint uint32 // estimated time required for a pending operation, in milliseconds +} + +// ChangeRequest is sent to the service Handler to request service status change. +type ChangeRequest struct { + Cmd Cmd + EventType uint32 + EventData uintptr + CurrentStatus Status +} + +// Handler is the interface that must be implemented to build Windows service. +type Handler interface { + + // Execute will be called by the package code at the start of + // the service, and the service will exit once Execute completes. + // Inside Execute you must read service change requests from r and + // act accordingly. You must keep service control manager up to date + // about state of your service by writing into s as required. + // args contains service name followed by argument strings passed + // to the service. + // You can provide service exit code in exitCode return parameter, + // with 0 being "no error". You can also indicate if exit code, + // if any, is service specific or not by using svcSpecificEC + // parameter. + Execute(args []string, r <-chan ChangeRequest, s chan<- Status) (svcSpecificEC bool, exitCode uint32) +} + +var ( + // These are used by asm code. + goWaitsH uintptr + cWaitsH uintptr + ssHandle uintptr + sName *uint16 + sArgc uintptr + sArgv **uint16 + ctlHandlerExProc uintptr + cSetEvent uintptr + cWaitForSingleObject uintptr + cRegisterServiceCtrlHandlerExW uintptr +) + +func init() { + k := syscall.MustLoadDLL("kernel32.dll") + cSetEvent = k.MustFindProc("SetEvent").Addr() + cWaitForSingleObject = k.MustFindProc("WaitForSingleObject").Addr() + a := syscall.MustLoadDLL("advapi32.dll") + cRegisterServiceCtrlHandlerExW = a.MustFindProc("RegisterServiceCtrlHandlerExW").Addr() +} + +// The HandlerEx prototype also has a context pointer but since we don't use +// it at start-up time we don't have to pass it over either. +type ctlEvent struct { + cmd Cmd + eventType uint32 + eventData uintptr + errno uint32 +} + +// service provides access to windows service api. +type service struct { + name string + h windows.Handle + cWaits *event + goWaits *event + c chan ctlEvent + handler Handler +} + +func newService(name string, handler Handler) (*service, error) { + var s service + var err error + s.name = name + s.c = make(chan ctlEvent) + s.handler = handler + s.cWaits, err = newEvent() + if err != nil { + return nil, err + } + s.goWaits, err = newEvent() + if err != nil { + s.cWaits.Close() + return nil, err + } + return &s, nil +} + +func (s *service) close() error { + s.cWaits.Close() + s.goWaits.Close() + return nil +} + +type exitCode struct { + isSvcSpecific bool + errno uint32 +} + +func (s *service) updateStatus(status *Status, ec *exitCode) error { + if s.h == 0 { + return errors.New("updateStatus with no service status handle") + } + var t windows.SERVICE_STATUS + t.ServiceType = windows.SERVICE_WIN32_OWN_PROCESS + t.CurrentState = uint32(status.State) + if status.Accepts&AcceptStop != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_STOP + } + if status.Accepts&AcceptShutdown != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_SHUTDOWN + } + if status.Accepts&AcceptPauseAndContinue != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_PAUSE_CONTINUE + } + if status.Accepts&AcceptParamChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_PARAMCHANGE + } + if status.Accepts&AcceptNetBindChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_NETBINDCHANGE + } + if status.Accepts&AcceptHardwareProfileChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_HARDWAREPROFILECHANGE + } + if status.Accepts&AcceptPowerEvent != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_POWEREVENT + } + if status.Accepts&AcceptSessionChange != 0 { + t.ControlsAccepted |= windows.SERVICE_ACCEPT_SESSIONCHANGE + } + if ec.errno == 0 { + t.Win32ExitCode = windows.NO_ERROR + t.ServiceSpecificExitCode = windows.NO_ERROR + } else if ec.isSvcSpecific { + t.Win32ExitCode = uint32(windows.ERROR_SERVICE_SPECIFIC_ERROR) + t.ServiceSpecificExitCode = ec.errno + } else { + t.Win32ExitCode = ec.errno + t.ServiceSpecificExitCode = windows.NO_ERROR + } + t.CheckPoint = status.CheckPoint + t.WaitHint = status.WaitHint + return windows.SetServiceStatus(s.h, &t) +} + +const ( + sysErrSetServiceStatusFailed = uint32(syscall.APPLICATION_ERROR) + iota + sysErrNewThreadInCallback +) + +func (s *service) run() { + s.goWaits.Wait() + s.h = windows.Handle(ssHandle) + argv := (*[100]*int16)(unsafe.Pointer(sArgv))[:sArgc] + args := make([]string, len(argv)) + for i, a := range argv { + args[i] = syscall.UTF16ToString((*[1 << 20]uint16)(unsafe.Pointer(a))[:]) + } + + cmdsToHandler := make(chan ChangeRequest) + changesFromHandler := make(chan Status) + exitFromHandler := make(chan exitCode) + + go func() { + ss, errno := s.handler.Execute(args, cmdsToHandler, changesFromHandler) + exitFromHandler <- exitCode{ss, errno} + }() + + status := Status{State: Stopped} + ec := exitCode{isSvcSpecific: true, errno: 0} + var outch chan ChangeRequest + inch := s.c + var cmd Cmd + var evtype uint32 + var evdata uintptr +loop: + for { + select { + case r := <-inch: + if r.errno != 0 { + ec.errno = r.errno + break loop + } + inch = nil + outch = cmdsToHandler + cmd = r.cmd + evtype = r.eventType + evdata = r.eventData + case outch <- ChangeRequest{cmd, evtype, evdata, status}: + inch = s.c + outch = nil + case c := <-changesFromHandler: + err := s.updateStatus(&c, &ec) + if err != nil { + // best suitable error number + ec.errno = sysErrSetServiceStatusFailed + if err2, ok := err.(syscall.Errno); ok { + ec.errno = uint32(err2) + } + break loop + } + status = c + case ec = <-exitFromHandler: + break loop + } + } + + s.updateStatus(&Status{State: Stopped}, &ec) + s.cWaits.Set() +} + +func newCallback(fn interface{}) (cb uintptr, err error) { + defer func() { + r := recover() + if r == nil { + return + } + cb = 0 + switch v := r.(type) { + case string: + err = errors.New(v) + case error: + err = v + default: + err = errors.New("unexpected panic in syscall.NewCallback") + } + }() + return syscall.NewCallback(fn), nil +} + +// BUG(brainman): There is no mechanism to run multiple services +// inside one single executable. Perhaps, it can be overcome by +// using RegisterServiceCtrlHandlerEx Windows api. + +// Run executes service name by calling appropriate handler function. +func Run(name string, handler Handler) error { + runtime.LockOSThread() + + tid := windows.GetCurrentThreadId() + + s, err := newService(name, handler) + if err != nil { + return err + } + + ctlHandler := func(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { + e := ctlEvent{cmd: Cmd(ctl), eventType: evtype, eventData: evdata} + // We assume that this callback function is running on + // the same thread as Run. Nowhere in MS documentation + // I could find statement to guarantee that. So putting + // check here to verify, otherwise things will go bad + // quickly, if ignored. + i := windows.GetCurrentThreadId() + if i != tid { + e.errno = sysErrNewThreadInCallback + } + s.c <- e + // Always return NO_ERROR (0) for now. + return 0 + } + + var svcmain uintptr + getServiceMain(&svcmain) + t := []windows.SERVICE_TABLE_ENTRY{ + {syscall.StringToUTF16Ptr(s.name), svcmain}, + {nil, 0}, + } + + goWaitsH = uintptr(s.goWaits.h) + cWaitsH = uintptr(s.cWaits.h) + sName = t[0].ServiceName + ctlHandlerExProc, err = newCallback(ctlHandler) + if err != nil { + return err + } + + go s.run() + + err = windows.StartServiceCtrlDispatcher(&t[0]) + if err != nil { + return err + } + return nil +} + +// StatusHandle returns service status handle. It is safe to call this function +// from inside the Handler.Execute because then it is guaranteed to be set. +// This code will have to change once multiple services are possible per process. +func StatusHandle() windows.Handle { + return windows.Handle(ssHandle) +} diff --git a/vendor/golang.org/x/sys/windows/svc/svc_test.go b/vendor/golang.org/x/sys/windows/svc/svc_test.go new file mode 100644 index 0000000..da7ec66 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/svc_test.go @@ -0,0 +1,118 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package svc_test + +import ( + "io/ioutil" + "os" + "os/exec" + "path/filepath" + "testing" + "time" + + "golang.org/x/sys/windows/svc" + "golang.org/x/sys/windows/svc/mgr" +) + +func getState(t *testing.T, s *mgr.Service) svc.State { + status, err := s.Query() + if err != nil { + t.Fatalf("Query(%s) failed: %s", s.Name, err) + } + return status.State +} + +func testState(t *testing.T, s *mgr.Service, want svc.State) { + have := getState(t, s) + if have != want { + t.Fatalf("%s state is=%d want=%d", s.Name, have, want) + } +} + +func waitState(t *testing.T, s *mgr.Service, want svc.State) { + for i := 0; ; i++ { + have := getState(t, s) + if have == want { + return + } + if i > 10 { + t.Fatalf("%s state is=%d, waiting timeout", s.Name, have) + } + time.Sleep(300 * time.Millisecond) + } +} + +func TestExample(t *testing.T) { + if testing.Short() { + t.Skip("skipping test in short mode - it modifies system services") + } + + const name = "myservice" + + m, err := mgr.Connect() + if err != nil { + t.Fatalf("SCM connection failed: %s", err) + } + defer m.Disconnect() + + dir, err := ioutil.TempDir("", "svc") + if err != nil { + t.Fatalf("failed to create temp directory: %v", err) + } + defer os.RemoveAll(dir) + + exepath := filepath.Join(dir, "a.exe") + o, err := exec.Command("go", "build", "-o", exepath, "golang.org/x/sys/windows/svc/example").CombinedOutput() + if err != nil { + t.Fatalf("failed to build service program: %v\n%v", err, string(o)) + } + + s, err := m.OpenService(name) + if err == nil { + err = s.Delete() + if err != nil { + s.Close() + t.Fatalf("Delete failed: %s", err) + } + s.Close() + } + s, err = m.CreateService(name, exepath, mgr.Config{DisplayName: "my service"}, "is", "auto-started") + if err != nil { + t.Fatalf("CreateService(%s) failed: %v", name, err) + } + defer s.Close() + + testState(t, s, svc.Stopped) + err = s.Start("is", "manual-started") + if err != nil { + t.Fatalf("Start(%s) failed: %s", s.Name, err) + } + waitState(t, s, svc.Running) + time.Sleep(1 * time.Second) + + // testing deadlock from issues 4. + _, err = s.Control(svc.Interrogate) + if err != nil { + t.Fatalf("Control(%s) failed: %s", s.Name, err) + } + _, err = s.Control(svc.Interrogate) + if err != nil { + t.Fatalf("Control(%s) failed: %s", s.Name, err) + } + time.Sleep(1 * time.Second) + + _, err = s.Control(svc.Stop) + if err != nil { + t.Fatalf("Control(%s) failed: %s", s.Name, err) + } + waitState(t, s, svc.Stopped) + + err = s.Delete() + if err != nil { + t.Fatalf("Delete failed: %s", err) + } +} diff --git a/vendor/golang.org/x/sys/windows/svc/sys_386.s b/vendor/golang.org/x/sys/windows/svc/sys_386.s new file mode 100644 index 0000000..2c82a9d --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/sys_386.s @@ -0,0 +1,68 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// func servicemain(argc uint32, argv **uint16) +TEXT ·servicemain(SB),7,$0 + MOVL argc+0(FP), AX + MOVL AX, ·sArgc(SB) + MOVL argv+4(FP), AX + MOVL AX, ·sArgv(SB) + + PUSHL BP + PUSHL BX + PUSHL SI + PUSHL DI + + SUBL $12, SP + + MOVL ·sName(SB), AX + MOVL AX, (SP) + MOVL $·servicectlhandler(SB), AX + MOVL AX, 4(SP) + MOVL $0, 8(SP) + MOVL ·cRegisterServiceCtrlHandlerExW(SB), AX + MOVL SP, BP + CALL AX + MOVL BP, SP + CMPL AX, $0 + JE exit + MOVL AX, ·ssHandle(SB) + + MOVL ·goWaitsH(SB), AX + MOVL AX, (SP) + MOVL ·cSetEvent(SB), AX + MOVL SP, BP + CALL AX + MOVL BP, SP + + MOVL ·cWaitsH(SB), AX + MOVL AX, (SP) + MOVL $-1, AX + MOVL AX, 4(SP) + MOVL ·cWaitForSingleObject(SB), AX + MOVL SP, BP + CALL AX + MOVL BP, SP + +exit: + ADDL $12, SP + + POPL DI + POPL SI + POPL BX + POPL BP + + MOVL 0(SP), CX + ADDL $12, SP + JMP CX + +// I do not know why, but this seems to be the only way to call +// ctlHandlerProc on Windows 7. + +// func servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { +TEXT ·servicectlhandler(SB),7,$0 + MOVL ·ctlHandlerExProc(SB), CX + JMP CX diff --git a/vendor/golang.org/x/sys/windows/svc/sys_amd64.s b/vendor/golang.org/x/sys/windows/svc/sys_amd64.s new file mode 100644 index 0000000..06b4259 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/svc/sys_amd64.s @@ -0,0 +1,42 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// func servicemain(argc uint32, argv **uint16) +TEXT ·servicemain(SB),7,$0 + MOVL CX, ·sArgc(SB) + MOVL DX, ·sArgv(SB) + + SUBQ $32, SP // stack for the first 4 syscall params + + MOVQ ·sName(SB), CX + MOVQ $·servicectlhandler(SB), DX + // BUG(pastarmovj): Figure out a way to pass in context in R8. + MOVQ ·cRegisterServiceCtrlHandlerExW(SB), AX + CALL AX + CMPQ AX, $0 + JE exit + MOVQ AX, ·ssHandle(SB) + + MOVQ ·goWaitsH(SB), CX + MOVQ ·cSetEvent(SB), AX + CALL AX + + MOVQ ·cWaitsH(SB), CX + MOVQ $4294967295, DX + MOVQ ·cWaitForSingleObject(SB), AX + CALL AX + +exit: + ADDQ $32, SP + RET + +// I do not know why, but this seems to be the only way to call +// ctlHandlerProc on Windows 7. + +// func ·servicectlhandler(ctl uint32, evtype uint32, evdata uintptr, context uintptr) uintptr { +TEXT ·servicectlhandler(SB),7,$0 + MOVQ ·ctlHandlerExProc(SB), AX + JMP AX diff --git a/vendor/golang.org/x/sys/windows/syscall.go b/vendor/golang.org/x/sys/windows/syscall.go new file mode 100644 index 0000000..b07bc23 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall.go @@ -0,0 +1,71 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +// Package windows contains an interface to the low-level operating system +// primitives. OS details vary depending on the underlying system, and +// by default, godoc will display the OS-specific documentation for the current +// system. If you want godoc to display syscall documentation for another +// system, set $GOOS and $GOARCH to the desired system. For example, if +// you want to view documentation for freebsd/arm on linux/amd64, set $GOOS +// to freebsd and $GOARCH to arm. +// The primary use of this package is inside other packages that provide a more +// portable interface to the system, such as "os", "time" and "net". Use +// those packages rather than this one if you can. +// For details of the functions and data types in this package consult +// the manuals for the appropriate operating system. +// These calls return err == nil to indicate success; otherwise +// err represents an operating system error describing the failure and +// holds a value of type syscall.Errno. +package windows // import "golang.org/x/sys/windows" + +import ( + "syscall" +) + +// ByteSliceFromString returns a NUL-terminated slice of bytes +// containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func ByteSliceFromString(s string) ([]byte, error) { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, syscall.EINVAL + } + } + a := make([]byte, len(s)+1) + copy(a, s) + return a, nil +} + +// BytePtrFromString returns a pointer to a NUL-terminated array of +// bytes containing the text of s. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func BytePtrFromString(s string) (*byte, error) { + a, err := ByteSliceFromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +// Single-word zero for use when we need a valid pointer to 0 bytes. +// See mksyscall.pl. +var _zero uintptr + +func (ts *Timespec) Unix() (sec int64, nsec int64) { + return int64(ts.Sec), int64(ts.Nsec) +} + +func (tv *Timeval) Unix() (sec int64, nsec int64) { + return int64(tv.Sec), int64(tv.Usec) * 1000 +} + +func (ts *Timespec) Nano() int64 { + return int64(ts.Sec)*1e9 + int64(ts.Nsec) +} + +func (tv *Timeval) Nano() int64 { + return int64(tv.Sec)*1e9 + int64(tv.Usec)*1000 +} diff --git a/vendor/golang.org/x/sys/windows/syscall_test.go b/vendor/golang.org/x/sys/windows/syscall_test.go new file mode 100644 index 0000000..d7009e4 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall_test.go @@ -0,0 +1,53 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build windows + +package windows_test + +import ( + "syscall" + "testing" + + "golang.org/x/sys/windows" +) + +func testSetGetenv(t *testing.T, key, value string) { + err := windows.Setenv(key, value) + if err != nil { + t.Fatalf("Setenv failed to set %q: %v", value, err) + } + newvalue, found := windows.Getenv(key) + if !found { + t.Fatalf("Getenv failed to find %v variable (want value %q)", key, value) + } + if newvalue != value { + t.Fatalf("Getenv(%v) = %q; want %q", key, newvalue, value) + } +} + +func TestEnv(t *testing.T) { + testSetGetenv(t, "TESTENV", "AVALUE") + // make sure TESTENV gets set to "", not deleted + testSetGetenv(t, "TESTENV", "") +} + +func TestGetProcAddressByOrdinal(t *testing.T) { + // Attempt calling shlwapi.dll:IsOS, resolving it by ordinal, as + // suggested in + // https://msdn.microsoft.com/en-us/library/windows/desktop/bb773795.aspx + h, err := windows.LoadLibrary("shlwapi.dll") + if err != nil { + t.Fatalf("Failed to load shlwapi.dll: %s", err) + } + procIsOS, err := windows.GetProcAddressByOrdinal(h, 437) + if err != nil { + t.Fatalf("Could not find shlwapi.dll:IsOS by ordinal: %s", err) + } + const OS_NT = 1 + r, _, _ := syscall.Syscall(procIsOS, 1, OS_NT, 0, 0) + if r == 0 { + t.Error("shlwapi.dll:IsOS(OS_NT) returned 0, expected non-zero value") + } +} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go new file mode 100644 index 0000000..bb778db --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -0,0 +1,1024 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Windows system calls. + +package windows + +import ( + errorspkg "errors" + "sync" + "syscall" + "unicode/utf16" + "unsafe" +) + +type Handle uintptr + +const InvalidHandle = ^Handle(0) + +// StringToUTF16 is deprecated. Use UTF16FromString instead. +// If s contains a NUL byte this function panics instead of +// returning an error. +func StringToUTF16(s string) []uint16 { + a, err := UTF16FromString(s) + if err != nil { + panic("windows: string with NUL passed to StringToUTF16") + } + return a +} + +// UTF16FromString returns the UTF-16 encoding of the UTF-8 string +// s, with a terminating NUL added. If s contains a NUL byte at any +// location, it returns (nil, syscall.EINVAL). +func UTF16FromString(s string) ([]uint16, error) { + for i := 0; i < len(s); i++ { + if s[i] == 0 { + return nil, syscall.EINVAL + } + } + return utf16.Encode([]rune(s + "\x00")), nil +} + +// UTF16ToString returns the UTF-8 encoding of the UTF-16 sequence s, +// with a terminating NUL removed. +func UTF16ToString(s []uint16) string { + for i, v := range s { + if v == 0 { + s = s[0:i] + break + } + } + return string(utf16.Decode(s)) +} + +// StringToUTF16Ptr is deprecated. Use UTF16PtrFromString instead. +// If s contains a NUL byte this function panics instead of +// returning an error. +func StringToUTF16Ptr(s string) *uint16 { return &StringToUTF16(s)[0] } + +// UTF16PtrFromString returns pointer to the UTF-16 encoding of +// the UTF-8 string s, with a terminating NUL added. If s +// contains a NUL byte at any location, it returns (nil, syscall.EINVAL). +func UTF16PtrFromString(s string) (*uint16, error) { + a, err := UTF16FromString(s) + if err != nil { + return nil, err + } + return &a[0], nil +} + +func Getpagesize() int { return 4096 } + +// NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention. +// This is useful when interoperating with Windows code requiring callbacks. +func NewCallback(fn interface{}) uintptr { + return syscall.NewCallback(fn) +} + +// NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention. +// This is useful when interoperating with Windows code requiring callbacks. +func NewCallbackCDecl(fn interface{}) uintptr { + return syscall.NewCallbackCDecl(fn) +} + +// windows api calls + +//sys GetLastError() (lasterr error) +//sys LoadLibrary(libname string) (handle Handle, err error) = LoadLibraryW +//sys LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) = LoadLibraryExW +//sys FreeLibrary(handle Handle) (err error) +//sys GetProcAddress(module Handle, procname string) (proc uintptr, err error) +//sys GetVersion() (ver uint32, err error) +//sys FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) = FormatMessageW +//sys ExitProcess(exitcode uint32) +//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW +//sys ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) +//sys WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) +//sys SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) [failretval==0xffffffff] +//sys CloseHandle(handle Handle) (err error) +//sys GetStdHandle(stdhandle uint32) (handle Handle, err error) [failretval==InvalidHandle] +//sys SetStdHandle(stdhandle uint32, handle Handle) (err error) +//sys findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) [failretval==InvalidHandle] = FindFirstFileW +//sys findNextFile1(handle Handle, data *win32finddata1) (err error) = FindNextFileW +//sys FindClose(handle Handle) (err error) +//sys GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) +//sys GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) = GetCurrentDirectoryW +//sys SetCurrentDirectory(path *uint16) (err error) = SetCurrentDirectoryW +//sys CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) = CreateDirectoryW +//sys RemoveDirectory(path *uint16) (err error) = RemoveDirectoryW +//sys DeleteFile(path *uint16) (err error) = DeleteFileW +//sys MoveFile(from *uint16, to *uint16) (err error) = MoveFileW +//sys MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) = MoveFileExW +//sys GetComputerName(buf *uint16, n *uint32) (err error) = GetComputerNameW +//sys GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) = GetComputerNameExW +//sys SetEndOfFile(handle Handle) (err error) +//sys GetSystemTimeAsFileTime(time *Filetime) +//sys GetSystemTimePreciseAsFileTime(time *Filetime) +//sys GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) [failretval==0xffffffff] +//sys CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, threadcnt uint32) (handle Handle, err error) +//sys GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (err error) +//sys PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uint32, overlapped *Overlapped) (err error) +//sys CancelIo(s Handle) (err error) +//sys CancelIoEx(s Handle, o *Overlapped) (err error) +//sys CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) = CreateProcessW +//sys OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, err error) +//sys TerminateProcess(handle Handle, exitcode uint32) (err error) +//sys GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) +//sys GetStartupInfo(startupInfo *StartupInfo) (err error) = GetStartupInfoW +//sys GetCurrentProcess() (pseudoHandle Handle, err error) +//sys GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) +//sys DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) +//sys WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) [failretval==0xffffffff] +//sys GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) = GetTempPathW +//sys CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) +//sys GetFileType(filehandle Handle) (n uint32, err error) +//sys CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) = advapi32.CryptAcquireContextW +//sys CryptReleaseContext(provhandle Handle, flags uint32) (err error) = advapi32.CryptReleaseContext +//sys CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) = advapi32.CryptGenRandom +//sys GetEnvironmentStrings() (envs *uint16, err error) [failretval==nil] = kernel32.GetEnvironmentStringsW +//sys FreeEnvironmentStrings(envs *uint16) (err error) = kernel32.FreeEnvironmentStringsW +//sys GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) = kernel32.GetEnvironmentVariableW +//sys SetEnvironmentVariable(name *uint16, value *uint16) (err error) = kernel32.SetEnvironmentVariableW +//sys SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) +//sys GetFileAttributes(name *uint16) (attrs uint32, err error) [failretval==INVALID_FILE_ATTRIBUTES] = kernel32.GetFileAttributesW +//sys SetFileAttributes(name *uint16, attrs uint32) (err error) = kernel32.SetFileAttributesW +//sys GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) = kernel32.GetFileAttributesExW +//sys GetCommandLine() (cmd *uint16) = kernel32.GetCommandLineW +//sys CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) [failretval==nil] = shell32.CommandLineToArgvW +//sys LocalFree(hmem Handle) (handle Handle, err error) [failretval!=0] +//sys SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) +//sys FlushFileBuffers(handle Handle) (err error) +//sys GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) = kernel32.GetFullPathNameW +//sys GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) = kernel32.GetLongPathNameW +//sys GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) = kernel32.GetShortPathNameW +//sys CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) = kernel32.CreateFileMappingW +//sys MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) +//sys UnmapViewOfFile(addr uintptr) (err error) +//sys FlushViewOfFile(addr uintptr, length uintptr) (err error) +//sys VirtualLock(addr uintptr, length uintptr) (err error) +//sys VirtualUnlock(addr uintptr, length uintptr) (err error) +//sys VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) = kernel32.VirtualAlloc +//sys VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) = kernel32.VirtualFree +//sys VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) = kernel32.VirtualProtect +//sys TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) = mswsock.TransmitFile +//sys ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) = kernel32.ReadDirectoryChangesW +//sys CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) = crypt32.CertOpenSystemStoreW +//sys CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) [failretval==InvalidHandle] = crypt32.CertOpenStore +//sys CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) [failretval==nil] = crypt32.CertEnumCertificatesInStore +//sys CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) = crypt32.CertAddCertificateContextToStore +//sys CertCloseStore(store Handle, flags uint32) (err error) = crypt32.CertCloseStore +//sys CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) = crypt32.CertGetCertificateChain +//sys CertFreeCertificateChain(ctx *CertChainContext) = crypt32.CertFreeCertificateChain +//sys CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) [failretval==nil] = crypt32.CertCreateCertificateContext +//sys CertFreeCertificateContext(ctx *CertContext) (err error) = crypt32.CertFreeCertificateContext +//sys CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) = crypt32.CertVerifyCertificateChainPolicy +//sys RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) = advapi32.RegOpenKeyExW +//sys RegCloseKey(key Handle) (regerrno error) = advapi32.RegCloseKey +//sys RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegQueryInfoKeyW +//sys RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) = advapi32.RegEnumKeyExW +//sys RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) = advapi32.RegQueryValueExW +//sys getCurrentProcessId() (pid uint32) = kernel32.GetCurrentProcessId +//sys GetConsoleMode(console Handle, mode *uint32) (err error) = kernel32.GetConsoleMode +//sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode +//sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo +//sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW +//sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW +//sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot +//sys Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32FirstW +//sys Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) = kernel32.Process32NextW +//sys DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) +// This function returns 1 byte BOOLEAN rather than the 4 byte BOOL. +//sys CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) [failretval&0xff==0] = CreateSymbolicLinkW +//sys CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) [failretval&0xff==0] = CreateHardLinkW +//sys GetCurrentThreadId() (id uint32) +//sys CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) = kernel32.CreateEventW +//sys CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) = kernel32.CreateEventExW +//sys OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) = kernel32.OpenEventW +//sys SetEvent(event Handle) (err error) = kernel32.SetEvent +//sys ResetEvent(event Handle) (err error) = kernel32.ResetEvent +//sys PulseEvent(event Handle) (err error) = kernel32.PulseEvent + +// syscall interface implementation for other packages + +// GetProcAddressByOrdinal retrieves the address of the exported +// function from module by ordinal. +func GetProcAddressByOrdinal(module Handle, ordinal uintptr) (proc uintptr, err error) { + r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), ordinal, 0) + proc = uintptr(r0) + if proc == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Exit(code int) { ExitProcess(uint32(code)) } + +func makeInheritSa() *SecurityAttributes { + var sa SecurityAttributes + sa.Length = uint32(unsafe.Sizeof(sa)) + sa.InheritHandle = 1 + return &sa +} + +func Open(path string, mode int, perm uint32) (fd Handle, err error) { + if len(path) == 0 { + return InvalidHandle, ERROR_FILE_NOT_FOUND + } + pathp, err := UTF16PtrFromString(path) + if err != nil { + return InvalidHandle, err + } + var access uint32 + switch mode & (O_RDONLY | O_WRONLY | O_RDWR) { + case O_RDONLY: + access = GENERIC_READ + case O_WRONLY: + access = GENERIC_WRITE + case O_RDWR: + access = GENERIC_READ | GENERIC_WRITE + } + if mode&O_CREAT != 0 { + access |= GENERIC_WRITE + } + if mode&O_APPEND != 0 { + access &^= GENERIC_WRITE + access |= FILE_APPEND_DATA + } + sharemode := uint32(FILE_SHARE_READ | FILE_SHARE_WRITE) + var sa *SecurityAttributes + if mode&O_CLOEXEC == 0 { + sa = makeInheritSa() + } + var createmode uint32 + switch { + case mode&(O_CREAT|O_EXCL) == (O_CREAT | O_EXCL): + createmode = CREATE_NEW + case mode&(O_CREAT|O_TRUNC) == (O_CREAT | O_TRUNC): + createmode = CREATE_ALWAYS + case mode&O_CREAT == O_CREAT: + createmode = OPEN_ALWAYS + case mode&O_TRUNC == O_TRUNC: + createmode = TRUNCATE_EXISTING + default: + createmode = OPEN_EXISTING + } + h, e := CreateFile(pathp, access, sharemode, sa, createmode, FILE_ATTRIBUTE_NORMAL, 0) + return h, e +} + +func Read(fd Handle, p []byte) (n int, err error) { + var done uint32 + e := ReadFile(fd, p, &done, nil) + if e != nil { + if e == ERROR_BROKEN_PIPE { + // NOTE(brainman): work around ERROR_BROKEN_PIPE is returned on reading EOF from stdin + return 0, nil + } + return 0, e + } + if raceenabled { + if done > 0 { + raceWriteRange(unsafe.Pointer(&p[0]), int(done)) + } + raceAcquire(unsafe.Pointer(&ioSync)) + } + return int(done), nil +} + +func Write(fd Handle, p []byte) (n int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + var done uint32 + e := WriteFile(fd, p, &done, nil) + if e != nil { + return 0, e + } + if raceenabled && done > 0 { + raceReadRange(unsafe.Pointer(&p[0]), int(done)) + } + return int(done), nil +} + +var ioSync int64 + +func Seek(fd Handle, offset int64, whence int) (newoffset int64, err error) { + var w uint32 + switch whence { + case 0: + w = FILE_BEGIN + case 1: + w = FILE_CURRENT + case 2: + w = FILE_END + } + hi := int32(offset >> 32) + lo := int32(offset) + // use GetFileType to check pipe, pipe can't do seek + ft, _ := GetFileType(fd) + if ft == FILE_TYPE_PIPE { + return 0, syscall.EPIPE + } + rlo, e := SetFilePointer(fd, lo, &hi, w) + if e != nil { + return 0, e + } + return int64(hi)<<32 + int64(rlo), nil +} + +func Close(fd Handle) (err error) { + return CloseHandle(fd) +} + +var ( + Stdin = getStdHandle(STD_INPUT_HANDLE) + Stdout = getStdHandle(STD_OUTPUT_HANDLE) + Stderr = getStdHandle(STD_ERROR_HANDLE) +) + +func getStdHandle(stdhandle uint32) (fd Handle) { + r, _ := GetStdHandle(stdhandle) + CloseOnExec(r) + return r +} + +const ImplementsGetwd = true + +func Getwd() (wd string, err error) { + b := make([]uint16, 300) + n, e := GetCurrentDirectory(uint32(len(b)), &b[0]) + if e != nil { + return "", e + } + return string(utf16.Decode(b[0:n])), nil +} + +func Chdir(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return SetCurrentDirectory(pathp) +} + +func Mkdir(path string, mode uint32) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return CreateDirectory(pathp, nil) +} + +func Rmdir(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return RemoveDirectory(pathp) +} + +func Unlink(path string) (err error) { + pathp, err := UTF16PtrFromString(path) + if err != nil { + return err + } + return DeleteFile(pathp) +} + +func Rename(oldpath, newpath string) (err error) { + from, err := UTF16PtrFromString(oldpath) + if err != nil { + return err + } + to, err := UTF16PtrFromString(newpath) + if err != nil { + return err + } + return MoveFileEx(from, to, MOVEFILE_REPLACE_EXISTING) +} + +func ComputerName() (name string, err error) { + var n uint32 = MAX_COMPUTERNAME_LENGTH + 1 + b := make([]uint16, n) + e := GetComputerName(&b[0], &n) + if e != nil { + return "", e + } + return string(utf16.Decode(b[0:n])), nil +} + +func Ftruncate(fd Handle, length int64) (err error) { + curoffset, e := Seek(fd, 0, 1) + if e != nil { + return e + } + defer Seek(fd, curoffset, 0) + _, e = Seek(fd, length, 0) + if e != nil { + return e + } + e = SetEndOfFile(fd) + if e != nil { + return e + } + return nil +} + +func Gettimeofday(tv *Timeval) (err error) { + var ft Filetime + GetSystemTimeAsFileTime(&ft) + *tv = NsecToTimeval(ft.Nanoseconds()) + return nil +} + +func Pipe(p []Handle) (err error) { + if len(p) != 2 { + return syscall.EINVAL + } + var r, w Handle + e := CreatePipe(&r, &w, makeInheritSa(), 0) + if e != nil { + return e + } + p[0] = r + p[1] = w + return nil +} + +func Utimes(path string, tv []Timeval) (err error) { + if len(tv) != 2 { + return syscall.EINVAL + } + pathp, e := UTF16PtrFromString(path) + if e != nil { + return e + } + h, e := CreateFile(pathp, + FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) + if e != nil { + return e + } + defer Close(h) + a := NsecToFiletime(tv[0].Nanoseconds()) + w := NsecToFiletime(tv[1].Nanoseconds()) + return SetFileTime(h, nil, &a, &w) +} + +func UtimesNano(path string, ts []Timespec) (err error) { + if len(ts) != 2 { + return syscall.EINVAL + } + pathp, e := UTF16PtrFromString(path) + if e != nil { + return e + } + h, e := CreateFile(pathp, + FILE_WRITE_ATTRIBUTES, FILE_SHARE_WRITE, nil, + OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, 0) + if e != nil { + return e + } + defer Close(h) + a := NsecToFiletime(TimespecToNsec(ts[0])) + w := NsecToFiletime(TimespecToNsec(ts[1])) + return SetFileTime(h, nil, &a, &w) +} + +func Fsync(fd Handle) (err error) { + return FlushFileBuffers(fd) +} + +func Chmod(path string, mode uint32) (err error) { + if mode == 0 { + return syscall.EINVAL + } + p, e := UTF16PtrFromString(path) + if e != nil { + return e + } + attrs, e := GetFileAttributes(p) + if e != nil { + return e + } + if mode&S_IWRITE != 0 { + attrs &^= FILE_ATTRIBUTE_READONLY + } else { + attrs |= FILE_ATTRIBUTE_READONLY + } + return SetFileAttributes(p, attrs) +} + +func LoadGetSystemTimePreciseAsFileTime() error { + return procGetSystemTimePreciseAsFileTime.Find() +} + +func LoadCancelIoEx() error { + return procCancelIoEx.Find() +} + +func LoadSetFileCompletionNotificationModes() error { + return procSetFileCompletionNotificationModes.Find() +} + +// net api calls + +const socket_error = uintptr(^uint32(0)) + +//sys WSAStartup(verreq uint32, data *WSAData) (sockerr error) = ws2_32.WSAStartup +//sys WSACleanup() (err error) [failretval==socket_error] = ws2_32.WSACleanup +//sys WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) [failretval==socket_error] = ws2_32.WSAIoctl +//sys socket(af int32, typ int32, protocol int32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.socket +//sys Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) [failretval==socket_error] = ws2_32.setsockopt +//sys Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockopt +//sys bind(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.bind +//sys connect(s Handle, name unsafe.Pointer, namelen int32) (err error) [failretval==socket_error] = ws2_32.connect +//sys getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getsockname +//sys getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) [failretval==socket_error] = ws2_32.getpeername +//sys listen(s Handle, backlog int32) (err error) [failretval==socket_error] = ws2_32.listen +//sys shutdown(s Handle, how int32) (err error) [failretval==socket_error] = ws2_32.shutdown +//sys Closesocket(s Handle) (err error) [failretval==socket_error] = ws2_32.closesocket +//sys AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) = mswsock.AcceptEx +//sys GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) = mswsock.GetAcceptExSockaddrs +//sys WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecv +//sys WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASend +//sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom +//sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo +//sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname +//sys GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname +//sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs +//sys GetProtoByName(name string) (p *Protoent, err error) [failretval==nil] = ws2_32.getprotobyname +//sys DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) = dnsapi.DnsQuery_W +//sys DnsRecordListFree(rl *DNSRecord, freetype uint32) = dnsapi.DnsRecordListFree +//sys DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) = dnsapi.DnsNameCompare_W +//sys GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) = ws2_32.GetAddrInfoW +//sys FreeAddrInfoW(addrinfo *AddrinfoW) = ws2_32.FreeAddrInfoW +//sys GetIfEntry(pIfRow *MibIfRow) (errcode error) = iphlpapi.GetIfEntry +//sys GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) = iphlpapi.GetAdaptersInfo +//sys SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) = kernel32.SetFileCompletionNotificationModes +//sys WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) [failretval==-1] = ws2_32.WSAEnumProtocolsW +//sys GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) = iphlpapi.GetAdaptersAddresses +//sys GetACP() (acp uint32) = kernel32.GetACP +//sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar + +// For testing: clients can set this flag to force +// creation of IPv6 sockets to return EAFNOSUPPORT. +var SocketDisableIPv6 bool + +type RawSockaddrInet4 struct { + Family uint16 + Port uint16 + Addr [4]byte /* in_addr */ + Zero [8]uint8 +} + +type RawSockaddrInet6 struct { + Family uint16 + Port uint16 + Flowinfo uint32 + Addr [16]byte /* in6_addr */ + Scope_id uint32 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Sockaddr interface { + sockaddr() (ptr unsafe.Pointer, len int32, err error) // lowercase; only we can define Sockaddrs +} + +type SockaddrInet4 struct { + Port int + Addr [4]byte + raw RawSockaddrInet4 +} + +func (sa *SockaddrInet4) sockaddr() (unsafe.Pointer, int32, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_INET + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +type SockaddrInet6 struct { + Port int + ZoneId uint32 + Addr [16]byte + raw RawSockaddrInet6 +} + +func (sa *SockaddrInet6) sockaddr() (unsafe.Pointer, int32, error) { + if sa.Port < 0 || sa.Port > 0xFFFF { + return nil, 0, syscall.EINVAL + } + sa.raw.Family = AF_INET6 + p := (*[2]byte)(unsafe.Pointer(&sa.raw.Port)) + p[0] = byte(sa.Port >> 8) + p[1] = byte(sa.Port) + sa.raw.Scope_id = sa.ZoneId + for i := 0; i < len(sa.Addr); i++ { + sa.raw.Addr[i] = sa.Addr[i] + } + return unsafe.Pointer(&sa.raw), int32(unsafe.Sizeof(sa.raw)), nil +} + +type SockaddrUnix struct { + Name string +} + +func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, int32, error) { + // TODO(brainman): implement SockaddrUnix.sockaddr() + return nil, 0, syscall.EWINDOWS +} + +func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) { + switch rsa.Addr.Family { + case AF_UNIX: + return nil, syscall.EWINDOWS + + case AF_INET: + pp := (*RawSockaddrInet4)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet4) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + + case AF_INET6: + pp := (*RawSockaddrInet6)(unsafe.Pointer(rsa)) + sa := new(SockaddrInet6) + p := (*[2]byte)(unsafe.Pointer(&pp.Port)) + sa.Port = int(p[0])<<8 + int(p[1]) + sa.ZoneId = pp.Scope_id + for i := 0; i < len(sa.Addr); i++ { + sa.Addr[i] = pp.Addr[i] + } + return sa, nil + } + return nil, syscall.EAFNOSUPPORT +} + +func Socket(domain, typ, proto int) (fd Handle, err error) { + if domain == AF_INET6 && SocketDisableIPv6 { + return InvalidHandle, syscall.EAFNOSUPPORT + } + return socket(int32(domain), int32(typ), int32(proto)) +} + +func SetsockoptInt(fd Handle, level, opt int, value int) (err error) { + v := int32(value) + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&v)), int32(unsafe.Sizeof(v))) +} + +func Bind(fd Handle, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return bind(fd, ptr, n) +} + +func Connect(fd Handle, sa Sockaddr) (err error) { + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connect(fd, ptr, n) +} + +func Getsockname(fd Handle) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + if err = getsockname(fd, &rsa, &l); err != nil { + return + } + return rsa.Sockaddr() +} + +func Getpeername(fd Handle) (sa Sockaddr, err error) { + var rsa RawSockaddrAny + l := int32(unsafe.Sizeof(rsa)) + if err = getpeername(fd, &rsa, &l); err != nil { + return + } + return rsa.Sockaddr() +} + +func Listen(s Handle, n int) (err error) { + return listen(s, int32(n)) +} + +func Shutdown(fd Handle, how int) (err error) { + return shutdown(fd, int32(how)) +} + +func WSASendto(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to Sockaddr, overlapped *Overlapped, croutine *byte) (err error) { + rsa, l, err := to.sockaddr() + if err != nil { + return err + } + return WSASendTo(s, bufs, bufcnt, sent, flags, (*RawSockaddrAny)(unsafe.Pointer(rsa)), l, overlapped, croutine) +} + +func LoadGetAddrInfo() error { + return procGetAddrInfoW.Find() +} + +var connectExFunc struct { + once sync.Once + addr uintptr + err error +} + +func LoadConnectEx() error { + connectExFunc.once.Do(func() { + var s Handle + s, connectExFunc.err = Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) + if connectExFunc.err != nil { + return + } + defer CloseHandle(s) + var n uint32 + connectExFunc.err = WSAIoctl(s, + SIO_GET_EXTENSION_FUNCTION_POINTER, + (*byte)(unsafe.Pointer(&WSAID_CONNECTEX)), + uint32(unsafe.Sizeof(WSAID_CONNECTEX)), + (*byte)(unsafe.Pointer(&connectExFunc.addr)), + uint32(unsafe.Sizeof(connectExFunc.addr)), + &n, nil, 0) + }) + return connectExFunc.err +} + +func connectEx(s Handle, name unsafe.Pointer, namelen int32, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(connectExFunc.addr, 7, uintptr(s), uintptr(name), uintptr(namelen), uintptr(unsafe.Pointer(sendBuf)), uintptr(sendDataLen), uintptr(unsafe.Pointer(bytesSent)), uintptr(unsafe.Pointer(overlapped)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = error(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ConnectEx(fd Handle, sa Sockaddr, sendBuf *byte, sendDataLen uint32, bytesSent *uint32, overlapped *Overlapped) error { + err := LoadConnectEx() + if err != nil { + return errorspkg.New("failed to find ConnectEx: " + err.Error()) + } + ptr, n, err := sa.sockaddr() + if err != nil { + return err + } + return connectEx(fd, ptr, n, sendBuf, sendDataLen, bytesSent, overlapped) +} + +// Invented structures to support what package os expects. +type Rusage struct { + CreationTime Filetime + ExitTime Filetime + KernelTime Filetime + UserTime Filetime +} + +type WaitStatus struct { + ExitCode uint32 +} + +func (w WaitStatus) Exited() bool { return true } + +func (w WaitStatus) ExitStatus() int { return int(w.ExitCode) } + +func (w WaitStatus) Signal() Signal { return -1 } + +func (w WaitStatus) CoreDump() bool { return false } + +func (w WaitStatus) Stopped() bool { return false } + +func (w WaitStatus) Continued() bool { return false } + +func (w WaitStatus) StopSignal() Signal { return -1 } + +func (w WaitStatus) Signaled() bool { return false } + +func (w WaitStatus) TrapCause() int { return -1 } + +// Timespec is an invented structure on Windows, but here for +// consistency with the corresponding package for other operating systems. +type Timespec struct { + Sec int64 + Nsec int64 +} + +func TimespecToNsec(ts Timespec) int64 { return int64(ts.Sec)*1e9 + int64(ts.Nsec) } + +func NsecToTimespec(nsec int64) (ts Timespec) { + ts.Sec = nsec / 1e9 + ts.Nsec = nsec % 1e9 + return +} + +// TODO(brainman): fix all needed for net + +func Accept(fd Handle) (nfd Handle, sa Sockaddr, err error) { return 0, nil, syscall.EWINDOWS } +func Recvfrom(fd Handle, p []byte, flags int) (n int, from Sockaddr, err error) { + return 0, nil, syscall.EWINDOWS +} +func Sendto(fd Handle, p []byte, flags int, to Sockaddr) (err error) { return syscall.EWINDOWS } +func SetsockoptTimeval(fd Handle, level, opt int, tv *Timeval) (err error) { return syscall.EWINDOWS } + +// The Linger struct is wrong but we only noticed after Go 1. +// sysLinger is the real system call structure. + +// BUG(brainman): The definition of Linger is not appropriate for direct use +// with Setsockopt and Getsockopt. +// Use SetsockoptLinger instead. + +type Linger struct { + Onoff int32 + Linger int32 +} + +type sysLinger struct { + Onoff uint16 + Linger uint16 +} + +type IPMreq struct { + Multiaddr [4]byte /* in_addr */ + Interface [4]byte /* in_addr */ +} + +type IPv6Mreq struct { + Multiaddr [16]byte /* in6_addr */ + Interface uint32 +} + +func GetsockoptInt(fd Handle, level, opt int) (int, error) { return -1, syscall.EWINDOWS } + +func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) { + sys := sysLinger{Onoff: uint16(l.Onoff), Linger: uint16(l.Linger)} + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&sys)), int32(unsafe.Sizeof(sys))) +} + +func SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) { + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4) +} +func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) { + return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq))) +} +func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { + return syscall.EWINDOWS +} + +func Getpid() (pid int) { return int(getCurrentProcessId()) } + +func FindFirstFile(name *uint16, data *Win32finddata) (handle Handle, err error) { + // NOTE(rsc): The Win32finddata struct is wrong for the system call: + // the two paths are each one uint16 short. Use the correct struct, + // a win32finddata1, and then copy the results out. + // There is no loss of expressivity here, because the final + // uint16, if it is used, is supposed to be a NUL, and Go doesn't need that. + // For Go 1.1, we might avoid the allocation of win32finddata1 here + // by adding a final Bug [2]uint16 field to the struct and then + // adjusting the fields in the result directly. + var data1 win32finddata1 + handle, err = findFirstFile1(name, &data1) + if err == nil { + copyFindData(data, &data1) + } + return +} + +func FindNextFile(handle Handle, data *Win32finddata) (err error) { + var data1 win32finddata1 + err = findNextFile1(handle, &data1) + if err == nil { + copyFindData(data, &data1) + } + return +} + +func getProcessEntry(pid int) (*ProcessEntry32, error) { + snapshot, err := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0) + if err != nil { + return nil, err + } + defer CloseHandle(snapshot) + var procEntry ProcessEntry32 + procEntry.Size = uint32(unsafe.Sizeof(procEntry)) + if err = Process32First(snapshot, &procEntry); err != nil { + return nil, err + } + for { + if procEntry.ProcessID == uint32(pid) { + return &procEntry, nil + } + err = Process32Next(snapshot, &procEntry) + if err != nil { + return nil, err + } + } +} + +func Getppid() (ppid int) { + pe, err := getProcessEntry(Getpid()) + if err != nil { + return -1 + } + return int(pe.ParentProcessID) +} + +// TODO(brainman): fix all needed for os +func Fchdir(fd Handle) (err error) { return syscall.EWINDOWS } +func Link(oldpath, newpath string) (err error) { return syscall.EWINDOWS } +func Symlink(path, link string) (err error) { return syscall.EWINDOWS } + +func Fchmod(fd Handle, mode uint32) (err error) { return syscall.EWINDOWS } +func Chown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } +func Lchown(path string, uid int, gid int) (err error) { return syscall.EWINDOWS } +func Fchown(fd Handle, uid int, gid int) (err error) { return syscall.EWINDOWS } + +func Getuid() (uid int) { return -1 } +func Geteuid() (euid int) { return -1 } +func Getgid() (gid int) { return -1 } +func Getegid() (egid int) { return -1 } +func Getgroups() (gids []int, err error) { return nil, syscall.EWINDOWS } + +type Signal int + +func (s Signal) Signal() {} + +func (s Signal) String() string { + if 0 <= s && int(s) < len(signals) { + str := signals[s] + if str != "" { + return str + } + } + return "signal " + itoa(int(s)) +} + +func LoadCreateSymbolicLink() error { + return procCreateSymbolicLinkW.Find() +} + +// Readlink returns the destination of the named symbolic link. +func Readlink(path string, buf []byte) (n int, err error) { + fd, err := CreateFile(StringToUTF16Ptr(path), GENERIC_READ, 0, nil, OPEN_EXISTING, + FILE_FLAG_OPEN_REPARSE_POINT|FILE_FLAG_BACKUP_SEMANTICS, 0) + if err != nil { + return -1, err + } + defer CloseHandle(fd) + + rdbbuf := make([]byte, MAXIMUM_REPARSE_DATA_BUFFER_SIZE) + var bytesReturned uint32 + err = DeviceIoControl(fd, FSCTL_GET_REPARSE_POINT, nil, 0, &rdbbuf[0], uint32(len(rdbbuf)), &bytesReturned, nil) + if err != nil { + return -1, err + } + + rdb := (*reparseDataBuffer)(unsafe.Pointer(&rdbbuf[0])) + var s string + switch rdb.ReparseTag { + case IO_REPARSE_TAG_SYMLINK: + data := (*symbolicLinkReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) + p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) + s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) + case IO_REPARSE_TAG_MOUNT_POINT: + data := (*mountPointReparseBuffer)(unsafe.Pointer(&rdb.reparseBuffer)) + p := (*[0xffff]uint16)(unsafe.Pointer(&data.PathBuffer[0])) + s = UTF16ToString(p[data.PrintNameOffset/2 : (data.PrintNameLength-data.PrintNameOffset)/2]) + default: + // the path is not a symlink or junction but another type of reparse + // point + return -1, syscall.ENOENT + } + n = copy(buf, []byte(s)) + + return n, nil +} diff --git a/vendor/golang.org/x/sys/windows/syscall_windows_test.go b/vendor/golang.org/x/sys/windows/syscall_windows_test.go new file mode 100644 index 0000000..9c7133c --- /dev/null +++ b/vendor/golang.org/x/sys/windows/syscall_windows_test.go @@ -0,0 +1,107 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows_test + +import ( + "io/ioutil" + "os" + "path/filepath" + "syscall" + "testing" + "unsafe" + + "golang.org/x/sys/windows" +) + +func TestWin32finddata(t *testing.T) { + dir, err := ioutil.TempDir("", "go-build") + if err != nil { + t.Fatalf("failed to create temp directory: %v", err) + } + defer os.RemoveAll(dir) + + path := filepath.Join(dir, "long_name.and_extension") + f, err := os.Create(path) + if err != nil { + t.Fatalf("failed to create %v: %v", path, err) + } + f.Close() + + type X struct { + fd windows.Win32finddata + got byte + pad [10]byte // to protect ourselves + + } + var want byte = 2 // it is unlikely to have this character in the filename + x := X{got: want} + + pathp, _ := windows.UTF16PtrFromString(path) + h, err := windows.FindFirstFile(pathp, &(x.fd)) + if err != nil { + t.Fatalf("FindFirstFile failed: %v", err) + } + err = windows.FindClose(h) + if err != nil { + t.Fatalf("FindClose failed: %v", err) + } + + if x.got != want { + t.Fatalf("memory corruption: want=%d got=%d", want, x.got) + } +} + +func TestFormatMessage(t *testing.T) { + dll := windows.MustLoadDLL("pdh.dll") + + pdhOpenQuery := func(datasrc *uint16, userdata uint32, query *windows.Handle) (errno uintptr) { + r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhOpenQueryW").Addr(), 3, uintptr(unsafe.Pointer(datasrc)), uintptr(userdata), uintptr(unsafe.Pointer(query))) + return r0 + } + + pdhCloseQuery := func(query windows.Handle) (errno uintptr) { + r0, _, _ := syscall.Syscall(dll.MustFindProc("PdhCloseQuery").Addr(), 1, uintptr(query), 0, 0) + return r0 + } + + var q windows.Handle + name, err := windows.UTF16PtrFromString("no_such_source") + if err != nil { + t.Fatal(err) + } + errno := pdhOpenQuery(name, 0, &q) + if errno == 0 { + pdhCloseQuery(q) + t.Fatal("PdhOpenQuery succeeded, but expected to fail.") + } + + const flags uint32 = syscall.FORMAT_MESSAGE_FROM_HMODULE | syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY | syscall.FORMAT_MESSAGE_IGNORE_INSERTS + buf := make([]uint16, 300) + _, err = windows.FormatMessage(flags, uintptr(dll.Handle), uint32(errno), 0, buf, nil) + if err != nil { + t.Fatalf("FormatMessage for handle=%x and errno=%x failed: %v", dll.Handle, errno, err) + } +} + +func abort(funcname string, err error) { + panic(funcname + " failed: " + err.Error()) +} + +func ExampleLoadLibrary() { + h, err := windows.LoadLibrary("kernel32.dll") + if err != nil { + abort("LoadLibrary", err) + } + defer windows.FreeLibrary(h) + proc, err := windows.GetProcAddress(h, "GetVersion") + if err != nil { + abort("GetProcAddress", err) + } + r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0) + major := byte(r) + minor := uint8(r >> 8) + build := uint16(r >> 16) + print("windows version ", major, ".", minor, " (Build ", build, ")\n") +} diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go new file mode 100644 index 0000000..0229f79 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -0,0 +1,1282 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +import "syscall" + +const ( + // Windows errors. + ERROR_FILE_NOT_FOUND syscall.Errno = 2 + ERROR_PATH_NOT_FOUND syscall.Errno = 3 + ERROR_ACCESS_DENIED syscall.Errno = 5 + ERROR_NO_MORE_FILES syscall.Errno = 18 + ERROR_HANDLE_EOF syscall.Errno = 38 + ERROR_NETNAME_DELETED syscall.Errno = 64 + ERROR_FILE_EXISTS syscall.Errno = 80 + ERROR_BROKEN_PIPE syscall.Errno = 109 + ERROR_BUFFER_OVERFLOW syscall.Errno = 111 + ERROR_INSUFFICIENT_BUFFER syscall.Errno = 122 + ERROR_MOD_NOT_FOUND syscall.Errno = 126 + ERROR_PROC_NOT_FOUND syscall.Errno = 127 + ERROR_ALREADY_EXISTS syscall.Errno = 183 + ERROR_ENVVAR_NOT_FOUND syscall.Errno = 203 + ERROR_MORE_DATA syscall.Errno = 234 + ERROR_OPERATION_ABORTED syscall.Errno = 995 + ERROR_IO_PENDING syscall.Errno = 997 + ERROR_SERVICE_SPECIFIC_ERROR syscall.Errno = 1066 + ERROR_NOT_FOUND syscall.Errno = 1168 + ERROR_PRIVILEGE_NOT_HELD syscall.Errno = 1314 + WSAEACCES syscall.Errno = 10013 + WSAECONNRESET syscall.Errno = 10054 +) + +const ( + // Invented values to support what package os expects. + O_RDONLY = 0x00000 + O_WRONLY = 0x00001 + O_RDWR = 0x00002 + O_CREAT = 0x00040 + O_EXCL = 0x00080 + O_NOCTTY = 0x00100 + O_TRUNC = 0x00200 + O_NONBLOCK = 0x00800 + O_APPEND = 0x00400 + O_SYNC = 0x01000 + O_ASYNC = 0x02000 + O_CLOEXEC = 0x80000 +) + +const ( + // More invented values for signals + SIGHUP = Signal(0x1) + SIGINT = Signal(0x2) + SIGQUIT = Signal(0x3) + SIGILL = Signal(0x4) + SIGTRAP = Signal(0x5) + SIGABRT = Signal(0x6) + SIGBUS = Signal(0x7) + SIGFPE = Signal(0x8) + SIGKILL = Signal(0x9) + SIGSEGV = Signal(0xb) + SIGPIPE = Signal(0xd) + SIGALRM = Signal(0xe) + SIGTERM = Signal(0xf) +) + +var signals = [...]string{ + 1: "hangup", + 2: "interrupt", + 3: "quit", + 4: "illegal instruction", + 5: "trace/breakpoint trap", + 6: "aborted", + 7: "bus error", + 8: "floating point exception", + 9: "killed", + 10: "user defined signal 1", + 11: "segmentation fault", + 12: "user defined signal 2", + 13: "broken pipe", + 14: "alarm clock", + 15: "terminated", +} + +const ( + GENERIC_READ = 0x80000000 + GENERIC_WRITE = 0x40000000 + GENERIC_EXECUTE = 0x20000000 + GENERIC_ALL = 0x10000000 + + FILE_LIST_DIRECTORY = 0x00000001 + FILE_APPEND_DATA = 0x00000004 + FILE_WRITE_ATTRIBUTES = 0x00000100 + + FILE_SHARE_READ = 0x00000001 + FILE_SHARE_WRITE = 0x00000002 + FILE_SHARE_DELETE = 0x00000004 + FILE_ATTRIBUTE_READONLY = 0x00000001 + FILE_ATTRIBUTE_HIDDEN = 0x00000002 + FILE_ATTRIBUTE_SYSTEM = 0x00000004 + FILE_ATTRIBUTE_DIRECTORY = 0x00000010 + FILE_ATTRIBUTE_ARCHIVE = 0x00000020 + FILE_ATTRIBUTE_NORMAL = 0x00000080 + FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400 + + INVALID_FILE_ATTRIBUTES = 0xffffffff + + CREATE_NEW = 1 + CREATE_ALWAYS = 2 + OPEN_EXISTING = 3 + OPEN_ALWAYS = 4 + TRUNCATE_EXISTING = 5 + + FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 + FILE_FLAG_BACKUP_SEMANTICS = 0x02000000 + FILE_FLAG_OVERLAPPED = 0x40000000 + + HANDLE_FLAG_INHERIT = 0x00000001 + STARTF_USESTDHANDLES = 0x00000100 + STARTF_USESHOWWINDOW = 0x00000001 + DUPLICATE_CLOSE_SOURCE = 0x00000001 + DUPLICATE_SAME_ACCESS = 0x00000002 + + STD_INPUT_HANDLE = -10 & (1<<32 - 1) + STD_OUTPUT_HANDLE = -11 & (1<<32 - 1) + STD_ERROR_HANDLE = -12 & (1<<32 - 1) + + FILE_BEGIN = 0 + FILE_CURRENT = 1 + FILE_END = 2 + + LANG_ENGLISH = 0x09 + SUBLANG_ENGLISH_US = 0x01 + + FORMAT_MESSAGE_ALLOCATE_BUFFER = 256 + FORMAT_MESSAGE_IGNORE_INSERTS = 512 + FORMAT_MESSAGE_FROM_STRING = 1024 + FORMAT_MESSAGE_FROM_HMODULE = 2048 + FORMAT_MESSAGE_FROM_SYSTEM = 4096 + FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192 + FORMAT_MESSAGE_MAX_WIDTH_MASK = 255 + + MAX_PATH = 260 + MAX_LONG_PATH = 32768 + + MAX_COMPUTERNAME_LENGTH = 15 + + TIME_ZONE_ID_UNKNOWN = 0 + TIME_ZONE_ID_STANDARD = 1 + + TIME_ZONE_ID_DAYLIGHT = 2 + IGNORE = 0 + INFINITE = 0xffffffff + + WAIT_TIMEOUT = 258 + WAIT_ABANDONED = 0x00000080 + WAIT_OBJECT_0 = 0x00000000 + WAIT_FAILED = 0xFFFFFFFF + + CREATE_NEW_PROCESS_GROUP = 0x00000200 + CREATE_UNICODE_ENVIRONMENT = 0x00000400 + + PROCESS_TERMINATE = 1 + PROCESS_QUERY_INFORMATION = 0x00000400 + SYNCHRONIZE = 0x00100000 + + FILE_MAP_COPY = 0x01 + FILE_MAP_WRITE = 0x02 + FILE_MAP_READ = 0x04 + FILE_MAP_EXECUTE = 0x20 + + CTRL_C_EVENT = 0 + CTRL_BREAK_EVENT = 1 + + // Windows reserves errors >= 1<<29 for application use. + APPLICATION_ERROR = 1 << 29 +) + +const ( + // flags for CreateToolhelp32Snapshot + TH32CS_SNAPHEAPLIST = 0x01 + TH32CS_SNAPPROCESS = 0x02 + TH32CS_SNAPTHREAD = 0x04 + TH32CS_SNAPMODULE = 0x08 + TH32CS_SNAPMODULE32 = 0x10 + TH32CS_SNAPALL = TH32CS_SNAPHEAPLIST | TH32CS_SNAPMODULE | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD + TH32CS_INHERIT = 0x80000000 +) + +const ( + // filters for ReadDirectoryChangesW + FILE_NOTIFY_CHANGE_FILE_NAME = 0x001 + FILE_NOTIFY_CHANGE_DIR_NAME = 0x002 + FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x004 + FILE_NOTIFY_CHANGE_SIZE = 0x008 + FILE_NOTIFY_CHANGE_LAST_WRITE = 0x010 + FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x020 + FILE_NOTIFY_CHANGE_CREATION = 0x040 + FILE_NOTIFY_CHANGE_SECURITY = 0x100 +) + +const ( + // do not reorder + FILE_ACTION_ADDED = iota + 1 + FILE_ACTION_REMOVED + FILE_ACTION_MODIFIED + FILE_ACTION_RENAMED_OLD_NAME + FILE_ACTION_RENAMED_NEW_NAME +) + +const ( + // wincrypt.h + PROV_RSA_FULL = 1 + PROV_RSA_SIG = 2 + PROV_DSS = 3 + PROV_FORTEZZA = 4 + PROV_MS_EXCHANGE = 5 + PROV_SSL = 6 + PROV_RSA_SCHANNEL = 12 + PROV_DSS_DH = 13 + PROV_EC_ECDSA_SIG = 14 + PROV_EC_ECNRA_SIG = 15 + PROV_EC_ECDSA_FULL = 16 + PROV_EC_ECNRA_FULL = 17 + PROV_DH_SCHANNEL = 18 + PROV_SPYRUS_LYNKS = 20 + PROV_RNG = 21 + PROV_INTEL_SEC = 22 + PROV_REPLACE_OWF = 23 + PROV_RSA_AES = 24 + CRYPT_VERIFYCONTEXT = 0xF0000000 + CRYPT_NEWKEYSET = 0x00000008 + CRYPT_DELETEKEYSET = 0x00000010 + CRYPT_MACHINE_KEYSET = 0x00000020 + CRYPT_SILENT = 0x00000040 + CRYPT_DEFAULT_CONTAINER_OPTIONAL = 0x00000080 + + USAGE_MATCH_TYPE_AND = 0 + USAGE_MATCH_TYPE_OR = 1 + + X509_ASN_ENCODING = 0x00000001 + PKCS_7_ASN_ENCODING = 0x00010000 + + CERT_STORE_PROV_MEMORY = 2 + + CERT_STORE_ADD_ALWAYS = 4 + + CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG = 0x00000004 + + CERT_TRUST_NO_ERROR = 0x00000000 + CERT_TRUST_IS_NOT_TIME_VALID = 0x00000001 + CERT_TRUST_IS_REVOKED = 0x00000004 + CERT_TRUST_IS_NOT_SIGNATURE_VALID = 0x00000008 + CERT_TRUST_IS_NOT_VALID_FOR_USAGE = 0x00000010 + CERT_TRUST_IS_UNTRUSTED_ROOT = 0x00000020 + CERT_TRUST_REVOCATION_STATUS_UNKNOWN = 0x00000040 + CERT_TRUST_IS_CYCLIC = 0x00000080 + CERT_TRUST_INVALID_EXTENSION = 0x00000100 + CERT_TRUST_INVALID_POLICY_CONSTRAINTS = 0x00000200 + CERT_TRUST_INVALID_BASIC_CONSTRAINTS = 0x00000400 + CERT_TRUST_INVALID_NAME_CONSTRAINTS = 0x00000800 + CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT = 0x00001000 + CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT = 0x00002000 + CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT = 0x00004000 + CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT = 0x00008000 + CERT_TRUST_IS_OFFLINE_REVOCATION = 0x01000000 + CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY = 0x02000000 + CERT_TRUST_IS_EXPLICIT_DISTRUST = 0x04000000 + CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT = 0x08000000 + + CERT_CHAIN_POLICY_BASE = 1 + CERT_CHAIN_POLICY_AUTHENTICODE = 2 + CERT_CHAIN_POLICY_AUTHENTICODE_TS = 3 + CERT_CHAIN_POLICY_SSL = 4 + CERT_CHAIN_POLICY_BASIC_CONSTRAINTS = 5 + CERT_CHAIN_POLICY_NT_AUTH = 6 + CERT_CHAIN_POLICY_MICROSOFT_ROOT = 7 + CERT_CHAIN_POLICY_EV = 8 + + CERT_E_EXPIRED = 0x800B0101 + CERT_E_ROLE = 0x800B0103 + CERT_E_PURPOSE = 0x800B0106 + CERT_E_UNTRUSTEDROOT = 0x800B0109 + CERT_E_CN_NO_MATCH = 0x800B010F + + AUTHTYPE_CLIENT = 1 + AUTHTYPE_SERVER = 2 +) + +var ( + OID_PKIX_KP_SERVER_AUTH = []byte("1.3.6.1.5.5.7.3.1\x00") + OID_SERVER_GATED_CRYPTO = []byte("1.3.6.1.4.1.311.10.3.3\x00") + OID_SGC_NETSCAPE = []byte("2.16.840.1.113730.4.1\x00") +) + +// Invented values to support what package os expects. +type Timeval struct { + Sec int32 + Usec int32 +} + +func (tv *Timeval) Nanoseconds() int64 { + return (int64(tv.Sec)*1e6 + int64(tv.Usec)) * 1e3 +} + +func NsecToTimeval(nsec int64) (tv Timeval) { + tv.Sec = int32(nsec / 1e9) + tv.Usec = int32(nsec % 1e9 / 1e3) + return +} + +type SecurityAttributes struct { + Length uint32 + SecurityDescriptor uintptr + InheritHandle uint32 +} + +type Overlapped struct { + Internal uintptr + InternalHigh uintptr + Offset uint32 + OffsetHigh uint32 + HEvent Handle +} + +type FileNotifyInformation struct { + NextEntryOffset uint32 + Action uint32 + FileNameLength uint32 + FileName uint16 +} + +type Filetime struct { + LowDateTime uint32 + HighDateTime uint32 +} + +// Nanoseconds returns Filetime ft in nanoseconds +// since Epoch (00:00:00 UTC, January 1, 1970). +func (ft *Filetime) Nanoseconds() int64 { + // 100-nanosecond intervals since January 1, 1601 + nsec := int64(ft.HighDateTime)<<32 + int64(ft.LowDateTime) + // change starting time to the Epoch (00:00:00 UTC, January 1, 1970) + nsec -= 116444736000000000 + // convert into nanoseconds + nsec *= 100 + return nsec +} + +func NsecToFiletime(nsec int64) (ft Filetime) { + // convert into 100-nanosecond + nsec /= 100 + // change starting time to January 1, 1601 + nsec += 116444736000000000 + // split into high / low + ft.LowDateTime = uint32(nsec & 0xffffffff) + ft.HighDateTime = uint32(nsec >> 32 & 0xffffffff) + return ft +} + +type Win32finddata struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH - 1]uint16 + AlternateFileName [13]uint16 +} + +// This is the actual system call structure. +// Win32finddata is what we committed to in Go 1. +type win32finddata1 struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 + Reserved0 uint32 + Reserved1 uint32 + FileName [MAX_PATH]uint16 + AlternateFileName [14]uint16 +} + +func copyFindData(dst *Win32finddata, src *win32finddata1) { + dst.FileAttributes = src.FileAttributes + dst.CreationTime = src.CreationTime + dst.LastAccessTime = src.LastAccessTime + dst.LastWriteTime = src.LastWriteTime + dst.FileSizeHigh = src.FileSizeHigh + dst.FileSizeLow = src.FileSizeLow + dst.Reserved0 = src.Reserved0 + dst.Reserved1 = src.Reserved1 + + // The src is 1 element bigger than dst, but it must be NUL. + copy(dst.FileName[:], src.FileName[:]) + copy(dst.AlternateFileName[:], src.AlternateFileName[:]) +} + +type ByHandleFileInformation struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + VolumeSerialNumber uint32 + FileSizeHigh uint32 + FileSizeLow uint32 + NumberOfLinks uint32 + FileIndexHigh uint32 + FileIndexLow uint32 +} + +const ( + GetFileExInfoStandard = 0 + GetFileExMaxInfoLevel = 1 +) + +type Win32FileAttributeData struct { + FileAttributes uint32 + CreationTime Filetime + LastAccessTime Filetime + LastWriteTime Filetime + FileSizeHigh uint32 + FileSizeLow uint32 +} + +// ShowWindow constants +const ( + // winuser.h + SW_HIDE = 0 + SW_NORMAL = 1 + SW_SHOWNORMAL = 1 + SW_SHOWMINIMIZED = 2 + SW_SHOWMAXIMIZED = 3 + SW_MAXIMIZE = 3 + SW_SHOWNOACTIVATE = 4 + SW_SHOW = 5 + SW_MINIMIZE = 6 + SW_SHOWMINNOACTIVE = 7 + SW_SHOWNA = 8 + SW_RESTORE = 9 + SW_SHOWDEFAULT = 10 + SW_FORCEMINIMIZE = 11 +) + +type StartupInfo struct { + Cb uint32 + _ *uint16 + Desktop *uint16 + Title *uint16 + X uint32 + Y uint32 + XSize uint32 + YSize uint32 + XCountChars uint32 + YCountChars uint32 + FillAttribute uint32 + Flags uint32 + ShowWindow uint16 + _ uint16 + _ *byte + StdInput Handle + StdOutput Handle + StdErr Handle +} + +type ProcessInformation struct { + Process Handle + Thread Handle + ProcessId uint32 + ThreadId uint32 +} + +type ProcessEntry32 struct { + Size uint32 + Usage uint32 + ProcessID uint32 + DefaultHeapID uintptr + ModuleID uint32 + Threads uint32 + ParentProcessID uint32 + PriClassBase int32 + Flags uint32 + ExeFile [MAX_PATH]uint16 +} + +type Systemtime struct { + Year uint16 + Month uint16 + DayOfWeek uint16 + Day uint16 + Hour uint16 + Minute uint16 + Second uint16 + Milliseconds uint16 +} + +type Timezoneinformation struct { + Bias int32 + StandardName [32]uint16 + StandardDate Systemtime + StandardBias int32 + DaylightName [32]uint16 + DaylightDate Systemtime + DaylightBias int32 +} + +// Socket related. + +const ( + AF_UNSPEC = 0 + AF_UNIX = 1 + AF_INET = 2 + AF_INET6 = 23 + AF_NETBIOS = 17 + + SOCK_STREAM = 1 + SOCK_DGRAM = 2 + SOCK_RAW = 3 + SOCK_SEQPACKET = 5 + + IPPROTO_IP = 0 + IPPROTO_IPV6 = 0x29 + IPPROTO_TCP = 6 + IPPROTO_UDP = 17 + + SOL_SOCKET = 0xffff + SO_REUSEADDR = 4 + SO_KEEPALIVE = 8 + SO_DONTROUTE = 16 + SO_BROADCAST = 32 + SO_LINGER = 128 + SO_RCVBUF = 0x1002 + SO_SNDBUF = 0x1001 + SO_UPDATE_ACCEPT_CONTEXT = 0x700b + SO_UPDATE_CONNECT_CONTEXT = 0x7010 + + IOC_OUT = 0x40000000 + IOC_IN = 0x80000000 + IOC_VENDOR = 0x18000000 + IOC_INOUT = IOC_IN | IOC_OUT + IOC_WS2 = 0x08000000 + SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 + SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 + SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + + // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 + + IP_TOS = 0x3 + IP_TTL = 0x4 + IP_MULTICAST_IF = 0x9 + IP_MULTICAST_TTL = 0xa + IP_MULTICAST_LOOP = 0xb + IP_ADD_MEMBERSHIP = 0xc + IP_DROP_MEMBERSHIP = 0xd + + IPV6_V6ONLY = 0x1b + IPV6_UNICAST_HOPS = 0x4 + IPV6_MULTICAST_IF = 0x9 + IPV6_MULTICAST_HOPS = 0xa + IPV6_MULTICAST_LOOP = 0xb + IPV6_JOIN_GROUP = 0xc + IPV6_LEAVE_GROUP = 0xd + + SOMAXCONN = 0x7fffffff + + TCP_NODELAY = 1 + + SHUT_RD = 0 + SHUT_WR = 1 + SHUT_RDWR = 2 + + WSADESCRIPTION_LEN = 256 + WSASYS_STATUS_LEN = 128 +) + +type WSABuf struct { + Len uint32 + Buf *byte +} + +// Invented values to support what package os expects. +const ( + S_IFMT = 0x1f000 + S_IFIFO = 0x1000 + S_IFCHR = 0x2000 + S_IFDIR = 0x4000 + S_IFBLK = 0x6000 + S_IFREG = 0x8000 + S_IFLNK = 0xa000 + S_IFSOCK = 0xc000 + S_ISUID = 0x800 + S_ISGID = 0x400 + S_ISVTX = 0x200 + S_IRUSR = 0x100 + S_IWRITE = 0x80 + S_IWUSR = 0x80 + S_IXUSR = 0x40 +) + +const ( + FILE_TYPE_CHAR = 0x0002 + FILE_TYPE_DISK = 0x0001 + FILE_TYPE_PIPE = 0x0003 + FILE_TYPE_REMOTE = 0x8000 + FILE_TYPE_UNKNOWN = 0x0000 +) + +type Hostent struct { + Name *byte + Aliases **byte + AddrType uint16 + Length uint16 + AddrList **byte +} + +type Protoent struct { + Name *byte + Aliases **byte + Proto uint16 +} + +const ( + DNS_TYPE_A = 0x0001 + DNS_TYPE_NS = 0x0002 + DNS_TYPE_MD = 0x0003 + DNS_TYPE_MF = 0x0004 + DNS_TYPE_CNAME = 0x0005 + DNS_TYPE_SOA = 0x0006 + DNS_TYPE_MB = 0x0007 + DNS_TYPE_MG = 0x0008 + DNS_TYPE_MR = 0x0009 + DNS_TYPE_NULL = 0x000a + DNS_TYPE_WKS = 0x000b + DNS_TYPE_PTR = 0x000c + DNS_TYPE_HINFO = 0x000d + DNS_TYPE_MINFO = 0x000e + DNS_TYPE_MX = 0x000f + DNS_TYPE_TEXT = 0x0010 + DNS_TYPE_RP = 0x0011 + DNS_TYPE_AFSDB = 0x0012 + DNS_TYPE_X25 = 0x0013 + DNS_TYPE_ISDN = 0x0014 + DNS_TYPE_RT = 0x0015 + DNS_TYPE_NSAP = 0x0016 + DNS_TYPE_NSAPPTR = 0x0017 + DNS_TYPE_SIG = 0x0018 + DNS_TYPE_KEY = 0x0019 + DNS_TYPE_PX = 0x001a + DNS_TYPE_GPOS = 0x001b + DNS_TYPE_AAAA = 0x001c + DNS_TYPE_LOC = 0x001d + DNS_TYPE_NXT = 0x001e + DNS_TYPE_EID = 0x001f + DNS_TYPE_NIMLOC = 0x0020 + DNS_TYPE_SRV = 0x0021 + DNS_TYPE_ATMA = 0x0022 + DNS_TYPE_NAPTR = 0x0023 + DNS_TYPE_KX = 0x0024 + DNS_TYPE_CERT = 0x0025 + DNS_TYPE_A6 = 0x0026 + DNS_TYPE_DNAME = 0x0027 + DNS_TYPE_SINK = 0x0028 + DNS_TYPE_OPT = 0x0029 + DNS_TYPE_DS = 0x002B + DNS_TYPE_RRSIG = 0x002E + DNS_TYPE_NSEC = 0x002F + DNS_TYPE_DNSKEY = 0x0030 + DNS_TYPE_DHCID = 0x0031 + DNS_TYPE_UINFO = 0x0064 + DNS_TYPE_UID = 0x0065 + DNS_TYPE_GID = 0x0066 + DNS_TYPE_UNSPEC = 0x0067 + DNS_TYPE_ADDRS = 0x00f8 + DNS_TYPE_TKEY = 0x00f9 + DNS_TYPE_TSIG = 0x00fa + DNS_TYPE_IXFR = 0x00fb + DNS_TYPE_AXFR = 0x00fc + DNS_TYPE_MAILB = 0x00fd + DNS_TYPE_MAILA = 0x00fe + DNS_TYPE_ALL = 0x00ff + DNS_TYPE_ANY = 0x00ff + DNS_TYPE_WINS = 0xff01 + DNS_TYPE_WINSR = 0xff02 + DNS_TYPE_NBSTAT = 0xff01 +) + +const ( + DNS_INFO_NO_RECORDS = 0x251D +) + +const ( + // flags inside DNSRecord.Dw + DnsSectionQuestion = 0x0000 + DnsSectionAnswer = 0x0001 + DnsSectionAuthority = 0x0002 + DnsSectionAdditional = 0x0003 +) + +type DNSSRVData struct { + Target *uint16 + Priority uint16 + Weight uint16 + Port uint16 + Pad uint16 +} + +type DNSPTRData struct { + Host *uint16 +} + +type DNSMXData struct { + NameExchange *uint16 + Preference uint16 + Pad uint16 +} + +type DNSTXTData struct { + StringCount uint16 + StringArray [1]*uint16 +} + +type DNSRecord struct { + Next *DNSRecord + Name *uint16 + Type uint16 + Length uint16 + Dw uint32 + Ttl uint32 + Reserved uint32 + Data [40]byte +} + +const ( + TF_DISCONNECT = 1 + TF_REUSE_SOCKET = 2 + TF_WRITE_BEHIND = 4 + TF_USE_DEFAULT_WORKER = 0 + TF_USE_SYSTEM_THREAD = 16 + TF_USE_KERNEL_APC = 32 +) + +type TransmitFileBuffers struct { + Head uintptr + HeadLength uint32 + Tail uintptr + TailLength uint32 +} + +const ( + IFF_UP = 1 + IFF_BROADCAST = 2 + IFF_LOOPBACK = 4 + IFF_POINTTOPOINT = 8 + IFF_MULTICAST = 16 +) + +const SIO_GET_INTERFACE_LIST = 0x4004747F + +// TODO(mattn): SockaddrGen is union of sockaddr/sockaddr_in/sockaddr_in6_old. +// will be fixed to change variable type as suitable. + +type SockaddrGen [24]byte + +type InterfaceInfo struct { + Flags uint32 + Address SockaddrGen + BroadcastAddress SockaddrGen + Netmask SockaddrGen +} + +type IpAddressString struct { + String [16]byte +} + +type IpMaskString IpAddressString + +type IpAddrString struct { + Next *IpAddrString + IpAddress IpAddressString + IpMask IpMaskString + Context uint32 +} + +const MAX_ADAPTER_NAME_LENGTH = 256 +const MAX_ADAPTER_DESCRIPTION_LENGTH = 128 +const MAX_ADAPTER_ADDRESS_LENGTH = 8 + +type IpAdapterInfo struct { + Next *IpAdapterInfo + ComboIndex uint32 + AdapterName [MAX_ADAPTER_NAME_LENGTH + 4]byte + Description [MAX_ADAPTER_DESCRIPTION_LENGTH + 4]byte + AddressLength uint32 + Address [MAX_ADAPTER_ADDRESS_LENGTH]byte + Index uint32 + Type uint32 + DhcpEnabled uint32 + CurrentIpAddress *IpAddrString + IpAddressList IpAddrString + GatewayList IpAddrString + DhcpServer IpAddrString + HaveWins bool + PrimaryWinsServer IpAddrString + SecondaryWinsServer IpAddrString + LeaseObtained int64 + LeaseExpires int64 +} + +const MAXLEN_PHYSADDR = 8 +const MAX_INTERFACE_NAME_LEN = 256 +const MAXLEN_IFDESCR = 256 + +type MibIfRow struct { + Name [MAX_INTERFACE_NAME_LEN]uint16 + Index uint32 + Type uint32 + Mtu uint32 + Speed uint32 + PhysAddrLen uint32 + PhysAddr [MAXLEN_PHYSADDR]byte + AdminStatus uint32 + OperStatus uint32 + LastChange uint32 + InOctets uint32 + InUcastPkts uint32 + InNUcastPkts uint32 + InDiscards uint32 + InErrors uint32 + InUnknownProtos uint32 + OutOctets uint32 + OutUcastPkts uint32 + OutNUcastPkts uint32 + OutDiscards uint32 + OutErrors uint32 + OutQLen uint32 + DescrLen uint32 + Descr [MAXLEN_IFDESCR]byte +} + +type CertContext struct { + EncodingType uint32 + EncodedCert *byte + Length uint32 + CertInfo uintptr + Store Handle +} + +type CertChainContext struct { + Size uint32 + TrustStatus CertTrustStatus + ChainCount uint32 + Chains **CertSimpleChain + LowerQualityChainCount uint32 + LowerQualityChains **CertChainContext + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertSimpleChain struct { + Size uint32 + TrustStatus CertTrustStatus + NumElements uint32 + Elements **CertChainElement + TrustListInfo uintptr + HasRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 +} + +type CertChainElement struct { + Size uint32 + CertContext *CertContext + TrustStatus CertTrustStatus + RevocationInfo *CertRevocationInfo + IssuanceUsage *CertEnhKeyUsage + ApplicationUsage *CertEnhKeyUsage + ExtendedErrorInfo *uint16 +} + +type CertRevocationInfo struct { + Size uint32 + RevocationResult uint32 + RevocationOid *byte + OidSpecificInfo uintptr + HasFreshnessTime uint32 + FreshnessTime uint32 + CrlInfo uintptr // *CertRevocationCrlInfo +} + +type CertTrustStatus struct { + ErrorStatus uint32 + InfoStatus uint32 +} + +type CertUsageMatch struct { + Type uint32 + Usage CertEnhKeyUsage +} + +type CertEnhKeyUsage struct { + Length uint32 + UsageIdentifiers **byte +} + +type CertChainPara struct { + Size uint32 + RequestedUsage CertUsageMatch + RequstedIssuancePolicy CertUsageMatch + URLRetrievalTimeout uint32 + CheckRevocationFreshnessTime uint32 + RevocationFreshnessTime uint32 + CacheResync *Filetime +} + +type CertChainPolicyPara struct { + Size uint32 + Flags uint32 + ExtraPolicyPara uintptr +} + +type SSLExtraCertChainPolicyPara struct { + Size uint32 + AuthType uint32 + Checks uint32 + ServerName *uint16 +} + +type CertChainPolicyStatus struct { + Size uint32 + Error uint32 + ChainIndex uint32 + ElementIndex uint32 + ExtraPolicyStatus uintptr +} + +const ( + // do not reorder + HKEY_CLASSES_ROOT = 0x80000000 + iota + HKEY_CURRENT_USER + HKEY_LOCAL_MACHINE + HKEY_USERS + HKEY_PERFORMANCE_DATA + HKEY_CURRENT_CONFIG + HKEY_DYN_DATA + + KEY_QUERY_VALUE = 1 + KEY_SET_VALUE = 2 + KEY_CREATE_SUB_KEY = 4 + KEY_ENUMERATE_SUB_KEYS = 8 + KEY_NOTIFY = 16 + KEY_CREATE_LINK = 32 + KEY_WRITE = 0x20006 + KEY_EXECUTE = 0x20019 + KEY_READ = 0x20019 + KEY_WOW64_64KEY = 0x0100 + KEY_WOW64_32KEY = 0x0200 + KEY_ALL_ACCESS = 0xf003f +) + +const ( + // do not reorder + REG_NONE = iota + REG_SZ + REG_EXPAND_SZ + REG_BINARY + REG_DWORD_LITTLE_ENDIAN + REG_DWORD_BIG_ENDIAN + REG_LINK + REG_MULTI_SZ + REG_RESOURCE_LIST + REG_FULL_RESOURCE_DESCRIPTOR + REG_RESOURCE_REQUIREMENTS_LIST + REG_QWORD_LITTLE_ENDIAN + REG_DWORD = REG_DWORD_LITTLE_ENDIAN + REG_QWORD = REG_QWORD_LITTLE_ENDIAN +) + +type AddrinfoW struct { + Flags int32 + Family int32 + Socktype int32 + Protocol int32 + Addrlen uintptr + Canonname *uint16 + Addr uintptr + Next *AddrinfoW +} + +const ( + AI_PASSIVE = 1 + AI_CANONNAME = 2 + AI_NUMERICHOST = 4 +) + +type GUID struct { + Data1 uint32 + Data2 uint16 + Data3 uint16 + Data4 [8]byte +} + +var WSAID_CONNECTEX = GUID{ + 0x25a207b9, + 0xddf3, + 0x4660, + [8]byte{0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}, +} + +const ( + FILE_SKIP_COMPLETION_PORT_ON_SUCCESS = 1 + FILE_SKIP_SET_EVENT_ON_HANDLE = 2 +) + +const ( + WSAPROTOCOL_LEN = 255 + MAX_PROTOCOL_CHAIN = 7 + BASE_PROTOCOL = 1 + LAYERED_PROTOCOL = 0 + + XP1_CONNECTIONLESS = 0x00000001 + XP1_GUARANTEED_DELIVERY = 0x00000002 + XP1_GUARANTEED_ORDER = 0x00000004 + XP1_MESSAGE_ORIENTED = 0x00000008 + XP1_PSEUDO_STREAM = 0x00000010 + XP1_GRACEFUL_CLOSE = 0x00000020 + XP1_EXPEDITED_DATA = 0x00000040 + XP1_CONNECT_DATA = 0x00000080 + XP1_DISCONNECT_DATA = 0x00000100 + XP1_SUPPORT_BROADCAST = 0x00000200 + XP1_SUPPORT_MULTIPOINT = 0x00000400 + XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800 + XP1_MULTIPOINT_DATA_PLANE = 0x00001000 + XP1_QOS_SUPPORTED = 0x00002000 + XP1_UNI_SEND = 0x00008000 + XP1_UNI_RECV = 0x00010000 + XP1_IFS_HANDLES = 0x00020000 + XP1_PARTIAL_MESSAGE = 0x00040000 + XP1_SAN_SUPPORT_SDP = 0x00080000 + + PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001 + PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002 + PFL_HIDDEN = 0x00000004 + PFL_MATCHES_PROTOCOL_ZERO = 0x00000008 + PFL_NETWORKDIRECT_PROVIDER = 0x00000010 +) + +type WSAProtocolInfo struct { + ServiceFlags1 uint32 + ServiceFlags2 uint32 + ServiceFlags3 uint32 + ServiceFlags4 uint32 + ProviderFlags uint32 + ProviderId GUID + CatalogEntryId uint32 + ProtocolChain WSAProtocolChain + Version int32 + AddressFamily int32 + MaxSockAddr int32 + MinSockAddr int32 + SocketType int32 + Protocol int32 + ProtocolMaxOffset int32 + NetworkByteOrder int32 + SecurityScheme int32 + MessageSize uint32 + ProviderReserved uint32 + ProtocolName [WSAPROTOCOL_LEN + 1]uint16 +} + +type WSAProtocolChain struct { + ChainLen int32 + ChainEntries [MAX_PROTOCOL_CHAIN]uint32 +} + +type TCPKeepalive struct { + OnOff uint32 + Time uint32 + Interval uint32 +} + +type symbolicLinkReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + Flags uint32 + PathBuffer [1]uint16 +} + +type mountPointReparseBuffer struct { + SubstituteNameOffset uint16 + SubstituteNameLength uint16 + PrintNameOffset uint16 + PrintNameLength uint16 + PathBuffer [1]uint16 +} + +type reparseDataBuffer struct { + ReparseTag uint32 + ReparseDataLength uint16 + Reserved uint16 + + // GenericReparseBuffer + reparseBuffer byte +} + +const ( + FSCTL_GET_REPARSE_POINT = 0x900A8 + MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16 * 1024 + IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003 + IO_REPARSE_TAG_SYMLINK = 0xA000000C + SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 +) + +const ( + ComputerNameNetBIOS = 0 + ComputerNameDnsHostname = 1 + ComputerNameDnsDomain = 2 + ComputerNameDnsFullyQualified = 3 + ComputerNamePhysicalNetBIOS = 4 + ComputerNamePhysicalDnsHostname = 5 + ComputerNamePhysicalDnsDomain = 6 + ComputerNamePhysicalDnsFullyQualified = 7 + ComputerNameMax = 8 +) + +const ( + MOVEFILE_REPLACE_EXISTING = 0x1 + MOVEFILE_COPY_ALLOWED = 0x2 + MOVEFILE_DELAY_UNTIL_REBOOT = 0x4 + MOVEFILE_WRITE_THROUGH = 0x8 + MOVEFILE_CREATE_HARDLINK = 0x10 + MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 +) + +const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 + +const ( + IF_TYPE_OTHER = 1 + IF_TYPE_ETHERNET_CSMACD = 6 + IF_TYPE_ISO88025_TOKENRING = 9 + IF_TYPE_PPP = 23 + IF_TYPE_SOFTWARE_LOOPBACK = 24 + IF_TYPE_ATM = 37 + IF_TYPE_IEEE80211 = 71 + IF_TYPE_TUNNEL = 131 + IF_TYPE_IEEE1394 = 144 +) + +type SocketAddress struct { + Sockaddr *syscall.RawSockaddrAny + SockaddrLength int32 +} + +type IpAdapterUnicastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterUnicastAddress + Address SocketAddress + PrefixOrigin int32 + SuffixOrigin int32 + DadState int32 + ValidLifetime uint32 + PreferredLifetime uint32 + LeaseLifetime uint32 + OnLinkPrefixLength uint8 +} + +type IpAdapterAnycastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterAnycastAddress + Address SocketAddress +} + +type IpAdapterMulticastAddress struct { + Length uint32 + Flags uint32 + Next *IpAdapterMulticastAddress + Address SocketAddress +} + +type IpAdapterDnsServerAdapter struct { + Length uint32 + Reserved uint32 + Next *IpAdapterDnsServerAdapter + Address SocketAddress +} + +type IpAdapterPrefix struct { + Length uint32 + Flags uint32 + Next *IpAdapterPrefix + Address SocketAddress + PrefixLength uint32 +} + +type IpAdapterAddresses struct { + Length uint32 + IfIndex uint32 + Next *IpAdapterAddresses + AdapterName *byte + FirstUnicastAddress *IpAdapterUnicastAddress + FirstAnycastAddress *IpAdapterAnycastAddress + FirstMulticastAddress *IpAdapterMulticastAddress + FirstDnsServerAddress *IpAdapterDnsServerAdapter + DnsSuffix *uint16 + Description *uint16 + FriendlyName *uint16 + PhysicalAddress [syscall.MAX_ADAPTER_ADDRESS_LENGTH]byte + PhysicalAddressLength uint32 + Flags uint32 + Mtu uint32 + IfType uint32 + OperStatus uint32 + Ipv6IfIndex uint32 + ZoneIndices [16]uint32 + FirstPrefix *IpAdapterPrefix + /* more fields might be present here. */ +} + +const ( + IfOperStatusUp = 1 + IfOperStatusDown = 2 + IfOperStatusTesting = 3 + IfOperStatusUnknown = 4 + IfOperStatusDormant = 5 + IfOperStatusNotPresent = 6 + IfOperStatusLowerLayerDown = 7 +) + +// Console related constants used for the mode parameter to SetConsoleMode. See +// https://docs.microsoft.com/en-us/windows/console/setconsolemode for details. + +const ( + ENABLE_PROCESSED_INPUT = 0x1 + ENABLE_LINE_INPUT = 0x2 + ENABLE_ECHO_INPUT = 0x4 + ENABLE_WINDOW_INPUT = 0x8 + ENABLE_MOUSE_INPUT = 0x10 + ENABLE_INSERT_MODE = 0x20 + ENABLE_QUICK_EDIT_MODE = 0x40 + ENABLE_EXTENDED_FLAGS = 0x80 + ENABLE_AUTO_POSITION = 0x100 + ENABLE_VIRTUAL_TERMINAL_INPUT = 0x200 + + ENABLE_PROCESSED_OUTPUT = 0x1 + ENABLE_WRAP_AT_EOL_OUTPUT = 0x2 + ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4 + DISABLE_NEWLINE_AUTO_RETURN = 0x8 + ENABLE_LVB_GRID_WORLDWIDE = 0x10 +) + +type Coord struct { + X int16 + Y int16 +} + +type SmallRect struct { + Left int16 + Top int16 + Right int16 + Bottom int16 +} + +// Used with GetConsoleScreenBuffer to retreive information about a console +// screen buffer. See +// https://docs.microsoft.com/en-us/windows/console/console-screen-buffer-info-str +// for details. + +type ConsoleScreenBufferInfo struct { + Size Coord + CursorPosition Coord + Attributes uint16 + Window SmallRect + MaximumWindowSize Coord +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_386.go b/vendor/golang.org/x/sys/windows/types_windows_386.go new file mode 100644 index 0000000..fe0ddd0 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_386.go @@ -0,0 +1,22 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte +} + +type Servent struct { + Name *byte + Aliases **byte + Port uint16 + Proto *byte +} diff --git a/vendor/golang.org/x/sys/windows/types_windows_amd64.go b/vendor/golang.org/x/sys/windows/types_windows_amd64.go new file mode 100644 index 0000000..7e154c2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/types_windows_amd64.go @@ -0,0 +1,22 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package windows + +type WSAData struct { + Version uint16 + HighVersion uint16 + MaxSockets uint16 + MaxUdpDg uint16 + VendorInfo *byte + Description [WSADESCRIPTION_LEN + 1]byte + SystemStatus [WSASYS_STATUS_LEN + 1]byte +} + +type Servent struct { + Name *byte + Aliases **byte + Proto *byte + Port uint16 +} diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go new file mode 100644 index 0000000..2f893d2 --- /dev/null +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -0,0 +1,2428 @@ +// MACHINE GENERATED BY 'go generate' COMMAND; DO NOT EDIT + +package windows + +import ( + "syscall" + "unsafe" +) + +var _ unsafe.Pointer + +// Do the interface allocations only once for common +// Errno values. +const ( + errnoERROR_IO_PENDING = 997 +) + +var ( + errERROR_IO_PENDING error = syscall.Errno(errnoERROR_IO_PENDING) +) + +// errnoErr returns common boxed Errno values, to prevent +// allocations at runtime. +func errnoErr(e syscall.Errno) error { + switch e { + case 0: + return nil + case errnoERROR_IO_PENDING: + return errERROR_IO_PENDING + } + // TODO: add more here, after collecting data on the common + // error values see on Windows. (perhaps when running + // all.bat?) + return e +} + +var ( + modadvapi32 = NewLazySystemDLL("advapi32.dll") + modkernel32 = NewLazySystemDLL("kernel32.dll") + modshell32 = NewLazySystemDLL("shell32.dll") + modmswsock = NewLazySystemDLL("mswsock.dll") + modcrypt32 = NewLazySystemDLL("crypt32.dll") + modws2_32 = NewLazySystemDLL("ws2_32.dll") + moddnsapi = NewLazySystemDLL("dnsapi.dll") + modiphlpapi = NewLazySystemDLL("iphlpapi.dll") + modsecur32 = NewLazySystemDLL("secur32.dll") + modnetapi32 = NewLazySystemDLL("netapi32.dll") + moduserenv = NewLazySystemDLL("userenv.dll") + + procRegisterEventSourceW = modadvapi32.NewProc("RegisterEventSourceW") + procDeregisterEventSource = modadvapi32.NewProc("DeregisterEventSource") + procReportEventW = modadvapi32.NewProc("ReportEventW") + procOpenSCManagerW = modadvapi32.NewProc("OpenSCManagerW") + procCloseServiceHandle = modadvapi32.NewProc("CloseServiceHandle") + procCreateServiceW = modadvapi32.NewProc("CreateServiceW") + procOpenServiceW = modadvapi32.NewProc("OpenServiceW") + procDeleteService = modadvapi32.NewProc("DeleteService") + procStartServiceW = modadvapi32.NewProc("StartServiceW") + procQueryServiceStatus = modadvapi32.NewProc("QueryServiceStatus") + procControlService = modadvapi32.NewProc("ControlService") + procStartServiceCtrlDispatcherW = modadvapi32.NewProc("StartServiceCtrlDispatcherW") + procSetServiceStatus = modadvapi32.NewProc("SetServiceStatus") + procChangeServiceConfigW = modadvapi32.NewProc("ChangeServiceConfigW") + procQueryServiceConfigW = modadvapi32.NewProc("QueryServiceConfigW") + procChangeServiceConfig2W = modadvapi32.NewProc("ChangeServiceConfig2W") + procQueryServiceConfig2W = modadvapi32.NewProc("QueryServiceConfig2W") + procEnumServicesStatusExW = modadvapi32.NewProc("EnumServicesStatusExW") + procGetLastError = modkernel32.NewProc("GetLastError") + procLoadLibraryW = modkernel32.NewProc("LoadLibraryW") + procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW") + procFreeLibrary = modkernel32.NewProc("FreeLibrary") + procGetProcAddress = modkernel32.NewProc("GetProcAddress") + procGetVersion = modkernel32.NewProc("GetVersion") + procFormatMessageW = modkernel32.NewProc("FormatMessageW") + procExitProcess = modkernel32.NewProc("ExitProcess") + procCreateFileW = modkernel32.NewProc("CreateFileW") + procReadFile = modkernel32.NewProc("ReadFile") + procWriteFile = modkernel32.NewProc("WriteFile") + procSetFilePointer = modkernel32.NewProc("SetFilePointer") + procCloseHandle = modkernel32.NewProc("CloseHandle") + procGetStdHandle = modkernel32.NewProc("GetStdHandle") + procSetStdHandle = modkernel32.NewProc("SetStdHandle") + procFindFirstFileW = modkernel32.NewProc("FindFirstFileW") + procFindNextFileW = modkernel32.NewProc("FindNextFileW") + procFindClose = modkernel32.NewProc("FindClose") + procGetFileInformationByHandle = modkernel32.NewProc("GetFileInformationByHandle") + procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") + procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") + procCreateDirectoryW = modkernel32.NewProc("CreateDirectoryW") + procRemoveDirectoryW = modkernel32.NewProc("RemoveDirectoryW") + procDeleteFileW = modkernel32.NewProc("DeleteFileW") + procMoveFileW = modkernel32.NewProc("MoveFileW") + procMoveFileExW = modkernel32.NewProc("MoveFileExW") + procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") + procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") + procSetEndOfFile = modkernel32.NewProc("SetEndOfFile") + procGetSystemTimeAsFileTime = modkernel32.NewProc("GetSystemTimeAsFileTime") + procGetSystemTimePreciseAsFileTime = modkernel32.NewProc("GetSystemTimePreciseAsFileTime") + procGetTimeZoneInformation = modkernel32.NewProc("GetTimeZoneInformation") + procCreateIoCompletionPort = modkernel32.NewProc("CreateIoCompletionPort") + procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus") + procPostQueuedCompletionStatus = modkernel32.NewProc("PostQueuedCompletionStatus") + procCancelIo = modkernel32.NewProc("CancelIo") + procCancelIoEx = modkernel32.NewProc("CancelIoEx") + procCreateProcessW = modkernel32.NewProc("CreateProcessW") + procOpenProcess = modkernel32.NewProc("OpenProcess") + procTerminateProcess = modkernel32.NewProc("TerminateProcess") + procGetExitCodeProcess = modkernel32.NewProc("GetExitCodeProcess") + procGetStartupInfoW = modkernel32.NewProc("GetStartupInfoW") + procGetCurrentProcess = modkernel32.NewProc("GetCurrentProcess") + procGetProcessTimes = modkernel32.NewProc("GetProcessTimes") + procDuplicateHandle = modkernel32.NewProc("DuplicateHandle") + procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject") + procGetTempPathW = modkernel32.NewProc("GetTempPathW") + procCreatePipe = modkernel32.NewProc("CreatePipe") + procGetFileType = modkernel32.NewProc("GetFileType") + procCryptAcquireContextW = modadvapi32.NewProc("CryptAcquireContextW") + procCryptReleaseContext = modadvapi32.NewProc("CryptReleaseContext") + procCryptGenRandom = modadvapi32.NewProc("CryptGenRandom") + procGetEnvironmentStringsW = modkernel32.NewProc("GetEnvironmentStringsW") + procFreeEnvironmentStringsW = modkernel32.NewProc("FreeEnvironmentStringsW") + procGetEnvironmentVariableW = modkernel32.NewProc("GetEnvironmentVariableW") + procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW") + procSetFileTime = modkernel32.NewProc("SetFileTime") + procGetFileAttributesW = modkernel32.NewProc("GetFileAttributesW") + procSetFileAttributesW = modkernel32.NewProc("SetFileAttributesW") + procGetFileAttributesExW = modkernel32.NewProc("GetFileAttributesExW") + procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") + procCommandLineToArgvW = modshell32.NewProc("CommandLineToArgvW") + procLocalFree = modkernel32.NewProc("LocalFree") + procSetHandleInformation = modkernel32.NewProc("SetHandleInformation") + procFlushFileBuffers = modkernel32.NewProc("FlushFileBuffers") + procGetFullPathNameW = modkernel32.NewProc("GetFullPathNameW") + procGetLongPathNameW = modkernel32.NewProc("GetLongPathNameW") + procGetShortPathNameW = modkernel32.NewProc("GetShortPathNameW") + procCreateFileMappingW = modkernel32.NewProc("CreateFileMappingW") + procMapViewOfFile = modkernel32.NewProc("MapViewOfFile") + procUnmapViewOfFile = modkernel32.NewProc("UnmapViewOfFile") + procFlushViewOfFile = modkernel32.NewProc("FlushViewOfFile") + procVirtualLock = modkernel32.NewProc("VirtualLock") + procVirtualUnlock = modkernel32.NewProc("VirtualUnlock") + procVirtualAlloc = modkernel32.NewProc("VirtualAlloc") + procVirtualFree = modkernel32.NewProc("VirtualFree") + procVirtualProtect = modkernel32.NewProc("VirtualProtect") + procTransmitFile = modmswsock.NewProc("TransmitFile") + procReadDirectoryChangesW = modkernel32.NewProc("ReadDirectoryChangesW") + procCertOpenSystemStoreW = modcrypt32.NewProc("CertOpenSystemStoreW") + procCertOpenStore = modcrypt32.NewProc("CertOpenStore") + procCertEnumCertificatesInStore = modcrypt32.NewProc("CertEnumCertificatesInStore") + procCertAddCertificateContextToStore = modcrypt32.NewProc("CertAddCertificateContextToStore") + procCertCloseStore = modcrypt32.NewProc("CertCloseStore") + procCertGetCertificateChain = modcrypt32.NewProc("CertGetCertificateChain") + procCertFreeCertificateChain = modcrypt32.NewProc("CertFreeCertificateChain") + procCertCreateCertificateContext = modcrypt32.NewProc("CertCreateCertificateContext") + procCertFreeCertificateContext = modcrypt32.NewProc("CertFreeCertificateContext") + procCertVerifyCertificateChainPolicy = modcrypt32.NewProc("CertVerifyCertificateChainPolicy") + procRegOpenKeyExW = modadvapi32.NewProc("RegOpenKeyExW") + procRegCloseKey = modadvapi32.NewProc("RegCloseKey") + procRegQueryInfoKeyW = modadvapi32.NewProc("RegQueryInfoKeyW") + procRegEnumKeyExW = modadvapi32.NewProc("RegEnumKeyExW") + procRegQueryValueExW = modadvapi32.NewProc("RegQueryValueExW") + procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") + procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") + procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo") + procWriteConsoleW = modkernel32.NewProc("WriteConsoleW") + procReadConsoleW = modkernel32.NewProc("ReadConsoleW") + procCreateToolhelp32Snapshot = modkernel32.NewProc("CreateToolhelp32Snapshot") + procProcess32FirstW = modkernel32.NewProc("Process32FirstW") + procProcess32NextW = modkernel32.NewProc("Process32NextW") + procDeviceIoControl = modkernel32.NewProc("DeviceIoControl") + procCreateSymbolicLinkW = modkernel32.NewProc("CreateSymbolicLinkW") + procCreateHardLinkW = modkernel32.NewProc("CreateHardLinkW") + procGetCurrentThreadId = modkernel32.NewProc("GetCurrentThreadId") + procCreateEventW = modkernel32.NewProc("CreateEventW") + procCreateEventExW = modkernel32.NewProc("CreateEventExW") + procOpenEventW = modkernel32.NewProc("OpenEventW") + procSetEvent = modkernel32.NewProc("SetEvent") + procResetEvent = modkernel32.NewProc("ResetEvent") + procPulseEvent = modkernel32.NewProc("PulseEvent") + procWSAStartup = modws2_32.NewProc("WSAStartup") + procWSACleanup = modws2_32.NewProc("WSACleanup") + procWSAIoctl = modws2_32.NewProc("WSAIoctl") + procsocket = modws2_32.NewProc("socket") + procsetsockopt = modws2_32.NewProc("setsockopt") + procgetsockopt = modws2_32.NewProc("getsockopt") + procbind = modws2_32.NewProc("bind") + procconnect = modws2_32.NewProc("connect") + procgetsockname = modws2_32.NewProc("getsockname") + procgetpeername = modws2_32.NewProc("getpeername") + proclisten = modws2_32.NewProc("listen") + procshutdown = modws2_32.NewProc("shutdown") + procclosesocket = modws2_32.NewProc("closesocket") + procAcceptEx = modmswsock.NewProc("AcceptEx") + procGetAcceptExSockaddrs = modmswsock.NewProc("GetAcceptExSockaddrs") + procWSARecv = modws2_32.NewProc("WSARecv") + procWSASend = modws2_32.NewProc("WSASend") + procWSARecvFrom = modws2_32.NewProc("WSARecvFrom") + procWSASendTo = modws2_32.NewProc("WSASendTo") + procgethostbyname = modws2_32.NewProc("gethostbyname") + procgetservbyname = modws2_32.NewProc("getservbyname") + procntohs = modws2_32.NewProc("ntohs") + procgetprotobyname = modws2_32.NewProc("getprotobyname") + procDnsQuery_W = moddnsapi.NewProc("DnsQuery_W") + procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") + procDnsNameCompare_W = moddnsapi.NewProc("DnsNameCompare_W") + procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") + procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") + procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") + procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") + procSetFileCompletionNotificationModes = modkernel32.NewProc("SetFileCompletionNotificationModes") + procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") + procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") + procGetACP = modkernel32.NewProc("GetACP") + procMultiByteToWideChar = modkernel32.NewProc("MultiByteToWideChar") + procTranslateNameW = modsecur32.NewProc("TranslateNameW") + procGetUserNameExW = modsecur32.NewProc("GetUserNameExW") + procNetUserGetInfo = modnetapi32.NewProc("NetUserGetInfo") + procNetGetJoinInformation = modnetapi32.NewProc("NetGetJoinInformation") + procNetApiBufferFree = modnetapi32.NewProc("NetApiBufferFree") + procLookupAccountSidW = modadvapi32.NewProc("LookupAccountSidW") + procLookupAccountNameW = modadvapi32.NewProc("LookupAccountNameW") + procConvertSidToStringSidW = modadvapi32.NewProc("ConvertSidToStringSidW") + procConvertStringSidToSidW = modadvapi32.NewProc("ConvertStringSidToSidW") + procGetLengthSid = modadvapi32.NewProc("GetLengthSid") + procCopySid = modadvapi32.NewProc("CopySid") + procAllocateAndInitializeSid = modadvapi32.NewProc("AllocateAndInitializeSid") + procFreeSid = modadvapi32.NewProc("FreeSid") + procEqualSid = modadvapi32.NewProc("EqualSid") + procOpenProcessToken = modadvapi32.NewProc("OpenProcessToken") + procGetTokenInformation = modadvapi32.NewProc("GetTokenInformation") + procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") +) + +func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procRegisterEventSourceW.Addr(), 2, uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName)), 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DeregisterEventSource(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procDeregisterEventSource.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procOpenSCManagerW.Addr(), 3, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access)) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CloseServiceHandle(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCloseServiceHandle.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall15(procCreateServiceW.Addr(), 13, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procOpenServiceW.Addr(), 3, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access)) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DeleteService(service Handle) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteService.Addr(), 1, uintptr(service), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) { + r1, _, e1 := syscall.Syscall(procStartServiceW.Addr(), 3, uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procQueryServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(status)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procControlService.Addr(), 3, uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) { + r1, _, e1 := syscall.Syscall(procStartServiceCtrlDispatcherW.Addr(), 1, uintptr(unsafe.Pointer(serviceTable)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) { + r1, _, e1 := syscall.Syscall(procSetServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(serviceStatus)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) { + r1, _, e1 := syscall.Syscall12(procChangeServiceConfigW.Addr(), 11, uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceConfigW.Addr(), 4, uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) { + r1, _, e1 := syscall.Syscall(procChangeServiceConfig2W.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procQueryServiceConfig2W.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { + r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetLastError() (lasterr error) { + r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) + if r0 != 0 { + lasterr = syscall.Errno(r0) + } + return +} + +func LoadLibrary(libname string) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(libname) + if err != nil { + return + } + return _LoadLibrary(_p0) +} + +func _LoadLibrary(libname *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadLibraryW.Addr(), 1, uintptr(unsafe.Pointer(libname)), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, err error) { + var _p0 *uint16 + _p0, err = syscall.UTF16PtrFromString(libname) + if err != nil { + return + } + return _LoadLibraryEx(_p0, zero, flags) +} + +func _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLoadLibraryExW.Addr(), 3, uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags)) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FreeLibrary(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFreeLibrary.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetProcAddress(module Handle, procname string) (proc uintptr, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(procname) + if err != nil { + return + } + return _GetProcAddress(module, _p0) +} + +func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) { + r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), uintptr(unsafe.Pointer(procname)), 0) + proc = uintptr(r0) + if proc == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetVersion() (ver uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0) + ver = uint32(r0) + if ver == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, buf []uint16, args *byte) (n uint32, err error) { + var _p0 *uint16 + if len(buf) > 0 { + _p0 = &buf[0] + } + r0, _, e1 := syscall.Syscall9(procFormatMessageW.Addr(), 7, uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args)), 0, 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ExitProcess(exitcode uint32) { + syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0) + return +} + +func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile int32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ReadFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procReadFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WriteFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) (err error) { + var _p0 *byte + if len(buf) > 0 { + _p0 = &buf[0] + } + r1, _, e1 := syscall.Syscall6(procWriteFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) { + r0, _, e1 := syscall.Syscall6(procSetFilePointer.Addr(), 4, uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence), 0, 0) + newlowoffset = uint32(r0) + if newlowoffset == 0xffffffff { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CloseHandle(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetStdHandle(stdhandle uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procGetStdHandle.Addr(), 1, uintptr(stdhandle), 0, 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetStdHandle(stdhandle uint32, handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func findNextFile1(handle Handle, data *win32finddata1) (err error) { + r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FindClose(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) { + r1, _, e1 := syscall.Syscall(procGetFileInformationByHandle.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetCurrentDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) { + r1, _, e1 := syscall.Syscall(procCreateDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func RemoveDirectory(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procRemoveDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DeleteFile(path *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procDeleteFileW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func MoveFile(from *uint16, to *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procMoveFileW.Addr(), 2, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetComputerName(buf *uint16, n *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetComputerNameW.Addr(), 2, uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetComputerNameExW.Addr(), 3, uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetEndOfFile(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetEndOfFile.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetSystemTimeAsFileTime(time *Filetime) { + syscall.Syscall(procGetSystemTimeAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + return +} + +func GetSystemTimePreciseAsFileTime(time *Filetime) { + syscall.Syscall(procGetSystemTimePreciseAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + return +} + +func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(tzi)), 0, 0) + rc = uint32(r0) + if rc == 0xffffffff { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uint32, threadcnt uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uint32, overlapped **Overlapped, timeout uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall6(procPostQueuedCompletionStatus.Addr(), 4, uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CancelIo(s Handle) (err error) { + r1, _, e1 := syscall.Syscall(procCancelIo.Addr(), 1, uintptr(s), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CancelIoEx(s Handle, o *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(s), uintptr(unsafe.Pointer(o)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityAttributes, threadSecurity *SecurityAttributes, inheritHandles bool, creationFlags uint32, env *uint16, currentDir *uint16, startupInfo *StartupInfo, outProcInfo *ProcessInformation) (err error) { + var _p0 uint32 + if inheritHandles { + _p0 = 1 + } else { + _p0 = 0 + } + r1, _, e1 := syscall.Syscall12(procCreateProcessW.Addr(), 10, uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func OpenProcess(da uint32, inheritHandle bool, pid uint32) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } else { + _p0 = 0 + } + r0, _, e1 := syscall.Syscall(procOpenProcess.Addr(), 3, uintptr(da), uintptr(_p0), uintptr(pid)) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func TerminateProcess(handle Handle, exitcode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procTerminateProcess.Addr(), 2, uintptr(handle), uintptr(exitcode), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetExitCodeProcess.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(exitcode)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetStartupInfo(startupInfo *StartupInfo) (err error) { + r1, _, e1 := syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetCurrentProcess() (pseudoHandle Handle, err error) { + r0, _, e1 := syscall.Syscall(procGetCurrentProcess.Addr(), 0, 0, 0, 0) + pseudoHandle = Handle(r0) + if pseudoHandle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) { + r1, _, e1 := syscall.Syscall6(procGetProcessTimes.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) { + var _p0 uint32 + if bInheritHandle { + _p0 = 1 + } else { + _p0 = 0 + } + r1, _, e1 := syscall.Syscall9(procDuplicateHandle.Addr(), 7, uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) { + r0, _, e1 := syscall.Syscall(procWaitForSingleObject.Addr(), 2, uintptr(handle), uintptr(waitMilliseconds), 0) + event = uint32(r0) + if event == 0xffffffff { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetTempPathW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCreatePipe.Addr(), 4, uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFileType(filehandle Handle) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileType.Addr(), 1, uintptr(filehandle), 0, 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procCryptAcquireContextW.Addr(), 5, uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CryptReleaseContext(provhandle Handle, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCryptReleaseContext.Addr(), 2, uintptr(provhandle), uintptr(flags), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) { + r1, _, e1 := syscall.Syscall(procCryptGenRandom.Addr(), 3, uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetEnvironmentStrings() (envs *uint16, err error) { + r0, _, e1 := syscall.Syscall(procGetEnvironmentStringsW.Addr(), 0, 0, 0, 0) + envs = (*uint16)(unsafe.Pointer(r0)) + if envs == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FreeEnvironmentStrings(envs *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procFreeEnvironmentStringsW.Addr(), 1, uintptr(unsafe.Pointer(envs)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetEnvironmentVariableW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size)) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetEnvironmentVariable(name *uint16, value *uint16) (err error) { + r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { + r1, _, e1 := syscall.Syscall6(procSetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFileAttributes(name *uint16) (attrs uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetFileAttributesW.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + attrs = uint32(r0) + if attrs == INVALID_FILE_ATTRIBUTES { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetFileAttributes(name *uint16, attrs uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetFileAttributesW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(attrs), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) { + r1, _, e1 := syscall.Syscall(procGetFileAttributesExW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetCommandLine() (cmd *uint16) { + r0, _, _ := syscall.Syscall(procGetCommandLineW.Addr(), 0, 0, 0, 0) + cmd = (*uint16)(unsafe.Pointer(r0)) + return +} + +func CommandLineToArgv(cmd *uint16, argc *int32) (argv *[8192]*[8192]uint16, err error) { + r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) + argv = (*[8192]*[8192]uint16)(unsafe.Pointer(r0)) + if argv == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func LocalFree(hmem Handle) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procLocalFree.Addr(), 1, uintptr(hmem), 0, 0) + handle = Handle(r0) + if handle != 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FlushFileBuffers(handle Handle) (err error) { + r1, _, e1 := syscall.Syscall(procFlushFileBuffers.Addr(), 1, uintptr(handle), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) { + r0, _, e1 := syscall.Syscall6(procGetFullPathNameW.Addr(), 4, uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname)), 0, 0) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetLongPathNameW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen)) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) { + r0, _, e1 := syscall.Syscall(procGetShortPathNameW.Addr(), 3, uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen)) + n = uint32(r0) + if n == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateFileMappingW.Addr(), 6, uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) { + r0, _, e1 := syscall.Syscall6(procMapViewOfFile.Addr(), 5, uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length), 0) + addr = uintptr(r0) + if addr == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func UnmapViewOfFile(addr uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procUnmapViewOfFile.Addr(), 1, uintptr(addr), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FlushViewOfFile(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procFlushViewOfFile.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualLock(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualLock.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualUnlock(addr uintptr, length uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) { + r0, _, e1 := syscall.Syscall6(procVirtualAlloc.Addr(), 4, uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect), 0, 0) + value = uintptr(r0) + if value == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) { + r1, _, e1 := syscall.Syscall(procVirtualFree.Addr(), 3, uintptr(address), uintptr(size), uintptr(freetype)) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procVirtualProtect.Addr(), 4, uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procTransmitFile.Addr(), 7, uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree bool, mask uint32, retlen *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { + var _p0 uint32 + if watchSubTree { + _p0 = 1 + } else { + _p0 = 0 + } + r1, _, e1 := syscall.Syscall9(procReadDirectoryChangesW.Addr(), 8, uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) { + r0, _, e1 := syscall.Syscall(procCertOpenSystemStoreW.Addr(), 2, uintptr(hprov), uintptr(unsafe.Pointer(name)), 0) + store = Handle(r0) + if store == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) { + r0, _, e1 := syscall.Syscall(procCertEnumCertificatesInStore.Addr(), 2, uintptr(store), uintptr(unsafe.Pointer(prevContext)), 0) + context = (*CertContext)(unsafe.Pointer(r0)) + if context == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) { + r1, _, e1 := syscall.Syscall6(procCertAddCertificateContextToStore.Addr(), 4, uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertCloseStore(store Handle, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCertCloseStore.Addr(), 2, uintptr(store), uintptr(flags), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) { + r1, _, e1 := syscall.Syscall9(procCertGetCertificateChain.Addr(), 8, uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertFreeCertificateChain(ctx *CertChainContext) { + syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + return +} + +func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) { + r0, _, e1 := syscall.Syscall(procCertCreateCertificateContext.Addr(), 3, uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen)) + context = (*CertContext)(unsafe.Pointer(r0)) + if context == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertFreeCertificateContext(ctx *CertContext) (err error) { + r1, _, e1 := syscall.Syscall(procCertFreeCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) { + r1, _, e1 := syscall.Syscall6(procCertVerifyCertificateChainPolicy.Addr(), 4, uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegOpenKeyExW.Addr(), 5, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegCloseKey(key Handle) (regerrno error) { + r0, _, _ := syscall.Syscall(procRegCloseKey.Addr(), 1, uintptr(key), 0, 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) { + r0, _, _ := syscall.Syscall12(procRegQueryInfoKeyW.Addr(), 12, uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) { + r0, _, _ := syscall.Syscall9(procRegEnumKeyExW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime)), 0) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { + r0, _, _ := syscall.Syscall6(procRegQueryValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen))) + if r0 != 0 { + regerrno = syscall.Errno(r0) + } + return +} + +func getCurrentProcessId() (pid uint32) { + r0, _, _ := syscall.Syscall(procGetCurrentProcessId.Addr(), 0, 0, 0, 0) + pid = uint32(r0) + return +} + +func GetConsoleMode(console Handle, mode *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetConsoleMode(console Handle, mode uint32) (err error) { + r1, _, e1 := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(console), uintptr(mode), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) { + r1, _, e1 := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(info)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) { + r1, _, e1 := syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) { + r1, _, e1 := syscall.Syscall6(procReadConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procCreateToolhelp32Snapshot.Addr(), 2, uintptr(flags), uintptr(processId), 0) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procProcess32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) { + r1, _, e1 := syscall.Syscall(procProcess32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(procDeviceIoControl.Addr(), 8, uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) { + r1, _, e1 := syscall.Syscall(procCreateSymbolicLinkW.Addr(), 3, uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) + if r1&0xff == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) { + r1, _, e1 := syscall.Syscall(procCreateHardLinkW.Addr(), 3, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved)) + if r1&0xff == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetCurrentThreadId() (id uint32) { + r0, _, _ := syscall.Syscall(procGetCurrentThreadId.Addr(), 0, 0, 0, 0) + id = uint32(r0) + return +} + +func CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall6(procCreateEventExW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle Handle, err error) { + var _p0 uint32 + if inheritHandle { + _p0 = 1 + } else { + _p0 = 0 + } + r0, _, e1 := syscall.Syscall(procOpenEventW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + handle = Handle(r0) + if handle == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func SetEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procSetEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ResetEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func PulseEvent(event Handle) (err error) { + r1, _, e1 := syscall.Syscall(procPulseEvent.Addr(), 1, uintptr(event), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { + r0, _, _ := syscall.Syscall(procWSAStartup.Addr(), 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0) + if r0 != 0 { + sockerr = syscall.Errno(r0) + } + return +} + +func WSACleanup() (err error) { + r1, _, e1 := syscall.Syscall(procWSACleanup.Addr(), 0, 0, 0, 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { + r1, _, e1 := syscall.Syscall9(procWSAIoctl.Addr(), 9, uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func socket(af int32, typ int32, protocol int32) (handle Handle, err error) { + r0, _, e1 := syscall.Syscall(procsocket.Addr(), 3, uintptr(af), uintptr(typ), uintptr(protocol)) + handle = Handle(r0) + if handle == InvalidHandle { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) { + r1, _, e1 := syscall.Syscall6(procsetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen), 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) { + r1, _, e1 := syscall.Syscall6(procgetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen)), 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) { + r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func connect(s Handle, name unsafe.Pointer, namelen int32) (err error) { + r1, _, e1 := syscall.Syscall(procconnect.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { + r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { + r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func listen(s Handle, backlog int32) (err error) { + r1, _, e1 := syscall.Syscall(proclisten.Addr(), 2, uintptr(s), uintptr(backlog), 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func shutdown(s Handle, how int32) (err error) { + r1, _, e1 := syscall.Syscall(procshutdown.Addr(), 2, uintptr(s), uintptr(how), 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Closesocket(s Handle) (err error) { + r1, _, e1 := syscall.Syscall(procclosesocket.Addr(), 1, uintptr(s), 0, 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) { + r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) { + syscall.Syscall9(procGetAcceptExSockaddrs.Addr(), 8, uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen)), 0) + return +} + +func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSARecv.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSASend.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSARecvFrom.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) { + r1, _, e1 := syscall.Syscall9(procWSASendTo.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + if r1 == socket_error { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetHostByName(name string) (h *Hostent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + return _GetHostByName(_p0) +} + +func _GetHostByName(name *byte) (h *Hostent, err error) { + r0, _, e1 := syscall.Syscall(procgethostbyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + h = (*Hostent)(unsafe.Pointer(r0)) + if h == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetServByName(name string, proto string) (s *Servent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + var _p1 *byte + _p1, err = syscall.BytePtrFromString(proto) + if err != nil { + return + } + return _GetServByName(_p0, _p1) +} + +func _GetServByName(name *byte, proto *byte) (s *Servent, err error) { + r0, _, e1 := syscall.Syscall(procgetservbyname.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto)), 0) + s = (*Servent)(unsafe.Pointer(r0)) + if s == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func Ntohs(netshort uint16) (u uint16) { + r0, _, _ := syscall.Syscall(procntohs.Addr(), 1, uintptr(netshort), 0, 0) + u = uint16(r0) + return +} + +func GetProtoByName(name string) (p *Protoent, err error) { + var _p0 *byte + _p0, err = syscall.BytePtrFromString(name) + if err != nil { + return + } + return _GetProtoByName(_p0) +} + +func _GetProtoByName(name *byte) (p *Protoent, err error) { + r0, _, e1 := syscall.Syscall(procgetprotobyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + p = (*Protoent)(unsafe.Pointer(r0)) + if p == nil { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { + var _p0 *uint16 + _p0, status = syscall.UTF16PtrFromString(name) + if status != nil { + return + } + return _DnsQuery(_p0, qtype, options, extra, qrs, pr) +} + +func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { + r0, _, _ := syscall.Syscall6(procDnsQuery_W.Addr(), 6, uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr))) + if r0 != 0 { + status = syscall.Errno(r0) + } + return +} + +func DnsRecordListFree(rl *DNSRecord, freetype uint32) { + syscall.Syscall(procDnsRecordListFree.Addr(), 2, uintptr(unsafe.Pointer(rl)), uintptr(freetype), 0) + return +} + +func DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) { + r0, _, _ := syscall.Syscall(procDnsNameCompare_W.Addr(), 2, uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)), 0) + same = r0 != 0 + return +} + +func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) { + r0, _, _ := syscall.Syscall6(procGetAddrInfoW.Addr(), 4, uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result)), 0, 0) + if r0 != 0 { + sockerr = syscall.Errno(r0) + } + return +} + +func FreeAddrInfoW(addrinfo *AddrinfoW) { + syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0) + return +} + +func GetIfEntry(pIfRow *MibIfRow) (errcode error) { + r0, _, _ := syscall.Syscall(procGetIfEntry.Addr(), 1, uintptr(unsafe.Pointer(pIfRow)), 0, 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { + r0, _, _ := syscall.Syscall(procGetAdaptersInfo.Addr(), 2, uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) { + r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(handle), uintptr(flags), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) { + r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) + n = int32(r0) + if n == -1 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) { + r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetACP() (acp uint32) { + r0, _, _ := syscall.Syscall(procGetACP.Addr(), 0, 0, 0, 0) + acp = uint32(r0) + return +} + +func MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) { + r0, _, e1 := syscall.Syscall6(procMultiByteToWideChar.Addr(), 6, uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar)) + nwrite = int32(r0) + if nwrite == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procTranslateNameW.Addr(), 5, uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize)), 0) + if r1&0xff == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetUserNameExW.Addr(), 3, uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) + if r1&0xff == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) { + r0, _, _ := syscall.Syscall6(procNetUserGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)), 0, 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) { + r0, _, _ := syscall.Syscall(procNetGetJoinInformation.Addr(), 3, uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType))) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func NetApiBufferFree(buf *byte) (neterr error) { + r0, _, _ := syscall.Syscall(procNetApiBufferFree.Addr(), 1, uintptr(unsafe.Pointer(buf)), 0, 0) + if r0 != 0 { + neterr = syscall.Errno(r0) + } + return +} + +func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { + r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) { + r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) { + r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetLengthSid(sid *SID) (len uint32) { + r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + len = uint32(r0) + return +} + +func CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) { + r1, _, e1 := syscall.Syscall(procCopySid.Addr(), 3, uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) { + r1, _, e1 := syscall.Syscall12(procAllocateAndInitializeSid.Addr(), 11, uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func FreeSid(sid *SID) (err error) { + r1, _, e1 := syscall.Syscall(procFreeSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + if r1 != 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) { + r0, _, _ := syscall.Syscall(procEqualSid.Addr(), 2, uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2)), 0) + isEqual = r0 != 0 + return +} + +func OpenProcessToken(h Handle, access uint32, token *Token) (err error) { + r1, _, e1 := syscall.Syscall(procOpenProcessToken.Addr(), 3, uintptr(h), uintptr(access), uintptr(unsafe.Pointer(token))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetTokenInformation(t Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall6(procGetTokenInformation.Addr(), 5, uintptr(t), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen)), 0) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} + +func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { + r1, _, e1 := syscall.Syscall(procGetUserProfileDirectoryW.Addr(), 3, uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen))) + if r1 == 0 { + if e1 != 0 { + err = errnoErr(e1) + } else { + err = syscall.EINVAL + } + } + return +} diff --git a/vendor/gopkg.in/validator.v2/examplevalidate_test.go b/vendor/gopkg.in/validator.v2/examplevalidate_test.go new file mode 100644 index 0000000..f51a163 --- /dev/null +++ b/vendor/gopkg.in/validator.v2/examplevalidate_test.go @@ -0,0 +1,145 @@ +// Package validator implements value validations +// +// Copyright 2014 Roberto Teixeira +// +// 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 validator_test + +import ( + "fmt" + "sort" + + "gopkg.in/validator.v2" +) + +// This example demonstrates a custom function to process template text. +// It installs the strings.Title function and uses it to +// Make Title Text Look Good In Our Template's Output. +func ExampleValidate() { + // First create a struct to be validated + // according to the validator tags. + type ValidateExample struct { + Name string `validate:"nonzero"` + Description string + Age int `validate:"min=18"` + Email string `validate:"regexp=^[0-9a-z]+@[0-9a-z]+(\\.[0-9a-z]+)+$"` + Address struct { + Street string `validate:"nonzero"` + City string `validate:"nonzero"` + } + } + + // Fill in some values + ve := ValidateExample{ + Name: "Joe Doe", // valid as it's nonzero + Description: "", // valid no validation tag exists + Age: 17, // invalid as age is less than required 18 + } + // invalid as Email won't match the regular expression + ve.Email = "@not.a.valid.email" + ve.Address.City = "Some City" // valid + ve.Address.Street = "" // invalid + + err := validator.Validate(ve) + if err == nil { + fmt.Println("Values are valid.") + } else { + errs := err.(validator.ErrorMap) + // See if Address was empty + if errs["Address.Street"][0] == validator.ErrZeroValue { + fmt.Println("Street cannot be empty.") + } + + // Iterate through the list of fields and respective errors + fmt.Println("Invalid due to fields:") + + // Here we have to sort the arrays to ensure map ordering does not + // fail our example, typically it's ok to just range through the err + // list when order is not important. + var errOuts []string + for f, e := range errs { + errOuts = append(errOuts, fmt.Sprintf("\t - %s (%v)\n", f, e)) + } + + // Again this part is extraneous and you should not need this in real + // code. + sort.Strings(errOuts) + for _, str := range errOuts { + fmt.Print(str) + } + } + + // Output: + // Street cannot be empty. + // Invalid due to fields: + // - Address.Street (zero value) + // - Age (less than min) + // - Email (regular expression mismatch) +} + +// This example shows how to use the Valid helper +// function to validator any number of values +func ExampleValid() { + err := validator.Valid(42, "min=10,max=100,nonzero") + fmt.Printf("42: valid=%v, errs=%v\n", err == nil, err) + + var ptr *int + if err := validator.Valid(ptr, "nonzero"); err != nil { + fmt.Println("ptr: Invalid nil pointer.") + } + + err = validator.Valid("ABBA", "regexp=[ABC]*") + fmt.Printf("ABBA: valid=%v\n", err == nil) + + // Output: + // 42: valid=true, errs= + // ptr: Invalid nil pointer. + // ABBA: valid=true +} + +// This example shows you how to change the tag name +func ExampleSetTag() { + type T struct { + A int `foo:"nonzero" bar:"min=10"` + } + t := T{5} + v := validator.NewValidator() + v.SetTag("foo") + err := v.Validate(t) + fmt.Printf("foo --> valid: %v, errs: %v\n", err == nil, err) + v.SetTag("bar") + err = v.Validate(t) + errs := err.(validator.ErrorMap) + fmt.Printf("bar --> valid: %v, errs: %v\n", err == nil, errs) + + // Output: + // foo --> valid: true, errs: + // bar --> valid: false, errs: A: less than min +} + +// This example shows you how to change the tag name +func ExampleWithTag() { + type T struct { + A int `foo:"nonzero" bar:"min=10"` + } + t := T{5} + err := validator.WithTag("foo").Validate(t) + fmt.Printf("foo --> valid: %v, errs: %v\n", err == nil, err) + err = validator.WithTag("bar").Validate(t) + fmt.Printf("bar --> valid: %v, errs: %v\n", err == nil, err) + + // Output: + // foo --> valid: true, errs: + // bar --> valid: false, errs: A: less than min +} diff --git a/vendor/gopkg.in/validator.v2/validator.go b/vendor/gopkg.in/validator.v2/validator.go index 5e7eb0d..a23f3ee 100644 --- a/vendor/gopkg.in/validator.v2/validator.go +++ b/vendor/gopkg.in/validator.v2/validator.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" "reflect" + "regexp" "strings" "unicode" ) @@ -327,11 +328,27 @@ type tag struct { Param string // parameter to send to the validation function } +// separate by no escaped commas +var sepPattern *regexp.Regexp = regexp.MustCompile(`((?:^|[^\\])(?:\\\\)*),`) + +func splitUnescapedComma(str string) []string { + ret := []string{} + indexes := sepPattern.FindAllStringIndex(str, -1) + last := 0 + for _, is := range indexes { + ret = append(ret, str[last:is[1]-1]) + last = is[1] + } + ret = append(ret, str[last:]) + return ret +} + // parseTags parses all individual tags found within a struct tag. func (mv *Validator) parseTags(t string) ([]tag, error) { - tl := strings.Split(t, ",") + tl := splitUnescapedComma(t) tags := make([]tag, 0, len(tl)) for _, i := range tl { + i = strings.Replace(i, `\,`, ",", -1) tg := tag{} v := strings.SplitN(i, "=", 2) tg.Name = strings.Trim(v[0], " ") diff --git a/vendor/gopkg.in/validator.v2/validator_test.go b/vendor/gopkg.in/validator.v2/validator_test.go new file mode 100644 index 0000000..bbc4ebb --- /dev/null +++ b/vendor/gopkg.in/validator.v2/validator_test.go @@ -0,0 +1,517 @@ +// Package validator implements value validations +// +// Copyright 2014 Roberto Teixeira +// +// 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 validator_test + +import ( + "reflect" + "testing" + + . "gopkg.in/check.v1" + "gopkg.in/validator.v2" +) + +func Test(t *testing.T) { + TestingT(t) +} + +type MySuite struct{} + +var _ = Suite(&MySuite{}) + +type Simple struct { + A int `validate:"min=10"` +} + +type I interface { + Foo() string +} + +type Impl struct { + F string `validate:"len=3"` +} + +func (this *Impl) Foo() string { + return this.F +} + +type TestStruct struct { + A int `validate:"nonzero"` + B string `validate:"len=8,min=6,max=4"` + Sub struct { + A int `validate:"nonzero"` + B string + C float64 `validate:"nonzero,min=1"` + D *string `validate:"nonzero"` + } + D *Simple `validate:"nonzero"` + E I `validate:nonzero` +} + +func (ms *MySuite) TestValidate(c *C) { + t := TestStruct{ + A: 0, + B: "12345", + } + t.Sub.A = 1 + t.Sub.B = "" + t.Sub.C = 0.0 + t.D = &Simple{10} + t.E = &Impl{"hello"} + + err := validator.Validate(t) + c.Assert(err, NotNil) + + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs["A"], HasError, validator.ErrZeroValue) + c.Assert(errs["B"], HasError, validator.ErrLen) + c.Assert(errs["B"], HasError, validator.ErrMin) + c.Assert(errs["B"], HasError, validator.ErrMax) + c.Assert(errs["Sub.A"], HasLen, 0) + c.Assert(errs["Sub.B"], HasLen, 0) + c.Assert(errs["Sub.C"], HasLen, 2) + c.Assert(errs["Sub.D"], HasError, validator.ErrZeroValue) + c.Assert(errs["E.F"], HasError, validator.ErrLen) +} + +func (ms *MySuite) TestValidSlice(c *C) { + s := make([]int, 0, 10) + err := validator.Valid(s, "nonzero") + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrZeroValue) + + for i := 0; i < 10; i++ { + s = append(s, i) + } + + err = validator.Valid(s, "min=11,max=5,len=9,nonzero") + c.Assert(err, NotNil) + errs, ok = err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrMin) + c.Assert(errs, HasError, validator.ErrMax) + c.Assert(errs, HasError, validator.ErrLen) + c.Assert(errs, Not(HasError), validator.ErrZeroValue) +} + +func (ms *MySuite) TestValidMap(c *C) { + m := make(map[string]string) + err := validator.Valid(m, "nonzero") + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrZeroValue) + + err = validator.Valid(m, "min=1") + c.Assert(err, NotNil) + errs, ok = err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrMin) + + m = map[string]string{"A": "a", "B": "a"} + err = validator.Valid(m, "max=1") + c.Assert(err, NotNil) + errs, ok = err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrMax) + + err = validator.Valid(m, "min=2, max=5") + c.Assert(err, IsNil) + + m = map[string]string{ + "1": "a", + "2": "b", + "3": "c", + "4": "d", + "5": "e", + } + err = validator.Valid(m, "len=4,min=6,max=1,nonzero") + c.Assert(err, NotNil) + errs, ok = err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrLen) + c.Assert(errs, HasError, validator.ErrMin) + c.Assert(errs, HasError, validator.ErrMax) + c.Assert(errs, Not(HasError), validator.ErrZeroValue) + +} + +func (ms *MySuite) TestValidFloat(c *C) { + err := validator.Valid(12.34, "nonzero") + c.Assert(err, IsNil) + + err = validator.Valid(0.0, "nonzero") + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrZeroValue) +} + +func (ms *MySuite) TestValidInt(c *C) { + i := 123 + err := validator.Valid(i, "nonzero") + c.Assert(err, IsNil) + + err = validator.Valid(i, "min=1") + c.Assert(err, IsNil) + + err = validator.Valid(i, "min=124, max=122") + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrMin) + c.Assert(errs, HasError, validator.ErrMax) + + err = validator.Valid(i, "max=10") + c.Assert(err, NotNil) + errs, ok = err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrMax) +} + +func (ms *MySuite) TestValidString(c *C) { + s := "test1234" + err := validator.Valid(s, "len=8") + c.Assert(err, IsNil) + + err = validator.Valid(s, "len=0") + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasError, validator.ErrLen) + + err = validator.Valid(s, "regexp=^[tes]{4}.*") + c.Assert(err, IsNil) + + err = validator.Valid(s, "regexp=^.*[0-9]{5}$") + c.Assert(errs, NotNil) + + err = validator.Valid("", "nonzero,len=3,max=1") + c.Assert(err, NotNil) + errs, ok = err.(validator.ErrorArray) + c.Assert(ok, Equals, true) + c.Assert(errs, HasLen, 2) + c.Assert(errs, HasError, validator.ErrZeroValue) + c.Assert(errs, HasError, validator.ErrLen) + c.Assert(errs, Not(HasError), validator.ErrMax) +} + +func (ms *MySuite) TestValidateStructVar(c *C) { + // just verifies that a the given val is a struct + validator.SetValidationFunc("struct", func(val interface{}, _ string) error { + v := reflect.ValueOf(val) + if v.Kind() == reflect.Struct { + return nil + } + return validator.ErrUnsupported + }) + + type test struct { + A int + } + err := validator.Valid(test{}, "struct") + c.Assert(err, IsNil) + + type test2 struct { + B int + } + type test1 struct { + A test2 `validate:"struct"` + } + + err = validator.Validate(test1{}) + c.Assert(err, IsNil) + + type test4 struct { + B int `validate:"foo"` + } + type test3 struct { + A test4 + } + err = validator.Validate(test3{}) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs["A.B"], HasError, validator.ErrUnknownTag) +} + +func (ms *MySuite) TestValidatePointerVar(c *C) { + // just verifies that a the given val is a struct + validator.SetValidationFunc("struct", func(val interface{}, _ string) error { + v := reflect.ValueOf(val) + if v.Kind() == reflect.Struct { + return nil + } + return validator.ErrUnsupported + }) + validator.SetValidationFunc("nil", func(val interface{}, _ string) error { + v := reflect.ValueOf(val) + if v.IsNil() { + return nil + } + return validator.ErrUnsupported + }) + + type test struct { + A int + } + err := validator.Valid(&test{}, "struct") + c.Assert(err, IsNil) + + type test2 struct { + B int + } + type test1 struct { + A *test2 `validate:"struct"` + } + + err = validator.Validate(&test1{&test2{}}) + c.Assert(err, IsNil) + + type test4 struct { + B int `validate:"foo"` + } + type test3 struct { + A test4 + } + err = validator.Validate(&test3{}) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs["A.B"], HasError, validator.ErrUnknownTag) + + err = validator.Valid((*test)(nil), "nil") + c.Assert(err, IsNil) + + type test5 struct { + A *test2 `validate:"nil"` + } + err = validator.Validate(&test5{}) + c.Assert(err, IsNil) + + type test6 struct { + A *test2 `validate:"nonzero"` + } + err = validator.Validate(&test6{}) + errs, ok = err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs["A"], HasError, validator.ErrZeroValue) + + err = validator.Validate(&test6{&test2{}}) + c.Assert(err, IsNil) +} + +func (ms *MySuite) TestValidateOmittedStructVar(c *C) { + type test2 struct { + B int `validate:"min=1"` + } + type test1 struct { + A test2 `validate:"-"` + } + + t := test1{} + err := validator.Validate(t) + c.Assert(err, IsNil) + + errs := validator.Valid(test2{}, "-") + c.Assert(errs, IsNil) +} + +func (ms *MySuite) TestUnknownTag(c *C) { + type test struct { + A int `validate:"foo"` + } + t := test{} + err := validator.Validate(t) + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs, HasLen, 1) + c.Assert(errs["A"], HasError, validator.ErrUnknownTag) +} + +func (ms *MySuite) TestValidateStructWithSlice(c *C) { + type test2 struct { + Num int `validate:"max=2"` + String string `validate:"nonzero"` + } + + type test struct { + Slices []test2 `validate:"len=1"` + } + + t := test{ + Slices: []test2{{ + Num: 6, + String: "foo", + }}, + } + err := validator.Validate(t) + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs["Slices[0].Num"], HasError, validator.ErrMax) + c.Assert(errs["Slices[0].String"], IsNil) // sanity check +} + +func (ms *MySuite) TestValidateStructWithNestedSlice(c *C) { + type test2 struct { + Num int `validate:"max=2"` + } + + type test struct { + Slices [][]test2 + } + + t := test{ + Slices: [][]test2{{{Num: 6}}}, + } + err := validator.Validate(t) + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs["Slices[0][0].Num"], HasError, validator.ErrMax) +} + +func (ms *MySuite) TestValidateStructWithMap(c *C) { + type test2 struct { + Num int `validate:"max=2"` + } + + type test struct { + Map map[string]test2 + StructKeyMap map[test2]test2 + } + + t := test{ + Map: map[string]test2{ + "hello": {Num: 6}, + }, + StructKeyMap: map[test2]test2{ + {Num: 3}: {Num: 1}, + }, + } + err := validator.Validate(t) + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + + c.Assert(errs["Map[hello](value).Num"], HasError, validator.ErrMax) + c.Assert(errs["StructKeyMap[{Num:3}](key).Num"], HasError, validator.ErrMax) +} + +func (ms *MySuite) TestUnsupported(c *C) { + type test struct { + A int `validate:"regexp=a.*b"` + B float64 `validate:"regexp=.*"` + } + t := test{} + err := validator.Validate(t) + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs, HasLen, 2) + c.Assert(errs["A"], HasError, validator.ErrUnsupported) + c.Assert(errs["B"], HasError, validator.ErrUnsupported) +} + +func (ms *MySuite) TestBadParameter(c *C) { + type test struct { + A string `validate:"min="` + B string `validate:"len=="` + C string `validate:"max=foo"` + } + t := test{} + err := validator.Validate(t) + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs, HasLen, 3) + c.Assert(errs["A"], HasError, validator.ErrBadParameter) + c.Assert(errs["B"], HasError, validator.ErrBadParameter) + c.Assert(errs["C"], HasError, validator.ErrBadParameter) +} + +func (ms *MySuite) TestCopy(c *C) { + v := validator.NewValidator() + // WithTag calls copy, so we just copy the validator with the same tag + v2 := v.WithTag("validate") + // now we add a custom func only to the second one, it shouldn't get added + // to the first + v2.SetValidationFunc("custom", func(_ interface{}, _ string) error { return nil }) + type test struct { + A string `validate:"custom"` + } + err := v2.Validate(test{}) + c.Assert(err, IsNil) + + err = v.Validate(test{}) + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs, HasLen, 1) + c.Assert(errs["A"], HasError, validator.ErrUnknownTag) +} + +func (ms *MySuite) TestTagEscape(c *C) { + type test struct { + A string `validate:"min=0,regexp=^a{3\\,10}"` + } + t := test{"aaaa"} + err := validator.Validate(t) + c.Assert(err, IsNil) + + t2 := test{"aa"} + err = validator.Validate(t2) + c.Assert(err, NotNil) + errs, ok := err.(validator.ErrorMap) + c.Assert(ok, Equals, true) + c.Assert(errs["A"], HasError, validator.ErrRegexp) +} + +type hasErrorChecker struct { + *CheckerInfo +} + +func (c *hasErrorChecker) Check(params []interface{}, names []string) (bool, string) { + var ( + ok bool + slice []error + value error + ) + slice, ok = params[0].(validator.ErrorArray) + if !ok { + return false, "First parameter is not an Errorarray" + } + value, ok = params[1].(error) + if !ok { + return false, "Second parameter is not an error" + } + + for _, v := range slice { + if v == value { + return true, "" + } + } + return false, "" +} + +func (c *hasErrorChecker) Info() *CheckerInfo { + return c.CheckerInfo +} + +var HasError = &hasErrorChecker{&CheckerInfo{Name: "HasError", Params: []string{"HasError", "expected to contain"}}} diff --git a/vendor/gopkg.in/yaml.v2/LICENSE b/vendor/gopkg.in/yaml.v2/LICENSE index 866d74a..8dada3e 100644 --- a/vendor/gopkg.in/yaml.v2/LICENSE +++ b/vendor/gopkg.in/yaml.v2/LICENSE @@ -1,13 +1,201 @@ -Copyright 2011-2016 Canonical Ltd. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ -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 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - http://www.apache.org/licenses/LICENSE-2.0 + 1. Definitions. -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. + "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 + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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/gopkg.in/yaml.v2/README.md b/vendor/gopkg.in/yaml.v2/README.md index 1884de6..7a512d6 100644 --- a/vendor/gopkg.in/yaml.v2/README.md +++ b/vendor/gopkg.in/yaml.v2/README.md @@ -48,6 +48,8 @@ The yaml package is licensed under the Apache License 2.0. Please see the LICENS Example ------- +Some more examples can be found in the "examples" folder. + ```Go package main diff --git a/vendor/gopkg.in/yaml.v2/decode.go b/vendor/gopkg.in/yaml.v2/decode.go index 085cddc..db1f5f2 100644 --- a/vendor/gopkg.in/yaml.v2/decode.go +++ b/vendor/gopkg.in/yaml.v2/decode.go @@ -120,7 +120,6 @@ func (p *parser) parse() *node { default: panic("attempted to parse unknown event: " + strconv.Itoa(int(p.event.typ))) } - panic("unreachable") } func (p *parser) node(kind int) *node { @@ -191,6 +190,7 @@ type decoder struct { aliases map[string]bool mapType reflect.Type terrors []string + strict bool } var ( @@ -200,8 +200,8 @@ var ( ifaceType = defaultMapType.Elem() ) -func newDecoder() *decoder { - d := &decoder{mapType: defaultMapType} +func newDecoder(strict bool) *decoder { + d := &decoder{mapType: defaultMapType, strict: strict} d.aliases = make(map[string]bool) return d } @@ -251,7 +251,7 @@ func (d *decoder) callUnmarshaler(n *node, u Unmarshaler) (good bool) { // // If n holds a null value, prepare returns before doing anything. func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) { - if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "") { + if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "" && n.implicit) { return out, false, false } again := true @@ -640,6 +640,8 @@ func (d *decoder) mappingStruct(n *node, out reflect.Value) (good bool) { value := reflect.New(elemType).Elem() d.unmarshal(n.children[i+1], value) inlineMap.SetMapIndex(name, value) + } else if d.strict { + d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in struct %s", n.line+1, name.String(), out.Type())) } } return true diff --git a/vendor/gopkg.in/yaml.v2/decode_test.go b/vendor/gopkg.in/yaml.v2/decode_test.go new file mode 100644 index 0000000..713b1ee --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/decode_test.go @@ -0,0 +1,1017 @@ +package yaml_test + +import ( + "errors" + . "gopkg.in/check.v1" + "gopkg.in/yaml.v2" + "math" + "net" + "reflect" + "strings" + "time" +) + +var unmarshalIntTest = 123 + +var unmarshalTests = []struct { + data string + value interface{} +}{ + { + "", + &struct{}{}, + }, { + "{}", &struct{}{}, + }, { + "v: hi", + map[string]string{"v": "hi"}, + }, { + "v: hi", map[string]interface{}{"v": "hi"}, + }, { + "v: true", + map[string]string{"v": "true"}, + }, { + "v: true", + map[string]interface{}{"v": true}, + }, { + "v: 10", + map[string]interface{}{"v": 10}, + }, { + "v: 0b10", + map[string]interface{}{"v": 2}, + }, { + "v: 0xA", + map[string]interface{}{"v": 10}, + }, { + "v: 4294967296", + map[string]int64{"v": 4294967296}, + }, { + "v: 0.1", + map[string]interface{}{"v": 0.1}, + }, { + "v: .1", + map[string]interface{}{"v": 0.1}, + }, { + "v: .Inf", + map[string]interface{}{"v": math.Inf(+1)}, + }, { + "v: -.Inf", + map[string]interface{}{"v": math.Inf(-1)}, + }, { + "v: -10", + map[string]interface{}{"v": -10}, + }, { + "v: -.1", + map[string]interface{}{"v": -0.1}, + }, + + // Simple values. + { + "123", + &unmarshalIntTest, + }, + + // Floats from spec + { + "canonical: 6.8523e+5", + map[string]interface{}{"canonical": 6.8523e+5}, + }, { + "expo: 685.230_15e+03", + map[string]interface{}{"expo": 685.23015e+03}, + }, { + "fixed: 685_230.15", + map[string]interface{}{"fixed": 685230.15}, + }, { + "neginf: -.inf", + map[string]interface{}{"neginf": math.Inf(-1)}, + }, { + "fixed: 685_230.15", + map[string]float64{"fixed": 685230.15}, + }, + //{"sexa: 190:20:30.15", map[string]interface{}{"sexa": 0}}, // Unsupported + //{"notanum: .NaN", map[string]interface{}{"notanum": math.NaN()}}, // Equality of NaN fails. + + // Bools from spec + { + "canonical: y", + map[string]interface{}{"canonical": true}, + }, { + "answer: NO", + map[string]interface{}{"answer": false}, + }, { + "logical: True", + map[string]interface{}{"logical": true}, + }, { + "option: on", + map[string]interface{}{"option": true}, + }, { + "option: on", + map[string]bool{"option": true}, + }, + // Ints from spec + { + "canonical: 685230", + map[string]interface{}{"canonical": 685230}, + }, { + "decimal: +685_230", + map[string]interface{}{"decimal": 685230}, + }, { + "octal: 02472256", + map[string]interface{}{"octal": 685230}, + }, { + "hexa: 0x_0A_74_AE", + map[string]interface{}{"hexa": 685230}, + }, { + "bin: 0b1010_0111_0100_1010_1110", + map[string]interface{}{"bin": 685230}, + }, { + "bin: -0b101010", + map[string]interface{}{"bin": -42}, + }, { + "decimal: +685_230", + map[string]int{"decimal": 685230}, + }, + + //{"sexa: 190:20:30", map[string]interface{}{"sexa": 0}}, // Unsupported + + // Nulls from spec + { + "empty:", + map[string]interface{}{"empty": nil}, + }, { + "canonical: ~", + map[string]interface{}{"canonical": nil}, + }, { + "english: null", + map[string]interface{}{"english": nil}, + }, { + "~: null key", + map[interface{}]string{nil: "null key"}, + }, { + "empty:", + map[string]*bool{"empty": nil}, + }, + + // Flow sequence + { + "seq: [A,B]", + map[string]interface{}{"seq": []interface{}{"A", "B"}}, + }, { + "seq: [A,B,C,]", + map[string][]string{"seq": []string{"A", "B", "C"}}, + }, { + "seq: [A,1,C]", + map[string][]string{"seq": []string{"A", "1", "C"}}, + }, { + "seq: [A,1,C]", + map[string][]int{"seq": []int{1}}, + }, { + "seq: [A,1,C]", + map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, + }, + // Block sequence + { + "seq:\n - A\n - B", + map[string]interface{}{"seq": []interface{}{"A", "B"}}, + }, { + "seq:\n - A\n - B\n - C", + map[string][]string{"seq": []string{"A", "B", "C"}}, + }, { + "seq:\n - A\n - 1\n - C", + map[string][]string{"seq": []string{"A", "1", "C"}}, + }, { + "seq:\n - A\n - 1\n - C", + map[string][]int{"seq": []int{1}}, + }, { + "seq:\n - A\n - 1\n - C", + map[string]interface{}{"seq": []interface{}{"A", 1, "C"}}, + }, + + // Literal block scalar + { + "scalar: | # Comment\n\n literal\n\n \ttext\n\n", + map[string]string{"scalar": "\nliteral\n\n\ttext\n"}, + }, + + // Folded block scalar + { + "scalar: > # Comment\n\n folded\n line\n \n next\n line\n * one\n * two\n\n last\n line\n\n", + map[string]string{"scalar": "\nfolded line\nnext line\n * one\n * two\n\nlast line\n"}, + }, + + // Map inside interface with no type hints. + { + "a: {b: c}", + map[interface{}]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, + }, + + // Structs and type conversions. + { + "hello: world", + &struct{ Hello string }{"world"}, + }, { + "a: {b: c}", + &struct{ A struct{ B string } }{struct{ B string }{"c"}}, + }, { + "a: {b: c}", + &struct{ A *struct{ B string } }{&struct{ B string }{"c"}}, + }, { + "a: {b: c}", + &struct{ A map[string]string }{map[string]string{"b": "c"}}, + }, { + "a: {b: c}", + &struct{ A *map[string]string }{&map[string]string{"b": "c"}}, + }, { + "a:", + &struct{ A map[string]string }{}, + }, { + "a: 1", + &struct{ A int }{1}, + }, { + "a: 1", + &struct{ A float64 }{1}, + }, { + "a: 1.0", + &struct{ A int }{1}, + }, { + "a: 1.0", + &struct{ A uint }{1}, + }, { + "a: [1, 2]", + &struct{ A []int }{[]int{1, 2}}, + }, { + "a: 1", + &struct{ B int }{0}, + }, { + "a: 1", + &struct { + B int "a" + }{1}, + }, { + "a: y", + &struct{ A bool }{true}, + }, + + // Some cross type conversions + { + "v: 42", + map[string]uint{"v": 42}, + }, { + "v: -42", + map[string]uint{}, + }, { + "v: 4294967296", + map[string]uint64{"v": 4294967296}, + }, { + "v: -4294967296", + map[string]uint64{}, + }, + + // int + { + "int_max: 2147483647", + map[string]int{"int_max": math.MaxInt32}, + }, + { + "int_min: -2147483648", + map[string]int{"int_min": math.MinInt32}, + }, + { + "int_overflow: 9223372036854775808", // math.MaxInt64 + 1 + map[string]int{}, + }, + + // int64 + { + "int64_max: 9223372036854775807", + map[string]int64{"int64_max": math.MaxInt64}, + }, + { + "int64_max_base2: 0b111111111111111111111111111111111111111111111111111111111111111", + map[string]int64{"int64_max_base2": math.MaxInt64}, + }, + { + "int64_min: -9223372036854775808", + map[string]int64{"int64_min": math.MinInt64}, + }, + { + "int64_neg_base2: -0b111111111111111111111111111111111111111111111111111111111111111", + map[string]int64{"int64_neg_base2": -math.MaxInt64}, + }, + { + "int64_overflow: 9223372036854775808", // math.MaxInt64 + 1 + map[string]int64{}, + }, + + // uint + { + "uint_min: 0", + map[string]uint{"uint_min": 0}, + }, + { + "uint_max: 4294967295", + map[string]uint{"uint_max": math.MaxUint32}, + }, + { + "uint_underflow: -1", + map[string]uint{}, + }, + + // uint64 + { + "uint64_min: 0", + map[string]uint{"uint64_min": 0}, + }, + { + "uint64_max: 18446744073709551615", + map[string]uint64{"uint64_max": math.MaxUint64}, + }, + { + "uint64_max_base2: 0b1111111111111111111111111111111111111111111111111111111111111111", + map[string]uint64{"uint64_max_base2": math.MaxUint64}, + }, + { + "uint64_maxint64: 9223372036854775807", + map[string]uint64{"uint64_maxint64": math.MaxInt64}, + }, + { + "uint64_underflow: -1", + map[string]uint64{}, + }, + + // float32 + { + "float32_max: 3.40282346638528859811704183484516925440e+38", + map[string]float32{"float32_max": math.MaxFloat32}, + }, + { + "float32_nonzero: 1.401298464324817070923729583289916131280e-45", + map[string]float32{"float32_nonzero": math.SmallestNonzeroFloat32}, + }, + { + "float32_maxuint64: 18446744073709551615", + map[string]float32{"float32_maxuint64": float32(math.MaxUint64)}, + }, + { + "float32_maxuint64+1: 18446744073709551616", + map[string]float32{"float32_maxuint64+1": float32(math.MaxUint64 + 1)}, + }, + + // float64 + { + "float64_max: 1.797693134862315708145274237317043567981e+308", + map[string]float64{"float64_max": math.MaxFloat64}, + }, + { + "float64_nonzero: 4.940656458412465441765687928682213723651e-324", + map[string]float64{"float64_nonzero": math.SmallestNonzeroFloat64}, + }, + { + "float64_maxuint64: 18446744073709551615", + map[string]float64{"float64_maxuint64": float64(math.MaxUint64)}, + }, + { + "float64_maxuint64+1: 18446744073709551616", + map[string]float64{"float64_maxuint64+1": float64(math.MaxUint64 + 1)}, + }, + + // Overflow cases. + { + "v: 4294967297", + map[string]int32{}, + }, { + "v: 128", + map[string]int8{}, + }, + + // Quoted values. + { + "'1': '\"2\"'", + map[interface{}]interface{}{"1": "\"2\""}, + }, { + "v:\n- A\n- 'B\n\n C'\n", + map[string][]string{"v": []string{"A", "B\nC"}}, + }, + + // Explicit tags. + { + "v: !!float '1.1'", + map[string]interface{}{"v": 1.1}, + }, { + "v: !!null ''", + map[string]interface{}{"v": nil}, + }, { + "%TAG !y! tag:yaml.org,2002:\n---\nv: !y!int '1'", + map[string]interface{}{"v": 1}, + }, + + // Non-specific tag (Issue #75) + { + "v: ! test", + map[string]interface{}{"v": "test"}, + }, + + // Anchors and aliases. + { + "a: &x 1\nb: &y 2\nc: *x\nd: *y\n", + &struct{ A, B, C, D int }{1, 2, 1, 2}, + }, { + "a: &a {c: 1}\nb: *a", + &struct { + A, B struct { + C int + } + }{struct{ C int }{1}, struct{ C int }{1}}, + }, { + "a: &a [1, 2]\nb: *a", + &struct{ B []int }{[]int{1, 2}}, + }, { + "b: *a\na: &a {c: 1}", + &struct { + A, B struct { + C int + } + }{struct{ C int }{1}, struct{ C int }{1}}, + }, + + // Bug #1133337 + { + "foo: ''", + map[string]*string{"foo": new(string)}, + }, { + "foo: null", + map[string]string{"foo": ""}, + }, { + "foo: null", + map[string]interface{}{"foo": nil}, + }, + + // Ignored field + { + "a: 1\nb: 2\n", + &struct { + A int + B int "-" + }{1, 0}, + }, + + // Bug #1191981 + { + "" + + "%YAML 1.1\n" + + "--- !!str\n" + + `"Generic line break (no glyph)\n\` + "\n" + + ` Generic line break (glyphed)\n\` + "\n" + + ` Line separator\u2028\` + "\n" + + ` Paragraph separator\u2029"` + "\n", + "" + + "Generic line break (no glyph)\n" + + "Generic line break (glyphed)\n" + + "Line separator\u2028Paragraph separator\u2029", + }, + + // Struct inlining + { + "a: 1\nb: 2\nc: 3\n", + &struct { + A int + C inlineB `yaml:",inline"` + }{1, inlineB{2, inlineC{3}}}, + }, + + // Map inlining + { + "a: 1\nb: 2\nc: 3\n", + &struct { + A int + C map[string]int `yaml:",inline"` + }{1, map[string]int{"b": 2, "c": 3}}, + }, + + // bug 1243827 + { + "a: -b_c", + map[string]interface{}{"a": "-b_c"}, + }, + { + "a: +b_c", + map[string]interface{}{"a": "+b_c"}, + }, + { + "a: 50cent_of_dollar", + map[string]interface{}{"a": "50cent_of_dollar"}, + }, + + // Duration + { + "a: 3s", + map[string]time.Duration{"a": 3 * time.Second}, + }, + + // Issue #24. + { + "a: ", + map[string]string{"a": ""}, + }, + + // Base 60 floats are obsolete and unsupported. + { + "a: 1:1\n", + map[string]string{"a": "1:1"}, + }, + + // Binary data. + { + "a: !!binary gIGC\n", + map[string]string{"a": "\x80\x81\x82"}, + }, { + "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", + map[string]string{"a": strings.Repeat("\x90", 54)}, + }, { + "a: !!binary |\n " + strings.Repeat("A", 70) + "\n ==\n", + map[string]string{"a": strings.Repeat("\x00", 52)}, + }, + + // Ordered maps. + { + "{b: 2, a: 1, d: 4, c: 3, sub: {e: 5}}", + &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, + }, + + // Issue #39. + { + "a:\n b:\n c: d\n", + map[string]struct{ B interface{} }{"a": {map[interface{}]interface{}{"c": "d"}}}, + }, + + // Custom map type. + { + "a: {b: c}", + M{"a": M{"b": "c"}}, + }, + + // Support encoding.TextUnmarshaler. + { + "a: 1.2.3.4\n", + map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, + }, + { + "a: 2015-02-24T18:19:39Z\n", + map[string]time.Time{"a": time.Unix(1424801979, 0).In(time.UTC)}, + }, + + // Encode empty lists as zero-length slices. + { + "a: []", + &struct{ A []int }{[]int{}}, + }, + + // UTF-16-LE + { + "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n\x00", + M{"ñoño": "very yes"}, + }, + // UTF-16-LE with surrogate. + { + "\xff\xfe\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \x00=\xd8\xd4\xdf\n\x00", + M{"ñoño": "very yes 🟔"}, + }, + + // UTF-16-BE + { + "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00\n", + M{"ñoño": "very yes"}, + }, + // UTF-16-BE with surrogate. + { + "\xfe\xff\x00\xf1\x00o\x00\xf1\x00o\x00:\x00 \x00v\x00e\x00r\x00y\x00 \x00y\x00e\x00s\x00 \xd8=\xdf\xd4\x00\n", + M{"ñoño": "very yes 🟔"}, + }, + + // YAML Float regex shouldn't match this + { + "a: 123456e1\n", + M{"a": "123456e1"}, + }, { + "a: 123456E1\n", + M{"a": "123456E1"}, + }, +} + +type M map[interface{}]interface{} + +type inlineB struct { + B int + inlineC `yaml:",inline"` +} + +type inlineC struct { + C int +} + +func (s *S) TestUnmarshal(c *C) { + for i, item := range unmarshalTests { + c.Logf("test %d: %q", i, item.data) + t := reflect.ValueOf(item.value).Type() + var value interface{} + switch t.Kind() { + case reflect.Map: + value = reflect.MakeMap(t).Interface() + case reflect.String: + value = reflect.New(t).Interface() + case reflect.Ptr: + value = reflect.New(t.Elem()).Interface() + default: + c.Fatalf("missing case for %s", t) + } + err := yaml.Unmarshal([]byte(item.data), value) + if _, ok := err.(*yaml.TypeError); !ok { + c.Assert(err, IsNil) + } + if t.Kind() == reflect.String { + c.Assert(*value.(*string), Equals, item.value) + } else { + c.Assert(value, DeepEquals, item.value) + } + } +} + +func (s *S) TestUnmarshalNaN(c *C) { + value := map[string]interface{}{} + err := yaml.Unmarshal([]byte("notanum: .NaN"), &value) + c.Assert(err, IsNil) + c.Assert(math.IsNaN(value["notanum"].(float64)), Equals, true) +} + +var unmarshalErrorTests = []struct { + data, error string +}{ + {"v: !!float 'error'", "yaml: cannot decode !!str `error` as a !!float"}, + {"v: [A,", "yaml: line 1: did not find expected node content"}, + {"v:\n- [A,", "yaml: line 2: did not find expected node content"}, + {"a: *b\n", "yaml: unknown anchor 'b' referenced"}, + {"a: &a\n b: *a\n", "yaml: anchor 'a' value contains itself"}, + {"value: -", "yaml: block sequence entries are not allowed in this context"}, + {"a: !!binary ==", "yaml: !!binary value contains invalid base64 data"}, + {"{[.]}", `yaml: invalid map key: \[\]interface \{\}\{"\."\}`}, + {"{{.}}", `yaml: invalid map key: map\[interface\ \{\}\]interface \{\}\{".":interface \{\}\(nil\)\}`}, + {"%TAG !%79! tag:yaml.org,2002:\n---\nv: !%79!int '1'", "yaml: did not find expected whitespace"}, +} + +func (s *S) TestUnmarshalErrors(c *C) { + for _, item := range unmarshalErrorTests { + var value interface{} + err := yaml.Unmarshal([]byte(item.data), &value) + c.Assert(err, ErrorMatches, item.error, Commentf("Partial unmarshal: %#v", value)) + } +} + +var unmarshalerTests = []struct { + data, tag string + value interface{} +}{ + {"_: {hi: there}", "!!map", map[interface{}]interface{}{"hi": "there"}}, + {"_: [1,A]", "!!seq", []interface{}{1, "A"}}, + {"_: 10", "!!int", 10}, + {"_: null", "!!null", nil}, + {`_: BAR!`, "!!str", "BAR!"}, + {`_: "BAR!"`, "!!str", "BAR!"}, + {"_: !!foo 'BAR!'", "!!foo", "BAR!"}, + {`_: ""`, "!!str", ""}, +} + +var unmarshalerResult = map[int]error{} + +type unmarshalerType struct { + value interface{} +} + +func (o *unmarshalerType) UnmarshalYAML(unmarshal func(v interface{}) error) error { + if err := unmarshal(&o.value); err != nil { + return err + } + if i, ok := o.value.(int); ok { + if result, ok := unmarshalerResult[i]; ok { + return result + } + } + return nil +} + +type unmarshalerPointer struct { + Field *unmarshalerType "_" +} + +type unmarshalerValue struct { + Field unmarshalerType "_" +} + +func (s *S) TestUnmarshalerPointerField(c *C) { + for _, item := range unmarshalerTests { + obj := &unmarshalerPointer{} + err := yaml.Unmarshal([]byte(item.data), obj) + c.Assert(err, IsNil) + if item.value == nil { + c.Assert(obj.Field, IsNil) + } else { + c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) + c.Assert(obj.Field.value, DeepEquals, item.value) + } + } +} + +func (s *S) TestUnmarshalerValueField(c *C) { + for _, item := range unmarshalerTests { + obj := &unmarshalerValue{} + err := yaml.Unmarshal([]byte(item.data), obj) + c.Assert(err, IsNil) + c.Assert(obj.Field, NotNil, Commentf("Pointer not initialized (%#v)", item.value)) + c.Assert(obj.Field.value, DeepEquals, item.value) + } +} + +func (s *S) TestUnmarshalerWholeDocument(c *C) { + obj := &unmarshalerType{} + err := yaml.Unmarshal([]byte(unmarshalerTests[0].data), obj) + c.Assert(err, IsNil) + value, ok := obj.value.(map[interface{}]interface{}) + c.Assert(ok, Equals, true, Commentf("value: %#v", obj.value)) + c.Assert(value["_"], DeepEquals, unmarshalerTests[0].value) +} + +func (s *S) TestUnmarshalerTypeError(c *C) { + unmarshalerResult[2] = &yaml.TypeError{[]string{"foo"}} + unmarshalerResult[4] = &yaml.TypeError{[]string{"bar"}} + defer func() { + delete(unmarshalerResult, 2) + delete(unmarshalerResult, 4) + }() + + type T struct { + Before int + After int + M map[string]*unmarshalerType + } + var v T + data := `{before: A, m: {abc: 1, def: 2, ghi: 3, jkl: 4}, after: B}` + err := yaml.Unmarshal([]byte(data), &v) + c.Assert(err, ErrorMatches, ""+ + "yaml: unmarshal errors:\n"+ + " line 1: cannot unmarshal !!str `A` into int\n"+ + " foo\n"+ + " bar\n"+ + " line 1: cannot unmarshal !!str `B` into int") + c.Assert(v.M["abc"], NotNil) + c.Assert(v.M["def"], IsNil) + c.Assert(v.M["ghi"], NotNil) + c.Assert(v.M["jkl"], IsNil) + + c.Assert(v.M["abc"].value, Equals, 1) + c.Assert(v.M["ghi"].value, Equals, 3) +} + +type proxyTypeError struct{} + +func (v *proxyTypeError) UnmarshalYAML(unmarshal func(interface{}) error) error { + var s string + var a int32 + var b int64 + if err := unmarshal(&s); err != nil { + panic(err) + } + if s == "a" { + if err := unmarshal(&b); err == nil { + panic("should have failed") + } + return unmarshal(&a) + } + if err := unmarshal(&a); err == nil { + panic("should have failed") + } + return unmarshal(&b) +} + +func (s *S) TestUnmarshalerTypeErrorProxying(c *C) { + type T struct { + Before int + After int + M map[string]*proxyTypeError + } + var v T + data := `{before: A, m: {abc: a, def: b}, after: B}` + err := yaml.Unmarshal([]byte(data), &v) + c.Assert(err, ErrorMatches, ""+ + "yaml: unmarshal errors:\n"+ + " line 1: cannot unmarshal !!str `A` into int\n"+ + " line 1: cannot unmarshal !!str `a` into int32\n"+ + " line 1: cannot unmarshal !!str `b` into int64\n"+ + " line 1: cannot unmarshal !!str `B` into int") +} + +type failingUnmarshaler struct{} + +var failingErr = errors.New("failingErr") + +func (ft *failingUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { + return failingErr +} + +func (s *S) TestUnmarshalerError(c *C) { + err := yaml.Unmarshal([]byte("a: b"), &failingUnmarshaler{}) + c.Assert(err, Equals, failingErr) +} + +type sliceUnmarshaler []int + +func (su *sliceUnmarshaler) UnmarshalYAML(unmarshal func(interface{}) error) error { + var slice []int + err := unmarshal(&slice) + if err == nil { + *su = slice + return nil + } + + var intVal int + err = unmarshal(&intVal) + if err == nil { + *su = []int{intVal} + return nil + } + + return err +} + +func (s *S) TestUnmarshalerRetry(c *C) { + var su sliceUnmarshaler + err := yaml.Unmarshal([]byte("[1, 2, 3]"), &su) + c.Assert(err, IsNil) + c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1, 2, 3})) + + err = yaml.Unmarshal([]byte("1"), &su) + c.Assert(err, IsNil) + c.Assert(su, DeepEquals, sliceUnmarshaler([]int{1})) +} + +// From http://yaml.org/type/merge.html +var mergeTests = ` +anchors: + list: + - &CENTER { "x": 1, "y": 2 } + - &LEFT { "x": 0, "y": 2 } + - &BIG { "r": 10 } + - &SMALL { "r": 1 } + +# All the following maps are equal: + +plain: + # Explicit keys + "x": 1 + "y": 2 + "r": 10 + label: center/big + +mergeOne: + # Merge one map + << : *CENTER + "r": 10 + label: center/big + +mergeMultiple: + # Merge multiple maps + << : [ *CENTER, *BIG ] + label: center/big + +override: + # Override + << : [ *BIG, *LEFT, *SMALL ] + "x": 1 + label: center/big + +shortTag: + # Explicit short merge tag + !!merge "<<" : [ *CENTER, *BIG ] + label: center/big + +longTag: + # Explicit merge long tag + ! "<<" : [ *CENTER, *BIG ] + label: center/big + +inlineMap: + # Inlined map + << : {"x": 1, "y": 2, "r": 10} + label: center/big + +inlineSequenceMap: + # Inlined map in sequence + << : [ *CENTER, {"r": 10} ] + label: center/big +` + +func (s *S) TestMerge(c *C) { + var want = map[interface{}]interface{}{ + "x": 1, + "y": 2, + "r": 10, + "label": "center/big", + } + + var m map[interface{}]interface{} + err := yaml.Unmarshal([]byte(mergeTests), &m) + c.Assert(err, IsNil) + for name, test := range m { + if name == "anchors" { + continue + } + c.Assert(test, DeepEquals, want, Commentf("test %q failed", name)) + } +} + +func (s *S) TestMergeStruct(c *C) { + type Data struct { + X, Y, R int + Label string + } + want := Data{1, 2, 10, "center/big"} + + var m map[string]Data + err := yaml.Unmarshal([]byte(mergeTests), &m) + c.Assert(err, IsNil) + for name, test := range m { + if name == "anchors" { + continue + } + c.Assert(test, Equals, want, Commentf("test %q failed", name)) + } +} + +var unmarshalNullTests = []func() interface{}{ + func() interface{} { var v interface{}; v = "v"; return &v }, + func() interface{} { var s = "s"; return &s }, + func() interface{} { var s = "s"; sptr := &s; return &sptr }, + func() interface{} { var i = 1; return &i }, + func() interface{} { var i = 1; iptr := &i; return &iptr }, + func() interface{} { m := map[string]int{"s": 1}; return &m }, + func() interface{} { m := map[string]int{"s": 1}; return m }, +} + +func (s *S) TestUnmarshalNull(c *C) { + for _, test := range unmarshalNullTests { + item := test() + zero := reflect.Zero(reflect.TypeOf(item).Elem()).Interface() + err := yaml.Unmarshal([]byte("null"), item) + c.Assert(err, IsNil) + if reflect.TypeOf(item).Kind() == reflect.Map { + c.Assert(reflect.ValueOf(item).Interface(), DeepEquals, reflect.MakeMap(reflect.TypeOf(item)).Interface()) + } else { + c.Assert(reflect.ValueOf(item).Elem().Interface(), DeepEquals, zero) + } + } +} + +func (s *S) TestUnmarshalSliceOnPreset(c *C) { + // Issue #48. + v := struct{ A []int }{[]int{1}} + yaml.Unmarshal([]byte("a: [2]"), &v) + c.Assert(v.A, DeepEquals, []int{2}) +} + +func (s *S) TestUnmarshalStrict(c *C) { + v := struct{ A, B int }{} + + err := yaml.UnmarshalStrict([]byte("a: 1\nb: 2"), &v) + c.Check(err, IsNil) + err = yaml.Unmarshal([]byte("a: 1\nb: 2\nc: 3"), &v) + c.Check(err, IsNil) + err = yaml.UnmarshalStrict([]byte("a: 1\nb: 2\nc: 3"), &v) + c.Check(err, ErrorMatches, "yaml: unmarshal errors:\n line 1: field c not found in struct struct { A int; B int }") +} + +//var data []byte +//func init() { +// var err error +// data, err = ioutil.ReadFile("/tmp/file.yaml") +// if err != nil { +// panic(err) +// } +//} +// +//func (s *S) BenchmarkUnmarshal(c *C) { +// var err error +// for i := 0; i < c.N; i++ { +// var v map[string]interface{} +// err = yaml.Unmarshal(data, &v) +// } +// if err != nil { +// panic(err) +// } +//} +// +//func (s *S) BenchmarkMarshal(c *C) { +// var v map[string]interface{} +// yaml.Unmarshal(data, &v) +// c.ResetTimer() +// for i := 0; i < c.N; i++ { +// yaml.Marshal(&v) +// } +//} diff --git a/vendor/gopkg.in/yaml.v2/emitterc.go b/vendor/gopkg.in/yaml.v2/emitterc.go index 2befd55..41de8b8 100644 --- a/vendor/gopkg.in/yaml.v2/emitterc.go +++ b/vendor/gopkg.in/yaml.v2/emitterc.go @@ -666,7 +666,6 @@ func yaml_emitter_emit_node(emitter *yaml_emitter_t, event *yaml_event_t, return yaml_emitter_set_emitter_error(emitter, "expected SCALAR, SEQUENCE-START, MAPPING-START, or ALIAS") } - return false } // Expect ALIAS. @@ -995,7 +994,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { break_space = false space_break = false - preceeded_by_whitespace = false + preceded_by_whitespace = false followed_by_whitespace = false previous_space = false previous_break = false @@ -1017,7 +1016,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { flow_indicators = true } - preceeded_by_whitespace = true + preceded_by_whitespace = true for i, w := 0, 0; i < len(value); i += w { w = width(value[i]) followed_by_whitespace = i+w >= len(value) || is_blank(value, i+w) @@ -1048,7 +1047,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { block_indicators = true } case '#': - if preceeded_by_whitespace { + if preceded_by_whitespace { flow_indicators = true block_indicators = true } @@ -1089,7 +1088,7 @@ func yaml_emitter_analyze_scalar(emitter *yaml_emitter_t, value []byte) bool { } // [Go]: Why 'z'? Couldn't be the end of the string as that's the loop condition. - preceeded_by_whitespace = is_blankz(value, i) + preceded_by_whitespace = is_blankz(value, i) } emitter.scalar_data.multiline = line_breaks diff --git a/vendor/gopkg.in/yaml.v2/encode_test.go b/vendor/gopkg.in/yaml.v2/encode_test.go new file mode 100644 index 0000000..84099bd --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/encode_test.go @@ -0,0 +1,501 @@ +package yaml_test + +import ( + "fmt" + "math" + "strconv" + "strings" + "time" + + . "gopkg.in/check.v1" + "gopkg.in/yaml.v2" + "net" + "os" +) + +var marshalIntTest = 123 + +var marshalTests = []struct { + value interface{} + data string +}{ + { + nil, + "null\n", + }, { + &struct{}{}, + "{}\n", + }, { + map[string]string{"v": "hi"}, + "v: hi\n", + }, { + map[string]interface{}{"v": "hi"}, + "v: hi\n", + }, { + map[string]string{"v": "true"}, + "v: \"true\"\n", + }, { + map[string]string{"v": "false"}, + "v: \"false\"\n", + }, { + map[string]interface{}{"v": true}, + "v: true\n", + }, { + map[string]interface{}{"v": false}, + "v: false\n", + }, { + map[string]interface{}{"v": 10}, + "v: 10\n", + }, { + map[string]interface{}{"v": -10}, + "v: -10\n", + }, { + map[string]uint{"v": 42}, + "v: 42\n", + }, { + map[string]interface{}{"v": int64(4294967296)}, + "v: 4294967296\n", + }, { + map[string]int64{"v": int64(4294967296)}, + "v: 4294967296\n", + }, { + map[string]uint64{"v": 4294967296}, + "v: 4294967296\n", + }, { + map[string]interface{}{"v": "10"}, + "v: \"10\"\n", + }, { + map[string]interface{}{"v": 0.1}, + "v: 0.1\n", + }, { + map[string]interface{}{"v": float64(0.1)}, + "v: 0.1\n", + }, { + map[string]interface{}{"v": -0.1}, + "v: -0.1\n", + }, { + map[string]interface{}{"v": math.Inf(+1)}, + "v: .inf\n", + }, { + map[string]interface{}{"v": math.Inf(-1)}, + "v: -.inf\n", + }, { + map[string]interface{}{"v": math.NaN()}, + "v: .nan\n", + }, { + map[string]interface{}{"v": nil}, + "v: null\n", + }, { + map[string]interface{}{"v": ""}, + "v: \"\"\n", + }, { + map[string][]string{"v": []string{"A", "B"}}, + "v:\n- A\n- B\n", + }, { + map[string][]string{"v": []string{"A", "B\nC"}}, + "v:\n- A\n- |-\n B\n C\n", + }, { + map[string][]interface{}{"v": []interface{}{"A", 1, map[string][]int{"B": []int{2, 3}}}}, + "v:\n- A\n- 1\n- B:\n - 2\n - 3\n", + }, { + map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}, + "a:\n b: c\n", + }, { + map[string]interface{}{"a": "-"}, + "a: '-'\n", + }, + + // Simple values. + { + &marshalIntTest, + "123\n", + }, + + // Structures + { + &struct{ Hello string }{"world"}, + "hello: world\n", + }, { + &struct { + A struct { + B string + } + }{struct{ B string }{"c"}}, + "a:\n b: c\n", + }, { + &struct { + A *struct { + B string + } + }{&struct{ B string }{"c"}}, + "a:\n b: c\n", + }, { + &struct { + A *struct { + B string + } + }{}, + "a: null\n", + }, { + &struct{ A int }{1}, + "a: 1\n", + }, { + &struct{ A []int }{[]int{1, 2}}, + "a:\n- 1\n- 2\n", + }, { + &struct { + B int "a" + }{1}, + "a: 1\n", + }, { + &struct{ A bool }{true}, + "a: true\n", + }, + + // Conditional flag + { + &struct { + A int "a,omitempty" + B int "b,omitempty" + }{1, 0}, + "a: 1\n", + }, { + &struct { + A int "a,omitempty" + B int "b,omitempty" + }{0, 0}, + "{}\n", + }, { + &struct { + A *struct{ X, y int } "a,omitempty,flow" + }{&struct{ X, y int }{1, 2}}, + "a: {x: 1}\n", + }, { + &struct { + A *struct{ X, y int } "a,omitempty,flow" + }{nil}, + "{}\n", + }, { + &struct { + A *struct{ X, y int } "a,omitempty,flow" + }{&struct{ X, y int }{}}, + "a: {x: 0}\n", + }, { + &struct { + A struct{ X, y int } "a,omitempty,flow" + }{struct{ X, y int }{1, 2}}, + "a: {x: 1}\n", + }, { + &struct { + A struct{ X, y int } "a,omitempty,flow" + }{struct{ X, y int }{0, 1}}, + "{}\n", + }, { + &struct { + A float64 "a,omitempty" + B float64 "b,omitempty" + }{1, 0}, + "a: 1\n", + }, + + // Flow flag + { + &struct { + A []int "a,flow" + }{[]int{1, 2}}, + "a: [1, 2]\n", + }, { + &struct { + A map[string]string "a,flow" + }{map[string]string{"b": "c", "d": "e"}}, + "a: {b: c, d: e}\n", + }, { + &struct { + A struct { + B, D string + } "a,flow" + }{struct{ B, D string }{"c", "e"}}, + "a: {b: c, d: e}\n", + }, + + // Unexported field + { + &struct { + u int + A int + }{0, 1}, + "a: 1\n", + }, + + // Ignored field + { + &struct { + A int + B int "-" + }{1, 2}, + "a: 1\n", + }, + + // Struct inlining + { + &struct { + A int + C inlineB `yaml:",inline"` + }{1, inlineB{2, inlineC{3}}}, + "a: 1\nb: 2\nc: 3\n", + }, + + // Map inlining + { + &struct { + A int + C map[string]int `yaml:",inline"` + }{1, map[string]int{"b": 2, "c": 3}}, + "a: 1\nb: 2\nc: 3\n", + }, + + // Duration + { + map[string]time.Duration{"a": 3 * time.Second}, + "a: 3s\n", + }, + + // Issue #24: bug in map merging logic. + { + map[string]string{"a": ""}, + "a: \n", + }, + + // Issue #34: marshal unsupported base 60 floats quoted for compatibility + // with old YAML 1.1 parsers. + { + map[string]string{"a": "1:1"}, + "a: \"1:1\"\n", + }, + + // Binary data. + { + map[string]string{"a": "\x00"}, + "a: \"\\0\"\n", + }, { + map[string]string{"a": "\x80\x81\x82"}, + "a: !!binary gIGC\n", + }, { + map[string]string{"a": strings.Repeat("\x90", 54)}, + "a: !!binary |\n " + strings.Repeat("kJCQ", 17) + "kJ\n CQ\n", + }, + + // Ordered maps. + { + &yaml.MapSlice{{"b", 2}, {"a", 1}, {"d", 4}, {"c", 3}, {"sub", yaml.MapSlice{{"e", 5}}}}, + "b: 2\na: 1\nd: 4\nc: 3\nsub:\n e: 5\n", + }, + + // Encode unicode as utf-8 rather than in escaped form. + { + map[string]string{"a": "你好"}, + "a: 你好\n", + }, + + // Support encoding.TextMarshaler. + { + map[string]net.IP{"a": net.IPv4(1, 2, 3, 4)}, + "a: 1.2.3.4\n", + }, + { + map[string]time.Time{"a": time.Unix(1424801979, 0)}, + "a: 2015-02-24T18:19:39Z\n", + }, + + // Ensure strings containing ": " are quoted (reported as PR #43, but not reproducible). + { + map[string]string{"a": "b: c"}, + "a: 'b: c'\n", + }, + + // Containing hash mark ('#') in string should be quoted + { + map[string]string{"a": "Hello #comment"}, + "a: 'Hello #comment'\n", + }, + { + map[string]string{"a": "你好 #comment"}, + "a: '你好 #comment'\n", + }, +} + +func (s *S) TestMarshal(c *C) { + defer os.Setenv("TZ", os.Getenv("TZ")) + os.Setenv("TZ", "UTC") + for _, item := range marshalTests { + data, err := yaml.Marshal(item.value) + c.Assert(err, IsNil) + c.Assert(string(data), Equals, item.data) + } +} + +var marshalErrorTests = []struct { + value interface{} + error string + panic string +}{{ + value: &struct { + B int + inlineB ",inline" + }{1, inlineB{2, inlineC{3}}}, + panic: `Duplicated key 'b' in struct struct \{ B int; .*`, +}, { + value: &struct { + A int + B map[string]int ",inline" + }{1, map[string]int{"a": 2}}, + panic: `Can't have key "a" in inlined map; conflicts with struct field`, +}} + +func (s *S) TestMarshalErrors(c *C) { + for _, item := range marshalErrorTests { + if item.panic != "" { + c.Assert(func() { yaml.Marshal(item.value) }, PanicMatches, item.panic) + } else { + _, err := yaml.Marshal(item.value) + c.Assert(err, ErrorMatches, item.error) + } + } +} + +func (s *S) TestMarshalTypeCache(c *C) { + var data []byte + var err error + func() { + type T struct{ A int } + data, err = yaml.Marshal(&T{}) + c.Assert(err, IsNil) + }() + func() { + type T struct{ B int } + data, err = yaml.Marshal(&T{}) + c.Assert(err, IsNil) + }() + c.Assert(string(data), Equals, "b: 0\n") +} + +var marshalerTests = []struct { + data string + value interface{} +}{ + {"_:\n hi: there\n", map[interface{}]interface{}{"hi": "there"}}, + {"_:\n- 1\n- A\n", []interface{}{1, "A"}}, + {"_: 10\n", 10}, + {"_: null\n", nil}, + {"_: BAR!\n", "BAR!"}, +} + +type marshalerType struct { + value interface{} +} + +func (o marshalerType) MarshalText() ([]byte, error) { + panic("MarshalText called on type with MarshalYAML") +} + +func (o marshalerType) MarshalYAML() (interface{}, error) { + return o.value, nil +} + +type marshalerValue struct { + Field marshalerType "_" +} + +func (s *S) TestMarshaler(c *C) { + for _, item := range marshalerTests { + obj := &marshalerValue{} + obj.Field.value = item.value + data, err := yaml.Marshal(obj) + c.Assert(err, IsNil) + c.Assert(string(data), Equals, string(item.data)) + } +} + +func (s *S) TestMarshalerWholeDocument(c *C) { + obj := &marshalerType{} + obj.value = map[string]string{"hello": "world!"} + data, err := yaml.Marshal(obj) + c.Assert(err, IsNil) + c.Assert(string(data), Equals, "hello: world!\n") +} + +type failingMarshaler struct{} + +func (ft *failingMarshaler) MarshalYAML() (interface{}, error) { + return nil, failingErr +} + +func (s *S) TestMarshalerError(c *C) { + _, err := yaml.Marshal(&failingMarshaler{}) + c.Assert(err, Equals, failingErr) +} + +func (s *S) TestSortedOutput(c *C) { + order := []interface{}{ + false, + true, + 1, + uint(1), + 1.0, + 1.1, + 1.2, + 2, + uint(2), + 2.0, + 2.1, + "", + ".1", + ".2", + ".a", + "1", + "2", + "a!10", + "a/2", + "a/10", + "a~10", + "ab/1", + "b/1", + "b/01", + "b/2", + "b/02", + "b/3", + "b/03", + "b1", + "b01", + "b3", + "c2.10", + "c10.2", + "d1", + "d12", + "d12a", + } + m := make(map[interface{}]int) + for _, k := range order { + m[k] = 1 + } + data, err := yaml.Marshal(m) + c.Assert(err, IsNil) + out := "\n" + string(data) + last := 0 + for i, k := range order { + repr := fmt.Sprint(k) + if s, ok := k.(string); ok { + if _, err = strconv.ParseFloat(repr, 32); s == "" || err == nil { + repr = `"` + repr + `"` + } + } + index := strings.Index(out, "\n"+repr+":") + if index == -1 { + c.Fatalf("%#v is not in the output: %#v", k, out) + } + if index < last { + c.Fatalf("%#v was generated before %#v: %q", k, order[i-1], out) + } + last = index + } +} diff --git a/vendor/gopkg.in/yaml.v2/example_embedded_test.go b/vendor/gopkg.in/yaml.v2/example_embedded_test.go new file mode 100644 index 0000000..c8b241d --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/example_embedded_test.go @@ -0,0 +1,41 @@ +package yaml_test + +import ( + "fmt" + "log" + + "gopkg.in/yaml.v2" +) + +// An example showing how to unmarshal embedded +// structs from YAML. + +type StructA struct { + A string `yaml:"a"` +} + +type StructB struct { + // Embedded structs are not treated as embedded in YAML by default. To do that, + // add the ",inline" annotation below + StructA `yaml:",inline"` + B string `yaml:"b"` +} + +var data = ` +a: a string from struct A +b: a string from struct B +` + +func ExampleUnmarshal_embedded() { + var b StructB + + err := yaml.Unmarshal([]byte(data), &b) + if err != nil { + log.Fatal("cannot unmarshal data: %v", err) + } + fmt.Println(b.A) + fmt.Println(b.B) + // Output: + // a string from struct A + // a string from struct B +} diff --git a/vendor/gopkg.in/yaml.v2/parserc.go b/vendor/gopkg.in/yaml.v2/parserc.go index 0a7037a..81d05df 100644 --- a/vendor/gopkg.in/yaml.v2/parserc.go +++ b/vendor/gopkg.in/yaml.v2/parserc.go @@ -166,7 +166,6 @@ func yaml_parser_state_machine(parser *yaml_parser_t, event *yaml_event_t) bool default: panic("invalid parser state") } - return false } // Parse the production: diff --git a/vendor/gopkg.in/yaml.v2/resolve.go b/vendor/gopkg.in/yaml.v2/resolve.go index 93a8632..232313c 100644 --- a/vendor/gopkg.in/yaml.v2/resolve.go +++ b/vendor/gopkg.in/yaml.v2/resolve.go @@ -3,6 +3,7 @@ package yaml import ( "encoding/base64" "math" + "regexp" "strconv" "strings" "unicode/utf8" @@ -80,6 +81,8 @@ func resolvableTag(tag string) bool { return false } +var yamlStyleFloat = regexp.MustCompile(`^[-+]?[0-9]*\.?[0-9]+([eE][-+][0-9]+)?$`) + func resolve(tag string, in string) (rtag string, out interface{}) { if !resolvableTag(tag) { return tag, in @@ -135,9 +138,11 @@ func resolve(tag string, in string) (rtag string, out interface{}) { if err == nil { return yaml_INT_TAG, uintv } - floatv, err := strconv.ParseFloat(plain, 64) - if err == nil { - return yaml_FLOAT_TAG, floatv + if yamlStyleFloat.MatchString(plain) { + floatv, err := strconv.ParseFloat(plain, 64) + if err == nil { + return yaml_FLOAT_TAG, floatv + } } if strings.HasPrefix(plain, "0b") { intv, err := strconv.ParseInt(plain[2:], 2, 64) diff --git a/vendor/gopkg.in/yaml.v2/scannerc.go b/vendor/gopkg.in/yaml.v2/scannerc.go index 2580800..0744844 100644 --- a/vendor/gopkg.in/yaml.v2/scannerc.go +++ b/vendor/gopkg.in/yaml.v2/scannerc.go @@ -9,7 +9,7 @@ import ( // ************ // // The following notes assume that you are familiar with the YAML specification -// (http://yaml.org/spec/cvs/current.html). We mostly follow it, although in +// (http://yaml.org/spec/1.2/spec.html). We mostly follow it, although in // some cases we are less restrictive that it requires. // // The process of transforming a YAML stream into a sequence of events is @@ -611,7 +611,7 @@ func yaml_parser_set_scanner_tag_error(parser *yaml_parser_t, directive bool, co if directive { context = "while parsing a %TAG directive" } - return yaml_parser_set_scanner_error(parser, context, context_mark, "did not find URI escaped octet") + return yaml_parser_set_scanner_error(parser, context, context_mark, problem) } func trace(args ...interface{}) func() { @@ -1944,7 +1944,7 @@ func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_ma } else { // It's either the '!' tag or not really a tag handle. If it's a %TAG // directive, it's an error. If it's a tag token, it must be a part of URI. - if directive && !(s[0] == '!' && s[1] == 0) { + if directive && string(s) != "!" { yaml_parser_set_scanner_tag_error(parser, directive, start_mark, "did not find expected '!'") return false @@ -1959,6 +1959,7 @@ func yaml_parser_scan_tag_handle(parser *yaml_parser_t, directive bool, start_ma func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte, start_mark yaml_mark_t, uri *[]byte) bool { //size_t length = head ? strlen((char *)head) : 0 var s []byte + hasTag := len(head) > 0 // Copy the head if needed. // @@ -2000,10 +2001,10 @@ func yaml_parser_scan_tag_uri(parser *yaml_parser_t, directive bool, head []byte if parser.unread < 1 && !yaml_parser_update_buffer(parser, 1) { return false } + hasTag = true } - // Check if the tag is non-empty. - if len(s) == 0 { + if !hasTag { yaml_parser_set_scanner_tag_error(parser, directive, start_mark, "did not find expected tag URI") return false diff --git a/vendor/gopkg.in/yaml.v2/suite_test.go b/vendor/gopkg.in/yaml.v2/suite_test.go new file mode 100644 index 0000000..c5cf1ed --- /dev/null +++ b/vendor/gopkg.in/yaml.v2/suite_test.go @@ -0,0 +1,12 @@ +package yaml_test + +import ( + . "gopkg.in/check.v1" + "testing" +) + +func Test(t *testing.T) { TestingT(t) } + +type S struct{} + +var _ = Suite(&S{}) diff --git a/vendor/gopkg.in/yaml.v2/yaml.go b/vendor/gopkg.in/yaml.v2/yaml.go index 36d6b88..bf18884 100644 --- a/vendor/gopkg.in/yaml.v2/yaml.go +++ b/vendor/gopkg.in/yaml.v2/yaml.go @@ -77,8 +77,19 @@ type Marshaler interface { // supported tag options. // func Unmarshal(in []byte, out interface{}) (err error) { + return unmarshal(in, out, false) +} + +// UnmarshalStrict is like Unmarshal except that any fields that are found +// in the data that do not have corresponding struct members will result in +// an error. +func UnmarshalStrict(in []byte, out interface{}) (err error) { + return unmarshal(in, out, true) +} + +func unmarshal(in []byte, out interface{}, strict bool) (err error) { defer handleErr(&err) - d := newDecoder() + d := newDecoder(strict) p := newParser(in) defer p.destroy() node := p.parse() diff --git a/vendor/gopkg.in/yaml.v2/yamlh.go b/vendor/gopkg.in/yaml.v2/yamlh.go index d60a6b6..3caeca0 100644 --- a/vendor/gopkg.in/yaml.v2/yamlh.go +++ b/vendor/gopkg.in/yaml.v2/yamlh.go @@ -508,7 +508,7 @@ type yaml_parser_t struct { problem string // Error description. - // The byte about which the problem occured. + // The byte about which the problem occurred. problem_offset int problem_value int problem_mark yaml_mark_t

    N2P(-I-4+nOY$C(sL!_Vopi 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 bwjTt>&Pf_D=PPQP_wB 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%0AkKJ}Qe_wZ0Yn`7_1 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

  3. kPAxvb%m+^N~@dmi@RZ1E|(cKaX@|A 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

    hgbg_B2-iTVPq6@#pFRNNex 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

  4. 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�|C!v3=InejLpsl^xERknuqc-|frOBT?*> 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 ~6vi~+I^MofYJsqIH{V^@x{xLxdDqiq4g_b@ zNRCAF8dOICxo(Ka*bg4(<~7U{D5y|RBlIJb965;vHcg-MI(&KI{g;p*IOeFF0-L7A z%JqkOgCDcEpaYX>5!^v7RC2R(nR(Yu9{E9=xH85ZZ+pucA*VvJ3Midh9NzK`SE(|n zQWJp4Q)PtW;%%ZJmF%cx89J?4p_?s9em?&^ z!8rP{>Bmc;&+!0@^#E8V!Gr@Qkbwda1PwE5xdV8N+|JZ`}%cn9{rzVg*>t+wHvSbrV%~3PwcL0Xsj4WQ(wTB93L9A6RT`ePMN}FUnC~PNtO_>iO8zc;cDk!b!4%MT(-~CAw0P zS}824Vue1sxr$Omq1gl?NUgnFeeL?(5l7!X51$`k8u3r=a?4ueR~1&x*5y||{&%D1 zNA6JkuiPk&@dI7ca|FH^Xp=q8>*6spYUZ7?P?o3zwHC`wzFcTQkW_ks^(*TiR~_hj z3vB=kXjJ;VR!5Hsk@h?*+0=y(GU3gYtGhe-!lCQ9t=-hxlMvc!xvOgJveVbo$iTOS zJ0+}U^cTn0z#aW=Jb0Ca=Hc^A&b>0a9d{IxWOBR@x|mfN9&jZp*3)d{I}(Rpno(_n(yN2PFO18?Cf{+|fDThjY7hE`}-Zt&;A zyXH&cL^32vol()zj7N+xxkvdKkDuz0$0by1#^VTUogokH5ngJm`y|0YY>U2;8(exd z8w~kvxqL#*(&}lEPe_%P(q=sV`gZdRPZl7e$P_akkx!dxihjDcaZcR_u`fL89L5qE zTGUvoE7EC=TAqt`wfShH{H>@|d5rtDJKrHi>Yg9Eg}z`VEVB0=5%lh6Ro1sNJkGQ1 z$pQv%b^*!EB}p~{>mYrVPUV_)DYIcE{%2pP8v-feZ_jcf9zyhP3<$zd@uP3_d#NbT zq(Lz32ZQB~?4O_3YdEKPQ`SRu6W$TNWJ)8U5-Zj4AaPU%yGfAp7H9Qr%Nkf^Xjw^V9MGCXaJxWCOM2 z=Hsc%{njO!A9bo7T66R}Zdf}oV~d+Teix5ShU;Fc+2eS$Oa-JlKIj!GZX5f_#4@*- z>=zN>ogRydaP+`HupxmUrQoF7BpvkAy(EO)_mdI}b6#sV2~svzB#-7_EuxB>y`FTb zdgjg8V*4O5FZt-bCo(UYjr-arSfs&;)`P-RwA}zTHUf=)x^If^LA2{W@Z%;=x~Y`n zVPy~{DKW;zm;WYti|i6FpQM6-KfX`;e>y_W&!~%BI})Mg%JI8pOc={ zU))QDV&IgiKKYWD_;DQY6fMX!lY#JZ$n0 zC?G$=lXFK3_5{^7??RezAfye@)swNX=G5FHx4FL9Dk4a2xgvz{>`L2~K0zK!|Ao&? zcS2GulYPVHK7$(%$R^>tA0S5x5Z=14PT#s5+tjz|8w&O9!7A4Iw$it|+#gMl0Qz-S zrTQF1bm$=%a>j74Z=Y|@2{-@I^z8{h%IjOpzg>O1dfCqFTUV;|?a#jJ@Rb5ZUf+U> z3PTvQ9j5KO(<0f|2(OsxBS~d0NrNw<)0!G-AFq&L(lxx#e$TRQ$ew3WHVx8X<>rbw zz>1h_#FqUt(<8&Z-u&y9_#WZ2UD&WE@WO1^y#HL^32MEOWiz&#x&1w%qe|wRHU&goP)0Qxm|7u&sxUXtQb}XN?S1K!m zqg?iW1n&h9fJXp@$2~&7Tu8#4Z=suf{{-X8{CTe{U2vpR?N8t1)v~`r15WvL7(oVe z>>_n`k&VtogC49SUwqckh8gb;V)|7~pMqg6w^a@J4Y!nv)nM0V0#=zB>Q2n91%dZ^ zbLN)$n{Qt#=8Wof`>hO>+D*6-zsv)hls}WUV!(N$ww8>uAa0+t*^->?n7XRdoD#<* zgeuPD3IbAB2d5O#75k1|_EHJg^NLO=dbVox>(d{Ti(60D)5}iGozWT;f6O35d6>bj zc!lj`q7G&~?qz~cz7AFZF$WgeRR=oFJpx&QI>4=!U(=$>NmoyQQ%Ckp^*0mD>r^z` z(G;Ij{2A~=xNdTjV{?aYTL41|XJK$u)vFRLmSzoBoy*Os9DcX_Mu{Lo9nwN+=9wwW z^@e6Y@i2XAA`|-&$x^|&LzQ%tB|Q^lTG~!vV;>t=VS0g{(&r)tPp!A9h*p^ct5fMYh^Z>=2hNscbV{wxslFEuU$HZF6&KVCUWEx}%hi zPg6-lYpo9H20$|*mq|N8b}k8Kw@_Usw(9%VDAxPM+n+N4&TLWB%XaLOffyc*aKi_@ss^6u;`g zU+Uz70FZu@0C@W{*O3koh=}f|-z2L4VxQN#;>Zs>Ks}QqWt&efZ`-O%3la_3wOOckw>JZO~Af>io=E}4trSZ(%u^euPGu|+i_3ZU0&VlrQ> zDcCfabVNY3&Fwdh`65b>q_lUB*tAFUjO0mt-qL9RoLXDdvLLo$FBw00b}xKeoe5c` zRu2&Fa;zh0sEJGvrd$=v$wR3gj4gODXlRoKWlmSaBs7B|^G?L_=e|NDTPY@(qrwq_ zZj-m9V`VBp0G=b4t6ARGbIs#qiEkjSe!B0rJ9i&O_b8i9`VOOR))hvzE}XGaJ!&K2 zDnrE7ZC8vMT`5ob^wYia>enxSX4n^I)bP5vl1ugxu}4r`wyz(wzx!J`oFz+=T`_9q;n+0PIFXu)XiFVI+(h{wQh39%*GiHdhs76v8Q3*p{=2;F zV1_)2J5^$aMWk24@NdT3J}F>mTfG`xCpLsHCB1FVOC5sgFZrqQ2qq>G$ovV;;tLZr zBzf?ku3{_%!B8Pi)!1OX{Za`wSlQKwP>_JZbU(%3N4p%}l32$nlB+{3YJL zK&gNQjQik@iU%^>bkzZ%9s|IQ6bZ*2qGg6T2tZBB*<6~22gvuhYkENd&mw2sL+p@?$-1 zDx||2itVB5!{Upau(7uuLD|g`jg-5Dr26T;%kJF$nu2@5pkHpd2r1sJ=f3r4Vh>zt z()U3w+1n+3cDf2bH7Qa6{i-RH3~|y9uXRrdN$XF>cw6ha{SD+ z`y`-BTs^cnx*2LW0(*0(E5xJ&{388N-BYD;TS%27AB1f!!j>}&zrO$kvERm)KKL0d zxzM^1K`=?YX@80f~S{IQ4)~EaZY%^mVe9;;G0X*dcbRLu^Xr*0FC|DSK40a>H=SpJquj8>Ijz z3$J!l65m`)W&y%XVG`#smClV@| znpYaX`WI>h-AZ4`F^Ob=BnS_Vr$xnQm{!-}T0v@4eiVZistSfMAO=X|l1&!7kb^r^ z$74ch3WJzHVlr>|NnblqMKcRTQaqS4BwJDsod%UUw{>L`l>AoDVn)!j2cuiVPyE#w zsri=>h<4j6RJPprp_hS*JoKWMI02F?8jdC`arFj>N#|Wm?HF99oj5P=sMb30SmV=* z_zd}`U50&27snc=k2EXsshZq6@Oay6@T?Uxh7Fy*!o$d}k&ixzS|v7*KUyS~h9YR@ zK4szKSGfLy9*l?R6BSoNPe0!`a_= z?%_53LFYw0y*gR)DNi`qA~9#b^GzFVuF=7Ki!`R+8hIJV zO~ivAQE7b9*+m=_8(+k#rex*2Q(h1kbEar>85^O(z8p|o#y%XdV)2MSNSwqzZkHi@ z=;HX;c%SBmGodeQDlRhV^2Ndxa6CO2 z#ICZ8BDwu9a1~VcJfLFO8~2023m=$IXEeiS65V~|wN2;gH$ISPXx+ST^OgJ^+I%X1 z_nY$B@Q#PwzD3ZmJOrB_f%y**l^}f*VzpIacr1Z(nggo%s2e3PWVr-k&(a+!Cp>+} zlKuIow5`0r2h6uGfJ-D?Y`w+*Xw$kG8`p^Z()YMUdV#;fEF1Km8J0-@4mT7xXR{i? z2rXMH#!g#j3My$ArY4C{-^?CKnN@cD!15YQfZ$U+Gj1}pVch5!ro5t9%{mei+deD7 zjMuy}j@9+V#xPa5i%%m3@F9OdkQl}@j35O(>gB7@(y4&KkAN}DuY z35se00Jd(!*77WX*ip|6O(-Kb3EhN?o18mY>DWM8^lFs=W>kWNA4awx$43c<4KMu% z$%W^lud9=#uDGNXn~BZ8O8!`FiOSj6%JHMZSaJ_o(tx#DR4jQr&#rUbI-Q{S`Fp)> z8T4AFe!;o@J#l$=L%`>%flN(sJ7(gQC!7cV?>!^8d~%V0%dQ+7c$@5qR;jPxDaUt! z(&9lGs#f{gOQh!9^r=KiUq~(6a%`&g)xoKvr>ldp?^TW76rWvT^P1dPT{4F%nV#Y8 zPs{RiIEpVy4aC^_4yRKz%yBuKLPA|Ji96Xh*`lSL!EV$QP5-jdbvbZ;e zL)N?L5Nf4p4--H}hOcyUC?x8=>P9wz8Bob9|b4b|pMv zX>RsI$8OD`+TJ2)6l&+Y=8sA2sg5N)Gn68-9#=N7W1lkFaMkdd144uXS(Q3H1)=FC ze45coiCG}_Q3PbI3|In-DH*RU-Xw%^sLeL=<|zG?9|dCO`pUJ& z+|RTLhMo726avf|xRoHXNlU`rDqLeqtubOotVA2XjVkf(gVn@m61I8d(F1zuG*}ED zevpi0^hSgVXC^Eml{0UXswyRYSf`Gvx2br4vxXc8KKA!JZI&n*0%dR+pCH~LTTU54 z17tLd2tK2iRD|J7w}*RuFXCaaGr;=L2K_a&Cm8beBB@X;_P?JV2|@~QlJ}R1oq46{ z&|@U)EN7qL{vh^O#yTZV2FPKhe48UeV4+L(%viaG3yw{jpQWPqMkPtBuKJ4VbYFXZ zqI9Lo2iQ}Q(dA3Mc0Vl#nrg5XI3cgma^vf(ccK0V`7haC`U@}1D7nR6?a8qXHtblv z7f~*1)}PXF=2?-~Op~Em8Dj9S)sTyFO}HW-<(gv9MG-3>{%2v^?9=Uo>&~HeFWR6- zO2fVX;N+2mTPsF2d{ReEp4&%16`%PtvEYa|QX?4oc_E5JYC!0SJtPIzQ6wsEfE&<{ zU;V6FgV+ zL!+BcBw;HO(NFieDM9^6<>{XJsr0)kwx&48M)@Aga;hb+N}HQH2&I}@3^QMLq*E_! z`%cTAPg0zl%`P_I(P)AHG?(m4n%of-PkCQ5i@3yl<0ERvT{;A)GO=$?HDW&+yYKx= z#7{O{v6=GqgsTvLupP@Ie)U0qv%v~q*=h&-gh>05(zg$6WtMnD9y zaaNEZy~~UX+mq@Qf%{eNE*Qe~G(9L() zvee6i>=)jmcM9N;LUVA;+A18(IM1%J4d~z@3TYA)sELyB*g8j>5;NH+Wi<3E_5-AQ zX4t1L5TgxAaLN9MgUcGEPj=_XFEs;!CuN0jEztn&m#yuQ`qtc4RtzydQ(@4!&0y7% zT6-3^gMA-VR7mQ8+npbiQn7}eTB%CJDf3Yjm19aZxYH5_HK&Txnyb=PLo=~!o3**Z zSy;zYCe@@_OUjIPs`xDjZqmGH}BRZL_7k;AdpSxAGOLV!$ z&Gj?W{P-+;Y#2SD)-7}xE;-Y6gQdoDsT44138NF{)F^e-uI$m0j+s$+eqE>^_7g7I zhb1UE;_PkDBSRS?mo=s^Zpop>Bkh;ucx3m>x5gv;+_cl|x@>C1BX6DI8qf&fJ!02g zB2a?r0#LLFAQO9Mat@T5x~+kd{^3r8GS~_dyH4s2ik)f8>DNzucfa`JqpCBlorcTI zd@d)TG49uHb)ICht9S?xdcxwbW$rS}T|VY6SGh}xyA-+0JHN9G|8ke5^Kg(~WurJB zw=M9G$CWK{&hbyMc;y@egE_~#2AEE|N@mzKmC(XWdBhWlu^jj{Q)!>kMKnkf{d6y( z65UJn+C8*aDk?$%57kxbmJhPbxU7gT+M5y1EveDZPPtvS@;Y9!c?ofdcX5@UQI6KP zhjaF{?l3KD`EECL(M^4H(`YwA@ke*_j`d9^=em4cSyPm3s=IN9S#;l_8-D5m*Xr@` z^I5c<9bj5<4z9k$8~00;YRhA(x1LQcdk3%Zr6L98gNa)(S`zVKtv&}D0YS%m$srqT z_M_e>v`Tc21*5dBZ!M!}0b9@e~P=y6%6iXIyNBL$yKIzkrU{+?$n^-?qDcmhXC3 zQ{S%F*&<=XKej5PU&T_(Q(zta(1a9Emb<=KuCEZ(0@WUc$;~bkcDAfZrB~;t_|QL_ zq-07{!SNPw#wlUeXL$2%PK?vf6612<_Of#GanLy`AEKOZ*Rv~3R~h0Z6kY8{aDs^` z8L5`(AXH$x3@J2(qv+hgUuFWeqeN^lUz(TN^V4=p^k9|BZr6jWgYyj-_c8C!0|%M9 zI;zk(eUniPmZH|SMfEc9Wua~L+@P(jQXFdW z&Oa)&HDhB+h)dt&gKPc@Wlq)mj2G#g$rqnBfei6QySK1=WBY1ClkvqT7d0$fX0%vK z>W1{m3Fj>~aV753${`2WG>{9oFFB|tNDXE_Z~VHikhhBCTxO2rQ5gNg6e zr2kO$*0WW}%c|Cw23Hj=SB9A%(bo}ARHdJ<9&^!^V4+&KhrV!96FcGA4h89(>WepMDXjM@2eifAe)-%i} zLH55muv(7ns`nkRKO>1O$!iW#gtzs5rUM4x1LxS*_4lJ z=x8S_WHXKl{V}tsiWxOE>Bp+xdZr3=RtcR*9HF8HA72adc9VTVCgv)DWDHOdWPH(8 z1CuRV*zTrMF!Q!aux4f&5;KoTFjfb{4*uk@0X3sn#M_01czY{v-2_gvt>qBV1160V zqOfxH1r);Yad`dyZi-V<@TX*^mrIhgP>_DQ?}+YEok{MoXHr}&(xh}kvC>HC_4*zZ zU-Fu_j^7!Zvri)H_#2I8l4?8h^DcBIX%HKDoijsSxvuVhh1jPpv&_)H znGxhZ_T2Y~;LpB>nGObF_z^^DrLcs-RAx!1O31W03>NQxjaId7j<>&!Ui1@a9UD58 zB{H!b)V)MGd0u1J+=SYo__sgtA+$YnttEMvl12IFlvSI| zfm0RU^+cbpiMK~56Sy)dz#m_sxo8abw?BE+Rmj-?Z1h-fOBP_=9i8!dLk{bETpMA1 zR!SHjWw;wQ>Heoo?gifl(VX zslqnK7nO2!JQJao)2J=k{rTh0p5B|g_@ccEKQ=;t?&G;~7@>y`V3}l(@4VH=6g2E` zFqw%RaY3&0mQRZs_WR6EH>}+sw<|C*#W%RrtviUp3BTMqgR4nilM$bbEg}2LU>Bw zYctVKuGur(fes_Hz898^DIf>Vtb`m6{Cchzo)61G1MX6+E4|a?aI0ljFWhlLAvp;9 zE!3oaMmaac+1_?o?vJ`55xCSWWDfU4yRZXa+dMUqOdH6gPFZJHL>{~he@Di?U zGk2PnuCUCar7w9nrK;KUFH`&xH9HgAQo94K&lGnnSthoAM^XpHyGKpCessU4y?{mZ zbT7%HpYA*D&fSYS^iw#hDY}{JZk%k0?mKkD55+P4P3Pi;#g$QCAQJ`%sv!1N`$*tD z^rP3vg;{=s4!1x~Ge|VJC_z$U0!6VR(C%ylAn7x)<1eT7TPN^2<%hWwhKf`1PBTlnQJ7kkQoC8@Otai0o&w5l|G`4N{+ zpNLWUA}q4>P=dmKqd$s@VCZPM5l!r}H_?eA?Z#!8VtzR3FQm0}Dqx>;#0La|eo4sbYgbLHl;wRoc}0+tv%i4B_++r!&n3 zO{!SBEVr#6gETh#gl#~!#M@^W*o<*oS+o2yL$4e&isCIbrr~%BO1dhg_#xYWVQ7Onqdl4Z3Jcpc5Ck}h}hK^MC|TWdtJn?v0uclOTfB_-8b?PyWijE2-cz9>DO+hj0_2fJ2QUr z?hErRuXQ6=Am3u0VsgwpKz78R9W1+=z}?)Pr?;g>Z?ea>PH)3@uM)i#@4+Rz#(79@ z{l#nh>4!x^WOcH{Y5Sf!Q;AFP=1Q3C zORS7$8N{3nWe?NjzB2jUCRLF?wcTm*&gQO>A_H9I z!i&8!>m3kUU_z3DyQHZH-NDh~%*0X-7hE}G6{V`8+?VNtHjsqI; zR4N$rvDD~yF00YRp*et1J$m(JV0#+dLX22f_11=}Wt)$!9==?kTlBeTIpd=7>khGC z!0Xuq?aDl)CwdlYf^icQjHj*$Gxr*a|Mf~p{8O-VE)wo;dW~;xcE;dyBKjE{tsm0& zSY;aDRHZP|w`O`qLN<5n72?|%BG`X-n}DZ3*e{1W$qS`RLq}p4j2qG1?D7!#o}E&4 zkP=J=VbZ!TmFfsoC8dAiq^MOwId$x>9iMrqaxs_!)zqg(usHp>)UtOOK-r)-Q&UA; zy}L8|?fC5Hjg*`OcGB4Be;UPq&KGYQK#Ru|q+XUi7F(>SD7D@;{xgcuu+4o|&I-nb zNE05bYSwSouFNy9w=beo-+j)AiN=CFb9Y+PjJczIbwyeTgM?5}Eyz|WwIMKvc!wGI?)N}1ocNEGZQkRDHhvk%?qF_-Mz+|dP<|YM|cz*Vi zDnTCF?O7cx@5gF~KPybm7vM$jc$W7JqjWM6oEG<&l^sn{V&B%J1Gl?!i z*7K+My#st8w)LP$^#!qAzedg4H7*m|I6j)YJ!Pnqv|4@#`ay$AXw5Ip7I7Y*9dvR%*D0!>#2 zz7T|5ncA|9i2!@VXMV=#srM2CM?o&;P==65>7`2eYhQvfxjI0WrIYi@0R43-J>*F* z+U^pVf-OE%w|(-NLVNI;HucYRiZTH}37^c_Esbu5+6^S&8g+F;wCWUiU;z^W)si2^ zoiK{ALn;j{7 zuF%c)+d@@jf8}HcpXH<_$<&B7(xmfMzzF8Bdf~iQqGX<47QO4IdtnPzb6&!U5^6|| zUWcq*$7&V92vqu5gtT`=-~Qw z3|ib}H+Olm8LkU3q z-=}+sbA$=W8Y9BR8pIybuixpYvtB%700jFGLGiQ8ks_=Og|Nrpkr+~dU-vlP7j zX91j|O;Ht2x>yy6m~ghL2#Vi|I!R5g5ER_FEjOlpE~n$2)tD0`O*ug_Rr~yi6*YIL zm%kC3@d#cJfj+yn)kmR9B!Q4tw6@SQ0f~9LIH89%hM8v3{HSYh(&De9GhC`O#k2H; zeNZ7omNVCknWMHhOUC)x^rS%uHiIgR+_t>NEY&2&X}_3AUd+JOMGg?Doz~D%}`rKoJ(it3Ef)9IdfN1R*il#K2xVARF8PFCcU<1 z#QK`_<9>=t&G7YAMX%S4eknfl2~t?n-$Y6ORx{#{HR)HX-g>@j*?Y&<4F6+I(c?Px zP(jd|(Qn0P2A1XN_)N`ZtxmsDGvfVf&@r{@t-n+;W3FcS`!z+cXiAehvKkJXYS~hx z)&_}gM8k*gnE+L8@7+WliIPey)dg)uh03S#Nd;@GNv}YyW^5=jrT2|?y~jzpk3N}GyBFjrF<25=&q9*$@iwt@z zDH!(fWhz(FDjJ?}HZB-Ugh?yU{4_beGZYa+tdu7G;Xe-msqRs{SxD$cuEtv!rx?&R8 zwJ@|EEVUkUdy97$tO@=1jgn3mGEdL-b%QLp_WLAzg5t|EPN0Oh3@dP0{ z*6ueK+)Ie)C;gSmsai6WMjyBz>hE*7gpU$xIho3psoWmgyjkFfV|>@7f`xv_AlICQ z%(-_H^n8!bSgDSdCH$WT@7xaFzo2K5TXRTLAK=^$yVuIXFX8%?H|o*UAPUFUZN@4rQDn17E=Zt>8X`SO-_9$fj!r#55%am~r~3u&HqU8fTB2_e zb#(cMdXY-4NF_%aX8z^izuEJw{5j)vPZ#EAwT?s5vET6oF5xcUK#DAr6v@jE^WRRC z7Hi!|V~n}Qh(hbNDP{@Ra(EK+P9AN>);2R3eFBoIgTY71B1mbI{Fy)Djoo}(nXzH% zMtQ}-;Js35IVffio4GR$b7!J4mADwu(v(V%Zr65btqu{YBIvqUdT z&GJ@@65+~EN|%}1@s>BJRX(&%t&rbBjS3N@vb#zPxXIV$AFjtLz;oq?$eOLg_7AIW zGKF>f`Ow&pUDPn|5ci?C!__yf8$t6V*av#6l#uMCEh5^<^}?F<2yOgun;nV0#E-^O z@Mo8v=@mB2TA7r{eC#5R_MCq#XR(ZA;c5Fj6ByH9ItqM)P+8m{9rS-0hBx{#r$)|l z`Uuu(2xbynUuhFma?k|prX9=yQEeaW@Pw~}Tpb^j$7e9E%#TNWg_y^-#v`CxqgNZJ z@_G|eE0Ghh&QOJKBF^4m4+^$JTq5mg6sUIr4o+Wy!?7=*YX=GlhV1!030mckTy)(G ztx#q_auqXx&B~Nq#oHf7iWa&=A_#Hq2UO6t5&(2#LRC&x1r8a^vM6ljQw5bJWy$<+ zTiI~K&bN|^1*7X6KSDsy_z?oSrFTOk>};P)@UR_9k+SO?p@JPSA!>ElnQQFFS|R|* zM=BtY$PV$NF&pyz8x74k>W`NCNL=qQ>ZB3#6xM0oPXWP@o;ii6E7ylSfkb9$p0 zLHy3pI;mdr*T;7odL~grqNx& zLf_b&Rl6$VtnzS~_5py`O4M4q%!snd*`o-jIjRW-EJn3j>G_iU){9O=kv5oO&4?VUcGC zNSnhZ&m98h9ha(|?7&OjOgvZmYe3zLw|(AG++r&ePX#zPN4r z`kHl@IP1gE*AWfdq^}3|{;$$kL)z2VS1m~K|AoF5U2XKW*e=7C=<@%8zDm#99(|er zw@|#*YyU(^EQuet#j19-7}*t(Ob^>AE*qHI!V7Oo5(y1-mUn#7S!|~`GQMc38Isyj z@sHw}ijH&2KJRx`WZ1J{SH-n66x@w1wabv->HzBh^ylTThb0vJmgD5l$r;oZYu5<~bk0PwlWFDTnYu>^b&>%Ky{X<_)Y zkGfhadls(pMa37nd7(QDb$G;==-Wea2=cC$-Sv_mYg}+}e>ZvEm_L1wledAps<$N- zoqk#_M*{I6jb-t=mAr7D(&#urIf74P*wyS;YAEriUwhQG?N)#~zy9se+|0-Q@>}RA zNT{EBL&1&czOLZDKDrNL=bY&f+{h~l(k5LIq#{u!x2R1_Ziyxn8m8}=7-9O@y#Wq&G(z$I@dh3r&hX|5YTL76$-w9rpbZx;Q^9Wr~2eh-6kLYzVInG=1z zUn#72-Ztvp{wCnL4$7&{y#br* z-!`H7!E21+aCyQ-ujz8H=aEj}J~DgU)Kz08td$ZKi=|R(#cQ@3kt|YM^vs38qEbH4 zV4p)9Qt7I>m9{&@4cFThP3IuSMv{e0~u|;*9(EGiX*N< ze!2ys8xJxez*Mo=gh!)=b2BH{Ud@Ug_2J#mTN+8p){hkM?%JH_VNk-FPm9*6MM$d+ zcHKVKb_!ciiYSt?j~%8+F;JJ%o3QtW?HYTLGi?9S;th{*qYT@;L2GXRHhRv(veVqr zdIa8zM0Yl+*@Wz0^JQ;f1;z7Yii;~C`N17tO2l z*GO<=*nFl{+dH^T0GXtSP`QH5XqIzC^r}=)J$f()gG}oIlB#n&Bu-#y;QFZ&XW~J| z=I6wIS<3-moF-Z*r+F9_Zh)t;B6E z9oxEI0+jCzj$hNk8#WYSTfmD4`?tmMYrd_wAf{4^x=~V`9icBSCi=|8PL2KhT}WDA z*+qlA!Ex^>SX)<}IR#&1Vo42i!e+l}3?4)yjH~;7Tfl+*B1b;U6KctAeRT-tA7}c2}i0GsQRhnZ)R^};I zr&m;`A5D#39S@cQUUlX~yswWKbh`paO?o*14jtFQPK)ZRjijkbuVcH8(s3QEq_XZ3 z3%i80WUTs--jbK>_pxAZw|XHZjh0lW5FaBHO96v8KKVUA>AR}6o9#c=R0n6jS2Ow# z(+{prYhf@#M5UC5-!#5cc%ik6&Q^qij=E+bW@FE|n)I_hzjw^&Edf1L51^k_`&X*pJdXy3UYs|7qPP+N!L4?DlyA;NgDkQG;7Q<5gm5r(9Ed8pUIzS zeU^PWrG))?;xixC!-#dM5l?gWTeR!(@TXJ3KBHMC$Yw12S?WkZHLJ4`i1EdPN24>o z`?mIJ*t4u*SyzdPEd41B?;6}I>SO^YwTv~&koH7#6fo~OTBp~(DvHW8_5JnCs51`K zwB#!j+74urm@j=i5+}kO$GIs22&tvuk=;^TR#&J0UY%xVqPOC~XOz5kGke_ZE_RDA zDymx6J(Oz|H!qgf?6yYt1Gz7$*=-s3V+ZjL=6kOyy*`>W&W1H?@TFafXWb`?YVCTj zdNdE;(?ez=0g8!C`+PdydKq<82m4%gYI@w0C8wsVpDZ1h8TNy+(*~Rxls#EJqN`@a zvYPboax+QRzy~L^KR0E!lhb=XnLS=3LzozlGbUQK#$24hN|(8qQ#fo_r?Hbp7{X5~ zl_7(q0dkED+4rGv{1j0aW$mzZ@$s%e$k3y8Sv2>9WEtBjw&=`LS$mxrq0 z#7p5s=XmA$F&J02!1-IBEe2CFHcGf@GKQG}_*-^`#=7l2*7+RmI{>1G3J0}nKFs6; zs8G8PnFYg!o*{*)h}l_5NkYEiWQ4aB6(~)pS218a6sA*?L9_(->g#kDoYkEgy*57c zN1SN*PlcEx95%zIC&N+izGSM> z+jfwr#Rj6t6)C>{l-B>s;{t>1fzlPf=6fdWqD5gjyX)4=oZS`KXl;;j6k^@e(VrkK z6{O*qE1Zt*;(@brO52#RN+Q0O=zBil#I>(m=b5Z27xw7_`CXdl@*gGDp^CJ{ZL)^4 zR}1o6Tc1BpUh3(3N8R$6g&ZS=M0jMS>)HxqTxCTXMN=$?blfF-8y6)0j<6(Ojuc6^ zwe^(=Gq}%G8(XYYYG~Vf5QO)eNunRJ_Vp8;t8Fd|{peg4Pq#Bxt|OJX+Dnw2hUIIJ zz5a)R&R*Bop1{b}S_i?;w+w{@A)xEkwnTVktHUEGB;qPOHev=qyP5*WATU_fEWP0D z?gFc*^<`c!bwPk4HdPi+fP5(1yl)%D^vVn&PFhndHYrTwvb+Pc&VllFduvw$x(H&k zmaAL(l7;%nC^c z6b}@pIK2@C-#hJl1oHxWa@{IqHj42!StesmzX+QSR&VMjB2bUoJ%)@)qo`MRgg~Ib z?NJ8d^UbjufId3QCHsu##T|Nu3D6~%+hw?W`nbD%)LkZxL!2(w$VxwXiWesRWlMZM z;Y4aeG=WGRsw*PZu25LHo-@g0d{M^(G_dVa`kOYTe0!1h=K3peWLajcR7uRynB~Sh zTHj7idx8c22udbw{?r7ed1VNichbOY6I@WF z9;PnSWzh&tGzoE`U*?agoU2WQqfO7$-!-Ejj|UGS8LQLhmo=(76`x{Ck)xqa)huPp zPo0}Q*$Yb&w1CP~&~Jd|v|JJ=VcLpJ`Q}6Ruz>*3D=Zd3cWIG0$5+Az@BY^{HUbWNO)qgH>cxZagSBXZJ+gAm(&E_Zu!A?TbRHBbw*Xk;V)LY+*B*&0>zpC*nW%^BN8`R`%`OvB=tPeO8p6tydGDbM()A* zP10S7@Zs;O{5JQtwX0h&CsSC;xwDX|d9Fim(K>ZOXju0%Yrx9{YbWA+p=ZTaU6PWO zPH0j+$WR=TcXXjt1c;+6g5shDKB!vquSgA2ez%n`TLVRW>#`2kf(tc3ZZ%T^byYj7 zu~c_}OC{kQ`Q6E*fwNgAK(JqH4O@L=$BxLC|5}LszZ$&(d^o`yL*+dWL|>>(Un+B7u2FgQQF)Da z106Ss2dC!8ZNjIH2A%ife>@JI{oziLTH&AfQ|9wwY-M-xk0p~a0^L#uHxwmiCJ$3dvb!xept^7{P!}Z1o z`?o$mSc4Yy0!+w(2g#R%-Sz|yd;Wo4*k)t!cbui)V9WJqM>|{OsJu|!Bhrg~;OXFsMY^ zkR7{_7chElQ1tfrp?#W69~jpPA%@kgwp+xq&+KD#nKbN7u1T4aT3q{+j z_-6pYOhva>+ffF{=1>Og!ZXy~FK-gaVGMPeDg`0!(M|K*peg%wtT$$0e!lcEH&&Am zz@ToUIKEjrt>XrEd70{rPXC$jJatZvB%vl*v2H!PQKL(;NI^81Mbn|giNA3}#XqbxAKVw_L^q2J{?3YN%2Iuv-7 zWF*HP5^hgAbyP0n4;>bz#dwgBkd1P_&G?8f@gMJnsk~2*4Pl!Qzl=@6dJJILkwYZ6 zKg*66A&mO9=a+J@&jJ+iAHgluw*W_X13DeoH}|9hx#X`I8bCk`P(7Z(cz|6w3T6_H zSnpMvwJ5;429{K_1W17`V0`>BSSh;%HdLkGaO906ETx; zW5I&m#a~syEp=t5q1D;}uulf=@*DtNM*-iU*5;5&YS z*#HayNQ+`}0|T0v^D^Bz^fg0m>8@D-KR|A}!ReoK1PCgE8+8e6Bsi=e(Gur6c{k7N z9zP@)vnGy3iA7Wg2Ym?q6OJFH zkD>sm3!*6MZ+Qd_ZP87Fm%to}V?D_oza3)(q+l@_5N%9+g|8IU@BspV#nLbiP53E( z8pjXcUn*UllMiqFPd!FR@uzF_;NVrhRW5 z);u5F1s>ePcL29y1P3I<+QEK0_ptVRABa0IgY(bx4dUnq`GqAaX|{NBLvqb>assQn zmx#QYlivMYOSGjhgKko!Ku6Kzo^u?>TAl(B@0XgKHUCdaU&yH4^Bf2 z2vxP|qzUeD6Zus4t>GzacL{C(dyY!DmhsgLYk=J1?Wy>-ZXjqiS;A+a$Y0_i*%~5T!-4E0vv|_`uyLXKljOmok)4KB|2iU6Kb)Ek2UjlFC3=@6=qSbS zBKOqHB78TkC{_w%i{umz`SIGT9d`;6k5B8>2=1ZRj*gDslr=hf=BDgIw_wxoShu-d zPRJO6uP5~>jJDfEmIw#XM3!k{CO8s*MY_BKp6w`sxindvW*t0!6*8if;WYrgy zyA?(Y+7?9{ilXa^q94Q`guau~2BB1kB214gz;B&UmZv7G3@gc`2?JT?tb~`6SvhV0&Wp zdQoIYe+2?b)Z$-)f4-j_-4I$CrQu3=XQCb2L-$>^tQLy?V~`d&`<>|E{y&PE|Yvsquwq?J*Wm=($#9Z;cwOSG1@kvG|4=PB-3#?V*yqfJF!EY z*wieiwh1=a3lEB7?F*kPKC$qWVdF-GM-N$A*$eh}oY>#-BPv6fb~}!?cUtnKWI-J! zE~K!>A}O^^T|%>7CC2W^pLr_%jDK~-j{&b0Mz@;D%ECUs7Gub`D@9s;fGbqKWboh+@D9Y;so9U`B& zqB1JsjoyGmWt1KT!IjvXx;&wyFf9c`3L4Z>(r+cXLR9!ZF(6#otwjM)G3Yc!FWtaz z`DQ%^T!WSs$6PRLt&gqq?v%O-qfp6&BB(ZBhdJO5JAE0czMsX)*2S1bTo~_7-@F?O;J&$; zk!cG?zvDbbJ3$hI|z(_Ca~5UN01}VWd4uo2x=j z2cBmVM+Eq@M%z8oG|NN9SOYU=G5p8aahLT}2)be{xY`fs#)4DZbN(k(|0$7og9Cmv zi>~nH58&6llm5NLcGAI32Qc+w#s@g!vf&|&@Z4_C;eyrfh-V0a9%d6^Cxex)XWHOO z2CGFFhoN$*um?*cg)Lt2^EDQ|>xf&24Gw}IshWhh+*X0EhH3n;+FWr0CgQ-MW-vsV zj9M?Kprdz#NBuxjp}T6N(sshacqW5p=td)J@=G(2%qqFZN4T`Ufs_4;e0;8-N9PC{ z7}p4bwp&1MP%)9(IO*+7DV>f(_0c*m}Ufd$V*9b54Dwj9FeNY zD!bY$e@xpY{6Qa=Z8h3ZccZw(LKF)8vvawr%4fJA^n5qaQ%sFBk@KlaH< zn^w4Oik#m3&NHoQFs`|2-E*=hr&|W3%IW+EMNVhqqUA&gEy(FPYn?Fia(0elTI-FR zM^{@a)N66u9Vi z1fM!@&a+F$c|7}TZYs|PJs>>W4;RfdLTG_!_0~L6c(#C*q1*COk|8CwvX5s{HCg2_ zTjkI3Y{ecVmAbw7^E94ujxr;D0aHV6;Q8r>d&55Rajy?*#Db4yq;PNI6Q0IJ&=)o5 z-oTSQ?)BX_m3u$kC*0eJi{T!31vGc&BTs3`Gb~_ba*x*}YkJzse(t4K*KudwAk zTr^wwY71=1vt*X{OGkk^*0y zN~eNw2fWIvAyIf=*RdSL3kXIqhUASZ8uJ|(;7!Rt`KTYU#@2*YU-c;jLdi&Y(Otrc$8ph|AcPh;(aB<- z!in{U6Y^4$%ulfDK0Okas>v$P+bTQa1j^S_?oo+^#~e#7Vb^oyCuz=;mc&6`JfeG_ zf@;ISW$*YHc%U#aZ)*wzzxyTG`!Mus#=s|wEJ48s!l?|byi*u>87`*xp&d5weO8`e zK!AZ&jCacE&KIyUdmmnt+?j7H`&3D)CaYX&tH6}>P(nxPoaIW1&{G-MR!AiSf0vL( zbJrV6RFl>8Cg%|$@g_w=k4fmndOEQykgPz$aMl5W`!&CC?eL7tIKMgoUwhnSS6BDh zf}>swYk%z=s(TS?GH7iblI+^I%$4N_%%ByE-6efX34e3!fh+&X*u&nt0q51EZ*f?a z$vXAaL+QSSuM>POulUZ}iPRe7TPg|G)lDS5Guue|mQ97)x0tLAq>usnn(M`Fql{2} z7B&73QHZl}G5s!C(_A4ITcb=-h*DN&zsqY<+A&+%rw~##S*6TY*^xrv`>9tO(^$C5 zXByMMf>^NImK4)CX)IZ%hiomf;8v^}HooQh-i4@}^ev~~E}S?C7vp7H=EP&xx>7h1 z4rop^q;jIhR`zj1swO#cwym-wPNbSfSushaX>3@N?pti43d%I7qrX>27oMT+DPXV8 zg(bE_hA)y-0&*nclQQ6w@DYaJ7~0uqKl6thm^;-7V~@9d!Z=KXG4q!cVSLcl6Gk<- z(_9}rI-W58vq!2h-k2xCSb>Xi^yF`Iwd`|zOMYs-5eA#}spZdB|9!%cs!3tIZL9n_ zVQk#p3S-;{X~Iy)6wBo4Bl^;A4@~jw^_6dCF@3$ItQWeRT~+NyhuB9Pmw%vc#o`v= zjZ5_C8Hut|rqQz1fBvQq={6ZOX32i1H)-{yg?FXAq|4U0JTRdMiZ}5-ncOqCB>HlKjNuKBm}tbv^-vA3zRp^QcU6Y zZk$Ml;-JH~UblLHV#p5b)e3$X1D<1b&&oi4^yDt)o4Pg+{6mCu{(&{H#wu9Lf_GDU zK38`ET4IT}I3S&0lMikI9+pL?!t9X>a};4NwlGuiYYq=Mj$$euFv{*{B+9Q z0un+4_{Jo7OpU7VN3xeNj)HQ<{YQC7I{u}>nQ0PPUs5dJRJ|L^waEb z@<_-ET%G{ifqnuP$jS|74b-*(r47Ej5%vNOLyJM5%RwmFtCs(~K@bQ70UT!kkU!k^Kn<7duZo0`<;Sm&|r&HSlJJ*|Fe zQa23vzDaG}{B@HWaVeffoXLXzQY1i)1nJ6AQkW(4m|osi@%hvg|X9fI0z%fffbrnCa`2 z(DwF2!?YiuU2dSQmo#1QnSG^)B($!8wjtjT)DpCJkMiNRi$LpRpjByTckSXq>jr2y zw+3yx9~!3Cf!jOZXiBp+w0rmTpmhhd5v@VX_d^Q_w0Z+=p=7y(C0#vedji^)!L3mG z&5=Gzy9uUKcEF$gO=fk_7|aaw1JkTp`A3!gLVL*y?l5pe0!?E$2Uw?L#8l5 zp>%;veFg^~;6dXjPA0YnZG3ZRPa0_X8rtLm9<+l1t#514x;KY*o`JSXGWo%qlDG{7 zwD%5ch0?~MK1#JryBTO@8rt2xJlqgq1!lAc?J7SsuBML#U;A3~Eki@gp6o#z1ZYEA zgLZ%)T2P=}X`s#HC=4H?YVSci7|;@jwnFK;BYc#07ijw%Xn7i1tiXeI2%z2B8niin zXmpUV;3r>cN*g&`cY{wP_3b!7JE1jb$M~V`DbQ{(&~!Q^_~um}ZX*FLvo&Zx5AjjD zhd>)>a`chLmM?>q>$%A$Zpq<|uv=TowErkaR zv|J7CgrpQs2eiMm2Cb7Hn%0n04YUSH%m&X*YRGs%TX}FRlrG8l@r}J-EZEUNE78!# zBz-R?YXeg~Xm)(yxJB#%ix41Q=7**|(hFZ`zP-=T)eUYqM)=0K2Z2)HnKyAxnj5(4 z3O+S`F>Oe_dk3Qw2_6C1i3UG^w+OghYM@;vfpFk`JjCmp#`<3G!Pjp|fBju~{UGyt zH~so+`t|-Y@oieqUVlPfue=y^ z2lcB%o4xw+?P+v(mRBqFs|e8oZSY`4VAiK>I~qE^zjncX;HSiAq%06`wUF*5L7d zDUbj2DjrYA<402-e}%{KL5!%~;8Q6j|7OV=SxXQsODTDZCD*cqf^!2MhLH^nVCSI( z4?g@i5keWn2wAh_8otvd`Oc5h+p%OkOXe|$uc6)5)emV}cfN9=7&4q(Y* znJyL{+}zKW?8cJfWXVXeJW~4WGL$GDZ>cdj#pE`#)H;?_CreK1W}z)-Nlvolr-8QQ zVU|3x*@O0|ct*A}hb2z3WVUz`mP}^JdY)IQG1yz;VwRlAlB#6M+tL%WzfAS3gQ^qfokH^?0%&|}o$7dLro)*R~0DUe#Mr+(tl7VCZ zhKP2jE1rn|5fzsG4}7l{UwKqDXe@Cz2VuF+kfD_?IMKd|MgLWMu#TN*Z`YREb7J64 zon}P*?q|OC4Si+Em{J~E+^jqm-?1(8XBeSiDPcp!fY73hnHbL=b{TUd936u_7?4V0 zN%B%2d!Fj{83usri~zWFo5!VR$fYOjXf|zpIeDks|7FMRAFSJ7+wM=ae-7wR$q$Iw z>B1zR#!O=32_^yz<#{-h2c4503UUC6uqs0>>TP>fxIN@Cm}`){!DwO=OOl^HzMg@% zfddpGHHToAe9E^ICP69jVbu344jHr(M*|GNab3tT4|%(CkI%w(!huujpJ z(DWNMz9qyLQ5FAan+nxevk34?sW<0y(JHhgKa?HG3hl~PyrV+`3*R%AEF*9-knbT8 zB)e!OF#+7v4?o#784AE5Ne(f24jPL=W63gg)b65lU$+6~CrWoV4ebvZ8mhlS(nWpa z7jKsyds6yHywNCS+xktmB0&^AWG+l%>dL@{aXc zST2iH+U#L`rc3^i@-w7Le|53tRU0L-=;CbcEW}Z0`hA zjJuD}{=~hQ-f$AyNZjN3`4{Quk%dpy#~rl?28e0zM0;&_)Sf?4YOMA!(#7Sm6_WMK zhbSf47qK^v+{6yh=}-0jF0?z+1pW`L#FzB?rp{KR(HEM2A0eilParWysQxAvq5TrJ zKZSRtPLy4XNpiy~I2i@DW{2=y)v60{m!p2inP)5z&V==ne)wl-ft)EZt6w$2!ja6B zt4+Z_Z5)gJ{=)>wsupJqs9r*ndi6ihh={n7X~2knq?Es+ed8sfC$@`9kzZ)~ZEU5b z7%EgR2mn)w6D~#k|Kyowo-h9iZ7s5@zYie9f)BjUkyK@Wj5m&-&PWn|GZ^`ggFBg( zC39f%TDOEJ!Yen}TWYf-KKMBeH9N6f9TyY_`Tg&pYLuahL0PDt{+?8wYp6=2=YJzF z_26+@O0XHRJ+ryPNGZnMW1y>wa;hc=ZK53?ER;?JyNYy2&`e$vx(H?6NZFs3*W~e# zRX%$oWU=_i*ugkzRD^n1&`Q@eVt>>&?Qkz<9$qBs;I zeo#HA&IlKbso_VMKmLDgLn^0A+l20M?D^z2mbL~q%NW*NZBVd@1*Fy&*{rC%*0t^je80E8yS% zzm2bFJ=#3Jp7{%S)>3?}&pJ+v58Qy7%H=l58VodRSYR%qfJF!vqD~m!t9g^FREl#E z5}aW|Kqr?s5tL`gf|GSQSF!ZrWAtg>`5!p71JK~At))59uKnmpP>BZF=}8+WylG2h z@R+4GnYbi7F;_kPGiVx^68bckcWC-uRH3x^2OSL)FraU*`*rdbRDnJWaI;w54L)8s z02LUtoOQq#P52PwDB=g_APg85jsG_7>pW1FzwpwqM?d8WbQH;mCZIE`=1H%{h{&eE-Ic?vVW;p`0f5$6FQ zBq_MbdHZXuA9iZDb-iLy{8-{u`&;I#wGaW^CO!n_lbW*9Kb%CkNsD3eQfk><+ z=wdeFaO@gE@45RQW>K@w#bEUgv4Sr1d@m+?Kzn1pt% zlgNix#yPyoB5QOMdM!7tajp(VxZT%1vv%i6bg>Bkj*tVXoGA_ zgcK{z!9ik}c+Lpbt>fS4KMRCvFPGXTXhQHL(H-b0rQ+dtHm~?yW`0YIhu=~UN|<^? zS;ZmtY_jK*XOrRZpClZ4Pajdn$MO@)-U*if*pzNkAN(+AGnr@`*GSDb5nfeJ==rZR zLf5^`$@EwisCx~Q&Da?_pEHWw7W_~Sf7iVX;GyT&w+q$E+3H|O6{&HH!PWV4mPMki z)ATw|51TFf5wOX$mfN91iw@mAQvJuk$_-A_D{}OCTe1sBpGQ~N;}H9-lGS4{Nw-&b z?qt_ef-%N2ogv$BMllxYSK!T{=aU=7l_?O9ZrdETI?I(cy?bD+a|z;4E1DqXK0JPChldA z6uOK>)+~vNjg-VuA!$s=VfF2UDLGl4*PCxfBPV6Yx-D4&a#mOF?nL4J|3#Nd zhY`O(0xUbyvguDQcqKWf%GM53>UBFBY+`Y9^7l3MMHaS+?_|obPM=W&NeX8mFs=T9 zn}5~**PQ%$q# zT4p3kw19ndXoD#t4 z47=$!6EU*3GtK zlrtklFgTJ&AKP*D{X5XNqUEA*dx*Zh&QJtQ(nx95OT;*A-bBP;E@IADI<58Y(+3$U zno^)GrA7vcCwzo}M+nmLU1yQOL*=n#?u^vL+X;fN?2Hu>{W8jZ|m6e%x|e@ zdWZ8?JB#o7{_iV}AB+!qqo+X#wR9WK!`zzX3_zD6>H{Z0_eHm_x^b4(P#V8phBJXD ze@S6v1vOj@7t2D`q4({8k!_a=BjMFyxQLv=NMpNQ=@-C5Wq3G8u9k;)JfL|frFcb3 zEf1f8XYA>rB~-}ls<40WM$szir93f?T(ASJ>fYcJBhEd4#gZ!@W2CaLqM*Q*DlHrKQcvEiWhg~( ztyNYOi5Gy-A*~^_=3L92PNplIeeJG_J;tDA22g`41oFCVd2h0RC2u?O=J zINwi34JmEppt(@}B6tAP#%qy$LB%c4W8gcF=;-j0ZiC5xIX@3~a3CDY;tuA*O$b0Q zm%}-{h?!qCMLwtKwFa@6&#$_@c4ajvZg~Ww8id?Gg=TD^+4Dw!p{ars=Vso-3>V3r z20@1bH=4*+!?A0JaTP$>Z=(!DJHz?%ut+S>Zwd4ngpU=UVyDf9<$0*^IOHx;I2P~W zLp2gvt-JOje7XZ(>a_e7?Xt1sVOSWW4yaTF*VFL!L{u&WCnR=}E?2w|zSX{pt)r$) za9W3=zxFprz1NqCp41d2V(;(1rB-_*Br#4>QQ%V&b=F+X5j)QLB3Dur%JTaLbS~RX_Q}xzP zq58Msn!IBTHBf4X&7v^>b+rLLhte{ViO&?5MmOOGe&3jG$J8;{F~jm}Zzsi^_=IYS z9c!Bq4`Wmamhwlb1dSu^>=U`1ZX*}`R9QAvj=7LotKVgSX4~+J+ zoEUn0W8d+E0Y#nKO*~73zVuiR&+;^aV|tYFPOM9R#QwTixXM97UUf6 zu{njmq3N${dVtCV3?)EM2|S}`-%XdISmdrnLns)m4743q(H>FJ8- zmd4TZv~0?2W#nq8aoBo3=>l^Dd0!@ph1(#p{~6yhvHjs@vDoyxk3eh>kJxm78JhlQ z<#*tJBfl&|k`R(Azq7tbl4Rt!-*!kkF)SqQL6Wv3zsXZ!%VEmStY?O+%!5SHwI(N} zu8-qap|nle15AR9?z&Rr4V*o8V`5I={t! z{rLIN`e|m%Xw_b1(Hi7K3kIX-%5vtYhY)c4(Yh_=xB6xc(Au8=bG5$vaq@VEoBVX< zjouEHpOjfFW7)#IeGT(C5yEp>MfU-4j@pW0f*;*)QhuwUME4Yri)r@R`h4T#Gg{{1 z(H?f+hLZD*utUv5%$M|kQsx`8?0h2}%&@FEYD@}lVzLmKc%Lk_^kzNZI3T5xy6OWE z(87Ep`~M4@_kYlO?OU`(lWoPKnd*mjbRU7|=VRLlFoknLa3-~r5rB+Zk;GE>W2EKl z^nQ6C5kPG-{iA)LL4SONW_A10sxST^CZ)s#4Vy>_`RxqBX&-}AE^z`o0HFn(vJFnA zgZnFRYTZ8Y-Da(i|0f&^HICQaq50N2juSZavOV&^?^Al@C*A|XXLzb8U2>W}NNd1;IU22u`E-aV?(`(wpq>LB7@@5N={vp&aMO zwAEc;4hzKK!rB+ax_x%r_NjXRdregfJ;wg)n)MjJp4Bo{VNF&19Z+?sp(>4@6`CHj z!*~(>eO_o$;L?YZ`}cJag#G)IIvdOy%I%)Fa#2hEHO8eg z$Va%{Zg@TnykJP8rNB5_%|8#zp76m!RIx6$uAx$|vUidWRT3Ly%qmvSN^DR!zYPyt zlQ#a`QTxv|Yrofj+y3q?wSUzP{ks}^d0ZR@Buawe`a~1mZc`JK569osQ!ZxFA_SYl zs(xuoZUy`+p&gf!L&m*dw+fQEbO-v!6Z3&%G4&7eJO4n@089H1NS-#j3y{F1{ziLii}NNyaPzU-=dgA7>C3@w(2-)xY(a(w>Vh zGnTo|-S{>6N7q?Z{aeS$-;i@u$^WGwn+S{VF!Q#UE8~ zZ9n?r(7v^);AngMWx){w057z!=z_l; zD*veoH6Zs1)p2!r;!d~tJx~;yPTsi1@A#=37^*u8PvevEr{KsbJ>23IQgwj*4%PKx z;c58e7B7_ot|}-vr=p?Ynu;Z|a9iGJ7n=SCl3fL7gz8@9^(>r{h->_H`~ha|LUniX z=L`5Fy>EKH=dU}|cTr}U5q-ERRZg%%aGFLK+pXTsizR5$ex)&HI8Xt%13Gvw2d`z3s5k?Uj@4*4)t`z>h0 z$1sZ8XO3{kt{PUowPR?;Sk^|(TAl?FS~RVFo8j&`DBFgzS$sKmza-BKYk!9hUx6q3 zz5Q`FBKjVFWK9}W1Gkhizg0Sc;=_+v|j(F^B_~`)@s02&-NV|fMmd}QjmQqeun;@u^kje-N z4rASB_RsJ=5N4_NJ!hPzg9%X+oLQ__2&1~pKQ!gXkNg5?8%TiNH{ueX?IiUHUz?9Gkcj7}( zoDtC<xEj|Z#hrW%!j_YvuLIC+a5Sq^8((wy#@>dCd@ocW> zht8I@GS}Y+U##B*r_lDAfaH^#1qp5-Tv$It6)RgdWyArK4618WOrAl;!dm0ek z7MPL+(~2*E65+;W&yqi!-UmDBsJL`?VO@(z=>zHMZi7CQD@J=q&d#e&Sxq5 zA9-MGp_sP7K8&`o+s{coLI2Et_=Hpb7n}pJaOAtw7P^vA2yV0ZG1BMJFxu_;t_kSh z-eA75jX07k9q+03#T;RdG+~p*j~e@SVoQXd_(ai&K`RUCUE2d{sFtvg3oYu}9tH#d zc|S-T?H0pjeiW+xn=TtimwCFl#VO~Yu#FU6WeeMkaL+~I?;WS~9=7yz_^*!(hpf~y zJ;%-L*Qu~+X(9YmB8F6i5u}(REL#L zUzw<(;!F9>MBZ^Ty9!>Y z_X9kE7u!it2bDtDj_yz0_MGM`SStAsy9Z)czXkxI$D?QCKi;p>x6q!^n zEtc#2KlQ%4ZrkTfQBKvD3Vpd$UoOy>xAdh^UzY02D1A9rU%IS7@OB~6*Db~eqY)qE zG1kmwtcm_!vZ?U*(rr-3X#sl4(7_}E&rN)QLX1s{Fv>-UtGA4+yI(~tV0Uuq2Ghoq zz2S5b3RDY2CScT$W~(F!z=UI>GXstirwMLt4OMv#t5IqHCiNu_kr1Saaj_ozK#4OE zA{;&w!xp@vgAB~3suQt5z_^EsV|jCULAWxHVv#zvzqYRoQNj+pQW#HJqK3_5)Q1J2 zd@i$9wtnJsd#B&w3-Qs$Tsz9Qbbo_sz+Nw2We4ExP7*i4KiTT1X;!Q7GvBBdH!O(V zLIukQtsS(PYiqIQ!EV>y7II|~3+x@;Z-xHE{Y)@pL}*c$9CVN2P(43!%}-sCDtx7@ zedTTr)=k$wipMM39lXEOv?B4y@R>#Z1`nUv1)dWF7&Z83k2Rq>*^&>rLXZry5P;NP zL`r~H`HFUJu;sEOlOH1(9NiLW_^w?fv}kjY8z^bqH)9x<{9?-eU!hul>K6<9vole- zP3_kqmH-q=vQ0@FY{J6|tVT8hnq}pLrjnn=B1x8p_*U8`5GwVHn6Cgs&gEiizxFA4 z0ppZmGrRUEa?cQnMT$6S?XfQ%Fh0sA3Ld|WVSwRSd_!|j0C7>XbJPvbqZ$@@ z!ZwW6Q|&{GP7l|u#pi*6PC3!3A}30ae<+3FN_tl8^O$UG&_|jE?gW*zClQ!RW`;eO zc8Cqw#d?5^JNOo^UU0kpE6On|`!?XDb0ugammu@hHBV^)i9JQ+um;t0DHs@lWeNk+ z=-)`qPMre*ad3Qqh6#9BAC|7a9&%@)UT9ITYM%MGwIjuDSaY+0$?fKNH#Q+QeRw*4z!s@`^B#dFo$4yt&%dfO49 z`t_(nM^Y~q=?3oE%j}2FoutDIurQLPPszIFHc5gNBH4A=7BWcKn}!M6ccfX|6w8ep z?9#v}ridv8u`r8}I4O~p8~l7TAu`1JW2y;o5(`)%pMr>xM+4sG>g+8aI!k{$+UfJU zlevoJpqp0O3f=!Lzy90zRF{{b4O7$uR>Jiq8YfUk{hU~>CGqp zB+lw$eOdM*82J*MrD0?GKApScnyc-8=@rm}FJKu}jh0@o zEj^pU&VgVukZ=iSszTErz~%*cm?~d!JT{cEa{xiqJ?m}oYIcTt6R8B!o%CM%1BW4r z@)^AFobk7*1b|(_s%0JsqLIy&b826cZuf(MC6u#W;390Uph=CXiUqgc!l|-r%6a7H z$pZPfa)}Q}65@kV9q_$GpsB`QZq3@RBZ7I;LB@iM0E6!@BYWK7gxT7}J%%|svEWV8 zPH{Gd3)9HTd8~`wkJJ;$p4%iZ*HySp5*zpFsH4dBB4}mz#eaak?M*rayXMWrs)%Jp zYBkF#M0j-uS7wqXOQ|VDTn{0UIgrBS@y$5@+gC0bPhqJWe89DS7_hA3OVgzDwk~f~I%mD{r=>G$a&zg>ZlK^<>Ofy% zyj&O$Lv(|k1be#t&i)z)p@v%d94x=9iAd7=({rfP+sjuA$$&{)%v8s)YI9qx+eZGu zo?%FIYi?jbJH!0E2_Ez5usrLSca!G)y_)l5VjkzoVsL&6Dj3dRNY2ADwOybM+Qq55 zoSZ+9<#3C%3m8Au4ea>pU%Hos9T^|2bK%wy@B+E{X@y2GlEBUaZ6aujC9irVGmY{u zyq;K+!w=cAc%cY@J_l_#_rtnPRk#@ZuQQ%E$$$9UM(uAO;nuR6jkFc!S7|@=w{nG< zHu5(n?hzj9)J+{c%LiGk6uA1u{&)w@X!*rHUc<4O^c`~Vq58X67x8if0EHIytlqX? z<)x5D1OkPx>U5(pJ0Hv(3f6V0CY=sAWcD(^{??-+|IwnAz7>lW3~QDXaqVN=z#G@{ zb+Yg}6ZMoQo)+c`?+)~q%0O&+4mv{kWG>!^-J^fN2#ND=VNRM=aYI&lVYE0a*6o5h z&=^Ek*TJ0^Msw)(>qqfkj$%OeR9cLjtGjeSL-adhJQ=l>8=Hg#B z@YOY%^k)5^S>6@VstU9~IOi8ZGY~wkEEbr4gY-G2T%lZrE(ASMDYsWvgR?X%Xc8tW z+@2_sw(Gu?4)C}vIVz=$KWewO3AuaVPFHAapIxVqUq0p!BZ`jE9X|p{@4#+WIiKdiC zyH1$2^Lqz{F!91@NnR{a4mgFbgH7_GdM-qOE};9zx2xxnEqJfQjxdWX22_M>wJ&DQ zSdM0?2=yx~4xs9;!E5}-?sC0cwK}tNN>OE^^r!VdrGckS155O-sq_Y-)EbWD&nl9P}QK zO!I3jAF3soWoNPltfSf?BU8<~RMq(X2*X2*bjqx*p<R0TBEP& zv;9rCB{&>6f3?49K2*cD-*n<(Cnm~XafTB;B?s#dX3=2AWWy~U>O{}ZX8b|%Qq1dd z<-gXwm9bm3_A*KU*V#27U=u9kRj!cSZCeIS7CFm;lYR5h6kl)<)ZN5Ak>Nl z-?-l6!7kC<7I<*xlYg2Aug)YO^5AHR-aH<_N6+H=!xmI?6BlS(?IugWr;%4SUh`q)J|6zbEgW z!gmE!6z74)M+zv!InrBxb_o?9b>kalb+k`)cjOCT3mHT2qc3~uOVwit=ng^8h%t0a@!TZ#;Mf8<&9fyj7}U})Cc91?T-3oL6Sq#JQcP%^s> zi~YYir{KqxB!YdvN5pRjZPG@EpsDV3#wGsuU=gr51dI^--SRSeaPMWELBIwCsEEz; zQE4R#SwKX9eS{HMsWuX_5-scG=fF?(dx!;7mqd_SrU*%n=q4~mXXkUpXbljFmIrOa zx>lfV6{c9b;07f(uzt(lXaT|bzUNpi21M938^b>RSa5c|4ov3@CDxjRCaOFSVZ_>A5Tw2f*pMW$B^`m7;RY^)WJG{#1w;*ugcs04TQ2nvk=cSY=w z&8HAvM*Jv=iokSWm&K>5_yRIqgHK?Or*;uDQKY+}Jb(F}|8t&$FbSco_lG=oN^$<@ za;AcsO>%VTUW|%7 zmN!(tP|z?l$l^_{Ymm@&#YbAN@;pZamm_XTdmW4~ z;^c5xJ)Ol|1LQ`h|A07s!U1ZHM2*SyGo-s|j_X+y{kRH$yPxmJwNSwMAa#SE2hswlT1{}Bs5opJx+#*yN16jbq2iSU#jyFJ4WGgCQj#IL}mLOV3MJp zUDHZia!?}x!$UK(1$!5cz~zI@$UMAaN9lc*vQW2z=eCdaC>p!{R$5cKx&77yM|xo@ zP&1|T&E{3vQLlAmAJe6q_-pI_UI_fREi2~}9w|&Q=9R*u#QO0f{(AEUl zv&<4G8Pjo5bS(JWH0jPbH~HL4L{I{3dLsT~qx44nhZ@uF+qqzSCaaTFH#lB^(z%}_ zagpwE6SsTXZaD&@WE1l*ArdJeW%p$q$4N}5%_n{;+`hVYjdTZ9`Z7^pF4mW2_o8$7 z4kI96=a3S=WB*cU`fNIaX8G_^!5l0{P-YFC$f-BqZN<X7(}tO>J*T%kJCYxVT@QY)`>}=TwELrmIx%yec?cDU@M zDlj$ejf&Jug;*x>7CR_BVDglqJ4&FUNSCSSFaa-vWaM}-?ZjqZixd+yzW;TVL^Eu< z6P`MJny3>Oh-S0+Q$+z@PaA>wvN#Sj#{gDlEG1KaC>kUd=bDHrLK5=ziY{OR2VNY|668dR%lUn z_166=4r_t+*=ti+4=jtx5%_4rt;H^Q*zCqKY9ot4uwGl3ERLG4Ks^ISnC=gZB1*DF zF%>ymn~=E9CPQ7bT4N9TL&1IjwqIzbV73xAm!5jk}6B>=I`obIM!Z`lZTUi5}jC4v^lw#Jw2vMKXw8 z7(CC#Qj7i-v)xG_Vbwo*&VW1&D-=p|gdp{&5#5&qAs73TgDeLE@V2DTL`Es=1eCz}pEe+O>Ks z7JyvG2TkazrAzes@!Iv7oISwPyg@55T)%n@n3Pqsts2#@?upfFwaZr3ZtFPt3m{h_ zgd1gx(m9B2!uhEm&-$tfCM&E8lW7Pxp&yB*d`)Q5ucbjrD^)Mt35vUW6sOVKnUPeg z|8oO5H=7B)bBcZA*a&Gaabgf4j$ou$i!o%1jRl6MWlKWgT>Sv0SPpxL1XLi&4IXlV z_UL+W-3EM6<2oxD;sYSIYH_mWEj-7MT-b4*K$Ej2!4oB)^8y2)?7{{5PuOX`NQDR3 zi9oQ0<1hgsdArjA11Rc`yEA3LFK_HW36lexLv?4$!8O>#ahXetv@{{^2C z|3e14U35)wF8c^|D;CL-1vwaJHC;1^+`>Xcj0x%}3H(CO=zC$HI^X|7MOVHnW37Dl zVv+dKYy!`OBq-RM=QUHXpR!a_;x(@lB{)#+8PXE8u%IgOPcU~u%PNV#yMzd46v@^t_|# z0gom?2PK|x18ZX1|9NNwQ)%6hf&h=C?Al&?$1s0lvu$wwHyjnf2kd*i^_$>xnNAwr zJW-vl0KuC5Hq(bL4LmVpSsvY9Nk$2bIYU-3TI zf%pwLD4@zj2@%ar+^1gs8>r_VwKRV}k@l9lp41Jf>n*)r#0%AiPoRpy-m2($a?~*S zZn;bq;uHjTEaUnM0_S*$$S{nK2J`?C!+0P<#?NbK84nJkEuP6B?w3c&?@#b6v8Wo4fDDQz zpx3IEwXS5B5oDHHeIgjS!HFV1H90uV;OFr?emPi2C+Fb%>d^%hE2@FKEb)AT1_=$T zf1f}{EVKKbi^9eX*eVfl;tHNh4Zao9xB_?n`2(Jxa2#X-F)}=X?%_}1%&3(G!BOHw z8Sc@rAR=w6U+~!&Us&`0Em+8ZKXp7!-opFTGn(AMuQN>>Fgpq1#lt}iGM11$rfP=| zO|j)L+XISP)6hCyon||`fFt=5szDKoP#0>0y0R{q5hp5_5=*_&Tjc@E?Vms34)3>K zuaD`-prmHw0>X|ys#D;uxk6NnrOjC~g^#U>(RUKNaWV~C5TZXh(YKr^=0CPdY;co= zAahO1Uwn`(8ng3##-=bAQ+XCU5IYxx?l?oW>E+Ks9V(#>6@uMXDSuJSoXwN7_0kvE zf*s{fCXU^1sO(1l5X(p@UFuPW0n*ql7vZ zpOyS&@mazj+rtMmmQj%-UTf;gSJ?rIewkhkg4A_5kub1$~R8ut{q8exb z?;D-y5An(Dm1Xro;uBH?!zF?MjV872p;E~dX>eflX{VwI__Y0KWWWRl=;wdBc6~1~g621Bliy#BhOb-c zL@~jwrNM`9<6-<%p}nAzF_X93EO3zd_5kG^c31FylIgwlm4{hM3YFHGcR3G)NmW$4W} zkLok@;W9X0rv}SW%pAjwVLdl+xX})E^|7|6wzDCyQK^k_j@x_o?c|7AL<8LL13p51 z;MnLJ+$|y1In2E^u!41grH;F#->-Or?<+X9udSz--$XCJNex-TX!uef()-d{DhL`t zM<~r=I1eS%Z*o;!wz__W)(mN<)XwrI`Z{0$;nTF#VgG8W5`~Y~=IeSG57o(eC-M=( zJ+S{8{_Cx4htmlO>Szv{N1wfPeLHA(8}`_3hQ|UQl#R(40Z-N*sJ2N=_c}v08-b2| zDTZkXD7_J=+xz6(4CBDBETWN3z~B-V`>A=tK6Vw*2@{GF8T=A#wNe0J{I8;&bIozy zU3CaVNZIQ1W#2VnBO1iD2~3FphCh166jWQ+_~Cb+o@CB*1d|Bg(f06QW2(!WYi7by zT6ogDzaF5mPfDWLD)F)asyiWu7+4yD#LSOZpG)0@l3zoSEfWYD8aRc!i#L1X> zOY}$;77!MyNv%qDy43;#68e>un#sIIB=ZicXEnBwezAIt1X&ziKAcP*2Y0i*oB}=F%&hE$y^TGvZ~UN&ck#PT<(?x#&-TCp2-^-i2vKVyxmATaxE^*5aXQ(c?4T2ynOh)N2a|BY9E1wlT30enWuLB; z9c3d=(GhD}ZnyWw5->eHQzXC;zi8D^yRh2(Dr?cYiL})QFb`4an&s4U3~=>gSOUP( zSIK9=YuFKr>Ni4n)MXUqJiI{}l*$knBk!+nqU;zxr^t@L!fL=V&15GDZ3rm-5FJYG zuWc&3g`Um4;K+jx3e`m=q}&vL#$5lwtA7#<_v?WG|2gSYK;Vsdt`m}#_=*8G8Z=@= z5+Bc?%sO_m8#NmUL7Ql|>x(rjeQf`slVv;8@22{Y#wn+G&J7R6RSFEyicX%?j5^+iSFUn<*zFa>84(fdCpjbQ0Bx*vp@LSE<$<3_I z$D4CVQnUO}L=+5=97+V|b*v;a1Yd8&fkoTBDehuG5UwB;;Y2isk0#p#LKQKU4bT_Uj zZ~^cQ)A~i|e=iU>>xFgqJY&K-UhQUS zh3Bv?vQ+1YO{%?eHg1?_tgOckQsl_q{}Yg7fpuro#f*`)`t^9?ymnj|7hdytjRltI z8o7uL$KYwMDUImTyL4$jO8^cb_nCNGOQXei}el)Lf4dXZeSc;YV;J879&x=x^iz+ zEl1TVRIQ5j{_HH$j(vfs+Cf)EDU!3X({k}zUaVV#u8~U_E(2+JFE`fhVR?Es1aW1U zC9*p>dQF&Us{@TB5DuHr7b2owLu#dzn(FM;fHa{nvi1?u#0~tkMAHa=`Ff6e+3Yky zTVmLrYg$E}AUL3$4{LXtV%t0uOa# z3pLh?)3h}%Z=nW1Lz^5xjBcUE&*Cb*M!)1wH&8oM8)eePtMUj&AG1-c-oFkO-UoNS zc#8S8Bb)mouo{yUu?V0E%xG9h8C5S;7Iy2@tqauUj*98gp25e?OwI{G9~2(rjBCo zkPIcZgiCKC7km+%)-0a}OO ztws2u>3`Mw74gka01(&>+<`2Z4=17L*be@?Z;mZg_cMvoPNu~d&Qh7FFWezqAWUXB zH}Dri(yK>uK_t)fLwI`Kaz5pZw{L5ij6NN+i5;D`$@$uOi>0L8Nqk0Ja^+r-r(-v= zeRL#cONrxQ4j-z0ut34A_rY87sp8pYngVwM_+8J3U@I@#U= znrPKIj;yw=3agKA`ra-bsXU5r<(kzVY`V8an)AWJIUZ&w-{k7FQcrT-O@F!G5G@YYOj*~6JDavqc28X zgD|3{v+LS3){NA3hy_kN8DU}rj?qeH5D$OEgqp3;0WW+)O|w3;03mInQQHgSD^y+t0p-s`+F?4k!pOQ`cVw zHf-;F`Au5>Xq&?l;3O_BBGEnTW@GSx{a#gD*<5su5nRv6#s1_9-=V!`1SH5y=M589Z|9|ax?6{C73|t+;1F(( zT8HU;&yNC2pqH34Xk}tnOO>B&UO7Gt>Y%Ew1V?^qsee5K@_|6uO@bG|{4@+B)>a-* zL17g`13sC{aS-!{R^j(ps5^O)R}SR_gHG*iOQImGv&uxXi5nc3n}>%Ct$f6Z_DwvP zs*nFg`$Ko!{+gN6eofU5+voZ7DfE+Uqn|=nmb#;#)icrA6#cw5wal-dbWD;_QKN3u z0EAbNp%;^Em;$l1`hAAbbm_30jmM$xl#1vpAR2vrv*J=w#`9Xz)BaMl2T!aDEjm7& z--t7JkqmH%kJe5k3%}E*C*w{`T`pmu3_(%W_O%3yGQC7NFezH;Zdar!Ct6`Fn} zQxiL@KcTukQC<7HAYY6f4?l-dP^=uPMt}EqsICzb(p8?NtmL5flfo>jzgs`Z(~fWw zu2bO%-^3(7E{w@m$!&pq24HxU}@jnwy(h zV0<-1j#s!~uccQWXyFxZ`o}Ak`f{1Pd8nmX%$;4%B`v(Ui+-hpywaQp`7OM%7<0#} z=?W<4#ke!d+1%deQF3YeDSZ&ma2BDGspy9$un$5Ih4TuqCKoa&X3tZS^j;WaZaAM4 zVkSOd4;EpaY~I048N?m^mNxsalU%&ko)8m{%DPy5wLbcGVuAYGb<%-Eh(4Dhvk!xs z4h_{`A|mP=KMz+SD$U+RdDGS(8+tx7^f;g+R44f+(Bua9OGjHs6SUz$h<4eh7H#~* zC?+^~xlWg>Yx?P|dKLq!GOjv^1-}_3iw$n@}UH z>NXLq+C=>Tt6;8R6<4pJ%THOYofeOVrpr$H+KoVc0tSJIL14dzUomkNOpB0T6XX}< z%h=ov{&HT5tYzYsQIkFY0x6OlRs4qKTMH{gR#P0P1|E;o`r$2jn)~X5$Yp{C90#}|VuK*KV;EQhm%4t{0*Nxb{}T_FA~whVTk<|!A2JxN*fnp! z2SsE=?ea2At7zb&30Z30{(8+D5_Etrc@H#|rB>j%gc39jOoknH%azm+TDOFoHseTI z!)i?~$1+S<0ogp_fu)naHE&-+j_T%XMX&{zL$D)_V9Q0Y7m6F`8$Sovw0QsQ^ms~S ziOjMz1Uo*QcI*ZZKQ~2u5~4bl+5ZR|E1XD zK&6OVfcq_%%d8b7c^@=}iAAymYNSs|zg+RUT6sB<^zfjrLKvFP`?IXtO__=Hs+5o)vyk;Q z75+JC_@e>3bm6xKh$%Q9*ivDp>S+XM0c-?;1>~0?b|z`O|t08AdW_Sii{`2%HbSKs#hW*Go~^O1WN^wZ>4b?s}l5 zN<LxGd`#zTjV$^})5nx%@;BMssBpT)A16l?hA^&BU^-$g#;~S(*N2SzG#h z%d(#CS1rhx?aOZO7bcN+APt+q@m&#<}(ta|RYL!IKqT?e)f?*Yd zD~N9~TX%a8d8{Sjuw7z+^Wb0gx=Qqt(xK5w+tX>1TFfO^Lsh3wnk#Tv{rs_hDs95| zktr|A9Wtski-o7N?~HLW|k^*gZf)wEuL z!w~IBAjHs~7DB-SU3no}ee>SeP4TJ5k@&52Zxuo_627)|qQ6qwh`g|fte5y8$*Rwn zwH7!Xylu@N)nI?feMN*&m0A18-W7+`{&8l-L80fr>M-dgE|Dn3i~Ps?GJ790ZnkDQ zz3(zPdGBs=jUQvV6*sUgDEkt#L^>%R*&Y9yZ+E=gu7}Yv8sKiA%TGV0d8R5@%crCS z_C@v~w>sR3S?HLYh!;s*i52H&jCdbc^!d#f2AK}2gf&$+Wqv<)K!;Tkx|8~)jR)r=iY9s9?}H+4hTdd%gHJS6^%) z%jF2jg}Bp63!d5UxT7#8@}^^IH|U+F08W9ba|~R7qz`AOIh*E)wKbQb+ss%Nh95+j zGo!l=b6$&N9Y7-q{#+nK2z)&tc*ntvz0k=7Z#a*e{bgh*9qI&_RqgU(sFMti(X1Q1 zRBBUrH70n9B$hKGDg#`ZUn!Rx1d`@uH!$TDgUBDJu^#{L-UQQfJNrTVsWcTDxi9a)==#e9u{E%}rLLRs*J z!3ksrp#>k^kCf2XyioC2tS#`TMe$a=8@+VvtSeY*ShuXJk9E5XHF-&DKAC1&_piV1 zn3~6>HmP~Bx5qkF^H->RuaxYIU*BD}d+g<#1+9c*tJ81TH|gEp>C9%#@E8Red>0*or~zG4yhGGJ z&-{yhj#n2@Ft8GMKjY!NdIRW)VVz<{T!w&LglUi+9AA)_)D1lT03#72Y5){2qI_89tfd= zV|F*NVH0(fJzIyMuF~oEra{IFEk?1?6bYf zEZvCP?c@6hlOr5hZz@di0_1@qY6bwao65x}+opiif0viEdg~D)Y>Bec2vN&~ICy{@ z^^w`C0X9nv!kpXW!QzKd&GI!XuD3Q3s6NC^FjBpGBD7a9N;I4IVi>r>pFf-J^96f? zYq4NI4e?|+pWd&N{aB-0*DnkP@*nSWefN3x9^U^f`U{{gyv7)sSM>g3$~DVr;qd=; z$?>8aT(Xi4(0yFfgNW$D#B8AGiiki2ouO_SdSGv~h1__Y;33rO$9LN zNW|b!(GHCh(xTzXz@A5*S~?D0=~}&By0$ zurOJV&x5DjW!1wkOBaa_X%?(fCt=z&E)EN>yv)G~n*4@Z#>{d3Mp9SHh;)wBu9N*6 z^miEG&DUE#z#$3V!L@3>hJWPXOyB(+-~Bv$?;du>c#}B=9p!i|>lIc1FSIh5J_XTH$f$rkb2jnaV{`$B#M&n#%_3wu=vNcts8 zGDH1dYfqE{uwPjO#mXZ`O3)v#6TZUx!I@@DOOpPj>qd zhT>Hu6zd^ZRw6_*{$1V04h{=#N75!U~M=xp`S3J|eK%+kL1U~nhio5=UB!F%i~ zM)F)dnT?0uNhAK9OPC+!IUuqS+#9vM>EJN$E$f`6f8co6H=WEMbwB5w1HvxuPT7^o zkp#r4j5u>CEC=EY-Dx^Ah*KLZ#R)Pa3M%bE;-L z8NDeSf=C+{{QOPS3G;wMj#`#L9~R0LYue$vtDIOzs;wxM&c+B1?tHUffg^FM1M2=i z=H3O)uIc>$&qNNBFg+8bCMp~iOb{j&H6b`5*pa~yWn9`$Q5_mJWhNOFF)@?N>B%82 z)u^bT`lXGQR@1n&CK5?dnurp##C@NhXyZ~6LH_U0v(`SBnTh!J|Ns47|9QQVz0clj zul3xYXFcnNBn+9fha{nRI%@dz@lFzI#K>x}8!@kdoz+`9RuR7PM=z|dgUpEUX?X0X zTgM7oV*$M%NQQPK%@c7===X@nIMj1BSsqy^6*j^Oyzu57alfA^?A0sCTpnt0S~6tn zIZM?6ANn%erqKdt>ZSsmTjjz-OY%UwwL^{(UpuG}ASBdas@yNPb`ZK}f^gG7AUxZr zdz!51{~;@mJv5sll)3LUo`4FU6-b1C`k{5X7rM)D-KG3%bUdzm&-&Wu2POUMJ%rHK z`qx;JgNHavQV2O^3*FiD7ry>)1a_>VTM1If1`Z8&d%@Z?Byx^QH%6-dBJ(3v+M9@u zjpg*EIh(r0b}ea=yr}ACyUBNQ)8*4Pwzga_y!8cU%=8;w+iL5dlSpE9 z3)LfJO%khSjdA$?GO3*hTQ3{_t;^24@Is~@v`)+YUM+5^>F}`$kZ&mx&?7%FiMgTO z$9sSze2cXvGEy4XVSoh?CxUMWqdwsjD$6}kNP2YR$J;`GYjdE`fs0>MUj*F_AM6`N zG@9jlIZ28Z6ta#EheCflMw}oCk7SD(#zF+8sS0P8MaN~;%RDp)(gcuJ+h#CHV*<1Z z95=*cC|WN9WA)`}3gvlbZ()jm8;Gp+Q5_Agj;Q`{$5|$--#r!Te&DHF+#k06>7G$I z)UmEXV`_{u>pyD8?O+$1EL0)`X{*D&9G^Z=4>Ga4j`y+9dcUs;RuB~KN7Vb|`YUo# z9f4v;a^>EhB zy`)6EUs_cxUP#y0rIS@CQRTQ%>*F)+#4hhL>xOj|W~SHe*%g#+FsD*Cj2$ZE?4VXv zc#$pTG%3&bbvYpqB0^m@g8f)6nF_*%HrohxO+IZ(NT^M8@-$^6taGaq-O-P>JdFXSTP^UynWQ{Z6v_gU z{w$Prx9}%oN!Zot@}JY~@@04VwR_ldGGZSmm?@Y7yDQj(O#VDM%PmY>r#_C7K?YgI zU-71M?RmeUiV^19y_kT)G9v>c(w z-h0#zfv7e1;>%GMq|Da}6~%buUu-T9hso0;&h{KLPn4jK(OfN7p-0eeKt^nNe4_)- z7ng9hm|{sssjy8EgZo4{TDC-yO(s^K2W8Txo(TREt#$}n*T4{z!`d2xAH5VInDDh$ z<>kU5S_dw9Y{z?SK~%XQu!YK+%Ryv3K;d9L2e!7H-~+?^+#+2bgWG+6JTe;X@=HHY~p;6ZupaEFLJkb-xb~G1+UXV%kTNT6RB3}+8t`@xik8f`~T1D z$GFspDvd!3$wEsN8p<7HcJ3a!gu5`yLD4Im@?lG(+pO;YG?4$N>xT%nB0@uVBFxyS z2N8DsZV?e`B@+$Vw-M&>@^-UVm%7UnCt#>9;JGtY1^Z`aCsofl#^skO(I;S=^>5X96N}Waa z;hJFa2KsxC1etyVgN{wx#IMoX{`+YLS@q;fN?rm>FcwOpx0kBQm;sX>@<_cit6e>dKH(o)qO<{YuTcT#=@F22-s?}A zWO|P?nxo%1mIi!%Bk98Dvzm$niEe>JvB~9-C;N9|sE*}ezd074X?sTUaJf1znh|la zh?uE(@-*Ruf~E$R5jVw6~U;ND z?jt#Yd++%4U+}Olb8^`@`rI9dxp#F(mK~cp1rC1HfATkZ+1FkUiC*?SHghH~H}#)9 zWX$4M`yJc=g>mf4(D4a1aY}s|N7=K-&o;R<#XxaWZ1T3;-IZI-{}1PXKbBi^?1&e0 zf2JV{ePo4BxhwZ0epAT*ek?cbSh}B=LoaLMI%{GFYhv^A>^^4u`VHkNgpuPEIb>O@ z!a0W(3}q`zV&{jZ9L*G)04o9!;s-DRq~Om>&#@u=bzT9sS) zE9hf}B%zS8@uP2OF4VMjt{c0+q%R<3up9y42Jpea<-R_;$AZ^#Z$eBck+gd`bVjnx zp<^y3tme>>4WvXtpw?vHZS$kdFPS$|5+tgEzFj;sngZsGrym~^m7=Dit8Xr!oyMJ! zW3i-y+*)|YJ5jGO9|p_YnyJfwD4hasLMVB)J${`g+Tpb{xhfrh?dDvfRu?Hv?uvx*$D7= zQJVr8ewcon9`5jWC1oQg9{EzU=>8N7&~t3^yG-%hp%YCB8dO~b*GdVck?`H8obB2o zI`5n$DmZky@}E7J|Evc(^AlS|=ZF_UClmYPmzcH-;^FZ3?f16!8%3k1QLd&ku?L@V zVOM#0A<|A1IDI>8bdXk`0s7BZDIiFyqj0BvGHCuDYF_{kImBRB0F=4Ul~o5Nocf%L zeXwQX1(Hh?6z{xA@nt5K_~&jomc{YuJ1g!@6Rn*EH%>L}uNToU?osymsS%sCch6$> z?pbb@@D5<8OPAHLmuemLHk>$WRqM;@4HA*L-h+HBqFKp<+AG6bRy)UnWi2i>Xsjj{i6yx zv22D4Z(A;d7uzd_AQRfT{2&{nWvXM;A(1#5o^xHLzGHLP7Gh}0c+}Xm&N=DPMEohU-Q!^u7E|v>d*OUfto|ECGr%KWdatTU^ zOzmW$3$i&v(ejMjXfVF;NMh-|nBkzP%6Wqp%;RRJi@7rbJ6^5S;ebk*Fn^06vjZfg zeYH}U`Un(|-4yfUEG3eqq}Y_9Roa&;5so{s2+|s3J)fJNV2nLS0##WRR`~OT>2YXB zl(DiPtQ6q};Wm#U5Y^|pR|Y9Ps*X9oC*n?uMl9oslS66oh0 z6HTZjRcNho)VKF9k=!rN3D2DBG$mBIX-g$$OSJP!vOIUX*>DGa>@L+S_`}KXtu9WROlj#G9~D%&R~icZe$BdBB&4+;m!G+VF%mxp&6BKM_WY` zqaL5~s5F-$4>nH^Z#x{_Y%gg)KI3gn5-=bT6N#LGfdf8b2M@GW{=^%4*s-)$%lr?% zOeigj4dP{4IOwgnHizp^UcWhf;uMzoe{~Ojjws{jy3KEH4rd<4&r3Ubapm4@2T*=K zs*6EcDIr6zWgpc84Ih3&N+_)`$Ws-+>0ifuj)tAxDCAcKTq<@e524J}pNb^@^P}{6 zCGG2T=n*>yuxR7mpBJ?;M1{`o-o|0p#``<^nt70 z$j0EW&WgMX9D#2YH`+&eOFSspPB271j{5tA&;C#J4IXJ1o}?=-^8gGH062=v^bsyH zc0vRLG^sW&<2N^K+oR5_i|b@mi8}Z2b=uixnTlt3i|YJfs>iFi&O3Y7d0=s!LN{IU z#Ey!fKtM zQ+!HS?B(nHwySgemm}Oiy0RDC-|1TnC#dxazfxSMgY&Nll^l&t&&^ak-V)XM%iij2 zG9y~T_m}*7kOV``ZuM5h6~4}td`6~X_Nb`NQ+unks%M=)EUwe>eP3Uv9X*$+c*}w; z@#xbjz2Ls0Uoq|`pIt(U~cCdXyBGY5)n2G(+$}12U@E-ND zKNw%wI}CsWBV7M3LCF37gP$EFfc3%iJocwlq1l<(iowyFhxO)fazxVkOlP-n?ov7u3%8^(I|-^Prvgt2bxp&5**ITk~&@(3{`Nh&u@O z%EPvo-i#@{x%83Z&gcU| z%wF@QCY8P9O9dT-ZgUj<<9^5lKQX*MU0)?b)rO&(Jyi#);-2vKO|E0V(QjzsyjQmk z*FXO`5=Valf$aSpiCwHw2O^C^azWRuI}1V#Y}WVQ7D*&#FzB|X_O%Mh`{y`E;)m;z zvR5n}L;TS$^)NBJl;PT)?0j2&tu3#qwR0r?eK5Q_3;8TW z)ZP5I-=8Qc|4pc+|G>OHNI7COIMB8mCLNBgpW+U?RT0paWFB#AL=t`y095QSLqIbo zJK;_D22xsQGho{4!>A@S+WJ!Q8&q)1OT~}>Hza&h5L7!zZCFI{%y8ZaJS`P}=PO|U znfnvPXK0Uy?lF{tPP&my08`ZIDdF+`WM8Ain^zPlQR^r%;o682eg_*6-O52VkcJ*B zjD_BQu7QiS6gAWXnMDl^c2kJMb`@HO5ZW43OZYkI1aN^Q6P1nAe_#N3j+dY!jvekW z7+QoujeE1|PGO+WI<$q|??w>s%`dJ066%K%6QK+BCsn`6N;utmFy4|PLv_>wVr2e( zcV+0%qE3LlGudiX71n-}2i6RN>h4$?ED47LM7AwL7K}^aiO<;J_}46$ngo+o(0cFQl4jyzG4t}u3dey4XQK&P_wOMfdIk`tps;< zM>4U~M@MN931JvYH+@)YxIz&>N({|3Pkz+%Q`zs`x{KnDnG^Milu-%io~y7{)dOjR zYJyBQaf3N7S#1E%1eaV_SXl#cawY2Boj#h)NmseukeMh8tN*Y&v+M~}$_*xSZJS&? zl8dV?TCEcqmHh!iaMVwXPN0;veV0C1<}0jO@8)$>YU(6p)c`tRLuJbWX&)vXa#3fp z!7z)h3DCy-v+9^sOUZz(4z^KGu~EA-*Vi#XHdB2}yE&cD)PXc2!`mH5%gIrx6&_cH z-)Fsv27WbFa{AHM*R$TWPd6Lc@|kU`$ER88kl#rw`cvop9(UVEvfoCBubtnm|Ud1bHI-=q;c15)LpLO%^>sP#+tXq#YZx`vRekir#GTLL_KWqI}-a z`7|qVwhkJFB&GV(2a;6%>3+W5aZjdC6=`{e@GHSBoP3^jFINsnex4w#D7c4G`I)pu zeRn74eTKe|O#D~+euO|O)^`jJ>^^|#ihs}+;ldHptL2c%N9e_0`2`M39N4}o(eiIb z+gkp~m?*E92s>)!)Lny2GrOn1blKP93#XKCCfku{d7c0Jx4gucli`)D!KgKp542f3 zg(Z)xZNiSaPa0%31Jxqd0zwCy)`f?jYxL{-mM%ra`~R(dT6kzAz_L%l>;LcU(*{nO z6z#TVpPKjoEc=uhJG9H?^WIWFecHM%lh*})*|xt%DVh|fD&eQ1R7(cT-XIN1L1S;o z{GwZ9Rg;E;H>p<~eXGrPF0TppzZ~znxh#I|C+do7BPlFfTaa$6%xei&&03DmdRz)2Lx;bY#M0>3?&MOJHCp z{1W!m7;3gac}yZ5yJj2WAgr4m(F7!}o-sf|gtgdklz*ehHOI=*N5G0&? zu>dplnZApap692wT*m7wsyKHfp<(V588W(7>Fm19@nv zpL@2W3iXsyg^xs)w!Wf@PKGT|#0^mJz*#*x)uP#A;h;AZ+ql}Yf5rmW;Tg;@nu#|T zmx*0FGEx(>^A>TF#uQG8aK~4@o!2N*ZJyK+w<&Mx+vX++79C{GQa>ViL(;srm_!*4WjbAdbrk`K>>> zpY`q*IK28!TiV4V#^|=hm?^em#WQAa>*9LXn2Gf{*s}xh9j_#R$}p=LTZQ0QGkLAZ zrVVni1VyZg)YaFBt!Q=!E5M6-eVUXM&a%p&jPioZNdc2*ohkA3;TAgNOW}FGJ5djC-jkPLPBX>3R6mpNEF8m_KIq)CDa-c z7af=52gQ-rwF2|=(i^lKzx<{l)c3#oo_6%T{?w*;u0P$cwL8&&wqNMr*Bf@@c{uQF z^O6JH<+`)%*ExIR6F$tR4@%>W_>4!@NJ&ncjqunmR`xzKrcA;Mg)A1fIrrgTUV6)o zqc|%^r)%)&M9Wj7`?owUVj~O)Bd4EFf9y&-6*i$NU|W>d=4CZ6TX$f?KEla2fg~2DR&kKQYJ&UK9~e z#0+)Vdi>qI7lK5MqDWREVK{B!lG72(ub9Ch?N~F=JCw6jyDAv^H!wq3N6tVdyYTyp71QdH%9)A5E*NcbT zvi?x>PO8)2GT%|qGr^%h-FMlYnv8r^G^xd7Fm0(2!vs3e;tNmNX4Yv#k81xY(bB*D zqv7%C`$3@~A8*1@q)9-+E2o2Ae3 zOfCvIF%xVa*Rip`o4z-OE$0_)|J?1(M+|uG_Hn7FgAcPhUUTtB+m2&#$l{Gh1;ZY% zV;r$_p3wog(etswUs6HmFXdyH=an@=5n?yK26Gj_iZR=_q$yV z7PXwWk@_4tD{@%#Tr>-vy3`J4d4*lKAR|y8zeEs=Cgh?bHnuJ=LX&roPH)06Q*EL0hSC&gK>B8(;db5Qzf<;`@KWMRxjk6O`2fACP zhG1J7D+BK`Hmo*%T$Ho`4C2b^7xd*U8}EzsC1K#0|5d~{CtlQttx+ZLM6psP_U&;6 z{qT(X@&YlcMWME0MsP7*g>N)z;|Jk4cZX0f5SduVo#`30|jk z^@NVcwSzPoz1>Inv@ybu#o8ip!c{rPLem_mknbdE24zB}fviasgbi5Tyyd2~KH+N~ z{(}D@3(M+_G%rO=KI9v2_*neP#8$nzk5%br?$Dv>6aM_^qIDA0c|HRQBB#U=cd$$G zTxQUB-q81g5?d+wthQ>wRTK96g5!Oy)GldD!L!dRuBL`YZACR*({9i4OY~5FIYUV`nb^5gyhTj;8Is1=MsE?pPZsg*_wyDJ=GcmO zEMjUoMzQaKQjrzobinTmb*UxUX0s|buHr0Qn{hI{{5fagnnmhH$0Ajg`(t?Emr$7J zon>)4Q_vTipKt3hyY0DYSt%^}z!-RDVuwX|EcV;80v~oJT`>aKiTvu+EL<<|EK3g> zV)&d{&fvoybT$#QiXRLY9+vU7cyc1F>|o>nAf+HmwrkO|-ZSPvRYK|mjq>p4(Hnb~ zyE**&t{_wkAtDRV4WDu9)Ay2NR|0(5}6`;2%D#pB`?A)_arZ;9?hARL5hN^G~HG$vg^=G zE&2E!h>e*wa#Z(TLuoZL@?D4r0iPwte{$gODu}o(rKmfI5Jr41G_(`9^r(ka~`TVP$bUA+H;wblt^$ za>Hd_)R}^6a)auE7)iOQ(oOgU%iwlKX+u@nNV;0n-xrbzWODwlb;M zvM_cX1eoCPZ~15lMq%)Q%S`nrpGNB}cy6{YQ5+mubYY7TZ1l^fAZQmSWTFEpLg6zfb|*IWF?3Dl{@j9y^N*R#xtz*}$uGeL%Yw8ge${N_U~Ihb(D ztCA)QD!OHH391fOL!>JP#~0SHD(t{kCfRN*i+5@jlQI}O2UMMx%vnsKY@wM^?_G6v zesfFKCDHCK=*SMcusiIR-#*a}?FO`dyJXKX!D8C0BIZUn&Y7p;^1n(0^qg87WaXQ( z``ZV8EL($SR}U#$)YigAnIeRMJaWAbhdRFO1&(?}VO@S8D|47jl(WGOE=q4eBvz6hja#b$t zYD%U7j4o?0>h*fQHfRB33cpDYgUxEZ-hoiGFt{+6J6!75XyNaA8~Y&>a;=TExP*)d zzo=S~0YD=s;1vjzlTjoK%eromq zJm1Z18QSQFBHz7oaJ-`hAmR&0?_^_*p^Y`Z%3<&EnWq_a=4^a!AnJrds3sd{%%73B z=gOdLjicwVXN{yH4*S#fjryZzGmH=*YNDMPbn2PnKa9wm4-@2Q5jKpGqBh&a?C_3> zkuccFlf2T}3A$TzWm2Sp9Nm5GvHF2kT47X(cvuT?SRBTlIta z2=&{~1$St8Cnl*6|Hy7~xps>Z_}2Jg&u`&*){XbeR%H(PUX^U3Bv74E%2XO>C6I~m z-sQ4|nkNDxH4?$RElj#~GZvha^}9xMx>PF2qpQA(;qPYaH$)4AJJvFXAFN&8FMY`9 zx1bv=nkR%vv^ii$z@Z(__+N17*efFWVPYy$f}Kg)y#I8?3vU`{_9=h{Wa?F9CK$}d zBKgMb*M&t>{w_5$&SKAm)=n3YT3%%u{)uJxz`v(ws~zY}yxkMzO|jhEp`sq%JoU zY1I2fxbzb@vSxIxmVH>G($HnCu9?_%hejEl=-_d2_Qan#JgLgu@Ab}dq7!{gH)i|w zVOx+Cd!0%s0xkJrDQEK%1=O^SXPk*Teci zIo%D~u{iY(=4k3!VqQ`e;}tX*ilPLLGLZtwgbxUhWm23VPiT9lDRF-!Wi5LIO`6UE z2;T6S#S}uZ!xov_(0%?Vs5XNL*hP=R`lONet^rW7*Zq;=Gkz#3=vdb#`VsW#KZJIc z)#J?7h^HSE1#<(KuR@GQLZ2X`d@*~FMUPu509AIrIp{NjolMPSY^hxMX*sMqlQNOG7sX#D?^7JV5TuEiSonoK zFf(fL_v1+Fw!!Ab+IC^ok}J=PFC0N%{HiNY4l+kvH!l#s4o!A`(E9hh2`boes)0g~ zG90zZk=@X)*0TmNrBMjiK+amodBj+%8}UKzUi{IB7yoP$vSV`A$ibS`w0Q|U9iEI| zzf4fn#upw&qb)lVO?>Opz4`wKlVh35YjZ30v|sAe+;X0cx%316KWp;(j^&A5jyJj2 zNpT)|qUP_zw)CI}pHe()T4O^=g7lX2BP*Vtv)ZzAuK-6T7c5an8Qe&vQ1LwGN7({U zOG=nH)d_Q%;5_ExIorV@O^okhk1}{&d1YJQ|EffXE-9%KE%95VYbLr*ktI3g+yf5a zU4B8{ts`A8lpa>5jst{ul)U3}b%2CaL#Ib{Y}oh8D+E!E7?O<6i$H>j4rE?3Lw2YW z#mMZX4@o^KinU0a6rS)|Rd`}co?@2d)2!y~%jWO~NXrnc^4#c39o_I2qBx_(PegnFJjB$`htG+&HfAT|0o>jvwF&$`}cjUj5&$z zXg0`rj0*{Qy-R>;pYXneN;U+cj%GF8Ced&PIUEy%7#|lC0~rw+4J;tAaES_+&$X;R8$7Poj6r*~TaY=08H0~sb^%A@lx=2O zVe4*YzA?9d7vc#4jl3M-W&$$huys3U-~Z9RX+U(ps(n)hc0TtQyMwfDXU*h(+Wrym z-F>?KBi=uf>jlySVs5j-}2wHZ}D?a_Ol9idyoZn%OB(J)LmI$_vD2ewHW4$&DWV)H~n9MXUbD0@Z7wk!E@aI4S2#ne^uKBZ=cV0 z73fpp;8|Gq`RMbx&pT7I7+vWycUT?8CrN{6B9^E_2Pyw(pwZ$mwLMq7VZO~)&O7Vn zyf9jk@ikMdNJxS#kq*DIYf&hVA6|@EA;c9-;XZe-HOiQk$1hA&AgM(VclQC9-p>nD z{_(rr?(YCE2Bz#<(5Sz zsZhW0#ZniqFTvM}(76L#wU!aklp$p=U;@pQhfn-kq_xhIn%2fg8}^+-(#QNxp3q}A zzp**@;~xGm1LtTHfr;X^Xg*lA%?Fc5|GGADw6;&f5~Rn`?DZIrM!@z{KO zzBdveikzXsyKa6zQ}I%N`Ds`XUr5+fanP^m!>YG0EkCcef)GbeQ*iG6O|k2Lo)T)_`)joG&>^Rc_rU!Q?&T>JD}p&S(pQQ z`p*^io8Wk&l|h<1(#J7*{G{q}>|7DQdIhVL$8BCwmpU$SVrC3ekdCV!o36O@nG^er z`*6)Tw!a(Kv9_$P?2%((J{o;G)jmeHsVqBOF}Is+?oxVn>ItzI~!EPl*z= zNS5aQ0Js(LPVFSY-2je1)LrI^wRE<=5uY(i4KQnCrG$b%-LG-C&^vaN1>Wv8U3&U` z6|;ZoRn%vhGO^(w6lv*KRSBF_g;G2hN<+3HMLl!xl2967)21Y?+cc}wZuH5+KNr?Z1?6;B|9C zgY8p}i!VI83{tfm0hL`bsYCEqP~n&dkKq68+m@2GIW(Ofnc4ZBzXC~J zcVu9j1LPC{!Q-XBk4|ms8^8MJbVq`YC7%W>6XQBw>&vlb z42O>jQu?}76?zAg{IN$XI|f*>GOY3H^x0>*JIU38`*5aEj#m!4+-*U6DsusjtE|hM zgfC_V@_fd1>QJdgM$K(Se^k4CKzP+cmt_N>I@}MOtrRF=W((>ba_FXxPXwuNR;Odl zs|dpxT&d7FQR9XrcEeZ~f8PNs(AtAq5(RH72aDI84H-usz}`l4M1?V$?- zKsmgE5ULJun&xJU)PV1?5mG_=6zVjRQ+6b{=R=qDp!nQXQt+Jw>$c@Gl6a_|257 zc<1l@kK^>?4Z|bS6)lme2d)O<7VQc8(p3jDEZdg}q=^fb_ZwI-z^~#cwagDWa|=ps z*+#dCRj$l+&BZ6Q)iM*rFd|YS{N8ViGJYmNwFOd4s7?<$;;)e5X=c{2tjE%0X86p#ik_pvRx9F2oLi*FP7h0vWC-b{s|MQGGe|D$H*i2! zb5Jph)t`mJuYa=@6n^lOp%5=YA@@`Hsyjt;=+Y>el4%K25&S!Q_^k+XLJ<%DgAx4M z%Lx;rAH>VZhd8E;v-bHuL*s(O*w9iLL2jo#%}K_kje0yjb59jVU>owQ zon{$8R9R3Mh1}_ix%)_A2HnV|E*<-semNyXk`<~}hc{fA7rB;-2*m7Teh|x5?0P*k zC%Hgknw@Z@hYYsr582f&M|{buk0eIGRfmTbs&Bnj5mtjnLZ_c`%Njn3Wb_B5e2<+Z)b(l)Y3%%z(%+rDH$s66^5V;kWO~&l!kMA8$25)$DV2 z=O~(e+`jfBL_HkIdA_0f!pX~O_BcO(rWB@HEBcTjlC6-LfIf5e9kV>=*!P{?+*Hgy ziPHR0DPP5XnmofGyo)FvGACRI2YYqGQ8~DoL|*hK&Z?~4cXQg|rhRNs<$ZT~+g;vt zm!sYx7T)ha`Q&g(e5?NFY4i;+dIumS2Mi?>_QW#Fgt0(~M;$E9B@y;`wM&HkhIeIl zzH9hD^T>gnyPfh~&%8;d>N;MLsq){1E7sHZyutN&3-Pqt)Bbif>dRrZ^&hfaYeLFR z(iz6Xg)l!8PC`+w!_|{W;C)4wHut$M@rXshWzT2TN-%Y)rN@FEARk{gxDgMq( zf2QKSLo{8OUfEfGmlXKqrsJe5majmsSf0Cbd(mpP?^BfP?6n2FVlc5>udng1t;Q7j z3RGFxIaP*~RSZK26yoU9Cd>UxBX`}`ZPa&|eckC!63bwU=39X#fzha12saz7Hjbni z^kqG;c(*Va1|uU+pB}ROAsM#k_P{zf?1@2O%0>|>DEQCwh*lT+dR!0hqh zCRg8_agi=4Q)asiDPIR2UWi|76IzfXb)wYQ zGNT$zej-nxpn%3(%K366o6A1?C<0HUe~Z!6Z*rR&3BrDcn#R|KP^RK+gA08Fp>HvB$RGYA?@URkY@ovfiy;V6!VSMDVnmH1CPvauA!+75 zw@i;6ZvwhMesG^Y*?Mz>vC0RKrgX(XU5bqwgm!8_+YZ;86D~i%?U`uiZ`#s&xIjLv zvtR~+-$Xb1lHV2|@LMKvPB^`{8ZxmXFZD<1+~GHoHJw{wT$9dWgwhrLmpbe9fjU&+ z)MZ@4dg;e}D?2bf4#--ZW zBIAW|srs7q5wAXSVjtGvC79r$t(=?24dav*w~^?cs{_B&vNj$amr5qarIXcMNfy}z zJr4raI<2jT4@Rd!=M0tF(nli%a_S+Pp>C*03+nOrWAo|}sVz_^0r!#kwQm@w=J`1~ zk=pwC8JUq!q>mU5(AFh4Hs0r>q>;90+krx@UQ<`?i<~EYCn$ zI(yR8lWvu!`Uym6svLp#S7lyYq^y6jsMO6}5qH|^QeK$CmA4B)|H_MiSlyN#u8*QQ z0)z?WkW-Fo{HlEb27jR-q6#0{C;aXUZU(lsUM)97zXI3R-@HX(4QVyx(Vz6Zrs%%5 z=sp?UXJV(lDt+qo8BOnRpo%`l>>TorUe9(RE&Q9Wnla?6A;?_svzv&SfCmzq1!~=d zhdt~x5wTJVATwy#N2<$-Y-swFzv zgT4%J1xV^>P;i=N3Yxvj+yZkQB;et@7IwI5H2*G|eCu~2=%vlPV0>piz<0C920oRT zCFf(qnBUGG|A&BI`MeT~&N9Q)itJ#YQ*DZv3+=3u{Kt!W`?y>4Ym704=GXh*uK7v5 z)nH1a99}rz$@zS~$<|tbN*Wniei7?YE8?tR)^=JcZa)w4^&Z`Adu=b8gXqt7FmlT3 zrDG@kPDUGv3U|9HZ?xs$qhK|%`|i_h1AQjFG?N9LL_0A=bkm>ig}MIbgl&8GB>tT6 z++LnKG4J$UWSN}5+#=ezma=ERAH@|>OfTBpRa~TsBH?y}t^L8!b-`9Cta%2s$|yB$sR+0v{O2o>TgeRT;9@*> z*n5M%qkkKp@gtGC$N7T<1(yB7v@~FynOwh{%3&rjUL=K$44C(CzU`NYUU0nw8puRs zgIparV5Tq&MF%Z?0MEyg6c8WJBPOGhClVr>&YE( z#Gn%Z8Fnuzjb-MCcxw*H@GBhv?8eV!D%nfULc3k5_odT;fE9tQXV%3> z{oSdgNuF8*f!#n6H#n(zaSvW_$)y($KmS`TI!g5E_`-4J?Hj+<`WVP2L@?AUw#H&K zsFR6}{Y|mMC&t8oj&>wW&@K`I`qohs_X-U`ws5h4fb_N5vk->xD=$NYA>6sdjQ_s` z-$_5%GOjHweJ_A`NCCvYe<}vCTp<4R@Xrb2?h%N&+rl5e1bmv+w`KU^Gd|G=z3CU4 zLRgilnDrk)gTNT0cM>#b{#wRdF&okbks+)}+`Y{G&~pfBA%gYuEtX>uiiSPYgTC=c zDacfYnvP2lDU1$M3^_4uiVn97O2>}UYx2#vk5`)W3%sSSNc^2yljw#w5^laJJ_SlY zCnc~*_Gk~sW4sm|Ja-y_8tSuq?YW9#?;5rDS28yv{O&&>)0>g`DYExwe?Hz4eY}Wf z7-Lj)X#2DR1~P*T(LG3y19a0P1z+5uOx82d03&x*L2Born=!ebUe#u3RS;5*r_+4! zLJP(B3sM>k8V{MAO;D&dOHf7K{5*lYeXyxLkjAjb8nXU-t~U~DBWZ2q7RcqcQ;+_( zTxVGKcgUmFMLpyjcXf~Rhjwh`v~?@3rUlN*XQFFt*THgfa6+N0wWiQDx-pZ%c&?k@ zln@S0h}|2{59K55?1F1v*_@8;^9Korq!3QlEB8NHnI?$W6r{>n7$57W5}8xV_3m(c z7cG-u;fX4`%zpqgB%LbvmO}bWY~#n6ZywgOpuRdCd*D8+sYafpQN`}G$bTHphK>k$ zWMa4MwlC1hxCj+CDD4xDy|YO8F0i1{AHgxwJf(_GurO6Q7+H2#|o8$+0uyZs|?9dq&)t z`+Ls~lr#`1&`PK1tbbjEw9L@a5c2yJql88)YHUKKiZ%u*NND=F=M54|if1<`&Hl|)~!B>MXBd(88-01fP$1r`eHbq~;z`e6#lj|TmiqpD!mBCeQQ z>uGdF_Y?}0M?U{|rp^Zl9V*2wwehb-b>|yCi`40;ek1+!biOzgYI3f(zt~no3FBXF zbd!v3g6O8+Za@>^w3rY5KKN0vq%QMH#1HDIkc(oufDw(zO0I+nf~>7c5Bb|Yu;WD? z5NkGiCn8*ssa9cx#LSAsRMztc*Ewm!Lh~~B+i=u#U^vt}))M?|z9j-O5lKdra5R!n z*9GQt+&y5`TeZ4FdNdltU8C-*#OTc{^$`WtE9Xs(;DXYI1gQ)mQ410*^}hF6;K1ib zrr9iX0Uqr0T4$frGJVt5&4+3lteLAT_SvrR`A+?|*aua0*^}J%47*3E6#SWObu+z2 zhA`bgyiX2M)8;W}Y+E`8vUv#&-=3kl4#jmEhJKC+7)s*Pmp5}PP7_DB;e}7BtxKO- zgTGAHr5pLz#IxpxIttd;K}cvMiEfeU$A9WPHY0B5(pdlZq=@NbK$;(l z6NFy7NR~oEXrWCDa%jCgTtB^ZqDPc4KcNBrr#;ng0dDH(MrPeMFp}}fZFHnZJ>LR$ ztFyDr3`WYHj)i&&u9e}!biS9Zql{x;Btim-UF;Gyb96&G_Q~C5bD6VqLSydN0@bXO zKs6BWo+Dv)UoaFD-AyYPwJ0?har6rNA~JdI%j}UdbH*51fCeiPtvGhH%swb&lpfNW zFr|_f>B^wZHTU}mUG{*P3zk5V2m$UrdI-)CM3SRODGX*gx+Wx%PFhb%24!SpxFA3Q zncNf?B1#156f|xeO4jLlrs!1pau~>!JkXzvj)# zeGmhBPWVs{x&6q5REp5;27*FNvi7s=M+^Fr_WK`7Z^An+j6{`cXX{{JiE;z$5#uvI zQRz5;pj`jFb?u{6Vvu2_RyGA*(N2~RlDup_6@7S4>zbIcN`CF;R!R|SSC0? z@6}O%PWsiciA^AG)?JY z*QW`%Hf&*0og~X!TS#RnVM@ZX(<8B(-Zf=X0snuC$cSLA)T7<#Cx_@4*8>ifM7jFB z{gw!>&W|TN;zj_<7$%fmhmx=fEa(k|7oC;IqV-T2dw3Y-OQXTqXq+LMG8D}Nok;l6 zp{-x|3`6EWLjxp(4;vMZ2`ug6=Q_3V2MmDAp)xs}B1Y1M!q*6)Mm)a_4|5q~bBL3vEiK0e5JL>n<(l-Rakc>UvA%I0^kYm z1>i^WOnJU!Z{lYd+r}*OHGS>!p}VxZ%eW^o*Qb$YSAbPwuP2>@txguld$HZ#JpqlW z7@|wcdtLf2UwiI&etWhB#c|H5pXYb>nG|5s=~Gj`~m zF1~wLPGj1-HL51Hz_}peJ99;7_gX!-Nds=!(oNO4jgLk=mK(rqYhMP7c~p?b>hA2P z`_B1c@N;VNo-3JQB>wbvZ;EtaFoE4}4@&B*(x&`r4fKkH25t5sKxR5|3a{sh~4yUzAweqL^-EtNPi zi@}|bBSb*aTOgQGD#~v@zb&vw0aS{A4DCn(gS{(7{E z#x#jt&1%f_C;Vfl=&9LX_m(0MjqLS~K)my3*1$>Rxm=K74RU{vZuk>$QShK=aP+&I z_bEuGZSV|hT$$ckv)_A;H8oClsJ$SZTOn}jo$R^NYlNmzuDBscjg0(c#jkz>yC6no z*furadurWXq-j)BX3NZsCFRQ-vg7>Z)wPBgw4)F*za<0oV~TkL^jWpOr}5czY-d4} zt{9|C35r|MzZ9vBS(??O~9MapA6jeD(gzaiynoH+I7>&Sn#jbAN#5R>ur1_XoP;v(631n zLiXhx6QdZS-cP}U3me(66k zlaf$Xz@d&#nxj+Xi5H0{+I!DND%^H_1LD(fHC8!Va=c1)U1mJFYtEp#`XJSaUIjw0 zR%o!RCP#T(kr~cy~d|qZBwaznpR_D-mLv11&tg%x!NvH+C`s=Hl zZwbVxT9GPgq{_`Ll$p7OGFfef&qn*I8x}>Chs!sZBz3vV{qC~k66ES`Iuym~>GzAE zX{bX$liSrcf_NhM@Oj(xz2gwXX#Sx$`OirVO4c_s ztNs0-7WQ{=i;$Vt{@zB>U|H;0UY3P_yOlW~0 z@|w5V-(d#N{DU);lEdVP0+ZH?@9>b%!)>=d;`IJ2e#9wV@z~E?YVHX!H5J=+rd4uY;I|mruSEjG zbPDU@vHnHHyIOz17BAntZGXPV=kM=i_PpiqMRsj(f)7!AMmUVo2YB6t11j7Ev#NB( z$<{Kb(WhbyX0Ql1cH<3xiwZ|p1^}+-xmgnnjQ+*ObDE41d-V8dm6ZU?#Qt`xAfbtH z|EbKm`+>Y-rsCw1kMHH`g+JAsCF%!#y$hk;P$aaa@}>O*lEwWU zmcfxm|AttDu2LU2^#Y_^cMS%T?izJh75@20j*Xb8t>?E_Jq#?$Z`(u~E&ZRXrT^EJ z=u;_tR{$SyD1(9gqu35UCd=f*dk>YtXHZq@Ws||DJ4`l87QX*u2Px{KkQrUA)r+=# z3{D!v0#>vtX*rp2Pr*CU!&@(SX9?bpEx_wwi%>J4YB`q=Ya*aG$zk)7Qj4v$a&x{ylkWqXH~U{h>=JgphyG+da_ zvA+Ud0x*{Kx|&*F6G2`ouA-EGnlI6dd|j+Mm4RRv5!*sGW4}Le=%EVaHu^1U4SQ0tI zTk`MtSzB;e;j#yDP}i%;lJ?>=<^m~gR;$f~bRLe&x!G_QI%Kmw*k(I@I6Ka_j2rP7 z$88+NThxI$*y#ye&jzVAe#euf+DxF%)uiZD6HSF+#Cssnv-nQ`e zi}qIP>sqJT+)u(vpw5m*cRa0n!2jRuS8~NgJ@+f=+jGB?>mPt(J@+dylT|YRD%!6E z>T!M*`&e9w)z0r%0uy@OuS9#6?{A=Z3_Ogd)Ch z;H=Yz9x9=2a6|m-B_n=_|Asfbrv?Mi#Xq%wbWnWy53K@ac$I_g(kgug9OH6BOjs!GrR{Eo{igavQyO+1wN-crJ-&{;C95#|@Nb!^FYt$#76>jP3Js zuX1}}>(IK)F=gXMb+yJgej>+a#ureKb4}_7myK!Pcu-4LrQ*}CrV{pvXT36;^^dl? zrVK7~@4n&Qv0!^Sn^tJxA{qc1_1@Hrg3WA}xA3F5&|aDd#ds{e7IwsF*{u$^ zJN^plY>Uxv@R;@u2em#Lq&8&_fKMvQ@GLa5Qny8=a%&)83%iADWN7+}Q^z=p(edb< zU_HBth|xM^w!4XU%;58*m-XAWH!6zmjtj>rw99j$q=I981qbHwDX<}`pe4D5kIO&v zT7nO@xaXQsHt$_?fu8M`TJ$LAVq%<4X}64q|_mBIp;YcqZ1cxCbZRxcI+>evOSX zZUOqM-ug`F-7+_zk9V|EjZQGyzOOVa-gzve!RV00BpIJR(Uiv98+DpHmEaaT(FsOV zFEgEB{}+iP^C(xQeE+m7qJ(S zU5a;(=b6=aBJsdT-8rkEZBX>}iL6-ac$!a+nKhcDO?%dUo5Zm;Icv($uSRMrTY=7y z89H&)iYpPd`FwwTeBsW0$JBn*I*|T^sr{gzjPC7ettgK#?t6F4P`{Maba}qhz}! zhk3fYi5;2P%0EY_p}Wpqe*L@uC2I915FWKdyP@{s>sypV!vG=6KIBztsXSljoB9>; z6cL+#Ef2Cf>x9?YZ~N=lt(4ELASE_v-WI@L?9Y=BL}N-4;Mll1?J zS7H)6bju!-K%a%Av5~oaJ$VYVgO*ohUc%n0IJGLb0x8+=2m5gE6U#m!&1-a|dlmDB zw(B_?)h6N{+Ww49a`D8Ub~6>nvgUvu^YA~3MLr%iz{3YFbSxsaQ@8`N)j|fNt?5|c zhSAQ$nKyJ8?Yj*gZ?rjkMDe7NL(+E|i%fbo+S$~H61OLEPciU)pYAiU(U*TdY{Mhp zv_#aQ?$Y&!{kq>>e&;T~c9&nc%gyd`gS%{Yms##|%024Oeozv=c8|Y*C>%@TNtyOq zLl&weU5uO=bVZvmP>)vq3~?%a^(!t9lJJ{hCy}1XUlo1%{4}K#)MwY!iF|f!&lTE# zi{}ke#m1sg@>mD*&wmTZXBJ14-TDiEbMOL}(!lf=2ylr?#ld>ky|BmFcI-22P6WT3 zG4#^S<>XLX-cm^xkFVi$t6=eK{d9_0l-j0;+mDspaCq1|4rM|idfTy%$--NSZSZ!3 zac7n))Jnm|&n!JY8$M|Mlh zjlWunxz?GMBm<3#qj|6__SX)d+48+BRG8-l?03FMnXT|2cY}q_u8q1(CGbx=uQyrK zvX)H6b+-CdfkdX_;pyb1p`DR38Kg?4RgxMVwCyQm2uH0V2?Ckne$*wQGxTKa=*cXLO7+w!g=JuI{aLTO{ zefm*X$m|&T#lW&jw6q3x z*nz#iKmJ_Han>In9bY(}V>Rn5Yaeetfct^m53F6)x*N+L05)00Jb8D_Y!N_k>R9Q=TuCAH9pq}$TP#czlHE7PK&FbM5CM{^7zNUAy1lntn zsj=uE-B=bTJnad`E%M0eihW&W3E`4ZjngF->{>--H~nYpm2F35>DVi%pdhS9KrlY4 zO2>_*G#O%tq0(sK5$-pLx)Cy-$^at*J{fJ{6CM4q=>j*LT%BW4qGBpNoWMhu{nR7A z2V1HP57+bUpi@}(D>yJa8ffbwKlJzge3o^Jv9~gxWqHyJV0>W^=&;Xw`9vIGnOnMk zB%^3o@6Qv@A*2s0THi=^v^m{85=lYyOJc!=$}pH>8GX{qtm4Yo8kxs8v6WYII(91x z8)U{eYQW)liY!wT8iUksAnSc{Om!;kfE3o`flsTKLO!|lwC*8oBIMPaD+B&W3? zF#UCl=loEA6c=S4a`Rz()^w(?DZX&F%`FiP#!!V6Dn9)cNpXH$1n>+IM*+GE$>u!U zEDF^$s?bo?NH7Q>S3O{Vi&^i2eHJ1fx~(S6bjoo;uZB{3O=wP6e1DqgHK9=gJHx6! z1{NGc$?<%m^-&XG3)8RDR{)TyuL1;U2YdSUvN($LL_#rRrO+e)t~f#g-%3@UpLF5b zmOi^ldA+}q*Iv`Ay!N2yxhRMi=Ovl9o+mMO#k1!jp`wGM)LBIKM?OR`@e;X?ZjZ>NB{Rn~W>;FjBZBt5 zbBmz0ZaGLaQ~f3RsR0m8=`RPMJRu#%-o$V>4`6uhKoO8?B!-vx{o11G$;Un#^A>0m5vR*!mo(%$L%>*QKj`CSz15UJAp`z8Jj+36h2SPj92z1>W`9 zrKJA&46~En#xQ#sx>SEt@hutks_i6_hyijL{#SHl7Ns*{@?3i@`0WM|{T7GQl0|>P2&;h5zCU9p|;h z=ytqaq`*cXHWGHgMdfw1WtHu0kZu{;FsmO6eWh$s-&hD>8w@!0oD8#m#R}*#gMWHi z?#u?Jr`?*G?F<$u`fpcwZ)?1YzV(Tp$kif;X5Ns$05a4svF&p+vEAr}=5U zNFo|NU%>W4b0>OgQbbad+dZ7*E|(rbU+jJu*eAP-g2;8xm~j5#76>K>*^OQ^DTq84 z(MuHRL7HOyi9v&=)MHM}zOL{2qF7YADNtgo3KTdP2MWe>x+zdMcz09S*G+%O7}>nH zVD;Mejmco})4`rA1CGsup>5hW>gsbP6q2kUb0!+qB8_@4e(eVaJL6qC1bNsaxi1B5 z>Cy4(Rl&5!+j%u>=RJbO+3jp*0119u2BR9MeWbUSjt>}&;^fS!Y)xLV&#$61m)qogsl|6_E&qI<+82?j%d9F!EQc*ek0Fou_ps+?P&1OA+ z)qcXYVb;#9uDfrjh$cyPIL&hto%7a%9K)-33MX`>2pB1hvmCP4jRs6N%c1tvu;9pD z7ye})LbRN)##`ZT^7FW}4+wZb-SW#?+ zbed+H%xXB-0$~$jU~yZiQmBC<+iPt~`DwjP>_~*Cj&O~3Q>8}j0@txUaF_TaZ@lva z^$V;D1f^nNbrud-74+~3SfQzhRWzMvv0N#v@Q*NaksI>yFU4g#fd&x|VX%5pG?fUiI?bhyA%S^f zePX~MM~!w$b2xjY*|S0J^3u=X_F(ye=&u{U=ZI}3_QC;2GQJeL~a6uH4{7FXQC&-MKG0zqxMo5Z^C8d6%_%4a3l8Yar+if+1I0D zZ+k;!<&rI<;zP@?-v}zTMK)UvBWY@w?kCeR`;0!!C8KJVkbC;D8@}VEkJHw*3lvlm zvEx6v>^pg)kjM^T$;774+NaO`?4e63qrC|e0e8=-3OP;|w%#P;N4G_^iOi0a`)6Nv zDf&Qu)#N(7u*U}|mU)xd_wpZji6DQ|qqOHglMt5|3DOr;KTMZ!pC0wJj`B* z)LS_!H71saS6N}I%We`gk~hE%EtiXo6IaI%Dujk(>X($puam}Os}RYFVwwJ<>Vy)S zr(Y5gT6>}hGl(p3UDqiB!_X)XH=M%Qz$@Y6pU`=_rKoM)D$F*?FP}9gU_!K-DCb&X_rL&wxxPE9CMJ393WQD4{S*s^$4)^tN z&U?wjnTfhP;f-BI104oW{yQu==rT#Rj^j2p3F+F`RiAA{-B6w$^5=Z54TzRj{^4D(rD4(91~MRv%F^wPylty{bbx)=N6phu8bBL}N1ynR(Xz z3AWiO=y)Viwkj3WNH)Xg42*7x&P;6Wkso?p-h5IC5n#kY;CM_xj@I z1w=n2m0qmAPK3{l&xb0$OGwZVWxyw}LEi1(Wkm039aFwd;b0D(ktP0^0}1kRPZJ4zEaku%pO9%`Q$(^} zW?eiz$1e7+5^GykmqDY)ZNrL(C5d4#umdmxnr0v1hLNLQn1l**hEuYfy$i1Fcj+BD zYU$_V+3>+(60m5P(RIdO$WwZ-{OhqnmEBk2wfzqT)JzL0-B+ z`7#|>!4~5yCm+wb_8jiHI^OZB-e<ZO1kKU!1q4B4RCEw^`x);0s1Y?`mlE^WT^{z9!R%Ov{!hd*pfyceJvUbb=1=$Y z?atlbS#&Skr$3dEInf_Vu;54+LxmHLb|MPS<|@@$O0%Dcq)Ye~_VORpo~TA`m7dC| zz-eUkk6r%iW(}~k$~0$UADo_`1e*HEn5foF#k7&UOO?ytUC?Cyu3UkIw(k|O>+yN8 zUUn^YG}X%1M!g`5Iivovd7Nk?7sBAM!MsR5H?B%A@s6K>GidHa7=pH7|5;{Kczx~7 zAg`cGG3?mSMM1(cQBb{hQEyK8+FxIV(_%o!(q>yiR3ESbnb}jOQd3@BQ95zH|4!Uc zTfK2&PIz5uean+=6sLT`O;31JGNSPEWI5v(P`CU$TENqKB8h}M zZdOQI!e4Ohhz>;eSN{>_`Uq$^f&vek-y zgcti=_>;ML{~a0UJyk+RTCa_w9RxzK4Dd~0PJt14D4^%>27*!92~EqI6P{X9Q+WGq zEYzRr{eGrCeL-^4)4mo-O=gZs&He+BmH0J}7$dgAo3@HcX5?k*j1&15Xy$pA|tJ53D2ru+@watsz;7@ z-z9Px1tj&>BsUFqQ?T$Cr6HU+ZiFj|7vnQtma_Kfzc!l{zs4&vGIdI`%tCD^^Eu8$ z@osdAM*wk;=$#tV=(_!>Gn>*w&N^SV;QI}VFD^2*ReC9PX2XaVIdFZDSPaLB&Yu$V znMFc` zz{`5BNieg#zFAf4!<#^3D*JxuW)1smX$l2QQm9+~*8CBPp?kK?ipdm{6gD|hSrffB{j3Vdv$n`%@9b-O zPP+hLZULtalAwJjKJzv`7{(d0&8&fDjH|vWeaLy|itTL;`8|SG1!d23z~5JK0}bpE z{8{F&NDc(#YUSfn^68TE7sfg{Z_M3aLXoXfGpzixx#0_Ep#c4SOx8{QH#&QPj7%h^ z!2c$Ndwrh4*oYZVQ6|1{zz2)lGMLgOr>?#l_Z$NPE>W?z?JC2=Bs! z28hw7Bwn6-*5l4f>?f1s_viPcPgRnsgc|znkDyYYF!s4W+SXbUF~XHTF8J)0!cihz zM2&J00)R}NBWi>*9yG}~c?Od4&!T9(xWAj}9NMIS*p}!VtEQ)|vl$tw1#X5$#$SnQ zluFFY3~T0>^&84SM8Pl+uZOQ1aedhgI)MpG$Zl3E?Ovl12Ue1k@X)04fJy4{>A#f` z#JIH!BdV)chX#8>mR{3H8l?{*@ARkp_3qa0Hx%9X5zYBineym9g)j)ju)lVZH+o^H zRGr4y={P^seR|K*`&=-roJ4JLe|)Ze^w7}xcJ0w0pY6Z1QG6u{4>NK}Q0UYf?aYOU zN2xJQ>DVscKqJ6^t?C0ZP#%K~=^Wa{1O4fKg}b%;l|}b!itg7&_wdMoq$fI`XEMoM zcJ;?L@cvHy&iB@%BVez0JKd%59+Yw4NI~c$3xJ|-$1i{Hs1pwMvteMV&0y^Gr(4YS zhe>*|nYL8Ygl1|I3w5_!buh&tEDQefQPNLOBIKhj`=RVN1&{=eS!L zoU!*5tOSN$wSB*`)JjD0w;wsp#8&<``X+j%&-ROV|ID_gLo92Ijiu<+L0P@m`KrCW z4_~|*ox33)#}({xrgLaRUf-UOeVDe+wY0#=2>Ryqtkc(=pY_%dUwEG#EyB+C|%mul^gacd*9mU7|O=8?M%&=T^mvGGRn>?j!wU2UPa00*pLdKEpo(OKy_q5Cyvy zlq=ln5o}iH3N{sjhjpV^3C~fkE7+150E|(trpR<9H$!df^0UqJK*nHV4Jt7BCwLd8b>#MA?zJRmUgoa|86dE8B zEEscGXQ4j+k;B^L3D36gqnBfLhIdwV3RneZ0fF)Hp*1;? zosT9%>t$grTuk4|`8&TQUXtuD(IXFR7a0Q?A5U#R zW?rs@df+{^Y8VU5;iOfg1yB!0R31FJDtyod-SF&{q78SyW=>TC=rJN-nCEh4)I!mvy3X}KX zoTaN#q!fE40$4&aP0rx8eQ$5kZujUj6^kKqQj&23FcHrD!;i)7zKcG#|72hk-#h~@ zJ9E?|@;H^1kq6uNyE%sM^*R8=Gcppnw~ZJ#+7sg5!rx}k7YGN1Pn2htO0#stzdA?N zQ4^U+IYy%pLRrC5OH+?EFDxP=eY-yTp@K?7$q`|f)Cn+rr$suh#^>|8K$k$>UYBQnMx<6qeMM-Vl|TK@@ja!L8X_P~&pJf&&K zH~6Hi>iVtxWDV@LhV14dqT&_)sj_Gfov<(-?Jf)LjyuBXgMfW;H{$Jm0-;sqp^oy< zMhLS1q4&@Z%=S@b-JRv3Wo5fImf=jVvf$R#KqaW6y1J@|rQ5ug7uC8-(CN4_{FfjCy6L12=$40MGs5DR#! z;uFMBuiF5xh`GE2V}+m`+h90?^BPq=ARKO>k#0OpRQ0;~!p`~6h2LcrJS;!`1HWYQ&Sm_KzQm~e93U=E5Zfgc^8@FS|e0{~;Z z52!tc%_|;wo=05bk9iiWM|p1dJa>AYyUa5*mk2!uF^zwdp{^RlsZ$$%qK1c}@nq0$ z%r=AHZ@`>T0&`tw2lk9ug0oXXX9v7t#vX4fuYm`kog=N(5?@mgwCb+Kl*?{^^FsQV z*j_aCGI2IVOH9|!rU{;@wO!l`{F9QeR@VC)Z-G>LmMYd=&GWIbDKK_Kb}Fvp((|U= zz^Iov04`#N*h+?#R_B4malv8e=hxIRvd(`_^K7$&CCa{K_=ybn`J4K&V`Oz|ZsHed zj!ttW#r+skO@NN0tW5&;utAr(pk-Gd!r2XK*_z+0NsU@DF2Y+l;G8_9RUUPp8EvyR zu%j?$4rln3IpZR`#l$5@Bo1Cats2=OHpWb9$M%nc&jrd?l(tmvyiW(@hco! zgW2ll^JxzZrhtwNQU_F}OK{U|o*CR+*QrEX3i&25%5V=4X2k8Mv4a`)E@|p5y)MUy zD6{Gbd9ZXl!QU_c{_!<$ci@qoR7RaP{3s?U)rQjii$k0d6jw@St5#eoHpsd$vG&Cl zYtMX<$^L5pUS!#|Ag&+#t9w6?w>pdB%ZD?M6-cxF2Z9tVSWnzwuuHw_VjYA~qGiG> zIwS*pDJCk5Yt1=#4r6y#i1B=Ki0#Ws;Tj1rigU(p#Pbhxj*=`+%{W+ueenl~CfI{K zigLnwLtoChI3Ns1aKHo)-4goy(C!GY-wT932(1Z(*4FRK@K5#OMX7zs?y}J8($K21 z&^~MZzYr2GANY^JkWX;Y2joAc#J{jRQ2dEMxR_iWPTwuFD$la-VO-|WUH7||F?rZm z!ayx_NaIxb!q{GTN``gn6ey2(Yb|yR4v{smMeN0}Jg3jcN>}1-2}a4ac_$aF059HD zOm2Y}p^vt}-6{bXj(iMjM#PzOr$cN9y8;<|=w z;m`OeY1f*I2sp}wzHHp$pLPw9uXJn*NU&=YUA*<52>MqAhP+F>TgC7DgT<0h<6Uk# z!xmkv@wfpSaC3?_Pq^BP|JolZbsxqZQKyar?%(k@U8nF?I9l*FgvkN$24fK^KnWba z(0f94Xp?bJy^Gw-hP2~Aq*|DC-|AAS^$jNbuNAUMI`NM>fVAQty&^*|U%jg7o&(nu z_EoBUWe3a$WJbc#2I0mIxH;I~{@tPEqxhMAtbN+=ULFfsVUflZROU?8dxG`erg8 z@Jsd+@kwz`=H}%xwM~kM1P;%9W|;-3-SE%}SVYXxG|n!x5#5TONBCgcrsw6LFfMwu z2k$)Ag5Nc)S4m54UPgeuh>3}7)e*LGI z*&6uOkT0w-JfMkKjkpen&-sHVikcg?frm-p0G%4@K&$wRaq}ZzqXwui9OFWV%Jwy{ z+Al+#cA|$NDqM!JD4fC&H9*vDTQo!5b)1JGKy<|r6?gzctQ{>3aVv|~SRuG&vij~? zz;zb231THU>Z}^Dg$F;6ya7A?8yxnDZ6)d7SfMWN83n|9VYk?CIU6@XE(T&UoYH)@ zEES@rC{!G|ji13@XpQWZD|zrf+SsB{YhS*5*XGcg&|2JF!%EkGOjLFc`35@cD+X*l@Q|SRQw=pa&&b%jc(yX*ZKgWM0Vjm2D<=(({~(V>Nb2 zS!#|JYoLFj+Ii5TPRy*f!e?WDa)ty@%Zhi8zcf7ZiPG|vOYOcZV4)7VIF!C3IxP^Q zv1PZ*Pu_;DUaB@z6^AF-OANPDjwYeVxhtKWL2aT%vQ=`pN_wlL>*wIq>*7aj3H*8y zr~`ch%-%uH!9PRWmt?TBLR7Rokp`~YxIH{ytZ?Yr@4i0gJD+-6 z9ZoMIC#T2yVE;4;+{XD+jQ8B*UkI(2-TF2TFz7!OSSp1Or=fbBF4v2gs3H2{_ta8j zPXampE7H$SQG^a{C=D$w>hL!+rdQAz>KGO3TL0;Y+|dJ9l@3`QurI~cIiLH3?f43J zBXDeYX`j_CSDoFBorpiR?5nZoYwwi#l#MDxi7x=n3Th3_WTL2+G^5G}T)EENA*31H zCL#t5fk|1j+wlU#KnP(ezLd(jj*Ep8!Cn(%JEjydTg+(0nCXI!_1j6k_906x`$G69 zJICh$+){$Ol;DOsqpvxi%@#_1qLO*HfnW*i(PQ#qBZ3dEQ1&Py7GQ_WxP|7b2}jtY zd|~)TnH$5%6q;|Qn&&89?SFV0d|w2@a8WjKZ(jn&G&xPKwSM~xslu!#^#^4z3-yK) z{X>Cp`uYG|NHOYm?Rt3QZ^{g_$M8LbRrM;243z^ML*?LL4kz@^2w0$kfu-tW&pAUz z2ue5{=G2)v&yZG_{6lZJQ_|UbK1NUfLR}Y03sdsRD}a1tula<01kSir;}!y&IZZdFAjUbxy2#p>brGOK@B}O<6hS`{FFDSoe?|EPQl89`11pZx zV^{l|1A;A)7YVb}(#7$ecZ6D?Z53>=?DR*hj;&A(yR2O}Kk6G?h_F+~33IK2wFE+N zSLj@GBF&OvH4jr3tmO%Q5Hhxl<|m@<&nHjv2Uij^_OK8Z`hHm&_U#^7o`Qq;>&`%^ z;7fdhXI%OvMNuBI%!7_=lzy4ZH__(_0u~zkLRlJWQqp-D7A*!1b7&cf+(YR?&x*gn zhPn^|!ghkx)xgKN{#f$_Ahm!sET`Pzj4a>bce(M&@xxCAfoL-az9d3D^$AH1Q%S8# zzMjRGME*qC-i87-^z*k8Wc=~jQIGPx)APLBJY%2O&8A(MuAuYr;SR-#qTC^P33H>i z?-{p@%t#Q@S9+9Tdz22gh5n5ja58?v$)P8oFYipfG$VMM11FGV$m9K)@bB%o%TG{K zE58F827XZEU+*xGn=k+Yc|ijL91FV{_v0Nkuz&m}D8{7cN!&s{O|U;|1jRY(huJ2? zt`eloHDdAl93vL8Vu}h1jG_hN>$epabLq=s6CxZ(Dj^D<&^D9pp+;m^(v9OB*h9QD zn%_HYOZK&Ne@AQ+izTWqhUn37m6js0Or#p#!SrzC1dvNi*IXs>)44`Ti149T&ZK6K zf?{}jhe&%|r-}sro}Ge$Fr9Mx-v|;sfU;g^0?#q~B;$==5I;S~8z$%=`*T2K9bGM6 zb8o3tum&-&-{fOd4Alv|W7DU72?Vjz^12$d18F*|OR(IPXPPrnQS9QI>hg;e#^>m4$s@or79LAYw;-`J18~fMVAmhuGQ6 zj>2h32nKM$oPA}!a&mZfF6JvX;vDdie*0O;FT~&oF`PyYqqc<;4C?k=|7IIcMrT9z zcFF#xavSU(OW$UAibz&h^Tk%nb+U?Bpx_3#2ySz;ufgs$@wQ=?aM^=)n+|!7m{M+2 z8;a9yq7-=CrW5o5Yrr&(n!3ZcgmDp&Y9jKAJ*npd{=7K=> z%&dZOR$^x=wMZu8{fe6w+syXvZwYpPI4$Bb!|ibX9CGy$H5kByd{sd|!*1cf$_#ae zc;^EX#6!ghKb*OHIC*H$uLE}aX6%c=RJWN4@4Fc*88(A<3pBKD_$33|2k3>$a!&|T zBUS;B*XXt(zwRY|WI3y3vjm`syv^kxwy#p>rJ2qk383u}!eP-|=l*OHumGM5Iif2f zuT|m5BvhlsDR_#>KlJmx3FrNwuYa!4qTcUt zBkFeM`vXq|vLrSKYeg%Ng^^{>GUsqqdw}zP_Pam!2g5`Ql<*EL@@GCGHYKror3XM1 zUQ^3$93cB+pT0K9{@A$w_@@mZp5o#KR``7IR1bE#-LR8or~lfr`z{R+e)??CY74Je zmgN_HF;JVd6uco*<1QopF=Uj$9k2*NjIV*U9~@#_O7YHxuwi+W_Kd4;@xP4)W$Rq<^*JjG97 z@h&;MopxKd-hCQd|Cto8djLhh!V4$jKnBCua-De@zpSde6o4*24qqPFZN3awUk2mL zANb|52rl08y>WWNA+ni|;iDBY-sZbl=O0}UvwLsc>&1Ni3=lQ}%?rN457_^K*O9x( zBeu_u`@;PKk%8*V&2eAuK#o$AmGh}<1eTfyaWdd6p}Yt#uCYoenVHamOkK9b{G1v_FZ zN}>x8hnbfw^Iv*qmV*qOnLkEnk4xxmoIEG=Qr#3ah9tq{V|(o-7Irt1vuuoPW%*ys z1=-SQbR3Oi7@1IDfPZ1CIU7XK9_yxa^{t$DWi>^-LFZSzLFX|cLmd9^#oF3r_aEIz zsJL~w_CgmbiLwB+7*wM*R8I996eAe~>2Xa3`KOY&F9PmMmN|dAMJ9spx(ZnOg)ll7 z&H%K>2wH25Lt^kH#n+WCzRq_c>xr+IgI;{uR88*T9UfFUX9`p7rrhmsfzUoYhXi*L8{dM{zxPo!kQc!ej?Jf+3}=Q}17-m`U&l zlM)+DQ-O(MnaBf|4|9f~(dfgZULiT@Wm4~jczRud_Mx+gXXw8ia}O1Ght3Sz#}Qki zp`8WZW&w`OXT}pLRW&gMADt)C!^ABSEKUXwH%V^*#9R3|115rS{z5>mxVCPm~QopMXp*(UK6`QJv zanG@yiiWTv6hg!Pg;%BK5@nT`SQwaFv>N9df$6Z_zbb{&R0966mhq>AM$}Jd&t+iF z_h2b|$g_VMXF}s?g!AcFpP0nI3N|bMYA!yeI=AkFf7N=ncvUBR52+W&#Ebg1Z;_#}nl~?tk zDqfd&a;*62EWRYMc##ypLKlCNv=3#Ts)}zs+Ebio(Kz=d7B7(E{iJx^&rvj275(fl z9>8;1^t{BP-<&|eH=azudF^E8fAC_3uR1Tmuk!s3@2wC#Q}IbAU;~0&JGn6KbroMv z1Iq4>dtHXtk)dK#e06bO&g7Skpgg>%OXQ33p0fFc;WB4SIkr%R>1M$Oq(bFoSpv1+A*7j_fmdNmis$SANZ&75@+xme6Kqw z_xJ}?KMgOz33w0`kPk3@BvD(r!V_Fj0=(on@9N7BasgdBg5a=hD5Co$9vRCyMfits zU~-xK0~yb43FPsFqB3f7$Pyb5;+!UD@>B^-Z3qAfms5WOI0)ita6|CFurOF|+OZ4@ z0gNmxn62Mi@1NR)d5i;cJ_&?18M94a9to^0%z*o`Gc?HYtPPcF3P{~@-$#VItLWo-!qpwHL3u zGmn2>XqXXCLt*6aM8o~!V80*G{{IP{fjfYI^K;2qFs@DKgDD~{8&$GaC974kOp^cW z@)Kx382NeOSr_Rng7TCd-C(qGtvRd4|UZL z0kenv7%=w>|9(FtbnL+Lvk~hev{d|mC_meucIC%I!yfYU{c&(`$nmnneoMrCQ1Wwv z0-q|}1Abga=c)TeerBm;hDsh(Nl=o6@xxg#M{pbNfHMqRiGO^v+tr+e(`%0kJHT3j zqiND~4D`?o;TSJA_Bp}+&ZNDGv%m27wj2}l_mo|%>+L)`S^0Z!;Un%N8iOd>&WG^N zntQ(KHcR3i-tR&yi6How$13NJ6RvRCCS{6q_m{gBxa8*yT>2sMmoSC034?W3lB;@R zXU>vBeU(>?f?217=+5?+Oq^w93TvPrWNL?L7S}w3xzAwk1)khIwFtRKCCz;bb5HZ+ zRwuOj`X$YMDsxwQa`#hpe{`4bXB;G_G50B+-2GMVMM-myW$ypJ80%%W${k9Y`!?o& z$CFzf2ua4GS>|??CX(- zILAzlqerp@ETL|%#XUwA)`_JU&-L)&HaM-m&o+wF+R2{55!9}fbIz3}JcQWU59^k2 z2)jTv8IzYJ?VaSdmyNcJ*XybH?^ncC+{KF5xP9Tncd1`{(VqIJe24mFzWXVXIZoa| z-voafI4lv;vv(GsvYa35y~|k7k5~sTaXyspFCtc*ll?HT74SEV5A9!6ns>(77mv@a zJ%dj7X(Q6=`Yop3gC_L2+9T5IddutRCs_J0vpu?1{o3SQGYX_HrSpwH!jQrBHCVtB zk1y%ZGpHE-si97+rcSKpjG#>NVbZM)r2r!C+hjJxy9a;~!`T%`hHjzjU&ZlNB}d^C zt8qQ%>4es4g;A08`Z1WT zXo-K(yW3O`RnPhnaQZtP#-V7)UmSjW-fylpwd91- z^PF)weM83cL{(d0y>>f>f-ejzPig5pprv#`s@x?ovK~-OT28d&f{ielv0x;; zibuTqOXzvL@+ZLj40S^uix6+?6-ez=Br5Lm+Z%u>e^4#k#LS;;D5(FY-XA;`A3&e4 ztcGvc9G2CQmTN!8V#Wc0hpSP~fleRxBSB;EW5guBIo#j05qU>ROk%iy{Y5F4hSOJ+ zg;oWy4)=A^WR&cP#%kR5(L328#^kvFR%7~TppWK z7TkA;KgdR&V_@078lo7UGJ4p6Wpdvr@yaiGW(d5z>u%HRkZqcf>;lZaN(>v*IZnyHls6`_0L^_B7M%xor%pM6A;Suw^^ZrF zr(m^m2q)c%0CiCK3gse{IxM?oV@ZIG{~(b?)eASX=biILjc9-cD*2sC?)@Qnw}aL_ zj$i%LvU~WW9{zy@gMU_mIR4;A16!@oVdW?T^g-ebHmn;+hfqOf;B`wB3Cwac)@r&Z0H1f~+ z(3479JXOn&6|U~I)Q`Q(B`ILI=w55gYWJ2aU+@0^yqgk>63 za-T{rCC)59T5;GgFq@vtXoi<%1h2fXj=ryqD_eUE-Fd$FS1!o4C+ew=wi?O}HT}0s2d@VDI<QF$wp>{oFCMSinAvvkBcy%2A z+)L&X~Szo9-)fd7!5@HhX!g+IQ%I}`C0?ZfIY6*da}+I`66ks5QPsLiveA*etj zOzR+k!L?O9Sd(TvtFgU~ohuQwpxB&0MX3oie|d1m>i@0{MJibs{=L|6^O%D4}a%bR@hTUHT;+<27M~<4-RhcmAaN4_#x59 z2~~&&P+FST9|Y{j?v$ABD5}XT(;d$%(--~9_6?2oWrNT3WyF1=OMUDMugi_6_s;=4 zygtT?fP0ZbD9n~wfB-ZfVTD_{Ox_An;~d((mSBqTCiR7bSbFzlO<&7|2%4^TEDmgUk%JC@z33!wT-s z^#=*5WzXO?5gh)D<%`(j;a@liZX&kfq;B*t+`_G075E`kSxgGyJ4VD?Fci zk(Y|wBXF&h%=b1hWEBX9GMLyiB;m*)U|&~XwrdOj>)3Z*V8|BBo;{E)2Z~qvn;!%! zR|}0(AwE_i?Svdy6LWk8UzX;%CbVzeAxHuVPagcQB_7J z4Fn_dvFIDw4?&X17m&oc`ZMZ&Ra>NknFs*etfE~n0ei0>sl<~|0g&3fECLDQPs+=6 zu8w}#P2U&?d@^z-fEeI}5b(6BI7}|lbK*dUTz0NE42Y6(*StID+$K!dK30;@Q1D(l zfTF=jp#Q0)MBJJi*o;s|^mLh1=TtbI?+pIRa@uZIh{M!g{42#E z8?ka4G=TmDgDm4ySSd^B7Vab~-sEo3D*+c`IPhA@`BCf_RZjvzw*D1|DIPq z6+PtEE0 z5E3&cC#`7xy%{(=DtFww+^pIvxWwTJA$jsIY$bU1wdpOh_|U@9A~KIZlDG#K_3yO8 zfFg*QNvHD`0l7mZuS-H$`IkWdr%@NWP)Qwx5sCaGTut`&?zp)HD*?ckS%`=e8{8Z2zI~6$aw?gXqc^c3=k z!A6nOiAfSJl5a!X{3AE1o=|Ggh`z0;?a=+@bLwsu5`J@&Br8t`*PSn1mq5R92TQ-_ z2F2)?!$Ka2WAuATppEq?; zH0(P9#RGQBPJF~}M}O0&c%TuP7zow#B^-3fwFDO2rBPJln}ma1BNm{c;=pL=J|zXP ziww%z{b5y@%fO)lkS4h4)4rKtp#c+;2-S8O4K0-6h_kS@)8D)e z1>JkS>1l8YM_Iv6a|Ym$oitSw%MoM4-8BzC2(GYTU#3b5AMDVt)BquaSKkV>a;vb} zMFXA#O2{a|<<)YpNR2S!Vt}0z8Njb``)y24u6JW?6KVT0ocBIbqtE2zitNO|UFZV; z7CenH^|PixPTZ}8iQ z0c0(l)r$x(&Rnd$NzhNtAb#DWc!)#$CH63E-d{guI2Ed%G9Z8N5hfFdKxuPmT%zc5 zSzYgrm_nPQE7+j;Tv)OB&4eGKoe8*);C+`bz6fwX@4hM7stGr;_e*Xy`Lz}LAo{Vh z`g+0KGL^iklI(ook?Z8+@OST6;11Hpm4VO=C8Qr>IE2#oWx5_RXsa{)Q+eTv&TUv# zFQNkq76KJueBT3`PJsZT3(k+pZQ!C3a1pMs{^iMluQ7?e{~HU&`Fn%`fu(qP@h@Df z@5S{u)0b-rQt}6rV6&VdD~o zjnytT)&LthETym^%mRKy#g&4Mr;jq&h;iEHw!(cosqwv1i(jBQ{Ls9D)J<3u2mL;w zTx-nzM2JeN$0SUvqynNEu1SJYhPOS!7M8`W1?H+R1NXkOVPmj9KtR>z+6td6~T1*>6P z3ay)0zp=cq?=pPZWOeMzU7|RT^!zoyRK#CCAkVfiJDtrK+!QmB*CZqRXWJ@;+ zLmjub4+2H15Zg!NU=pm}o62cKv~wCh47+_@cEQ?)jvGDILY-aywa3CB?7&7WD;38$ zB8FsF;Hz*5=P7Wrj#7%g6<0?8NuA*QEzRHLa75RQk5P*7T zIBKMPRm&O=myP5Vrjo(#E@vHjjj&WNm5ez7beRBcqA3!mzx>lW6o2KCzjDZ5IY3FF zp$D+;rN>@{b<(5%e(90r(gVmRQ-U7Og>Xesan|ka*?8B#pu=tu>_Ux`2FL`%Iz(ma zPx3&93OcZr3I>*dNl46Ov>P;9GMvv4A&&mlnQ%Nh$*H3r1@_AgQcys&5kPJMEU@z2vCl9ZQ zPGuB9@WF=+XNSfdeheZ$E#i|PqdxGP^Jo1Xp9UdrgBhye-hShc97*&}I&9>;V(#T~ z#_{cg9|8L^1V%RTKWIaogjkMY!!-KoC^@}|HI1s@v(4Z1Jf6xh?c|@f22VKZwd+Pq0vCz6;jns zsFk5x8n@IQquBgHsd^APIS6ciLu%wRAqxZVkcyH7p5G0}&W}Jt7HABvk-2)s^vF)8 zf8S)ly4q83WQ2%cL^ZyE`uNriIA^|LSG`> ztM0?}HV1A+ZBj|&E^=C2Nhw68E{Pn6?gWaL)gDn=gySe5U0D{|7}^*4FWwIAj(&k( zk$+2vVOq)mtTu~1&v62fU+Or>7lsQsdX%G355ubWu^i4DR|xAaP|5F9GT=&i`IP!q zJs2E(f#P5&KeTiQ+Jth4*HelpR(liM*)r=x4Ei%xg7WD8X%b%}jRzo@RC}j4ydZ;OJNxW^ z?l-(J;YJl&m~c(y0de0d1#JkIjV z1*7GXxV=~RGxuSodXGlW{*0V>@%R&nh9jXe&l!Ibc=Y7EFM`y`_5(O6x(Q%72M9L} zeptZ<|G_z=uwIlF(WV1q2cNr+*gm6Zb`;gozn<+ErNv7m-cf`vBJZy%`s{8y6K&%vo% ze+`km8r(048sF#-kR1Bg37F?1HwbQpZGvm|06RF}W;0w8qk$dvkVKjp_Peq^_b zS^{}TKm{I&|ND*YaJX#+i(2ubvHjj$K4b^C_QK2lE<`2lXD+CnFJU8K!Bx+7??g9x zbz~Z;XlMH!r6bugxSuU!zii8xygs2dxU;Z5k``Q*4nQ);0*!}{9r@&G~bc<>7J)1ae6e{YYbq4;4OIA#Vv?$zf@{K_2Lu;=$>?iw{d5MM8h&jGEZ07)lAjZOs@UMxen}cVm5X`DP?>tLS?dEDkq^b z=dDXbEiY8bE0P#eN$S;q3bST2KRj6kBSiLaygW~ygDbXdGR{+7GyX!Xb2yr-p2kIJ zpuu~_R**yKCrE*%@ZBckM$^g+9)(-Hc|0gOXh8kG`f(p(NEco19IN0uDh5|Fc%Tt* znj9ixrxG5i8512{lMf$%0q0tSAGV{)+E3YcwC#aJvLbd;f%dVvbuCK3;PyW(xV;^_ z=4t^%Cl3C2;$p$kBa$S@?{F%^;Esu8=^C;$R7_)Dy|50BNaLXgP3!zkpUDfo;1@>$ zwa9OMYL{Nr8$GnNCH-g~295|)_)WcHcaPuZscV5S{PGl%MFB8z40u+E zfVNU03K(&pFN$0ZX|~*>?Pu$Cy$kZ%rBB2_aQQ??oSCKatUZ?CPw^Um^DgGar5NbC zv|x`omcB7A9>6szh)3+f3}>g6+Qrzq%o`QIJK<)Yp(Kc-^ZpuZK+me#_X_Nd9$63n!zWX}=%x0l}=A9FW-7kqq-IHA|C=m~Q&d|1-Px8Y-Rg0=2hxAXXgf{#{} zM6&je54j*Z-lqg7fDd_K6OY&=e_#;Zrg^@E>rWl_ahVFgc30|p!7e- z{m+EwQ0~cbf2qsF=yqUQ{hsIik90&|$N4P_&CwEIF@U+$-#m>F6m;>jYjYJzmrT0_ z_w5J9VW}`WfDvQt)YQ7;(Ih~`R9G!m{3Bq(v7&SFe+9ZMnPo!ue~$Zb!mG&nSPa_Lvgaz4lX5Xg-_56rMCT++H3J@Y?W9@l_o>NdT z6K*e~BXlprib_zd`P8JA*d&?b#VQGJi6w3cEL)@UE~LhU+?qM9z8%he5<%a4*V8kgwwJ zAzytyN|djk{N{Ve*YQ$_2y9sy!}0#*>ydxN$=Bti=SmSbFdVpQ@QW9VeEmuiC0}J& z`xU$tIWGwh>s0b}399kP*A`(#m-Fs9H&MPqE#%Pf;C`xkBU=+$&Ny@-5k^9Tw*n1x zgnkSU-t?gWZshAImW1*$SrcUIW#q;pjf0V`#lQX@vh^_5)vNVH2P<3GyCuGtY`yfS zc-cx5s7d!$`Jz}nCR?t++~fJ|$`ua`>?wj5Cd+zV_maQVtNSd zDYHORanML3`^l)>wy(9o1F!612Xt8iLQi;C7sj0!9S5%-u>;ld@H#*CL6X`bNhDH+ z6&Bx)?B_XZNc= z`h;>^)Y7K8#$C$IKBM>I05?3w_Nf&<`J+;VEs`BMBDa&-Rr`UkxRn9KA%YXoI$~8= zi;q!B{rFqpV~Roww+f_Tv5Eq)%(!u#{zw71(>o~Xuw{Sj~a;7B6WVf2T$#7%AqujwnH$OtZ!{=oU)TS&Yov^oV6n&-hCF-U-Yq2MUB+MLma=+k;zCgS}7>mMslzY01Y^IP;^;UT(e=+u+%)1Lkyr;fpw zSM>p3?yVnR9^klZ6keVWp!+DG4X=K8aC$Hx44BJ+-cd?Ftmgl2zSp)hO$jdpCXQ>u zzPe3G7;scF21E>lVJfJ)42qLt;{-#~xZL-_8!>yw$W=-7IcLo<;lAZ6c}peJ zy8qD~nL+N0=||hWkNrL}-M8Jx?usa;aW3yg?uXdTqS8cQ+dq9LI3hfF%0_m39_5Z+ zg~aOY!JVyS3~`}N5v_+pt)h_H z!e~ivi4krIFO$M_nv*WX%L@CtHY8!viw=TG+lUL}7BjR#j-k zr|6ST>si98k^h1@Z_%pp0G?OE`6J-pE_Jz;Y#nLXAy9AD8nvu;z%m*)~QWl1zQor3oUIdR=^cU*^5dZj0dFNl;B5$o_&HFY!;EyP8 zMH&Fg1&`W5L9^0h4`BYFUOx9X)^mZ@C+>K9$f=r{084&(_=rGg^{8%a%FzLu3O<2q z@U}P)cfMJHU&2?iD1YP}tm`4B)e3xBrh+nHE=nf@^gKp_(RV;2C<#4CT=RPsqv(vw zKS&~khgZA@{xj1dD1eLItkgYCU)7z7EJCi(n|bYMi>9bkQho0hcx?`UH!LS82;P^H zMn+?FE+nrBP@sg=8(lyXloGKZg5k{f*OT$JLTVNFU{xI$|63f<{agZ;2npYuZjvo?h`%2$KLM96*iiS9n|;<7MB#fm(Snu z`-o`a*YGSsIye?LFG^69jEgOlk|zL05(X0O0VI>FhOUeBm1=Z#b_=76qGS~9sEprQ z28h6(Z79G$K9dss<1@*@KR%QC{Nr=GJmFbU%BT#HDt$XV)GE+6QxP1I9O)DF2PVolq9zjAZH=TUd8ww_G7J9J1{VdL?*TSV`O1)CWp-c zOIBE6fpS}8u1le1vzH4}x#ko7*lGHK=iQ!X@s0>2-e&-9{Nr<$c?QOrhbEriDZ>2b z5nWat2vKwwsOz+1y}KRD`K5Qsr4}r%SJhNdYOgR-D}sz=_oaE|l-keHo|4)e4tos> zLRdx99 zDAoKUuDaBtJa6M68#dY3XlRPNe`9XpB3Z5jrkQ=i{74wa#q zp1H;w!?iQNo<`SA&D4MmoUexvsh~c)4l$B-iPIIRkliAHLTCvk9Rkr$210x%FJZ%bmdwd$o+o8_5%<)<^rw zdT$Kuu_NY7xC8YsqEs2;JpPBTz@mE&#_@u3PQfn6;)8&i;|hdZH=?<64AbllSOXUT z?(ut6V;a76;wcc8NuF|e(2b8G19JxN$4>r>Fs0ZFBc?q#@c0K<#m{?Z*?_{G88fIc z1Qd&kF~u4S!G>Tz+{*x~C6I?z+S&tEqedtu;aoFPdQ%hCbsav&qIo46Duw{G4U#gOi_fjuuDl{6mW?iPF*tKE5X zDCb=4WTlO!oDdq#NXf~VH_gL6Q$U3a>Vuk&dF60GW+mV!GrA*`66nrh- z=WlLC-Lg!33L7c-psXOaFndiPbv-Uy_CNG%<_=M!Wq1hN=NyBLGp@jBrTgD3HffNF z?C`x5%v=cpZJ@4RB>2uHqOmp06Tug=eTcM)xyg2NFq8Bdj;5qD^V*m~q(x*Jme=Da z_9?8CS!OWXV*Exwi5ltND*#El_X1%<_dtG4gjsZ>om+^)4I`rS&DLG81%Jio6=BH&>ap$}NAO{mskxz={7A?!-Tid`65-oxC>r0=fyg(ps&FHc=>KBJyaF zCwjM<`gN#niF8+!J#rav_%`2Q(E(~w-{#9uyZ8&g{Sdxb_7Z`!x2feXTxe%6A+Y4_ ziHW?u(y|-0m7bp%ZhhS zxkc1GJQ>}ei-#zN7ERz2poHoIwb{Oq&-#FRMFN;QA_wM>Bv9RpCqp2#BKo)$UZU7i zlK=qbupaK}^(z3q*U@sbC!~&SNry)Oq{O|*4IbA5rC|3c*38jG^ZoS!avzPSFEJnRk4zFb!TCDW}DQh1|i{j8`;IsJfT_$gQkt9 z9_$H;9M5*R{K@wH+=Zk|PKY(uOxpv90)gN(0udE`KAgF6g=_IKAm&m4t`qP{dwNi$ zO`(o!t3?M*TWTxH=H|OsK)9Y9D9!vvnn5sqrfMd(1}iWG2kzla2-%N0* zf8>AY8hSetLxZ;+2;D;aKS<$tqQ>#V|KyZ5tYjO&Bd%vjI$Mt+r>hG~At77&9^K0U zC{(2!ImzTAeq*Vv_=Tl#49_cvyCQve)5UN&=x zv&T6(BdHUUNh;XB$9@s# z#7J-8v^?~CLTS&Cex?~|x)7Y~>N>kJaZC0_%Wh0n-PA+j;&-OpEXFLpoAkBb!=?>( zQ~IG*;|Ca15T{C)Cb)nHFt#|?C_0Ok8P*ajjo*T6u-Ytk7QY?#YJZkM+1190MiHbv z>lqm~wHvD{`j?f}vog>7m2~YxBWMzT;#Tt3GpZ8lCb}jN7%qTm6o~ENC!v6m1&rk& z1d;P$VawDI3A{?7C*&1m=GYLaQeL}5q-EJe>YZe6WwuK>L{g=M4rYjyP%f;?;fi5* zS%iw88KBBSA}*0X$&|eAye8WZpwqq&*~&vZB2QsEVIVA%W6)CUr6{M*p?5?%Ie36_ zDi3|^D!FZM3BfsNV<;vrkehlG+@zaOUwP;=xJgP|^Lr(g^$iUjkABkKjqM;` z4)6zSh&Px&kx2=2;zyhn8hI;r384So+ZH}QW8|8^=FKoHAEk^LW@<1 zb)E#XGlOq=%zfRDG1zBEVDY!t#VkG?OXpmmfkyIsjJGKK85(}I;^l8oDcJc|ahPwM zv`5dhU4Nwe5)Jb7vCzIiXhV5uwOl_&?95>wft_~gt2@Vs@wcAZGGR+>%D-`)nux=4 zr(d`N2z(JQmOUs{Thj;5;YZ~%sTfEqyjSf|>JU1x$d<9um3{_v=x{kIS&v{*T*0HS zjn<>N$mu*E77em)tsIRygab+ak$h%w&RYuOxs>1*>8WXHhRA7fX)jhJ9SNydW~~97DNxv|4V)fdTuV;T0{`bH8fPiBR2Ic`UfW0&KsS& zc2suUcEO?$uic~UGC8wz51eFX@Nw!K3S4nS`q^M+1wp8|oO72%ltxE1x z$p)3YtCIY!2tx*=5{C55-<0Ncs>z$zs0bQ%EJnAi&|EcJis0is{&4Ag z0r%J(jB~+DMs0{g)R%R}icoW#h`pIdhE~SP8#S%r32`5bHU27&ry5e;9@{HYz5--J zAZ38pOt-Yk8`scnK3vxUu_$z^=Myv~v~VOD2(@}?U1A23!deV@cC#iEdURKwSFxpP zD;&Rye7tE!`C)_+_EaVk8RX)IDl9Op_H=HPTf#f_T|y~pmo7+%(Z8^P4js0gH#N~~ zup7i}f-h=u-HVQ(CzLr6FcEfV=z_M`W)r-8w z0)m+N+}$xNp#sF1j#N%WN8~!_5G~Y`Bp-!(`x8nK+fik74fZjxPSZ~lEyIbnwy#ji zNTe*16{~8XTh-%Il|qpmwcz~cNRfd{{|3%3fG6Yz*kk-H_YKTs_u{v_!n76YoeAV8 zXYT?kz*`m)x&Y?oT+q$~XwTmj(|*9a^HyxhA-q&8EWt=w4J!KsuHr) zjlgp`nl8;qNqHOJphDBnDr?wXk4OK*g?OuD`(>%0Cz(=sRff9!z~w+ zSF;#(xDm!u|u<<6-Dx9FzFfIMc<^ zcNOUZmuxhkUZI z9C_KUxZAEdWb2+jtmz%=Lm?sL0)l#`w5pB;)9qi_nAdDiSubN{vbmNvtp)Gc!YH#7HU7Jy}BQpnPl5n^)o8hsr*1)>9qY#NlONm zWDZqQ7E!WTn#RHlNnysAVy35!X~Xh4NS4vOwX-R@gN)fYH$NIPKYHY`vzqPkW~vNyG-VgauY;W*fh`np~lKx(a_l zuD7ypSZLBEeRS2@7gz@WExr~(iEvHws_b;!^B&Yw71i{>U^gs#D4*G z%woax82VaqQRhA)eVz%iB2*^RU+f!8$+9mM-N%F&3fsQ^V-2tVs+Ekaw5=K!n;(oQ zg|lD!9Ys&ii_DYRl67@{%*-gc>WH*S;EA!2TCn~lQk`Kmh1=-HBohX008GqpWD@5K zvd@pT)3lC*v+UMe38S75l6icOPk4%H)%I0OKFZxY4=bS*e$a%CLU=nO`yd;b6pOrq zbE%x8`iOUzrIIHy{@#}~6_+~X(_}j)ekq1dWNMO69 zZg@cyu^FW#`u|uo|1ILD^!NdWDrcHHMEu@*PN_inVoIU;7e1lJE3zfW3hA9W4I9Bj zT&iwAM$QcDEm2P>y}?x>dP|fVWO3{gllV7N4cNL;St%h)NysIbNsS-0On39gR!DHh zN`shmc|=UJoibZ>N&7$>iC+3ZO%IcOebJYciV(ENRK&x~X8SU4j;RRx-y=OkIUQ%G zaHcc#&gcB*q#PoGa7`DOy}usx#KsFU-np9Gkn}th?~tdrR`T^k zgBrt!vu}FQ)gwGIWvhJ4o_(WN#^+FyB-BJ=Y<)u63aRGXcWIBtBL4$Qi_jw`D)D3O z-lnw3$zxA@nx>gb*8?-S4SHafL7i;eDCIusWyu(!)u=;Kz&a%oCPtjA%8<1ntdx}M z7IH+=KpbcLJ3zY)o{bx^#qf{uS_KWfjMomQ=hU#HkZwX~ZeBi9jMpTEcSx}KM^BNU z@sH0mJpAKxn>?xKIi6<<5dWBGt30V^$Md|?^Ss+UL${R(JdJvqVS1h=zjcTd5y1-i zJyXri!Rr)Zg&QqsG)fS|gsrI4qfl=D+ECVP5YgT{iY#VU6j2m#J(nW4$lxKFvJd-6 zNv7u&0S4KJy$sBDNjSZeF55(L;Q--0X_;#uOz1}%h$*)Zuv*{v>xIY+IN{^saJrII z=YiAk6TS@AoZ`?LT(j7eBMi+`YV6Fl8;?QezRG{3a#Pp=J2_W3@st^vEeT*PDLhl~ z8OPLc76fO-U;3LR)9>w9U!2t7(HELyjlK{TqP`fS>#CxLfWFx5e`te< zhlm*%wWq##o6>IkZu4t>amM{IeQ{(YslMnXuU+9z`AT z^b}F@fpP11(ii`#^y-UEZPXY3rbkGOZ`B!R{zn5GuQU1|r${HmR!xDG>3NF4qJQZo z0P#7_swIk8xzuU-lx8K>)0KwVzed@bxnGSkx-q6vA~%X}w?1+_heR$>bu%8NqLfU$ z0&@=guV{~%`y{!31(ZmqM~Upm|M=7YZv8=DC1zo#tC`L3?|($G&R%(z2kn0>c8d&t zI$ivaM zhiU1qm|&z^ybAbxG@tyV^`<}I|4F+QT)EX_?>qn1Q@#PbEC20Z8dM#$eA}KPUil7Z zpZOa|D#i+5Q*8k`%DQ9!Q&Q{R^to<&WqlU9EB#nmpQ9hc+1qBz03<_DF$P|YJuer} zY~U(3u(FSdo@ktd=evig9HEQR|$li{dq4v3=KFNkrqTb409C?Hdyd zk;&9*cINtw{VKyE?bQMrRWPy#1Eu}JlEZu9$Vk_l?AExpm?C#Y#;&W8d?(yev&E>QPbQ?2UeXz)| zOW)Wxz6QJhXUf$vql?zoE(AGpfpfMP#Nppo_X_NwXd%&yznMIoXTpykZG}hdv_d2D zc)olp>RVY>-1Wercu3DHO(`O6nM+#88A?;Yj{l{6pt6qt~+6ep3co4PJ_b{vlm;kis846*kfMhgIO% z8~>>MH^;fh)w6oEAgUxp7p$kopG3{nL)}-K_FZ+4qN@8ilpn;#@G}K>6p~|=+GpMM z(z!H_MC*tu+c({(mH(A7pt$-1#K<>@hVn1Ob5G^JCSvrO9^8d-MTZBk%l>JQ6jT1< zsiDTLR9rp#)#@o?sF?y#!`Wv&u9W{{qVZ-5cvi?&{)EuebW7BL<|}(P7hf>it*LSG z&J(-s%s<}DG8s75F!Q}%(il`^&=EXLS}-T`S&({z+KQa;;Flz4O%@MyknuL+7K#rm z;rxvu?t(FU6Ljs(@Oz}-8`Qf2J1C|GYlKfE+$)2wsR_xK$V;RYXjh4u=XugKJ=%#a zw%jVjbS>@GI}EaMHVyALv0GcEAmaPzfDECi>bXutI4Yt10Jps9t;_TjPjtR`K_*}#)VTCikwPg zLvxM%s^iQ*Au)es6E&rs`J=Q1qeK~^iOh1Iow&6-a+k70?01j;IYV}eM*j457@#_{ ziSrgK-1kJxhoJVxyc(tw?|WY9<1DFuuF`kV$D-E&D)lASlalwqKVs>_v&32n2XH3{ zp~^upR`Cd;t5=-K%&-zvsM1&b$agV zxCU34e1J=jtyFBtov*-ILO3udPN=vGuHXX;8v!2TDTtV?RIo}`4RZA`9Y8z!i%CNkj1 z)Qs}_rsh76KvA~Woy-cP!jNE9(+Qw!KGAeyHZ}5AZK@(<^HyB^673|TApGDvemTt- z@~AUFWjI?47D5Meo#*f2m=>psQ@em^3@YXL526BEq9$^fNS}_1+rF-4x<*^V;sJCM z)+`HshDIz^=gg5lxz2@Bz0@pin83PbM@Xym0F6}186%OyAh!XsOcmJ*7_1N+v$mQ5 z_-gnsWtnH{F<9(R)_ zfRomEr;1)@fy|hl+KcVGQ^2Em!uDOcSOQj;!#e)a0=LVPdhYZ*cX^(v*ZKFI!}F-$ zb-e)CPSyd;?3Q%4cBx`}76_MR>+?row;jpnTAz&{8S4`h3?fvD2?v|_d3$`pr%b_^ zBSWi)B1O(|En+5;su!19l)!~TlvvBoV|Gj=%}f-C209rMjLEYi({+HvmE^m0J*@&G z^% zMQpt%V!-F(pO_VWGn9^d!lU15vomDsfx-iGqesiiC6S)seJ(4?cV;}PFkDEGph)CI zEprxNSgGGf*+w|?B%9vaqtvE|^g|_y|D>s9*2~RRzPx*o6&fWt&XT*K*03kStfr68 z=luLt5RCVS%Am+&e@pY)6}?1g8+Npl5TUs`f~-?;aW&qH0;@3(6V-zRPh+W2^p=L&|~oIA;ZB%ICyBTryWlyt+--3_4iOD3$^rRj^bg>0LzyBx5+Bk|C!kLGB&LLcOZ%Hr>$+tMIGI*1G?u#QWB-S$%^S&&I2+<>8JxeSDW-s}Y z#=)H?tCI19ME2stw@Sx1)cX4$afQr9;TSSgOwas^nyJ3@csmGn~1#g@J!HQ7F9%fr2WO zD4mND@La6>_D&Rveadi-;|4^~4g{ey4P56EtNB8GoB|{1%)BC|;NVUI(XhM=iA)-C z2-^26q8h}eYO+9m1qhwed+t!kuZgx0W>qVeq#meN+xNzQH0`F|XlMrpQ5py|sRyI< z9LT3_j!{iq)C8*SHT{RM8>;1NJ}8v52h~=3iWsU@AS>=aXeQeIO>(a=5H}G+aD#V( z=i!#6TfBIOGeQgsrl|Pz4`3f!PydLCgVVvfKpnWFS`v!B3w5eNoxA=WM;(Dx#tT1J zxUG)dM3)xrE66nMUEnmeT=+11n1mOcledfiuyZby+No~nv8Vl6td!df_O)S0r{HRC zUOQ7LH%SQ!f4llx4-lZb_&Ov;8v84oXh5G3T4TKhZ2}I-&INs_+#HTc;A$u(KSOfa z*-J)JcxEsY25RDtfE3kk2weNQ=4@;|nu!U~YlfJ%&KaT`pf*+0N62veztqSis8G*O zwUcz9uilFWujgSZUfy*td#l0OHOLEi2ndcYna&GRxZ2_##JC!l$R~A@7KXzu)Ot;; z9;l*jQ{McYSi`3!*cdo1i_ZCi1n5@6Ai|9?vtFtKaa3liQ4hH__8XRyC=hN_|JQ=7 z?^%i2a;ZCjN}a#lt1#3hJu?G*@r}YVU7@4{#>fot%~%Hzfj8<|4pc*@h%r3nI|Cn6 zI4EI9VKx{$I_Qqd*iHkef(hJ*F6S?jwzH%?#QWh6K*-G@0w!{sSo8gWRy$Tn2NP9N|H3x8mx}yLpIPt$dKYmHaRU*Th}Myc5AlwWr7AL6cVn zsHPmPcqd0+yIUP;XCMcN5(E?D$Ko^r%!9l8|E9cl=Zt<{xK;!b*$> z_=IJNTkbLGVO547L z#Z&?OSSufu%tZbPo#mW02imJVUVHVpZ$M7QNp^pcJ2nAl!tsxutKfB~rrygjloBQl z87ZABdtk}#pfzws*Ry!_q>fnhD?vCc3VsDKQOVg5eS>D*ZvlJ-bh*c$bp8Fis5k!C z`TIgt5NxLqFBTC|#Fm&%a{vDH4O-@4Ba{sRGF^M|f8yV-{~sgGrSR`>{I}xe3Q`5g z*8cr&f!8R|nXUp|%=gB>|LA$pqbAjyNLPut5^E zxWhM{!#w)^!P{;mmavbo}E58n!L77*A_<;+%zsaw*@g!M+LzlJhEVvevj}JrdBS-y=y#gp+0RjM}<&=coxt_3}}{g2S|r8dxWcu#uDdi`I~9}VvK zf7p8y@TjV6Z8(7xL?oV|L?eP07&KATps0zURxrp36dD`@jhc2qy2Wc+5{Wiopb|(~ z9Kf-0rfpks_!K7waYz6|09z52K~zv2PFb{~s7y-!_g#CRQ>QWjdhh+7``_owqnuM` zPiw8croHwA&u=U>5dMK9bPhO5O%;$emc&xAA~lR?HBK$lGYIe&M4E9XpmiaupbZ6v z=bDy`iJ*_@6-cDdUKCb(Ka)Cd4iU(&FHckLSY{Kp0Y6G(U1svORD|p?{_{A9RV)DL zwh_8*cGbI@$WV0{$ayz}h@UrtV}YBg~Ar(;i=U)l9FdH&{{#g!inO+=EHtol3wBG8_Hr?Ja> z)ovx|O>~7y@gQx*iCESlk+wL4$@fHalsyFMM;y)3ioLg0{Gqp^ zKiwk6zi06YdoNG4AHZ+%zf9+)*m)^&UP_&pG0sbw^HQl^+HlQWR^!MHKjtAf1*eKn z2p|QBa#kz9bu>CaAIWSUjqbh5p}tmA+N}yCx>X>XtBroZntBxngj;3jN*f$@0DwCA zp{X!=8HuyhKKemWbdi^$aefwk%)6bTk1=i?i{Usl9{zDg=_#I-4nI{pn#@r$nB25V zSUS?f{D>=$d`0qrK32DOB5g>dJ5CeAq$n8S+@zR~+P0LM8s7ND(7ldJ3ia)b&xLMr zgp)l8L;c2g`xR{q7Q=4cgX7F&lxAU1W(2No3k!0?dYAQcR+iN%~3JQ`PJyonX` zY7C*h1FdDCR=k5Zh>Tlgx>E#_noC35h~{w1d!8*bkKkgcC>^2#k%cakm(4+@rS`M; zfyhtBiQF1}d;SlhuW+S9T+!$Iq-4cgznPK)ogxk;>l{kA zv3PLmt_r1i3UKH!v>0DiDlW9Pc4RD3GRg12FvUh zYOyk{8G_@lRAI^Cu|w#452qa}F|Cw?X##{;v}XTe6UsORVWuL(VWFJ;6&N5yTF2_D zrEx6;3*{XkI2Nk>?ACy42cXCSGB~J)sghq}ALiX`vC<|aF^ki;iM{A4C$#}HrQL1i(z{9E^zJTaSu8!|KQhK#)4OKscEw5Yk*w7 z&TGhKX=(Dnf=>ib$DM0NQdXN`+Hw&Pi6;|I0E<4+U}w7ik6-s1YYZ*RU20#hVDS@{ zzk(*NH}BQ=B0t|#e%ic`Qb5pJRwkwQ^zuK$a0mV5ikd zF&8Qt)mNe|VLvW^E@Z=80nm#tU_+@2Y&h+5en2GwhF@x>0X0u0%AWI7iVgrM)9&GI z76w;0D~47#`y{n3K#{TAa5H%c7Zs|z&oQh62VjsX;d;J7V_cGT_RmYsHEKA@;jgnW zCcS3~{;82AVuTEWcBXh-XPQDH*W>#34-QYWLEPcRVLStcm~WjfXR~2IXjHEtR!}Mm zXAFc#35;!`%Q-l-n`xiyV?j;jQiZM}6(tre!TbfY02Ne`gIuaz;zGrN=!IGZaCr~b z#EB}v6`|FPzGEp|Q^k?w^0@%fk*4@nnwY9&0@Y{yBj6FKZJ7cK-Qpvzb(#mIPV3zw zjR*y3T3e>H2@+U`EEzqTm9~}3er1_R=X2`OaV7-g2TabikcT?PX4{m9X2%3l->W5G zSU-xz1e{_M-5+-)3f_p@OvS%J3Wirp#=|HlNMP9Ua-8W>W5#w$gtI7;J?n&??Kess zegj`sfFYbywVa@M+%(yT;>rN3wNw~GTu2hnDO{M)qaY(cw(Ng7%j|rSSQpHBNvFd`nNp(W>z;4wU45uqmP zss*4pKS-v-86G=FN+zC<;#jX{U_Jht1D2?b);q{umQdm zBEgKdpwCe*AZ^p<{ZStJRDUBPq%}xF-#KkUG1-O;02QsGU&AQTB2rp#BiGjymN|Gw zO|ZNkfo8}|GOejt;&xE6t52MW+_@FUQ#}sR>apU!HY-HLaTB|YttGVN5{STFeGTEz zz@Ej?OsmxX!=+74(TPmf@T1biTJ7uz#QRtg?^ee*&yz(aZxwLD+UvCR6O}fyM*I<& zg?u7tN>7N660c=k0c}3vDBda^x)L>U$JfCHq0P9Tac5QeW+YBL5r+M*15SWg=pZ?2 zU5(O8pc4IDicTKakeSFJVVh#-rNntDbza6eFJ;b4rFu~gs`E}>b>3$=@6g>UmeIJ0*Z1R9^ffaWU;$(KqUr z^9a^z`H@H-JMxBT?n}bx(^J5!9$$v9*P5RF89T`qvOnW^8p_FAYsHs%HmgcBsD6^i zM1>_T-k{VZzNIMV6 z6nM^36IWo@T+GEoD2_3zc9ewbW2l;MoD08$+a37h&pOy*)EvYjV4-Yq8~?caFBk7> z9oaSy%`;wBy#xnkFj|?yhWoCF9qz!w60ZJTZ-#aqV}yR9)d4J}Ab4>P7y&l%Mt#cr{1Q$1AzP-mPAmllb)a~hMeTWh*w-xO75 z=`|Wcc3w?>odDuk2R-sYXDP~q%XprdOmWat%d~sS>I&TvR9FN_IzoN`(s)M*$75Rn zZia#PSG|?$lYD?u?5x2KfokuN6Z$~lxl97N;taj9^spEf^6TWwG{w&50l&4O>)R1#Wkm)D7?)DaT~WObA4G6k53O{ zZ3_0i>ejF>ZTf}ehtO^?&EtF%Wr41M_lJWjrFGPa(eejm9IidDB-`d9g@1g{^SlQ< z@22Oy*z;cEc`x<6kMX>hdEP6XcR<8Elu@Sh)-+}?FwP&BIt8H2bBVCJZWl%J><=$f&KE=@2%U*>&eWU0gE7dP z)=HC?)uMr=i>gpC`WbahxG`EPx`rJL)-H(-m!F9R`qo9)%LGH>XM5=)(VIc_ctt&) zQ;#RrBUe3kg`iqr);lB;^eHBtv_5@XEqTn8Zhuy-35Us4Yr~ahBBxL*QIzuV?7I=0 zzrs6WMp3xV#C1%Z&RiA5bREV*GloiiyXN4kFk{9U_))Ns@7%XLjhD=jc>?UTg&+ra zX3dkQHeDboEDgtPj!^?^)gcG}$YwMv{Np>V3jg@NUcJiuX3x9rdEe%F-|2aGH|wCD zRN%)yvKRA^oz#LvwVsCj!a8|PPaX4t%?J~@hV^^c>=><8g77f>s20}%6-Ii$^@kwt zXncmg^`M$BjG9ekzR2TJ*|6|G_`S$lybupoDOJZA@og;5XUKC{I7GL&C=w#47DXbI zvZBb{6g&zql&NFroEs?o04~Yy_@UD8dE{1c(xFxrcv$VGiicQP#Md2wnpT7jaFRit ziFLO~23R)03UH?#hV>KJXhcex5nTsXm(if46Bw+>3(X=vVfccV$@L2ibfA2Io4hcZ zHD!O-`}$rlv*$`q1J{z8$v^P5N?yO`;KPqC`b`z>z<@PB-=4ul;iHJ+qv)SSj$RXb z2P4ynNiZ^#KnL@23g}7!LrgR`4`La>TviQ8$Iu2rW~XHfHZw(qL;`-L7m$`t#?3Ut zowL-%DWDrENYX509gq!nvKe_mk?2JsX5>``0%ROF(izhR3IN)>01M4V(W3D8*ku{a zS+1`wEb6(l$QqD|ot2XWs!}tIVUD}V(GCe;RqN(z*#LvyR zf+(za8EM95P0(x(p3yU4ZG+)=aM1{AL5qoJEOR(tEQo2PFnJku1t!+v1W98Uw}RVJ z?Zy4M`cZ$?Och>CEq)=176C3w1@AYlWeYCf zls`w|fVLCg%&Ey9Gzs7*u9p;e^?YVF;q?<<{Nv01PLb9AF4x(TAY6)0&%;3^s+u@d3hC;82=(^t1lA}sN7gKgpWw)PyXSxG5)&RE%ksZRVSq? zFqEp|t1dzP$3JHeqLsGst@FWSG{QnxbPklovTSfFqKxRXRA#p`@)e~rW3MJA{F0{= zqGM?sEnnosUZ{_rn}mO$0_?oAoIG8bhZUnsK}pnZFLo<<3J!q%>SGLi6EWBA~`_V3Zq&KyER8>y{QiIsd<^W+yd z8YHRIQk7aFkA=l}1g$DQ#IKaQ-WlPdZW~jCkY>(DW)7|+-C)-5!gZvpOsjMMBJ2&A z@sxP*VwVSiAoP`JVeB2!?JlIMIcB3SdWJBBXG!DBs|Y^-05jPRyXVQCX5=D2R&|^5 zIxirPg(7+`)g=rqigyjE4XY)?PHqW;mQgf%NmZ~|O7ectY-!sa`vBMgd7x4tfSs@6 z3;yUk)T&o`r%K}=zt2{$@;=A&KG*X;&-1>}^Iqq?yB^Lx+T(dSi)nOM=kN*2SJH{7 z!Vg+}R_<{kK6*;YRbj*zxj2a4i%@EC(vVT}5niY`ag|_*AI-SiAeF`4hI@4-X83N3 z4J>^n2pu^+A2sqey+6vwki$GP)$Wdrm4mT#F8{sqt6|-RXCe{l%gEi*&t!V7;baGD z+{ph$Up$2la`rP$E@RhnwxC9C6kRSKfNN6pP@0G^tq3cO`2N6V@t$ty% zmO3N8ju*++fWtvaMG;qihxtJW-2W)@W|2{ZEH9p}w2*2!vFMQ~8pO3*7jg&<9^Od|@keu=B;7pS zT^BBD2D|2vObe!{CQ5=w7*5;GVmwIUd%onXbqA9_;C@}gYD~H4kFR8k zK6ioUhQl5*Svp_rPfk{66T%hH-m{;?fi~m*9PkUAkRCf)% z+w;(c3HDsph%4UGij}p7wHw2F!?UOzBRz(oAk=>ze(;DLIf@M)VZaQ}<~J;KDtU!- z;%Ot~0he+Z)Oe@@9WXS~Z#CTjsG$^TUi<*1hS)c8U6X_T1+ppw7Y?H!?l|{20;ey( zfUwK;e>Fc>jQ2VLxW-QSQ*Hu|WIQZ6=ZW!OQ*jz#<=gckR|#jY;R0|5^n<2@MLQwU^@LY1yhHr zJ%MrK>Nj^V=C4U!jY!1VRq&>aP#3fV1lj=sK;EGRa-2hFY5^Do9U<0u=+ytO01#$jL%w_j^LWHNc zdK|4DN2tfl}W5k$zseq8sPy#zv&XKCP_wkoY)XIh zxGyeR%HM0IKOTBS$%}f-P>*TqQT(U<=nrG+e~*8A{RhqD$x+3Lz_--v|Bd$e{rCU( z+2f`)E>8c?9?OuaZA-1>>0fun<*8MB9DGpZX^?uHqaJ6fN7Cs1$Wtr!c+_Xw9{(e= z4SW3bb-%+Nk8H&rCmo^fv3+M8Nsn!XrT+Fj#~weCXpd_;wPBA3JRtP&0Z6gOOC85S zKjZcpk+iug{{A@JH!LPnk-lfuG9^nt5z5*|9|IvwhMhRoY2`70B;)&h02k@;10Iay zrXx9+UuR6afXU&8z7lz>LSgZ}BED9I-v!~_j6D-P#-16>_Jne-yjz8Gf|1^X|G~h}NqO>6w?+-i|H=qm3YV2J zmP$sj%7#XQKj9}roPeWBD&tInv#LUxiARc>u!vnEMX)Tn$c&N*SQOSG5^6uXM1^Fr zBvHbO_oxL4Ttu)D_#wn_JtL6PK{$48#^2aOC_aWQ+fo;yaAKYk{AEOWFt(o1x4Rw@ zW#rWbbpKB5%q`}bs0v2{oW+1iB^5tnGkUTW&unSv9* z+ivEQF)UA1o0E*d-Kjae(w)V@i7oojQJk2MP?;ZVgE-qQQAdP?6v`lJp1n}8!Sp7P zM>JQ0(xW&l%Cjp04fw{-JXY7E`L3ujT~h;#fLfylHgW%v0qt;uBP_=J*M!WxEf{mV zjnTI;6t`pdi2#409yhATTJ<>PkC5uK5(eyXd6syr&^ELc(ay05e`1V*$f^WdTe(sI z6J@DnTz&F?{nzcx{N2WMIW|oZhHMMsrt7&Uj8aZIMR8;R^H-{{_mTn<$ZzJa9eg4Bd1eWq;L&V^yf1NU%}IGlps z1r+vm-EpSo$IJtGi52tMZ{91k$}9z0wu89PadCP;zv=Ts1|pUP{WeedMQ=@pew)kR zmhYP<^nrFS9O`KNNZJ*T%1rPD@^H3GV=`DB1Lwq8IVl`T+m$EL+*#~(ea14Ucf&IG z=1vVCfi?LmA}lAWHk%rLMe2}~*je^umi0^xgQXR>tLQK!T1mH#5|5YC5*p^L=Ubwm zo#WMJwTu||UBNr5ais*<7jqAgG<_knyC}lJP%rDr--Rn`MXfuhN;$i~cs>_;sLafH z*9hqY$uB!Lne|QR@^`6u>p=Ek^18xEkGeA%iJwD03R-jhcno4hzMe(G z>QF1|?3cbfj=z|y*a2FM(n?N;w5HqL-c>9qmx@e3miZjL8@W>f^pL3iqVRgI*%Un; zxpO_bYnatJsVHXy=XNbw6cfqFI*ryWBLfdE?}BQim6(mjDCx8KjJUUwI!ayc+bzIC z!|n(JSmc4##4GX`J3R)1mN6|0)daD7VA@f50oASw=Gen>VnsVP z7C{z=^^6Tm-eS^%yoO2$V<{DD(A|t=X9)L-q2NxOy8rTQQNn3Q|^iqlbp z2Te+1eK9O1SsxvMFa&1tjrnRV8hK7Ns`@c{9My0nZRCR@;zRk^v7U}iD1|`RZ%%>U zZ z!tZh8@a3VS$UlSfJ}Pg3J@W$yRvdD!;aOZOlCyUr)>Ppd9@C5rfC2Sf z!xL=JWu%^)cxszf!=GYFRjqc8LaLWM;`UMe1-Sqtv^78!)%q`EzVGdmgGmFDZ^4N! z{20Q@u8NL!NO+;a_Z$+F?cO(SZL;U3f@2~BaQU*niOxPGM$rNnM$)$QRj06iKn)i5 zmHQ#L%YC1nF(hdozbyBCs$V0%h0Kbj9JNfae2exBW{DS(j&%^Rzfnxnew0VXmwbdX z<})pvwg8Vv+O4{!Q&dZLF%9?M&QSw75sGJNyU^$9=mdGm|DTO%V27AlZD|Pal$WgMjYare7nzJD3&J;_Mml z9O{Eh6!tAcI;i#U`-EDb$|K`lKEi2@Obh!~;1Tf+)y3sD!f?jps$B0rES`28A7S5e z$=OqKR$Pi2-cY%YP`OeiSK15AmA2;;B3OZ_wr?&zH2ADO!6Yb7hjlQDoyF1|4~eRK z0B%-nJs|&+e0Ds%5I;YN&xg97xq4(QK1ctcrl2?XV?CldFHIrV)SN?^ffpL1p(Bp= zHq@6X^Qr8uG+#o>5lpF2Dc4A)4sgGALCPCcy_TP$v#V17?2ziaX5kv9TJZ z#@&At^usMT0p48d2FL{ei70rlCcMQCyqsMxKgR=afFPt27=b+9zP!JJ5=P-UEH zot~Ew-u;tt4z8sp8BQWu`HJ@f;i z6S|d|gr=GH`O}*upx}p7>jmeXtA$kKF9J9p?D&pePim2 zl)+HKdL{*fQS)~#o~3}psGcIflFV>Q7J&n&XjsblCcIV2H}sYAulU0s_y0s%)dnr5 zP2wcsjP16RE|PY|sV zkb$V(@hOE{E^z~b45$D%`p51mH_j*vxS8m-;-&VTrGnd8#lVdV)Yx++g4=Z(w<{8H zBbo{L-SVH3H)5mtd#y&mPt;31^7ikm1jhR=JRo^9riO`fXe+vQENB3FqoVm|w*iAaZ2|wzC7eLwoNNX;&&ro1* zx&WjdsY#1%EMOa)|1E4oOVN^^v|s4D=K6LlVK>PqIC=$Ls$@cFC$KAhONdJWai+cF z84o`IY%XGkk_BS2IFzshR^@uycU&nXK8>(C_Dj_50obomfH%9PJ_!p@V3w= zo1a%;X0q2!k3!jTg@80?7_ij z|Ig8<^rbfFvu>2orz-ec=|g`5-9X<3vH@Op{0;P%xJB5=>hc$aNb4ctG?5MAG?5K* zn&19ag9s*|k_K1l&|yCX;wMAFRgS+QUeP}NjsKLrB>xu+|1W>JjqZEo4??)Xfa-wk z<$o1Fow2YDfYKB|^M@P|KN(X$;V`E)pV6p!n@Q+L`Z-4R|B+wlOPWY4?YhN&ykqxy zpI843+k~g(vf_^Fa(wJ%9!tYh#AJF`kQjDqQVvzJ({>NpQCC zH16n$`k<8E%_Me32VFSo-NK_J%HEmcB+3?^=tK#Mv>PG3`HTsP=^$e#SJy z!6RxC?5{EPZjQ-ATT3a^C6sBPqy391OaecQ5q`KvegRAhx|No3iMq>{1C3@&$R9}Z zEFp(h=2Q-dC58`Tu9lF$QlpoUf4tknPsPk#=JHdZX97RHCM+q7sQ0skydw&FmXKdA z1vx?FE+NmDCQHZ^C{ymaPb&C<3>Er&k2D}WtY0KIiBxUevldI zqe6@JN0+h%)|-xcD?X-Iu+FV8UZ2F@-c$bI7|KT}<)hSrsaUy_FVq#u0kdF^82QMGk-DhyqqA&;D!^2!I9yloALQx2B-)U{al9 zaGmLNHHpK`>5T#w!4Bb=Y5UVlgu2rTL0vfs8dN9~>YmE}2X#-t(X zU7|*Q3X1)-e?A+L_D^>`4=Pf$%vRHIa;$h800<|?Cbo`a^S-s;zS!XgX?h;H;TaDB zyzQrx3!Ff+){@RW&6&al_X@d%3%H!N!)P1=>F-;IwYxX8g1CKuxfQ}=gZAN}1D--0QihcZK9~C)g54Xcsg)_&c z!6dc2_k7STB{}wyz3vvldE0O=&J~Xnibp+t%h&zDbDj&&sSZ4Dqer4q>mJo8ILiZ= zeVGE_rbGZ*6r>Zpbm59GmarecN-eSR$KHn? zco+Y#vdhkeTD&1qAQIt&vGtBuA=xBMtPj!5R5O#@mY%#`h(>zZ8^0wfFcGe3)l|p* zLKEI0F@cgxm>tiR3v`xEE` zSAcO06+7{Dy_!=T$|x3-OaO;YGaEN z7*plEfy8*7<+I;9T4-Q@_ni`%5}s6W_2F=9Fxf8;ZCM?8_Y`?UR^J<3Jdq? zWj3@!70Q1S@C6Y7s1ZrBFXlW{8)PgaBEUgkC|q1I0+?2GeS~KCA4^xeSqutXWXw{eNu0z>yl)w zO{jSYpYYzUdSk^U#{58gcn@6(0~kh!&sD6+nVHk@QK&56BZ1x^4doABu3uEsv_2ey zaI+s+DmV6WtK}y2_m;!v*ChMGgmR>&sm5q}Mlhk>yZU;|r?I@zO8G1hYY}S)&Xdt( zv?J;0>km5CwH%K<&Wwrt1FZ7!Ri;G)@?!bc7CJYlYgtOQ|FO)Yj-hu&Vas66SMz5= z3Mt?);BZ!DQLmDB_$iZKm=KRI_N&*%Ks@o&sMnDToTJAbF2~q~X90n8J&d4rLNk7N zid84X>rrzl>KwoZ14xyYO?k0=dtcI%!T@jpo5p?XOPb>qU;={Sz9r*5cyY#STYI&!npAo%M1}iM& zp5T9AA+WpR5i4D|CWQ+MKaCxMlN@n=jN`e5K1;@O9d$m{q)s^0v0Xvc&XddG%;~i@ zkX~8Pf};?sFFJ_Gs?&rL4~biGtsa#k`#b?q4GOT7Ot;R%Ie4y`1E{V(@|rAT;o`@I zC>P9MjuW}5Qygu9!?3DYq2-J=u-tHOS7Ikhox;eFi*s_Sgor}t_dgbuss@*3W zH7jJ)st6N(jX$uUiK|1f!?k_ν|3rYemd%N8x)Iftp?v+et4lL!&CsB>PW(~V|o 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